diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..0386138a3 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,22 @@ +# The NiFi image only copies pyproject.toml and the nifi source tree. +# Keep the build context small and prevent unrelated repository content, +# credentials, and local development state from entering image layers. +** +!pyproject.toml +!uv.lock +!nifi/ +!nifi/** + +# Local NiFi runtime state. These files may contain environment-specific +# endpoints, identifiers, or other data and are not reproducible inputs. +nifi/conf/flow.json.gz +nifi/conf/archive/ + +# Development and operating-system artefacts within the included source tree. +nifi/**/__pycache__/ +nifi/**/*.py[cod] +nifi/**/.DS_Store +nifi/**/.pytest_cache/ +nifi/**/.ruff_cache/ +nifi/**/.mypy_cache/ +nifi/**/*.egg-info/ diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 306dc7dde..7e5fc93ed 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,17 +6,29 @@ updates: schedule: interval: "weekly" - # Keep Dockerfile base images (in repo root) up to date + # Keep the owned NiFi Dockerfile base image up to date. - package-ecosystem: "docker" - directory: "/" + directory: "/nifi" schedule: interval: "weekly" registries: - dockerhub + # Keep the root Python project and lock file up to date. + - package-ecosystem: "uv" + directory: "/" + schedule: + interval: "weekly" + + # Keep the documentation project and lock file up to date. + - package-ecosystem: "uv" + directory: "/docs" + schedule: + interval: "weekly" + registries: dockerhub: type: "docker-registry" url: "https://index.docker.io" username: "${{secrets.DOCKER_HUB_USERNAME}}" - password: "${{secrets.DOCKER_HUB_ACCESS_TOKEN}}" \ No newline at end of file + password: "${{secrets.DOCKER_HUB_ACCESS_TOKEN}}" diff --git a/.github/workflows/_docker_template.yml b/.github/workflows/_docker_template.yml index f8538302c..4494649d2 100644 --- a/.github/workflows/_docker_template.yml +++ b/.github/workflows/_docker_template.yml @@ -125,20 +125,40 @@ jobs: type=ref,event=branch,enable=${{ github.event_name != 'pull_request' }} type=sha,format=short - - name: Wait for Docker Hub to register images - run: sleep 60 - - name: Create multi-arch manifest shell: bash run: | set -euo pipefail + + wait_for_image() { + local image_ref="$1" + local attempt + + for attempt in {1..12}; do + if docker buildx imagetools inspect "$image_ref" >/dev/null 2>&1; then + echo "Available: ${image_ref}" + return 0 + fi + + if [[ "$attempt" -lt 12 ]]; then + echo "Waiting for ${image_ref} (${attempt}/12)..." + sleep 5 + fi + done + + echo "Timed out waiting for ${image_ref}" >&2 + return 1 + } + while IFS= read -r ref; do [[ -z "$ref" ]] && continue img="${ref%%:*}" tag="${ref#*:}" + wait_for_image "${img}:${tag}-amd64" + wait_for_image "${img}:${tag}-arm64" echo "🌀 Creating manifest for ${img}:${tag}" docker buildx imagetools create \ --tag "${img}:${tag}" \ "${img}:${tag}-amd64" \ "${img}:${tag}-arm64" - done < <(printf "%s" "${{ steps.meta_manifest.outputs.tags }}") + done < <(printf "%s\n" "${{ steps.meta_manifest.outputs.tags }}") diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 77a66ce6c..f89ee3d9f 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -19,6 +19,10 @@ on: schedule: - cron: '35 5 * * 4' +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: analyze: name: Analyze (${{ matrix.language }}) diff --git a/.github/workflows/compose_config.yml b/.github/workflows/compose_config.yml new file mode 100644 index 000000000..62827643a --- /dev/null +++ b/.github/workflows/compose_config.yml @@ -0,0 +1,41 @@ +name: compose-config + +on: + push: + branches: ['**'] + paths: + - "deploy/*.env" + - "deploy/export_env_vars.sh" + - "deploy/services*.yml" + - "security/env/*.env" + - ".github/workflows/compose_config.yml" + pull_request: + paths: + - "deploy/*.env" + - "deploy/export_env_vars.sh" + - "deploy/services*.yml" + - "security/env/*.env" + - ".github/workflows/compose_config.yml" + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + validate: + name: Validate Docker Compose configuration + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + + - name: Validate Compose files + shell: bash + run: | + set -euo pipefail + source deploy/export_env_vars.sh + docker compose -f deploy/services.yml config --quiet + docker compose -f deploy/services.dev.yml config --quiet diff --git a/.github/workflows/dependency_hygiene.yml b/.github/workflows/dependency_hygiene.yml index 0f994dc64..e9f86ce45 100644 --- a/.github/workflows/dependency_hygiene.yml +++ b/.github/workflows/dependency_hygiene.yml @@ -4,11 +4,27 @@ on: workflow_dispatch: schedule: - cron: "0 6 * * 1" # weekly Monday UTC + push: + branches: ['**'] + paths: + - "docs/pyproject.toml" + - "docs/uv.lock" + - "pyproject.toml" + - "uv.lock" + - "scripts/maintenance/audit_pip_dependency.sh" + - ".github/workflows/dependency_hygiene.yml" pull_request: paths: - - "docs/requirements.txt" - - "nifi/requirements.txt" + - "docs/pyproject.toml" + - "docs/uv.lock" + - "pyproject.toml" + - "uv.lock" - "scripts/maintenance/audit_pip_dependency.sh" + - ".github/workflows/dependency_hygiene.yml" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true permissions: contents: read @@ -23,7 +39,7 @@ jobs: uses: actions/cache@v6 with: path: ~/.cache/pip - key: pip-${{ runner.os }}-${{ hashFiles('docs/requirements.txt', 'nifi/requirements.txt', 'scripts/maintenance/audit_pip_dependency.sh') }} + key: pip-${{ runner.os }}-${{ hashFiles('docs/pyproject.toml', 'docs/uv.lock', 'pyproject.toml', 'uv.lock', 'scripts/maintenance/audit_pip_dependency.sh') }} restore-keys: | pip-${{ runner.os }}- @@ -32,7 +48,12 @@ jobs: with: python-version: "3.11" - - name: Install pip-audit + - name: Install uv + uses: astral-sh/setup-uv@v10.0.1 + with: + version-file: "pyproject.toml" + + - name: Install audit tools run: python -m pip install --upgrade pip pip-audit - name: Ensure script is executable diff --git a/.github/workflows/doc_build.yml b/.github/workflows/doc_build.yml index 45023b2fa..f1425f3bb 100644 --- a/.github/workflows/doc_build.yml +++ b/.github/workflows/doc_build.yml @@ -2,15 +2,18 @@ name: doc-build on: push: - branches: [ main ] + branches: ['**'] pull_request: - branches: [ main ] release: types: [published] workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read @@ -22,8 +25,9 @@ jobs: - uses: actions/checkout@v7 - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v10.0.1 with: + version-file: "pyproject.toml" python-version: "3.12" enable-cache: true cache-dependency-glob: "docs/uv.lock" @@ -39,4 +43,4 @@ jobs: - name: Build docs working-directory: docs - run: uv run mkdocs build -f ../mkdocs.yml + run: uv run mkdocs build --strict -f ../mkdocs.yml diff --git a/.github/workflows/python_quality.yml b/.github/workflows/python_quality.yml index 198b359af..b045ed988 100644 --- a/.github/workflows/python_quality.yml +++ b/.github/workflows/python_quality.yml @@ -5,8 +5,7 @@ on: branches: ['**'] paths: - "pyproject.toml" - - "nifi/requirements.txt" - - "nifi/requirements-dev.txt" + - "uv.lock" - "nifi/**/*.py" - "scripts/**/*.py" - "typings/**/*.pyi" @@ -14,14 +13,17 @@ on: pull_request: paths: - "pyproject.toml" - - "nifi/requirements.txt" - - "nifi/requirements-dev.txt" + - "uv.lock" - "nifi/**/*.py" - "scripts/**/*.py" - "typings/**/*.pyi" - ".github/workflows/python_quality.yml" workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read @@ -39,17 +41,18 @@ jobs: python-version: "3.11" - name: Install uv - run: | - python -m pip install --upgrade pip uv + uses: astral-sh/setup-uv@v10.0.1 + with: + version-file: "pyproject.toml" - - name: Install requirements with uv + - name: Install locked project dependencies run: | - uv pip install --system -r nifi/requirements.txt -r nifi/requirements-dev.txt + uv sync --locked --dev - name: Ruff (critical rules) run: | - python -m ruff check scripts nifi/user_python_extensions --select F,E9 + uv run --locked ruff check scripts nifi/user_python_extensions --select F,E9 - name: MyPy run: | - python -m mypy --config-file pyproject.toml nifi/user_python_extensions scripts + uv run --locked mypy --config-file pyproject.toml nifi/user_python_extensions scripts diff --git a/.github/workflows/shell_script_enforce_exec_check.yml b/.github/workflows/shell_script_enforce_exec_check.yml index dd4aa3802..35b145e2f 100644 --- a/.github/workflows/shell_script_enforce_exec_check.yml +++ b/.github/workflows/shell_script_enforce_exec_check.yml @@ -5,6 +5,10 @@ on: push: branches: ['**'] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read @@ -40,3 +44,39 @@ jobs: echo "Fix with: git update-index --chmod=+x " exit 1 fi + + shell-quality: + name: ShellCheck and syntax + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v7 + + - name: Check root-owned shell scripts + shell: bash + run: | + set -euo pipefail + + scripts=() + while IFS= read -r -d '' file; do + scripts+=("$file") + done < <( + git ls-files -z -- '*.sh' \ + ':(exclude)services/**' \ + ':(exclude)deploy/charts/**' + ) + + if [[ "${#scripts[@]}" -eq 0 ]]; then + echo "No root-owned shell scripts found." + exit 0 + fi + + echo "Checking ${#scripts[@]} root-owned shell scripts." + docker run --rm \ + --volume "${GITHUB_WORKSPACE}:/mnt:ro" \ + --workdir /mnt \ + koalaman/shellcheck:v0.11.0@sha256:61862eba1fcf09a484ebcc6feea46f1782532571a34ed51fedf90dd25f925a8d \ + "${scripts[@]}" + + for file in "${scripts[@]}"; do + bash -n "$file" + done diff --git a/.github/workflows/smoke_elastic_services.yml b/.github/workflows/smoke_elastic_services.yml index 5b72592c6..59bbd8367 100644 --- a/.github/workflows/smoke_elastic_services.yml +++ b/.github/workflows/smoke_elastic_services.yml @@ -6,6 +6,10 @@ on: branches: ['**'] workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read diff --git a/.github/workflows/smoke_gitea_service.yml b/.github/workflows/smoke_gitea_service.yml index 628e74bc8..157277cca 100644 --- a/.github/workflows/smoke_gitea_service.yml +++ b/.github/workflows/smoke_gitea_service.yml @@ -6,6 +6,10 @@ on: branches: ['**'] workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read @@ -24,10 +28,11 @@ jobs: java-version: '21' - name: Generate certificates - working-directory: security/scripts run: | set -euo pipefail - ./create_root_ca_cert.sh + make -C deploy init-security-gitea + sudo chown 1000:1000 security/certificates/gitea/gitea.key + sudo chmod 600 security/certificates/gitea/gitea.key - name: Start Gitea service run: | diff --git a/.github/workflows/smoke_nifi_services.yml b/.github/workflows/smoke_nifi_services.yml index 8bcd3827a..63386c5c6 100644 --- a/.github/workflows/smoke_nifi_services.yml +++ b/.github/workflows/smoke_nifi_services.yml @@ -6,6 +6,10 @@ on: branches: ['**'] workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read @@ -51,4 +55,3 @@ jobs: source deploy/export_env_vars.sh set -euo pipefail docker compose -f deploy/services.dev.yml down -v - diff --git a/.github/workflows/smoke_postgres_services.yml b/.github/workflows/smoke_postgres_services.yml index d8d3e2bbf..54bdbad7d 100644 --- a/.github/workflows/smoke_postgres_services.yml +++ b/.github/workflows/smoke_postgres_services.yml @@ -6,6 +6,10 @@ on: branches: ['**'] workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: read diff --git a/.github/workflows/submodule_sync.yml b/.github/workflows/submodule_sync.yml index 7420a3142..090c7c938 100644 --- a/.github/workflows/submodule_sync.yml +++ b/.github/workflows/submodule_sync.yml @@ -9,6 +9,10 @@ on: types: [published] workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: contents: write diff --git a/.readthedocs.yaml b/.readthedocs.yaml index ce6bbae71..94cd0ed79 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -10,14 +10,12 @@ build: python: "3.13" jobs: pre_create_environment: - - cd docs - asdf plugin add uv - - asdf install uv latest - - asdf global uv latest + - UV_VERSION="$(sed -n 's/^required-version = "==\([^"]*\)"$/\1/p' pyproject.toml)" && test -n "${UV_VERSION}" && asdf install uv "${UV_VERSION}" && asdf global uv "${UV_VERSION}" create_environment: - uv venv "${READTHEDOCS_VIRTUALENV_PATH}" install: - cd docs && UV_PROJECT_ENVIRONMENT="${READTHEDOCS_VIRTUALENV_PATH}" uv sync --frozen mkdocs: - configuration: mkdocs.yml \ No newline at end of file + configuration: mkdocs.yml diff --git a/README.md b/README.md index 9d7a896fc..5fa845e18 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ All NLP/ML/data services are expected to implement a uniform RESTful API, allowi ## ⚠️ Important Notice -This project is under active development. New features or services may impact existing deployments. Please review the [release notes](https://cogstack-nifi.readthedocs.io/en/latest/news.html) and [documentation](https://cogstack-nifi.readthedocs.io) before upgrading. +This project is under active development. New features or services may impact existing deployments. Please review the [release notes](https://cogstack-nifi.readthedocs.io/en/latest/news/) and [documentation](https://cogstack-nifi.readthedocs.io) before upgrading. --- @@ -54,6 +54,7 @@ This table describes repository layout. For setup and operations, use the deploy git lfs pull make -C deploy git-update-submodules make -C deploy help +make -C deploy init-security make -C deploy start-data-infra ``` @@ -79,15 +80,15 @@ make -C deploy stop-data-infra 📖 Official documentation: [cogstack-nifi.readthedocs.io](https://cogstack-nifi.readthedocs.io/en/latest/) -🚀 New to the project? Start with the [deployment guide](https://cogstack-nifi.readthedocs.io/en/latest/deploy/main.html) for example setups and workflows. +🚀 New to the project? Start with the [deployment guide](https://cogstack-nifi.readthedocs.io/en/latest/deploy/main/) for example setups and workflows. -🐞 For troubleshooting or bug reports, consult the [known issues section](https://cogstack-nifi.readthedocs.io/en/latest/deploy/troubleshooting.html) before opening a ticket. +🐞 For troubleshooting or bug reports, consult the [known issues section](https://cogstack-nifi.readthedocs.io/en/latest/deploy/troubleshooting/) before opening a ticket. --- ## 🛑 Important Updates -Check the [release notes](https://cogstack-nifi.readthedocs.io/en/latest/news.html) section regularly for: +Check the [release notes](https://cogstack-nifi.readthedocs.io/en/latest/news/) section regularly for: - Major changes to project structure or configuration - Security advisories or vulnerabilities affecting deployments diff --git a/deploy/Makefile b/deploy/Makefile index 7cbef661f..bcbf31beb 100644 --- a/deploy/Makefile +++ b/deploy/Makefile @@ -34,6 +34,11 @@ HELM_GITEA_VALUES_ARG = -f $(HELM_GITEA_VALUES_FILE) CNPG_OPERATOR_MINOR ?= 1.28 CNPG_OPERATOR_VERSION ?= 1.28.1 CNPG_OPERATOR_MANIFEST ?= https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-$(CNPG_OPERATOR_MINOR)/releases/cnpg-$(CNPG_OPERATOR_VERSION).yaml +SECURITY_DIR ?= ../security +SECURITY_SCRIPTS_DIR ?= $(SECURITY_DIR)/scripts +SECURITY_CERTIFICATES_DIR ?= $(SECURITY_DIR)/certificates +SECURITY_ENV_DIR ?= $(SECURITY_DIR)/env +OPENSEARCH_CERT_NAMES ?= define WITH_ENV set -a && source ./export_env_vars.sh; @@ -95,6 +100,140 @@ load-env: ## Load variables from export_env_vars.sh in a subshell show-env: ## Print sorted environment variables after loading export_env_vars.sh ${WITH_ENV} >/dev/null 2>&1; printenv | sort +init-security-root-ca: ## Generate the shared root CA only when no CA material exists + @set -euo pipefail; \ + source "$(SECURITY_ENV_DIR)/certificates_general.env"; \ + root_dir="$(SECURITY_CERTIFICATES_DIR)/root"; \ + if [[ -f "$$root_dir/$${ROOT_CERTIFICATE_NAME}.key" \ + && -f "$$root_dir/$${ROOT_CERTIFICATE_NAME}.pem" \ + && -f "$$root_dir/$${ROOT_CERTIFICATE_NAME}.p12" \ + && -f "$$root_dir/$${ROOT_CERTIFICATE_NAME}-keystore.jks" \ + && -f "$$root_dir/$${ROOT_CERTIFICATE_NAME}-truststore.jks" ]]; then \ + echo "Root CA certificates already exist; leaving them unchanged."; \ + elif [[ -d "$$root_dir" && -n "$$(find "$$root_dir" -mindepth 1 -maxdepth 1 -print -quit)" ]]; then \ + echo "ERROR: $$root_dir contains an incomplete root CA set." >&2; \ + echo "Preserve and repair or explicitly replace that CA before rerunning this target." >&2; \ + exit 1; \ + else \ + echo "Generating the shared root CA certificates..."; \ + (cd "$(SECURITY_SCRIPTS_DIR)" && ./create_root_ca_cert.sh); \ + fi + +init-security-nifi: init-security-root-ca ## Generate NiFi certificates only when they are missing or incomplete + @set -euo pipefail; \ + nifi_dir="$(SECURITY_CERTIFICATES_DIR)/nifi"; \ + if [[ -f "$$nifi_dir/nifi.key" \ + && -f "$$nifi_dir/nifi.pem" \ + && -f "$$nifi_dir/nifi.p12" \ + && -f "$$nifi_dir/nifi-keystore.jks" \ + && -f "$$nifi_dir/nifi-truststore.jks" ]]; then \ + echo "NiFi certificates already exist; leaving them unchanged."; \ + else \ + echo "Generating NiFi certificates..."; \ + (cd "$(SECURITY_SCRIPTS_DIR)" && ./create_nifi_certs.sh); \ + fi + +init-security-gitea: init-security-root-ca ## Generate a dedicated Gitea leaf certificate when it is missing + @set -euo pipefail; \ + gitea_dir="$(SECURITY_CERTIFICATES_DIR)/gitea"; \ + if [[ -f "$$gitea_dir/gitea.key" \ + && -f "$$gitea_dir/gitea.pem" \ + && -f "$$gitea_dir/gitea.crt" ]]; then \ + echo "Gitea leaf certificate already exists; leaving it unchanged."; \ + else \ + echo "Generating Gitea leaf certificate..."; \ + (cd "$(SECURITY_SCRIPTS_DIR)" && bash ./create_gitea_certs.sh); \ + fi + +init-security-opensearch: init-security-root-ca ## Generate OpenSearch node, client, and admin certificates when missing + @set -euo pipefail; \ + source "$(SECURITY_ENV_DIR)/certificates_elasticsearch.env"; \ + if [[ -n "$(strip $(OPENSEARCH_CERT_NAMES))" ]]; then \ + read -r -a node_names <<< "$(strip $(OPENSEARCH_CERT_NAMES))"; \ + else \ + node_names=("$$ES_INSTANCE_NAME_1" "$$ES_INSTANCE_NAME_2" "$$ES_INSTANCE_NAME_3"); \ + fi; \ + opensearch_dir="$(SECURITY_CERTIFICATES_DIR)/elastic/opensearch"; \ + node_certificates_missing=0; \ + for node_name in "$${node_names[@]}"; do \ + node_dir="$$opensearch_dir/elasticsearch/$$node_name"; \ + for suffix in .crt .key .p12 -keystore.jks -truststore.key; do \ + if [[ ! -f "$$node_dir/$$node_name$$suffix" ]]; then \ + node_certificates_missing=1; \ + break 2; \ + fi; \ + done; \ + done; \ + if [[ ! -f "$$opensearch_dir/elastic-stack-ca.crt.pem" \ + || ! -f "$$opensearch_dir/elastic-stack-ca.p12" ]]; then \ + node_certificates_missing=1; \ + fi; \ + if (( node_certificates_missing )); then \ + echo "Generating OpenSearch node certificates for: $${node_names[*]}"; \ + (cd "$(SECURITY_SCRIPTS_DIR)" && ./create_opensearch_node_cert.sh "$${node_names[@]}"); \ + else \ + echo "OpenSearch node certificates already exist; leaving them unchanged."; \ + fi; \ + if [[ -f "$$opensearch_dir/admin.crt" \ + && -f "$$opensearch_dir/admin.key.pem" \ + && -f "$$opensearch_dir/$${ES_CLIENT_CERT_NAME}.pem" \ + && -f "$$opensearch_dir/$${ES_CLIENT_CERT_NAME}.key" ]]; then \ + echo "OpenSearch client and admin certificates already exist; leaving them unchanged."; \ + else \ + echo "Generating OpenSearch client and admin certificates..."; \ + (cd "$(SECURITY_SCRIPTS_DIR)" && ./create_opensearch_client_admin_certs.sh); \ + fi + +init-security-elasticsearch: ## Generate native Elasticsearch certificates when the output directory is absent + @set -euo pipefail; \ + source "$(SECURITY_ENV_DIR)/certificates_elasticsearch.env"; \ + elasticsearch_dir="$(SECURITY_CERTIFICATES_DIR)/elastic/elasticsearch"; \ + certificate_set_complete=1; \ + for required_file in \ + "elastic-stack-ca.crt.pem" \ + "elastic-stack-ca.p12" \ + "elasticsearch/$${ES_INSTANCE_NAME_1}/$${ES_INSTANCE_NAME_1}.crt" \ + "elasticsearch/$${ES_INSTANCE_NAME_1}/$${ES_INSTANCE_NAME_1}.key" \ + "elasticsearch/$${ES_INSTANCE_NAME_2}/$${ES_INSTANCE_NAME_2}.crt" \ + "elasticsearch/$${ES_INSTANCE_NAME_2}/$${ES_INSTANCE_NAME_2}.key" \ + "elasticsearch/$${ES_INSTANCE_NAME_3}/$${ES_INSTANCE_NAME_3}.crt" \ + "elasticsearch/$${ES_INSTANCE_NAME_3}/$${ES_INSTANCE_NAME_3}.key"; do \ + if [[ ! -f "$$elasticsearch_dir/$$required_file" ]]; then \ + certificate_set_complete=0; \ + break; \ + fi; \ + done; \ + if (( certificate_set_complete )); then \ + echo "Native Elasticsearch certificates already exist; leaving them unchanged."; \ + elif [[ -e "$$elasticsearch_dir" ]]; then \ + echo "ERROR: $$elasticsearch_dir exists but contains an incomplete certificate set." >&2; \ + echo "Move or remove that directory after preserving anything needed, then rerun this target." >&2; \ + exit 1; \ + else \ + echo "Generating native Elasticsearch certificates with Docker..."; \ + (cd "$(SECURITY_SCRIPTS_DIR)" && ./create_es_native_certs.sh); \ + fi + +init-security-search: ## Generate certificates for ELASTICSEARCH_VERSION from elasticsearch.env + @set -euo pipefail; \ + source ./elasticsearch.env; \ + case "$${ELASTICSEARCH_VERSION}" in \ + opensearch|elasticsearch) \ + $(MAKE) --no-print-directory "init-security-$${ELASTICSEARCH_VERSION}" \ + ;; \ + *) \ + echo "ERROR: unsupported ELASTICSEARCH_VERSION '$${ELASTICSEARCH_VERSION}'." >&2; \ + exit 1 \ + ;; \ + esac + +init-security: ## Generate missing NiFi, Gitea, and selected search-backend certificates + @$(MAKE) --no-print-directory init-security-nifi + @$(MAKE) --no-print-directory init-security-gitea + @$(MAKE) --no-print-directory init-security-search + +.PHONY: init-security init-security-root-ca init-security-nifi init-security-gitea init-security-opensearch init-security-elasticsearch init-security-search + helm-template-opensearch: ## Render OpenSearch chart using chart defaults plus ./helm/opensearch.values.yaml helm template $(HELM_OPENSEARCH_RELEASE) $(HELM_OPENSEARCH_CHART) $(HELM_OPENSEARCH_VALUES_ARG) @@ -168,6 +307,14 @@ start-nifi-dev: ## Start NiFi and NiFi nginx (services.dev.yml) start-nifi-dev-build: ## Build and start NiFi dev services $(WITH_ENV) docker compose -f services.dev.yml up -d --build nifi nifi-nginx +build-nifi-image: ## Build the local NiFi image without starting services + $(WITH_ENV) docker build \ + --build-arg NIFI_UID="$${NIFI_UID:-1000}" \ + --build-arg NIFI_GID="$${NIFI_GID:-1000}" \ + --tag "$${NIFI_DOCKER_IMAGE:-cogstacksystems/cogstack-nifi:latest}" \ + --file ../nifi/Dockerfile \ + .. + start-elastic: ## Start elasticsearch-1, elasticsearch-2 and kibana $(WITH_ENV) docker compose -f services.yml $(DC_START_CMD) elasticsearch-1 elasticsearch-2 kibana @@ -230,9 +377,9 @@ start-git-ea: start-data-infra: start-nifi start-elastic start-samples ## Start core data infrastructure -start-all: start-data-infra start-jupyter start-medcat-service start-ocr-services ## Start all major services +start-all: start-data-infra start-medcat-service start-ocr-services ## Start all major services -.PHONY: start-all start-data-infra start-nifi start-nifi-dev start-nifi-dev-build start-elastic start-samples start-jupyter +.PHONY: start-all start-data-infra start-nifi start-nifi-dev start-nifi-dev-build build-nifi-image start-elastic start-samples start-jupyter # stop services diff --git a/deploy/elasticsearch.env b/deploy/elasticsearch.env index bd44c1ab7..56fa8c610 100644 --- a/deploy/elasticsearch.env +++ b/deploy/elasticsearch.env @@ -7,7 +7,7 @@ ELASTICSEARCH_VERSION=opensearch # possible values : -# - elasticsearch : docker.elastic.co/elasticsearch/elasticsearch:8.19.11 +# - elasticsearch : docker.elastic.co/elasticsearch/elasticsearch:9.5.2 # - elasticsearch (custom cogstack image) : cogstacksystems/cogstack-elasticsearch:latest # - opensearch : opensearchproject/opensearch:3.8.0 # the custom cogstack image is always based on the last image of ES native @@ -177,7 +177,7 @@ KIBANA_VERSION=opensearch-dashboards KIBANA_CONFIG_FILE_VERSION=opensearch_dashboards # possible values: -# - elasticsearch : docker.elastic.co/kibana/kibana:8.19.11 +# - elasticsearch : docker.elastic.co/kibana/kibana:9.5.2 # - elasticsearch (custom cogstack image) : cogstacksystems/cogstack-kibana:latest # - opensearch : opensearchproject/opensearch-dashboards:3.8.0 # the custom cogstack image is always based on the last image of ES native @@ -219,7 +219,7 @@ ELASTICSEARCH_XPACK_SECURITY_REPORTING_ENCRYPTION_KEY="e0Y1gTxHWOopIWMTtpjQsDS6K ######################################################################### METRICBEAT Env vars ########################################################################## -METRICBEAT_IMAGE="docker.elastic.co/beats/metricbeat:8.19.11" +METRICBEAT_IMAGE="docker.elastic.co/beats/metricbeat:9.5.2" METRICBEAT_DOCKER_SHM=512m METRICBEAT_DOCKER_CPU_MIN=1 @@ -236,7 +236,7 @@ FILEBEAT_STARTUP_COMMAND="-e --strict.perms=false" FILEBEAT_HOST="https://elasticsearch-1:9200" -FILEBEAT_IMAGE="docker.elastic.co/beats/filebeat:8.19.11" +FILEBEAT_IMAGE="docker.elastic.co/beats/filebeat:9.5.2" FILEBEAT_DOCKER_SHM=512m diff --git a/deploy/gitea.env b/deploy/gitea.env index 3146f0e8e..6d312a6ae 100644 --- a/deploy/gitea.env +++ b/deploy/gitea.env @@ -25,7 +25,7 @@ GITEA_LOCAL_KEY_TITLE="gitea-cogstack-$(hostname)-$(date +%s)" GITEA_DEFAULT_MAIN_REMOTE_NAME="cogstack-gitea" GITEA_DOCKER_SHM_SIZE=512m -GITEA_DOCKER_IMAGE=gitea/gitea:1.25-rootless +GITEA_DOCKER_IMAGE=gitea/gitea:1.27-rootless GITEA_DOCKER_CPU_MIN=1 GITEA_DOCKER_CPU_MAX=1 GITEA_DOCKER_RAM=1g diff --git a/deploy/helm/gitea.values.yaml b/deploy/helm/gitea.values.yaml index cb510837d..fa99c8958 100644 --- a/deploy/helm/gitea.values.yaml +++ b/deploy/helm/gitea.values.yaml @@ -46,10 +46,13 @@ postgresql: # --from-literal=username=admin \ # --from-literal=password='change-me' # -# Create this Secret before install to preserve the current direct-HTTPS setup: -# kubectl create secret generic gitea-root-ca \ -# --from-file=root-ca.pem=./security/certificates/root/root-ca.pem \ -# --from-file=root-ca.key=./security/certificates/root/root-ca.key +# For local/reference deployments, create this Secret from the dedicated Gitea +# leaf certificate generated by `make -C deploy init-security-gitea`: +# kubectl create secret generic gitea-tls \ +# --from-file=gitea.pem=./security/certificates/gitea/gitea.pem \ +# --from-file=gitea.key=./security/certificates/gitea/gitea.key +# Production deployments should use a deployment-specific TLS Secret issued by +# their normal certificate manager instead. gitea: admin: # existingSecret: gitea-admin-credentials @@ -70,8 +73,8 @@ gitea: SSH_PORT: 2222 SSH_LISTEN_HOST: 0.0.0.0 SSH_LISTEN_PORT: 2222 - CERT_FILE: /certificates/root/root-ca.pem - KEY_FILE: /certificates/root/root-ca.key + CERT_FILE: /certificates/gitea/gitea.pem + KEY_FILE: /certificates/gitea/gitea.key database: DB_TYPE: sqlite3 PATH: /data/gitea/gitea.db @@ -94,16 +97,16 @@ gitea: DEFAULT_TRUST_MODEL: committer extraVolumes: - - name: gitea-root-ca + - name: gitea-tls secret: - secretName: gitea-root-ca + secretName: gitea-tls extraInitVolumeMounts: - - name: gitea-root-ca - mountPath: /certificates/root + - name: gitea-tls + mountPath: /certificates/gitea readOnly: true extraContainerVolumeMounts: - - name: gitea-root-ca - mountPath: /certificates/root + - name: gitea-tls + mountPath: /certificates/gitea readOnly: true diff --git a/deploy/services.yml b/deploy/services.yml index ee22cac0c..41bfe0368 100644 --- a/deploy/services.yml +++ b/deploy/services.yml @@ -571,8 +571,8 @@ services: volumes: # app config - ../services/gitea/app.ini:/etc/gitea/app.ini:rw - # certificates - - ../security/certificates:/certificates:ro + # dedicated leaf certificate only; never expose the root CA private key + - ../security/certificates/gitea:/certificates/gitea:ro # data & conf volumes - gitea-config-vol:/etc/gitea:rw - gitea-lib-vol:/var/lib/gitea:rw diff --git a/docs/deploy/configuration.md b/docs/deploy/configuration.md index c132214f2..7f1adc10d 100644 --- a/docs/deploy/configuration.md +++ b/docs/deploy/configuration.md @@ -8,8 +8,9 @@ The variables are configurable, and are separated, into security and general env In most cases, modifying these variables should be the only thing that is needed in order to run a successful deployment. Multiple files are available, split into two categories: -- service: located in `./deploy/` are reponsible for direct service configuration -- security: located in `./security`, ceriticate related settings are always in the files starting with `certificates_` and user settings are located in the files ending with `_users` + +- Service configuration under `deploy/`. +- Certificate and local-development credential configuration under `security/env/`. The variables declared in the `./deploy` folder are used in multiple config files, as follows: - `elasticsearch.env`, variables here are used in : @@ -33,21 +34,23 @@ The variables declared in the `./deploy` folder are used in multiple config file - `general.env`, these vars are optional, declared any custom variables you want here, used in the `nifi` section -Additional variablesenv files, used only or certificate generation and user accounts, found in `./security`: -- `certificates_elasticsearch.env`, used in `create_opensearch_*`/`create_es_native*` scripts -- `certificates_general.env`, used in `create_root_ca.sh` -- `certificates_nifi.env`, used in `nifi_toolkit_security.sh` -- `database_users.env` -- `elasticsearch_users.env` -- `nginx_users.env` +Additional environment files under `security/env/` configure certificate generation and local accounts: + +- `certificates_elasticsearch.env` +- `certificates_general.env` +- `certificates_nifi.env` +- `users_database.env` +- `users_elasticsearch.env` +- `users_nginx.env` +- `users_nifi.env` ### Customization -For custom deployments, copy all the `.env` files (which are not tracked by Git) and add deployment specific configurations to these files. For example: +The tracked `.env` values are public development defaults. For a real deployment, keep deployment-specific copies outside the repository or inject the values through the platform's secret-management mechanism. Never commit production credentials. -``` -cp deploy/*.env deploy/new_deploy_folder/ -cp security/*.env deploy/new_deploy_folder/ +```bash +cp deploy/*.env /path/to/deployment-config/ +cp security/env/*.env /path/to/deployment-config/security/ ``` ### Multiple deployments on the same machine @@ -59,7 +62,7 @@ For example, when setting `COMPOSE_PROJECT_NAME=cogstack-prod`, Docker Compose w ## Important security detail -Please note that in the example service defintions, for ease of deployment and demonstration, SSL encryption is enabled among services (NiFi, ES, etc.), however, the certificates that are used are in this public repository, anyone can see them, so **please** make sure to re-generate them when you go into production. +Generated certificates and private keys are stored under `security/certificates/` and ignored by Git. Create them with `make -C deploy init-security`. Do not reuse development certificates or public development credential defaults in production. ## Services Please note that all the services are deployed using [Docker](https://docker.io) engine and requires docker deamon to be running / functioning. diff --git a/docs/deploy/deployment.md b/docs/deploy/deployment.md index 4ee894967..48b243948 100644 --- a/docs/deploy/deployment.md +++ b/docs/deploy/deployment.md @@ -160,12 +160,11 @@ service: - embedded SQLite - bundled PostgreSQL/Valkey disabled - ClusterIP services on ports `3000` and `2222` -- direct HTTPS inside the Gitea pod using the shared root CA +- direct HTTPS inside the Gitea pod using a dedicated Gitea leaf certificate -Before install, create: +For a local/reference deployment, first run `make -C deploy init-security-gitea`, then create a `gitea-tls` Secret containing `gitea.pem` and `gitea.key` from `security/certificates/gitea/`. Never mount `root-ca.key` into Gitea. Production deployments should provide a deployment-specific certificate for their public hostname through the platform certificate manager. -- `gitea-root-ca` Secret with `root-ca.pem` and `root-ca.key` from `security/certificates/root/` -- optionally `gitea-admin-credentials` with `username` and `password` if you want Helm to bootstrap an admin user +You can optionally create `gitea-admin-credentials` with `username` and `password` if you want Helm to bootstrap an admin user. ## 🧰 Makefile Command Overview @@ -240,6 +239,12 @@ make -C deploy remote-delete-service \ |------------------------|---------------------------------------------| | `make load-env` | Load all environment variables | | `make show-env` | Print environment variables (sorted) | +| `make init-security` | Generate missing NiFi, Gitea, and selected search-backend certificates | +| `make init-security-root-ca` | Generate the shared root CA if missing | +| `make init-security-nifi` | Generate the NiFi certificate set if missing | +| `make init-security-gitea` | Generate the dedicated Gitea leaf certificate if missing | +| `make init-security-opensearch` | Generate the OpenSearch certificate set if missing | +| `make init-security-elasticsearch` | Generate the native Elasticsearch certificate set if missing | | `make git-freeze-security` | Freeze all security submodules (read-only) | | `make git-unfreeze-security` | Unfreeze security submodules | | `make git-update-submodules` | Update all submodules | diff --git a/docs/deploy/main.md b/docs/deploy/main.md index 0f64f2f78..da3d73760 100755 --- a/docs/deploy/main.md +++ b/docs/deploy/main.md @@ -42,77 +42,72 @@ You can use the script located at `scripts/installation_utils/install_docker_and Execute the following commands in the root directory of the repo: 1. `git-lfs pull` -2. (OPTIONAL, if you already have the software in [this section installed](#-software-requirements-linuxmacos)) `bash ./scripts/installation_utils/install_docker_and_utils.sh`, and wait for it to finish. It may take a while to get all the packages, and it will prompt for `sudo` when needed. +2. (OPTIONAL, if you already have the software in [this section installed](#software-requirements-linuxmacos)) `bash ./scripts/installation_utils/install_docker_and_utils.sh`, and wait for it to finish. It may take a while to get all the packages, and it will prompt for `sudo` when needed. 3. `cd deploy` 4. `make git-update-submodules` -5. check that docker works correctly : `docker pull hello-world` -6. if no errors, run: `docker run --rm hello-world`, it should run without issues -7. if there are any issues check the below warning section +5. `make init-security` +6. check that docker works correctly : `docker pull hello-world` +7. if no errors, run: `docker run --rm hello-world`, it should run without issues +8. if there are any issues check the below warning section -:::{warning} -IMPORTANT NOTE: Do a `git-lfs pull` so that you have everything downloaded from the repo (including bigger zipped files.). -::: +!!! warning -:::{warning} -Ensure all Git submodules are initialized and updated: -`make git-update-submodules` -::: + Run `git-lfs pull` to download all repository assets, including larger files. -:::{warning} -Consult the if there are issues with the docker setup. -If Docker fails to install or `docker pull hello-world` does not work: +!!! warning - - Follow the official [Docker installation steps](https://docs.docker.com/engine/install/debian/) - - Ensure your user is in the docker group - - For non-sudo users, check Docker rootless mode and required post-install steps: - - https://docs.docker.com/engine/security/rootless/ - - https://docs.docker.com/engine/install/linux-postinstall/ + Ensure all Git submodules are initialized and updated with `make git-update-submodules`. -::: +!!! warning + If Docker fails to install or `docker pull hello-world` does not work: + - Follow the official [Docker installation steps](https://docs.docker.com/engine/install/debian/). + - Ensure your user is in the Docker group. + - For non-sudo users, check [Docker rootless mode](https://docs.docker.com/engine/security/rootless/) and the [Linux post-install steps](https://docs.docker.com/engine/install/linux-postinstall/). ## ⚠️ Essential Elasticsearch Requirement -:::{warning} -**Elasticsearch may fail to start unless `vm.max_map_count` is increased.** +!!! warning -If this value is too low, Elasticsearch will exit with the error: + **Elasticsearch may fail to start unless `vm.max_map_count` is increased.** + + If this value is too low, Elasticsearch will exit with the error: ```bash bootstrap checks failed max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] ``` -If you did **not** run the installation script, set it manually: + If you did **not** run the installation script, set it manually. + + **Temporary (until reboot):** -**Temporary (until reboot):** ```bash sudo sysctl -w vm.max_map_count=262144 ``` -**Permanent (persists across reboots):** -Add the line below to `/etc/sysctl.conf`: + **Permanent (persists across reboots):** + + Add the line below to `/etc/sysctl.conf`: ```bash vm.max_map_count=262144 ``` -Or a one-liner: + Or use this one-liner: ```bash sudo sh -c "echo 'vm.max_map_count=262144' >> /etc/sysctl.conf" ``` -Then apply: + Then apply it: ```bash sudo sysctl -p ``` -> The `install_docker_and_utils.sh` script automatically configures this. -> You only need to set it manually if the script was skipped. -::: + The `install_docker_and_utils.sh` script configures this automatically; set it manually only if the script was skipped. ## 🏅 Deploying services diff --git a/docs/deploy/services.md b/docs/deploy/services.md index 7eb314886..8a869f880 100644 --- a/docs/deploy/services.md +++ b/docs/deploy/services.md @@ -199,7 +199,7 @@ Demo dataset with: ### Credentials -- user - `test`, password - `test` +Local development credentials are defined in `security/env/users_database.env`. Override them for non-local deployments. --- @@ -218,8 +218,7 @@ Where `` can be: `mssql`,`pgsql`. ### Credentials -- PgSQL: user - `admin` password - `admin` -- MsSQL: user - `admin` password - `admin!COGSTACK2022` +PostgreSQL and MSSQL development credentials are defined in `security/env/users_database.env`. Production credentials must be injected through deployment-local configuration or a secret manager. ### Access @@ -236,7 +235,7 @@ Where `` can be: `mssql`,`pgsql`. - docker compose file: `services.yml` - dir: `services/cogstack-db/` - env: - - `security/users/users_database.env` - controlers DB user credentials + - `security/env/users_database.env` - database development credentials - `deploy/database.env` - general DB configs ### Ports @@ -256,7 +255,7 @@ This service is complex and is completely described in [this section](../nifi/ma ### Credentials -- Default user: user - `admin` password - `cogstackNiFi` +Single-user development credentials are defined in `security/env/users_nifi.env`. Do not reuse them in production. ### Access @@ -271,9 +270,9 @@ This service is complex and is completely described in [this section](../nifi/ma - docker compose file: `services.yml` - dir: `nifi/` - env: - - `/deploy/nifi.env` - general NiFi settings, JVM memory, etc. - - `/security/nifi_users.env` - controlers DB user credentials - - `/security/certificates_nifi.env` + - `deploy/nifi.env` - general NiFi settings, JVM memory, etc. + - `security/env/users_nifi.env` - NiFi development credentials + - `security/env/certificates_nifi.env` - NiFi keystore and truststore settings ### Ports @@ -300,8 +299,7 @@ Switch between modes via environment variables in `deploy/elasticsearch.env`. #### Credentials -- OpenSearch: user - `admin`, password - `admin` -- ElasticSearch: user - `elastic`, password - `kibanaserver` +Development credentials for both backends are defined in `security/env/users_elasticsearch.env`. Use externally managed secrets for production deployments. #### Access @@ -332,21 +330,21 @@ Switch between modes via environment variables in `deploy/elasticsearch.env`. - docker compose: `deploy/services.yml` - config: `services/elasticsearch/config/` - env: - - `/deploy/elasticsearch.env` - - `/security/certificates_elasticsearch.env` - - `/security/elasticsearch_users.env` + - `deploy/elasticsearch.env` + - `security/env/certificates_elasticsearch.env` + - `security/env/users_elasticsearch.env` #### SSL & Certificates Certificates stored in: -```bash -/security/certificates/elastic// +```text +security/certificates/elastic// ``` Settings in: -- `certificates_elasticsearch.env` +- `security/env/certificates_elasticsearch.env` ### 📊 Metricbeat & Filebeat @@ -381,8 +379,8 @@ Filebeat: - `services/metricbeat/metricbeat.yml` - `services/filebeat/filebeat.yml` - env: - - `/deploy/elasticsearch.env` - - `/security/elasticsearch_users.env` + - `deploy/elasticsearch.env` + - `security/env/users_elasticsearch.env` #### **Ports** @@ -393,7 +391,7 @@ All communication occurs internally within the `cogstack-net` Docker network. - Elasticsearch must be running before Metricbeat or Filebeat start. - Only Elastic-native Beats are available; OpenSearch-native Beats do not exist. -- Authentication/credentials come from `elasticsearch_users.env`. +- Authentication credentials come from `security/env/users_elasticsearch.env`. ### 📉 Kibana / OpenSearch Dashboards @@ -412,8 +410,7 @@ Web UI for exploring indexed data, visualising documents, managing index templat #### Credentials -- **OpenSearch Dashboards:** `admin` / `admin` -- **Elasticsearch Native:** `elastic` / `kibanaserver` +Dashboard development credentials are defined in `security/env/users_elasticsearch.env`. Never use the public development values for an exposed deployment. #### First login setup (OpenSearch Dashboards) @@ -438,9 +435,9 @@ After signing in to OpenSearch Dashboards: - `services/kibana/config/elasticsearch.yml` (Elasticsearch) - `services/kibana/config/opensearch.yml` (OpenSearch Dashboards) - env: - - `/deploy/elasticsearch.env` - - `/security/certificates_elasticsearch.env` - - `/security/elasticsearch_users.env` + - `deploy/elasticsearch.env` + - `security/env/certificates_elasticsearch.env` + - `security/env/users_elasticsearch.env` Image selection controlled by: @@ -536,7 +533,7 @@ Lightweight GitHub/GitLab-style service used for hosting repositories inside sec ### Access -- URL: **http://localhost:3000** *(default Gitea port)* +- URL: **https://localhost:3000** *(default local Gitea port)* ### Containers @@ -546,8 +543,7 @@ Lightweight GitHub/GitLab-style service used for hosting repositories inside sec - docker compose file: `deploy/services.yml` - config file: `services/gitea/app.ini` -- env files: - - `/security/certificates_general.env` +- certificate directory: `security/certificates/gitea/` Persistent repository data is stored in the volume defined in `services.yml`. @@ -561,7 +557,7 @@ Persistent repository data is stored in the volume defined in `services.yml`. - Supports repository migration from external Git servers - Mirroring available when external access is allowed -- Can use CogStack certificates for HTTPS if configured +- Uses a dedicated CogStack-signed Gitea leaf certificate for local HTTPS --- @@ -613,9 +609,9 @@ Routing rules are defined in the NGINX configuration files. - `services/nginx/config/medcat-trainer.conf` - additional templates under `services/nginx/config/` - env / certificates: - - `/security/certificates_general.env` - - `/security/certificates_nifi.env` -- Uses shared CogStack Root CA & NiFi certs (`root-ca.p12`, `root-ca.key`, `nifi.key`, `nifi.pem`) + - `security/env/certificates_general.env` + - `security/env/certificates_nifi.env` +- Uses the NiFi leaf certificate for server TLS and `root-ca.pem` as a trust anchor. The root CA private key is not mounted as a service key. ### Port diff --git a/docs/deploy/workflows_legacy.md b/docs/deploy/workflows_legacy.md index 6145a2ce5..9df0d2794 100644 --- a/docs/deploy/workflows_legacy.md +++ b/docs/deploy/workflows_legacy.md @@ -20,9 +20,9 @@ Template locations: ## Legacy workflow examples (reference) -:::{warning} -These examples are maintained as historical reference material. Validate processor configuration and controller-service properties against your currently deployed NiFi version. -::: +!!! warning + + These examples are maintained as historical reference material. Validate processor configuration and controller-service properties against your currently deployed NiFi version. Our custom Apache NiFi image comes with 4 basic example template workflows bundled that available in [user templates](https://github.com/CogStack/CogStack-NiFi/tree/main/nifi/user_templates) in `./nifi` directory. These are: @@ -166,7 +166,7 @@ Restart all nifi-processes and the ingestion should work. ## Indexing records by Elasticsearch The records are finally stored in Elasticsearch data store under index `medical_reports_text` and using url endpoint `http://elasticsearch-1:9200`. This operation is implemented by NiFi component `PutElasticsearchRecord` with its configuration presented on the picture below. -The Elasticsearch user credentials need to be provided which in this example would be the built-in user `admin` with password `admin`. +Provide the appropriate Elasticsearch/OpenSearch credentials from your deployment configuration. Local development values are defined in `security/env/users_elasticsearch.env`; do not copy them into a production flow. When indexing the records as documents the record's primary key field `/docid` will be used as the document identifier in Elasticsearch. Optionally, the default Date / Time / Timestamp Format can be overridden for corresponding fields being ingested. In this example case, the Timestamp Format was overridden as `yyyy-MM-dd'T'HH:mm:ss.SSS`. diff --git a/docs/index.md b/docs/index.md index e596b37fa..70cecc4a6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -16,7 +16,7 @@ All NLP/ML/data services are expected to implement a uniform RESTful API, allowi ## ⚠️ Important Notice -This project is under active development. New features or services may impact existing deployments. Please review the [release notes](https://cogstack-nifi.readthedocs.io/en/latest/news.html) and [documentation](https://cogstack-nifi.readthedocs.io) before upgrading. +This project is under active development. New features or services may impact existing deployments. Please review the [release notes](news.md) and this documentation before upgrading. --- @@ -79,15 +79,15 @@ make -C deploy stop-data-infra 📖 Official documentation: [cogstack-nifi.readthedocs.io](https://cogstack-nifi.readthedocs.io/en/latest/) -🚀 New to the project? Start with the [deployment guide](https://cogstack-nifi.readthedocs.io/en/latest/deploy/main.html) for example setups and workflows. +🚀 New to the project? Start with the [deployment guide](deploy/main.md) for example setups and workflows. -🐞 For troubleshooting or bug reports, consult the [known issues section](https://cogstack-nifi.readthedocs.io/en/latest/deploy/troubleshooting.html) before opening a ticket. +🐞 For troubleshooting or bug reports, consult the [known issues section](deploy/troubleshooting.md) before opening a ticket. --- ## 🛑 Important Updates -Check the [release notes](https://cogstack-nifi.readthedocs.io/en/latest/news.html) section regularly for: +Check the [release notes](news.md) section regularly for: - Major changes to project structure or configuration - Security advisories or vulnerabilities affecting deployments diff --git a/docs/nifi/development_guide.md b/docs/nifi/development_guide.md index 2afacee87..0a723c770 100644 --- a/docs/nifi/development_guide.md +++ b/docs/nifi/development_guide.md @@ -73,11 +73,12 @@ echo '[{"text":"hello"}]' | python3 nifi/user_scripts/processors/clean_doc.py te If dependencies changed: -1. Update `nifi/requirements.txt`. -2. Rebuild the NiFi image: +1. Update the runtime dependencies in the root `pyproject.toml`. +2. Refresh the lock file with `uv lock`. +3. Rebuild the NiFi image: ```bash -bash nifi/recreate_nifi_docker_image.sh +make -C deploy build-nifi-image ``` ## Quality checks @@ -85,8 +86,8 @@ bash nifi/recreate_nifi_docker_image.sh Run the same core checks as CI: ```bash -python -m ruff check scripts nifi/user_python_extensions --select F,E9 -python -m mypy --config-file pyproject.toml nifi/user_python_extensions scripts +uv run --locked ruff check scripts nifi/user_python_extensions --select F,E9 +uv run --locked mypy --config-file pyproject.toml nifi/user_python_extensions scripts ``` Optional test run: diff --git a/docs/nifi/main.md b/docs/nifi/main.md index e25306184..9d8d98230 100644 --- a/docs/nifi/main.md +++ b/docs/nifi/main.md @@ -21,17 +21,17 @@ Avro Schema:[official documentation](https://avro.apache.org/docs/1.11.1/) ## `NiFi directory layout : /nifi` - ``` - ├── Dockerfile - contains the base definition of the NiFi image along with all the packages/addons installed - ├── conf - NiFi configuration files, this folder is mounted on the NiFi service container at runtime, it needs to have read & write permissions by the user - ├── devel - custom folder that is mounted on the NiFi container where you may place your own scripts, again, read & write permissions required - ├── drivers - drivers used for DB connections, currently PostgreSQL and MSSQL - ├── nifi-app.log - log file mounted directly from the container for easy log checking - ├── user_schemas - Avro schemas used within workflows, it can also contain other schemas used in specific custom processors - ├── user_scripts - custom scripts used in workflows, you can put them here - ├── user_python_extensions - Python FlowFileTransform processors exposed to NiFi's extension framework - └── user_templates - here we store the fully exported templates of the workflows within NiFi - ``` +```text +├── Dockerfile - contains the base definition of the NiFi image along with all the packages/addons installed +├── conf - NiFi configuration files, this folder is mounted on the NiFi service container at runtime, it needs to have read & write permissions by the user +├── devel - custom folder that is mounted on the NiFi container where you may place your own scripts, again, read & write permissions required +├── drivers - drivers used for DB connections, currently PostgreSQL and MSSQL +├── nifi-app.log - log file mounted directly from the container for easy log checking +├── user_schemas - Avro schemas used within workflows, it can also contain other schemas used in specific custom processors +├── user_scripts - custom scripts used in workflows, you can put them here +├── user_python_extensions - Python FlowFileTransform processors exposed to NiFi's extension framework +└── user_templates - here we store the fully exported templates of the workflows within NiFi +``` For user script organization and usage guidelines, see [user scripts](user_scripts.md). For Python extension processors, see [Python extensions](user_python_extensions.md). @@ -60,7 +60,7 @@ This section provides only a brief description of the most useful properties tha ## Critical `deploy/nifi.env` settings -Before tuning `nifi/conf/*`, review the runtime env vars in [`deploy/nifi.env`](../../deploy/nifi.env). These are loaded into the NiFi container through `env_file` in `deploy/services.yml`. +Before tuning `nifi/conf/*`, review the runtime env vars in [`deploy/nifi.env`](https://github.com/CogStack/CogStack-NiFi/blob/main/deploy/nifi.env). These are loaded into the NiFi container through `env_file` in `deploy/services.yml`. Most important variables: @@ -103,33 +103,34 @@ The corresponding properties have been commented out in the file. Important properties to look for: - ``` - nifi.flow.configuration.archive.enabled=true - nifi.flow.configuration.archive.max.time=1 days - nifi.flow.configuration.archive.max.storage=32 GB - ``` +```properties +nifi.flow.configuration.archive.enabled=true +nifi.flow.configuration.archive.max.time=1 days +nifi.flow.configuration.archive.max.storage=32 GB +``` + The above lines are used to specify if backups of the current flow-files should be kept, keep in mind that the archive size can get quite big depending on the number of files you attempt to put through a workflow. This can easily get over 32GB so it is recommended you modify depending on the workflows and of the filesizes of the flow-files, this setting is directly affected by `nifi.queue.backpressure.count` and `nifi.queue.backpressure.size` - ``` - nifi.queue.backpressure.count=10000 - nifi.queue.backpressure.size=1 GB - ``` +```properties +nifi.queue.backpressure.count=10000 +nifi.queue.backpressure.size=1 GB +``` These settings specify how large can a queue's size be (any que between two processes), it is recommended to keep this as 1GB, the count is the ma number of flow-files a que can have, again 10000 is a reasonable number. These values should be modified only if you are really certain flow-files are not being held in the queue for long as the queued flow-files are stored in RAM memory as well as on the disk. A much more safer way of doing things if you wish to change the above settings is to change the settings only for the queues you would need, this can be done during runtime, without the need to touch the `nifi.properties` file. - ``` - nifi.bored.yield.duration=100 millis - ``` +```properties +nifi.bored.yield.duration=100 millis +``` A timer that specifies how long should NiFi waits before checking for work, CPU dependent, the lower the time the higher the CPU usage, as it would do more frequent checks. The default is 10ms but it seems too excessive for most use cases, it would also result in significant CPU usage if a large number of workflows are running in parallel, so it has been set to 100ms instead. - ``` - nifi.content.repository.archive.enabled=false - nifi.content.repository.archive.max.retention.period=1 mins - nifi.content.repository.archive.cleanup.frequency=30 secs - nifi.content.repository.archive.max.usage.percentage=15% - nifi.content.repository.archive.backpressure.percentage=50% - ``` +```properties +nifi.content.repository.archive.enabled=false +nifi.content.repository.archive.max.retention.period=1 mins +nifi.content.repository.archive.cleanup.frequency=30 secs +nifi.content.repository.archive.max.usage.percentage=15% +nifi.content.repository.archive.backpressure.percentage=50% +``` For production we currently disable content claim archiving (`nifi.content.repository.archive.enabled=false`) to avoid uncontrolled growth in `content_repository`. The tradeoff is that old content claims are not retained for replay/forensics once they are no longer referenced. @@ -137,86 +138,31 @@ The tradeoff is that old content claims are not retained for replay/forensics on If you enable content archive, keep retention short and monitor disk usage closely. Content repository size can remain high even when queue size is low, because claims may still be active or waiting for archive cleanup.

-#### IMPORTANT NOTE about nifi properties - -:::{admonition} IMPORTANT NOTE about `nifi.properties` -:class: warning -For Linux users : This is a file that will get modified on runtime as when the container is up some of the properties within the file will get changed ( `nifi.cluster.node.address` for example). Some permission error's might pop out as the UID and GID of the folder permissions are different from that of the user within the container, which is using UID=1000 and GID=1000, declared in the `Dockerfile` and in `deploy/services.yml` under the `nifi` service section. To avoid permission issues, on the host container you will need to create a group with the GID 1000, assign the user that is running the docker command to the created group, and everything should work. -::: - -Recommendation: If the account/group creation is not possible, you will need to build your own docker image on NiFi, but before you do this, you need to get hold of your group id and user id of the account you are logged in with. -To find out your GID and UID, you must do the following commands in terminal: - - ```bash - echo "user id (UID):"$(id -u $USER) - echo "group id (GID):"$(id -g $USER) - ``` - -You'd need to export your ENV vars: - - ```bash - export NIFI_UID=$(id -u $USER) - export NIFI_GID=$(id -g $USER) - ``` - -A better way is to also manually edit the `./deploy/nifi.env` file and change the default NIFI_UID and NIFI_GID variables there, after which you must execute the `export_env_vars.sh` script. - - ```bash - cd ./deploy/ - source export_env_vars.sh - cd ../ - ``` - -You should check if the env vars have been set after running the script: +#### IMPORTANT NOTE about NiFi properties - ```bash - echo $NIFI_UID - echo $NIFI_GID - ``` +!!! warning "IMPORTANT NOTE about `nifi.properties`" -If the above command prints some numbers then it means that the `export_env_vars.sh` script worked. Otherwise, if you don't see anything, or just blank lines, then you need to execute the following: + On Linux, this file is modified at runtime because NiFi updates properties such as `nifi.cluster.node.address`. Permission errors can occur when the host directory UID/GID differs from the container user, which defaults to UID 1000 and GID 1000 in the `Dockerfile` and `deploy/services.yml`. To avoid these errors, create a host group with GID 1000 and add the user running Docker to it. - ```bash - set -o allexport - source nifi.env - set +o allexport - ``` +Ensure the host-mounted `nifi/conf` directory is writable by the container user. Rebuilding the image with a different UID or GID does not change ownership of existing bind-mounted host files. -or, on Windows, via `git bash` terminal: +To build the NiFi image without starting services, run this command from the repository root: - ```bash - set -a - source nifi.env - set +a - ``` - -Make sure to execute the above commands in the order they are mentioned. - - -Delete the older docker image from the nifi repo: - - ```bash - docker image rm cogstacksystems/cogstack-nifi:latest -f - ``` - -Then execute the `recreate_nifi_docker_image.sh` script located in the `./nifi` folder. - - ```bash - cd ./nifi - bash recreate_nifi_docker_image.sh - ``` +```bash +make -C deploy build-nifi-image +``` -Remember that the above export script and/or command are only visible in the current shell, so every time you restart your shell terminal you must `source ./deploy/export_env_vars.sh` so the variables are visible to Docker at runtime. If you're using the `deploy/Makefile` targets, it handles this for you. +The Make target loads the deployment environment and tags the image using `NIFI_DOCKER_IMAGE` from `deploy/nifi.env`. ### `{bootstrap.conf}`
This file allows users to configure settings for how NiFi should be started, it deals with location of configuration folder, files, JVM heap and Java System Properties. - ```text - java.arg.2=-Xms8g - java.arg.3=-Xmx16g - ``` +```text +java.arg.2=-Xms8g +java.arg.3=-Xmx16g +``` These properties specify the maximum memory that can be allocated to the JVM `-Xmx16g` and the initial memory allocation `-Xms8g`, values of 8g and 16g are used by default, however you may need to change these to fully utilise the memory of the machines you are spinning the service on.

@@ -236,27 +182,27 @@ Possible log level settings: `OFF`(inside `logback.xml`) or `NONE` (inside the N The most useful log sections are: - ``` - - ``` +```xml + +``` - This refers to the overall NiFi log, useful for finding out what may cause startup issues. - ``` - - ``` +```xml + +``` - Security level logging, this controls certificate or authorisation issues here. - ``` - - ``` +```xml + +``` - This handles issues related to the startup parameters. - ``` - - ``` +```xml + +``` - This is controls that is logged into the `./nifi/nifi-app.log` diff --git a/docs/nifi/user_python_extensions.md b/docs/nifi/user_python_extensions.md index 0076a9b78..39ef82603 100644 --- a/docs/nifi/user_python_extensions.md +++ b/docs/nifi/user_python_extensions.md @@ -55,8 +55,9 @@ and set `PYTHONPATH` to `/opt/nifi/nifi-current/python/framework` in the contain ## Dependencies -Python dependencies are installed into NiFi's Python framework from `nifi/requirements.txt` -during the custom image build. Add new dependencies there if your extension needs them. +Python dependencies are installed into NiFi's Python framework from the root `pyproject.toml` +and `uv.lock` during the custom image build. Add new runtime dependencies to `pyproject.toml`, +then refresh the lock with `uv lock`. ## Development workflow diff --git a/docs/security/certificates.md b/docs/security/certificates.md index 344cd9182..d2981741b 100644 --- a/docs/security/certificates.md +++ b/docs/security/certificates.md @@ -2,9 +2,9 @@ This section describes the full structure of the `security/certificates/` directory and explains how certificates are generated, organized, and used across CogStack-NiFi services. -All certificates originate from the **Root Certificate Authority (CA)**, generated via `create_root_ca_cert.sh`. +The supported entry point is `make -C deploy init-security`. It generates the shared **Root Certificate Authority (CA)** and the required service certificates locally. Generated certificate material is ignored by Git. -This Root CA signs all service certificates (NiFi, OpenSearch, Kibana, JupyterHub, Gitea, etc.), ensuring consistent trust across the stack, with the exception of ElasticSearch (Native), we use Elastic's built-in cert generation scripts for it instead. +The shared root CA signs the locally generated NiFi, OpenSearch, and Gitea certificates. Native Elasticsearch is the exception: it uses Elastic's certificate tooling to generate a backend-specific CA and certificate set. --- @@ -30,7 +30,7 @@ security/ │ │ └── README.txt │ │ │ └── opensearch/ # OpenSearch and OpenSearch Dashboard certs - │ ├── admin.*, es_kibana_client.*, root-ca.* # Admin + dashboard + CA certs + │ ├── admin.*, es_kibana_client.* # Admin + dashboard certificates │ ├── elasticsearch/ # Node certs for OpenSearch nodes │ │ ├── elasticsearch-{1,2,3}/ # Per-node certs, keystore/truststore │ │ │ ├── *.crt, *.key, *.p12, *.csr @@ -39,16 +39,19 @@ security/ │ │ │ └── http-elasticsearch-*.csr/key # HTTP layer certs │ ├── es_kibana_client.{pem,key,p12,csr} # Kibana client certs │ ├── elastic-stack-ca.* # OpenSearch cluster CA - │ └── root-ca.* # Root CA reference for OpenSearch + │ └── elastic-stack-ca.* # Shared CA copied for OpenSearch consumers │ ├── nifi/ # NiFi HTTPS and toolkit certificates │ ├── nifi.{crt,key,p12,pem,csr} # Primary NiFi node certificates │ ├── nifi-keystore.jks # Java keystore for NiFi server │ ├── nifi-truststore.jks # Truststore for verifying other services - │ + │ + ├── gitea/ # Dedicated Gitea leaf certificate + │ └── gitea.{crt,key,pem,csr} + │ └── root/ # Root Certificate Authority (CA) ├── root-ca.key, root-ca.pem # Private key and public cert - ├── root-ca.p12, root-ca.keystore.jks # PKCS#12 and Java Keystore formats + ├── root-ca.p12, root-ca-keystore.jks # PKCS#12 and Java Keystore formats ├── root-ca-truststore.jks # Truststore for client-side verification └── root-ca.csr, root-ca.srl # Certificate signing request and serial ``` @@ -64,143 +67,65 @@ All certificate-generation scripts source variables from `.env` files under `sec | `certificates_general.env` | Global Root CA options (CN, expiry, key size). | | `certificates_elasticsearch.env` | Node names, SAN hostnames, version control for ES/OS. | | `certificates_nifi.env` | NiFi keystore/truststore names and passwords. | -| `users_*.env` | Default credentials used by generation scripts. | - -### 📜 openssl-x509.conf - -Set up a reusable certificate config to define SANs and subject. This is used globally for all services except ES native. -Feel free to add custom DNS -Note that the settings here impact services that rely on Distinguished Names (DN) attributes for authentication. - -```ini -# ========================================================================================= -# 📜 OpenSSL X.509 v3 Extensions Configuration -# For: Root CA and Node/Client Certificates -# ========================================================================================= - -[v3_ca] -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid:always,issuer -basicConstraints = critical, CA:TRUE -keyUsage = critical, keyCertSign, cRLSign -subjectAltName=DNS:nifi,DNS:elasticsearch-1,DNS:elasticsearch-2,DNS:elasticsearch-3,DNS:cogstack,DNS:*.cogstack - -[v3_leaf] -basicConstraints = critical, CA:FALSE -keyUsage = critical, digitalSignature, keyEncipherment -extendedKeyUsage = serverAuth, clientAuth -subjectAltName = @alt_names -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid,issuer - -[alt_names] -DNS.1 = nifi -DNS.2 = nifi-nginx -DNS.3 = elasticsearch-1 -DNS.4 = elasticsearch-2 -DNS.5 = elasticsearch-3 -DNS.6 = ocr-service -DNS.7 = ocr-service-text-only -DNS.8 = medcat-trainer-nginx -DNS.9 = medcat-trainer-ui -DNS.10 = nlp-medcat-service-production -DNS.11 = nlp-medcat-service-production-deid -DNS.12 = cogstack-kibana -DNS.13 = cogstack-cohort -DNS.14 = cogstack-elasticsearch-1 -DNS.15 = cogstack-elasticsearch-2 -DNS.16 = cogstack-elasticsearch-3 -DNS.17 = cogstack-nifi -DNS.18 = cogstack-nifi-nginx -DNS.19 = cogstack-auth-service -DNS.20 = cogstack -DNS.21 = *.cogstack -DNS.22 = localhost -IP.1 = 127.0.0.1 -email.1 = admin@cogstack.net - -[req] -default_bits = 4096 -string_mask = utf8only -prompt = no -distinguished_name = req_distinguished_name -x509_extensions = v3_leaf -default_md = sha256 - -[req_distinguished_name] -CN = cogstack -C = UK -ST = London -L = UK -O = cogstack -OU = cogstack -CN = cogstack -``` +| `users_*.env` | Public local-development credentials consumed by services and setup scripts. Override them for every real deployment. | -> 💡 **Tip:** -> Always reload environment variables before running any script: -> ```bash -> cd ../deploy -> source export_env_vars.sh -> cd ../security -> ``` -> or manually if you just want to test out one file: -> ```bash -> source file.env -> ``` +### OpenSSL extension configuration ---- +`security/templates/ssl-extensions-x509.cnf` defines the shared CA and general service certificate extensions. `security/templates/gitea-x509.cnf` contains the narrower server-only SAN set used by Gitea. Add every deployment hostname to the relevant SAN list before generating certificates; changing a template does not alter certificates that have already been generated. -### 🛠️ Generation workflow +The Make targets load the required `.env` files automatically. The lower-level scripts remain available for development and troubleshooting, but should be run from `security/scripts/` because several of them use paths relative to that directory. -1. **Generate Root CA** +--- - ```bash - cd security/scripts - bash create_root_ca_cert.sh - ``` +### 🛠️ Generation workflow -2. **Generate service certificates** +From the repository root, initialize all certificates required by NiFi, Gitea, +and the search backend selected by `ELASTICSEARCH_VERSION` in `deploy/elasticsearch.env`: - ```bash - # Elasticsearch - bash create_es_native_certs.sh +```bash +make -C deploy init-security +``` - # OpenSearch - bash create_opensearch_node_cert.sh elasticsearch-1 elasticsearch-2 elasticsearch-3 +You can also initialize certificate sets independently: - # Kibana / Dashboards - bash create_opensearch_client_admin_certs.sh +```bash +make -C deploy init-security-root-ca +make -C deploy init-security-nifi +make -C deploy init-security-gitea +make -C deploy init-security-opensearch +make -C deploy init-security-elasticsearch +``` - # NiFi - bash nifi_toolkit_security.sh (not needed as of version 2.0+, use only for NiFi versions < 2.0) make sure to change $NIFI_TOOLKIT_VERSION env var in `../deploy/nifi.env`. +The initialization targets are idempotent: complete certificate sets are left +unchanged. Root CA and native Elasticsearch generation refuse to overwrite an +existing incomplete directory automatically, preventing accidental CA rotation. - ``` +1. **(Optional) Create a custom JKS keystore** -3. **(Optional) Create custom JKS keystores** + The low-level helper expects `mycert.crt` and `mycert.key` in the current directory. Pass base names rather than file names with extensions: ```bash - bash create_keystore.sh mycert.pem mystore.jks mypassword + cd security/scripts + bash create_keystore.sh mycert mycert-keystore mypassword ``` -4. **Re-export environment variables and restart services** +2. **Restart the required services** ```bash - cd ../deploy - source export_env_vars.sh - make start- + make -C deploy start- ``` --- ### 🧠 Best practices -- **Do not commit** private keys (`*.key`, `*.p12`, `*.jks`) to version control. -- **Back up** the Root CA files securely — they’re your trust anchor. -- **Rotate** certificates regularly (every 2 years) or whenever hostnames change. -- **Use unique CN/SANs** per environment (`dev`, `staging`, `prod`). +- **Do not commit** private keys (`*.key`, `*.p12`, `*.jks`) to version control. +- **Back up** the root CA securely — it is the deployment trust anchor. +- **Rotate** certificates before expiry or whenever a key may have been exposed. +- **Use unique CN/SANs** per environment (`dev`, `staging`, `prod`). - **Verify** certificate chains before deployment (e.g): ```bash - openssl verify -CAfile security/certificates/root/root-ca.pem security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt +openssl verify -CAfile security/certificates/root/root-ca.pem \ + security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt ``` diff --git a/docs/security/elasticsearch_opensearch.md b/docs/security/elasticsearch_opensearch.md index 32a3dab5e..5db438509 100644 --- a/docs/security/elasticsearch_opensearch.md +++ b/docs/security/elasticsearch_opensearch.md @@ -2,7 +2,7 @@ This section describes how to secure both **Elasticsearch (native)** and **OpenSearch** clusters used in the CogStack-NiFi stack, including certificate setup, user management, and role configuration. -All related certificates are stored in `security/certificates/elastic/`, and are generated from the shared **Root CA** created via [`create_root_ca_cert.sh`](certificates.md). +All related certificates are stored in `security/certificates/elastic/`. OpenSearch certificates are signed by the shared root CA; native Elasticsearch creates its own backend-specific certificate authority. Use the supported Make targets described in [Certificates and Root CA](certificates.md) to generate either set. --- @@ -14,7 +14,7 @@ Both **Elasticsearch** and **OpenSearch** deployments require: - secure credentials for built-in and custom users, - properly configured roles and role mappings. -Certificates and credentials are generated using the scripts provided in `security/scripts/` and are controlled through the `.env` files under `security/env/`. +Certificates are generated through the Make targets in `deploy/Makefile`. Those targets call the scripts in `security/scripts/` and load their configuration from the `.env` files under `security/env/`. --- @@ -28,13 +28,7 @@ All scripts reference the following environment configuration files: | `certificates_general.env` | Root CA configuration | | `users_elasticsearch.env` | Internal user credentials | -Reload them before running any security-related script: - -```bash -cd ../deploy -source export_env_vars.sh -cd ../security -``` +The Make targets and supported security scripts load these files themselves. Edit the files before generation; no separate export step is required. --- @@ -73,7 +67,7 @@ security/certificates/elastic/ │ ├── sample-kibana.yml │ └── README.txt └── opensearch/ - ├── admin.*, es_kibana_client.*, elastic-stack-ca.*, root-ca.* + ├── admin.*, es_kibana_client.*, elastic-stack-ca.* └── elasticsearch/{1,2,3}/... ``` @@ -85,10 +79,10 @@ Each version has its own generation scripts, but they all depend on the same `.e #### Elasticsearch (native) -To generate certificates for Elasticsearch: +To generate certificates for Elasticsearch from the repository root: ```bash -bash ./create_es_native_certs.sh +make -C deploy init-security-elasticsearch ``` This script creates all required node and HTTP certificates under: @@ -99,7 +93,7 @@ security/certificates/elastic/elasticsearch/elasticsearch-{1,2,3}/ The script uses variables such as: -- `ES_INSTANCE_NAME_*` — Node names (match `ELASTICSEARCH_NODE_*_NAME` in `/deploy/elasticsearch.env`) +- `ES_INSTANCE_NAME_*` — Node names (match `ELASTICSEARCH_NODE_*_NAME` in `deploy/elasticsearch.env`) - `ES_INSTANCE_ALTERNATIVE_*_NAME` — Alternative hostnames - `ES_HOSTNAMES` — List of all node hostnames - `ES_CLIENT_SUBJ_ALT_NAMES` / `ES_NODE_SUBJ_ALT_NAMES` — Additional domain aliases for SAN fields @@ -110,16 +104,10 @@ Make sure the environment variables are set correctly before running the script. #### OpenSearch -For OpenSearch nodes: +To generate the OpenSearch node, admin, and client certificates from the repository root: ```bash -bash ./create_opensearch_node_cert.sh elasticsearch-1 elasticsearch-2 elasticsearch-3 -``` - -Then generate the admin and client certificates: - -```bash -bash ./create_opensearch_client_admin_certs.sh +make -C deploy init-security-opensearch ``` This produces: @@ -153,30 +141,24 @@ All certificate references in `services/kibana/config/opensearch.yml` or `servic #### OpenSearch -1. Edit `security/es_roles/opensearch/internal_users.yml` to define users. -2. Optionally generate password hashes: - - ```bash - bash ./create_opensearch_internal_passwords.sh - ``` - -3. Apply changes by recreating containers: +1. Edit the password values in `security/env/users_elasticsearch.env` and ensure every required user is present in `security/es_roles/opensearch/internal_users.yml`. +2. With OpenSearch running, validate and then apply hashes for all internal users: ```bash - docker compose down -v - docker compose up -d + cd security/scripts + ./update_opensearch_users.sh elasticsearch-1 + ./update_opensearch_users.sh elasticsearch-1 --apply ``` -4. Populate tenants, roles, users, and role mappings: +3. Populate the additional tenants, roles, users, and role mappings: ```bash - cd security/scripts - bash create_opensearch_users.sh elasticsearch-1 --use-ssl + ./security/scripts/create_opensearch_users.sh localhost ``` - - `` is the OpenSearch node hostname (for this stack, usually `elasticsearch-1`). - - `--use-ssl` switches the script endpoint from `http` to `https` (recommended for this stack). - - Run the script from `security/scripts/` because it loads env files via relative paths. + - `` is the hostname covered by the OpenSearch node certificate. + - HTTPS with CA verification is the default. Use `--use-http` only for an explicitly unsecured local endpoint. + - The script resolves its files from its own location, so it can be run from any directory. ##### `create_opensearch_users.sh` reference @@ -184,15 +166,12 @@ Script: `security/scripts/create_opensearch_users.sh` Usage: ```bash -bash create_opensearch_users.sh [--use-ssl] +./security/scripts/create_opensearch_users.sh [--use-http] ``` Required inputs are loaded from: -- `deploy/general.env` - `deploy/elasticsearch.env` -- `security/env/certificates_elasticsearch.env` -- `security/env/certificates_general.env` - `security/env/users_elasticsearch.env` What it creates/updates: @@ -201,19 +180,23 @@ What it creates/updates: - Roles: `cogstack_ingest`, `cogstack_access` - Internal users: `cogstack_user`, `cogstack_pipeline`, `nifi` - Role mappings for `cogstack_access` and `cogstack_ingest` -- Passwords for built-in users: `logstash`, `kibanaro`, `readall`, `snapshotrestore` + +The script uses the current `/_plugins/_security/api` endpoints. Password rotation for predefined users such as `admin`, `logstash`, `kibanaro`, `readall`, and `snapshotrestore` remains the responsibility of `update_opensearch_users.sh`. Verification example: ```bash -curl -k -u admin:${ELASTIC_PASSWORD} \ - https://elasticsearch-1:9200/_opendistro/_security/api/roles/cogstack_ingest +source security/env/users_elasticsearch.env +curl --cacert security/certificates/elastic/opensearch/elastic-stack-ca.crt.pem \ + -u "${OPENSEARCH_ADMIN_USER:-admin}:${OPENSEARCH_ADMIN_PASSWORD:-$ELASTIC_PASSWORD}" \ + https://localhost:9200/_plugins/_security/api/roles/cogstack_ingest ``` Troubleshooting: - If you see authentication failures, confirm `ELASTIC_PASSWORD` in `security/env/users_elasticsearch.env` matches the running OpenSearch admin password. -- If you see `404` on security API paths, your OpenSearch version may require `_plugins/_security/api/...` instead of `_opendistro/_security/api/...`. +- If the CA is stored elsewhere, set `OPENSEARCH_CA_CERT` to the appropriate CA certificate before running the script. +- Ensure the supplied hostname appears in the OpenSearch node certificate SANs. - The script is idempotent (`PUT` calls), so it can be re-run safely after credential or role changes. OpenSearch includes default roles (`admin`, `kibanaserver`, `readall`, `snapshotrestore`, etc.) — always change their passwords after first run. @@ -293,13 +276,14 @@ Verification example after rotating `admin`, from the repository root: ```bash source security/env/users_elasticsearch.env -curl -k -u "admin:${ADMIN_PASSWORD:-$ELASTIC_PASSWORD}" \ - https://elasticsearch-1:9200/_plugins/_security/api/account +curl --cacert security/certificates/elastic/opensearch/elastic-stack-ca.crt.pem \ + -u "admin:${ADMIN_PASSWORD:-$ELASTIC_PASSWORD}" \ + https://localhost:9200/_plugins/_security/api/account ``` ##### OpenSearch Dashboards post-login setup (Global tenant + workspace) -After your first login to `https://localhost:5601` (default: `admin` / `admin`): +After your first login to `https://localhost:5601` using the development credentials in `security/env/users_elasticsearch.env`: 1. Open the user menu (top-right) and select **Switch tenant**. 2. Select `Global`, then apply the change. @@ -326,6 +310,7 @@ workspace.enabled: true Run after containers start: ```bash +cd security/scripts bash ./create_es_native_credentials.sh ``` @@ -355,14 +340,19 @@ You can modify credentials in `security/env/users_elasticsearch.env`. #### ✅ Verification -To verify HTTPS access and trust: +To verify HTTPS access and trust for the selected backend from the repository root, use its generated CA file: ```bash -curl -vk --cacert ./root-ca.pem https://elasticsearch-1:9200 +source deploy/elasticsearch.env +curl --cacert "security/certificates/elastic/${ELASTICSEARCH_VERSION}/elastic-stack-ca.crt.pem" \ + https://localhost:9200/ ``` -To check inter-node encryption (inside a container): +To inspect a node certificate while verifying the same CA: ```bash -openssl s_client -connect elasticsearch-1:9300 -CAfile ./root-ca.pem +source deploy/elasticsearch.env +openssl s_client -connect localhost:9200 -servername localhost \ + -CAfile "security/certificates/elastic/${ELASTICSEARCH_VERSION}/elastic-stack-ca.crt.pem" \ + -verify_hostname localhost ``` diff --git a/docs/security/main.md b/docs/security/main.md index 13faa51ca..1b08b5d88 100644 --- a/docs/security/main.md +++ b/docs/security/main.md @@ -2,31 +2,31 @@ ## 🗺️ Overview -All core CogStack-NiFi services — including **NiFi**, **Elasticsearch/OpenSearch**, **Kibana/OpenSearch Dashboards**, **JupyterHub**, **NGINX** and **Gitea** — are now deployed with **HTTPS enabled by default**. -Each component is provisioned with its own X.509 certificates issued by the shared root CA generated via the `create_root_ca_cert.sh` script. +Core CogStack-NiFi services use TLS certificates generated locally for each deployment. A shared root Certificate Authority (CA) signs dedicated service leaf certificates, while native Elasticsearch uses its own certificate-generation tooling. This ensures full end-to-end encryption across the stack for essential operations, including service-to-service communication and user-facing endpoints. Security is achieved through: - A unified **root Certificate Authority (CA)**, -- Per-service certificate generation and signing scripts, -- Environment variable management for secrets and credentials, and +- Per-service certificate generation and signing targets, +- Environment-file management for local development credentials, and - Optional reverse-proxy enforcement via **NGINX**. -> ⚠️ **Important:** Always generate unique certificates and credentials for each deployment. -> The repository provides sample certificates for demonstration only. +!!! warning + + Generated certificates and private keys are deployment-local and ignored by Git. Run `make -C deploy init-security` before starting services. The tracked `security/env/*.env` files contain public development defaults only; never use those values as production secrets. ## 🧩 Components secured with HTTPS -| Service | HTTPS/TLS Enabled | Certificate Location | Script(s) Used | -|----------|------------------|----------------------|----------------| -| NiFi | ✅ | `security/certificates/nifi/` | `nifi_toolkit_security.sh` | -| Elasticsearch / OpenSearch | ✅ | `security/certificates/elastic/(elasticsearch or opensearch)/` | `create_es_native_certs.sh`, `create_opensearch_node_cert.sh` | -| Kibana / OpenSearch Dashboards | ✅ | `security/certificates/elastic/(elasticsearch or opensearch)/` | `create_opensearch_client_admin_certs.sh` | -| JupyterHub | ✅ | `security/certificates/root/` | `create_root_ca_cert.sh` | -| Gitea | ✅ | `security/certificates/root/` | `create_root_ca_cert.sh` | -| NGINX | ✅ | `security/certificates/root/` | `create_root_ca_cert.sh` | +| Service | Certificate location | Supported initialization target | +|---------|----------------------|---------------------------------| +| NiFi | `security/certificates/nifi/` | `make -C deploy init-security-nifi` | +| Elasticsearch | `security/certificates/elastic/elasticsearch/` | `make -C deploy init-security-elasticsearch` | +| OpenSearch and Dashboards | `security/certificates/elastic/opensearch/` | `make -C deploy init-security-opensearch` | +| Gitea | `security/certificates/gitea/` | `make -C deploy init-security-gitea` | + +The root CA private key must be used only to sign leaf certificates. Services trust `root-ca.pem`; they must never serve `root-ca.key` as their TLS private key. --- @@ -39,12 +39,13 @@ Below is the high-level structure with explanations for each sub-folder. security/ ├── certificates/ # All generated certificates and keystores │ ├── elastic/ # Elasticsearch / OpenSearch + Kibana certs -│ ├── nifi/ # Apache NiFi certificates (generated via NiFi Toolkit) +│ ├── nifi/ # Apache NiFi leaf certificate and Java stores +│ ├── gitea/ # Gitea leaf certificate │ └── root/ # Root CA files and truststores │ ├── env/ # Environment variable definitions for certs and users │ ├── certificates_*.env # Variables controlling certificate generation -│ └── users_*.env # Default credentials for each service +│ └── users_*.env # Public local-development defaults only │ ├── es_roles/ # Role and role mapping definitions for ES / OpenSearch │ ├── elasticsearch/ # Native Elasticsearch roles @@ -55,15 +56,16 @@ security/ │ ├── create_es_native_certs.sh # Elasticsearch node and client certs │ ├── create_es_native_credentials.sh # Runs post-deployment to create default Elasticsearch system users and tokens │ ├── create_opensearch_node_cert.sh # Generates certificates and JKS stores for each OpenSearch node -│ ├── create_opensearch_admin_certs.sh # Creates admin + client certificates for OpenSearch Dashboards (Kibana equivalent) +│ ├── create_opensearch_client_admin_certs.sh # Creates admin + client certificates for OpenSearch Dashboards │ ├── create_opensearch_internal_passwords.sh # Generates bcrypt password hashes for OpenSearch internal_users.yml │ ├── update_opensearch_users.sh # Updates password hashes for every user in OpenSearch internal_users.yml │ ├── create_opensearch_users.sh # Creates OpenSearch internal users and role mappings (manual execution post-startup) -│ ├── nifi_toolkit_security.sh # Generates NiFi HTTPS certs using NiFi Toolkit (for NiFi < 2.0, no longer used for certs as of 2.0+) +│ ├── create_nifi_certs.sh # Generates NiFi 2.x leaf certificates and Java stores +│ ├── create_gitea_certs.sh # Generates a dedicated Gitea leaf certificate │ ├── nifi_init_create_user_auth.sh # Bootstraps a temporary NiFi container to create a single-user authentication file │ ├── nifi_create_single_user_auth.sh # Helper script executed inside the container to generate NiFi single-user credentials │ ├── es_native_cert_generator.sh # Helper called by create_es_native_certs.sh to assemble ES cert bundles -│ └── create_keystore.sh # Builds Java KeyStores (JKS) from PEM or PKCS#12 certificates +│ └── create_keystore.sh # Builds Java keystores from a certificate and private key │ └── templates/ # OpenSSL / X.509 configuration templates └── ssl-extensions-x509.cnf # SAN extensions used across certificate scripts diff --git a/docs/security/nifi.md b/docs/security/nifi.md index e1c3bffa8..7ed1fda23 100644 --- a/docs/security/nifi.md +++ b/docs/security/nifi.md @@ -35,7 +35,7 @@ For securing Apache NiFi endpoints with certificates, see [the official document Before starting the NiFi container: -- (optional if already done) run `create_root_ca_cert.sh` to generate root CA certs used across services. +- run `make -C deploy init-security-nifi` from the repository root. This creates the shared root CA when needed, then generates the NiFi certificate bundle without replacing a complete existing bundle. - set `nifi.sensitive.props.key` to a stable value (minimum 12 characters). Example (`nifi/conf/nifi.properties`): @@ -52,12 +52,7 @@ nifi.security.truststorePasswd=example-truststore-password ### Setting up access via user account (single user credentials) -Default: - -```text -username: admin -password: cogstackNiFi -``` +Local single-user credentials are defined in `security/env/users_nifi.env`. They are public development defaults and must be replaced for any exposed deployment. - `login-identity-providers.xml` in `nifi/conf/` stores the account settings. - to generate credentials inside the container: @@ -165,7 +160,10 @@ server { ### 🧪 Test connectivity ```bash -curl -vk --cert ./nifi.pem --key ./nifi.key https://localhost:8443/nifi-api/flow/about +curl --cacert security/certificates/root/root-ca.pem \ + --cert security/certificates/nifi/nifi.pem \ + --key security/certificates/nifi/nifi.key \ + https://localhost:8443/nifi-api/flow/about ``` --- diff --git a/docs/security/services.md b/docs/security/services.md index bbe15ca28..1fb76a75a 100644 --- a/docs/security/services.md +++ b/docs/security/services.md @@ -1,47 +1,49 @@ -## 🗄️ Security for CogStack provided other services +# Security for additional services -### General services TLS configuration +Services use dedicated leaf certificates for HTTPS and trust the shared CogStack root CA. The root CA private key must be retained only for signing and must never be mounted as a service's TLS key. -All services in cogstack that are not listed in `deploy/services.yml`and use TLS will be described on this page. For services that are still part of the stack but in `dervices/` (again, service not also present in `deploy/services.yml`) the TLS setup is handled differently, and the setup is described in each service's README.md. Generally, most should just use the root-ca certs from `security/certificates/root/`. +## Gitea TLS configuration -### Gitea TLS Configuration +Generate the local/reference Gitea certificate from the repository root: -This section describes how **Gitea** is secured using the shared **Root Certificate Authority (CA)** generated by `create_root_ca_cert.sh`. - -Unlike other services (such as NiFi or Elastic), **Gitea does not require its own dedicated certificate pair** or an NGINX reverse proxy. -It operates directly with the **Root CA** to provide HTTPS encryption and mutual trust within the CogStack-NiFi stack. - ---- - -### 📁 Certificate source +```bash +make -C deploy init-security-gitea +``` -All certificates used by Gitea originate from: +This creates: ```text -security/certificates/root/ +security/certificates/gitea/ +├── gitea.key +├── gitea.csr +├── gitea.pem +└── gitea.crt ``` -| File | Purpose | -|------|----------| -| `root-ca.pem` | Public CA certificate used by Gitea for HTTPS trust | -| `root-ca.key` | Root CA private key (used only when generating new certificates) | -| `root-ca.p12` | Optional PKCS#12 keystore (not required by Gitea) | +The leaf certificate is signed by the shared CA and contains local development SANs for `gitea`, `cogstack-gitea`, `localhost`, and `127.0.0.1`. The Compose configuration mounts only this generated leaf-certificate directory and configures Gitea to serve `gitea.pem` with `gitea.key`; it does not expose the root CA private key to the service. -### 🧠 Notes +For Kubernetes, create the development TLS Secret with: -- The **Root CA** (`root-ca.pem`) is shared across all CogStack services for internal TLS trust. -- You do **not** need to create a new `gitea.crt` or `gitea.key`; the Root CA cert/key pair is sufficient. -- Ensure `root-ca.key` remains private and is not committed to version control. -- The same CA also secures NiFi, ElasticSearch, OpenSearch, Kibana, and JupyterHub. +```bash +kubectl -n cogstack create secret generic gitea-tls \ + --from-file=gitea.pem=./security/certificates/gitea/gitea.pem \ + --from-file=gitea.key=./security/certificates/gitea/gitea.key +``` ---- +Production deployments should instead provide a deployment-specific TLS Secret issued for their public Gitea hostname, normally through the platform certificate manager. -### ✅ Verification +## Verification -To confirm Gitea is serving HTTPS correctly: +Verify the generated chain before starting Gitea: ```bash -curl -vk --cacert ./security/certificates/root/root-ca.pem https://gitea.local:2222/ +openssl verify \ + -CAfile security/certificates/root/root-ca.pem \ + security/certificates/gitea/gitea.pem ``` -You should see a valid TLS handshake and an HTTP 200 response. +After starting Gitea, verify its HTTPS endpoint: + +```bash +curl --cacert security/certificates/root/root-ca.pem https://localhost:3000/ +``` diff --git a/mkdocs.yml b/mkdocs.yml index 48558c271..83f798e67 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,5 @@ site_name: Cogstack NiFi Documentation -site_url: http://localhost:8080/docs/ +site_url: !ENV [READTHEDOCS_CANONICAL_URL, "https://cogstack-nifi.readthedocs.io/en/latest/"] theme: name: material @@ -34,6 +34,9 @@ edit_uri: edit/main/docs/ docs_dir: docs +exclude_docs: | + README.md + nav: - Home: index.md - 📰 News: news.md @@ -54,7 +57,7 @@ nav: - 🛡️ Security: - security/main.md - 🏛️ Certificates and Root CA: security/certificates.md - - 🗄️ Security for CogStack provided other services: security/services.md + - 🗄️ Additional services: security/services.md - 🔐 NiFi TLS & Admin Access Setup (with NGINX): security/nifi.md - 🌐 Elasticsearch / OpenSearch Security: security/elasticsearch_opensearch.md @@ -79,3 +82,14 @@ markdown_extensions: - pymdownx.emoji: emoji_index: !!python/name:material.extensions.emoji.twemoji emoji_generator: !!python/name:material.extensions.emoji.to_svg + +validation: + nav: + omitted_files: warn + not_found: warn + absolute_links: warn + links: + not_found: warn + anchors: warn + absolute_links: warn + unrecognized_links: warn diff --git a/nifi/Dockerfile b/nifi/Dockerfile index ddbffee89..a9063517b 100644 --- a/nifi/Dockerfile +++ b/nifi/Dockerfile @@ -91,9 +91,6 @@ RUN set -eux; \ apt-get clean; \ rm -rf /var/lib/apt/lists/* -# bust cache -ENV UV_VERSION=latest - # install rust, medcat requirement, install UV ENV HOME=/root ENV PATH="/root/.cargo/bin:${PATH}" @@ -105,8 +102,12 @@ RUN set -eux; \ /tmp/rustup-init.sh -y; \ rm /tmp/rustup-init.sh +# Keep the installer version aligned with the repository's uv requirement. +COPY pyproject.toml /tmp/cogstack_nifi/pyproject.toml RUN set -eux; \ - curl -Ls https://astral.sh/uv/install.sh -o /tmp/install_uv.sh; \ + UV_VERSION="$(sed -n 's/^required-version = "==\([^"]*\)"$/\1/p' /tmp/cogstack_nifi/pyproject.toml)"; \ + test -n "${UV_VERSION}"; \ + curl -LsSf "https://astral.sh/uv/${UV_VERSION}/install.sh" -o /tmp/install_uv.sh; \ bash /tmp/install_uv.sh; \ rm /tmp/install_uv.sh @@ -114,14 +115,30 @@ RUN set -eux; \ RUN uv pip install --no-cache-dir --break-system-packages --system --upgrade pip setuptools wheel -# install util packages used in NiFi scripts (such as avro, nifyapi, etc.) -COPY nifi/requirements.txt ./requirements.txt -RUN uv pip install --no-cache-dir --break-system-packages --target=${NIFI_PYTHON_FRAMEWORK_SOURCE_DIRECTORY} -r "./requirements.txt" --index-url https://pypi.org/simple +# Install the locked runtime dependencies used by NiFi scripts and extensions. +COPY uv.lock /tmp/cogstack_nifi/uv.lock +RUN uv export \ + --project /tmp/cogstack_nifi \ + --frozen \ + --no-dev \ + --no-emit-project \ + --format requirements.txt \ + --output-file /tmp/cogstack_nifi/requirements.txt \ + && uv pip install \ + --no-cache-dir \ + --break-system-packages \ + --target=${NIFI_PYTHON_FRAMEWORK_SOURCE_DIRECTORY} \ + -r /tmp/cogstack_nifi/requirements.txt \ + --index-url https://pypi.org/simple # install the local cogstack_nifi package so nifi.user_scripts imports resolve -COPY pyproject.toml /tmp/cogstack_nifi/pyproject.toml COPY nifi /tmp/cogstack_nifi/nifi -RUN uv pip install --no-cache-dir --break-system-packages --target=${NIFI_PYTHON_FRAMEWORK_SOURCE_DIRECTORY} /tmp/cogstack_nifi +RUN uv pip install \ + --no-cache-dir \ + --break-system-packages \ + --no-deps \ + --target=${NIFI_PYTHON_FRAMEWORK_SOURCE_DIRECTORY} \ + /tmp/cogstack_nifi ####################################################################################################### @@ -137,7 +154,7 @@ RUN set -eux; \ mkdir -p /opt/nifi/groovy; \ cd /opt/nifi/groovy; \ url1="https://archive.apache.org/dist/groovy/${GROOVY_VERSION}/distribution/apache-groovy-binary-${GROOVY_VERSION}.zip"; \ - url2="https://repo1.maven.org/maven2/org/apache/groovy/apache-groovy-binary/${GROOVY_VERSION}/apache-groovy-binary-${GROOVY_VERSION}.zip"; \ + url2="https://repo.maven.apache.org/maven2/org/apache/groovy/apache-groovy-binary/${GROOVY_VERSION}/apache-groovy-binary-${GROOVY_VERSION}.zip"; \ curl -fsSL --retry 8 --retry-delay 3 --connect-timeout 20 -o groovy.zip "$url1" \ || curl -fsSL --retry 8 --retry-delay 3 --connect-timeout 20 -o groovy.zip "$url2"; \ unzip groovy.zip; rm groovy.zip @@ -149,17 +166,7 @@ RUN $GROOVY_BIN/grape -V install org.apache.avro avro 1.12.0 # INSTALL NAR extensions WORKDIR /opt/nifi/nifi-current/lib/ -# --- Hotfix: NiFi 2.7.2 + Azure + Netty QUIC missing class (netty 4.2.9.Final) --- -ARG NETTY_VERSION=4.2.17.Final -RUN set -eux; \ - cd /opt/nifi/nifi-current/lib; \ - curl -fL --retry 5 --retry-delay 2 \ - -o "netty-codec-classes-quic-${NETTY_VERSION}.jar" \ - "https://repo1.maven.org/maven2/io/netty/netty-codec-classes-quic/${NETTY_VERSION}/netty-codec-classes-quic-${NETTY_VERSION}.jar"; \ - # sanity check: ensure the Quic class exists in the jar - jar tf "netty-codec-classes-quic-${NETTY_VERSION}.jar" | grep -q '^io/netty/handler/codec/quic/Quic.class$' - -# Install parquet NAR +# Install additional NAR extensions. RUN set -eux; \ base="https://repo.maven.apache.org/maven2/org/apache/nifi"; \ nars=( \ @@ -226,11 +233,16 @@ RUN set -eux; \ ); \ for a in "${nars[@]}"; do \ url="${base}/${a}/${NIFI_VERSION}/${a}-${NIFI_VERSION}.nar"; \ - echo "Checking $a"; \ - if ! curl -fsSL --retry 2 \ + echo "Downloading $a"; \ + if ! curl -fsSL \ + --connect-timeout 20 \ + --retry 5 \ + --retry-connrefused \ + --retry-delay 3 \ + --retry-max-time 120 \ -o "${a}-${NIFI_VERSION}.nar" \ "$url"; then \ - echo "MISSING: $a @ ${NIFI_VERSION}"; \ + echo "WARNING: NAR unavailable: $a @ ${NIFI_VERSION}"; \ rm -f "${a}-${NIFI_VERSION}.nar"; \ fi; \ done; \ diff --git a/nifi/recreate_nifi_docker_image.sh b/nifi/recreate_nifi_docker_image.sh deleted file mode 100755 index 640f11f71..000000000 --- a/nifi/recreate_nifi_docker_image.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -set -e - -NIFI_GID=${NIFI_GID:-1000} -NIFI_UID=${NIFI_UID:-1000} - -if [[ $NIFI_UID == 1000 ]]; then - NIFI_UID=$(id -u) -fi - -if [[ $NIFI_GID == 1000 ]]; then - NIFI_GID=$(id -g) -fi - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" - -docker build --build-arg GID=${NIFI_GID} \ - --build-arg UID=${NIFI_UID} \ - -t cogstacksystems/cogstack-nifi:latest \ - -f "$SCRIPT_DIR/Dockerfile" \ - "$REPO_ROOT" diff --git a/nifi/requirements-dev.txt b/nifi/requirements-dev.txt deleted file mode 100644 index 5547e70bf..000000000 --- a/nifi/requirements-dev.txt +++ /dev/null @@ -1,7 +0,0 @@ -ruff==0.12.12 -mypy==1.17.0 -mypy-extensions==1.1.0 -types-aiofiles==24.1.0.20250708 -types-PyYAML==6.0.12.20250516 -types-setuptools==80.9.0.20250529 -timeout-decorator==0.5.0 diff --git a/nifi/requirements.txt b/nifi/requirements.txt deleted file mode 100644 index 67fd04f30..000000000 --- a/nifi/requirements.txt +++ /dev/null @@ -1,39 +0,0 @@ -wheel==0.46.2 - -# data science pkgs -nltk==3.10.3 -numpy==2.4.2 -pandas==2.3.3 -dill>=0.4.0,<1.0.0 -bokeh==3.8.2 -psycopg[c,binary]==3.2.9 -overrides==7.0.0 -polars==1.37.1 -snowflake==1.10.0 - -# used in NiFi scripts: geolocation, avro conversion etc. -py4j==0.10.9.9 -rancoord==0.0.6 -geocoder==1.38.1 -avro==1.12.1 -nipyapi==1.5.1 -py7zr==1.1.3 -jsonpickle==4.1.1 -xlsxwriter==3.2.9 -mysql-connector-python==9.5.0 -snowflake-connector-python==4.7.2 -pymssql==2.3.9 -requests==2.33.0 -PyYAML==6.0.3 -pydantic==2.12.5 -overrides==7.0.0 -pyarrow==23.0.1 -pydantic-settings==2.14.2 -fhir.resources==8.3.0 -# other utils -xnat==0.7.2 - -# ElasticSearch/OpenSearch packages -elasticsearch9==9.1.0 -opensearch-py==3.0.0 -neo4j==5.28.2 diff --git a/pyproject.toml b/pyproject.toml index 4f7d9c6e2..2d0ccec13 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,6 +4,9 @@ exclude = ["nifi/user_scripts/legacy_scripts", "services"] target-version = "py311" indent-width = 4 +[tool.uv] +required-version = "==0.12.1" + [tool.ruff.lint] # Enable flake8-bugbear (`B`) rules, in addition to the defaults. select = [ @@ -52,6 +55,51 @@ venv = ".venv" name = "cogstack_nifi" version = "0.0.1" requires-python = ">=3.11" +dependencies = [ + "avro==1.12.2", + "bokeh==3.8.2", + "dill>=0.4.0,<1.0.0", + "elasticsearch9==9.1.0", + "fhir.resources==8.3.0", + "geocoder==1.38.1", + "jsonpickle==4.1.1", + "mysql-connector-python==26.7.0", + "neo4j==5.28.2", + "nipyapi==1.7.0", + "nltk==3.10.3", + "numpy==2.4.2", + "opensearch-py==3.0.0", + "overrides==7.0.0", + "pandas==2.3.3", + "polars==1.44.1", + "psycopg[binary,c]==3.3.5", + "py4j==0.10.9.9", + "py7zr==1.1.3", + "pyarrow==25.0.1", + "pydantic==2.13.5", + "pydantic-settings==2.14.2", + "pydicom==3.0.2", + "pymssql==2.3.9", + "PyYAML==6.0.3", + "rancoord==0.0.6", + "requests==2.33.0", + "snowflake==1.13.1", + "snowflake-connector-python==4.7.2", + "wheel==0.46.2", + "xlsxwriter==3.2.9", + "xnat==0.8.1", +] + +[dependency-groups] +dev = [ + "mypy==1.17.0", + "mypy-extensions==1.1.0", + "ruff==0.12.12", + "timeout-decorator==0.5.0", + "types-aiofiles==24.1.0.20250708", + "types-PyYAML==6.0.12.20250516", + "types-setuptools==80.9.0.20250529", +] [build-system] requires = ["setuptools>=61.0"] diff --git a/scripts/git_update_submodules_in_repo.sh b/scripts/git_update_submodules_in_repo.sh index 12bc6ef13..ab39f87d6 100755 --- a/scripts/git_update_submodules_in_repo.sh +++ b/scripts/git_update_submodules_in_repo.sh @@ -8,6 +8,8 @@ git submodule update --init --recursive echo "Updating submodules to latest release tag on each origin default branch (fallback: branch HEAD)..." +# Variables in this block are intentionally expanded by each submodule shell. +# shellcheck disable=SC2016 git submodule foreach --recursive ' set -e @@ -58,7 +60,14 @@ git submodule foreach --recursive ' ' #git submodule foreach git pull origin main -git add $(git config -f .gitmodules --get-regexp '^submodule\..*\.path$' | awk '{print $2}') || true +submodule_paths=() +while IFS= read -r submodule_path; do + [[ -n "$submodule_path" ]] && submodule_paths+=("$submodule_path") +done < <(git config -f .gitmodules --get-regexp '^submodule\..*\.path$' | awk '{print $2}') + +if (( ${#submodule_paths[@]} > 0 )); then + git add -- "${submodule_paths[@]}" || true +fi git commit -m "Update submodules to latest release tags (or default branch)" || echo "ℹ️ No changes to commit." echo "✅ Submodule update complete." diff --git a/scripts/gitea_authorize_with_ssh.sh b/scripts/gitea_authorize_with_ssh.sh index 58bd92e71..34a952803 100755 --- a/scripts/gitea_authorize_with_ssh.sh +++ b/scripts/gitea_authorize_with_ssh.sh @@ -1,6 +1,9 @@ #!/bin/bash +# shellcheck disable=SC1090 # Environment file location is selected at runtime. set -e +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" GITEA_ENV_FILE="./deploy/gitea.env" if [ -f "$GITEA_ENV_FILE" ]; then @@ -15,6 +18,16 @@ else set +a fi +CURL_TLS_ARGS=() +if [[ "$GITEA_HOST_URL" == https://* ]]; then + GITEA_CA_CERT="${GITEA_CA_CERT:-${REPO_ROOT}/security/certificates/root/root-ca.pem}" + if [[ ! -r "$GITEA_CA_CERT" ]]; then + echo "❌ Gitea CA certificate is not readable: $GITEA_CA_CERT" >&2 + exit 1 + fi + CURL_TLS_ARGS=(--cacert "$GITEA_CA_CERT") +fi + # 1. Generate SSH key if it doesn't exist echo "=================================================================================================================================================" echo "# 1. Generate SSH key if it doesn't exist" @@ -30,7 +43,7 @@ fi if [ -f "$GITEA_LOCAL_KEY_PATH" ]; then if ssh-add -l | grep -q "$GITEA_LOCAL_KEY_PATH"; then - ssh-add -d $GITEA_LOCAL_KEY_PATH + ssh-add -d "$GITEA_LOCAL_KEY_PATH" echo "🗑️ Removed SSH key from agent: $GITEA_LOCAL_KEY_PATH" else echo "ℹ️ SSH key not loaded in agent: $GITEA_LOCAL_KEY_PATH" @@ -51,7 +64,7 @@ echo "========================================================================== echo "# 3. Upload to Gitea via API" echo "🌐 Uploading SSH key to Gitea..." -curl -s -k -X POST "$GITEA_HOST_URL/api/v1/user/keys" \ +curl --silent --show-error "${CURL_TLS_ARGS[@]}" -X POST "$GITEA_HOST_URL/api/v1/user/keys" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d @- <&2 + exit 1 + fi + CURL_TLS_ARGS=(--cacert "$GITEA_CA_CERT") +fi + +api_get() { curl --silent --show-error "${CURL_TLS_ARGS[@]}" -H "Authorization: token ${GITEA_TOKEN}" "$1"; } +api_post() { curl --silent --show-error "${CURL_TLS_ARGS[@]}" -X POST -H "Authorization: token ${GITEA_TOKEN}" -H "Content-Type: application/json" "$1" --data-binary @-; } # 1. check if the Organization exists, if not create it echo "=================================================================================================================================================" echo "# 1. check if the Organization exists, if not create it" echo "🔎 Checking if org '$GITEA_ORG' exists..." -if curl -ks -H "Authorization: token $GITEA_TOKEN" \ +if curl --silent --show-error "${CURL_TLS_ARGS[@]}" -H "Authorization: token $GITEA_TOKEN" \ "$GITEA_HOST_URL/api/v1/orgs/$GITEA_ORG" | grep -q '"username"'; then echo "✅ Org '$GITEA_ORG' already exists — skipping creation." else echo "🏢 Creating org '$GITEA_ORG'..." - curl -ks -X POST "$GITEA_HOST_URL/api/v1/orgs" \ + curl --silent --show-error "${CURL_TLS_ARGS[@]}" -X POST "$GITEA_HOST_URL/api/v1/orgs" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "{ @@ -48,18 +61,18 @@ if ! api_get "${GITEA_API}/repos/${GITEA_ORG}/${GITEA_MAIN_REPO_NAME}" | grep -q echo '{"name":"'"${GITEA_MAIN_REPO_NAME}"'","private":true}' | api_post "${GITEA_API}/orgs/${GITEA_ORG}/repos" >/dev/null echo "✅ created repo ${GITEA_MAIN_REPO_NAME}" # add as remote - if git remote get-url $GITEA_DEFAULT_MAIN_REMOTE_NAME >/dev/null 2>&1; then - git remote set-url $GITEA_DEFAULT_MAIN_REMOTE_NAME "$GITEA_BASE_URL" + if git remote get-url "$GITEA_DEFAULT_MAIN_REMOTE_NAME" >/dev/null 2>&1; then + git remote set-url "$GITEA_DEFAULT_MAIN_REMOTE_NAME" "$GITEA_BASE_URL" else - git remote add $GITEA_DEFAULT_MAIN_REMOTE_NAME "$GITEA_BASE_URL" + git remote add "$GITEA_DEFAULT_MAIN_REMOTE_NAME" "$GITEA_BASE_URL" fi else echo "✅ ${GITEA_MAIN_REPO_NAME} main repo exists" # still ensure remote exists/points correctly - if git remote get-url $GITEA_DEFAULT_MAIN_REMOTE_NAME >/dev/null 2>&1; then - git remote set-url $GITEA_DEFAULT_MAIN_REMOTE_NAME "$GITEA_BASE_URL" + if git remote get-url "$GITEA_DEFAULT_MAIN_REMOTE_NAME" >/dev/null 2>&1; then + git remote set-url "$GITEA_DEFAULT_MAIN_REMOTE_NAME" "$GITEA_BASE_URL" else - git remote add $GITEA_DEFAULT_MAIN_REMOTE_NAME "$GITEA_BASE_URL" + git remote add "$GITEA_DEFAULT_MAIN_REMOTE_NAME" "$GITEA_BASE_URL" fi fi @@ -73,18 +86,20 @@ echo "==> Ensure org repos for submodules, keep original .gitmodules, add '$GITE # ensure .gitmodules exists [ -f .gitmodules ] || { echo "ℹ️ .gitmodules not found"; exit 0; } -# command to extract submodule paths -paths_cmd='git config -f .gitmodules --get-regexp "^submodule\..*\.path$" | awk "{print \$2}"' +# Extract submodule paths once and keep each result as a quoted array entry. +submodule_paths=() +while IFS= read -r path; do + [[ -n "$path" ]] && submodule_paths+=("$path") +done < <(git config -f .gitmodules --get-regexp '^submodule\..*\.path$' | awk '{print $2}') -# count -count=$(eval "$paths_cmd" | grep -v '^$' | wc -l | tr -d ' ') +count=${#submodule_paths[@]} [ "$count" -eq 0 ] && { echo "ℹ️ No submodules found in .gitmodules"; exit 0; } echo "==> Found $count submodule(s):" -eval "$paths_cmd" | while IFS= read -r path; do +for path in "${submodule_paths[@]}"; do printf ' - %s\n' "$path" done -eval "$paths_cmd" | while IFS= read -r path; do +for path in "${submodule_paths[@]}"; do [ -z "$path" ] && continue name="$(basename "$path")" gitea_url="${GITEA_NAMESPACE_URL}/${name}.git" @@ -107,10 +122,10 @@ eval "$paths_cmd" | while IFS= read -r path; do # ensure submodule also uses your SSH key (main repo already set above, but keep it explicit) git config core.sshCommand "ssh -i $GITEA_LOCAL_KEY_PATH -o IdentitiesOnly=yes" - if git remote get-url $GITEA_DEFAULT_MAIN_REMOTE_NAME >/dev/null 2>&1; then - git remote set-url $GITEA_DEFAULT_MAIN_REMOTE_NAME "$gitea_url" + if git remote get-url "$GITEA_DEFAULT_MAIN_REMOTE_NAME" >/dev/null 2>&1; then + git remote set-url "$GITEA_DEFAULT_MAIN_REMOTE_NAME" "$gitea_url" else - git remote add $GITEA_DEFAULT_MAIN_REMOTE_NAME "$gitea_url" + git remote add "$GITEA_DEFAULT_MAIN_REMOTE_NAME" "$gitea_url" fi # make default pushes go to Gitea; fetch stays on origin (GitHub) @@ -127,13 +142,12 @@ eval "$paths_cmd" | while IFS= read -r path; do fi # avoid mirror pushes (which include refs/remotes/origin/*) - git config --get-all remote.$GITEA_DEFAULT_MAIN_REMOTE_NAME.mirror >/dev/null 2>&1 && \ - git config --unset-all remote.$GITEA_DEFAULT_MAIN_REMOTE_NAME.mirror || true + git config --unset-all "remote.${GITEA_DEFAULT_MAIN_REMOTE_NAME}.mirror" >/dev/null 2>&1 || true # push only local branches + tags echo "↗️ pushing branches & tags to $GITEA_DEFAULT_MAIN_REMOTE_NAME…" - git push $GITEA_DEFAULT_MAIN_REMOTE_NAME --all - git push $GITEA_DEFAULT_MAIN_REMOTE_NAME --tags + git push "$GITEA_DEFAULT_MAIN_REMOTE_NAME" --all + git push "$GITEA_DEFAULT_MAIN_REMOTE_NAME" --tags else echo "ℹ️ no local refs; skip push" fi @@ -143,15 +157,19 @@ done # 4. Push the main repo to gitea echo "=================================================================================================================================================" echo "# 4. Pushing the main repo to $GITEA_DEFAULT_MAIN_REMOTE_NAME" -git push -u $GITEA_DEFAULT_MAIN_REMOTE_NAME HEAD:main +git push -u "$GITEA_DEFAULT_MAIN_REMOTE_NAME" HEAD:main # 5. Verify submodules point/fetch/push as expected to gitea echo "=================================================================================================================================================" echo "# 5. Verify submodules point/fetch/push as expected to $GITEA_DEFAULT_MAIN_REMOTE_NAME" -git submodule foreach 'echo $name; git remote -v' +# `$name` is provided by `git submodule foreach` in the child shell. +# shellcheck disable=SC2016 +git submodule foreach 'echo "$name"; git remote -v' # 6. Make sure SSH key is always used echo "=================================================================================================================================================" echo "# 6. Make sure SSH key is always used" git config core.sshCommand "ssh -i $GITEA_LOCAL_KEY_PATH -o IdentitiesOnly=yes" +# The exported key path must expand inside each submodule shell. +# shellcheck disable=SC2016 git submodule foreach 'git config core.sshCommand "ssh -i $GITEA_LOCAL_KEY_PATH -o IdentitiesOnly=yes"' diff --git a/scripts/gitea_update_submodules_from_upstream.sh b/scripts/gitea_update_submodules_from_upstream.sh index 333cee51a..5cb8baca2 100755 --- a/scripts/gitea_update_submodules_from_upstream.sh +++ b/scripts/gitea_update_submodules_from_upstream.sh @@ -1,10 +1,11 @@ #!/bin/bash +# shellcheck disable=SC1090 # Environment file location is selected at runtime. set -e GITEA_ENV_FILE="./deploy/gitea.env" if [ -f "$GITEA_ENV_FILE" ]; then - echo "📦 Loading environment from $GITEA_ENV_FILE"f + echo "📦 Loading environment from $GITEA_ENV_FILE" set -a source "$GITEA_ENV_FILE" set +a diff --git a/scripts/installation_utils/detect_os.sh b/scripts/installation_utils/detect_os.sh index 6b245efb2..4850aa136 100755 --- a/scripts/installation_utils/detect_os.sh +++ b/scripts/installation_utils/detect_os.sh @@ -4,11 +4,10 @@ os_distribution="" if ls /etc/*release 1> /dev/null 2>&1 ; then - os_distribution=$(cat /etc/*release | egrep -iom1 '(centos|debian|ubuntu|red hat)') - os_distribution="$(tr [A-Z] [a-z] <<< "$os_distribution")" # to lower chars + os_distribution=$(grep -Eiom1 '(centos|debian|ubuntu|red hat)' /etc/*release) + os_distribution="$(tr '[:upper:]' '[:lower:]' <<< "$os_distribution")" # to lower chars echo "$os_distribution" else echo "Distribution version could not be found. Stopping script..."; exit 1 fi; - diff --git a/scripts/installation_utils/install_docker_and_utils.sh b/scripts/installation_utils/install_docker_and_utils.sh index 437733aa3..5144acf43 100755 --- a/scripts/installation_utils/install_docker_and_utils.sh +++ b/scripts/installation_utils/install_docker_and_utils.sh @@ -35,9 +35,11 @@ then echo "Installing Azure CLI..." curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash + # shellcheck disable=SC1091 # Standard OS metadata file provided by Debian/Ubuntu. + docker_codename="$(. /etc/os-release && printf '%s' "$VERSION_CODENAME")" echo \ - "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ - "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + ${docker_codename} stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt -y update diff --git a/scripts/maintenance/audit_pip_dependency.sh b/scripts/maintenance/audit_pip_dependency.sh index 37de2582a..1226e62a8 100755 --- a/scripts/maintenance/audit_pip_dependency.sh +++ b/scripts/maintenance/audit_pip_dependency.sh @@ -1,19 +1,10 @@ #!/usr/bin/env bash -# Pip dependency hygiene for in-repo components (excludes external service submodules). -# Default: audit lightweight docs deps. Use --include-nifi to audit NiFi extras (heavier). +# Python dependency hygiene for in-repo components (excludes external service submodules). +# Default: audit lightweight docs deps. Use --include-nifi to audit the root project lock (heavier). set -euo pipefail -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" - -PY_REQS=( - "docs/requirements.txt" -) - -PY_REQS_NIFI=( - "nifi/requirements.txt" - "nifi/requirements-dev.txt" -) +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" INCLUDE_NIFI=false @@ -34,19 +25,49 @@ while [[ $# -gt 0 ]]; do esac done -if [[ "$INCLUDE_NIFI" == true ]]; then - PY_REQS+=("${PY_REQS_NIFI[@]}") -fi - -echo "==> Python dependency audit" -for req in "${PY_REQS[@]}"; do - file="${ROOT_DIR}/${req}" - if [[ ! -f "$file" ]]; then - echo "Skip missing ${req}" - continue +for command in pip-audit uv; do + if ! command -v "$command" >/dev/null 2>&1; then + echo "Required command not found: ${command}" >&2 + exit 1 fi - echo "Running pip-audit on ${req}" - pip-audit -r "$file" --progress-spinner off done +TMP_DIR="$(mktemp -d)" +trap 'rm -rf -- "$TMP_DIR"' EXIT + +DOCS_REQUIREMENTS="${TMP_DIR}/docs-requirements.txt" +NIFI_REQUIREMENTS="${TMP_DIR}/nifi-requirements.txt" + +echo "==> Python dependency audit" +echo "Exporting locked docs dependencies" +uv export \ + --project "${ROOT_DIR}/docs" \ + --quiet \ + --frozen \ + --no-dev \ + --no-emit-project \ + --format requirements.txt \ + --output-file "$DOCS_REQUIREMENTS" + +echo "Running pip-audit on docs/uv.lock" +pip-audit -r "$DOCS_REQUIREMENTS" --progress-spinner off + +if [[ "$INCLUDE_NIFI" != true ]]; then + echo "Dependency audit complete." + exit 0 +fi + +echo "Exporting locked NiFi runtime and development dependencies" +uv export \ + --project "$ROOT_DIR" \ + --quiet \ + --frozen \ + --all-groups \ + --no-emit-project \ + --format requirements.txt \ + --output-file "$NIFI_REQUIREMENTS" + +echo "Running pip-audit on uv.lock" +pip-audit -r "$NIFI_REQUIREMENTS" --progress-spinner off + echo "Dependency audit complete." diff --git a/scripts/tests/smoke_elastic_services.sh b/scripts/tests/smoke_elastic_services.sh index 30c6da730..a2c82d47f 100755 --- a/scripts/tests/smoke_elastic_services.sh +++ b/scripts/tests/smoke_elastic_services.sh @@ -27,6 +27,28 @@ ELASTICSEARCH_PORT_LIST=( "${ELASTICSEARCH_NODE_3_OUTPUT_PORT:-9202}" ) KIBANA_PORT="${KIBANA_SERVER_OUTPUT_PORT:-5601}" +# The sourced smoke helper reads this shared variable when checks run. +# shellcheck disable=SC2034 +SMOKE_CA_CERT="${ELASTICSEARCH_SMOKE_CA_CERT:-${ROOT_DIR}/security/certificates/elastic/${ELASTICSEARCH_VERSION:-opensearch}/elastic-stack-ca.crt.pem}" + +SEARCH_BACKEND="${ELASTICSEARCH_VERSION:-opensearch}" +case "$SEARCH_BACKEND" in + opensearch) + ADMIN_CERT_DIR="${ROOT_DIR}/security/certificates/elastic/opensearch" + ADMIN_CERT="${ELASTICSEARCH_SMOKE_ADMIN_CERT:-${ADMIN_CERT_DIR}/admin.crt}" + ADMIN_KEY="${ELASTICSEARCH_SMOKE_ADMIN_KEY:-${ADMIN_CERT_DIR}/admin.key.pem}" + set_smoke_curl_args --cert "$ADMIN_CERT" --key "$ADMIN_KEY" + ;; + elasticsearch) + : "${ELASTIC_USER:?ELASTIC_USER is required for Elasticsearch smoke checks}" + : "${ELASTIC_PASSWORD:?ELASTIC_PASSWORD is required for Elasticsearch smoke checks}" + set_smoke_curl_args --user "${ELASTIC_USER}:${ELASTIC_PASSWORD}" + ;; + *) + echo "Unsupported search backend for smoke checks: ${SEARCH_BACKEND}" >&2 + exit 1 + ;; +esac START_SERVICES="${ELASTICSEARCH_SMOKE_START_SERVICES:-1}" @@ -39,7 +61,7 @@ KIBANA_GRACE_SECONDS="${KIBANA_SMOKE_GRACE_SECONDS:-60}" ELASTICSEARCH_CHECKS=() for port in "${ELASTICSEARCH_PORT_LIST[@]}"; do - ELASTICSEARCH_CHECKS+=("elasticsearch:${port}|https://${HOST}:${port}/") + ELASTICSEARCH_CHECKS+=("elasticsearch:${port}|https://${HOST}:${port}/_cluster/health") done KIBANA_CHECKS=( @@ -56,6 +78,7 @@ if [[ "$START_SERVICES" != "0" ]]; then make -C "${ROOT_DIR}/deploy" start-elastic fi +set_smoke_allowed_codes 200 wait_for_checks \ "Elasticsearch" \ "$ELASTICSEARCH_RETRIES" \ @@ -67,6 +90,8 @@ if [[ "$KIBANA_GRACE_SECONDS" -gt 0 ]]; then sleep "$KIBANA_GRACE_SECONDS" fi +set_smoke_curl_args +set_smoke_allowed_codes 200 301 302 303 307 308 wait_for_checks \ "Kibana" \ "$KIBANA_RETRIES" \ diff --git a/scripts/tests/smoke_gitea_service.sh b/scripts/tests/smoke_gitea_service.sh index 90396df4f..b165e308f 100755 --- a/scripts/tests/smoke_gitea_service.sh +++ b/scripts/tests/smoke_gitea_service.sh @@ -22,6 +22,9 @@ source "$SMOKE_HELPERS" HOST="${GITEA_SMOKE_HOST:-localhost}" PORT="${GITEA_SMOKE_PORT:-3000}" +# The sourced smoke helper reads this shared variable when checks run. +# shellcheck disable=SC2034 +SMOKE_CA_CERT="${GITEA_SMOKE_CA_CERT:-${ROOT_DIR}/security/certificates/root/root-ca.pem}" START_SERVICES="${GITEA_SMOKE_START_SERVICES:-1}" RETRIES="${GITEA_SMOKE_RETRIES:-30}" @@ -30,8 +33,11 @@ DELAY_SECONDS="${GITEA_SMOKE_DELAY_SECONDS:-10}" SMOKE_CHECKS=( "gitea-root|https://${HOST}:${PORT}/" "gitea-login|https://${HOST}:${PORT}/user/login" + "gitea-api|https://${HOST}:${PORT}/api/v1/version" ) +set_smoke_allowed_codes 200 + if [[ "$START_SERVICES" != "0" ]]; then if ! command -v make >/dev/null 2>&1; then echo "make is required to start Gitea services via the Makefile." >&2 diff --git a/scripts/tests/smoke_http_checks.sh b/scripts/tests/smoke_http_checks.sh index bc2a4a47d..139623f57 100755 --- a/scripts/tests/smoke_http_checks.sh +++ b/scripts/tests/smoke_http_checks.sh @@ -7,23 +7,56 @@ SMOKE_MAX_TIME="${SMOKE_MAX_TIME:-60}" # Allow callers to provide their own accepted status codes. if [[ -z "${SMOKE_ALLOWED_CODES+x}" ]]; then - SMOKE_ALLOWED_CODES=(200 301 302 303 307 308 401 403) + SMOKE_ALLOWED_CODES=(200 301 302 303 307 308) fi +# Callers can provide additional curl arguments such as authentication options. +SMOKE_CURL_ARGS=() +SMOKE_CURL_ARGS_COUNT=0 + if ! command -v curl >/dev/null 2>&1; then echo "curl is required for smoke checks." >&2 + # This helper supports both sourcing (`return`) and direct execution (`exit`). + # shellcheck disable=SC2317 return 1 2>/dev/null || exit 1 fi +set_smoke_allowed_codes() { + SMOKE_ALLOWED_CODES=("$@") +} + +set_smoke_curl_args() { + SMOKE_CURL_ARGS=("$@") + SMOKE_CURL_ARGS_COUNT="$#" +} + check_url() { local name="$1" local url="$2" local code local allowed + local -a curl_args=( + --silent + --show-error + --output /dev/null + --connect-timeout "$SMOKE_CONNECT_TIMEOUT" + --max-time "$SMOKE_MAX_TIME" + --write-out "%{http_code}" + ) + + if [[ -n "${SMOKE_CA_CERT:-}" ]]; then + if [[ ! -r "$SMOKE_CA_CERT" ]]; then + echo "FAIL: ${name} - CA certificate is not readable: ${SMOKE_CA_CERT}" >&2 + return 1 + fi + curl_args+=(--cacert "$SMOKE_CA_CERT") + fi + + if (( SMOKE_CURL_ARGS_COUNT > 0 )); then + curl_args+=("${SMOKE_CURL_ARGS[@]}") + fi - if ! code="$(curl --insecure --silent --show-error --output /dev/null \ - --connect-timeout "$SMOKE_CONNECT_TIMEOUT" --max-time "$SMOKE_MAX_TIME" \ - --write-out "%{http_code}" "$url")"; then + if ! code="$(curl "${curl_args[@]}" "$url")"; then echo "FAIL: ${name} - unable to reach ${url}" return 1 fi diff --git a/scripts/tests/smoke_nifi_services.sh b/scripts/tests/smoke_nifi_services.sh index 88e2ad829..9dca31615 100755 --- a/scripts/tests/smoke_nifi_services.sh +++ b/scripts/tests/smoke_nifi_services.sh @@ -22,15 +22,68 @@ source "$SMOKE_HELPERS" HOST="${NIFI_SMOKE_HOST:-localhost}" NIFI_PORT="${NIFI_EXTERNAL_PORT_NGINX:-8443}" +# The sourced smoke helper reads this shared variable when checks run. +# shellcheck disable=SC2034 +SMOKE_CA_CERT="${NIFI_SMOKE_CA_CERT:-${ROOT_DIR}/security/certificates/root/root-ca.pem}" START_SERVICES="${NIFI_SMOKE_START_SERVICES:-1}" RETRIES="${NIFI_SMOKE_RETRIES:-30}" DELAY_SECONDS="${NIFI_SMOKE_DELAY_SECONDS:-15}" +NIFI_BASE_URL="https://${HOST}:${NIFI_PORT}" SMOKE_CHECKS=( - "nifi|https://${HOST}:${NIFI_PORT}/nifi/" - "nifi-nginx|https://${HOST}:${NIFI_PORT}/" + "nifi|${NIFI_BASE_URL}/nifi/" + "nifi-nginx|${NIFI_BASE_URL}/" ) +check_authenticated_nifi_api() { + local token + local code + + if ! token="$( + curl \ + --silent \ + --show-error \ + --fail \ + --cacert "$SMOKE_CA_CERT" \ + --connect-timeout "$SMOKE_CONNECT_TIMEOUT" \ + --max-time "$SMOKE_MAX_TIME" \ + --data-urlencode "username=${NIFI_SINGLE_USER_CREDENTIALS_USERNAME}" \ + --data-urlencode "password=${NIFI_SINGLE_USER_CREDENTIALS_PASSWORD}" \ + "${NIFI_BASE_URL}/nifi-api/access/token" + )"; then + echo "FAIL: nifi-api - authentication failed" >&2 + return 1 + fi + + if [[ -z "$token" ]]; then + echo "FAIL: nifi-api - authentication returned an empty token" >&2 + return 1 + fi + + if ! code="$( + curl \ + --silent \ + --show-error \ + --output /dev/null \ + --cacert "$SMOKE_CA_CERT" \ + --connect-timeout "$SMOKE_CONNECT_TIMEOUT" \ + --max-time "$SMOKE_MAX_TIME" \ + --header "Authorization: Bearer ${token}" \ + --write-out "%{http_code}" \ + "${NIFI_BASE_URL}/nifi-api/flow/about" + )"; then + echo "FAIL: nifi-api - authenticated request failed" >&2 + return 1 + fi + + if [[ "$code" != "200" ]]; then + echo "FAIL: nifi-api - authenticated request returned HTTP ${code}" >&2 + return 1 + fi + + echo "OK: nifi-api - authenticated API request returned HTTP 200" +} + if [[ "$START_SERVICES" != "0" ]]; then if ! command -v make >/dev/null 2>&1; then echo "make is required to start NiFi services via the Makefile." >&2 @@ -43,3 +96,17 @@ fi echo "Running smoke checks against NiFi and nginx." wait_for_checks "NiFi" "$RETRIES" "$DELAY_SECONDS" "${SMOKE_CHECKS[@]}" + +echo "Checking authenticated NiFi API access." +for attempt in $(seq 1 "$RETRIES"); do + if check_authenticated_nifi_api; then + exit 0 + fi + if [[ "$attempt" -lt "$RETRIES" ]]; then + echo "NiFi API attempt ${attempt}/${RETRIES} failed. Sleeping ${DELAY_SECONDS}s..." + sleep "$DELAY_SECONDS" + fi +done + +echo "Authenticated NiFi API check failed after ${RETRIES} attempts." +exit 1 diff --git a/security/.DS_Store b/security/.DS_Store deleted file mode 100644 index 19dc7b274..000000000 Binary files a/security/.DS_Store and /dev/null differ diff --git a/security/certificates/.DS_Store b/security/certificates/.DS_Store deleted file mode 100644 index 9e925c858..000000000 Binary files a/security/certificates/.DS_Store and /dev/null differ diff --git a/security/certificates/README.md b/security/certificates/README.md new file mode 100644 index 000000000..dd60ca9f0 --- /dev/null +++ b/security/certificates/README.md @@ -0,0 +1,30 @@ +# Generated certificates + +Everything in this directory, apart from this file, is generated locally and +must not be committed. Generated bundles include private keys and are specific +to a development or deployment environment. + +From the repository root, generate all missing certificates required by NiFi, +Gitea, and the search backend selected in `deploy/elasticsearch.env`: + +```bash +make -C deploy init-security +``` + +The individual initialization targets are also available: + +```bash +make -C deploy init-security-root-ca +make -C deploy init-security-nifi +make -C deploy init-security-gitea +make -C deploy init-security-opensearch +make -C deploy init-security-elasticsearch +``` + +These targets leave complete existing certificate sets unchanged. An incomplete +root CA or native Elasticsearch set causes a safe failure so the existing +material can be preserved and repaired; the targets never silently rotate a CA. + +Any private keys that were previously committed to Git must be considered +public. Do not reuse them outside local development, and rotate any deployment +credentials or certificates derived from them. diff --git a/security/certificates/elastic/.DS_Store b/security/certificates/elastic/.DS_Store deleted file mode 100644 index 3a46b4428..000000000 Binary files a/security/certificates/elastic/.DS_Store and /dev/null differ diff --git a/security/certificates/elastic/elasticsearch/elastic-stack-ca.crt.pem b/security/certificates/elastic/elasticsearch/elastic-stack-ca.crt.pem deleted file mode 100644 index f6275723e..000000000 --- a/security/certificates/elastic/elasticsearch/elastic-stack-ca.crt.pem +++ /dev/null @@ -1,27 +0,0 @@ -Bag Attributes - friendlyName: ca - localKeyID: 54 69 6D 65 20 31 37 35 38 37 31 35 30 37 34 39 31 31 -subject=CN = Elastic Certificate Tool Autogenerated CA - -issuer=CN = Elastic Certificate Tool Autogenerated CA - ------BEGIN CERTIFICATE----- -MIIDWTCCAkGgAwIBAgIUBwNbzESvB9MUM5IiB4H+cFaJYg8wDQYJKoZIhvcNAQEL -BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l -cmF0ZWQgQ0EwHhcNMjUwOTI0MTE1NzU0WhcNMjkwOTIzMTE1NzU0WjA0MTIwMAYD -VQQDEylFbGFzdGljIENlcnRpZmljYXRlIFRvb2wgQXV0b2dlbmVyYXRlZCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFNNqnG9zeDPIvFK9/K2l6M -N1PsAwm3l+NbG4FPM/B+PfOz1/z1wtNPZcLfUDXmUt2bVfCabAbP3CmFuraZ6pB1 -bxewAiYhODSDLASDJkswm9fPXYLOxZBYCxGKuPHuNW/Mhasq8sORlEP/juQnjvsn -aPUVYfCh94wg06LQUiL96WqJtaI11Lk8F3hBzlGVIX7A4ICUmi3A88CWpXFhOBDy -NdWweuktSkIM3uXn1oT69UelFQqsZPIixI5Jr76K4gGKyMcabhCerDXuDTjq0eZe -hhwClKbqwx3jfscb4E1M+aJ2UclqfdMytUExmDVKKxt4xaFZAIvcNPcBbae2AxkC -AwEAAaNjMGEwHQYDVR0OBBYEFMijg1R0jWPwCpMuUNI2YWUKY6spMB8GA1UdIwQY -MBaAFMijg1R0jWPwCpMuUNI2YWUKY6spMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P -AQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBAQCYOaT9R97DBFln2kO98WOmGLFW -2vcN1b6C/rDA/x52D27Ky0F7xq4OvRIEMSU7+NKiiO//DSy6GMfjIDhteD2FoTFZ -Pg77iL0YK251NEMHvF67ESmfMZw8URMr2hLlYo/GBUzrQExRsZbc/wBd/LP13GN2 -5FRYn4Aoh8xyQJytZAflkQ1nXi6KCu5dpTozIzVjbOttRy/NYOXpmUllb4dKWG18 -fVuJLJgBE3jjHg6vlgd1hhijguunNkK9Gjb/vK8Ax/E4Oj3223tziYwbgr7UQ1Mg -10sdF9TfoK7iVizNY7MWhyWb0aEqEli8KOA7ZLV36hQJdiMzSL6UNOqOrWp0 ------END CERTIFICATE----- diff --git a/security/certificates/elastic/elasticsearch/elastic-stack-ca.key.pem b/security/certificates/elastic/elasticsearch/elastic-stack-ca.key.pem deleted file mode 100644 index eda63051e..000000000 --- a/security/certificates/elastic/elasticsearch/elastic-stack-ca.key.pem +++ /dev/null @@ -1,32 +0,0 @@ -Bag Attributes - friendlyName: ca - localKeyID: 54 69 6D 65 20 31 37 35 38 37 31 35 30 37 34 39 31 31 -Key Attributes: ------BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDBTTapxvc3gzyL -xSvfytpejDdT7AMJt5fjWxuBTzPwfj3zs9f89cLTT2XC31A15lLdm1XwmmwGz9wp -hbq2meqQdW8XsAImITg0gywEgyZLMJvXz12CzsWQWAsRirjx7jVvzIWrKvLDkZRD -/47kJ477J2j1FWHwofeMINOi0FIi/elqibWiNdS5PBd4Qc5RlSF+wOCAlJotwPPA -lqVxYTgQ8jXVsHrpLUpCDN7l59aE+vVHpRUKrGTyIsSOSa++iuIBisjHGm4Qnqw1 -7g046tHmXoYcApSm6sMd437HG+BNTPmidlHJan3TMrVBMZg1SisbeMWhWQCL3DT3 -AW2ntgMZAgMBAAECggEAG5MtOhj1CUlCaNnuwVUJw7US63jekhNLqpZDnTW0Phl0 -MwCzzhUs/sHzzVHX+mhp580R/Gm7AVnDmXTHRuc8C/GEsIdeNxxEDVGtBNPEsbM0 -eBvPxipDCq1UnuMAMRr/KnytkNZmnTl2QiEBvFBcWD2t/lBXkWE5lBbWugInxW/d -fvwAs0BU5ZndzSAdxxnwq0EQoJfuKDvK53FYancH4VDLcWLmj8ohFgnQeI5+F958 -qeEiu5JWnNNvUcBlCcYKbStgnIXedR2GI1ofloUcRrv3N4h+9cuODInp//C9JAdu -1VJJsCSkuQkrXuE+eUGxI+dI73W8wAn1bKoDktjltQKBgQDIoghXgjW/xiOwm9lj -PdeNUkOM8xt/5Wz3Np4eLBHma27LrhF9Ip/RMPOGUszMj+Hn2IrO35gO7xlD1Blt -7v1+iatBy1DtDQnFGntrDZELa2ZUgizqZoHXJsSt/N1QNGgWU4I12Q87smrQNQpc -Km5NYzM9n8O0LjJymwBLwwe1iwKBgQD2pUARnG0PgJZ11uf/Gf3THv9JmD8c9id8 -aMa5KsOMdHPeMoKKzfRTTTThAxL4ejdZtj+Ganfd4T7lG1mOSSgDPXGsnCdmQvkP -uBGzYBkMZHRSCSAa10YfaifdTs+NM3eGivkQrD8x3x7LxaBPjXElLA+ejI8Top7Z -JuzH1e+mawKBgAqvJkaSto4J3Siwg/kW9/2cneBJqfM7onvfurfcnO9qVTIfiOrj -ByO6uZ0zl5hlKSCRlYLCwXQ6I1xLVTdXfMRaTHZqf1rAUP7gFCZ1SH4VMBPcAsxQ -vSVZ+StSxe5ZfBmERPDdKESDkdCYon6Z+9m/KKFleqSDuUgFHRTrw+NVAoGAQYC/ -lC3D9RMEYoVRlblUZMZdrDDnygxBjlPROwn1Zw7iWsd1TeHGmnztpziGyEDFBGlX -U55g+SdB6dyqmxQosTuXPe02tXzh4l/TK51A6b6f+c18nkQ/1kX+ElNE4c4iVzP/ -U4M7QUZtSlbQ7W+19dZOy5+uu9s7bpZc2fGiNMMCgYAJdOkX8k8eVZlEFe1qIuKF -Bqc4W7r+TGMdUY8nLi07y2MGEFxFLMNIrQeEI+3lqGPnChD6iPBWpLL1X4ZZvCkG -HiV7hSDFludIe1iyr5665MheFSZA638dDR5YNx6m+oGqPt6Nxfx9g+IO77jlXHO1 -r8f+c7VkO0KtQmqUg68TUg== ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elastic-stack-ca.p12 b/security/certificates/elastic/elasticsearch/elastic-stack-ca.p12 deleted file mode 100644 index c4a4f2246..000000000 Binary files a/security/certificates/elastic/elasticsearch/elastic-stack-ca.p12 and /dev/null differ diff --git a/security/certificates/elastic/elasticsearch/elasticsearch-ssl-http.zip b/security/certificates/elastic/elasticsearch/elasticsearch-ssl-http.zip deleted file mode 100644 index 5f89ce245..000000000 Binary files a/security/certificates/elastic/elasticsearch/elasticsearch-ssl-http.zip and /dev/null differ diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/README.txt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/README.txt deleted file mode 100644 index bc47ef1bd..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/README.txt +++ /dev/null @@ -1,51 +0,0 @@ -There are four files in this directory: - -1. This README file -2. http-elasticsearch-1-dev.csr -3. http-elasticsearch-1-dev.key -4. sample-elasticsearch.yml - -## http-elasticsearch-1-dev.csr - -The "http-elasticsearch-1-dev.csr" file is a Certificate Signing Request. -You should provide a copy this file to a Certificate Authority ("CA"), and they will provide you with a signed Certificate. - -In many large organisations there is a central security team that operates an internal Certificate Authority that can generate your -certificate for you. Alternatively, it may be possible to have a your certificate generated by a commercial Certificate Authority. - -In either case, you need to provide the http-elasticsearch-1-dev.csr file to the certificate authority, and they will provide you with your signed certificate. -For the purposes of this document, we assume that when they send you your certificate, you will save it as a file named "http-elasticsearch-1-dev.crt". - -The certificate authority might also provide you with a copy of their signing certificate. If they do, you should keep a copy of that -certificate, as you may need it when configuring clients such as Kibana. - -## http-elasticsearch-1-dev.key - -The "http-elasticsearch-1-dev.key" file is your private key. -You should keep this file secure, and should not provide it to anyone else (not even the CA). - -Once you have a copy of your certificate (from the CA), you will configure your Elasticsearch nodes to use the certificate -and this private key. -You will need to copy both of those files to your elasticsearch configuration directory. - -Your private key is protected by a passphrase. -Your password has not been stored anywhere - it is your responsibility to keep it safe. - -When you configure elasticsearch to enable SSL (but not before then), you will need to provide the key's password as a secure -configuration setting in Elasticsearch so that it can decrypt your private key. - -The command for this is: - - elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" - - -## sample-elasticsearch.yml - -This is a sample configuration for Elasticsearch to enable SSL on the http interface. -You can use this sample to update the "elasticsearch.yml" configuration file in your config directory. -The location of this directory can vary depending on how you installed Elasticsearch, but based on your system it appears that your config -directory is /usr/share/elasticsearch/config - -You will not be able to configure Elasticsearch until the Certificate Authority processes your CSR and provides you with a copy of your -certificate. When you have a copy of the certificate you should copy it and the private key ("http-elasticsearch-1-dev.key") to the config directory. -The sample config assumes that the certificate is named "http-elasticsearch-1-dev.crt". diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.crt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.crt deleted file mode 100644 index e7d8385a0..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.crt +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDmzCCAoOgAwIBAgIVAMC3VXpHDgifVXukffiuEjF1oohuMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI1MDkyNDExNTc1N1oXDTI5MDkyMzExNTc1N1owHjEcMBoG -A1UEAxMTZWxhc3RpY3NlYXJjaC0xLWRldjCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBALq69dt/RZB1zIqAZrGodOkbDrQdFJYOgaIy7ZwRNjFe9N4Umgn4 -0JzP5LA4OnmljV1vE8Hq87+G8Juj7EpcK3ToyXiBo4FFdvDWUHj40vqyVvpC1qkO -wRpMgv7z/inSXg8TgTFL3iAYISXMmOUxkxiG2IvGd/AVPWPXTwTxldhZF6+ffzJ0 -pmkaEwVa4VKC9v6WXk4C7WEz5hHKCwaEQtEw4yqh2rwOhVfP/eJrkOeDNLgIasUc -4HSF2qFWOvI1Erw9f0MSN8KUYTeXdGYgdjuxPSFn9Ni/Y4xr41dgX4RCmL8d2nSm -cgad5rgIGQDUfvZ1LGD0G2wSy8EX5lp393sCAwEAAaOBuTCBtjAdBgNVHQ4EFgQU -4GKqC169d/BOQXgSZ/zMjT0K/RIwHwYDVR0jBBgwFoAUyKODVHSNY/AKky5Q0jZh -ZQpjqykwaQYDVR0RBGIwYIITZWxhc3RpY3NlYXJjaC0xLWRldoIbbG9jYWxob3N0 -IC0gZWxhc3RpY3NlYXJjaC0xhwR/AAABggRlczAygg9lbGFzdGljc2VhcmNoLTKC -D2VsYXN0aWNzZWFyY2gtMzAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCR -L/A/NT89SVIOfqggO6S5n/lhUL5Fo9RGyjqsvcEIZElqxb4GG9Y5lRcoFwFuKb+r -pF4lm7NpPZkFcgX73zuYCqSNGOFNnnskO5wzo+6ofNzqHlbL16Ti+Wpbm+KmlGna -t0REhHogeUjMsVAjy1hKRyQPeHvMnkAMaLcB6lxFGxmrEe2SnhhJPQl+AunjwX1g -hZXHVcxDb+9bIhHeFPTE/jrA5aXih6XIXafMQRP9spj/WZSPqMbFN1Ob1Yr+SKmx -XLcuU7psVIGIrFnT2G5wIADpC/JN1VdSCcnpviY0Jj+4ZluaUPPnVWh0DXt4b5U9 -+Y/SXRKef2JGVKsUVucm ------END CERTIFICATE----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.key deleted file mode 100644 index 8f55c8491..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAurr1239FkHXMioBmsah06RsOtB0Ulg6BojLtnBE2MV703hSa -CfjQnM/ksDg6eaWNXW8Twerzv4bwm6PsSlwrdOjJeIGjgUV28NZQePjS+rJW+kLW -qQ7BGkyC/vP+KdJeDxOBMUveIBghJcyY5TGTGIbYi8Z38BU9Y9dPBPGV2FkXr59/ -MnSmaRoTBVrhUoL2/pZeTgLtYTPmEcoLBoRC0TDjKqHavA6FV8/94muQ54M0uAhq -xRzgdIXaoVY68jUSvD1/QxI3wpRhN5d0ZiB2O7E9IWf02L9jjGvjV2BfhEKYvx3a -dKZyBp3muAgZANR+9nUsYPQbbBLLwRfmWnf3ewIDAQABAoIBAA1Pp5gVQLXAGAEl -jxc0uC99LMqn1LWvugurJWdojgbt9cxhBpbAZHVRQpmnSyUsfovTD8L/8eP3hW5q -5zy+c6CauZtRY9ZNcoxPkslU34wHK45yi6UzNo5z4YC1jwBB4qT2JycG+VeAsNg7 -d14bRG5NVTbS7UOG7Ws7yC0aNawy6nnGhJQ+CI2ny0w9dNIEbgspyFAb0IRA82aO -t1vwUTA5pOrVVmyZACbDGpnh4CsB7jh25GLIVrh1XuDSvfMIyMfJw1Ub54obMeAP -Mx1K/sWSvTzn+GRNIUOLoLWfkgzLgrOrwMCUUf1Cjc3TrZbvUAbtknclwVKE8MlG -/83JNr0CgYEA5RYqEYNi+0GG5xdVypQ36glqS+3LZLb9HeL8UlxyE5/R+ycSOeuv -ha5yOpTBpXOtv70M0zSPLGbX4gEItMKYnQ/1N6qY25kCeFmQceab+vbPDoLVlowt -w3lMkuP5uG73HuT+NpKUAt3UTniipQR9yNUB+9cPEjzB9PrUzzFoiQ8CgYEA0Krr -vfSggbyCzJT/ir1iawBqOwXEs3K0+pqxAzcwj+EAqrT/D5tZuX1LwGGzx8SijDOb -1+neXRM8hiekvsaNs8Df0mSYoavO74eG7C/twqDsOF/WLlGsQLge1aNcJk9I0Ys6 -cJpP4nu136UUzm4jWdluzXa2g+xLXrZrXIa3MtUCgYEA0x6bBGrOFHmuBlhWAwyX -fwLQSEtMj3OoTxu5p3l01CsMi+XVATX4Gz3KHbyrvXufGz3xjM86RxQ8Thbf3B4e -IVjshzGcD3yybxEzchSxmRZNebUPe9+R6TxnWlPo9pSk/37P3KE28HFY0DySv3sl -JKlRW7M1O3xszwU+i/efu/cCgYBkzEv4hLUMNq3QeaE/ueBS4+5s+IpeTOjTreoY -LY7N0djqnWggd+DN05LGKewYcgo7Q6rij9yUhXhVLc1NQsisrlzwWxvH7SCXYJZy -fWyS+f1h9hmWYmmdEdQDS1h2QRJh9qmSP1ibhTsD/9CfL2DwRDJcGh5sd7ao1+Hg -3kqcyQKBgQDYsxmgFxK4g3oGCc/WjEEnjDdxkFfn8Im84RwsbW2EZB2Zry0FExkn -snFNBUhicns1cvDkDzNQCggcMNvabWl2k3LyaknUpptePVL4CxZOn5Nc8caPiHXX -Gem3iu6i9adJftYElcFuvwhSekZDe9RoJZO6RHmwhOVFxGdTq1GcMQ== ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.p12 b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.p12 deleted file mode 100644 index 762fef518..000000000 Binary files a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/elasticsearch-1-dev.p12 and /dev/null differ diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.csr b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.csr deleted file mode 100644 index 2ee42caa7..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.csr +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIDRTCCAi0CAQAwHjEcMBoGA1UEAxMTZWxhc3RpY3NlYXJjaC0xLWRldjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPhNwARXdrapW2a9rVeHNsbc9Ft5 -TjqSibmNVB11fOki7Evh9ByCjU0c7SQukPjc390FrrsY+EFr/fchU0ZaqG+BH0m4 -A157XUhDOPc0XuATMGFfhfGUWNE0HjMsK0r+rB56fGvy5I6gFXnkBGb6/NQPYToI -SQ13IXL3FkvuKpibC+cnTDV7mIynZDHt2TnRJ3stLg/PMP5iemPmUJNwIU2uXI5Q -kz/h8ScOZ13rfDJUF8996MeQ88mZ5QD813QcAs4kWYF1YCGL9D/Ekbv6Oi5h7A0E -2m4Mjsk/GmYh/6L0r1PZ95CQBcAhA/V949PSTrx3tkdEf7tOo2P1vIGU7yUCAwEA -AaCB4TCB3gYJKoZIhvcNAQkOMYHQMIHNMIGlBgNVHREEgZ0wgZqCE2VsYXN0aWNz -ZWFyY2gtMi1kZXaHBAAAAACCCWNvZ3N0YWNrKoIEZXMwMYITZWxhc3RpY3NlYXJj -aC0xLWRldoIEZXMwMoIPZWxhc3RpY3NlYXJjaC0ygg9lbGFzdGljc2VhcmNoLTOC -CWxvY2FsaG9zdIIPZWxhc3RpY3NlYXJjaC0xghNlbGFzdGljc2VhcmNoLTMtZGV2 -MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0B -AQsFAAOCAQEArPutlQAOi4uPPrzuPGVcSCL75VXOrqF1EUBD4g/7h4plFWegi4Y8 -bNMcfPjftHCfHpRxs3gEZllQjm7c+t9TjBcPk0lEO3385CvNj/BWqcRQSPb2F75n -rcmkPd+DDeh97ZxfHSTgw/7/Nj32Ks2HrP+czgFItTrsdNAdFwnMt+Hz8Anp6x2M -QoDwsT3QFgFV1c8cFILC7JEHNtnrUAYcwnpSxQ4psXBlZJWQA0fyUHK6UmD4+Ib4 -ninWXWnP3TzhzsJSZjSvfOQzbjZAFNTaXekEQm5CiKJfU42ZNIcXtwQG++xHjth3 -kWakZS3DGAVpIumNyXbG+4trw5KUW7+KpQ== ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.key deleted file mode 100644 index 9ea142f15..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/http-elasticsearch-1-dev.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,25DF81CA0FF52AA969412DB6D6BF8112 - -zHkiqsLbGbdyVIOko9DRRnsaivcA0WQqQmIg3QW8yehrQ/NTXmIYbPpSkqKXFpSV -pvggwur/bYO48PayCHomeqVzrElTpH8NdTlydINTvGHAaq4FTMlBcZLzsWDomq3Z -MiSkON4hVTMIqFqu/GIuHLE9a+fFNst+ZuMFlMepAA5eGKf9RihJWK7mDVYhdrpc -7lwyQVG0AG9pAzWL1imOObuGgAZAKE0sdscnIyuJ5AGTWryxWPsZymeDYwg48qUA -cHo6wIQqA/Xjh7Srw1LiyIIEY8IqrIIjFEO+ogeb7UCUaH1gl+yj9ZGiZ1/Pk7zg -Z58NnZBySPF2SB8DutrZrlnFxy6eGyTTCjvpWcewgYx0fF54Sgtut3OGFW9mgJ7f -XAa1W35iB0iYTbcq5gkaCYJJ5O7Hu0rOnewUtq9i7cKHvnnRMlsfAxlrFiCpQKQg -KY0oNXJ0gKUj0LPh1ZvBPDOyfes2v92vAsY5Uz2gQ2/nbxicXaYLYSIONRO8YXI2 -rZlUwVdgXkaVNUAJJjr0qCt24NCdU2XHV48QJLehZ0PQuP56bZiKHihHkjt2qciU -j6/xFkpqLlaNyf7t6+8UjfJfJ1bPzbNu5jyvLBNxcYauwe8IV3/Y6GUQ9h+wMvUH -OjdohpKWTjWFpEWFRfZi3uEILHeVHqvUNt0DZxSnJ6AyXPLPOuFoZtbsYQRid1Dt -iFiEdfcMTb8sCVIYKu+kjxuG3+oi2OiWJ71UPLeb00dsBbBITaLPCAtwtL5iL/w/ -s8YvL3L+L93iO0wW/KU7OXnu7I+NjC/67qdxeabKgywOeLmxg/i47IUrx5n5tif+ -yzRT12Qyivr/eXtTGhAeR4R7RITEwJK3r1DkcLwH22czTgk/mex1lEEuGderiCU7 -68tbzWsp4bhNam9RXjDhX3NNdrVksyg4xD6AwS2XhWe40i0GeOmfmmY5EKx6Xuf2 -DuCun+1LHRj65tepNrQEHvrifUsvo0Ol9PlQf03CVuGocKwFDbPgTCenOf02q8Qn -NcQxiLVdsW8q1cHEzwD5dIB50I3MG0Ju6EiqTw2hRjlWzUKMIS3W+fzVY3jUSTpl -rAHTvuztg9IoqdYh0cw6ws4Sxm1vAadW8HviOo1gE3oshqeipmpREfO9E6vQLivZ -3cIfplw2Wm1UTVDmXaUvT6kEKBg8wjRNFjdEk9yGmHj3NJeYMqu974iBpYy1ZLK7 -HK3KWpl/UmbxhmoFinS+aHRqt23W2Pp3VyQSAOM+Qt8RQgQ+z+OsV2eXs6RKdt1s -swP9Zw+l0Cn796KOfzsc3AUd6RBFcBfewhN5hkaDMAw5k/9CrwNZ6sNnvkldDSb+ -5F+6+4kQeU+hwLXQWl8XswqcclQxKGfYOtrpblRbwdUsmdSIXoVT+mSeAxLPCoNl -BRUHsD+zze7TdpkmZ/UyuaVPNUBXbiqs521dUGgCUZqY14qPMsaqIpiSHmIESyMS -zH08wDX/ItiHn/NnxskJZEM/Y+PD6uSBde/xuvuU0NTZMYllDswx0Pt22VzNiut7 -ody3cpPqtlaxEneFqpvWWzEQNE/5C7GbfXp5vXTAtPiRUsHSgkcLX1Fb5hBGS0OF ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/sample-elasticsearch.yml b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/sample-elasticsearch.yml deleted file mode 100644 index cd59f0c70..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1-dev/sample-elasticsearch.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# SAMPLE ELASTICSEARCH CONFIGURATION FOR ENABLING SSL ON THE HTTP INTERFACE -# -# This is a sample configuration snippet for Elasticsearch that enables and configures SSL for the HTTP (Rest) interface -# -# This was automatically generated at: 2025-09-24 11:57:59Z -# This configuration was intended for Elasticsearch version 8.18.2 -# -# You should review these settings, and then update the main configuration file at -# /usr/share/elasticsearch/config/elasticsearch.yml -# - -# This turns on SSL for the HTTP (Rest) interface -xpack.security.http.ssl.enabled: true - -# This configures the certificate to use. -# This certificate will be generated by your Certificate Authority, based on the CSR that you sent to them. -xpack.security.http.ssl.certificate: "http-elasticsearch-1-dev.crt" - -# This configures the private key for your certificate. -# Because your private key is encrypted, you will also need to add the passphrase to the Elasticsearch keystore -# elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" -xpack.security.http.ssl.key: "http-elasticsearch-1-dev.key" - -# If your Certificate Authorities provides you with a copy of their certificate you can configure it here. -# This is not strictly necessary, but can make it easier when running other elasticsearch utilities such as the "setup-passwords" tool. -# -#xpack.security.http.ssl.certificate_authorities: [ "ca.crt" ] -# - diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/README.txt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/README.txt deleted file mode 100644 index 21aed2d9c..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/README.txt +++ /dev/null @@ -1,51 +0,0 @@ -There are four files in this directory: - -1. This README file -2. http-elasticsearch-1.csr -3. http-elasticsearch-1.key -4. sample-elasticsearch.yml - -## http-elasticsearch-1.csr - -The "http-elasticsearch-1.csr" file is a Certificate Signing Request. -You should provide a copy this file to a Certificate Authority ("CA"), and they will provide you with a signed Certificate. - -In many large organisations there is a central security team that operates an internal Certificate Authority that can generate your -certificate for you. Alternatively, it may be possible to have a your certificate generated by a commercial Certificate Authority. - -In either case, you need to provide the http-elasticsearch-1.csr file to the certificate authority, and they will provide you with your signed certificate. -For the purposes of this document, we assume that when they send you your certificate, you will save it as a file named "http-elasticsearch-1.crt". - -The certificate authority might also provide you with a copy of their signing certificate. If they do, you should keep a copy of that -certificate, as you may need it when configuring clients such as Kibana. - -## http-elasticsearch-1.key - -The "http-elasticsearch-1.key" file is your private key. -You should keep this file secure, and should not provide it to anyone else (not even the CA). - -Once you have a copy of your certificate (from the CA), you will configure your Elasticsearch nodes to use the certificate -and this private key. -You will need to copy both of those files to your elasticsearch configuration directory. - -Your private key is protected by a passphrase. -Your password has not been stored anywhere - it is your responsibility to keep it safe. - -When you configure elasticsearch to enable SSL (but not before then), you will need to provide the key's password as a secure -configuration setting in Elasticsearch so that it can decrypt your private key. - -The command for this is: - - elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" - - -## sample-elasticsearch.yml - -This is a sample configuration for Elasticsearch to enable SSL on the http interface. -You can use this sample to update the "elasticsearch.yml" configuration file in your config directory. -The location of this directory can vary depending on how you installed Elasticsearch, but based on your system it appears that your config -directory is /usr/share/elasticsearch/config - -You will not be able to configure Elasticsearch until the Certificate Authority processes your CSR and provides you with a copy of your -certificate. When you have a copy of the certificate you should copy it and the private key ("http-elasticsearch-1.key") to the config directory. -The sample config assumes that the certificate is named "http-elasticsearch-1.crt". diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt deleted file mode 100644 index 0978bfba8..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDkzCCAnugAwIBAgIVAJi8jKK97pi2IqgFGLEtvDoL/OEzMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI1MDkyNDExNTc1N1oXDTI5MDkyMzExNTc1N1owGjEYMBYG -A1UEAxMPZWxhc3RpY3NlYXJjaC0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEA8k1qK3uDHfWEPsmgXaMIsrJNcmMX+8QWSV0tC2ppy6N3DJfZc1ecgULS -B5wtLW0AoLjda6ZzZpy+s1KgTESiJr+OlaVQwWGUox77/5O6H33WWIJMPlMN2dui -++05RWCgm+txK9ZgaxvwzJFHh1cnBMwpvGHULQNJPY0Z/yznPcHbvKJb76Twp31Q -TQs++C6rU7aiBWC0CHjUKM87lVxmBqBHIToSA8UUAwUT53+sHW8R7DoyydJDq0xS -Htq2IaAKXcpAkRbxCBu9TKPSsVUviViUBLRR2BvuDEYcthzWi8wvA0LV4PojAqTE -aXzDN8Bpl34ziTeaX0e9efMNw2zgjQIDAQABo4G1MIGyMB0GA1UdDgQWBBQRU1Q3 -q+jz3gggtbuhfhI91XUamTAfBgNVHSMEGDAWgBTIo4NUdI1j8AqTLlDSNmFlCmOr -KTBlBgNVHREEXjBcggRlczAxghtsb2NhbGhvc3QgLSBlbGFzdGljc2VhcmNoLTGH -BH8AAAGCD2VsYXN0aWNzZWFyY2gtMoIPZWxhc3RpY3NlYXJjaC0zgg9lbGFzdGlj -c2VhcmNoLTEwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAdctVB+q+c3GZ -T0I9xwSDcE1gNTheQJWi1Wz6s1O2p8VzD46xGqZkZXdCfJ7ogh+EUQkaK1lNK/Zw -nk9mAUcWKfd63e6kGO2iSg90Fd2QBDBvk+xNmBVrIS7QXnr000xeWmD2lqXB4hLV -SjKdeV+INctj+ZNpJquGTzF3VDQJONDuYagAk/V30sHW9JUpI/yHd2t1qZo/dybX -+9ZpOgHD5kESTXszepD/uxg/n2cndZl584J1jJYIyf+apdqBHF5PLRGOhznpSSLl -EbyB+xGFbPosfaOEh7tW8bWaNLYz8JspI090Dw3fthos6x2o0bF3DkbbRv+DpUZb -OudEnht59g== ------END CERTIFICATE----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.key deleted file mode 100644 index 6f93176e3..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA8k1qK3uDHfWEPsmgXaMIsrJNcmMX+8QWSV0tC2ppy6N3DJfZ -c1ecgULSB5wtLW0AoLjda6ZzZpy+s1KgTESiJr+OlaVQwWGUox77/5O6H33WWIJM -PlMN2dui++05RWCgm+txK9ZgaxvwzJFHh1cnBMwpvGHULQNJPY0Z/yznPcHbvKJb -76Twp31QTQs++C6rU7aiBWC0CHjUKM87lVxmBqBHIToSA8UUAwUT53+sHW8R7Doy -ydJDq0xSHtq2IaAKXcpAkRbxCBu9TKPSsVUviViUBLRR2BvuDEYcthzWi8wvA0LV -4PojAqTEaXzDN8Bpl34ziTeaX0e9efMNw2zgjQIDAQABAoIBAAjTPwG0bvMhZR6w -U1H1xTRVADMhXtdBrhof9asLxiyvmH9x7G6iC0Y9+85hJtgXt0UjVpU8K8nZ/awk -X0hH26wToArdSZKxjitezojhhY7uE2eH32UJu2Bq+oW4fzSCr3beXXHeTga4rs2U -oQlR6E7pbL+6xHKbQwil4gOETCvYmJYQUGocSCqUlbJAB5nW1a+ghOaUh0n9hRjs -Q+0YsauKdFnqQHbH0T1/SDNs+JkH9axzNjadAnvxKMZnzXzYnax40BMG8jh7Y44s -KXrPHVO4awYpN1xA4OeTUxsAqDhmwMA+Gq4PnVkvEE4AofdEwt9Xov02C/Ozf+OT -LI6OC0ECgYEA9M0e2Mj1xpoD8En1smGDyQkfaiFT06zr5gIFKE6uF+WAf+eBXQ3p -op3TrAhLqtW/MUDZyOJZOsQKMZBFpS2vWhrgVbyEpjEDLtEG2SKDmCDagtXUn7pP -j/Pyqg77Ic/y3u5Y69bJUQUbOxUiUHd4ZbYLiwWDF6eQMioEi841sb0CgYEA/WMH -soJOZbJylrndC7DlffchS+960bdf+/BgPPTkRpjMkM+yOzsb5YK8wLRJIVjJbyhV -FOAn8fUhqVglU2B2sTeZvqlZNcYV3xKl6ecggtWXMMJQP/RgB9G7gyJHARZ52Ju9 -TrpCeOOlecWBmNWnIO8Dg6M7aRzNkus4LDBaDxECgYAkurX7HsPJhYg7wE0N85Wb -TzQYb2Gta8+FFh6B+rQiP7v09N4zAQhh7r44nJIF0sY59Jn4iwWKTKme4B+i9eTO -ZyPrmTpp2Qa6OoCFiakm5R8D7GNXh9OyLI7nNxI084dkLWzIDdTsxBBe3//jBNna -oOLAfBY8MVbwP9+ovkrOHQKBgGjT1HZkdFycY825nRpeF8NyPyM0MyKZ86q+OoJd -aidOxarPUlQw0wyzdrVeoLacDdHf5LsbNUtjd4agwehpixEsCH4Zf5/AkIHWLC/F -f+zAwqjYauzag/QYL7RDtQ5dJxGW9M2iPyfWPjpPnJsHIPp+B30pRcXptZ6nk3is -lEWRAoGBAJRa9IsUhNlmzOSfa/KYZjDlIfq+kS4PvvrwwxxITwe0azdwWRBOHjzm -HdQkjTIRG3fLgo0aRp2JuBCQPXRBmR9/qdlXmOWR+V0hIqYQGq6ciVukcODUzXjw -ZCC3O3czGF869gKm3WZU+EsUObDPDyReis3a81/OXYDJUHW1NBWp ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.p12 b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.p12 deleted file mode 100644 index a2162ef34..000000000 Binary files a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/elasticsearch-1.p12 and /dev/null differ diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.csr b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.csr deleted file mode 100644 index 03a4e3b1c..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.csr +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIDQTCCAikCAQAwGjEYMBYGA1UEAxMPZWxhc3RpY3NlYXJjaC0xMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsOSpG4SQYVMXysS+QEUg5kFUhk9QwiQR -OVB+++YFptFkUu6CTV6I2j2FY1eSfrDuj08rpTKcqzz9Ex+VWZBOquLYSR8eAgHV -B/HCh1yAs1HSu4tDmWwvCk1SCAnhrXdkeIhTrI2VSiLxxmUlySTue1wwm8h2Z0zb -7VLTwXJf6e/UflRctAcLnc6MsJF7W3+Lzcn6eBY+1uRNRhD1Ma5+XubNIFFrQbBl -BI8DNzdfzRRUtYuGrYfmaZviSoSlNZAv3LfVRPnTPOz0RD++NkExMuEkOO8kxuek -S0R5ijHVcAxibJfV4ywB3J/fmmMwhQPjpOR6oFicLda+h+y9a10PTwIDAQABoIHh -MIHeBgkqhkiG9w0BCQ4xgdAwgc0wgaUGA1UdEQSBnTCBmoITZWxhc3RpY3NlYXJj -aC0yLWRldocEAAAAAIIJY29nc3RhY2sqggRlczAxghNlbGFzdGljc2VhcmNoLTEt -ZGV2ggRlczAygg9lbGFzdGljc2VhcmNoLTKCD2VsYXN0aWNzZWFyY2gtM4IJbG9j -YWxob3N0gg9lbGFzdGljc2VhcmNoLTGCE2VsYXN0aWNzZWFyY2gtMy1kZXYwDgYD -VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUA -A4IBAQCHo+qEwasARgMKk3tY+30OmcqVzCrnO0BxODT3Z05e9rDE8qzXnkuzK0Lt -fnIfxkrsBi+Z4xczDKY+eGCrZkFTqjjO/N4QVAxOsqkkqTE7Jc3FJFTKjHx5ZB2v -XdB0glFRxU28pJfOFrcEHfiZMbxdTg1mViJP3PuDPNJLBVPBKjPWyKRnhyiPHMXj -BsELzRq7p+Ie3k1NwdV9Yh4S79v/NLglf3CuWwUHsfvljArVwmSsg6QcIHMZZ5/1 -NQS8t1FHPsDjfNA/Zh/DOsBdvvIfkejsjC7viBvud6qzchFjHp0vtbVWUxCPYp4L -75227VC4xr5cybSJeBZxX64JSTC/ ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.key deleted file mode 100644 index db7294bc8..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/http-elasticsearch-1.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,AF7CD7BB51A55579C43BDF44CBA5BFC5 - -wJjKKJK8k5/WxAc4czqZP5MAD6d84CsDN1zdcnWEEHLV1QlJycqMonZz3FNvt9d1 -XxkZ4CiIORtsNrL8dKlEnvwqvrQDdRkFTYfy3h/O2wqUaNIbziCKGhx7H97zfj+M -fA9HciHzhozmTJbfMJP+5htCAH7igPT00uLvbjNqJ4fh+n0Pzw+Zge94o6QBjqEn -u1+ySM4J+MCiHVU3sZGh20JooPIQSe5MzGySq0qE/BygLGido7nADcqKD42nd8bp -NOyqUo70vbk1ZsM/P+yjICRuhT3FAotX2g2g8CnyJPBSvMU8ZMamG61J5qDuE0og -XMFcaWvFHeRhExRVWkZYjhIvuECjLb7ZX1Mp9Do6OAdBjdEKcpL0WzeYria5XZw6 -vt4IaKJyTEP8R76yuv6IY2BY/ejzuK8/pfu4l/0oeU/FYJ1Ss/VTSczwtDhNp1Y8 -5y2VTLoJ7veRu4tviT/DwotO6vvctuDuj9sfVJ+fvnEgZjhC2PJ/s13mD2QGEB0W -WenjNRWoBbrqBozvVlTC1hSR6A5rUd5OCZw8lC56smFLpbjE4UBpkMsMjV+YltdI -+tSUQEePS5KEkbMr64c+J2sew4bu9ErJimwPa6knME3Ni2QNeY5xFmPwaJgCiPdV -zQ+jPEolcTVkjOrb4b56P8ExNGIYitlsHymvpaIzKwcBsuyGcP007LajreAlORhh -MhpF253aegaCUjg2vWDlFVY+chAJSSpHjC0GV8FCz8BUSqNHI8qHTjQewHpSnNn4 -vmfwK0s7o0uGnvoM7iaiqIx+ll0K6r3/884MpYbWGfMuVRBfA3E7q2edSoDV+w0l -AAnPAEV9gr8mV9EZqcjzOv2liE2zwaEmImX1YKDgZmR5fWuPbdM2nhmh4EQY273I -D54MZF1Ubos8pBm5WYW/IyBq8KkIPXd5lyKJvQJYeo5UvQ7QiI1XkOWC9zu5OurW -5sdKC4tgLZkgw8Bk9wIl0FVjjSaTxlJjNReNJiYj7WZQ4VDSDX+qzQF6OJX06gt7 -jZWBDRMqIQT9KVIUro+76BKDI5eL/PNi38JmBoyfpqp5+utqj4ooYCdJ6QMbvgY3 -9ck/4hPPOWkWpghxYOqpBGX02TmmO26xIKeDRwJA/PRBTnbyDAhDrJhto2SJUCiF -nlcOVIe9cFeshFRu0ELvlw99HXSULYM71GYWKH7U4fMxv4bTjpSOcOnq3GUBhe5H -gDKLx6E/avoDQO9SH0UvYvUP4PT80wCzrtC1zRXn551t5nwtWXGhIiN/6TPdYEJy -WnbVzr5tDIv4hH38jF7BAocd9EbvwHUA+dUJJw4oSLM2eeb7DmZuSqaVayNK0hDV -tUIRCavJac6o6AqRzQQDLdHOrS+5BamBOF3ptOB7pnbM/oU8bXVM5EcQLoRZW/VJ -vchAuj8xKyqfr573IpHRp+hIMDk4kyHEcBKVHEdVyw7re7qpQnuaTDM5azYxYcth -0LJWvA7EZUMFtx3labIrR16c8L358YOg6PLZ3Fdpn8rQV+kD9VCbcIWrE+0/y7Jp -Nx8KQs0bqzFEXnOM4MvLSG2KmHlgcs64BOPVdzhZrWYtMjIM2zA5Pz8D3kOFnzKL ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/sample-elasticsearch.yml b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/sample-elasticsearch.yml deleted file mode 100644 index 604199a1e..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-1/sample-elasticsearch.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# SAMPLE ELASTICSEARCH CONFIGURATION FOR ENABLING SSL ON THE HTTP INTERFACE -# -# This is a sample configuration snippet for Elasticsearch that enables and configures SSL for the HTTP (Rest) interface -# -# This was automatically generated at: 2025-09-24 11:57:58Z -# This configuration was intended for Elasticsearch version 8.18.2 -# -# You should review these settings, and then update the main configuration file at -# /usr/share/elasticsearch/config/elasticsearch.yml -# - -# This turns on SSL for the HTTP (Rest) interface -xpack.security.http.ssl.enabled: true - -# This configures the certificate to use. -# This certificate will be generated by your Certificate Authority, based on the CSR that you sent to them. -xpack.security.http.ssl.certificate: "http-elasticsearch-1.crt" - -# This configures the private key for your certificate. -# Because your private key is encrypted, you will also need to add the passphrase to the Elasticsearch keystore -# elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" -xpack.security.http.ssl.key: "http-elasticsearch-1.key" - -# If your Certificate Authorities provides you with a copy of their certificate you can configure it here. -# This is not strictly necessary, but can make it easier when running other elasticsearch utilities such as the "setup-passwords" tool. -# -#xpack.security.http.ssl.certificate_authorities: [ "ca.crt" ] -# - diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/README.txt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/README.txt deleted file mode 100644 index 6c2c31689..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/README.txt +++ /dev/null @@ -1,51 +0,0 @@ -There are four files in this directory: - -1. This README file -2. http-elasticsearch-2-dev.csr -3. http-elasticsearch-2-dev.key -4. sample-elasticsearch.yml - -## http-elasticsearch-2-dev.csr - -The "http-elasticsearch-2-dev.csr" file is a Certificate Signing Request. -You should provide a copy this file to a Certificate Authority ("CA"), and they will provide you with a signed Certificate. - -In many large organisations there is a central security team that operates an internal Certificate Authority that can generate your -certificate for you. Alternatively, it may be possible to have a your certificate generated by a commercial Certificate Authority. - -In either case, you need to provide the http-elasticsearch-2-dev.csr file to the certificate authority, and they will provide you with your signed certificate. -For the purposes of this document, we assume that when they send you your certificate, you will save it as a file named "http-elasticsearch-2-dev.crt". - -The certificate authority might also provide you with a copy of their signing certificate. If they do, you should keep a copy of that -certificate, as you may need it when configuring clients such as Kibana. - -## http-elasticsearch-2-dev.key - -The "http-elasticsearch-2-dev.key" file is your private key. -You should keep this file secure, and should not provide it to anyone else (not even the CA). - -Once you have a copy of your certificate (from the CA), you will configure your Elasticsearch nodes to use the certificate -and this private key. -You will need to copy both of those files to your elasticsearch configuration directory. - -Your private key is protected by a passphrase. -Your password has not been stored anywhere - it is your responsibility to keep it safe. - -When you configure elasticsearch to enable SSL (but not before then), you will need to provide the key's password as a secure -configuration setting in Elasticsearch so that it can decrypt your private key. - -The command for this is: - - elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" - - -## sample-elasticsearch.yml - -This is a sample configuration for Elasticsearch to enable SSL on the http interface. -You can use this sample to update the "elasticsearch.yml" configuration file in your config directory. -The location of this directory can vary depending on how you installed Elasticsearch, but based on your system it appears that your config -directory is /usr/share/elasticsearch/config - -You will not be able to configure Elasticsearch until the Certificate Authority processes your CSR and provides you with a copy of your -certificate. When you have a copy of the certificate you should copy it and the private key ("http-elasticsearch-2-dev.key") to the config directory. -The sample config assumes that the certificate is named "http-elasticsearch-2-dev.crt". diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.crt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.crt deleted file mode 100644 index 3e7d34ee8..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.crt +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDmjCCAoKgAwIBAgIUZWcpzexOP9notnWBEXOLgNPc3OowDQYJKoZIhvcNAQEL -BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l -cmF0ZWQgQ0EwHhcNMjUwOTI0MTE1NzU4WhcNMjkwOTIzMTE1NzU4WjAeMRwwGgYD -VQQDExNlbGFzdGljc2VhcmNoLTItZGV2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAlzGVkG+RekCXKi9Woc+xLkZTTmg9IB00CW1MjrhXAPjniYARME77 -WDKSPQchGzVtyIQum8yciTMdSsL/armOmlcLNw4M3PkuW7/HwxYTBgHOtPtwDnLA -MbuA+86CXhJhzA25bixkapPSip2lm4wqGCn0qDD5ebRpmkg5aQK56R6rnBIrHJbD -CYnGnm4G/9MdNYgphedJI52srmALmgSf7Vy/3BttaNaLrX889CkwhwnGo0WoaNfI -c4ZtPNQcA10jiWm95wMTsLINwUi4M8+CrUwN77yTwGDpODogNguaV0bO58+q7RUP -xxcJhT/MimwRq/ilPz+U4tMm3uQQc7esJwIDAQABo4G5MIG2MB0GA1UdDgQWBBSP -3ckCkVyqiUDu1ApvD7CuQUp/7jAfBgNVHSMEGDAWgBTIo4NUdI1j8AqTLlDSNmFl -CmOrKTBpBgNVHREEYjBgghNlbGFzdGljc2VhcmNoLTItZGV2ghtsb2NhbGhvc3Qg -LSBlbGFzdGljc2VhcmNoLTGHBH8AAAGCBGVzMDKCD2VsYXN0aWNzZWFyY2gtMoIP -ZWxhc3RpY3NlYXJjaC0zMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQADggEBAGNl -l9CdUzr5V1Zgden2QtpQEJvcHjrrDqOhqMDErsvr294YPdwGmM20H97/mrnZ5Xfw -DtPs9NKpW5/O0mG5nbPks55tnBtPvpo1x+nyVH+OU38/XqLgpdPT8TfPqLNiTlG3 -XGhsnnBj0GMcJkpIxWXfhfk9FxsHhTHBDOd/cQMa+sQYHaYEZhOFTAnj2pV1+aCf -1FRoDCy/8XLVPJDb+EwlFWa6HyTennc97EKafvgJhkVNH4snJ9gcFYfdWmVEGoFY -MdaBdOkRLOcbO2mXJFajBn4lpVhj7xsM3aH+0OdPquf/24b5hqMcSZevV5OMRNsA -WjAHkV0jjdi6Q0oNG2o= ------END CERTIFICATE----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.key deleted file mode 100644 index 988d8bf79..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAlzGVkG+RekCXKi9Woc+xLkZTTmg9IB00CW1MjrhXAPjniYAR -ME77WDKSPQchGzVtyIQum8yciTMdSsL/armOmlcLNw4M3PkuW7/HwxYTBgHOtPtw -DnLAMbuA+86CXhJhzA25bixkapPSip2lm4wqGCn0qDD5ebRpmkg5aQK56R6rnBIr -HJbDCYnGnm4G/9MdNYgphedJI52srmALmgSf7Vy/3BttaNaLrX889CkwhwnGo0Wo -aNfIc4ZtPNQcA10jiWm95wMTsLINwUi4M8+CrUwN77yTwGDpODogNguaV0bO58+q -7RUPxxcJhT/MimwRq/ilPz+U4tMm3uQQc7esJwIDAQABAoIBAB4bzrgLr8HTuQa6 -lJr2nEcl1BMqKPoLNsCl1ngZd6IG7zzvlvyyzdTbhUnH8KzVb/5dbFa0YXvlBPFN -ccXUG/TaXq5hCui6aqP0xhgwfitVEs/xvnfyHBoLR/1dO5L2QCl9li69gmXC+EuI -Z2FZgUx8lm8kCZpV9i22MlCaLWGh3lcqxUmzDi2D5+LedFEI8njLMwh4eEg1oU2b -sDHTiAuklgW+7KUDAfLag1YT3piB3BfBxhecFixlkq/7Hw7q/PX+wML5LvFsq89j -bCbmemWx1asMPlLYhonU7R/y9pq+apwXUD0fI63F3/3BgMRP8KrKgRFT8iqSu6Db -sAxMC2kCgYEA1WF0xt4s3CxT+hYhrcpjrUAVdwI+c/zW3R+YUdN6mjlug3hadNf5 -D6Imzvt032dg6kjV86ID29sKS4Dw1TeejXmxev8iUqbqL9kK5E6gFKPgl8igs33v -QCrzRQEZ59QZw+FYmlbcGXZNss3+rv3lPl/nEPcXtO+fwUzq50OgmzMCgYEAtWRk -sbwfK3KjZtTKm98pa5HtGbyc1TdzjZsyZdnYlZP8Ay9Nqgv/YXLYutojvQ9AkuG0 -2m49yuMRRAK+AbCxqXselG68DixozmPpaYjS5fs2tW8oZycQXFRGdv6Rkjs08O1H -zhAGxThVuv8slmcbN0gpbyxDMHX6cw3RhSUaiz0CgYEAm4vlcqq3DPELbnz/pA6r -Rro2a4CpQigIAT1s7gk5kH9ZPmFXn2Fo36qWm7/WXJyhm2fo/ycVpQkxogSmiud2 -ny8c38ponNOsV6DiPbfLHgCwUjUgYHfnFmG44I6C8eo9tfrpeejjnXQOA9ACXlIa -8LM8X7OgBne/f0uw2VEFHN0CgYAWKWDgEjLgtQ3ft2nVp2tBGEAWn+OtbSvyBh8f -MIF0rPLiVLoxZ2vZNRXjplktdRqXl3noIgXsrtdiLs+WF0dthHxU+D6DoMthQ/W1 -jiDuNkYV3rHaAHzQOv+s9CdG7XLnaKYYN/8Lw3k98oU5DvnVRDzDt22yEwf5XJvX -n5PhpQKBgQCQmuvRkbtedHOCuu+k4HDbxsLwKzeXORQxqc269tFX/g0kxsEs/fVN -dfi2rHwu+/ifHgeTHbkQonyyDyp825/UbrF1iCB8sBQmeVCFfXbBPSH+FbURYzu3 -3Vam0PPTZlPATRsXeH3hEZiflVhVDXGBJ9NqUZE3yrMniXnIZsfpeQ== ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.p12 b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.p12 deleted file mode 100644 index 6e34f11cf..000000000 Binary files a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/elasticsearch-2-dev.p12 and /dev/null differ diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/http-elasticsearch-2-dev.csr b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/http-elasticsearch-2-dev.csr deleted file mode 100644 index aea326d65..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/http-elasticsearch-2-dev.csr +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIDRTCCAi0CAQAwHjEcMBoGA1UEAxMTZWxhc3RpY3NlYXJjaC0yLWRldjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJm3lCLa0XQGAie/er5NNiE/BWDV -NxclOUUcuVqdxfhJ9dYVioo1rPDOQ1ueS9xROvO2N86kqODVb427DoK65gtzYOtw -V4FRbaSIh/k+NYseKwvcN6k4otT9L+/+qpsDutl5iPeecM8dod3Da+Zvgp1AVErN -Qdvg5RkXjfcUX3cBoffPZ9JASzmcNYujp9T1AgUXTXLnhzbIQA9n3K1gqMYP065C -HSucfEITIDNOn+0VgWX74mhyOw6Z10lWKOLIKAI+6CjyJdwniiG4Nv41NevcKMw5 -fkHR001u4aemmiiJIeCf8AQKXX/cqwouACvWk2VjQyZVyfovJqv0Utmvl10CAwEA -AaCB4TCB3gYJKoZIhvcNAQkOMYHQMIHNMIGlBgNVHREEgZ0wgZqCE2VsYXN0aWNz -ZWFyY2gtMi1kZXaHBAAAAACCCWNvZ3N0YWNrKoIEZXMwMYITZWxhc3RpY3NlYXJj -aC0xLWRldoIEZXMwMoIPZWxhc3RpY3NlYXJjaC0ygg9lbGFzdGljc2VhcmNoLTOC -CWxvY2FsaG9zdIIPZWxhc3RpY3NlYXJjaC0xghNlbGFzdGljc2VhcmNoLTMtZGV2 -MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0B -AQsFAAOCAQEAW1vXT01aC9Q2ZOABNfkQ8ABrgpCYMTGc5BnV4ggV661tz7zLYE7X -jRPW32Hl7K1U0x0uJgZRlj2x49ROUkihL8xYQqDcXSHi7mueMfpHDPfsKIcppP09 -aF/r63jgT8D0bzBqnJH3LKQ0yLsUJ1W4mUKUwZn/6cyOweTRBx0rUb7lzwARxKlk -DBNxxlUvKEYKswMQ+2sc1bkkcWSYebB/quasrcvyJCA6UdW/++AKPbuB0coJqYvP -bd8AawzoDYA7HHVw9RRR/kaxy3LDkdKxCs5u6/1hdc57mlMyMs2wAXHQ5AiIy6gc -dFooF27N+i84Okf6Su8r6wMiHfievRgb9A== ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/http-elasticsearch-2-dev.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/http-elasticsearch-2-dev.key deleted file mode 100644 index 19f048d0a..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/http-elasticsearch-2-dev.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,FD84C97C25BCEDF1A059D1FD94050284 - -nycxEV6llN4AMKux3qmDo1hsjVGCyBViMSTu1abnJoPBAUDpPQYkpIx4KotBcDql -d2q64xsQIFml7+Ey0NajAFp8MRt0XmJ4wrBzYyi/oWaQdThZR0SrzH0xTqYAc9q3 -2XyNDBbthsqsFqjuwdIrRmcT07yGoS+p3aApvlNfvMEuGJ0L+nulBlSyxrOTTuQS -lEYP0MD1rAxO0auMbyOPAMMwpMqyzhqDxExx/cF4N9Rq7qdMHSP3PT3gn6oBW+fL -GXRZbOw56cfwoUQlyyWhVYy5OfVCAAHGOULDVWwwRe0reZEaqKeC5SlBwnOwzdzt -ZHqSkg/K3VI33Bv/7wkG7oItTxUGQyJB0/V4Rvh6iznp2Mb+ng8dhTFiXiSGjtiB -G/8XIWLNykfRLFvaaZQrCjGOQFZoG2bYFIIkvuCcQSGixc+12eoeUI4juZEuzgLJ -JSq8tpXEaEPKKmrKuKoGIR6Ub1s2CfzhMJF/1OzPp4hOjI5kH7HUAmqD+AgQvgBd -8uHMPdc+/QA1lFRlLzHKBm2rVXkgiIYzr9Pu26w4ZVwBtpLoFuZMonfV9MiXtuzh -zlAYilJ5JPV025poNR3X+KYc5Bv3XbWHrDx0PnDfUpZXK8+nqR2yCGc0Qa6SLRyE -isuBoPNrlFGBxO9WADHdoy9tNyuWtrVOhAgCXjv1Is6rCfj2rOr5dytbNUVez0CK -TpQRnc8mAe8XksSTLQPUuiv6LCH0NbM4Lf8hfoyGS2W5ZLmMQBeglW1Btbp1vYNi -FKE78rG+rpCKiw9ZLZL3NZiTQ0a9bO8oBzxM/V+15WsoM2R/2yPHQ4pV6U64jr/y -JelCdxEnPCKng0Q9Hz9nGj6C1TZFjFQc6SJMh2lD28uB/8DDpOdauicPmEQXyitg -XIdv/ZwamVe0yDwMnCHoF+TZNb1QgXZDKzEHQCijUFHnUV73yuHKzwhX8P2GVOmT -K/OIm0TA0BcUn42AESAJ0nbYx2//xgXXsUB7W6JthxEfmO6XcZIpPTXyItX3Puy9 -9KI8pOWpTS1rlyBzgGfcdfMwuAcsK1fDgNBfDdUJ8CKO3y+wJLL6F93Op/XVg7ka -3gIavAAPNrRf2nmjd8qCnmvvYqUh0XoYzg2eNspOjbtLwu02OlsHaL6gW601lwTX -6k7E2HJqbFnAXsxKJpiv3+lzI0I5ZSYA6oEOF5TxD8Ysu96i+xeCmGQNfi27lv/S -6pluSdiwN5d8fYJJsiM8B0FIx6IvpTaPOCG5AibtxOuWWxpewwwUJvm5HEwK020W -nrUH6sl+sRBm9ZT4LIDKSui3WDmpZhJV3ug127eseLm7hmBRq86NwKYpcCmUN6/D -ZkevWqkeLmvMo6HWRy00xhFGFnsbwow2+FCRE0y0oWGfkd8S09E3RChZuLfr4LET -RQqnbwfnqeZ2WoGeUje8A9nY7YzXQ2yj/L4m9/27piORpswEoGC2qay+vQPit0hd -PBzqfvLHbT/rmgl+3ZfmP+j5WgIlfHQOLVGkkVNfVb0daj6/SNnf+alpRbOVEObJ -61qaZZeASA/1foqHbw/XhPvMUH70U1DgP2r1PS65Bds7jqaRYGsHY8HuuTlr9Xoo ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/sample-elasticsearch.yml b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/sample-elasticsearch.yml deleted file mode 100644 index 24355dfac..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2-dev/sample-elasticsearch.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# SAMPLE ELASTICSEARCH CONFIGURATION FOR ENABLING SSL ON THE HTTP INTERFACE -# -# This is a sample configuration snippet for Elasticsearch that enables and configures SSL for the HTTP (Rest) interface -# -# This was automatically generated at: 2025-09-24 11:57:59Z -# This configuration was intended for Elasticsearch version 8.18.2 -# -# You should review these settings, and then update the main configuration file at -# /usr/share/elasticsearch/config/elasticsearch.yml -# - -# This turns on SSL for the HTTP (Rest) interface -xpack.security.http.ssl.enabled: true - -# This configures the certificate to use. -# This certificate will be generated by your Certificate Authority, based on the CSR that you sent to them. -xpack.security.http.ssl.certificate: "http-elasticsearch-2-dev.crt" - -# This configures the private key for your certificate. -# Because your private key is encrypted, you will also need to add the passphrase to the Elasticsearch keystore -# elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" -xpack.security.http.ssl.key: "http-elasticsearch-2-dev.key" - -# If your Certificate Authorities provides you with a copy of their certificate you can configure it here. -# This is not strictly necessary, but can make it easier when running other elasticsearch utilities such as the "setup-passwords" tool. -# -#xpack.security.http.ssl.certificate_authorities: [ "ca.crt" ] -# - diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/README.txt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/README.txt deleted file mode 100644 index d256d07c5..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/README.txt +++ /dev/null @@ -1,51 +0,0 @@ -There are four files in this directory: - -1. This README file -2. http-elasticsearch-2.csr -3. http-elasticsearch-2.key -4. sample-elasticsearch.yml - -## http-elasticsearch-2.csr - -The "http-elasticsearch-2.csr" file is a Certificate Signing Request. -You should provide a copy this file to a Certificate Authority ("CA"), and they will provide you with a signed Certificate. - -In many large organisations there is a central security team that operates an internal Certificate Authority that can generate your -certificate for you. Alternatively, it may be possible to have a your certificate generated by a commercial Certificate Authority. - -In either case, you need to provide the http-elasticsearch-2.csr file to the certificate authority, and they will provide you with your signed certificate. -For the purposes of this document, we assume that when they send you your certificate, you will save it as a file named "http-elasticsearch-2.crt". - -The certificate authority might also provide you with a copy of their signing certificate. If they do, you should keep a copy of that -certificate, as you may need it when configuring clients such as Kibana. - -## http-elasticsearch-2.key - -The "http-elasticsearch-2.key" file is your private key. -You should keep this file secure, and should not provide it to anyone else (not even the CA). - -Once you have a copy of your certificate (from the CA), you will configure your Elasticsearch nodes to use the certificate -and this private key. -You will need to copy both of those files to your elasticsearch configuration directory. - -Your private key is protected by a passphrase. -Your password has not been stored anywhere - it is your responsibility to keep it safe. - -When you configure elasticsearch to enable SSL (but not before then), you will need to provide the key's password as a secure -configuration setting in Elasticsearch so that it can decrypt your private key. - -The command for this is: - - elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" - - -## sample-elasticsearch.yml - -This is a sample configuration for Elasticsearch to enable SSL on the http interface. -You can use this sample to update the "elasticsearch.yml" configuration file in your config directory. -The location of this directory can vary depending on how you installed Elasticsearch, but based on your system it appears that your config -directory is /usr/share/elasticsearch/config - -You will not be able to configure Elasticsearch until the Certificate Authority processes your CSR and provides you with a copy of your -certificate. When you have a copy of the certificate you should copy it and the private key ("http-elasticsearch-2.key") to the config directory. -The sample config assumes that the certificate is named "http-elasticsearch-2.crt". diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/elasticsearch-2.crt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/elasticsearch-2.crt deleted file mode 100644 index 922e8898b..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/elasticsearch-2.crt +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDgTCCAmmgAwIBAgIUMQUuAo84YO5Ymbi6rqj7csWXlb8wDQYJKoZIhvcNAQEL -BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l -cmF0ZWQgQ0EwHhcNMjUwOTI0MTE1NzU3WhcNMjkwOTIzMTE1NzU3WjAaMRgwFgYD -VQQDEw9lbGFzdGljc2VhcmNoLTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQDpygftWGLIxP0TlxuC+sqDdxSyDI3WwRhmS5EfQlXmBk5bG5vGPcE15lKj -TBfrFqHn/RoKS+ZeVke4ruvKFERk7xuEE4SMv4AAJy80bsar46yz+R4ripEUDRDK -sVQe2VBwzMmv4uXY3NcRwfzKSN2IdQm+AsElCP2Q9Mdj2bsbDLBwy+AT6ixgr+3r -PPiKYXadGSm8g5i0fUDHvAgoc+9o9e18/w7WA1yZQGTebclwBDeAo1gd1HXDIHV0 -iiE33FYDLMa/8fKcOJJoz7cSFcPL2c1fCWKD9Atcc3fUXBBqR52ANGsp5olyghwj -ElHva/UcCBAch0O8+682+jXZZWx5AgMBAAGjgaQwgaEwHQYDVR0OBBYEFBbSGm3V -MqWpb8yhC7hkIbUWpGMyMB8GA1UdIwQYMBaAFMijg1R0jWPwCpMuUNI2YWUKY6sp -MFQGA1UdEQRNMEuCG2xvY2FsaG9zdCAtIGVsYXN0aWNzZWFyY2gtMYcEfwAAAYIE -ZXMwMoIPZWxhc3RpY3NlYXJjaC0ygg9lbGFzdGljc2VhcmNoLTMwCQYDVR0TBAIw -ADANBgkqhkiG9w0BAQsFAAOCAQEAu/g87290JKCv5E5Ac6KiPI72rV14IwZsMhGq -gkbW5y5dmGZBk7UCPEGtq55zMAvJ6TXBFBsDNJg6FOAd8Mn8BTvVLvjAh0aiXay+ -XLq1I1fkROp11Qoef4U171Xzw5zrMQjSx6Rqs8+xH/MYXUXitNZwQYxacV6/vwnM -gPJtvdaYqows1pyeAQwbMkhRdKQscGH6adPeteAKk9fYQwwyDLdqOQHTYp5HTieW -daW4/XpKJZ8RxPB1p31EmXXrn1tkbimuUmasZLabCgauZ4Dh6Rb6TqnJ9kLXjLhL -TP8uuRsj/RvHlAcPS0YkcN715dXxGN9/p2l3PCAVyNgIyNUsmQ== ------END CERTIFICATE----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/elasticsearch-2.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/elasticsearch-2.key deleted file mode 100644 index 13f281bcc..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/elasticsearch-2.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA6coH7VhiyMT9E5cbgvrKg3cUsgyN1sEYZkuRH0JV5gZOWxub -xj3BNeZSo0wX6xah5/0aCkvmXlZHuK7ryhREZO8bhBOEjL+AACcvNG7Gq+Oss/ke -K4qRFA0QyrFUHtlQcMzJr+Ll2NzXEcH8ykjdiHUJvgLBJQj9kPTHY9m7GwywcMvg -E+osYK/t6zz4imF2nRkpvIOYtH1Ax7wIKHPvaPXtfP8O1gNcmUBk3m3JcAQ3gKNY -HdR1wyB1dIohN9xWAyzGv/HynDiSaM+3EhXDy9nNXwlig/QLXHN31FwQakedgDRr -KeaJcoIcIxJR72v1HAgQHIdDvPuvNvo12WVseQIDAQABAoIBAHO4kH7voon9U8W4 -JKKLL+Wt8l0FcMntr32nBvDhnXIsCen3+v3AAJyE4r+4wRgZDlAuDI8vLZrhe0PT -tZvDt2z8m/Ke1Jv0iE/LFYcPFCDuI8S72S61OoWhx/+Ekf5pE/OZsnVwytOy0HQW -QOIB+kH6qLVYWLFTx2tSdkWa9w32IkgVt3ErgYw5fw5OuudLKbjCp/53++Gv9b53 -HSI/AwcxeUMr1Q9+0FUdjY4EDLKXOUGddDYjMScffwi3YnYPKDlBmhf/O8+W1O4z -YsM1+iIqKkhgRfrB0c8BGq5UpbFKPkLzjIUPlLMi2/mValD5edUze0gjEE6aOM6v -MEPi3+cCgYEA8zBAHEMutu0deN0C/aklaHhhJeWM+KV0k46etqoJjcf2AyZkJiRx -b8KyKniP6bb3Jh70L9fBszBur+DJVX4tOcrqotezSoO9xM46nOFQWWCP9ZGP17ox -Qyv2NIwjyDVpwFlxFM0KRNwkYNWbAJhtQJ4YLCa1wnJkFUnA4eRdSkcCgYEA9hsE -dIBoauYHG967hOhsXxyrmnpP43GhB1uWEjI/nVLKMY4WG2gQiBstkf6JerSEl28K -AsmvudSgr2lxX4ol4HUOhbwcvW+aG+h6YbARolaD7v3nuNfldg8PpZenfI5Xn4g7 -3b8XKjhDGr6Fr2mk+50cQ+C+uzjvOf0yVBg8Mz8CgYAJzMr4mJh8VKfYZAen0zYn -tJotnceFiZ1eCORKdiW2afV3AQgOJW/Q0ia94WfjQjVJevvaJbavkucS/Vr/r/sA -ljXIZCrceNyf3rOr+MR1JZgHjFsglWdAzre4PGGAwu5FCxWsgerFBZ4NrO33Iy1b -6kMNHG48rMFtvjAgqkQ8JwKBgQCEsrKnQqmKojdJDsLbehsc+a+JntO+loE2H2r+ -qrtkT8SYDb3bzzPCv6zFoJJuaDFqGcQzFp66u2xcyKUJ18puiY9oCrMQbcGRtLtw -Ouh3OODwl1U/dKHUE3DjX68+WN3kNifZe/S4nheIrxwUJgmAZglcjC0rdBqBkQV3 -FI45LwKBgQDTM4scjk8bh0L0yYJNOhcgu6MhZeM4p2hPsWssMvbYtupZipQ2dkdr -N1dT6++Z3wuJYVz9oHHTRdNYAw/+15P0o5dguTsT7uRpk0llyNYdVihSRD2uNhBq -+gHxX+4pDXRoiSIhc4JTwVDFq000rwq+FInFkSeuO4IUGyw7Z+z73A== ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/elasticsearch-2.p12 b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/elasticsearch-2.p12 deleted file mode 100644 index 64646e9ca..000000000 Binary files a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/elasticsearch-2.p12 and /dev/null differ diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/http-elasticsearch-2.csr b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/http-elasticsearch-2.csr deleted file mode 100644 index 1e8dbe0cd..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/http-elasticsearch-2.csr +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIDQTCCAikCAQAwGjEYMBYGA1UEAxMPZWxhc3RpY3NlYXJjaC0yMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtXmGVEr7JlBm+OFboPqW+X9PzUjUCOsO -F68HlzqU2KNH5k8/eNwy5/ZwsNI4Btov0mr9xKBpV9Oe1BGciAk2dDIi+2Q0hNY6 -jcQNb/R2+7+UijrFaeRJW35bofhXVUKd7+q5AiDYntzU111nuj//awsGQ+uCg4ik -KueJwI7w1SVSThCs2wEn9WiV1LynapZ1iYxaWCOXyz7JhQebDNY50EUdipzN6n9N -YbSKGgdvoy7BgxtNVAM3CJ1rjSuCxTiZ36AEUiHYDlwzgnoHMmawuxb0iRR7ZFM6 -tYjnCQiPVS1HQ5fhqcDR5dh5FLHAe/pdRUty0tAnUj4dmtsALaMwYQIDAQABoIHh -MIHeBgkqhkiG9w0BCQ4xgdAwgc0wgaUGA1UdEQSBnTCBmoITZWxhc3RpY3NlYXJj -aC0yLWRldocEAAAAAIIJY29nc3RhY2sqggRlczAxghNlbGFzdGljc2VhcmNoLTEt -ZGV2ggRlczAygg9lbGFzdGljc2VhcmNoLTKCD2VsYXN0aWNzZWFyY2gtM4IJbG9j -YWxob3N0gg9lbGFzdGljc2VhcmNoLTGCE2VsYXN0aWNzZWFyY2gtMy1kZXYwDgYD -VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUA -A4IBAQCGT6G6LMv+Q5WaKjMKxrULZgwEa7iahFSDaFxYC84JZVsRKdlhWqWz6S7T -WUZb3XtZhS3JTTBdYo+12pSAUyabKr/2sy8y3INtXg9YmNB6K4IvutbFzZzht2Ow -dwkxL6u7zfffYVotXSTGb/sZR9rnfXrp8CMEM5d+ZGoQ1Rr4ThtVB6P2NA7TEa5/ -FHGndVIrqxUDqD2x1HWDq1qXVINPqw4JeO71ZOUxQQVB/wKLUNT5Lrtm/p71+wJg -x5hRNC1emLkKxOXZ8KZ4Av8kgPSRh9hILvj9ho5/tWUVKu0Sd3+cehHllCvG4xZj -n63cwhmGkvEa540bvCRr6DsZr296 ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/http-elasticsearch-2.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/http-elasticsearch-2.key deleted file mode 100644 index b11e69c12..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/http-elasticsearch-2.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,E3B2F7512C6DAE67AAE5A98E44873B45 - -znJELO7WKsV7XOeN9voeIOy4aUgD215vA2kRYZDhqB39X5ANStV/GeJtcTd7ndF3 -PRfQzw6Ww8djOJLzW93ubXDYkjWvmI8iK8j7QuBvnpyQ1P42bWMgu3BhhJC3JSZ+ -6avtLVEnDeI8l1Bdlbg1fr4WZrw10sAIFhipoMFaPrc5qVR1ehVNW1JCBit+Aay/ -I0TsdWk0GA3opeojc8Xg3kmU4mmkEGIrD7zaSrjvpNOa8dLTr8KMCWucuYnY2+ho -WkAkONiPA/wGmYHycimNq6RA33k74Bnqte9Ioa2h+cawY3GlbW6zzGZD7ZrlJPbf -xHD4X9AbbIXEqKyB0MIbvinLjZJ2bLolPHLsyfEamuvsjLEWaROPwLxqVjiO5K+z -ugmIFgK2LqgOyXZVIKeNxaOq11ow7QLVA6LszLprlQV2+Vbnv9xCv+ica1KEhiMK -Y/Yh0MlN/AuNA+zjwU9AquRIdeDSIMafX4oir3EiJk/0EXyRp0feNW0JJRc9h5SF -REpAcIroYcqTfcdbD0EKgY6TXi/5ERYBrzHpUUxHoE0FLIL+PYnJCwf/RNW+Zb7V -JGacw6xmNZSv9zRp8PeB+rNVCuY35VDoJAmapJ/SPgvrLR8UGRnDq+bcuIx/VyR6 -47k42PT1r9DIFEH37c8Tszz+kS1JMDken3FWrI0JyZOthup0KJRyROZVFd5ln+uO -1B7h35bNK/K1a9O3OAC4FUs4iPxyOCoouOBPotHhhll3pFKPPQofDNqMM3NTuRG5 -NccvbS05elie/+WqsWTW1jWac+gbp2Dcx+sk32nSMf+ECL3/Yu//tNgL328NzMvK -p3zljfYjap5HZwnlvBsIDJZ3XKmPh+v675D9bktwIEgxXqe9oAfGEtushqkZFh56 -ZLFHuutpPmUSa+Y2s8eqN6ZXUDiPrMmIQUo+RXdZ21ULkrjOSoIMfqo35rwmkSu8 -FQwzM5h3xnO5Jn0j+Vsw+HfXm7xUVPaXbes/jkNkArRRj/3zo6ZmmuQXBTYEqp9p -edlXmsb26gpb8weumE0y+iVPxZrqrukp7I5pFELs+vCUO7LAbKnzm+pkyhvJyG3I -2ZSqayBVMrIlIDMO/pJwAGxjlQchtZkzJI+bgHML5ME69OkUWB2A8sVijkoMSTW0 -CVEGbaZu7+Ab46LMX52MjaOsAG/8xf0jTmMvB2pklrB/BAv85YyQHMqXYhr9DJ5g -CqoI0RJSWOOKaMV99xVj3GJvuvkJCV/REGKt1MltemQHixibDqkhwTLoFF6Udc/H -BobOvOWF5qBp2NUqMKemr8l0UkAdDkB/dl0lyPsSASoMWVEvWwpd/SPKtp1q7fi/ -u2QYcgnu9NBprXAYXR9FJi0+dlbEybrLAT6f6xaHD1OUBkW7C0g4Q6Z9RMtlzNSJ -Yec3gwGVaY6NFJVh3iwKgq8LyCeRDQEiEKLrF9F4j2NjyWyrWnxoYQZ9gztAunqC -RrNgksaaBjzOAQnO+zofzgVCOe0QLBO0dFXsZpFOilpgozEE1GAaKgeepfKifl4O -nPDpTPUDPpT9f+WGafj+VceHOWac+KoxHmGtnZnMHO/xzwzPl0Y9JT+GrIldx6Gw ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/sample-elasticsearch.yml b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/sample-elasticsearch.yml deleted file mode 100644 index c629afac9..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-2/sample-elasticsearch.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# SAMPLE ELASTICSEARCH CONFIGURATION FOR ENABLING SSL ON THE HTTP INTERFACE -# -# This is a sample configuration snippet for Elasticsearch that enables and configures SSL for the HTTP (Rest) interface -# -# This was automatically generated at: 2025-09-24 11:57:58Z -# This configuration was intended for Elasticsearch version 8.18.2 -# -# You should review these settings, and then update the main configuration file at -# /usr/share/elasticsearch/config/elasticsearch.yml -# - -# This turns on SSL for the HTTP (Rest) interface -xpack.security.http.ssl.enabled: true - -# This configures the certificate to use. -# This certificate will be generated by your Certificate Authority, based on the CSR that you sent to them. -xpack.security.http.ssl.certificate: "http-elasticsearch-2.crt" - -# This configures the private key for your certificate. -# Because your private key is encrypted, you will also need to add the passphrase to the Elasticsearch keystore -# elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" -xpack.security.http.ssl.key: "http-elasticsearch-2.key" - -# If your Certificate Authorities provides you with a copy of their certificate you can configure it here. -# This is not strictly necessary, but can make it easier when running other elasticsearch utilities such as the "setup-passwords" tool. -# -#xpack.security.http.ssl.certificate_authorities: [ "ca.crt" ] -# - diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/README.txt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/README.txt deleted file mode 100644 index e830c8de9..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/README.txt +++ /dev/null @@ -1,51 +0,0 @@ -There are four files in this directory: - -1. This README file -2. http-elasticsearch-3-dev.csr -3. http-elasticsearch-3-dev.key -4. sample-elasticsearch.yml - -## http-elasticsearch-3-dev.csr - -The "http-elasticsearch-3-dev.csr" file is a Certificate Signing Request. -You should provide a copy this file to a Certificate Authority ("CA"), and they will provide you with a signed Certificate. - -In many large organisations there is a central security team that operates an internal Certificate Authority that can generate your -certificate for you. Alternatively, it may be possible to have a your certificate generated by a commercial Certificate Authority. - -In either case, you need to provide the http-elasticsearch-3-dev.csr file to the certificate authority, and they will provide you with your signed certificate. -For the purposes of this document, we assume that when they send you your certificate, you will save it as a file named "http-elasticsearch-3-dev.crt". - -The certificate authority might also provide you with a copy of their signing certificate. If they do, you should keep a copy of that -certificate, as you may need it when configuring clients such as Kibana. - -## http-elasticsearch-3-dev.key - -The "http-elasticsearch-3-dev.key" file is your private key. -You should keep this file secure, and should not provide it to anyone else (not even the CA). - -Once you have a copy of your certificate (from the CA), you will configure your Elasticsearch nodes to use the certificate -and this private key. -You will need to copy both of those files to your elasticsearch configuration directory. - -Your private key is protected by a passphrase. -Your password has not been stored anywhere - it is your responsibility to keep it safe. - -When you configure elasticsearch to enable SSL (but not before then), you will need to provide the key's password as a secure -configuration setting in Elasticsearch so that it can decrypt your private key. - -The command for this is: - - elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" - - -## sample-elasticsearch.yml - -This is a sample configuration for Elasticsearch to enable SSL on the http interface. -You can use this sample to update the "elasticsearch.yml" configuration file in your config directory. -The location of this directory can vary depending on how you installed Elasticsearch, but based on your system it appears that your config -directory is /usr/share/elasticsearch/config - -You will not be able to configure Elasticsearch until the Certificate Authority processes your CSR and provides you with a copy of your -certificate. When you have a copy of the certificate you should copy it and the private key ("http-elasticsearch-3-dev.key") to the config directory. -The sample config assumes that the certificate is named "http-elasticsearch-3-dev.crt". diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/elasticsearch-3-dev.crt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/elasticsearch-3-dev.crt deleted file mode 100644 index ff8dac477..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/elasticsearch-3-dev.crt +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDmzCCAoOgAwIBAgIVAMBiremKlRzlUbGeDytWshlABPh6MA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI1MDkyNDExNTc1OFoXDTI5MDkyMzExNTc1OFowHjEcMBoG -A1UEAxMTZWxhc3RpY3NlYXJjaC0zLWRldjCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAKBebxoL74ecksZNr7SFI+qGa8bbmRhRE/oODIUJ5FmxLt0M43xe -O/OgORhgv7feHiJw2iohJS+rz/W4JquTm6UxAgNtfLoYhpR9Qu01WCcwLT7nDfS/ -5CHACXdiHBUdwj5I8qfIJlp0yjhzKQdoqnibwbI1lPIOUL9nYutj5BhxP/QfzLsx -ZZNnGjlEaIVC7qSBynnnX8w7We7IcICfkCHOXiq9W4DHda4xDeweQS6PwmMHVRXM -0cJRyitq0JTEJrieQw8UKcSqQZ13lhkCjlnClvCZPjkiFvNnU3IcCXpCKE8F8Bmr -b8E0f5D0ENhox1rxTl9CVX9K1h4gHywoXdMCAwEAAaOBuTCBtjAdBgNVHQ4EFgQU -OxC96Ea/2wf8/tfasG+8hxh9SrAwHwYDVR0jBBgwFoAUyKODVHSNY/AKky5Q0jZh -ZQpjqykwaQYDVR0RBGIwYIIbbG9jYWxob3N0IC0gZWxhc3RpY3NlYXJjaC0xhwR/ -AAABggRlczAygg9lbGFzdGljc2VhcmNoLTKCD2VsYXN0aWNzZWFyY2gtM4ITZWxh -c3RpY3NlYXJjaC0zLWRldjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCk -BonF3JsHfqpoXyGsTLYZd/bTF6j6L5J7H3t3ZmU6ZZyXUC04+huIPX45bFKxMbF8 -/Gn4lI1VwBPZ94YWNFkHqbqldO+aecCmqH0MqTsdZS14iR6lT/7c9pSoBJB+elex -TIB7tDSW4DlqCVQfZelQgCTjRFtOqV1uyMVFpA0kYPVYYAayhbT82eyOAti1xn72 -LwHmMQx1BoX8l4gc6TABZHIkjhx/3J+hRG14XBX0JFWhqKNwGnRa7AAeWFsCfOC1 -mslO8eE2WfHmLXRwxtlSHOsHc+NQlZWu/CoTZfvcW4xjhoEqGEhOAqHtsA5s8i0R -tw2uQBdBuTk3GFf4drO3 ------END CERTIFICATE----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/elasticsearch-3-dev.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/elasticsearch-3-dev.key deleted file mode 100644 index f75849735..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/elasticsearch-3-dev.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAoF5vGgvvh5ySxk2vtIUj6oZrxtuZGFET+g4MhQnkWbEu3Qzj -fF4786A5GGC/t94eInDaKiElL6vP9bgmq5ObpTECA218uhiGlH1C7TVYJzAtPucN -9L/kIcAJd2IcFR3CPkjyp8gmWnTKOHMpB2iqeJvBsjWU8g5Qv2di62PkGHE/9B/M -uzFlk2caOURohULupIHKeedfzDtZ7shwgJ+QIc5eKr1bgMd1rjEN7B5BLo/CYwdV -FczRwlHKK2rQlMQmuJ5DDxQpxKpBnXeWGQKOWcKW8Jk+OSIW82dTchwJekIoTwXw -GatvwTR/kPQQ2GjHWvFOX0JVf0rWHiAfLChd0wIDAQABAoIBAA0ycup4pKULIFRR -AfkVOHVCdkMT64oskzwcL4aRNP6hOJiN83iBbrs9P7A/DKKOak9uQbMpgscPWK/s -EBlFg+T5CU/hO4bloXQ9x1Cq96P98HNBOLef75+hZIYJB65AgoLKpla3/1lT9sI6 -I9xiuMiaahBcHXOP9FrT9g17Qm2KXvK2qKCTxmV5sjObODjhh9XjhrBlgG+1OKsi -thDVpRP9Ut4AsLi6E9PlbUXOihuwgY0i3oqVc6kcrpV5bNfh+m65WSapEL8ceKrM -4uu6kknPhZhV5WWwWDvbcfOVU/yrZvtuYEYBd9HEZRi50dtlHAR7eOTJO2E+LYZU -wmyH8o0CgYEAx7VLe4d84nevidz1f/HP36cOXH5r6RL8kqfJHjTPW3mViQZipq54 -UOR6zeupzQOXQ2wtHJxL5GUcEVDy5rusNwCg10t4deB3Za/vLMYN6UxGMh5sC2ry -/EfqAFcXPxomf42y4ZZ/Z4l3t5XLJa+f1YGQBhGVSU31jVNwjwNuwhUCgYEAzZJ2 -RJiYDoAdQSukWaWJ0yMrnZSAHZfucAv8M+ovuu+sUeEC1Vk8sSybMYVhcnTA4mDN -uGbVWjIyKyXMglitwKUl2G675+hJTk/DpfNLEP3MjBFK+y1qf2DcuDfDSDY5Jy1H -tc0hdIT5AAjRkQxGP0ex5WB5m9agwsBG5KUy4kcCgYAbTOZPsbrZvqDJiOIqpmTT -XyPwcvvPdd//MF6m+XMrPxi5DZ1oycr6y/EZu1CQDSCdf+k+0wLw6v2GRHmgHyGw -ty5FoDSMcK4BwaZBiaWXMe0aptwAR5OF91K+zykHYEzI/RbqDcfG4Jz0BM8rjLGd -30NQARFWXwjlU/W8Jyz57QKBgGNrNNVh8w/4N62//ID6hRhehwZzvi4Rv1fjA/rb -hG/k37LNnoAt4yNQjlG5zvH6sxoIdRV8bixr4EVrx2c2mfl0JURx8WBrv6AnBVjp -u+EgzV7kMh4dzcaCwtw447G1v5hJ1sd+yHJAqOeyXB/JDuQluUxUhxuuBhuJv/9u -QZibAoGBALDhI3Qb+WIyKSYAuwz9oJyPzjKT9eATpJAXBFOWGrSzCPjVyw+JVjis -k61bEnC1tTzmgxthSYjqTySUXvt9feEE1Kr0VIDFxhGfeB5ZiwSN4/F8qDhSTowT -8Fbc37jC/hMYoWliZyvVLKQRZJO11AVCDqmhRWoJ7masE8ZkKs8i ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/elasticsearch-3-dev.p12 b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/elasticsearch-3-dev.p12 deleted file mode 100644 index 20e7aadf6..000000000 Binary files a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/elasticsearch-3-dev.p12 and /dev/null differ diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.csr b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.csr deleted file mode 100644 index 4eb99a199..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.csr +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIDRTCCAi0CAQAwHjEcMBoGA1UEAxMTZWxhc3RpY3NlYXJjaC0zLWRldjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANUC/cJPBNn3uYCBwy+mTkDNxqtC -pTMia1UHB8SSd51ySuh8+ZxKc2v1AmPuofhhwKNCvMMGdjv4/k5UiHaaNTz2WGkm -FBEtsL++0BgA0ClBQ+nryfl9ZxMsmWkOf/O59y7t+yu4f3nTeLPZpvWC237t/jfw -JJxflpdkzlVxash+Rk1bklaLlApz3p2FQLyXMrsaQBNPc0dYt+rrah1xokpYTmXW -EWwji4E9sq8zFe0AkrHSu1Bf3ZmWXbxxoAvuY7ZQkxzh21kxZ7n/ATSHTT1yWcZo -Pi8xCFkYgwLV9RQIEvM8ndTwXoz8Dk1pGXCLYDXRnjsuOn+JhMzyVQHs4k0CAwEA -AaCB4TCB3gYJKoZIhvcNAQkOMYHQMIHNMIGlBgNVHREEgZ0wgZqCE2VsYXN0aWNz -ZWFyY2gtMi1kZXaHBAAAAACCCWNvZ3N0YWNrKoIEZXMwMYITZWxhc3RpY3NlYXJj -aC0xLWRldoIEZXMwMoIPZWxhc3RpY3NlYXJjaC0ygg9lbGFzdGljc2VhcmNoLTOC -CWxvY2FsaG9zdIIPZWxhc3RpY3NlYXJjaC0xghNlbGFzdGljc2VhcmNoLTMtZGV2 -MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0B -AQsFAAOCAQEAJbEZMp/6uo8m5Sz39gFZxgrUGjJw2XC2ctXzDb5YLYeSiYmhVBlu -i8RKk3HqQ03m5orunJd1y3IpnuLEjQVvgCLngn74DRnQD7RPZavBiOz4XKIVh0eO -AFduzwyoz/B3tw/3PQDZg9YsAnNyYF6JaaZYIQ/c1noDjv61/eogO0Mr5CyKbi9S -xb6kQ/UtYi8zhO2Utl+DziHfAE4XHHQWKOhcj9lK3GrwfI7rJ9VnHnZXOBr/4fVB -sne1EI1Vvk/pYM26r/xmx4aazXhU9tCgP+M3KPrtIfQshS9wzHgoCP1fhg7P3lOD -P1Afse9aXiBwBMVNV+fyCdtnctDpR2zl8w== ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.key deleted file mode 100644 index 8770d1514..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/http-elasticsearch-3-dev.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,8AF0D8CC92780C448F406A79AAD7CE6D - -IEezQkMslDxVI5ctPtVe/UwiogdTof8kLQM1RbiNAEOu/qgCi+Sdt3el9vwA1f39 -m07LJJSwPaYWs1KnRliOoDc5F3vL7KWUJKx5ZCqQYkuw/6rnVsjLo7TjE3iZZ5// -ankSxf7x+0xanc8Yj6AmuOJcGOzvx30pt7XmiHfSDHEQrZZx5U0AxandEsE4lfzj -Gma8+l3iaYcNwe4cbSJJhYMTnJw2V+jzyxtigSrF29RyxGv57TXLltT3ONQ0mixS -fHETk6JgvlOa7UP5V9iJ43xuIxZIwUxon0MjdGCOe/NL9gGrtLMLdKsr98DV/8vO -zwXGorocKdA8QjWHSoY3DABaEumnVdEfwdONB1lv6VlnmF8ZDZ/LMYMPG3KZjp8S -qwYXScpT7vHMLr72rJwuB7xkpi+IMYuFx0Za+iN54E38TnspmpI9bhlG0yBqtPaM -UbC9SdxCv2GkhnLLAiZ35y7AH2c+kYx9qLZsHtWERBhYlnJVfjzMj3rEG+sptxCk -+6V0q0EGRcgf5KY1rk5jMUONSIkg8mYRu5Wcc9IkXOSgxGKGO8e4uvezoQrqU2Ln -jyCMiDhtioMMLUZ47ehePnjt1azSujrUHAzXj69y6M88npFpG8HK89AlBHO0gy0r -dIV/HcYzRRq+clYvid2+LxDt4TAHp1VMYdSG7mwWMrMvOXp02yXGI08KEsBoDYuZ -3o4NHa4oY41qHW/zCh2xRTS3kR43O2FHbgqNBNKMS7JevMiji9kAfplRUEwss49X -VjbmT6WAVClSWarYDuoPcrrblIyUJL6pwUPe818Ftv95/8WOwvYUM0vjba4gHISu -jFksLERy9ELBnRaMf0ci5n6usWJ1HpN5uSJNJZ3P8drONv6rC7sFVonLCWOOyIol -WMkx5VylAvTE2PkKt441SNkT6oh0HRWTecovmN/jEA2hFvVVIJWNdX46YHnVuBF5 -NTQ+WbcIPmt9sOKb/LvFO4WEX4RK0uH5ARZkghoQCKsRhukqYQPzJvccFewETRY0 -R5HDY7MYouJuJoNJ1aEQdsCV3YrFd4Qh8eh/8DodvYSu+bQwkKS4yUX/WOuY2OQ1 -NfQmcPZ5j8JK3b1MzUhGr0UnSdXj+ZCFwTIeteaq/cSLHdgDX1d/+HZr7/7IUYtA -G8c0JQ8/6rZ2TsxqOdrnFodE0W1KQaaNVNWD8tN+rdwKaXKEbGCUmK7QdrM0j/hI -0MTuaU5juOVfofZhsMx6nXRA+dziX4rQBmy3Vy5FYL8eXQ5qLud7CHNpUGTfwll6 -G6Z6P3EK1s3IWiGAf1IMSKIk+NYqEdOrOqSATYPvoby0FuT3zLgNEu5tBFdIMzHW -+izGxwFG/Z6nIpjtzFpf13wA+kY5udrbyWsVWqSgT/4ivZ97FiBrE+q4+JZc//QF -M4QH9mVqPQrHNkRTbKY/MLlojYtI2tzQ+TNOFW4gepLUqTOJBoQdki4YK7Q1Iter -8po4firN41m/A0GGGlXaDX1L6zNIo6MjWr28T+dSogzKpnMMbXujzdA2hAHRo9he -psNYNmTNHziGX+KdtTLykCLB6sop2bGPzydCwZwHz+8CKxa4nU0ociSTKGsomkWy ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/sample-elasticsearch.yml b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/sample-elasticsearch.yml deleted file mode 100644 index f7964596f..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3-dev/sample-elasticsearch.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# SAMPLE ELASTICSEARCH CONFIGURATION FOR ENABLING SSL ON THE HTTP INTERFACE -# -# This is a sample configuration snippet for Elasticsearch that enables and configures SSL for the HTTP (Rest) interface -# -# This was automatically generated at: 2025-09-24 11:57:59Z -# This configuration was intended for Elasticsearch version 8.18.2 -# -# You should review these settings, and then update the main configuration file at -# /usr/share/elasticsearch/config/elasticsearch.yml -# - -# This turns on SSL for the HTTP (Rest) interface -xpack.security.http.ssl.enabled: true - -# This configures the certificate to use. -# This certificate will be generated by your Certificate Authority, based on the CSR that you sent to them. -xpack.security.http.ssl.certificate: "http-elasticsearch-3-dev.crt" - -# This configures the private key for your certificate. -# Because your private key is encrypted, you will also need to add the passphrase to the Elasticsearch keystore -# elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" -xpack.security.http.ssl.key: "http-elasticsearch-3-dev.key" - -# If your Certificate Authorities provides you with a copy of their certificate you can configure it here. -# This is not strictly necessary, but can make it easier when running other elasticsearch utilities such as the "setup-passwords" tool. -# -#xpack.security.http.ssl.certificate_authorities: [ "ca.crt" ] -# - diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/README.txt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/README.txt deleted file mode 100644 index 73749443c..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/README.txt +++ /dev/null @@ -1,51 +0,0 @@ -There are four files in this directory: - -1. This README file -2. http-elasticsearch-3.csr -3. http-elasticsearch-3.key -4. sample-elasticsearch.yml - -## http-elasticsearch-3.csr - -The "http-elasticsearch-3.csr" file is a Certificate Signing Request. -You should provide a copy this file to a Certificate Authority ("CA"), and they will provide you with a signed Certificate. - -In many large organisations there is a central security team that operates an internal Certificate Authority that can generate your -certificate for you. Alternatively, it may be possible to have a your certificate generated by a commercial Certificate Authority. - -In either case, you need to provide the http-elasticsearch-3.csr file to the certificate authority, and they will provide you with your signed certificate. -For the purposes of this document, we assume that when they send you your certificate, you will save it as a file named "http-elasticsearch-3.crt". - -The certificate authority might also provide you with a copy of their signing certificate. If they do, you should keep a copy of that -certificate, as you may need it when configuring clients such as Kibana. - -## http-elasticsearch-3.key - -The "http-elasticsearch-3.key" file is your private key. -You should keep this file secure, and should not provide it to anyone else (not even the CA). - -Once you have a copy of your certificate (from the CA), you will configure your Elasticsearch nodes to use the certificate -and this private key. -You will need to copy both of those files to your elasticsearch configuration directory. - -Your private key is protected by a passphrase. -Your password has not been stored anywhere - it is your responsibility to keep it safe. - -When you configure elasticsearch to enable SSL (but not before then), you will need to provide the key's password as a secure -configuration setting in Elasticsearch so that it can decrypt your private key. - -The command for this is: - - elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" - - -## sample-elasticsearch.yml - -This is a sample configuration for Elasticsearch to enable SSL on the http interface. -You can use this sample to update the "elasticsearch.yml" configuration file in your config directory. -The location of this directory can vary depending on how you installed Elasticsearch, but based on your system it appears that your config -directory is /usr/share/elasticsearch/config - -You will not be able to configure Elasticsearch until the Certificate Authority processes your CSR and provides you with a copy of your -certificate. When you have a copy of the certificate you should copy it and the private key ("http-elasticsearch-3.key") to the config directory. -The sample config assumes that the certificate is named "http-elasticsearch-3.crt". diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.crt b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.crt deleted file mode 100644 index c4f94862d..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.crt +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDgjCCAmqgAwIBAgIVAKSbaKML0SnwyzX4I7333/0hkLmtMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI1MDkyNDExNTc1N1oXDTI5MDkyMzExNTc1N1owGjEYMBYG -A1UEAxMPZWxhc3RpY3NlYXJjaC0zMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAsC45DOfeVDGy3IcT7n2Cth4cnliO9E3ahHf9YzN89jVaFX8iXf3JfB0y -QPq8e+DgzyXJLf2O7yp3uPEkBg/EYQCS8BY6anPTiUcI7wKJb84G1m2TiqVkFJPq -Q36Qzi/tJ6Z6BDSoUSsvA06raSm4rWmYmXW8DS+CAhg8lSRMdz4yLMM4gRoPW2VF -tlqQfLJ3i/EmpqpBHwQE+ndPiuHmk2SsTXFj4XuUWJcCDzUm6mn/icCdI+jK3e2X -34Mulns7QV3BnQChfM6wvEadqj56WzfTeTkdcQRDK8AOQoWenvaMqHNydOfOD3n8 -un+gQ6yzwj9O+jIFI8XnZw+2sd36+QIDAQABo4GkMIGhMB0GA1UdDgQWBBT1wexl -RLvFj/gGwcQwdywyYoSs6jAfBgNVHSMEGDAWgBTIo4NUdI1j8AqTLlDSNmFlCmOr -KTBUBgNVHREETTBLghtsb2NhbGhvc3QgLSBlbGFzdGljc2VhcmNoLTGHBH8AAAGC -BGVzMDKCD2VsYXN0aWNzZWFyY2gtM4IPZWxhc3RpY3NlYXJjaC0yMAkGA1UdEwQC -MAAwDQYJKoZIhvcNAQELBQADggEBABJx5uyYyLHXT4OUvD4xBGk4LRko/snwJ97z -8pyyzddpobzKjhG4upUJQtl0DmvJEnzJu90oO7sDah5YiqiHq4mSPwOdh92bnILS -1K40Ybkt4pRoriF/PKYQ2oXi73LXtNbhyAM91WGcyD563DVscRjtgeKJBKTHJn9H -z1WOJsMxfkavQnNib204O57TyOM19t3kXENTT/k/nZ2Gj8XNQfIDA0i6nDWKyQWB -H9ozrprVIgIAhnMOIkGorUC9LCtZSQ6g1OTCbaB8a/mP8Jl4YmInbq806q3lSiWO -1yh7f2XHdNhV7YSlkVDytWtf8l2EodDiChGlabYyX3RBSOOkUe4= ------END CERTIFICATE----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.key deleted file mode 100644 index d1845c9e3..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAsC45DOfeVDGy3IcT7n2Cth4cnliO9E3ahHf9YzN89jVaFX8i -Xf3JfB0yQPq8e+DgzyXJLf2O7yp3uPEkBg/EYQCS8BY6anPTiUcI7wKJb84G1m2T -iqVkFJPqQ36Qzi/tJ6Z6BDSoUSsvA06raSm4rWmYmXW8DS+CAhg8lSRMdz4yLMM4 -gRoPW2VFtlqQfLJ3i/EmpqpBHwQE+ndPiuHmk2SsTXFj4XuUWJcCDzUm6mn/icCd -I+jK3e2X34Mulns7QV3BnQChfM6wvEadqj56WzfTeTkdcQRDK8AOQoWenvaMqHNy -dOfOD3n8un+gQ6yzwj9O+jIFI8XnZw+2sd36+QIDAQABAoIBAAOAob330JfSJp0D -evIVcO8rrVQ5DLt+3jqes40Asann4N73SHC/qj0jS/PWgD+CtplrpgKZ7TjkOl3U -/ms37kai5yjqejYSUCjlHoB455BPU1u5MTMTC2is0Z4OorSUp5VvlfKmNNfrQLuj -OV1leNBKvn/Dg03sTTx7LJ4m6vW+YGxUaq3lGIOoVR1B5qbCg65X7ORNLL5h0qq0 -eSUaBhp/H4LWyWqTNntg3KtD63YVZNCWgVzpU3QcNErg7uiuSK+eALM1L7f4kcpv -0UhIZtUnCuD3mJ9EgzVePPgOo5sNQq3CMLPEW+IeYlMshBA3kYO5P7OvlkXlj1Ix -CWi8N3ECgYEA7THCfP6QctFyRxUwTc3LYjqfXHICkV3PdtbsCtE/2HepCXxap3m6 -Pety8eFYUB/Ax0HucJyA7Fbg45fpy4DezO4hZR4Gkv2WE57u5DO4L1UZeJy1k6Sy -aH57FPZIDIR0X4xrQsx4LIIde6RdZOeSKnblDnPeGhr6O+1TzQosu9ECgYEAviYX -AfBepb+lLk858sduYJN9nBWlWCikt0w21Rrcl8stYHXPe7bKu7kKaYHeXc2cvPzS -gL2ZdcM3wRvcVUiDSDOD0iBwYbphmpVmhCuaCsLxrBU68VmLQhPrrV7ivIg5erG1 -Uyg3HG+EKCn8XHixAEKIUZU6jfnFwcbVqFF7nqkCgYEApdzZ55YLZH7ZrqM+d+mk -gzgDIB4JdaVn4e5AeQAB6VkjtyJiMiKI/aubYVD29HB/2dZc6hpGfP3znLMqJcgk -BKGwcIkih78UJvxIiQMxlMepXBIZVvkgWLm5T9s4XqhwyC/lAX0Bu/3wp/kz5c+Z -AmDJo+WaNh8PRMCcjRDEX0ECgYEAl2yB2ftvhBMwGcbh4OLMlYAfAZODTsdfFNFO -wTpY/VDB3BU1m9GfdQsQraDMUmsRLLcxc3CJquxBlDj5p7jNQ0wy570JgeoJHC9p -qkuGqpdAGcf2XojuizqN7kynx3e8PmcSfRyDdtOfrNRysbkzS3+wSzfJn5KO15fe -QeJRzbECgYBOOcbLnfQCaQzfqJ9PwbEGQ/IfZSSR9goJ1PJUxK1dyGGbfOXtdweU -pg1x5AW+dmAsKuxCicoLhaTPhzIWKGl/4t40SbwaCfJ4az/ZTBZZRAKJgBnnSj80 -Qb6HrCkhR3K9uEr0xLQJxpDOof3pxTlDdD1laavexlWHg8bUmS9qUg== ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.p12 b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.p12 deleted file mode 100644 index bb883a406..000000000 Binary files a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/elasticsearch-3.p12 and /dev/null differ diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.csr b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.csr deleted file mode 100644 index b90c30c81..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.csr +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIDQTCCAikCAQAwGjEYMBYGA1UEAxMPZWxhc3RpY3NlYXJjaC0zMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5pVjoYcdbT2tZSApiu0lYcrNSdcnjDLk -NTHQYEAnYlWAdJfO5PFay4DqAyYG9QyKrFUYWMtpb+kkXTYLZFXP57N5ZIAx9IqI -LWf6bcKrqz0tg1C+37WeWbdveP6Tt2Mojy3bEC2KDVeFPCZBeWFmmV2SBgdqk0pR -HQD0EqgKAoySWNbfkR4RigLB4zu5On/AGHjZORHr9bH6eqsNk7eoHEOkfsV6Fdcw -BhmJwRWNPxY3i1AlrgnbHMbPitx9RCnyzPlmEOeKq5JfUNSG0XDG+vM1CtXCbWks -Rt0tm7LMSAPlB7vl1yN0ALYvGWCKM4GAuFn/yywePIdH4XhlBkYrFwIDAQABoIHh -MIHeBgkqhkiG9w0BCQ4xgdAwgc0wgaUGA1UdEQSBnTCBmoITZWxhc3RpY3NlYXJj -aC0yLWRldocEAAAAAIIJY29nc3RhY2sqggRlczAxghNlbGFzdGljc2VhcmNoLTEt -ZGV2ggRlczAygg9lbGFzdGljc2VhcmNoLTKCD2VsYXN0aWNzZWFyY2gtM4IJbG9j -YWxob3N0gg9lbGFzdGljc2VhcmNoLTGCE2VsYXN0aWNzZWFyY2gtMy1kZXYwDgYD -VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUA -A4IBAQDWJ84YrAupXVvtivI3YXj0YYrMhG9jvtxnzEp347SSV4864d8HQTejc7T5 -qdjwhaJGA4ZB1paRaeyxjSktFYc/FOigDdDiw2qX/NdN2aQQ/EMUz8azgJg09e9c -JMq5ahU2PPDtm2QYeRdIj+KF0C9DbzlO3CGBBSRTbsAht2b0csBGflb3Dz4zQS28 -10YNC8rs5C+0r2eQ/GhXh5Ay4j5XeVVRNVRQUUB5zv6WPa9K/I53Z/uoIw3H6m3a -jWgdJpql4X7zXjOCsahviFjprBaXpyrUfhK5/fUsRmjSh82VoIN9Oi4UDk/Put1T -V6HgW+Jee9ZQkVrB1RoHkWkQnzkf ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.key b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.key deleted file mode 100644 index eed79d41e..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/http-elasticsearch-3.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,C25A50B02DD2FB61D1CC407D45661D64 - -UJNlLvWQhASth2eTYO9vh4cDX3hKhEobVa0FVG+WuIbkmtvwV7fDoZALfRBn07AQ -mDF3Y3Hk2AuUUBWIEALQU/OiYkW/cW+aX8PpF/pTYTsW0pvtYuQHKmkAfDs6ZVWm -k0J9iTKDVS4mQc54CxbCVcdtOUPr+egfNfethULX7QT18NeM8Cl6AJOgdEmPPfmo -2sBEnOMsLJElsAz/sbZUZaNuIJ7B/O0ptvX57ny1WsJf44PAAyuT4oZi8NWLuMMn -EcGHkJdGpgQPOTipA5XfuiLlmmMVWlOyJDrsD8MHOMtcW5sopULqpU5mBrca5UPa -h0bwg6PaNaOflTMlE/Xvz53iVgbdjYWIQZMOuwOO8s5IkSK+h4kzLQRsnXGz6voS -3GgyEn1bsmBX0v5+avtGdHHuDmc4YPfebKoFE3ARGhtshIcpfGwNIOP0fFmfqCJp -KCFzcKisVWfAoVSpfI3N/m8Mbl06wPshmLGj0WZ8VGDshQpjmCapzliCFKm3YXDb -PPS0IAq02xsJSrt68VG1BGxobXxfx9hV8B8kb0D2wgugbNgydcflBEgdk7XXhK3q -l1gqnuuAf//lcg1gf1QXQGGbLg6pRpgkGyadFtPYsIEk1/ICxznlYNdYIZUjtnvP -LoUk3LDzwsLZZeNPhGcojNpKpBqojaRZFdJAah9FUKlZFKRhSreY3gOe3mHTxFhU -El0aC5diRpuVL3ybls5rJD0kx5HvD7jQ6CIQgTKXLBT7BFI603QiJLkqx83fjAH7 -SIuuYLuO8XJHO6Vz1ewcnt4pHdtyoYdl5dhbUbgwiYwdgtmhFdGOib1wgG3NqeQg -kCZ8wXSI48LyfJ+vNU4ioB21QiuR2tQS1y2pyCEW7QAq/i3ZKqRcGlcfOG1a6Yp1 -ePlAIUptRrC53EhDY1OIokNq7tR+vgRuR/31U/mmfO3ntVN+mQ3ZYDAzmrmdOgzG -hv9Y5VZBdLxemGW4vamGLMGTxD0WMkvl3WxcsSEZDmt7hgOIdyCf6EOeJTJk8NRJ -nnemn5wtyvqWJYB8FTE5ML2eHmbcGscca/NP/ytdCfBC0rOCFSFp6oMrCrShYry+ -YPIZaA1tEAy/AOSUDvaJ0r7AnmMQHcz5Frqe3q7StUynpL3Jiq26tnFBmBGzk3Qd -oVp6P790YvbKbINBObGdVNDWSQUZyaulkQKkG4WnDOEWUY63Ov4/SjWaLJkGiUCu -SMN0cyvPmADIFweyF0jKCwUHPVtSfk7jrvEj/AC9CiG9fb3zK4E42j2ZxqAbvutx -ugfoLNmywG5jXMuc6jIrnjco06oWXXfqFHuRc3cJgQCFtfEJgLEK8ytPvHZwIvef -z/0rTyhfF0iIsTHN0+doj8cs+Ne2dTJTs527TGwY1PewXmdEzIpIoGXxUTo5tYOc -kq/ST2PamWQY0KxB6jsNwh/Y1SjEWcO7F0jXHu2HKmCY4Kfpn2fY45JS7WLj1IaN -E8+/IgdMzAem67f3Q9Flm7mlnGzneFECEjb0IcCOyfjRtWpW5kMmErgY2Qvh5Cpr -m1GoWAxhTFpSGDQ8xRuF2wSILoEH1zj+w9nmX6ycSJzInOe4E8N/hL6Brflg9JDl ------END RSA PRIVATE KEY----- diff --git a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/sample-elasticsearch.yml b/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/sample-elasticsearch.yml deleted file mode 100644 index d0bdd61f7..000000000 --- a/security/certificates/elastic/elasticsearch/elasticsearch/elasticsearch-3/sample-elasticsearch.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# SAMPLE ELASTICSEARCH CONFIGURATION FOR ENABLING SSL ON THE HTTP INTERFACE -# -# This is a sample configuration snippet for Elasticsearch that enables and configures SSL for the HTTP (Rest) interface -# -# This was automatically generated at: 2025-09-24 11:57:58Z -# This configuration was intended for Elasticsearch version 8.18.2 -# -# You should review these settings, and then update the main configuration file at -# /usr/share/elasticsearch/config/elasticsearch.yml -# - -# This turns on SSL for the HTTP (Rest) interface -xpack.security.http.ssl.enabled: true - -# This configures the certificate to use. -# This certificate will be generated by your Certificate Authority, based on the CSR that you sent to them. -xpack.security.http.ssl.certificate: "http-elasticsearch-3.crt" - -# This configures the private key for your certificate. -# Because your private key is encrypted, you will also need to add the passphrase to the Elasticsearch keystore -# elasticsearch-keystore add "xpack.security.http.ssl.secure_key_passphrase" -xpack.security.http.ssl.key: "http-elasticsearch-3.key" - -# If your Certificate Authorities provides you with a copy of their certificate you can configure it here. -# This is not strictly necessary, but can make it easier when running other elasticsearch utilities such as the "setup-passwords" tool. -# -#xpack.security.http.ssl.certificate_authorities: [ "ca.crt" ] -# - diff --git a/security/certificates/elastic/elasticsearch/es_native_certs_bundle.zip b/security/certificates/elastic/elasticsearch/es_native_certs_bundle.zip deleted file mode 100644 index 9e667639c..000000000 Binary files a/security/certificates/elastic/elasticsearch/es_native_certs_bundle.zip and /dev/null differ diff --git a/security/certificates/elastic/elasticsearch/es_native_certs_bundle_pem.zip b/security/certificates/elastic/elasticsearch/es_native_certs_bundle_pem.zip deleted file mode 100644 index 03366e4e1..000000000 Binary files a/security/certificates/elastic/elasticsearch/es_native_certs_bundle_pem.zip and /dev/null differ diff --git a/security/certificates/elastic/elasticsearch/instances.yml b/security/certificates/elastic/elasticsearch/instances.yml deleted file mode 100644 index 008db5cbb..000000000 --- a/security/certificates/elastic/elasticsearch/instances.yml +++ /dev/null @@ -1,67 +0,0 @@ -instances: - - name: elasticsearch-1 - dns: - - elasticsearch-1 - - es01 - - localhost - - elasticsearch-1 - - elasticsearch-2 - - elasticsearch-3 - - ip: - - 127.0.0.1 - - name: elasticsearch-2 - dns: - - elasticsearch-2 - - es02 - - localhost - - elasticsearch-1 - - elasticsearch-2 - - elasticsearch-3 - - ip: - - 127.0.0.1 - - name: elasticsearch-3 - dns: - - elasticsearch-3 - - es02 - - localhost - - elasticsearch-1 - - elasticsearch-2 - - elasticsearch-3 - - ip: - - 127.0.0.1 - - name: elasticsearch-1-dev - dns: - - elasticsearch-1-dev - - es02 - - localhost - - elasticsearch-1 - - elasticsearch-2 - - elasticsearch-3 - - ip: - - 127.0.0.1 - - name: elasticsearch-2-dev - dns: - - elasticsearch-2-dev - - es02 - - localhost - - elasticsearch-1 - - elasticsearch-2 - - elasticsearch-3 - - ip: - - 127.0.0.1 - - name: elasticsearch-3-dev - dns: - - elasticsearch-3-dev - - es02 - - localhost - - elasticsearch-1 - - elasticsearch-2 - - elasticsearch-3 - - ip: - - 127.0.0.1 diff --git a/security/certificates/elastic/elasticsearch/kibana/README.txt b/security/certificates/elastic/elasticsearch/kibana/README.txt deleted file mode 100644 index 1dff60ee7..000000000 --- a/security/certificates/elastic/elasticsearch/kibana/README.txt +++ /dev/null @@ -1,38 +0,0 @@ -There are two files in this directory: - -1. This README file -2. sample-kibana.yml - -Because your Elasticsearch certificates are being generated by an external CA (via a Certificate Signing Request), this directory does not -contain a copy of the CA's issuing certificate (we don't know where you will send your CSRs and who will sign them). - -If you are using a public (commercial) CA then it is likely that Kibana will already be configured to trust this CA and you will not need -to do any special configuration. - -However, if you are using a CA that is specific to your organisation, then you will need to configure Kibana to trust that CA. -When your CA issues your certificate, you should ask them for a copy of their certificate chain in PEM format. - -The "sample-kibana.yml" file, and the instructions below, explain what to do this with this file. - -## sample-kibana.yml - -This is a sample configuration for Kibana to enable SSL for connections to Elasticsearch. -You can use this sample to update the "kibana.yml" configuration file in your Kibana config directory. - -------------------------------------------------------------------------------------------------- -NOTE: - You also need to update the URLs in your "elasticsearch.hosts" setting to use the "https" URL. - e.g. If your kibana.yml file currently has - - elasticsearch.hosts: [ "http://localhost:9200" ] - - then you should change this to: - - elasticsearch.hosts: [ "https://localhost:9200" ] - -------------------------------------------------------------------------------------------------- - -The sample configuration assumes that you have a file named "elasticsearch-ca.pem" which contains your CA's certificate -chain, and have copied that file into the Kibana config directory. - - diff --git a/security/certificates/elastic/elasticsearch/kibana/sample-kibana.yml b/security/certificates/elastic/elasticsearch/kibana/sample-kibana.yml deleted file mode 100644 index 63ba154ba..000000000 --- a/security/certificates/elastic/elasticsearch/kibana/sample-kibana.yml +++ /dev/null @@ -1,25 +0,0 @@ -# -# SAMPLE KIBANA CONFIGURATION FOR ENABLING SSL TO ELASTICSEARCH -# -# This is a sample configuration snippet for Kibana that configures SSL for connections to Elasticsearch -# -# This was automatically generated at: 2025-09-24 11:57:59Z -# This configuration was intended for version 8.18.2 -# -# You should review these settings, and then update the main kibana.yml configuration file. -# -#------------------------------------------------------------------------------------------------- -# You also need to update the URLs in your "elasticsearch.hosts" setting to use the "https" URL. -# e.g. If your kibana.yml file currently has -# -# elasticsearch.hosts: [ "http://localhost:9200" ] -# -# then you should change this to: -# -# elasticsearch.hosts: [ "https://localhost:9200" ] -# -#------------------------------------------------------------------------------------------------- - -# This configures Kibana to trust a specific Certificate Authority for connections to Elasticsearch -elasticsearch.ssl.certificateAuthorities: [ "config/elasticsearch-ca.pem" ] - diff --git a/security/certificates/elastic/opensearch/.DS_Store b/security/certificates/elastic/opensearch/.DS_Store deleted file mode 100644 index 58f271c97..000000000 Binary files a/security/certificates/elastic/opensearch/.DS_Store and /dev/null differ diff --git a/security/certificates/elastic/opensearch/admin-key-temp.pem b/security/certificates/elastic/opensearch/admin-key-temp.pem deleted file mode 100644 index 4700062e4..000000000 --- a/security/certificates/elastic/opensearch/admin-key-temp.pem +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -5QChlh08KyqWyU0ZPTTNHHPtVF/2bg== ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/admin.crt b/security/certificates/elastic/opensearch/admin.crt deleted file mode 100644 index 7aa7a8dc2..000000000 --- a/security/certificates/elastic/opensearch/admin.crt +++ /dev/null @@ -1,32 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFlTCCA32gAwIBAgIUL8Q8IkSbyOkamFbESVZaIDKbbWYwDQYJKoZIhvcNAQEL -BQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkGA1UEBwwCVUsx -ETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwI -Y29nc3RhY2swHhcNMjUwOTIyMDc0MzA0WhcNMjkwOTIxMDc0MzA0WjBhMQswCQYD -VQQGEwJVSzEPMA0GA1UECAwGTG9uZG9uMQswCQYDVQQHDAJVSzERMA8GA1UECgwI -Y29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMQ4wDAYDVQQDDAVhZG1pbjCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMq61smruKyQsQJrbaI1YCWi8OL4 -L4My6TuWj12qMAY4YQxqt5UiSXyXN4PJmksqDJRZJLQCNcqZV5HDjCAruW+TOVun -IJNpyhHQUg2UVuhNXKoJohRNGzao1Jx1FQeUja1UCb2zDc0kB1XtQvvz6A05OsUM -8qFzHI2rzfF60pkkQYvlFgkP2Tt3WwbnMyGQQ/LKPYCUzMgHah7McWzgkbdahFCG -ILUUlPj3d7EdZFFCAy0j7DuJ+4F3ktbFKMe0bnxb7Rt22+l2t4bN1o1G3ckhPrlc -WwXq/IPzMq4UXzoNJrOmWPBefXL9+zQVgwllV9qoMVHaS2aALBifK9yyoAH1Me5Q -t/AOTeVZfXefCJzsU8qcs54QAR6jF4QybByzc6fHPCuTXD9J4nSLaYApXYdRb2JQ -808VXPGvXzLSqqr+MQFXQ757+dgms7nwxGdX8uGOq6+EJLReDU7/0H4ZL9vx9jgu -kh8H496TSbmycvYWFXF5mH292k8eCbXNU3cPC7Dit8gwi9cBPZPvai9YG64WibTI -57FAQDpYboTWiFda/gLJisG4f40+bDsH2+bva2Ta8IoiI0wnfnEQFyM2319Ce/Xx -Ni50MiFlDQq32PY3SdV1PsOqzfgCJ28RrGWPlo7tttGIa/IzCKpLlWbgeUO9mMZy -WdMZpPEA4tFFKYG9AgMBAAGjQjBAMB0GA1UdDgQWBBSwyWm3NyPnAapXf5ch398R -BgQ7QTAfBgNVHSMEGDAWgBSm1V7PKxv7a9va6cHaZEVs51lmUzANBgkqhkiG9w0B -AQsFAAOCAgEAUo+FYh2J9rP1UQexOa9EyYcTQMnErdKEDwdjhHwlQztOXkQrY3/n -8aFHKzhrusuJZxVzNMLFDP+lZ3LWhKGasKIwEPhvFwNpB/S3BF9QKXfSNkM/qd42 -vpkIZFEsY0wfspwcZjLcb7kbgCMhH26h/zIHJV8bxpgGq36LX3k8+QXY9ArZ+f+N -FKCJCEiJP5vOBbtRRCwZBADRfNgadBxLgRmTvH7fZCSMNA9UK7zbMTXMR1vNI8Fs -eXjcJS8O69uTW5rZhFFFIdUQDIVaj8PoUepepSkiYSMF9w+IY+NWZIIeDSbhTO3Q -gLa6AKiMLGaFGNE+G1Ts4l6jYvRA60C1eE8+j15jKwqzNXR19j9FepA+rq9AtB5+ -huIA9780VX8ormzn9dVIq05ripEMloycYcLQGu9B/QkGqHC5A9rWPsWG7dm5Sy5K -PACGiFn3Hxnn3gWwLUO+C0ZHgjGwGj7Osm7EATL4z3nUqFPhgDKiE3v+ePGHzTnd -oUhyORLEQZku/7xhpojscZ9v2waJafaN4pgNZVsp6HoM/arqsFCVXEWPUNL9OACK -A8w/mtVd2MmJUK2oc09cKMi0RG5ut/4YohAMc1ayJaO7VD9wuSoEDAXJUO9CVWQX -zIJZKU/k6wGLCXiaaqkXKoeZTqxmFAIVeGQzrNsV8UH8WfDnpwkboUE= ------END CERTIFICATE----- diff --git a/security/certificates/elastic/opensearch/admin.csr b/security/certificates/elastic/opensearch/admin.csr deleted file mode 100644 index 4a0d3a09a..000000000 --- a/security/certificates/elastic/opensearch/admin.csr +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIEpjCCAo4CAQAwYTELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkG -A1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazEO -MAwGA1UEAwwFYWRtaW4wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDK -utbJq7iskLECa22iNWAlovDi+C+DMuk7lo9dqjAGOGEMareVIkl8lzeDyZpLKgyU -WSS0AjXKmVeRw4wgK7lvkzlbpyCTacoR0FINlFboTVyqCaIUTRs2qNScdRUHlI2t -VAm9sw3NJAdV7UL78+gNOTrFDPKhcxyNq83xetKZJEGL5RYJD9k7d1sG5zMhkEPy -yj2AlMzIB2oezHFs4JG3WoRQhiC1FJT493exHWRRQgMtI+w7ifuBd5LWxSjHtG58 -W+0bdtvpdreGzdaNRt3JIT65XFsF6vyD8zKuFF86DSazpljwXn1y/fs0FYMJZVfa -qDFR2ktmgCwYnyvcsqAB9THuULfwDk3lWX13nwic7FPKnLOeEAEeoxeEMmwcs3On -xzwrk1w/SeJ0i2mAKV2HUW9iUPNPFVzxr18y0qqq/jEBV0O+e/nYJrO58MRnV/Lh -jquvhCS0Xg1O/9B+GS/b8fY4LpIfB+Pek0m5snL2FhVxeZh9vdpPHgm1zVN3Dwuw -4rfIMIvXAT2T72ovWBuuFom0yOexQEA6WG6E1ohXWv4CyYrBuH+NPmw7B9vm72tk -2vCKIiNMJ35xEBcjNt9fQnv18TYudDIhZQ0Kt9j2N0nVdT7Dqs34AidvEaxlj5aO -7bbRiGvyMwiqS5Vm4HlDvZjGclnTGaTxAOLRRSmBvQIDAQABoAAwDQYJKoZIhvcN -AQELBQADggIBAIAvOpNY92zrmH5uqAvJIaW5bE9UcB/o0+4HI+UuQ0PiAY/s2HUy -cc8Ln0P548LYnUu05DcU5qjUKF665ATzST5G9YGKDCauP0bsgJ9ZTMebXPz5SkMB -jPKcZJPo/ZrGWlviQ7eP2ZP+VUJGCdEx4oEQwh2LwNGz9AuI/mEByKTUAFFy7VXJ -cXhtTWOqmaSU84fhoZh3jbp3V/PrIxIL5n+V1nbZRMjnkA84CwTKFP/ELIDSuWOq -xk3KEJOSJfwSJPnXWVohNXWlS1HvjmsQjcc7POHQpGu2RyL01JQWp+cJgKGK3smu -cVfgZj8GxwEaLOjbL732sptTJ8Jg4XEolmj30ANBTbrZyRtP4qeLzx+qo2rkx9lv -piwTufAC9eN5fFV31PkuWN0YySBhwuF2H4yR7MS1OK8ECvQnwymcDyaRLOnboi6x -armdKw4tX8JlEYWPGIEpMfgr0gZOYUgAdVy1489e0KBnfOtdLnoDANdbqRo6YCBV -6b2eBFDOfffbVDhG+xC8gx/0gZ2DnFivCHdgJWm5ysWDP51jqees8lDGc2mKudkd -OnM1d1Elu22eeayhQRctX1S1B2TihNlAnuVviEuU9QkhbhF5pcii0d8KbS0rzP7L -UGaOLlaTQm2jOuqBYxua7J0/t5szV1gaMni4EKG2+cfnCTtBzlWTVh0V ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/opensearch/admin.key.pem b/security/certificates/elastic/opensearch/admin.key.pem deleted file mode 100644 index 4700062e4..000000000 --- a/security/certificates/elastic/opensearch/admin.key.pem +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -5QChlh08KyqWyU0ZPTTNHHPtVF/2bg== ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/elastic-stack-ca.crt.pem b/security/certificates/elastic/opensearch/elastic-stack-ca.crt.pem deleted file mode 100644 index aeaf6af9b..000000000 --- a/security/certificates/elastic/opensearch/elastic-stack-ca.crt.pem +++ /dev/null @@ -1,33 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFuTCCA6GgAwIBAgIUYbxTkjoK4rzdwalen0zql4EhsJUwDQYJKoZIhvcNAQEL -BQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkGA1UEBwwCVUsx -ETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwI -Y29nc3RhY2swHhcNMjUwOTIyMDc0MjM5WhcNMjkwOTIxMDc0MjM5WjBkMQswCQYD -VQQGEwJVSzEPMA0GA1UECAwGTG9uZG9uMQswCQYDVQQHDAJVSzERMA8GA1UECgwI -Y29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMREwDwYDVQQDDAhjb2dzdGFjazCC -AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXi6TyN3VF8VAFyvPa1OTwy -i7lx5OiL8rg6E64F2ariVmYcTVtW7cxEaFVqgen9SxMp96pUYr2CtMTDKU0IavpQ -eU1MUo6r3CcKdAcu6SUvxEhAGO357TCb3YK6FnghE/48Fn+zq4/xPCxQWp2qgatg -Gn8TSQ2n2h86rV1K6NqTVtgJVq3fg/DE+QPEDeXL/jtaqFMxZtC+Gm6A0LqDC/Dx -Bs6BQZ6W0uMaS7Xp+P1i9W7v+ALKjPr2DocMBkMPgATCfIkIqO1oAs2RkeECCI6L -mwPKQ19qIIdvI/FzJPpDaRiT0BqwOId441NFgQ3TJZxmz2RKpg7+a8EoHn1Baarf -SrKgxKYLDsv4wyl7wlR5GZwg+CWpH2djFhMoZ8BCeXagNb74TaEB/g3wqXOKu1Uf -wCRUoJnEPR7xG3L0Ocrcq1l0z878qVpM41Wxgat7EpulapI0jBUs6ndQi896s2cI -AwYstawVph72n9X49jV7kb2bWn9biQ0wjm2fs2NjlBuZHA1ydJ1uVzX5hp3RnuKY -JfLplTLPgscq9iWhFUfl8FFbe6GpDerbtsy1gg84wDmQEAIEXiDD8aUWkEj+20J1 -tZNjdm8BFbQuaTKrZF0gjhTOZ6rc+kH80Lu7bIuDse3s24TTaAewxSb8SXVbh8XV -blJcQB2nLIQTvtG+IuLtAgMBAAGjYzBhMB0GA1UdDgQWBBSm1V7PKxv7a9va6cHa -ZEVs51lmUzAfBgNVHSMEGDAWgBSm1V7PKxv7a9va6cHaZEVs51lmUzAPBgNVHRMB -Af8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU8i8 -Nvvq0Y+jh4+Ob70HRGe9SSuz+utz36aFD4J7YpwsmvjA2CM3YGTexjLJn6EI/N9h -7gf3rCLTHp3Ffb8QYu6lpQPbLv3BAJtseC7jxaK2QLaRmtVVTUwntEk6Sd/jzsvV -r+QiSg+7x79Au5spBKFJTIGOe3BPGF1Mrz5eH8gAGEqoLcCxb89/+qFZHwRgBWxN -kNyFOaSQyTsuYjd5j591SPDMbqvUa28sz+2cxDAu7o3l72hjGqw6HUv0V8myqjUG -zmoBEmkyNnWaBeoVVN6HHM8ezwAeh863sq1IgeF2m9hFzxtSMpEVFheZ+tKhdiyA -WlHZOjrq7/O5KwvgM52AB12rfx8EpG3DhcdCFtM5kg6udZDuR1Cb0V2FrpwdhsXt -7YHxqo7X6NdMK7npw5FZMqyTEZjhzfwd4Y2KYBWMpP8VhrGjcE/rhVfnzKr8rQN8 -1XHgmLENUMHggzBQfJoZeCv75+7+BCh3K4Y7jCmqJYH4L3a5ALRgIBRMAiLYaRbs -/PtF439g0T8KysqxHP5bS1flgdzSRMfP1NXckOKGH4PaAC45StXMjdkSxKoFNENV -chEgitDUop3YtAqhj5AYr5BniguGi3N48BzL9iL1EZF9k5FcVhLXWIcqRmIAAF82 -8ZTQf53OBAMvjhkIyFw5v5V0QpjkEHaphpt0cso= ------END CERTIFICATE----- diff --git a/security/certificates/elastic/opensearch/elastic-stack-ca.key.pem b/security/certificates/elastic/opensearch/elastic-stack-ca.key.pem deleted file mode 100644 index efbe3227f..000000000 --- a/security/certificates/elastic/opensearch/elastic-stack-ca.key.pem +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -dMdIHxLxLUPZLqYL3J5r2XWFouz3zw== ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/elastic-stack-ca.p12 b/security/certificates/elastic/opensearch/elastic-stack-ca.p12 deleted file mode 100644 index 41339280d..000000000 Binary files a/security/certificates/elastic/opensearch/elastic-stack-ca.p12 and /dev/null differ diff --git a/security/certificates/elastic/opensearch/elasticsearch/.DS_Store b/security/certificates/elastic/opensearch/elasticsearch/.DS_Store deleted file mode 100644 index 6e242136e..000000000 Binary files a/security/certificates/elastic/opensearch/elasticsearch/.DS_Store and /dev/null differ diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/.DS_Store b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/.DS_Store deleted file mode 100644 index ded5b09f9..000000000 Binary files a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/.DS_Store and /dev/null differ diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1-keystore.jks b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1-keystore.jks deleted file mode 100644 index 32fdc445a..000000000 Binary files a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1-keystore.jks and /dev/null differ diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1-truststore.key b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1-truststore.key deleted file mode 100644 index 99aab0b1a..000000000 Binary files a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1-truststore.key and /dev/null differ diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt deleted file mode 100644 index 11bad3560..000000000 --- a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.crt +++ /dev/null @@ -1,44 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIHuDCCBaCgAwIBAgIUL8Q8IkSbyOkamFbESVZaIDKbbWIwDQYJKoZIhvcNAQEL -BQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkGA1UEBwwCVUsx -ETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwI -Y29nc3RhY2swHhcNMjUwOTIyMDc0MjUyWhcNMjkwOTIxMDc0MjUyWjBrMQswCQYD -VQQGEwJVSzEPMA0GA1UECAwGTG9uZG9uMQswCQYDVQQHDAJVSzERMA8GA1UECgwI -Y29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMRgwFgYDVQQDDA9lbGFzdGljc2Vh -cmNoLTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC77VBMs4jxTGf6 -Bjn6I9aAFxKdUAkgM6sFnI4QOipOmP7i4pCdrXB3NQnyasVvOkkFubd0noQnsA6C -nh141NDP1ZCkR6Q6EUmmvFCGOOY321fg3X6AtKNwv7hAq1CZPHSVTE7hsvqSHK6Z -cVg5ViAl6OFBKrxW7tE7lxRjWDYQDCGvxdYH5CzwGBFaeTBVy7FTVasvPO2P59Ca -LeD0QHxeXQb47MqXQ/LSVqLBs29MeqL5R19bbJU8tjT2DLEoq0qFe55tjmecGf5I -0obwPvV1uEtRMkivMpHqpKcXHMgyB8ZFjhN6cPuekhTrrAPnyV298aoz1sTL6/DK -Ye0vmHo9BvZJf3eeuY/7yzcDE3ugE0VBMqtTzjbUKk8/OtuwvVnrcyz5tD/t76uZ -lpOlf99Iuhp8mOuzKlOI27QjHgeA7OxXeaedAAK7RSHIPLYza13z8VonEW8zVlzQ -5mYbXJtytERXm7wNRv7Pv0V0aIQQ6PebfDwE4dxy1lSZWLu0GLdiKyyZWJLLE3bi -CFeX6gXuBsiVlU7KsAWwKuTlDYyScVkcj6l3pr+TS8N7vO6CjtSHrnxdl6wMGmPG -wg8/nf1I/OCjaSbPn9TFFEvcD3Wl8eXuJCL5Dkh79Q1KKY3PukpheSzCUQXZ2L4/ -B3rUtZoM4x06h9EWRdAy6sDDEPkqWwIDAQABo4ICWTCCAlUwDAYDVR0TAQH/BAIw -ADAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC -MB0GA1UdDgQWBBTRlqavQU6H/73QDvtAh+mnC4tASzAfBgNVHSMEGDAWgBSm1V7P -Kxv7a9va6cHaZEVs51lmUzCCAdQGA1UdEQSCAcswggHHggRuaWZpghJuaWZpLXJl -Z2lzdHJ5LWZsb3eCCm5pZmktbmdpbniCD2VsYXN0aWNzZWFyY2gtMYIPZWxhc3Rp -Y3NlYXJjaC0ygg9lbGFzdGljc2VhcmNoLTOCC29jci1zZXJ2aWNlghVvY3Itc2Vy -dmljZS10ZXh0LW9ubHmCFG1lZGNhdC10cmFpbmVyLW5naW54ghFtZWRjYXQtdHJh -aW5lci11aYIdbmxwLW1lZGNhdC1zZXJ2aWNlLXByb2R1Y3Rpb26CIm5scC1tZWRj -YXQtc2VydmljZS1wcm9kdWN0aW9uLWRlaWSCD2NvZ3N0YWNrLWtpYmFuYYIPY29n -c3RhY2stY29ob3J0ghhjb2dzdGFjay1lbGFzdGljc2VhcmNoLTGCGGNvZ3N0YWNr -LWVsYXN0aWNzZWFyY2gtMoIYY29nc3RhY2stZWxhc3RpY3NlYXJjaC0zgg1jb2dz -dGFjay1uaWZpghNjb2dzdGFjay1uaWZpLW5naW54ghtjb2dzdGFjay1uaWZpLXJl -Z2lzdHJ5LWZsb3eCFWNvZ3N0YWNrLWF1dGgtc2VydmljZYIIY29nc3RhY2uCCiou -Y29nc3RhY2swDQYJKoZIhvcNAQELBQADggIBAFJzmjUp+0I5XMOJ47U+JB3q8zkX -b4yNWIY/ZAM80jDPTapbYicgQdbqbKV4j1QI9a9rtiwWbGnYwrYFtvzBEa9BaN7f -AP5J7zcODoPC7Pe2406K/7nNMPZvZrol9np0wi1o3yAIRfHPgHOc1jkZ1qRIK+ub -TiADg0uIOMrM/yaoqMkjABsS8hzd6x5HRCkD1sAJsPsrRh6WUs7cWeqv91U1gGWM -vNXRbL3rypRWR8OjudanSJfgNMUEqGmXQv9K0P3AI/q7dRkPza6s6KlednkMy8D6 -7aRluZbNgOYQ5DM8yZFpwzLWt2gsiu3bavReD4M+KpyI7F3+L4Gqjlk5AN7ACjY7 -LcUenqSHQuAUmIu7DSX+SvIPHaeq6Wp2ncZKQ1R2TJXoz2Gh9X48danDzRQNhRDD -/VPCIUli06a8Y/sVjfAj7l7FQWLsmU0bSVfqkSj/aPNOp/i3UqaaSntznZB1Ji7C -pa0gQIie9ATiDd2CIhI1t7+3Anfu6UU5kXyuDsKPLFmU1J3PNcBjNV5xg2EiRui/ -vD6BSbAHudENl57VqdaEsrdq0wVR7TvJbHe/lHMQiGWsmCMSpxQxHQyiNBOtUWSM -bI8SNFRb0esy3zcNzmWKDBjST1Jo5elWeLjkQXBNGns8Ij5XP1FlL7k9Z8T5WZdO -BKVV27jOnOo0k/W/ ------END CERTIFICATE----- diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.csr b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.csr deleted file mode 100644 index 70e50ff99..000000000 --- a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.csr +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIFZTCCA00CAQAwazELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkG -A1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazEY -MBYGA1UEAwwPZWxhc3RpY3NlYXJjaC0xMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAu+1QTLOI8Uxn+gY5+iPWgBcSnVAJIDOrBZyOEDoqTpj+4uKQna1w -dzUJ8mrFbzpJBbm3dJ6EJ7AOgp4deNTQz9WQpEekOhFJprxQhjjmN9tX4N1+gLSj -cL+4QKtQmTx0lUxO4bL6khyumXFYOVYgJejhQSq8Vu7RO5cUY1g2EAwhr8XWB+Qs -8BgRWnkwVcuxU1WrLzztj+fQmi3g9EB8Xl0G+OzKl0Py0laiwbNvTHqi+UdfW2yV -PLY09gyxKKtKhXuebY5nnBn+SNKG8D71dbhLUTJIrzKR6qSnFxzIMgfGRY4TenD7 -npIU66wD58ldvfGqM9bEy+vwymHtL5h6PQb2SX93nrmP+8s3AxN7oBNFQTKrU842 -1CpPPzrbsL1Z63Ms+bQ/7e+rmZaTpX/fSLoafJjrsypTiNu0Ix4HgOzsV3mnnQAC -u0UhyDy2M2td8/FaJxFvM1Zc0OZmG1ybcrREV5u8DUb+z79FdGiEEOj3m3w8BOHc -ctZUmVi7tBi3YissmViSyxN24ghXl+oF7gbIlZVOyrAFsCrk5Q2MknFZHI+pd6a/ -k0vDe7zugo7Uh658XZesDBpjxsIPP539SPzgo2kmz5/UxRRL3A91pfHl7iQi+Q5I -e/UNSimNz7pKYXkswlEF2di+Pwd61LWaDOMdOofRFkXQMurAwxD5KlsCAwEAAaCB -tDCBsQYJKoZIhvcNAQkOMYGjMIGgMIGdBgNVHREEgZUwgZKCD2VsYXN0aWNzZWFy -Y2gtMYIGa2liYW5hggxtZXRyaWNiZWF0LTGCDG1ldHJpY2JlYXQtMoIMbWV0cmlj -YmVhdC0zgg9lbGFzdGljc2VhcmNoLTGCD2VsYXN0aWNzZWFyY2gtMoIPZWxhc3Rp -Y3NlYXJjaC0zggRuaWZpgghjb2dzdGFja4IKKi5jb2dzdGFjazANBgkqhkiG9w0B -AQsFAAOCAgEAh4ZvejS4m3RFQip5ikXEGVyzE1HHgFwB4OXlzFAESKP7SarmZN5Z -06QA2jV5QGyH5FePAEjpok2eMrC4gU+wyXA/3+aVaiGqHMpqSg+jx+JrnVsmGYTA -Hkl2xPX7REns7gGZsrvH6jfQ7OHuEPa8e66Cdm7Q+eCio3Y072tIFGjh8rfIb5lV -xA9fQE0YmGd+I7Pe13SC//NJgDI8JboLMqtpoXr5pKVcp5VQXeDlFlb+utHldYdC -GPLPi/u0A06exaZST+YzLmgR/iWSXF17R1D1eh54wlRBRsR5UHFfheIz+D3fjXrE -ED8dt/khaFYEiCg/paviEciUfFykRqC/zhoPYgUeLxKs6cTHVKHmZMpFkx5n0KCo -bYS27FJnoZPt2OPCtebo2uZVSaYOUJDwfGniDeB71eIT2HXla5QSnYYds3L51cO9 -XBZ5FPOcg0+ksPgKzA7R0PyVgDg1XsX4OkJ2QUEn/G5pMJV3SzR9jWorYnV21xig -Qia9NIi7V7p5tqczz9PF2x1djZiR8Jaj5hWWqkf68CF5zZbgX72+fmo5bFFKuBz9 -uoQCbDu1Ny07Q8MJXp5A+Fm0AizmwCG0kuH3k3WFzdwara2MgLV4kuOYcr7pud24 -dDDtn3RTBKJ1bpXr3rA6VEV4f56TFjh6yytnW0GyV8Aclm5XGOyxPfQ= ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.key b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.key deleted file mode 100644 index 20ff2c4aa..000000000 --- a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -oxwC3+V1ZuQXi2jhCBlAAdvrWM7R7A== ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.p12 b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.p12 deleted file mode 100644 index 5e3737b52..000000000 Binary files a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-1/elasticsearch-1.p12 and /dev/null differ diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/.DS_Store b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/.DS_Store deleted file mode 100644 index 5f234ace0..000000000 Binary files a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/.DS_Store and /dev/null differ diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2-keystore.jks b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2-keystore.jks deleted file mode 100644 index e76489416..000000000 Binary files a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2-keystore.jks and /dev/null differ diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2-truststore.key b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2-truststore.key deleted file mode 100644 index e4b8e706d..000000000 Binary files a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2-truststore.key and /dev/null differ diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.crt b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.crt deleted file mode 100644 index bbdebd714..000000000 --- a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.crt +++ /dev/null @@ -1,44 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIHuDCCBaCgAwIBAgIUL8Q8IkSbyOkamFbESVZaIDKbbWMwDQYJKoZIhvcNAQEL -BQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkGA1UEBwwCVUsx -ETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwI -Y29nc3RhY2swHhcNMjUwOTIyMDc0MjU0WhcNMjkwOTIxMDc0MjU0WjBrMQswCQYD -VQQGEwJVSzEPMA0GA1UECAwGTG9uZG9uMQswCQYDVQQHDAJVSzERMA8GA1UECgwI -Y29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMRgwFgYDVQQDDA9lbGFzdGljc2Vh -cmNoLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCs46QM34HknczR -AXQbVEXt1DqruaM5GgfTA4b43KJSfysHHRLV8qZ4B5YoRmWxZYXkEZnbzAT429oG -nHkFANrHr6jfme2brlScFNZL585t9wsP0+s/V5gK/RRXDVDtxAfPhTKDkYJnrMl5 -xyHD5hVx2Eq/CRVGsYwsAgLrBurarYiT3wdGbbg90Jc/Po0awy1+jDfswLIZRxpw -lIML/+sJzsgxME7l9boXOAf+mCl196DxWqtYBJ5GpIpUw0956OZXgQLVdlwmUDTL -OEUgfbAVEytIG3nAAs4m645Smt5Wld2wkuNCY8uHDsg3f5m5ltqBzRGQSD/uJxL5 -x/kGr3xOL/fwKXRcIQhaB2Ze1GLJxkOmbSO2bKYU1uSu5zxOcqS4fTKDMLtbtEvm -1pJVktRKiZ75BQuXt0l1Q113U/WmADw3Mhj+2RWztCpQCjvP3G4tKeTvSPLm9mqj -hmHFQsjL/vWtSM3iyaQXSjKSTGsPiqLoUqsd7j6y6UqTXxMDb4QELhydsVk8/4GD -UeP8WVnwb4Qu/UhaH/ycRkP6QpB9ebs4GY+tC2RzqkYGbiyxzBdLaiVt6CZnyzYg -ZgYMic3asvUh0Bnf3KTnwUeZO3LMPD3FJnM6+XRKjyb0cx8eyc5kFixhvCn2USSL -h9IpAWrAOQwIMM4XnfUZQrvwS1p7MQIDAQABo4ICWTCCAlUwDAYDVR0TAQH/BAIw -ADAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC -MB0GA1UdDgQWBBRL6WbPx3x3QWT+J/B1zgmSrpeR2zAfBgNVHSMEGDAWgBSm1V7P -Kxv7a9va6cHaZEVs51lmUzCCAdQGA1UdEQSCAcswggHHggRuaWZpghJuaWZpLXJl -Z2lzdHJ5LWZsb3eCCm5pZmktbmdpbniCD2VsYXN0aWNzZWFyY2gtMYIPZWxhc3Rp -Y3NlYXJjaC0ygg9lbGFzdGljc2VhcmNoLTOCC29jci1zZXJ2aWNlghVvY3Itc2Vy -dmljZS10ZXh0LW9ubHmCFG1lZGNhdC10cmFpbmVyLW5naW54ghFtZWRjYXQtdHJh -aW5lci11aYIdbmxwLW1lZGNhdC1zZXJ2aWNlLXByb2R1Y3Rpb26CIm5scC1tZWRj -YXQtc2VydmljZS1wcm9kdWN0aW9uLWRlaWSCD2NvZ3N0YWNrLWtpYmFuYYIPY29n -c3RhY2stY29ob3J0ghhjb2dzdGFjay1lbGFzdGljc2VhcmNoLTGCGGNvZ3N0YWNr -LWVsYXN0aWNzZWFyY2gtMoIYY29nc3RhY2stZWxhc3RpY3NlYXJjaC0zgg1jb2dz -dGFjay1uaWZpghNjb2dzdGFjay1uaWZpLW5naW54ghtjb2dzdGFjay1uaWZpLXJl -Z2lzdHJ5LWZsb3eCFWNvZ3N0YWNrLWF1dGgtc2VydmljZYIIY29nc3RhY2uCCiou -Y29nc3RhY2swDQYJKoZIhvcNAQELBQADggIBAGJ4b6JmG1+uGnyAtMaj9Ychc7Ae -g2RLFoItFiazMOEJ55mYeKB7+SCUSSeEoxhbUnPWuc7wrGxncnNClnzbKzwQdGfs -TpkoGRZ9Cu64V1qGxq2PFDHSOEF5XQCjZ7V768QrHepEWM1tt/Qm8XuPYPqak0/i -NUAY6+z72goEa2HpU9uqCRmQWgd5crHNglrm8jKG4Cday/drUT7J0TyUrrCrXuCa -x4PrY9AnMnqVtYB7AXG+HKTjP57VBqpES1aZ/DA8vg0EFFf5sZzgWLcHuAkRIOu1 -E76lUZyv1qVQEKY/ArlcHuJIUBqo9zsSPdTN2MQzISKXFCRMk7fv7es360zQ0JP8 -GWS4d2OgJOW096AQvqOW/FRMmfJFyopuWsf+tISbqpD/qfYAJXEM4RX0J2aRzr7U -LuNJ4FaoHV7Ku3P7JfAEcdx2mK7kMwUGpPnwiXHmg9xZ7Eh0uB5cIxzwhJZEXgFZ -lSAe8Pnb9eoU5xwXnunGkGbif5SFYar8Ibz7fsXcE1kRTQmAqQ5d+f5PKWgUCgkS -FIozqkA51twEfgS9QRFH5gSoRiiwYQxxtp1t7/pPgKT3b80lhrGGK7axIHefL0Ox -Za9xMW2Bb7xZP+qpTTYB4+l/Yy8UIgzKiWlbZ8B274IjtmOVlgJhNEGq8M0wJGeb -ZVNwM3O9pzX+MnGp ------END CERTIFICATE----- diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.csr b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.csr deleted file mode 100644 index 48a7e65e6..000000000 --- a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.csr +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIFZTCCA00CAQAwazELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkG -A1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazEY -MBYGA1UEAwwPZWxhc3RpY3NlYXJjaC0yMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEArOOkDN+B5J3M0QF0G1RF7dQ6q7mjORoH0wOG+NyiUn8rBx0S1fKm -eAeWKEZlsWWF5BGZ28wE+NvaBpx5BQDax6+o35ntm65UnBTWS+fObfcLD9PrP1eY -Cv0UVw1Q7cQHz4Uyg5GCZ6zJecchw+YVcdhKvwkVRrGMLAIC6wbq2q2Ik98HRm24 -PdCXPz6NGsMtfow37MCyGUcacJSDC//rCc7IMTBO5fW6FzgH/pgpdfeg8VqrWASe -RqSKVMNPeejmV4EC1XZcJlA0yzhFIH2wFRMrSBt5wALOJuuOUpreVpXdsJLjQmPL -hw7IN3+ZuZbagc0RkEg/7icS+cf5Bq98Ti/38Cl0XCEIWgdmXtRiycZDpm0jtmym -FNbkruc8TnKkuH0ygzC7W7RL5taSVZLUSome+QULl7dJdUNdd1P1pgA8NzIY/tkV -s7QqUAo7z9xuLSnk70jy5vZqo4ZhxULIy/71rUjN4smkF0oykkxrD4qi6FKrHe4+ -sulKk18TA2+EBC4cnbFZPP+Bg1Hj/FlZ8G+ELv1IWh/8nEZD+kKQfXm7OBmPrQtk -c6pGBm4sscwXS2olbegmZ8s2IGYGDInN2rL1IdAZ39yk58FHmTtyzDw9xSZzOvl0 -So8m9HMfHsnOZBYsYbwp9lEki4fSKQFqwDkMCDDOF531GUK78EtaezECAwEAAaCB -tDCBsQYJKoZIhvcNAQkOMYGjMIGgMIGdBgNVHREEgZUwgZKCD2VsYXN0aWNzZWFy -Y2gtMoIGa2liYW5hggxtZXRyaWNiZWF0LTGCDG1ldHJpY2JlYXQtMoIMbWV0cmlj -YmVhdC0zgg9lbGFzdGljc2VhcmNoLTGCD2VsYXN0aWNzZWFyY2gtMoIPZWxhc3Rp -Y3NlYXJjaC0zggRuaWZpgghjb2dzdGFja4IKKi5jb2dzdGFjazANBgkqhkiG9w0B -AQsFAAOCAgEATSnJuEMqTMlN9m7pOESgAXsSgyxlSzsi2VzluqH7LBdKATZED59T -tSCRZHwPZjU+/dmPgWPJqE0Z+0FDfxjeNDhEQz1uH7FPCTXQGH04uXTIoGnA4cr6 -8xOE9YrdblXL///7tALLKKwSmL1L66bhMvJTHUhnC98maTi+YY0YS3EQBubUmYQo -XCnO2uiRCKyrHm4xcfRwSgSmIncAZyeyFC4Cvd6l7XMHoXo77I9aSOh44ZkN67Xh -ozMDsWGncYaT3uaDz5AY/aZtQ8xadodMDx1h1ctRvOqZ2H8Snym68/oVxyo7KTxn -Q0Mp15B3TrWv7UxQlygOl2NnJkNhr9PKjCApDdXX1nfnIzkqAkxrUAy8rMoc3D1k -jzj6nc4pKfD1p8FL6HEshH7ooOzKc13xTLwNyr0fgxRqNr2KabAx70xRBF6rJgdg -AE8stPbX+kSDbXeo7GSltWlupv3UlrQeAVTjazZXcwjlGJ0eR8SPQBIcgJDU2ZpG -+6tMm0ZOxbpiuORU0gvQAcrPqnulTc2z1iBdYxUsDmujjxNzoIoHFSGjNlxwnkdn -CBEIGfYOp2T2xWpxPYTp+tq0WGEabpOAce6zSmk+RXSFl1hqVGmWJrx2U3b6zsMS -kzXYaQuGj17JPRjkCdyFdG2pP6RBtLt094vKwwi5F34LvTgU0S9MN0A= ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.key b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.key deleted file mode 100644 index b5bd73d21..000000000 --- a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -EzwpkOtH3jnssILZseBCQTrDLR/a ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.p12 b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.p12 deleted file mode 100644 index fb9d28e18..000000000 Binary files a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-2/elasticsearch-2.p12 and /dev/null differ diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/.DS_Store b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/.DS_Store deleted file mode 100644 index 8448e522c..000000000 Binary files a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/.DS_Store and /dev/null differ diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3-keystore.jks b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3-keystore.jks deleted file mode 100644 index aca7fc484..000000000 Binary files a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3-keystore.jks and /dev/null differ diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3-truststore.key b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3-truststore.key deleted file mode 100644 index 9607c33cd..000000000 Binary files a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3-truststore.key and /dev/null differ diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.crt b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.crt deleted file mode 100644 index 41ac8b996..000000000 --- a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.crt +++ /dev/null @@ -1,44 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIHuDCCBaCgAwIBAgIUL8Q8IkSbyOkamFbESVZaIDKbbWQwDQYJKoZIhvcNAQEL -BQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkGA1UEBwwCVUsx -ETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwI -Y29nc3RhY2swHhcNMjUwOTIyMDc0MjU2WhcNMjkwOTIxMDc0MjU2WjBrMQswCQYD -VQQGEwJVSzEPMA0GA1UECAwGTG9uZG9uMQswCQYDVQQHDAJVSzERMA8GA1UECgwI -Y29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMRgwFgYDVQQDDA9lbGFzdGljc2Vh -cmNoLTMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChl6YXMnCaUGu8 -OtJUR1VLiK6hjxH1jg5Rd0164euzSOM7FYXzBwf+UddMDUlNKcu1sI9lCQ6WKUXp -/l6Kfyy5AH+TzmKYUL+Ayz7b7fyFt+GCyJHPzJQ15aBJsshyMtydPnuWQ/dNrNia -5Ax6U5L4T0Bz40RjLqWhFopoj9vrXaG626tUjMeps2WC77oSryyfBkdZtnU3r5oc -ISvpsz4A3CuesyyVsLOVq2MVpVtNlqhFcBzJozv1U2cOOUTlxFRQ4rGgd/YUR2Pd -5Y+B3jQhbdiZQVeY8H66lOfgoUJk0nyNmTtfb7dPt0HUuqRsb1BFr8boYbMA1QKF -APwBmIYJeDTYpjMibXKuwojW9k8wAKkBDB7byl1ZwZb8J73+j4jTUQzsCIHHlX0e -PLr0MAcYuiYwrG25VdBacn+AU5zuEti/D355jBrLLZrl8qFJKUXZWID1Zgi6Fi/R -7hKmyGgprM47bZuFqNCmdatHAbDGE7f6flBHZLqQHeOCO6dWDITpoyJUQVZRB8H+ -ejnDkf4C0pxzDm07fxvGH2SRd0CHLYXihUDELcGm7EsYHB6EYzfzLgDBk9Y9dm3M -714+EVQxqz/86wShVS911HwVgZ6AiyF0CD9mdDVFz2IQYBRkjs5VLLPadt1vC0zS -wz9owBHC4W3e7N1ZrT328hSBgH2JjQIDAQABo4ICWTCCAlUwDAYDVR0TAQH/BAIw -ADAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC -MB0GA1UdDgQWBBRkGYUyaM/Kirb591m2iH1HxC9ikDAfBgNVHSMEGDAWgBSm1V7P -Kxv7a9va6cHaZEVs51lmUzCCAdQGA1UdEQSCAcswggHHggRuaWZpghJuaWZpLXJl -Z2lzdHJ5LWZsb3eCCm5pZmktbmdpbniCD2VsYXN0aWNzZWFyY2gtMYIPZWxhc3Rp -Y3NlYXJjaC0ygg9lbGFzdGljc2VhcmNoLTOCC29jci1zZXJ2aWNlghVvY3Itc2Vy -dmljZS10ZXh0LW9ubHmCFG1lZGNhdC10cmFpbmVyLW5naW54ghFtZWRjYXQtdHJh -aW5lci11aYIdbmxwLW1lZGNhdC1zZXJ2aWNlLXByb2R1Y3Rpb26CIm5scC1tZWRj -YXQtc2VydmljZS1wcm9kdWN0aW9uLWRlaWSCD2NvZ3N0YWNrLWtpYmFuYYIPY29n -c3RhY2stY29ob3J0ghhjb2dzdGFjay1lbGFzdGljc2VhcmNoLTGCGGNvZ3N0YWNr -LWVsYXN0aWNzZWFyY2gtMoIYY29nc3RhY2stZWxhc3RpY3NlYXJjaC0zgg1jb2dz -dGFjay1uaWZpghNjb2dzdGFjay1uaWZpLW5naW54ghtjb2dzdGFjay1uaWZpLXJl -Z2lzdHJ5LWZsb3eCFWNvZ3N0YWNrLWF1dGgtc2VydmljZYIIY29nc3RhY2uCCiou -Y29nc3RhY2swDQYJKoZIhvcNAQELBQADggIBAERTNgfZATHsHwkd8sA3RqXA24Zf -kip2DGdbbsuSonZ5Tzs7V4xW3M5MI25fW1ST3ve3HkQ+mcXbFvqyn0MA1kJHL4cq -uo1sbXsCVWtWhH0UzhdajcWhyPcU4BnkzZVPpqNtA1klGqe6eIX/mKjn4V5Ledt9 -4clPf7dw1bp9yfr7RY7VBjwzCoAxf6sE5rjlmfLQs7NWOtWuy8tFcJ5i/lR3NEEZ -7Ftoj3RJww57LhlWXedvJzKM9Py0VKZ3bxJiXlm6C+4He2EajCdxrdOA9vp96+O+ -lmJdWYkLHfdfBu6vTpvAWutC05ITsGrKKzJh7XhyuQe3TvuDvOdEJogUcnY8qTwW -Xw2n+uZ27fZN35h7CA/uV4r1M0ZOzyfzJ6rRYHmg2S5sw3DFmSBBVZVbx98Hleph -I/FDJcPUv/4Ak+zpPLrUH5btjtYMD2g4KapNN7AmY8FyEcmyotbQfUfyLI1MhnJK -0FjPGqhnsSG7OOarE9GAlyD87XnT6S5CEfKhyruOe5FMIl5qI5OCv9neftMOoEy2 -ltpuRaSn8MAJRds0qxjFbLOvaIoQHYMetNzIl8cmD8Q/VzXCUm9kHq6EnYv3tEkA -w9qWtudBiLNcBMyMxXCuQ1fOUCFzIRipXqOAjj4SOqGDmB8EQBlbv/1cFAAnIV8U -xPZUZw4lBGEJ3ziq ------END CERTIFICATE----- diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.csr b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.csr deleted file mode 100644 index 861896f3e..000000000 --- a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.csr +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIFZTCCA00CAQAwazELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkG -A1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazEY -MBYGA1UEAwwPZWxhc3RpY3NlYXJjaC0zMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAoZemFzJwmlBrvDrSVEdVS4iuoY8R9Y4OUXdNeuHrs0jjOxWF8wcH -/lHXTA1JTSnLtbCPZQkOlilF6f5ein8suQB/k85imFC/gMs+2+38hbfhgsiRz8yU -NeWgSbLIcjLcnT57lkP3TazYmuQMelOS+E9Ac+NEYy6loRaKaI/b612huturVIzH -qbNlgu+6Eq8snwZHWbZ1N6+aHCEr6bM+ANwrnrMslbCzlatjFaVbTZaoRXAcyaM7 -9VNnDjlE5cRUUOKxoHf2FEdj3eWPgd40IW3YmUFXmPB+upTn4KFCZNJ8jZk7X2+3 -T7dB1LqkbG9QRa/G6GGzANUChQD8AZiGCXg02KYzIm1yrsKI1vZPMACpAQwe28pd -WcGW/Ce9/o+I01EM7AiBx5V9Hjy69DAHGLomMKxtuVXQWnJ/gFOc7hLYvw9+eYwa -yy2a5fKhSSlF2ViA9WYIuhYv0e4SpshoKazOO22bhajQpnWrRwGwxhO3+n5QR2S6 -kB3jgjunVgyE6aMiVEFWUQfB/no5w5H+AtKccw5tO38bxh9kkXdAhy2F4oVAxC3B -puxLGBwehGM38y4AwZPWPXZtzO9ePhFUMas//OsEoVUvddR8FYGegIshdAg/ZnQ1 -Rc9iEGAUZI7OVSyz2nbdbwtM0sM/aMARwuFt3uzdWa099vIUgYB9iY0CAwEAAaCB -tDCBsQYJKoZIhvcNAQkOMYGjMIGgMIGdBgNVHREEgZUwgZKCD2VsYXN0aWNzZWFy -Y2gtM4IGa2liYW5hggxtZXRyaWNiZWF0LTGCDG1ldHJpY2JlYXQtMoIMbWV0cmlj -YmVhdC0zgg9lbGFzdGljc2VhcmNoLTGCD2VsYXN0aWNzZWFyY2gtMoIPZWxhc3Rp -Y3NlYXJjaC0zggRuaWZpgghjb2dzdGFja4IKKi5jb2dzdGFjazANBgkqhkiG9w0B -AQsFAAOCAgEANI6JrbmRclgtqPMy3e4w4lJjMoU+Gvdhny0IFkI7V8EK0Uv3hn71 -807UtZOU1n+BFzcKjeZ/GH2JeXhfvHVnyoNJBPtUqJoo2UgPlI6easHlAUUcAoWB -RikPjrn7fGR4HbBt8qrj63Dghb0Mil4C5ZlANP1DpbvRJgWznFQ0qf9YVuKvqjZC -5X5JZODEEO/CwpzAQCOrXzPsZ9JXW27E2ER9IPqZVOxdXBhk8RN2ub5QDowIbRi9 -cifjPNHYl8KB2Z9X8ISGY7Jh8eLn4eB7d/8sVatJ37ICzgOOpOqk/KmUrUifmqno -8KHZtDelCYgVAyak03WGkUjIfdV47R1dKtyXYPJe5H7ebhHZkwUF0oPHqKcs5hn5 -rozcmXILX6GdyVWVFtVV+CujUeEf42iS0PI1rJBoTfHH8HOKzYFTpyvBmbYMNncW -4mrmzI4Nf/TAzT9P3lgQuaMBFSyCWMM6Hv9Lc3Cjf8QGuurzFTyINaS68GvaupKY -HF3sCj9egSOdpkRLD41ZqA78GTlnfhNwC2pSQNgm1cxZo116BDMwYfyTMqa9FpaW -jdLgWM7lsX6XFPaNrnz46PM0tOp/rBrnbhkjp9q5Rcq703/iMgpwzZJzSigx/l59 -PRR+dVrtpR5DhinJ7/1Jp+JfQi8SG3Yi3SXhCaXlrHi1iceH0R5bPac= ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.key b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.key deleted file mode 100644 index 923488792..000000000 --- a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -YvdrPDgETLDbj95WK/5EkA7Jvl/MwWY= ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.p12 b/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.p12 deleted file mode 100644 index 096ec57bc..000000000 Binary files a/security/certificates/elastic/opensearch/elasticsearch/elasticsearch-3/elasticsearch-3.p12 and /dev/null differ diff --git a/security/certificates/elastic/opensearch/es_kibana_client.csr b/security/certificates/elastic/opensearch/es_kibana_client.csr deleted file mode 100644 index 2d7f90d7d..000000000 --- a/security/certificates/elastic/opensearch/es_kibana_client.csr +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIEpzCCAo8CAQAwYjELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkG -A1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazEP -MA0GA1UEAwwGY2xpZW50MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA -2koijlf3S8Zecom/NuoRO16NIq3ZzE6dEiGc3JKNB2bDD20+jEp2oPl9ZeNmLTRn -y0B+lidOYw+c7mgo/4cwH4X9aV8l1sIsfgY1Zr1kiNz8Zl5/ukWbrWdcyxXw5ujJ -M9jFB17rh23JJHXuqAFSGQsR5oy4R75qQs5OYObA7ASaSiK3m/F16qdHrD6Rh/DU -4rJ+g72dCoNAKS/WZDwrD9wtVwffYnCCJThVFXvGka4yUwhH4yl6NdaKSkyicOkZ -dZ5c5lZQMrGV38MR89sI3OUTjnlCXpUwE3WezQY2I+V0ckfWu1gAK3dSyfpFCEU5 -oP/SZiWGc/z7nsfDFpPbIzvET2naejPsjpwegnEhXqOL6c7z7CbKGT7aL4V8Jrlw -fSLLhj3V9ZhdrVH86gEhVB8HpjBmNdD/T5MQVOffItduk0aQYkVoXHE3vmSI8JW2 -T3837067ymEab7dsD2WMRN1KSgTvIi52nzMdYMq9eyR9Ax/kcJt5YbI03KR5AIh1 -/e3CSJn8xUYw23Jo8it5lIFydSxa0FSk7D5kUB4EKQO1BUzKz5tD7/CP1CBQ2nkt -/A/QG7J1Z9cRMFryrowNUxX2zFsvjy/fP5KJDChC3MOPWJvYS6q/8W9W8qG7bP9W -LoPbWXG6kSTxE0jTDsW0AzKD2uQOGqaXozZ6SHcvN4cCAwEAAaAAMA0GCSqGSIb3 -DQEBCwUAA4ICAQChN9MgLakypJbRCD5D2zXslBwYLo5qIAakiNFM0bO87SXgRoeU -f9ZHnFRwbE/PZaPV8ac0uaK8BPa2R6HGTIttnJPlBqVl6gMUAwvMPZaTsamyxcrd -JN4/nALH9pV6LLOi+w0VEGBC5yyYSKhlndQ5kAy40pYFEU1OBH6M0OACOS5mg7ht -hnuH0v04s5AHDXSCQAoyFbFla9s5dSvuAIVCiwrkGg+Grbsg+p4Cuh9fzV3b1KuB -dDM7jIYaa57IPi7AjNSV5I6A4K4lO1jFgP8QfeKTeyWjNViUE0S3C88FSUeHPqmv -8VFZveLfgZR8ngjtAqf9a+iwZIFWOAKTL4rIbwl+cbNNa0mqi5LCoLWJVOlwM13z -jRfjc93/RjhzKFYXtq06Qnl7s/k7/YvEdCcODD6HXCmB0N+Ai7oG3PRps8xlXjZo -NmCAdFEDcK9KFAdIyqtyPxr7NRSynVh7JEL0DDllpLmTsaWtOntg/Ayz4zzmJtuI -lESGq9ZR6iIan2LGxeXl4Sv0HiJR7DGliIqVAXSSen7El8j2YbqE4TkVyQvJVEsE -EZ3WPfL2s5Ntw3iElgPnVUQAaupMD+PrNNDKLjhE6lFGelfz7ySr6fqkZr0dmJuk -6E9CxxY7QLLx/GSYgZKEteeY0qlYCivT93AbvzX1RtV1eP7y3CAdsB+aUg== ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/elastic/opensearch/es_kibana_client.key b/security/certificates/elastic/opensearch/es_kibana_client.key deleted file mode 100644 index 45ef74ab9..000000000 --- a/security/certificates/elastic/opensearch/es_kibana_client.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -oTmq8HVmXzW/M9OYd0o1aPivyV8LHqo= ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/es_kibana_client.p12 b/security/certificates/elastic/opensearch/es_kibana_client.p12 deleted file mode 100644 index 45ef74ab9..000000000 --- a/security/certificates/elastic/opensearch/es_kibana_client.p12 +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -oTmq8HVmXzW/M9OYd0o1aPivyV8LHqo= ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/es_kibana_client.pem b/security/certificates/elastic/opensearch/es_kibana_client.pem deleted file mode 100644 index 07dd555bc..000000000 --- a/security/certificates/elastic/opensearch/es_kibana_client.pem +++ /dev/null @@ -1,44 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIHrzCCBZegAwIBAgIUL8Q8IkSbyOkamFbESVZaIDKbbWUwDQYJKoZIhvcNAQEL -BQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkGA1UEBwwCVUsx -ETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwI -Y29nc3RhY2swHhcNMjUwOTIyMDc0MzA0WhcNMjkwOTIxMDc0MzA0WjBiMQswCQYD -VQQGEwJVSzEPMA0GA1UECAwGTG9uZG9uMQswCQYDVQQHDAJVSzERMA8GA1UECgwI -Y29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMQ8wDQYDVQQDDAZjbGllbnQwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDaSiKOV/dLxl5yib826hE7Xo0i -rdnMTp0SIZzcko0HZsMPbT6MSnag+X1l42YtNGfLQH6WJ05jD5zuaCj/hzAfhf1p -XyXWwix+BjVmvWSI3PxmXn+6RZutZ1zLFfDm6Mkz2MUHXuuHbckkde6oAVIZCxHm -jLhHvmpCzk5g5sDsBJpKIreb8XXqp0esPpGH8NTisn6DvZ0Kg0ApL9ZkPCsP3C1X -B99icIIlOFUVe8aRrjJTCEfjKXo11opKTKJw6Rl1nlzmVlAysZXfwxHz2wjc5ROO -eUJelTATdZ7NBjYj5XRyR9a7WAArd1LJ+kUIRTmg/9JmJYZz/Puex8MWk9sjO8RP -adp6M+yOnB6CcSFeo4vpzvPsJsoZPtovhXwmuXB9IsuGPdX1mF2tUfzqASFUHwem -MGY10P9PkxBU598i126TRpBiRWhccTe+ZIjwlbZPfzfvTrvKYRpvt2wPZYxE3UpK -BO8iLnafMx1gyr17JH0DH+Rwm3lhsjTcpHkAiHX97cJImfzFRjDbcmjyK3mUgXJ1 -LFrQVKTsPmRQHgQpA7UFTMrPm0Pv8I/UIFDaeS38D9AbsnVn1xEwWvKujA1TFfbM -Wy+PL98/kokMKELcw49Ym9hLqr/xb1byobts/1Yug9tZcbqRJPETSNMOxbQDMoPa -5A4appejNnpIdy83hwIDAQABo4ICWTCCAlUwDAYDVR0TAQH/BAIwADAOBgNVHQ8B -Af8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQW -BBTPQjhg/9XkgyyvL/aH46TvRdBajDAfBgNVHSMEGDAWgBSm1V7PKxv7a9va6cHa -ZEVs51lmUzCCAdQGA1UdEQSCAcswggHHggRuaWZpghJuaWZpLXJlZ2lzdHJ5LWZs -b3eCCm5pZmktbmdpbniCD2VsYXN0aWNzZWFyY2gtMYIPZWxhc3RpY3NlYXJjaC0y -gg9lbGFzdGljc2VhcmNoLTOCC29jci1zZXJ2aWNlghVvY3Itc2VydmljZS10ZXh0 -LW9ubHmCFG1lZGNhdC10cmFpbmVyLW5naW54ghFtZWRjYXQtdHJhaW5lci11aYId -bmxwLW1lZGNhdC1zZXJ2aWNlLXByb2R1Y3Rpb26CIm5scC1tZWRjYXQtc2Vydmlj -ZS1wcm9kdWN0aW9uLWRlaWSCD2NvZ3N0YWNrLWtpYmFuYYIPY29nc3RhY2stY29o -b3J0ghhjb2dzdGFjay1lbGFzdGljc2VhcmNoLTGCGGNvZ3N0YWNrLWVsYXN0aWNz -ZWFyY2gtMoIYY29nc3RhY2stZWxhc3RpY3NlYXJjaC0zgg1jb2dzdGFjay1uaWZp -ghNjb2dzdGFjay1uaWZpLW5naW54ghtjb2dzdGFjay1uaWZpLXJlZ2lzdHJ5LWZs -b3eCFWNvZ3N0YWNrLWF1dGgtc2VydmljZYIIY29nc3RhY2uCCiouY29nc3RhY2sw -DQYJKoZIhvcNAQELBQADggIBADhNB4E0uA8h+xEC5niqNucwcvDa1qWwx5yTpLO7 -B6UnX9XYqSQkycIVs1b+5yXAepTPSl3l4tGA4qrzOeDQ9Ay8O671jdK4EmmWH3Ut -Z0QRaoGF4oPfmY/jPteZJovSCkxbRv1LgcUI0s2Vzvr4wBEwN4S3U0+Qo2gZ4bYf -EAem63wZf8h602zGYLGzmO1/fafiUHZljjDVzgjLkj7MxuCAiP9nxHgTz3ml03Ug -cRYhx+BeoOtXvtUFlIU2uqsI2qke40IXHF4LeVPOr8soVVz7Q7B7xTtS2IOHzCEK -fsoTVGpPngTo3Jp6sppxGjiyRoqd32wFZLHwfph0+sxD2+oEbQSUq6Kkv6IPgbPe -gXVWyN/cIcI0ur9G0fDJvh+qrgRPhw/Fe2x2lDUMgNAwx6Dg12PJurR1sc0+FQYD -u5DempSDAKwTeFKIil/Ml6WeWJz/I7oPv+wd6Pe/dV1NgbspqBm0kJX2Dc/zmckr -PI8EYsZHCP6YB72NjgPNPHwq93FP7d1DKh+dlCcRVtIdrvb7QiqkjcYPmOnyeE4P -7bKYEK5UCc/WRi60hrYksld1jm+hqUlUr2hlOn4CvGXZOT6myeiBDJuU7Kekdzv9 -em2A9ninXwto86/4Q4bNVSq6J+f9nmC5PxeEXY8aibMBwuRfm6/JV6sjJt6UAbZC -KGPg ------END CERTIFICATE----- diff --git a/security/certificates/elastic/opensearch/root-ca.key b/security/certificates/elastic/opensearch/root-ca.key deleted file mode 100644 index 3cfab61f3..000000000 --- a/security/certificates/elastic/opensearch/root-ca.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -Z6gbkBgcdD3r5onaZFgwG+bzQG1EANU= ------END PRIVATE KEY----- diff --git a/security/certificates/elastic/opensearch/root-ca.p12 b/security/certificates/elastic/opensearch/root-ca.p12 deleted file mode 100644 index 02bdb2ff5..000000000 Binary files a/security/certificates/elastic/opensearch/root-ca.p12 and /dev/null differ diff --git a/security/certificates/elastic/opensearch/root-ca.pem b/security/certificates/elastic/opensearch/root-ca.pem deleted file mode 100644 index ca87d21ad..000000000 --- a/security/certificates/elastic/opensearch/root-ca.pem +++ /dev/null @@ -1,34 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIUKjOOs3bZuwrXfvr/et7D3qA28U4wDQYJKoZIhvcNAQEL -BQAwYDELMAkGA1UEBhMCVUsxCzAJBgNVBAgMAlVLMQswCQYDVQQHDAJVSzERMA8G -A1UECgwIY29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMREwDwYDVQQDDAhjb2dz -dGFjazAeFw0yNTA2MDUyMTUzNTdaFw0yOTA2MDQyMTUzNTdaMGAxCzAJBgNVBAYT -AlVLMQswCQYDVQQIDAJVSzELMAkGA1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNr -MREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwIY29nc3RhY2swggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCeBNNigXZbVnTqyY2DDiCRfg/avAEGFl3X -RWzzCaj5wETecom7cVtuXOZGv5qfVw4dEbZ6Zl5EMPGYDkhqkoe7X087Pxor4Ltf -VdMDoareG0/G1ItEG6p6g2OFAiuMbfF+wzjJF2LMQdHxvRukMD59tubaPQbsMti1 -eY0h2DKTIYBG3iGtWSFHUsGKXr4moW2wY3cgLfo+tfjTVfOFf5csmi34d/VLFlUB -hQeiZdpx60E9wz5YDn5Gx6sBRwjQgxOxBuSGHukzr/hIbyz5m6mkD7+BteUlNhjg -PLhGmXm+41WbvksHoCMIMqnqtrGArDmu2TPTBSWgXclDDLHPlxaqctIDHWEJulYr -RtNar0Tzd6+1NiKEbpfsvJu+GmQT0A9isCrw2sHqPINaQ07iFXZYRZvbqSbHdorc -e7rcfOlOdpG7/xYqfNLipJf/95uk5xPAaK7E85apd8JUBUGiNRhE9VxeaNoMq8ag -7A5DGs6Od0hrl9oIWbxNMgPH3Af9PLCsjcj1MlzRA5wYZV3sZJxLTdW/4Q/FQSEH -tv2VdxX2tV9zIkj2McqnILmFQ17XBEFSP0/d4SXmZHMZrk6utT0u0SzJaFmqpjfo -GyZvb/VgUkvztNsi7vXHfvFMI9zQF1BaRVQ9ZlAeZI4S0XbcmqEZUY928fFtTWyg -ZC0j2JSgCwIDAQABo4GiMIGfMB0GA1UdDgQWBBTA46ItFLAFmhe6jYOYBjTsvxVJ -TjAfBgNVHSMEGDAWgBTA46ItFLAFmhe6jYOYBjTsvxVJTjAPBgNVHRMBAf8EBTAD -AQH/MEwGA1UdEQRFMEOCBG5pZmmCD2VsYXN0aWNzZWFyY2gtMYIPZWxhc3RpY3Nl -YXJjaC0ygg9lbGFzdGljc2VhcmNoLTOCCGNvZ3N0YWNrMA0GCSqGSIb3DQEBCwUA -A4ICAQBPoP6SXL2b5gMcJgRg8klQG0V/uxYaVEe58l/MA2GXII/RQYMZvCphkc7V -FMAz+lLS6iSvXodeyIIhQXkj3YHcPpRUAIQRYzI/WZxYjwwUSf5LmX8Sk1RFfhHw -62Y00CjI5bmVROufp94Rw3wRkfXQDn1LSORwNw8zqArZLFvDAnmOpfDyRpcSPSoW -y9agmGxArNOWC+zMFKszW1IAEDaig0EfSEeLjL574HL5H7s4GnD7T46VPwf1vuVP -73sm6BwiqKbm1vAr4foSod9ySZK1s9EbNq4o8LPFXA0YRpOno9+4cOkDDHq4HEBR -XeHa2G6fy5KugotAAJX1lFTJNrHxTWELqNENCDuSO6jkZ4tdRQ32wK2XofYvFIHk -m6u04rKtey/+GkevxuXZfV/FoBVeMQq0jI6CWLTZYYov+UrXWhu4pXo4HRUg3rD7 -+xp2Xx8CB091gNMSmzvUm4Cr85BZlYulyJR/+v/NKxVSrtSfKZhXHpuzd5ySbL1S -ElB8VO+5mCRH6br/Pf7rTMxCuhyJ7NGHjSnnPvDM0tx2CKTjPyn9x37y9/54ChEV -0/Xe7Cn4wE5I60IxbzutTzE7u+7xxeTAZG6lOKo73cb1cMW7LwU2tDPc2BtISlIm -Z2akRDgwyR6mTF4jmOAluSntlMUI5B9kyOamt1GRECXo52EvIA== ------END CERTIFICATE----- diff --git a/security/certificates/nifi/nifi-keystore.jks b/security/certificates/nifi/nifi-keystore.jks deleted file mode 100644 index b059a7f4c..000000000 Binary files a/security/certificates/nifi/nifi-keystore.jks and /dev/null differ diff --git a/security/certificates/nifi/nifi-truststore.jks b/security/certificates/nifi/nifi-truststore.jks deleted file mode 100644 index 872308ccf..000000000 Binary files a/security/certificates/nifi/nifi-truststore.jks and /dev/null differ diff --git a/security/certificates/nifi/nifi.crt b/security/certificates/nifi/nifi.crt deleted file mode 100644 index 79731aeea..000000000 Binary files a/security/certificates/nifi/nifi.crt and /dev/null differ diff --git a/security/certificates/nifi/nifi.csr b/security/certificates/nifi/nifi.csr deleted file mode 100644 index d8ea60ddc..000000000 --- a/security/certificates/nifi/nifi.csr +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIEqTCCApECAQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkG -A1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazER -MA8GA1UEAwwIY29nc3RhY2swggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQC12QJ+hjgkME4WmjKVFFTtZMPxultiWx6Aw/QZbI1SxmiyWdqtFftR0h4BFekZ -o7ahdOQAXHdLtHhPyhJ2tjkrhRmCPIBwFNLQZtInPxjpLuTVQe3UfLymSulrUYRQ -3xcIPuswJuF6bmhJFn43sWv7DSIbwDlGDD8EWP578qFAknfO9/ykhxYaACjvGGHl -RLLxYDqnC4PH7xQ079Yo48NVz3Xx8AVgktnrSTCraZxA+JXLA034+0HwsSJdXwnJ -bnWdGb6RIKBCn7t+cqbOJd5FDLMh09OBCxE/AnYG91bCT7DrYMIAUOWVo1UbKHql -UB2WGnWvshFNccJ4OAX26MHQ1ufevbYmL9zT8LzQjn2i5WDvCeOT1nEw9AkEcOGs -2qbxVShhDznuTJR7BYx/7NUE9roQp7V71/4UUht9pDfNd1QyFpR/4jntc58Q1JtY -gzHqSdXOmNObZF9gLNd1GKxwQ1Z3yooMY+F11mlUtumUbr1vpu4RLOjrTiKVzBha -Anll1C0u1qMSdywvf7GK8P9RrBpJCMyDFP9Rk2LccX4XDuFDhaP/89SFUfrGasKL -sWiRsmaHovNOjQjAAWdCg2mA7/daX8hiZHwqB9lEBiUni+7hfCUpmpeLFkmXdwkH -TLvNXlWtvZociX0MaLXs47qRxIs94WlxpOAqQHMzSWyoCwIDAQABoAAwDQYJKoZI -hvcNAQELBQADggIBAEAyySOSGIM9OrDZS6Tyye2bTFHRyOileiktk2Q0Irn3PxbJ -YZJc4tNKIRr70FExhLyWW3zXDzgVXsSFK/maki6xklgC586uImiq5eOwohJoSYtO -ksV/CUgm9eqj3tlQOIc9DLsHJ2hXlEzxnPv7Nl5Pr6h830Rp5i7MGKZSJEY98B5D -l/L/WWYsmPYtZhOJ9YTB3GdAzUQV7XqQJaSqOH1tb7i3rwuy6VP4Nh4XacNvbYA2 -Zt4ydZe3D1hcH2f5WdK7mBWP2mm+2NV05ywHgBBzCL1VZaD6b4NdvUJ6Ci/NbP85 -/LGW82coSZagWuwQnWXKqlr63RCyrfbA4LqF5aqKGDOkQVshdupSYhYXGk7WPU+M -ytcqLys+KZqcVSKXKCoJniJVznkJlj0zLp6/sHBReN6xUveNojpnDtAEK2mC/9Uu -WvcyPxI3rJ6nMwStZMBgtE9yEMFSSwOceAgD0T+ScPZNOtLuM0z4aHKP8XIMLnmV -I4g6rUmb06yZtP8maxXqDrwjxY8z0JjmzkTpIVGd+/YwU9TL3OfdTbUxDsks1S05 -BkGxehQGRBZVVt8XWA0M8+uEhfDAQxhufnA5NyFN1RCEENooaF7WbSRZZiapbhU9 -1IMxbGCzhHDmlOrJHJXJbP8IKuRAikvGT8UUEJSc4CxkdIxMkE1hjYGt3Jk0 ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/nifi/nifi.key b/security/certificates/nifi/nifi.key deleted file mode 100644 index 53b451058..000000000 --- a/security/certificates/nifi/nifi.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -cBzkM2wmX4CT709DvH5BivqKANtQ ------END PRIVATE KEY----- diff --git a/security/certificates/nifi/nifi.p12 b/security/certificates/nifi/nifi.p12 deleted file mode 100644 index fa18568bc..000000000 Binary files a/security/certificates/nifi/nifi.p12 and /dev/null differ diff --git a/security/certificates/nifi/nifi.pem b/security/certificates/nifi/nifi.pem deleted file mode 100644 index 4e998d56a..000000000 --- a/security/certificates/nifi/nifi.pem +++ /dev/null @@ -1,45 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIH5TCCBc2gAwIBAgIUL8Q8IkSbyOkamFbESVZaIDKbbWowDQYJKoZIhvcNAQEL -BQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkGA1UEBwwCVUsx -ETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwI -Y29nc3RhY2swHhcNMjUwOTIzMTU1MDQwWhcNMjkwOTIyMTU1MDQwWjBkMQswCQYD -VQQGEwJVSzEPMA0GA1UECAwGTG9uZG9uMQswCQYDVQQHDAJVSzERMA8GA1UECgwI -Y29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMREwDwYDVQQDDAhjb2dzdGFjazCC -AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALXZAn6GOCQwThaaMpUUVO1k -w/G6W2JbHoDD9BlsjVLGaLJZ2q0V+1HSHgEV6RmjtqF05ABcd0u0eE/KEna2OSuF -GYI8gHAU0tBm0ic/GOku5NVB7dR8vKZK6WtRhFDfFwg+6zAm4XpuaEkWfjexa/sN -IhvAOUYMPwRY/nvyoUCSd873/KSHFhoAKO8YYeVEsvFgOqcLg8fvFDTv1ijjw1XP -dfHwBWCS2etJMKtpnED4lcsDTfj7QfCxIl1fCcludZ0ZvpEgoEKfu35yps4l3kUM -syHT04ELET8Cdgb3VsJPsOtgwgBQ5ZWjVRsoeqVQHZYada+yEU1xwng4BfbowdDW -5969tiYv3NPwvNCOfaLlYO8J45PWcTD0CQRw4azapvFVKGEPOe5MlHsFjH/s1QT2 -uhCntXvX/hRSG32kN813VDIWlH/iOe1znxDUm1iDMepJ1c6Y05tkX2As13UYrHBD -VnfKigxj4XXWaVS26ZRuvW+m7hEs6OtOIpXMGFoCeWXULS7WoxJ3LC9/sYrw/1Gs -GkkIzIMU/1GTYtxxfhcO4UOFo//z1IVR+sZqwouxaJGyZoei806NCMABZ0KDaYDv -91pfyGJkfCoH2UQGJSeL7uF8JSmal4sWSZd3CQdMu81eVa29mhyJfQxotezjupHE -iz3haXGk4CpAczNJbKgLAgMBAAGjggKNMIICiTAMBgNVHRMBAf8EAjAAMA4GA1Ud -DwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwggIIBgNV -HREEggH/MIIB+4IEbmlmaYISbmlmaS1yZWdpc3RyeS1mbG93gg1uaWZpLXJlZ2lz -dHJ5ggpuaWZpLW5naW54gg9lbGFzdGljc2VhcmNoLTGCD2VsYXN0aWNzZWFyY2gt -MoIPZWxhc3RpY3NlYXJjaC0zggtvY3Itc2VydmljZYIVb2NyLXNlcnZpY2UtdGV4 -dC1vbmx5ghRtZWRjYXQtdHJhaW5lci1uZ2lueIIRbWVkY2F0LXRyYWluZXItdWmC -HW5scC1tZWRjYXQtc2VydmljZS1wcm9kdWN0aW9ugiJubHAtbWVkY2F0LXNlcnZp -Y2UtcHJvZHVjdGlvbi1kZWlkgg9jb2dzdGFjay1raWJhbmGCD2NvZ3N0YWNrLWNv -aG9ydIIYY29nc3RhY2stZWxhc3RpY3NlYXJjaC0xghhjb2dzdGFjay1lbGFzdGlj -c2VhcmNoLTKCGGNvZ3N0YWNrLWVsYXN0aWNzZWFyY2gtM4INY29nc3RhY2stbmlm -aYITY29nc3RhY2stbmlmaS1uZ2lueIIbY29nc3RhY2stbmlmaS1yZWdpc3RyeS1m -bG93ghVjb2dzdGFjay1hdXRoLXNlcnZpY2WCCGNvZ3N0YWNrggoqLmNvZ3N0YWNr -gglsb2NhbGhvc3SHBH8AAAGBEmFkbWluQGNvZ3N0YWNrLm5ldDAdBgNVHQ4EFgQU -w4s/eH4/MgL0QFbHYVYa31bkPR0wHwYDVR0jBBgwFoAUE0cnEJt3wEkLed508BIF -InehbX4wDQYJKoZIhvcNAQELBQADggIBACP0hymKsuSiIKXWPacMhehc+Pr2nUes -ilzayYf7w2BW4j9NwUmrJxjh8XgkUvFzwi+oQPo7SVGcaPsVfMa1hdKn9+XP0mH5 -y5to1+u2p2dTYEViozHJXpDF+HG9AhX8/4vIWl66bofSQWWDgMGfd8gSmdZNbHOw -hIY1LcpNd2XqG2JmF1osZi8hnndhApFk53QCwsL3kSccD/vjDwfRsLs2KNk42k3P -gZIy/e5VZd6UBENJUVOxwAQ/Jp8luxKJV3Q0zy7UbREcdC7w7/lzeQONpgsRhWMb -JjQIBSLkYtQ210RZDJwm79BgwPzHrsFgcB20QwG0LUNYnGdAEZnaqL6SqBPC5/Zn -uisNAQWffyhOjxdkh1M5SlbEZXPpkcelxVBxytKr4DHp8knf9OQ0bPMFkGIcSvmK -dGdoNtC5ULMWekrcbHYGNwOOiL/h1z7Baj2PboldWuWHa8IIOY56xOrqZs003HvS -zp5t38OD8UHb+xRhBZ+otS/Q0NWv0UK+ih/KHn0BBMc0lSW019H3RtWTMqsPKJQa -SkYVkC3hqdlYZEypbR+wnkHkwfFHKbgs5abMZ4RL0A8IE8AbkVV7Kklm/pmgEie6 -nVwoaKv3sS9LY7Y1IqgK0+lK+Qck/8wDAdbHAsNhf9vLlq67jWf7UySwa5E+abnO -wstUgZZ/eHZd ------END CERTIFICATE----- diff --git a/security/certificates/root/.DS_Store b/security/certificates/root/.DS_Store deleted file mode 100644 index 5008ddfcf..000000000 Binary files a/security/certificates/root/.DS_Store and /dev/null differ diff --git a/security/certificates/root/root-ca-keystore.jks b/security/certificates/root/root-ca-keystore.jks deleted file mode 100644 index 1fc307dcf..000000000 Binary files a/security/certificates/root/root-ca-keystore.jks and /dev/null differ diff --git a/security/certificates/root/root-ca-truststore.jks b/security/certificates/root/root-ca-truststore.jks deleted file mode 100644 index 8bc587c39..000000000 Binary files a/security/certificates/root/root-ca-truststore.jks and /dev/null differ diff --git a/security/certificates/root/root-ca.crt b/security/certificates/root/root-ca.crt deleted file mode 100644 index d014e88a8..000000000 Binary files a/security/certificates/root/root-ca.crt and /dev/null differ diff --git a/security/certificates/root/root-ca.csr b/security/certificates/root/root-ca.csr deleted file mode 100644 index 0c78b3488..000000000 --- a/security/certificates/root/root-ca.csr +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIEqTCCApECAQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkG -A1UEBwwCVUsxETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazER -MA8GA1UEAwwIY29nc3RhY2swggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQC3j8ws2K77HT1KWJA5DKpnHLl0K2TyrHynI2kv8HsPcY+klTH6UBlEE45kjRQu -3elDBjG0oJsD1xTsalVxbsNUSAm+Y6bz8dwyRR/r/U8euio8JlHtMpNvvsJtLrr0 -kEP7Ll2JW3Fr7tgJHqAH08jYQdFYR1BPQa/uLAcYry1F5sN8MoTvZ0YnhIY1G9+G -MAV9USUsgvGoce/kXBroOSf/MEEUivncevBXMC5ybb32fusSfrSh+nScgxaCKV6l -15LjDsHhL2XpmGbsUyHHjdNLX6qaDR+uTrUO1l8CEY3D5khcFfkXR9SSdNgdq2Yg -I6hq3CaFQgU55Ax3dzYwXgwjSjikchlD0EIeJlzcBlxcCTp6OLTCLd0ltDCCf5iv -p36uHyJ7kedoHbLtz74OIMlkrHJoLtz9MP4omUqjyH1+Wt9or94xzgrUASHv3IYJ -1hag+/EYkasfJkgXdZP5uMwZp3GflznUJxEYDtMsjZra6H6w87YWJ4P+HiMLardb -709rkPi79mdihQ179jgDAmd91yckgrq9KI/fNCU+Ho2T20ZoUBHnzD2PLQRzWXmn -A6xyelGnzWP0EgOxc1A8iPhWyKPAJHfN7LDUlw7o0QH+o1pr4YRtIeSuN2hrsVwC -7lLLVDgxA00BFtj4QztSNygekZEB44B16hET8tm6BP92vwIDAQABoAAwDQYJKoZI -hvcNAQELBQADggIBABQFt0e2uyf9kaLF/IJ0GpgP6VjOdkfyiVlYa8kDP1dmbkfb -LSSv5OsM9Tfm4739FjscF1ogTB8jIdITXn/vaCw5aS4tr2zo3PVC1Mnbb2cG3Umy -QkScQf6DW5+TnHHDH0irW15jDOiO+p5Gf6khS6c88/OmzcczRkF/BerH7iP4d8vn -Y7iIRoxEMwc5eQQ6NHsu4FA2USs2PDIbEw5rajUDgcL0ktBExoyF4HEmx4hh9U1d -r4PU3achNysBpsvIq8yxVS9t8pJkDlTHbI+x/eFhiQ3OTeWTwQHmah3+IiJbWwbU -qK9OfodtYNw2F7LJh/Xz4fmAPZPQhA7sueDO/8ylfB42USW/zP2r3gO7wT7u5k13 -shNqZ2pZk2SFzM0GwZUONMBa0w5DPUu+ISISBvyqtWUh1VQYmkNTKyI8B8yaFIfX -dvyC3hajaOnuLYipcrueZXyMrfRAk752l8VMFsb+y3a9zOIrOUSPEf7QTDeMNycm -fyPmmuVE66Ji/wo+r9Td30Pc+k30unwNt2vfP1DsWG2+tLpRbof2C2HxQHxbDEy6 -0Cf43QayLh8OwW6YUenuqRXMtj3IVYdauPsD6vCf06V4LAfkFfsLkmrsgiZ1z5/h -62JOlsujvf77b6ksfDgkRXXbsT8fv4Xm0yd2mn3H2NwIGhSnl305+l2jlrIP ------END CERTIFICATE REQUEST----- diff --git a/security/certificates/root/root-ca.key b/security/certificates/root/root-ca.key deleted file mode 100644 index 9d94edc43..000000000 --- a/security/certificates/root/root-ca.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -TKKZAUXRqte/BatPA8QgEPzPdsFKTQ== ------END PRIVATE KEY----- diff --git a/security/certificates/root/root-ca.p12 b/security/certificates/root/root-ca.p12 deleted file mode 100644 index 8b535bb55..000000000 Binary files a/security/certificates/root/root-ca.p12 and /dev/null differ diff --git a/security/certificates/root/root-ca.pem b/security/certificates/root/root-ca.pem deleted file mode 100644 index 37061ffb3..000000000 --- a/security/certificates/root/root-ca.pem +++ /dev/null @@ -1,35 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIGFTCCA/2gAwIBAgIUHppJp1AuWGdHuCVg9rH5RJZGx5gwDQYJKoZIhvcNAQEL -BQAwZDELMAkGA1UEBhMCVUsxDzANBgNVBAgMBkxvbmRvbjELMAkGA1UEBwwCVUsx -ETAPBgNVBAoMCGNvZ3N0YWNrMREwDwYDVQQLDAhjb2dzdGFjazERMA8GA1UEAwwI -Y29nc3RhY2swHhcNMjUwOTIzMTU1MDM2WhcNMjkwOTIyMTU1MDM2WjBkMQswCQYD -VQQGEwJVSzEPMA0GA1UECAwGTG9uZG9uMQswCQYDVQQHDAJVSzERMA8GA1UECgwI -Y29nc3RhY2sxETAPBgNVBAsMCGNvZ3N0YWNrMREwDwYDVQQDDAhjb2dzdGFjazCC -AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALePzCzYrvsdPUpYkDkMqmcc -uXQrZPKsfKcjaS/wew9xj6SVMfpQGUQTjmSNFC7d6UMGMbSgmwPXFOxqVXFuw1RI -Cb5jpvPx3DJFH+v9Tx66KjwmUe0yk2++wm0uuvSQQ/suXYlbcWvu2AkeoAfTyNhB -0VhHUE9Br+4sBxivLUXmw3wyhO9nRieEhjUb34YwBX1RJSyC8ahx7+RcGug5J/8w -QRSK+dx68FcwLnJtvfZ+6xJ+tKH6dJyDFoIpXqXXkuMOweEvZemYZuxTIceN00tf -qpoNH65OtQ7WXwIRjcPmSFwV+RdH1JJ02B2rZiAjqGrcJoVCBTnkDHd3NjBeDCNK -OKRyGUPQQh4mXNwGXFwJOno4tMIt3SW0MIJ/mK+nfq4fInuR52gdsu3Pvg4gyWSs -cmgu3P0w/iiZSqPIfX5a32iv3jHOCtQBIe/chgnWFqD78RiRqx8mSBd1k/m4zBmn -cZ+XOdQnERgO0yyNmtrofrDzthYng/4eIwtqt1vvT2uQ+Lv2Z2KFDXv2OAMCZ33X -JySCur0oj980JT4ejZPbRmhQEefMPY8tBHNZeacDrHJ6UafNY/QSA7FzUDyI+FbI -o8Akd83ssNSXDujRAf6jWmvhhG0h5K43aGuxXALuUstUODEDTQEW2PhDO1I3KB6R -kQHjgHXqERPy2boE/3a/AgMBAAGjgb4wgbswHQYDVR0OBBYEFBNHJxCbd8BJC3ne -dPASBSJ3oW1+MB8GA1UdIwQYMBaAFBNHJxCbd8BJC3nedPASBSJ3oW1+MA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMFgGA1UdEQRRME+CBG5pZmmCD2Vs -YXN0aWNzZWFyY2gtMYIPZWxhc3RpY3NlYXJjaC0ygg9lbGFzdGljc2VhcmNoLTOC -CGNvZ3N0YWNrggoqLmNvZ3N0YWNrMA0GCSqGSIb3DQEBCwUAA4ICAQCl5tV9XAoZ -eOMBkv3nv9Ti2QNt2USsGXUkMovbjb5kNIkx14J75522fi4qZi7fcmxOnZNQsmBV -8GjpL7n/6qca8IAlqYlvjBG+ruWKwnYquFbcBPc86ry/kS7OJIJinSvcpvW+TrOw -V1IT4X/KUo/pAUeXONUV8lp4uxpSeSGXzC3gpW+MQNt7asukM2cVVrLBD/KLtV8q -zvsy+f1LY5PqqEOdmZSPMQryHiEi6H4JComKYS7biUI7NEQ+c0GnhbevAcdjeHGI -MWeFVOFv5ZbU3LpOCN9k8DygoQxGL303gpfH4ysL6sUFhk/eEzAh6rsOdbDoUNHW -9ypBNyKGpBz2f3jaSD483LbgQecnflefB84sz/YHs3K+A7AKYt8ut1qckaCRvI1U -JW5DTLQRyLS72W3WPxGYlWWwEukw1G5QX8vUwGNKpDpa/EiuewIcXEXXNM7NGqfR -5bp1B1v56E37w9h54jRg1hPdrUGjLocZP+yv66S17BxZwp9yE/Ar6w+neN7vIFDQ -MkT51223dOa1gfIKtfqtJ9jdF4lA5AqqfN46xgUt0K1hiDGTUUpHxh2imZFHbzn1 -J5tJ57kRlhYqmMPucDV8WQzyFHJC25jIoQcgn3/IYweFxt9IOgptuTPj0YfafX6B -0L5PhGl7ZHINapjc2k0Lr/Hw8zxHv1jgeQ== ------END CERTIFICATE----- diff --git a/security/certificates/root/root-ca.srl b/security/certificates/root/root-ca.srl deleted file mode 100644 index 3f6bfd27b..000000000 --- a/security/certificates/root/root-ca.srl +++ /dev/null @@ -1 +0,0 @@ -2FC43C22449BC8E91A9856C449565A20329B6D6A diff --git a/security/env/README.md b/security/env/README.md new file mode 100644 index 000000000..fd86357a1 --- /dev/null +++ b/security/env/README.md @@ -0,0 +1,14 @@ +# Development environment defaults + +The `.env` files in this directory are version-controlled inputs for the +standalone Docker Compose stack and the legacy charts. Their values are public +development defaults, not secrets. + +Never store production credentials in these files. Production deployments +must inject credentials through an external secret store or deployment-local +configuration that is not committed to Git. + +Moving these files to ignored, locally generated `.env` files requires a +coordinated change to Compose, the chart file symlinks, CI, and developer setup. +That migration should be completed separately rather than leaving fresh +checkouts unable to start. diff --git a/security/scripts/create_es_native_certs.sh b/security/scripts/create_es_native_certs.sh index 079a0b11e..8fee1b813 100755 --- a/security/scripts/create_es_native_certs.sh +++ b/security/scripts/create_es_native_certs.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090,SC1091 # Security env files are selected through runtime paths. # ================================================================================ # 🛡️ Create client keys and certificates for Elasticsearch Native mode @@ -25,23 +26,33 @@ set -euo pipefail +cleanup_es_native_artifacts() { + docker ps -a -q --filter name="deploy-es_native_create_certs-run-*" | + while IFS= read -r container_id; do + [[ -n "$container_id" ]] && docker container rm -f "$container_id" + done + + docker volume ls --filter name=deploy_elasticsearch-certs- -q | + while IFS= read -r volume_id; do + [[ -n "$volume_id" ]] && docker volume rm -f "$volume_id" + done +} + if [ ! -d "../certificates/elastic/elasticsearch" ]; then echo "====================================== CREATE_ES_NATIVE_CERTS ===============================" source ../env/certificates_elasticsearch.env source ../env/users_elasticsearch.env echo "Removing previous cert container and volume if existent...." - docker container rm -f $(docker ps -a -q --filter name="deploy-es_native_create_certs-run-*") || true - docker volume rm $(docker volume ls --filter name=deploy_elasticsearch-certs- -q) -f || true + cleanup_es_native_artifacts || true echo "Certificates for es_native not present, creating them now ..." docker compose -f ../../deploy/services.yml run es_native_create_certs echo "Removing cert container and volume...." - docker container rm -f $(docker ps -a -q --filter name="deploy-es_native_create_certs-run-*") - docker volume rm $(docker volume ls --filter name=deploy_elasticsearch-certs- -q) -f + cleanup_es_native_artifacts else echo "Certificates found, skipping creating, if you want to recreate delete the ../certificates/elastic/elasticsearch folder" fi -chown -R $USER ../certificates/elastic/elasticsearch +chown -R "$USER" ../certificates/elastic/elasticsearch diff --git a/security/scripts/create_es_native_credentials.sh b/security/scripts/create_es_native_credentials.sh index e2c70d5e7..0709e81c4 100755 --- a/security/scripts/create_es_native_credentials.sh +++ b/security/scripts/create_es_native_credentials.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090 # Security env files are selected through runtime paths. # ============================================================================== # 🔐 Create users and service account tokens for Elasticsearch Native @@ -23,10 +24,10 @@ # • `certificates_general.env` must define: # - CA root path used for HTTPS verification # -# Output (to Elasticsearch security API): +# Output: # • Password for `kibana_system` set # • Users `$KIBANA_USER` and `$INGEST_SERVICE_USER` created -# • Fleet Server token generated +# • Fleet Server token written to a mode-0600 JSON file # ============================================================================== set -uo pipefail @@ -42,7 +43,6 @@ source "${SECURITY_ENV_FOLDER}"certificates_general.env source "${SECURITY_ENV_FOLDER}"users_elasticsearch.env ES_CA_CERT="${ES_CERTIFICATES_FOLDER}/elastic-stack-ca.crt.pem" -ES_CA_KEY="${ES_CERTIFICATES_FOLDER}/elastic-stack-ca.key.pem" # Validate required variables : "${ELASTIC_HOST:?Must set ELASTIC_HOST in certificates_elasticsearch.env}" @@ -55,20 +55,18 @@ ES_CA_KEY="${ES_CERTIFICATES_FOLDER}/elastic-stack-ca.key.pem" echo "====================================== CREATE_ES_NATIVE_CREDENTIALS ==============================" echo "ELASTIC_HOST: $ELASTIC_HOST" -echo "ELASTIC_PASSWORD: $ELASTIC_PASSWORD" echo "ELASTIC_USER: $ELASTIC_USER" echo "KIBANA_USER: $KIBANA_USER" -echo "KIBANA_PASSWORD: $KIBANA_PASSWORD" echo "INGEST_SERVICE_USER: $INGEST_SERVICE_USER" -echo "INGEST_SERVICE_PASSWORD: $INGEST_SERVICE_PASSWORD" echo "ES_ADMIN_EMAIL: $ES_ADMIN_EMAIL" +echo "Credential values: [loaded; values not logged]" echo "==================================================================================================" ES_URL="https://$ELASTIC_HOST:9200" # Wait for Elasticsearch to be available echo "⏳ Waiting for Elasticsearch to become available..." -until curl -ks --cacert "$ES_CA_CERT" -u "elastic:$ELASTIC_PASSWORD" $ES_URL >/dev/null; do +until curl --silent --show-error --cacert "$ES_CA_CERT" -u "elastic:$ELASTIC_PASSWORD" "$ES_URL" >/dev/null; do echo " 🔁 Still waiting on $ELASTIC_HOST..." sleep 10 done @@ -81,7 +79,7 @@ create_user() { echo "🔐 Creating user: $username with role: $roles" - response=$(curl -ks -w "\n%{http_code}" --cacert "$ES_CA_CERT" \ + response=$(curl --silent --show-error -w "\n%{http_code}" --cacert "$ES_CA_CERT" \ -u "elastic:$ELASTIC_PASSWORD" \ -X POST "$ES_URL/_security/user/$username?pretty" \ -H 'Content-Type: application/json' \ @@ -116,7 +114,23 @@ create_user "$KIBANA_USER" "$KIBANA_PASSWORD" "\"kibana_system\", \"kibana_admin # Create Fleet server service account token echo "🔑 Creating Fleet server service account token..." -curl -ks -X POST --cacert "$ES_CA_CERT" -u "elastic:$ELASTIC_PASSWORD" \ - "$ES_URL/_security/service/elastic/fleet-server/credential/token?pretty" +FLEET_TOKEN_OUTPUT_FILE="${ELASTICSEARCH_SERVICE_TOKEN_OUTPUT_FILE:-${ES_CERTIFICATES_FOLDER}/fleet-server-service-token.json}" +mkdir -p "$(dirname "$FLEET_TOKEN_OUTPUT_FILE")" +FLEET_TOKEN_TEMP_FILE="$(mktemp "${FLEET_TOKEN_OUTPUT_FILE}.tmp.XXXXXX")" +trap 'rm -f "$FLEET_TOKEN_TEMP_FILE"' EXIT + +if ! curl --silent --show-error --fail -X POST \ + --cacert "$ES_CA_CERT" \ + -u "elastic:$ELASTIC_PASSWORD" \ + --output "$FLEET_TOKEN_TEMP_FILE" \ + "$ES_URL/_security/service/elastic/fleet-server/credential/token?pretty"; then + echo "❌ Failed to create the Fleet Server token; no token file was written." >&2 + exit 1 +fi + +chmod 600 "$FLEET_TOKEN_TEMP_FILE" +mv "$FLEET_TOKEN_TEMP_FILE" "$FLEET_TOKEN_OUTPUT_FILE" +trap - EXIT +echo "✅ Fleet Server token written to $FLEET_TOKEN_OUTPUT_FILE (value not logged)." echo "✅ All Elasticsearch native credentials have been created." diff --git a/security/scripts/create_gitea_certs.sh b/security/scripts/create_gitea_certs.sh new file mode 100755 index 000000000..21ea353a8 --- /dev/null +++ b/security/scripts/create_gitea_certs.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +# Generate a dedicated Gitea leaf certificate signed by the shared CogStack CA. + +set -euo pipefail + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +SECURITY_DIR="${SECURITY_DIR_OVERRIDE:-$(cd -- "${SCRIPT_DIR}/.." && pwd)}" +SECURITY_ENV_DIR="${SECURITY_DIR}/env" +CERTIFICATES_DIR="${SECURITY_DIR}/certificates" +ROOT_CERTIFICATES_DIR="${CERTIFICATES_DIR}/root" +GITEA_CERTIFICATES_DIR="${CERTIFICATES_DIR}/gitea" +EXT_FILE="${SECURITY_DIR}/templates/ssl-extensions-x509.cnf" + +# shellcheck disable=SC1091 +source "${SECURITY_ENV_DIR}/certificates_general.env" + +: "${ROOT_CERTIFICATE_NAME:?Must be set in certificates_general.env}" +: "${ROOT_CERTIFICATE_TIME_VAILIDITY_IN_DAYS:?Must be set in certificates_general.env}" + +CA_CERT="${ROOT_CERTIFICATES_DIR}/${ROOT_CERTIFICATE_NAME}.pem" +CA_KEY="${ROOT_CERTIFICATES_DIR}/${ROOT_CERTIFICATE_NAME}.key" +KEY_FILE="${GITEA_CERTIFICATES_DIR}/gitea.key" +CSR_FILE="${GITEA_CERTIFICATES_DIR}/gitea.csr" +CERT_FILE="${GITEA_CERTIFICATES_DIR}/gitea.pem" +CRT_FILE="${GITEA_CERTIFICATES_DIR}/gitea.crt" + +if [[ ! -f "$CA_CERT" || ! -f "$CA_KEY" ]]; then + echo "ERROR: Missing root CA files. Run 'make -C deploy init-security-root-ca' first." >&2 + exit 1 +fi + +mkdir -p "$GITEA_CERTIFICATES_DIR" +rm -f "$KEY_FILE" "$CSR_FILE" "$CERT_FILE" "$CRT_FILE" + +openssl genrsa -out "$KEY_FILE" 4096 +openssl req -new \ + -key "$KEY_FILE" \ + -out "$CSR_FILE" \ + -subj "/C=UK/ST=London/L=UK/O=cogstack/OU=cogstack/CN=gitea" + +openssl x509 -req \ + -in "$CSR_FILE" \ + -CA "$CA_CERT" \ + -CAkey "$CA_KEY" \ + -CAcreateserial \ + -out "$CERT_FILE" \ + -days "${GITEA_CERTIFICATE_TIME_VALIDITY_IN_DAYS:-825}" \ + -sha256 \ + -extfile "$EXT_FILE" \ + -extensions v3_gitea + +openssl x509 -in "$CERT_FILE" -outform DER -out "$CRT_FILE" + +chmod 600 "$KEY_FILE" +chmod 644 "$CSR_FILE" "$CERT_FILE" "$CRT_FILE" + +echo "Generated Gitea leaf certificate in $GITEA_CERTIFICATES_DIR" diff --git a/security/scripts/create_keystore.sh b/security/scripts/create_keystore.sh index 4383bbe6c..6a31b1d59 100755 --- a/security/scripts/create_keystore.sh +++ b/security/scripts/create_keystore.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090 # Security env files are selected through runtime paths. # =========================================================================================================================== # 🧰 Create a Java keystore (.jks) and truststore from existing cert + key @@ -24,7 +25,6 @@ set -euo pipefail -SECURITY_TEMPLATES_FOLDER="../templates/" SECURITY_CERTIFICATES_FOLDER="../certificates/" SECURITY_ENV_FOLDER="../env/" @@ -38,7 +38,7 @@ source "${SECURITY_ENV_FOLDER}certificates_general.env" echo "====================================== CREATE_KEYSTORE ==============================" echo "ROOT_CERTIFICATE_NAME: $ROOT_CERTIFICATE_NAME" -echo "ROOT_CERTIFICATE_KEYSTORE_PASSWORD: $ROOT_CERTIFICATE_KEYSTORE_PASSWORD" +echo "Keystore password: [loaded; value not logged]" echo "==================================================================================================" CERT_NAME="${1:-}" @@ -47,8 +47,6 @@ KEYSTORE_PASSWORD="${3:-$ROOT_CERTIFICATE_KEYSTORE_PASSWORD}" # Root cert defaults CA_ROOT_CERT="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.pem" -CA_ROOT_KEY="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.key" -CA_ROOT_KEYSTORE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.p12" CERT_FILE="${CERT_NAME}.crt" KEY_FILE="${CERT_NAME}.key" @@ -104,4 +102,3 @@ keytool -import \ -keystore "${CERT_NAME}-truststore.key" \ -storepass "$KEYSTORE_PASSWORD" \ -noprompt - \ No newline at end of file diff --git a/security/scripts/create_nifi_certs.sh b/security/scripts/create_nifi_certs.sh index 50b005ee3..b1f36f249 100755 --- a/security/scripts/create_nifi_certs.sh +++ b/security/scripts/create_nifi_certs.sh @@ -2,13 +2,17 @@ set -euo pipefail -SECURITY_TEMPLATES_FOLDER="../templates/" -SECURITY_CERTIFICATES_FOLDER="../certificates/" -SECURITY_ENV_FOLDER="../env/" +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +SECURITY_TEMPLATES_FOLDER="${SCRIPT_DIR}/../templates/" +SECURITY_CERTIFICATES_FOLDER="${SCRIPT_DIR}/../certificates/" +SECURITY_ENV_FOLDER="${SCRIPT_DIR}/../env/" ROOT_CERTIFICATES_FOLDER="${SECURITY_CERTIFICATES_FOLDER}root/" NIFI_CERTIFICATES_FOLDER="${SECURITY_CERTIFICATES_FOLDER}nifi/" +# These paths are resolved dynamically from this script's location. +# shellcheck disable=SC1090 source "${SECURITY_ENV_FOLDER}certificates_general.env" +# shellcheck disable=SC1090 source "${SECURITY_ENV_FOLDER}certificates_nifi.env" : "${ROOT_CERTIFICATE_NAME:?Must be set in certificates_general.env}" @@ -26,36 +30,43 @@ if [[ ! -f "$CA_ROOT_CERT" || ! -f "$CA_ROOT_KEY" ]]; then fi CERT_NAME="nifi" +KEY_FILE="${NIFI_CERTIFICATES_FOLDER}${CERT_NAME}.key" +CSR_FILE="${NIFI_CERTIFICATES_FOLDER}${CERT_NAME}.csr" +PEM_FILE="${NIFI_CERTIFICATES_FOLDER}${CERT_NAME}.pem" +CRT_FILE="${NIFI_CERTIFICATES_FOLDER}${CERT_NAME}.crt" +P12_FILE="${NIFI_CERTIFICATES_FOLDER}${CERT_NAME}.p12" +KEYSTORE_FILE="${NIFI_CERTIFICATES_FOLDER}${CERT_NAME}-keystore.jks" +TRUSTSTORE_FILE="${NIFI_CERTIFICATES_FOLDER}${CERT_NAME}-truststore.jks" mkdir -p "$NIFI_CERTIFICATES_FOLDER" -rm -f "${NIFI_CERTIFICATES_FOLDER}${CERT_NAME}"* +rm -f "$KEY_FILE" "$CSR_FILE" "$PEM_FILE" "$CRT_FILE" "$P12_FILE" "$KEYSTORE_FILE" "$TRUSTSTORE_FILE" -openssl genrsa -out "${CERT_NAME}.key" 4096 -openssl req -new -key "${CERT_NAME}.key" -out "${CERT_NAME}.csr" -config "$EXT_FILE" +openssl genrsa -out "$KEY_FILE" 4096 +openssl req -new -key "$KEY_FILE" -out "$CSR_FILE" -config "$EXT_FILE" openssl x509 -req \ - -in "${CERT_NAME}.csr" \ + -in "$CSR_FILE" \ -CA "$CA_ROOT_CERT" \ -CAkey "$CA_ROOT_KEY" \ -CAcreateserial \ - -out "${CERT_NAME}.pem" \ + -out "$PEM_FILE" \ -days "$NIFI_CERTIFICATE_TIME_VAILIDITY_IN_DAYS" \ -sha256 \ -extfile "$EXT_FILE" \ -extensions v3_leaf -openssl x509 -in "${CERT_NAME}.pem" -outform DER -out "${CERT_NAME}.crt" +openssl x509 -in "$PEM_FILE" -outform DER -out "$CRT_FILE" openssl pkcs12 -export \ - -in "${CERT_NAME}.pem" \ - -inkey "${CERT_NAME}.key" \ - -out "${CERT_NAME}.p12" \ + -in "$PEM_FILE" \ + -inkey "$KEY_FILE" \ + -out "$P12_FILE" \ -name "$CERT_NAME" \ -passout pass:"$NIFI_KEYSTORE_PASSWORD" keytool -importkeystore \ - -destkeystore "${CERT_NAME}-keystore.jks" \ - -srckeystore "${CERT_NAME}.p12" \ + -destkeystore "$KEYSTORE_FILE" \ + -srckeystore "$P12_FILE" \ -srcstoretype PKCS12 \ -alias "$CERT_NAME" \ -srcstorepass "$NIFI_KEYSTORE_PASSWORD" \ @@ -65,10 +76,9 @@ keytool -importkeystore \ keytool -importcert \ -file "$CA_ROOT_CERT" \ -alias "$ROOT_CERTIFICATE_NAME" \ - -keystore "${CERT_NAME}-truststore.jks" \ + -keystore "$TRUSTSTORE_FILE" \ -storepass "$NIFI_TRUSTSTORE_PASSWORD" \ -noprompt -mv "${CERT_NAME}.key" "${CERT_NAME}.pem" "${CERT_NAME}.crt" "${CERT_NAME}.csr" \ - "${CERT_NAME}.p12" "${CERT_NAME}-keystore.jks" "${CERT_NAME}-truststore.jks" \ - "$NIFI_CERTIFICATES_FOLDER" +chmod 600 "$KEY_FILE" "$P12_FILE" "$KEYSTORE_FILE" "$TRUSTSTORE_FILE" +chmod 644 "$PEM_FILE" "$CRT_FILE" "$CSR_FILE" diff --git a/security/scripts/create_opensearch_client_admin_certs.sh b/security/scripts/create_opensearch_client_admin_certs.sh index 99f0f9b35..8d1e8f82e 100755 --- a/security/scripts/create_opensearch_client_admin_certs.sh +++ b/security/scripts/create_opensearch_client_admin_certs.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1091 # Security env files are resolved relative to the runtime working directory. # ============================================================================== # 🔐 Create OpenSearch client + admin certs (key, pem, csr, p12) @@ -47,8 +48,8 @@ echo "ES_ADMIN_SUBJ_LINE: $ES_ADMIN_SUBJ_LINE" echo "ROOT_CERTIFICATE_NAME: $ROOT_CERTIFICATE_NAME" echo "===================================================================================================" -CA_ROOT_CERT="${ROOT_CERTIFICATES_FOLDER}"$ROOT_CERTIFICATE_NAME".pem" -CA_ROOT_KEY="${ROOT_CERTIFICATES_FOLDER}"$ROOT_CERTIFICATE_NAME".key" +CA_ROOT_CERT="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.pem" +CA_ROOT_KEY="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.key" EXT_FILE="${SECURITY_TEMPLATES_FOLDER}ssl-extensions-x509.cnf" # === Client cert === @@ -66,7 +67,7 @@ openssl x509 -req -days "$ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS" \ -in "$ES_CLIENT_CERT_NAME.csr" \ -CA "$CA_ROOT_CERT" -CAkey "$CA_ROOT_KEY" -CAcreateserial \ -out "$ES_CLIENT_CERT_NAME.pem" \ - -extensions v3_leaf -extfile $EXT_FILE + -extensions v3_leaf -extfile "$EXT_FILE" mv "$ES_CLIENT_CERT_NAME"* "$OPENSEARCH_ES_CERTIFICATES_FOLDER" diff --git a/security/scripts/create_opensearch_internal_passwords.sh b/security/scripts/create_opensearch_internal_passwords.sh index 1adac134b..2546be923 100755 --- a/security/scripts/create_opensearch_internal_passwords.sh +++ b/security/scripts/create_opensearch_internal_passwords.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090,SC1091 # Security env files are selected through runtime paths. # ============================================================================== # 🔐 Generate OpenSearch internal user password hashes using container @@ -12,7 +13,7 @@ # - ../env/users_elasticsearch.env # # Produces: -# - Two hashes (admin + kibanaserver) printed to stdout +# - Two hashes (admin + kibanaserver) kept out of stdout # - Optionally updates: ./es_roles/opensearch/internal_users.yml # # ============================================================================== @@ -20,14 +21,8 @@ set -euo pipefail -SECURITY_TEMPLATES_FOLDER="../templates/" -SECURITY_CERTIFICATES_FOLDER="../certificates/" SECURITY_ENV_FOLDER="../env/" -ROOT_CERTIFICATES_FOLDER="${SECURITY_CERTIFICATES_FOLDER}root_certificates/" - -OPENSEARCH_ES_CERTIFICATES_FOLDER="${SECURITY_CERTIFICATES_FOLDER}es_certificates/opensearch/" - # required env var files source ../../deploy/elasticsearch.env source "${SECURITY_ENV_FOLDER}certificates_elasticsearch.env" @@ -40,8 +35,8 @@ if [[ $# -lt 1 || $# -gt 2 ]]; then fi # Validate required passwords -: "${ELASTIC_PASSWORD:?Must be set in elasticsearch_users.env}" -: "${KIBANA_PASSWORD:?Must be set in elasticsearch_users.env}" +: "${ELASTIC_PASSWORD:?Must be set in users_elasticsearch.env}" +: "${KIBANA_PASSWORD:?Must be set in users_elasticsearch.env}" ES_CONTAINER_NAME="$1" @@ -57,17 +52,7 @@ echo "🔐 Generating password hashes from container: $ES_CONTAINER_NAME" ES_ADMIN_HASH=$( docker exec "$ES_CONTAINER_NAME" /bin/sh /usr/share/opensearch/plugins/opensearch-security/tools/hash.sh -p "$ELASTIC_PASSWORD" ) ES_KIBANA_HASH=$( docker exec "$ES_CONTAINER_NAME" /bin/sh /usr/share/opensearch/plugins/opensearch-security/tools/hash.sh -p "$KIBANA_PASSWORD" ) -echo "" -echo "--------------------------------" -echo "user: \"admin\"" -echo "password: \"$ELASTIC_PASSWORD\"" -echo "hash: \"$ES_ADMIN_HASH\"" -echo "--------------------------------" -echo "user: \"${KIBANA_USER}\"" -echo "password: \"$KIBANA_PASSWORD\"" -echo "hash: \"$ES_KIBANA_HASH\"" -echo "--------------------------------" -echo "✅ Now apply these hashes manually in 'internal_users.yml'" +echo "✅ Generated password hashes for admin and ${KIBANA_USER}; credential material was not logged." # === Patch YAML if --apply is given === if [[ "$APPLY" == "--apply" ]]; then @@ -86,5 +71,5 @@ if [[ "$APPLY" == "--apply" ]]; then echo "✅ Password hashes updated in $INTERNAL_USERS_YML" else - echo "📝 Skipping YAML patch — run with '--apply' to inject into internal_users.yml" + echo "📝 Skipping YAML patch — rerun with '--apply' to update internal_users.yml" fi diff --git a/security/scripts/create_opensearch_node_cert.sh b/security/scripts/create_opensearch_node_cert.sh index 590fb59f4..4b0685b7b 100755 --- a/security/scripts/create_opensearch_node_cert.sh +++ b/security/scripts/create_opensearch_node_cert.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090 # Security env files are selected through runtime paths. # ============================================================================== # 🔐 Generate OpenSearch node certificate signed by Root CA diff --git a/security/scripts/create_opensearch_users.sh b/security/scripts/create_opensearch_users.sh index c72246596..9eadc593a 100755 --- a/security/scripts/create_opensearch_users.sh +++ b/security/scripts/create_opensearch_users.sh @@ -1,243 +1,215 @@ #!/usr/bin/env bash -################################################################ -# -# This script creates roles and users for OpenDistro -# ElasticSearch distribution bundled with security plugin -# using provided env file with users/passwords -# - -set -e - - -SECURITY_TEMPLATES_FOLDER="../templates/" -SECURITY_CERTIFICATES_FOLDER="../certificates/" -SECURITY_ENV_FOLDER="../env/" - -# required env var files -source ../../deploy/general.env -source ../../deploy/elasticsearch.env -source "${SECURITY_ENV_FOLDER}certificates_elasticsearch.env" -source "${SECURITY_ENV_FOLDER}certificates_general.env" - -# load the internal users passwords -# IMPORTANT: for production deployments please remember to change the passwords -source "${SECURITY_ENV_FOLDER}users_elasticsearch.env" - -# get the ES hostname -# -if [ -z "$1" ]; then - echo "Usage: $0 [--use-ssl]" +# Create CogStack application tenants, roles, users, and role mappings through +# the OpenSearch Security plugin REST API. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SECURITY_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" +REPO_ROOT="$(cd "${SECURITY_DIR}/.." && pwd)" + +SECURITY_ENV_DIR="${SECURITY_DIR}/env" +DEFAULT_CA_CERT="${SECURITY_DIR}/certificates/elastic/opensearch/elastic-stack-ca.crt.pem" + +usage() { + cat < [--use-http] + +Options: + --use-http Use plain HTTP instead of the default verified HTTPS connection. + --use-ssl Deprecated compatibility option; HTTPS is already the default. + -h, --help Show this help. + +Environment overrides: + OPENSEARCH_PORT REST API port (default: ELASTICSEARCH_NODE_1_OUTPUT_PORT or 9200) + OPENSEARCH_CA_CERT CA certificate used to verify HTTPS + OPENSEARCH_ADMIN_USER REST API administrator (default: admin) + OPENSEARCH_ADMIN_PASSWORD REST API administrator password (default: ELASTIC_PASSWORD) +USAGE +} + +require_command() { + local command_name="$1" + + if ! command -v "$command_name" >/dev/null 2>&1; then + echo "ERROR: Required command not found: $command_name" >&2 + exit 1 + fi +} + +json_escape() { + local value="$1" + + value=${value//\\/\\\\} + value=${value//\"/\\\"} + value=${value//$'\n'/\\n} + value=${value//$'\r'/\\r} + value=${value//$'\t'/\\t} + printf '%s' "$value" +} + +source_env_files() { + # shellcheck disable=SC1091 + source "${REPO_ROOT}/deploy/elasticsearch.env" + # shellcheck disable=SC1091 + source "${SECURITY_ENV_DIR}/users_elasticsearch.env" +} + +OPENSEARCH_HOST="" +USE_HTTP=false + +while [[ $# -gt 0 ]]; do + case "$1" in + --use-http) + USE_HTTP=true + ;; + --use-ssl) + # Retained so existing automation continues to work. HTTPS is now default. + ;; + -h|--help) + usage + exit 0 + ;; + -*) + echo "ERROR: Unknown option: $1" >&2 + usage + exit 1 + ;; + *) + if [[ -n "$OPENSEARCH_HOST" ]]; then + echo "ERROR: Multiple OpenSearch hostnames supplied." >&2 + usage + exit 1 + fi + OPENSEARCH_HOST="$1" + ;; + esac + shift +done + +if [[ -z "$OPENSEARCH_HOST" ]]; then + usage exit 1 -else - ES_HOST=$1 fi +source_env_files +require_command curl + +OPENSEARCH_PORT="${OPENSEARCH_PORT:-${ELASTICSEARCH_NODE_1_OUTPUT_PORT:-9200}}" +OPENSEARCH_ADMIN_USER="${OPENSEARCH_ADMIN_USER:-admin}" +OPENSEARCH_ADMIN_PASSWORD="${OPENSEARCH_ADMIN_PASSWORD:-${ELASTIC_PASSWORD:-}}" -# check which protocol to use -# -if [ ! -z "$2" ] && [ "$2" = "--use-ssl" ]; then - HTTP_PROTOCOL=https - SSL_FLAGS="$SSL_FLAGS" +: "${OPENSEARCH_ADMIN_PASSWORD:?Set OPENSEARCH_ADMIN_PASSWORD or ELASTIC_PASSWORD}" +: "${INGEST_SERVICE_PASSWORD:?Set INGEST_SERVICE_PASSWORD in users_elasticsearch.env}" + +if [[ "$USE_HTTP" == true ]]; then + OPENSEARCH_PROTOCOL=http else - HTTP_PROTOCOL=http - SSL_FLAGS="" + OPENSEARCH_PROTOCOL=https + OPENSEARCH_CA_CERT="${OPENSEARCH_CA_CERT:-$DEFAULT_CA_CERT}" + if [[ ! -r "$OPENSEARCH_CA_CERT" ]]; then + echo "ERROR: OpenSearch CA certificate is not readable: $OPENSEARCH_CA_CERT" >&2 + exit 1 + fi fi +API_BASE="${OPENSEARCH_PROTOCOL}://${OPENSEARCH_HOST}:${OPENSEARCH_PORT}/_plugins/_security/api" +CURL_ARGS=( + --silent + --show-error + --fail-with-body + --user "${OPENSEARCH_ADMIN_USER}:${OPENSEARCH_ADMIN_PASSWORD}" + --header "Content-Type: application/json" +) + +if [[ "$USE_HTTP" != true ]]; then + CURL_ARGS+=(--cacert "$OPENSEARCH_CA_CERT") +fi -# ES admin config for altering users and roles -# -ES_PORT=${ELASTICSEARCH_NODE_1_OUTPUT_PORT:-9200} +api_put() { + local resource="$1" + local payload="$2" -# The ES USER IS admin for OpenSearch + echo "Applying ${resource}..." + curl "${CURL_ARGS[@]}" \ + --request PUT \ + "${API_BASE}/${resource}" \ + --data "$payload" + printf '\n' +} -ELASTIC_USER=admin +INGEST_PASSWORD_JSON="$(json_escape "$INGEST_SERVICE_PASSWORD")" -echo "Going to query: $HTTP_PROTOCOL://$ES_HOST:$ES_PORT" +echo "Configuring CogStack OpenSearch resources at ${OPENSEARCH_PROTOCOL}://${OPENSEARCH_HOST}:${OPENSEARCH_PORT}" -# create tenants -# -echo "Creating tenants ..." -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/tenants/nifi_tenant" -H 'Content-Type: application/json' $SSL_FLAGS -d' -{ - "description": "A tenant for the NiFi" +api_put "tenants/nifi_tenant" '{ + "description": "A tenant for NiFi" }' -echo "" -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/tenants/cogstack_tenant" -H 'Content-Type: application/json' $SSL_FLAGS -d' -{ - "description": "A tenant for the CogStack" +api_put "tenants/cogstack_tenant" '{ + "description": "A tenant for CogStack" }' -echo "" - -# create roles -# -echo "Creating roles ..." -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/roles/cogstack_ingest" -H 'Content-Type: application/json' $SSL_FLAGS -d' -{ +api_put "roles/cogstack_ingest" '{ "cluster_permissions": [ "cluster_composite_ops", "indices:data/read/scroll*" ], "index_permissions": [{ - "index_patterns" : [ - "nifi_*", - "cogstack_*" - ], - "fls": [], - "masked_fields": [], - "allowed_actions": [ - "indices_all" - ] + "index_patterns": ["nifi_*", "cogstack_*"], + "fls": [], + "masked_fields": [], + "allowed_actions": ["indices_all"] }], "tenant_permissions": [{ - "tenant_patterns": [ - "nifi_tenant", - "cogstack_tenant" - ], - "allowed_actions": [ - "kibana_all_write" - ] + "tenant_patterns": ["nifi_tenant", "cogstack_tenant"], + "allowed_actions": ["kibana_all_write"] }] }' -echo "" -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/roles/cogstack_access" -H 'Content-Type: application/json' $SSL_FLAGS -d' -{ - "cluster_permissions": [ - "cluster_composite_ops" - ], +api_put "roles/cogstack_access" '{ + "cluster_permissions": ["cluster_composite_ops"], "index_permissions": [{ - "index_patterns" : [ - "cogstack_*", - "nifi_*" - ], - "fls": [], - "masked_fields": [], - "allowed_actions": [ - "search", - "read", - "get" - ] + "index_patterns": ["cogstack_*", "nifi_*"], + "fls": [], + "masked_fields": [], + "allowed_actions": ["search", "read", "get"] }], "tenant_permissions": [{ - "tenant_patterns": [ - "cogstack_tenant" - ], - "allowed_actions": [ - "kibana_all_write" - ] + "tenant_patterns": ["cogstack_tenant"], + "allowed_actions": ["kibana_all_write"] }] }' -echo "" - - -# create users -# -echo "Creating users ..." -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/cogstack_user" -H 'Content-Type: application/json' $SSL_FLAGS -d" -{ - \"backend_roles\": [ - \"cogstack_access\", - \"kibanauser\" - ], - \"password\": \"$INGEST_SERVICE_PASSWORD\", +api_put "internalusers/cogstack_user" "{ + \"password\": \"${INGEST_PASSWORD_JSON}\", + \"backend_roles\": [\"cogstack_access\", \"kibanauser\"], \"attributes\": {} }" -echo "" -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/cogstack_pipeline" -H 'Content-Type: application/json' $SSL_FLAGS -d" -{ - \"backend_roles\": [ - \"cogstack_ingest\" - ], - \"password\": \"$INGEST_SERVICE_PASSWORD\", +api_put "internalusers/cogstack_pipeline" "{ + \"password\": \"${INGEST_PASSWORD_JSON}\", + \"backend_roles\": [\"cogstack_ingest\"], \"attributes\": {} }" -echo "" -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/nifi" -H 'Content-Type: application/json' $SSL_FLAGS -d" -{ - \"backend_roles\": [ - \"cogstack_ingest\" - ], - \"password\": \"$INGEST_SERVICE_PASSWORD\", +api_put "internalusers/nifi" "{ + \"password\": \"${INGEST_PASSWORD_JSON}\", + \"backend_roles\": [\"cogstack_ingest\"], \"attributes\": {} }" -echo "" - -# create mapping roles -# -echo "Creating roles mapping ..." -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/rolesmapping/cogstack_access" -H 'Content-Type: application/json' $SSL_FLAGS -d' -{ - "backend_roles": [ - "cogstack_access" - ], +api_put "rolesmapping/cogstack_access" '{ + "backend_roles": ["cogstack_access"], "hosts": [], - "users": [ - "cogstack_user" - ] + "users": ["cogstack_user"] }' -echo "" -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/rolesmapping/cogstack_ingest" -H 'Content-Type: application/json' $SSL_FLAGS -d' -{ - "backend_roles": [ - "cogstack_ingest" - ], +api_put "rolesmapping/cogstack_ingest" '{ + "backend_roles": ["cogstack_ingest"], "hosts": [], - "users": [ - "cogstack_pipeline", - "nifi" - ] + "users": ["cogstack_pipeline", "nifi"] }' -echo "" - -# mnodify passwords for internal build-in users -# -echo "Modifying passwords for internal build-in users ..." -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/logstash" -H 'Content-Type: application/json' $SSL_FLAGS -d" -{ - \"backend_roles\": [ - \"logstash\" - ], - \"password\": \"$ES_LOGSTASH_PASS\", - \"attributes\": {} -}" -echo "" - -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/kibanaro" -H 'Content-Type: application/json' $SSL_FLAGS -d" -{ - \"backend_roles\": [ - \"kibanauser\", - \"readall\" - ], - \"password\": \"$ES_KIBANARO_PASS\", - \"attributes\": {} -}" -echo "" - -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/readall" -H 'Content-Type: application/json' $SSL_FLAGS -d" -{ - \"backend_roles\": [ - \"readall\" - ], - \"password\": \"$ES_READALL_PASS\", - \"attributes\": {} -}" -echo "" - -curl -k -XPUT -u $ELASTIC_USER:$ELASTIC_PASSWORD "$HTTP_PROTOCOL://$ES_HOST:$ES_PORT/_opendistro/_security/api/internalusers/snapshotrestore" -H 'Content-Type: application/json' $SSL_FLAGS -d" -{ - \"backend_roles\": [ - \"snapshotrestore\" - ], - \"password\": \"$ES_SNAPSHOTRESTORE_PASS\", - \"attributes\": {} -}" -echo "" +echo "OpenSearch application security resources configured successfully." diff --git a/security/scripts/create_root_ca_cert.sh b/security/scripts/create_root_ca_cert.sh index 7f2e65a3a..167bbbab1 100755 --- a/security/scripts/create_root_ca_cert.sh +++ b/security/scripts/create_root_ca_cert.sh @@ -15,19 +15,20 @@ # ./certificates/root/.pem - Self-signed X.509 certificate (PEM) # ./certificates/root/.crt - DER-encoded certificate (for Java truststore etc.) # ./certificates/root/.csr - Certificate Signing Request (optional) -# ./certificates/root/.srl - Serial file (used when signing certs) # ./certificates/root/.p12 - PKCS#12 bundle (key + cert) # ./certificates/root/.jks - Java Keystore (.jks) -# ./certificates/root/-truststore.key - Java Truststore (.jks) +# ./certificates/root/-truststore.jks - Java Truststore (.jks) # ============================================================================================================================= set -euo pipefail +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +SECURITY_TEMPLATES_FOLDER="${SCRIPT_DIR}/../templates/" +SECURITY_CERTIFICATES_FOLDER="${SCRIPT_DIR}/../certificates/" +SECURITY_ENV_FOLDER="${SCRIPT_DIR}/../env/" -SECURITY_TEMPLATES_FOLDER="../templates/" -SECURITY_CERTIFICATES_FOLDER="../certificates/" -SECURITY_ENV_FOLDER="../env/" - +# The path is resolved dynamically from this script's location. +# shellcheck disable=SC1090 source "${SECURITY_ENV_FOLDER}certificates_general.env" # === Validate required env vars @@ -42,7 +43,6 @@ EXT_FILE="${SECURITY_TEMPLATES_FOLDER}ssl-extensions-x509.cnf" echo "====================================== CREATE_ROOT_CA_CERT ===============================" echo "ROOT_CERTIFICATE_NAME: $ROOT_CERTIFICATE_NAME" -echo "ROOT_CERTIFICATE_KEYSTORE_PASSWORD: $ROOT_CERTIFICATE_KEYSTORE_PASSWORD" echo "ROOT_CERTIFICATE_KEY_SIZE: $ROOT_CERTIFICATE_KEY_SIZE" echo "ROOT_CERTIFICATE_TIME_VAILIDITY_IN_DAYS: $ROOT_CERTIFICATE_TIME_VAILIDITY_IN_DAYS" echo "ROOT_CERTIFICATES_FOLDER: $ROOT_CERTIFICATES_FOLDER" @@ -50,14 +50,13 @@ echo "========================================================================== mkdir -p "${ROOT_CERTIFICATES_FOLDER}" -# remove any existing files to avoid confusion -rm -f "${ROOT_CERTIFICATES_FOLDER}*" +# Remove existing generated files to avoid mixing certificate generations. +find "$ROOT_CERTIFICATES_FOLDER" -mindepth 1 -maxdepth 1 -type f -delete KEY_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.key" CSR_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.csr" PEM_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.pem" CRT_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.crt" -SRL_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.srl" P12_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}.p12" JKS_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}-keystore.jks" TRUSTSTORE_FILE="${ROOT_CERTIFICATES_FOLDER}${ROOT_CERTIFICATE_NAME}-truststore.jks" @@ -69,15 +68,15 @@ openssl genrsa -out "$KEY_FILE" "$ROOT_CERTIFICATE_KEY_SIZE" # === Generate CSR echo "📜 Generating self-signed certificate: $CRT_FILE" openssl req -x509 \ - -newkey rsa:${ROOT_CERTIFICATE_KEY_SIZE} \ - -keyout "$KEY_FILE" \ + -new \ + -key "$KEY_FILE" \ -sha256 \ -nodes \ - -days $ROOT_CERTIFICATE_TIME_VAILIDITY_IN_DAYS \ + -days "$ROOT_CERTIFICATE_TIME_VAILIDITY_IN_DAYS" \ -out "$CRT_FILE" \ -extensions v3_ca \ -config "$EXT_FILE" \ - -outform DER \ + -outform DER # === Convert to PEM format (text-based) openssl x509 -inform DER -in "$CRT_FILE" -out "$PEM_FILE" -outform PEM @@ -124,7 +123,8 @@ keytool -importcert \ # === Set permissions echo "🔐 Setting permissions..." -find "$ROOT_CERTIFICATES_FOLDER" -type f -exec chmod 644 {} \; -find "$ROOT_CERTIFICATES_FOLDER" -type d -exec chmod 755 {} \; +chmod 600 "$KEY_FILE" "$P12_FILE" "$JKS_FILE" "$TRUSTSTORE_FILE" +chmod 644 "$CSR_FILE" "$PEM_FILE" "$CRT_FILE" +chmod 755 "$ROOT_CERTIFICATES_FOLDER" echo "✅ Root CA + PKCS#12 + Keystore + Truststore created successfully." diff --git a/security/scripts/es_native_cert_generator.sh b/security/scripts/es_native_cert_generator.sh index c4eda0549..fe433641c 100755 --- a/security/scripts/es_native_cert_generator.sh +++ b/security/scripts/es_native_cert_generator.sh @@ -44,7 +44,7 @@ instances: - $ES_INSTANCE_NAME_1 - es01 - localhost - $ES_HOSTNAMES +$ES_HOSTNAMES ip: - 127.0.0.1 - name: $ES_INSTANCE_NAME_2 @@ -52,7 +52,7 @@ instances: - $ES_INSTANCE_NAME_2 - es02 - localhost - $ES_HOSTNAMES +$ES_HOSTNAMES ip: - 127.0.0.1 - name: $ES_INSTANCE_NAME_3 @@ -60,7 +60,7 @@ instances: - $ES_INSTANCE_NAME_3 - es02 - localhost - $ES_HOSTNAMES +$ES_HOSTNAMES ip: - 127.0.0.1 - name: $ES_INSTANCE_ALTERNATIVE_1_NAME @@ -68,7 +68,7 @@ instances: - $ES_INSTANCE_ALTERNATIVE_1_NAME - es02 - localhost - $ES_HOSTNAMES +$ES_HOSTNAMES ip: - 127.0.0.1 - name: $ES_INSTANCE_ALTERNATIVE_2_NAME @@ -76,7 +76,7 @@ instances: - $ES_INSTANCE_ALTERNATIVE_2_NAME - es02 - localhost - $ES_HOSTNAMES +$ES_HOSTNAMES ip: - 127.0.0.1 - name: $ES_INSTANCE_ALTERNATIVE_3_NAME @@ -84,45 +84,40 @@ instances: - $ES_INSTANCE_ALTERNATIVE_3_NAME - es02 - localhost - $ES_HOSTNAMES +$ES_HOSTNAMES ip: - 127.0.0.1 EOF -if [[ ! -f /certs/es_native_ca_bundle.zip ]]; then +if [[ ! -f /certs/elastic-stack-ca.p12 ]]; then echo "Generating root-ca certificates for native ES" - bin/elasticsearch-certutil ca --silent --days $ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS --out /certs/elastic-stack-ca.p12 --pass $ES_CERTIFICATE_PASSWORD<<<$ES_CERTIFICATE_PASSWORD - bin/elasticsearch-certutil cert --silent --ca /certs/elastic-stack-ca.p12 --pass $ES_CERTIFICATE_PASSWORD<<<""$ES_CERTIFICATE_PASSWORD" - - " - # the above blank line is to avoid answering prompt, don't delete it -fi; + bin/elasticsearch-certutil ca --silent \ + --days "$ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS" \ + --out /certs/elastic-stack-ca.p12 \ + --pass "$ES_CERTIFICATE_PASSWORD" +fi if [[ ! -f /certs/es_native_certs_bundle.zip ]]; then echo "Generating CSR certficates for ES clusters" - bin/elasticsearch-certutil cert --silent --out /certs/es_native_certs_bundle.zip --in config/certificates/instances.yml --days $ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS --ca /certs/elastic-stack-ca.p12<< EOF -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -EOF -fi; + bin/elasticsearch-certutil cert --silent \ + --out /certs/es_native_certs_bundle.zip \ + --in config/certificates/instances.yml \ + --days "$ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS" \ + --ca /certs/elastic-stack-ca.p12 \ + --ca-pass "$ES_CERTIFICATE_PASSWORD" \ + --pass "$ES_CERTIFICATE_PASSWORD" +fi if [[ ! -f /certs/es_native_certs_bundle_pem.zip ]]; then echo "Generating PEM certficates for ES clusters" - bin/elasticsearch-certutil cert --pem --silent --out /certs/es_native_certs_bundle_pem.zip --in config/certificates/instances.yml --days $ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS --ca /certs/elastic-stack-ca.p12<< EOF -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -$ES_CERTIFICATE_PASSWORD -EOF -fi; + bin/elasticsearch-certutil cert --pem --silent \ + --out /certs/es_native_certs_bundle_pem.zip \ + --in config/certificates/instances.yml \ + --days "$ES_CERTIFICATE_TIME_VALIDITY_IN_DAYS" \ + --ca /certs/elastic-stack-ca.p12 \ + --ca-pass "$ES_CERTIFICATE_PASSWORD" \ + --pass "$ES_CERTIFICATE_PASSWORD" +fi unzip /certs/es_native_certs_bundle_pem.zip -d /certs/elasticsearch unzip /certs/es_native_certs_bundle.zip -d /certs/elasticsearch @@ -258,10 +253,9 @@ find /certs -type d -exec chmod 755 \{\} \;; find /certs -type f -exec chmod 755 \{\} \;; # Convert p12 certificates to PEM -openssl pkcs12 -in /certs/elastic-stack-ca.p12 -out /certs/elastic-stack-ca.crt.pem -clcerts -nokeys -password pass:$ES_CERTIFICATE_PASSWORD -openssl pkcs12 -in /certs/elastic-stack-ca.p12 -out /certs/elastic-stack-ca.key.pem -nocerts -nodes -password pass:$ES_CERTIFICATE_PASSWORD +openssl pkcs12 -in /certs/elastic-stack-ca.p12 -out /certs/elastic-stack-ca.crt.pem -clcerts -nokeys -password "pass:$ES_CERTIFICATE_PASSWORD" +openssl pkcs12 -in /certs/elastic-stack-ca.p12 -out /certs/elastic-stack-ca.key.pem -nocerts -nodes -password "pass:$ES_CERTIFICATE_PASSWORD" zip -ur /certs/es_native_certs_bundle_pem.zip /certs/elastic-stack-ca.crt.pem /certs/elastic-stack-ca.key.pem cp -rf /certs/* /usr/share/elasticsearch/config/certificates/ - diff --git a/security/scripts/nifi_init_create_user_auth.sh b/security/scripts/nifi_init_create_user_auth.sh index 30ef2e83f..e06086bcc 100755 --- a/security/scripts/nifi_init_create_user_auth.sh +++ b/security/scripts/nifi_init_create_user_auth.sh @@ -13,25 +13,47 @@ # - NIFI_SINGLE_USER_CREDENTIALS_USERNAME # - NIFI_SINGLE_USER_CREDENTIALS_PASSWORD # -# ⚠️ Must be run from the root of the CogStack-NiFi repository. -# # Usage: -# ./nifi_init_create_user_auth.sh +# bash security/scripts/nifi_init_create_user_auth.sh # ============================================================================== set -euo pipefail +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd -- "${SCRIPT_DIR}/../.." && pwd)" +DEPLOY_DIR="${REPO_ROOT}/deploy" + +# Load the repository's existing Docker and security .env files so Compose +# interpolation behaves the same way as the deploy/Makefile targets. +# shellcheck disable=SC1091 +source "${DEPLOY_DIR}/export_env_vars.sh" + +remove_existing_nifi_containers() { + local container_id + local -a container_ids=() + + while IFS= read -r container_id; do + if [[ -n "$container_id" ]]; then + container_ids+=("$container_id") + fi + done < <(docker ps -a -q --filter name="cogstack-nifi*") + + if (( ${#container_ids[@]} > 0 )); then + docker container rm -f "${container_ids[@]}" + fi +} + echo "🧹 Removing any existing 'cogstack-nifi' container..." -docker container rm -f $(docker ps -a -q --filter name="cogstack-nifi*") || true +remove_existing_nifi_containers echo "🚀 Starting NiFi container (for credential injection)..." -docker compose --project-directory ../deploy -f ../deploy/services.yml up -d nifi +docker compose --project-directory "${DEPLOY_DIR}" -f "${DEPLOY_DIR}/services.yml" up -d nifi echo "🔐 Setting NiFi single-user credentials from inside the container..." -docker exec -it cogstack-nifi \ +docker exec cogstack-nifi \ /bin/bash /opt/nifi/nifi-current/security_scripts/nifi_create_single_user_auth.sh echo "🧼 Removing temporary NiFi container..." -docker container rm -f $(docker ps -a -q --filter name="cogstack-nifi*") || true +remove_existing_nifi_containers echo "✅ NiFi single-user credential setup completed." diff --git a/security/scripts/nifi_toolkit_security.sh b/security/scripts/nifi_toolkit_security.sh deleted file mode 100755 index c8d1605fa..000000000 --- a/security/scripts/nifi_toolkit_security.sh +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env bash - -# ============================================================================== -# ⚠️ Legacy: NiFi Toolkit TLS Setup Script -# -# This script uses the Apache NiFi Toolkit (TLS tool) to generate: -# - `nifi.key` (private key) -# - `nifi.pem` (PEM-formatted cert) -# - `nifi.crt` (X.509 DER cert) -# - `nifi-keystore.jks` / `nifi.p12` (Java Keystore) -# - `nifi-truststore.jks` (Truststore) -# - `nifi.csr` (Certificate Signing Request) -# -# Output directory: -# ../certificates/nifi/ -# -# ⚠️ This script is NOT used by default — OpenSSL-based flows have replaced it. -# Kept here for backwards compatibility or future fallback. -# -# Usage: -# ./nifi_toolkit_security.sh -# ============================================================================== - - -set -euo pipefail - -SECURITY_TEMPLATES_FOLDER="../templates/" -SECURITY_CERTIFICATES_FOLDER="../certificates/" -SECURITY_ENV_FOLDER="../env/" - -# === Load environment variables -source ../../deploy/general.env -source ../../deploy/nifi.env -source "${SECURITY_ENV_FOLDER}certificates_general.env" -source "${SECURITY_ENV_FOLDER}certificates_nifi.env" - -# === Defaults -NIFI_TOOLKIT_VERSION="${NIFI_TOOLKIT_VERSION:-${NIFI_TOOLKIT_VERSION}}" -NIFI_CERTIFICATE_TIME_VAILIDITY_IN_DAYS="${NIFI_CERTIFICATE_TIME_VAILIDITY_IN_DAYS:-1460}" -NIFI_KEYSTORE_PASSWORD="${NIFI_KEYSTORE_PASSWORD:-cogstackNifi}" -OUTPUT_DIRECTORY="${SECURITY_CERTIFICATES_FOLDER}nifi/" -SECURITY_ROOT_CA_FOLDER="${SECURITY_CERTIFICATES_FOLDER}root/" -PATH_TO_NIFI_PROPERTIES_FILE="./../../../nifi/conf/nifi.properties" -EXT_FILE="${SECURITY_TEMPLATES_FOLDER}ssl-extensions-x509.cnf" - -NIFI_CERTIFICATE_NAME="nifi" -NIFI_KEY_FILE="${NIFI_CERTIFICATE_NAME}.key" -NIFI_CSR_FILE="${NIFI_CERTIFICATE_NAME}.csr" -NIFI_CRT_FILE="${NIFI_CERTIFICATE_NAME}.crt" -NIFI_PEM_FILE="${NIFI_CERTIFICATE_NAME}.pem" -NIFI_P12_FILE="${NIFI_CERTIFICATE_NAME}.p12" -NIFI_JKS_FILE="${NIFI_CERTIFICATE_NAME}-keystore.jks" -NIFI_TRUSTSTORE_FILE="${NIFI_CERTIFICATE_NAME}-truststore.jks" - -ROOT_CA_PEM="${SECURITY_ROOT_CA_FOLDER}${ROOT_CERTIFICATE_NAME}.pem" -ROOT_CA_KEY="${SECURITY_ROOT_CA_FOLDER}${ROOT_CERTIFICATE_NAME}.key" - - -# === NiFi Toolkit Download -if [ ! -d "./nifi_toolkit" ]; then - if [ ! -f "nifi-toolkit-${NIFI_TOOLKIT_VERSION}-bin.zip" ]; then - wget "https://archive.apache.org/dist/nifi/${NIFI_TOOLKIT_VERSION}/nifi-toolkit-${NIFI_TOOLKIT_VERSION}-bin.zip" - fi - unzip "nifi-toolkit-${NIFI_TOOLKIT_VERSION}-bin.zip" - mv "nifi-toolkit-${NIFI_TOOLKIT_VERSION}" nifi_toolkit - rm "nifi-toolkit-${NIFI_TOOLKIT_VERSION}-bin.zip" -fi - -# === Handle JVM options on Windows -OLD_JAVA_OPTS=${JAVA_OPTS:-} -export JAVA_OPTS="-Xmx2048m -Xms2048m" - -echo "🧹 Cleaning up any previous certs in ${OUTPUT_DIRECTORY}" -rm -rf "${OUTPUT_DIRECTORY}nifi*" - - -echo "🔑 Generating NiFi private key" -openssl genrsa -out "$NIFI_KEY_FILE" 4096 - -echo "📄 Generating Certificate Signing Request (CSR)" -openssl req -new \ - -key "$NIFI_KEY_FILE" \ - -out "$NIFI_CSR_FILE" \ - -config "$EXT_FILE" - -echo "✅ Signing CSR using Root CA with SAN + extensions" -openssl x509 -req \ - -in "$NIFI_CSR_FILE" \ - -CA "$ROOT_CA_PEM" \ - -CAkey "$ROOT_CA_KEY" \ - -CAcreateserial \ - -out "$NIFI_PEM_FILE" \ - -days "$NIFI_CERTIFICATE_TIME_VAILIDITY_IN_DAYS" \ - -sha256 \ - -extfile "$EXT_FILE" \ - -extensions v3_leaf - -echo "📎 Converting PEM to DER format (.crt)" -openssl x509 -in "$NIFI_PEM_FILE" -outform DER -out "$NIFI_CRT_FILE" - -echo "📦 Creating PKCS#12 Bundle" -openssl pkcs12 -export \ - -in "$NIFI_PEM_FILE" \ - -inkey "$NIFI_KEY_FILE" \ - -out "$NIFI_P12_FILE" \ - -name "$NIFI_CERTIFICATE_NAME" \ - -passout pass:"$NIFI_KEYSTORE_PASSWORD" - -echo "☕ Creating Java Keystore (.jks)" -keytool -importkeystore \ - -destkeystore "$NIFI_JKS_FILE" \ - -srckeystore "$NIFI_P12_FILE" \ - -srcstoretype PKCS12 \ - -alias "$NIFI_CERTIFICATE_NAME" \ - -srcstorepass "$NIFI_KEYSTORE_PASSWORD" \ - -deststorepass "$NIFI_KEYSTORE_PASSWORD" \ - -noprompt - -echo "🔐 Creating Truststore (.jks)" -keytool -importcert \ - -file "$NIFI_PEM_FILE" \ - -alias "$NIFI_CERTIFICATE_NAME" \ - -keystore "$NIFI_TRUSTSTORE_FILE" \ - -storepass "$NIFI_KEYSTORE_PASSWORD" \ - -noprompt - - -echo "✅ All NiFi TLS artifacts created successfully in: $SECURITY_CERTIFICATES_FOLDER" - -# === Move files to output dir -mkdir -p "$OUTPUT_DIRECTORY" -mv nifi.key nifi.pem nifi-keystore.jks nifi-truststore.jks nifi.crt nifi.csr nifi.p12 "$OUTPUT_DIRECTORY" - -# === Patch NiFi props -sed -i "" "s|nifi\.security\.keystorePasswd=.*|nifi.security.keystorePasswd=${NIFI_KEYSTORE_PASSWORD}|" ../../nifi/conf/nifi.properties -sed -i "" "s|nifi\.security\.keyPasswd=.*|nifi.security.keyPasswd=${NIFI_KEYSTORE_PASSWORD}|" ../../nifi/conf/nifi.properties -sed -i "" "s|nifi\.security\.truststorePasswd=.*|nifi.security.truststorePasswd=${NIFI_KEYSTORE_PASSWORD}|" ../../nifi/conf/nifi.properties - -# === Patch NiFi Registry props -sed -i "" "s|nifi\.registry\.security\.keystorePasswd=.*|nifi.registry.security.keystorePasswd=${NIFI_KEYSTORE_PASSWORD}|" ../../nifi/nifi-registry/nifi-registry.properties -sed -i "" "s|nifi\.registry\.security\.keyPasswd=.*|nifi.registry.security.keyPasswd=${NIFI_KEYSTORE_PASSWORD}|" ../../nifi/nifi-registry/nifi-registry.properties -sed -i "" "s|nifi\.registry\.security\.truststorePasswd=.*|nifi.registry.security.truststorePasswd=${NIFI_KEYSTORE_PASSWORD}|" ../../nifi/nifi-registry/nifi-registry.properties - -# === Reset Java opts -export JAVA_OPTS=$OLD_JAVA_OPTS - -echo "✅ NiFi TLS certificates created via NiFi Toolkit and applied to config files." diff --git a/security/templates/ssl-extensions-x509.cnf b/security/templates/ssl-extensions-x509.cnf index 78d848a2b..e5e74171c 100755 --- a/security/templates/ssl-extensions-x509.cnf +++ b/security/templates/ssl-extensions-x509.cnf @@ -48,6 +48,20 @@ DNS.25 = localhost IP.1 = 127.0.0.1 email.1 = admin@cogstack.net +[v3_gitea] +basicConstraints = critical, CA:FALSE +keyUsage = critical, digitalSignature, keyEncipherment +extendedKeyUsage = serverAuth +subjectAltName = @gitea_alt_names +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer + +[gitea_alt_names] +DNS.1 = gitea +DNS.2 = cogstack-gitea +DNS.3 = localhost +IP.1 = 127.0.0.1 + [req] default_bits = 4096 string_mask = utf8only diff --git a/services/gitea/app.ini b/services/gitea/app.ini index d534f4fa8..e82428b0b 100644 --- a/services/gitea/app.ini +++ b/services/gitea/app.ini @@ -274,8 +274,8 @@ SSH_LISTEN_PORT = 22 ; ; $ openssl pkcs12 -in cert.pfx -out cert.pem -nokeys ; ; $ openssl pkcs12 -in cert.pfx -out key.pem -nocerts -nodes ; ; Paths are relative to CUSTOM_PATH -CERT_FILE = /certificates/root/root-ca.pem -KEY_FILE = /certificates/root/root-ca.key +CERT_FILE = /certificates/gitea/gitea.pem +KEY_FILE = /certificates/gitea/gitea.key SSH_DOMAIN = 0.0.0.0 DOMAIN = localhost HTTP_PORT = 3000 diff --git a/uv.lock b/uv.lock new file mode 100644 index 000000000..b5c54d8e4 --- /dev/null +++ b/uv.lock @@ -0,0 +1,2773 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" +resolution-markers = [ + "python_full_version >= '3.13'", + "python_full_version == '3.12.*'", + "python_full_version < '3.12'", +] + +[[package]] +name = "annotated-types" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, +] + +[[package]] +name = "asn1crypto" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/cf/d547feed25b5244fcb9392e288ff9fdc3280b10260362fc45d37a798a6ee/asn1crypto-1.5.1.tar.gz", hash = "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c", size = 121080, upload-time = "2022-03-15T14:46:52.889Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/7f/09065fd9e27da0eda08b4d6897f1c13535066174cc023af248fc2a8d5e5a/asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67", size = 105045, upload-time = "2022-03-15T14:46:51.055Z" }, +] + +[[package]] +name = "avro" +version = "1.12.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/68/973b9c682aa2c3cf2b05fc4c961af11b9be1d9b46604f65aed23cd4fd1e6/avro-1.12.2.tar.gz", hash = "sha256:e900e7b59a4781f63d9e935e88f6ec50c4d60be3f4adf9c63b51ed39d578fe08", size = 105500, upload-time = "2026-08-17T17:58:19.935Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/10/48f47d5da1fda33e2951019d38449e201efd9042117ad660aa4dcbf9268b/avro-1.12.2-py3-none-any.whl", hash = "sha256:bcbed5da65d298cb4ceb1e61f1a61b5b9fb180049c904f4045022338a95bf686", size = 134848, upload-time = "2026-08-17T17:58:18.369Z" }, +] + +[[package]] +name = "backports-zstd" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/75/f0/9ba1b05811aa5f5434f69768253129460a5744e1814f359efba39a01ce20/backports_zstd-1.7.0.tar.gz", hash = "sha256:1a967189c1822b6e85a2e550fdfc88a3272c17633ea0a4732dac5911a8034f2b", size = 1003722, upload-time = "2026-08-15T17:26:43.96Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/14/416e2e75d434bf2b8433ba54f10e5ec01a63bb1dfc7c6a82151faa735b50/backports_zstd-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:165a8898c5514b69533edf4ab1f4f4b4bacc62a137a76f36889b473150ec28a5", size = 438790, upload-time = "2026-08-15T17:25:16.171Z" }, + { url = "https://files.pythonhosted.org/packages/08/0d/97e70a1d47d660c3854dfbbbd8a8ea9a98a0993976d9b0e0da07525dcff1/backports_zstd-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:700ebb797956767679dbca38e45eaa5c21630e460e31ef53bb4b849125bb5d87", size = 367595, upload-time = "2026-08-15T17:25:17.382Z" }, + { url = "https://files.pythonhosted.org/packages/5c/8f/9b09bc4d29c2b697e9557a54e1e52b264a1ca3babd36542e7be6a0609cf6/backports_zstd-1.7.0-cp311-cp311-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:47f14a24428a2bc070e26c402f8d6d25676345c32fa116b16b60167a2925df2a", size = 507936, upload-time = "2026-08-15T17:25:18.695Z" }, + { url = "https://files.pythonhosted.org/packages/89/e6/7eb513bb06fb2733e71cf358f227969996b74883de86458935c09f08d1c4/backports_zstd-1.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c358e72e5ff8f23e9f3ec778be4d67ddc5ced3e6d8f03521db29d7357a773fc3", size = 477864, upload-time = "2026-08-15T17:25:19.833Z" }, + { url = "https://files.pythonhosted.org/packages/3f/68/fe0e57f2c8e04560eecc106bba18ad62d0576001722e8c5b619bb4517991/backports_zstd-1.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6c8c183027eae38f5b0643d153f7f91e569d22ee8db25639aea0745677a38ed8", size = 583229, upload-time = "2026-08-15T17:25:21.144Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d3/5944fbdfc8c03b8ef72c73c36652a32bb251b1b8ccefab07a8a8fbf202cb/backports_zstd-1.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5d8493f71d9c5c05d18554afc6bb9a319a6674478e8f3042c7e22900c3a06f4d", size = 642898, upload-time = "2026-08-15T17:25:22.379Z" }, + { url = "https://files.pythonhosted.org/packages/96/f2/661bd15e062ceb1a20a78e40598fee599a31472e60a7961dcd75b467c94f/backports_zstd-1.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b2e505d8923e1e9224cf249b99c92cf728e9eb91fbd1e07a9c2816013621fad3", size = 493145, upload-time = "2026-08-15T17:25:23.833Z" }, + { url = "https://files.pythonhosted.org/packages/00/6b/454369a552a3d114b293706441dc43412639a30665b9551959f0773e9b62/backports_zstd-1.7.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5d1bdc293267200e31baf35aa142c6d0ac3e8cce650f79c84e6a32980dfbfd5c", size = 567043, upload-time = "2026-08-15T17:25:25.104Z" }, + { url = "https://files.pythonhosted.org/packages/bc/f2/e7af20299deb43f52aaf24f74e60b994201aea6d22c8a2adaaa13dc4b109/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d85c18170e8cdba339edc67a5021cf79ccc858f5fda6aeae71f9015c5e463f6", size = 483881, upload-time = "2026-08-15T17:25:26.634Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c4/0882cfac8714345cfcc5ba139e16c7b64aee9f2fec3ebff9de77131f1d14/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:96a6f8d3f4cefb6b11ebfc30fc0d970430ecfb169a6555990734a2a46977ec4b", size = 511455, upload-time = "2026-08-15T17:25:27.808Z" }, + { url = "https://files.pythonhosted.org/packages/be/85/01cfbb2f07475ac1091ea93fbd04762c95ee6d82c937e2508072e12a9eb6/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c2c01cb823ed1b2422905a9791759bdc986e44e7a12b4661e9d712d5c8946016", size = 587585, upload-time = "2026-08-15T17:25:29.012Z" }, + { url = "https://files.pythonhosted.org/packages/61/2f/f378daf513ca0feb5740aa4b1291c5133e5095830a7052da6088974f477b/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:86785aef2b4663a97c932d829ddc9565354cc628e2ae61764d9d93c8b186d65f", size = 564894, upload-time = "2026-08-15T17:25:30.28Z" }, + { url = "https://files.pythonhosted.org/packages/34/ef/cb031d27b06863aa666d49dada3c1010151306b98861b8b826ae722af1a6/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:633ceee3ba86f696fc4e992f7bce558c132c26d04d64d0bb8c2f5d487d5b3aee", size = 633546, upload-time = "2026-08-15T17:25:31.652Z" }, + { url = "https://files.pythonhosted.org/packages/f0/44/b5f1480f6c250ed72f22e8682d6532f992aef0e2033b21b8d8bff96be034/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a80bc6a8c9aeaad76cc3ecd58067ec038a764807186b0df970c760df39b89c7", size = 497152, upload-time = "2026-08-15T17:25:32.957Z" }, + { url = "https://files.pythonhosted.org/packages/db/30/13f0447faef940a763dfddf6ba2d4941bb45a350bba8c9ba56a22e933dfd/backports_zstd-1.7.0-cp311-cp311-win32.whl", hash = "sha256:1713271e2faea852a1682a6143c19c3506cd2e1b71f60a8924c59a9d2554d2b2", size = 292182, upload-time = "2026-08-15T17:25:34.262Z" }, + { url = "https://files.pythonhosted.org/packages/99/04/8f67d5436f7ef4b1d286b8b186fb4a3e371416921110f8dc0f6c4d9e497d/backports_zstd-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:ae840be71108f6020567dd389c973e70a4374a6c0b03c02d3242c8a98a9b3cdb", size = 329717, upload-time = "2026-08-15T17:25:35.517Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/e446bb3d4520e618571a929ceb7776124d6f8491ea17d3355a8867deb031/backports_zstd-1.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:8827a5601c749a986faa163f3b59d59eedc5947812be114f7132c3d4ad153fee", size = 292294, upload-time = "2026-08-15T17:25:36.797Z" }, + { url = "https://files.pythonhosted.org/packages/df/23/240495dec973dcfb34816248956ca8d05b32fb75936c226c1cf497b83b83/backports_zstd-1.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5548a857bb0fcc5449cc3687353547396c6b1ecd4bd882f1cd34fa8d29e70ca", size = 439047, upload-time = "2026-08-15T17:25:38.084Z" }, + { url = "https://files.pythonhosted.org/packages/6d/24/5556959c7d03bfee5ff14d7f07dd9bf8de737c69f81d823a32784ab39c34/backports_zstd-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bab192b934fdf5a03df4752556d9c8af2d058163fdfbafd4a253cdfe25449a6f", size = 367666, upload-time = "2026-08-15T17:25:39.233Z" }, + { url = "https://files.pythonhosted.org/packages/b2/cb/557db98001c4a7202beed19e8bd42603a2315b80fd5def7e21a0b048ec3b/backports_zstd-1.7.0-cp312-cp312-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:8344260bed9842c415a93d9bfe23ea834e5f27758827d56933d8c0d06db507a2", size = 508475, upload-time = "2026-08-15T17:25:40.367Z" }, + { url = "https://files.pythonhosted.org/packages/40/4b/820acbc2c1d1d945aedca0c0d22546a948630ffb186df523098fbd669a95/backports_zstd-1.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c55e55e1e9dee312bc5e186386e6aa5207482a6d2242bd7c14709ded254f87f", size = 478240, upload-time = "2026-08-15T17:25:41.806Z" }, + { url = "https://files.pythonhosted.org/packages/f9/76/77fa9b385e79d4c106ce15d66681978f39a844b0eb5db02682687246b716/backports_zstd-1.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cf609af3735c7e697ccd13f6b0c88da57c201b6ea63c6afbfe81d6f9b50e298c", size = 583611, upload-time = "2026-08-15T17:25:43.104Z" }, + { url = "https://files.pythonhosted.org/packages/95/a4/fbb7c73336f3279dad36da94382a59755100b656301ea836ebaa42736581/backports_zstd-1.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:676a37971f676830d4f90cee8fdf4e438781596fb2f2d1984ac76c9b3eb39a69", size = 642496, upload-time = "2026-08-15T17:25:44.322Z" }, + { url = "https://files.pythonhosted.org/packages/1e/40/121917bd2671bc3f1507c25503c0554f0b52483edcca4e6210e6d22228df/backports_zstd-1.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:470895d0bcddc850766e593d1b26764fb138c2feed149f515a2627ef9587d54c", size = 496195, upload-time = "2026-08-15T17:25:45.503Z" }, + { url = "https://files.pythonhosted.org/packages/de/c7/c6379a0d734bea1c7f14d07c23258108cc92b994654e25cfe3a3e88cd785/backports_zstd-1.7.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:02f2f6649a342d0901ddb35596ddadb7c3bb1cf6bb54d691e5e0285f1fa0674f", size = 570964, upload-time = "2026-08-15T17:25:46.648Z" }, + { url = "https://files.pythonhosted.org/packages/7a/a4/372c3dd3017c3f93cda0acbc282f8073b70efdc1b56d1fdeebe023660725/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:132ba81fad59d44958b7d10da31545e7128c469cfbc2e268d0eaab96daa64175", size = 484276, upload-time = "2026-08-15T17:25:48.129Z" }, + { url = "https://files.pythonhosted.org/packages/f5/50/83fa7bdd5e1d808203b9143848fdf7e15de399b8119a0d4378b2aea9be78/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a3e1c6ce0b232ee6703ed24ee126e8186107f5a4e56edbd21cd1aa5a8c6bfd12", size = 511963, upload-time = "2026-08-15T17:25:49.666Z" }, + { url = "https://files.pythonhosted.org/packages/56/d2/d4ed32c353148acc18f3b665ab24a677b9c49d3640244424c5d6046400c5/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d7a7cb964eb8d1bb5d039970b16fe54802ea47dc935ae96d9874844a126bf8ff", size = 588025, upload-time = "2026-08-15T17:25:51.288Z" }, + { url = "https://files.pythonhosted.org/packages/ae/5a/df8b5b848e8dfdec6edca55f22067ffbafa081d81aec1313e28155c3fea3/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:12a9842a2ec2854cbec7f252ab29d44c2b772788a9bbafded743ca4bf73b115f", size = 568223, upload-time = "2026-08-15T17:25:52.633Z" }, + { url = "https://files.pythonhosted.org/packages/43/8c/f970f15e7fdbf8a251f121c91364fa68bbc2dfab4d5eca058427dec63397/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:138154eea8ced84394991bf0e819dba6b690306a178dd528c28eee724b7d4aec", size = 632937, upload-time = "2026-08-15T17:25:54.511Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d0/e36c18c87a74421954502d123ff7027e0a63a7624dffa99ec0f7474deff9/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:468b636ed365627b364c94be1c35a52858e13b5bc1fa3f068bbc71b1af65f3d7", size = 500735, upload-time = "2026-08-15T17:25:56.064Z" }, + { url = "https://files.pythonhosted.org/packages/1c/57/fc72280334d2aa94238c5882052263bd7796c1fa924044353c30d058e0c3/backports_zstd-1.7.0-cp312-cp312-win32.whl", hash = "sha256:f026fe2e89b7ff01ba6ebec6abaff34c6063919151a32afb68714cf139e17c50", size = 292394, upload-time = "2026-08-15T17:25:57.469Z" }, + { url = "https://files.pythonhosted.org/packages/71/89/6cea747bdeef34cd12482b17e604b832fdb0962987132b99496f1a6c3f82/backports_zstd-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:2ea62ba2f1a6e6c9e6dc108921f9ae881969ca72e073162fa488d0de3eb2713f", size = 329876, upload-time = "2026-08-15T17:25:58.798Z" }, + { url = "https://files.pythonhosted.org/packages/64/28/b4a17c07d5a50a45cb04592960d1593cdf3b3728968371f332aa3643b804/backports_zstd-1.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:cefb983345c55ccaa20423a4eb96434730e6d640ffa2db9b60e5bedb0fbef94e", size = 292461, upload-time = "2026-08-15T17:25:59.928Z" }, + { url = "https://files.pythonhosted.org/packages/6f/24/32b3358ae3a4df0ebad85ebbce721818c6d76a836119bee76089d103e951/backports_zstd-1.7.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:a3fbcbf819bee2b06b8666b13742098d0f40663ee34e64a12bc360ec0f5e3d89", size = 400913, upload-time = "2026-08-15T17:26:01.089Z" }, + { url = "https://files.pythonhosted.org/packages/af/f3/39ef7dd75eb1e699e25a19212737a73d3c030a0c9fd1d0ed1572b5f8e493/backports_zstd-1.7.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:efee02f18e04c2e9e6d694c5cf9b7457c4bda3ea96f48b1ee69769e06bb9d89f", size = 454915, upload-time = "2026-08-15T17:26:02.294Z" }, + { url = "https://files.pythonhosted.org/packages/76/e8/8209081e094aa98b2f28bac388619c85b1a44aed813d6b3c54d1da79d19a/backports_zstd-1.7.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:ecc95fa0e91d92951d74468e7789afdf91d9e702f40af2d0fcbf0ded4d0f650a", size = 357992, upload-time = "2026-08-15T17:26:03.552Z" }, + { url = "https://files.pythonhosted.org/packages/b3/65/64025302bae4ba924d613e404c6120bf194b5636786960ece274622a4a3e/backports_zstd-1.7.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:34154d82fc0246738159084d146401073f9ac9cfd755b66bb8853ca06037810c", size = 366686, upload-time = "2026-08-15T17:26:04.812Z" }, + { url = "https://files.pythonhosted.org/packages/4a/b9/c4d24d113d28b774662152c462d38d28109741d6d45c1aea7834371741dc/backports_zstd-1.7.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:44b687b1c0be5cb279693d2682f91ff84c559d679b2ef2fbe501fe4b2db2c4bb", size = 447221, upload-time = "2026-08-15T17:26:05.979Z" }, + { url = "https://files.pythonhosted.org/packages/cb/9f/8db55c7f77aec60879844a879ac026065d8f03aab74080701acc060c4168/backports_zstd-1.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dcdbd368659f46b570114eeea36b75347716523870d71f6bc5d7801862aefd6e", size = 438571, upload-time = "2026-08-15T17:26:07.421Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f8/72930ae4bb7bf6b9d6c7c31bce7b3e5751c062269a4ee718066e25f1973b/backports_zstd-1.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eda97fa535d4651a4ccdeed4ee7dde3978369046abc8a7456a7117d4271f9333", size = 367041, upload-time = "2026-08-15T17:26:08.537Z" }, + { url = "https://files.pythonhosted.org/packages/17/9b/7289dc191b34279d8f176bf5b181c3b26f8e049d14a2c0a2637650f034e5/backports_zstd-1.7.0-cp313-cp313-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:7e3999b5141d7f85171822d06112f70f7f317d162f0120530dd2c7a28dbf8add", size = 507676, upload-time = "2026-08-15T17:26:09.909Z" }, + { url = "https://files.pythonhosted.org/packages/7c/4d/6dd730b79ab96532e23fe851003545b4cc79e50c5b4c79ffcbe1b724eec4/backports_zstd-1.7.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69367726f4075c2574746f5883b0dc045805c5b02a81fdf8c829c26d33969de3", size = 477744, upload-time = "2026-08-15T17:26:11.038Z" }, + { url = "https://files.pythonhosted.org/packages/e1/53/11687e5019d56ea47893cf2ba59a6b4884a4e2d1496d0e653aed373b973f/backports_zstd-1.7.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:15e97edfd173ade365c01bac7d9d297fa906686015cdbcb5f32a0d410887826b", size = 583215, upload-time = "2026-08-15T17:26:12.379Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c7/5a8c58542469ab31680c403b844770c119a976fd4cf1000fd7d53e7d0f77/backports_zstd-1.7.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:32a94cdcf16b44395cd55086ea38877395ca6bf3362cb507b0eb86db2a45a6a4", size = 644125, upload-time = "2026-08-15T17:26:13.651Z" }, + { url = "https://files.pythonhosted.org/packages/11/35/be5485e65df95b86c4981ad4a577b505cfeec6b700a46a86e2e3175ac718/backports_zstd-1.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3f4887a8a1fd1290017fe5a1d29a7d1dc5c57f9477fbd64f119316a7e3ae769", size = 492714, upload-time = "2026-08-15T17:26:14.838Z" }, + { url = "https://files.pythonhosted.org/packages/96/8b/a0603458ca08e4a56f09ae58588ce3c0453425e753df704d9aeaabb66ae5/backports_zstd-1.7.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e590313ce156f1d8986dff3107e8ed1651d6d106a56b3a95f965ff8d845ba979", size = 567953, upload-time = "2026-08-15T17:26:16.276Z" }, + { url = "https://files.pythonhosted.org/packages/02/87/2296db4c3c578947c35ccd8dcdf7992316d7e1f5f43cc829c062b3ed9319/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:565270b0d6497970fa97a0df59593ae0d225e4176678bbce851d39e5f8aa422b", size = 483564, upload-time = "2026-08-15T17:26:17.493Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d8/f53a79e6bf3cdb7ae08f95220c80bd0d606f3d6c3482995deaf21d024fb9/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:37ef23c6c522fe935726c8fba6344350973c4a23b06d10194d90d0868b09ff7a", size = 511193, upload-time = "2026-08-15T17:26:18.7Z" }, + { url = "https://files.pythonhosted.org/packages/31/ea/d4e2eb159cd5813debd5a34d0644caff5fe7cf2e569bf5b02a82934aeee7/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b3975330159f1efdd1fba76afe1c7b84f66f26e2bf209b32630fb148d647e0d5", size = 587748, upload-time = "2026-08-15T17:26:20.148Z" }, + { url = "https://files.pythonhosted.org/packages/81/d2/b5ec9709660fb1c193508215d9c30e781fac406183faac7c3c36b1c583a9/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b40bc8cd0a86cbbe8263a9c3a2bf2e34897483516c6d799725412a19524c32e3", size = 565808, upload-time = "2026-08-15T17:26:21.349Z" }, + { url = "https://files.pythonhosted.org/packages/bd/13/004735cc4536483cbd973a60346a9dbc7bb977b13c28b55a11da14bb0a1e/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f37e12ef10747f76901b1f20ef70d33221e861de177dba5ba08552242c6fd4bd", size = 634520, upload-time = "2026-08-15T17:26:22.944Z" }, + { url = "https://files.pythonhosted.org/packages/a3/28/05b11f7084d1100491cf7c60962aafd900c3dd01b1fc1ce85914476cdae0/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5992143b2a8b71b4d17afed20cce2df50f8718228e31d6e716493b1fe9201712", size = 497098, upload-time = "2026-08-15T17:26:24.181Z" }, + { url = "https://files.pythonhosted.org/packages/f5/a5/bdc98d039ddbd5815fc1dd71912bbfb9f820a46ec12004ead51c8d60ea50/backports_zstd-1.7.0-cp313-cp313-win32.whl", hash = "sha256:31ae30d216ffae9243dfa607bcb995f94a70de5765bb8fae1e35ea1ad6497959", size = 291974, upload-time = "2026-08-15T17:26:25.512Z" }, + { url = "https://files.pythonhosted.org/packages/13/7d/fb0da7351e8b152d5149127594972922829281c316618df37a7e724f2eb9/backports_zstd-1.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:8086b4a7443bb2863f7ef8edb317b715d5f3ccec6c5512619bd23d57661ba1b7", size = 329550, upload-time = "2026-08-15T17:26:26.683Z" }, + { url = "https://files.pythonhosted.org/packages/37/f9/109ac272d650483fbdfa611c0040253a405f640604fbc90acc8076c6d37f/backports_zstd-1.7.0-cp313-cp313-win_arm64.whl", hash = "sha256:7eaceeec75e1dbdce40b81fb0ed1ffdb7ce492d970db7f8aabd6a95ccd6c3dd3", size = 292174, upload-time = "2026-08-15T17:26:27.819Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ea/42fe3258e02a65603d1eab26200712e37bef6ea408e7f9dbfd6858bc036a/backports_zstd-1.7.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:de58be0a3109cfb83b4e61e2b6eb770201cc132ee5a7c677cd8e0140ad2be80c", size = 413302, upload-time = "2026-08-15T17:26:36.286Z" }, + { url = "https://files.pythonhosted.org/packages/37/00/486044556d715a7b1a41e9cd69544bf8cb3988b383453657c021d24c5c27/backports_zstd-1.7.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:c13f73d0389cdc88b02c05e8175d8ad3030e9e70ee079748763166aa843b647d", size = 343983, upload-time = "2026-08-15T17:26:37.603Z" }, + { url = "https://files.pythonhosted.org/packages/02/f8/f078a32c80ef7546ec2d1206a38bedf4d150cbaac653f8f32d7329f987ff/backports_zstd-1.7.0-pp311-pypy311_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:a2e30ea49c673533d40eb73d0f7abc0ebe9d2e4fc6dbada5ad60b42ff98ffa86", size = 422218, upload-time = "2026-08-15T17:26:38.911Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e2/e5151b85ca9ddfce58388f0fb0316adaacda25d494d2a668842e09f02063/backports_zstd-1.7.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e3f760ee9d16378e3cde9d862e1c9ced577a86736763fb486b9f731d5116807", size = 395760, upload-time = "2026-08-15T17:26:40.09Z" }, + { url = "https://files.pythonhosted.org/packages/78/bf/fd7d55452431d836b3ae81170689f19ddab210fa6c385a72e22006320afe/backports_zstd-1.7.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25caf23dc36de3b839d16c25893751323cf51a8c986f2d01478c16b25133e2e8", size = 415725, upload-time = "2026-08-15T17:26:41.322Z" }, + { url = "https://files.pythonhosted.org/packages/f9/fe/f30ad42bd082b9c6d419c23311a8904a55e248e07c61bf6b91e1691188aa/backports_zstd-1.7.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a64e796c7eee69dfe45827b2e003b7731785ec890c73ea5f5fbc30a1c362fcad", size = 316244, upload-time = "2026-08-15T17:26:42.614Z" }, +] + +[[package]] +name = "bokeh" +version = "3.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "jinja2" }, + { name = "narwhals" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pillow" }, + { name = "pyyaml" }, + { name = "tornado", marker = "sys_platform != 'emscripten'" }, + { name = "xyzservices" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/31/7ee0c4dfd0255631b0624ce01be178704f91f763f02a1879368eb109befd/bokeh-3.8.2.tar.gz", hash = "sha256:8e7dcacc21d53905581b54328ad2705954f72f2997f99fc332c1de8da53aa3cc", size = 6529251, upload-time = "2026-01-06T00:20:06.568Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/a8/877f306720bc114c612579c5af36bcb359026b83d051226945499b306b1a/bokeh-3.8.2-py3-none-any.whl", hash = "sha256:5e2c0d84f75acb25d60efb9e4d2f434a791c4639b47d685534194c4e07bd0111", size = 7207131, upload-time = "2026-01-06T00:20:04.917Z" }, +] + +[[package]] +name = "boto3" +version = "1.43.86" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, + { name = "jmespath" }, + { name = "s3transfer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/a0/b8693637bee21e266a52f3e1b8bb9fe4897934aa62c55cc132f8721c1b8f/boto3-1.43.86.tar.gz", hash = "sha256:aca7b5d7f31a90ad37bec773552ec9bfb57e0029c9aa0f0f4d51d5bf9607b1c4", size = 112685, upload-time = "2026-09-01T19:24:02.867Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/dd/f4874f7bab882a778178b03965b1474c63f2e8bd2eea5dd714f06b0e8713/boto3-1.43.86-py3-none-any.whl", hash = "sha256:94543a5ce482df8bb6a0bf8a944bf5ccf6625889b1df0d7886dfc3311ebd4169", size = 140026, upload-time = "2026-09-01T19:24:00.638Z" }, +] + +[[package]] +name = "botocore" +version = "1.43.86" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jmespath" }, + { name = "python-dateutil" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/77/0ed1c398b7d3aa5d02c1b15df32a049e07961339fe41640af1440079c2f7/botocore-1.43.86.tar.gz", hash = "sha256:0e943c77ab6a54aaaf4d57e6026ede5c3dca341af71ce91f71849a6eae9d5dbf", size = 16059433, upload-time = "2026-09-01T19:23:57.72Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/59/eb95d57ea576feaf1693f5e914f9f27ff9961429cf9ecbc85cef610a6d84/botocore-1.43.86-py3-none-any.whl", hash = "sha256:4efc7fbd6e7616edbd55623bb585a044906149b9a5d3d8558420506526e5a5ac", size = 15751556, upload-time = "2026-09-01T19:23:54.013Z" }, +] + +[[package]] +name = "branca" +version = "0.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jinja2" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/32/14/9d409124bda3f4ab7af3802aba07181d1fd56aa96cc4b999faea6a27a0d2/branca-0.8.2.tar.gz", hash = "sha256:e5040f4c286e973658c27de9225c1a5a7356dd0702a7c8d84c0f0dfbde388fe7", size = 27890, upload-time = "2025-10-06T10:28:20.305Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/50/fc9680058e63161f2f63165b84c957a0df1415431104c408e8104a3a18ef/branca-0.8.2-py3-none-any.whl", hash = "sha256:2ebaef3983e3312733c1ae2b793b0a8ba3e1c4edeb7598e10328505280cf2f7c", size = 26193, upload-time = "2025-10-06T10:28:19.255Z" }, +] + +[[package]] +name = "brotli" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/16/c92ca344d646e71a43b8bb353f0a6490d7f6e06210f8554c8f874e454285/brotli-1.2.0.tar.gz", hash = "sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a", size = 7388632, upload-time = "2025-11-05T18:39:42.86Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/ef/f285668811a9e1ddb47a18cb0b437d5fc2760d537a2fe8a57875ad6f8448/brotli-1.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744", size = 863110, upload-time = "2025-11-05T18:38:12.978Z" }, + { url = "https://files.pythonhosted.org/packages/50/62/a3b77593587010c789a9d6eaa527c79e0848b7b860402cc64bc0bc28a86c/brotli-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f", size = 445438, upload-time = "2025-11-05T18:38:14.208Z" }, + { url = "https://files.pythonhosted.org/packages/cd/e1/7fadd47f40ce5549dc44493877db40292277db373da5053aff181656e16e/brotli-1.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd", size = 1534420, upload-time = "2025-11-05T18:38:15.111Z" }, + { url = "https://files.pythonhosted.org/packages/12/8b/1ed2f64054a5a008a4ccd2f271dbba7a5fb1a3067a99f5ceadedd4c1d5a7/brotli-1.2.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe", size = 1632619, upload-time = "2025-11-05T18:38:16.094Z" }, + { url = "https://files.pythonhosted.org/packages/89/5a/7071a621eb2d052d64efd5da2ef55ecdac7c3b0c6e4f9d519e9c66d987ef/brotli-1.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a", size = 1426014, upload-time = "2025-11-05T18:38:17.177Z" }, + { url = "https://files.pythonhosted.org/packages/26/6d/0971a8ea435af5156acaaccec1a505f981c9c80227633851f2810abd252a/brotli-1.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b", size = 1489661, upload-time = "2025-11-05T18:38:18.41Z" }, + { url = "https://files.pythonhosted.org/packages/f3/75/c1baca8b4ec6c96a03ef8230fab2a785e35297632f402ebb1e78a1e39116/brotli-1.2.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3", size = 1599150, upload-time = "2025-11-05T18:38:19.792Z" }, + { url = "https://files.pythonhosted.org/packages/0d/1a/23fcfee1c324fd48a63d7ebf4bac3a4115bdb1b00e600f80f727d850b1ae/brotli-1.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae", size = 1493505, upload-time = "2025-11-05T18:38:20.913Z" }, + { url = "https://files.pythonhosted.org/packages/36/e5/12904bbd36afeef53d45a84881a4810ae8810ad7e328a971ebbfd760a0b3/brotli-1.2.0-cp311-cp311-win32.whl", hash = "sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03", size = 334451, upload-time = "2025-11-05T18:38:21.94Z" }, + { url = "https://files.pythonhosted.org/packages/02/8b/ecb5761b989629a4758c394b9301607a5880de61ee2ee5fe104b87149ebc/brotli-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24", size = 369035, upload-time = "2025-11-05T18:38:22.941Z" }, + { url = "https://files.pythonhosted.org/packages/11/ee/b0a11ab2315c69bb9b45a2aaed022499c9c24a205c3a49c3513b541a7967/brotli-1.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84", size = 861543, upload-time = "2025-11-05T18:38:24.183Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2f/29c1459513cd35828e25531ebfcbf3e92a5e49f560b1777a9af7203eb46e/brotli-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b", size = 444288, upload-time = "2025-11-05T18:38:25.139Z" }, + { url = "https://files.pythonhosted.org/packages/3d/6f/feba03130d5fceadfa3a1bb102cb14650798c848b1df2a808356f939bb16/brotli-1.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d", size = 1528071, upload-time = "2025-11-05T18:38:26.081Z" }, + { url = "https://files.pythonhosted.org/packages/2b/38/f3abb554eee089bd15471057ba85f47e53a44a462cfce265d9bf7088eb09/brotli-1.2.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca", size = 1626913, upload-time = "2025-11-05T18:38:27.284Z" }, + { url = "https://files.pythonhosted.org/packages/03/a7/03aa61fbc3c5cbf99b44d158665f9b0dd3d8059be16c460208d9e385c837/brotli-1.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f", size = 1419762, upload-time = "2025-11-05T18:38:28.295Z" }, + { url = "https://files.pythonhosted.org/packages/21/1b/0374a89ee27d152a5069c356c96b93afd1b94eae83f1e004b57eb6ce2f10/brotli-1.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28", size = 1484494, upload-time = "2025-11-05T18:38:29.29Z" }, + { url = "https://files.pythonhosted.org/packages/cf/57/69d4fe84a67aef4f524dcd075c6eee868d7850e85bf01d778a857d8dbe0a/brotli-1.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7", size = 1593302, upload-time = "2025-11-05T18:38:30.639Z" }, + { url = "https://files.pythonhosted.org/packages/d5/3b/39e13ce78a8e9a621c5df3aeb5fd181fcc8caba8c48a194cd629771f6828/brotli-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036", size = 1487913, upload-time = "2025-11-05T18:38:31.618Z" }, + { url = "https://files.pythonhosted.org/packages/62/28/4d00cb9bd76a6357a66fcd54b4b6d70288385584063f4b07884c1e7286ac/brotli-1.2.0-cp312-cp312-win32.whl", hash = "sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161", size = 334362, upload-time = "2025-11-05T18:38:32.939Z" }, + { url = "https://files.pythonhosted.org/packages/1c/4e/bc1dcac9498859d5e353c9b153627a3752868a9d5f05ce8dedd81a2354ab/brotli-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44", size = 369115, upload-time = "2025-11-05T18:38:33.765Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d4/4ad5432ac98c73096159d9ce7ffeb82d151c2ac84adcc6168e476bb54674/brotli-1.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab", size = 861523, upload-time = "2025-11-05T18:38:34.67Z" }, + { url = "https://files.pythonhosted.org/packages/91/9f/9cc5bd03ee68a85dc4bc89114f7067c056a3c14b3d95f171918c088bf88d/brotli-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c", size = 444289, upload-time = "2025-11-05T18:38:35.6Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b6/fe84227c56a865d16a6614e2c4722864b380cb14b13f3e6bef441e73a85a/brotli-1.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f", size = 1528076, upload-time = "2025-11-05T18:38:36.639Z" }, + { url = "https://files.pythonhosted.org/packages/55/de/de4ae0aaca06c790371cf6e7ee93a024f6b4bb0568727da8c3de112e726c/brotli-1.2.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6", size = 1626880, upload-time = "2025-11-05T18:38:37.623Z" }, + { url = "https://files.pythonhosted.org/packages/5f/16/a1b22cbea436642e071adcaf8d4b350a2ad02f5e0ad0da879a1be16188a0/brotli-1.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c", size = 1419737, upload-time = "2025-11-05T18:38:38.729Z" }, + { url = "https://files.pythonhosted.org/packages/46/63/c968a97cbb3bdbf7f974ef5a6ab467a2879b82afbc5ffb65b8acbb744f95/brotli-1.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48", size = 1484440, upload-time = "2025-11-05T18:38:39.916Z" }, + { url = "https://files.pythonhosted.org/packages/06/9d/102c67ea5c9fc171f423e8399e585dabea29b5bc79b05572891e70013cdd/brotli-1.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18", size = 1593313, upload-time = "2025-11-05T18:38:41.24Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4a/9526d14fa6b87bc827ba1755a8440e214ff90de03095cacd78a64abe2b7d/brotli-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5", size = 1487945, upload-time = "2025-11-05T18:38:42.277Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e8/3fe1ffed70cbef83c5236166acaed7bb9c766509b157854c80e2f766b38c/brotli-1.2.0-cp313-cp313-win32.whl", hash = "sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a", size = 334368, upload-time = "2025-11-05T18:38:43.345Z" }, + { url = "https://files.pythonhosted.org/packages/ff/91/e739587be970a113b37b821eae8097aac5a48e5f0eca438c22e4c7dd8648/brotli-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8", size = 369116, upload-time = "2025-11-05T18:38:44.609Z" }, + { url = "https://files.pythonhosted.org/packages/17/e1/298c2ddf786bb7347a1cd71d63a347a79e5712a7c0cba9e3c3458ebd976f/brotli-1.2.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21", size = 863080, upload-time = "2025-11-05T18:38:45.503Z" }, + { url = "https://files.pythonhosted.org/packages/84/0c/aac98e286ba66868b2b3b50338ffbd85a35c7122e9531a73a37a29763d38/brotli-1.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac", size = 445453, upload-time = "2025-11-05T18:38:46.433Z" }, + { url = "https://files.pythonhosted.org/packages/ec/f1/0ca1f3f99ae300372635ab3fe2f7a79fa335fee3d874fa7f9e68575e0e62/brotli-1.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e", size = 1528168, upload-time = "2025-11-05T18:38:47.371Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a6/2ebfc8f766d46df8d3e65b880a2e220732395e6d7dc312c1e1244b0f074a/brotli-1.2.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7", size = 1627098, upload-time = "2025-11-05T18:38:48.385Z" }, + { url = "https://files.pythonhosted.org/packages/f3/2f/0976d5b097ff8a22163b10617f76b2557f15f0f39d6a0fe1f02b1a53e92b/brotli-1.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63", size = 1419861, upload-time = "2025-11-05T18:38:49.372Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/d76df7176a2ce7616ff94c1fb72d307c9a30d2189fe877f3dd99af00ea5a/brotli-1.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b", size = 1484594, upload-time = "2025-11-05T18:38:50.655Z" }, + { url = "https://files.pythonhosted.org/packages/d3/93/14cf0b1216f43df5609f5b272050b0abd219e0b54ea80b47cef9867b45e7/brotli-1.2.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361", size = 1593455, upload-time = "2025-11-05T18:38:51.624Z" }, + { url = "https://files.pythonhosted.org/packages/b3/73/3183c9e41ca755713bdf2cc1d0810df742c09484e2e1ddd693bee53877c1/brotli-1.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888", size = 1488164, upload-time = "2025-11-05T18:38:53.079Z" }, + { url = "https://files.pythonhosted.org/packages/64/6a/0c78d8f3a582859236482fd9fa86a65a60328a00983006bcf6d83b7b2253/brotli-1.2.0-cp314-cp314-win32.whl", hash = "sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d", size = 339280, upload-time = "2025-11-05T18:38:54.02Z" }, + { url = "https://files.pythonhosted.org/packages/f5/10/56978295c14794b2c12007b07f3e41ba26acda9257457d7085b0bb3bb90c/brotli-1.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3", size = 375639, upload-time = "2025-11-05T18:38:55.67Z" }, +] + +[[package]] +name = "brotlicffi" +version = "1.2.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/97/7845739a36828ffe751a1c6b240692f552fd7ecf65026c51326c0a4aa369/brotlicffi-1.2.0.2.tar.gz", hash = "sha256:5e0fbd13644cf1f6015e75fa5e0ad8fdce1048d9c9ff90b0ce826174b249ee35", size = 478755, upload-time = "2026-08-21T17:29:18.415Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/a2/edda4f3fc7143434402eacad1e91433fe68ae648c22738eeddb6138638ba/brotlicffi-1.2.0.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ad05ca993234cf947f0ad71b1c8bc0af3d74e0410b1e2c32bb99de0cef6a994b", size = 438789, upload-time = "2026-08-21T17:28:55.708Z" }, + { url = "https://files.pythonhosted.org/packages/0d/9c/506dc8edabb3cf9339c89f1ecc80a218aa166bb83b9f2e9cc1da67314072/brotlicffi-1.2.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0636cb5a85f31c36e08953d09a226cb788be900b976f81302895e3cf35d5e707", size = 1541246, upload-time = "2026-08-21T17:28:57.669Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d6/74cee9f9fbea8c42030a81056c64e092030a95bd2756ea83da1d1e8f5f29/brotlicffi-1.2.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:97bae40d45ebc2a6ac7b1c9b30825496a257192194b672ef5869e2df93467f69", size = 1542129, upload-time = "2026-08-21T17:28:59.502Z" }, + { url = "https://files.pythonhosted.org/packages/24/cc/c32630b042ec2a13e8342e6ecb6b9d3531b1be4647b733d6fd365976041c/brotlicffi-1.2.0.2-cp314-cp314t-win32.whl", hash = "sha256:8f3f9bd61293dc48359763e693951393f39656086315067cf97e23e23e8911ab", size = 346840, upload-time = "2026-08-21T17:29:01.085Z" }, + { url = "https://files.pythonhosted.org/packages/ee/0b/83cac3075721fe4c253ea1cc5310cb687c2f7d987e0fd60eb3ed769c24c0/brotlicffi-1.2.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:908add8a9c0eea00f5de799dc6de9f6d205d9ee11afabc7c03d6812c481200e2", size = 386079, upload-time = "2026-08-21T17:29:02.667Z" }, + { url = "https://files.pythonhosted.org/packages/2e/71/c27f24b8334f65f2492601c7764338f156cb904d2ffe0061e6004a76d9cc/brotlicffi-1.2.0.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:d5a8ffa154f16660ab818d78045b55fa6f9970f1ca4c38998766e99c672071cb", size = 438885, upload-time = "2026-08-21T17:29:04.113Z" }, + { url = "https://files.pythonhosted.org/packages/ef/22/d8fd1a4d09b7ab563b89380395e09151d2ef1344be31594df6a6987d4028/brotlicffi-1.2.0.2-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec6b1af7b7a8ce788354f2c603651ada0fba166ec31ab879e2eec462a3e6dbf4", size = 1534365, upload-time = "2026-08-21T17:29:05.878Z" }, + { url = "https://files.pythonhosted.org/packages/06/78/076419ed6c2c6aa3eaac6fd6b076502b4be89d50625fcdc513cd4aeca718/brotlicffi-1.2.0.2-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22916101de0e7ff535f2edf54b52a85591853b8ae9a98737643defdd3c063a3a", size = 1536851, upload-time = "2026-08-21T17:29:07.599Z" }, + { url = "https://files.pythonhosted.org/packages/35/dd/31ae9945cbd605339fb51c9a609f7dbb182cd361adeabc1d470142357206/brotlicffi-1.2.0.2-cp39-abi3-win32.whl", hash = "sha256:df1d34c4ad9adbf7f63a6b42f7d0e4dfd259c88141b85145b57abecc1abc3b24", size = 342379, upload-time = "2026-08-21T17:29:09.05Z" }, + { url = "https://files.pythonhosted.org/packages/95/ae/afd54e744df93b51cc29f6a19beccf9998b25743d7177697390de10479d1/brotlicffi-1.2.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:489ca4da3ee65926d72bf01584b61088a9da6bdd1bb01b2040901e1beaffa8f0", size = 379761, upload-time = "2026-08-21T17:29:10.687Z" }, + { url = "https://files.pythonhosted.org/packages/37/da/a5b65a86725d772504a348193cf1fab5ad6410794b422bf81faa17a96a66/brotlicffi-1.2.0.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:cf500bb9e02e1474ced1ecf22f74c568de2816b3627af6352ec51ac5e09e60ee", size = 407459, upload-time = "2026-08-21T17:29:12.385Z" }, + { url = "https://files.pythonhosted.org/packages/e1/c7/a253288e66ee340f2f6320eda7022daa723f2918438d586a59e9c998aa27/brotlicffi-1.2.0.2-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dbb81489562dd5363bf86d9a8edb0ec8c97049b0819ba4936fc023e8847248bc", size = 406825, upload-time = "2026-08-21T17:29:13.992Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6c/ea8e3d34e1d64c5e5a920bb0c89bf9e92badf973937a60922820395e622d/brotlicffi-1.2.0.2-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc7647657e4f3d73eab591910dbecb57d1ecaea7aa3dd04e6d704a2756fe0c59", size = 402903, upload-time = "2026-08-21T17:29:15.524Z" }, + { url = "https://files.pythonhosted.org/packages/4e/17/17c22d48819001ca08cadab63b09b00e0c56a7579478aa7c2623f4280de6/brotlicffi-1.2.0.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:5eb5563173afb92c9111b180349ff17d7c83c79febabadca5de983b552565c3c", size = 378395, upload-time = "2026-08-21T17:29:16.857Z" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/d2/16d99a0c4948febc0ebd133a13b2f688ff7f8cb04da971e1128872ce0c03/cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12", size = 183838, upload-time = "2026-08-03T21:19:29.637Z" }, + { url = "https://files.pythonhosted.org/packages/cd/95/31b535a9f0220ae9f357de4a08d57ce89cb417653c2fd9f075f50822a388/cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1", size = 184168, upload-time = "2026-08-03T21:19:30.764Z" }, + { url = "https://files.pythonhosted.org/packages/ad/5a/4707a0dc1f203f5dde5a907b0d4e3c25d71120241048bd5bc6f1bb9d4e71/cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0", size = 211805, upload-time = "2026-08-03T21:19:31.867Z" }, + { url = "https://files.pythonhosted.org/packages/ad/66/c19feabb28485b6e0bbaaafa90837a1ef5d302e90f2178bd33f17a49879b/cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813", size = 218716, upload-time = "2026-08-03T21:19:32.896Z" }, + { url = "https://files.pythonhosted.org/packages/a7/92/500760486c8baab49a7a8a58ba7fc3355ec3974b454b8a09e528efde9e1d/cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990", size = 205569, upload-time = "2026-08-03T21:19:34.142Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a7/a67c733254d6e7373f7822f8082d8d6beade791e0cf12a7611f376fa61c7/cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af", size = 204907, upload-time = "2026-08-03T21:19:35.174Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a4/4399daaf8f7dfee9d7c3327fdb0426ee041cc63edc358b93911ceb2bfc7a/cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632", size = 217807, upload-time = "2026-08-03T21:19:36.286Z" }, + { url = "https://files.pythonhosted.org/packages/28/f7/dabe6da2466ecbd82dc62e7342dc6b1065dad990c06f00f0ede9ebf2a0ed/cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd", size = 221252, upload-time = "2026-08-03T21:19:37.416Z" }, + { url = "https://files.pythonhosted.org/packages/ce/87/616202d8e51342c07d2534c510111c4cc37201775ce8f60802c9335d1edd/cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a", size = 214214, upload-time = "2026-08-03T21:19:38.507Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c6/ab025d75d2c26c19b087c0124e75ee31cb65032f4fe345d356d8c507ab97/cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa", size = 219408, upload-time = "2026-08-03T21:19:39.809Z" }, + { url = "https://files.pythonhosted.org/packages/db/e2/7e8109f65445bdc673a7b54f02c677de462db75674220fd1335efc8eb598/cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3", size = 174470, upload-time = "2026-08-03T21:19:41.246Z" }, + { url = "https://files.pythonhosted.org/packages/73/c0/77ba02423c2f7d7091143c45cd49e0e6575c4c1967394bb542bd923a9b74/cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0", size = 185096, upload-time = "2026-08-03T21:19:42.615Z" }, + { url = "https://files.pythonhosted.org/packages/7c/47/9f1f85f9672ceda4984dc6c4f8824e8558992a2972c3d3c81fb8eb28d4ba/cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455", size = 179941, upload-time = "2026-08-03T21:19:43.747Z" }, + { url = "https://files.pythonhosted.org/packages/10/69/43965eccfdead3b9220015fd1320e117be8c6ed01a62ffab76eeb752f5d5/cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0", size = 184821, upload-time = "2026-08-03T21:19:44.887Z" }, + { url = "https://files.pythonhosted.org/packages/54/7d/16e5a096677b5e313ca80cd5e5170efa3ea44624a82bb111925522da64b1/cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf", size = 184719, upload-time = "2026-08-03T21:19:46.129Z" }, + { url = "https://files.pythonhosted.org/packages/56/e6/8941622732edec876dd17d0453dce07317ae96db34f2ec1436c9d3785986/cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a", size = 214799, upload-time = "2026-08-03T21:19:47.218Z" }, + { url = "https://files.pythonhosted.org/packages/44/de/f98430906df1545ffde0d543dd124a7a439bc2cd32b36b9c53f805df7333/cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890", size = 222389, upload-time = "2026-08-03T21:19:48.331Z" }, + { url = "https://files.pythonhosted.org/packages/6a/5b/717f1526b9957b34456313c31645c5b82b8fb5c3fe9e4752999be7128bfc/cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50", size = 210249, upload-time = "2026-08-03T21:19:49.543Z" }, + { url = "https://files.pythonhosted.org/packages/64/b3/f8aa4f3e34986c7e4ec45072d1b1b9dd295b6b18007b45518d79726dd725/cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e", size = 208775, upload-time = "2026-08-03T21:19:50.918Z" }, + { url = "https://files.pythonhosted.org/packages/b1/db/dceb9dd5b231e1da801793f8acc9f3c52a7e1afe40bb1aae37e02b0faad5/cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf", size = 221822, upload-time = "2026-08-03T21:19:52.054Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d2/6cd24ae3be000a634109c247d1475d62e5616d0dc78c82770942ec384248/cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517", size = 225232, upload-time = "2026-08-03T21:19:53.109Z" }, + { url = "https://files.pythonhosted.org/packages/cb/52/3fa190537004dd7f0ab860a6dc7c0175b8667f68d1e618a46f5498d30250/cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735", size = 223597, upload-time = "2026-08-03T21:19:54.515Z" }, + { url = "https://files.pythonhosted.org/packages/80/fb/0bb75b7039588c074b37ae99f40d9bfddf990ecb2fbc346ebccd2e56b9be/cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e", size = 175292, upload-time = "2026-08-03T21:19:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/d9/79/615cc094e2fb508cade7de88d3b4f6c4ec2bab695c97bce9153dc65aadf5/cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a", size = 185919, upload-time = "2026-08-03T21:19:56.89Z" }, + { url = "https://files.pythonhosted.org/packages/70/c6/d0ea84713fe46b243a436a18fcd47d639732747e21635c8a27191b06dc30/cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80", size = 180093, upload-time = "2026-08-03T21:19:58.155Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f4/035513d4117049066b4779dc3b7c0c0fdad175fa13731c9f4003f1cd1478/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e", size = 194248, upload-time = "2026-08-03T21:19:59.399Z" }, + { url = "https://files.pythonhosted.org/packages/76/af/2aeb4dbb5fc41a04161ae9ff1518de7cec08e164f44a8ce6a4cf7fd2cd1d/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c", size = 196908, upload-time = "2026-08-03T21:20:00.746Z" }, + { url = "https://files.pythonhosted.org/packages/a7/46/2e5fdde8555706dd98139a910ca11be02809f3f605ce956f655d0214e100/cffi-2.1.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6", size = 184805, upload-time = "2026-08-03T21:20:02.02Z" }, + { url = "https://files.pythonhosted.org/packages/55/41/4c7042f317b9217502988f0873af87e16ad606dc20f84e546e3e6ce9764c/cffi-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971", size = 184764, upload-time = "2026-08-03T21:20:03.141Z" }, + { url = "https://files.pythonhosted.org/packages/43/1f/1c3d90d91811c8f86ced9ed637956c54bfe5b79ca98fe976d7f8c8979f6b/cffi-2.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c", size = 214722, upload-time = "2026-08-03T21:20:04.377Z" }, + { url = "https://files.pythonhosted.org/packages/37/6f/3b5ce4c3b2192d250f04908f2bfd91ef34552ec8f7716a5d4abdb8d67bb2/cffi-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125", size = 222369, upload-time = "2026-08-03T21:20:05.544Z" }, + { url = "https://files.pythonhosted.org/packages/02/10/4b3c75dde3d9663c9e02ba05c2668b954f671d4bbe346413ca8c696b295a/cffi-2.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264", size = 210175, upload-time = "2026-08-03T21:20:06.75Z" }, + { url = "https://files.pythonhosted.org/packages/df/62/14f74b9543e605d17701dc797b815958b8bb70b7624ce1b832ddad48ed6c/cffi-2.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3", size = 208670, upload-time = "2026-08-03T21:20:08.04Z" }, + { url = "https://files.pythonhosted.org/packages/95/95/86342356ff5953b3fb06f7ef7c5bee212d45e770abc7218d451b9148313c/cffi-2.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2", size = 221824, upload-time = "2026-08-03T21:20:09.274Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ff/7b3429ff53aafe931ed8a5fc69f481bbef7ba6de87ddcbb63d08f483f613/cffi-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b", size = 225148, upload-time = "2026-08-03T21:20:10.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/34/a95870b9221e09cf4f2ce3178b1a210abdfe63a1bd357da940418d7b8d15/cffi-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7", size = 223564, upload-time = "2026-08-03T21:20:12.165Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/839b50531021a647fb5e929f72cf97bc1ff702b5472166164b5b6e76b851/cffi-2.1.1-cp313-cp313-win32.whl", hash = "sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac", size = 175263, upload-time = "2026-08-03T21:20:13.559Z" }, + { url = "https://files.pythonhosted.org/packages/60/a6/8b149b2c3f2e11aaa1618ef64500b45f50f22c57a977a4dff1aff1f91042/cffi-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d", size = 185688, upload-time = "2026-08-03T21:20:14.69Z" }, + { url = "https://files.pythonhosted.org/packages/01/9a/11f687cb39d6a3504060d5242f04f48c735afb4d3d533958a20594890cb2/cffi-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973", size = 180078, upload-time = "2026-08-03T21:20:15.917Z" }, + { url = "https://files.pythonhosted.org/packages/d3/7b/d6bbf82b8b96e7391438898c42f5bd96dd02030fd5b64937d248220003e2/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c", size = 194064, upload-time = "2026-08-03T21:20:17.148Z" }, + { url = "https://files.pythonhosted.org/packages/94/e6/bcc91b283be94735e268487a054004f0aa19947b6348fa367db53230abc8/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb", size = 196720, upload-time = "2026-08-03T21:20:18.268Z" }, + { url = "https://files.pythonhosted.org/packages/d9/99/c4b0c17cacdc9c3b8f280026286a9826d6a208c0f047591a3c3ce99b91fd/cffi-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54", size = 184964, upload-time = "2026-08-03T21:20:19.708Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a9/9db617d05d7367c1ad0ab00b3aa6e6f9281edd689b4ee9ea0e5a84e89c97/cffi-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72", size = 184962, upload-time = "2026-08-03T21:20:20.833Z" }, + { url = "https://files.pythonhosted.org/packages/67/b8/b42132ca113dc567d37684437b46ca1dafc885902b02a110a02d5b511857/cffi-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1", size = 222328, upload-time = "2026-08-03T21:20:22.118Z" }, + { url = "https://files.pythonhosted.org/packages/80/10/c5c0cbf0a657aecf59ef511409734230bf556f05a0d6c9eed7aa5c0a0166/cffi-2.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062", size = 209985, upload-time = "2026-08-03T21:20:23.401Z" }, + { url = "https://files.pythonhosted.org/packages/d5/6c/bfa0b87b03b9238148beca990292843c9396ba069b54496596594173de7b/cffi-2.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03", size = 208530, upload-time = "2026-08-03T21:20:24.628Z" }, + { url = "https://files.pythonhosted.org/packages/e9/02/4e7d553a7ac4b4238b38b3c1b80d486e9d4436f8d2acbf87a0997fe3f402/cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96", size = 221525, upload-time = "2026-08-03T21:20:25.758Z" }, + { url = "https://files.pythonhosted.org/packages/82/1d/a4aaf9babd75acb4d5f223bff71533bee748dd770a382619a798960ee9ba/cffi-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527", size = 225053, upload-time = "2026-08-03T21:20:26.985Z" }, + { url = "https://files.pythonhosted.org/packages/81/10/5dc0e7bdd18e22107054288283380fc97a06ae3f1656a106908d666a3c88/cffi-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13", size = 223213, upload-time = "2026-08-03T21:20:28.277Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e9/d0061c364cde06ee43168a0d076ac1da512cbc380d44767b844ba34fe2b6/cffi-2.1.1-cp314-cp314-win32.whl", hash = "sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c", size = 177682, upload-time = "2026-08-03T21:20:44.288Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1c3e01e3ba14c39f6d10bfbac52753b7e22259e38088e5cfe1d704918690/cffi-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48", size = 187949, upload-time = "2026-08-03T21:20:45.623Z" }, + { url = "https://files.pythonhosted.org/packages/87/5b/da4e39efe18eeb89cf580ea9cfc66b6a7c3eadb808fc0cc1d3a295cb5a5d/cffi-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836", size = 182947, upload-time = "2026-08-03T21:20:46.955Z" }, + { url = "https://files.pythonhosted.org/packages/23/59/40338bf421c5accea1d45158170c87006ef1cd371b05c077e76476949728/cffi-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3", size = 188504, upload-time = "2026-08-03T21:20:29.495Z" }, + { url = "https://files.pythonhosted.org/packages/7d/47/5ecf1023850036e674c77ec4de86182d309ae344e39e7cba984b7df5d647/cffi-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2", size = 188259, upload-time = "2026-08-03T21:20:31.291Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9c/92934c3bea9f785b23eba304538c0b4d37a2a96d2431eb3a1bc87a11aa19/cffi-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94", size = 223864, upload-time = "2026-08-03T21:20:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/4d/45/ba4c93527bc38616a8bd36488acb69a2212d60486794f0c1f318949bbb76/cffi-2.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc", size = 211538, upload-time = "2026-08-03T21:20:33.808Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/b6ef565e452acb932fb0cb5443f44a78efbd1233e566f02b5a83855e9115/cffi-2.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29", size = 210688, upload-time = "2026-08-03T21:20:34.974Z" }, + { url = "https://files.pythonhosted.org/packages/9a/95/eff5f0cee78d2eabc7eebffec40d3fc1876b5f3c95582e018bb4b99601f2/cffi-2.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676", size = 223803, upload-time = "2026-08-03T21:20:36.564Z" }, + { url = "https://files.pythonhosted.org/packages/fa/01/579d39fb8bef00a335a23d83757b44feb24cd6345a2c451b64cb67b9c362/cffi-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e", size = 226763, upload-time = "2026-08-03T21:20:37.816Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b0/0b44f47c60b01b57b6e2bbd92343f13a85a1d93bc46ccf6e47e244acd99c/cffi-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f", size = 225688, upload-time = "2026-08-03T21:20:38.959Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d2/3b7176cb570a1d3e27faf67b72f591af508036e0d8b2be2ef9af9e8c84bb/cffi-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4", size = 182868, upload-time = "2026-08-03T21:20:40.388Z" }, + { url = "https://files.pythonhosted.org/packages/56/78/31f00c1bcd97c9bbf55f1bfdf5bc809a5de8887473e90bb9960dca825e80/cffi-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e", size = 194104, upload-time = "2026-08-03T21:20:41.725Z" }, + { url = "https://files.pythonhosted.org/packages/7b/1b/58496f2ed0a35de575250c02a43ab3cc2c04d494a88fed31c1cabc0fd176/cffi-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5", size = 186402, upload-time = "2026-08-03T21:20:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/c1/8f/9ebe220eab48a093d1a5a5e339ab0dc7316eef3bb04d63c42f0251b61f50/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d", size = 194043, upload-time = "2026-08-03T21:20:48.179Z" }, + { url = "https://files.pythonhosted.org/packages/ff/69/844bad3ece306c4782c2ecb93597035b6690d48704b803914c199da1e8b3/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b", size = 196737, upload-time = "2026-08-03T21:20:49.457Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8a/af668013284634733f02d683458a0728739c7d6ddb5e14cb0c20832266fe/cffi-2.1.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4", size = 184933, upload-time = "2026-08-03T21:20:50.639Z" }, + { url = "https://files.pythonhosted.org/packages/0c/75/2f5207ff6d1a613133b23a5203cc0c2a628313b5eb3974d7956ae3c57950/cffi-2.1.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8", size = 185002, upload-time = "2026-08-03T21:20:52.173Z" }, + { url = "https://files.pythonhosted.org/packages/e2/31/9e1313b0a6e30e91b3b3d3fff51ae99c857c07738e3afcce1f7334e1b7ab/cffi-2.1.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6", size = 222271, upload-time = "2026-08-03T21:20:53.462Z" }, + { url = "https://files.pythonhosted.org/packages/50/e3/f6234a833e6e08c7007003074723c406559eecf9b48dfc97471e5a8eb7a0/cffi-2.1.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80", size = 209919, upload-time = "2026-08-03T21:20:54.783Z" }, + { url = "https://files.pythonhosted.org/packages/0d/fc/5f74e293fced6edb51af3a46c4ccf6c23c9943774ecb375ddbd522c76add/cffi-2.1.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779", size = 208529, upload-time = "2026-08-03T21:20:56.066Z" }, + { url = "https://files.pythonhosted.org/packages/44/16/29e6d01b388bef055ecd6ca8244b3f4d336bd09e92d5d892187b9601084e/cffi-2.1.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399", size = 221630, upload-time = "2026-08-03T21:20:57.336Z" }, + { url = "https://files.pythonhosted.org/packages/a4/18/fa7f1f6857d5eb88a4ca99ffcbfb7c387a287ccc154c64a73e86314745d7/cffi-2.1.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688", size = 225134, upload-time = "2026-08-03T21:20:58.675Z" }, + { url = "https://files.pythonhosted.org/packages/e0/9f/e8e3dfa04a1b4c241f8c91faacad872b4d4efd051d49764ad4e2fd4b9fea/cffi-2.1.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7", size = 223197, upload-time = "2026-08-03T21:20:59.968Z" }, + { url = "https://files.pythonhosted.org/packages/f8/7e/8debeb04f1ab9fe2a6963964cd6f1aaf7192627b83926586a6a4e089c9fa/cffi-2.1.1-cp315-cp315-win32.whl", hash = "sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac", size = 177683, upload-time = "2026-08-03T21:21:14.901Z" }, + { url = "https://files.pythonhosted.org/packages/e0/31/5158704cc474ab65c1647932e88be78dc0873f47130e253be38bcaf13d01/cffi-2.1.1-cp315-cp315-win_amd64.whl", hash = "sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960", size = 187897, upload-time = "2026-08-03T21:21:16.108Z" }, + { url = "https://files.pythonhosted.org/packages/cc/4b/b3a2da8570c704ffc0f9762cdc3ec0f02c8573798e0b5cf7f11c82bbb70f/cffi-2.1.1-cp315-cp315-win_arm64.whl", hash = "sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1", size = 182935, upload-time = "2026-08-03T21:21:17.271Z" }, + { url = "https://files.pythonhosted.org/packages/d0/ef/5443574510a1207e6f6bc38ba6e1f1de36cb48fef07b2728bb896a21f430/cffi-2.1.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc", size = 188464, upload-time = "2026-08-03T21:21:01.163Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ae/a56fa8c4686ad50e148fcbc8d3ae0d03915ff5c30d795058988c24118cef/cffi-2.1.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab", size = 188262, upload-time = "2026-08-03T21:21:02.382Z" }, + { url = "https://files.pythonhosted.org/packages/53/b2/6187f46f2912276a3ae284076109cc5c8680482f11f766ccf26db4a86427/cffi-2.1.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e", size = 223779, upload-time = "2026-08-03T21:21:03.553Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f6/c3ad28bd19f77047a03084424fbd4cbe997303267c14423737324be0385d/cffi-2.1.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358", size = 211520, upload-time = "2026-08-03T21:21:04.863Z" }, + { url = "https://files.pythonhosted.org/packages/a0/cd/ccac9013a5bd9fd764de118674ab9c805b5ca10c19270d90ee273f8b2240/cffi-2.1.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231", size = 210673, upload-time = "2026-08-03T21:21:06.223Z" }, + { url = "https://files.pythonhosted.org/packages/52/86/2976131c639aead931c5bee5aba67e4b09fbeb8018b6f282f70803f923a7/cffi-2.1.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6", size = 223835, upload-time = "2026-08-03T21:21:07.539Z" }, + { url = "https://files.pythonhosted.org/packages/ac/0c/33a7aeab2f9c76918c52e084beb39c570db3588133412929e8ec06fab90b/cffi-2.1.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94", size = 226705, upload-time = "2026-08-03T21:21:08.774Z" }, + { url = "https://files.pythonhosted.org/packages/e3/26/2cde30fdde421130bfc18f70395731a6e6b2053c6a1978a5258ff04e72fa/cffi-2.1.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5", size = 225539, upload-time = "2026-08-03T21:21:09.911Z" }, + { url = "https://files.pythonhosted.org/packages/6d/cd/a361394c94b2129d604bb846f624a8e88255a3ee33129c434a00d715e64f/cffi-2.1.1-cp315-cp315t-win32.whl", hash = "sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66", size = 182707, upload-time = "2026-08-03T21:21:11.226Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b5/ba2b299993c26577d529b6ae29841f9e15b9fcf004d65f423f4fcf94ade9/cffi-2.1.1-cp315-cp315t-win_amd64.whl", hash = "sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3", size = 193772, upload-time = "2026-08-03T21:21:12.39Z" }, + { url = "https://files.pythonhosted.org/packages/aa/29/35e016098c814cd93de9cd320c66b5bfba14dc6ecedd3cb518fa7c408c69/cffi-2.1.1-cp315-cp315t-win_arm64.whl", hash = "sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692", size = 186360, upload-time = "2026-08-03T21:21:13.636Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/3f/143b048436775b0f76ac3eec145c019e8173ccc2885c8f20319b996d5e83/charset_normalizer-3.5.1.tar.gz", hash = "sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3", size = 171764, upload-time = "2026-08-15T08:20:44.807Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/b6/034f6802e9c3f6418966cfabb7db8c9252cc2429c5098f41cc43af804149/charset_normalizer-3.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30", size = 363585, upload-time = "2026-08-15T08:16:46.646Z" }, + { url = "https://files.pythonhosted.org/packages/d5/fa/6a7e2a7c4b5451912b8c417732df79574354443592a88d616de03da66ae5/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa2bb0b37202dca27175591f761108b5d34096ade1191ffe4808bdf6b1571488", size = 251189, upload-time = "2026-08-15T08:16:48.287Z" }, + { url = "https://files.pythonhosted.org/packages/a4/c8/ab42b07cfd82e919f427fcfaa7c41abae8242833ad1aad66d42bae40b669/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b2b1b3fa5670c127b246df1d0c059defd41f689a868a3b9d79df9b1cac42d22", size = 239724, upload-time = "2026-08-15T08:16:49.67Z" }, + { url = "https://files.pythonhosted.org/packages/e7/80/b9348b5d3041209f98b4cdad7655766369233f1d533f4f4f7558e9717bec/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6e5e4d73d588ca5ed09df1b7dcd1b203d1df3c542e3f50d126c947d432b10731", size = 280078, upload-time = "2026-08-15T08:16:51.228Z" }, + { url = "https://files.pythonhosted.org/packages/82/38/083a24028304bc85bb9e376fed801178423dcbb67495f73b6ea0624e1894/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b54e7e13267d49ffbfe68e25b3cbd774dab38fa37238f71265e91b36146eb21c", size = 276650, upload-time = "2026-08-15T08:16:52.625Z" }, + { url = "https://files.pythonhosted.org/packages/0d/35/731ac04aa0a097fc1c97f0994c375bdb230c6c96619db794208fe664e9ce/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7b742bf31c88566b4bb6335a7f393bb322e580b6bb98df7bd0c25e6e3519ce8", size = 262325, upload-time = "2026-08-15T08:16:54.085Z" }, + { url = "https://files.pythonhosted.org/packages/f5/28/c2028e7021fb89c6e56868ed0e387b8e9aa811abdd2ab3208d6578d2c930/charset_normalizer-3.5.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6ba32c4d2abf1d2fe7cf27d280f4cca5664233b0f885549c7761719eb977f486", size = 261140, upload-time = "2026-08-15T08:16:55.604Z" }, + { url = "https://files.pythonhosted.org/packages/28/f0/0c0ceec6d98b7daa62e361e418135d59685811d79ba11529aad5cdf15e84/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0722590aabf9dc6a6c0343d523c05458fa2b5047dbe6302fd526bb570600753f", size = 252791, upload-time = "2026-08-15T08:16:57.103Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3e/48f4cd187b1c33189d86039e9cbe4f92c05454175504b44ff81806d4d1bf/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:aa1099b956fb795e686d073568f6dc002a0bb89765ea6d5b055dd7d9bf1b116c", size = 240730, upload-time = "2026-08-15T08:16:58.418Z" }, + { url = "https://files.pythonhosted.org/packages/42/85/f9e22af69af67c54cce42be9455d9c81294f918b4ccc454db01f66efcac2/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bd6c173f04743d483881bffa1478d5a4624475b8cd1d2194956a75548e191c18", size = 280791, upload-time = "2026-08-15T08:16:59.918Z" }, + { url = "https://files.pythonhosted.org/packages/fd/4c/9044135f42127630b6fa742feb51256353f6ab87a78f2fdd1de3de955a7f/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:f298e218441525d3794428b4c8b8fb8662c6d3ea79925d4807ee6b9a96a3bca5", size = 259598, upload-time = "2026-08-15T08:17:01.421Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ed/1dd7cfebb4e75812934c49ca3b79757d11948053f7937ab7070c151f3c55/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6e2912d4babbc65196ac13c2f53468dc57fb8b9c25ef913e8c59ddf7c6dc0e1b", size = 278217, upload-time = "2026-08-15T08:17:02.782Z" }, + { url = "https://files.pythonhosted.org/packages/bf/eb/239c84503cc9e3ba6eb34686a24bc66e84f3924efdd7e38e751a19f6bc10/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3d27167433c0d5f18dc850f07d0b3816221984fecdc405d6c157a6f0b8f8e9e6", size = 263417, upload-time = "2026-08-15T08:17:04.216Z" }, + { url = "https://files.pythonhosted.org/packages/37/ab/4e4510e1e288478e2c8333131d1c1382382ba8cd2165053c79e39d1da961/charset_normalizer-3.5.1-cp311-cp311-win32.whl", hash = "sha256:ac00177c4831ffa650f8609e4bdddd5fe09c03b1c0c47acece7e6ea20421598b", size = 181774, upload-time = "2026-08-15T08:17:05.58Z" }, + { url = "https://files.pythonhosted.org/packages/e3/57/32f0ccea59e8612057c61d6fd22ef2cb63cca93c9fe594094919696ac170/charset_normalizer-3.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:f9b1e28d0e8dbfa858abdba91d6b547beaf2df1a59bec6da6faae7b96a4991a9", size = 206653, upload-time = "2026-08-15T08:17:07.075Z" }, + { url = "https://files.pythonhosted.org/packages/17/d4/b65c433fc521e58b5f54293982a5e51c05cb5f2dd3f1c7a6acb65b75324e/charset_normalizer-3.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:ae31a1a1db2ee6cc2942fccaf695c934bc7f3db9f2133a3fef1f367cf1a4ab10", size = 185630, upload-time = "2026-08-15T08:17:08.502Z" }, + { url = "https://files.pythonhosted.org/packages/30/27/78873dc8b6a56357517b74b6bb9568b80450e7bb4f6ef7e3fa9d22aa0bd7/charset_normalizer-3.5.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f", size = 344456, upload-time = "2026-08-15T08:17:10.072Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4c/be49ada26b1f0232d57aa89bbebf997a5cc2332a5616b6eca26ff680044d/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa", size = 238530, upload-time = "2026-08-15T08:17:11.563Z" }, + { url = "https://files.pythonhosted.org/packages/76/84/6f1290fa07ae6978d3960caa3eb1b8019bf9284ab7c2297b00c099ef4250/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369", size = 230200, upload-time = "2026-08-15T08:17:12.919Z" }, + { url = "https://files.pythonhosted.org/packages/e7/a0/47b18adeed31c8f16ba9700f32c1b18594cfa09f47eb672a488c273c22bf/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893", size = 262222, upload-time = "2026-08-15T08:17:14.571Z" }, + { url = "https://files.pythonhosted.org/packages/38/fe/341861ac118dae06f3ec0eb487488af52128f2ef2faf0b11003944d22259/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0", size = 258951, upload-time = "2026-08-15T08:17:16.158Z" }, + { url = "https://files.pythonhosted.org/packages/6f/89/bb5108dc6c3651dca963f2b0a3ba19bbcb370c94e1b6d3e0e844a58e6dca/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08", size = 248801, upload-time = "2026-08-15T08:17:17.683Z" }, + { url = "https://files.pythonhosted.org/packages/b1/ba/ef83ae3aca816393decfa3530976f38a79812d707b80b580ac33b83f9877/charset_normalizer-3.5.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada", size = 244070, upload-time = "2026-08-15T08:17:19.191Z" }, + { url = "https://files.pythonhosted.org/packages/f6/0b/c5292a2462d69b7378ea89793bbb5b2b6fcf6f7dd6d1667f9619094ad553/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9", size = 240110, upload-time = "2026-08-15T08:17:20.547Z" }, + { url = "https://files.pythonhosted.org/packages/46/22/111e5be3b740d5c2a5bfcedb3d237b6591e5c2e82ae9d6ffcb121fe0909c/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e", size = 232836, upload-time = "2026-08-15T08:17:21.895Z" }, + { url = "https://files.pythonhosted.org/packages/f9/d2/d2aad6fe0dbb44b194bf3becb60f5a0ac48446ade999a47fe7bb41eb09a7/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6", size = 262712, upload-time = "2026-08-15T08:17:23.727Z" }, + { url = "https://files.pythonhosted.org/packages/35/5a/337e4663a5eae6de99db940ee8066d4145caafb61327db62deda15313cce/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf", size = 242977, upload-time = "2026-08-15T08:17:25.157Z" }, + { url = "https://files.pythonhosted.org/packages/ca/85/f82f8a92e31c7519410e2e1afdc630f28ec47490ce2c09a11c1a43cbb459/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71", size = 260207, upload-time = "2026-08-15T08:17:26.602Z" }, + { url = "https://files.pythonhosted.org/packages/b7/52/643d11ffd60e9ac2fd1fb87e167a19285b9eefeff4a40e63c87cbfbeab36/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573", size = 250562, upload-time = "2026-08-15T08:17:27.971Z" }, + { url = "https://files.pythonhosted.org/packages/62/16/46556278c2168d12df9da7fede5dc6fc70e60301b26a82bbeec238c9cfe3/charset_normalizer-3.5.1-cp312-cp312-win32.whl", hash = "sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2", size = 178507, upload-time = "2026-08-15T08:17:29.277Z" }, + { url = "https://files.pythonhosted.org/packages/9d/7a/4c6c298171e6b3e745633180ff59350fc0ca0db1ffd28df1e369e0579f71/charset_normalizer-3.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2", size = 200551, upload-time = "2026-08-15T08:17:30.668Z" }, + { url = "https://files.pythonhosted.org/packages/cd/d7/eb95a042f0dd22e304b0b6472b154f3546a1a039a9ee89ccb2a7f61591fc/charset_normalizer-3.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a", size = 180700, upload-time = "2026-08-15T08:17:32.028Z" }, + { url = "https://files.pythonhosted.org/packages/bc/61/2cb6ad133dbbb449fa2d37ccae973232f4827e799af258d15e589a3d1e9e/charset_normalizer-3.5.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9", size = 211584, upload-time = "2026-08-15T08:17:33.597Z" }, + { url = "https://files.pythonhosted.org/packages/18/57/a305c968be1ca13f3dd1b32f445877e97addf55d80b65c7cb35fac82b777/charset_normalizer-3.5.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491", size = 223359, upload-time = "2026-08-15T08:17:35.022Z" }, + { url = "https://files.pythonhosted.org/packages/09/0a/d3646670292ce8d8f8cc11ac067d44885e697a5591f57a9221128da5e7b3/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7", size = 194464, upload-time = "2026-08-15T08:17:36.452Z" }, + { url = "https://files.pythonhosted.org/packages/de/93/d51ec556e01042fed6f993ea859311bc7917b466684182fbbceb6ca24762/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e", size = 197676, upload-time = "2026-08-15T08:17:37.819Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a0/562247944386f7d4ef94467e84876600cc1e0f1b93239aaa9213d2bc3cbd/charset_normalizer-3.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d", size = 340473, upload-time = "2026-08-15T08:17:39.303Z" }, + { url = "https://files.pythonhosted.org/packages/31/e7/1d994be1b93d41e9502b8b0460eaa88a1dd8df335df415db87d6c3e91ab2/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a", size = 240156, upload-time = "2026-08-15T08:17:40.66Z" }, + { url = "https://files.pythonhosted.org/packages/09/53/27923ce5cc6cbccb832037b27dca98882d9c53e9b69e866bbbef4aae7fc8/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe", size = 228246, upload-time = "2026-08-15T08:17:42.003Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/5a97e84d63af1d55c07439cb80e56d99a8efb4295700eb4e18c0d1615d2c/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac", size = 263660, upload-time = "2026-08-15T08:17:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c2/071575791dcc88316c0a9a65ce38897a82e4cfe4a325f0f7fe1b1ac47bcf/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e", size = 260354, upload-time = "2026-08-15T08:17:45.094Z" }, + { url = "https://files.pythonhosted.org/packages/fb/af/63240b0c0248c075c2535a1f1bd992821d8251b9f173abc13329661d09e4/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3", size = 250638, upload-time = "2026-08-15T08:17:46.496Z" }, + { url = "https://files.pythonhosted.org/packages/4d/66/70dfad64f15be09c15ccfee81330a7e515895dbe296dd23114e9a231268a/charset_normalizer-3.5.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876", size = 244583, upload-time = "2026-08-15T08:17:47.963Z" }, + { url = "https://files.pythonhosted.org/packages/c0/24/ef36367d38b9ddd4bccbf72888c342e8de1f5ae506fa0b2dcf970e2732a1/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6", size = 242038, upload-time = "2026-08-15T08:17:49.481Z" }, + { url = "https://files.pythonhosted.org/packages/db/ab/55e683ba0fff2e43adafc10daa3001eac90fdaa419a97227d5a7067eedde/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2", size = 233677, upload-time = "2026-08-15T08:17:50.845Z" }, + { url = "https://files.pythonhosted.org/packages/bd/67/0f40eaf8d1b6e7cf15e82382a2965efaca787fc1c2794b7021d37aaf5036/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591", size = 264491, upload-time = "2026-08-15T08:17:52.61Z" }, + { url = "https://files.pythonhosted.org/packages/5c/64/12b4c2a11ee8df4fcc518c78b0d93e3a92bd3d5253d1617ce74ff0e8c7ef/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c", size = 245196, upload-time = "2026-08-15T08:17:54.023Z" }, + { url = "https://files.pythonhosted.org/packages/37/2e/651d910af6d0fba325eee1cda37ec5443462ed25360e666c144166eb6091/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c", size = 261660, upload-time = "2026-08-15T08:17:55.491Z" }, + { url = "https://files.pythonhosted.org/packages/90/c6/b09e05e6db7f64338e0dc067c79577b1138da86c1e38369096851d96be88/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f", size = 252618, upload-time = "2026-08-15T08:17:57.025Z" }, + { url = "https://files.pythonhosted.org/packages/76/4e/362d4f9fdcdf5556fb2aa3ce7d4a58ebce03ed1ff03aa1d9aca8d02f13f3/charset_normalizer-3.5.1-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4", size = 140362, upload-time = "2026-08-15T08:17:58.425Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d4/703be739b26acce318bd29eb3b25b7209e1b1f527f9eae3d1f1f01fdde2b/charset_normalizer-3.5.1-cp313-cp313-win32.whl", hash = "sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3", size = 177755, upload-time = "2026-08-15T08:18:00.037Z" }, + { url = "https://files.pythonhosted.org/packages/8a/33/56d97ade41c8db611e727168c52ae46c9224c362ec28d4b65d7e9869e8da/charset_normalizer-3.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6", size = 199295, upload-time = "2026-08-15T08:18:01.506Z" }, + { url = "https://files.pythonhosted.org/packages/5b/75/5b20dd1e6573a01a08158fe104104fa2c8abf941745596954185726cd46c/charset_normalizer-3.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0", size = 179856, upload-time = "2026-08-15T08:18:02.929Z" }, + { url = "https://files.pythonhosted.org/packages/29/cd/2b812ce5e888f1ce69a5350281e58aab07ae64a958ecae8912f30865718e/charset_normalizer-3.5.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:774d157f112367ff4abd29019f38f023c24e00e56edc7829c20e358a5a913ad8", size = 212318, upload-time = "2026-08-15T08:18:04.403Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4a/a6ee107430768a5334e6d63f31f148a04a1a491ef161a1ac9415a73f2fa8/charset_normalizer-3.5.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:26422d45fd13551cf564c58932f7d72b4f58b93b0fcf18c35ba6be12b46bb102", size = 224897, upload-time = "2026-08-15T08:18:05.997Z" }, + { url = "https://files.pythonhosted.org/packages/c3/d9/35ae3f64f29d0179c35c3baefe575904df2913dde519129c7f75995a2b1d/charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:09a7bba9f739468c8e78c36a75c33768e53cb1959fc638f510454c14683f00d5", size = 194848, upload-time = "2026-08-15T08:18:07.397Z" }, + { url = "https://files.pythonhosted.org/packages/74/76/f2fc7380f056cc273a53af37f50d08ad54b2c59f61078f31432edcf1c2bd/charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4c9548dc78002099910abaebc0a72ac58b7d30931869e0351c09b507dff4ece3", size = 198163, upload-time = "2026-08-15T08:18:08.989Z" }, + { url = "https://files.pythonhosted.org/packages/e9/40/095ce62fa078483cccc1fa2b36e6bc9580b85422a20ee9f925341c50e44f/charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c", size = 341823, upload-time = "2026-08-15T08:18:10.458Z" }, + { url = "https://files.pythonhosted.org/packages/f1/5a/0e58b1c04a1596e0256f407274a92d5fb2ee21324409d1fab1da48a65b5b/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0", size = 242458, upload-time = "2026-08-15T08:18:11.989Z" }, + { url = "https://files.pythonhosted.org/packages/22/95/b4618ce912e6db0b1aae89ba788e38e8a7eba0f3025cc66e8c0699f977b2/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b7430cf5728e68f6c462254009a6ef4086e1bea43cf2f57aa9c55fb4f50ff96", size = 226717, upload-time = "2026-08-15T08:18:13.401Z" }, + { url = "https://files.pythonhosted.org/packages/8a/76/c681192bbda3d55356db5dadd64381d5202b37c6b598fcda5282e88b5d3d/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab743e9bc90c1f73552ec33e10e3331315acd2c397b36065b591b0181de533cc", size = 266111, upload-time = "2026-08-15T08:18:14.961Z" }, + { url = "https://files.pythonhosted.org/packages/88/be/55127bfca72c0cff6c022488d140d7c5b04c771e3b72e9bdb4836d54979d/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6f7deae3feb4edfa2efaf7c574fe88cbf055038a6abdb40188e4fff66d5699f", size = 263128, upload-time = "2026-08-15T08:18:16.515Z" }, + { url = "https://files.pythonhosted.org/packages/e0/91/39c3af510b0aa32bbda03374259200f28430febfd1bf5e511fe765282ce5/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90", size = 251240, upload-time = "2026-08-15T08:18:18.127Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a5/cbe418bbc6ecdfc3e05a0116002897c4b403a5e838d697e64c78e9f0190d/charset_normalizer-3.5.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:823f82903d189af463d7df250ef1f7f696f3cee08cc8d91deb565e8d425f6506", size = 245282, upload-time = "2026-08-15T08:18:19.625Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a4/689bb42e8e7cd492f3cb64907c6bc00ad247ec9a3628cd3f8eed126e8ae1/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:01e93745f7f219b703b60ba7afead36cfc4242782be5af484673fc500df12da5", size = 244597, upload-time = "2026-08-15T08:18:21.121Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ce/9962938e179cf9f699d3f1e7b3114b5d7642dee6a893745229f9dd04f274/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:329fc3ccb63ad22d867d84c2adea759a64079a37ba4a343433b02c7a2816871e", size = 231376, upload-time = "2026-08-15T08:18:22.57Z" }, + { url = "https://files.pythonhosted.org/packages/85/54/46000450ada53bd9eac5429a2c8c54cd2d9b39c0c255f229aea9af0948a5/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:bb57753e36e4855b8ca375069482250a6246372331a3e4f3407eaebb007443f5", size = 266715, upload-time = "2026-08-15T08:18:24.235Z" }, + { url = "https://files.pythonhosted.org/packages/3d/bb/618749d70f792b44252a777bf89bfb86823b9bbc1ea13fe8ce759b07f38a/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fce8cbd4997efeb450bd298b54f755dcdff18d496f7a5ddbb4867c6d7c88fdc3", size = 245848, upload-time = "2026-08-15T08:18:25.726Z" }, + { url = "https://files.pythonhosted.org/packages/7e/3f/ffb64458527c7668031d5eb095d978de561958dc9f5b53f8e488a533e603/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6c9cdde8becb25a7fde49924511aa2644d6f8081cc8df8e9452724303348d8e3", size = 264521, upload-time = "2026-08-15T08:18:27.193Z" }, + { url = "https://files.pythonhosted.org/packages/4f/ab/74a55fd803916a35ac461daf002708191aac19b546b80dc8cabfedc63d98/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9ac4444d8d4fd4c4bd08bf451ed3167aa9e7ec6cdb41b648794f1d1103652e36", size = 253054, upload-time = "2026-08-15T08:18:28.568Z" }, + { url = "https://files.pythonhosted.org/packages/a0/2a/6a9034b7d3c60b17499afb482df5878bf9fa20b50cc3887d5ef017a833db/charset_normalizer-3.5.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:f03ac127268b43ef4fe9e6ab6794a6794b49485a0cc0c1db79876d2f33f75bc7", size = 140580, upload-time = "2026-08-15T08:18:30.214Z" }, + { url = "https://files.pythonhosted.org/packages/f3/46/1d362e1a00d035d66b9869e1281eee115907f7e390a16a07824ab5737360/charset_normalizer-3.5.1-cp314-cp314-win32.whl", hash = "sha256:1f5883d77fd409a261abb5dc8ccbe335720d798b1de4abb3b1d47ccbbc76b53b", size = 180325, upload-time = "2026-08-15T08:18:31.877Z" }, + { url = "https://files.pythonhosted.org/packages/7a/7c/4938c329b6a9d446f6a59aa2092ff7118f274209b5ed0e26893d1d30a63c/charset_normalizer-3.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b", size = 204175, upload-time = "2026-08-15T08:18:33.466Z" }, + { url = "https://files.pythonhosted.org/packages/ac/33/eeb384dbd8dec570661354592f4f2e1b2fcc92585624d146a000caf53841/charset_normalizer-3.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:4bea7f8ebe90bbd7f0e4a2de42ca6924ba23e3e76418c408ff82f1d46fabd687", size = 184123, upload-time = "2026-08-15T08:18:34.913Z" }, + { url = "https://files.pythonhosted.org/packages/1c/6c/c73fa9d5a85f6ab05395de61c5f6984e0a9ff40bb5ff888d46dff02526c6/charset_normalizer-3.5.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:fbc597639158fd7c14d55e808718848319540f51b0e6746e3eefa59723a4a348", size = 381682, upload-time = "2026-08-15T08:18:36.349Z" }, + { url = "https://files.pythonhosted.org/packages/30/c7/63565f860921457feba93bae6c86fb7746deb4cffeed2f375cb845318146/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e71c909f353863b2b89c83de2ebed71ea6d0df8a6ef65a128193c5e650766bef", size = 240826, upload-time = "2026-08-15T08:18:37.887Z" }, + { url = "https://files.pythonhosted.org/packages/06/ae/7ae8807410dfa33f8e6f1715740adeaafa8a816cc4cb33508f54b1f7c896/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7ac76cf9afd34929d76eb7fcb63be476a4853d8a96f0dcf2d0db68a0cbdf9885", size = 227861, upload-time = "2026-08-15T08:18:39.315Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a3/887c1642f0da26000b0e0652d91071113c0e72cea33952e225cf589f49a9/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a3a370082ce34d0612f421e15fe011c53bb1feff21a26d06ad4fb244dab5a375", size = 260758, upload-time = "2026-08-15T08:18:40.88Z" }, + { url = "https://files.pythonhosted.org/packages/3e/11/e6f5b9a3d0e55b0ef7505cd3765cdd48f22db89994c947b316f52f801fd8/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:256dd4d85d9e4dc595e2bc983c980e73f62ddeb3165c58b4c3dfe78c5c8548c1", size = 259950, upload-time = "2026-08-15T08:18:42.351Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ee/e4e10a94d51cd1ee638aa7e00b65399e6b2a4e8376ab6d2eac9f95586671/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:58d4aa13a59c969dbfdf9e6a9560e242cbfd9e8a8f50c2747714df1a423adf65", size = 249329, upload-time = "2026-08-15T08:18:43.914Z" }, + { url = "https://files.pythonhosted.org/packages/c4/25/d5f4198819e6059735a84e8d0bfb72dc33976da67b97adcd3fb5a5e07ec6/charset_normalizer-3.5.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0c6dfb5ca6723eeed15aa8e564a014d69fcb8812f94eef11fe3631e0508199f5", size = 243137, upload-time = "2026-08-15T08:18:45.368Z" }, + { url = "https://files.pythonhosted.org/packages/a5/e9/e925ca7569cf9fb9701fd82503fee73eea5268fdb856bdd64947092d3daa/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c010f5581d9c612804cc59fcf7b524b707fbcb72828551237ab545bb5c7034af", size = 242820, upload-time = "2026-08-15T08:18:46.842Z" }, + { url = "https://files.pythonhosted.org/packages/34/17/672c251a888ed2aebcdd2fe830ad0104e25ff83c43f5c4f9c15e9fc6853c/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:52ec005752a56ae79547a05c0139ca2501a0c866390b6115008456b9f0e7cde1", size = 230504, upload-time = "2026-08-15T08:18:48.353Z" }, + { url = "https://files.pythonhosted.org/packages/3f/fc/f6a85abebd42ce4da2f1db0aa56cc6a0df1995e318b3875d14401b8381d1/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2bced4061f000f7187254a02ad3433ae17eaf991747ceea2f478422590a5bba9", size = 263087, upload-time = "2026-08-15T08:18:49.859Z" }, + { url = "https://files.pythonhosted.org/packages/98/66/7c42677e739ba66746b297e2046918d793078094dc239e1e72768cffccc6/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:9eea3ab2597a5e65fe65296e2d6a84570845a6b55532d90333d740d48bbc850a", size = 243269, upload-time = "2026-08-15T08:18:51.601Z" }, + { url = "https://files.pythonhosted.org/packages/de/d8/a50b79237f417af10f8c2a501ce8d1ca87829a22e69117891ca4ba20a69e/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:496846868fea80e479324862fa877f02411f2fd0f83b79ccee2607aa68b2a032", size = 258766, upload-time = "2026-08-15T08:18:53.23Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1d/0fc91aeaeb3c83b748f532399ce67cf84604b48297405d740000f7a9e786/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85d5855daafc240cc045c026d7a15fd198a09b0fc8ff6f5ecbb5297b509cb11e", size = 250814, upload-time = "2026-08-15T08:18:54.768Z" }, + { url = "https://files.pythonhosted.org/packages/ae/10/3d8c777cf9024615295aa1b808324ad5b4a77855869c00824bad74ffaf8a/charset_normalizer-3.5.1-cp314-cp314t-win32.whl", hash = "sha256:58d3e12c88e0950bca850ae1f7c256055c097639c2edb9eb123af9807d8b15e4", size = 191074, upload-time = "2026-08-15T08:18:56.305Z" }, + { url = "https://files.pythonhosted.org/packages/4d/81/ae557d3c44d1a1d688696d60563413a0866a91b7ebc50f20df838be3d8c8/charset_normalizer-3.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:acaf604462bf330b0d07e7a07c1d6e4adac79e5fb13e9c5140590542cafacc00", size = 216476, upload-time = "2026-08-15T08:18:57.889Z" }, + { url = "https://files.pythonhosted.org/packages/27/e9/61c01fb8b804692569c036b3fc50495814502dcf13a60649c6055390b02c/charset_normalizer-3.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f", size = 194115, upload-time = "2026-08-15T08:18:59.418Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4e/8544831ef59d8f27ce92c80871380fdacc8076a8a56ed62f82e54f991333/charset_normalizer-3.5.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:9085f87b0e38a2b92b8923059b4e8789fe40d9279712d15dcc670048d77079af", size = 342048, upload-time = "2026-08-15T08:19:01.054Z" }, + { url = "https://files.pythonhosted.org/packages/7f/a6/e3b46852424246065355644f4fb6dbccc0239a42a2eee27ecfc8957f0bcd/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2679de311c7946dde5d3b6f44941844133ff5c7cb86099c0061ab1e8901c20a8", size = 242997, upload-time = "2026-08-15T08:19:02.492Z" }, + { url = "https://files.pythonhosted.org/packages/03/3b/0cc9a26777334ab2f2e3089b948bbf4e4fe72ea70b897715ef6415043ec8/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:baf3775a2635e5a11fbd5e4e64ee69c7e86875d224a5c72aca4c141064589a90", size = 237014, upload-time = "2026-08-15T08:19:03.943Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c2/027335f0aa337a2a2e121bac1ad88c4f02ba6053ea0926802784f3db11af/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ac8c94b6539074e0f40899301273ac8402b9b3e01c7b7ba269ff30340aaaf20", size = 266174, upload-time = "2026-08-15T08:19:05.598Z" }, + { url = "https://files.pythonhosted.org/packages/86/d3/e367787febe4e74769dec0f406f2c3c8d1b955fce5aee1fd0f94e8367a45/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fe532b3c966d1fb794e0698e4589d0444017ae77fc0b31edea13c0e35bcc449", size = 263361, upload-time = "2026-08-15T08:19:07.251Z" }, + { url = "https://files.pythonhosted.org/packages/af/3d/391b193eb9f3e84b02f9314088c386debdc0debee843535aaea2e2c6715d/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c84bec0ab5ae0c64bfe73a7d2adcb5ce73b467523fc27fd6a28ab2aa6cbe35a", size = 252143, upload-time = "2026-08-15T08:19:08.816Z" }, + { url = "https://files.pythonhosted.org/packages/2e/57/de221f1745a90d418199761967e2776bfe2c275a1194220985e8c1d37833/charset_normalizer-3.5.1-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:854066be00447fa8de2ccbbe893e2ffc4b123ef16d897af794c1e18bd4a714b0", size = 252086, upload-time = "2026-08-15T08:19:10.255Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e3/d119f86a01f9331e8186175f24873b1d74a7ee9e2e4b4d68f9947dae5afd/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:21b82d8082f6f5e7f456ef0bd16323d08de1266efbfeb476e64b2a91d1471a4e", size = 245231, upload-time = "2026-08-15T08:19:11.807Z" }, + { url = "https://files.pythonhosted.org/packages/26/de/d8e48c135ae480879539cdb179c8d3b50c7879497d75dd899b5763b69cee/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:838648accb3a7fd9803fd45c87bce8509648eb0c11bc34e216141300977244f2", size = 241546, upload-time = "2026-08-15T08:19:13.416Z" }, + { url = "https://files.pythonhosted.org/packages/67/c4/217755fd1abc50d326c252922cd642002758095a81ff45010337b8b3ef65/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:195ce897c6153c0700078142cf8efe3e6454ca4cf4357499e4078dfd83396626", size = 267033, upload-time = "2026-08-15T08:19:14.981Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d7/34d8e404e358d2adcc5a228c2134643af00104c8fb0bf525f3688d756f05/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:978eab16f55b4ab2c2a745be9a0a840bf8f09a7f227d9c76eb30214d078865a5", size = 252045, upload-time = "2026-08-15T08:19:16.618Z" }, + { url = "https://files.pythonhosted.org/packages/5e/fa/40414471acf0aa0692ca77305aa00e434fcd8288f0941c93c30e9a5f8f2f/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:cc0329df4caaceb950d2f580b5ac716a377f7059624a0bafaeaf8a218c6ed774", size = 264866, upload-time = "2026-08-15T08:19:18.101Z" }, + { url = "https://files.pythonhosted.org/packages/32/90/fcc850bae791abd2e0c041847f13e270aa08692a79f3e00de6d2dce1cb50/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:687c9ca3035544b113bea2055e180af96fb63c0c476e22a9180f51925186e7b7", size = 253932, upload-time = "2026-08-15T08:19:19.734Z" }, + { url = "https://files.pythonhosted.org/packages/af/af/53afe99068b3c10b4cbae592a52ef72a7c92c0188440e83ee3a078fd8f75/charset_normalizer-3.5.1-cp315-cp315-win32.whl", hash = "sha256:706bfd38730a5ac7a365793269a00f4e988178cec121391f4248d84ad8c972e9", size = 180320, upload-time = "2026-08-15T08:19:21.37Z" }, + { url = "https://files.pythonhosted.org/packages/c9/bc/f46a132041b29e4a8779ed712d3df1bf112e94ca8de58b66d7ec2c0cf8b9/charset_normalizer-3.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:92caef967d287a407085d61176fce4012b1dd62daed4eb6d5ceb26d3d2538712", size = 204174, upload-time = "2026-08-15T08:19:23.088Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5d/9ed554480eda8e447b673648628fdc29574d23dbad01fe11837adedd1cae/charset_normalizer-3.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:5fc45d653ea8c9a20479167e11d4a0f8cb2fa3470737ab6f9c827532313187b7", size = 184126, upload-time = "2026-08-15T08:19:24.471Z" }, + { url = "https://files.pythonhosted.org/packages/3b/32/9b8929bf384061ee1fe5d9c27c6f9776d3d824039ad4e14c88ec00c7808e/charset_normalizer-3.5.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:59171c6e45bf07d0d5cab3b0bf81d945035530f6873398b3b531c31184d46663", size = 381441, upload-time = "2026-08-15T08:19:26.038Z" }, + { url = "https://files.pythonhosted.org/packages/96/10/e9aa7923d3ddac652c99a1c5f7be494e737e151566a44abe018daf757f2c/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9dbdd9205662134957cf0c324f639bdc5031c0ca056e2369e238db75187c0f11", size = 241742, upload-time = "2026-08-15T08:19:27.532Z" }, + { url = "https://files.pythonhosted.org/packages/28/53/a2d249ebddf47b889a100c0bdcb61a2f9dbb8bc24ef325cc062e4f476877/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e4b018dc5a0eee4676e38fe84a47a427816c590b93b55d9025274ec4d6ffc2dc", size = 235298, upload-time = "2026-08-15T08:19:29.274Z" }, + { url = "https://files.pythonhosted.org/packages/7d/07/469f78af590f7d5cd48e20d8dbfa3d66deeff9ba37768c04d886b5afd45c/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ced3fdd71aaa83ce593746c2edb42b7a59cb4c19c8b5c407781c72e493aae55a", size = 262500, upload-time = "2026-08-15T08:19:30.955Z" }, + { url = "https://files.pythonhosted.org/packages/55/66/3bb56a47f7dcba014055b1a1d33c6f08bbe9c1e74dba154cfa25f90ae885/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:19a3dd5aa73cef1c99687c4fc57db016a9c17104ae1185da88ba566a5d3bebe4", size = 258888, upload-time = "2026-08-15T08:19:32.458Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c1/2adc2800903fb013210349313b710a5376856578d9e33e6b9a1d8b36714a/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cc5d36d96478aa9c60654bd932525bf32964c62a7281eafdf16d85003a8d6004", size = 250243, upload-time = "2026-08-15T08:19:33.94Z" }, + { url = "https://files.pythonhosted.org/packages/95/b5/a18d0dd1157ab655cc2cb14a545f4a4784bbad70ab3502412e36097502d9/charset_normalizer-3.5.1-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:04368edf83514385ffc3e1cfd4546e595f4f1272dd23ba437a93a9cc3741d47b", size = 249871, upload-time = "2026-08-15T08:19:35.413Z" }, + { url = "https://files.pythonhosted.org/packages/ad/c3/525f508cd1e58d0450ac55ed40ac75bc3a97482c59def5278456a5fbf03c/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:9b5db6052055d34d41230fb78d7c439c23dc536a9896f6cb039e8dd92cfc1263", size = 243580, upload-time = "2026-08-15T08:19:36.886Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c1/49a91fe7e97c8140094ca5c64161ab623a70d9f636bf834eace14048acb5/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:252d099029bcbea642f2a06c4ed5046bdf8b5a8150b64afa5e027e88b106e5ee", size = 239807, upload-time = "2026-08-15T08:19:38.392Z" }, + { url = "https://files.pythonhosted.org/packages/d3/58/56a48c296601274c4689b864a8e2dfb209b81dfcb39472753ce95eea662b/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:6199d5606e2bbf2b096cf64d03f8b6790c91081d5ac866b8e7bb6422738cc60c", size = 264083, upload-time = "2026-08-15T08:19:39.856Z" }, + { url = "https://files.pythonhosted.org/packages/10/4c/dc48409274a1817ff349711d26c62aa0c597df865d4d69ef79160c859193/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:77efcff2b23071c349402ac1066667a3d011f62398d81408c9b88ad991747c9e", size = 250317, upload-time = "2026-08-15T08:19:41.53Z" }, + { url = "https://files.pythonhosted.org/packages/81/58/d325912115caec62d6bdd77bbab5e0b7da5d234a9f20affdffcbcb530d0b/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:a5cbd90ecf0fc62e64726917ad083b73001f0563657a87ec3c0b504e277dc90d", size = 258173, upload-time = "2026-08-15T08:19:43.07Z" }, + { url = "https://files.pythonhosted.org/packages/34/f7/b13b1ccae2c8ec63980d13be1890eb73f8aeabbfce02a24aabc0908788f5/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:4d26f14f041e83dd8edfd61f4cd4fa7285d31798b5bf1f28e70c367ba6c41d61", size = 251960, upload-time = "2026-08-15T08:19:44.587Z" }, + { url = "https://files.pythonhosted.org/packages/1e/25/ed3f9919c5aef8cc818be1f972f565f7610d7b2076b8ebb98839516ffc3c/charset_normalizer-3.5.1-cp315-cp315t-win32.whl", hash = "sha256:ac13b004224fb341e1e25a1ed5e19d32f57cdb2a403e01f003b46f051a550f6f", size = 191186, upload-time = "2026-08-15T08:19:46.293Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/43c2b3e9d8267092b913eb8b0603f0f71993c395632886bd37a7223f96cf/charset_normalizer-3.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:35aea775dc2bd5f54cd84a1cd2696cc3207c479cb9cf0bd346f0d343e4300ddb", size = 215947, upload-time = "2026-08-15T08:19:47.853Z" }, + { url = "https://files.pythonhosted.org/packages/a8/76/9aad3e9c8865e5e0efa9a7f6f81c37a67635a985145ecd44528a81e088ee/charset_normalizer-3.5.1-cp315-cp315t-win_arm64.whl", hash = "sha256:fb78f6e7fcd8ad785d28cd577168bc1aaee827b25bb8755638f694794ea98f0a", size = 193909, upload-time = "2026-08-15T08:19:49.383Z" }, + { url = "https://files.pythonhosted.org/packages/5b/97/fb4e82231aba271ffd775a1b4993b0defc4e3059f286ae41d9433409fe85/charset_normalizer-3.5.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2", size = 331467, upload-time = "2026-08-15T08:19:50.959Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2f/fe3f187327aac18e2d54e9d2b08e15d27bf9b642d9e51c219f130fc34d1a/charset_normalizer-3.5.1-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99", size = 253057, upload-time = "2026-08-15T08:19:52.654Z" }, + { url = "https://files.pythonhosted.org/packages/d7/c7/9e48cee5c161fe24da823b61bf381921d77cb994a0a4de148e95018c1984/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2", size = 240930, upload-time = "2026-08-15T08:19:54.163Z" }, + { url = "https://files.pythonhosted.org/packages/49/e0/716601f3cc69be7b198951150c75ead1ece33c3c8036ff6ffa46029659a0/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235", size = 230822, upload-time = "2026-08-15T08:19:55.807Z" }, + { url = "https://files.pythonhosted.org/packages/d3/05/71bfc5caa0abcc45aea1f6a4d50ac68e59605ddc7666fe8494f4cd229665/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598", size = 260037, upload-time = "2026-08-15T08:19:57.312Z" }, + { url = "https://files.pythonhosted.org/packages/c3/92/de7e32ed05341e7a9c4c877c318418197b7f2d66a3b68d561bf2ac57ca3e/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96", size = 255097, upload-time = "2026-08-15T08:19:59.056Z" }, + { url = "https://files.pythonhosted.org/packages/f5/7b/ade0a122600319dfa0b1000ab0f9731c94a817904cf3c5de408c73a4ede7/charset_normalizer-3.5.1-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962", size = 250166, upload-time = "2026-08-15T08:20:00.612Z" }, + { url = "https://files.pythonhosted.org/packages/75/9c/019fbb9f4834491a160951349b1a3714439376f66e5f7cf18b4f18f0c7aa/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3", size = 241821, upload-time = "2026-08-15T08:20:02.321Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b8/11d4840bfc99330cc7fbcc2681ee5a044553a6e77655508d8f9b2bff7b34/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950", size = 232529, upload-time = "2026-08-15T08:20:04.008Z" }, + { url = "https://files.pythonhosted.org/packages/18/96/2b3a21492d9f65171ac75d872f5018260013d00bfa0ff70ec9f179148cbd/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8", size = 260348, upload-time = "2026-08-15T08:20:05.877Z" }, + { url = "https://files.pythonhosted.org/packages/d6/aa/a69a2028e8bd052476c245460ab19d7de595de084dd968f2d75cd50c3e25/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031", size = 247234, upload-time = "2026-08-15T08:20:07.487Z" }, + { url = "https://files.pythonhosted.org/packages/35/8a/3d130aeabcaf3d2466af76b7b141c08d9e89c9016ab4b7cdd0f7dc2d1c62/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072", size = 256917, upload-time = "2026-08-15T08:20:09.142Z" }, + { url = "https://files.pythonhosted.org/packages/80/c2/a7379b840292d0c1ab9fbd17d1f3967aa81794dc95bc74be8999d7fedcf7/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d", size = 254846, upload-time = "2026-08-15T08:20:10.727Z" }, + { url = "https://files.pythonhosted.org/packages/01/65/d43b714731bb2f40d4053dfa00ecfc1c5a301f8e3316c5db3a09af59fe94/charset_normalizer-3.5.1-cp37-abi3-win32.whl", hash = "sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc", size = 174216, upload-time = "2026-08-15T08:20:12.334Z" }, + { url = "https://files.pythonhosted.org/packages/35/4f/b911ed898b26a09789eba9c9200c999aff6c61b4bafaf4838e56d1a1e1a3/charset_normalizer-3.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959", size = 199764, upload-time = "2026-08-15T08:20:13.908Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a7/920baf467bfd9bf689f3b318340f37aee4572a71f162bd8db51da55ba4fa/charset_normalizer-3.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e", size = 287318, upload-time = "2026-08-15T08:20:15.551Z" }, + { url = "https://files.pythonhosted.org/packages/cc/61/d01fc49b8dea277640b55a9e15960dbca9fdc8c9fde18e572d39c59f4019/charset_normalizer-3.5.1-py3-none-any.whl", hash = "sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6", size = 68658, upload-time = "2026-08-15T08:20:43.306Z" }, +] + +[[package]] +name = "click" +version = "8.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" }, +] + +[[package]] +name = "click-option-group" +version = "0.5.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/ff/d291d66595b30b83d1cb9e314b2c9be7cfc7327d4a0d40a15da2416ea97b/click_option_group-0.5.9.tar.gz", hash = "sha256:f94ed2bc4cf69052e0f29592bd1e771a1789bd7bfc482dd0bc482134aff95823", size = 22222, upload-time = "2025-10-09T09:38:01.474Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/45/54bb2d8d4138964a94bef6e9afe48b0be4705ba66ac442ae7d8a8dc4ffef/click_option_group-0.5.9-py3-none-any.whl", hash = "sha256:ad2599248bd373e2e19bec5407967c3eec1d0d4fc4a5e77b08a0481e75991080", size = 11553, upload-time = "2025-10-09T09:38:00.066Z" }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, +] + +[[package]] +name = "cogstack-nifi" +version = "0.0.1" +source = { editable = "." } +dependencies = [ + { name = "avro" }, + { name = "bokeh" }, + { name = "dill" }, + { name = "elasticsearch9" }, + { name = "fhir-resources" }, + { name = "geocoder" }, + { name = "jsonpickle" }, + { name = "mysql-connector-python" }, + { name = "neo4j" }, + { name = "nipyapi" }, + { name = "nltk" }, + { name = "numpy" }, + { name = "opensearch-py" }, + { name = "overrides" }, + { name = "pandas" }, + { name = "polars" }, + { name = "psycopg", extra = ["binary", "c"] }, + { name = "py4j" }, + { name = "py7zr" }, + { name = "pyarrow" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pydicom" }, + { name = "pymssql" }, + { name = "pyyaml" }, + { name = "rancoord" }, + { name = "requests" }, + { name = "snowflake" }, + { name = "snowflake-connector-python" }, + { name = "wheel" }, + { name = "xlsxwriter" }, + { name = "xnat" }, +] + +[package.dev-dependencies] +dev = [ + { name = "mypy" }, + { name = "mypy-extensions" }, + { name = "ruff" }, + { name = "timeout-decorator" }, + { name = "types-aiofiles" }, + { name = "types-pyyaml" }, + { name = "types-setuptools" }, +] + +[package.metadata] +requires-dist = [ + { name = "avro", specifier = "==1.12.2" }, + { name = "bokeh", specifier = "==3.8.2" }, + { name = "dill", specifier = ">=0.4.0,<1.0.0" }, + { name = "elasticsearch9", specifier = "==9.1.0" }, + { name = "fhir-resources", specifier = "==8.3.0" }, + { name = "geocoder", specifier = "==1.38.1" }, + { name = "jsonpickle", specifier = "==4.1.1" }, + { name = "mysql-connector-python", specifier = "==26.7.0" }, + { name = "neo4j", specifier = "==5.28.2" }, + { name = "nipyapi", specifier = "==1.7.0" }, + { name = "nltk", specifier = "==3.10.3" }, + { name = "numpy", specifier = "==2.4.2" }, + { name = "opensearch-py", specifier = "==3.0.0" }, + { name = "overrides", specifier = "==7.0.0" }, + { name = "pandas", specifier = "==2.3.3" }, + { name = "polars", specifier = "==1.44.1" }, + { name = "psycopg", extras = ["binary", "c"], specifier = "==3.3.5" }, + { name = "py4j", specifier = "==0.10.9.9" }, + { name = "py7zr", specifier = "==1.1.3" }, + { name = "pyarrow", specifier = "==25.0.1" }, + { name = "pydantic", specifier = "==2.13.5" }, + { name = "pydantic-settings", specifier = "==2.14.2" }, + { name = "pydicom", specifier = "==3.0.2" }, + { name = "pymssql", specifier = "==2.3.9" }, + { name = "pyyaml", specifier = "==6.0.3" }, + { name = "rancoord", specifier = "==0.0.6" }, + { name = "requests", specifier = "==2.33.0" }, + { name = "snowflake", specifier = "==1.13.1" }, + { name = "snowflake-connector-python", specifier = "==4.7.2" }, + { name = "wheel", specifier = "==0.46.2" }, + { name = "xlsxwriter", specifier = "==3.2.9" }, + { name = "xnat", specifier = "==0.8.1" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "mypy", specifier = "==1.17.0" }, + { name = "mypy-extensions", specifier = "==1.1.0" }, + { name = "ruff", specifier = "==0.12.12" }, + { name = "timeout-decorator", specifier = "==0.5.0" }, + { name = "types-aiofiles", specifier = "==24.1.0.20250708" }, + { name = "types-pyyaml", specifier = "==6.0.12.20250516" }, + { name = "types-setuptools", specifier = "==80.9.0.20250529" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1", size = 288773, upload-time = "2025-07-26T12:01:02.277Z" }, + { url = "https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381", size = 270149, upload-time = "2025-07-26T12:01:04.072Z" }, + { url = "https://files.pythonhosted.org/packages/30/2e/dd4ced42fefac8470661d7cb7e264808425e6c5d56d175291e93890cce09/contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7", size = 329222, upload-time = "2025-07-26T12:01:05.688Z" }, + { url = "https://files.pythonhosted.org/packages/f2/74/cc6ec2548e3d276c71389ea4802a774b7aa3558223b7bade3f25787fafc2/contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1", size = 377234, upload-time = "2025-07-26T12:01:07.054Z" }, + { url = "https://files.pythonhosted.org/packages/03/b3/64ef723029f917410f75c09da54254c5f9ea90ef89b143ccadb09df14c15/contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a", size = 380555, upload-time = "2025-07-26T12:01:08.801Z" }, + { url = "https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db", size = 355238, upload-time = "2025-07-26T12:01:10.319Z" }, + { url = "https://files.pythonhosted.org/packages/98/56/f914f0dd678480708a04cfd2206e7c382533249bc5001eb9f58aa693e200/contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620", size = 1326218, upload-time = "2025-07-26T12:01:12.659Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d7/4a972334a0c971acd5172389671113ae82aa7527073980c38d5868ff1161/contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f", size = 1392867, upload-time = "2025-07-26T12:01:15.533Z" }, + { url = "https://files.pythonhosted.org/packages/75/3e/f2cc6cd56dc8cff46b1a56232eabc6feea52720083ea71ab15523daab796/contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff", size = 183677, upload-time = "2025-07-26T12:01:17.088Z" }, + { url = "https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42", size = 225234, upload-time = "2025-07-26T12:01:18.256Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b6/71771e02c2e004450c12b1120a5f488cad2e4d5b590b1af8bad060360fe4/contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470", size = 193123, upload-time = "2025-07-26T12:01:19.848Z" }, + { url = "https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb", size = 293419, upload-time = "2025-07-26T12:01:21.16Z" }, + { url = "https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6", size = 273979, upload-time = "2025-07-26T12:01:22.448Z" }, + { url = "https://files.pythonhosted.org/packages/d4/1c/a12359b9b2ca3a845e8f7f9ac08bdf776114eb931392fcad91743e2ea17b/contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7", size = 332653, upload-time = "2025-07-26T12:01:24.155Z" }, + { url = "https://files.pythonhosted.org/packages/63/12/897aeebfb475b7748ea67b61e045accdfcf0d971f8a588b67108ed7f5512/contourpy-1.3.3-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8", size = 379536, upload-time = "2025-07-26T12:01:25.91Z" }, + { url = "https://files.pythonhosted.org/packages/43/8a/a8c584b82deb248930ce069e71576fc09bd7174bbd35183b7943fb1064fd/contourpy-1.3.3-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea", size = 384397, upload-time = "2025-07-26T12:01:27.152Z" }, + { url = "https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1", size = 362601, upload-time = "2025-07-26T12:01:28.808Z" }, + { url = "https://files.pythonhosted.org/packages/05/0a/a3fe3be3ee2dceb3e615ebb4df97ae6f3828aa915d3e10549ce016302bd1/contourpy-1.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7", size = 1331288, upload-time = "2025-07-26T12:01:31.198Z" }, + { url = "https://files.pythonhosted.org/packages/33/1d/acad9bd4e97f13f3e2b18a3977fe1b4a37ecf3d38d815333980c6c72e963/contourpy-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411", size = 1403386, upload-time = "2025-07-26T12:01:33.947Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8f/5847f44a7fddf859704217a99a23a4f6417b10e5ab1256a179264561540e/contourpy-1.3.3-cp312-cp312-win32.whl", hash = "sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69", size = 185018, upload-time = "2025-07-26T12:01:35.64Z" }, + { url = "https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b", size = 226567, upload-time = "2025-07-26T12:01:36.804Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e2/f05240d2c39a1ed228d8328a78b6f44cd695f7ef47beb3e684cf93604f86/contourpy-1.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc", size = 193655, upload-time = "2025-07-26T12:01:37.999Z" }, + { url = "https://files.pythonhosted.org/packages/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5", size = 293257, upload-time = "2025-07-26T12:01:39.367Z" }, + { url = "https://files.pythonhosted.org/packages/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1", size = 274034, upload-time = "2025-07-26T12:01:40.645Z" }, + { url = "https://files.pythonhosted.org/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286", size = 334672, upload-time = "2025-07-26T12:01:41.942Z" }, + { url = "https://files.pythonhosted.org/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5", size = 381234, upload-time = "2025-07-26T12:01:43.499Z" }, + { url = "https://files.pythonhosted.org/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67", size = 385169, upload-time = "2025-07-26T12:01:45.219Z" }, + { url = "https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9", size = 362859, upload-time = "2025-07-26T12:01:46.519Z" }, + { url = "https://files.pythonhosted.org/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659", size = 1332062, upload-time = "2025-07-26T12:01:48.964Z" }, + { url = "https://files.pythonhosted.org/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7", size = 1403932, upload-time = "2025-07-26T12:01:51.979Z" }, + { url = "https://files.pythonhosted.org/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d", size = 185024, upload-time = "2025-07-26T12:01:53.245Z" }, + { url = "https://files.pythonhosted.org/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263", size = 226578, upload-time = "2025-07-26T12:01:54.422Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9", size = 193524, upload-time = "2025-07-26T12:01:55.73Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b3/f8a1a86bd3298513f500e5b1f5fd92b69896449f6cab6a146a5d52715479/contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d", size = 306730, upload-time = "2025-07-26T12:01:57.051Z" }, + { url = "https://files.pythonhosted.org/packages/3f/11/4780db94ae62fc0c2053909b65dc3246bd7cecfc4f8a20d957ad43aa4ad8/contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216", size = 287897, upload-time = "2025-07-26T12:01:58.663Z" }, + { url = "https://files.pythonhosted.org/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae", size = 326751, upload-time = "2025-07-26T12:02:00.343Z" }, + { url = "https://files.pythonhosted.org/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20", size = 375486, upload-time = "2025-07-26T12:02:02.128Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99", size = 388106, upload-time = "2025-07-26T12:02:03.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b", size = 352548, upload-time = "2025-07-26T12:02:05.165Z" }, + { url = "https://files.pythonhosted.org/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a", size = 1322297, upload-time = "2025-07-26T12:02:07.379Z" }, + { url = "https://files.pythonhosted.org/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e", size = 1391023, upload-time = "2025-07-26T12:02:10.171Z" }, + { url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157, upload-time = "2025-07-26T12:02:11.488Z" }, + { url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570, upload-time = "2025-07-26T12:02:12.754Z" }, + { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, + { url = "https://files.pythonhosted.org/packages/72/8b/4546f3ab60f78c514ffb7d01a0bd743f90de36f0019d1be84d0a708a580a/contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a", size = 292189, upload-time = "2025-07-26T12:02:16.095Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77", size = 273251, upload-time = "2025-07-26T12:02:17.524Z" }, + { url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810, upload-time = "2025-07-26T12:02:18.9Z" }, + { url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871, upload-time = "2025-07-26T12:02:20.418Z" }, + { url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264, upload-time = "2025-07-26T12:02:21.916Z" }, + { url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819, upload-time = "2025-07-26T12:02:23.759Z" }, + { url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650, upload-time = "2025-07-26T12:02:26.181Z" }, + { url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833, upload-time = "2025-07-26T12:02:28.782Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692, upload-time = "2025-07-26T12:02:30.128Z" }, + { url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424, upload-time = "2025-07-26T12:02:31.395Z" }, + { url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300, upload-time = "2025-07-26T12:02:32.956Z" }, + { url = "https://files.pythonhosted.org/packages/1f/42/38c159a7d0f2b7b9c04c64ab317042bb6952b713ba875c1681529a2932fe/contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772", size = 306769, upload-time = "2025-07-26T12:02:34.2Z" }, + { url = "https://files.pythonhosted.org/packages/c3/6c/26a8205f24bca10974e77460de68d3d7c63e282e23782f1239f226fcae6f/contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77", size = 287892, upload-time = "2025-07-26T12:02:35.807Z" }, + { url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748, upload-time = "2025-07-26T12:02:37.193Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554, upload-time = "2025-07-26T12:02:38.894Z" }, + { url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118, upload-time = "2025-07-26T12:02:40.642Z" }, + { url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555, upload-time = "2025-07-26T12:02:42.25Z" }, + { url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295, upload-time = "2025-07-26T12:02:44.668Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027, upload-time = "2025-07-26T12:02:47.09Z" }, + { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" }, + { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, + { url = "https://files.pythonhosted.org/packages/a5/29/8dcfe16f0107943fa92388c23f6e05cff0ba58058c4c95b00280d4c75a14/contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497", size = 278809, upload-time = "2025-07-26T12:02:52.74Z" }, + { url = "https://files.pythonhosted.org/packages/85/a9/8b37ef4f7dafeb335daee3c8254645ef5725be4d9c6aa70b50ec46ef2f7e/contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8", size = 261593, upload-time = "2025-07-26T12:02:54.037Z" }, + { url = "https://files.pythonhosted.org/packages/0a/59/ebfb8c677c75605cc27f7122c90313fd2f375ff3c8d19a1694bda74aaa63/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e", size = 302202, upload-time = "2025-07-26T12:02:55.947Z" }, + { url = "https://files.pythonhosted.org/packages/3c/37/21972a15834d90bfbfb009b9d004779bd5a07a0ec0234e5ba8f64d5736f4/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989", size = 329207, upload-time = "2025-07-26T12:02:57.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size = 225315, upload-time = "2025-07-26T12:02:58.801Z" }, +] + +[[package]] +name = "cryptography" +version = "50.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/ad/5d6702db60b1e40b41ef513b6967ff5848f307d50f8449baf1634f5908f1/cryptography-50.0.1.tar.gz", hash = "sha256:5dd9bda1c12b4162f6ff568eeb5e0ff956c28d14406e875cfe8a63a2d414ff20", size = 880381, upload-time = "2026-08-25T19:45:45.499Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/19/797e2aaac9df6a66f1550f49979dc1b1e39ecd2077501c30efa81e8d5d67/cryptography-50.0.1-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:b8f852c65863251b9e3a1b8c150ce21e59b522dbb6a7d4bc80e680d38388e986", size = 4010153, upload-time = "2026-08-25T19:44:03.155Z" }, + { url = "https://files.pythonhosted.org/packages/90/34/9ce9a62ed9dc82ca9fd6a34445b6904af56e5f38b3eae2ed32e49c36053d/cryptography-50.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:53e279950892dc102c6b4e52af03ae5ea92fac572a1ddab78ca73a997f62b69f", size = 4723133, upload-time = "2026-08-25T19:44:05.461Z" }, + { url = "https://files.pythonhosted.org/packages/57/26/e6d4fc8512a51a5f9ee7bfdbfb853bce1197087df40c9ad993ad370b846f/cryptography-50.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ff838d62ec1bfce4f9ba7fa16f4a7b554cd8d0c299e6be37502161a660c84eef", size = 4712478, upload-time = "2026-08-25T19:44:07.375Z" }, + { url = "https://files.pythonhosted.org/packages/e6/de/d3cdc2815697aae84126cbd6a030ca7b6b452e28a88b501b836bd3aa7a86/cryptography-50.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e74591e283fe6eb956416c929eb58262a719fe0311fd9054c62c3350ed8760d8", size = 4730726, upload-time = "2026-08-25T19:44:09.294Z" }, + { url = "https://files.pythonhosted.org/packages/55/32/38c0d344b98c06d34b5df8946565a9c0d6dbf32c8e0730a7f05f0a3c6cab/cryptography-50.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5fe002589592ed749ce77fe0695fcbd3500dd61d7d6db5858a7544c612fa8e45", size = 5353524, upload-time = "2026-08-25T19:44:11.96Z" }, + { url = "https://files.pythonhosted.org/packages/e1/1b/82f0f0d8858d4432be1af790477edf62aef90324041aa07c57e57bef1af7/cryptography-50.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:51593d180cf6d179bde5c5d065bed81386b1f381656ae7d042b7ffc87a9895ad", size = 4746720, upload-time = "2026-08-25T19:44:14.051Z" }, + { url = "https://files.pythonhosted.org/packages/29/ba/042ca458b8c64348c768284b5d23e69b92ed53d057ab779fee628564676d/cryptography-50.0.1-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:359e62deae718bce96170e223fdcb6357e4fbd3bb7a3a75f4430763532560e49", size = 4361866, upload-time = "2026-08-25T19:44:16.167Z" }, + { url = "https://files.pythonhosted.org/packages/39/3b/e96c1ef71edef71057c7e3c3d982ce8fda554e0c52d0cc19c18845cde3eb/cryptography-50.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e2ca8fd1b6b4b82a1c4cb02841d0837e3c12336c2e24b520ab8ab3b969733d8f", size = 4730028, upload-time = "2026-08-25T19:44:18.085Z" }, + { url = "https://files.pythonhosted.org/packages/e3/38/45abd72ef63f2e7d0754a6cacf97bd8b69512ace7f6130d24c39ece65da2/cryptography-50.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:76de83fbd91ac49c0feaaa983d0748fd7a53176afac5fb3bf7478d244f0eb527", size = 5308405, upload-time = "2026-08-25T19:44:20.197Z" }, + { url = "https://files.pythonhosted.org/packages/85/66/6ccca4722987ddedaa7fc9c3f4708af7431f5535666c174350830888c6b7/cryptography-50.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:51afcfceb15597cf2635068e4ac9a56b2abde622edde17f37d85fd7b5306497a", size = 4746230, upload-time = "2026-08-25T19:44:22.376Z" }, + { url = "https://files.pythonhosted.org/packages/13/0e/b1f92e013228111413f2e6743948b80bc24dfd3c1b87ba98ceea16f5df89/cryptography-50.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:be224a65493ec5b74a158ff22a5522ce4a5ca1e543c647a3a4730d4a09e5f959", size = 4862596, upload-time = "2026-08-25T19:44:24.472Z" }, + { url = "https://files.pythonhosted.org/packages/7e/22/c3654cccc856e9d682817b04ac3ee79731cb09ca6f95996a95c904de2883/cryptography-50.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9ebcdd5519be9b652a46f507817a74591774fc3d6923ac364e4dfa64e36b291b", size = 5014082, upload-time = "2026-08-25T19:44:26.709Z" }, + { url = "https://files.pythonhosted.org/packages/42/8b/cb12b1b60c91b074ca6bf0fdd59aa8f10d8bc5f73af8faece86ef0421b37/cryptography-50.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:aed8db4f6d71c51efb89530e12d9464e7bf2923d46c3205dc794a2a93f8c0648", size = 3842826, upload-time = "2026-08-25T19:44:28.784Z" }, + { url = "https://files.pythonhosted.org/packages/5b/f0/424cb557d99aa86ac55da5e2add02e2882e44047b6264f93ade1b975a993/cryptography-50.0.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:30a125032e5642a21ff816e021152bd4e7e94f03eff3f4b7fca41cd22bc3110f", size = 3973525, upload-time = "2026-08-25T19:44:30.7Z" }, + { url = "https://files.pythonhosted.org/packages/4d/72/3a2711d967977ab5fc80b782837c7e8d1ac7445e764c20c381a265c57ef3/cryptography-50.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a0b1a59e3a089064a0ec309e9428c8e3ae4e161419d20ac33600767e83fc658a", size = 4708817, upload-time = "2026-08-25T19:44:32.773Z" }, + { url = "https://files.pythonhosted.org/packages/b4/f2/bb1f56e10815b789df0b409a69fa4992ff3d3fef9c72747f4a6b26fed38e/cryptography-50.0.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8921d58f426793c5f1b47f0b59575780de9a095214958d0eb37d909593db8367", size = 4697300, upload-time = "2026-08-25T19:44:35.144Z" }, + { url = "https://files.pythonhosted.org/packages/08/bd/ed5396be499ffcf8807a585bfe38b71a1fbdd1c342b4f9b6d0ef5162a946/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:a8f40ea47330e71b594a7e246898f93177c259490c63183dbaf9e571d71ed9a5", size = 4716039, upload-time = "2026-08-25T19:44:37.192Z" }, + { url = "https://files.pythonhosted.org/packages/f6/6e/1cf405c5c8e8df7545378048e954792f00b7f2367af8863ce8b8f3e10607/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:a255449073358275b64b67d3f595f268bbef70e72b6edb65e0c70c735bf739c9", size = 5332388, upload-time = "2026-08-25T19:44:39.16Z" }, + { url = "https://files.pythonhosted.org/packages/47/92/b4317e8c32c4f47b062f5398bd79106b220a124546f42be83bf32b761e2a/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:8df2de9102026855887e4587084f6eabd80ed0f345b8ad8a7ac27ab9bf4723e0", size = 4730293, upload-time = "2026-08-25T19:44:41.298Z" }, + { url = "https://files.pythonhosted.org/packages/39/0d/a1e7633e2c744d0f2983320a27e924ef2264c79c56e1a58d5fb0a1cfd413/cryptography-50.0.1-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:ac02b07824d4d1001bd4367599f839c19cb171924c796e52c23508ac14c2c0cc", size = 4346031, upload-time = "2026-08-25T19:44:43.245Z" }, + { url = "https://files.pythonhosted.org/packages/88/dd/b215616f9bab3fc18510c78a4e5c9f362d77838503c363dc747c7d4f5c6f/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:cbf74a81765ee67413503ca6e26dcc4f6f5a519822436cc0a1b97aab6c1b8a17", size = 4715344, upload-time = "2026-08-25T19:44:45.291Z" }, + { url = "https://files.pythonhosted.org/packages/b1/1b/ec3ebd31741d0e963612c4fe43caa39341b9b1e031e469820e42e4c83918/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:16c5ecd954b3330ebfb6605eca4fd952da8bef376551d5cc264534e3770a9ee6", size = 5287201, upload-time = "2026-08-25T19:44:47.297Z" }, + { url = "https://files.pythonhosted.org/packages/1a/01/0127d11a762b31a9ee0221894f540318761783f3fdc4bc5d057698caebd5/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:79bf008d1f9af6071c797ad133e39915dfee7614f18f18f4db9072eb715064a3", size = 4730023, upload-time = "2026-08-25T19:44:49.435Z" }, + { url = "https://files.pythonhosted.org/packages/9e/b9/e7425ebfb599241a0c1d7000f1b466c3062da66c19d9525031315dff7213/cryptography-50.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:330fbb252391c596f1ae42c5754449dc924e6ad012dca8efe0d703f9f2d12ec6", size = 4847362, upload-time = "2026-08-25T19:44:51.94Z" }, + { url = "https://files.pythonhosted.org/packages/2d/fd/60d0ddf4defa12e482c9d5e0f554384d6e8ab25341fd15f060028fd92e6a/cryptography-50.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:42be3bb70596b3abe4ac097b75be223e8b3ab614a0e5de068e3dcc54d71d6149", size = 4999247, upload-time = "2026-08-25T19:44:53.876Z" }, + { url = "https://files.pythonhosted.org/packages/4d/56/bc4f2b209e766c93372cfcd59b781a0b2b59700f62a969580415b699c2b2/cryptography-50.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f74455bb086a85d5e81246412602aaa97ed095e504cd40dd261ef50be42205bf", size = 3825806, upload-time = "2026-08-25T19:44:56.209Z" }, + { url = "https://files.pythonhosted.org/packages/84/a9/ee16a903f13755e914d1eecc482fe64d1f10761c3960e5d8fa6837377aff/cryptography-50.0.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ca83d00d9e69cd5eb63f2e69c3a5a59e0cecae5ae14c6ae0b35830fe3b37bad0", size = 4035307, upload-time = "2026-08-25T19:44:58.305Z" }, + { url = "https://files.pythonhosted.org/packages/5e/a5/9ec7e81e8526c0d7a387d73386b2daed3f39e10d81a85930bd1b6bfba65c/cryptography-50.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:05ba322c4da95b262a212c345af888ef2c37c88c0509756ea00a0e6d68850f23", size = 4751900, upload-time = "2026-08-25T19:45:00.401Z" }, + { url = "https://files.pythonhosted.org/packages/7e/3c/0e77bd5ffcf078e9dd27d3074aad6c030d9b10d0bf69329d573c927a188c/cryptography-50.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e22dfed744bd4002e909464cb23d2f0b05c6f3113a79ef2e9864a53db737c733", size = 4738357, upload-time = "2026-08-25T19:45:02.786Z" }, + { url = "https://files.pythonhosted.org/packages/27/3a/3c5f80daa4dcd47323c7af8a2fcb90de27a33564d4fcac69846c0972691a/cryptography-50.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4c4188f7c0cf655be5c06342b817ed0f9595b69ffa2b12026e5353eed29dea88", size = 4758474, upload-time = "2026-08-25T19:45:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/6e/2b/214cf0cf93db9628c3c20c896b229f327f6fb1b20e4b3743d8ad3f00af8b/cryptography-50.0.1-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2ebbfb0f1fed745e91796e3e1080a1440423fdae8ece1b995a1d80883a409054", size = 5375862, upload-time = "2026-08-25T19:45:07.163Z" }, + { url = "https://files.pythonhosted.org/packages/d6/51/3f9701867a46b6c1740c9b52fc4d3bed6cbdcfedcc9b6e64305c07f39cff/cryptography-50.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:407fe2b6db00939c05c0e945e9914238f2f0a430974839429dafc82b1ee6bee5", size = 4772942, upload-time = "2026-08-25T19:45:09.396Z" }, + { url = "https://files.pythonhosted.org/packages/0d/5c/13ea642e08e2544d0f5396122055f4820cfacb3203562197b5967125ea97/cryptography-50.0.1-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:2b34d76a652ea2b6faf777c35df230c5637842cd904e04f16230c3f9f03e4361", size = 4383347, upload-time = "2026-08-25T19:45:11.659Z" }, + { url = "https://files.pythonhosted.org/packages/84/d5/7d1fe1cb93f91c428093ff234e128c89ba8ea61a6f26aab406081f9b996e/cryptography-50.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:01f41478cf33fc605a6a089cd56d28b45c6c0b45a1928b61797f2621a04bac71", size = 4758050, upload-time = "2026-08-25T19:45:13.745Z" }, + { url = "https://files.pythonhosted.org/packages/dd/04/557fc5ead96a829e0bc812a3b9dc4a52a2f27e4f7f5950da7ff27653a805/cryptography-50.0.1-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:fc3ed7ebd2a8c96f5b166de0ab9b624996bef3b07bbeb19364dfb78222c22c80", size = 5332955, upload-time = "2026-08-25T19:45:16.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/eb/5d7124083e8d8cda8f5b348f544b71ad6f707ad63193758ef4d8e569da02/cryptography-50.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9dde0a357190eb3b1da1bb9ab750e9c85cba82ca5977aa0836cbb94e92611239", size = 4772694, upload-time = "2026-08-25T19:45:18.315Z" }, + { url = "https://files.pythonhosted.org/packages/63/8e/f1f955e0921dd2b6d22eae7e8d24a4c4b638d10735ffbf6a71f99eb0fcb8/cryptography-50.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd3718b960d0b5dd213cdf03f3bcb7000e69dda0de8b956061947ff6bcff5558", size = 4888413, upload-time = "2026-08-25T19:45:20.4Z" }, + { url = "https://files.pythonhosted.org/packages/1f/ab/89e2b798d2c3925f82e2bb72d5979f3d2f6da2dd22ef4a8cd8b70d920039/cryptography-50.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2a93d05e34d5f67fba6f891fe85d929999baa7195e853923ea6d7576c9e68c5e", size = 5044355, upload-time = "2026-08-25T19:45:22.353Z" }, + { url = "https://files.pythonhosted.org/packages/99/89/87ef49ffe383ef4e147d27b7bf2088fb0b54ea409dd87b5a89442e5828a5/cryptography-50.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:55d16b1ef3ee0958d893a977b19777887e546c9954ea81b200c3301a864013f2", size = 3875429, upload-time = "2026-08-25T19:45:24.418Z" }, + { url = "https://files.pythonhosted.org/packages/c7/27/8d207af749c453ee17ea087340b3f2b4adef75aadd1d277b1b129bdda84e/cryptography-50.0.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9cb3cb952cf5a8abd50c782a98a89d71699715e802fe349704b47f2425b42a94", size = 3974350, upload-time = "2026-08-25T19:45:26.551Z" }, + { url = "https://files.pythonhosted.org/packages/14/9a/6d3a4d7852e22d657438b7bf51f66102c7d71c0e1fafeec652281d0403e5/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5fe939deeb161024a6be98229c953b6591fef1f41214497a78fe793a244c017f", size = 4698675, upload-time = "2026-08-25T19:45:28.658Z" }, + { url = "https://files.pythonhosted.org/packages/73/35/5c3717edf9e68a0550ce04e28eab493fe545eccd81742af03f6a75fe260b/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fb4b9672d389c738b175c4166e78310f8a70358886aacd9173ee03a85ffdc671", size = 4707410, upload-time = "2026-08-25T19:45:30.816Z" }, + { url = "https://files.pythonhosted.org/packages/1d/e0/e786934472e3ac4ecdecc7b129a0ca1a2a40dffdafcf2c3ea9d4397f8def/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:d63ae8f6481fec907ac0f588eee8a90aefde112c633131fe540e5711ddbb5a4e", size = 4698378, upload-time = "2026-08-25T19:45:33.043Z" }, + { url = "https://files.pythonhosted.org/packages/51/cf/5b3f53a0b74d122f023476ede40ba5d3e70d5cf475f73b899740d26a4fb2/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:804728ce710890870f3aaa344b2e161172d258d768ac139d02cfd9092d0d94e6", size = 4706889, upload-time = "2026-08-25T19:45:35.086Z" }, + { url = "https://files.pythonhosted.org/packages/71/44/711e61f7d014be825ef79b285b047292d1bf893732ac1bc030a351fb517f/cryptography-50.0.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:693c99b49bd37d0d096e4334c10232c77248c415b98d35236094cdf96d57258b", size = 3824006, upload-time = "2026-08-25T19:45:37.281Z" }, +] + +[[package]] +name = "decorator" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, +] + +[[package]] +name = "dill" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315, upload-time = "2026-01-19T02:36:56.85Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019, upload-time = "2026-01-19T02:36:55.663Z" }, +] + +[[package]] +name = "elastic-transport" +version = "9.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "sniffio" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/be/a719a217ed7f179c9e41821dff9dfd28415b21bc94da9d35fff84f7951b2/elastic_transport-9.4.2.tar.gz", hash = "sha256:366f4614f4544c5fb5d780c82f57af8f30492b44a68ed20750390aa81e20c2ea", size = 79310, upload-time = "2026-06-16T15:27:17.182Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/e4/9b7ef7a8e0bb416e0fe1879c92295041cf81e5a47e3c3110744e89b6eb35/elastic_transport-9.4.2-py3-none-any.whl", hash = "sha256:33dc89bb1855faa8b98ae8b036405a39c562778dbcdbe4a00a2eaf753148556c", size = 66314, upload-time = "2026-06-16T15:27:15.875Z" }, +] + +[[package]] +name = "elasticsearch9" +version = "9.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "elastic-transport" }, + { name = "python-dateutil" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/2c/0d820895e442d68fdffe08bc307fb85a71fb745a8498f85e0ca21c483b3c/elasticsearch9-9.1.0.tar.gz", hash = "sha256:b8dee7900042cc8bb57181cf79c12b5db1446e671db5ea84705e8a96d3788496", size = 849013, upload-time = "2025-07-30T08:54:53.712Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/3c/b27aebdac9f1f054f4b569dfc245074ab954387dd68c0b7e0a1b5368fd74/elasticsearch9-9.1.0-py3-none-any.whl", hash = "sha256:5281b447587e5440183db280f953e2f34993b8b38df6fb98e7cd66f99b7734d4", size = 929889, upload-time = "2025-07-30T08:54:50.353Z" }, +] + +[[package]] +name = "events" +version = "0.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/ed/e47dec0626edd468c84c04d97769e7ab4ea6457b7f54dcb3f72b17fcd876/Events-0.5-py3-none-any.whl", hash = "sha256:a7286af378ba3e46640ac9825156c93bdba7502174dd696090fdfcd4d80a1abd", size = 6758, upload-time = "2023-07-31T08:23:13.645Z" }, +] + +[[package]] +name = "fhir-core" +version = "1.1.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/93/19/4debca62dce6602c7e5f284600e4cbd3faf2383d2081b7f21b8005da9482/fhir_core-1.1.10.tar.gz", hash = "sha256:de8ee2ff7c14854641b7ad12e23fb5c53d9b3a99ebaeaad360d1d40a086629c3", size = 35713, upload-time = "2026-07-25T10:02:20.711Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/8f/004089ac25fddc6b839e58bdfba0f9a97f56889e4f80715105d91994f1eb/fhir_core-1.1.10-py2.py3-none-any.whl", hash = "sha256:bdbe6164e26843e7e63559a08961e44df54b1ed8bd52a1df415ee8c02f7ec965", size = 30658, upload-time = "2026-07-25T10:02:19.297Z" }, +] + +[[package]] +name = "fhir-resources" +version = "8.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fhir-core" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/06/331d78ad6db6903be6b912701c44b32af295279907b3a2e6ad6c2e2f97b1/fhir_resources-8.3.0.tar.gz", hash = "sha256:bdfd1c7bd1b89bfa269c1f435727771f6c632cd857e2848221713b3f8b9f46e8", size = 1617996, upload-time = "2026-07-03T15:23:54.01Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/86/32914542064b8aee77ac48142f8a1955df78da4eb905dd41697d26941d21/fhir_resources-8.3.0-py2.py3-none-any.whl", hash = "sha256:151e6c9b4336e36383cc2aaf2067a6f112a420fce1c7bd289182e55dd950871b", size = 2288069, upload-time = "2026-07-03T15:23:51.97Z" }, +] + +[[package]] +name = "filelock" +version = "3.32.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/a0/50c2c0ce5e74d7721bbb1b19a26ebd339aac5878553a6e35308c2f31f935/filelock-3.32.5.tar.gz", hash = "sha256:f6a6a28f743f9b95ce19db5abe0f376f75eb56517dff21e1a4751e2657d3e83d", size = 222838, upload-time = "2026-08-31T18:56:34.729Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/d2/b70a31e13d04456d28493f31d2aa087e99eeb2767ef0293b2625727ccb8c/filelock-3.32.5-py3-none-any.whl", hash = "sha256:142cd9fa77a872c5e78c62329a0d15278fadc686eb89e760017968961a4fd6b2", size = 100003, upload-time = "2026-08-31T18:56:33.078Z" }, +] + +[[package]] +name = "folium" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "branca" }, + { name = "jinja2" }, + { name = "numpy" }, + { name = "requests" }, + { name = "xyzservices" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/76/84a1b1b00ce71f9c0c44af7d80f310c02e2e583591fe7d4cb03baecd0d3f/folium-0.20.0.tar.gz", hash = "sha256:a0d78b9d5a36ba7589ca9aedbd433e84e9fcab79cd6ac213adbcff922e454cb9", size = 109932, upload-time = "2025-06-16T20:22:51.803Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/a8/5f764f333204db0390362a4356d03a43626997f26818a0e9396f1b3bd8c9/folium-0.20.0-py2.py3-none-any.whl", hash = "sha256:f0bc2a92acde20bca56367aa5c1c376c433f450608d058daebab2fc9bf8198bf", size = 113394, upload-time = "2025-06-16T20:22:50.318Z" }, +] + +[[package]] +name = "future" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/b2/4140c69c6a66432916b26158687e821ba631a4c9273c474343badf84d3ba/future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05", size = 1228490, upload-time = "2024-02-21T11:52:38.461Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216", size = 491326, upload-time = "2024-02-21T11:52:35.956Z" }, +] + +[[package]] +name = "geocoder" +version = "1.38.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "future" }, + { name = "ratelim" }, + { name = "requests" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/0b/2ea440270c1efb7ac73450cb704344c8127f45dabff0bea48711dc9dd93a/geocoder-1.38.1.tar.gz", hash = "sha256:c9925374c961577d0aee403b09e6f8ea1971d913f011f00ca70c76beaf7a77e7", size = 64345, upload-time = "2018-04-04T12:34:47.649Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/6b/13166c909ad2f2d76b929a4227c952630ebaf0d729f6317eb09cbceccbab/geocoder-1.38.1-py2.py3-none-any.whl", hash = "sha256:a733e1dfbce3f4e1a526cac03aadcedb8ed1239cf55bd7f3a23c60075121a834", size = 98590, upload-time = "2018-04-04T12:34:51.222Z" }, +] + +[[package]] +name = "geographiclib" +version = "2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/78/4892343230a9d29faa1364564e525307a37e54ad776ea62c12129dbba704/geographiclib-2.1.tar.gz", hash = "sha256:6a6545e6262d0ed3522e13c515713718797e37ed8c672c31ad7b249f372ef108", size = 37004, upload-time = "2025-08-21T21:34:26Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/b3/802576f2ea5dcb48501bb162e4c7b7b3ca5654a42b2c968ef98a797a4c79/geographiclib-2.1-py3-none-any.whl", hash = "sha256:e2a873b9b9e7fc38721ad73d5f4e6c9ed140d428a339970f505c07056997d40b", size = 40740, upload-time = "2025-08-21T21:34:24.955Z" }, +] + +[[package]] +name = "geopy" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "geographiclib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/da/0c/b4e42a0495293f6c94364baba4c657c68bc8d8efec784259cc943f4ba28b/geopy-2.5.0.tar.gz", hash = "sha256:7b6c849f18108dcce4faa3d614e2801107b465f7b05fd3c1db9db12e225ae950", size = 122254, upload-time = "2026-07-12T19:50:06.051Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/e5/de8b557b279e31cdfb2070ac83eb45dc7e29bd93cd544128756f658e52c7/geopy-2.5.0-py3-none-any.whl", hash = "sha256:8ad8cc226b505ca4d272ae9a2eeba08b8a2c565fc9a04eaefc33ad49c32b51aa", size = 114619, upload-time = "2026-07-12T19:50:04.839Z" }, +] + +[[package]] +name = "idna" +version = "3.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/f7/abb373e5757eaec4b922b92f97ec8d6d7e057cf06778247604fbc4e7c3f3/idna-3.19.tar.gz", hash = "sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15", size = 215237, upload-time = "2026-08-18T05:14:24.27Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/b0/0e52c878c53f245edd3a11020f20979b3f490f245af532c7cae3027754b5/idna-3.19-py3-none-any.whl", hash = "sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4", size = 68550, upload-time = "2026-08-18T05:14:22.343Z" }, +] + +[[package]] +name = "importlib-metadata" +version = "9.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/7e/1e7e8dc30634b93ebb3d58a3dea569ad146e656218d3960ab04f62047b29/importlib_metadata-9.0.1.tar.gz", hash = "sha256:ab830580bc0ef3db61ce8fae716389e5462b67e033018bab6d8f80ef17172f99", size = 59124, upload-time = "2026-08-28T15:30:34.646Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/55/ecca97ae19075f1fac62def77731e7f535e6c1fb8f92ff08160c5e6dade8/importlib_metadata-9.0.1-py3-none-any.whl", hash = "sha256:bba5600596a7e21f3eef53281cf28d6a5195634d2f2b78ff9501a3272c6eaab0", size = 27920, upload-time = "2026-08-28T15:30:33.433Z" }, +] + +[[package]] +name = "inflate64" +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3e/f3/41bb2901543abe7aad0b0b0284ae5854bb75f848cf406bf8a046bf525f67/inflate64-1.0.4.tar.gz", hash = "sha256:b398c686960c029777afc0ed281a86f66adb956cfc3fbf6667cc6453f7b407ce", size = 902542, upload-time = "2025-11-28T10:55:52.641Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/e4/2fc07d71cf863ed4167e7d3eb7f89de0341ffe3ed3a62ff6cc4123bdbda6/inflate64-1.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bccda9815b27623e805a34ee3ee4f46c93f0cc7ac621f9834d75f033fd79c27a", size = 58595, upload-time = "2025-11-28T10:54:34.338Z" }, + { url = "https://files.pythonhosted.org/packages/53/77/1119bb53e8f4c9c77f2a5e3ab7d8c3e905fcfc9912073962b9b4cbf72118/inflate64-1.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c11e2a3cb9d9b49620c9b0c806dd0c55daec3b6bb665299b770a68f01bfc5432", size = 35854, upload-time = "2025-11-28T10:54:35.796Z" }, + { url = "https://files.pythonhosted.org/packages/de/40/8b028a731f6fabbb49069a58f1aa5c3332688b57dcb8726f9e596661ce5b/inflate64-1.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e42def03ace8c58fd50b0df4f40241c45a2314c3876d020cce24acf958323c98", size = 36011, upload-time = "2025-11-28T10:54:37.208Z" }, + { url = "https://files.pythonhosted.org/packages/86/a3/5b67ef7fd5e7546d4c2be8a9a869c70d9fd525de1cfb2b4dc4b0855eeee8/inflate64-1.0.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7912927a509ca58d1a445ce4ff6e6e9f276dc1d72687386cdf7103bf590e785c", size = 98112, upload-time = "2025-11-28T10:54:38.616Z" }, + { url = "https://files.pythonhosted.org/packages/5b/6e/6443ea6c42f6b244c4e59cb43f16e6b903669f718a96e3f1985acf473dea/inflate64-1.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ec40c0383cbd84d845dcb785a48ae76eef43246c923f84fda380fdd5ea653d3c", size = 99549, upload-time = "2025-11-28T10:54:40.167Z" }, + { url = "https://files.pythonhosted.org/packages/e3/ce/e98577e0771b857b491a64a3f7495eb507e0752b80093068b69813088df1/inflate64-1.0.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b01539fea372c6078b9707d9121c12cb321e587e193f50e257ce06cf5b15e41", size = 95946, upload-time = "2025-11-28T10:54:41.318Z" }, + { url = "https://files.pythonhosted.org/packages/6b/3e/8165ff4051dff08b2cc8448dafd15a697564e84cf40f3ee0dc0df16eed16/inflate64-1.0.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bf4e34e32a37a42e9cf8bd9681f89e3e37b218f97d8b8cc95bd065419bc8db13", size = 98766, upload-time = "2025-11-28T10:54:43.366Z" }, + { url = "https://files.pythonhosted.org/packages/79/b8/20cad309ded1d97195c5ad50e341b38ddc2e82f5c44ee7d000c4372c8b56/inflate64-1.0.4-cp311-cp311-win32.whl", hash = "sha256:2725ccc14b138f0ad622d0322b769f177f9edfe016ee9ed3404102935d39e7de", size = 32939, upload-time = "2025-11-28T10:54:44.507Z" }, + { url = "https://files.pythonhosted.org/packages/8c/32/be5cac018960157d33d61278377d590d5cc34922222cb0c4dc3284ce6eeb/inflate64-1.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:7056148548c1f25dcb38251f88c19b4635a5f32af4c7bad00621c85509e3d8c0", size = 35535, upload-time = "2025-11-28T10:54:46.214Z" }, + { url = "https://files.pythonhosted.org/packages/13/36/9b130e45299d587f306178d65e950e1c8f60a09db8bb55c7cdce8fdda3b6/inflate64-1.0.4-cp311-cp311-win_arm64.whl", hash = "sha256:2ea7bdcad65e255b4596f84880f6e0c1756d6336d620e302653257defa407742", size = 33457, upload-time = "2025-11-28T10:54:47.258Z" }, + { url = "https://files.pythonhosted.org/packages/ed/33/5cfa7468960de1be0833e7e41adf5b7804a0aef2fb46f3679df3876bf3ab/inflate64-1.0.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c8009e4a4918ee6c8cbc49e58fe159464895064cfdf0565fed3f49ca81e45272", size = 58619, upload-time = "2025-11-28T10:54:48.315Z" }, + { url = "https://files.pythonhosted.org/packages/cd/0a/583c7c2832da36e986c5758d0afb6f5944599e55c5b798b066a9ef63e581/inflate64-1.0.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0d173a7a0e865bb7d19685c5b1ad2994712b8361b24136d7e94abeff58505647", size = 35865, upload-time = "2025-11-28T10:54:49.389Z" }, + { url = "https://files.pythonhosted.org/packages/72/4b/9c6acfbe900e5c8698132244c68036b0455bd2169f46e356c83dc0366f11/inflate64-1.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8bad992f2d034f5f7e36208e54502d1b0829ce772c898e5dc59109833420148a", size = 36019, upload-time = "2025-11-28T10:54:50.813Z" }, + { url = "https://files.pythonhosted.org/packages/7f/66/c0c3d3b4b863aab2c2ce631d219a8eb3b95b78acd5f40d3212f071e693db/inflate64-1.0.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6bfcf806912ced77a21394f7363805ecacd626b79f93cba87d505a48e88ede78", size = 98765, upload-time = "2025-11-28T10:54:52.273Z" }, + { url = "https://files.pythonhosted.org/packages/37/00/1a2351a85d36b26c5b2b8cfbb37ad86084c98f592dd7590f8577d8b33993/inflate64-1.0.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62d1aac3aba094ae42e27ce7581b414c90f218248be0953b6aeb11a127225e5d", size = 100594, upload-time = "2025-11-28T10:54:53.684Z" }, + { url = "https://files.pythonhosted.org/packages/f7/3e/5d18ff5b86aaaf54117e1bb6ce15cb17163f56035f9c480e609d35f258ab/inflate64-1.0.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8065166f355122484f004225b379d403346bdae69ec624786a9334f025580675", size = 96745, upload-time = "2025-11-28T10:54:55.277Z" }, + { url = "https://files.pythonhosted.org/packages/84/ff/306d5d6aca1e04e596d2a504a59ff9a900623a6ec852f38aab99f384562d/inflate64-1.0.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:94a95f32087d223d2e119ff5c7c264109e8d4cb7e421e7a688a899a6fe021b38", size = 99795, upload-time = "2025-11-28T10:54:56.485Z" }, + { url = "https://files.pythonhosted.org/packages/cf/ec/d4caa4bf3c9e520c15e900fee5a00fc523953843e14aa378ca1abfb2b4ea/inflate64-1.0.4-cp312-cp312-win32.whl", hash = "sha256:ad4fa490bb7dc2a4640a3adaa2d5950f4a465ba034bbcf184c2103646e58ad97", size = 32956, upload-time = "2025-11-28T10:54:57.642Z" }, + { url = "https://files.pythonhosted.org/packages/33/c4/c0de4e9bdf12e449360b710e9ab5b5248804610f382b538773cbd07b72bb/inflate64-1.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:2c6befdf83d088a6e0d10d0873a9d4bfde2ce00ad7a52c8189cf303306f98030", size = 35577, upload-time = "2025-11-28T10:54:59.14Z" }, + { url = "https://files.pythonhosted.org/packages/80/07/03a5ef74ad3869b3c5af3b09216321f5a1a5a45265f7bd6d5abc669c7622/inflate64-1.0.4-cp312-cp312-win_arm64.whl", hash = "sha256:2b263c619469f90a75f29c421c53d31b208ad494a078235a8f6db2bc96583fdc", size = 33465, upload-time = "2025-11-28T10:55:00.568Z" }, + { url = "https://files.pythonhosted.org/packages/c2/55/b7de7ae318a4f233f892c4f7c8b7e0e8643abe3fdcc53ed35020a9fe3f47/inflate64-1.0.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c3f37540d0e64884a935fd62a7d17e40ab69f05ec63e815483b6513675d01bef", size = 58633, upload-time = "2025-11-28T10:55:01.931Z" }, + { url = "https://files.pythonhosted.org/packages/b8/5f/6f89c8524503fd7a9ca2bd91fe60d7291b3f684e9d41edb38ef49e10fc3d/inflate64-1.0.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4d24112180c95d12f279cade9a1e21f8be7f4790c4109c293292edf87d061992", size = 35864, upload-time = "2025-11-28T10:55:03.075Z" }, + { url = "https://files.pythonhosted.org/packages/7d/14/9eadd59244b38cf85ccd0ca43d1296c50b3a33aa37be4fb68a1928efa58c/inflate64-1.0.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5c098dab17821f466fc6e6a3d78fc6e0295bb51458015f03416b1d58d6a8df4f", size = 36019, upload-time = "2025-11-28T10:55:04.126Z" }, + { url = "https://files.pythonhosted.org/packages/ca/04/399e82d8f5003dd92c8a0c5c1a9a8ce0919114710a496cbe88848bff3a72/inflate64-1.0.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a984b9287ff0fb596eb058d66a9e94530556afd2b7c054b44f2e0aeeff894e8f", size = 98973, upload-time = "2025-11-28T10:55:05.229Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c5/038dc2593bbc4272d87eac8c9f75692267d47f834ced888f6d81995df606/inflate64-1.0.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f62a13d0327631778fa2a47c308ae2b07b2659b7bb8564783259ac65949f8c0c", size = 100777, upload-time = "2025-11-28T10:55:06.41Z" }, + { url = "https://files.pythonhosted.org/packages/74/4a/f6d3031dd3578510894a41bfe1ac149228970ce1629a43f20e0c5abbe8d1/inflate64-1.0.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:513201336fb3b0b7e2aee5dbbbe30a9f1b23291738b5ceb80076fc285f2ec2f1", size = 96967, upload-time = "2025-11-28T10:55:07.594Z" }, + { url = "https://files.pythonhosted.org/packages/26/ef/7ab3bde4e176609ae0e607a8a9bb38d201885275664a6d574299f5bf7850/inflate64-1.0.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:84ce3a97272ba745fce52b38363855c7201968f6402a794bbade774e64c657b9", size = 99997, upload-time = "2025-11-28T10:55:08.85Z" }, + { url = "https://files.pythonhosted.org/packages/39/59/8256b3e802e203c8645e0b32b25e6bd94508ad572593f0cdf8234db3879a/inflate64-1.0.4-cp313-cp313-win32.whl", hash = "sha256:332051a9d7e50579b90a3f555d68f53414b06f636c9ffe82e97c0baae3c8fbcc", size = 32958, upload-time = "2025-11-28T10:55:10.343Z" }, + { url = "https://files.pythonhosted.org/packages/e7/4f/5784ee1eb8260f2310e24ef2883f1f494f9332bcfde4ed14ee780372149e/inflate64-1.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:3983f53b590ff7d0ba243f664ce852aca882482f30f7a8eab33e10d769336d0c", size = 35578, upload-time = "2025-11-28T10:55:11.389Z" }, + { url = "https://files.pythonhosted.org/packages/39/e8/8d927770ce25dc9764c8104207a80653d65471d0a6a8f9ead350016e4586/inflate64-1.0.4-cp313-cp313-win_arm64.whl", hash = "sha256:118d8286f085e99a14341c76ef9fbffd56619ccc80318a9a204aea3dbfa71470", size = 33465, upload-time = "2025-11-28T10:55:12.824Z" }, + { url = "https://files.pythonhosted.org/packages/5b/fb/ec9d10f44f2fc7666ad5d70acae2b8a1941e8e08ccae1fad0820f7796be3/inflate64-1.0.4-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:4f61925b2d4248eac2ebb15350a80aaa0d1f7f1dc770bd5ebbbb3b0db4a6a416", size = 58727, upload-time = "2025-11-28T10:55:13.834Z" }, + { url = "https://files.pythonhosted.org/packages/81/80/24ba0d2ee14e07e275e9c5b058e59a8a58f8ef42dd51a78ebbfd7c857ac4/inflate64-1.0.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c1acf18b08b32981a4a11ec5a112b8ad5d7c7a5b15cb5bdbdb5b19201e9aa180", size = 35945, upload-time = "2025-11-28T10:55:15.225Z" }, + { url = "https://files.pythonhosted.org/packages/70/b8/073a79716e093db973b8823bdfb02e10fbdf65642dbe1fa3cda24832aeb2/inflate64-1.0.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:abddae8920b2eaef824254e14b8d4ff54afbe6194a1bbe9816584859f0c1244d", size = 36060, upload-time = "2025-11-28T10:55:16.261Z" }, + { url = "https://files.pythonhosted.org/packages/4c/f0/87d3c317ed0acd94f5e9b3b1b9e9000228ea2af0cb4618c62cbfc816da34/inflate64-1.0.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b303132cc562a906543a56f35c4e164e3880da6ff041cb4a7b1df9f9d2b4bb69", size = 98995, upload-time = "2025-11-28T10:55:17.405Z" }, + { url = "https://files.pythonhosted.org/packages/90/72/0b6035302e9c33f004240a50cb6e2e1fc7bb1f2b415b02d939c551bdd06b/inflate64-1.0.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f0993214dea0738c557fa56c13cd9083aef0097a201d726c21984ad7f577514", size = 100781, upload-time = "2025-11-28T10:55:18.597Z" }, + { url = "https://files.pythonhosted.org/packages/2b/05/5f383c615ec0f01bcbbc699a71da167623e494083ab7ed0df86b4bddf125/inflate64-1.0.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a6baedc3288d7a4ff588951d3a9a97a5391dceed6255ff5b16e42cae7274bfa9", size = 97038, upload-time = "2025-11-28T10:55:20.156Z" }, + { url = "https://files.pythonhosted.org/packages/4e/9a/c1482718c717c49c67490c42b4fdced9476e894eaebd52193e488c12e188/inflate64-1.0.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a846ce1f38845b20bef2625af1b512be83416d97824539524c5a34e7a729aec7", size = 100016, upload-time = "2025-11-28T10:55:21.337Z" }, + { url = "https://files.pythonhosted.org/packages/b8/7f/700ede7474e72a1c0e2e8fe36624cd0225ca8b2875eca33d64aa2de75f4d/inflate64-1.0.4-cp314-cp314-win32.whl", hash = "sha256:eef87908c780439393d577a155868317f0a275b47b417db9f47d8633ec791745", size = 33691, upload-time = "2025-11-28T10:55:22.515Z" }, + { url = "https://files.pythonhosted.org/packages/dd/51/f2972df8cceecc9bf3afa3353d517ffc7125285198c844588e9aaf98f5d0/inflate64-1.0.4-cp314-cp314-win_amd64.whl", hash = "sha256:fb2fdd63ef3933b67af98b3f2ee2f57e7787278041d7ba4821382fedd729b68a", size = 36304, upload-time = "2025-11-28T10:55:24.005Z" }, + { url = "https://files.pythonhosted.org/packages/29/77/16200aced67215119fb30ec9a5889b48289ee2fa5ce5137623a9ad41b2c4/inflate64-1.0.4-cp314-cp314-win_arm64.whl", hash = "sha256:2e129669a0243ac7816fd526946ee01c25688fe81623a6d6bc95b3156d80f4fb", size = 34491, upload-time = "2025-11-28T10:55:25.068Z" }, + { url = "https://files.pythonhosted.org/packages/c0/79/b466ec7666c40912ea81a305a8a2b75f5998e6cec1d3d75e067d76203731/inflate64-1.0.4-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:b17bf665d948dc4edeea0cd17752415d0cd7240c882b9c7e136ad4cc4321e9d4", size = 59300, upload-time = "2025-11-28T10:55:26.185Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ad/16e1168ac80f39894e6cb18b439eec63fec42cbced239aebfe12081b6ec7/inflate64-1.0.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:6751758301936fbb38fa38eb5312e14e27b6a1abf568f83c17557fab2694373d", size = 36258, upload-time = "2025-11-28T10:55:27.295Z" }, + { url = "https://files.pythonhosted.org/packages/25/42/c463b42fd8a7947b4445fbaf57c265bb7f3114362fb7aee6884ffd8b5341/inflate64-1.0.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d6a4136752aa2a544301059d8f13780aeb88c34d60770258436a87dacd3fc304", size = 36296, upload-time = "2025-11-28T10:55:28.632Z" }, + { url = "https://files.pythonhosted.org/packages/39/f1/cf6121926e405020e9e7bccb78ec7781fbc87500ec67368e7d9e866758be/inflate64-1.0.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:938ebc6b28578bfd365d1a9fdb18b7faab08321babeb2198e8025d07d8dc7fb5", size = 106788, upload-time = "2025-11-28T10:55:29.797Z" }, + { url = "https://files.pythonhosted.org/packages/9c/dd/b653f9962497cf4d3520d69272894c37fd76f86a0e04bb3bd9f32827dc2f/inflate64-1.0.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:61f51f80fa6f367288343c1a2cd20a42af454883087064e9274fd2a8c3a5a200", size = 107959, upload-time = "2025-11-28T10:55:31.306Z" }, + { url = "https://files.pythonhosted.org/packages/60/ae/65d88109b63611c9b6c29008201107127cf2603d186ab99beec39d85f38e/inflate64-1.0.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:172b51da7bbfa66b33f0a5405e944807b9949e92cf4cd9f983c07af8152766df", size = 104213, upload-time = "2025-11-28T10:55:32.506Z" }, + { url = "https://files.pythonhosted.org/packages/f9/94/c17de2f55b9fb1269bca4657f9089efe4ba0f3d4b652f07b34dfc69f69a2/inflate64-1.0.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8ca9a2985afd5a14fb48cd126a67e5944ccb7a0a6bdec58c4f796c8c88a84539", size = 106629, upload-time = "2025-11-28T10:55:33.735Z" }, + { url = "https://files.pythonhosted.org/packages/8e/30/8bbc587bb2ad09ab7edf1f9215b2c5faf4fa7ee7c071daefe9ed55e28814/inflate64-1.0.4-cp314-cp314t-win32.whl", hash = "sha256:f8964ceaabea294bc20abc9ef408c6aae978a75c25c83168a76cd87a37c38938", size = 33865, upload-time = "2025-11-28T10:55:35.335Z" }, + { url = "https://files.pythonhosted.org/packages/91/87/8bf6f412f93c8b6dc14866a021b83321331fbdd17f6ab902a24dbf88773d/inflate64-1.0.4-cp314-cp314t-win_amd64.whl", hash = "sha256:7d13b04cba65c12d21e65eaa77da9484e265e8e821b26e0761d1455ad3a878d9", size = 36943, upload-time = "2025-11-28T10:55:36.983Z" }, + { url = "https://files.pythonhosted.org/packages/7d/85/33447bb3c4e3c0ae7b1fde3aadc52a18b2b0193cfcf4f585977e924c6463/inflate64-1.0.4-cp314-cp314t-win_arm64.whl", hash = "sha256:9ae3ee727235a06dc3cd353ee5761fdd8e3b56ad119c711f61680528972a6ced", size = 34846, upload-time = "2025-11-28T10:55:38.433Z" }, +] + +[[package]] +name = "isodate" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload-time = "2024-10-08T23:04:11.5Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload-time = "2024-10-08T23:04:09.501Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "jmespath" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/59/322338183ecda247fb5d1763a6cbe46eff7222eaeebafd9fa65d4bf5cb11/jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", size = 27377, upload-time = "2026-01-22T16:35:26.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64", size = 20419, upload-time = "2026-01-22T16:35:24.919Z" }, +] + +[[package]] +name = "joblib" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cloudpickle" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d5/1d/537ab090f302b838943a1b56497dd53059b9a9b46a074936470173a2e207/joblib-1.6.0.tar.gz", hash = "sha256:2ccc96785b12046c08fd6d55839c12857831b54a3c1673ffadd2f04bfc4eda03", size = 327903, upload-time = "2026-08-31T09:39:04.122Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/53/84099323c2ec4be98d935f63c033ac4151ee83836ca1050ede3b3aadf155/joblib-1.6.0-py3-none-any.whl", hash = "sha256:3dbbf9f6e4b592a2357b854608e980fe6390d131d7a82f011a377ef2ebef7aba", size = 306115, upload-time = "2026-08-31T09:39:02.298Z" }, +] + +[[package]] +name = "jsonpickle" +version = "4.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/a6/d07afcfdef402900229bcca795f80506b207af13a838d4d99ad45abf530c/jsonpickle-4.1.1.tar.gz", hash = "sha256:f86e18f13e2b96c1c1eede0b7b90095bbb61d99fedc14813c44dc2f361dbbae1", size = 316885, upload-time = "2025-06-02T20:36:11.57Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/73/04df8a6fa66d43a9fd45c30f283cc4afff17da671886e451d52af60bdc7e/jsonpickle-4.1.1-py3-none-any.whl", hash = "sha256:bb141da6057898aa2438ff268362b126826c812a1721e31cf08a6e142910dc91", size = 47125, upload-time = "2025-06-02T20:36:08.647Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "multivolumefile" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/50/f0/a7786212b5a4cb9ba05ae84a2bbd11d1d0279523aea0424b6d981d652a14/multivolumefile-0.2.3.tar.gz", hash = "sha256:a0648d0aafbc96e59198d5c17e9acad7eb531abea51035d08ce8060dcad709d6", size = 77984, upload-time = "2021-04-29T12:18:39.882Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/31/ec5f46fd4c83185b806aa9c736e228cb780f13990a9cf4da0beb70025fcc/multivolumefile-0.2.3-py3-none-any.whl", hash = "sha256:237f4353b60af1703087cf7725755a1f6fcaeeea48421e1896940cd1c920d678", size = 17037, upload-time = "2021-04-29T12:18:38.886Z" }, +] + +[[package]] +name = "mypy" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1e/e3/034322d5a779685218ed69286c32faa505247f1f096251ef66c8fd203b08/mypy-1.17.0.tar.gz", hash = "sha256:e5d7ccc08ba089c06e2f5629c660388ef1fee708444f1dee0b9203fa031dee03", size = 3352114, upload-time = "2025-07-14T20:34:30.181Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/24/82efb502b0b0f661c49aa21cfe3e1999ddf64bf5500fc03b5a1536a39d39/mypy-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9d4fe5c72fd262d9c2c91c1117d16aac555e05f5beb2bae6a755274c6eec42be", size = 10914150, upload-time = "2025-07-14T20:31:51.985Z" }, + { url = "https://files.pythonhosted.org/packages/03/96/8ef9a6ff8cedadff4400e2254689ca1dc4b420b92c55255b44573de10c54/mypy-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d96b196e5c16f41b4f7736840e8455958e832871990c7ba26bf58175e357ed61", size = 10039845, upload-time = "2025-07-14T20:32:30.527Z" }, + { url = "https://files.pythonhosted.org/packages/df/32/7ce359a56be779d38021d07941cfbb099b41411d72d827230a36203dbb81/mypy-1.17.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:73a0ff2dd10337ceb521c080d4147755ee302dcde6e1a913babd59473904615f", size = 11837246, upload-time = "2025-07-14T20:32:01.28Z" }, + { url = "https://files.pythonhosted.org/packages/82/16/b775047054de4d8dbd668df9137707e54b07fe18c7923839cd1e524bf756/mypy-1.17.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24cfcc1179c4447854e9e406d3af0f77736d631ec87d31c6281ecd5025df625d", size = 12571106, upload-time = "2025-07-14T20:34:26.942Z" }, + { url = "https://files.pythonhosted.org/packages/a1/cf/fa33eaf29a606102c8d9ffa45a386a04c2203d9ad18bf4eef3e20c43ebc8/mypy-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c56f180ff6430e6373db7a1d569317675b0a451caf5fef6ce4ab365f5f2f6c3", size = 12759960, upload-time = "2025-07-14T20:33:42.882Z" }, + { url = "https://files.pythonhosted.org/packages/94/75/3f5a29209f27e739ca57e6350bc6b783a38c7621bdf9cac3ab8a08665801/mypy-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:eafaf8b9252734400f9b77df98b4eee3d2eecab16104680d51341c75702cad70", size = 9503888, upload-time = "2025-07-14T20:32:34.392Z" }, + { url = "https://files.pythonhosted.org/packages/12/e9/e6824ed620bbf51d3bf4d6cbbe4953e83eaf31a448d1b3cfb3620ccb641c/mypy-1.17.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f986f1cab8dbec39ba6e0eaa42d4d3ac6686516a5d3dccd64be095db05ebc6bb", size = 11086395, upload-time = "2025-07-14T20:34:11.452Z" }, + { url = "https://files.pythonhosted.org/packages/ba/51/a4afd1ae279707953be175d303f04a5a7bd7e28dc62463ad29c1c857927e/mypy-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:51e455a54d199dd6e931cd7ea987d061c2afbaf0960f7f66deef47c90d1b304d", size = 10120052, upload-time = "2025-07-14T20:33:09.897Z" }, + { url = "https://files.pythonhosted.org/packages/8a/71/19adfeac926ba8205f1d1466d0d360d07b46486bf64360c54cb5a2bd86a8/mypy-1.17.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3204d773bab5ff4ebbd1f8efa11b498027cd57017c003ae970f310e5b96be8d8", size = 11861806, upload-time = "2025-07-14T20:32:16.028Z" }, + { url = "https://files.pythonhosted.org/packages/0b/64/d6120eca3835baf7179e6797a0b61d6c47e0bc2324b1f6819d8428d5b9ba/mypy-1.17.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1051df7ec0886fa246a530ae917c473491e9a0ba6938cfd0ec2abc1076495c3e", size = 12744371, upload-time = "2025-07-14T20:33:33.503Z" }, + { url = "https://files.pythonhosted.org/packages/1f/dc/56f53b5255a166f5bd0f137eed960e5065f2744509dfe69474ff0ba772a5/mypy-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f773c6d14dcc108a5b141b4456b0871df638eb411a89cd1c0c001fc4a9d08fc8", size = 12914558, upload-time = "2025-07-14T20:33:56.961Z" }, + { url = "https://files.pythonhosted.org/packages/69/ac/070bad311171badc9add2910e7f89271695a25c136de24bbafc7eded56d5/mypy-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:1619a485fd0e9c959b943c7b519ed26b712de3002d7de43154a489a2d0fd817d", size = 9585447, upload-time = "2025-07-14T20:32:20.594Z" }, + { url = "https://files.pythonhosted.org/packages/be/7b/5f8ab461369b9e62157072156935cec9d272196556bdc7c2ff5f4c7c0f9b/mypy-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c41aa59211e49d717d92b3bb1238c06d387c9325d3122085113c79118bebb06", size = 11070019, upload-time = "2025-07-14T20:32:07.99Z" }, + { url = "https://files.pythonhosted.org/packages/9c/f8/c49c9e5a2ac0badcc54beb24e774d2499748302c9568f7f09e8730e953fa/mypy-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e69db1fb65b3114f98c753e3930a00514f5b68794ba80590eb02090d54a5d4a", size = 10114457, upload-time = "2025-07-14T20:33:47.285Z" }, + { url = "https://files.pythonhosted.org/packages/89/0c/fb3f9c939ad9beed3e328008b3fb90b20fda2cddc0f7e4c20dbefefc3b33/mypy-1.17.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:03ba330b76710f83d6ac500053f7727270b6b8553b0423348ffb3af6f2f7b889", size = 11857838, upload-time = "2025-07-14T20:33:14.462Z" }, + { url = "https://files.pythonhosted.org/packages/4c/66/85607ab5137d65e4f54d9797b77d5a038ef34f714929cf8ad30b03f628df/mypy-1.17.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:037bc0f0b124ce46bfde955c647f3e395c6174476a968c0f22c95a8d2f589bba", size = 12731358, upload-time = "2025-07-14T20:32:25.579Z" }, + { url = "https://files.pythonhosted.org/packages/73/d0/341dbbfb35ce53d01f8f2969facbb66486cee9804048bf6c01b048127501/mypy-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c38876106cb6132259683632b287238858bd58de267d80defb6f418e9ee50658", size = 12917480, upload-time = "2025-07-14T20:34:21.868Z" }, + { url = "https://files.pythonhosted.org/packages/64/63/70c8b7dbfc520089ac48d01367a97e8acd734f65bd07813081f508a8c94c/mypy-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:d30ba01c0f151998f367506fab31c2ac4527e6a7b2690107c7a7f9e3cb419a9c", size = 9589666, upload-time = "2025-07-14T20:34:16.841Z" }, + { url = "https://files.pythonhosted.org/packages/e3/fc/ee058cc4316f219078464555873e99d170bde1d9569abd833300dbeb484a/mypy-1.17.0-py3-none-any.whl", hash = "sha256:15d9d0018237ab058e5de3d8fce61b6fa72cc59cc78fd91f1b474bce12abf496", size = 2283195, upload-time = "2025-07-14T20:31:54.753Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "mysql-connector-python" +version = "26.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/ce/a53b169388f8c6a595cfa9a653138381f3afef1d2af60f5c1972d015f52f/mysql_connector_python-26.7.0.tar.gz", hash = "sha256:d8ff5ee236ea46661ee639336323e124ed868e37f3ea991bdc5de5a146f39fd5", size = 12256009, upload-time = "2026-07-29T10:24:13.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/3c/97a247c74b937f3087fd63f487a162b18dd8a28aabb4acf8e8f3ea2e9668/mysql_connector_python-26.7.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:27c9808be25cd6f0b173f3894407635764db01db039b8904f9b566f7d1795bcc", size = 20275920, upload-time = "2026-07-29T10:18:00.546Z" }, + { url = "https://files.pythonhosted.org/packages/52/fe/f55d4af14d733dde6af69e04313e18befa0a17992e2fac4741d77f17fa33/mysql_connector_python-26.7.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:638be8882de1ab4dd982a9db56afaa9e357468c7c5be9e20bd5e972ed4d68db2", size = 19837939, upload-time = "2026-07-29T10:18:02.979Z" }, + { url = "https://files.pythonhosted.org/packages/a3/6e/4e68293b76949d4b02aa5c708983a6e623a8a22470cda68a9ab7456d25a8/mysql_connector_python-26.7.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:55565516053e46a7a49cdd3a61f6fe3e5651747522597f5500de3e0655fd70d6", size = 21953561, upload-time = "2026-07-29T10:18:05.367Z" }, + { url = "https://files.pythonhosted.org/packages/0b/55/0a946351d7c9c0fbe018aef5c3d36818cc28ef1a8ee964354582743f31d1/mysql_connector_python-26.7.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:9fee7cfbdaa8ed295e05b0c66778760cdc8705b1edbbd1963da87a04c22fb6b1", size = 21744356, upload-time = "2026-07-29T10:18:07.797Z" }, + { url = "https://files.pythonhosted.org/packages/00/88/7060928e0b9743d5e49133be158c05399817e04f2eebdf23d562d2d805e7/mysql_connector_python-26.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:2fd56a86f316e676c4cafa16fe6149a08d8dd4f071f8b4aa298f5968b6eb1cbf", size = 17681665, upload-time = "2026-07-29T10:18:10.029Z" }, + { url = "https://files.pythonhosted.org/packages/e3/24/8c3516ee9edc3d740059253410bcb30a0dd7686bfd876eb905af6b92b4e6/mysql_connector_python-26.7.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9b63672cc381f097966faecd6940beb2a91f9efdf674a5807dc45f4efdb42e62", size = 20279974, upload-time = "2026-07-29T10:18:12.334Z" }, + { url = "https://files.pythonhosted.org/packages/ad/9c/d2f705d2caaf2c91d05bdea0d67dde7cc243a62245ee91fba4e201e24ea1/mysql_connector_python-26.7.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:375f9a042398e515a670003f26ab07e9b2ecaecba6eaf678f66fb5c2d36bd305", size = 19840279, upload-time = "2026-07-29T10:18:15.057Z" }, + { url = "https://files.pythonhosted.org/packages/4f/1c/73b9f540fbbcf78949e00d673db576f61ab93e7824e31dfb568295e58f2c/mysql_connector_python-26.7.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:227063e73c3d7b0326bc6ce9af47b8aa081e53a4e97e8683bba658569cb57271", size = 21954262, upload-time = "2026-07-29T10:18:18.148Z" }, + { url = "https://files.pythonhosted.org/packages/2d/0c/7dc1c1367a6a7881f20b0ed8bf92133d4710ea0dce22657972f56bf2a365/mysql_connector_python-26.7.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e118030bdd6a9882f5aa80a0c0c88d684d0e82d78747e5baf3c3e54a5a2d1348", size = 21746245, upload-time = "2026-07-29T10:18:20.65Z" }, + { url = "https://files.pythonhosted.org/packages/59/d1/1988f561be35527ab8a8906d97f52b60160ef50578cbe13096c66ef9d41a/mysql_connector_python-26.7.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:2be2f5b8ffc66bac305afee970256e74b2bc1d072cd0d21a277af3c9ff5fcb1d", size = 20280143, upload-time = "2026-07-29T10:18:22.998Z" }, + { url = "https://files.pythonhosted.org/packages/2e/78/d13a243bcc7299dfc74265f4896a1bf3c09d230b81f505c9da99593a4246/mysql_connector_python-26.7.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6e2d06c653c7f18ae91c5899e62210565660c871941769b1725c8dfa98da66b8", size = 19840273, upload-time = "2026-07-29T10:18:25.85Z" }, + { url = "https://files.pythonhosted.org/packages/40/cc/93c38d25b0c1b0b784b7cf7a94699b5d6379ce315329f9e789e827cd50d0/mysql_connector_python-26.7.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9f8fde7f909891bc5093f63e3b78a8f80b637591d8f77591a758cf78541325b8", size = 21954459, upload-time = "2026-07-29T10:18:28.76Z" }, + { url = "https://files.pythonhosted.org/packages/33/5a/ffc4663fb061f612b6efe2afc3b1c94cec4de86af8b4736935010c159263/mysql_connector_python-26.7.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ec8fe2f5af701d3146a6e31ef2fce293f2418c148a99df7c9917f87cfcdaea93", size = 21746465, upload-time = "2026-07-29T10:18:31.331Z" }, + { url = "https://files.pythonhosted.org/packages/78/68/1ee48a7c2c1104e6fe6cf8a98d6fbdba547d72331a3d1352fe2443e3cf95/mysql_connector_python-26.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd10764bd6dadb0ad44475126a87d184dac519712874459ab5f3976c23314f22", size = 17682618, upload-time = "2026-07-29T10:18:33.684Z" }, + { url = "https://files.pythonhosted.org/packages/eb/46/a2383cebea1cf22e07a0bc7b6e5035baac04de18415df188d257b68abab2/mysql_connector_python-26.7.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:c02cc3d5e4763ddc960fce521bd353b242cfec4c6a936234916f2597bfd656cd", size = 20280169, upload-time = "2026-07-29T10:18:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/62/4b/200023b5628ac075c1182c62999195dc096aeaf24787f0697f0830a886c4/mysql_connector_python-26.7.0-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:32f63bbf069b242921c13de05e56857625e167d64fc7fa4f15e05478d78c56fe", size = 19840283, upload-time = "2026-07-29T10:18:40.451Z" }, + { url = "https://files.pythonhosted.org/packages/74/7c/e57f2dada0a371c37715b2e402bf7b403718a265aa8afd341c91a7674d97/mysql_connector_python-26.7.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:a86c988f033d3e116c5d326931aabae340ebef0425399bcd5f076af877ae0fbc", size = 21956488, upload-time = "2026-07-29T10:18:42.91Z" }, + { url = "https://files.pythonhosted.org/packages/02/be/c57e60d49e481cd8a7e5ab0ed874bf18dc90f32aed6d3953213ddbb7d86a/mysql_connector_python-26.7.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:76cffea9fc0cd9d4d5c79935a18342d9680f2c0dc0d5675b966b3df06229f238", size = 21747047, upload-time = "2026-07-29T10:18:45.719Z" }, + { url = "https://files.pythonhosted.org/packages/34/a6/946645e3c7e8feb159c97b2e8f612075e4ec08c0fb7d26d310d7e1b0e22c/mysql_connector_python-26.7.0-cp314-cp314-win_amd64.whl", hash = "sha256:a4eac2b4bcbf18fbaab736b5c3996425728472fea7b3d71a8c7056aa6349471f", size = 18207344, upload-time = "2026-07-29T10:18:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/ff/01/07efeb3e3fc730f945af40ddf1f4c879c13945b193a94eba8e642c0d4176/mysql_connector_python-26.7.0-py2.py3-none-any.whl", hash = "sha256:43ee453b53556f690e4f4b795d3f17a1c6d4b45f729657bb0d999c8dfc9261d5", size = 480733, upload-time = "2026-07-29T10:18:49.777Z" }, +] + +[[package]] +name = "narwhals" +version = "2.25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/7b/6248dada39781db1ab3ebf08943080df0796098515a87f6f8696d14ec744/narwhals-2.25.0.tar.gz", hash = "sha256:62c036c810662bf7820b7737077176313bc59350eeeefb808510f388c743e4b2", size = 677076, upload-time = "2026-08-20T18:10:15.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/dc/55481808fd70ef1567cf13540ffd4702af3f74b112e35427564b03f79c2d/narwhals-2.25.0-py3-none-any.whl", hash = "sha256:1f0f403e8c7e4463cde9bfe78b12fdd809e3ae3dda6d9b2f802934fb9c7a6a8f", size = 467373, upload-time = "2026-08-20T18:10:13.834Z" }, +] + +[[package]] +name = "neo4j" +version = "5.28.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/69/4862fabc082f2447131aada5c91736155349d77ebf443af7f59553b7b789/neo4j-5.28.2.tar.gz", hash = "sha256:7d38e27e4f987a45cc9052500c6ee27325cb23dae6509037fe31dd7ddaed70c7", size = 231874, upload-time = "2025-07-30T06:04:34.669Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/00/1f74089c06aec1fac9390e2300a6a6b2381e0dac281783d64ccca9d681fd/neo4j-5.28.2-py3-none-any.whl", hash = "sha256:5c53b5c3eee6dee7e920c9724391aa38d7135a651e71b766da00533b92a91a94", size = 313156, upload-time = "2025-07-30T06:04:31.438Z" }, +] + +[[package]] +name = "nipyapi" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "packaging" }, + { name = "pysocks" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "setuptools" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/d5/52987d555a9dbf682cf1f8ec9d9f893da3b3c325a9ff0a293762ac70b9fd/nipyapi-1.7.0.tar.gz", hash = "sha256:bf8d692ccbecb3c5e2c8096a9b6e315e5648a889e33cec8ffa8d7389d88a0a64", size = 839473, upload-time = "2026-07-20T13:04:34.422Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/60/93adedac373a18760a0fcc5943acf109840c92f87879df70f11ae7c7ae66/nipyapi-1.7.0-py2.py3-none-any.whl", hash = "sha256:158b69aad46bf6eaff4ad45985a5c76b8a6fa34140f072730c862af6ff81e879", size = 1268648, upload-time = "2026-07-20T13:04:32.711Z" }, +] + +[[package]] +name = "nltk" +version = "3.10.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "defusedxml" }, + { name = "joblib" }, + { name = "regex" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e0/e6/fe51d2bb1a3b446f59c5c8165999a9fee208bc346af90a7cbf7657bc0d75/nltk-3.10.3.tar.gz", hash = "sha256:bb9327a461c3811c2fa4900e03840401f2126adfb30c0072827c433bd2444ea4", size = 5137152, upload-time = "2026-08-12T23:46:37.258Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/6d/ebd2af4640b12168fdf0cb74b6118df2f32a2f62ec7e0c06fbfd80706639/nltk-3.10.3-py3-none-any.whl", hash = "sha256:ff9598a8e20518ee0d557745890cc4435b9578489e2dcbc69c4f81fa060caf7c", size = 1798643, upload-time = "2026-08-12T23:44:13.478Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/fd/0005efbd0af48e55eb3c7208af93f2862d4b1a56cd78e84309a2d959208d/numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae", size = 20723651, upload-time = "2026-01-31T23:13:10.135Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/44/71852273146957899753e69986246d6a176061ea183407e95418c2aa4d9a/numpy-2.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7e88598032542bd49af7c4747541422884219056c268823ef6e5e89851c8825", size = 16955478, upload-time = "2026-01-31T23:10:25.623Z" }, + { url = "https://files.pythonhosted.org/packages/74/41/5d17d4058bd0cd96bcbd4d9ff0fb2e21f52702aab9a72e4a594efa18692f/numpy-2.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7edc794af8b36ca37ef5fcb5e0d128c7e0595c7b96a2318d1badb6fcd8ee86b1", size = 14965467, upload-time = "2026-01-31T23:10:28.186Z" }, + { url = "https://files.pythonhosted.org/packages/49/48/fb1ce8136c19452ed15f033f8aee91d5defe515094e330ce368a0647846f/numpy-2.4.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6e9f61981ace1360e42737e2bae58b27bf28a1b27e781721047d84bd754d32e7", size = 5475172, upload-time = "2026-01-31T23:10:30.848Z" }, + { url = "https://files.pythonhosted.org/packages/40/a9/3feb49f17bbd1300dd2570432961f5c8a4ffeff1db6f02c7273bd020a4c9/numpy-2.4.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cb7bbb88aa74908950d979eeaa24dbdf1a865e3c7e45ff0121d8f70387b55f73", size = 6805145, upload-time = "2026-01-31T23:10:32.352Z" }, + { url = "https://files.pythonhosted.org/packages/3f/39/fdf35cbd6d6e2fcad42fcf85ac04a85a0d0fbfbf34b30721c98d602fd70a/numpy-2.4.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f069069931240b3fc703f1e23df63443dbd6390614c8c44a87d96cd0ec81eb1", size = 15966084, upload-time = "2026-01-31T23:10:34.502Z" }, + { url = "https://files.pythonhosted.org/packages/1b/46/6fa4ea94f1ddf969b2ee941290cca6f1bfac92b53c76ae5f44afe17ceb69/numpy-2.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c02ef4401a506fb60b411467ad501e1429a3487abca4664871d9ae0b46c8ba32", size = 16899477, upload-time = "2026-01-31T23:10:37.075Z" }, + { url = "https://files.pythonhosted.org/packages/09/a1/2a424e162b1a14a5bd860a464ab4e07513916a64ab1683fae262f735ccd2/numpy-2.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2653de5c24910e49c2b106499803124dde62a5a1fe0eedeaecf4309a5f639390", size = 17323429, upload-time = "2026-01-31T23:10:39.704Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a2/73014149ff250628df72c58204822ac01d768697913881aacf839ff78680/numpy-2.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1ae241bbfc6ae276f94a170b14785e561cb5e7f626b6688cf076af4110887413", size = 18635109, upload-time = "2026-01-31T23:10:41.924Z" }, + { url = "https://files.pythonhosted.org/packages/6c/0c/73e8be2f1accd56df74abc1c5e18527822067dced5ec0861b5bb882c2ce0/numpy-2.4.2-cp311-cp311-win32.whl", hash = "sha256:df1b10187212b198dd45fa943d8985a3c8cf854aed4923796e0e019e113a1bda", size = 6237915, upload-time = "2026-01-31T23:10:45.26Z" }, + { url = "https://files.pythonhosted.org/packages/76/ae/e0265e0163cf127c24c3969d29f1c4c64551a1e375d95a13d32eab25d364/numpy-2.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:b9c618d56a29c9cb1c4da979e9899be7578d2e0b3c24d52079c166324c9e8695", size = 12607972, upload-time = "2026-01-31T23:10:47.021Z" }, + { url = "https://files.pythonhosted.org/packages/29/a5/c43029af9b8014d6ea157f192652c50042e8911f4300f8f6ed3336bf437f/numpy-2.4.2-cp311-cp311-win_arm64.whl", hash = "sha256:47c5a6ed21d9452b10227e5e8a0e1c22979811cad7dcc19d8e3e2fb8fa03f1a3", size = 10485763, upload-time = "2026-01-31T23:10:50.087Z" }, + { url = "https://files.pythonhosted.org/packages/51/6e/6f394c9c77668153e14d4da83bcc247beb5952f6ead7699a1a2992613bea/numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a", size = 16667963, upload-time = "2026-01-31T23:10:52.147Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f8/55483431f2b2fd015ae6ed4fe62288823ce908437ed49db5a03d15151678/numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1", size = 14693571, upload-time = "2026-01-31T23:10:54.789Z" }, + { url = "https://files.pythonhosted.org/packages/2f/20/18026832b1845cdc82248208dd929ca14c9d8f2bac391f67440707fff27c/numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e", size = 5203469, upload-time = "2026-01-31T23:10:57.343Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/2eb97c8a77daaba34eaa3fa7241a14ac5f51c46a6bd5911361b644c4a1e2/numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27", size = 6550820, upload-time = "2026-01-31T23:10:59.429Z" }, + { url = "https://files.pythonhosted.org/packages/b1/91/b97fdfd12dc75b02c44e26c6638241cc004d4079a0321a69c62f51470c4c/numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548", size = 15663067, upload-time = "2026-01-31T23:11:01.291Z" }, + { url = "https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f", size = 16619782, upload-time = "2026-01-31T23:11:03.669Z" }, + { url = "https://files.pythonhosted.org/packages/b7/83/9751502164601a79e18847309f5ceec0b1446d7b6aa12305759b72cf98b2/numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460", size = 17013128, upload-time = "2026-01-31T23:11:05.913Z" }, + { url = "https://files.pythonhosted.org/packages/61/c4/c4066322256ec740acc1c8923a10047818691d2f8aec254798f3dd90f5f2/numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba", size = 18345324, upload-time = "2026-01-31T23:11:08.248Z" }, + { url = "https://files.pythonhosted.org/packages/ab/af/6157aa6da728fa4525a755bfad486ae7e3f76d4c1864138003eb84328497/numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f", size = 5960282, upload-time = "2026-01-31T23:11:10.497Z" }, + { url = "https://files.pythonhosted.org/packages/92/0f/7ceaaeaacb40567071e94dbf2c9480c0ae453d5bb4f52bea3892c39dc83c/numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85", size = 12314210, upload-time = "2026-01-31T23:11:12.176Z" }, + { url = "https://files.pythonhosted.org/packages/2f/a3/56c5c604fae6dd40fa2ed3040d005fca97e91bd320d232ac9931d77ba13c/numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa", size = 10220171, upload-time = "2026-01-31T23:11:14.684Z" }, + { url = "https://files.pythonhosted.org/packages/a1/22/815b9fe25d1d7ae7d492152adbc7226d3eff731dffc38fe970589fcaaa38/numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c", size = 16663696, upload-time = "2026-01-31T23:11:17.516Z" }, + { url = "https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979", size = 14688322, upload-time = "2026-01-31T23:11:19.883Z" }, + { url = "https://files.pythonhosted.org/packages/da/b4/f805ab79293c728b9a99438775ce51885fd4f31b76178767cfc718701a39/numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98", size = 5198157, upload-time = "2026-01-31T23:11:22.375Z" }, + { url = "https://files.pythonhosted.org/packages/74/09/826e4289844eccdcd64aac27d13b0fd3f32039915dd5b9ba01baae1f436c/numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef", size = 6546330, upload-time = "2026-01-31T23:11:23.958Z" }, + { url = "https://files.pythonhosted.org/packages/19/fb/cbfdbfa3057a10aea5422c558ac57538e6acc87ec1669e666d32ac198da7/numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7", size = 15660968, upload-time = "2026-01-31T23:11:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499", size = 16607311, upload-time = "2026-01-31T23:11:28.117Z" }, + { url = "https://files.pythonhosted.org/packages/14/d9/4b5adfc39a43fa6bf918c6d544bc60c05236cc2f6339847fc5b35e6cb5b0/numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb", size = 17012850, upload-time = "2026-01-31T23:11:30.888Z" }, + { url = "https://files.pythonhosted.org/packages/b7/20/adb6e6adde6d0130046e6fdfb7675cc62bc2f6b7b02239a09eb58435753d/numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7", size = 18334210, upload-time = "2026-01-31T23:11:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/78/0e/0a73b3dff26803a8c02baa76398015ea2a5434d9b8265a7898a6028c1591/numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110", size = 5958199, upload-time = "2026-01-31T23:11:35.385Z" }, + { url = "https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622", size = 12310848, upload-time = "2026-01-31T23:11:38.001Z" }, + { url = "https://files.pythonhosted.org/packages/6e/8d/6da186483e308da5da1cc6918ce913dcfe14ffde98e710bfeff2a6158d4e/numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71", size = 10221082, upload-time = "2026-01-31T23:11:40.392Z" }, + { url = "https://files.pythonhosted.org/packages/25/a1/9510aa43555b44781968935c7548a8926274f815de42ad3997e9e83680dd/numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262", size = 14815866, upload-time = "2026-01-31T23:11:42.495Z" }, + { url = "https://files.pythonhosted.org/packages/36/30/6bbb5e76631a5ae46e7923dd16ca9d3f1c93cfa8d4ed79a129814a9d8db3/numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913", size = 5325631, upload-time = "2026-01-31T23:11:44.7Z" }, + { url = "https://files.pythonhosted.org/packages/46/00/3a490938800c1923b567b3a15cd17896e68052e2145d8662aaf3e1ffc58f/numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab", size = 6646254, upload-time = "2026-01-31T23:11:46.341Z" }, + { url = "https://files.pythonhosted.org/packages/d3/e9/fac0890149898a9b609caa5af7455a948b544746e4b8fe7c212c8edd71f8/numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82", size = 15720138, upload-time = "2026-01-31T23:11:48.082Z" }, + { url = "https://files.pythonhosted.org/packages/ea/5c/08887c54e68e1e28df53709f1893ce92932cc6f01f7c3d4dc952f61ffd4e/numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f", size = 16655398, upload-time = "2026-01-31T23:11:50.293Z" }, + { url = "https://files.pythonhosted.org/packages/4d/89/253db0fa0e66e9129c745e4ef25631dc37d5f1314dad2b53e907b8538e6d/numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554", size = 17079064, upload-time = "2026-01-31T23:11:52.927Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d5/cbade46ce97c59c6c3da525e8d95b7abe8a42974a1dc5c1d489c10433e88/numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257", size = 18379680, upload-time = "2026-01-31T23:11:55.22Z" }, + { url = "https://files.pythonhosted.org/packages/40/62/48f99ae172a4b63d981babe683685030e8a3df4f246c893ea5c6ef99f018/numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657", size = 6082433, upload-time = "2026-01-31T23:11:58.096Z" }, + { url = "https://files.pythonhosted.org/packages/07/38/e054a61cfe48ad9f1ed0d188e78b7e26859d0b60ef21cd9de4897cdb5326/numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b", size = 12451181, upload-time = "2026-01-31T23:11:59.782Z" }, + { url = "https://files.pythonhosted.org/packages/6e/a4/a05c3a6418575e185dd84d0b9680b6bb2e2dc3e4202f036b7b4e22d6e9dc/numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1", size = 10290756, upload-time = "2026-01-31T23:12:02.438Z" }, + { url = "https://files.pythonhosted.org/packages/18/88/b7df6050bf18fdcfb7046286c6535cabbdd2064a3440fca3f069d319c16e/numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b", size = 16663092, upload-time = "2026-01-31T23:12:04.521Z" }, + { url = "https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000", size = 14698770, upload-time = "2026-01-31T23:12:06.96Z" }, + { url = "https://files.pythonhosted.org/packages/fb/0b/f9e49ba6c923678ad5bc38181c08ac5e53b7a5754dbca8e581aa1a56b1ff/numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1", size = 5208562, upload-time = "2026-01-31T23:12:09.632Z" }, + { url = "https://files.pythonhosted.org/packages/7d/12/d7de8f6f53f9bb76997e5e4c069eda2051e3fe134e9181671c4391677bb2/numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74", size = 6543710, upload-time = "2026-01-31T23:12:11.969Z" }, + { url = "https://files.pythonhosted.org/packages/09/63/c66418c2e0268a31a4cf8a8b512685748200f8e8e8ec6c507ce14e773529/numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a", size = 15677205, upload-time = "2026-01-31T23:12:14.33Z" }, + { url = "https://files.pythonhosted.org/packages/5d/6c/7f237821c9642fb2a04d2f1e88b4295677144ca93285fd76eff3bcba858d/numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325", size = 16611738, upload-time = "2026-01-31T23:12:16.525Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a7/39c4cdda9f019b609b5c473899d87abff092fc908cfe4d1ecb2fcff453b0/numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909", size = 17028888, upload-time = "2026-01-31T23:12:19.306Z" }, + { url = "https://files.pythonhosted.org/packages/da/b3/e84bb64bdfea967cc10950d71090ec2d84b49bc691df0025dddb7c26e8e3/numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a", size = 18339556, upload-time = "2026-01-31T23:12:21.816Z" }, + { url = "https://files.pythonhosted.org/packages/88/f5/954a291bc1192a27081706862ac62bb5920fbecfbaa302f64682aa90beed/numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a", size = 6006899, upload-time = "2026-01-31T23:12:24.14Z" }, + { url = "https://files.pythonhosted.org/packages/05/cb/eff72a91b2efdd1bc98b3b8759f6a1654aa87612fc86e3d87d6fe4f948c4/numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75", size = 12443072, upload-time = "2026-01-31T23:12:26.33Z" }, + { url = "https://files.pythonhosted.org/packages/37/75/62726948db36a56428fce4ba80a115716dc4fad6a3a4352487f8bb950966/numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05", size = 10494886, upload-time = "2026-01-31T23:12:28.488Z" }, + { url = "https://files.pythonhosted.org/packages/36/2f/ee93744f1e0661dc267e4b21940870cabfae187c092e1433b77b09b50ac4/numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308", size = 14818567, upload-time = "2026-01-31T23:12:30.709Z" }, + { url = "https://files.pythonhosted.org/packages/a7/24/6535212add7d76ff938d8bdc654f53f88d35cddedf807a599e180dcb8e66/numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef", size = 5328372, upload-time = "2026-01-31T23:12:32.962Z" }, + { url = "https://files.pythonhosted.org/packages/5e/9d/c48f0a035725f925634bf6b8994253b43f2047f6778a54147d7e213bc5a7/numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d", size = 6649306, upload-time = "2026-01-31T23:12:34.797Z" }, + { url = "https://files.pythonhosted.org/packages/81/05/7c73a9574cd4a53a25907bad38b59ac83919c0ddc8234ec157f344d57d9a/numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8", size = 15722394, upload-time = "2026-01-31T23:12:36.565Z" }, + { url = "https://files.pythonhosted.org/packages/35/fa/4de10089f21fc7d18442c4a767ab156b25c2a6eaf187c0db6d9ecdaeb43f/numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5", size = 16653343, upload-time = "2026-01-31T23:12:39.188Z" }, + { url = "https://files.pythonhosted.org/packages/b8/f9/d33e4ffc857f3763a57aa85650f2e82486832d7492280ac21ba9efda80da/numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e", size = 17078045, upload-time = "2026-01-31T23:12:42.041Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b8/54bdb43b6225badbea6389fa038c4ef868c44f5890f95dd530a218706da3/numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a", size = 18380024, upload-time = "2026-01-31T23:12:44.331Z" }, + { url = "https://files.pythonhosted.org/packages/a5/55/6e1a61ded7af8df04016d81b5b02daa59f2ea9252ee0397cb9f631efe9e5/numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443", size = 6153937, upload-time = "2026-01-31T23:12:47.229Z" }, + { url = "https://files.pythonhosted.org/packages/45/aa/fa6118d1ed6d776b0983f3ceac9b1a5558e80df9365b1c3aa6d42bf9eee4/numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236", size = 12631844, upload-time = "2026-01-31T23:12:48.997Z" }, + { url = "https://files.pythonhosted.org/packages/32/0a/2ec5deea6dcd158f254a7b372fb09cfba5719419c8d66343bab35237b3fb/numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181", size = 10565379, upload-time = "2026-01-31T23:12:51.345Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f8/50e14d36d915ef64d8f8bc4a087fc8264d82c785eda6711f80ab7e620335/numpy-2.4.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:89f7268c009bc492f506abd6f5265defa7cb3f7487dc21d357c3d290add45082", size = 16833179, upload-time = "2026-01-31T23:12:53.5Z" }, + { url = "https://files.pythonhosted.org/packages/17/17/809b5cad63812058a8189e91a1e2d55a5a18fd04611dbad244e8aeae465c/numpy-2.4.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6dee3bb76aa4009d5a912180bf5b2de012532998d094acee25d9cb8dee3e44a", size = 14889755, upload-time = "2026-01-31T23:12:55.933Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ea/181b9bcf7627fc8371720316c24db888dcb9829b1c0270abf3d288b2e29b/numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:cd2bd2bbed13e213d6b55dc1d035a4f91748a7d3edc9480c13898b0353708920", size = 5399500, upload-time = "2026-01-31T23:12:58.671Z" }, + { url = "https://files.pythonhosted.org/packages/33/9f/413adf3fc955541ff5536b78fcf0754680b3c6d95103230252a2c9408d23/numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:cf28c0c1d4c4bf00f509fa7eb02c58d7caf221b50b467bcb0d9bbf1584d5c821", size = 6714252, upload-time = "2026-01-31T23:13:00.518Z" }, + { url = "https://files.pythonhosted.org/packages/91/da/643aad274e29ccbdf42ecd94dafe524b81c87bcb56b83872d54827f10543/numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e04ae107ac591763a47398bb45b568fc38f02dbc4aa44c063f67a131f99346cb", size = 15797142, upload-time = "2026-01-31T23:13:02.219Z" }, + { url = "https://files.pythonhosted.org/packages/66/27/965b8525e9cb5dc16481b30a1b3c21e50c7ebf6e9dbd48d0c4d0d5089c7e/numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:602f65afdef699cda27ec0b9224ae5dc43e328f4c24c689deaf77133dbee74d0", size = 16727979, upload-time = "2026-01-31T23:13:04.62Z" }, + { url = "https://files.pythonhosted.org/packages/de/e5/b7d20451657664b07986c2f6e3be564433f5dcaf3482d68eaecd79afaf03/numpy-2.4.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be71bf1edb48ebbbf7f6337b5bfd2f895d1902f6335a5830b20141fc126ffba0", size = 12502577, upload-time = "2026-01-31T23:13:07.08Z" }, +] + +[[package]] +name = "opensearch-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "events" }, + { name = "python-dateutil" }, + { name = "requests" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b8/58/ecec7f855aae7bcfb08f570088c6cb993f68c361a0727abab35dbf021acb/opensearch_py-3.0.0.tar.gz", hash = "sha256:ebb38f303f8a3f794db816196315bcddad880be0dc75094e3334bc271db2ed39", size = 248890, upload-time = "2025-06-17T05:39:48.453Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/e0/69fd114c607b0323d3f864ab4a5ecb87d76ec5a172d2e36a739c8baebea1/opensearch_py-3.0.0-py3-none-any.whl", hash = "sha256:842bf5d56a4a0d8290eda9bb921c50f3080e5dc4e5fefb9c9648289da3f6a8bb", size = 371491, upload-time = "2025-06-17T05:39:46.539Z" }, +] + +[[package]] +name = "overrides" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/67/9b/58655bed3190319830d9ae5fb859c51a14ed35d4ea79d78bf036b5b768d7/overrides-7.0.0.tar.gz", hash = "sha256:49754f440f29de43975e27838942331adcc7521e6f552fdbb434dd5b4f895b3d", size = 24631, upload-time = "2022-10-09T15:46:39.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ca/bf16d08734ec6d5d502fff617973136e3df8cd0fbfaed339aa169032205b/overrides-7.0.0-py3-none-any.whl", hash = "sha256:f6e4696acba91e5d4fd8ebb6e05cc9fc4d49c7b0ea4064cc0a1f64a1e09861c8", size = 17838, upload-time = "2022-10-09T15:46:37.803Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" }, + { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" }, + { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" }, + { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, +] + +[[package]] +name = "pillow" +version = "12.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/3d/bb7fca845737cf9d7dbde16ed1843984665ff2e0a518f5db43e77ec540b9/pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce", size = 47025035, upload-time = "2026-07-01T11:56:38.965Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/c8/0a78b0e02d7ac54bc03e5321c9220da52f0c2ea83b21f7c40e7f3169c502/pillow-12.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756", size = 5392415, upload-time = "2026-07-01T11:53:47.162Z" }, + { url = "https://files.pythonhosted.org/packages/b2/5b/a02d30018abd97ced9f5a6c63d28597694a00d066516b9c1c6de45859fc9/pillow-12.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6", size = 4785266, upload-time = "2026-07-01T11:53:49.079Z" }, + { url = "https://files.pythonhosted.org/packages/c8/98/766667a4be768150a202836acd9fad19c06824ca86c4286d3cf6b274964e/pillow-12.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd", size = 6263814, upload-time = "2026-07-01T11:53:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2d/ede717bc1144f63886c21fd349bb95860b0d1a21149ff16f2bb362b612b6/pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd", size = 6934408, upload-time = "2026-07-01T11:53:53.487Z" }, + { url = "https://files.pythonhosted.org/packages/a3/48/9c58b685e69d49c31af6c8eb9012055fab7e665785165c84796e2c73ce72/pillow-12.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c", size = 6337160, upload-time = "2026-07-01T11:53:55.457Z" }, + { url = "https://files.pythonhosted.org/packages/ff/fa/dc2a5c0ba6df93f67c31d34b808b7ce440b40cdbf96f0b81cde1d1e6fa93/pillow-12.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5", size = 7045172, upload-time = "2026-07-01T11:53:57.736Z" }, + { url = "https://files.pythonhosted.org/packages/86/a5/444817a4d4c4c2417df00513086ca196f388d8f9ef40c2e4ccd1ad1af54b/pillow-12.3.0-cp311-cp311-win32.whl", hash = "sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b", size = 6472232, upload-time = "2026-07-01T11:53:59.767Z" }, + { url = "https://files.pythonhosted.org/packages/63/c6/4bad1b18d132a50b27e1365e1ab163616f7a5bb56d330f66f9d1d9d4f9d4/pillow-12.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a", size = 7233653, upload-time = "2026-07-01T11:54:02.066Z" }, + { url = "https://files.pythonhosted.org/packages/fd/16/00f91ab7760dc842f5aad55217e80fc4a7067a0604535249bc8a2d6d9870/pillow-12.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26", size = 2568195, upload-time = "2026-07-01T11:54:04.622Z" }, + { url = "https://files.pythonhosted.org/packages/37/bf/fb3ebff8ddcb76aac5a01389251bbbb9519922a9b520d8247c1ca864a25d/pillow-12.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965", size = 5345969, upload-time = "2026-07-01T11:54:06.397Z" }, + { url = "https://files.pythonhosted.org/packages/d8/66/9a386a92561f402389a4fc70c18838bf6d35eb5eb5c6850b4b2dc64f5048/pillow-12.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7", size = 4780323, upload-time = "2026-07-01T11:54:09.351Z" }, + { url = "https://files.pythonhosted.org/packages/25/27/ac8f99618ffd3dde21db0f4d4b1d2ab00c0880595bfd17df103f7f39fd0c/pillow-12.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9", size = 6266838, upload-time = "2026-07-01T11:54:11.71Z" }, + { url = "https://files.pythonhosted.org/packages/84/21/a35af28dcc61f37ed850a2d64c65c701321dfbf25085e469d5559360cbbf/pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91", size = 6940830, upload-time = "2026-07-01T11:54:13.732Z" }, + { url = "https://files.pythonhosted.org/packages/eb/51/8b08617af3ad95e33ce6d7dd2c99ed6c8298f7fb131636303956be022e25/pillow-12.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c", size = 6344383, upload-time = "2026-07-01T11:54:15.756Z" }, + { url = "https://files.pythonhosted.org/packages/1d/72/cf78ac9780bb93c28328f408973845a309d4d145041665f734572ced1b52/pillow-12.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df", size = 7052934, upload-time = "2026-07-01T11:54:17.721Z" }, + { url = "https://files.pythonhosted.org/packages/20/20/25e0f4dc178a6bc0696793720055519a0de89e7661dae886992decbd2f81/pillow-12.3.0-cp312-cp312-win32.whl", hash = "sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f", size = 6472684, upload-time = "2026-07-01T11:54:19.839Z" }, + { url = "https://files.pythonhosted.org/packages/45/89/da2f7971a317f83d807fdd4065c0af40208e59e692cc43d315a71a0e96d1/pillow-12.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09", size = 7227137, upload-time = "2026-07-01T11:54:22.025Z" }, + { url = "https://files.pythonhosted.org/packages/de/47/4845a0a6c0dbf1db8456bd9fc791f13c5ced7ced20606d08a0aacfd25b49/pillow-12.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510", size = 2568267, upload-time = "2026-07-01T11:54:24.051Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ac/31fb64e1e7efb5a4b50cd3d92049ba89ac6e4d8d3bb6a74e15048ca3353e/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89", size = 4161684, upload-time = "2026-07-01T11:54:25.934Z" }, + { url = "https://files.pythonhosted.org/packages/87/b4/9805e23d2b4d77842b468513841fda254ee42f0289d25088340e4ff46e2d/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace", size = 4255487, upload-time = "2026-07-01T11:54:27.935Z" }, + { url = "https://files.pythonhosted.org/packages/df/39/ecf519435a200c693fe053a6ee4d835b41cf963a4dfc2551c4e637cb2a71/pillow-12.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec", size = 3696433, upload-time = "2026-07-01T11:54:29.813Z" }, + { url = "https://files.pythonhosted.org/packages/42/92/2fc3ffad878ae8dd5469ec1bc8eb83b71f48e13efdf68f02709003982a32/pillow-12.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66", size = 5345889, upload-time = "2026-07-01T11:54:31.97Z" }, + { url = "https://files.pythonhosted.org/packages/10/76/8803c13605b763d33d156c4678fc77f8443389c0c51c8aef707bb02015f4/pillow-12.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35", size = 4780109, upload-time = "2026-07-01T11:54:34.026Z" }, + { url = "https://files.pythonhosted.org/packages/1f/01/e18aff37cb0b4aac47ac90f016d347a49aca667ef97f190b06ac2aabc928/pillow-12.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65", size = 6263736, upload-time = "2026-07-01T11:54:36.131Z" }, + { url = "https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3", size = 6937129, upload-time = "2026-07-01T11:54:38.216Z" }, + { url = "https://files.pythonhosted.org/packages/70/4d/105627a13300c5e0df1d174230b32fd1273062c96f7745fd552b945d1e1d/pillow-12.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a", size = 6339562, upload-time = "2026-07-01T11:54:40.354Z" }, + { url = "https://files.pythonhosted.org/packages/6b/1d/f13de01a553988ab895ba1c722e06cf3144d4f57656fd5b81b6d881f1179/pillow-12.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e", size = 7049439, upload-time = "2026-07-01T11:54:42.489Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f9/066794cca041b969964f779ee5fa66a9498bbf34248ac39c5d7954e4198f/pillow-12.3.0-cp313-cp313-win32.whl", hash = "sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f", size = 6473287, upload-time = "2026-07-01T11:54:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/7a58e61d62be561da3a356fe2384d4059a6345fc130e23ef1c36a5b81d24/pillow-12.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8", size = 7239691, upload-time = "2026-07-01T11:54:47.141Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b0/c4ed4f0ef8f8fa5ee8351537db6650bb8189f7e118842978dd6589065692/pillow-12.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b", size = 2568185, upload-time = "2026-07-01T11:54:49.137Z" }, + { url = "https://files.pythonhosted.org/packages/dc/01/001f65b68192f0228cc1dbbc8d2530ab5d58b61037ba0587f946fea607cd/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330", size = 4161736, upload-time = "2026-07-01T11:54:51.156Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d2/0219746d0fd16fc8a84498e79452375be3797d3ce4044596ce565164b84f/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217", size = 4255435, upload-time = "2026-07-01T11:54:53.414Z" }, + { url = "https://files.pythonhosted.org/packages/c8/02/8d0bc62ef0302318c46ff2a512822d2610e81c7aa46c9b3abe6cbaca5ad0/pillow-12.3.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930", size = 3696262, upload-time = "2026-07-01T11:54:55.739Z" }, + { url = "https://files.pythonhosted.org/packages/85/e2/73c77d218410b14f5f2d565e8a998d5317b7b9c75368d29985139f7a46f0/pillow-12.3.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8", size = 5350344, upload-time = "2026-07-01T11:54:57.657Z" }, + { url = "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0", size = 4780131, upload-time = "2026-07-01T11:54:59.713Z" }, + { url = "https://files.pythonhosted.org/packages/b1/9d/8b2c807dbef61a5197c047afe99823787eb66f63daf9fb2432f91d6f0462/pillow-12.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321", size = 6263757, upload-time = "2026-07-01T11:55:01.778Z" }, + { url = "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b", size = 6936962, upload-time = "2026-07-01T11:55:03.93Z" }, + { url = "https://files.pythonhosted.org/packages/18/7e/e483414b35800b86b6f08dbbc7803fb5cd52c4d6f897f47d53ea2c7e6f65/pillow-12.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198", size = 6339171, upload-time = "2026-07-01T11:55:05.989Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f4/68c491844841ede6bed70189546b3ee9731cf9f2cbad396faff5e1ccba45/pillow-12.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130", size = 7048116, upload-time = "2026-07-01T11:55:08.131Z" }, + { url = "https://files.pythonhosted.org/packages/a3/34/77f3f793fed8efc7d243f21b33c5a3f0d1c97ee70346d3db855587e155ff/pillow-12.3.0-cp314-cp314-win32.whl", hash = "sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a", size = 6467209, upload-time = "2026-07-01T11:55:10.408Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d", size = 7237707, upload-time = "2026-07-01T11:55:12.745Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ac/6b11f2875f1c2ac040d84e1bbf9cf22a88038f901ca1037898b280b38365/pillow-12.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838", size = 2565995, upload-time = "2026-07-01T11:55:14.736Z" }, + { url = "https://files.pythonhosted.org/packages/52/69/c2208e56af9bfc1913afb24020297a691eb1d4ef688474c8a04913f65e04/pillow-12.3.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e", size = 5352503, upload-time = "2026-07-01T11:55:17.076Z" }, + { url = "https://files.pythonhosted.org/packages/07/70/e5686d753e898a45d778ff1718dba8516ead6ab6b95d85fc8c4b70650cf2/pillow-12.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17", size = 4782956, upload-time = "2026-07-01T11:55:19.448Z" }, + { url = "https://files.pythonhosted.org/packages/d5/37/25c6692f06927ee973ff18c8d9ee98ad0b4d84ee67a09610c2dd1447958e/pillow-12.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385", size = 6322855, upload-time = "2026-07-01T11:55:21.613Z" }, + { url = "https://files.pythonhosted.org/packages/cc/91/420637fcb8f1bc11029e403b4538e6694744428d8246118e45719f944556/pillow-12.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c", size = 6989642, upload-time = "2026-07-01T11:55:24.006Z" }, + { url = "https://files.pythonhosted.org/packages/10/08/b94d7811281ccf0d143a1cf768d1c49e1e54af63e7b708ab2ee3eb87face/pillow-12.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d", size = 6391281, upload-time = "2026-07-01T11:55:26.252Z" }, + { url = "https://files.pythonhosted.org/packages/d2/87/24233f785f55474dc02ce3e739c5528a77e3a862e9333d1dd7a25cc31f70/pillow-12.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931", size = 7096716, upload-time = "2026-07-01T11:55:28.318Z" }, + { url = "https://files.pythonhosted.org/packages/23/26/fcb2f6e37175b04f53570b59937867e2b80ee1685e744023153028fc14f9/pillow-12.3.0-cp314-cp314t-win32.whl", hash = "sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7", size = 6474125, upload-time = "2026-07-01T11:55:30.956Z" }, + { url = "https://files.pythonhosted.org/packages/90/de/3634abee5f1c9e13c56787b7d5517b0ba8d6de51700b95578cf338349c9f/pillow-12.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c", size = 7242939, upload-time = "2026-07-01T11:55:34.044Z" }, + { url = "https://files.pythonhosted.org/packages/ce/2a/fd13f8eb24de5714a6eb444a3d67e2842c6c576e159a43793adf23051351/pillow-12.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45", size = 2567506, upload-time = "2026-07-01T11:55:35.988Z" }, + { url = "https://files.pythonhosted.org/packages/5d/dc/8fdce34ec725a33c81c6ba122b904d6b9024e50ea9ac7bede62fab54506c/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139", size = 4162063, upload-time = "2026-07-01T11:55:37.941Z" }, + { url = "https://files.pythonhosted.org/packages/76/66/2044b9a63d3b84ff048228dfcb7cd9bf0df983e8470971bf7d4c57b693de/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402", size = 4255549, upload-time = "2026-07-01T11:55:40.022Z" }, + { url = "https://files.pythonhosted.org/packages/52/7e/1f67e6f4ece6b582ee4b539decbcc9f848dc245a93ed8cd7338bafef72f1/pillow-12.3.0-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c", size = 3696331, upload-time = "2026-07-01T11:55:41.98Z" }, + { url = "https://files.pythonhosted.org/packages/12/40/d306fc2c8e4d45d7f175c77edca7063be7b86fe7fe6e68f4353bf71d808c/pillow-12.3.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f", size = 5350370, upload-time = "2026-07-01T11:55:44.028Z" }, + { url = "https://files.pythonhosted.org/packages/dd/44/668fb1437e8ce420f62d6106eb66e44a5971602a4d794615bdf79315d82d/pillow-12.3.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701", size = 4780147, upload-time = "2026-07-01T11:55:46.073Z" }, + { url = "https://files.pythonhosted.org/packages/0c/08/93fa2e70e30a2d81547e481b6ee2bb9522117221fb1e0ce4b5df70967677/pillow-12.3.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace", size = 6273659, upload-time = "2026-07-01T11:55:48.264Z" }, + { url = "https://files.pythonhosted.org/packages/f8/6d/043e96ff814fc31a33077e4cba86082167db520c93632afdf2042febbb0c/pillow-12.3.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4", size = 6947439, upload-time = "2026-07-01T11:55:50.503Z" }, + { url = "https://files.pythonhosted.org/packages/af/92/ba71d2ee2ac0edf3fa33bd9d5ee9ee080da70b1766f3ca3934f9938ddac9/pillow-12.3.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39", size = 6353577, upload-time = "2026-07-01T11:55:52.697Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ce/e63064e2122923ff687c8ad792d0d736a7b3920a56a46982e81a7fdd25d6/pillow-12.3.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71", size = 7060394, upload-time = "2026-07-01T11:55:55.149Z" }, + { url = "https://files.pythonhosted.org/packages/54/76/a09cc3ccc8d773a7283d34c38bec1708f9e3cc932093cbc4c5e71ac4060b/pillow-12.3.0-cp315-cp315-win32.whl", hash = "sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827", size = 6467375, upload-time = "2026-07-01T11:55:57.769Z" }, + { url = "https://files.pythonhosted.org/packages/3e/03/1846c49ba3b1d5550392a4bbd06d6fb4578e1cd91a803198b5c90f5f7d53/pillow-12.3.0-cp315-cp315-win_amd64.whl", hash = "sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5", size = 7237048, upload-time = "2026-07-01T11:55:59.975Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bb/89f35dcc79610423f9f195504d7def7f0d1416a711541b42867e25fe3412/pillow-12.3.0-cp315-cp315-win_arm64.whl", hash = "sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658", size = 2566006, upload-time = "2026-07-01T11:56:02.143Z" }, + { url = "https://files.pythonhosted.org/packages/30/88/707027ba09942dfa2c28759b5c222d769290a41c6d20ea60ec250801941f/pillow-12.3.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf", size = 5352509, upload-time = "2026-07-01T11:56:04.2Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6d/00352fa25332c2569cd387851f568cc5a4b75a9adbfb37ac4fbce4c02eec/pillow-12.3.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64", size = 4783167, upload-time = "2026-07-01T11:56:06.631Z" }, + { url = "https://files.pythonhosted.org/packages/13/4f/9e049dfa21af7c22427275720e2490267ba8138120add5c4c574deb69782/pillow-12.3.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e", size = 6329237, upload-time = "2026-07-01T11:56:08.868Z" }, + { url = "https://files.pythonhosted.org/packages/36/16/cf6eeaae8d0fce8dd390a33437cf68c5d5bd73834a2bc6e2f14efda0ab45/pillow-12.3.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777", size = 6997047, upload-time = "2026-07-01T11:56:11.379Z" }, + { url = "https://files.pythonhosted.org/packages/1e/69/dbf769bdd55f48bf5733cac28edc6364ffaa072ec9ba336266e4fe66be55/pillow-12.3.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1", size = 6400440, upload-time = "2026-07-01T11:56:13.908Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e1/ffc9cfc2eea0d178da8018e18e959301ad9d6bc9f3edb7181e748a474b97/pillow-12.3.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9", size = 7105895, upload-time = "2026-07-01T11:56:16.575Z" }, + { url = "https://files.pythonhosted.org/packages/18/f0/a5595c1e8c3ae44b9828cb2f0fa8155e5095ef04d6327b8f61cf44a3df85/pillow-12.3.0-cp315-cp315t-win32.whl", hash = "sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8", size = 6474384, upload-time = "2026-07-01T11:56:18.855Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/62bcd9f844984c5938d3b05264a61d797a29d3e0812341a8204af70bbdee/pillow-12.3.0-cp315-cp315t-win_amd64.whl", hash = "sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418", size = 7243537, upload-time = "2026-07-01T11:56:21.214Z" }, + { url = "https://files.pythonhosted.org/packages/3d/68/1f3066acedf37673694a7141381d8f811ae97f30d34413d236abe7d489f1/pillow-12.3.0-cp315-cp315t-win_arm64.whl", hash = "sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59", size = 2567491, upload-time = "2026-07-01T11:56:23.506Z" }, + { url = "https://files.pythonhosted.org/packages/75/18/2e8b40223153ccbc60df07f9e8928dc0c76202aa4e55ae9f53962b6510d6/pillow-12.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468", size = 5302510, upload-time = "2026-07-01T11:56:25.736Z" }, + { url = "https://files.pythonhosted.org/packages/46/3e/51fabf59d5ab801ceab709453d3ab6b180083496579549de4c45ced6528a/pillow-12.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94", size = 4736058, upload-time = "2026-07-01T11:56:28.041Z" }, + { url = "https://files.pythonhosted.org/packages/bf/20/22fe9384b7949e25fb1293bcfc84fb82590ff4ea6b37c95b24d26d793d86/pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e", size = 5237776, upload-time = "2026-07-01T11:56:30.263Z" }, + { url = "https://files.pythonhosted.org/packages/08/14/f6ba68107680ffa74b39985f3f30884e41318fbc4250caa423c79b4788bb/pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3", size = 5860358, upload-time = "2026-07-01T11:56:32.68Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0169bc772ec491108b62f644f8ecf1fe5d8ae5ebafde2ee2142210166903/pillow-12.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a", size = 7231786, upload-time = "2026-07-01T11:56:35.046Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/69/b7/802a56eca9f2fac455b8bab5375a2647b0f0e14a2cd63ef077de3c4a7658/platformdirs-4.11.7.tar.gz", hash = "sha256:4f41487eeeeeb07f3a6625e61d9bc0ae6809f92d3386dbd74392fbb76108104d", size = 35127, upload-time = "2026-09-01T13:35:10.502Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/6e/80993e10a0482f630cef528635789233224f36b1ffd11592aa15d13ff9ce/platformdirs-4.11.7-py3-none-any.whl", hash = "sha256:8a02cb259042c79d1cd0450facc2fe6dc9d303ae7901afbe33bf8ea0b188cef6", size = 23938, upload-time = "2026-09-01T13:35:09.02Z" }, +] + +[[package]] +name = "polars" +version = "1.44.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "polars-runtime-32" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/26/73/258a1fe17bb2744a507199566ed712663144fdd0811b615b59a47dfa38d2/polars-1.44.1.tar.gz", hash = "sha256:ef3c89e9ebbbe8eb343c06873f1945683f8b6f97a1bdf001c60551c6c5e3cda1", size = 765660, upload-time = "2026-08-26T07:09:12.704Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/f1/59154659081930fbde291ea6225607956b500a71b0ce45d88217b7d32da2/polars-1.44.1-py3-none-any.whl", hash = "sha256:1fa62fc1c88fba77a68b28291b5aabdd69e5f38b34e59721a064ae3169b59bb5", size = 865208, upload-time = "2026-08-26T07:07:44.646Z" }, +] + +[[package]] +name = "polars-runtime-32" +version = "1.44.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/b2/2a76415d047a45df05489f2334c91ff120a274cf655d4ca030c7f54a8743/polars_runtime_32-1.44.1.tar.gz", hash = "sha256:abd10a54ed1caff42228610fcba0f93251f9870bd7cffb0c78bc26f5e0718ce4", size = 3171156, upload-time = "2026-08-26T07:09:14.243Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/93/ef9344dcec16757cf21027dc907ef989197e50742cfe4407f2e87edb0a7f/polars_runtime_32-1.44.1-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:1dfccb2b52aa50468a7d28e3e61c8338a13fb5bffc8646e388a649f5bdc6b463", size = 53962370, upload-time = "2026-08-26T07:07:47.21Z" }, + { url = "https://files.pythonhosted.org/packages/10/da/38b32b7901af33f1fee2172ceaa39e9159825657920064298917392d78fa/polars_runtime_32-1.44.1-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:0580807dc3eed258f0db70bb65d905dd43f0135392119ec25308033ae24258fb", size = 48620468, upload-time = "2026-08-26T07:07:50.436Z" }, + { url = "https://files.pythonhosted.org/packages/49/51/185af877d1d2236671493cf72bd3327a6046240eeea69c0696d1af2a5acb/polars_runtime_32-1.44.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0627f9aa82cb869725235e5188f698862fd9ada0c8c1cf65c3dc5a49a4a0ec26", size = 52455947, upload-time = "2026-08-26T07:07:53.776Z" }, + { url = "https://files.pythonhosted.org/packages/fc/0a/0858f60cb5a6f8f73ec4cdd73eccd9f748d66bfc23304c5c23fa3468094a/polars_runtime_32-1.44.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eea4283be8e60822d890dbda20588fe59b4172b508bd5ebf3471e531ca9f50d7", size = 58561262, upload-time = "2026-08-26T07:07:57.508Z" }, + { url = "https://files.pythonhosted.org/packages/73/08/de4774b5612d7c8739f89ac01b601486b4f057b1da35a5b876bf9276fd95/polars_runtime_32-1.44.1-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:04e2c0f46e7a9906fffb1897f18f23b079b74f83c56b50060bace9e7b9b49b1a", size = 52636064, upload-time = "2026-08-26T07:08:06.337Z" }, + { url = "https://files.pythonhosted.org/packages/98/ac/769c598dd106e2a6647798da3ed25ddeee67f2d12c04f5da316cb3da6360/polars_runtime_32-1.44.1-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:0956f0cae632d8fad3a04b4315bf2bb69b56d10c83c79a75c2c4c5a13b9ce5cc", size = 56447612, upload-time = "2026-08-26T07:08:12.36Z" }, + { url = "https://files.pythonhosted.org/packages/b2/ee/98408296e15388020b6183323fdbe78ccab4f72c20d8e0d7092c062d3ad2/polars_runtime_32-1.44.1-cp310-abi3-win_amd64.whl", hash = "sha256:159334184e6fbb074c9f4692221ea19970a5e2bed2a479f9d7bdb00b7f3eedb9", size = 53702970, upload-time = "2026-08-26T07:08:15.398Z" }, + { url = "https://files.pythonhosted.org/packages/e9/9d/8b17e075aac73c881a50b6c1f690d20df46db2f3bcabc99f600ecdee1290/polars_runtime_32-1.44.1-cp310-abi3-win_arm64.whl", hash = "sha256:3ba28d638d0513e0b4afbcdab5c0059a85021e5f81d62b5f793e7e23badb2cf7", size = 47281050, upload-time = "2026-08-26T07:08:18.43Z" }, +] + +[[package]] +name = "progressbar2" +version = "4.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-utils" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0c/1e/5bd376abe32a392e74fffd82feb42ee1472d263bd358d628af20663d0346/progressbar2-4.6.0.tar.gz", hash = "sha256:fe48c8955a84428af77bff2642ba47041e1b8f7c867a5b7cc94f8bc255a8f0cf", size = 542464, upload-time = "2026-08-14T01:07:30.008Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/4c/ba64c450164fa4feaa9c4bb1c6445811d89d6a1995bfc58d039273b698af/progressbar2-4.6.0-py3-none-any.whl", hash = "sha256:2d78bdeb1debef92a39dd9042e0689542bd72d6e2f30b13432db371aa9d8ee4e", size = 104185, upload-time = "2026-08-14T01:07:28.474Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "psycopg" +version = "3.3.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "tzdata", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/73/8fb739d0f6bba247b9b93c9840c402a4f88545be5f1d4b02b23366371c00/psycopg-3.3.5.tar.gz", hash = "sha256:d0a3d9ccf5788af054cbd745278cb02401b5c312aeaafbf2c6144460aec47da4", size = 166508, upload-time = "2026-08-31T22:45:43.151Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/2e/d0a645bcaadde68bd6d93c43f02f14b0191bdda367ce3f7722abe3da744a/psycopg-3.3.5-py3-none-any.whl", hash = "sha256:ce5aa5cdb4f9379f00f487590e5890bfa7df9a164648c969ffa628505e21af4e", size = 213598, upload-time = "2026-08-31T22:39:02.184Z" }, +] + +[package.optional-dependencies] +binary = [ + { name = "psycopg-binary", marker = "implementation_name != 'pypy'" }, +] +c = [ + { name = "psycopg-c", marker = "implementation_name != 'pypy'" }, +] + +[[package]] +name = "psycopg-binary" +version = "3.3.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/67/ac6b3dfd2d495f8599f7179f8082af4b3be72caa44942ddb45e9613338eb/psycopg_binary-3.3.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c6bd84e4cf67930f26f015dec33f615472b9c5871d46408efe112dbc1bc021de", size = 4720383, upload-time = "2026-08-31T22:40:22.262Z" }, + { url = "https://files.pythonhosted.org/packages/2a/7f/c3870c7e5ba6b4444e3e5401c79d5e83afe2c7045844eabb25d5b39adecb/psycopg_binary-3.3.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fdbeb38c9b7ca8fa57a7bda3802bedb62f4494ad3dd46c7dd36dc3f77fd5093f", size = 4768854, upload-time = "2026-08-31T22:40:26.639Z" }, + { url = "https://files.pythonhosted.org/packages/0e/a2/04834fb8a2af14d42e48abeb61ace0a4fee2d6f516723d897cff16fce677/psycopg_binary-3.3.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:06de14ac978a2d53e864069fb5487075c6e3cfb0740f1bfd7017bc8b9942067f", size = 5588618, upload-time = "2026-08-31T22:40:36.524Z" }, + { url = "https://files.pythonhosted.org/packages/de/0d/2eed6e7f8c5ada9e08cbdca4b78083df12f5c2a8d13fa0c62cd6b2b1d762/psycopg_binary-3.3.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d8b66353b20e79bf7ac0a80f03ae97f522ccbbf909d687eec62f112e56c0276d", size = 5259471, upload-time = "2026-08-31T22:40:46.43Z" }, + { url = "https://files.pythonhosted.org/packages/96/66/2347889e693502e8473a60b3defac0300829007275a21980a2197c200418/psycopg_binary-3.3.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af5084124fb2fd16557073822519dfe8c389636a16adef661a4c0c3918733171", size = 6851181, upload-time = "2026-08-31T22:40:52.939Z" }, + { url = "https://files.pythonhosted.org/packages/b6/11/039d7bbdc8ac28292a2fb9f54a7385116c7d31a3bf9c87e71eda154b32b9/psycopg_binary-3.3.5-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1344fd57a19737554670e67aecabd4fb37cd7937f2925840009645d641117e5a", size = 5098916, upload-time = "2026-08-31T22:40:57.505Z" }, + { url = "https://files.pythonhosted.org/packages/d4/01/5f77284d0c682106279da7d9e26527ae99f3241a91f0549b033c84441404/psycopg_binary-3.3.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2719fe19a4da752c4110cc767716d0a5bdb760d1153d89018bb7c9c61717bde5", size = 4617043, upload-time = "2026-08-31T22:41:04.555Z" }, + { url = "https://files.pythonhosted.org/packages/8b/4a/c07000298ffa3eaf25a720a5fd4bc9326676e99712722ca1accb40071e66/psycopg_binary-3.3.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:893ce86a4b997f6ca1261a7826db2506727332a6ff66646fa7f024b39b5e630e", size = 4310458, upload-time = "2026-08-31T22:41:11.72Z" }, + { url = "https://files.pythonhosted.org/packages/c7/0a/cc7da5bb2bed198354f8dcc7c5dab3f1473edf2b6a177c1e8ec3fa9841ea/psycopg_binary-3.3.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:a5e45e4bb68656253ce5c7a344c0a425c293581eba954d7fd7c2e4b2dc9f3038", size = 4039320, upload-time = "2026-08-31T22:41:20.783Z" }, + { url = "https://files.pythonhosted.org/packages/17/60/f65755f1ab74223b437f1d366f63915b6f5e1292234de47643f898c29faf/psycopg_binary-3.3.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ca8af7c0454cdce235d4aedcb5528857468f1490202d25e24fc7af40e176d563", size = 4342427, upload-time = "2026-08-31T22:41:27.068Z" }, + { url = "https://files.pythonhosted.org/packages/0e/3c/6b1ea5b5544fa51ee6da8e99e96ca6a639ed1e0da2e335467893f14d3182/psycopg_binary-3.3.5-cp311-cp311-win_amd64.whl", hash = "sha256:7b443f943abfe35aa5a776630cea27c9348aa66659286cee0b99084332252080", size = 3665235, upload-time = "2026-08-31T22:41:30.9Z" }, + { url = "https://files.pythonhosted.org/packages/5e/83/ba396428a4fb6b70f0dd41315ad86a2c14441b7214afd47b2d49cb450b78/psycopg_binary-3.3.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:25105f9b46bdf2a30fcb67f56976ed66f6855941ae16bc024192609b917d493c", size = 4700169, upload-time = "2026-08-31T22:41:39.712Z" }, + { url = "https://files.pythonhosted.org/packages/4f/56/b23c5978e55cf4effdc5a3e13a17d69a580a487993e01b7c3768dd24281c/psycopg_binary-3.3.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0249c3e960cdee686000eb77169fb6590105c05bacc37e057ccdffdcd8e6ebde", size = 4763037, upload-time = "2026-08-31T22:41:47.571Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d8/b41108bfe194b4098076c8b873b05ec2ca9582445eccfd9075970d7b948e/psycopg_binary-3.3.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5698ab5941a4d138c30fef858588e651fe7d583280cd6e41832825ad9e747750", size = 5546232, upload-time = "2026-08-31T22:41:55.817Z" }, + { url = "https://files.pythonhosted.org/packages/21/d1/0f244dfef389e52e9dc3056f2a9033d1f6901e97d24d9a9c8b836e32ab6b/psycopg_binary-3.3.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:682a17a57415c3ca1731eec018ed031f012ffcb81ba74806eb219cb396065672", size = 5227752, upload-time = "2026-08-31T22:42:03.776Z" }, + { url = "https://files.pythonhosted.org/packages/31/88/a4781365f09807fb91435e2d00096f3f6ae5d06bce15ef3c3c385dc22772/psycopg_binary-3.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2a61e8147902771df7efe14062a3c8736347850d0d8befcf048235752504f2e", size = 6824658, upload-time = "2026-08-31T22:42:13.263Z" }, + { url = "https://files.pythonhosted.org/packages/65/f1/072c4a46287644694731b3e40fab120ebacf6d153cce7ebf7a5b208f5561/psycopg_binary-3.3.5-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f7e1e45aad410e20de45df2b159df68ff6c8dbf47a3501f806c4489b27f4ad2b", size = 5061439, upload-time = "2026-08-31T22:42:18.591Z" }, + { url = "https://files.pythonhosted.org/packages/e2/d6/1776a95c16941b8bbce89407cc7cf9ea3fd557efb503a40873c9e2b6394f/psycopg_binary-3.3.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c09775c549b40b274206e1b043c5e5b5af39666e85c98382a30bd05d23ab677b", size = 4588586, upload-time = "2026-08-31T22:42:25.23Z" }, + { url = "https://files.pythonhosted.org/packages/82/64/44ec87b9a74faebe966856307b65c0d35ee6321ce509cdd0e8d6a3f5338b/psycopg_binary-3.3.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:cf0e5e63ee86098299c673992053d556c489ba9ae6aca6cb6e24d16a8e0b09e6", size = 4265161, upload-time = "2026-08-31T22:42:31.864Z" }, + { url = "https://files.pythonhosted.org/packages/24/88/cf181df5651395a80afc520f5fefac72beb035c0c9d58ab7fcc880c9b221/psycopg_binary-3.3.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:c065531e8c1815276f50dbfa283e3a7f022671414cdda6fa9a16794dd53b28f9", size = 3998727, upload-time = "2026-08-31T22:42:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/43/1e/c72a1107647db4bb3f534c7fe1b57b1957d9c099e795f5aa81f4a2e0c312/psycopg_binary-3.3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:df9853b832b7b916e02ef68e0d5403a7dab2d5c1ddfe94f22b1b155eb862622f", size = 4310119, upload-time = "2026-08-31T22:42:46.403Z" }, + { url = "https://files.pythonhosted.org/packages/03/8d/452620608cafff164737e20b42ebffee8151b865ee171ba0d6692a560a44/psycopg_binary-3.3.5-cp312-cp312-win_amd64.whl", hash = "sha256:35885e333020fc152d27bea1a494bef13b2e68f6fd92b6229015e93539152008", size = 3648197, upload-time = "2026-08-31T22:42:51.575Z" }, + { url = "https://files.pythonhosted.org/packages/e0/1c/e718752cc63cf4e99e4a10fd36e3a3364dabdd0819484a24c0d79fbb9685/psycopg_binary-3.3.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6e85d50b87257fb117675a19ee59daa7bf9a57f6431500adf7059df799232ef4", size = 4704421, upload-time = "2026-08-31T22:42:59.564Z" }, + { url = "https://files.pythonhosted.org/packages/af/cf/a0e748e27c09b92738e4460582d121ba1908be3e36791e150f435e54b332/psycopg_binary-3.3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e5becd311f9af8d180bad372f51fb2252fd02cb2073056e2b170c9274f95fe7f", size = 4765054, upload-time = "2026-08-31T22:43:05.421Z" }, + { url = "https://files.pythonhosted.org/packages/39/62/0cbac0266d56c94dd1f702d9af2b5d54bf80b6e658048f4f2c5bd63dd7e3/psycopg_binary-3.3.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:19e5bf9872dbd164c220567fd385ba2309c7d9df1541f78343510c6b0f36a1b7", size = 5547137, upload-time = "2026-08-31T22:43:11.768Z" }, + { url = "https://files.pythonhosted.org/packages/fb/3a/73c6f8871f38fc07a9c0b4cbc9467beb116a2783cecf87dfa53900a396dc/psycopg_binary-3.3.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cb3b3bffebfe07110730626e76238161124f35ac87b748d663316a28d22f58b0", size = 5227577, upload-time = "2026-08-31T22:43:20.767Z" }, + { url = "https://files.pythonhosted.org/packages/59/7b/9f17b9f4d297b774dc574199c4dcd02dadc32a00c4056265918de5c70635/psycopg_binary-3.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2111f880add40fb03c60556069ad68e884a0908a74d2debafc603caf93b73552", size = 6824606, upload-time = "2026-08-31T22:43:33.698Z" }, + { url = "https://files.pythonhosted.org/packages/94/86/d84dadd94a004dbbb43ce0579f1f766fdc6b8cbef745090e24bea77b5283/psycopg_binary-3.3.5-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:40505676b1526b9ea387dace034040a8c8b0bcf984cd6bd4720a2ab15e813586", size = 5060854, upload-time = "2026-08-31T22:43:42.258Z" }, + { url = "https://files.pythonhosted.org/packages/30/d0/e5078be2c7d2490c0d6cd4cb7b3601aec44be2fa8b3fe927e9419b06004f/psycopg_binary-3.3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5816472e3bb05615f33a741e0835043d1f4bf9709ff30d2f4aed71815cfc6b5e", size = 4589511, upload-time = "2026-08-31T22:43:50.012Z" }, + { url = "https://files.pythonhosted.org/packages/f1/01/08dfb5b18fa482e025864fd91a022310d0782c42e4cf5dda5d0e010b6790/psycopg_binary-3.3.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:358748fc4c8ccdc0e2bdf55420494930e19c3ade586ea9c3a6de3dad1f897311", size = 4268144, upload-time = "2026-08-31T22:43:56.993Z" }, + { url = "https://files.pythonhosted.org/packages/88/b9/cb01dc1d63f3241b49b2ca7fb9f98d0f5c76127f0dbb9440635a6ad0233e/psycopg_binary-3.3.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:1ef2e498be47800f6202b9a2304c22646325ca6d54001b7c785bcfdb24a1e8ab", size = 4001036, upload-time = "2026-08-31T22:44:04.429Z" }, + { url = "https://files.pythonhosted.org/packages/95/49/7c17dd832c05b380562ff2ff5f6ab2bcaeca8b7fff2c2b355854368a5bdb/psycopg_binary-3.3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:88e01aa2e938a45655a8a5213fc3a44ba78cb4cab8a569b3e0bcb3d1d0eaba16", size = 4313112, upload-time = "2026-08-31T22:44:12.446Z" }, + { url = "https://files.pythonhosted.org/packages/7c/2c/b0b2f887185d6a2ec0b3bef948cc07656d2d1a5d96fa7f2bb03f6ef06ca4/psycopg_binary-3.3.5-cp313-cp313-win_amd64.whl", hash = "sha256:ba466011569297114449df9d523438e1adeedf3e4f31ffb78e897ec3fef3076b", size = 3647313, upload-time = "2026-08-31T22:44:19.139Z" }, + { url = "https://files.pythonhosted.org/packages/46/7f/4e2395da194558533bd9c31f35e4dc58ecbbae6a7176b0d2f72d629e8a51/psycopg_binary-3.3.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:40f8b132c7243ef5f503f0b6f986bf16d38a51b0df1c6ba2577743f128be03e3", size = 4712612, upload-time = "2026-08-31T22:44:25.723Z" }, + { url = "https://files.pythonhosted.org/packages/ae/94/fdb2093c8ccd7048449156db526ad746740cf34fe9c01e5dc1b7a7a8b257/psycopg_binary-3.3.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c0cac998b9b1e82dec853d2e53b3d34d56a525cf231f9441a636cfd5992929a9", size = 4775139, upload-time = "2026-08-31T22:44:36.719Z" }, + { url = "https://files.pythonhosted.org/packages/31/52/5195e87960715f7be2005761b72d56fce4e7757d5333fd40384f071c2de1/psycopg_binary-3.3.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:479b96fd78149cfa10369dc53fbfb89ee729be13146b584a23dbc7e164c0cf1e", size = 5556807, upload-time = "2026-08-31T22:44:42.668Z" }, + { url = "https://files.pythonhosted.org/packages/f7/42/2d616210a91e1327516ed5ae71961aaa31bb740e4a61d7190f2221685a40/psycopg_binary-3.3.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f45d77e398542ce0937d9fa3cd9d84e9c5fc6b34c50a66404ae840bada312750", size = 5236206, upload-time = "2026-08-31T22:44:47.943Z" }, + { url = "https://files.pythonhosted.org/packages/08/2e/e54b0d4cc263b3526e3728bb50a69660d5e79e52255ccd2a1a71e40e6f9a/psycopg_binary-3.3.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98a388509306e5e08a4203253ac52846bc1b034e5cbd0ae6da1211593cc28594", size = 6838066, upload-time = "2026-08-31T22:44:55.701Z" }, + { url = "https://files.pythonhosted.org/packages/77/80/ec22a110f81a44c411965982097efeee86006bdd5a1f51f628318106c84c/psycopg_binary-3.3.5-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ab39e2794b95af61a2ff69e33e5ab6ac5df36e9ffea9a3b18e38b2aaca8c5ad5", size = 5072036, upload-time = "2026-08-31T22:45:02.838Z" }, + { url = "https://files.pythonhosted.org/packages/93/55/7bc3c3ac769ab4fe0c619f2179b4aab3ae043f4d478283dd8279d24c0be4/psycopg_binary-3.3.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9c071bf78e5c2e6efa40bc9089a954d7b41221347a72f35c6bf2d8c96e632f75", size = 4604058, upload-time = "2026-08-31T22:45:10.444Z" }, + { url = "https://files.pythonhosted.org/packages/a3/69/8e7414f7dc10b2959e664330cdcf393e412f67355975dafa876cef265264/psycopg_binary-3.3.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:14fdfd65a96ecbd8b586d14546105641f4a6ac7cbe335c786830ea4de94bbe60", size = 4284766, upload-time = "2026-08-31T22:45:17.881Z" }, + { url = "https://files.pythonhosted.org/packages/c1/72/33f293c1d3ee9114f47e9ef4880f31c9de864e84a9b09454c26e106c25ed/psycopg_binary-3.3.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:8dbd694f3741dd4ac5bc60b70e17f7841aefb3f0f38cef4d2756de270e03af43", size = 4011958, upload-time = "2026-08-31T22:45:24.792Z" }, + { url = "https://files.pythonhosted.org/packages/b7/c9/8e38840e5a7d006987bbc9acb29951912253fa50549a4db92b3aa535f089/psycopg_binary-3.3.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:14f432430fd9e1a9e7d9ab2fe14956c77f5d074ebdc556a1ad04e9a1bd3fca04", size = 4323273, upload-time = "2026-08-31T22:45:32.973Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c7/b7ebf601c307f93e7c4c4ebac0edc9db3b2729ca038efe700a18f86b5517/psycopg_binary-3.3.5-cp314-cp314-win_amd64.whl", hash = "sha256:df209e64674a34b41662c67fdc8b4e0ffd77d2136393790691d086a09f9a6cab", size = 3745885, upload-time = "2026-08-31T22:45:40.537Z" }, +] + +[[package]] +name = "psycopg-c" +version = "3.3.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/7b/5da2274bdbfed6b02aea463e2b803b8d4406bbc9d6c6f6bfd7122492254f/psycopg_c-3.3.5.tar.gz", hash = "sha256:5e11edaa0040a64d0af351a8fd3e276a824cd92fe34abc350cd67aa07ad36c55", size = 694569, upload-time = "2026-08-31T22:45:45.337Z" } + +[[package]] +name = "py4j" +version = "0.10.9.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/38/31/0b210511177070c8d5d3059556194352e5753602fa64b85b7ab81ec1a009/py4j-0.10.9.9.tar.gz", hash = "sha256:f694cad19efa5bd1dee4f3e5270eb406613c974394035e5bfc4ec1aba870b879", size = 761089, upload-time = "2025-01-15T03:53:18.624Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/db/ea0203e495be491c85af87b66e37acfd3bf756fd985f87e46fc5e3bf022c/py4j-0.10.9.9-py2.py3-none-any.whl", hash = "sha256:c7c26e4158defb37b0bb124933163641a2ff6e3a3913f7811b0ddbe07ed61533", size = 203008, upload-time = "2025-01-15T03:53:15.648Z" }, +] + +[[package]] +name = "py7zr" +version = "1.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backports-zstd", marker = "python_full_version < '3.14'" }, + { name = "brotli", marker = "platform_python_implementation == 'CPython'" }, + { name = "brotlicffi", marker = "platform_python_implementation == 'PyPy'" }, + { name = "inflate64" }, + { name = "multivolumefile" }, + { name = "psutil", marker = "sys_platform != 'cygwin'" }, + { name = "pybcj" }, + { name = "pycryptodomex" }, + { name = "pyppmd" }, + { name = "texttable" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/59/3f/ac248f25f3901d3d6cf80ac99d5bac6fd1e5e6543c1812c79b02b6074c60/py7zr-1.1.3.tar.gz", hash = "sha256:8d51894abb38355bf14881088bb97f01fe4cb5b14ebe22f66d6297668c7e1a74", size = 71695, upload-time = "2026-06-19T09:28:29.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/40/dc7f804abd0ea167ea8d4d9b3f5455321aaf671d040fcef647e9e952e714/py7zr-1.1.3-py3-none-any.whl", hash = "sha256:17934a35089e026dec6c72ee275d9b841e646881ef822d618e805c3006661d9a", size = 72242, upload-time = "2026-06-19T09:28:27.512Z" }, +] + +[[package]] +name = "pyarrow" +version = "25.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/e3/27f57f80141379d60defe6703eb50a707325706f07fedfd1312c7a751995/pyarrow-25.0.1.tar.gz", hash = "sha256:9150a83248bfed9813ea3c3af74c3856c1984d444aa28e58bf7733b9750ddf6a", size = 1201653, upload-time = "2026-08-10T12:40:53.904Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/8b/0d23b47702fcfe8b3618d5292035099675c5a1c48258932350c08020f7b5/pyarrow-25.0.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:51093dd9e10325fbdb3c10a2ae7c4806e5c822d94e74ae4938b26524a3323fee", size = 35946180, upload-time = "2026-08-10T12:37:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/d8/17/707d17a5476c55a9541fde0db8213ac30979a792864d72415f176ba50c45/pyarrow-25.0.1-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:eb6203482ff3746a5632303a7279ae0b5a304c46985b49ed1378cb350ea6728d", size = 37644787, upload-time = "2026-08-10T12:37:25.795Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b2/cdc98ecf1a6408280bc3a6a07054cdd99a3f4670acc0545d383ce113e87d/pyarrow-25.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:880523be3d29efcf83d3998835d206118ccf35e3871dbd2fb60408cf6b007a80", size = 46834633, upload-time = "2026-08-10T12:37:33.604Z" }, + { url = "https://files.pythonhosted.org/packages/c8/6e/d3fafc41f378b2c65be43b827798c0fae42049a641c8526633ed3eb573e2/pyarrow-25.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:25f8720bf6387d5dc2ebd2622112de630760419e4b66134405dd24110d15f37e", size = 50065507, upload-time = "2026-08-10T12:37:40.565Z" }, + { url = "https://files.pythonhosted.org/packages/d5/12/8d0698954b8c3001844a898e0a6900bebe83d7ee40c11195174c5122f324/pyarrow-25.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4facd65742a024a4a366328a1d2292062d72d6e023c1b7dda8d4c37544933a25", size = 49955690, upload-time = "2026-08-10T12:37:46.644Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/1ecb936ac6409e90a34d58eea1c7cec09a9ae6d2141b9e49ad01a2b1ea47/pyarrow-25.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aa0559502e1cd6254d6814614085dd9c5a3dd0419362978a936a3f68a9e5c3df", size = 53128198, upload-time = "2026-08-10T12:37:52.531Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1c/5236033550633c9b7377b2a53660b2bbb06cb06dc09c4356332d67643ca1/pyarrow-25.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:62cd0d785b8aa6675ee355f9fc02252a340f4441257c42674937826fd7594325", size = 27857263, upload-time = "2026-08-10T12:37:56.943Z" }, + { url = "https://files.pythonhosted.org/packages/a6/e2/9ab15b88cbfac28e16419ce5439ec29234c5172cb8259301b4ba639bdec0/pyarrow-25.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:df961f2e7ae9cf496459259d798652c70625f6c080650d6952f8c04053c58ee9", size = 35861559, upload-time = "2026-08-10T12:38:02.567Z" }, + { url = "https://files.pythonhosted.org/packages/58/79/a0036dbe1eabe1f73127427342f1d99982584c4a2cde2651d6c93499c6f6/pyarrow-25.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:cc4aa407fde9fc660be3939e49ea31f50f3e9fec17c0ec63159f7711edd3efc9", size = 37628383, upload-time = "2026-08-10T12:38:09.083Z" }, + { url = "https://files.pythonhosted.org/packages/13/49/d93a57d375f4bf0cf82913dd6bb54acafde83dd993be2282c81ac5616cad/pyarrow-25.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:4340f0ba6c1d2e13f21658de1d7c662ca2545018568d0030a1e9afca159d87e3", size = 46820190, upload-time = "2026-08-10T12:38:15.458Z" }, + { url = "https://files.pythonhosted.org/packages/60/c9/711ca85d79f1ec98f29a5eae2b051e25b4ecec5de3e3c0e2d5c5dcb15664/pyarrow-25.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5389cdf79447ed1515c9e31620e6e1e2302249564d603f2ad727d4f6d313e4c3", size = 50102437, upload-time = "2026-08-10T12:38:22.487Z" }, + { url = "https://files.pythonhosted.org/packages/80/53/8fb8359ff17cfb6263a1cf3ebf7caec9fe197de118719e84fcb1d0618026/pyarrow-25.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d51592cb7561e87877c506113e7adbf1342ab579e6c21f0ef44b8ba41cb74c80", size = 49942424, upload-time = "2026-08-10T12:38:28.755Z" }, + { url = "https://files.pythonhosted.org/packages/e8/83/4e5ae02a9341571b18a6fca380ac7a58ce6ddae7ab3c060208c0a1e79f02/pyarrow-25.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6109c94d8b9f3b17a041daca16cacb2f651ad8f1ef70a4232c2c0f37a23da2a8", size = 53144206, upload-time = "2026-08-10T12:38:34.862Z" }, + { url = "https://files.pythonhosted.org/packages/65/ee/197cbf47e49f83e6ebeb946a5259a48a638dea27ac774db42fe78022179d/pyarrow-25.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:8858d7bfc22e3f51529aeaa4077225029724623e4595dc9eff8c793935c34140", size = 27953934, upload-time = "2026-08-10T12:38:39.808Z" }, + { url = "https://files.pythonhosted.org/packages/cc/8d/8f271a7a034c834910ec925d56fa4b29733b1380f5289419f5aaa3b02777/pyarrow-25.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:c7c534ec03c358a76ea3e505e74c1b6aef290af90c444dfd092dbfe23e755b85", size = 35855328, upload-time = "2026-08-10T12:38:45.489Z" }, + { url = "https://files.pythonhosted.org/packages/d2/cd/5bac242f4e841b9971d5eb94fdfe2577e2b70be983e27401e72055786037/pyarrow-25.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dda9470024204d7bbf2042b47c6e8a0e47a3eeb8e34405882dfaea6577e0c153", size = 37622415, upload-time = "2026-08-10T12:38:51.107Z" }, + { url = "https://files.pythonhosted.org/packages/63/1f/96d03b4e1506524f7087adb0fd6b2f69f0c9c7aaff1ec36d8030082e15a5/pyarrow-25.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:44a9120ce5bd81936b8ab9a88076e3fd47c2c6838e0e43630fed83626aca81d9", size = 46813813, upload-time = "2026-08-10T12:38:57.773Z" }, + { url = "https://files.pythonhosted.org/packages/98/d6/33a411115b61dbfc16ad6ad73e71730f6fea654ee3667673bc53ab0e2fe7/pyarrow-25.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:0befcf816e45a1af33ac775a9970b749e4868a230c7372f0ae5e932bee27039f", size = 50104452, upload-time = "2026-08-10T12:39:04.579Z" }, + { url = "https://files.pythonhosted.org/packages/33/ae/b1b97c9ca87f9f9ddbb5230c798df94eccce61bd79b9b45458c69a478588/pyarrow-25.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3f89685964f46e4216103c75483aac0c0692a5f72212d7ca835adba5ede56ce3", size = 49951343, upload-time = "2026-08-10T12:39:11.8Z" }, + { url = "https://files.pythonhosted.org/packages/98/9e/a112df5cfd5a68cb1d9fc31cfe38c28d5aec9f10865ce37ecef2e4450873/pyarrow-25.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6943e2fe7954d29d84de45d29d34c8dc36ce96570e67d89aa9976e650a4a9138", size = 53144784, upload-time = "2026-08-10T12:39:20.503Z" }, + { url = "https://files.pythonhosted.org/packages/31/24/97e8bd98f1e3b07e2ba08bcdff690674fbe16d69a7d2712cc3884665e615/pyarrow-25.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:31e49a7888fcdf3a835da33ae777f6bb9a866334e5a789282fc26dcf426f7f15", size = 27870159, upload-time = "2026-08-10T12:39:26.161Z" }, + { url = "https://files.pythonhosted.org/packages/36/4c/b525824ad3094076919273cd97db61fb3d78252dee76fa3b8dc8f76774aa/pyarrow-25.0.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:bf0b672390cdcb640d7288f96b826d71ff4e9abb254a86c89890baf51a29cee6", size = 35885255, upload-time = "2026-08-10T12:39:32.366Z" }, + { url = "https://files.pythonhosted.org/packages/08/62/448bb0e940de41aec31d1a956e63ad9c54afdf122a103cc3ab20c2a3ce33/pyarrow-25.0.1-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:38a9a4b4b9613380e200641891495a56c3d5a98a092db4a870af9975e220471d", size = 37644461, upload-time = "2026-08-10T12:39:38.142Z" }, + { url = "https://files.pythonhosted.org/packages/6e/9a/13587e38bd4806fd218f50fd13b8903fab60588a699ff0c406372e5b4043/pyarrow-25.0.1-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:0b726ad7e7b669be982b0c71c07fe4b037d654354130da79a7902a669e93a66b", size = 46877146, upload-time = "2026-08-10T12:39:43.722Z" }, + { url = "https://files.pythonhosted.org/packages/8d/61/1c5d1229fa21da4cff5365e41e57177aaac57c563c727f35419b8513d1c1/pyarrow-25.0.1-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:9171748cdf796972d85a4b60157c279913e242992e350c90c7450182a9838b2a", size = 50131616, upload-time = "2026-08-10T12:39:49.304Z" }, + { url = "https://files.pythonhosted.org/packages/43/20/291e1d65cc0b09aa19f03cf25cf51a2f5fa94b5db315178f2d254ed5cad4/pyarrow-25.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b7a296aac7a71fa0886c08e155ddb6c636a50013f801f6178daafa0f9e726188", size = 50008879, upload-time = "2026-08-10T12:39:56.891Z" }, + { url = "https://files.pythonhosted.org/packages/8b/7c/1b7c9ec28e76576337e4f97b31141c9a181b89b6d1d6221e9d8205621a58/pyarrow-25.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0fe7c8b6c03969b49c8c66182e4a18e3819ab92d07cfab5d8370c531b9369ef0", size = 53170864, upload-time = "2026-08-10T12:40:04.918Z" }, + { url = "https://files.pythonhosted.org/packages/b7/75/f3d789dc06011a765d14d86bda799cf72ac1d715b6a6edecaa0d73d95062/pyarrow-25.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:f729cfdbd36fd99d543b67a914d2de044c84ebe45be8b34902b299b608c15c8f", size = 28620729, upload-time = "2026-08-10T12:40:51.41Z" }, + { url = "https://files.pythonhosted.org/packages/fc/05/647a8ee6f7c2662feb6921315617bc04dcd6034763fb61b1199720bf6162/pyarrow-25.0.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:59a2de54c0cbd954da861eee4d1d330f8e909c45b53455baef696380f2c55033", size = 36130288, upload-time = "2026-08-10T12:40:11.014Z" }, + { url = "https://files.pythonhosted.org/packages/93/f8/c9ee997554d7bea94520667dd1933f109ac1da3ee3556d2b49381e023484/pyarrow-25.0.1-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:35935cd5de130aa5cf4dea052a63e6bf2e17006c35c3a468194242b9b2bf5956", size = 37762187, upload-time = "2026-08-10T12:40:16.592Z" }, + { url = "https://files.pythonhosted.org/packages/a2/08/a28c01c7fe9e96e8233ce2d13df1d402f4f999f848f51d2daacd6bb4c036/pyarrow-25.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:f3831aaa25c67a99f99dc8b05873cb9d64560390372e2aa197ce9dd4a3f06a44", size = 46888003, upload-time = "2026-08-10T12:40:23.242Z" }, + { url = "https://files.pythonhosted.org/packages/1b/b9/58612e977d28dc58c878448866838369ee8da2f1e7cc8ed2c84b952aafee/pyarrow-25.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6a1fdfc6659b6b19022f2e50627fb5cf7156a66c46bf4299379955cbe742382a", size = 50079036, upload-time = "2026-08-10T12:40:29.169Z" }, + { url = "https://files.pythonhosted.org/packages/72/13/66e1402dcc860e1dc2760b1e0292c9a569b62b3bccab69def1b3e907d006/pyarrow-25.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:169d3429d5be7c752125890620f75a60776d38b0035eddae939651640822332e", size = 50040226, upload-time = "2026-08-10T12:40:35.186Z" }, + { url = "https://files.pythonhosted.org/packages/78/10/3f1a5497a7ef732ab0f03ecca3e66d89d9c0f57fdc61b4794c456b781f01/pyarrow-25.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:119297a6dc197e45d9c6d4415f7814a67ffa36c180d26f68c154c58067ae782d", size = 53149035, upload-time = "2026-08-10T12:40:41.454Z" }, + { url = "https://files.pythonhosted.org/packages/93/c0/37d4a7e8e2f7a6076283673d5298018ca26478b934c6ee369e10505ab32c/pyarrow-25.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:4288f27577352d608ca08553b0865e4a9b3aa14820c5d95b53337218d609835b", size = 28753071, upload-time = "2026-08-10T12:40:46.623Z" }, +] + +[[package]] +name = "pybcj" +version = "1.0.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/14/c9/e2de4f98c21f2ff9e58047395b6a8e17701a0f2977f0e63f80948f61647f/pybcj-1.0.8.tar.gz", hash = "sha256:6818270692912d47e81ccd777b7d0ed2ad3a19ef7aaead3735b38048c80bf368", size = 31763, upload-time = "2026-07-16T22:47:24.705Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/60/c96205182721cea0f5668cef3f6321b23a14ef0764bbc31a0e4773c84a8b/pybcj-1.0.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a5f977b14950ab26c9032784164719f16a4238115a8fe9ae3dcc82dab06cb208", size = 32732, upload-time = "2026-07-16T22:46:28.744Z" }, + { url = "https://files.pythonhosted.org/packages/a3/4d/c20fd8f230f5b5ad3c7cce5e2e639478e16a0ac82c96c01452607e7a4bb2/pybcj-1.0.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:da783c9e002826e6e4e4d6f92e49ab1a77bee5d8e6edc1b99cdee2e883d4cb56", size = 24629, upload-time = "2026-07-16T22:46:30.01Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d2/6e49e51df5aaebac83876414ddbde6ce45a5364488007fe49d4962248651/pybcj-1.0.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a039943fcd80f9924189949909beeca83910bf19c5602c0d7eb3582109f28628", size = 24934, upload-time = "2026-07-16T22:46:31.097Z" }, + { url = "https://files.pythonhosted.org/packages/42/f2/fb31ae098739dd7a3ed131ca5e538703e37f6624a45b02dfe65d0fd29446/pybcj-1.0.8-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:efa420a3565e381e15e6425a3b2887ddf2be6dc66eb1d68e79ce0f177229ebb8", size = 52555, upload-time = "2026-07-16T22:46:32.348Z" }, + { url = "https://files.pythonhosted.org/packages/bf/6c/3b6ccd183d696435aae1dec4c62e8118907f5a2b0900845334ae061dabe1/pybcj-1.0.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0de1f6c90178f5947e4b578821aa2f1f87a78a761ae603aa33a8ad3d8b9b9cac", size = 51414, upload-time = "2026-07-16T22:46:33.679Z" }, + { url = "https://files.pythonhosted.org/packages/71/3d/85aea36e36a336f0f0a72b6f0e97035c36b06efd34cace50f23c3ac100ec/pybcj-1.0.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6722171da5846d9374f2d55474ffd1298ff2e2b21dc6b81a7806bb17ee1c634d", size = 50614, upload-time = "2026-07-16T22:46:35.016Z" }, + { url = "https://files.pythonhosted.org/packages/3c/e7/808083487bc8aaa369d9e93755dd76a88b9203f028a4d3018474754acf7e/pybcj-1.0.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cbca168d4d0aa75cca780b95f530f842b81ebc8d72f36d7865287b59364593a1", size = 50068, upload-time = "2026-07-16T22:46:36.577Z" }, + { url = "https://files.pythonhosted.org/packages/e1/1c/386a50186383045293cd0e1e969a48143e0c073a18fed3dd0b7edec935e3/pybcj-1.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:090eb05fe7a2f7cd7eb42809616ce1b49437c3e995a8aae2faa92b66f218172f", size = 24917, upload-time = "2026-07-16T22:46:37.805Z" }, + { url = "https://files.pythonhosted.org/packages/31/1e/abe31870216273249fd2e4724430d958ea28496825b7772a2e1a58c1fa03/pybcj-1.0.8-cp311-cp311-win_arm64.whl", hash = "sha256:077460a97a69ccd914d09d2a2ad493a48568b356fb14871ce54fb6bb7f3cccc2", size = 24233, upload-time = "2026-07-16T22:46:38.957Z" }, + { url = "https://files.pythonhosted.org/packages/09/32/63b96b702fc4848834ce552302fbdccad92f67886eaf3fbbed530569f4a1/pybcj-1.0.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:748af4545040da68dfae8cdf9f902ac7c29f209aaf6450a970abe0302d1b0f58", size = 32798, upload-time = "2026-07-16T22:46:40.083Z" }, + { url = "https://files.pythonhosted.org/packages/a2/21/0b501901021499e41afe7d0148c94ee26dcf045d3e1389bf1b42a61d11a6/pybcj-1.0.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:190e21c3bdb6b28c63999889668a3f80f5d7eb13b957f2dfda53c9ddeb3d946a", size = 24673, upload-time = "2026-07-16T22:46:41.288Z" }, + { url = "https://files.pythonhosted.org/packages/b3/97/c05d5800d742f5162bd06ef790dfcf73128431328f16abe7a0e2109d8ca5/pybcj-1.0.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:384b25dfe66868329a3872c6eae668033e009e4e86754eba3a70b656c9eb4208", size = 24958, upload-time = "2026-07-16T22:46:42.469Z" }, + { url = "https://files.pythonhosted.org/packages/05/0f/9db13432a6f8878f90c108a68fda46e832eea53585cb5dee8bdbc9472467/pybcj-1.0.8-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b480efcd66cfb4533ede6c3d67224ff477c8dd661613826edff9c95921a562d6", size = 53297, upload-time = "2026-07-16T22:46:43.93Z" }, + { url = "https://files.pythonhosted.org/packages/76/59/5629811698e6cfaea6cf159cf86fa471904ceb60448dc8b80233bba2e392/pybcj-1.0.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a50b58f9b9d9978c55e3219b6816a1021a778b028a810b36aa754407591cb5ae", size = 52332, upload-time = "2026-07-16T22:46:45.252Z" }, + { url = "https://files.pythonhosted.org/packages/b2/0a/c5bd982957b5fd785f02dffcb3f6f45a93143e1e8ccc8224e19b3915fc84/pybcj-1.0.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1997badf9e59221470f84e193ac8c1bab158acfe6b058ffdc28c331807967ff9", size = 51192, upload-time = "2026-07-16T22:46:46.674Z" }, + { url = "https://files.pythonhosted.org/packages/7a/79/1d421d2d45e565a0f8eab8ce6f795e31beca96f658c1e483dac64a466a28/pybcj-1.0.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4f0818cf48fbfddbae487536f3fcd69cfadfb7293630ab8658b66e89a0836d6a", size = 50849, upload-time = "2026-07-16T22:46:48.006Z" }, + { url = "https://files.pythonhosted.org/packages/7b/c3/daddd6edc01689b1cb75733bd3098231bae20c9e77d7022dc0b1c40e56fd/pybcj-1.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:26e3e4d287f306996902289fc0e88b36d0fc817802f4fc4537b40a6518726585", size = 24956, upload-time = "2026-07-16T22:46:49.159Z" }, + { url = "https://files.pythonhosted.org/packages/a7/fc/9c668e2cd1432f7ede31bc131ab336c8602659374bc731bfaca6cf208bbe/pybcj-1.0.8-cp312-cp312-win_arm64.whl", hash = "sha256:82d2e46eff6c3fe8d16f6515f9ab0598eb960af9a2218907c5e0e9f993d7a666", size = 24251, upload-time = "2026-07-16T22:46:50.33Z" }, + { url = "https://files.pythonhosted.org/packages/25/c1/9d8822f1b97813f21b5907b351edb0f607c9736e21637812edf407a2dae6/pybcj-1.0.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9f0e496c49dce294fb41a2221e7b3f96156bb940d8cfe359d441909f1cf241ea", size = 32799, upload-time = "2026-07-16T22:46:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/6f/8b/248154c815e683c0f991c471bedb7476d7c91fd8a56918f1ef66d2341ea5/pybcj-1.0.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0657c9534d480a43b11743cad4209d140d09d417adaf19213ff395686ed08812", size = 24673, upload-time = "2026-07-16T22:46:52.799Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f7/f168c7b091fc41fc7ef6d9ed6cde2ec10bb4814f14ad21b493881476636e/pybcj-1.0.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:784443d0c075871689692679ef01cfe85eca789cc8d091f842fa02f62dead9d5", size = 24955, upload-time = "2026-07-16T22:46:54.069Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a1/7b802ee7c7730521a102dadbdf944943795b3e9ca3ca665dbbdd1213f781/pybcj-1.0.8-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9195ce382f21e13df7ecc0df8fb42c5f391a7ac516066af16b023e6bd2f86046", size = 53344, upload-time = "2026-07-16T22:46:55.272Z" }, + { url = "https://files.pythonhosted.org/packages/4b/cf/c4b0248051cdb7af7f38223db63427175e755db1f1a7905e781e923f6d53/pybcj-1.0.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e5e67ec32176985bbf941185319a3fe385527b6826d457a8ec67dd43b5f0b5fa", size = 52410, upload-time = "2026-07-16T22:46:56.541Z" }, + { url = "https://files.pythonhosted.org/packages/52/77/9afed44c590a19940e04fdf38b7f55e7db3a8b35e3f6320340d99be25ca8/pybcj-1.0.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:20b657e4fe3e701a0f64a7c1224694820687334b17593d74a878f7124f10b24f", size = 51282, upload-time = "2026-07-16T22:46:57.748Z" }, + { url = "https://files.pythonhosted.org/packages/10/4b/7eaf8cf0ad598cc2035a24186a3e2bf45ec798279dad58484d0eb940d4b3/pybcj-1.0.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5b4c66b5358cd241b6ff81a8fafd5806e816d378c810a796ad51865be5533f7", size = 50935, upload-time = "2026-07-16T22:46:58.94Z" }, + { url = "https://files.pythonhosted.org/packages/39/f4/04d46f5059af00d2fae6086a7f47ebc23e553900ca75ea2a2e276d3a436c/pybcj-1.0.8-cp313-cp313-win_amd64.whl", hash = "sha256:e47d9c655d276200e5d08f7b550097dacc826364b44931f0fbdc0da2e4bdf448", size = 24956, upload-time = "2026-07-16T22:47:00.127Z" }, + { url = "https://files.pythonhosted.org/packages/63/cc/387af6844cdc53be20a9271998bc4a15a96360f06ce8829193d4a45f6b19/pybcj-1.0.8-cp313-cp313-win_arm64.whl", hash = "sha256:f561988aef99f07e991d0708ca6fe86e766d545c0a20e58bdbd38615a615e419", size = 24249, upload-time = "2026-07-16T22:47:01.28Z" }, + { url = "https://files.pythonhosted.org/packages/ff/9a/6ae6062f0a7707a6c818f69653af34be90dffec0450c6a39790a1a7d918e/pybcj-1.0.8-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:b8d80571db5f89944aced42378b208afe38339008027ec56303e11628615a906", size = 33353, upload-time = "2026-07-16T22:47:02.452Z" }, + { url = "https://files.pythonhosted.org/packages/52/7d/182735114b34301326ad197daae729e1b2a67c2be8e4ee661acabb1c4e04/pybcj-1.0.8-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:07eac7a1a8804230060fe56a5d828c620ee2d70acd31aef80705a01627da5946", size = 24737, upload-time = "2026-07-16T22:47:03.754Z" }, + { url = "https://files.pythonhosted.org/packages/4d/0a/0d97486364bdf079631fc9b72b9cad42579fe2f0ce575fc67208037ce041/pybcj-1.0.8-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:af962c96a799ee7b13b9747a73240ba7f73e8643c276492f10e1dc60b564b295", size = 24980, upload-time = "2026-07-16T22:47:04.915Z" }, + { url = "https://files.pythonhosted.org/packages/b7/28/f50bbf5c154f6eebca31789228b547e135fe541d46c85a026cadb842e8f2/pybcj-1.0.8-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:067982ad967ce68ae28c13cc27f96d8b65b5f497819dd4ad5c4f05ffc2fb2ae3", size = 53385, upload-time = "2026-07-16T22:47:06.039Z" }, + { url = "https://files.pythonhosted.org/packages/8e/4f/9f226e64cf82b59d9f803e59f32496edfcd52a40305378eb1dd1f78bb18d/pybcj-1.0.8-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f23a36e978f4620db473b08239ab56dc57a479c83fd5d3808bc95e5bdbc1a703", size = 52372, upload-time = "2026-07-16T22:47:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/fe/d7/b52cbdaee0e41fd44edcf032dbcfe5bce7a4b0a8f9fe3fb38ec402fe99a7/pybcj-1.0.8-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ba3b8f1efd1ebbe3ee99a599c6ea745877a41675a0ade763903b644ccd58da97", size = 51326, upload-time = "2026-07-16T22:47:08.53Z" }, + { url = "https://files.pythonhosted.org/packages/52/16/cafe2644f876639ae85c0a6fbe262c11f8065dd4b806eb4f6ace190076a3/pybcj-1.0.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:09c3fe78d325a499fdd0a003b04b0009a3921666dc590d1b7a496dc365eef3a9", size = 50874, upload-time = "2026-07-16T22:47:09.752Z" }, + { url = "https://files.pythonhosted.org/packages/87/c4/767af5f90007cf5b138b2b4b40cf34998ca143fb22210c9d718d04eb2b22/pybcj-1.0.8-cp314-cp314-win_amd64.whl", hash = "sha256:0074af187b1acce9e31717fc9aa42bc36b67f1a44088a8b44f4f4792af688ee6", size = 25225, upload-time = "2026-07-16T22:47:11.144Z" }, + { url = "https://files.pythonhosted.org/packages/22/30/bdbe671d8156ef0f3d8a5ac4d0bccc98bf1d573e1bb10ff6225383211351/pybcj-1.0.8-cp314-cp314-win_arm64.whl", hash = "sha256:458a5bff57f36fba7af822df64da335fa1781d592dd7f802f347ae1f75939aa0", size = 24460, upload-time = "2026-07-16T22:47:12.479Z" }, + { url = "https://files.pythonhosted.org/packages/c3/13/45ec85efc37d71b3def7ad755d9ab964c1a00e9ebc02fd1cd6b199f2535f/pybcj-1.0.8-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:083b41b59672d4aa893b44769bed7a41abfde43211b27d47a0d4d66a59fdafad", size = 33916, upload-time = "2026-07-16T22:47:13.599Z" }, + { url = "https://files.pythonhosted.org/packages/ab/c8/0988ce2bd104c24285a967e2dbddf9c07e0055354fae6a9ccace4202ef66/pybcj-1.0.8-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d432a32bfc23475b7fd62a5eb1c3243a8329ff95aa0e3c941d57902dc6e7c87", size = 25026, upload-time = "2026-07-16T22:47:14.777Z" }, + { url = "https://files.pythonhosted.org/packages/86/37/ba7823ed5831d656eb7e841e026492d8540b59235210b68ba885c8bd0219/pybcj-1.0.8-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cb1601253a15abfaba42e0bdbde4d459d2afcafdc97dee0d9b698e589167fd8d", size = 25268, upload-time = "2026-07-16T22:47:15.909Z" }, + { url = "https://files.pythonhosted.org/packages/74/1e/572c7e32da9bca384aa28401c09c153eb5bf1b0c64e249e9f13fbbdfadae/pybcj-1.0.8-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78498748ebea7e1483f9cfdeac4a08687f6e2773e3a4223c420ab1beae95d75d", size = 59685, upload-time = "2026-07-16T22:47:17.227Z" }, + { url = "https://files.pythonhosted.org/packages/67/09/737dcd04aa137c91e33b89b8d68b763419c39feff14c9cf5eeb945954a6b/pybcj-1.0.8-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3817997e73d60ccbc731a47e007fe02213eee816cfe6070eb8347c6286aa3cc2", size = 57872, upload-time = "2026-07-16T22:47:18.476Z" }, + { url = "https://files.pythonhosted.org/packages/53/31/519a41bf9ea3c58368bd72e6bd3a2eaf735aef206e715e87e2d0c4f5bb6f/pybcj-1.0.8-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f2a9146d8f3df70305dba6cb9c3d25f285a9a69309e4941333962f5408a244be", size = 56908, upload-time = "2026-07-16T22:47:19.85Z" }, + { url = "https://files.pythonhosted.org/packages/38/6a/fdc7b48e1b27f5cd44f554ca730e1928074d51db5bc640ec92323c46a689/pybcj-1.0.8-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5824e498e2dfafc19a2de2bdf54e5c2857144d84983ac8e13e54b1f7b78e3f50", size = 56063, upload-time = "2026-07-16T22:47:21.1Z" }, + { url = "https://files.pythonhosted.org/packages/cc/c2/3d3d99065816de8acafc77917ac4c0b8e8df74f407ec2955a26f8b641a67/pybcj-1.0.8-cp314-cp314t-win_amd64.whl", hash = "sha256:331c21f0636150d4b846e0749cb0e8d6cbd133692368b391f9ba75dc02d5c51f", size = 25481, upload-time = "2026-07-16T22:47:22.357Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/0901ba3b67842dbf4263c832ab8b05d6441eabfd97bec1d77d27b90a7a4c/pybcj-1.0.8-cp314-cp314t-win_arm64.whl", hash = "sha256:935e0588be20a2b7c3554a6415d1fdb66acfde037df718b7927033b658428518", size = 24893, upload-time = "2026-07-16T22:47:23.547Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pycryptodomex" +version = "3.23.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/85/e24bf90972a30b0fcd16c73009add1d7d7cd9140c2498a68252028899e41/pycryptodomex-3.23.0.tar.gz", hash = "sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da", size = 4922157, upload-time = "2025-05-17T17:23:41.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/00/10edb04777069a42490a38c137099d4b17ba6e36a4e6e28bdc7470e9e853/pycryptodomex-3.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886", size = 2498764, upload-time = "2025-05-17T17:22:21.453Z" }, + { url = "https://files.pythonhosted.org/packages/6b/3f/2872a9c2d3a27eac094f9ceaa5a8a483b774ae69018040ea3240d5b11154/pycryptodomex-3.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d", size = 1643012, upload-time = "2025-05-17T17:22:23.702Z" }, + { url = "https://files.pythonhosted.org/packages/70/af/774c2e2b4f6570fbf6a4972161adbb183aeeaa1863bde31e8706f123bf92/pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa", size = 2187643, upload-time = "2025-05-17T17:22:26.37Z" }, + { url = "https://files.pythonhosted.org/packages/de/a3/71065b24cb889d537954cedc3ae5466af00a2cabcff8e29b73be047e9a19/pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8", size = 2273762, upload-time = "2025-05-17T17:22:28.313Z" }, + { url = "https://files.pythonhosted.org/packages/c9/0b/ff6f43b7fbef4d302c8b981fe58467b8871902cdc3eb28896b52421422cc/pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5", size = 2313012, upload-time = "2025-05-17T17:22:30.57Z" }, + { url = "https://files.pythonhosted.org/packages/02/de/9d4772c0506ab6da10b41159493657105d3f8bb5c53615d19452afc6b315/pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314", size = 2186856, upload-time = "2025-05-17T17:22:32.819Z" }, + { url = "https://files.pythonhosted.org/packages/28/ad/8b30efcd6341707a234e5eba5493700a17852ca1ac7a75daa7945fcf6427/pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006", size = 2347523, upload-time = "2025-05-17T17:22:35.386Z" }, + { url = "https://files.pythonhosted.org/packages/0f/02/16868e9f655b7670dbb0ac4f2844145cbc42251f916fc35c414ad2359849/pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462", size = 2272825, upload-time = "2025-05-17T17:22:37.632Z" }, + { url = "https://files.pythonhosted.org/packages/ca/18/4ca89ac737230b52ac8ffaca42f9c6f1fd07c81a6cd821e91af79db60632/pycryptodomex-3.23.0-cp313-cp313t-win32.whl", hash = "sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328", size = 1772078, upload-time = "2025-05-17T17:22:40Z" }, + { url = "https://files.pythonhosted.org/packages/73/34/13e01c322db027682e00986873eca803f11c56ade9ba5bbf3225841ea2d4/pycryptodomex-3.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708", size = 1803656, upload-time = "2025-05-17T17:22:42.139Z" }, + { url = "https://files.pythonhosted.org/packages/54/68/9504c8796b1805d58f4425002bcca20f12880e6fa4dc2fc9a668705c7a08/pycryptodomex-3.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4", size = 1707172, upload-time = "2025-05-17T17:22:44.704Z" }, + { url = "https://files.pythonhosted.org/packages/dd/9c/1a8f35daa39784ed8adf93a694e7e5dc15c23c741bbda06e1d45f8979e9e/pycryptodomex-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6", size = 2499240, upload-time = "2025-05-17T17:22:46.953Z" }, + { url = "https://files.pythonhosted.org/packages/7a/62/f5221a191a97157d240cf6643747558759126c76ee92f29a3f4aee3197a5/pycryptodomex-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545", size = 1644042, upload-time = "2025-05-17T17:22:49.098Z" }, + { url = "https://files.pythonhosted.org/packages/8c/fd/5a054543c8988d4ed7b612721d7e78a4b9bf36bc3c5ad45ef45c22d0060e/pycryptodomex-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587", size = 2186227, upload-time = "2025-05-17T17:22:51.139Z" }, + { url = "https://files.pythonhosted.org/packages/c8/a9/8862616a85cf450d2822dbd4fff1fcaba90877907a6ff5bc2672cafe42f8/pycryptodomex-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c", size = 2272578, upload-time = "2025-05-17T17:22:53.676Z" }, + { url = "https://files.pythonhosted.org/packages/46/9f/bda9c49a7c1842820de674ab36c79f4fbeeee03f8ff0e4f3546c3889076b/pycryptodomex-3.23.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c", size = 2312166, upload-time = "2025-05-17T17:22:56.585Z" }, + { url = "https://files.pythonhosted.org/packages/03/cc/870b9bf8ca92866ca0186534801cf8d20554ad2a76ca959538041b7a7cf4/pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003", size = 2185467, upload-time = "2025-05-17T17:22:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/96/e3/ce9348236d8e669fea5dd82a90e86be48b9c341210f44e25443162aba187/pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744", size = 2346104, upload-time = "2025-05-17T17:23:02.112Z" }, + { url = "https://files.pythonhosted.org/packages/a5/e9/e869bcee87beb89040263c416a8a50204f7f7a83ac11897646c9e71e0daf/pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd", size = 2271038, upload-time = "2025-05-17T17:23:04.872Z" }, + { url = "https://files.pythonhosted.org/packages/8d/67/09ee8500dd22614af5fbaa51a4aee6e342b5fa8aecf0a6cb9cbf52fa6d45/pycryptodomex-3.23.0-cp37-abi3-win32.whl", hash = "sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c", size = 1771969, upload-time = "2025-05-17T17:23:07.115Z" }, + { url = "https://files.pythonhosted.org/packages/69/96/11f36f71a865dd6df03716d33bd07a67e9d20f6b8d39820470b766af323c/pycryptodomex-3.23.0-cp37-abi3-win_amd64.whl", hash = "sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9", size = 1803124, upload-time = "2025-05-17T17:23:09.267Z" }, + { url = "https://files.pythonhosted.org/packages/f9/93/45c1cdcbeb182ccd2e144c693eaa097763b08b38cded279f0053ed53c553/pycryptodomex-3.23.0-cp37-abi3-win_arm64.whl", hash = "sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51", size = 1707161, upload-time = "2025-05-17T17:23:11.414Z" }, +] + +[[package]] +name = "pydantic" +version = "2.13.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/53/ef/fc4f868f4e2cee79f863883abffceff107875f569b848507319842d2a681/pydantic-2.13.5.tar.gz", hash = "sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08", size = 845750, upload-time = "2026-08-28T14:04:00.916Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", hash = "sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", size = 472589, upload-time = "2026-08-28T14:03:59.136Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/f9/8a06bea35ef8daf588f707784c973a7046e0034c8d8cfb08828eeffb8b75/pydantic_core-2.46.5.tar.gz", hash = "sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc", size = 472262, upload-time = "2026-08-28T10:01:31.677Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/b6/81d2d19ea0be2c03664381b59f65fa72fc7969decedae00bc2c4ad835708/pydantic_core-2.46.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a1dee1b804ff4d11c663636cf15d2ea47e9f79cd56c033fb1cbf08924842a48f", size = 2074737, upload-time = "2026-08-28T09:57:57.711Z" }, + { url = "https://files.pythonhosted.org/packages/0c/18/b70da8300e292df4099684ea11b1958043580d2f50d2dc8bf7e542bdd84a/pydantic_core-2.46.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d625a186a65201c23a9e3b8ed9c47e90a026e03256608cc91851c6709096844f", size = 1921751, upload-time = "2026-08-28T09:57:59.265Z" }, + { url = "https://files.pythonhosted.org/packages/e7/1a/0d590341b6ffa4b4aca83508e6b8db4761aaeacfc15a25ca3815876d4797/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8507560a9284e1370bb048ed4282012fbef4e8d109875b95e884d228552061", size = 1948231, upload-time = "2026-08-28T09:58:00.678Z" }, + { url = "https://files.pythonhosted.org/packages/7d/1d/02eb35761c51f2f7b1b042d6ab4cda6600f0c8c88a2243b3f734376201e5/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f93c5fe914d75fbec9a49209b00da5f08e9e467d69da2b1510c81940cfd10be", size = 2020708, upload-time = "2026-08-28T09:58:02.267Z" }, + { url = "https://files.pythonhosted.org/packages/4a/ea/f86073830e35d508cc8ddf9c3d9e6e6840fcb88d34bf726b0b4710186f27/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c767f552b21b10f774aeac128e828eafb796adfa1b666a18bf6321453c3a", size = 2194914, upload-time = "2026-08-28T09:58:03.934Z" }, + { url = "https://files.pythonhosted.org/packages/bb/d7/fc36240d7791ce90939e51608568c33bfdae26202016f9770c229a487d86/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:701b2e04b560eeb4bddf7a25ab8ca476176e34fdbd9a0e18196f0d12d4685f0b", size = 2235622, upload-time = "2026-08-28T09:58:05.516Z" }, + { url = "https://files.pythonhosted.org/packages/cf/bc/3fa2d76b83162820a17da7f645b28d1cba99fc8e1e5fc6517067ec450fa1/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49776eab08766a08dfff7012f8b422dcd7e25e43b316eedf0477c24fcfa84b7c", size = 2062091, upload-time = "2026-08-28T09:58:07.135Z" }, + { url = "https://files.pythonhosted.org/packages/ab/9a/095d557bb492c90cd8a70a6dd048bf793d433d03d86c81c11e912e4cd049/pydantic_core-2.46.5-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:a2468d93d181667a7abd66e1b64bb9f76f361b0fef8faddf687456453576f5ee", size = 2089904, upload-time = "2026-08-28T09:58:08.814Z" }, + { url = "https://files.pythonhosted.org/packages/24/98/7b76b1ad10a19a617a52aaa1d80e159115af939b095e86f8e756fd52e0df/pydantic_core-2.46.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:53feb344243bb9510a9dec7bf3cf1b64d88a98af5dc7872a5160465f8b198c8e", size = 2132244, upload-time = "2026-08-28T09:58:10.435Z" }, + { url = "https://files.pythonhosted.org/packages/20/32/7d6ca365fadba186a0c8f85de1a701663bce81efd309d9479be58687622f/pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cd5214352ae68f3b5e9af7768bdc5253695ee069675db3480518420b3be881f2", size = 2143901, upload-time = "2026-08-28T09:58:12.033Z" }, + { url = "https://files.pythonhosted.org/packages/f8/09/eb9a6aa57f22fd1541a9c0aa2a1f3aeef3ec65347d33e10a6da2f43e0ee9/pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:9432f3598db432cb51c5b37fdbf29a60fcccc79e30d37a05022776a6bc4ab689", size = 2299425, upload-time = "2026-08-28T09:58:13.614Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f9/548a5bb9d4ba8cd26e26daf48052236f6b38bb61e7b7241fbc3c995719eb/pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8feeac04b5794e513e710af2f9c87d49f31a6dc47967bb264a1fed61a8989bec", size = 2318566, upload-time = "2026-08-28T09:58:15.199Z" }, + { url = "https://files.pythonhosted.org/packages/4a/20/06454d18834c02c406c9133f1a3b485305fd9ee984f9636c2f730bef6a9d/pydantic_core-2.46.5-cp311-cp311-win32.whl", hash = "sha256:892a881d5f68c2b9ea304b7a6c2c60d9343df578a311b0f86b94bc8f1ffe8129", size = 1954258, upload-time = "2026-08-28T09:58:16.813Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c2/718b9deb4b72453b5d8c7447a3b14cb77bef36917ef5f514e0948a4096a0/pydantic_core-2.46.5-cp311-cp311-win_amd64.whl", hash = "sha256:40375c2d05acec10323e45dfe2077ac44bc74659008614af5069034e2cfc781c", size = 2041030, upload-time = "2026-08-28T09:58:18.288Z" }, + { url = "https://files.pythonhosted.org/packages/67/ea/c1d1a5b72d6e1ff7f377a4d9199f6591f095beb5b409a8a5d89f7238d939/pydantic_core-2.46.5-cp311-cp311-win_arm64.whl", hash = "sha256:28a6a556cd3b6066bea827857f9d9cce027c96f776e512f544a581f9e42161f8", size = 2009234, upload-time = "2026-08-28T09:58:19.929Z" }, + { url = "https://files.pythonhosted.org/packages/82/3f/76358795aa7a8c6d4f36e2cb828ad1c90ee118e1393a9281664f5aade9d4/pydantic_core-2.46.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d", size = 2076516, upload-time = "2026-08-28T09:58:21.576Z" }, + { url = "https://files.pythonhosted.org/packages/db/50/26b091836076ce4cb2fac264186936acc069e0595772cfd02a563bc4761a/pydantic_core-2.46.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e", size = 1922874, upload-time = "2026-08-28T09:58:23.766Z" }, + { url = "https://files.pythonhosted.org/packages/09/f0/2a8ce3849e299d44e2d2c196b6082643a3235565a735cb51db7a6261f614/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29", size = 1951772, upload-time = "2026-08-28T09:58:25.435Z" }, + { url = "https://files.pythonhosted.org/packages/87/46/ac0dc8bdd9e6048183a14eb127764e7ad9240021c17513074a4711b0e31e/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4", size = 2031832, upload-time = "2026-08-28T09:58:27.102Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c2/339de5bef7be36301a2231eaa52e62163742c2281f11b5f4892bc79785cd/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a", size = 2208645, upload-time = "2026-08-28T09:58:28.948Z" }, + { url = "https://files.pythonhosted.org/packages/7b/a0/9ff22b797724262da14427abaed4dd1d864a139693fc5e7809114376a716/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62", size = 2265935, upload-time = "2026-08-28T09:58:30.625Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a4/eb9409ec0736e50aa70a412f16c204ed149516846912f7e6724d4c73ee53/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2", size = 2066284, upload-time = "2026-08-28T09:58:32.289Z" }, + { url = "https://files.pythonhosted.org/packages/c0/02/7f6156ffc926857f1c37c07d9a388682865a81830ab6a1b637082c25e399/pydantic_core-2.46.5-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869", size = 2105889, upload-time = "2026-08-28T09:58:33.986Z" }, + { url = "https://files.pythonhosted.org/packages/92/b1/e781d357ebe09fc929f995700f1b3503e8897f1cece183ecb1300d4d67e9/pydantic_core-2.46.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5", size = 2158006, upload-time = "2026-08-28T09:58:35.647Z" }, + { url = "https://files.pythonhosted.org/packages/70/0a/644597d84ab400e50609c192120b85c9681c22d3a20461b9060a79be0a7a/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3", size = 2158408, upload-time = "2026-08-28T09:58:37.38Z" }, + { url = "https://files.pythonhosted.org/packages/1e/ee/ca3b7b3a4b3769ffe9ce9432a7c9be755de9593a46d3b0d54d0409323e44/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b", size = 2309609, upload-time = "2026-08-28T09:58:39.22Z" }, + { url = "https://files.pythonhosted.org/packages/ce/52/39fa1f451486019524ca685020390e7ca351832fd874530ba30c8628e6dc/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0", size = 2342618, upload-time = "2026-08-28T09:58:40.89Z" }, + { url = "https://files.pythonhosted.org/packages/81/5e/468fc630568c61dcef3cd47ad32ffbeed9af643f49208d1ea86ab4f890c4/pydantic_core-2.46.5-cp312-cp312-win32.whl", hash = "sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b", size = 1939475, upload-time = "2026-08-28T09:58:42.591Z" }, + { url = "https://files.pythonhosted.org/packages/cf/c9/4c19f41b84cf6b622a72fbeed7665b25d47a187d68d47d0d430c07f23268/pydantic_core-2.46.5-cp312-cp312-win_amd64.whl", hash = "sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8", size = 2043140, upload-time = "2026-08-28T09:58:44.272Z" }, + { url = "https://files.pythonhosted.org/packages/af/dd/0c1a050299147c746e5256db16d645ab5efd4f78c59937d581a0524e74a2/pydantic_core-2.46.5-cp312-cp312-win_arm64.whl", hash = "sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084", size = 1997729, upload-time = "2026-08-28T09:58:46.13Z" }, + { url = "https://files.pythonhosted.org/packages/f5/37/5abe39a8372a61d3dc3c1338fc504281c01b32fdb3169cd7187153b56d3e/pydantic_core-2.46.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0", size = 2075885, upload-time = "2026-08-28T09:58:47.856Z" }, + { url = "https://files.pythonhosted.org/packages/21/43/6323b1f8b217780454c61304bcd2b38ae4762f50754414124603ccc90bb2/pydantic_core-2.46.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff", size = 1922768, upload-time = "2026-08-28T09:58:49.58Z" }, + { url = "https://files.pythonhosted.org/packages/0f/a3/c05ca796e1197618a774b01e596aeedfefc2f7d8c01ae3054e910b120e8a/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931", size = 1951241, upload-time = "2026-08-28T09:58:51.511Z" }, + { url = "https://files.pythonhosted.org/packages/68/32/33bc39ac705c52cffc908e8389f9754fdb208aea5c69cceddf4eb3ce99af/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f", size = 2031975, upload-time = "2026-08-28T09:58:53.166Z" }, + { url = "https://files.pythonhosted.org/packages/b0/70/2333e885c0f6a67bc105c5916965dac9b57f2718ee20d81d1a06a4ebdc13/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038", size = 2208542, upload-time = "2026-08-28T09:58:55.017Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ea/296debfb4264207bbda5936133892e027c0a58875ad53ebd512fba8ec3a2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f", size = 2264692, upload-time = "2026-08-28T09:58:56.767Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/9e4de77a6271e07a76d2d58b11c091a979c191ed2939bf80067568b369d2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1", size = 2066633, upload-time = "2026-08-28T09:58:58.531Z" }, + { url = "https://files.pythonhosted.org/packages/8d/db/f9e9d0c97445987b2084823d5c240de88087338f04fc2cfaa2df186b8049/pydantic_core-2.46.5-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761", size = 2105235, upload-time = "2026-08-28T09:59:00.421Z" }, + { url = "https://files.pythonhosted.org/packages/07/c5/79169b047b3b2c3e99e04bc76372af9637e0bf6db638274fa927df96369e/pydantic_core-2.46.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5", size = 2157367, upload-time = "2026-08-28T09:59:02.442Z" }, + { url = "https://files.pythonhosted.org/packages/26/b5/ba6057afb7c291bd449f51b867f95aef2072941c4ce4e5c31d6ffd132d3b/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e", size = 2158420, upload-time = "2026-08-28T09:59:04.2Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/2057abecaafdc22912afa819603a51f0a62d40643b7c4871c51721fea9be/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed", size = 2309588, upload-time = "2026-08-28T09:59:06.048Z" }, + { url = "https://files.pythonhosted.org/packages/71/9d/881156dc404e27479c4246128d73538464cab4a239bec61995e227644c30/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519", size = 2341866, upload-time = "2026-08-28T09:59:08.539Z" }, + { url = "https://files.pythonhosted.org/packages/5a/38/d66f443a259f84d13babdceae568e572b0ed26da17ca5d0a649ebb110a67/pydantic_core-2.46.5-cp313-cp313-win32.whl", hash = "sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea", size = 1938580, upload-time = "2026-08-28T09:59:10.402Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1e/1d5371213f4cc9a7ed70c0bfcc7911de22311ee99a662a56077d7292d2ac/pydantic_core-2.46.5-cp313-cp313-win_amd64.whl", hash = "sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5", size = 2041980, upload-time = "2026-08-28T09:59:12.396Z" }, + { url = "https://files.pythonhosted.org/packages/5a/48/4222d90b1c67568bace4dec6dca6271449c66de3595d72b6d098f5fde597/pydantic_core-2.46.5-cp313-cp313-win_arm64.whl", hash = "sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575", size = 1997213, upload-time = "2026-08-28T09:59:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/8e/8a/14596f2a8367da50cf7cbac48169ee5d9c8e11d486a3b527082384630c72/pydantic_core-2.46.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355", size = 2074081, upload-time = "2026-08-28T09:59:16.141Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e", size = 1920497, upload-time = "2026-08-28T09:59:18.065Z" }, + { url = "https://files.pythonhosted.org/packages/8e/26/092079428f86e927e030b2c0ced87df69dbb1c875cdeaa67bf42ea2be746/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3", size = 1952130, upload-time = "2026-08-28T09:59:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/08/c3/8ec0e290a9ebaebd64047bf5fda94be835c6b1551b02437e4b76778fbcd7/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46c25dda9d092a06c08db76ffe0a197107904d0dfac653f7d5306bbcd6d6119c", size = 2026371, upload-time = "2026-08-28T09:59:22.227Z" }, + { url = "https://files.pythonhosted.org/packages/01/72/4fd20ad520fb8da0157f95b27a7eb05a72790ef08138e7701ac972c342ea/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:37ea7b83c935e5b0d68c9449b82651accf78a10828b2c02b2f2d9e9496446c21", size = 2202822, upload-time = "2026-08-28T09:59:24.277Z" }, + { url = "https://files.pythonhosted.org/packages/31/b0/d16e0771206b29314f0d52198b720be21e8a99ab2bf11e3bc0d7c9cebdff/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e64e88d5585bea9ce95861079de72006c7fa6d3df4e3a3b65ba31eb979c15c9f", size = 2262756, upload-time = "2026-08-28T09:59:26.608Z" }, + { url = "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f", size = 2068352, upload-time = "2026-08-28T09:59:29.044Z" }, + { url = "https://files.pythonhosted.org/packages/08/7c/570abb1ad2155348dc754ea91be22e5aaa18eb6d69a6068f7c6f2679a6ed/pydantic_core-2.46.5-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:a2a5e1d0ff29adddc9f6d6821a66302e4493f8ca898b715b6b1182c2c201ea0a", size = 2104777, upload-time = "2026-08-28T09:59:30.95Z" }, + { url = "https://files.pythonhosted.org/packages/8e/25/5bf74adc65a1ac5b7be3f6cb0bcb5433615c1598a801c19d830d84c98ded/pydantic_core-2.46.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821", size = 2156312, upload-time = "2026-08-28T09:59:32.604Z" }, + { url = "https://files.pythonhosted.org/packages/90/6a/2ef38830675e050121040618135564ed56b860b45433b02d9b4ebece46f3/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:a91c17edf6eea2402cb5457b4c89e99bc5ed1004aa34c4adf1d4258c1a5c22c2", size = 2150067, upload-time = "2026-08-28T09:59:34.453Z" }, + { url = "https://files.pythonhosted.org/packages/90/ef/a7dbb03a14a64c2a4621f989c615ed9a892535a6cad938fc27079f919d80/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b49924c73a235e969511bf2aabdff3beebf9820931f646c80274d5d780010c47", size = 2304516, upload-time = "2026-08-28T09:59:36.194Z" }, + { url = "https://files.pythonhosted.org/packages/68/f8/6bb4c4b80e8a6fde1904c64a51c62a1d04fcdfa3ea521a66b2ddefa1d885/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:2cbd9a5eff05e51c447c34dfa4632145b26b09120cf04bd0c871e44c1a5e1c9a", size = 2335223, upload-time = "2026-08-28T09:59:37.931Z" }, + { url = "https://files.pythonhosted.org/packages/2a/80/f46b8c681195190b2c1f1c7c0a81abce60663e987613e09ef64d433dd96b/pydantic_core-2.46.5-cp314-cp314-win32.whl", hash = "sha256:2d5d76654becf5efd62c9e51c3756c67b49498b0c9a40884934c40807adbd074", size = 1934827, upload-time = "2026-08-28T09:59:39.836Z" }, + { url = "https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", hash = "sha256:fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0", size = 2042648, upload-time = "2026-08-28T09:59:41.792Z" }, + { url = "https://files.pythonhosted.org/packages/69/0c/117c562c7c1babdf44576b72a5e496906506c93690387ecfbca7c729ae2e/pydantic_core-2.46.5-cp314-cp314-win_arm64.whl", hash = "sha256:045ab3b6d308439e32b81cc173bba5b9018bc6ed896afd0c65b3b009b1699af5", size = 1989652, upload-time = "2026-08-28T09:59:43.702Z" }, + { url = "https://files.pythonhosted.org/packages/e8/66/9336ae58f9eb68c41d121894e52c4c89eccb07eb8f602a04ee9c3f37736a/pydantic_core-2.46.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8816f3d218beb4b787de5c9759c259b8fa61f9dec42dc7811f320a33771778b7", size = 2065829, upload-time = "2026-08-28T09:59:45.364Z" }, + { url = "https://files.pythonhosted.org/packages/c5/02/bc19b47a96c2d3109760711acf22369e56bd7e405ca52f7ade164d2ead57/pydantic_core-2.46.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:bce57638e08ac148e5778cce7feb968307a727d66f8e2274a543d0cf0c9ad6a3", size = 1905716, upload-time = "2026-08-28T09:59:47.18Z" }, + { url = "https://files.pythonhosted.org/packages/52/a4/70b47c0509923dd98ccfed04fb3e32ea3849c82a0ff2205bb41009b43c00/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976e1128455aa595ea04c79ccfedff1aaeab96ee013fcc916bed120c4f0ad94f", size = 1934216, upload-time = "2026-08-28T09:59:49.241Z" }, + { url = "https://files.pythonhosted.org/packages/52/ab/aa03b65f7bb198585edf806b906c3223ecf1795543e39e23aec4cce27ad2/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b891faeedeafba41b2983e5001a81b6a915b69544c7e7570d1989ce1c36ac7", size = 2010635, upload-time = "2026-08-28T09:59:51.692Z" }, + { url = "https://files.pythonhosted.org/packages/3c/8b/0da06343f30b84ec549aafd309c6456223d5dc8bd36af504c573faad561d/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f194189415698233dd1114a093a9b56e61e2c57e11b469be3b0506f46f0771c", size = 2209369, upload-time = "2026-08-28T09:59:53.582Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5b/844c4defaa34a3df66eb9257087d121d70c201298b96abdf9f492fc2f1bf/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82a36973cf8a2ef5406f4fe2edbf8ed0c99629535d959e0b100c76a32535a111", size = 2253238, upload-time = "2026-08-28T09:59:55.484Z" }, + { url = "https://files.pythonhosted.org/packages/f4/64/a4e536cb16d7f61a7fd3120b46c577fc7fa7325992f69c4f52bc786d77d8/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdbb78909f52b981d3b2d56b97328d71eb0b974c36bd77c920123a7ebb192829", size = 2065740, upload-time = "2026-08-28T09:59:58.038Z" }, + { url = "https://files.pythonhosted.org/packages/5f/75/aaa38c6bc2d085f6605b34eabdc6a8a4e0b2e61fc9c8e6e52b28e97b3125/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:52e24eacdb536cade636aa90fb851835222becff8484b7001fdc78cb0290f2aa", size = 2087425, upload-time = "2026-08-28T09:59:59.898Z" }, + { url = "https://files.pythonhosted.org/packages/55/ae/fcab4cfc39aba3689e1d20c8b5250ad280957022c09af2ed9cd585602a5e/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:37ae34309d7bd8c0d61ab839668058f2a7962ea1fc51d105d2db228fe0618034", size = 2139306, upload-time = "2026-08-28T10:00:03.057Z" }, + { url = "https://files.pythonhosted.org/packages/2d/f4/f1d03a4bc9d9acbc62f4d742b8a319af52f71885079868b2ff8e48a651ee/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:0cdbada856a1c69a7624a64d3d9aefe79300bd6ef827b43a4f265010b9b55184", size = 2144589, upload-time = "2026-08-28T10:00:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/83/f3/7a53bb1356de514a4cd295f25b6ac39237895620c0462d2592b76c16e114/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:545f26c504b27c3758439a5e6d9349931f0a04f855668d5fe323c89e82300a38", size = 2288882, upload-time = "2026-08-28T10:00:07.931Z" }, + { url = "https://files.pythonhosted.org/packages/cd/94/5a81583660c175c59d49ffb09f4b3a44debeaf86a19fca664ae1cdd9ee32/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:ff218293c9c806138dca139765e3b067621be52bcd93cdc14c7711be7ddc90a9", size = 2335210, upload-time = "2026-08-28T10:00:10.177Z" }, + { url = "https://files.pythonhosted.org/packages/5a/9f/5d685c2693b972d1a59c998586e8823712b66603aeff47ee60a4bdaafd37/pydantic_core-2.46.5-cp314-cp314t-win32.whl", hash = "sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9", size = 1921180, upload-time = "2026-08-28T10:00:12.35Z" }, + { url = "https://files.pythonhosted.org/packages/70/12/5c94ee16d65a37a15f9e869f5e6256df111154491173801a4c5e800ab548/pydantic_core-2.46.5-cp314-cp314t-win_amd64.whl", hash = "sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290", size = 2020515, upload-time = "2026-08-28T10:00:14.774Z" }, + { url = "https://files.pythonhosted.org/packages/63/19/67830dda664e6bdf9285ee2e40f355d0d7d6b92aa0c42e8d217bb8d33d36/pydantic_core-2.46.5-cp314-cp314t-win_arm64.whl", hash = "sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f", size = 1989276, upload-time = "2026-08-28T10:00:16.984Z" }, + { url = "https://files.pythonhosted.org/packages/af/1e/ecca01fce348f7e8afa9572441ff6f7d1cc70d21e4859f33944d10877e1e/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:c14ad3bdc85ee7f318742c457ca3968a92126d144b15721c759033bfb06296c2", size = 2075342, upload-time = "2026-08-28T10:00:51.353Z" }, + { url = "https://files.pythonhosted.org/packages/1f/4c/af80c7a8032dfc897040ad5cb772bebde529a381186499e6e29987f23f8c/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0bddb4020d8f04175865ccd17eff3040874fc11fb593f424edb452653b4b947c", size = 1907219, upload-time = "2026-08-28T10:00:53.438Z" }, + { url = "https://files.pythonhosted.org/packages/be/3e/54d89e2b092e778716bf6153634ef479e955f48c261090be23aa1e0fb0b5/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2471fd51c61c610e1dcf7de44d7299283661654d11264ab4802b303368d69c47", size = 1953393, upload-time = "2026-08-28T10:00:55.58Z" }, + { url = "https://files.pythonhosted.org/packages/ea/89/828ee90cda28ce17bdefaa3a6eaf74fe430e113295a10e6126beca559d6c/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10ec717381bdbfafef34607824db4c91de69ff085e4fca3b2af91b4fa17e68a", size = 2099024, upload-time = "2026-08-28T10:00:57.794Z" }, + { url = "https://files.pythonhosted.org/packages/df/dd/053c2e4303f791f3b8f8a14ab0b22008e8eb21d868c0c90b4f9be705b76a/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942", size = 2062540, upload-time = "2026-08-28T10:01:00.318Z" }, + { url = "https://files.pythonhosted.org/packages/d7/dd/a18df751a5e37dd51bfad7f68e766999125bebe68c9e1d10a493ad01bd63/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f", size = 1902040, upload-time = "2026-08-28T10:01:02.529Z" }, + { url = "https://files.pythonhosted.org/packages/b7/13/01d40f9d07ce8a779fd6e0bd8ad4fba91309500dd67b869e2e219d261a6d/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433", size = 1967479, upload-time = "2026-08-28T10:01:05.004Z" }, + { url = "https://files.pythonhosted.org/packages/fa/04/c81d4841331c2178b6fb09ae225425e110ed72d990c9fe556c4ec03d1013/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c", size = 2111034, upload-time = "2026-08-28T10:01:07.345Z" }, + { url = "https://files.pythonhosted.org/packages/20/21/22102e9950b3049526d20e811b95396508377d87651edd2b80d2b3d28659/pydantic_core-2.46.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ab4b66edffb32d9e951efb3814bd104b8367a7501b81b955cacb5726d897389f", size = 2071333, upload-time = "2026-08-28T10:01:09.636Z" }, + { url = "https://files.pythonhosted.org/packages/d8/18/87aefa427d191e6d3ab1447f1efc1cdcac86af1069239b133e8a0fd7f7c9/pydantic_core-2.46.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:337639ba62a11acde6ef3aeb08c8ea755f8ef1fe5e513356c0f36a2b0d7568b0", size = 1912713, upload-time = "2026-08-28T10:01:12.285Z" }, + { url = "https://files.pythonhosted.org/packages/1f/93/fd89e9ad49b1805ca94d24ce1088b7d305f05c35ffafcedb9819d03588a0/pydantic_core-2.46.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:413a717a410d0c817ef5b786a059415550b3794e1d0c2abffd9efb93a3d9f7b4", size = 2090926, upload-time = "2026-08-28T10:01:15.19Z" }, + { url = "https://files.pythonhosted.org/packages/6f/45/8e59dab6acf8d35f02f0a958980074f31038968bdb2c983fcae9d1efee03/pydantic_core-2.46.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1e449def1945a462c464331254e5a44fca7c3b4f9aedf59ec2f50f8066dd8e25", size = 2131303, upload-time = "2026-08-28T10:01:17.937Z" }, + { url = "https://files.pythonhosted.org/packages/d5/a5/e1d4dc5180dd887a9522efc1f8716b8692b7606b1d3273d7862eaf66be44/pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:a445486499897b88a7d6c310c88ed64dd37b1b59bfd7ae9107490bbb362f47d6", size = 2145128, upload-time = "2026-08-28T10:01:20.694Z" }, + { url = "https://files.pythonhosted.org/packages/c2/d7/ad493864a7fb21c0c4df98f965e2db430cb25a9d7369b5778d5016c09fd9/pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:2d330aaba8621b1edcec8ae2c4050f63b84ccf6d98723a8f212e9684713abf0e", size = 2294560, upload-time = "2026-08-28T10:01:23.495Z" }, + { url = "https://files.pythonhosted.org/packages/02/8e/b41c84c913f29973a268e6c2b5bbf13c95adb9956c126d10da11ba3b2bef/pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b6acfb46a814762367fb7ba0828b0a17d441b92ce249a0e007474c9072662dda", size = 2317531, upload-time = "2026-08-28T10:01:26.334Z" }, + { url = "https://files.pythonhosted.org/packages/db/1d/068464f23075f66a8f1b806935e9cd9363ee446636ea70d2c22ee8659dbf/pydantic_core-2.46.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d0a24b40877af2de4950252be9d21eaf7fb07660f3c2cae1f56c6b599ada5266", size = 2140686, upload-time = "2026-08-28T10:01:28.947Z" }, +] + +[[package]] +name = "pydantic-settings" +version = "2.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/b5/8f48e906c3e0205276e8bd8cb7512217a87b2685304d64be27cad5b3019f/pydantic_settings-2.14.2.tar.gz", hash = "sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f", size = 237700, upload-time = "2026-06-19T13:44:56.324Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/c1/6e422f34e569cf8e18df68d1939c81c099d2b61e4f7d9621c8a77560799c/pydantic_settings-2.14.2-py3-none-any.whl", hash = "sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440", size = 61715, upload-time = "2026-06-19T13:44:55.02Z" }, +] + +[[package]] +name = "pydicom" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7a/de/52aaf905f1f0ae7aba85996e2592ea2c1fe49157f3cfbcd1871965bdb51d/pydicom-3.0.2.tar.gz", hash = "sha256:5942bfc2d72c6fa4b3b5b62c527f54b7f2355f21d6f5d296df6bb30188df6a4f", size = 2886792, upload-time = "2026-03-19T21:46:20.935Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/e0/60466c6d712dad2cf807df315e39863e91609ffd1064ecb835994460bbda/pydicom-3.0.2-py3-none-any.whl", hash = "sha256:abf971a5440f84dbaf42c4b6758e30e62480902584f8b270b9a5d146e278a07b", size = 2376822, upload-time = "2026-03-19T21:46:19.042Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/81/58d0ac84e1ef3a3843791d6954d94c0b33d526c75eeb1efbce9d0a4c4077/pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423", size = 107515, upload-time = "2026-05-21T19:54:36.618Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/5e/ecf12fdb62546d64385c158514e9b2b671f7832108ef2ecd2020ce0af2d1/pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728", size = 31274, upload-time = "2026-05-21T19:54:35.362Z" }, +] + +[[package]] +name = "pymssql" +version = "2.3.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/73/3a/9332b3331c423ac6ae40adb4680d858e3e15d39ec25507fd01b45c171730/pymssql-2.3.9.tar.gz", hash = "sha256:00aa861936374f251b8e1e4535f26daed32c2fc365b891fedcd97d7863d7321b", size = 185175, upload-time = "2025-11-07T00:25:18.678Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/5b/3e8f63da36e6f9c2c53919d84fa2a59aab27b5f10d79c337a339ac3ca579/pymssql-2.3.9-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:8bd78052f94d2a519bfc3922831144b79f8c35f96347b2d76c8030670549e7e9", size = 2906587, upload-time = "2025-11-07T00:24:17.518Z" }, + { url = "https://files.pythonhosted.org/packages/cb/fb/f81211fe3050c09427bb69bb2791fbe43293d8d8c230c593aeb85100487a/pymssql-2.3.9-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:7c302c204ea7b64bbb6aa8870a48aeda430b2518d9c9ed4f680b4556ffc66800", size = 3161798, upload-time = "2025-11-07T00:24:18.683Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e1/b2a13c9cec28b47426bdf1c2f4db52c256c1dadfe939da583955754956e6/pymssql-2.3.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:18b8d0495649d36499fc47bdd748b30ef7d522ad02dbaa0c99a595b7aff70808", size = 2427237, upload-time = "2025-11-07T00:24:20.314Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/b65176ca09af0191316d75823fdfd9edc149264294f244c35fdef2b42227/pymssql-2.3.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2d67cf85bbbe9de5c42e0cd6b5cc439b3e4537f85cfc9216ffb81a61b22c9878", size = 2764911, upload-time = "2025-11-07T00:24:21.384Z" }, + { url = "https://files.pythonhosted.org/packages/0b/74/c2f935ee6b521886cd1dbdd70b9a451c063598357d86dd42d7dcb1fd02dc/pymssql-2.3.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:843e7cf4df2dcda0e91993fc29388a7f0cf208aa8e6ebab63c9a73c679ef530a", size = 3668315, upload-time = "2025-11-07T00:24:23.146Z" }, + { url = "https://files.pythonhosted.org/packages/77/e5/b839b63a185753db82826c3dfa8e3632cf6436c2ae6ec729f025c5401d14/pymssql-2.3.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4814affb16ec73666f890c3830dfb49d17f50914d3811f232208b01a60af7b5e", size = 3411284, upload-time = "2025-11-07T00:24:24.809Z" }, + { url = "https://files.pythonhosted.org/packages/bd/56/c5f3e94b49b7dfd8e61fcb0ff2139647da585be62bb78488d550d3a9ec58/pymssql-2.3.9-cp311-cp311-win32.whl", hash = "sha256:279f66421f5e6c332112cf99432b2a40e9d55a674f962f704b1abfcc4df556ba", size = 1316180, upload-time = "2025-11-07T00:24:26.29Z" }, + { url = "https://files.pythonhosted.org/packages/51/dd/e1495563aa55b08a6e7198b1d1c0813839a556753aed4d3c4be009bc0d94/pymssql-2.3.9-cp311-cp311-win_amd64.whl", hash = "sha256:0ce5aed7f3eb07186ac45264f835e62295995ec10d8557be6f0e12734bf80e20", size = 1997681, upload-time = "2025-11-07T00:24:28.166Z" }, + { url = "https://files.pythonhosted.org/packages/70/8c/8eabd27238056124165f53d55a925d793bc2e64254cb5c61bef443660ba8/pymssql-2.3.9-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:acb53b1cdc8858c4c65c928ea38bc11fe2dbae87b244d64175233d57ff0da1f4", size = 2890116, upload-time = "2025-11-07T00:24:29.273Z" }, + { url = "https://files.pythonhosted.org/packages/96/a9/8993eb286935d1b8104e69f2541b7d48402f33fe437522d5cf801d1a4683/pymssql-2.3.9-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2dc890adf9fe07184967e0ae88bcb2599ba520dd21ef9a335a582a4bb710b90a", size = 3148441, upload-time = "2025-11-07T00:24:30.543Z" }, + { url = "https://files.pythonhosted.org/packages/bf/6d/06105f13943c6e8285ce27f5053d38409d7eeb21ca5d15449f6804cae77e/pymssql-2.3.9-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4cf09a60226db8e12d0eb8c52e0f4d710664b49b244b80b5a2534a602d826f17", size = 2455833, upload-time = "2025-11-07T00:24:31.746Z" }, + { url = "https://files.pythonhosted.org/packages/15/e4/b33066bc1407c060120f077c7f21efeea9d5929859f928a8bc1418bd6c7d/pymssql-2.3.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f93b4e0d465b1340a373573e8166f568329d4bc95daccdd4a616e5dfe5cabc1b", size = 2791598, upload-time = "2025-11-07T00:24:33.786Z" }, + { url = "https://files.pythonhosted.org/packages/9b/a7/6f27e35203d39c6e478c68151b7847d111be9245df8bbcc9e8d606caeaf3/pymssql-2.3.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d2169f3f55d0abcbcb1b9b6a611ee85a8a61b5f11df66f16700e90dd8aa7ccd5", size = 3696961, upload-time = "2025-11-07T00:24:35.423Z" }, + { url = "https://files.pythonhosted.org/packages/7c/15/1d2b12724199ef98e06858bdb262fb5d76e43ce295058dc22d8756f79a72/pymssql-2.3.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bc678a80519a63a86fef0dda1e264b4ffc60c382a4ba8d50b9656bde71ba8e25", size = 3439929, upload-time = "2025-11-07T00:24:36.885Z" }, + { url = "https://files.pythonhosted.org/packages/37/28/07f3533a162e9db0aef417e48a4e16ba4baae5eb3ee8036ad766f2a94db5/pymssql-2.3.9-cp312-cp312-win32.whl", hash = "sha256:7ea58ea59f781d2519c6bcb9f3faea4ba861baea4cb1c2537fa2ee3a3f98a103", size = 1301950, upload-time = "2025-11-07T00:24:38.18Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ff/1232e7abd765d5b6916414ca7b2a24cecfefcaf369baaa0d1eabced31d0f/pymssql-2.3.9-cp312-cp312-win_amd64.whl", hash = "sha256:1836de4b42ea563dba77e3ba9e18f44157580eaa1c60e5e4c054cf229e8aee85", size = 1982983, upload-time = "2025-11-07T00:24:39.281Z" }, + { url = "https://files.pythonhosted.org/packages/85/2d/54a922790b3ed1f6bb1c45836fad58382b5a9f527054c934d415caa3febf/pymssql-2.3.9-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:8c4e389da9d545829db0d51bf1555bdb866ecabd61a3eb6fd6a8198c425adedc", size = 2887524, upload-time = "2025-11-07T00:24:40.897Z" }, + { url = "https://files.pythonhosted.org/packages/88/ae/819f79197943cd2d356e4ad8793a8acd49575990202533cf12536344fe03/pymssql-2.3.9-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:b589e035a98149148239bf78a9c38eb2d255f1f943633d30dd3dff6c2c23e9cd", size = 3146305, upload-time = "2025-11-07T00:24:42.069Z" }, + { url = "https://files.pythonhosted.org/packages/b5/18/a7df7a402dce5401ef32194e479cc2571397d81511c07c153552294d7aa5/pymssql-2.3.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5b4741fbec26e9f63ae66afc971a00b7365eec4b6a619dd2aff3abe0fa8f75ee", size = 2455424, upload-time = "2025-11-07T00:24:43.308Z" }, + { url = "https://files.pythonhosted.org/packages/85/27/91f51a406e270800043d7a15504ca8481e0095685dbc190dd8e5accd9cf2/pymssql-2.3.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:100bcd948247c7eae9f951a3f33a1fdd952bd2c683a7ce277066d4f38a960d83", size = 2790972, upload-time = "2025-11-07T00:24:44.627Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1d/edf69610ead451f552ab3aea71757e2e81b5952ed5616aef80b20ceef7fc/pymssql-2.3.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fada474823586b4c417f57d6256ddc05ced313c2306c67d6677427dff488f70a", size = 3696454, upload-time = "2025-11-07T00:24:46.723Z" }, + { url = "https://files.pythonhosted.org/packages/d5/57/77d23790c3c4ee672d6d3172072e935e014df15e0446f9d289ecf898feb6/pymssql-2.3.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eaaa72530af8012b7d3d7d01e5d5a44b2f7dc04abb9e36a1eb30b914f68ae060", size = 3439485, upload-time = "2025-11-07T00:24:48.352Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/a1d4640ddd69a570c31cc377e0bcf44a16369c6b768e76cea2f3b47fc896/pymssql-2.3.9-cp313-cp313-win32.whl", hash = "sha256:734397cc4ffc5aecb2b312adb940b8bd6df0b5a8f52f9207157f06fe5fdacf26", size = 1301862, upload-time = "2025-11-07T00:24:49.578Z" }, + { url = "https://files.pythonhosted.org/packages/27/cc/faf4eb725794c7094a26eca77b6bb81e220de1fb45223e0d723abdcbff76/pymssql-2.3.9-cp313-cp313-win_amd64.whl", hash = "sha256:87282bf2cc318f2c87d3a26e86b9287d863d3f67d31cad077614046d60b8bcd6", size = 1983605, upload-time = "2025-11-07T00:24:50.737Z" }, + { url = "https://files.pythonhosted.org/packages/80/6d/45c161736c998942544c805ab11cccd0ebc2622f355b29bf61fffc6e934d/pymssql-2.3.9-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:437071819b3c864f9c810f2d186df147ccd89eb5923dfc7a8a3dea4cc41005a1", size = 2887874, upload-time = "2025-11-07T00:24:52.315Z" }, + { url = "https://files.pythonhosted.org/packages/7c/5d/a5af2012d6f33dd8aa44410dc1630c4b329bfb99ce13f449efcdf5bee098/pymssql-2.3.9-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:e2c64e55389b849fc84ebabdac5b3a3089e2f86eaeaa9768daf6589ef456bcbd", size = 3148332, upload-time = "2025-11-07T00:24:53.554Z" }, + { url = "https://files.pythonhosted.org/packages/49/e5/9d35d137a82d76db354d026916a94983b89a9c8c913084383c209c528628/pymssql-2.3.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:11f4743ff85bf40a248cba03f0ef1aec36c4748bd8c1b1c1940db04989d542b3", size = 2453981, upload-time = "2025-11-07T00:24:55.04Z" }, + { url = "https://files.pythonhosted.org/packages/f6/48/d23423b3c8a180282ec12a918a1d1ccf2084d1d8bf56249a66482baf8767/pymssql-2.3.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeb65c9397ea345148e47cf4c5f4c04280c954d6d5779d9257289cc3321ea34f", size = 2789395, upload-time = "2025-11-07T00:24:57.684Z" }, + { url = "https://files.pythonhosted.org/packages/a5/86/d3120a19ceaa8d10bd908fbc4cce294504224e96a32f88e25518196785c5/pymssql-2.3.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:12e069f058eeec41c6b3e6ca54081df6a4efeca8bd85bbc0790c439f2a1ba0d5", size = 3695581, upload-time = "2025-11-07T00:24:59.635Z" }, + { url = "https://files.pythonhosted.org/packages/99/19/d556ba7f190a26f822d0e2f72e086c7a2e655ee4021405a80441818e2277/pymssql-2.3.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:05ef3b3e2fb08e8c19226d5ed38838107842b8ceb03c2ee4095ccf7cd19c7154", size = 3438213, upload-time = "2025-11-07T00:25:00.851Z" }, + { url = "https://files.pythonhosted.org/packages/34/95/708f92b7da07fdd5a1e35a6f2939aa20650ce7414a21a59184895731741d/pymssql-2.3.9-cp314-cp314-win32.whl", hash = "sha256:2b15cf0614b3a77e344c1f81d6564c4ae14e9f61f7407b6df801d4034e4c94d8", size = 1333272, upload-time = "2025-11-07T00:25:02.912Z" }, + { url = "https://files.pythonhosted.org/packages/23/df/8fdf62807b83649dc71fc7886b5f3462a436430d342c94d3a07a7494cac9/pymssql-2.3.9-cp314-cp314-win_amd64.whl", hash = "sha256:3f6dfde0c1123f5e01b29683456e422472c0af5a533a0f46a1cbb359602ade72", size = 2037389, upload-time = "2025-11-07T00:25:04.654Z" }, +] + +[[package]] +name = "pyopenssl" +version = "26.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3f/e8/7325d258199b159eb2c03fe32107533e2832e70e63f4fb88a6aa00023201/pyopenssl-26.4.0.tar.gz", hash = "sha256:28dfcce0162b9211413e26dfbfdf1d24317fbeba18fc93c12400a1856b2a0bc7", size = 182046, upload-time = "2026-08-01T19:50:50.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/ad/2cf6d3fa2fae5c79e1ed9960c0d42badd0f94d81dd12b50604cdc839e648/pyopenssl-26.4.0-py3-none-any.whl", hash = "sha256:f0eb0cb2d581d3ad2b9c489468485e7f2ab6727d08401bcf9d824c3caddf3c1c", size = 56026, upload-time = "2026-08-01T19:50:48.94Z" }, +] + +[[package]] +name = "pyppmd" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/81/d7/803232913cab9163a1a97ecf2236cd7135903c46ac8d49613448d88e8759/pyppmd-1.3.1.tar.gz", hash = "sha256:ced527f08ade4408c1bfc5264e9f97ffac8d221c9d13eca4f35ec1ec0c7b6b2e", size = 1351815, upload-time = "2025-11-27T22:08:44.175Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/40/580b99818c9db3a09cbae8e3740f9b5127ef7fd7314daf009c487ab02eb6/pyppmd-1.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fdf55aa6ee7aef492f6896464e7a5a528f8615bb9e435f55bc8dff226fcc8292", size = 77550, upload-time = "2025-11-27T22:07:37.839Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a3/f7b4c49ef920f5b2c9812f8f54f48e01435433cb6b46ec82b1b4e740714d/pyppmd-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa820aac385ac4ee57160b26d92862c69d31c08f92272dbef05fe8e619cea8d1", size = 48000, upload-time = "2025-11-27T22:07:38.983Z" }, + { url = "https://files.pythonhosted.org/packages/bc/c3/30de6f7892e77b83350e55d54a6913420591cc2c5c4d2394c219a4c461ac/pyppmd-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e16593ba4ca0a85821ae698ef06847a52937662f5ce1b130c39cca2979a4e8cd", size = 48439, upload-time = "2025-11-27T22:07:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/39/22/33889cbe22a617c42df2199be54e9e1bf88393fd8643fe911eb9f982849c/pyppmd-1.3.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:486dde2294ff9b30465ab5bb0f213b20bd5ac0e4adf21be801a1ceb29aa75d9d", size = 141737, upload-time = "2025-11-27T22:07:41.641Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f7/940ab2fd78caaef3a9e9833adb36e17b9d03016d8b45ae110cbb4bfc83d1/pyppmd-1.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89730cf026416ae2546c92738966ecf117c8176d52c229ad621a61c34643818b", size = 143643, upload-time = "2025-11-27T22:07:42.892Z" }, + { url = "https://files.pythonhosted.org/packages/75/51/129ce02d2b28a4f6788bccfe6d0ae1defc45db10eb1c4e4389cde8994ec7/pyppmd-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e77f5a6770950d464b50da760d53e67bce308a3abc8e3bd51db620b3f8cf1fa8", size = 138625, upload-time = "2025-11-27T22:07:44.54Z" }, + { url = "https://files.pythonhosted.org/packages/3a/89/f8390d1a21951d3d4619c854a839f7b1431746997cd98b475f614a658305/pyppmd-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8e3bf8deef44f8e03612689a6067a4a3dd7e50d2ef00af4cf987c59b62ff3006", size = 141663, upload-time = "2025-11-27T22:07:45.814Z" }, + { url = "https://files.pythonhosted.org/packages/fa/3f/b58dd8875ebbb78436f87567547967bebdf3a5586f5f243c735fc4460843/pyppmd-1.3.1-cp311-cp311-win32.whl", hash = "sha256:a3509b3f881409ebc5522942438108c48a78f8df88bcf3f9d907b74131b9431c", size = 42014, upload-time = "2025-11-27T22:07:47.058Z" }, + { url = "https://files.pythonhosted.org/packages/b5/d3/5fe05bdccdd7af04461c25a3dc34799f48ad3e9a2bd591aaec9afbc1d10a/pyppmd-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:23b83799f33f9a24577f22e092b0feecda8cd1ea33871ad8610a58629874f7bc", size = 46862, upload-time = "2025-11-27T22:07:48.162Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ba/6414cbe8407c23bacce906dad0599f155b2baf6082da104e64d7f1573717/pyppmd-1.3.1-cp311-cp311-win_arm64.whl", hash = "sha256:234489036a1758670655d1ceafd4caeb93b858bd4c0ca39686837d38aef044c0", size = 45249, upload-time = "2025-11-27T22:07:49.261Z" }, + { url = "https://files.pythonhosted.org/packages/3e/89/696046e53c7aea98bb563aed3f15c3e2fa20c33e3d6c9de3c20992c586cc/pyppmd-1.3.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3faa58ab2ebe3b13ec23b1904639d687fb727270d2962fd2d239ca00fd6eb865", size = 77796, upload-time = "2025-11-27T22:07:50.362Z" }, + { url = "https://files.pythonhosted.org/packages/f1/c5/a708cdb58e76889bc65201eda12211486548ffe00ecddc5dfbdce6d4d252/pyppmd-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27703f041ee96912a5410fd3ce31c5cde32f9323bd67f72f100bd960ee67bf13", size = 48185, upload-time = "2025-11-27T22:07:51.736Z" }, + { url = "https://files.pythonhosted.org/packages/9e/5d/f299535c18009addb866d89a7044f1086e4eecf50542e57ff5bb15840195/pyppmd-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e773d8353b36f7e7973a43526993fb276b98a97839cb5dc8f4e6465ad873f41a", size = 48496, upload-time = "2025-11-27T22:07:52.866Z" }, + { url = "https://files.pythonhosted.org/packages/aa/9d/4a59b73ea8e305f9192ee26ceb7c3d57e17ccb9bcca0e99ef335db29fcf7/pyppmd-1.3.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:37b1883accf840cb0b711785d353f8548853a1401d381da007c0aec362f3ffac", size = 142620, upload-time = "2025-11-27T22:07:54.411Z" }, + { url = "https://files.pythonhosted.org/packages/88/d7/fe32c2a4f8539365e6292aed25545830a5e718a510cdb4caddd6fd8d8056/pyppmd-1.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1bd6d179ad39b6191ca0cbe62fb9592f33f49277b4384ad7bc5eb0e6ca27ebee", size = 144306, upload-time = "2025-11-27T22:07:55.727Z" }, + { url = "https://files.pythonhosted.org/packages/20/20/e3907cf263b58f4ed4c5315bc1ac91721c85332fd0d73a89e3e2752904ef/pyppmd-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:806cf8d33606e44bf5ff5786c57891f57993f1eef1c763da3c58ea97de3a13c8", size = 139522, upload-time = "2025-11-27T22:07:57.034Z" }, + { url = "https://files.pythonhosted.org/packages/0a/03/22d5f93251e481f23bf741dde7f59cfc3e315f60b32b63f215a2d7bb8944/pyppmd-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1826cbce9a2c944aa08df79310a7e6d4a61fd20636b6dff64a77ea4bc43da30f", size = 142340, upload-time = "2025-11-27T22:07:58.49Z" }, + { url = "https://files.pythonhosted.org/packages/34/88/38d36c1394d5e331db9708dae08863c87c059bd5b6e43b20234be02a0503/pyppmd-1.3.1-cp312-cp312-win32.whl", hash = "sha256:d3ff96671319318d941dd34300d641745048e8a3251b077bddf98652d6ddc513", size = 42102, upload-time = "2025-11-27T22:08:00.124Z" }, + { url = "https://files.pythonhosted.org/packages/ee/29/1398c6f67dfb66367babeed2980caee837d0a488705e3dff7ff159e017e7/pyppmd-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:c8c1ad39e7ebde71bf5a54cf61f489bf4790f1dd0beb70dc2e8f5ad3329d7ca7", size = 46957, upload-time = "2025-11-27T22:08:01.587Z" }, + { url = "https://files.pythonhosted.org/packages/d2/41/ee3193c16472a5a1c5f1965abb8fa87a7ad455c39688e9a0c2d87d6a7027/pyppmd-1.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:391b2bf76d7dc45b343781754d0b734dcbf539b92667986a343f5488c4bf9ca0", size = 45214, upload-time = "2025-11-27T22:08:02.721Z" }, + { url = "https://files.pythonhosted.org/packages/f0/01/7cc3854b0e1304b90d2435e946db5e1c42e103adf840a68400002fc838b4/pyppmd-1.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:4b4edb3e9619fd0bc39c1a07eb03e8731db833a93b23134f36c7ef581a94b37a", size = 77800, upload-time = "2025-11-27T22:08:03.856Z" }, + { url = "https://files.pythonhosted.org/packages/dd/02/caf6305224b9432ea7373670d101392f620c1ce741d6f95458b1fb9a16a4/pyppmd-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b8b5c813e462c91048b88e2adfbcc0c69f2c905f70097001d32066f86f675bd4", size = 48195, upload-time = "2025-11-27T22:08:05.323Z" }, + { url = "https://files.pythonhosted.org/packages/45/82/8c5d3f0f738a3cf5c209d1471efda105a16417c0aaa91a2ad39efb3d4efb/pyppmd-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e8d372d9fac382183e0371cf0c2d736b494b1857a1befe98d563342b1205265b", size = 48482, upload-time = "2025-11-27T22:08:06.441Z" }, + { url = "https://files.pythonhosted.org/packages/76/9c/09ab8b4f00473f210284dacf837cae8355ad900f3fd8fd98b2bba12de4fa/pyppmd-1.3.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3b765ae21f7ed2f4ea8f32bfd9e3a4a8d738e73fc8f8dcddec9cbe2c898d60be", size = 142828, upload-time = "2025-11-27T22:08:07.611Z" }, + { url = "https://files.pythonhosted.org/packages/64/fd/673d429df719affa1445611288aab6111c0bc87e51eb4677fe2421a1dd64/pyppmd-1.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd00522ddfcc292304577386b6c217758c0c10e1fb9ce7877ad7d3b7b821a808", size = 144502, upload-time = "2025-11-27T22:08:08.869Z" }, + { url = "https://files.pythonhosted.org/packages/cf/0f/64dad213f56eaf23210ac7d3a5dedb19ad8f186f8b8682f65e7d51d9fa4a/pyppmd-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3de62099ff2ca876c2d39bc547bcba6f7b878988663abd782a5bad4edac3bb44", size = 139718, upload-time = "2025-11-27T22:08:10.114Z" }, + { url = "https://files.pythonhosted.org/packages/74/61/bd5dbe8d7374748687d48f0bc44e6b930470e09552b1bbc65ef899ab673e/pyppmd-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:011f845de195d60fe973a635a1f4be981b7d80f357a8acb1b2d83bdf5087c808", size = 142578, upload-time = "2025-11-27T22:08:11.388Z" }, + { url = "https://files.pythonhosted.org/packages/42/ae/0af00a9b1cd59b6821eb182413033d5ddbe05dfcde7511e3a6b1a5b83f6d/pyppmd-1.3.1-cp313-cp313-win32.whl", hash = "sha256:7d61bd01f25289b6ae54832db4254602fb0c6d105f6e6bf0aee39b803b698b98", size = 42102, upload-time = "2025-11-27T22:08:13.297Z" }, + { url = "https://files.pythonhosted.org/packages/6c/6d/311d8faca142f39b4d158c94ed7eb237a197d41dd7eb67f53442a7904e04/pyppmd-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:df8d84ab72381058a964ba66e5e81ed52dbd0b5ad734a5ef8353452983506098", size = 46962, upload-time = "2025-11-27T22:08:14.759Z" }, + { url = "https://files.pythonhosted.org/packages/bb/42/24b59b6bb73a3fec96c7f81521d146c2ac89ffcb89cf9e848f62e0660381/pyppmd-1.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:124a04aab6936ba011f9ad57067798c7f052fdb1848b0cc4318606eea55475e6", size = 45209, upload-time = "2025-11-27T22:08:15.933Z" }, + { url = "https://files.pythonhosted.org/packages/65/10/ac2a011af1c7c40b6482e60d85d267ac5923fb8794b51bfddbb56b04d1ec/pyppmd-1.3.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:ea53f71ac16e113599b8441a9d8b6dcd71cfdf15cdb33ba5151810b8e656c5ec", size = 77897, upload-time = "2025-11-27T22:08:17.104Z" }, + { url = "https://files.pythonhosted.org/packages/20/13/737f4dac06685865d23f51b7061dbe9373c7bcc60b5b6456cd08301bc807/pyppmd-1.3.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:985c8703b53e5f68fe17f653e96748d60b1f855676c852a6e67cd472eb853671", size = 48268, upload-time = "2025-11-27T22:08:18.263Z" }, + { url = "https://files.pythonhosted.org/packages/c2/d3/c50ebaee8b8a064fe9a534e98df5051e309efb705728aadff4e6893cd87f/pyppmd-1.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:33daa996ad5203c665c0b55aff6329817b2cb7fa95f2c33a2e83ed0121b400cb", size = 48521, upload-time = "2025-11-27T22:08:19.742Z" }, + { url = "https://files.pythonhosted.org/packages/80/6c/4a97c0a0ab7640aeddde4843cb6381b80ecb71fe2c6c48b9032d60586b11/pyppmd-1.3.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b49870c6d7194f6eb80f30335ca03596d153e02fcde2c222e4f1202ac25f7fcf", size = 142892, upload-time = "2025-11-27T22:08:20.972Z" }, + { url = "https://files.pythonhosted.org/packages/8f/22/744c32c7da3de171d9e62a1b2cb4104544ac778358565a3dbc06a2253324/pyppmd-1.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:385e92c97c42e8a6f0bfc0e4acfc6c074cb1ba3a2f650f292696dd9f19e2e603", size = 144550, upload-time = "2025-11-27T22:08:22.594Z" }, + { url = "https://files.pythonhosted.org/packages/4a/18/84af6808e0754923062122d3ee9f0532050f1612069d558bb5d53978e67a/pyppmd-1.3.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:017a1e2903f1c3147a1046db486990d401e8a25eb52c320b1fc2fb3e7b83cbeb", size = 139850, upload-time = "2025-11-27T22:08:23.863Z" }, + { url = "https://files.pythonhosted.org/packages/20/5e/dc6166ea7929d442625301289d99313a5b358e3cb2e927a6bd913047e8ee/pyppmd-1.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f2770a4b777c0c5236b3d9294b7bf4bc15538c95d45b2079eb8ebc1298e62e37", size = 142589, upload-time = "2025-11-27T22:08:25.228Z" }, + { url = "https://files.pythonhosted.org/packages/77/92/adc6b12ddf11173a02fd631010f88ad4fe4c532363959638d5d53583a3d9/pyppmd-1.3.1-cp314-cp314-win32.whl", hash = "sha256:b9d54cd59ce97f2ba57be1da91b3d874d129faca21c9565d7afec111f942e6a1", size = 42761, upload-time = "2025-11-27T22:08:26.917Z" }, + { url = "https://files.pythonhosted.org/packages/12/4c/5003a413d9f2743298a070df6713a75dedccc470e7adeeced5b43cad7418/pyppmd-1.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:0e64247618cb150d2909beb0137da3084fef1d3479b4cc73b5b47fda7611abf9", size = 47806, upload-time = "2025-11-27T22:08:28.059Z" }, + { url = "https://files.pythonhosted.org/packages/07/b7/db927e1df7fc3132cb57960f4ea23bf174c7e86ccec22857e6a35cccdae7/pyppmd-1.3.1-cp314-cp314-win_arm64.whl", hash = "sha256:d354d6e551d2630b0ac98f27e3ad63e86cdcac9ce2115b5dfe46e2c9d3f4e82c", size = 46122, upload-time = "2025-11-27T22:08:29.191Z" }, + { url = "https://files.pythonhosted.org/packages/a7/5f/3150227624f374b06e331a7f67ae3383e796dd90973ee17ec3e35d30524c/pyppmd-1.3.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:2d77ed79662c32e2551748d59763cfe3dcd10855bf3495937e3d5e5917507818", size = 78876, upload-time = "2025-11-27T22:08:30.635Z" }, + { url = "https://files.pythonhosted.org/packages/2b/81/11a3bba62d1d92050f4dd86db810062b506ec76d20b6e00b4ab567ff15e4/pyppmd-1.3.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:6a1f92b94635c23d85270bb26db25cc0db544e436af86efc1cf58302d71d5af1", size = 48830, upload-time = "2025-11-27T22:08:32.087Z" }, + { url = "https://files.pythonhosted.org/packages/24/47/e8f50cf89c689543d5a16c7be3df3c4afd43cbeb1a019b84ff9e82f13415/pyppmd-1.3.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:610f214f2405e27eb5a3dad7fa15f385cfc42141a01cda71995d9c1e0b09fab9", size = 48956, upload-time = "2025-11-27T22:08:33.567Z" }, + { url = "https://files.pythonhosted.org/packages/0b/0f/944b30679a8dea3ea95a66531ee30cb6feb5d011ec7fd6832069d9130bf3/pyppmd-1.3.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae81a14895498d9a23429d92114c98da478b74b8e33251527d7cff3e01c09de0", size = 152872, upload-time = "2025-11-27T22:08:35.098Z" }, + { url = "https://files.pythonhosted.org/packages/ae/87/1e48ea92994f4c72dc9b5520a6a386b21c524d3d2969c2c2a5c325929ad7/pyppmd-1.3.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d1683e6d1ba09e377e0ae02de3a518191a3d63ccdb0b6037c74e6ddf577b5644", size = 154210, upload-time = "2025-11-27T22:08:36.368Z" }, + { url = "https://files.pythonhosted.org/packages/3f/21/650911f98c4cb360442724bbdade27cb3679b0587ea77e73512693d2918d/pyppmd-1.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e4d74fa0f3531e9dadc56e0ace41bce82d3c0babed47b3f224101dc0dbde7287", size = 147636, upload-time = "2025-11-27T22:08:37.657Z" }, + { url = "https://files.pythonhosted.org/packages/7c/29/4f8cfc1dd67b04ced8c10669fa14c4e35a42cf4a84e1101793735a82d5f0/pyppmd-1.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7f8d6375b18b9c79127fee0885cfd52e2e983edb67041464309426571d38dcd4", size = 150998, upload-time = "2025-11-27T22:08:38.951Z" }, + { url = "https://files.pythonhosted.org/packages/c4/da/dc9e5e10bc56056bd8c33e533517cb327752cbaf172688bba3c23f6b2318/pyppmd-1.3.1-cp314-cp314t-win32.whl", hash = "sha256:de87f7acd575fb07a4ff42d41bcc071570fe759a36f345f1f54f574ecfccfc5b", size = 43016, upload-time = "2025-11-27T22:08:40.234Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a0/46dc15549ad2c0427a9825730e6bdf342045ad410543368afd4389a16f36/pyppmd-1.3.1-cp314-cp314t-win_amd64.whl", hash = "sha256:76e4800aa67292b4cc80058fd29b39e02a5dded721af9fe5654f356ef24307f4", size = 48636, upload-time = "2025-11-27T22:08:41.45Z" }, + { url = "https://files.pythonhosted.org/packages/a1/7b/7e9a83848de928c26f0ab3ee105c0da63a932a0804a94807205e6313e73a/pyppmd-1.3.1-cp314-cp314t-win_arm64.whl", hash = "sha256:e066cbf1d335fe20480cd8ecc10848ba78d99fe6d1e44ea00def48feaf46afdf", size = 46402, upload-time = "2025-11-27T22:08:42.804Z" }, +] + +[[package]] +name = "pysocks" +version = "1.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/11/293dd436aea955d45fc4e8a35b6ae7270f5b8e00b53cf6c024c83b657a11/PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0", size = 284429, upload-time = "2019-09-20T02:07:35.714Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5", size = 16725, upload-time = "2019-09-20T02:06:22.938Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/53/ed9d74092561d4b01a2ef1349d52cdbc135e526c245f366b089cfca6de49/python_dotenv-1.2.3.tar.gz", hash = "sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35", size = 58945, upload-time = "2026-08-16T16:54:54.067Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/17/c5c6b53ddc18f297992099b3d9ec16c855c0ccc83263a21fe4d1c625ec6c/python_dotenv-1.2.3-py3-none-any.whl", hash = "sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9", size = 22780, upload-time = "2026-08-16T16:54:52.473Z" }, +] + +[[package]] +name = "python-utils" +version = "4.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5d/71/ec6665d4ce42ee5a59fffd31a4d5164f92da15ccb8c758dba13d2419ea53/python_utils-4.0.1.tar.gz", hash = "sha256:4e8e8ecaba3862f843a60c1982c99cda23b522f417006a807996a876c18beb8d", size = 43765, upload-time = "2026-08-30T19:26:04.591Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/4d/df2b7b53f759af128123afc73ce7094a29286ef4293dfeb2341f8469018e/python_utils-4.0.1-py3-none-any.whl", hash = "sha256:6017bb56498a58656ecf48e66fb1f1632c7b33f9f2968548a021563e85be1aed", size = 39920, upload-time = "2026-08-30T19:26:03.101Z" }, +] + +[[package]] +name = "pytz" +version = "2026.3.post1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/48/fb042503b6ca6cd271261dc559fd6432f7d8c713153e9ec5c591af4dfc1c/pytz-2026.3.post1.tar.gz", hash = "sha256:2211d3fcf9a797d3405cac96ac7f61d80e6a644f72a3309607282fe8a2010c5d", size = 319745, upload-time = "2026-07-25T15:12:07.385Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/7b/39c34ca613b0b198cb866466651b26b045e2009864c5183c979a3b83f383/pytz-2026.3.post1-py2.py3-none-any.whl", hash = "sha256:dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815", size = 508283, upload-time = "2026-07-25T15:12:05.782Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "rancoord" +version = "0.0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "folium" }, + { name = "geopy" }, + { name = "numpy" }, + { name = "requests" }, + { name = "shapely" }, + { name = "xlsxwriter" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c8/12/3d3be6ba247492215cd1fbf79dc84a5dfabbffacf2abdc8f88b365778658/rancoord-0.0.6.tar.gz", hash = "sha256:263a253ab396518eb3339a25ef9b30d7547eab7b16961e3965b72e1d343437a7", size = 11963, upload-time = "2022-04-11T13:20:59.792Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/a6/f5644aea89500645e9db37f0ca25c0a830308d7d0cced71b743c4f3f235a/rancoord-0.0.6-py3-none-any.whl", hash = "sha256:8a9e26bedf2164153f4a387e389ceca486fc0653a7efac55e37c1e7aa4a92ee4", size = 11627, upload-time = "2022-04-11T13:20:57.469Z" }, +] + +[[package]] +name = "ratelim" +version = "0.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "decorator" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/5a/e1440017bccb14523bb76356e6f3a5468386b8a9192bd901e98babd1a1ea/ratelim-0.1.6.tar.gz", hash = "sha256:826d32177e11f9a12831901c9fda6679fd5bbea3605910820167088f5acbb11d", size = 2793, upload-time = "2015-02-27T18:06:08.53Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/98/7e6d147fd16a10a5f821db6e25f192265d6ecca3d82957a4fdd592cad49c/ratelim-0.1.6-py2.py3-none-any.whl", hash = "sha256:e1a7dd39e6b552b7cc7f52169cd66cdb826a1a30198e355d7016012987c9ad08", size = 4017, upload-time = "2015-02-27T18:06:06.464Z" }, +] + +[[package]] +name = "regex" +version = "2026.9.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/c1/6b30b775c7bcc6cf6506a4d4741c2123e8d99cd50f3fe8cbd731f5fef526/regex-2026.9.3.tar.gz", hash = "sha256:aabd43208e335f4c3f0b56de3464b066dd425983a58f6eeb5738bcd7465403db", size = 416720, upload-time = "2026-09-01T00:53:43.821Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/fc/b4ff5d9550796f9f955b6c2470f37e2b582ec944638f3004499929a69c96/regex-2026.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6fe39780de6916ecb1c664eda81802e6310fd9d4a07dccb13a86b63918e00e65", size = 493967, upload-time = "2026-09-01T00:50:00.23Z" }, + { url = "https://files.pythonhosted.org/packages/49/6b/ab60a24883b810a4b29065540f56e6f72590bb97d704d7e0ee7bcd2ba98c/regex-2026.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d75065d9f6ed1afb2a41588def408cf442cee65b3651cbd7e86650146127bb4", size = 295227, upload-time = "2026-09-01T00:50:01.804Z" }, + { url = "https://files.pythonhosted.org/packages/6c/e6/e3bf61522cd82eda85a90dd8f69c839f0ce1da64dc6e87f803bb79267c59/regex-2026.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5dd356a646fe549d42b766cb9075b54eccd3f20604d87a3eff25f1430bba5b2e", size = 290639, upload-time = "2026-09-01T00:50:03.244Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b2/e8492b054c5c9fe09bc0aefdc308b8f845ec2094b1ae779accec8f14dedb/regex-2026.9.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90aa2a7f9cc1cd2e8082db61618a2ed0f4197eef52266a6420e88277f184e328", size = 791712, upload-time = "2026-09-01T00:50:05.539Z" }, + { url = "https://files.pythonhosted.org/packages/48/03/429ee3479bb438f7b2b41147fa68d63a7ef9c7486fcd3960e04e61133cf3/regex-2026.9.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1f975a75dae06e88665e4a709873d936a7e8f9445e3d354b75de0e735d28cf71", size = 861711, upload-time = "2026-09-01T00:50:06.988Z" }, + { url = "https://files.pythonhosted.org/packages/cb/9e/6ebf3cec538ed49d0a4cf5729129fe39580ddfa80c1c59c4274651762202/regex-2026.9.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1d52739de118acf82bfbaf7046955ead4fb613d24ba4187be565cd91ff9a64e", size = 905894, upload-time = "2026-09-01T00:50:08.437Z" }, + { url = "https://files.pythonhosted.org/packages/19/e4/a7bb1e4038a170714c824dc7c739f8b911cb1172f87ab950be39e0691f95/regex-2026.9.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99034ec353c973e2c89555866083491b9a2dbe81f2fbe15fb0f2b68506232f01", size = 801135, upload-time = "2026-09-01T00:50:10.308Z" }, + { url = "https://files.pythonhosted.org/packages/bd/47/1b318fb249d5fa3dcb0375ad284d34155f0da4a2fe92c8f01edef0cb0258/regex-2026.9.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3cc1a82779315f7b2a4642d5028b39057838cd4c0415744d4e53c8b512352141", size = 773578, upload-time = "2026-09-01T00:50:12.125Z" }, + { url = "https://files.pythonhosted.org/packages/a6/16/63f2644a0a3e92623f83ccadd04873916f5b650e2028bc44ee9df104a839/regex-2026.9.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c0ea77435b1d5a27cccf27f8762f50e73fd2d94e8e412a8e5cdedb650b36d5fc", size = 783915, upload-time = "2026-09-01T00:50:14.081Z" }, + { url = "https://files.pythonhosted.org/packages/ca/f2/f078963d1dbd3632f6e25f7d972cc9a9332649ed239995bfeb403cf88a3b/regex-2026.9.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6c997a1703401089bc02d731e360127428fb4ecdf6524268e8975882ff02528b", size = 854924, upload-time = "2026-09-01T00:50:15.826Z" }, + { url = "https://files.pythonhosted.org/packages/53/46/457ac94a2a2aaa2ab5c076324dfd7e38e76f36d4d78923c4ddb8c3d93d75/regex-2026.9.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:70082b2a8f099b8bf660b553b22a4b8ffd34fcc09ef154fc6b9c7108518fc124", size = 763172, upload-time = "2026-09-01T00:50:17.682Z" }, + { url = "https://files.pythonhosted.org/packages/66/1c/db145a6ad935cdc6c694381543d53e6e7d7212287d4f8885f965e91ea4a4/regex-2026.9.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f5e8a0ce681ddabf6a35d7b817d74a94ab237ae7233a5b97118db0b4e524473f", size = 844983, upload-time = "2026-09-01T00:50:19.572Z" }, + { url = "https://files.pythonhosted.org/packages/76/00/100346c5cc2384a7ce0adfb7dbb11f4a865c76e3a920fe68542042da66ea/regex-2026.9.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3367d5eefae493ac2a1586ec11cc8213c3305528ed3f8e19d5c3871cc01da6ce", size = 789532, upload-time = "2026-09-01T00:50:21.142Z" }, + { url = "https://files.pythonhosted.org/packages/39/62/d878c1d3eed2768f19e8b6fa4aa81b0a0e6bc23fa34e64173ef48816844a/regex-2026.9.3-cp311-cp311-win32.whl", hash = "sha256:33d3a772ff62c882a5d1402045e17c0199f33b9b173139071c4203e7e0292420", size = 266766, upload-time = "2026-09-01T00:50:22.863Z" }, + { url = "https://files.pythonhosted.org/packages/e5/da/6a0ac27bacb39aca3452cdd7d1bfc361608ad000cea3e1b0d7dbaa1e2b15/regex-2026.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:8c8a63d55cdf3c716225a2f8741a1df7a52b5fa98ac7530165c9cc9b32feabcc", size = 278007, upload-time = "2026-09-01T00:50:24.597Z" }, + { url = "https://files.pythonhosted.org/packages/d8/a2/b23997814f48f823bcda615764b4fb00d72a5a06bdbb41cafa895ec62428/regex-2026.9.3-cp311-cp311-win_arm64.whl", hash = "sha256:cb6374a84f11a6b25e63aa69ee2d015286048c1efee93c4a3b5b8df62da79ff8", size = 276960, upload-time = "2026-09-01T00:50:26.101Z" }, + { url = "https://files.pythonhosted.org/packages/da/cb/cba530bc3b068fc337f8f455c63ef5ee91a4eb4c76ecf5998e5cef5aaa6b/regex-2026.9.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5db80d0b1c8238940b5957dd66b5c818ea40a221f6652fb717c027a562d09c77", size = 496699, upload-time = "2026-09-01T00:50:27.98Z" }, + { url = "https://files.pythonhosted.org/packages/81/39/f2e9fb6bbbc80f8bf67ad79d7e2e8866f7837d7c24c692f7faf8f1272e7e/regex-2026.9.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:35d48ce3dee087b63b15cd0a7a3110d0a76c29edbe1f2ad0520b8c4adb7cb596", size = 297018, upload-time = "2026-09-01T00:50:29.487Z" }, + { url = "https://files.pythonhosted.org/packages/a1/b6/c16ee58840baf7659def27ef6f62f3d9a9909670d3c1b4b98bb8b8ee47e2/regex-2026.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1f22e0d21ae7016c77175c139a7fca465b988efc1280df4816c79752068d9e2e", size = 292008, upload-time = "2026-09-01T00:50:30.929Z" }, + { url = "https://files.pythonhosted.org/packages/cb/b4/4987bf0f17604669b4ea5aef219886d0a73188c4716ff3a7d275d4d15c15/regex-2026.9.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:233662cf8cfdfe3c0e58aa8f7bbefc579b5be0ac34546f123c159804179e8687", size = 796101, upload-time = "2026-09-01T00:50:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/0b/95/2a9ab02a68c8a61dc0b4882ed643b1a95740d9dc291dc26c77d19af79691/regex-2026.9.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7d2eed2e4d231278a2ccab3f4bfa2c1e39855f336475f7756a281d767d2b1753", size = 865435, upload-time = "2026-09-01T00:50:34.171Z" }, + { url = "https://files.pythonhosted.org/packages/04/92/0570d41559b446c97c1148cb9ebc1df09f2949b03c7c9bfee09976b3465f/regex-2026.9.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5e674cecb61cb160be392da07fd8a71509ef927f437fbf3215432692ed385151", size = 911828, upload-time = "2026-09-01T00:50:35.72Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8b/9cc6d4123033f7cb82df6cd8ce19eb0fc18a964afe060a03c9b26757c9f3/regex-2026.9.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:665207e41bacd435db001099eeab44103197c2c1a729d73ade74688a905ed4ce", size = 801965, upload-time = "2026-09-01T00:50:37.701Z" }, + { url = "https://files.pythonhosted.org/packages/c9/98/39262e91aa87a67c82cbe90a0df4c3d382c7a44811fe80067904085211b4/regex-2026.9.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7a7ddc9a8ca1795166a1ca80364b8ce74187fc210e112d3fb048b711b934f36c", size = 776192, upload-time = "2026-09-01T00:50:39.57Z" }, + { url = "https://files.pythonhosted.org/packages/24/e9/3bb93fe4ee4b6f8ce7ba69b527c4a63cfa3393fc425ab26486041fe441c8/regex-2026.9.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e3037d02425863ce9501afbaa04ba967162810004bacde39a53ea9a5b740eb32", size = 785053, upload-time = "2026-09-01T00:50:41.156Z" }, + { url = "https://files.pythonhosted.org/packages/f9/05/31d5bc2553a700c0dfc6b5b6a13c61cdcd1210fde1e304cfa18a33f138b2/regex-2026.9.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3de4eab8c763393b75bbb26f81934ab2cc8794f48f79e90622e3ab7ea57f3d14", size = 860546, upload-time = "2026-09-01T00:50:42.746Z" }, + { url = "https://files.pythonhosted.org/packages/65/a3/2e1e854d80becda0f061093805bbfc037a5849448f46d0a2b71a070d45e2/regex-2026.9.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:98620c9c4c22568ad70f57b80527c780b6f8fd26e36507bf8e2273262a228275", size = 765841, upload-time = "2026-09-01T00:50:44.5Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d6/43d02948cedde2e8476ac893ea02755ee5ee1b21c531fda92d80e114f0bc/regex-2026.9.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0b1ba3aaaf5776de473ee16625ac60ac195abb0343afb273575a8201d99be089", size = 852147, upload-time = "2026-09-01T00:50:46.474Z" }, + { url = "https://files.pythonhosted.org/packages/21/ff/adb4e2d08afe8f4c6df004d94604257e1f72af7ba328af7715601585aba4/regex-2026.9.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:56d8659c65166641d8f1b5efccc391c62c8a899eff4d528b981cc62b7b402a4b", size = 789761, upload-time = "2026-09-01T00:50:48.749Z" }, + { url = "https://files.pythonhosted.org/packages/c3/e1/1490d1351758e87f6e702cf2025036bdc7bc59182e2ff5c7bec004b19aed/regex-2026.9.3-cp312-cp312-win32.whl", hash = "sha256:837c1859913798d8bebcd98d4a037e113f8d79e81733009bf590e449769eecb3", size = 267150, upload-time = "2026-09-01T00:50:50.414Z" }, + { url = "https://files.pythonhosted.org/packages/d5/49/4c40cf722d84d60e807a08ef4c3f579216bf97df60c4a1b10be49655d302/regex-2026.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:1ba1dbbb93c5c5629c1861763aec5bfa9f05ad24ef450694130e25029ce7bc36", size = 277773, upload-time = "2026-09-01T00:50:51.963Z" }, + { url = "https://files.pythonhosted.org/packages/aa/af/c48b3b2b4244b4b090554c78d3387e9ae7b859f3dbf7148a27d427e9e5b8/regex-2026.9.3-cp312-cp312-win_arm64.whl", hash = "sha256:d7b3a8a4bbd83ad8b29758f5d24bab10a3f2de87970db36f1e3651c733353136", size = 277122, upload-time = "2026-09-01T00:50:53.778Z" }, + { url = "https://files.pythonhosted.org/packages/9b/d8/1fb6053247efc5b5a1d7b3b7881dcf42861f8ba46bd72a2ff126469d4053/regex-2026.9.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1d9148e47cfa1a067138867996b1d5d825de0132fed8dac3c92eebaaf312d280", size = 496442, upload-time = "2026-09-01T00:50:55.351Z" }, + { url = "https://files.pythonhosted.org/packages/5b/b7/0b9c1c0385365ad12deba0bdf93a70ad9f97d1a919cc5699c33b449ad662/regex-2026.9.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:33c2860b73ea342c0a42bee9ebe3b3a0de3d68c580c4dcb52241cf4b6663731b", size = 296913, upload-time = "2026-09-01T00:50:57.251Z" }, + { url = "https://files.pythonhosted.org/packages/e6/eb/5750ebabdb010ffb0d31fceae68c7a8f3876c06140c3bd6a7feff6240d6d/regex-2026.9.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e33dfc13c02d9c4e55bcf3f3b2eb448537823a6f6f30bf737b2974b63a530bc9", size = 291783, upload-time = "2026-09-01T00:50:58.892Z" }, + { url = "https://files.pythonhosted.org/packages/96/12/3ee1542b6428a0955ac5a31562d87966a417c0e0a4c1e5c62ec822fe78de/regex-2026.9.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e84252a16234ee860206a738f9a5084f830a5d0a1370a418d3af4e917f5e08", size = 796114, upload-time = "2026-09-01T00:51:00.5Z" }, + { url = "https://files.pythonhosted.org/packages/0a/24/5ad415b80958d79f2da66a1997743ea8c38a1e9e2f63660f7cbf9303eda4/regex-2026.9.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3077ace9bf59f8513c8471a817a5af63699987dc024f535c1eac3447a4d70211", size = 865524, upload-time = "2026-09-01T00:51:02.25Z" }, + { url = "https://files.pythonhosted.org/packages/2b/8a/c298d469f5dd12b11d4e7b8c7714c808b9edace73118eaf753fc327c9429/regex-2026.9.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:635482cd183a1856da75a39c473a2e222697b7927f1955f586db83fc8a5da17c", size = 911948, upload-time = "2026-09-01T00:51:04.099Z" }, + { url = "https://files.pythonhosted.org/packages/3f/a6/e9a59b507cdf7a9735df4bab92b4ea9d2ca2e665c6de14c112db7e3c0926/regex-2026.9.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27f0809798071f56fb1bc536bb93714a95e8ed2ec0dfd869f095deebb30fd11a", size = 801945, upload-time = "2026-09-01T00:51:05.878Z" }, + { url = "https://files.pythonhosted.org/packages/56/1d/443e5541fd23d97c841ccddf90dbc9a964bd00e0ec9219b45a3eb0cde552/regex-2026.9.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d514026ca1c473cc14440e4d7bdf6721c642455b647a74c8143c0f22da358c28", size = 776223, upload-time = "2026-09-01T00:51:07.58Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ae/78d48b14582f5733facaa2e001499b98707d8b8b1b31ab7559053c18f168/regex-2026.9.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b9190d4901d7786af9ab0ec46172e27cf7d72cdba2b82ee38eb40aadd3239a6e", size = 785072, upload-time = "2026-09-01T00:51:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/55/42/2f4ac830de12d264c1486f749988003a7f5a0366d7557a75de2418461466/regex-2026.9.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:6c0f60b05cc708e6cdf68dbca86b7a36d99695962db0189bb1b3884ca3b28e90", size = 860644, upload-time = "2026-09-01T00:51:11.558Z" }, + { url = "https://files.pythonhosted.org/packages/47/50/6b44c6cf56f353744e6066a1310177b7b195afb11d33dff4d6cf3ec52720/regex-2026.9.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b7b7e6be82fd6d5256adabb82253c5c307de981cc20c0ce4cff0cbe6de88529b", size = 765862, upload-time = "2026-09-01T00:51:13.371Z" }, + { url = "https://files.pythonhosted.org/packages/64/0f/c5a8023dfc988cddd2c614b1afbe547aedab1ffebd5b5d9cd58f6ab28908/regex-2026.9.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b5f85bffdfe17da7dfff78eb32b261c27f3cd64c060033645079493f4cebc8e9", size = 852081, upload-time = "2026-09-01T00:51:15.324Z" }, + { url = "https://files.pythonhosted.org/packages/8f/f4/ab0ba467ebcaecfddf72ea7b3527a6088863094377c1303a3379284ef621/regex-2026.9.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d10a442c6450ebd35aa89392b8e4b0459ba474df63fc5e6828573d0a31a627ec", size = 789774, upload-time = "2026-09-01T00:51:17.057Z" }, + { url = "https://files.pythonhosted.org/packages/4e/fa/8e2f3021ff5ee3aafc80eed8f16663be5e16c7b663d72e4bd2c9e71e1433/regex-2026.9.3-cp313-cp313-win32.whl", hash = "sha256:63fa79eab192623acb169de1dfe8e733598c4047d06f7712347d1bb810a5ad20", size = 267125, upload-time = "2026-09-01T00:51:18.837Z" }, + { url = "https://files.pythonhosted.org/packages/6d/25/6d20a309c2e4b554cc33579dd55b0bb50d0c2ace7ce6f084be2327c330fc/regex-2026.9.3-cp313-cp313-win_amd64.whl", hash = "sha256:185c1ae881856208dda05708b6c908aff76878e59c998c8548d365c1bbcaf1bd", size = 277741, upload-time = "2026-09-01T00:51:20.583Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b3/0282ae58fc167953809a968850622f89955e0fd70a65df882e5d488138b0/regex-2026.9.3-cp313-cp313-win_arm64.whl", hash = "sha256:db6538d733047f9ce4b74ee29c77643a1f99e4ca36e273495da93fbeedd2f03f", size = 277123, upload-time = "2026-09-01T00:51:22.332Z" }, + { url = "https://files.pythonhosted.org/packages/c6/a0/322f050f77289a1acf99b5c400fe201780bdcfa8f8876fbe250ae3de37af/regex-2026.9.3-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:99896cc18fb421be93e337d6bf2c1686ba330bc2d5c0ef581c842f0639a5e886", size = 496701, upload-time = "2026-09-01T00:51:24.146Z" }, + { url = "https://files.pythonhosted.org/packages/91/30/85df182aec58aaa34b02a3f0a99068bf34a7c9b3f9bd7ff06d58aa866e1d/regex-2026.9.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:0540de6e7917f89acaf9771bdcd6fa7e505c67416d3b283e52ad4ab25399c6d6", size = 297055, upload-time = "2026-09-01T00:51:25.812Z" }, + { url = "https://files.pythonhosted.org/packages/27/8f/64b8bbd0316baaede047dbdbf2bcc96f10a4eeddec2e9cbf289e855e636f/regex-2026.9.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:647983d2609be6155c748249e770ab7e75e15e386cbf15469569f3eaf165bbb7", size = 292008, upload-time = "2026-09-01T00:51:27.415Z" }, + { url = "https://files.pythonhosted.org/packages/b8/87/224614ef16bc8336269a84b578fb0dbab1433b584aaefc5f0680cacf9227/regex-2026.9.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7bb75921a4885d30d9e881d7a595ce50407a8a82933e15451ad7e0d89d1a5944", size = 796341, upload-time = "2026-09-01T00:51:29.344Z" }, + { url = "https://files.pythonhosted.org/packages/4a/e1/10ad988d3b673db86353666c56cb32e1b6246ca1ab0c81018a58ebec889c/regex-2026.9.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f93c60d8c522b4ecea35dd6c58cc42f251ecb12882a5d67d4bd8d12137fbd05b", size = 866311, upload-time = "2026-09-01T00:51:31.592Z" }, + { url = "https://files.pythonhosted.org/packages/08/16/8d597f97bb6215876512cd7b3c47179c0eb79d1820ab2ed8412d3ba5599a/regex-2026.9.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9e61478a8a06e6456ff2e66b9ac18f7f28d76a75fa5fda0c5198a4de07b8dcb8", size = 911869, upload-time = "2026-09-01T00:51:33.926Z" }, + { url = "https://files.pythonhosted.org/packages/89/e3/f6bcb26472873b9308df329f507d9c6cb526e3f9aed847498f153f2b7539/regex-2026.9.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f64c66b3b13758b4f8f56f17972cd0ce5d0033d19d7332ed32e2dbdbce94dec", size = 801375, upload-time = "2026-09-01T00:51:35.779Z" }, + { url = "https://files.pythonhosted.org/packages/bc/a5/38c7cd736bfd58b190412dbf5a81aae1c38456c538d5c4987f5980cbfa3d/regex-2026.9.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b5dc780377e35be6b0cf6fec7fb4a45cadb1e834bc0ef2ce596cc015290ef69", size = 776522, upload-time = "2026-09-01T00:51:37.81Z" }, + { url = "https://files.pythonhosted.org/packages/a9/ac/8ecefa1c9b57b29fcbe963797435e69a3ba6a9773d802b3d4fca4c75ecf6/regex-2026.9.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f02091b425bbcc2d8481913855c744baa4dd73e334814337b201d837e9040ef7", size = 785727, upload-time = "2026-09-01T00:51:39.995Z" }, + { url = "https://files.pythonhosted.org/packages/5a/4c/af402c5aa95615ab66620d775de07ea09b0fea206cd79e3c8a5716d5fc96/regex-2026.9.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ad2027883344e70ddddff02259411f80faf47d5e779eb0e39cb95ee546fa628c", size = 861375, upload-time = "2026-09-01T00:51:41.829Z" }, + { url = "https://files.pythonhosted.org/packages/dd/7b/b83dd26470fa4cc6d7beee9b3c52ff0e988ba636c1367a04d4b2829d8d95/regex-2026.9.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0edd12c8201222f58817689dc61fe44893f3f2f2aee530b211dfa92af84df9cc", size = 766221, upload-time = "2026-09-01T00:51:44.7Z" }, + { url = "https://files.pythonhosted.org/packages/94/5b/3b91b19d8fb11a353738cec56b19440bf181f3f9a0298d91140fb4061778/regex-2026.9.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4a9cd8485a6729387c889c88c24d5eace39dc0c0c9ddb9003f9c81751f654b69", size = 851737, upload-time = "2026-09-01T00:51:46.708Z" }, + { url = "https://files.pythonhosted.org/packages/2e/be/ea0762fd8a12fa711f1a626283f6d79a3d8a81df4eaada4fbe82009e46f6/regex-2026.9.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:994fa00a9b0d14c6e6926ff5ade98d4d83676a5eeab6f87718170e481396d380", size = 789455, upload-time = "2026-09-01T00:51:49.2Z" }, + { url = "https://files.pythonhosted.org/packages/d1/dd/b9af9d65de78831fb76cb8ef420db4094295b09f93f8abd17c867261c4fb/regex-2026.9.3-cp314-cp314-win32.whl", hash = "sha256:4f39485bb02dae23e14cdbad086ab0e468756775bc5c64bb69e7cb756ebc1dcd", size = 272528, upload-time = "2026-09-01T00:51:51.416Z" }, + { url = "https://files.pythonhosted.org/packages/d0/fe/ecb15616ae7aa4892299b9ca7c20ef0dd6e5c833643b7ed46e27ff5fcccd/regex-2026.9.3-cp314-cp314-win_amd64.whl", hash = "sha256:445623b1337e971ccc571d3642aeb3f2fec77e60b6ee193dd7688168471d1846", size = 280812, upload-time = "2026-09-01T00:51:53.211Z" }, + { url = "https://files.pythonhosted.org/packages/18/4f/60efc748152c82b967bd186c356dd1fc21c4f6c225b8026b52547ae60c9f/regex-2026.9.3-cp314-cp314-win_arm64.whl", hash = "sha256:9887e9455398a1517294dec14e23ed9a178c8dd909f2788e971b66623d3f7c16", size = 281095, upload-time = "2026-09-01T00:51:55.052Z" }, + { url = "https://files.pythonhosted.org/packages/d2/cc/aa269583e8986be9604ef5fb9e2164f33108f6220c896efff2dfb0d4e4c4/regex-2026.9.3-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:c1fa3f84cee5211a3e574ba76ac9596df8c8d16a855f31a25681d23eadcc6c16", size = 501014, upload-time = "2026-09-01T00:51:56.902Z" }, + { url = "https://files.pythonhosted.org/packages/22/51/bb8a3f3a47beccbf92c3bcda67c2c0336c13c2e10f9744306275f428ebc9/regex-2026.9.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d539a51be176e874ed66029b2df8cb8e1123a3e6420d52a690de6effded4f20d", size = 299376, upload-time = "2026-09-01T00:51:59.121Z" }, + { url = "https://files.pythonhosted.org/packages/48/ec/c646df2b62c1b1334e28581715ed776814c8ac80c0c9106175f0c61ce12a/regex-2026.9.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5133884ec10c9d6bcf7fed4ceb98fb3a6acbb6c2ba1bab6c4b6700d6c39c7595", size = 294424, upload-time = "2026-09-01T00:52:01.113Z" }, + { url = "https://files.pythonhosted.org/packages/d2/18/3dd8c49cc4af440a9a1a0ebb2b4a939398398c81fb7fecbc3c7d534924a1/regex-2026.9.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5fecba510f6b8f9cf1dfd103d785a61da47221cf09d4cec10946d1950daf1a17", size = 811421, upload-time = "2026-09-01T00:52:03.289Z" }, + { url = "https://files.pythonhosted.org/packages/71/32/c35f031aec040b9136189e3f403681e3168f1f9862e31d9df92ea599f2c1/regex-2026.9.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:72df83ee0eb89b070e28d1260786d13485b98a8b80228c7439d303dd9aac9970", size = 870110, upload-time = "2026-09-01T00:52:05.746Z" }, + { url = "https://files.pythonhosted.org/packages/a7/7b/931d962f9fbca3326f282a01fa5bed4d6734dab5215d1c20bac0ab85df58/regex-2026.9.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:610371fe95c7e8e824ad8762248836cabbb5a4ab8befb982cb7dc8df773075d3", size = 917489, upload-time = "2026-09-01T00:52:07.703Z" }, + { url = "https://files.pythonhosted.org/packages/46/1a/da0c28f2b1e65d46a24abc1dd33e0dc9ddbcfeeee7c5625103b3e09e548c/regex-2026.9.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:af06c9099df15ee44fda3fdfa002bfe37de02901c2b3a5ef350853861ef3b4b5", size = 817470, upload-time = "2026-09-01T00:52:09.686Z" }, + { url = "https://files.pythonhosted.org/packages/d4/a1/6a540ec40c3b8eeefec445362cf08bbb686b22d4088f97d3c1ea38323434/regex-2026.9.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e27003c0a93a5aa541c260bd8ba8b917a2af4c378eb684daa9f1565f5e363181", size = 784742, upload-time = "2026-09-01T00:52:11.778Z" }, + { url = "https://files.pythonhosted.org/packages/fc/88/75500ca27ba85256eb46119ebd99ec10ead4c3ffacd47fe7dfe034662960/regex-2026.9.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9ce34fc5a6f6c9b2ba4a8060009d989e4f55630e3f9c3bf5962f42dcc31355ef", size = 800609, upload-time = "2026-09-01T00:52:13.817Z" }, + { url = "https://files.pythonhosted.org/packages/67/33/18541aaad8b88977e2c3fbbb53c1a75f6f6c999800a82d2f7306581cb6b6/regex-2026.9.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2cbc83154c8b0201ada07bc5d6e37106df6325f2fda60d73228e2e8da7433cae", size = 864798, upload-time = "2026-09-01T00:52:16.137Z" }, + { url = "https://files.pythonhosted.org/packages/16/62/ffbfbeb5a3f2cca701afb9f8aebbfcbf37a4aae2f1584c96680142aab445/regex-2026.9.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f568bdc17b7ebb3a323ee8920468d2ed74af84da911a00d9585ac887bac73b88", size = 772892, upload-time = "2026-09-01T00:52:18.567Z" }, + { url = "https://files.pythonhosted.org/packages/23/14/04e2db28f490b1fcc684428bd2de21e1ec46f7d8d421b7f2cc74d120affd/regex-2026.9.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ae9f7055e7357b2873866a3d77d0136a251ca2ae2dde3d8cdb819425d717c177", size = 858065, upload-time = "2026-09-01T00:52:20.674Z" }, + { url = "https://files.pythonhosted.org/packages/ac/14/c0cac930d1dc0b86c5d8ff10602f15df4fb15fa3f33e04a98be197f33618/regex-2026.9.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d963442186918577ad83e3a8c5564eeeba90e2da233ce59f6eeccbb7b5cf771e", size = 804739, upload-time = "2026-09-01T00:52:22.866Z" }, + { url = "https://files.pythonhosted.org/packages/01/12/69e6f4d02e11a5cb45033abede6e04b0da3716b1b6c311d4609be14a01a7/regex-2026.9.3-cp314-cp314t-win32.whl", hash = "sha256:bda6af6fb4d5fe9532620e4f72d3c7efcdf7472ead9037b184c0a060f0e7c71f", size = 274514, upload-time = "2026-09-01T00:52:25.224Z" }, + { url = "https://files.pythonhosted.org/packages/28/64/064b78028b52c0c21b9c0b362b1bdcee7179f009891ddf959d9b6390b30c/regex-2026.9.3-cp314-cp314t-win_amd64.whl", hash = "sha256:2d25e41851e41539898116ac760fcc856e2c1047a843a336b19e2c8e4a43ad16", size = 283797, upload-time = "2026-09-01T00:52:27.358Z" }, + { url = "https://files.pythonhosted.org/packages/f2/46/fbb41eb6cc92403ba9f896dfd56a1d5d31549c4033dfb7418da7ecd5802a/regex-2026.9.3-cp314-cp314t-win_arm64.whl", hash = "sha256:356fc21b4c313decb3214a4306bb5bd0623dce4a8d03d0d5ada6fb0b6a5b93b5", size = 283444, upload-time = "2026-09-01T00:52:29.632Z" }, + { url = "https://files.pythonhosted.org/packages/1b/1a/825beb1c803d579d1119723235ede2211949a8d320bcc79e3f6e5dd6090f/regex-2026.9.3-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:e337dceb936f333775cf51d49f6badb8cd3d2a6b27e8cb443a6c5861fbf3c1f9", size = 496929, upload-time = "2026-09-01T00:52:31.593Z" }, + { url = "https://files.pythonhosted.org/packages/ff/54/9b8255521680d54e1d157ed6532e3082998f47925d2ab3861550e0e89455/regex-2026.9.3-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:bb2d4ad7f9bac398a7a19f07bd09fd5b2c1e4eeab316065aa84a305f62fc5361", size = 297050, upload-time = "2026-09-01T00:52:33.459Z" }, + { url = "https://files.pythonhosted.org/packages/5c/8b/0e4df28fd94304050efc2373dff1803e5d62056cf744a694eaa376df2fe8/regex-2026.9.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:01bdce6a372efd5ae3d8560cedbc691be259a50206564bbaf04008b2937721ab", size = 292296, upload-time = "2026-09-01T00:52:35.309Z" }, + { url = "https://files.pythonhosted.org/packages/97/a0/689a8403f309a7a3f3f3e74b3e81b144602481d122c9e4070a601367f8e0/regex-2026.9.3-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55493b5b6cb6c4ec9a3c310d4ef947dbd34326ee4eecd4249e18e00d84f14be5", size = 798376, upload-time = "2026-09-01T00:52:37.235Z" }, + { url = "https://files.pythonhosted.org/packages/ad/a9/3d22278a38bb8adb254d345e60935316222091caf00a4233aaef388d636e/regex-2026.9.3-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:690ab9d06cd689b79aab84afa0984a1bc85ea4b93b0a42b015f3ff5e2f5b08be", size = 866607, upload-time = "2026-09-01T00:52:39.461Z" }, + { url = "https://files.pythonhosted.org/packages/69/ef/ecf8c5fdcec73ac0526fbd074be3bd1059b11cbda739ac0ab9001f311aed/regex-2026.9.3-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:24b4bbb65ff2c4e8c552c93c342bf5ffa0ad162d963d96bac7c1883c20e1b34e", size = 912160, upload-time = "2026-09-01T00:52:41.603Z" }, + { url = "https://files.pythonhosted.org/packages/68/e8/c07c3d2b44c9154672a33911cfcfba626c78d939d7e31103864d81ad319a/regex-2026.9.3-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fbaf76379bf2a72e534bbb1276d45e63a80d8cade17953ed79a350d6426262fb", size = 804589, upload-time = "2026-09-01T00:52:43.658Z" }, + { url = "https://files.pythonhosted.org/packages/91/16/d42957c78b5934efd03ca5713d99952cbe71e2d0b3b24d9e78256f208587/regex-2026.9.3-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:57f405fcb82e2b78df88f04f8aa49ce513ce23bfea073b581597bd52545e9b3f", size = 784446, upload-time = "2026-09-01T00:52:45.866Z" }, + { url = "https://files.pythonhosted.org/packages/00/1e/4252dff33a1a5afb3271fb3859e992d34c47c040ecfc27bbfe6a7eaf99a8/regex-2026.9.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:a87ab35e92d40b53c5373af36625794e422f83ec56122f0a63871892856d721c", size = 787996, upload-time = "2026-09-01T00:52:48.345Z" }, + { url = "https://files.pythonhosted.org/packages/ee/19/90d31048bb402fd746a95922d7dfdb9de9f902c39c8d838f2fef05c9c92c/regex-2026.9.3-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:14bf4a88833c12a990dbf5cca77eb293401d60878be7d566a2d5096fb0216c27", size = 861752, upload-time = "2026-09-01T00:52:50.597Z" }, + { url = "https://files.pythonhosted.org/packages/88/77/42ad133550cbd64d8fb33ec5ff55e1f524b06c6328e9f3bf9c3e8652b525/regex-2026.9.3-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:862c29f7e7927e71391df6700079b1dd7c2aeb75115dc46e37004a092f8f16b7", size = 773488, upload-time = "2026-09-01T00:52:53.142Z" }, + { url = "https://files.pythonhosted.org/packages/78/8f/0c90e8fa607c36a65c360f6b02980aa7aa5885afa3d737daba4229bef086/regex-2026.9.3-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:61a9da95a836e7d300945891265bbeb6510a860863f6b01ed6397e6239a31253", size = 852603, upload-time = "2026-09-01T00:52:55.471Z" }, + { url = "https://files.pythonhosted.org/packages/4e/bc/e1be309afb6be94916d8f4f000dbc66040fc0da2008b3f714dc4893259fd/regex-2026.9.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e7663a6803a47255c32cc7e17ae3ccfe02dba5b0849f87729651c0263a129d20", size = 794635, upload-time = "2026-09-01T00:52:57.611Z" }, + { url = "https://files.pythonhosted.org/packages/0e/f7/15f6d0ea137316531c992e7468a4c6f6e39159a6780c2c16ec3ab56f2149/regex-2026.9.3-cp315-cp315-win32.whl", hash = "sha256:0ee4721472e00e96b3cceec545c9867f91815f628f6ea304ae6cea93a7e4e7ae", size = 272530, upload-time = "2026-09-01T00:52:59.644Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8e/739168818790278dd4f1ba60c582fed41323508d7a8e850323851de1aa1f/regex-2026.9.3-cp315-cp315-win_amd64.whl", hash = "sha256:cc5d0f82cf05beb6c0d463398173a09357ed4f4a631f7641cef6f6480a05bc57", size = 280822, upload-time = "2026-09-01T00:53:02.57Z" }, + { url = "https://files.pythonhosted.org/packages/12/6a/55f5f6e92a8c7d6511e069d3e8a4b45e3506941c1a97dddf5a329b132be4/regex-2026.9.3-cp315-cp315-win_arm64.whl", hash = "sha256:6f198b622a3ccf02eeab00de71f6b2f45b1b50b1979aa56b25178c963e475950", size = 281102, upload-time = "2026-09-01T00:53:04.62Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6a/adaf9ed10ffdef60684bf8757c257400500342503f1ce5c7cffcdb2e8aaf/regex-2026.9.3-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:294ef8fb58a45f912513692380f366ca191940de5b3b3de5308ce2e8500d8ea4", size = 501333, upload-time = "2026-09-01T00:53:06.681Z" }, + { url = "https://files.pythonhosted.org/packages/64/dd/2cbc3b253a88fdb0c8ca641367dc2f280541fdf1722f201fc0be62797577/regex-2026.9.3-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:edfd2b0cad175780f8668fd6f66486354b8770e4057e44038daaa4a066f8ddff", size = 299273, upload-time = "2026-09-01T00:53:09.002Z" }, + { url = "https://files.pythonhosted.org/packages/2a/29/4818d31ec2555309b3935d3cd006a7f6076e11bb21eec9e72afee3db87b1/regex-2026.9.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:cda393bb35828e3993fcaf39c8ede78b16614954eb15fe77336d5d141be40f76", size = 294888, upload-time = "2026-09-01T00:53:11.009Z" }, + { url = "https://files.pythonhosted.org/packages/94/37/8970a4102a067e0a28e40a232bf536752c373da8a4f932755679f77fa9ac/regex-2026.9.3-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cce8e5243d95068f595155663e3e18b1938b16cf716dce6cf2491ebc08b98d96", size = 813072, upload-time = "2026-09-01T00:53:13.566Z" }, + { url = "https://files.pythonhosted.org/packages/90/1c/2e52f5e9e92b79e324c9807e977fa6f9ab210b41ab5b7356307d5ffb2f4c/regex-2026.9.3-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2a1269856278ae8bc78342bf20191c1f10638d2c22df72364d2fa02d70d49f35", size = 869947, upload-time = "2026-09-01T00:53:15.773Z" }, + { url = "https://files.pythonhosted.org/packages/f6/42/c676e3f2dcb47ec941fa678019044cbac51db9441e09cec47392e4986013/regex-2026.9.3-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4ac52b95a938789fcfcfbf6faf647b45d7be940f0c51f06991c1353db54c67aa", size = 915678, upload-time = "2026-09-01T00:53:18.384Z" }, + { url = "https://files.pythonhosted.org/packages/01/6a/73c971bcaf1d24e73aa3c8e0f767caccfdc9fcda021e59f28f6dcd12728b/regex-2026.9.3-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:490a81770599b17b8594227674872dfb215af05f2be0065a32a7c70175fd9e23", size = 817714, upload-time = "2026-09-01T00:53:20.723Z" }, + { url = "https://files.pythonhosted.org/packages/b2/7c/0e9bffb6cfa8a00e765eaea0d1e6d207bb98e620d5658c537c8d87df671c/regex-2026.9.3-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f584dd93ef6ddb10ba028e247fe1fc0ba52ed70ca4d596bb8d52bf4304c147ec", size = 792411, upload-time = "2026-09-01T00:53:22.925Z" }, + { url = "https://files.pythonhosted.org/packages/61/d4/b1d226e8a3d0c8aac577a517384ffaea7b9ff98b194ddbd0bef58b9d8738/regex-2026.9.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:c07eaf30bc072b179acc8ac50519a2a81f03f88a220750c6d83dadbdc33fb1de", size = 802521, upload-time = "2026-09-01T00:53:25.281Z" }, + { url = "https://files.pythonhosted.org/packages/c6/ad/dc47f94a4ace898561dfafeed6052dd3551915f36aa1971f4387d6daf0d4/regex-2026.9.3-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:9e1c602c55dc8ec05cc7e0a8e31f3ad3d4644dbcb7ac39114105c9bd0384371f", size = 865266, upload-time = "2026-09-01T00:53:27.667Z" }, + { url = "https://files.pythonhosted.org/packages/41/7b/743565fc25cb36981186b4e9b42b3d093a7226cca328380cfd223c1b5a03/regex-2026.9.3-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:2ef9a284ec658d48ec57edfba0944d1582532601472f695b799ba08d37fd6544", size = 780298, upload-time = "2026-09-01T00:53:30.017Z" }, + { url = "https://files.pythonhosted.org/packages/c6/ad/d62e48324632eb0bae2c336da5810b51a14a9e23ba964f2828cc1ac23011/regex-2026.9.3-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:c90f34f1b1905d7d6c42b25b6ffb4e5066e6c95c7715169e3332b1760614d092", size = 858045, upload-time = "2026-09-01T00:53:32.397Z" }, + { url = "https://files.pythonhosted.org/packages/2e/41/8eff42a2516494bb6b36d33b15bcd861764dcc836ad7c0b746e46c513af9/regex-2026.9.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:307dbd844f678de48ea74cdc909b007729c50e6be7f182bdf6a1df6732374c69", size = 805406, upload-time = "2026-09-01T00:53:34.601Z" }, + { url = "https://files.pythonhosted.org/packages/f6/1d/98198fd6dc185a172f5de48b8a4c7ca03c0d4285b1c1c32300672e7cf85a/regex-2026.9.3-cp315-cp315t-win32.whl", hash = "sha256:ce6505846d29f860966e0e9cfadaad1041a7d8ce7dc4af39940fcb1877dec29a", size = 274674, upload-time = "2026-09-01T00:53:36.77Z" }, + { url = "https://files.pythonhosted.org/packages/d2/82/dc0e76842ccddc8756471adff38c140d130c6b601b9ae5724274f1881e7a/regex-2026.9.3-cp315-cp315t-win_amd64.whl", hash = "sha256:2c71da070224baf426850d9eab23ac797d9859b1841dbda43012c01b69697803", size = 283692, upload-time = "2026-09-01T00:53:38.951Z" }, + { url = "https://files.pythonhosted.org/packages/da/3d/e0677f590f3473a3defb63ef6e3469154382a2a15ebafb364482d7ed3b01/regex-2026.9.3-cp315-cp315t-win_arm64.whl", hash = "sha256:ecc27adda0d1e1bc39793b41fdd562d2f4bc4dcee6ee0e3c733d519c332183b2", size = 283421, upload-time = "2026-09-01T00:53:41.393Z" }, +] + +[[package]] +name = "requests" +version = "2.33.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/64/8860370b167a9721e8956ae116825caff829224fbca0ca6e7bf8ddef8430/requests-2.33.0.tar.gz", hash = "sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652", size = 134232, upload-time = "2026-03-25T15:10:41.586Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/5d/c814546c2333ceea4ba42262d8c4d55763003e767fa169adc693bd524478/requests-2.33.0-py3-none-any.whl", hash = "sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b", size = 65017, upload-time = "2026-03-25T15:10:40.382Z" }, +] + +[[package]] +name = "ruff" +version = "0.12.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a8/f0/e0965dd709b8cabe6356811c0ee8c096806bb57d20b5019eb4e48a117410/ruff-0.12.12.tar.gz", hash = "sha256:b86cd3415dbe31b3b46a71c598f4c4b2f550346d1ccf6326b347cc0c8fd063d6", size = 5359915, upload-time = "2025-09-04T16:50:18.273Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/09/79/8d3d687224d88367b51c7974cec1040c4b015772bfbeffac95face14c04a/ruff-0.12.12-py3-none-linux_armv6l.whl", hash = "sha256:de1c4b916d98ab289818e55ce481e2cacfaad7710b01d1f990c497edf217dafc", size = 12116602, upload-time = "2025-09-04T16:49:18.892Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c3/6e599657fe192462f94861a09aae935b869aea8a1da07f47d6eae471397c/ruff-0.12.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7acd6045e87fac75a0b0cdedacf9ab3e1ad9d929d149785903cff9bb69ad9727", size = 12868393, upload-time = "2025-09-04T16:49:23.043Z" }, + { url = "https://files.pythonhosted.org/packages/e8/d2/9e3e40d399abc95336b1843f52fc0daaceb672d0e3c9290a28ff1a96f79d/ruff-0.12.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:abf4073688d7d6da16611f2f126be86523a8ec4343d15d276c614bda8ec44edb", size = 12036967, upload-time = "2025-09-04T16:49:26.04Z" }, + { url = "https://files.pythonhosted.org/packages/e9/03/6816b2ed08836be272e87107d905f0908be5b4a40c14bfc91043e76631b8/ruff-0.12.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:968e77094b1d7a576992ac078557d1439df678a34c6fe02fd979f973af167577", size = 12276038, upload-time = "2025-09-04T16:49:29.056Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d5/707b92a61310edf358a389477eabd8af68f375c0ef858194be97ca5b6069/ruff-0.12.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42a67d16e5b1ffc6d21c5f67851e0e769517fb57a8ebad1d0781b30888aa704e", size = 11901110, upload-time = "2025-09-04T16:49:32.07Z" }, + { url = "https://files.pythonhosted.org/packages/9d/3d/f8b1038f4b9822e26ec3d5b49cf2bc313e3c1564cceb4c1a42820bf74853/ruff-0.12.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b216ec0a0674e4b1214dcc998a5088e54eaf39417327b19ffefba1c4a1e4971e", size = 13668352, upload-time = "2025-09-04T16:49:35.148Z" }, + { url = "https://files.pythonhosted.org/packages/98/0e/91421368ae6c4f3765dd41a150f760c5f725516028a6be30e58255e3c668/ruff-0.12.12-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:59f909c0fdd8f1dcdbfed0b9569b8bf428cf144bec87d9de298dcd4723f5bee8", size = 14638365, upload-time = "2025-09-04T16:49:38.892Z" }, + { url = "https://files.pythonhosted.org/packages/74/5d/88f3f06a142f58ecc8ecb0c2fe0b82343e2a2b04dcd098809f717cf74b6c/ruff-0.12.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ac93d87047e765336f0c18eacad51dad0c1c33c9df7484c40f98e1d773876f5", size = 14060812, upload-time = "2025-09-04T16:49:42.732Z" }, + { url = "https://files.pythonhosted.org/packages/13/fc/8962e7ddd2e81863d5c92400820f650b86f97ff919c59836fbc4c1a6d84c/ruff-0.12.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:01543c137fd3650d322922e8b14cc133b8ea734617c4891c5a9fccf4bfc9aa92", size = 13050208, upload-time = "2025-09-04T16:49:46.434Z" }, + { url = "https://files.pythonhosted.org/packages/53/06/8deb52d48a9a624fd37390555d9589e719eac568c020b27e96eed671f25f/ruff-0.12.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afc2fa864197634e549d87fb1e7b6feb01df0a80fd510d6489e1ce8c0b1cc45", size = 13311444, upload-time = "2025-09-04T16:49:49.931Z" }, + { url = "https://files.pythonhosted.org/packages/2a/81/de5a29af7eb8f341f8140867ffb93f82e4fde7256dadee79016ac87c2716/ruff-0.12.12-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:0c0945246f5ad776cb8925e36af2438e66188d2b57d9cf2eed2c382c58b371e5", size = 13279474, upload-time = "2025-09-04T16:49:53.465Z" }, + { url = "https://files.pythonhosted.org/packages/7f/14/d9577fdeaf791737ada1b4f5c6b59c21c3326f3f683229096cccd7674e0c/ruff-0.12.12-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a0fbafe8c58e37aae28b84a80ba1817f2ea552e9450156018a478bf1fa80f4e4", size = 12070204, upload-time = "2025-09-04T16:49:56.882Z" }, + { url = "https://files.pythonhosted.org/packages/77/04/a910078284b47fad54506dc0af13839c418ff704e341c176f64e1127e461/ruff-0.12.12-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b9c456fb2fc8e1282affa932c9e40f5ec31ec9cbb66751a316bd131273b57c23", size = 11880347, upload-time = "2025-09-04T16:49:59.729Z" }, + { url = "https://files.pythonhosted.org/packages/df/58/30185fcb0e89f05e7ea82e5817b47798f7fa7179863f9d9ba6fd4fe1b098/ruff-0.12.12-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f12856123b0ad0147d90b3961f5c90e7427f9acd4b40050705499c98983f489", size = 12891844, upload-time = "2025-09-04T16:50:02.591Z" }, + { url = "https://files.pythonhosted.org/packages/21/9c/28a8dacce4855e6703dcb8cdf6c1705d0b23dd01d60150786cd55aa93b16/ruff-0.12.12-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:26a1b5a2bf7dd2c47e3b46d077cd9c0fc3b93e6c6cc9ed750bd312ae9dc302ee", size = 13360687, upload-time = "2025-09-04T16:50:05.8Z" }, + { url = "https://files.pythonhosted.org/packages/c8/fa/05b6428a008e60f79546c943e54068316f32ec8ab5c4f73e4563934fbdc7/ruff-0.12.12-py3-none-win32.whl", hash = "sha256:173be2bfc142af07a01e3a759aba6f7791aa47acf3604f610b1c36db888df7b1", size = 12052870, upload-time = "2025-09-04T16:50:09.121Z" }, + { url = "https://files.pythonhosted.org/packages/85/60/d1e335417804df452589271818749d061b22772b87efda88354cf35cdb7a/ruff-0.12.12-py3-none-win_amd64.whl", hash = "sha256:e99620bf01884e5f38611934c09dd194eb665b0109104acae3ba6102b600fd0d", size = 13178016, upload-time = "2025-09-04T16:50:12.559Z" }, + { url = "https://files.pythonhosted.org/packages/28/7e/61c42657f6e4614a4258f1c3b0c5b93adc4d1f8575f5229d1906b483099b/ruff-0.12.12-py3-none-win_arm64.whl", hash = "sha256:2a8199cab4ce4d72d158319b63370abf60991495fb733db96cd923a34c52d093", size = 12256762, upload-time = "2025-09-04T16:50:15.737Z" }, +] + +[[package]] +name = "s3transfer" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/43/35e4d8aa320bffe8287fe8f65f578fa2d2db0a64212f0e710dce58267854/s3transfer-0.19.2.tar.gz", hash = "sha256:ba0309fd86be3c27dbf78cdd813c13c5e1df16e5874b99d2535ebbdfb9892993", size = 165592, upload-time = "2026-07-22T19:30:44.432Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/e7/5c595c75e9f41a44f30e526eda465ea0b4eec93470e074e4a111b253f13a/s3transfer-0.19.2-py3-none-any.whl", hash = "sha256:d8168eccca828cbb2cd573675333f3bddd254313a9c42494b84c76b539e8ba25", size = 90216, upload-time = "2026-07-22T19:30:43.251Z" }, +] + +[[package]] +name = "setuptools" +version = "84.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/44/f5da03a8ef95d369145c5bb53050e7877c9f3d312e128605fd9504829143/setuptools-84.0.0.tar.gz", hash = "sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73", size = 1168449, upload-time = "2026-08-08T18:27:58.365Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", hash = "sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", size = 818216, upload-time = "2026-08-08T18:27:56.719Z" }, +] + +[[package]] +name = "shapely" +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4d/bc/0989043118a27cccb4e906a46b7565ce36ca7b57f5a18b78f4f1b0f72d9d/shapely-2.1.2.tar.gz", hash = "sha256:2ed4ecb28320a433db18a5bf029986aa8afcfd740745e78847e330d5d94922a9", size = 315489, upload-time = "2025-09-24T13:51:41.432Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/8d/1ff672dea9ec6a7b5d422eb6d095ed886e2e523733329f75fdcb14ee1149/shapely-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:91121757b0a36c9aac3427a651a7e6567110a4a67c97edf04f8d55d4765f6618", size = 1820038, upload-time = "2025-09-24T13:50:15.628Z" }, + { url = "https://files.pythonhosted.org/packages/4f/ce/28fab8c772ce5db23a0d86bf0adaee0c4c79d5ad1db766055fa3dab442e2/shapely-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:16a9c722ba774cf50b5d4541242b4cce05aafd44a015290c82ba8a16931ff63d", size = 1626039, upload-time = "2025-09-24T13:50:16.881Z" }, + { url = "https://files.pythonhosted.org/packages/70/8b/868b7e3f4982f5006e9395c1e12343c66a8155c0374fdc07c0e6a1ab547d/shapely-2.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cc4f7397459b12c0b196c9efe1f9d7e92463cbba142632b4cc6d8bbbbd3e2b09", size = 3001519, upload-time = "2025-09-24T13:50:18.606Z" }, + { url = "https://files.pythonhosted.org/packages/13/02/58b0b8d9c17c93ab6340edd8b7308c0c5a5b81f94ce65705819b7416dba5/shapely-2.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:136ab87b17e733e22f0961504d05e77e7be8c9b5a8184f685b4a91a84efe3c26", size = 3110842, upload-time = "2025-09-24T13:50:21.77Z" }, + { url = "https://files.pythonhosted.org/packages/af/61/8e389c97994d5f331dcffb25e2fa761aeedfb52b3ad9bcdd7b8671f4810a/shapely-2.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:16c5d0fc45d3aa0a69074979f4f1928ca2734fb2e0dde8af9611e134e46774e7", size = 4021316, upload-time = "2025-09-24T13:50:23.626Z" }, + { url = "https://files.pythonhosted.org/packages/d3/d4/9b2a9fe6039f9e42ccf2cb3e84f219fd8364b0c3b8e7bbc857b5fbe9c14c/shapely-2.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6ddc759f72b5b2b0f54a7e7cde44acef680a55019eb52ac63a7af2cf17cb9cd2", size = 4178586, upload-time = "2025-09-24T13:50:25.443Z" }, + { url = "https://files.pythonhosted.org/packages/16/f6/9840f6963ed4decf76b08fd6d7fed14f8779fb7a62cb45c5617fa8ac6eab/shapely-2.1.2-cp311-cp311-win32.whl", hash = "sha256:2fa78b49485391224755a856ed3b3bd91c8455f6121fee0db0e71cefb07d0ef6", size = 1543961, upload-time = "2025-09-24T13:50:26.968Z" }, + { url = "https://files.pythonhosted.org/packages/38/1e/3f8ea46353c2a33c1669eb7327f9665103aa3a8dfe7f2e4ef714c210b2c2/shapely-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:c64d5c97b2f47e3cd9b712eaced3b061f2b71234b3fc263e0fcf7d889c6559dc", size = 1722856, upload-time = "2025-09-24T13:50:28.497Z" }, + { url = "https://files.pythonhosted.org/packages/24/c0/f3b6453cf2dfa99adc0ba6675f9aaff9e526d2224cbd7ff9c1a879238693/shapely-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fe2533caae6a91a543dec62e8360fe86ffcdc42a7c55f9dfd0128a977a896b94", size = 1833550, upload-time = "2025-09-24T13:50:30.019Z" }, + { url = "https://files.pythonhosted.org/packages/86/07/59dee0bc4b913b7ab59ab1086225baca5b8f19865e6101db9ebb7243e132/shapely-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ba4d1333cc0bc94381d6d4308d2e4e008e0bd128bdcff5573199742ee3634359", size = 1643556, upload-time = "2025-09-24T13:50:32.291Z" }, + { url = "https://files.pythonhosted.org/packages/26/29/a5397e75b435b9895cd53e165083faed5d12fd9626eadec15a83a2411f0f/shapely-2.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0bd308103340030feef6c111d3eb98d50dc13feea33affc8a6f9fa549e9458a3", size = 2988308, upload-time = "2025-09-24T13:50:33.862Z" }, + { url = "https://files.pythonhosted.org/packages/b9/37/e781683abac55dde9771e086b790e554811a71ed0b2b8a1e789b7430dd44/shapely-2.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e7d4d7ad262a48bb44277ca12c7c78cb1b0f56b32c10734ec9a1d30c0b0c54b", size = 3099844, upload-time = "2025-09-24T13:50:35.459Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f3/9876b64d4a5a321b9dc482c92bb6f061f2fa42131cba643c699f39317cb9/shapely-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e9eddfe513096a71896441a7c37db72da0687b34752c4e193577a145c71736fc", size = 3988842, upload-time = "2025-09-24T13:50:37.478Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a0/704c7292f7014c7e74ec84eddb7b109e1fbae74a16deae9c1504b1d15565/shapely-2.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:980c777c612514c0cf99bc8a9de6d286f5e186dcaf9091252fcd444e5638193d", size = 4152714, upload-time = "2025-09-24T13:50:39.9Z" }, + { url = "https://files.pythonhosted.org/packages/53/46/319c9dc788884ad0785242543cdffac0e6530e4d0deb6c4862bc4143dcf3/shapely-2.1.2-cp312-cp312-win32.whl", hash = "sha256:9111274b88e4d7b54a95218e243282709b330ef52b7b86bc6aaf4f805306f454", size = 1542745, upload-time = "2025-09-24T13:50:41.414Z" }, + { url = "https://files.pythonhosted.org/packages/ec/bf/cb6c1c505cb31e818e900b9312d514f381fbfa5c4363edfce0fcc4f8c1a4/shapely-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:743044b4cfb34f9a67205cee9279feaf60ba7d02e69febc2afc609047cb49179", size = 1722861, upload-time = "2025-09-24T13:50:43.35Z" }, + { url = "https://files.pythonhosted.org/packages/c3/90/98ef257c23c46425dc4d1d31005ad7c8d649fe423a38b917db02c30f1f5a/shapely-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b510dda1a3672d6879beb319bc7c5fd302c6c354584690973c838f46ec3e0fa8", size = 1832644, upload-time = "2025-09-24T13:50:44.886Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ab/0bee5a830d209adcd3a01f2d4b70e587cdd9fd7380d5198c064091005af8/shapely-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8cff473e81017594d20ec55d86b54bc635544897e13a7cfc12e36909c5309a2a", size = 1642887, upload-time = "2025-09-24T13:50:46.735Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5e/7d7f54ba960c13302584c73704d8c4d15404a51024631adb60b126a4ae88/shapely-2.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe7b77dc63d707c09726b7908f575fc04ff1d1ad0f3fb92aec212396bc6cfe5e", size = 2970931, upload-time = "2025-09-24T13:50:48.374Z" }, + { url = "https://files.pythonhosted.org/packages/f2/a2/83fc37e2a58090e3d2ff79175a95493c664bcd0b653dd75cb9134645a4e5/shapely-2.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7ed1a5bbfb386ee8332713bf7508bc24e32d24b74fc9a7b9f8529a55db9f4ee6", size = 3082855, upload-time = "2025-09-24T13:50:50.037Z" }, + { url = "https://files.pythonhosted.org/packages/44/2b/578faf235a5b09f16b5f02833c53822294d7f21b242f8e2d0cf03fb64321/shapely-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a84e0582858d841d54355246ddfcbd1fce3179f185da7470f41ce39d001ee1af", size = 3979960, upload-time = "2025-09-24T13:50:51.74Z" }, + { url = "https://files.pythonhosted.org/packages/4d/04/167f096386120f692cc4ca02f75a17b961858997a95e67a3cb6a7bbd6b53/shapely-2.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc3487447a43d42adcdf52d7ac73804f2312cbfa5d433a7d2c506dcab0033dfd", size = 4142851, upload-time = "2025-09-24T13:50:53.49Z" }, + { url = "https://files.pythonhosted.org/packages/48/74/fb402c5a6235d1c65a97348b48cdedb75fb19eca2b1d66d04969fc1c6091/shapely-2.1.2-cp313-cp313-win32.whl", hash = "sha256:9c3a3c648aedc9f99c09263b39f2d8252f199cb3ac154fadc173283d7d111350", size = 1541890, upload-time = "2025-09-24T13:50:55.337Z" }, + { url = "https://files.pythonhosted.org/packages/41/47/3647fe7ad990af60ad98b889657a976042c9988c2807cf322a9d6685f462/shapely-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:ca2591bff6645c216695bdf1614fca9c82ea1144d4a7591a466fef64f28f0715", size = 1722151, upload-time = "2025-09-24T13:50:57.153Z" }, + { url = "https://files.pythonhosted.org/packages/3c/49/63953754faa51ffe7d8189bfbe9ca34def29f8c0e34c67cbe2a2795f269d/shapely-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2d93d23bdd2ed9dc157b46bc2f19b7da143ca8714464249bef6771c679d5ff40", size = 1834130, upload-time = "2025-09-24T13:50:58.49Z" }, + { url = "https://files.pythonhosted.org/packages/7f/ee/dce001c1984052970ff60eb4727164892fb2d08052c575042a47f5a9e88f/shapely-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01d0d304b25634d60bd7cf291828119ab55a3bab87dc4af1e44b07fb225f188b", size = 1642802, upload-time = "2025-09-24T13:50:59.871Z" }, + { url = "https://files.pythonhosted.org/packages/da/e7/fc4e9a19929522877fa602f705706b96e78376afb7fad09cad5b9af1553c/shapely-2.1.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8d8382dd120d64b03698b7298b89611a6ea6f55ada9d39942838b79c9bc89801", size = 3018460, upload-time = "2025-09-24T13:51:02.08Z" }, + { url = "https://files.pythonhosted.org/packages/a1/18/7519a25db21847b525696883ddc8e6a0ecaa36159ea88e0fef11466384d0/shapely-2.1.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19efa3611eef966e776183e338b2d7ea43569ae99ab34f8d17c2c054d3205cc0", size = 3095223, upload-time = "2025-09-24T13:51:04.472Z" }, + { url = "https://files.pythonhosted.org/packages/48/de/b59a620b1f3a129c3fecc2737104a0a7e04e79335bd3b0a1f1609744cf17/shapely-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:346ec0c1a0fcd32f57f00e4134d1200e14bf3f5ae12af87ba83ca275c502498c", size = 4030760, upload-time = "2025-09-24T13:51:06.455Z" }, + { url = "https://files.pythonhosted.org/packages/96/b3/c6655ee7232b417562bae192ae0d3ceaadb1cc0ffc2088a2ddf415456cc2/shapely-2.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6305993a35989391bd3476ee538a5c9a845861462327efe00dd11a5c8c709a99", size = 4170078, upload-time = "2025-09-24T13:51:08.584Z" }, + { url = "https://files.pythonhosted.org/packages/a0/8e/605c76808d73503c9333af8f6cbe7e1354d2d238bda5f88eea36bfe0f42a/shapely-2.1.2-cp313-cp313t-win32.whl", hash = "sha256:c8876673449f3401f278c86eb33224c5764582f72b653a415d0e6672fde887bf", size = 1559178, upload-time = "2025-09-24T13:51:10.73Z" }, + { url = "https://files.pythonhosted.org/packages/36/f7/d317eb232352a1f1444d11002d477e54514a4a6045536d49d0c59783c0da/shapely-2.1.2-cp313-cp313t-win_amd64.whl", hash = "sha256:4a44bc62a10d84c11a7a3d7c1c4fe857f7477c3506e24c9062da0db0ae0c449c", size = 1739756, upload-time = "2025-09-24T13:51:12.105Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c4/3ce4c2d9b6aabd27d26ec988f08cb877ba9e6e96086eff81bfea93e688c7/shapely-2.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:9a522f460d28e2bf4e12396240a5fc1518788b2fcd73535166d748399ef0c223", size = 1831290, upload-time = "2025-09-24T13:51:13.56Z" }, + { url = "https://files.pythonhosted.org/packages/17/b9/f6ab8918fc15429f79cb04afa9f9913546212d7fb5e5196132a2af46676b/shapely-2.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1ff629e00818033b8d71139565527ced7d776c269a49bd78c9df84e8f852190c", size = 1641463, upload-time = "2025-09-24T13:51:14.972Z" }, + { url = "https://files.pythonhosted.org/packages/a5/57/91d59ae525ca641e7ac5551c04c9503aee6f29b92b392f31790fcb1a4358/shapely-2.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f67b34271dedc3c653eba4e3d7111aa421d5be9b4c4c7d38d30907f796cb30df", size = 2970145, upload-time = "2025-09-24T13:51:16.961Z" }, + { url = "https://files.pythonhosted.org/packages/8a/cb/4948be52ee1da6927831ab59e10d4c29baa2a714f599f1f0d1bc747f5777/shapely-2.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:21952dc00df38a2c28375659b07a3979d22641aeb104751e769c3ee825aadecf", size = 3073806, upload-time = "2025-09-24T13:51:18.712Z" }, + { url = "https://files.pythonhosted.org/packages/03/83/f768a54af775eb41ef2e7bec8a0a0dbe7d2431c3e78c0a8bdba7ab17e446/shapely-2.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1f2f33f486777456586948e333a56ae21f35ae273be99255a191f5c1fa302eb4", size = 3980803, upload-time = "2025-09-24T13:51:20.37Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/559c7c195807c91c79d38a1f6901384a2878a76fbdf3f1048893a9b7534d/shapely-2.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cf831a13e0d5a7eb519e96f58ec26e049b1fad411fc6fc23b162a7ce04d9cffc", size = 4133301, upload-time = "2025-09-24T13:51:21.887Z" }, + { url = "https://files.pythonhosted.org/packages/80/cd/60d5ae203241c53ef3abd2ef27c6800e21afd6c94e39db5315ea0cbafb4a/shapely-2.1.2-cp314-cp314-win32.whl", hash = "sha256:61edcd8d0d17dd99075d320a1dd39c0cb9616f7572f10ef91b4b5b00c4aeb566", size = 1583247, upload-time = "2025-09-24T13:51:23.401Z" }, + { url = "https://files.pythonhosted.org/packages/74/d4/135684f342e909330e50d31d441ace06bf83c7dc0777e11043f99167b123/shapely-2.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:a444e7afccdb0999e203b976adb37ea633725333e5b119ad40b1ca291ecf311c", size = 1773019, upload-time = "2025-09-24T13:51:24.873Z" }, + { url = "https://files.pythonhosted.org/packages/a3/05/a44f3f9f695fa3ada22786dc9da33c933da1cbc4bfe876fe3a100bafe263/shapely-2.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:5ebe3f84c6112ad3d4632b1fd2290665aa75d4cef5f6c5d77c4c95b324527c6a", size = 1834137, upload-time = "2025-09-24T13:51:26.665Z" }, + { url = "https://files.pythonhosted.org/packages/52/7e/4d57db45bf314573427b0a70dfca15d912d108e6023f623947fa69f39b72/shapely-2.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5860eb9f00a1d49ebb14e881f5caf6c2cf472c7fd38bd7f253bbd34f934eb076", size = 1642884, upload-time = "2025-09-24T13:51:28.029Z" }, + { url = "https://files.pythonhosted.org/packages/5a/27/4e29c0a55d6d14ad7422bf86995d7ff3f54af0eba59617eb95caf84b9680/shapely-2.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b705c99c76695702656327b819c9660768ec33f5ce01fa32b2af62b56ba400a1", size = 3018320, upload-time = "2025-09-24T13:51:29.903Z" }, + { url = "https://files.pythonhosted.org/packages/9f/bb/992e6a3c463f4d29d4cd6ab8963b75b1b1040199edbd72beada4af46bde5/shapely-2.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a1fd0ea855b2cf7c9cddaf25543e914dd75af9de08785f20ca3085f2c9ca60b0", size = 3094931, upload-time = "2025-09-24T13:51:32.699Z" }, + { url = "https://files.pythonhosted.org/packages/9c/16/82e65e21070e473f0ed6451224ed9fa0be85033d17e0c6e7213a12f59d12/shapely-2.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:df90e2db118c3671a0754f38e36802db75fe0920d211a27481daf50a711fdf26", size = 4030406, upload-time = "2025-09-24T13:51:34.189Z" }, + { url = "https://files.pythonhosted.org/packages/7c/75/c24ed871c576d7e2b64b04b1fe3d075157f6eb54e59670d3f5ffb36e25c7/shapely-2.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:361b6d45030b4ac64ddd0a26046906c8202eb60d0f9f53085f5179f1d23021a0", size = 4169511, upload-time = "2025-09-24T13:51:36.297Z" }, + { url = "https://files.pythonhosted.org/packages/b1/f7/b3d1d6d18ebf55236eec1c681ce5e665742aab3c0b7b232720a7d43df7b6/shapely-2.1.2-cp314-cp314t-win32.whl", hash = "sha256:b54df60f1fbdecc8ebc2c5b11870461a6417b3d617f555e5033f1505d36e5735", size = 1602607, upload-time = "2025-09-24T13:51:37.757Z" }, + { url = "https://files.pythonhosted.org/packages/9a/f6/f09272a71976dfc138129b8faf435d064a811ae2f708cb147dccdf7aacdb/shapely-2.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:0036ac886e0923417932c2e6369b6c52e38e0ff5d9120b90eef5cd9a5fc5cae9", size = 1796682, upload-time = "2025-09-24T13:51:39.233Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "snowflake" +version = "1.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "snowflake-core" }, + { name = "snowflake-legacy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/47/4eeee2d2564e0de814c3f045d220df8983ba51d003fd0906035a69227775/snowflake-1.13.1.tar.gz", hash = "sha256:59291b0a93f3b98ba1dc6a1153bfcab1f4ba75dbd84a3abcad391e5d38ddb1f4", size = 6204, upload-time = "2026-08-12T07:52:30.677Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f0/67/035de3cb8411b1212443a5c39ff65202f45bf5bb91c71399b938c9d65b84/snowflake-1.13.1-py3-none-any.whl", hash = "sha256:6c62480f9b925119ecc4d29a48af3c0d52e1c08562b06105e239e20908a0afd6", size = 5645, upload-time = "2026-08-12T07:52:31.597Z" }, +] + +[[package]] +name = "snowflake-connector-python" +version = "4.7.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asn1crypto" }, + { name = "boto3" }, + { name = "botocore" }, + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "cryptography" }, + { name = "filelock" }, + { name = "idna" }, + { name = "packaging" }, + { name = "platformdirs" }, + { name = "pyjwt" }, + { name = "pyopenssl" }, + { name = "pytz" }, + { name = "requests" }, + { name = "sortedcontainers" }, + { name = "tomlkit" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/07/73/e6e45343dd133207a6f710a88e0675ae69f8c12c23efe7f192448bbdace9/snowflake_connector_python-4.7.2.tar.gz", hash = "sha256:c261b73b8dbe3f3d5b9bfdc19196f38e3eade42cb2f24322b7a2bb60fef76534", size = 954059, upload-time = "2026-08-07T13:59:54.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/32/710cc28319ddd8032b82a1f6c2118b0d773de4820c950ccb52620a80d4d7/snowflake_connector_python-4.7.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:5e807b896c7d2d6f95d5f45e4a069198bfeca66589cb06e0da24feb50b309e23", size = 1181594, upload-time = "2026-08-07T13:59:59.342Z" }, + { url = "https://files.pythonhosted.org/packages/53/f3/e4947de8c5166eb5c750a784476e309da93c58adc7fc3fea7cf32283ecd3/snowflake_connector_python-4.7.2-cp311-cp311-macosx_15_0_x86_64.whl", hash = "sha256:80f55ce890f7ced50bf45b04243d244171b4fce81fdf02970daad99902aa8ac8", size = 1193292, upload-time = "2026-08-07T14:00:00.914Z" }, + { url = "https://files.pythonhosted.org/packages/70/38/be5959f563adf266c17963b3333a19ef0cf5463651f14aa806eb03eed917/snowflake_connector_python-4.7.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cbce7e41111545cfbf844fe96e3c9e5f01aff04ce7ab3843ee74da415590bf74", size = 2867890, upload-time = "2026-08-07T13:59:41.635Z" }, + { url = "https://files.pythonhosted.org/packages/66/9e/9c6e764dc97d82188b74c36c12130ba1fba0b94c9f1e57869b4662410d7f/snowflake_connector_python-4.7.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0506eec17f6e237f89458d46ccb8933e398505e412ef5901a1a20a2b52eb56ad", size = 2895739, upload-time = "2026-08-07T13:59:43.854Z" }, + { url = "https://files.pythonhosted.org/packages/31/f6/b64395b0b99931c4083948c99afec4997b59e835b63f63225ecd46a954de/snowflake_connector_python-4.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:989a205accfcca60544f8656958add965c46c2c09b4e0a4f20d59707672f6ada", size = 5420684, upload-time = "2026-08-07T14:00:14.659Z" }, + { url = "https://files.pythonhosted.org/packages/e8/17/a3f4c38a4535b137139a353e60874c83e22eea535b37ce43651191ac5d1f/snowflake_connector_python-4.7.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:4d19ab07f57ec14d074086d7a4eadb51b32e75b37c91e9893ad3702ecd2e3505", size = 1181036, upload-time = "2026-08-07T14:00:02.642Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2b/c9446d830f33961ea7c86b4b5343a0fefda3882a31f577d74025ee8d26f5/snowflake_connector_python-4.7.2-cp312-cp312-macosx_15_0_x86_64.whl", hash = "sha256:1d94f27d67520e6729709114ee00916d89defa909d4cd456d53fe6106dc14df1", size = 1193269, upload-time = "2026-08-07T14:00:04.337Z" }, + { url = "https://files.pythonhosted.org/packages/e6/b5/0cee4d1d6ddd268c2443b2c3e8e2a98139198746525bcf73a1da876d940e/snowflake_connector_python-4.7.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:243c4e2621a58a34909a7863bbffaa886870c9fe19e88804a608660fb775f025", size = 2915086, upload-time = "2026-08-07T13:59:45.446Z" }, + { url = "https://files.pythonhosted.org/packages/29/2b/a52387d5abd5988498deeee502c3889b576f21e486f128115ce548006517/snowflake_connector_python-4.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:24e7a787cae7745756cb25c829e4fef1b828d2872dd70e0e31ff37a9323a62c7", size = 2947242, upload-time = "2026-08-07T13:59:46.904Z" }, + { url = "https://files.pythonhosted.org/packages/e5/29/4cc9353e21ec19570ac2916ed15a237d9cd42675ad70d7b9aa3dd2be6ea7/snowflake_connector_python-4.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:d7b1eabecdeaff6b0df8f583dc1b7a8bbd92e996e29212c324013e4ad7662c75", size = 5419590, upload-time = "2026-08-07T14:00:16.379Z" }, + { url = "https://files.pythonhosted.org/packages/93/c5/12defd8c0022ded5a11d3e2204ee52c0484654a869db3d2bf9027c7d2384/snowflake_connector_python-4.7.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9cb47d1d4881fe7338af91a38029c68926fab016b58fb6963954492257e2a1d9", size = 1179960, upload-time = "2026-08-07T14:00:05.802Z" }, + { url = "https://files.pythonhosted.org/packages/9f/70/b5ccddf8b3689455a3652f71eba16b35753dd90dc6936a1f0905c41a4db9/snowflake_connector_python-4.7.2-cp313-cp313-macosx_15_0_x86_64.whl", hash = "sha256:06281d6f66e857b4d8362fc0738600dafd635da1c1cf91537f0cd57f658ec1ec", size = 1192786, upload-time = "2026-08-07T14:00:07.207Z" }, + { url = "https://files.pythonhosted.org/packages/3a/0f/839bcabc5231daf009db958b11838fd991f68f7de137bb3918f8e5368de4/snowflake_connector_python-4.7.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0771229b11862b0eac60d8a771c66af79b5c3248b5200ad2898217ab4c7d385b", size = 2886123, upload-time = "2026-08-07T13:59:48.314Z" }, + { url = "https://files.pythonhosted.org/packages/e6/77/85754d5a5f3ba7f11a3f0aa569b2edd2429aa96f2342486b1da4530329c6/snowflake_connector_python-4.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:eb1e56efaaf258bb8a28968bbebea82488a02a2ffda354e65ea7921935289a19", size = 2918812, upload-time = "2026-08-07T13:59:49.747Z" }, + { url = "https://files.pythonhosted.org/packages/e8/01/9015c0918f4146281c2d36f72069a9ec538b4165bddb2b5cd3bc9ff4f24c/snowflake_connector_python-4.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:17f9cee8985b726afe027920b2842c41b0c52280747d37efa1643c3f77fd5505", size = 5419347, upload-time = "2026-08-07T14:00:18.013Z" }, + { url = "https://files.pythonhosted.org/packages/a0/9e/d768063750fd8e155311414580b79f35552e95b72f1bcbb702f9e577a5bc/snowflake_connector_python-4.7.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:9b5a3860bf4350786c35ffaac0ba60f7b13ef72d6296d23b28e356be1fe938c9", size = 1180582, upload-time = "2026-08-07T14:00:08.808Z" }, + { url = "https://files.pythonhosted.org/packages/01/40/fcff393b5b6de392931e43c5ca17298e59aaf8fd89b34189748af8166bc9/snowflake_connector_python-4.7.2-cp314-cp314-macosx_15_0_x86_64.whl", hash = "sha256:89e19d070ce884a370a2fa6273fcba8c8e1d7fe7c57861ba15ef92be603dfe19", size = 1192907, upload-time = "2026-08-07T14:00:10.44Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c2/b2e0676e2637d612e45e711eb3cbd17be3ffa60ea64ff5d7fea8f9ef6261/snowflake_connector_python-4.7.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1ebae2ff7311e9f383ce805d790b6b85cb9a30fe81b1b5dc56d96fe92cd6b5df", size = 2885786, upload-time = "2026-08-07T13:59:51.11Z" }, + { url = "https://files.pythonhosted.org/packages/ec/cb/a8918acef070f833800c1d3c8221610efffe2c8f0d087e69c81d01c33d39/snowflake_connector_python-4.7.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3751daec1a0f05470d6419ddf068f11e3b4d464d683ee4d0b8749a9a0c0605b8", size = 2914542, upload-time = "2026-08-07T13:59:52.624Z" }, + { url = "https://files.pythonhosted.org/packages/2f/0f/e1556f2501b538875c7d3f656f91b5c1ea66d6b88c33ec611b835c4933c5/snowflake_connector_python-4.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:b06b910ff3965bad9c389e1b423837503c5e29f0bc51a9cec7ba8a3df92e6ca8", size = 5478102, upload-time = "2026-08-07T14:00:19.752Z" }, +] + +[[package]] +name = "snowflake-core" +version = "1.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "python-dateutil" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "snowflake-connector-python" }, + { name = "typing-extensions" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/28/a52204137835c0cdf92410245aa629e07301e5aaf0ee0fbe5a7b2c2c38eb/snowflake_core-1.13.1.tar.gz", hash = "sha256:9f07aa40f77f1e302f18812487afafd49f7fd2b49392ea03f115bc5ab6cb0015", size = 1127388, upload-time = "2026-08-12T07:52:35.592Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/4d/e997d69e94c453dc6175d63ed2625cf34ee66ce729cbd53e43e720fed01d/snowflake_core-1.13.1-py3-none-any.whl", hash = "sha256:6c2e18d4d5648ef68b19783e1aee078c85310581621e061f5f2671d34150e320", size = 1892381, upload-time = "2026-08-12T07:52:33.325Z" }, +] + +[[package]] +name = "snowflake-legacy" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/f1/95e11303ef08c9a2e71f58c7f3d12578c7c82e8dfc0cf9f04531c07b19b8/snowflake_legacy-1.0.3.tar.gz", hash = "sha256:681ecb997ba24ee01de1525e2105e214c76f277470074179379fabc1fe5d4bc0", size = 4084, upload-time = "2026-08-10T16:14:00.051Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/be/88339b2ee7d81b8a8b0ae22cb29d0512080aa46794878ecf5bea21f2943a/snowflake_legacy-1.0.3-py3-none-any.whl", hash = "sha256:637b8606266300b7630e2a9edad53308c7e14b7e76861d2dee30f50167c4b791", size = 3061, upload-time = "2026-08-10T16:14:00.879Z" }, +] + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, +] + +[[package]] +name = "texttable" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/dc/0aff23d6036a4d3bf4f1d8c8204c5c79c4437e25e0ae94ffe4bbb55ee3c2/texttable-1.7.0.tar.gz", hash = "sha256:2d2068fb55115807d3ac77a4ca68fa48803e84ebb0ee2340f858107a36522638", size = 12831, upload-time = "2023-10-03T09:48:12.272Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/99/4772b8e00a136f3e01236de33b0efda31ee7077203ba5967fcc76da94d65/texttable-1.7.0-py2.py3-none-any.whl", hash = "sha256:72227d592c82b3d7f672731ae73e4d1f88cd8e2ef5b075a7a7f01a23a3743917", size = 10768, upload-time = "2023-10-03T09:48:10.434Z" }, +] + +[[package]] +name = "timeout-decorator" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/80/f8/0802dd14c58b5d3d72bb9caa4315535f58787a1dc50b81bbbcaaa15451be/timeout-decorator-0.5.0.tar.gz", hash = "sha256:6a2f2f58db1c5b24a2cc79de6345760377ad8bdc13813f5265f6c3e63d16b3d7", size = 4754, upload-time = "2020-11-15T00:53:06.506Z" } + +[[package]] +name = "tomlkit" +version = "0.15.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/96/e07752635b98536177fa1f37671c8f3cdde2e724c6bcf6034b2cfb571565/tomlkit-0.15.1.tar.gz", hash = "sha256:e25bbf38843005246210a12982776f27f99cb9be67160e14434d0c0d21ee1e97", size = 180129, upload-time = "2026-07-17T01:48:04.562Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/bc/8c13eb66537dce1d2bd3a57132902f38d0e7f5bb46fa9f4daed9fe9d76ee/tomlkit-0.15.1-py3-none-any.whl", hash = "sha256:177a05aece5a8ca5266fd3c448abb47b8d352f09d477d3ca8332db4d89b24304", size = 49449, upload-time = "2026-07-17T01:48:05.728Z" }, +] + +[[package]] +name = "tornado" +version = "6.5.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/10/d3/343e5bb989d6515b1646cf3d40135d73f3d5e45339bded401b56cdac24dd/tornado-6.5.8.tar.gz", hash = "sha256:9452e1b208a8bd771e2cb1f2ff564985b9b214bdebbe622793e1799e0a6bd23f", size = 520493, upload-time = "2026-08-07T02:12:42.971Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/d5/007086fd8df5489338e204f65adce33fd4f21a4999dbb2b9cff2f897b5f4/tornado-6.5.8-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:cc6aa787d7cfab7c3d35189dc7a56fbd2399a569624c730c6b55b3d6531d0403", size = 449487, upload-time = "2026-08-07T02:12:28.682Z" }, + { url = "https://files.pythonhosted.org/packages/70/c8/5a24a99495903f594f6a199dd7beead1cbc0a13e2cb9102727bcaaf2a997/tornado-6.5.8-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9715b5eb79735b2bcd454ce216a9275b7c0470e64ea1bf5742f78b2f72b26eeb", size = 447649, upload-time = "2026-08-07T02:12:30.306Z" }, + { url = "https://files.pythonhosted.org/packages/6e/de/f2e733f386b85962d1b1dc82cd63d169b5b4580062b35397eac9244a41fe/tornado-6.5.8-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:547d63f450d570c14fe0e8db2cfb14c9bbd1c2503b4a6612586267955aa47b58", size = 450707, upload-time = "2026-08-07T02:12:31.95Z" }, + { url = "https://files.pythonhosted.org/packages/0b/94/20efeee9a01c141e9ac47c397f81679dfda24b32768fc4fff24e76d36c2c/tornado-6.5.8-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e2360a0ffbe145eca8af0b19cb7203d79b1a98dd4cccdd6b368f6f49c2e3808", size = 451677, upload-time = "2026-08-07T02:12:33.512Z" }, + { url = "https://files.pythonhosted.org/packages/42/ec/a96ccb8ccf0de2b7bc2c5fa1608a4803735018242e90c4882365a9fd418f/tornado-6.5.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5d242290bdf7ab3151bc1065fdd75c0dcc21cbc7b49f22a4c56329c2d6566d22", size = 451510, upload-time = "2026-08-07T02:12:35.346Z" }, + { url = "https://files.pythonhosted.org/packages/29/b5/93185859245ad3f00e62175f29607346788b696369347f0146e0421286bb/tornado-6.5.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7b94ff0e128fe0542f3bd331fb44d06260fc4ac16881545159f34ef08aad4195", size = 450917, upload-time = "2026-08-07T02:12:36.963Z" }, + { url = "https://files.pythonhosted.org/packages/97/cf/fe33cf062834487d34d1559746a4a12521033c22645b6d74d4bca702e018/tornado-6.5.8-cp39-abi3-win32.whl", hash = "sha256:67832909c4779c64942380cb5f044a5c6163d00831472d80e25e115de9917836", size = 451952, upload-time = "2026-08-07T02:12:38.512Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e1/468ad54333e92ccb62627e62cb88e5fc14a2171daa67ed47b1b8542d5b86/tornado-6.5.8-cp39-abi3-win_amd64.whl", hash = "sha256:11881db6b7c168494be2c2d12e65931451bdf7ee718535418ae1d8855dd5a0ee", size = 452391, upload-time = "2026-08-07T02:12:39.971Z" }, + { url = "https://files.pythonhosted.org/packages/ad/3e/cd5e4f06e34cde33b8ef66cf36aa2b5ad46354cc1af7d2136bbe365fee1d/tornado-6.5.8-cp39-abi3-win_arm64.whl", hash = "sha256:68a7468c7e289f8514d7d664101753903217eff1bb6822c6b5994a0b5f5bcb26", size = 451411, upload-time = "2026-08-07T02:12:41.469Z" }, +] + +[[package]] +name = "tqdm" +version = "4.70.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/21/3b/6c24bec5be5e743ffd99576daa5cc077722fc7d5bbc00bd133fa0c698dc6/tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220", size = 795438, upload-time = "2026-07-27T11:33:15.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/1c/01bfd571a64e7f270e6bab5e33777debe0edc56759233ce84f27dec92d14/tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953", size = 80184, upload-time = "2026-07-27T11:33:13.167Z" }, +] + +[[package]] +name = "types-aiofiles" +version = "24.1.0.20250708" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/d6/5c44761bc11cb5c7505013a39f397a9016bfb3a5c932032b2db16c38b87b/types_aiofiles-24.1.0.20250708.tar.gz", hash = "sha256:c8207ed7385491ce5ba94da02658164ebd66b69a44e892288c9f20cbbf5284ff", size = 14322, upload-time = "2025-07-08T03:14:44.814Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/e9/4e0cc79c630040aae0634ac9393341dc2aff1a5be454be9741cc6cc8989f/types_aiofiles-24.1.0.20250708-py3-none-any.whl", hash = "sha256:07f8f06465fd415d9293467d1c66cd074b2c3b62b679e26e353e560a8cf63720", size = 14320, upload-time = "2025-07-08T03:14:44.009Z" }, +] + +[[package]] +name = "types-pyyaml" +version = "6.0.12.20250516" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/22/59e2aeb48ceeee1f7cd4537db9568df80d62bdb44a7f9e743502ea8aab9c/types_pyyaml-6.0.12.20250516.tar.gz", hash = "sha256:9f21a70216fc0fa1b216a8176db5f9e0af6eb35d2f2932acb87689d03a5bf6ba", size = 17378, upload-time = "2025-05-16T03:08:04.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/5f/e0af6f7f6a260d9af67e1db4f54d732abad514252a7a378a6c4d17dd1036/types_pyyaml-6.0.12.20250516-py3-none-any.whl", hash = "sha256:8478208feaeb53a34cb5d970c56a7cd76b72659442e733e268a94dc72b2d0530", size = 20312, upload-time = "2025-05-16T03:08:04.019Z" }, +] + +[[package]] +name = "types-setuptools" +version = "80.9.0.20250529" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/66/1b276526aad4696a9519919e637801f2c103419d2c248a6feb2729e034d1/types_setuptools-80.9.0.20250529.tar.gz", hash = "sha256:79e088ba0cba2186c8d6499cbd3e143abb142d28a44b042c28d3148b1e353c91", size = 41337, upload-time = "2025-05-29T03:07:34.487Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/d8/83790d67ec771bf029a45ff1bd1aedbb738d8aa58c09dd0cc3033eea0e69/types_setuptools-80.9.0.20250529-py3-none-any.whl", hash = "sha256:00dfcedd73e333a430e10db096e4d46af93faf9314f832f13b6bbe3d6757e95f", size = 63263, upload-time = "2025-05-29T03:07:33.064Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/26/b09b8010994eccc3c09092e6b34058f36a460eea2d4c3e8b910c695975a0/typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47", size = 76928, upload-time = "2026-08-12T12:37:25.997Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", size = 14750, upload-time = "2026-08-12T12:37:24.648Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/92/ff/5a28bdfd8c3ebec42564ac7d0e54ca3db65044a9314a97f9564fa7a1e926/tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415", size = 198674, upload-time = "2026-07-10T08:50:37.887Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931", size = 348168, upload-time = "2026-07-10T08:50:36.46Z" }, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, +] + +[[package]] +name = "wheel" +version = "0.46.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/92/3a64fa9639b8e290fe8630d8067a66f7c5510845c6d73686ad880c9b04d9/wheel-0.46.2.tar.gz", hash = "sha256:3d79e48fde9847618a5a181f3cc35764c349c752e2fe911e65fa17faab9809b0", size = 60274, upload-time = "2026-01-21T23:55:25.838Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/2c/5e079cefe955ae58e5a052fe037c850ce493eb7269dedeb960237e78fb0f/wheel-0.46.2-py3-none-any.whl", hash = "sha256:33ae60725d69eaa249bc1982e739943c23b34b58d51f1cb6253453773aca6e65", size = 29971, upload-time = "2026-01-21T23:55:24.447Z" }, +] + +[[package]] +name = "xlsxwriter" +version = "3.2.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940, upload-time = "2025-09-16T00:16:21.63Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315, upload-time = "2025-09-16T00:16:20.108Z" }, +] + +[[package]] +name = "xnat" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "click-option-group" }, + { name = "importlib-metadata" }, + { name = "isodate" }, + { name = "progressbar2" }, + { name = "pydicom" }, + { name = "python-dateutil" }, + { name = "pyyaml" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/9a/3998a48c3a2e8792f66e3de533aad0852e6936e4446e1f343fe553c02056/xnat-0.8.1.tar.gz", hash = "sha256:da153e7d4bb4e7c1becff79c9dc4097750f56f77bef4aa5b9c2c446fe54f59ad", size = 94075516, upload-time = "2026-06-24T15:59:50.324Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/2f/cc54888c27ceb4deae887f72be1e04b15042a95dc0e09a67dacdfa8d7566/xnat-0.8.1-py2.py3-none-any.whl", hash = "sha256:5944b966ca53337ee15ff99f7d7dfea99a3c6dfbef38951569ced5b52922b105", size = 120287, upload-time = "2026-06-24T15:59:53.717Z" }, +] + +[[package]] +name = "xyzservices" +version = "2026.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/08/3cb9f67a8d48021aca2a02292cc26eecd71d949ae70ad66420a8730cc302/xyzservices-2026.3.0.tar.gz", hash = "sha256:d226866a5d8e9fef337034d8da37a8298f0a1d9d1489b4018e69579eb321fea4", size = 1135736, upload-time = "2026-03-30T14:42:25.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/a9/d23012099dc88ec69a29c6407b41d89681cb674c2043cd5b467c7e299c08/xyzservices-2026.3.0-py3-none-any.whl", hash = "sha256:503183d4b322bfebc3c50cdd21192aa3e81e36c5efbf9133d54ae82143e0576b", size = 94101, upload-time = "2026-03-30T14:42:24.608Z" }, +] + +[[package]] +name = "zipp" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, +]