From 6bebe5e4f9ec9e00b936a49ea26e2f1c3892997a Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Fri, 19 Jun 2026 14:53:01 +0200 Subject: [PATCH 01/64] Harden deployment readiness --- .dockerignore | 29 + .env.example | 32 + .github/workflows/ci.yml | 32 +- .gitignore | 24 + Dockerfile | 30 + Makefile | 17 +- README.md | 159 +- docker-compose.yml | 133 + elasticsearch/.env | 29 - elasticsearch/.env.example | 12 + elasticsearch/apptainer-run-es.sh | 6 + elasticsearch/certs/ca.crt | 20 - elasticsearch/certs/ca.zip | Bin 2517 -> 0 bytes elasticsearch/certs/ca/ca.crt | 20 - elasticsearch/certs/ca/ca.key | 27 - elasticsearch/certs/certs.zip | Bin 7601 -> 0 bytes elasticsearch/certs/es01/ca.crt | 0 elasticsearch/certs/es01/es01.crt | 20 - elasticsearch/certs/es01/es01.key | 27 - elasticsearch/certs/es02/es02.crt | 20 - elasticsearch/certs/es02/es02.key | 27 - elasticsearch/certs/es03/es03.crt | 20 - elasticsearch/certs/es03/es03.key | 27 - elasticsearch/certs/instances.yml | 19 - elasticsearch/config/es01/ca.crt | 20 - .../es01/elasticsearch-plugins.example.yml | 27 - .../config/es01/elasticsearch.keystore | Bin 243 -> 0 bytes elasticsearch/config/es01/elasticsearch.yml | 19 - elasticsearch/config/es01/es01.crt | 20 - elasticsearch/config/es01/es01.key | 27 - elasticsearch/config/es01/jvm.options | 79 - .../config/es01/log4j2.file.properties | 279 - elasticsearch/config/es01/log4j2.properties | 193 - elasticsearch/config/es01/role_mapping.yml | 14 - elasticsearch/config/es01/roles.yml | 3 - elasticsearch/config/es01/users | 0 elasticsearch/config/es01/users_roles | 0 elasticsearch/config/es02/ca.crt | 20 - .../es02/elasticsearch-plugins.example.yml | 27 - .../config/es02/elasticsearch.keystore | Bin 243 -> 0 bytes elasticsearch/config/es02/elasticsearch.yml | 19 - elasticsearch/config/es02/es02.crt | 20 - elasticsearch/config/es02/es02.key | 27 - elasticsearch/config/es02/jvm.options | 79 - .../config/es02/log4j2.file.properties | 279 - elasticsearch/config/es02/log4j2.properties | 193 - elasticsearch/config/es02/role_mapping.yml | 14 - elasticsearch/config/es02/roles.yml | 3 - elasticsearch/config/es02/users | 0 elasticsearch/config/es02/users_roles | 0 elasticsearch/config/es03/ca.crt | 20 - .../es03/elasticsearch-plugins.example.yml | 27 - .../config/es03/elasticsearch.keystore | Bin 243 -> 0 bytes elasticsearch/config/es03/elasticsearch.yml | 19 - elasticsearch/config/es03/es03.crt | 20 - elasticsearch/config/es03/es03.key | 27 - elasticsearch/config/es03/jvm.options | 79 - .../config/es03/log4j2.file.properties | 279 - elasticsearch/config/es03/log4j2.properties | 193 - elasticsearch/config/es03/role_mapping.yml | 14 - elasticsearch/config/es03/roles.yml | 3 - elasticsearch/config/es03/users | 0 elasticsearch/config/es03/users_roles | 0 elasticsearch/docker-compose.yml | 2 +- .../elasticsearch-plugins.example.yml | 27 - elasticsearch/tmp-config/elasticsearch.yml | 2 - elasticsearch/tmp-config/jvm.options | 79 - .../tmp-config/log4j2.file.properties | 279 - elasticsearch/tmp-config/log4j2.properties | 193 - elasticsearch/tmp-config/role_mapping.yml | 14 - elasticsearch/tmp-config/roles.yml | 3 - elasticsearch/tmp-config/users | 0 elasticsearch/tmp-config/users_roles | 0 pyproject.toml | 96 +- requirements.txt | 67 +- scripts/bootstrap_data.sh | 55 +- scripts/scan_secrets.py | 58 + scripts/start_es.sh | 8 +- setup.sh | 9 +- source/Matcher/cli/bootstrap_data.py | 36 + source/Matcher/cli/healthcheck.py | 52 +- source/Matcher/cli/index_data.py | 34 + source/Matcher/cli/run.py | 17 + source/Matcher/config/config.json | 24 +- source/Matcher/config/config_loader.py | 103 +- source/Matcher/config/settings.py | 118 +- source/Matcher/main.py | 61 +- .../Matcher/models/embedding/text_embedder.py | 14 +- source/Matcher/models/llm/llm_loader.py | 8 +- source/Matcher/models/llm/llm_reranker.py | 11 +- source/Matcher/models/llm/vllm_loader.py | 6 +- source/Matcher/pipeline/cot_reasoning.py | 21 +- source/Matcher/pipeline/cot_reasoning_vllm.py | 20 +- .../Matcher/pipeline/phenopacket_processor.py | 20 +- source/Matcher/services/biomedner_service.py | 6 + .../Matcher/services/elasticsearch_service.py | 17 + source/Matcher/services/preflight.py | 139 + source/Matcher/utils/json_utils.py | 35 + source/Parser/biomedner_engine.py | 2 - source/Parser/biomedner_init.py | 16 +- ...4b6e911fbf9b42.PubTator.biomedner.PubTator | 3 - ...c7c9d4b6e911fbf9b42.PubTator.gner.PubTator | 3 - ...beb7b2abca8453.PubTator.biomedner.PubTator | 3 - ...984a2beb7b2abca8453.PubTator.gner.PubTator | 3 - ...20fe734d703c0e.PubTator.biomedner.PubTator | 3 - ...fa13120fe734d703c0e.PubTator.gner.PubTator | 3 - ...9025c3b03d8637.PubTator.biomedner.PubTator | 3 - ...c67879025c3b03d8637.PubTator.gner.PubTator | 3 - ...b49b058ee86cdc.PubTator.biomedner.PubTator | 3 - ...ef6fbb49b058ee86cdc.PubTator.gner.PubTator | 3 - ...bec4676f42fe28.PubTator.biomedner.PubTator | 3 - ...2cafebec4676f42fe28.PubTator.gner.PubTator | 3 - ...c48ecd39ab4377.PubTator.biomedner.PubTator | 3 - ...40273c48ecd39ab4377.PubTator.gner.PubTator | 3 - ...2e4c08c26f4de3.PubTator.biomedner.PubTator | 3 - ...be8482e4c08c26f4de3.PubTator.gner.PubTator | 3 - ...fe3dddfe49dace.PubTator.biomedner.PubTator | 3 - ...e7712fe3dddfe49dace.PubTator.gner.PubTator | 3 - ...a08925ae9c617c.PubTator.biomedner.PubTator | 3 - ...39b77a08925ae9c617c.PubTator.gner.PubTator | 3 - .../Parser/logs/nohup_disease_normalize.out | 3274 - source/Parser/logs/nohup_gene_normalize.out | 3229 - source/Parser/logs/nohup_gner.out | 3609 - source/Parser/logs/nohup_multi_ner.out | 5747 - ...7c9d4b6e911fbf9b42.PubTator.biomedner.json | 1 - ...5259c7c9d4b6e911fbf9b42.PubTator.gner.json | 1 - ...84a2beb7b2abca8453.PubTator.biomedner.json | 1 - ...77ba984a2beb7b2abca8453.PubTator.gner.json | 1 - ...a13120fe734d703c0e.PubTator.biomedner.json | 1 - ...5786fa13120fe734d703c0e.PubTator.gner.json | 1 - ...67879025c3b03d8637.PubTator.biomedner.json | 1 - ...f6fbb49b058ee86cdc.PubTator.biomedner.json | 1 - ...ec31ef6fbb49b058ee86cdc.PubTator.gner.json | 1 - ...cafebec4676f42fe28.PubTator.biomedner.json | 1 - ...d5532cafebec4676f42fe28.PubTator.gner.json | 1 - ...0273c48ecd39ab4377.PubTator.biomedner.json | 1 - ...e8482e4c08c26f4de3.PubTator.biomedner.json | 1 - ...89c3be8482e4c08c26f4de3.PubTator.gner.json | 1 - ...7712fe3dddfe49dace.PubTator.biomedner.json | 1 - ...ae48e7712fe3dddfe49dace.PubTator.gner.json | 1 - ...9b77a08925ae9c617c.PubTator.biomedner.json | 1 - ...e80439b77a08925ae9c617c.PubTator.gner.json | 1 - tests/test_deployment_readiness.py | 53 + tests/test_file_utils_pytest.py | 2 - tests/test_logging.py | 5 - tests/test_preflight_and_indexer.py | 135 + tests/test_schemas.py | 5 - tests/test_search_queries.py | 5 - tests/test_settings.py | 4 - utils/DataLoader/nct_ids.txt | 1 - utils/Indexer/config.json | 6 +- utils/Indexer/es_config.py | 42 + utils/Indexer/index_criteria.py | 24 +- utils/Indexer/index_trials.py | 21 +- utils/Indexer/nct_ids.txt | 109282 --------------- utils/Indexer/processed_ids.txt | 48637 ------- utils/Preprocessor/utils.py | 10 +- .../finetune_instruct/evaluate_gemma2.py | 21 +- uv.lock | 4255 +- 159 files changed, 3491 insertions(+), 179379 deletions(-) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 Dockerfile create mode 100644 docker-compose.yml delete mode 100644 elasticsearch/.env create mode 100644 elasticsearch/.env.example delete mode 100755 elasticsearch/certs/ca.crt delete mode 100755 elasticsearch/certs/ca.zip delete mode 100755 elasticsearch/certs/ca/ca.crt delete mode 100755 elasticsearch/certs/ca/ca.key delete mode 100755 elasticsearch/certs/certs.zip delete mode 100644 elasticsearch/certs/es01/ca.crt delete mode 100755 elasticsearch/certs/es01/es01.crt delete mode 100755 elasticsearch/certs/es01/es01.key delete mode 100755 elasticsearch/certs/es02/es02.crt delete mode 100755 elasticsearch/certs/es02/es02.key delete mode 100755 elasticsearch/certs/es03/es03.crt delete mode 100755 elasticsearch/certs/es03/es03.key delete mode 100755 elasticsearch/certs/instances.yml delete mode 100755 elasticsearch/config/es01/ca.crt delete mode 100644 elasticsearch/config/es01/elasticsearch-plugins.example.yml delete mode 100644 elasticsearch/config/es01/elasticsearch.keystore delete mode 100644 elasticsearch/config/es01/elasticsearch.yml delete mode 100755 elasticsearch/config/es01/es01.crt delete mode 100755 elasticsearch/config/es01/es01.key delete mode 100644 elasticsearch/config/es01/jvm.options delete mode 100644 elasticsearch/config/es01/log4j2.file.properties delete mode 100644 elasticsearch/config/es01/log4j2.properties delete mode 100644 elasticsearch/config/es01/role_mapping.yml delete mode 100644 elasticsearch/config/es01/roles.yml delete mode 100644 elasticsearch/config/es01/users delete mode 100644 elasticsearch/config/es01/users_roles delete mode 100755 elasticsearch/config/es02/ca.crt delete mode 100644 elasticsearch/config/es02/elasticsearch-plugins.example.yml delete mode 100644 elasticsearch/config/es02/elasticsearch.keystore delete mode 100644 elasticsearch/config/es02/elasticsearch.yml delete mode 100755 elasticsearch/config/es02/es02.crt delete mode 100755 elasticsearch/config/es02/es02.key delete mode 100644 elasticsearch/config/es02/jvm.options delete mode 100644 elasticsearch/config/es02/log4j2.file.properties delete mode 100644 elasticsearch/config/es02/log4j2.properties delete mode 100644 elasticsearch/config/es02/role_mapping.yml delete mode 100644 elasticsearch/config/es02/roles.yml delete mode 100644 elasticsearch/config/es02/users delete mode 100644 elasticsearch/config/es02/users_roles delete mode 100755 elasticsearch/config/es03/ca.crt delete mode 100644 elasticsearch/config/es03/elasticsearch-plugins.example.yml delete mode 100644 elasticsearch/config/es03/elasticsearch.keystore delete mode 100644 elasticsearch/config/es03/elasticsearch.yml delete mode 100755 elasticsearch/config/es03/es03.crt delete mode 100755 elasticsearch/config/es03/es03.key delete mode 100644 elasticsearch/config/es03/jvm.options delete mode 100644 elasticsearch/config/es03/log4j2.file.properties delete mode 100644 elasticsearch/config/es03/log4j2.properties delete mode 100644 elasticsearch/config/es03/role_mapping.yml delete mode 100644 elasticsearch/config/es03/roles.yml delete mode 100644 elasticsearch/config/es03/users delete mode 100644 elasticsearch/config/es03/users_roles delete mode 100644 elasticsearch/tmp-config/elasticsearch-plugins.example.yml delete mode 100644 elasticsearch/tmp-config/elasticsearch.yml delete mode 100644 elasticsearch/tmp-config/jvm.options delete mode 100644 elasticsearch/tmp-config/log4j2.file.properties delete mode 100644 elasticsearch/tmp-config/log4j2.properties delete mode 100644 elasticsearch/tmp-config/role_mapping.yml delete mode 100644 elasticsearch/tmp-config/roles.yml delete mode 100644 elasticsearch/tmp-config/users delete mode 100644 elasticsearch/tmp-config/users_roles create mode 100644 scripts/scan_secrets.py create mode 100644 source/Matcher/cli/bootstrap_data.py create mode 100644 source/Matcher/cli/index_data.py create mode 100644 source/Matcher/cli/run.py create mode 100644 source/Matcher/services/preflight.py create mode 100644 source/Matcher/utils/json_utils.py delete mode 100644 source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.biomedner.PubTator delete mode 100644 source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.gner.PubTator delete mode 100644 source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.biomedner.PubTator delete mode 100644 source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.gner.PubTator delete mode 100644 source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.biomedner.PubTator delete mode 100644 source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.gner.PubTator delete mode 100644 source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.biomedner.PubTator delete mode 100644 source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.gner.PubTator delete mode 100644 source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.biomedner.PubTator delete mode 100644 source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.gner.PubTator delete mode 100644 source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.biomedner.PubTator delete mode 100644 source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.gner.PubTator delete mode 100644 source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.biomedner.PubTator delete mode 100644 source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.gner.PubTator delete mode 100644 source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.biomedner.PubTator delete mode 100644 source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.gner.PubTator delete mode 100644 source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.biomedner.PubTator delete mode 100644 source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.gner.PubTator delete mode 100644 source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.biomedner.PubTator delete mode 100644 source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.gner.PubTator delete mode 100644 source/Parser/logs/nohup_disease_normalize.out delete mode 100644 source/Parser/logs/nohup_gene_normalize.out delete mode 100644 source/Parser/logs/nohup_gner.out delete mode 100644 source/Parser/logs/nohup_multi_ner.out delete mode 100644 source/Parser/output/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.biomedner.json delete mode 100644 source/Parser/output/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.gner.json delete mode 100644 source/Parser/output/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.biomedner.json delete mode 100644 source/Parser/output/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.gner.json delete mode 100644 source/Parser/output/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.biomedner.json delete mode 100644 source/Parser/output/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.gner.json delete mode 100644 source/Parser/output/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.biomedner.json delete mode 100644 source/Parser/output/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.biomedner.json delete mode 100644 source/Parser/output/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.gner.json delete mode 100644 source/Parser/output/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.biomedner.json delete mode 100644 source/Parser/output/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.gner.json delete mode 100644 source/Parser/output/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.biomedner.json delete mode 100644 source/Parser/output/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.biomedner.json delete mode 100644 source/Parser/output/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.gner.json delete mode 100644 source/Parser/output/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.biomedner.json delete mode 100644 source/Parser/output/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.gner.json delete mode 100644 source/Parser/output/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.biomedner.json delete mode 100644 source/Parser/output/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.gner.json create mode 100644 tests/test_deployment_readiness.py create mode 100644 tests/test_preflight_and_indexer.py delete mode 100644 utils/DataLoader/nct_ids.txt create mode 100644 utils/Indexer/es_config.py delete mode 100644 utils/Indexer/nct_ids.txt delete mode 100644 utils/Indexer/processed_ids.txt diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..408dc51c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,29 @@ +.git +.github +.venv +.pytest_cache +.ruff_cache +__pycache__ +*.pyc +*.pyo +*.log +.env +.env.* +!/.env.example +data/ +results/ +models/ +logs/ +elasticsearch/certs/ +elasticsearch/config/ +elasticsearch/data/ +elasticsearch/data1/ +elasticsearch/logs/ +elasticsearch/sif/ +elasticsearch/tmp-config/ +source/Parser/input/ +source/Parser/output/ +source/Parser/logs/ +source/Parser/models/ +source/Parser/resources/ +utils/Indexer/*.log diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..e884de1d --- /dev/null +++ b/.env.example @@ -0,0 +1,32 @@ +# Copy this file to .env for local TrialMatchAI runtime configuration. +# Do not commit .env. + +TRIALMATCHAI_ES_HOST=https://localhost:9200 +TRIALMATCHAI_ES_USERNAME=elastic +TRIALMATCHAI_ES_PASSWORD=change-me-strong-password +TRIALMATCHAI_ES_CA_CERTS=elasticsearch/certs/ca/ca.crt +TRIALMATCHAI_ES_AUTO_START=false +KIBANA_PASSWORD=change-me-strong-password +STACK_VERSION=8.13.4 +CLUSTER_NAME=trialmatchai-local +ES_PORT=9200 +KIBANA_PORT=5601 +LICENSE=basic +MEM_LIMIT=2147483648 + +TRIALMATCHAI_PATIENTS_DIR=example +TRIALMATCHAI_OUTPUT_DIR=results +TRIALMATCHAI_TRIALS_JSON_FOLDER=data/trials_jsons +TRIALMATCHAI_INDEX_TRIALS=clinical_trials +TRIALMATCHAI_INDEX_TRIALS_ELIGIBILITY=trials_eligibility + +TRIALMATCHAI_MODEL_BASE_MODEL=microsoft/phi-4 +TRIALMATCHAI_MODEL_COT_ADAPTER_PATH=models/finetuned_phi_reasoning +TRIALMATCHAI_MODEL_RERANKER_MODEL_PATH=google/gemma-2-2b-it +TRIALMATCHAI_MODEL_RERANKER_ADAPTER_PATH=models/finetuned_gemma2 +TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false +TRIALMATCHAI_COT_BACKEND=vllm + +TRIALMATCHAI_BIOMEDNER_AUTO_START=false +TRIALMATCHAI_LOG_LEVEL=INFO +TRIALMATCHAI_LOG_JSON=1 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e59eeb31..87d32d4f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,18 +2,13 @@ name: CI on: push: - branches: [main, dev, mikael-clean] + branches: [main, dev, deployment-readiness-audit] pull_request: branches: [main, dev] workflow_dispatch: jobs: - test: - strategy: - matrix: - python-version: ["3.11", "3.12"] - fail-fast: false - + deployment-readiness: runs-on: ubuntu-latest steps: @@ -26,10 +21,29 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: ${{ matrix.python-version }} + python-version: "3.11" - name: Install dependencies run: uv sync --frozen + - name: Validate lockfile + run: uv lock --check + + - name: Lint + run: uv run ruff check . + - name: Run tests - run: uv run pytest -v \ No newline at end of file + run: uv run pytest -v + + - name: Secret scan + run: uv run python scripts/scan_secrets.py + + - name: Dependency audit + # vLLM 0.23 pins torch 2.11.0; CVE-2025-3000 has no fixed version listed. + run: uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 + + - name: Validate Compose + run: docker compose config + + - name: Build Docker image + run: docker build . diff --git a/.gitignore b/.gitignore index e21d4329..c6afa6c8 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,10 @@ src/ ablation/ logs/ *.log +.env +.env.* +!.env.example +!elasticsearch/.env.example # ============================ # Finetuning ignore rules @@ -29,11 +33,16 @@ utils/finetuning/finetune_ner # ============================ # ElasticSearch artifacts # ============================ +elasticsearch/.env +elasticsearch/certs/ +elasticsearch/config/ +elasticsearch/tmp-config/ elasticsearch/sif/ elasticsearch/data1/ elasticsearch/data/ elasticsearch/logs/ elasticsearch/sif/*.sif +*.keystore # ============================ # Parser artifacts @@ -43,13 +52,28 @@ source/Parser/resources/ source/Parser/models/ source/Parser/input/ source/Parser/output/ +source/Parser/logs/ Parser/logs/ +# ============================ +# Generated indexing state +# ============================ +utils/DataLoader/nct_ids.txt +utils/Indexer/nct_ids.txt +utils/Indexer/processed_ids.txt +utils/Indexer/*.log + # ============================ # Python cache # ============================ __pycache__/ *.py[cod] +.pytest_cache/ +.ruff_cache/ +.venv/ +build/ +dist/ +*.egg-info/ # ============================ # Temporary / cache files diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..62290d7a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,30 @@ +FROM --platform=linux/amd64 python:3.11-slim AS runtime + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + UV_SYSTEM_PYTHON=1 \ + PATH="/app/.venv/bin:${PATH}" + +WORKDIR /app + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bash \ + build-essential \ + ca-certificates \ + curl \ + git \ + unzip \ + && rm -rf /var/lib/apt/lists/* \ + && pip install --no-cache-dir uv + +COPY pyproject.toml uv.lock README.md LICENSE ./ +COPY source ./source +COPY scripts ./scripts +COPY utils ./utils + +RUN uv sync --frozen --no-dev --extra gpu + +VOLUME ["/app/data", "/app/models", "/app/results"] + +CMD ["trialmatchai-healthcheck"] diff --git a/Makefile b/Makefile index 91321012..2f3f1b4d 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: venv sync test lock lint healthcheck bootstrap start-es index setup +.PHONY: venv sync sync-gpu test lock lint audit healthcheck bootstrap start-es index run setup venv: uv venv @@ -6,6 +6,9 @@ venv: sync: uv sync +sync-gpu: + uv sync --extra gpu + test: uv run pytest @@ -15,17 +18,23 @@ lock: lint: uv run python -m ruff check . +audit: + uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 + healthcheck: - uv run trialmatchai-healthcheck --config Matcher/config/config.json --start-es + uv run trialmatchai-healthcheck bootstrap: - bash scripts/bootstrap_data.sh + uv run trialmatchai-bootstrap-data start-es: bash scripts/start_es.sh index: - bash scripts/index_data.sh + uv run trialmatchai-index + +run: + uv run trialmatchai-run setup: bash setup.sh diff --git a/README.md b/README.md index 86cc9cd4..ea70958d 100644 --- a/README.md +++ b/README.md @@ -2,106 +2,151 @@ Logo -TrialMatchAI is an AI-driven system for matching patients to relevant clinical trials. It combines retrieval (BM25/vector search), NLP, and LLM-based reasoning to produce transparent, ranked trial recommendations. +TrialMatchAI is a batch-oriented clinical trial matching pipeline. It combines Elasticsearch retrieval, biomedical NLP, embeddings, LLM reranking, and eligibility reasoning to produce ranked trial recommendations with criterion-level explanations. ## Disclaimer -This software is provided for research and informational purposes only. It is not medical advice and must not replace consultation with qualified healthcare professionals. -## Key Features -- AI-powered matching of patient profiles to clinical trial eligibility criteria. -- Two-stage retrieval (BM25 + vector) with optional reranking. -- Explainable recommendations and criterion-level insights. -- Scalable Elasticsearch-backed indexing. -- Modular pipelines for indexing, retrieval, and reasoning. +This software is for research and informational use only. It is not medical advice, is not a medical device, and must not replace review by qualified healthcare professionals. + +## Deployment Target + +The supported v1 deployment path is a single Linux GPU server or VM with Docker Compose for Elasticsearch and a containerized TrialMatchAI worker. HPC/Apptainer support remains available through the scripts under `elasticsearch/`, but production runtime does not auto-start local services by default. ## Requirements -- OS: Linux or macOS -- Python: 3.8+ -- Java: required for NER/normalization components -- Elasticsearch: Docker Compose or Apptainer -- GPU: NVIDIA gpu with at least 40 GB of VRAM is recommended for large-scale processing -- Disk space: 100 GB+ for datasets and indices - -## Quickstart (uv recommended) -1) Install dependencies + +- Python 3.11 +- `uv` recommended, or `pip` with editable install +- Docker Compose for the default Elasticsearch deployment +- NVIDIA GPU with enough VRAM for the selected LLM backend +- 100 GB+ disk space for datasets, models, indices, and results +- Java for BioMedNER/normalization components when those services are enabled + +## Security First + +No real credentials, generated TLS keys, Elasticsearch keystores, Parser outputs, or local indexing state should be committed. Copy templates and rotate any previously exposed credentials before deployment: + +```bash +cp .env.example .env +cp elasticsearch/.env.example elasticsearch/.env +``` + +Set strong local values for `TRIALMATCHAI_ES_PASSWORD`, `ELASTIC_PASSWORD`, and `KIBANA_PASSWORD`. + +Dependency auditing currently ignores `CVE-2025-3000` because vLLM 0.23 pins Torch 2.11.0 and the advisory has no fixed Torch version listed. Revisit that exception whenever upgrading vLLM or Torch. + +## Quickstart + +Install deployment dependencies: + +```bash +uv sync --extra gpu +``` + +For local development, tests, healthchecks, or `TRIALMATCHAI_COT_BACKEND=default`, the default dependency set is enough: + ```bash uv sync ``` -2) Ensure Elasticsearch credentials are configured -- If using Apptainer, set `ELASTIC_PASSWORD` in `elasticsearch/.env`. -- For the runtime pipeline, set `TRIALMATCHAI_ES_PASSWORD` in your environment. +Optional tooling is split out of the default runtime: -3) Start Elasticsearch (auto-start supported) ```bash -trialmatchai-healthcheck --config Matcher/config/config.json --start-es +uv sync --extra llm # OpenAI/LangChain data-generation utilities +uv sync --extra training # fine-tuning and evaluation utilities ``` -4) Run the pipeline +Start Elasticsearch with the root Compose stack: + ```bash -python -m Matcher.main +docker compose up -d elasticsearch ``` -Results are written under `results/`. +Run a healthcheck: -## One-time Provisioning (data + models + indexing) -You can run the all-in-one bootstrap script: ```bash -./setup.sh +uv run trialmatchai-healthcheck ``` -Or run steps individually: +Provision data, models, and indices: + ```bash -bash scripts/bootstrap_data.sh -bash scripts/start_es.sh -bash scripts/index_data.sh +uv run trialmatchai-bootstrap-data +uv run trialmatchai-index ``` -## Package Installation (pip fallback) +Run the batch matcher: + ```bash -pip install -e . +uv run trialmatchai-run ``` -## Configuration Overrides -Use environment variables or a `.env` file to override defaults: +Results are written under `results/`. + +## Docker Worker + +Build and run the worker healthcheck through Compose: + ```bash -# Elasticsearch -TRIALMATCHAI_ES_HOST=https://localhost:9200 -TRIALMATCHAI_ES_USERNAME=elastic -TRIALMATCHAI_ES_PASSWORD=YourNewPassword -TRIALMATCHAI_ES_AUTO_START=true -TRIALMATCHAI_ES_START_SCRIPT=elasticsearch/apptainer-run-es.sh -TRIALMATCHAI_ES_START_TIMEOUT=600 +docker compose build trialmatchai-worker +docker compose up trialmatchai-worker +``` -# Embedder -TRIALMATCHAI_EMBEDDER_MODEL_NAME=BAAI/bge-m3 +To run the full pipeline in the container after provisioning data/models/indices: -# Logging -TRIALMATCHAI_LOG_LEVEL=INFO -TRIALMATCHAI_LOG_JSON=0 +```bash +docker compose run --rm trialmatchai-worker trialmatchai-run ``` -Note: `Matcher/config/config.json` ships with a placeholder password (`CHANGE_ME`). Use env vars for production. +## Configuration + +Configuration defaults live in `source/Matcher/config/config.json`. Runtime overrides use `.env` or environment variables: -## Healthcheck ```bash -trialmatchai-healthcheck --config Matcher/config/config.json --start-es +TRIALMATCHAI_ES_HOST=https://localhost:9200 +TRIALMATCHAI_ES_USERNAME=elastic +TRIALMATCHAI_ES_PASSWORD=change-me +TRIALMATCHAI_ES_CA_CERTS=elasticsearch/certs/ca/ca.crt +TRIALMATCHAI_ES_AUTO_START=false + +TRIALMATCHAI_PATIENTS_DIR=example +TRIALMATCHAI_OUTPUT_DIR=results +TRIALMATCHAI_TRIALS_JSON_FOLDER=data/trials_jsons +TRIALMATCHAI_INDEX_TRIALS=clinical_trials +TRIALMATCHAI_INDEX_TRIALS_ELIGIBILITY=trials_eligibility + +TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false +TRIALMATCHAI_BIOMEDNER_AUTO_START=false +TRIALMATCHAI_LOG_JSON=1 ``` -## Tests +Use `TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=true` only when a selected model explicitly requires custom remote code. + +## CLI Commands + +- `trialmatchai-healthcheck`: validate config, paths, Elasticsearch reachability, and optionally indices. +- `trialmatchai-bootstrap-data`: download and extract external data/model artifacts. +- `trialmatchai-index`: index prepared data into Elasticsearch. +- `trialmatchai-run`: run the batch matching pipeline. + +## Tests and Checks + ```bash +uv run ruff check . uv run pytest +uv run python scripts/scan_secrets.py +uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 +docker compose config +docker build . ``` -Integration tests (requires running ES): +Integration tests require a running Elasticsearch instance: + ```bash -TRIALMATCHAI_RUN_INTEGRATION=1 pytest -m integration +TRIALMATCHAI_RUN_INTEGRATION=1 uv run pytest -m integration ``` -## Contributing -We welcome contributions. Please open an issue or submit a PR with tests. - ## Support + - Email: abdallahmajd7@gmail.com - DOI: https://doi.org/10.5281/zenodo.18329084 - arXiv: https://arxiv.org/abs/2505.08508 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..95f63cb2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,133 @@ +services: + setup: + image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION:-8.13.4} + user: "0" + volumes: + - ./elasticsearch/certs:/usr/share/elasticsearch/config/certs + command: > + bash -c ' + if [ -z "$${TRIALMATCHAI_ES_PASSWORD}" ]; then + echo "Set TRIALMATCHAI_ES_PASSWORD in .env"; + exit 1; + fi; + if [ ! -f config/certs/ca.zip ]; then + bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip; + unzip config/certs/ca.zip -d config/certs; + fi; + if [ ! -f config/certs/certs.zip ]; then + printf "%s\n" \ + "instances:" \ + " - name: es01" \ + " dns:" \ + " - es01" \ + " - elasticsearch" \ + " - localhost" \ + " ip:" \ + " - 127.0.0.1" \ + > config/certs/instances.yml; + bin/elasticsearch-certutil cert --silent --pem + -out config/certs/certs.zip + --in config/certs/instances.yml + --ca-cert config/certs/ca/ca.crt + --ca-key config/certs/ca/ca.key; + unzip config/certs/certs.zip -d config/certs; + fi; + chown -R root:root config/certs; + find config/certs -type d -exec chmod 750 {} \;; + find config/certs -type f -exec chmod 640 {} \;; + ' + environment: + TRIALMATCHAI_ES_PASSWORD: ${TRIALMATCHAI_ES_PASSWORD:-} + healthcheck: + test: ["CMD-SHELL", "[ -f config/certs/es01/es01.crt ]"] + interval: 1s + timeout: 5s + retries: 120 + + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION:-8.13.4} + depends_on: + setup: + condition: service_healthy + volumes: + - ./elasticsearch/certs:/usr/share/elasticsearch/config/certs:ro + - esdata01:/usr/share/elasticsearch/data + ports: + - "${ES_PORT:-9200}:9200" + environment: + node.name: es01 + cluster.name: ${CLUSTER_NAME:-trialmatchai-local} + discovery.type: single-node + ELASTIC_PASSWORD: ${TRIALMATCHAI_ES_PASSWORD:-} + bootstrap.memory_lock: "true" + xpack.security.enabled: "true" + xpack.security.http.ssl.enabled: "true" + xpack.security.http.ssl.key: certs/es01/es01.key + xpack.security.http.ssl.certificate: certs/es01/es01.crt + xpack.security.http.ssl.certificate_authorities: certs/ca/ca.crt + xpack.security.transport.ssl.enabled: "true" + xpack.security.transport.ssl.key: certs/es01/es01.key + xpack.security.transport.ssl.certificate: certs/es01/es01.crt + xpack.security.transport.ssl.certificate_authorities: certs/ca/ca.crt + xpack.security.transport.ssl.verification_mode: certificate + xpack.license.self_generated.type: ${LICENSE:-basic} + mem_limit: ${MEM_LIMIT:-2147483648} + ulimits: + memlock: + soft: -1 + hard: -1 + healthcheck: + test: + [ + "CMD-SHELL", + "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'", + ] + interval: 10s + timeout: 10s + retries: 120 + + trialmatchai-worker: + build: . + depends_on: + elasticsearch: + condition: service_healthy + volumes: + - ./data:/app/data + - ./models:/app/models + - ./results:/app/results + - ./example:/app/example:ro + - ./elasticsearch/certs:/app/elasticsearch/certs:ro + environment: + TRIALMATCHAI_ES_HOST: https://elasticsearch:9200 + TRIALMATCHAI_ES_USERNAME: elastic + TRIALMATCHAI_ES_PASSWORD: ${TRIALMATCHAI_ES_PASSWORD:-} + TRIALMATCHAI_ES_CA_CERTS: /app/elasticsearch/certs/ca/ca.crt + TRIALMATCHAI_ES_AUTO_START: "false" + TRIALMATCHAI_BIOMEDNER_AUTO_START: "false" + TRIALMATCHAI_PATIENTS_DIR: /app/example + TRIALMATCHAI_OUTPUT_DIR: /app/results + TRIALMATCHAI_TRIALS_JSON_FOLDER: /app/data/trials_jsons + TRIALMATCHAI_LOG_JSON: "1" + command: ["trialmatchai-healthcheck"] + + kibana: + profiles: ["kibana"] + image: docker.elastic.co/kibana/kibana:${STACK_VERSION:-8.13.4} + depends_on: + elasticsearch: + condition: service_healthy + volumes: + - ./elasticsearch/certs:/usr/share/kibana/config/certs:ro + - kibanadata:/usr/share/kibana/data + ports: + - "${KIBANA_PORT:-5601}:5601" + environment: + SERVERNAME: kibana + ELASTICSEARCH_HOSTS: https://elasticsearch:9200 + ELASTICSEARCH_USERNAME: kibana_system + ELASTICSEARCH_PASSWORD: ${KIBANA_PASSWORD:-} + ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES: config/certs/ca/ca.crt + +volumes: + esdata01: + kibanadata: diff --git a/elasticsearch/.env b/elasticsearch/.env deleted file mode 100644 index e9dc0ea8..00000000 --- a/elasticsearch/.env +++ /dev/null @@ -1,29 +0,0 @@ -# Password for the 'elastic' user (at least 6 characters) -ELASTIC_PASSWORD="QQ7wWoB_WnKe*L*X9tAW" - -# Password for the 'kibana_system' user (at least 6 characters) -KIBANA_PASSWORD="QQ7wWoB_WnKe*L*X9tAW" - -# Version of Elastic products -STACK_VERSION=8.13.4 - -# Set the cluster name -CLUSTER_NAME=docker-cluster - -# Set to 'basic' or 'trial' to automatically start the 30-day trial -LICENSE=basic -#LICENSE=trial - -# Port to expose Elasticsearch HTTP API to the host -ES_PORT=9200 -#ES_PORT=127.0.0.1:9200 - -# Port to expose Kibana to the host -KIBANA_PORT=5601 -#KIBANA_PORT=80 - -# Increase or decrease based on the available host memory (in bytes) -MEM_LIMIT=1073741824 - -# Project namespace (defaults to the current folder name if not set) -#COMPOSE_PROJECT_NAME=trialmatchai diff --git a/elasticsearch/.env.example b/elasticsearch/.env.example new file mode 100644 index 00000000..cb41313d --- /dev/null +++ b/elasticsearch/.env.example @@ -0,0 +1,12 @@ +# Copy this file to elasticsearch/.env for local Elasticsearch. +# Do not commit elasticsearch/.env. + +ELASTIC_PASSWORD=change-me-strong-password +KIBANA_PASSWORD=change-me-strong-password +STACK_VERSION=8.13.4 +CLUSTER_NAME=trialmatchai-local +LICENSE=basic +ES_PORT=9200 +KIBANA_PORT=5601 +MEM_LIMIT=1073741824 +COMPOSE_PROJECT_NAME=trialmatchai diff --git a/elasticsearch/apptainer-run-es.sh b/elasticsearch/apptainer-run-es.sh index 3a6d9a55..6f22371f 100644 --- a/elasticsearch/apptainer-run-es.sh +++ b/elasticsearch/apptainer-run-es.sh @@ -29,6 +29,12 @@ ES_PORT3=$((ES_PORT1 + 2)) ELASTIC_PASSWORD="${ELASTIC_PASSWORD:?ELASTIC_PASSWORD not set in .env}" +if [ ! -f "$CERTS_DIR/ca/ca.crt" ] || [ ! -f "$CERTS_DIR/es01/es01.crt" ]; then + echo "[ERROR] Elasticsearch TLS certs are not present in $CERTS_DIR." + echo "[ERROR] Generate local certs with Docker Compose first or provide certs out of band." + exit 1 +fi + #=== PREPARE FOLDERS ===# mkdir -p "$CONFIG_DIR/es01" "$CONFIG_DIR/es02" "$CONFIG_DIR/es03" mkdir -p "$DATA_DIR/es01" "$DATA_DIR/es02" "$DATA_DIR/es03" diff --git a/elasticsearch/certs/ca.crt b/elasticsearch/certs/ca.crt deleted file mode 100755 index d8c6ffd4..00000000 --- a/elasticsearch/certs/ca.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIVAO2BMtuZgADcrNJORc/UB2rj/y6JMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI0MDUyNzE5NTg0OVoXDTI3MDUyNzE5NTg0OVowNDEyMDAG -A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCat4tgRPHYWsZrygCUNASc -cc4wGONcNzRkn7LRbF+jWVcx3G8SLK1uY5w0jdC+mioRe8vIVR1amng1KtIoADxa -aV43rCNSTfPO6DsDPu9AGdoxlHrUjkpf5mPcy1hhRpVfHi01ytqSip/deA+2jShq -2naMug4o6YoqdPdiVvOrzMvuVdGeGNNrlihTHmENtI6vZp1Uq/pxZYqHhqkzlCDr -uZvhe6bLpvbbyGVpx6dJA51MuxZ6m6yEtz1fNz2fgh+2tl91hXp7WaeMDpGHaezq -cCbiHSMG9vXhU8fsgTTB2NONiGiH/635VZcTbbS9dtDeUe4Y/vEY0uURU2dyBF3L -AgMBAAGjUzBRMB0GA1UdDgQWBBRSHBPSZApefVLWs8FZB/ROLMos9DAfBgNVHSME -GDAWgBRSHBPSZApefVLWs8FZB/ROLMos9DAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA4IBAQB2Hfsz3RT9Y+th7haS4C6yI4ZnwirEehexM9RjjIWlCS/i -c3IZ1dwJlR1pI6jeFjhF6iEnWY24cxH2GvZrynIrwACSJBibzVuMa/4+7pcF2xQS -L9H+18StNK2S51a1xxzfhlQpTizea05rnLpkhJP52PfUaoWD42kPz8t8ITafD5ay -IzKiz+aL1+elT+Tlmcmi2k0s+sJahLrcI62jUsmUB474fsv/00DWEBaSRKVXCy4D -pUv2PKV+EElHiM65UlMxZ7q5KBWsCvotILrIeP7rJZE3uloe6UTeZ0CSTDiQNCOb -jonBnKm6Zw7z2Io9Jl0yJJg0kl8tc8OFsV85p9RO ------END CERTIFICATE----- diff --git a/elasticsearch/certs/ca.zip b/elasticsearch/certs/ca.zip deleted file mode 100755 index 7e0b64ed15179d46f16852406928a15e8805f476..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2517 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 Q1OPa9SKjU}|KGR&0jr~ke*gdg diff --git a/elasticsearch/certs/ca/ca.crt b/elasticsearch/certs/ca/ca.crt deleted file mode 100755 index d8c6ffd4..00000000 --- a/elasticsearch/certs/ca/ca.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIVAO2BMtuZgADcrNJORc/UB2rj/y6JMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI0MDUyNzE5NTg0OVoXDTI3MDUyNzE5NTg0OVowNDEyMDAG -A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCat4tgRPHYWsZrygCUNASc -cc4wGONcNzRkn7LRbF+jWVcx3G8SLK1uY5w0jdC+mioRe8vIVR1amng1KtIoADxa -aV43rCNSTfPO6DsDPu9AGdoxlHrUjkpf5mPcy1hhRpVfHi01ytqSip/deA+2jShq -2naMug4o6YoqdPdiVvOrzMvuVdGeGNNrlihTHmENtI6vZp1Uq/pxZYqHhqkzlCDr -uZvhe6bLpvbbyGVpx6dJA51MuxZ6m6yEtz1fNz2fgh+2tl91hXp7WaeMDpGHaezq -cCbiHSMG9vXhU8fsgTTB2NONiGiH/635VZcTbbS9dtDeUe4Y/vEY0uURU2dyBF3L -AgMBAAGjUzBRMB0GA1UdDgQWBBRSHBPSZApefVLWs8FZB/ROLMos9DAfBgNVHSME -GDAWgBRSHBPSZApefVLWs8FZB/ROLMos9DAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA4IBAQB2Hfsz3RT9Y+th7haS4C6yI4ZnwirEehexM9RjjIWlCS/i -c3IZ1dwJlR1pI6jeFjhF6iEnWY24cxH2GvZrynIrwACSJBibzVuMa/4+7pcF2xQS -L9H+18StNK2S51a1xxzfhlQpTizea05rnLpkhJP52PfUaoWD42kPz8t8ITafD5ay -IzKiz+aL1+elT+Tlmcmi2k0s+sJahLrcI62jUsmUB474fsv/00DWEBaSRKVXCy4D -pUv2PKV+EElHiM65UlMxZ7q5KBWsCvotILrIeP7rJZE3uloe6UTeZ0CSTDiQNCOb -jonBnKm6Zw7z2Io9Jl0yJJg0kl8tc8OFsV85p9RO ------END CERTIFICATE----- diff --git a/elasticsearch/certs/ca/ca.key b/elasticsearch/certs/ca/ca.key deleted file mode 100755 index 48dca6bf..00000000 --- a/elasticsearch/certs/ca/ca.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAmreLYETx2FrGa8oAlDQEnHHOMBjjXDc0ZJ+y0Wxfo1lXMdxv -EiytbmOcNI3QvpoqEXvLyFUdWpp4NSrSKAA8WmleN6wjUk3zzug7Az7vQBnaMZR6 -1I5KX+Zj3MtYYUaVXx4tNcrakoqf3XgPto0oatp2jLoOKOmKKnT3Ylbzq8zL7lXR -nhjTa5YoUx5hDbSOr2adVKv6cWWKh4apM5Qg67mb4Xumy6b228hlacenSQOdTLsW -epushLc9Xzc9n4IftrZfdYV6e1mnjA6Rh2ns6nAm4h0jBvb14VPH7IE0wdjTjYho -h/+t+VWXE220vXbQ3lHuGP7xGNLlEVNncgRdywIDAQABAoIBADTHPSv7iPbRzJNT -pwvnjNUje39r1g+Mo3paAiGv0xZBsV2IgXlVNVqNb2l8IUQMCiLJtNQjuO5B+JTG -hUdxASWkgSgDuE7o2a1xCkSKsQoQZ573NEmTOqrpSJK26XDRp735aNnLV/GaiXt+ -6/lNwQZmfP93rsHlHSVrnkJ1QA2QOJXwLiBl6FYDtSX/FMlIvDdEFQJw0ueizUpq -jdjyI0yBDhCBtYbiiPaqqn/JdDLmJh6g5fOQrhZ7ugV28Ko8xiHN8n/X4Dgfil8m -qOizYuwEfTuoTf5b0pB3c9MKiug2URinVIvlSSTmYU5cmMDwUI2OfKABwKxgrJ6g -QcgdJUUCgYEAtxhP7R0CkXTziriw4WH5asqPeQsDaokfo2AGv+OgX2TzR9rYofWe -gA+yv/JtV8N0We7lWEU3kwjMrjqPo+FVnMkJB9Ns+EpArYt6VI5jXTc9wv9+Ubg3 -bmqMZy4vK/84bukTJmP1kEkBC6uKxTa6b5agZ91ylmzp1EihgtoblRcCgYEA2FKJ -O41p0Tg7DXskOMTalYmV4tuIPnbCQnL3zdYKkxpvP/DEsgFs2WuznTR7CA8UcQpn -dZf7INPvXNrSAFzsQEFUgOMaeL6whzBD/X8uDzqO0ACJAgAT1ixsPNKD9dipOsjJ -XL0JIu/WDnr+RewY/oYmxGBP/rJ3vh90D0QtFW0CgYA7HEhBfsojd6Rgtru0J9NE -HN0w8NNLg7WJIylKrgxKf+bi3c5ui0N+iJLm0TdnzBw2JKA6XS5R89dQsGtLNyZS -lbyqoCFgD2jOHmeCAO4nW/w+hgmcDGMo7JEjho+IHr9zXx/llwPibw89W0ZT4RVT -jUeAAMhLtCHRfRlXi164RQKBgQCxXrt3QPRKwDhrTVTd10sC4dUsNaT40pdltK7K -732sMDiXzOr6qYB+pXiYpbdbXEH+jfFW0k7vE9dn42PdOFPeO7L2G0BRUMmdj02w -RN+XTQRcOJQeN8IMElCNbm8U3ZmkwY2ZpMYhB1YUeXSUEIpN5+FRk0cEJ4FXOqMH -AXeV4QKBgQCYKWjq4XRLege8h+Cvyi55Kaj12nDc90Oorywx75GrxixEWRbye4aF -qCZg0D+C474MG2C/n58arGuT7jwgX7LDvZVDvHjNcAsLP8JmrvXgUMMHximjdVmP -XokfEI8o2GjsCf0pbgp51jSDV07yBjRh3kxP70J20MC3jLpk+uWt4g== ------END RSA PRIVATE KEY----- diff --git a/elasticsearch/certs/certs.zip b/elasticsearch/certs/certs.zip deleted file mode 100755 index 853422ef7b6fed3f6328d4dbcbf186c24afd312f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7601 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 diff --git a/elasticsearch/certs/es01/ca.crt b/elasticsearch/certs/es01/ca.crt deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/certs/es01/es01.crt b/elasticsearch/certs/es01/es01.crt deleted file mode 100755 index 76b8cdf2..00000000 --- a/elasticsearch/certs/es01/es01.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDQDCCAiigAwIBAgIUKzkAgntIW7y5IHFE2MoxxHoLvGkwDQYJKoZIhvcNAQEL -BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l -cmF0ZWQgQ0EwHhcNMjQwNTI3MTk1ODUwWhcNMjcwNTI3MTk1ODUwWjAPMQ0wCwYD -VQQDEwRlczAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmpXRQ+TH -n+VpNZwD+7+9R7IOhisKjCEGKMqSARr5wQPlulxLDlHoO7pRLw6JcEXmLn4tx+Qu -Lkkm9pFAADYnIcCljzRkFHADKuo+P7BG6AZ+6l1UVHwya6iUaERda3+VClTHPzRo -Pn8TRdX78+cY7dAzme0noosw8WCgpL2HgiYciFiwle80OKaeiVxvRNJ+6n36a/q4 -lgLx9wQoJvox/2OCP3318UY1SgA2AO9kFk0zDTvJji9ESSz6d+6LCB73Bk2cKWx6 -q2pVoSTNPhkC5mD9E/zhuXSACfY3H85GZksJ4jztdF1UcsOsrjYsMwwxHH4BwVKa -k97ERJmICSLV/wIDAQABo28wbTAdBgNVHQ4EFgQUuAQmumKYnqzgVBFsMKNd3Wk5 -bPgwHwYDVR0jBBgwFoAUUhwT0mQKXn1S1rPBWQf0TizKLPQwIAYDVR0RBBkwF4IE -ZXMwMYcEfwAAAYIJbG9jYWxob3N0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD -ggEBAHwCJLqUnUIUV21HxVcEThmOWnxFZzA7VjahpIEb/RaK84Uc/8Cxv7vlVW1T -2mgOFQWpi98lew5K7r9GGuA509TaWuwaWAoqdhJL1T2lNa9eA8XtfRZweedqdw5P -1lCwR4vpJr5vVVEZwJTjKCRg5429owjoqEqPHSYbftVQSC8FlKIjnzNO9b5dHmfJ -y9DV5jYu5zfHZHPHXoksmn7MzLpfE6jA2euI7FSQfzPbkfoaBWBU/ZyvQb/taCyY -LH7JNtTf4Tm+yQe8g1m3hhFOraoQG0W09Ub+wpph50Q12sbHddX0e+ekhcu3+8HM -H4Y2SB9Pv5fsKvXtxix02Xu2m0s= ------END CERTIFICATE----- diff --git a/elasticsearch/certs/es01/es01.key b/elasticsearch/certs/es01/es01.key deleted file mode 100755 index c2c59819..00000000 --- a/elasticsearch/certs/es01/es01.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEogIBAAKCAQEAmpXRQ+THn+VpNZwD+7+9R7IOhisKjCEGKMqSARr5wQPlulxL -DlHoO7pRLw6JcEXmLn4tx+QuLkkm9pFAADYnIcCljzRkFHADKuo+P7BG6AZ+6l1U -VHwya6iUaERda3+VClTHPzRoPn8TRdX78+cY7dAzme0noosw8WCgpL2HgiYciFiw -le80OKaeiVxvRNJ+6n36a/q4lgLx9wQoJvox/2OCP3318UY1SgA2AO9kFk0zDTvJ -ji9ESSz6d+6LCB73Bk2cKWx6q2pVoSTNPhkC5mD9E/zhuXSACfY3H85GZksJ4jzt -dF1UcsOsrjYsMwwxHH4BwVKak97ERJmICSLV/wIDAQABAoIBABDs2Vo1KNQtcoz/ -lYIRVsCMUsHG4aNBFGMP9tdvJCxJaHQ0mbUqK6KqfiwIS+0CgjbR8uJBbfr8YGs7 -sQW06CjuZlIdGt4P+5DNz936R3EtEOVJLawIYx7deM5HufDEqcVVTfFyI/2/vRT2 -3lywj06ubo/qYt4NnmC3Qy92XulVZknvjaolGhqVlYGbHQITSI47KNErFX0KiL77 -dYkO3dY75XIc4NsECk5UyFRyu1Mg6dkG+a8HahPVmX7ctq+bytQ3r9hpwXrY1MZV -RXtEW81kwB0yJV3GmXJRrqKZR+vvpqMRIQhmLZgr0XkKIshBuBneAo4cUX7MVgAX -JcdHsMUCgYEA0P7NgUL4xg9Xtpygf5DWldcCO/cy6yoOkXEJ6d9xOhQny24qi0MN -uOuyCCF4UQnhdEYcR9aY6YOwviQluq6roQT7g1Jex20F2iaaLVNdxaGi5s9nmzgp -CVfBdLK798GCu/yrRwhy1EW6kaQdIJ9D0K1Fkm8SFOAuQY0gKgbK6BsCgYEAvVpH -AKtcUJiqyenkvyhnxmpZXhS93F2qSJnzBJ/2wAuQ7BCxw/vW7vw1XDDy+IKFXLQ4 -eRnbIs2hk+FBAgAQDJl26dUELaE+BKsmU1XACRBrnpLZXNd0ssLc1dMFewkxURmT -krWCku32OjVVnPuIALE4Bv9hBSvotYFmf7DXL+0CgYBU05bFqFEg0olfbSMXo8n0 -91fIzwSzvlY7Yg4MBs0GLbgZMZXDAGxJaiDQfAVBnykK8In5/ngCD5llE3bc1piC -umr7Witt9iox6Qka7INa+8gKtpPuxFSjniK/Iux4GurdMiiypBM3ZTXcdyf7XalA -wZNDZCGKp5MeuBEd/bPNkQKBgAlVzRBUYm26yRjBRjzCYjNfBN7liOK3X3DK3jdJ -J6IaL9/jhtARt2v61SqhYykrTiXe4LXft3UEzEV9InZVyHTGkB1BGj6hp2wVgAM1 -xAzuWU/tD3hLSv6RKtAD4k5Jirvj1emytyhFQRFnlbvyjqbyFcAKkR7vJj7kjUgY -UNOVAoGACkTgg+e0Cxu/rzPqJTcwB7gXikBK9gXegi9fXv2Q8q860Y37MXkTCStF -elsIix7jrUokjXWG8Gc44GfJUCv+WLZCeqaL3oS+ZznfbESfiLwEecu/6jsb3SEk -Swx3Bb5X8q0/S0kD3ShMVPFnFIO37P37efMFaYJ2Fs1C3FpWfwM= ------END RSA PRIVATE KEY----- diff --git a/elasticsearch/certs/es02/es02.crt b/elasticsearch/certs/es02/es02.crt deleted file mode 100755 index 44db9c41..00000000 --- a/elasticsearch/certs/es02/es02.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDQDCCAiigAwIBAgIUTk8VxELi8BcE+Q1QJDjl1ijZS0gwDQYJKoZIhvcNAQEL -BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l -cmF0ZWQgQ0EwHhcNMjQwNTI3MTk1ODUwWhcNMjcwNTI3MTk1ODUwWjAPMQ0wCwYD -VQQDEwRlczAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyaaCYcE+ -eDk4++1N2j0edhOQeJtRlVAY4okWx/GKZ8bUrFgWeXDmYnty8n2BjOsYy5AikELe -ZhsA6xWqV7/l8Tmhfv27e1qsxB1zNBurFQ4B2/O7YXHRXs2uKJqKb2Sj1+2GM6xQ -xZqZQS39MX2rKmENhud8kyDZUpQfqlUNE+QgRjMKMvB+7U9lrTfP/XUW2QosY+dz -Uub1K6pWf/avccf3WJd6R8aTYv2KDQjFsR6sib/RWHXTvtIDQlynQW4SFxSbhplX -DNN8nkaHa1lygAIHcKu77KulFrbTsJZ+hJIMjKn4HYsMuCH2KYDK+1cZToJ1MDvo -A9Xa2yWjbXWaiwIDAQABo28wbTAdBgNVHQ4EFgQUFSfOsv8EnRbLQI9pMbKNrRh0 -wM8wHwYDVR0jBBgwFoAUUhwT0mQKXn1S1rPBWQf0TizKLPQwIAYDVR0RBBkwF4cE -fwAAAYIEZXMwMoIJbG9jYWxob3N0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD -ggEBAAGEWLu8MtZiav5wxvCb0iu5zUOPDSRibK/wTLtLhOeu4LBqyB9MYuT9wRr3 -XKsKuPV6NHSzUdkAK5wTqXsX3b5FXD6+B7PUMB31g62YnauDdTydszR1NxMp9LB+ -8YKb71JBy9iuBNk4OkVhmi9Q3fsQxchAWCtjI8aEa08PYq4XKAHvS1Hp2c4xP57+ -ZBxZS2ASFZo9EJ6BNwErF2OdcjIOQEU4YYebNARwdoY8taFNTBMQfbJRVRRdRCw5 -+n0fGB77j1nEmwLJSYMVkL+b44XUu7OIOiv2gRmvE2ZrQgIcj0hEYKtQpXFfLB+6 -OVv7xEYk2yWjJNBTiOKboVTb1U8= ------END CERTIFICATE----- diff --git a/elasticsearch/certs/es02/es02.key b/elasticsearch/certs/es02/es02.key deleted file mode 100755 index 14209814..00000000 --- a/elasticsearch/certs/es02/es02.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAyaaCYcE+eDk4++1N2j0edhOQeJtRlVAY4okWx/GKZ8bUrFgW -eXDmYnty8n2BjOsYy5AikELeZhsA6xWqV7/l8Tmhfv27e1qsxB1zNBurFQ4B2/O7 -YXHRXs2uKJqKb2Sj1+2GM6xQxZqZQS39MX2rKmENhud8kyDZUpQfqlUNE+QgRjMK -MvB+7U9lrTfP/XUW2QosY+dzUub1K6pWf/avccf3WJd6R8aTYv2KDQjFsR6sib/R -WHXTvtIDQlynQW4SFxSbhplXDNN8nkaHa1lygAIHcKu77KulFrbTsJZ+hJIMjKn4 -HYsMuCH2KYDK+1cZToJ1MDvoA9Xa2yWjbXWaiwIDAQABAoIBABGFNZ6FD0ab1i8m -uFUbaq+gqzScw3ML3Ar8FUN3DEBQXr8WAjyNSinJXGc5mg133xYku6lkHfWqJ/jE -+kwYgMPmRCQIALJK4mhBv3Y0vIxzmfFrP7R2PVZAManBJQELsflQtRB9Ssv4eZNX -tGrd5obOmuxwkCV/vPzMoORdnRQas5a0i0ZtlCjv8jirX/t1VOLlsvoaIGs6TbTm -op3s7zi9ETvnCnZ6VKzsSugwUGCRnFqsIgUt8PUpKPXfgvzdRc5/j1NNWocfwLlH -lTSipk4n64KPevvG/deWw6AnnYLSosIQM4MCC9JrgZ1DhacGs23L7WWbz/1JC+oT -AgEP9FkCgYEAz3pj3PdibwhM/VWuOxwWWR4YS8UJZx1lcFPXzgE4t7V+/YSKuUtL -ro2plGUG1Ji5SgsS0exH/mzaF8OhHX1Jt+eGEVJyzdfJN8S1lomVtOoMyjkyBgxM -I4bajIB1Sz9aipKwVAfise9f6Ga3E0/ET9iq6i0/R1wK5EwgdOCxkBMCgYEA+M84 -W4S5P4EyfaeLOw+puyZcgG0ftVVqlAHdkdQlQLXCt3ijI008A0f5GVqf2tTLVrAj -Ub39aDOrM1wA6FWCqsa8LEbtdD4d1xNDi8DegDvjjjmU1z8ULjxSu8iSikhOCw2G -vyXHsr04DYBg4OURD9Pg8hHGtANZSNtc6CwISqkCgYBogbqZi9Z+HQ1Csgy/42by -XrFYQRh6Yxk8Wk8iigT6rCYaJtAFg4LMmrincbfeEEuMm0VQjha5djTosXaPNxOR -2cHzKbeALchCGghpmkXZSedFWUf0Oe+EGaIuEWqDi5bcpATDXvF2NR/3HP3scUpt -+bIloML1+8vUsO/MT33BFwKBgQCiXR+K4Wa94UKgqwf5p7P8VAFDMXLis3XUVg9Q -DZ+txa7maYwUCl+iSIJuoCv28qwqytCRlCjcqfMLlftlof+eEAhV4IcuNybj5kdK -2LaZ+fr6IetWN2yk62qV7kJqiNqc7dvDuxTBOCdu8BrIR9NFf9+oOB9x80l9eOD9 -BVb32QKBgAjHylTABCzS+2zOwUQeMpXQnYeNhMvvvYug/mDh+GQQL7zVeSJXlNGS -PkJqE3xEoVPDOPJ+Kr8nl5jS3YGCWcWerYURd9XiX7lHx7LlOeb6LusNIm/mO563 -y2U3WPIDTdy36vnvz3FZKYIionGFYc5hRGI54GfWKbCdr9ug2Xaw ------END RSA PRIVATE KEY----- diff --git a/elasticsearch/certs/es03/es03.crt b/elasticsearch/certs/es03/es03.crt deleted file mode 100755 index 7d273002..00000000 --- a/elasticsearch/certs/es03/es03.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgIVAPF8mVPnz7n47MH0IMhGyTp8b8hJMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI0MDUyNzE5NTg1MFoXDTI3MDUyNzE5NTg1MFowDzENMAsG -A1UEAxMEZXMwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJD8MQOk -+jChQ/ukONKJ5NlmIMvxA30iEF0Dg1raRWu6JktXgl0PcQcqKSbCgQ8V/+jqIsKv -xzURuGH6PNnoeE7B7PSDW5aF8SOh2vIVCcuyqYCTfusv9Pkw0dXb0kkFF7p8wxG7 -xSyQncZxl9qEsEK3sKuR71rHnBF4r7fxuV+QV3ZLzwzJ4xTGFRd7wgrf/N7/iDXC -lrOzslTOj6BxIMQT04Jizm5/Sxcp+9gj89Loxs3Ls3cTNhaWnNl4IDQtaA8LlK2Z -8mC6+UgID3Px0ZfMcp7Qlm8lyX+loFOIFKlBm3RJ/ju566acXM0rrxMCaERxzVh6 -w/RFQ+s9ZEcorrkCAwEAAaNvMG0wHQYDVR0OBBYEFMFV0lcS1xlPM1wnUlztTiKA -2S2WMB8GA1UdIwQYMBaAFFIcE9JkCl59UtazwVkH9E4syiz0MCAGA1UdEQQZMBeH -BH8AAAGCBGVzMDOCCWxvY2FsaG9zdDAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUA -A4IBAQA3jD18KNhrXHJenPB/4FsQhiOgm684fO5mmmEZI14/V0snGIyoXCG4Tvfm -cRmRiOkNLZ79l9O2Feh3defyocED2soPJkjGbGMA6u5CW9B+32yEprfQ/JXOvKKL -zSIXUoa9h22rznuopsq8VQwIV7NFz1ATNllgyyEzKshGpk37Almso3lsX+PFX466 -SUDbNI7f3z8RYUg0uGqjepnJV0v6k5yOWStKmJ9j1uuK0rkKIBUcgOW4Fb2vyqkp -DTCtR8Q6g9+exZV+gezsOXvbf+mrVf48sOOQ0g9YkUTMHoXw/k7pQg/ixWTE6rSm -KhVWEziUuxCqaSOVgEY0qTWgKNP4 ------END CERTIFICATE----- diff --git a/elasticsearch/certs/es03/es03.key b/elasticsearch/certs/es03/es03.key deleted file mode 100755 index ff809b20..00000000 --- a/elasticsearch/certs/es03/es03.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAkPwxA6T6MKFD+6Q40onk2WYgy/EDfSIQXQODWtpFa7omS1eC -XQ9xByopJsKBDxX/6Ooiwq/HNRG4Yfo82eh4TsHs9INbloXxI6Ha8hUJy7KpgJN+ -6y/0+TDR1dvSSQUXunzDEbvFLJCdxnGX2oSwQrewq5HvWsecEXivt/G5X5BXdkvP -DMnjFMYVF3vCCt/83v+INcKWs7OyVM6PoHEgxBPTgmLObn9LFyn72CPz0ujGzcuz -dxM2Fpac2XggNC1oDwuUrZnyYLr5SAgPc/HRl8xyntCWbyXJf6WgU4gUqUGbdEn+ -O7nrppxczSuvEwJoRHHNWHrD9EVD6z1kRyiuuQIDAQABAoIBAAeRot1rLMSCfBIU -WK26aoAO8iyzawM1VrVZtu8fRfssafi08NFQOmOtXR3w5DFCwha0DRcs0LGB41D6 -HK3OPQ701hyjCZJUxmnzIS2ne4Nu0vqAuLd+dsOA5kjL2QaG2t5EH8rlNT3xBCDq -p+AjMoXJISf+eQhm3fbriKuJqwEaFoFs8gFOm7BKSzw4nFdwaBI0hO7QQng9Um8x -g27R+mJAGG+fNFJuDFD6gy2iIN+xkrNP9WGlFmEV4OoCUi1hz5YfxNRs2xCxUA3E -ggzcU0UvmLccHwz6PYK8EzTmsZUJsLRJTyG3WuNuaVTN67oMLYRv7GlGdZ998+HE -7m3KU6ECgYEAurfhPf8ACbMxR49iF62QJUzHM5xu0Qq85z6lWKHiCXWaIcqNv2mI -qnao9a5wBqEsTNNLljDlr99u8stHt+Zx3gAA1F5Pew/3quwOtaFx+zvxqrQKs6pb -cz3q9Ad8sJVthr06SW5W4OvdDGOF52EV+bcITZCetENmk9jvbN6z0ucCgYEAxsgi -enAcripDIT8uxhiEWxEtnsZunOsGWzXKcKJeg7w7cErqHRBb4liPenq3B/6sIp3r -AwPyqRIfVXZNbOpEPwoaF/1bQ9HujHuO0HEMsoeJh12KkBSBuHQXnA/X01Y6Nf0l -ZijizBE/Qc5EkWyxZx+pSTf7RVGf+1DlmKBE3V8CgYBIWUurrA0ltQtZQROvPQ9n -hJKDSxAda926dKm46DEfnTP19/hovMm503SwjcDWsMjrk8vsDFJTjW3+IgpOFbr1 -XGb14v1FH/DFh+ZDNqVlxdpkXJLw/wekZc+OcwA7pArmdJgLL/f1+y6RyFZwS0wq -kGNlOq5kBuHOU/ah5sEi7QKBgQDGiT1mbHM4wJ0rp59f2zzWd+HIowf3UgWXM7Jt -rL4ZdPcowKnzPVOITkt/WPFV2tax/GetK1RB6QfCo9XQ4monTD+jljiBFDvds8qA -BWlZJmYF/TdXkCO/xrON+4TkX0rkgWHJFyzuBIvZfdqeJKFLDiRWLMOaCFxw9eta -9TfSoQKBgEhHjogylvtkkiDIg+ArNhezYCjZ2yVPPsM8Jejh3sFpmjHHLaiw86Np -fRrxp3ealK1DXziRni+USCNM8iM6GFo2I6jBMWTJDTsc6wSyYLu4MlLTXyobZZnc -SwtvyZip2+VL4qEeg9p2c5wxbDBPdxh/8vjW9QxCeAovIr/0lth4 ------END RSA PRIVATE KEY----- diff --git a/elasticsearch/certs/instances.yml b/elasticsearch/certs/instances.yml deleted file mode 100755 index 926d7a15..00000000 --- a/elasticsearch/certs/instances.yml +++ /dev/null @@ -1,19 +0,0 @@ -instances: - - name: es01 - dns: - - es01 - - localhost - ip: - - 127.0.0.1 - - name: es02 - dns: - - es02 - - localhost - ip: - - 127.0.0.1 - - name: es03 - dns: - - es03 - - localhost - ip: - - 127.0.0.1 diff --git a/elasticsearch/config/es01/ca.crt b/elasticsearch/config/es01/ca.crt deleted file mode 100755 index d8c6ffd4..00000000 --- a/elasticsearch/config/es01/ca.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIVAO2BMtuZgADcrNJORc/UB2rj/y6JMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI0MDUyNzE5NTg0OVoXDTI3MDUyNzE5NTg0OVowNDEyMDAG -A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCat4tgRPHYWsZrygCUNASc -cc4wGONcNzRkn7LRbF+jWVcx3G8SLK1uY5w0jdC+mioRe8vIVR1amng1KtIoADxa -aV43rCNSTfPO6DsDPu9AGdoxlHrUjkpf5mPcy1hhRpVfHi01ytqSip/deA+2jShq -2naMug4o6YoqdPdiVvOrzMvuVdGeGNNrlihTHmENtI6vZp1Uq/pxZYqHhqkzlCDr -uZvhe6bLpvbbyGVpx6dJA51MuxZ6m6yEtz1fNz2fgh+2tl91hXp7WaeMDpGHaezq -cCbiHSMG9vXhU8fsgTTB2NONiGiH/635VZcTbbS9dtDeUe4Y/vEY0uURU2dyBF3L -AgMBAAGjUzBRMB0GA1UdDgQWBBRSHBPSZApefVLWs8FZB/ROLMos9DAfBgNVHSME -GDAWgBRSHBPSZApefVLWs8FZB/ROLMos9DAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA4IBAQB2Hfsz3RT9Y+th7haS4C6yI4ZnwirEehexM9RjjIWlCS/i -c3IZ1dwJlR1pI6jeFjhF6iEnWY24cxH2GvZrynIrwACSJBibzVuMa/4+7pcF2xQS -L9H+18StNK2S51a1xxzfhlQpTizea05rnLpkhJP52PfUaoWD42kPz8t8ITafD5ay -IzKiz+aL1+elT+Tlmcmi2k0s+sJahLrcI62jUsmUB474fsv/00DWEBaSRKVXCy4D -pUv2PKV+EElHiM65UlMxZ7q5KBWsCvotILrIeP7rJZE3uloe6UTeZ0CSTDiQNCOb -jonBnKm6Zw7z2Io9Jl0yJJg0kl8tc8OFsV85p9RO ------END CERTIFICATE----- diff --git a/elasticsearch/config/es01/elasticsearch-plugins.example.yml b/elasticsearch/config/es01/elasticsearch-plugins.example.yml deleted file mode 100644 index b6874e91..00000000 --- a/elasticsearch/config/es01/elasticsearch-plugins.example.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Rename this file to `elasticsearch-plugins.yml` to use it. -# -# All plugins must be listed here. If you add a plugin to this list and run -# `elasticsearch-plugin sync`, that plugin will be installed. If you remove -# a plugin from this list, that plugin will be removed when Elasticsearch -# next starts. - -plugins: - # Each plugin must have an ID. Plugins with only an ID are official plugins and will be downloaded from Elastic. - - id: example-id - - # Plugins can be specified by URL (it doesn't have to be HTTP, you could use e.g. `file:`) - - id: example-with-url - location: https://some.domain/path/example4.zip - - # Or by maven coordinates: - - id: example-with-maven-url - location: org.elasticsearch.plugins:example-plugin:1.2.3 - - # A proxy can also be configured per-plugin, if necessary - - id: example-with-proxy - location: https://some.domain/path/example.zip - proxy: https://some.domain:1234 - -# Configures a proxy for all network access. Remove this if you don't need -# to use a proxy. -proxy: https://some.domain:1234 diff --git a/elasticsearch/config/es01/elasticsearch.keystore b/elasticsearch/config/es01/elasticsearch.keystore deleted file mode 100644 index d4e6e64272bd626f05b93b31052319d000f37e69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmcD&o+B=nnv+;ul9^nbnpl*ap_iRnSzMA|l*+)sz{;>6NIC%V;fh{2-mOv7cfXvk zF1jf5`PbEV=hQfKF10Sz*ZkR&>bAT?vZ9AquOZ-@4X5Qw&3B11@j_Ma^rCk?VGy?a z&=ti4G^5ZYQap6a{Sv9_#B1q5{_(qga*2%s3ZWkN+rvsEO=h2H@7Z`{QS~gY#T;90 z^F?ks*T)&&J{n!rn>X{VVtB~Z1q(O(E}Z-Jcchlrye|uq-K#ck(>6| qJkPSGY-^jfzIdJMrroOD@m0GRCvmedT|b~P`32B6FmRfhya@o&z-7Y# diff --git a/elasticsearch/config/es01/elasticsearch.yml b/elasticsearch/config/es01/elasticsearch.yml deleted file mode 100644 index e0675344..00000000 --- a/elasticsearch/config/es01/elasticsearch.yml +++ /dev/null @@ -1,19 +0,0 @@ -node.name: es01 -path.data: /usr/share/elasticsearch/data -path.logs: /usr/share/elasticsearch/logs -network.host: 127.0.0.1 -cluster.name: docker-cluster -discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"] -cluster.initial_master_nodes: ["es01", "es02", "es03"] -bootstrap.memory_lock: false -xpack.security.enabled: true -xpack.security.http.ssl.enabled: true -xpack.security.http.ssl.key: es01.key -xpack.security.http.ssl.certificate: es01.crt -xpack.security.http.ssl.certificate_authorities: ["ca.crt"] -xpack.security.transport.ssl.enabled: true -xpack.security.transport.ssl.verification_mode: certificate -xpack.security.transport.ssl.key: es01.key -xpack.security.transport.ssl.certificate: es01.crt -xpack.security.transport.ssl.certificate_authorities: ["ca.crt"] -xpack.license.self_generated.type: basic diff --git a/elasticsearch/config/es01/es01.crt b/elasticsearch/config/es01/es01.crt deleted file mode 100755 index 76b8cdf2..00000000 --- a/elasticsearch/config/es01/es01.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDQDCCAiigAwIBAgIUKzkAgntIW7y5IHFE2MoxxHoLvGkwDQYJKoZIhvcNAQEL -BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l -cmF0ZWQgQ0EwHhcNMjQwNTI3MTk1ODUwWhcNMjcwNTI3MTk1ODUwWjAPMQ0wCwYD -VQQDEwRlczAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmpXRQ+TH -n+VpNZwD+7+9R7IOhisKjCEGKMqSARr5wQPlulxLDlHoO7pRLw6JcEXmLn4tx+Qu -Lkkm9pFAADYnIcCljzRkFHADKuo+P7BG6AZ+6l1UVHwya6iUaERda3+VClTHPzRo -Pn8TRdX78+cY7dAzme0noosw8WCgpL2HgiYciFiwle80OKaeiVxvRNJ+6n36a/q4 -lgLx9wQoJvox/2OCP3318UY1SgA2AO9kFk0zDTvJji9ESSz6d+6LCB73Bk2cKWx6 -q2pVoSTNPhkC5mD9E/zhuXSACfY3H85GZksJ4jztdF1UcsOsrjYsMwwxHH4BwVKa -k97ERJmICSLV/wIDAQABo28wbTAdBgNVHQ4EFgQUuAQmumKYnqzgVBFsMKNd3Wk5 -bPgwHwYDVR0jBBgwFoAUUhwT0mQKXn1S1rPBWQf0TizKLPQwIAYDVR0RBBkwF4IE -ZXMwMYcEfwAAAYIJbG9jYWxob3N0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD -ggEBAHwCJLqUnUIUV21HxVcEThmOWnxFZzA7VjahpIEb/RaK84Uc/8Cxv7vlVW1T -2mgOFQWpi98lew5K7r9GGuA509TaWuwaWAoqdhJL1T2lNa9eA8XtfRZweedqdw5P -1lCwR4vpJr5vVVEZwJTjKCRg5429owjoqEqPHSYbftVQSC8FlKIjnzNO9b5dHmfJ -y9DV5jYu5zfHZHPHXoksmn7MzLpfE6jA2euI7FSQfzPbkfoaBWBU/ZyvQb/taCyY -LH7JNtTf4Tm+yQe8g1m3hhFOraoQG0W09Ub+wpph50Q12sbHddX0e+ekhcu3+8HM -H4Y2SB9Pv5fsKvXtxix02Xu2m0s= ------END CERTIFICATE----- diff --git a/elasticsearch/config/es01/es01.key b/elasticsearch/config/es01/es01.key deleted file mode 100755 index c2c59819..00000000 --- a/elasticsearch/config/es01/es01.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEogIBAAKCAQEAmpXRQ+THn+VpNZwD+7+9R7IOhisKjCEGKMqSARr5wQPlulxL -DlHoO7pRLw6JcEXmLn4tx+QuLkkm9pFAADYnIcCljzRkFHADKuo+P7BG6AZ+6l1U -VHwya6iUaERda3+VClTHPzRoPn8TRdX78+cY7dAzme0noosw8WCgpL2HgiYciFiw -le80OKaeiVxvRNJ+6n36a/q4lgLx9wQoJvox/2OCP3318UY1SgA2AO9kFk0zDTvJ -ji9ESSz6d+6LCB73Bk2cKWx6q2pVoSTNPhkC5mD9E/zhuXSACfY3H85GZksJ4jzt -dF1UcsOsrjYsMwwxHH4BwVKak97ERJmICSLV/wIDAQABAoIBABDs2Vo1KNQtcoz/ -lYIRVsCMUsHG4aNBFGMP9tdvJCxJaHQ0mbUqK6KqfiwIS+0CgjbR8uJBbfr8YGs7 -sQW06CjuZlIdGt4P+5DNz936R3EtEOVJLawIYx7deM5HufDEqcVVTfFyI/2/vRT2 -3lywj06ubo/qYt4NnmC3Qy92XulVZknvjaolGhqVlYGbHQITSI47KNErFX0KiL77 -dYkO3dY75XIc4NsECk5UyFRyu1Mg6dkG+a8HahPVmX7ctq+bytQ3r9hpwXrY1MZV -RXtEW81kwB0yJV3GmXJRrqKZR+vvpqMRIQhmLZgr0XkKIshBuBneAo4cUX7MVgAX -JcdHsMUCgYEA0P7NgUL4xg9Xtpygf5DWldcCO/cy6yoOkXEJ6d9xOhQny24qi0MN -uOuyCCF4UQnhdEYcR9aY6YOwviQluq6roQT7g1Jex20F2iaaLVNdxaGi5s9nmzgp -CVfBdLK798GCu/yrRwhy1EW6kaQdIJ9D0K1Fkm8SFOAuQY0gKgbK6BsCgYEAvVpH -AKtcUJiqyenkvyhnxmpZXhS93F2qSJnzBJ/2wAuQ7BCxw/vW7vw1XDDy+IKFXLQ4 -eRnbIs2hk+FBAgAQDJl26dUELaE+BKsmU1XACRBrnpLZXNd0ssLc1dMFewkxURmT -krWCku32OjVVnPuIALE4Bv9hBSvotYFmf7DXL+0CgYBU05bFqFEg0olfbSMXo8n0 -91fIzwSzvlY7Yg4MBs0GLbgZMZXDAGxJaiDQfAVBnykK8In5/ngCD5llE3bc1piC -umr7Witt9iox6Qka7INa+8gKtpPuxFSjniK/Iux4GurdMiiypBM3ZTXcdyf7XalA -wZNDZCGKp5MeuBEd/bPNkQKBgAlVzRBUYm26yRjBRjzCYjNfBN7liOK3X3DK3jdJ -J6IaL9/jhtARt2v61SqhYykrTiXe4LXft3UEzEV9InZVyHTGkB1BGj6hp2wVgAM1 -xAzuWU/tD3hLSv6RKtAD4k5Jirvj1emytyhFQRFnlbvyjqbyFcAKkR7vJj7kjUgY -UNOVAoGACkTgg+e0Cxu/rzPqJTcwB7gXikBK9gXegi9fXv2Q8q860Y37MXkTCStF -elsIix7jrUokjXWG8Gc44GfJUCv+WLZCeqaL3oS+ZznfbESfiLwEecu/6jsb3SEk -Swx3Bb5X8q0/S0kD3ShMVPFnFIO37P37efMFaYJ2Fs1C3FpWfwM= ------END RSA PRIVATE KEY----- diff --git a/elasticsearch/config/es01/jvm.options b/elasticsearch/config/es01/jvm.options deleted file mode 100644 index 0b1af90f..00000000 --- a/elasticsearch/config/es01/jvm.options +++ /dev/null @@ -1,79 +0,0 @@ -################################################################ -## -## JVM configuration -## -################################################################ -## -## WARNING: DO NOT EDIT THIS FILE. If you want to override the -## JVM options in this file, or set any additional options, you -## should create one or more files in the jvm.options.d -## directory containing your adjustments. -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/jvm-options.html -## for more information. -## -################################################################ - - - -################################################################ -## IMPORTANT: JVM heap size -################################################################ -## -## The heap size is automatically configured by Elasticsearch -## based on the available memory in your system and the roles -## each node is configured to fulfill. If specifying heap is -## required, it should be done through a file in jvm.options.d, -## which should be named with .options suffix, and the min and -## max should be set to the same value. For example, to set the -## heap to 4 GB, create a new file in the jvm.options.d -## directory containing these lines: -## -## -Xms4g -## -Xmx4g -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/heap-size.html -## for more information -## -################################################################ - - -################################################################ -## Expert settings -################################################################ -## -## All settings below here are considered expert settings. Do -## not adjust them unless you understand what you are doing. Do -## not edit them in this file; instead, create a new file in the -## jvm.options.d directory containing your adjustments. -## -################################################################ - --XX:+UseG1GC - -## JVM temporary directory --Djava.io.tmpdir=${ES_TMPDIR} - -# Leverages accelerated vector hardware instructions; removing this may -# result in less optimal vector performance -20-:--add-modules=jdk.incubator.vector - -## heap dumps - -# generate a heap dump when an allocation from the Java heap fails; heap dumps -# are created in the working directory of the JVM unless an alternative path is -# specified --XX:+HeapDumpOnOutOfMemoryError - -# exit right after heap dump on out of memory error --XX:+ExitOnOutOfMemoryError - -# specify an alternative path for heap dumps; ensure the directory exists and -# has sufficient space --XX:HeapDumpPath=data - -# specify an alternative path for JVM fatal error logs --XX:ErrorFile=logs/hs_err_pid%p.log - -## GC logging --Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m diff --git a/elasticsearch/config/es01/log4j2.file.properties b/elasticsearch/config/es01/log4j2.file.properties deleted file mode 100644 index 5bb63ce1..00000000 --- a/elasticsearch/config/es01/log4j2.file.properties +++ /dev/null @@ -1,279 +0,0 @@ -status = error - -appender.console.type = Console -appender.console.name = console -appender.console.layout.type = PatternLayout -appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%consoleException%n - -######## Server JSON ############################ -appender.rolling.type = RollingFile -appender.rolling.name = rolling -appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz -appender.rolling.policies.type = Policies -appender.rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling.policies.time.interval = 1 -appender.rolling.policies.time.modulate = true -appender.rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling.policies.size.size = 128MB -appender.rolling.strategy.type = DefaultRolloverStrategy -appender.rolling.strategy.fileIndex = nomax -appender.rolling.strategy.action.type = Delete -appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling.strategy.action.condition.type = IfFileName -appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ -######## Server - old style pattern ########### -appender.rolling_old.type = RollingFile -appender.rolling_old.name = rolling_old -appender.rolling_old.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log -appender.rolling_old.layout.type = PatternLayout -appender.rolling_old.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n - -appender.rolling_old.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz -appender.rolling_old.policies.type = Policies -appender.rolling_old.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling_old.policies.time.interval = 1 -appender.rolling_old.policies.time.modulate = true -appender.rolling_old.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling_old.policies.size.size = 128MB -appender.rolling_old.strategy.type = DefaultRolloverStrategy -appender.rolling_old.strategy.fileIndex = nomax -appender.rolling_old.strategy.action.type = Delete -appender.rolling_old.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling_old.strategy.action.condition.type = IfFileName -appender.rolling_old.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling_old.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling_old.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ - -rootLogger.level = info -rootLogger.appenderRef.console.ref = console -rootLogger.appenderRef.rolling.ref = rolling -rootLogger.appenderRef.rolling_old.ref = rolling_old - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = RollingFile -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.json -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.deprecation_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation-%i.json.gz -appender.deprecation_rolling.policies.type = Policies -appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.deprecation_rolling.policies.size.size = 1GB -appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy -appender.deprecation_rolling.strategy.max = 4 - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = RollingFile -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog.json -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog-%i.json.gz -appender.index_search_slowlog_rolling.policies.type = Policies -appender.index_search_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_search_slowlog_rolling.policies.size.size = 1GB -appender.index_search_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_search_slowlog_rolling.strategy.max = 4 -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = RollingFile -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog.json -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - - -appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog-%i.json.gz -appender.index_indexing_slowlog_rolling.policies.type = Policies -appender.index_indexing_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_indexing_slowlog_rolling.policies.size.size = 1GB -appender.index_indexing_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_indexing_slowlog_rolling.strategy.max = 4 -################################################# - - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - - -appender.audit_rolling.type = RollingFile -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit.json -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -appender.audit_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit-%d{yyyy-MM-dd}-%i.json.gz -appender.audit_rolling.policies.type = Policies -appender.audit_rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.audit_rolling.policies.time.interval = 1 -appender.audit_rolling.policies.time.modulate = true -appender.audit_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.audit_rolling.policies.size.size = 1GB -appender.audit_rolling.strategy.type = DefaultRolloverStrategy -appender.audit_rolling.strategy.fileIndex = nomax - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal diff --git a/elasticsearch/config/es01/log4j2.properties b/elasticsearch/config/es01/log4j2.properties deleted file mode 100644 index c0d67c8e..00000000 --- a/elasticsearch/config/es01/log4j2.properties +++ /dev/null @@ -1,193 +0,0 @@ -status = error - -######## Server JSON ############################ -appender.rolling.type = Console -appender.rolling.name = rolling -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -################################################ - -################################################ - -rootLogger.level = info -rootLogger.appenderRef.rolling.ref = rolling - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = Console -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = Console -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = Console -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - -################################################# - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - -appender.audit_rolling.type = Console -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal \ No newline at end of file diff --git a/elasticsearch/config/es01/role_mapping.yml b/elasticsearch/config/es01/role_mapping.yml deleted file mode 100644 index 68c82f7e..00000000 --- a/elasticsearch/config/es01/role_mapping.yml +++ /dev/null @@ -1,14 +0,0 @@ -# Role mapping configuration file which has elasticsearch roles as keys -# that map to one or more user or group distinguished names - -#roleA: this is an elasticsearch role -# - groupA-DN this is a group distinguished name -# - groupB-DN -# - user1-DN this is the full user distinguished name - -#power_user: -# - "cn=admins,dc=example,dc=com" -#user: -# - "cn=users,dc=example,dc=com" -# - "cn=admins,dc=example,dc=com" -# - "cn=John Doe,cn=other users,dc=example,dc=com" diff --git a/elasticsearch/config/es01/roles.yml b/elasticsearch/config/es01/roles.yml deleted file mode 100644 index 68e003b8..00000000 --- a/elasticsearch/config/es01/roles.yml +++ /dev/null @@ -1,3 +0,0 @@ -# The default roles file is empty as the preferred method of defining roles is -# through the API/UI. File based roles are useful in error scenarios when the -# API based roles may not be available. diff --git a/elasticsearch/config/es01/users b/elasticsearch/config/es01/users deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/config/es01/users_roles b/elasticsearch/config/es01/users_roles deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/config/es02/ca.crt b/elasticsearch/config/es02/ca.crt deleted file mode 100755 index d8c6ffd4..00000000 --- a/elasticsearch/config/es02/ca.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIVAO2BMtuZgADcrNJORc/UB2rj/y6JMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI0MDUyNzE5NTg0OVoXDTI3MDUyNzE5NTg0OVowNDEyMDAG -A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCat4tgRPHYWsZrygCUNASc -cc4wGONcNzRkn7LRbF+jWVcx3G8SLK1uY5w0jdC+mioRe8vIVR1amng1KtIoADxa -aV43rCNSTfPO6DsDPu9AGdoxlHrUjkpf5mPcy1hhRpVfHi01ytqSip/deA+2jShq -2naMug4o6YoqdPdiVvOrzMvuVdGeGNNrlihTHmENtI6vZp1Uq/pxZYqHhqkzlCDr -uZvhe6bLpvbbyGVpx6dJA51MuxZ6m6yEtz1fNz2fgh+2tl91hXp7WaeMDpGHaezq -cCbiHSMG9vXhU8fsgTTB2NONiGiH/635VZcTbbS9dtDeUe4Y/vEY0uURU2dyBF3L -AgMBAAGjUzBRMB0GA1UdDgQWBBRSHBPSZApefVLWs8FZB/ROLMos9DAfBgNVHSME -GDAWgBRSHBPSZApefVLWs8FZB/ROLMos9DAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA4IBAQB2Hfsz3RT9Y+th7haS4C6yI4ZnwirEehexM9RjjIWlCS/i -c3IZ1dwJlR1pI6jeFjhF6iEnWY24cxH2GvZrynIrwACSJBibzVuMa/4+7pcF2xQS -L9H+18StNK2S51a1xxzfhlQpTizea05rnLpkhJP52PfUaoWD42kPz8t8ITafD5ay -IzKiz+aL1+elT+Tlmcmi2k0s+sJahLrcI62jUsmUB474fsv/00DWEBaSRKVXCy4D -pUv2PKV+EElHiM65UlMxZ7q5KBWsCvotILrIeP7rJZE3uloe6UTeZ0CSTDiQNCOb -jonBnKm6Zw7z2Io9Jl0yJJg0kl8tc8OFsV85p9RO ------END CERTIFICATE----- diff --git a/elasticsearch/config/es02/elasticsearch-plugins.example.yml b/elasticsearch/config/es02/elasticsearch-plugins.example.yml deleted file mode 100644 index b6874e91..00000000 --- a/elasticsearch/config/es02/elasticsearch-plugins.example.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Rename this file to `elasticsearch-plugins.yml` to use it. -# -# All plugins must be listed here. If you add a plugin to this list and run -# `elasticsearch-plugin sync`, that plugin will be installed. If you remove -# a plugin from this list, that plugin will be removed when Elasticsearch -# next starts. - -plugins: - # Each plugin must have an ID. Plugins with only an ID are official plugins and will be downloaded from Elastic. - - id: example-id - - # Plugins can be specified by URL (it doesn't have to be HTTP, you could use e.g. `file:`) - - id: example-with-url - location: https://some.domain/path/example4.zip - - # Or by maven coordinates: - - id: example-with-maven-url - location: org.elasticsearch.plugins:example-plugin:1.2.3 - - # A proxy can also be configured per-plugin, if necessary - - id: example-with-proxy - location: https://some.domain/path/example.zip - proxy: https://some.domain:1234 - -# Configures a proxy for all network access. Remove this if you don't need -# to use a proxy. -proxy: https://some.domain:1234 diff --git a/elasticsearch/config/es02/elasticsearch.keystore b/elasticsearch/config/es02/elasticsearch.keystore deleted file mode 100644 index aedca3db21c62062f57593ab828af14ef5d689b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmV>*K8LSWo%({bZKLAWnpq-XfA7Id2@7ca%BJj00jWQ0000$0001pROO4U z&GqnQ{iqTWL*zp4iK{)jbamMN=0vZeUch;0_F~3R>;k(sEW_YWo3*pC0@=B~21kxC z)}tQ4JqDf(0001A(3WkQ)%V8viYs(y00016KT8X{#YwK&g=RS?54#QKwfYH0|h%V7lua&Ak(UVyx+h$Ou{`4ul(}=-}0ud>qYkIa) t{um~8SDoYr`ai~v2vO&~bI%)jcNpot?hC*uljr~d00000004h$lkdN`aXSD2 diff --git a/elasticsearch/config/es02/elasticsearch.yml b/elasticsearch/config/es02/elasticsearch.yml deleted file mode 100644 index 810114ef..00000000 --- a/elasticsearch/config/es02/elasticsearch.yml +++ /dev/null @@ -1,19 +0,0 @@ -node.name: es02 -path.data: /usr/share/elasticsearch/data -path.logs: /usr/share/elasticsearch/logs -network.host: 127.0.0.1 -cluster.name: docker-cluster -discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"] -cluster.initial_master_nodes: ["es01", "es02", "es03"] -bootstrap.memory_lock: false -xpack.security.enabled: true -xpack.security.http.ssl.enabled: true -xpack.security.http.ssl.key: es02.key -xpack.security.http.ssl.certificate: es02.crt -xpack.security.http.ssl.certificate_authorities: ["ca.crt"] -xpack.security.transport.ssl.enabled: true -xpack.security.transport.ssl.verification_mode: certificate -xpack.security.transport.ssl.key: es02.key -xpack.security.transport.ssl.certificate: es02.crt -xpack.security.transport.ssl.certificate_authorities: ["ca.crt"] -xpack.license.self_generated.type: basic diff --git a/elasticsearch/config/es02/es02.crt b/elasticsearch/config/es02/es02.crt deleted file mode 100755 index 44db9c41..00000000 --- a/elasticsearch/config/es02/es02.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDQDCCAiigAwIBAgIUTk8VxELi8BcE+Q1QJDjl1ijZS0gwDQYJKoZIhvcNAQEL -BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l -cmF0ZWQgQ0EwHhcNMjQwNTI3MTk1ODUwWhcNMjcwNTI3MTk1ODUwWjAPMQ0wCwYD -VQQDEwRlczAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyaaCYcE+ -eDk4++1N2j0edhOQeJtRlVAY4okWx/GKZ8bUrFgWeXDmYnty8n2BjOsYy5AikELe -ZhsA6xWqV7/l8Tmhfv27e1qsxB1zNBurFQ4B2/O7YXHRXs2uKJqKb2Sj1+2GM6xQ -xZqZQS39MX2rKmENhud8kyDZUpQfqlUNE+QgRjMKMvB+7U9lrTfP/XUW2QosY+dz -Uub1K6pWf/avccf3WJd6R8aTYv2KDQjFsR6sib/RWHXTvtIDQlynQW4SFxSbhplX -DNN8nkaHa1lygAIHcKu77KulFrbTsJZ+hJIMjKn4HYsMuCH2KYDK+1cZToJ1MDvo -A9Xa2yWjbXWaiwIDAQABo28wbTAdBgNVHQ4EFgQUFSfOsv8EnRbLQI9pMbKNrRh0 -wM8wHwYDVR0jBBgwFoAUUhwT0mQKXn1S1rPBWQf0TizKLPQwIAYDVR0RBBkwF4cE -fwAAAYIEZXMwMoIJbG9jYWxob3N0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD -ggEBAAGEWLu8MtZiav5wxvCb0iu5zUOPDSRibK/wTLtLhOeu4LBqyB9MYuT9wRr3 -XKsKuPV6NHSzUdkAK5wTqXsX3b5FXD6+B7PUMB31g62YnauDdTydszR1NxMp9LB+ -8YKb71JBy9iuBNk4OkVhmi9Q3fsQxchAWCtjI8aEa08PYq4XKAHvS1Hp2c4xP57+ -ZBxZS2ASFZo9EJ6BNwErF2OdcjIOQEU4YYebNARwdoY8taFNTBMQfbJRVRRdRCw5 -+n0fGB77j1nEmwLJSYMVkL+b44XUu7OIOiv2gRmvE2ZrQgIcj0hEYKtQpXFfLB+6 -OVv7xEYk2yWjJNBTiOKboVTb1U8= ------END CERTIFICATE----- diff --git a/elasticsearch/config/es02/es02.key b/elasticsearch/config/es02/es02.key deleted file mode 100755 index 14209814..00000000 --- a/elasticsearch/config/es02/es02.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAyaaCYcE+eDk4++1N2j0edhOQeJtRlVAY4okWx/GKZ8bUrFgW -eXDmYnty8n2BjOsYy5AikELeZhsA6xWqV7/l8Tmhfv27e1qsxB1zNBurFQ4B2/O7 -YXHRXs2uKJqKb2Sj1+2GM6xQxZqZQS39MX2rKmENhud8kyDZUpQfqlUNE+QgRjMK -MvB+7U9lrTfP/XUW2QosY+dzUub1K6pWf/avccf3WJd6R8aTYv2KDQjFsR6sib/R -WHXTvtIDQlynQW4SFxSbhplXDNN8nkaHa1lygAIHcKu77KulFrbTsJZ+hJIMjKn4 -HYsMuCH2KYDK+1cZToJ1MDvoA9Xa2yWjbXWaiwIDAQABAoIBABGFNZ6FD0ab1i8m -uFUbaq+gqzScw3ML3Ar8FUN3DEBQXr8WAjyNSinJXGc5mg133xYku6lkHfWqJ/jE -+kwYgMPmRCQIALJK4mhBv3Y0vIxzmfFrP7R2PVZAManBJQELsflQtRB9Ssv4eZNX -tGrd5obOmuxwkCV/vPzMoORdnRQas5a0i0ZtlCjv8jirX/t1VOLlsvoaIGs6TbTm -op3s7zi9ETvnCnZ6VKzsSugwUGCRnFqsIgUt8PUpKPXfgvzdRc5/j1NNWocfwLlH -lTSipk4n64KPevvG/deWw6AnnYLSosIQM4MCC9JrgZ1DhacGs23L7WWbz/1JC+oT -AgEP9FkCgYEAz3pj3PdibwhM/VWuOxwWWR4YS8UJZx1lcFPXzgE4t7V+/YSKuUtL -ro2plGUG1Ji5SgsS0exH/mzaF8OhHX1Jt+eGEVJyzdfJN8S1lomVtOoMyjkyBgxM -I4bajIB1Sz9aipKwVAfise9f6Ga3E0/ET9iq6i0/R1wK5EwgdOCxkBMCgYEA+M84 -W4S5P4EyfaeLOw+puyZcgG0ftVVqlAHdkdQlQLXCt3ijI008A0f5GVqf2tTLVrAj -Ub39aDOrM1wA6FWCqsa8LEbtdD4d1xNDi8DegDvjjjmU1z8ULjxSu8iSikhOCw2G -vyXHsr04DYBg4OURD9Pg8hHGtANZSNtc6CwISqkCgYBogbqZi9Z+HQ1Csgy/42by -XrFYQRh6Yxk8Wk8iigT6rCYaJtAFg4LMmrincbfeEEuMm0VQjha5djTosXaPNxOR -2cHzKbeALchCGghpmkXZSedFWUf0Oe+EGaIuEWqDi5bcpATDXvF2NR/3HP3scUpt -+bIloML1+8vUsO/MT33BFwKBgQCiXR+K4Wa94UKgqwf5p7P8VAFDMXLis3XUVg9Q -DZ+txa7maYwUCl+iSIJuoCv28qwqytCRlCjcqfMLlftlof+eEAhV4IcuNybj5kdK -2LaZ+fr6IetWN2yk62qV7kJqiNqc7dvDuxTBOCdu8BrIR9NFf9+oOB9x80l9eOD9 -BVb32QKBgAjHylTABCzS+2zOwUQeMpXQnYeNhMvvvYug/mDh+GQQL7zVeSJXlNGS -PkJqE3xEoVPDOPJ+Kr8nl5jS3YGCWcWerYURd9XiX7lHx7LlOeb6LusNIm/mO563 -y2U3WPIDTdy36vnvz3FZKYIionGFYc5hRGI54GfWKbCdr9ug2Xaw ------END RSA PRIVATE KEY----- diff --git a/elasticsearch/config/es02/jvm.options b/elasticsearch/config/es02/jvm.options deleted file mode 100644 index 0b1af90f..00000000 --- a/elasticsearch/config/es02/jvm.options +++ /dev/null @@ -1,79 +0,0 @@ -################################################################ -## -## JVM configuration -## -################################################################ -## -## WARNING: DO NOT EDIT THIS FILE. If you want to override the -## JVM options in this file, or set any additional options, you -## should create one or more files in the jvm.options.d -## directory containing your adjustments. -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/jvm-options.html -## for more information. -## -################################################################ - - - -################################################################ -## IMPORTANT: JVM heap size -################################################################ -## -## The heap size is automatically configured by Elasticsearch -## based on the available memory in your system and the roles -## each node is configured to fulfill. If specifying heap is -## required, it should be done through a file in jvm.options.d, -## which should be named with .options suffix, and the min and -## max should be set to the same value. For example, to set the -## heap to 4 GB, create a new file in the jvm.options.d -## directory containing these lines: -## -## -Xms4g -## -Xmx4g -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/heap-size.html -## for more information -## -################################################################ - - -################################################################ -## Expert settings -################################################################ -## -## All settings below here are considered expert settings. Do -## not adjust them unless you understand what you are doing. Do -## not edit them in this file; instead, create a new file in the -## jvm.options.d directory containing your adjustments. -## -################################################################ - --XX:+UseG1GC - -## JVM temporary directory --Djava.io.tmpdir=${ES_TMPDIR} - -# Leverages accelerated vector hardware instructions; removing this may -# result in less optimal vector performance -20-:--add-modules=jdk.incubator.vector - -## heap dumps - -# generate a heap dump when an allocation from the Java heap fails; heap dumps -# are created in the working directory of the JVM unless an alternative path is -# specified --XX:+HeapDumpOnOutOfMemoryError - -# exit right after heap dump on out of memory error --XX:+ExitOnOutOfMemoryError - -# specify an alternative path for heap dumps; ensure the directory exists and -# has sufficient space --XX:HeapDumpPath=data - -# specify an alternative path for JVM fatal error logs --XX:ErrorFile=logs/hs_err_pid%p.log - -## GC logging --Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m diff --git a/elasticsearch/config/es02/log4j2.file.properties b/elasticsearch/config/es02/log4j2.file.properties deleted file mode 100644 index 5bb63ce1..00000000 --- a/elasticsearch/config/es02/log4j2.file.properties +++ /dev/null @@ -1,279 +0,0 @@ -status = error - -appender.console.type = Console -appender.console.name = console -appender.console.layout.type = PatternLayout -appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%consoleException%n - -######## Server JSON ############################ -appender.rolling.type = RollingFile -appender.rolling.name = rolling -appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz -appender.rolling.policies.type = Policies -appender.rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling.policies.time.interval = 1 -appender.rolling.policies.time.modulate = true -appender.rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling.policies.size.size = 128MB -appender.rolling.strategy.type = DefaultRolloverStrategy -appender.rolling.strategy.fileIndex = nomax -appender.rolling.strategy.action.type = Delete -appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling.strategy.action.condition.type = IfFileName -appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ -######## Server - old style pattern ########### -appender.rolling_old.type = RollingFile -appender.rolling_old.name = rolling_old -appender.rolling_old.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log -appender.rolling_old.layout.type = PatternLayout -appender.rolling_old.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n - -appender.rolling_old.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz -appender.rolling_old.policies.type = Policies -appender.rolling_old.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling_old.policies.time.interval = 1 -appender.rolling_old.policies.time.modulate = true -appender.rolling_old.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling_old.policies.size.size = 128MB -appender.rolling_old.strategy.type = DefaultRolloverStrategy -appender.rolling_old.strategy.fileIndex = nomax -appender.rolling_old.strategy.action.type = Delete -appender.rolling_old.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling_old.strategy.action.condition.type = IfFileName -appender.rolling_old.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling_old.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling_old.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ - -rootLogger.level = info -rootLogger.appenderRef.console.ref = console -rootLogger.appenderRef.rolling.ref = rolling -rootLogger.appenderRef.rolling_old.ref = rolling_old - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = RollingFile -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.json -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.deprecation_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation-%i.json.gz -appender.deprecation_rolling.policies.type = Policies -appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.deprecation_rolling.policies.size.size = 1GB -appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy -appender.deprecation_rolling.strategy.max = 4 - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = RollingFile -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog.json -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog-%i.json.gz -appender.index_search_slowlog_rolling.policies.type = Policies -appender.index_search_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_search_slowlog_rolling.policies.size.size = 1GB -appender.index_search_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_search_slowlog_rolling.strategy.max = 4 -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = RollingFile -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog.json -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - - -appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog-%i.json.gz -appender.index_indexing_slowlog_rolling.policies.type = Policies -appender.index_indexing_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_indexing_slowlog_rolling.policies.size.size = 1GB -appender.index_indexing_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_indexing_slowlog_rolling.strategy.max = 4 -################################################# - - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - - -appender.audit_rolling.type = RollingFile -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit.json -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -appender.audit_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit-%d{yyyy-MM-dd}-%i.json.gz -appender.audit_rolling.policies.type = Policies -appender.audit_rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.audit_rolling.policies.time.interval = 1 -appender.audit_rolling.policies.time.modulate = true -appender.audit_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.audit_rolling.policies.size.size = 1GB -appender.audit_rolling.strategy.type = DefaultRolloverStrategy -appender.audit_rolling.strategy.fileIndex = nomax - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal diff --git a/elasticsearch/config/es02/log4j2.properties b/elasticsearch/config/es02/log4j2.properties deleted file mode 100644 index c0d67c8e..00000000 --- a/elasticsearch/config/es02/log4j2.properties +++ /dev/null @@ -1,193 +0,0 @@ -status = error - -######## Server JSON ############################ -appender.rolling.type = Console -appender.rolling.name = rolling -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -################################################ - -################################################ - -rootLogger.level = info -rootLogger.appenderRef.rolling.ref = rolling - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = Console -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = Console -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = Console -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - -################################################# - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - -appender.audit_rolling.type = Console -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal \ No newline at end of file diff --git a/elasticsearch/config/es02/role_mapping.yml b/elasticsearch/config/es02/role_mapping.yml deleted file mode 100644 index 68c82f7e..00000000 --- a/elasticsearch/config/es02/role_mapping.yml +++ /dev/null @@ -1,14 +0,0 @@ -# Role mapping configuration file which has elasticsearch roles as keys -# that map to one or more user or group distinguished names - -#roleA: this is an elasticsearch role -# - groupA-DN this is a group distinguished name -# - groupB-DN -# - user1-DN this is the full user distinguished name - -#power_user: -# - "cn=admins,dc=example,dc=com" -#user: -# - "cn=users,dc=example,dc=com" -# - "cn=admins,dc=example,dc=com" -# - "cn=John Doe,cn=other users,dc=example,dc=com" diff --git a/elasticsearch/config/es02/roles.yml b/elasticsearch/config/es02/roles.yml deleted file mode 100644 index 68e003b8..00000000 --- a/elasticsearch/config/es02/roles.yml +++ /dev/null @@ -1,3 +0,0 @@ -# The default roles file is empty as the preferred method of defining roles is -# through the API/UI. File based roles are useful in error scenarios when the -# API based roles may not be available. diff --git a/elasticsearch/config/es02/users b/elasticsearch/config/es02/users deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/config/es02/users_roles b/elasticsearch/config/es02/users_roles deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/config/es03/ca.crt b/elasticsearch/config/es03/ca.crt deleted file mode 100755 index d8c6ffd4..00000000 --- a/elasticsearch/config/es03/ca.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIVAO2BMtuZgADcrNJORc/UB2rj/y6JMA0GCSqGSIb3DQEB -CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu -ZXJhdGVkIENBMB4XDTI0MDUyNzE5NTg0OVoXDTI3MDUyNzE5NTg0OVowNDEyMDAG -A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCat4tgRPHYWsZrygCUNASc -cc4wGONcNzRkn7LRbF+jWVcx3G8SLK1uY5w0jdC+mioRe8vIVR1amng1KtIoADxa -aV43rCNSTfPO6DsDPu9AGdoxlHrUjkpf5mPcy1hhRpVfHi01ytqSip/deA+2jShq -2naMug4o6YoqdPdiVvOrzMvuVdGeGNNrlihTHmENtI6vZp1Uq/pxZYqHhqkzlCDr -uZvhe6bLpvbbyGVpx6dJA51MuxZ6m6yEtz1fNz2fgh+2tl91hXp7WaeMDpGHaezq -cCbiHSMG9vXhU8fsgTTB2NONiGiH/635VZcTbbS9dtDeUe4Y/vEY0uURU2dyBF3L -AgMBAAGjUzBRMB0GA1UdDgQWBBRSHBPSZApefVLWs8FZB/ROLMos9DAfBgNVHSME -GDAWgBRSHBPSZApefVLWs8FZB/ROLMos9DAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA4IBAQB2Hfsz3RT9Y+th7haS4C6yI4ZnwirEehexM9RjjIWlCS/i -c3IZ1dwJlR1pI6jeFjhF6iEnWY24cxH2GvZrynIrwACSJBibzVuMa/4+7pcF2xQS -L9H+18StNK2S51a1xxzfhlQpTizea05rnLpkhJP52PfUaoWD42kPz8t8ITafD5ay -IzKiz+aL1+elT+Tlmcmi2k0s+sJahLrcI62jUsmUB474fsv/00DWEBaSRKVXCy4D -pUv2PKV+EElHiM65UlMxZ7q5KBWsCvotILrIeP7rJZE3uloe6UTeZ0CSTDiQNCOb -jonBnKm6Zw7z2Io9Jl0yJJg0kl8tc8OFsV85p9RO ------END CERTIFICATE----- diff --git a/elasticsearch/config/es03/elasticsearch-plugins.example.yml b/elasticsearch/config/es03/elasticsearch-plugins.example.yml deleted file mode 100644 index b6874e91..00000000 --- a/elasticsearch/config/es03/elasticsearch-plugins.example.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Rename this file to `elasticsearch-plugins.yml` to use it. -# -# All plugins must be listed here. If you add a plugin to this list and run -# `elasticsearch-plugin sync`, that plugin will be installed. If you remove -# a plugin from this list, that plugin will be removed when Elasticsearch -# next starts. - -plugins: - # Each plugin must have an ID. Plugins with only an ID are official plugins and will be downloaded from Elastic. - - id: example-id - - # Plugins can be specified by URL (it doesn't have to be HTTP, you could use e.g. `file:`) - - id: example-with-url - location: https://some.domain/path/example4.zip - - # Or by maven coordinates: - - id: example-with-maven-url - location: org.elasticsearch.plugins:example-plugin:1.2.3 - - # A proxy can also be configured per-plugin, if necessary - - id: example-with-proxy - location: https://some.domain/path/example.zip - proxy: https://some.domain:1234 - -# Configures a proxy for all network access. Remove this if you don't need -# to use a proxy. -proxy: https://some.domain:1234 diff --git a/elasticsearch/config/es03/elasticsearch.keystore b/elasticsearch/config/es03/elasticsearch.keystore deleted file mode 100644 index 260202e588d632753871b185885b31df45a7e16e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmcD&o+B=nnv+;ul9^nbnpl*ap_iRnSzMA|l*+)sz{;>6NIC%V_eJh@F0ujH7r0jK z+4)Lc+ebdzWa(}}w`UQX7u7^WPm%3g-SX{zTl-7jvdZA6vGvB95oTQR$2Hdemenr& z*)X36XvWc*JDxV)vG!HgnlvFD$p0mj9U0Hsc;iR>1V*=&e(H{D7hg2YSQ_BvCjG{} zD>!LKwrbCA$?4Md?VkTNCvMq!b;h%DZhx_&Wg-_RcUG?X{=@X5X@&J=^%8!IhkT3l qBwrU@-w{)7j!H#ox_9)y+pK?HB@(ZACV6bpQjxPY bash -c ' diff --git a/elasticsearch/tmp-config/elasticsearch-plugins.example.yml b/elasticsearch/tmp-config/elasticsearch-plugins.example.yml deleted file mode 100644 index b6874e91..00000000 --- a/elasticsearch/tmp-config/elasticsearch-plugins.example.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Rename this file to `elasticsearch-plugins.yml` to use it. -# -# All plugins must be listed here. If you add a plugin to this list and run -# `elasticsearch-plugin sync`, that plugin will be installed. If you remove -# a plugin from this list, that plugin will be removed when Elasticsearch -# next starts. - -plugins: - # Each plugin must have an ID. Plugins with only an ID are official plugins and will be downloaded from Elastic. - - id: example-id - - # Plugins can be specified by URL (it doesn't have to be HTTP, you could use e.g. `file:`) - - id: example-with-url - location: https://some.domain/path/example4.zip - - # Or by maven coordinates: - - id: example-with-maven-url - location: org.elasticsearch.plugins:example-plugin:1.2.3 - - # A proxy can also be configured per-plugin, if necessary - - id: example-with-proxy - location: https://some.domain/path/example.zip - proxy: https://some.domain:1234 - -# Configures a proxy for all network access. Remove this if you don't need -# to use a proxy. -proxy: https://some.domain:1234 diff --git a/elasticsearch/tmp-config/elasticsearch.yml b/elasticsearch/tmp-config/elasticsearch.yml deleted file mode 100644 index 50b15470..00000000 --- a/elasticsearch/tmp-config/elasticsearch.yml +++ /dev/null @@ -1,2 +0,0 @@ -cluster.name: "docker-cluster" -network.host: 0.0.0.0 diff --git a/elasticsearch/tmp-config/jvm.options b/elasticsearch/tmp-config/jvm.options deleted file mode 100644 index 0b1af90f..00000000 --- a/elasticsearch/tmp-config/jvm.options +++ /dev/null @@ -1,79 +0,0 @@ -################################################################ -## -## JVM configuration -## -################################################################ -## -## WARNING: DO NOT EDIT THIS FILE. If you want to override the -## JVM options in this file, or set any additional options, you -## should create one or more files in the jvm.options.d -## directory containing your adjustments. -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/jvm-options.html -## for more information. -## -################################################################ - - - -################################################################ -## IMPORTANT: JVM heap size -################################################################ -## -## The heap size is automatically configured by Elasticsearch -## based on the available memory in your system and the roles -## each node is configured to fulfill. If specifying heap is -## required, it should be done through a file in jvm.options.d, -## which should be named with .options suffix, and the min and -## max should be set to the same value. For example, to set the -## heap to 4 GB, create a new file in the jvm.options.d -## directory containing these lines: -## -## -Xms4g -## -Xmx4g -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/8.13/heap-size.html -## for more information -## -################################################################ - - -################################################################ -## Expert settings -################################################################ -## -## All settings below here are considered expert settings. Do -## not adjust them unless you understand what you are doing. Do -## not edit them in this file; instead, create a new file in the -## jvm.options.d directory containing your adjustments. -## -################################################################ - --XX:+UseG1GC - -## JVM temporary directory --Djava.io.tmpdir=${ES_TMPDIR} - -# Leverages accelerated vector hardware instructions; removing this may -# result in less optimal vector performance -20-:--add-modules=jdk.incubator.vector - -## heap dumps - -# generate a heap dump when an allocation from the Java heap fails; heap dumps -# are created in the working directory of the JVM unless an alternative path is -# specified --XX:+HeapDumpOnOutOfMemoryError - -# exit right after heap dump on out of memory error --XX:+ExitOnOutOfMemoryError - -# specify an alternative path for heap dumps; ensure the directory exists and -# has sufficient space --XX:HeapDumpPath=data - -# specify an alternative path for JVM fatal error logs --XX:ErrorFile=logs/hs_err_pid%p.log - -## GC logging --Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m diff --git a/elasticsearch/tmp-config/log4j2.file.properties b/elasticsearch/tmp-config/log4j2.file.properties deleted file mode 100644 index 5bb63ce1..00000000 --- a/elasticsearch/tmp-config/log4j2.file.properties +++ /dev/null @@ -1,279 +0,0 @@ -status = error - -appender.console.type = Console -appender.console.name = console -appender.console.layout.type = PatternLayout -appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%consoleException%n - -######## Server JSON ############################ -appender.rolling.type = RollingFile -appender.rolling.name = rolling -appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz -appender.rolling.policies.type = Policies -appender.rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling.policies.time.interval = 1 -appender.rolling.policies.time.modulate = true -appender.rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling.policies.size.size = 128MB -appender.rolling.strategy.type = DefaultRolloverStrategy -appender.rolling.strategy.fileIndex = nomax -appender.rolling.strategy.action.type = Delete -appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling.strategy.action.condition.type = IfFileName -appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ -######## Server - old style pattern ########### -appender.rolling_old.type = RollingFile -appender.rolling_old.name = rolling_old -appender.rolling_old.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log -appender.rolling_old.layout.type = PatternLayout -appender.rolling_old.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n - -appender.rolling_old.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz -appender.rolling_old.policies.type = Policies -appender.rolling_old.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling_old.policies.time.interval = 1 -appender.rolling_old.policies.time.modulate = true -appender.rolling_old.policies.size.type = SizeBasedTriggeringPolicy -appender.rolling_old.policies.size.size = 128MB -appender.rolling_old.strategy.type = DefaultRolloverStrategy -appender.rolling_old.strategy.fileIndex = nomax -appender.rolling_old.strategy.action.type = Delete -appender.rolling_old.strategy.action.basepath = ${sys:es.logs.base_path} -appender.rolling_old.strategy.action.condition.type = IfFileName -appender.rolling_old.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* -appender.rolling_old.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize -appender.rolling_old.strategy.action.condition.nested_condition.exceeds = 2GB -################################################ - -rootLogger.level = info -rootLogger.appenderRef.console.ref = console -rootLogger.appenderRef.rolling.ref = rolling -rootLogger.appenderRef.rolling_old.ref = rolling_old - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = RollingFile -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.json -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.deprecation_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation-%i.json.gz -appender.deprecation_rolling.policies.type = Policies -appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.deprecation_rolling.policies.size.size = 1GB -appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy -appender.deprecation_rolling.strategy.max = 4 - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = RollingFile -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog.json -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs\ - .cluster_name}_index_search_slowlog-%i.json.gz -appender.index_search_slowlog_rolling.policies.type = Policies -appender.index_search_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_search_slowlog_rolling.policies.size.size = 1GB -appender.index_search_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_search_slowlog_rolling.strategy.max = 4 -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = RollingFile -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog.json -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - - -appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}\ - _index_indexing_slowlog-%i.json.gz -appender.index_indexing_slowlog_rolling.policies.type = Policies -appender.index_indexing_slowlog_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.index_indexing_slowlog_rolling.policies.size.size = 1GB -appender.index_indexing_slowlog_rolling.strategy.type = DefaultRolloverStrategy -appender.index_indexing_slowlog_rolling.strategy.max = 4 -################################################# - - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - - -appender.audit_rolling.type = RollingFile -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit.json -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -appender.audit_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_audit-%d{yyyy-MM-dd}-%i.json.gz -appender.audit_rolling.policies.type = Policies -appender.audit_rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.audit_rolling.policies.time.interval = 1 -appender.audit_rolling.policies.time.modulate = true -appender.audit_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.audit_rolling.policies.size.size = 1GB -appender.audit_rolling.strategy.type = DefaultRolloverStrategy -appender.audit_rolling.strategy.fileIndex = nomax - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal diff --git a/elasticsearch/tmp-config/log4j2.properties b/elasticsearch/tmp-config/log4j2.properties deleted file mode 100644 index c0d67c8e..00000000 --- a/elasticsearch/tmp-config/log4j2.properties +++ /dev/null @@ -1,193 +0,0 @@ -status = error - -######## Server JSON ############################ -appender.rolling.type = Console -appender.rolling.name = rolling -appender.rolling.layout.type = ECSJsonLayout -appender.rolling.layout.dataset = elasticsearch.server - -################################################ - -################################################ - -rootLogger.level = info -rootLogger.appenderRef.rolling.ref = rolling - -######## Deprecation JSON ####################### -appender.deprecation_rolling.type = Console -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.layout.type = ECSJsonLayout -# Intentionally follows a different pattern to above -appender.deprecation_rolling.layout.dataset = deprecation.elasticsearch -appender.deprecation_rolling.filter.rate_limit.type = RateLimitingFilter - -appender.header_warning.type = HeaderWarningAppender -appender.header_warning.name = header_warning -################################################# - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = WARN -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.appenderRef.header_warning.ref = header_warning -logger.deprecation.additivity = false - -######## Search slowlog JSON #################### -appender.index_search_slowlog_rolling.type = Console -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_search_slowlog_rolling.layout.dataset = elasticsearch.index_search_slowlog - -################################################# - -################################################# -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -######## Indexing slowlog JSON ################## -appender.index_indexing_slowlog_rolling.type = Console -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.layout.type = ECSJsonLayout -appender.index_indexing_slowlog_rolling.layout.dataset = elasticsearch.index_indexing_slowlog - -################################################# - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false - -logger.org_apache_pdfbox.name = org.apache.pdfbox -logger.org_apache_pdfbox.level = off - -logger.org_apache_poi.name = org.apache.poi -logger.org_apache_poi.level = off - -logger.org_apache_fontbox.name = org.apache.fontbox -logger.org_apache_fontbox.level = off - -logger.org_apache_xmlbeans.name = org.apache.xmlbeans -logger.org_apache_xmlbeans.level = off - -logger.com_amazonaws.name = com.amazonaws -logger.com_amazonaws.level = warn - -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.name = com.amazonaws.jmx.SdkMBeanRegistrySupport -logger.com_amazonaws_jmx_SdkMBeanRegistrySupport.level = error - -logger.com_amazonaws_metrics_AwsSdkMetrics.name = com.amazonaws.metrics.AwsSdkMetrics -logger.com_amazonaws_metrics_AwsSdkMetrics.level = error - -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.name = com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader -logger.com_amazonaws_auth_profile_internal_BasicProfileConfigFileLoader.level = error - -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.name = com.amazonaws.services.s3.internal.UseArnRegionResolver -logger.com_amazonaws_services_s3_internal_UseArnRegionResolver.level = error - -appender.audit_rolling.type = Console -appender.audit_rolling.name = audit_rolling -appender.audit_rolling.layout.type = PatternLayout -appender.audit_rolling.layout.pattern = {\ - "type":"audit", \ - "timestamp":"%d{yyyy-MM-dd'T'HH:mm:ss,SSSZ}"\ - %varsNotEmpty{, "cluster.name":"%enc{%map{cluster.name}}{JSON}"}\ - %varsNotEmpty{, "cluster.uuid":"%enc{%map{cluster.uuid}}{JSON}"}\ - %varsNotEmpty{, "node.name":"%enc{%map{node.name}}{JSON}"}\ - %varsNotEmpty{, "node.id":"%enc{%map{node.id}}{JSON}"}\ - %varsNotEmpty{, "host.name":"%enc{%map{host.name}}{JSON}"}\ - %varsNotEmpty{, "host.ip":"%enc{%map{host.ip}}{JSON}"}\ - %varsNotEmpty{, "event.type":"%enc{%map{event.type}}{JSON}"}\ - %varsNotEmpty{, "event.action":"%enc{%map{event.action}}{JSON}"}\ - %varsNotEmpty{, "authentication.type":"%enc{%map{authentication.type}}{JSON}"}\ - %varsNotEmpty{, "user.name":"%enc{%map{user.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.name":"%enc{%map{user.run_by.name}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.name":"%enc{%map{user.run_as.name}}{JSON}"}\ - %varsNotEmpty{, "user.realm":"%enc{%map{user.realm}}{JSON}"}\ - %varsNotEmpty{, "user.realm_domain":"%enc{%map{user.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm":"%enc{%map{user.run_by.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_by.realm_domain":"%enc{%map{user.run_by.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm":"%enc{%map{user.run_as.realm}}{JSON}"}\ - %varsNotEmpty{, "user.run_as.realm_domain":"%enc{%map{user.run_as.realm_domain}}{JSON}"}\ - %varsNotEmpty{, "user.roles":%map{user.roles}}\ - %varsNotEmpty{, "apikey.id":"%enc{%map{apikey.id}}{JSON}"}\ - %varsNotEmpty{, "apikey.name":"%enc{%map{apikey.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.name":"%enc{%map{authentication.token.name}}{JSON}"}\ - %varsNotEmpty{, "authentication.token.type":"%enc{%map{authentication.token.type}}{JSON}"}\ - %varsNotEmpty{, "cross_cluster_access":%map{cross_cluster_access}}\ - %varsNotEmpty{, "origin.type":"%enc{%map{origin.type}}{JSON}"}\ - %varsNotEmpty{, "origin.address":"%enc{%map{origin.address}}{JSON}"}\ - %varsNotEmpty{, "realm":"%enc{%map{realm}}{JSON}"}\ - %varsNotEmpty{, "realm_domain":"%enc{%map{realm_domain}}{JSON}"}\ - %varsNotEmpty{, "url.path":"%enc{%map{url.path}}{JSON}"}\ - %varsNotEmpty{, "url.query":"%enc{%map{url.query}}{JSON}"}\ - %varsNotEmpty{, "request.method":"%enc{%map{request.method}}{JSON}"}\ - %varsNotEmpty{, "request.body":"%enc{%map{request.body}}{JSON}"}\ - %varsNotEmpty{, "request.id":"%enc{%map{request.id}}{JSON}"}\ - %varsNotEmpty{, "action":"%enc{%map{action}}{JSON}"}\ - %varsNotEmpty{, "request.name":"%enc{%map{request.name}}{JSON}"}\ - %varsNotEmpty{, "indices":%map{indices}}\ - %varsNotEmpty{, "opaque_id":"%enc{%map{opaque_id}}{JSON}"}\ - %varsNotEmpty{, "trace.id":"%enc{%map{trace.id}}{JSON}"}\ - %varsNotEmpty{, "x_forwarded_for":"%enc{%map{x_forwarded_for}}{JSON}"}\ - %varsNotEmpty{, "transport.profile":"%enc{%map{transport.profile}}{JSON}"}\ - %varsNotEmpty{, "rule":"%enc{%map{rule}}{JSON}"}\ - %varsNotEmpty{, "put":%map{put}}\ - %varsNotEmpty{, "delete":%map{delete}}\ - %varsNotEmpty{, "change":%map{change}}\ - %varsNotEmpty{, "create":%map{create}}\ - %varsNotEmpty{, "invalidate":%map{invalidate}}\ - }%n -# "node.name" node name from the `elasticsearch.yml` settings -# "node.id" node id which should not change between cluster restarts -# "host.name" unresolved hostname of the local node -# "host.ip" the local bound ip (i.e. the ip listening for connections) -# "origin.type" a received REST request is translated into one or more transport requests. This indicates which processing layer generated the event "rest" or "transport" (internal) -# "event.action" the name of the audited event, eg. "authentication_failed", "access_granted", "run_as_granted", etc. -# "authentication.type" one of "realm", "api_key", "token", "anonymous" or "internal" -# "user.name" the subject name as authenticated by a realm -# "user.run_by.name" the original authenticated subject name that is impersonating another one. -# "user.run_as.name" if this "event.action" is of a run_as type, this is the subject name to be impersonated as. -# "user.realm" the name of the realm that authenticated "user.name" -# "user.realm_domain" if "user.realm" is under a domain, this is the name of the domain -# "user.run_by.realm" the realm name of the impersonating subject ("user.run_by.name") -# "user.run_by.realm_domain" if "user.run_by.realm" is under a domain, this is the name of the domain -# "user.run_as.realm" if this "event.action" is of a run_as type, this is the realm name the impersonated user is looked up from -# "user.run_as.realm_domain" if "user.run_as.realm" is under a domain, this is the name of the domain -# "user.roles" the roles array of the user; these are the roles that are granting privileges -# "apikey.id" this field is present if and only if the "authentication.type" is "api_key" -# "apikey.name" this field is present if and only if the "authentication.type" is "api_key" -# "authentication.token.name" this field is present if and only if the authenticating credential is a service account token -# "authentication.token.type" this field is present if and only if the authenticating credential is a service account token -# "cross_cluster_access" this field is present if and only if the associated authentication occurred cross cluster -# "event.type" informs about what internal system generated the event; possible values are "rest", "transport", "ip_filter" and "security_config_change" -# "origin.address" the remote address and port of the first network hop, i.e. a REST proxy or another cluster node -# "realm" name of a realm that has generated an "authentication_failed" or an "authentication_successful"; the subject is not yet authenticated -# "realm_domain" if "realm" is under a domain, this is the name of the domain -# "url.path" the URI component between the port and the query string; it is percent (URL) encoded -# "url.query" the URI component after the path and before the fragment; it is percent (URL) encoded -# "request.method" the method of the HTTP request, i.e. one of GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, CONNECT -# "request.body" the content of the request body entity, JSON escaped -# "request.id" a synthetic identifier for the incoming request, this is unique per incoming request, and consistent across all audit events generated by that request -# "action" an action is the most granular operation that is authorized and this identifies it in a namespaced way (internal) -# "request.name" if the event is in connection to a transport message this is the name of the request class, similar to how rest requests are identified by the url path (internal) -# "indices" the array of indices that the "action" is acting upon -# "opaque_id" opaque value conveyed by the "X-Opaque-Id" request header -# "trace_id" an identifier conveyed by the part of "traceparent" request header -# "x_forwarded_for" the addresses from the "X-Forwarded-For" request header, as a verbatim string value (not an array) -# "transport.profile" name of the transport profile in case this is a "connection_granted" or "connection_denied" event -# "rule" name of the applied rule if the "origin.type" is "ip_filter" -# the "put", "delete", "change", "create", "invalidate" fields are only present -# when the "event.type" is "security_config_change" and contain the security config change (as an object) taking effect - -logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail -logger.xpack_security_audit_logfile.level = info -logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling -logger.xpack_security_audit_logfile.additivity = false - -logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature -logger.xmlsig.level = error -logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter -logger.samlxml_decrypt.level = fatal -logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter -logger.saml2_decrypt.level = fatal \ No newline at end of file diff --git a/elasticsearch/tmp-config/role_mapping.yml b/elasticsearch/tmp-config/role_mapping.yml deleted file mode 100644 index 68c82f7e..00000000 --- a/elasticsearch/tmp-config/role_mapping.yml +++ /dev/null @@ -1,14 +0,0 @@ -# Role mapping configuration file which has elasticsearch roles as keys -# that map to one or more user or group distinguished names - -#roleA: this is an elasticsearch role -# - groupA-DN this is a group distinguished name -# - groupB-DN -# - user1-DN this is the full user distinguished name - -#power_user: -# - "cn=admins,dc=example,dc=com" -#user: -# - "cn=users,dc=example,dc=com" -# - "cn=admins,dc=example,dc=com" -# - "cn=John Doe,cn=other users,dc=example,dc=com" diff --git a/elasticsearch/tmp-config/roles.yml b/elasticsearch/tmp-config/roles.yml deleted file mode 100644 index 68e003b8..00000000 --- a/elasticsearch/tmp-config/roles.yml +++ /dev/null @@ -1,3 +0,0 @@ -# The default roles file is empty as the preferred method of defining roles is -# through the API/UI. File based roles are useful in error scenarios when the -# API based roles may not be available. diff --git a/elasticsearch/tmp-config/users b/elasticsearch/tmp-config/users deleted file mode 100644 index e69de29b..00000000 diff --git a/elasticsearch/tmp-config/users_roles b/elasticsearch/tmp-config/users_roles deleted file mode 100644 index e69de29b..00000000 diff --git a/pyproject.toml b/pyproject.toml index bb1668f0..a50a160f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,36 +7,36 @@ name = "TrialMatchAI" version = "0.1.0" description = "AI-driven clinical trial matching pipeline." readme = "README.md" -requires-python = ">=3.10,<3.12" -license = {file = "LICENSE"} +requires-python = ">=3.11,<3.12" +license = "MIT" +license-files = ["LICENSE"] dependencies = [ # Core ML / NLP - "torch==2.7.1", - "torchvision==0.22.1", - "torchaudio==2.7.1", - "transformers==4.55.0", + "torch==2.11.0", + "transformers==5.6.2", "accelerate==1.8.1", - "tokenizers==0.21.1", - "safetensors==0.5.3", - "sentence-transformers==2.7.0", - "sentencepiece==0.2.0", - "datasets==2.19.0", + "tokenizers==0.22.1", + "safetensors>=0.6.2,<0.7", + "sentencepiece==0.2.1", + "elasticsearch==8.17.2", "faiss-cpu==1.9.0.post1", "peft==0.15.2", "einops==0.8.0", "tiktoken==0.8.0", - "bitsandbytes==0.46.1", - "vllm==0.10.1.1", # Classical stack & utilities - "numpy==1.26.4", + "numpy>=2.0,<3", "scipy==1.15.1", "scikit-learn==1.6.1", "pandas==2.2.3", + "python-dateutil==2.9.0.post0", + "requests==2.34.2", + "tenacity==9.0.0", + "joblib==1.4.2", "tqdm==4.67.1", - "regex==2024.11.6", - "orjson==3.10.14", + "regex>=2025.10.22,<2027", + "orjson==3.11.9", "PyYAML==6.0.2", - "python-dotenv==1.0.1", + "python-dotenv==1.2.2", "rich==13.9.4", # spaCy / medspaCy (for your medical text work) "spacy==3.7.5", @@ -46,29 +46,46 @@ dependencies = [ "PyFastNER==1.0.10", "pysbd==0.3.4", "quicksectx==0.4.0", - "gliner==0.2.16", + "gliner==0.2.27", # App / infra "SQLAlchemy==2.0.37", - "pydantic==2.11.7", - "pydantic-settings==2.7.1", - # Optional APIs - "openai==1.99.1", + "pydantic>=2.12.0,<3", + "pydantic-settings>=2.10.1,<3", + "huggingface_hub>=1.5.0,<2", + "bioregistry==0.13.62", + "rapidfuzz==3.14.5", + "nltk==3.9.4", +] + +[project.optional-dependencies] +gpu = [ + "bitsandbytes==0.49.2; sys_platform == 'linux' or sys_platform == 'win32'", + "vllm==0.23.0; sys_platform == 'linux'", +] +llm = [ + "openai>=2.26.0,<3", "httpx==0.28.1", - "langchain==0.3.18", - "langchain-core==0.3.35", - "langchain-community==0.3.17", - "langchain-openai==0.3.5", - "langsmith==0.2.11", - "huggingface_hub==0.34.4", + "langchain==1.3.10", + "langchain-community==0.4.2", + "langchain-openai==1.3.2", +] +training = [ + "datasets==2.19.0", + "bert-score==0.3.13", + "jinja2==3.1.6", ] [project.scripts] trialmatchai-healthcheck = "Matcher.cli.healthcheck:main" +trialmatchai-run = "Matcher.cli.run:main" +trialmatchai-bootstrap-data = "Matcher.cli.bootstrap_data:main" +trialmatchai-index = "Matcher.cli.index_data:main" [dependency-groups] dev = [ - "pytest>=7.4", - "ruff>=0.6.0", + "pytest>=8.3", + "ruff>=0.9.0", + "pip-audit>=2.7.3", ] [tool.setuptools] @@ -78,15 +95,12 @@ include-package-data = true [tool.setuptools.packages.find] where = ["source"] -[tool.uv] -index-url = "https://pypi.org/simple" - -[[tool.uv.index]] -name = "pytorch-cuda" -url = "https://download.pytorch.org/whl/cu128" -explicit = true +[tool.setuptools.package-data] +Matcher = ["config/*.json"] +Parser = ["bin/*", "include/*", "lib/*", "normalizers/*.md"] -[tool.uv.sources] -torch = { index = "pytorch-cuda" } -torchvision = { index = "pytorch-cuda" } -torchaudio = { index = "pytorch-cuda" } \ No newline at end of file +[tool.uv] +environments = [ + "sys_platform == 'darwin'", + "sys_platform == 'linux' and platform_machine == 'x86_64'", +] diff --git a/requirements.txt b/requirements.txt index 1546abda..f75c9925 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,39 +1,34 @@ ---extra-index-url https://download.pytorch.org/whl/cu128 - # Core ML / NLP -torch==2.7.1 -torchvision==0.22.1 -torchaudio==2.7.1 -transformers==4.55.0 +torch==2.11.0 +transformers==5.6.2 accelerate==1.8.1 -tokenizers==0.21.1 -safetensors==0.5.3 -sentence-transformers==2.7.0 -sentencepiece==0.2.0 -datasets==2.19.0 +tokenizers==0.22.1 +safetensors>=0.6.2,<0.7 +sentencepiece==0.2.1 +elasticsearch==8.17.2 faiss-cpu==1.9.0.post1 peft==0.15.2 einops==0.8.0 tiktoken==0.8.0 -bitsandbytes==0.46.1 -vllm==0.10.1.1 -# vllm dependencies (pin to avoid backtracking) -fastapi>=0.115.0 -uvicorn[standard]>=0.30.0 -dnspython>=2.6.0 -email-validator>=2.0.0 +# GPU inference extra: install with `uv sync --extra gpu`. +bitsandbytes==0.49.2; sys_platform == "linux" or sys_platform == "win32" +vllm==0.23.0; sys_platform == "linux" # Classical stack & utilities -numpy==1.26.4 +numpy>=2.0,<3 scipy==1.15.1 scikit-learn==1.6.1 pandas==2.2.3 +python-dateutil==2.9.0.post0 +requests==2.34.2 +tenacity==9.0.0 +joblib==1.4.2 tqdm==4.67.1 -regex==2024.11.6 -orjson==3.10.14 +regex>=2025.10.22,<2027 +orjson==3.11.9 PyYAML==6.0.2 -python-dotenv==1.0.1 +python-dotenv==1.2.2 rich==13.9.4 # spaCy / medspaCy (for your medical text work) @@ -44,19 +39,25 @@ PyRuSH==1.0.9 PyFastNER==1.0.10 pysbd==0.3.4 quicksectx==0.4.0 -gliner==0.2.16 +gliner==0.2.27 # App / infra SQLAlchemy==2.0.37 -pydantic==2.11.7 -pydantic-settings==2.7.1 +pydantic>=2.12.0,<3 +pydantic-settings>=2.10.1,<3 -# Optional APIs -openai==1.99.1 +# LLM tooling extra: install with `uv sync --extra llm`. +openai>=2.26.0,<3 httpx==0.28.1 -langchain==0.3.18 -langchain-core==0.3.35 -langchain-community==0.3.17 -langchain-openai==0.3.5 -langsmith==0.2.11 -huggingface_hub==0.34.4 \ No newline at end of file +langchain==1.3.10 +langchain-community==0.4.2 +langchain-openai==1.3.2 +huggingface_hub>=1.5.0,<2 +bioregistry==0.13.62 +rapidfuzz==3.14.5 + +# Training/evaluation extra: install with `uv sync --extra training`. +datasets==2.19.0 +bert-score==0.3.13 +jinja2==3.1.6 +nltk==3.9.4 diff --git a/scripts/bootstrap_data.sh b/scripts/bootstrap_data.sh index 8ec1b7db..ebf72565 100644 --- a/scripts/bootstrap_data.sh +++ b/scripts/bootstrap_data.sh @@ -16,8 +16,48 @@ MODELS_ARCHIVE="models.tar.gz" GREEN='\033[0;32m' NC='\033[0m' info() { echo -e "${GREEN}[INFO]${NC} $*"; } +warn() { echo -e "[WARN] $*" >&2; } error() { echo -e "[ERROR] $*" >&2; exit 1; } +verify_sha256() { + local file="$1" + local expected="$2" + if [ -z "$expected" ]; then + warn "No SHA-256 checksum configured for $file; skipping verification." + return 0 + fi + local actual + actual="$(sha256sum "$file" 2>/dev/null | awk '{print $1}' || shasum -a 256 "$file" | awk '{print $1}')" + if [ "$actual" != "$expected" ]; then + error "Checksum mismatch for $file: expected $expected, got $actual" + fi +} + +assert_safe_archive_paths() { + local archive="$1" + shift + local list_cmd=("$@") + local unsafe + unsafe="$("${list_cmd[@]}" "$archive" | awk '($0 ~ /^\// || $0 ~ /(^|\/)\.\.($|\/)/) {print; exit}')" + if [ -n "$unsafe" ]; then + error "Archive $archive contains unsafe path: $unsafe" + fi +} + +extract_tar_gz() { + local archive="$1" + local target="$2" + assert_safe_archive_paths "$archive" tar -tzf + tar -xzf "$archive" -C "$target" +} + +extract_zip() { + local archive="$1" + local target="$2" + assert_safe_archive_paths "$archive" unzip -Z1 + unzip -q "$archive" -d "$target" +} + ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" DATA_DIR="${ROOT_DIR}/data" @@ -31,6 +71,7 @@ if [ ! -f "$ARCHIVE_1" ]; then else info "${ARCHIVE_1} already exists. Skipping download." fi +verify_sha256 "$ARCHIVE_1" "${TRIALMATCHAI_PROCESSED_TRIALS_SHA256:-}" if [ ! -f "$RESOURCES_ARCHIVE" ]; then info "Downloading ${RESOURCES_ARCHIVE}..." @@ -38,6 +79,7 @@ if [ ! -f "$RESOURCES_ARCHIVE" ]; then else info "${RESOURCES_ARCHIVE} already exists. Skipping download." fi +verify_sha256 "$RESOURCES_ARCHIVE" "${TRIALMATCHAI_RESOURCES_SHA256:-}" if [ ! -f "$MODELS_ARCHIVE" ]; then info "Downloading ${MODELS_ARCHIVE}..." @@ -45,6 +87,7 @@ if [ ! -f "$MODELS_ARCHIVE" ]; then else info "${MODELS_ARCHIVE} already exists. Skipping download." fi +verify_sha256 "$MODELS_ARCHIVE" "${TRIALMATCHAI_MODELS_SHA256:-}" if [ ! -d "processed_criteria" ]; then info "Downloading and extracting processed_criteria chunks..." @@ -61,8 +104,10 @@ if [ ! -d "processed_criteria" ]; then info "$chunk_zip already exists. Skipping download." fi + checksum_var="TRIALMATCHAI_CRITERIA_PART_${i}_SHA256" + verify_sha256 "$chunk_zip" "${!checksum_var:-}" info "Extracting $chunk_zip into processed_criteria..." - unzip -q "$chunk_zip" -d processed_criteria + extract_zip "$chunk_zip" processed_criteria done else info "processed_criteria already exists. Skipping extraction." @@ -70,7 +115,7 @@ fi if [ ! -d "processed_trials" ]; then info "Extracting $ARCHIVE_1..." - tar -xzvf "$ARCHIVE_1" + extract_tar_gz "$ARCHIVE_1" "$DATA_DIR" else info "processed_trials already exists. Skipping extraction of $ARCHIVE_1." fi @@ -79,11 +124,11 @@ cd "$ROOT_DIR" info "Extracting resources into source/Parser..." mkdir -p source/Parser -tar -xzvf "$DATA_DIR/$RESOURCES_ARCHIVE" -C source/Parser +extract_tar_gz "$DATA_DIR/$RESOURCES_ARCHIVE" source/Parser info "Extracting models into models/..." mkdir -p models -tar -xzvf "$DATA_DIR/$MODELS_ARCHIVE" -C models +extract_tar_gz "$DATA_DIR/$MODELS_ARCHIVE" models info "Cleaning up archives..." rm -f "$DATA_DIR/$ARCHIVE_1" "$DATA_DIR/$RESOURCES_ARCHIVE" "$DATA_DIR/$MODELS_ARCHIVE" @@ -91,4 +136,4 @@ for i in $(seq 0 $((CHUNK_COUNT - 1))); do rm -f "$DATA_DIR/${CHUNK_PREFIX}_${i}.zip" done -info "✅ Data bootstrap complete." +info "Data bootstrap complete." diff --git a/scripts/scan_secrets.py b/scripts/scan_secrets.py new file mode 100644 index 00000000..fa5f5dae --- /dev/null +++ b/scripts/scan_secrets.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +from __future__ import annotations + +import re +import subprocess +import sys +from pathlib import Path + + +SECRET_PATTERNS = [ + re.compile(r"-----BEGIN [A-Z ]*PRIVATE KEY-----"), + re.compile( + r"\bELASTIC_PASSWORD\s*=\s*['\"]?(?!change-me|CHANGE_ME|<|\$|$)[^\s'\"]+" + ), + re.compile( + r"\bKIBANA_PASSWORD\s*=\s*['\"]?(?!change-me|CHANGE_ME|<|\$|$)[^\s'\"]+" + ), + re.compile(r"\bpassword['\"]?\s*:\s*['\"](?!CHANGE_ME|change-me)[^'\"]{12,}['\"]"), +] + +SECRET_PATH_PATTERNS = [ + re.compile(r"^elasticsearch/(certs|config|tmp-config)/"), + re.compile(r"(^|/).*\.key$"), + re.compile(r"(^|/)elasticsearch\.keystore$"), +] + +SKIP_SUFFIXES = {".png", ".jpg", ".jpeg", ".gif", ".zip", ".gz", ".sif", ".so", ".a"} + + +def main() -> int: + files = subprocess.check_output(["git", "ls-files"], text=True).splitlines() + findings: list[str] = [] + for raw_path in files: + for pattern in SECRET_PATH_PATTERNS: + if pattern.search(raw_path): + findings.append(f"{raw_path}: tracked generated secret material") + path = Path(raw_path) + if path.suffix.lower() in SKIP_SUFFIXES: + continue + try: + text = path.read_text(encoding="utf-8") + except UnicodeDecodeError: + continue + for pattern in SECRET_PATTERNS: + for match in pattern.finditer(text): + line = text.count("\n", 0, match.start()) + 1 + findings.append(f"{raw_path}:{line}: {pattern.pattern}") + + if findings: + print("Potential secrets found in tracked files:", file=sys.stderr) + print("\n".join(findings), file=sys.stderr) + return 1 + print("No tracked-file secrets found.") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/start_es.sh b/scripts/start_es.sh index d4d56312..01679630 100644 --- a/scripts/start_es.sh +++ b/scripts/start_es.sh @@ -12,7 +12,13 @@ cd "$ROOT_DIR/elasticsearch" if command -v docker &> /dev/null && docker info &> /dev/null; then info "Docker is available. Starting Elasticsearch with Docker Compose..." - docker-compose up -d --build + if docker compose version &> /dev/null; then + docker compose up -d + elif command -v docker-compose &> /dev/null; then + docker-compose up -d + else + error "Docker is available, but Docker Compose is not installed." + fi elif command -v apptainer &> /dev/null; then info "Docker not found or not running. Falling back to Apptainer..." if [ ! -f "./apptainer-run-es.sh" ]; then diff --git a/setup.sh b/setup.sh index afb26ad8..7183c7d3 100644 --- a/setup.sh +++ b/setup.sh @@ -31,6 +31,7 @@ fi if command -v uv &> /dev/null; then info "Installing Python dependencies with uv..." uv sync + RUNNER=(uv run) else if ! command -v pip &> /dev/null; then error "pip not found. Please install Python and pip first." @@ -38,11 +39,13 @@ else info "Installing Python requirements with pip..." pip install --upgrade pip pip install -r requirements.txt + pip install -e . + RUNNER=() fi # 2) Prepare data and models info "Bootstrapping data and models..." -bash scripts/bootstrap_data.sh +"${RUNNER[@]}" trialmatchai-bootstrap-data # 3) Launch Elasticsearch info "Starting Elasticsearch..." @@ -50,6 +53,6 @@ bash scripts/start_es.sh # 4) Launch indexers in background info "Indexing trial data..." -bash scripts/index_data.sh +"${RUNNER[@]}" trialmatchai-index -info "✅ TrialMatchAI setup is complete!" +info "TrialMatchAI setup is complete." diff --git a/source/Matcher/cli/bootstrap_data.py b/source/Matcher/cli/bootstrap_data.py new file mode 100644 index 00000000..69d9944a --- /dev/null +++ b/source/Matcher/cli/bootstrap_data.py @@ -0,0 +1,36 @@ +from __future__ import annotations + +import argparse +import subprocess +import sys +from pathlib import Path + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Download and prepare TrialMatchAI data and model artifacts" + ) + parser.add_argument( + "--script", + default="scripts/bootstrap_data.sh", + help="Bootstrap script path relative to the repository root", + ) + args = parser.parse_args() + + root = _repo_root() + script = (root / args.script).resolve() + if not script.exists(): + raise FileNotFoundError(f"Bootstrap script not found: {script}") + return subprocess.run(["bash", str(script)], cwd=str(root), check=False).returncode + + +def _repo_root() -> Path: + start = Path(__file__).resolve() + for parent in start.parents: + if (parent / "pyproject.toml").exists(): + return parent + return Path.cwd().resolve() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/source/Matcher/cli/healthcheck.py b/source/Matcher/cli/healthcheck.py index c82ca704..217a8fe2 100644 --- a/source/Matcher/cli/healthcheck.py +++ b/source/Matcher/cli/healthcheck.py @@ -2,13 +2,13 @@ import argparse import sys -from pathlib import Path -from typing import Any, Dict - -from elasticsearch import Elasticsearch from Matcher.config.config_loader import load_config -from Matcher.services.elasticsearch_service import ensure_elasticsearch +from Matcher.services.elasticsearch_service import ( + build_elasticsearch_client, + ensure_elasticsearch, +) +from Matcher.services.preflight import run_preflight_checks from Matcher.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -18,7 +18,7 @@ def main() -> int: parser = argparse.ArgumentParser(description="TrialMatchAI healthcheck") parser.add_argument( "--config", - default="Matcher/config/config.json", + default=None, help="Path to config.json", ) parser.add_argument( @@ -26,21 +26,26 @@ def main() -> int: action="store_true", help="Attempt to start Elasticsearch if unreachable", ) + parser.add_argument( + "--require-indices", + action="store_true", + help="Fail if configured Elasticsearch indices are missing", + ) args = parser.parse_args() config = load_config(args.config) issues = 0 - _check_paths(config) + preflight_issues = run_preflight_checks( + config, + require_patient_inputs=False, + require_trials_json=False, + require_models=False, + ) + issues += len(preflight_issues) es_cfg = config["elasticsearch"] - es_client = Elasticsearch( - hosts=[es_cfg["host"]], - ca_certs=config["paths"]["docker_certs"], - basic_auth=(es_cfg["username"], es_cfg["password"]), - request_timeout=es_cfg["request_timeout"], - retry_on_timeout=es_cfg["retry_on_timeout"], - ) + es_client = build_elasticsearch_client(config) if args.start_es and es_cfg.get("auto_start") is False: es_cfg["auto_start"] = True @@ -51,16 +56,15 @@ def main() -> int: else: logger.info("Elasticsearch reachable.") - return 1 if issues else 0 - - -def _check_paths(config: Dict[str, Any]) -> None: - paths = config["paths"] - for key in ["patients_dir", "output_dir", "trials_json_folder", "docker_certs"]: - path = Path(paths[key]) - if not path.exists(): - logger.warning("Path not found: %s=%s", key, path) - + if args.require_indices: + issues += len( + run_preflight_checks( + config, + es_client=es_client, + require_indices=True, + ) + ) + return 1 if issues else 0 if __name__ == "__main__": sys.exit(main()) diff --git a/source/Matcher/cli/index_data.py b/source/Matcher/cli/index_data.py new file mode 100644 index 00000000..8922faf0 --- /dev/null +++ b/source/Matcher/cli/index_data.py @@ -0,0 +1,34 @@ +from __future__ import annotations + +import argparse +import subprocess +import sys +from pathlib import Path + + +def main() -> int: + parser = argparse.ArgumentParser(description="Index TrialMatchAI data into Elasticsearch") + parser.add_argument( + "--script", + default="scripts/index_data.sh", + help="Indexing script path relative to the repository root", + ) + args = parser.parse_args() + + root = _repo_root() + script = (root / args.script).resolve() + if not script.exists(): + raise FileNotFoundError(f"Indexing script not found: {script}") + return subprocess.run(["bash", str(script)], cwd=str(root), check=False).returncode + + +def _repo_root() -> Path: + start = Path(__file__).resolve() + for parent in start.parents: + if (parent / "pyproject.toml").exists(): + return parent + return Path.cwd().resolve() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/source/Matcher/cli/run.py b/source/Matcher/cli/run.py new file mode 100644 index 00000000..67f7b6b1 --- /dev/null +++ b/source/Matcher/cli/run.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import argparse +import sys + + +def main() -> int: + parser = argparse.ArgumentParser(description="Run the TrialMatchAI batch pipeline") + parser.add_argument("--config", default=None, help="Path to config.json") + args = parser.parse_args() + from Matcher.main import main_pipeline + + return main_pipeline(args.config) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/source/Matcher/config/config.json b/source/Matcher/config/config.json index da3642b8..75f9d0b3 100644 --- a/source/Matcher/config/config.json +++ b/source/Matcher/config/config.json @@ -4,22 +4,25 @@ "gner_port": 18783, "gene_norm_port": 18888, "disease_norm_port": 18892, - "biomedner_home": "Parser/", + "biomedner_home": "source/Parser/", "use_neural_normalizer": true, "no_cuda": false }, "services": { - "stop_script": "biomedner_services/run_biomedner.sh", - "run_script": "biomedner_services/run_biomedner.sh" + "stop_script": "source/biomedner_services/stop_biomedner.sh", + "run_script": "source/biomedner_services/run_biomedner.sh", + "auto_start": false }, "paths": { - "patients_dir": "../example/", - "output_dir": "../results/", - "trials_json_folder": "../data/trials_jsons", - "docker_certs": "../elasticsearch/certs/ca.crt" + "patients_dir": "example", + "output_dir": "results", + "trials_json_folder": "data/trials_jsons", + "docker_certs": "elasticsearch/certs/ca/ca.crt" }, "model": { "base_model": "microsoft/phi-4", + "base_model_revision": null, + "trust_remote_code": false, "quantization": { "load_in_4bit": true, "bnb_4bit_use_double_quant": true, @@ -28,6 +31,7 @@ }, "cot_adapter_path": "models/finetuned_phi_reasoning", "reranker_model_path": "google/gemma-2-2b-it", + "reranker_model_revision": null, "reranker_adapter_path": "models/finetuned_gemma2" }, "tokenizer": { @@ -44,13 +48,15 @@ "request_timeout": 600, "retry_on_timeout": true, "index_trials": "clinical_trials", - "index_trials_eligibility": "eligibility_criteria", - "auto_start": true, + "index_trials_eligibility": "trials_eligibility", + "auto_start": false, "start_script": "elasticsearch/apptainer-run-es.sh", "start_timeout": 600 }, "embedder": { "model_name": "BAAI/bge-m3", + "revision": null, + "trust_remote_code": false, "pooling": "mean", "max_length": 512, "batch_size": 32, diff --git a/source/Matcher/config/config_loader.py b/source/Matcher/config/config_loader.py index 58023354..15ba3d29 100644 --- a/source/Matcher/config/config_loader.py +++ b/source/Matcher/config/config_loader.py @@ -2,6 +2,8 @@ import json import os +from copy import deepcopy +from pathlib import Path from typing import Any, Dict from Matcher.config.settings import TrialMatchSettings, apply_env_overrides @@ -16,19 +18,110 @@ logger = setup_logging(__name__) -def load_config(config_path: str = "Matcher/config/config.json") -> Dict[str, Any]: +DEFAULT_CONFIG_RELATIVE_PATH = Path("source/Matcher/config/config.json") +LEGACY_CONFIG_RELATIVE_PATH = Path("Matcher/config/config.json") + + +def load_config(config_path: str | os.PathLike[str] | None = None) -> Dict[str, Any]: """Load and validate configuration from a JSON file with env overrides.""" if load_dotenv: + load_dotenv(_repo_root() / ".env") load_dotenv() - if not os.path.exists(config_path): - raise FileNotFoundError(f"Configuration file not found: {config_path}") - with open(config_path, "r", encoding="utf-8") as f: + + resolved_config = resolve_config_path(config_path) + with resolved_config.open("r", encoding="utf-8") as f: raw: Dict[str, Any] = json.load(f) - raw = apply_env_overrides(raw) + raw = apply_env_overrides(deepcopy(raw)) settings = TrialMatchSettings.model_validate(raw) cfg = settings.to_dict() + cfg = normalize_config_paths(cfg, resolved_config) if cfg.get("elasticsearch", {}).get("password") in {"", "CHANGE_ME"}: logger.warning( "Elasticsearch password is not set. Use TRIALMATCHAI_ES_PASSWORD to supply it." ) return cfg + + +def resolve_config_path( + config_path: str | os.PathLike[str] | None = None, +) -> Path: + """Resolve explicit, repo-root, legacy, and packaged config paths.""" + root = _repo_root() + candidates: list[Path] = [] + if config_path: + supplied = Path(config_path).expanduser() + if supplied.is_absolute(): + candidates.append(supplied) + else: + candidates.extend( + [ + Path.cwd() / supplied, + root / supplied, + root / "source" / supplied, + ] + ) + if supplied == LEGACY_CONFIG_RELATIVE_PATH: + candidates.append(root / DEFAULT_CONFIG_RELATIVE_PATH) + else: + candidates.extend( + [ + root / DEFAULT_CONFIG_RELATIVE_PATH, + Path(__file__).resolve().with_name("config.json"), + ] + ) + + for candidate in candidates: + if candidate.exists(): + return candidate.resolve() + + searched = ", ".join(str(path) for path in candidates) + label = str(config_path) if config_path else str(DEFAULT_CONFIG_RELATIVE_PATH) + raise FileNotFoundError(f"Configuration file not found: {label}. Searched: {searched}") + + +def normalize_config_paths(cfg: Dict[str, Any], config_path: Path) -> Dict[str, Any]: + """Normalize known local paths while leaving remote model IDs untouched.""" + root = _repo_root(config_path) + for key in ("patients_dir", "output_dir", "trials_json_folder", "docker_certs"): + value = cfg.get("paths", {}).get(key) + if value: + cfg["paths"][key] = str(_resolve_local_path(value, root)) + + for key in ("stop_script", "run_script"): + value = cfg.get("services", {}).get(key) + if value: + cfg["services"][key] = str(_resolve_local_path(value, root)) + + biomedner_home = cfg.get("bio_med_ner", {}).get("biomedner_home") + if biomedner_home: + cfg["bio_med_ner"]["biomedner_home"] = str( + _resolve_local_path(biomedner_home, root) + ) + + start_script = cfg.get("elasticsearch", {}).get("start_script") + if start_script: + cfg["elasticsearch"]["start_script"] = str(_resolve_local_path(start_script, root)) + + for key in ("cot_adapter_path", "reranker_adapter_path"): + value = cfg.get("model", {}).get(key) + if value: + cfg["model"][key] = str(_resolve_local_path(value, root)) + + return cfg + + +def _resolve_local_path(value: str, root: Path) -> Path: + path = Path(value).expanduser() + if path.is_absolute(): + return path.resolve() + return (root / path).resolve() + + +def _repo_root(anchor: Path | None = None) -> Path: + start = (anchor or Path(__file__).resolve()).resolve() + if start.is_file(): + start = start.parent + for parent in (start, *start.parents): + if (parent / "pyproject.toml").exists(): + return parent + return Path.cwd().resolve() diff --git a/source/Matcher/config/settings.py b/source/Matcher/config/settings.py index bd66cc38..10b9f7e2 100644 --- a/source/Matcher/config/settings.py +++ b/source/Matcher/config/settings.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import Any, Dict, Optional +from typing import Any, Dict, Iterable, Tuple from pydantic import BaseModel, Field, field_validator @@ -18,6 +18,7 @@ class BioMedNerSettings(BaseModel): class ServicesSettings(BaseModel): stop_script: str run_script: str + auto_start: bool = False class PathsSettings(BaseModel): @@ -40,6 +41,9 @@ class ModelSettings(BaseModel): cot_adapter_path: str reranker_model_path: str reranker_adapter_path: str + trust_remote_code: bool = False + base_model_revision: str | None = None + reranker_model_revision: str | None = None class TokenizerSettings(BaseModel): @@ -66,6 +70,8 @@ class ElasticsearchSettings(BaseModel): class EmbedderSettings(BaseModel): model_name: str = "BAAI/bge-m3" + revision: str | None = None + trust_remote_code: bool = False pooling: str = "mean" max_length: int = 512 batch_size: int = 32 @@ -144,34 +150,98 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: """Override config with environment variables for sensitive fields.""" import os - env_map = { + string_env_map: dict[str, Tuple[str, ...]] = { "TRIALMATCHAI_ES_HOST": ("elasticsearch", "host"), "TRIALMATCHAI_ES_USERNAME": ("elasticsearch", "username"), "TRIALMATCHAI_ES_PASSWORD": ("elasticsearch", "password"), + "TRIALMATCHAI_ES_CA_CERTS": ("paths", "docker_certs"), + "TRIALMATCHAI_PATIENTS_DIR": ("paths", "patients_dir"), + "TRIALMATCHAI_OUTPUT_DIR": ("paths", "output_dir"), + "TRIALMATCHAI_TRIALS_JSON_FOLDER": ("paths", "trials_json_folder"), + "TRIALMATCHAI_INDEX_TRIALS": ("elasticsearch", "index_trials"), + "TRIALMATCHAI_INDEX_TRIALS_ELIGIBILITY": ( + "elasticsearch", + "index_trials_eligibility", + ), "TRIALMATCHAI_EMBEDDER_MODEL_NAME": ("embedder", "model_name"), + "TRIALMATCHAI_EMBEDDER_REVISION": ("embedder", "revision"), + "TRIALMATCHAI_MODEL_BASE_MODEL": ("model", "base_model"), + "TRIALMATCHAI_MODEL_BASE_MODEL_REVISION": ( + "model", + "base_model_revision", + ), + "TRIALMATCHAI_MODEL_COT_ADAPTER_PATH": ("model", "cot_adapter_path"), + "TRIALMATCHAI_MODEL_RERANKER_MODEL_PATH": ( + "model", + "reranker_model_path", + ), + "TRIALMATCHAI_MODEL_RERANKER_MODEL_REVISION": ( + "model", + "reranker_model_revision", + ), + "TRIALMATCHAI_MODEL_RERANKER_ADAPTER_PATH": ( + "model", + "reranker_adapter_path", + ), + "TRIALMATCHAI_COT_BACKEND": ("cot_backend",), + "TRIALMATCHAI_ES_START_SCRIPT": ("elasticsearch", "start_script"), + } + for env_key, path in string_env_map.items(): + value = os.getenv(env_key) + if value: + _set_nested(raw, path, value) + + bool_env_map: dict[str, Tuple[str, ...]] = { + "TRIALMATCHAI_ES_AUTO_START": ("elasticsearch", "auto_start"), + "TRIALMATCHAI_ES_RETRY_ON_TIMEOUT": ("elasticsearch", "retry_on_timeout"), + "TRIALMATCHAI_BIOMEDNER_AUTO_START": ("services", "auto_start"), + "TRIALMATCHAI_EMBEDDER_USE_GPU": ("embedder", "use_gpu"), + "TRIALMATCHAI_EMBEDDER_USE_FP16": ("embedder", "use_fp16"), + "TRIALMATCHAI_EMBEDDER_TRUST_REMOTE_CODE": ( + "embedder", + "trust_remote_code", + ), + "TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE": ("model", "trust_remote_code"), + } + for env_key, path in bool_env_map.items(): + value = os.getenv(env_key) + if value is not None: + _set_nested(raw, path, _parse_bool(value)) + + int_env_map: dict[str, Tuple[str, ...]] = { + "TRIALMATCHAI_ES_REQUEST_TIMEOUT": ("elasticsearch", "request_timeout"), + "TRIALMATCHAI_ES_START_TIMEOUT": ("elasticsearch", "start_timeout"), + "TRIALMATCHAI_EMBEDDER_BATCH_SIZE": ("embedder", "batch_size"), + "TRIALMATCHAI_SEARCH_MAX_TRIALS_FIRST_LEVEL": ( + "search", + "max_trials_first_level", + ), + "TRIALMATCHAI_SEARCH_MAX_TRIALS_SECOND_LEVEL": ( + "search", + "max_trials_second_level", + ), + "TRIALMATCHAI_RAG_MAX_TRIALS": ("rag", "max_trials_rag"), + "TRIALMATCHAI_VLLM_BATCH_SIZE": ("vllm", "batch_size"), + "TRIALMATCHAI_VLLM_MAX_NEW_TOKENS": ("vllm", "max_new_tokens"), } - for env_key, path in env_map.items(): + for env_key, path in int_env_map.items(): value = os.getenv(env_key) if value: - cursor: Dict[str, Any] = raw - for key in path[:-1]: - cursor = cursor.setdefault(key, {}) - cursor[path[-1]] = value - auto_start = os.getenv("TRIALMATCHAI_ES_AUTO_START") - if auto_start is not None: - cursor = raw.setdefault("elasticsearch", {}) - cursor["auto_start"] = auto_start.strip().lower() in {"1", "true", "yes"} - - start_script = os.getenv("TRIALMATCHAI_ES_START_SCRIPT") - if start_script: - cursor = raw.setdefault("elasticsearch", {}) - cursor["start_script"] = start_script - - start_timeout = os.getenv("TRIALMATCHAI_ES_START_TIMEOUT") - if start_timeout: - cursor = raw.setdefault("elasticsearch", {}) - try: - cursor["start_timeout"] = int(start_timeout) - except ValueError: - pass + try: + _set_nested(raw, path, int(value)) + except ValueError: + pass + return raw + + +def _set_nested(raw: Dict[str, Any], path: Iterable[str], value: Any) -> None: + keys = tuple(path) + cursor: Dict[str, Any] = raw + for key in keys[:-1]: + cursor = cursor.setdefault(key, {}) + cursor[keys[-1]] = value + + +def _parse_bool(value: str) -> bool: + return value.strip().lower() in {"1", "true", "yes", "y", "on"} diff --git a/source/Matcher/main.py b/source/Matcher/main.py index 9351a66b..b722de6b 100644 --- a/source/Matcher/main.py +++ b/source/Matcher/main.py @@ -4,8 +4,6 @@ from typing import Dict, List, Optional, Tuple import torch -from Parser.biomedner_engine import BioMedNER - from elasticsearch import Elasticsearch from Matcher.config.config_loader import load_config @@ -24,7 +22,11 @@ from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch from Matcher.pipeline.trial_search.second_level_search import SecondStageRetriever from Matcher.services.biomedner_service import initialize_biomedner_services -from Matcher.services.elasticsearch_service import ensure_elasticsearch +from Matcher.services.elasticsearch_service import ( + build_elasticsearch_client, + ensure_elasticsearch, +) +from Matcher.services.preflight import run_preflight_checks from Matcher.utils.file_utils import ( create_directory, read_json_file, @@ -214,18 +216,42 @@ def run_rag_processing( logger.info("RAG-based trial matching complete.") -def main_pipeline(): +def main_pipeline(config_path: str | None = None) -> int: logger.info("Starting TrialMatchAI pipeline...") - config = load_config() + config = load_config(config_path) paths = config["paths"] create_directory(paths["output_dir"]) + es_client = build_elasticsearch_client(config) + preflight_issues = run_preflight_checks( + config, + es_client=es_client, + require_patient_inputs=True, + require_trials_json=True, + require_models=True, + require_indices=False, + ) + if preflight_issues: + return 1 + + if not ensure_elasticsearch(es_client, config): + return 1 + + index_issues = run_preflight_checks( + config, + es_client=es_client, + require_indices=True, + ) + if index_issues: + return 1 + if torch.cuda.is_available(): torch.backends.cudnn.benchmark = True if hasattr(torch.backends.cuda, "enable_flash_sdp"): torch.backends.cuda.enable_flash_sdp(True) initialize_biomedner_services(config) + from Parser.biomedner_engine import BioMedNER import warnings @@ -250,6 +276,8 @@ def main_pipeline(): embedder = TextEmbedder( TextEmbedderConfig( model_name=embedder_cfg.get("model_name", "BAAI/bge-m3"), + revision=embedder_cfg.get("revision"), + trust_remote_code=embedder_cfg.get("trust_remote_code", False), pooling=embedder_cfg.get("pooling", "mean"), max_length=embedder_cfg.get("max_length", 512), batch_size=embedder_cfg.get("batch_size", 32), @@ -269,21 +297,10 @@ def main_pipeline(): adapter_path=config["model"]["reranker_adapter_path"], device=config["global"]["device"], batch_size=config["rag"]["batch_size"] * 2, + revision=config["model"].get("reranker_model_revision"), + trust_remote_code=config["model"].get("trust_remote_code", False), ) - es_client = Elasticsearch( - hosts=[config["elasticsearch"]["host"]], - ca_certs=paths["docker_certs"], - basic_auth=( - config["elasticsearch"]["username"], - config["elasticsearch"]["password"], - ), - request_timeout=config["elasticsearch"]["request_timeout"], - retry_on_timeout=config["elasticsearch"]["retry_on_timeout"], - ) - if not ensure_elasticsearch(es_client, config): - return - gemma_retriever = SecondStageRetriever( es_client=es_client, llm_reranker=llm_reranker, @@ -296,13 +313,13 @@ def main_pipeline(): patient_folder = Path(paths["patients_dir"]) if not patient_folder.exists(): logger.error("Patients folder not found: %s", patient_folder) - return + return 1 phenopacket_files = sorted( [p for p in patient_folder.iterdir() if p.suffix == ".json"] ) if not phenopacket_files: logger.warning("No patient files found in %s", patient_folder) - return + return 1 for phenopacket_path in phenopacket_files: patient_id = phenopacket_path.stem @@ -390,6 +407,8 @@ def main_pipeline(): finally: reset_request_id(token) + return 0 + if __name__ == "__main__": - main_pipeline() + raise SystemExit(main_pipeline()) diff --git a/source/Matcher/models/embedding/text_embedder.py b/source/Matcher/models/embedding/text_embedder.py index 288df642..f263ae8a 100644 --- a/source/Matcher/models/embedding/text_embedder.py +++ b/source/Matcher/models/embedding/text_embedder.py @@ -18,6 +18,8 @@ @dataclass(frozen=True) class TextEmbedderConfig: model_name: str = "BAAI/bge-m3" + revision: str | None = None + trust_remote_code: bool = False pooling: PoolingStrategy = "mean" max_length: int = 512 batch_size: int = 32 @@ -35,8 +37,16 @@ def __init__(self, config: TextEmbedderConfig): logger.info( "Loading embedder model %s on device %s", config.model_name, self.device ) - self.tokenizer = AutoTokenizer.from_pretrained(config.model_name) - self.model = AutoModel.from_pretrained(config.model_name).to(self.device) + self.tokenizer = AutoTokenizer.from_pretrained( + config.model_name, + revision=config.revision, + trust_remote_code=config.trust_remote_code, + ) + self.model = AutoModel.from_pretrained( + config.model_name, + revision=config.revision, + trust_remote_code=config.trust_remote_code, + ).to(self.device) self.model.eval() if config.use_fp16 and self.device.type == "cuda": self.model = self.model.half() diff --git a/source/Matcher/models/llm/llm_loader.py b/source/Matcher/models/llm/llm_loader.py index 5259e1ff..f3b10422 100644 --- a/source/Matcher/models/llm/llm_loader.py +++ b/source/Matcher/models/llm/llm_loader.py @@ -73,11 +73,14 @@ def load_model_and_tokenizer( device_str = "cpu" quant_config = BitsAndBytesConfig(load_in_4bit=False) + trust_remote_code = bool(model_config.get("trust_remote_code", False)) + revision = model_config.get("base_model_revision") tokenizer = AutoTokenizer.from_pretrained( model_config["base_model"], + revision=revision, use_fast=True, padding_side="left", - trust_remote_code=True, + trust_remote_code=trust_remote_code, ) # Always left-pad decoder-only models; keep most recent tokens if truncation occurs. tokenizer.padding_side = "left" @@ -90,7 +93,8 @@ def load_model_and_tokenizer( model = AutoModelForCausalLM.from_pretrained( model_config["base_model"], - trust_remote_code=True, + revision=revision, + trust_remote_code=trust_remote_code, torch_dtype=compute_dtype if use_cuda else torch.float32, device_map=device_str, attn_implementation=attn_impl, diff --git a/source/Matcher/models/llm/llm_reranker.py b/source/Matcher/models/llm/llm_reranker.py index 1c18cf2c..df505611 100644 --- a/source/Matcher/models/llm/llm_reranker.py +++ b/source/Matcher/models/llm/llm_reranker.py @@ -22,11 +22,15 @@ def __init__( device: int = 0, torch_dtype=torch.float16, batch_size: int = 8, + revision: Optional[str] = None, + trust_remote_code: bool = False, ): self.model_path = model_path self.adapter_path = adapter_path self.torch_dtype = torch_dtype self.batch_size = batch_size + self.revision = revision + self.trust_remote_code = trust_remote_code # Resolve device string if torch.cuda.is_available(): cuda_count = torch.cuda.device_count() @@ -47,7 +51,9 @@ def __init__( self.device_str = "cpu" self.tokenizer = AutoTokenizer.from_pretrained( - self.model_path, trust_remote_code=True + self.model_path, + revision=self.revision, + trust_remote_code=self.trust_remote_code, ) self._initialize_token_ids() self.model = self.load_model() @@ -77,11 +83,12 @@ def load_model(self): ) model = AutoModelForCausalLM.from_pretrained( self.model_path, + revision=self.revision, torch_dtype=self.torch_dtype if use_cuda else torch.float32, quantization_config=quant_config, device_map="auto" if use_cuda else None, attn_implementation="flash_attention_2" if use_cuda else None, - trust_remote_code=True, + trust_remote_code=self.trust_remote_code, ) if self.adapter_path: model = PeftModel.from_pretrained(model, self.adapter_path) diff --git a/source/Matcher/models/llm/vllm_loader.py b/source/Matcher/models/llm/vllm_loader.py index 2889d06c..0b2bdbcd 100644 --- a/source/Matcher/models/llm/vllm_loader.py +++ b/source/Matcher/models/llm/vllm_loader.py @@ -16,7 +16,7 @@ def _infer_max_ctx_len(model_path: str) -> Optional[int]: try: from transformers import AutoConfig # type: ignore - cfg = AutoConfig.from_pretrained(str(model_path), trust_remote_code=True) + cfg = AutoConfig.from_pretrained(str(model_path), trust_remote_code=False) for k in ( "max_position_embeddings", "max_sequence_length", @@ -124,7 +124,11 @@ def load_vllm_engine( gpu_memory_utilization=gmu, enable_lora=True, # allows dynamic LoRA loading max_lora_rank=max_lora_rank, + trust_remote_code=bool(model_config.get("trust_remote_code", False)), ) + revision = vllm_cfg.get("revision") or model_config.get("base_model_revision") + if revision: + engine_kwargs["revision"] = _as_str(revision, "revision") if requested_len is not None: engine_kwargs["max_model_len"] = requested_len diff --git a/source/Matcher/pipeline/cot_reasoning.py b/source/Matcher/pipeline/cot_reasoning.py index aa75c35f..61fbdb33 100644 --- a/source/Matcher/pipeline/cot_reasoning.py +++ b/source/Matcher/pipeline/cot_reasoning.py @@ -5,6 +5,7 @@ import torch from Matcher.utils.file_utils import read_json_file, write_json_file, write_text_file +from Matcher.utils.json_utils import extract_json_object from Matcher.utils.logging_config import setup_logging from tqdm import tqdm @@ -144,7 +145,6 @@ def _format_prompt(self, criteria_text: str, patient_profile: str) -> str: "----\n" "---Start of Patient Description---\n" f"{patient_profile}\n" - "Written informed consent has been obtained from the patient or their legal representative.\n" "---End of Patient Description---\n" "## IMPORTANT REMINDER:\n" "NEVER make assumptions, inferences, or extrapolations beyond the explicitly stated patient information." @@ -267,18 +267,15 @@ def _save_outputs(self, nct_id: str, response: str, output_folder: str): txt_path = f"{output_folder}/{nct_id}.txt" write_text_file([response], txt_path) try: - # naive JSON slice (you may replace with a balanced-brace parser if needed) - start = response.find("{") - end = response.rfind("}") - if start != -1 and end != -1 and end > start: - json_str = response[start : end + 1] - json_data = json.loads(json_str) - write_json_file(json_data, f"{output_folder}/{nct_id}.json") - logger.info(f"Processed {nct_id} successfully") - else: - logger.error(f"Invalid JSON boundaries for {nct_id}") - except json.JSONDecodeError as e: + json_data = extract_json_object(response) + write_json_file(json_data, f"{output_folder}/{nct_id}.json") + logger.info(f"Processed {nct_id} successfully") + except (json.JSONDecodeError, ValueError) as e: logger.error(f"Invalid JSON response for {nct_id}: {str(e)}") + write_json_file( + {"error": "invalid_json_response", "raw_output": response}, + f"{output_folder}/{nct_id}.json", + ) except Exception as e: logger.error(f"Failed to save {nct_id}: {str(e)}") diff --git a/source/Matcher/pipeline/cot_reasoning_vllm.py b/source/Matcher/pipeline/cot_reasoning_vllm.py index f2d0dec8..23f49049 100644 --- a/source/Matcher/pipeline/cot_reasoning_vllm.py +++ b/source/Matcher/pipeline/cot_reasoning_vllm.py @@ -6,6 +6,7 @@ from typing import Dict, List, Optional from Matcher.utils.file_utils import read_json_file, write_json_file, write_text_file +from Matcher.utils.json_utils import extract_json_object from Matcher.utils.logging_config import setup_logging from tqdm import tqdm @@ -162,7 +163,6 @@ def _format_prompt(self, criteria_text: str, patient_profile: str) -> str: "----\n" "---Start of Patient Description---\n" f"{patient_profile}\n" - "Written informed consent has been obtained from the patient or their legal representative.\n" "---End of Patient Description---\n" "## IMPORTANT REMINDER:\n" "NEVER make assumptions, inferences, or extrapolations beyond the explicitly stated patient information." @@ -399,17 +399,15 @@ def _save_outputs(self, nct_id: str, response: str, output_folder: str): txt_path = f"{output_folder}/{nct_id}.txt" write_text_file([response], txt_path) try: - start = response.find("{") - end = response.rfind("}") - if start != -1 and end != -1 and end > start: - json_str = response[start : end + 1] - json_data = json.loads(json_str) - write_json_file(json_data, f"{output_folder}/{nct_id}.json") - logger.info(f"Processed {nct_id} successfully") - else: - logger.error(f"Invalid JSON boundaries for {nct_id}") - except json.JSONDecodeError as e: + json_data = extract_json_object(response) + write_json_file(json_data, f"{output_folder}/{nct_id}.json") + logger.info(f"Processed {nct_id} successfully") + except (json.JSONDecodeError, ValueError) as e: logger.error(f"Invalid JSON response for {nct_id}: {str(e)}") + write_json_file( + {"error": "invalid_json_response", "raw_output": response}, + f"{output_folder}/{nct_id}.json", + ) except Exception as e: logger.error(f"Failed to save {nct_id}: {str(e)}") diff --git a/source/Matcher/pipeline/phenopacket_processor.py b/source/Matcher/pipeline/phenopacket_processor.py index fbfbcd2c..e4bae585 100644 --- a/source/Matcher/pipeline/phenopacket_processor.py +++ b/source/Matcher/pipeline/phenopacket_processor.py @@ -1,10 +1,10 @@ import json -import re from typing import Dict, List, Optional import torch from Matcher.schemas.phenopacket import Phenopacket from Matcher.utils.file_utils import read_json_file, write_json_file +from Matcher.utils.json_utils import extract_json_object from Matcher.utils.logging_config import setup_logging from Matcher.utils.temporal_utils import parse_iso_duration, parse_temporal from transformers import AutoModelForCausalLM, AutoTokenizer @@ -329,19 +329,7 @@ def generate_summary(self, sentences: List[str]) -> Dict: def _extract_llm_output(self, generated_text: str) -> Dict: try: - match = re.search(r"\{.*\}", generated_text, re.DOTALL) - if not match: - logger.error("No JSON object found in LLM output") - return { - "error": "No JSON object found", - "main_conditions": [], - "other_conditions": [], - "expanded_sentences": [], - } - json_str = match.group() - json_str = re.sub(r"```(?:json)?\s*", "", json_str) - json_str = re.sub(r"\s*```", "", json_str) - result = json.loads(json_str) + result = extract_json_object(generated_text) expected_keys = [ "main_conditions", "other_conditions", @@ -350,8 +338,8 @@ def _extract_llm_output(self, generated_text: str) -> Dict: if not all(key in result for key in expected_keys): raise ValueError("Missing required JSON keys in LLM output") return result - except json.JSONDecodeError as e: - logger.error(f"JSON decoding failed: {e}") + except (json.JSONDecodeError, ValueError) as e: + logger.error(f"JSON extraction failed: {e}") return { "error": f"Invalid JSON format: {str(e)}", "main_conditions": [], diff --git a/source/Matcher/services/biomedner_service.py b/source/Matcher/services/biomedner_service.py index 87a9f6cc..68427a82 100644 --- a/source/Matcher/services/biomedner_service.py +++ b/source/Matcher/services/biomedner_service.py @@ -22,6 +22,12 @@ def run_script(script_path: str): def initialize_biomedner_services(config: dict): + if not config.get("services", {}).get("auto_start", False): + logger.info( + "BioMedNER auto-start is disabled. Set TRIALMATCHAI_BIOMEDNER_AUTO_START=true to start local services." + ) + return + ports_to_check = [ config["bio_med_ner"]["biomedner_port"], config["bio_med_ner"]["gner_port"], diff --git a/source/Matcher/services/elasticsearch_service.py b/source/Matcher/services/elasticsearch_service.py index fbd17458..09cdcfbb 100644 --- a/source/Matcher/services/elasticsearch_service.py +++ b/source/Matcher/services/elasticsearch_service.py @@ -7,11 +7,28 @@ from pathlib import Path from typing import Any, Dict +from elasticsearch import Elasticsearch + from Matcher.utils.logging_config import setup_logging logger = setup_logging(__name__) +def build_elasticsearch_client(config: Dict[str, Any]) -> Elasticsearch: + es_cfg = config["elasticsearch"] + paths = config.get("paths", {}) + kwargs: dict[str, Any] = { + "hosts": [es_cfg["host"]], + "basic_auth": (es_cfg["username"], es_cfg["password"]), + "request_timeout": es_cfg["request_timeout"], + "retry_on_timeout": es_cfg["retry_on_timeout"], + } + ca_certs = paths.get("docker_certs") + if ca_certs and Path(ca_certs).exists(): + kwargs["ca_certs"] = ca_certs + return Elasticsearch(**kwargs) + + def ensure_elasticsearch(es_client: Any, config: Dict[str, Any]) -> bool: if _ping(es_client): return True diff --git a/source/Matcher/services/preflight.py b/source/Matcher/services/preflight.py new file mode 100644 index 00000000..52670b12 --- /dev/null +++ b/source/Matcher/services/preflight.py @@ -0,0 +1,139 @@ +from __future__ import annotations + +import importlib.util +from pathlib import Path +from typing import Any, Dict, Iterable, List + +import torch + +from Matcher.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def run_preflight_checks( + config: Dict[str, Any], + *, + es_client: Any | None = None, + require_patient_inputs: bool = False, + require_trials_json: bool = False, + require_models: bool = False, + require_indices: bool = False, +) -> List[str]: + """Return blocking deployment/runtime issues discovered before heavy startup.""" + issues: List[str] = [] + paths = config.get("paths", {}) + + _require_path( + issues, + "paths.patients_dir", + paths.get("patients_dir"), + required=require_patient_inputs, + ) + _require_path( + issues, + "paths.trials_json_folder", + paths.get("trials_json_folder"), + required=require_trials_json, + ) + _require_output_dir(issues, paths.get("output_dir")) + + host = str(config.get("elasticsearch", {}).get("host", "")) + if host.startswith("https://"): + _require_path( + issues, + "paths.docker_certs", + paths.get("docker_certs"), + required=True, + ) + + if require_models: + model_cfg = config.get("model", {}) + _require_path( + issues, + "model.cot_adapter_path", + model_cfg.get("cot_adapter_path"), + required=True, + ) + _require_path( + issues, + "model.reranker_adapter_path", + model_cfg.get("reranker_adapter_path"), + required=True, + ) + if config.get("cot_backend") == "vllm": + if importlib.util.find_spec("vllm") is None: + issues.append( + "cot_backend=vllm requires the GPU extra " + "(`uv sync --extra gpu`) or the Docker worker image." + ) + if not torch.cuda.is_available(): + issues.append("cot_backend=vllm requires a CUDA-capable runtime.") + + if es_client is not None: + if not _ping(es_client): + issues.append( + f"Elasticsearch is not reachable at {config['elasticsearch']['host']}." + ) + elif require_indices: + missing = _missing_indices( + es_client, + [ + config["elasticsearch"]["index_trials"], + config["elasticsearch"]["index_trials_eligibility"], + ], + ) + if missing: + issues.append("Missing Elasticsearch indices: " + ", ".join(missing)) + + for issue in issues: + logger.error("Preflight: %s", issue) + return issues + + +def _require_path( + issues: List[str], + name: str, + value: str | None, + *, + required: bool, +) -> None: + if not value: + if required: + issues.append(f"{name} is not configured.") + return + path = Path(value) + if required and not path.exists(): + issues.append(f"{name} does not exist: {path}") + elif not path.exists(): + logger.warning("Preflight: optional path does not exist: %s=%s", name, path) + + +def _require_output_dir(issues: List[str], value: str | None) -> None: + if not value: + issues.append("paths.output_dir is not configured.") + return + path = Path(value) + try: + path.mkdir(parents=True, exist_ok=True) + except OSError as exc: + issues.append(f"paths.output_dir is not writable: {path} ({exc})") + + +def _ping(es_client: Any) -> bool: + try: + return bool(es_client.ping()) + except Exception: + return False + + +def _missing_indices(es_client: Any, names: Iterable[str]) -> list[str]: + missing: list[str] = [] + for name in names: + try: + if not es_client.indices.exists(index=name): + missing.append(name) + except Exception as exc: + logger.warning("Could not check Elasticsearch index %s: %s", name, exc) + missing.append(name) + return missing diff --git a/source/Matcher/utils/json_utils.py b/source/Matcher/utils/json_utils.py new file mode 100644 index 00000000..f684a3d7 --- /dev/null +++ b/source/Matcher/utils/json_utils.py @@ -0,0 +1,35 @@ +from __future__ import annotations + +import json +from typing import Any + + +def extract_json_object(text: str) -> dict[str, Any]: + """Extract and decode the first balanced JSON object from model output.""" + start = text.find("{") + if start == -1: + raise ValueError("No JSON object found") + + depth = 0 + in_string = False + escape = False + for index, char in enumerate(text[start:], start=start): + if escape: + escape = False + continue + if char == "\\" and in_string: + escape = True + continue + if char == '"': + in_string = not in_string + continue + if in_string: + continue + if char == "{": + depth += 1 + elif char == "}": + depth -= 1 + if depth == 0: + return json.loads(text[start : index + 1]) + + raise ValueError("Unbalanced JSON object") diff --git a/source/Parser/biomedner_engine.py b/source/Parser/biomedner_engine.py index 9b599b4e..8798db8b 100644 --- a/source/Parser/biomedner_engine.py +++ b/source/Parser/biomedner_engine.py @@ -21,8 +21,6 @@ from Parser.convert import get_pub_annotation from Parser.normalizer import Normalizer -print(os.getcwd()) - # Paths DICT_PATH = Path("Parser/resources/normalization/dictionary") dict_paths = { diff --git a/source/Parser/biomedner_init.py b/source/Parser/biomedner_init.py index c0de4128..1eed3939 100644 --- a/source/Parser/biomedner_init.py +++ b/source/Parser/biomedner_init.py @@ -100,7 +100,7 @@ def _read_data(cls, data, pmids): if len(words) >= 30: while len(words) >= 30: tmplabel = labels[:30] - l = " ".join( + label_text = " ".join( [ label for label in labels[: len(tmplabel)] @@ -113,17 +113,17 @@ def _read_data(cls, data, pmids): e = " ".join( [el for el in entity_labels[: len(tmplabel)] if len(el) > 0] ) - lines.append([l, w, e]) + lines.append([label_text, w, e]) words = words[len(tmplabel) :] labels = labels[len(tmplabel) :] entity_labels = entity_labels[len(tmplabel) :] if len(words) == 0: continue - l = " ".join([label for label in labels if len(label) > 0]) + label_text = " ".join([label for label in labels if len(label) > 0]) w = " ".join([word for word in words if len(word) > 0]) e = " ".join([el for el in entity_labels if len(entity_labels) > 0]) - lines.append([l, w, e]) + lines.append([label_text, w, e]) words = [] labels = [] entity_labels = [] @@ -654,7 +654,7 @@ def recognize(self, input_dl, base_name, indent=None): tmp_toks.append(tok) self.predict_dict, self.prob_dict = dict(), dict() - threads, self.out_tag_dict = list(), dict() + self.out_tag_dict = dict() all_type = self._predict(predict_example_list) # disease, drug, gene, spec, cell_line, dna, rna, cell_type @@ -729,8 +729,8 @@ def recognize_etype(self, etype, tokens, tot_tokens, predictions, preds_array): slen = len(tokens[pidx]) for p in prediction["prediction"][:slen]: predicts.append(self.id2label[p]) - for l in prediction["log_probs"][:slen]: - logits.append(l) + for log_prob in prediction["log_probs"][:slen]: + logits.append(log_prob) de_toks, de_labels, de_logits = detokenize(tot_tokens, predicts, logits) @@ -976,7 +976,7 @@ def main(): ) args = argparser.parse_args() - biomedner = BioMedNER(args) + BioMedNER(args) if __name__ == "__main__": diff --git a/source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.biomedner.PubTator b/source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.biomedner.PubTator deleted file mode 100644 index 7ff4720f..00000000 --- a/source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42|t| -1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42|a|clostridioides difficile infection - diff --git a/source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.gner.PubTator b/source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.gner.PubTator deleted file mode 100644 index 7ff4720f..00000000 --- a/source/Parser/input/1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42|t| -1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42|a|clostridioides difficile infection - diff --git a/source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.biomedner.PubTator b/source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.biomedner.PubTator deleted file mode 100644 index cc8af0cd..00000000 --- a/source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453|t| -427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453|a|severe aortic stenosis - diff --git a/source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.gner.PubTator b/source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.gner.PubTator deleted file mode 100644 index cc8af0cd..00000000 --- a/source/Parser/input/427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453|t| -427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453|a|severe aortic stenosis - diff --git a/source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.biomedner.PubTator b/source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.biomedner.PubTator deleted file mode 100644 index f93b768e..00000000 --- a/source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e|t| -525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e|a|chronic hepatitis c - diff --git a/source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.gner.PubTator b/source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.gner.PubTator deleted file mode 100644 index f93b768e..00000000 --- a/source/Parser/input/525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e|t| -525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e|a|chronic hepatitis c - diff --git a/source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.biomedner.PubTator b/source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.biomedner.PubTator deleted file mode 100644 index 0accd42c..00000000 --- a/source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637|t| -611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637|a|myocardial infarction - diff --git a/source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.gner.PubTator b/source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.gner.PubTator deleted file mode 100644 index 0accd42c..00000000 --- a/source/Parser/input/611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637|t| -611019227d9ea65a714df4e8c4498bfc13e21c67879025c3b03d8637|a|myocardial infarction - diff --git a/source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.biomedner.PubTator b/source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.biomedner.PubTator deleted file mode 100644 index a884f498..00000000 --- a/source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc|t| -61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc|a|severe aortic stenosis - diff --git a/source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.gner.PubTator b/source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.gner.PubTator deleted file mode 100644 index a884f498..00000000 --- a/source/Parser/input/61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc|t| -61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc|a|severe aortic stenosis - diff --git a/source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.biomedner.PubTator b/source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.biomedner.PubTator deleted file mode 100644 index 9a883264..00000000 --- a/source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28|t| -6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28|a|Deficiency, alpha-Lecithin:Cholesterol Acyltransferase - diff --git a/source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.gner.PubTator b/source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.gner.PubTator deleted file mode 100644 index 9a883264..00000000 --- a/source/Parser/input/6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28|t| -6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28|a|Deficiency, alpha-Lecithin:Cholesterol Acyltransferase - diff --git a/source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.biomedner.PubTator b/source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.biomedner.PubTator deleted file mode 100644 index fa321db2..00000000 --- a/source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377|t| -6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377|a|myocardial infarction - diff --git a/source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.gner.PubTator b/source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.gner.PubTator deleted file mode 100644 index fa321db2..00000000 --- a/source/Parser/input/6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377|t| -6db4a18d11e3899c21b4cc11489cf3c8b457a40273c48ecd39ab4377|a|myocardial infarction - diff --git a/source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.biomedner.PubTator b/source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.biomedner.PubTator deleted file mode 100644 index 54989c97..00000000 --- a/source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3|t| -7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3|a|severe aortic stenosis - diff --git a/source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.gner.PubTator b/source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.gner.PubTator deleted file mode 100644 index 54989c97..00000000 --- a/source/Parser/input/7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3|t| -7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3|a|severe aortic stenosis - diff --git a/source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.biomedner.PubTator b/source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.biomedner.PubTator deleted file mode 100644 index c406ffc7..00000000 --- a/source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace|t| -89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace|a|type 1 diabetes - diff --git a/source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.gner.PubTator b/source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.gner.PubTator deleted file mode 100644 index c406ffc7..00000000 --- a/source/Parser/input/89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace|t| -89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace|a|type 1 diabetes - diff --git a/source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.biomedner.PubTator b/source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.biomedner.PubTator deleted file mode 100644 index 4eeddd9e..00000000 --- a/source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.biomedner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c|t| -b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c|a|severe aortic stenosis - diff --git a/source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.gner.PubTator b/source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.gner.PubTator deleted file mode 100644 index 4eeddd9e..00000000 --- a/source/Parser/input/b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c.PubTator.gner.PubTator +++ /dev/null @@ -1,3 +0,0 @@ -b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c|t| -b5d32e3a13ff4d519235aa93bf6faeaa8e80439b77a08925ae9c617c|a|severe aortic stenosis - diff --git a/source/Parser/logs/nohup_disease_normalize.out b/source/Parser/logs/nohup_disease_normalize.out deleted file mode 100644 index 32d94d54..00000000 --- a/source/Parser/logs/nohup_disease_normalize.out +++ /dev/null @@ -1,3274 +0,0 @@ - -Sieve loading .. 10430 ms, Ready - -Sieve loading .. 734 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 6045 ms, Ready - -Sieve loading .. 5768 ms, Ready - -Sieve loading .. 593 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 616 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 8209 ms, Ready - -Sieve loading .. 589 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 649 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 589 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 666 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 669 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 608 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 511 ms, Ready - -Sieve loading .. 628 ms, Ready - -Sieve loading .. 588 ms, Ready - -Sieve loading .. 591 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 829 ms, Ready - -Sieve loading .. 657 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 719 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 630 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 645 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 606 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 704 ms, Ready - -Sieve loading .. 599 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) - -Sieve loading .. 665 ms, Ready -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at tool.MainServer.main(MainServer.java:28) diff --git a/source/Parser/logs/nohup_gene_normalize.out b/source/Parser/logs/nohup_gene_normalize.out deleted file mode 100644 index 04432902..00000000 --- a/source/Parser/logs/nohup_gene_normalize.out +++ /dev/null @@ -1,3229 +0,0 @@ -Ready (port 18888) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Ready (port 18888) -Ready (port 18888) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Ready (port 18888) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) -Exception in thread "main" java.net.BindException: Address already in use - at java.base/sun.nio.ch.Net.bind0(Native Method) - at java.base/sun.nio.ch.Net.bind(Net.java:555) - at java.base/sun.nio.ch.Net.bind(Net.java:544) - at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) - at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) - at java.base/java.net.ServerSocket.(ServerSocket.java:274) - at java.base/java.net.ServerSocket.(ServerSocket.java:167) - at GNormPluslib.GNormPlusServer.main(GNormPlusServer.java:19) diff --git a/source/Parser/logs/nohup_gner.out b/source/Parser/logs/nohup_gner.out deleted file mode 100644 index d8372107..00000000 --- a/source/Parser/logs/nohup_gner.out +++ /dev/null @@ -1,3609 +0,0 @@ -/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py:129: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.) - return torch._C._cuda_getDeviceCount() > 0 -/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py:129: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.) - return torch._C._cuda_getDeviceCount() > 0 - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-07-16 22:23:26,080 - INFO - Connection accepted from ('127.0.0.1', 42682) -2025-07-16 22:23:26,081 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e78efe64b067d7c6ebe4216819000751a7603e0892821caf88bbe57c.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-07-16 22:28:05,287 - INFO - Connection accepted from ('127.0.0.1', 39226) -2025-07-16 22:28:05,287 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d8c0749b4cabbd5e7fa9c366d366170266a0289a6471006ccc4cce4e.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-07-16 22:33:00,752 - INFO - Connection accepted from ('127.0.0.1', 38380) -2025-07-16 22:33:00,752 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "99653b33f56427874f327320e5fbe809e84c11edf053dcf16a9f6304.PubTator"} -2025-07-16 22:33:29,894 - INFO - Connection accepted from ('127.0.0.1', 51160) -2025-07-16 22:33:29,894 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6c9ce2824b187646d864962dc8d8875097e553b032c259364b47c8e4.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py:182: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:109.) - return torch._C._cuda_getDeviceCount() > 0 - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-03 19:53:26,698 - INFO - Connection accepted from ('127.0.0.1', 45486) -2025-08-03 19:53:26,698 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2dfc5be0d0231979e69390328155926f65b2e97e59a1eeec9eb31e73.PubTator"} -Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation. -2025-08-03 19:54:22,242 - INFO - Connection accepted from ('127.0.0.1', 38496) -2025-08-03 19:54:22,242 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "db7442428d1dd92f798475bc173d0b523bdd022963e7e0eff5ff05a7.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-03 21:36:00,079 - INFO - Connection accepted from ('127.0.0.1', 53320) -2025-08-03 21:36:00,080 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "57c274e89711aee0e215c55ce2570826468ebf80104f04b418e79b23.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-03 21:39:12,257 - INFO - Connection accepted from ('127.0.0.1', 50288) -2025-08-03 21:39:12,257 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0fb7e7924a0c2b8724b4b5d94aacd0e7bfbc6f6e1214b83b0d11d208.PubTator"} -2025-08-03 21:41:36,886 - INFO - Connection accepted from ('127.0.0.1', 36174) -2025-08-03 21:41:36,886 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a09149cbf48d3f07b7ce16a02353412a74ffb11fb57d4416c27c58a9.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-03 22:10:08,491 - INFO - Connection accepted from ('127.0.0.1', 46522) -2025-08-03 22:10:08,491 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "027e65fb2b9483bcd3c217013c9b445f4e8d55b2abc47edefdd6a9cd.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-18 15:28:06,176 - INFO - Connection accepted from ('127.0.0.1', 58716) -2025-08-18 15:28:06,176 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-18 15:29:11,198 - INFO - Connection accepted from ('127.0.0.1', 36608) -2025-08-18 15:29:11,199 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 15:34:24,184 - INFO - Connection accepted from ('127.0.0.1', 43682) -2025-08-19 15:34:24,184 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 15:38:56,174 - INFO - Connection accepted from ('127.0.0.1', 47184) -2025-08-19 15:38:56,174 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "99151b7a67a22ab55f38dd2a06a3d775da819ea5d446a03adda90b14.PubTator"} -Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation. -2025-08-19 15:39:26,523 - INFO - Connection accepted from ('127.0.0.1', 59158) -2025-08-19 15:39:26,523 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fb70ddb214ae646af6262f0d81f16392aea2d1c51d135bdc5ef78115.PubTator"} -2025-08-19 16:01:53,270 - INFO - Connection accepted from ('127.0.0.1', 35774) -2025-08-19 16:01:53,271 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d13f07266a57d3b9ba73f0a0c9a21408eaf190b110eeb44776863fe8.PubTator"} -2025-08-19 16:02:20,147 - INFO - Connection accepted from ('127.0.0.1', 35438) -2025-08-19 16:02:20,147 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6d60d5573378fb2ca71a90099fe304ec4d5532cafebec4676f42fe28.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 16:16:17,634 - INFO - Connection accepted from ('127.0.0.1', 32956) -2025-08-19 16:16:17,634 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 16:30:35,460 - INFO - Connection accepted from ('127.0.0.1', 41266) -2025-08-19 16:30:35,461 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 16:31:13,964 - INFO - Connection accepted from ('127.0.0.1', 34758) -2025-08-19 16:31:13,964 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3e4cb8e7df26c985018bd8c25b5efa344c861af6fe4929e3d910128a.PubTator"} -2025-08-19 16:31:37,998 - INFO - Connection accepted from ('127.0.0.1', 60472) -2025-08-19 16:31:37,998 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e255e7d010331dabb92a4c12029f2fa1f3080eabb86ec5c7bcd14326.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 16:34:04,689 - INFO - Connection accepted from ('127.0.0.1', 45688) -2025-08-19 16:34:04,689 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-19 16:35:00,735 - INFO - Connection accepted from ('127.0.0.1', 45280) -2025-08-19 16:35:00,735 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a1f93c97c4fa3a0e9c279be4d49a56bef290b4242e0e72b792d607b4.PubTator"} -2025-08-19 16:35:21,595 - INFO - Connection accepted from ('127.0.0.1', 57028) -2025-08-19 16:35:21,595 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "643bdfe9af48c14c2eca0ae9b39b15d57e78077cc70e3df07d888f1f.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 18:43:14,684 - INFO - Connection accepted from ('127.0.0.1', 36790) -2025-08-21 18:43:14,684 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7bbf3bbb6ce76096d9fbc4afcf95b756696944eb3970d9ae79a453c2.PubTator"} -2025-08-21 20:28:07,171 - INFO - Connection accepted from ('127.0.0.1', 46510) -2025-08-21 20:28:07,171 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "427736011957cbb0ce549f492b0330b9d77ba984a2beb7b2abca8453.PubTator"} -2025-08-21 20:28:26,150 - INFO - Connection accepted from ('127.0.0.1', 43538) -2025-08-21 20:28:26,151 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cd52dd424cb42cb53d92271bdd29ee9d3fa8bda53b90517a830f3685.PubTator"} -2025-08-21 20:28:40,788 - INFO - Connection accepted from ('127.0.0.1', 59882) -2025-08-21 20:28:40,788 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f5103ff8dd9ca435775ae888a3777ff367e7d2bf988b746c61e21cd9.PubTator"} -2025-08-21 20:28:55,052 - INFO - Connection accepted from ('127.0.0.1', 39820) -2025-08-21 20:28:55,052 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9471c3496c72a025b12c32c03e254c54fd34a88ad8c5d467920db40e.PubTator"} -2025-08-21 20:29:09,787 - INFO - Connection accepted from ('127.0.0.1', 44720) -2025-08-21 20:29:09,787 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1cd9760fe682423e9e3c37d70f3e932d45259c7c9d4b6e911fbf9b42.PubTator"} -2025-08-21 20:29:22,596 - INFO - Connection accepted from ('127.0.0.1', 50796) -2025-08-21 20:29:22,596 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7c24cb8cc3a7c35ca168b66e94c7cc0f7233f362f69b08c9b60eb758.PubTator"} -2025-08-21 20:29:34,137 - INFO - Connection accepted from ('127.0.0.1', 55958) -2025-08-21 20:29:34,137 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b4364ea1aa7c138ce56345794e8201b25ccddbceccc3a0a6699f7c0f.PubTator"} -2025-08-21 20:29:46,982 - INFO - Connection accepted from ('127.0.0.1', 54484) -2025-08-21 20:29:46,982 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cc07129a14bc136b9fb4a3ab01ea61864fe49f0dc442b3ed29a8b62c.PubTator"} -2025-08-21 20:29:58,469 - INFO - Connection accepted from ('127.0.0.1', 42424) -2025-08-21 20:29:58,470 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bbdc029db533f0cb0bd9ec2c28ec49703dcefdf858055062923a1e04.PubTator"} -2025-08-21 20:30:08,477 - INFO - Connection accepted from ('127.0.0.1', 45430) -2025-08-21 20:30:08,477 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f543f4f8e42327abe82c5c3874536c4fb9438e1a76c0a630198fe2d7.PubTator"} -2025-08-21 20:30:19,554 - INFO - Connection accepted from ('127.0.0.1', 38528) -2025-08-21 20:30:19,554 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "120898529785ace80a90c6a34477b0497c91621b8aa67e5a6b22f0f3.PubTator"} -2025-08-21 20:30:28,083 - INFO - Connection accepted from ('127.0.0.1', 38538) -2025-08-21 20:30:28,084 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a863b4c155212c13c6dc7b78a66dbadc236150e5854e7ad6dafd3c34.PubTator"} -2025-08-21 20:30:36,949 - INFO - Connection accepted from ('127.0.0.1', 58148) -2025-08-21 20:30:36,949 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dfea813b5bf039b384ac104cc18a0547dff18dd604ea71d23f3d9e23.PubTator"} -2025-08-21 20:30:45,521 - INFO - Connection accepted from ('127.0.0.1', 50946) -2025-08-21 20:30:45,521 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "19bd08e9f22e6c3824f7bacb49b915819c73f1972dfcb32283cea9f6.PubTator"} -2025-08-21 20:30:54,051 - INFO - Connection accepted from ('127.0.0.1', 39230) -2025-08-21 20:30:54,051 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5d226bcff34bb0ebfad070b6b566113f06c2a61fb5c4e5e0e3a04554.PubTator"} -2025-08-21 20:30:59,151 - INFO - Connection accepted from ('127.0.0.1', 39240) -2025-08-21 20:30:59,151 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ebc30fd8256840a29eb3943a8246dc7eea3f636de4c5f71631f8aab6.PubTator"} -2025-08-21 20:31:06,592 - INFO - Connection accepted from ('127.0.0.1', 54862) -2025-08-21 20:31:06,592 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "30ff7bb0e9d02c0fd0b0054a9d618d25662339cafc3fcc1442c57182.PubTator"} -2025-08-21 20:31:11,283 - INFO - Connection accepted from ('127.0.0.1', 52380) -2025-08-21 20:31:11,283 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3c499812cd51602e41f4687d1cf95e54a180f6bac1766a346fa82fb4.PubTator"} -2025-08-21 20:31:17,381 - INFO - Connection accepted from ('127.0.0.1', 52390) -2025-08-21 20:31:17,382 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "47cc34dc232a359bd7aaa4bbf9bd33d9d01ea390f670ec15243ce95e.PubTator"} -2025-08-21 20:31:24,416 - INFO - Connection accepted from ('127.0.0.1', 38594) -2025-08-21 20:31:24,416 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e45ed29fce772186ef533ec31f2161005b7e984dc629bb734fb5b9c8.PubTator"} -2025-08-21 20:31:41,790 - INFO - Connection accepted from ('127.0.0.1', 33734) -2025-08-21 20:31:41,790 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a7a921dccee50b85b93ac89251a0403a566783176a94880b1844daf2.PubTator"} -2025-08-21 20:31:50,234 - INFO - Connection accepted from ('127.0.0.1', 39546) -2025-08-21 20:31:50,235 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f99bca598e5bacb24920109bfe16f52a4adcf0623e42f5f35446745b.PubTator"} -2025-08-21 20:31:57,679 - INFO - Connection accepted from ('127.0.0.1', 39558) -2025-08-21 20:31:57,680 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "96fe8a6afa86d95762b56396c5e85bdba1691a5a3d2511612ee22e5e.PubTator"} -2025-08-21 20:32:02,583 - INFO - Connection accepted from ('127.0.0.1', 34198) -2025-08-21 20:32:02,583 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "84f4d162d0889536a392b46f32eebda58db27e58561a3e41e33e4cea.PubTator"} -2025-08-21 20:32:11,222 - INFO - Connection accepted from ('127.0.0.1', 52042) -2025-08-21 20:32:11,222 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "afc3d09d59021579b48e4819dd3f08295f3dc438f7f2919b06ca317e.PubTator"} -2025-08-21 20:32:17,541 - INFO - Connection accepted from ('127.0.0.1', 52046) -2025-08-21 20:32:17,541 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "525bbc5e481bdaf825bf80725e1ac63c15786fa13120fe734d703c0e.PubTator"} -2025-08-21 20:32:27,493 - INFO - Connection accepted from ('127.0.0.1', 49636) -2025-08-21 20:32:27,493 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "89e92a6963f2179038668173907fc2a79ae48e7712fe3dddfe49dace.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 21:12:10,136 - INFO - Connection accepted from ('127.0.0.1', 37164) -2025-08-21 21:12:10,137 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 21:12:47,785 - INFO - Connection accepted from ('127.0.0.1', 58406) -2025-08-21 21:12:47,785 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7aed0d619cfb7fb7edf932fc5aeff01e489c3be8482e4c08c26f4de3.PubTator"} -2025-08-21 21:12:56,082 - INFO - Connection accepted from ('127.0.0.1', 44096) -2025-08-21 21:12:56,082 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "033058d4b744c965cb1f7c798cc9c1fee136688c7bdd6f191929cd02.PubTator"} -2025-08-21 21:13:08,785 - INFO - Connection accepted from ('127.0.0.1', 38616) -2025-08-21 21:13:08,785 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dc37d57b5508811be20af120757571a6a7725f0d2977f58c84837a7f.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 21:29:46,644 - INFO - Connection accepted from ('127.0.0.1', 47556) -2025-08-21 21:29:46,644 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "729d3f9975787183c5117b5f2a4604e97594352b40aaf9e3688a6823.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 21:51:03,365 - INFO - Connection accepted from ('127.0.0.1', 37414) -2025-08-21 21:51:03,365 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 206, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 21:56:53,487 - INFO - Connection accepted from ('127.0.0.1', 43622) -2025-08-21 21:56:53,487 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "37f8a68ed3c820c1c408bb453ec7114e791811a377460d41c3c3ea84.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 22:05:42,823 - INFO - Connection accepted from ('127.0.0.1', 35540) -2025-08-21 22:05:42,823 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "801077202e18420c5835e270c0d90333911485e69e231121751d3032.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 22:08:51,047 - INFO - Connection accepted from ('127.0.0.1', 49732) -2025-08-21 22:08:51,048 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 22:11:08,274 - INFO - Connection accepted from ('127.0.0.1', 48154) -2025-08-21 22:11:08,275 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 22:11:46,268 - INFO - Connection accepted from ('127.0.0.1', 52076) -2025-08-21 22:11:46,268 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "69f6719bd150439e24005d8432c68e39bf31d5fc113a028bfbd91006.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 22:35:00,501 - INFO - Connection accepted from ('127.0.0.1', 48388) -2025-08-21 22:35:00,501 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fafdb99975801684a412340ad98293cfe2307e3ab3d7ff0c006eeda5.PubTator"} -2025-08-21 23:44:59,511 - INFO - Connection accepted from ('127.0.0.1', 43480) -2025-08-21 23:44:59,511 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a0b53db8b2ef91d1ebe9d88002d924aca9ec237b144275572593c32e.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-21 23:56:24,624 - INFO - Connection accepted from ('127.0.0.1', 45490) -2025-08-21 23:56:24,624 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d48beeca8a07e4059a6bea41aad1a8b7e85c15a578008e7317717b07.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-22 00:13:33,851 - INFO - Connection accepted from ('127.0.0.1', 41250) -2025-08-22 00:13:33,851 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c3ea6a29dbea4a139d96f6135c9c1ddd85a1925ab6b64c8658723b5e.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-22 00:18:18,681 - INFO - Connection accepted from ('127.0.0.1', 55022) -2025-08-22 00:18:18,682 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "44b8882bc774b330ebd400912695dfee5bd544e2050be5c5ead326ca.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-22 00:27:32,174 - INFO - Connection accepted from ('127.0.0.1', 45592) -2025-08-22 00:27:32,174 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5022147668ee40f2c64fbef14833893a7356260f54b8b279698a6462.PubTator"} -2025-08-22 00:31:53,330 - INFO - Connection accepted from ('127.0.0.1', 58504) -2025-08-22 00:31:53,330 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-22 00:33:50,052 - INFO - Connection accepted from ('127.0.0.1', 53190) -2025-08-22 00:33:50,053 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-28 10:52:53,110 - INFO - Connection accepted from ('127.0.0.1', 48256) -2025-08-28 10:52:53,110 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "03da14bdd5e112af67e8c6f7a3bd0d6d15e72f411d309a35cd0743bf.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-28 13:34:55,046 - INFO - Connection accepted from ('127.0.0.1', 33522) -2025-08-28 13:34:55,047 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-28 14:02:04,360 - INFO - Connection accepted from ('127.0.0.1', 56596) -2025-08-28 14:02:04,360 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-08-28 14:51:47,736 - INFO - Connection accepted from ('127.0.0.1', 55280) -2025-08-28 14:51:47,736 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8c3f822074eb06ba00fd145e2f869875b420538754f89f5808d5fd4e.PubTator"} -Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation. -2025-08-29 11:27:26,489 - INFO - Connection accepted from ('127.0.0.1', 59964) -2025-08-29 11:27:26,499 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 11:10:30,083 - INFO - Connection accepted from ('127.0.0.1', 56200) -2025-09-17 11:10:30,083 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a1773482ee80b67b47aff91334515e62ecabd077849417bcb463110c.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 12:24:07,433 - INFO - Connection accepted from ('127.0.0.1', 60870) -2025-09-17 12:24:07,433 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9bc1ff8066f17a6457bd1921f2c51ed7f03cf9589239369db89ec3fa.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 12:46:06,345 - INFO - Connection accepted from ('127.0.0.1', 57978) -2025-09-17 12:46:06,346 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1499349ee9985c99ab932f2ad11e35e3d07201e33e712d179093f32b.PubTator"} -2025-09-17 12:53:45,632 - INFO - Connection accepted from ('127.0.0.1', 38590) -2025-09-17 12:53:45,632 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bf3ae5e071fc67cfc4d940ad4fe46e4d3e36fc0cfd6bc6bf7a77f7f7.PubTator"} -2025-09-17 12:59:57,544 - INFO - Connection accepted from ('127.0.0.1', 53102) -2025-09-17 12:59:57,544 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c85c6699513924186db9dd319fe7f541984da30a50f8ab2f39fa0430.PubTator"} -2025-09-17 13:07:06,174 - INFO - Connection accepted from ('127.0.0.1', 51812) -2025-09-17 13:07:06,175 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7b00b22e2c9ce5ade86424797ad42c463089d18a36f825a3c6962acd.PubTator"} -2025-09-17 13:14:52,250 - INFO - Connection accepted from ('127.0.0.1', 59146) -2025-09-17 13:14:52,250 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7efada28608416135598c736128f1ab7d05b21343ca13208272597e0.PubTator"} -2025-09-17 13:20:46,134 - INFO - Connection accepted from ('127.0.0.1', 41356) -2025-09-17 13:20:46,135 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "48a72cf4a966d71e3495cf4a1437cc2dd507dc56b8fb12827031147b.PubTator"} -2025-09-17 14:10:02,662 - INFO - Connection accepted from ('127.0.0.1', 35748) -2025-09-17 14:10:02,662 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 14:31:54,934 - INFO - Connection accepted from ('127.0.0.1', 43550) -2025-09-17 14:31:54,934 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "060cba8cd3860b27a0709755afa3ea974884dd6b40e5353c7fdb92c2.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 14:48:55,419 - INFO - Connection accepted from ('127.0.0.1', 44478) -2025-09-17 14:48:55,419 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a8d06891a6253eb44a486c2980d8562e35f96cb3c6550ddc7eb989bd.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 15:14:41,909 - INFO - Connection accepted from ('127.0.0.1', 39548) -2025-09-17 15:14:41,910 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6bdc85d4bd729687a38010d5c6720ea19752d77519caaf948039e3dd.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-17 15:35:39,991 - INFO - Connection accepted from ('127.0.0.1', 37396) -2025-09-17 15:35:39,991 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "76a4cfe48d370e6c1d531733a536df09a69e8a90486304c3d0b856b9.PubTator"} -2025-09-17 15:42:35,415 - INFO - Connection accepted from ('127.0.0.1', 46534) -2025-09-17 15:42:35,415 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6f5caa582a230078e590f5538a2885b2b4f2b07cb76743865a806d08.PubTator"} -2025-09-17 15:48:08,323 - INFO - Connection accepted from ('127.0.0.1', 59852) -2025-09-17 15:48:08,323 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "75d30358c4498a0d17ff65b86cb778f43e998ccf8b2af86b59c9cb16.PubTator"} -2025-09-17 15:56:05,394 - INFO - Connection accepted from ('127.0.0.1', 45176) -2025-09-17 15:56:05,394 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f0b016a2e7cb06d6969f346baab78133546b325a29186c668d9640a6.PubTator"} -2025-09-17 16:02:59,522 - INFO - Connection accepted from ('127.0.0.1', 55588) -2025-09-17 16:02:59,523 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b8a10077fd0d1c3910bc30d3dcec583800643d7e5541aa3d831fb67d.PubTator"} -2025-09-17 16:08:28,800 - INFO - Connection accepted from ('127.0.0.1', 53234) -2025-09-17 16:08:28,800 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ae1cd1e6f9166f89e1b6f1f98afab5dbb57fd112e72c97b958902408.PubTator"} -2025-09-17 16:13:45,377 - INFO - Connection accepted from ('127.0.0.1', 55982) -2025-09-17 16:13:45,377 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4b638144a62efd55a9b36b0212e7f064abf21127793c3556d993f33a.PubTator"} -2025-09-17 16:21:36,927 - INFO - Connection accepted from ('127.0.0.1', 57014) -2025-09-17 16:21:36,928 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2935e3773208e8bc6181b79ae26b310eac22ff29ccdf26f4d89fa7f0.PubTator"} -2025-09-17 16:27:12,680 - INFO - Connection accepted from ('127.0.0.1', 58832) -2025-09-17 16:27:12,681 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "722b9804e1bca71e866f16a04e5cc165b78f96274e267766810e3b42.PubTator"} -2025-09-17 16:33:20,241 - INFO - Connection accepted from ('127.0.0.1', 50332) -2025-09-17 16:33:20,242 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7701b2515eb4a5c70aeae8070520c1ff549995b2c53591a702a289ae.PubTator"} -2025-09-17 16:41:29,947 - INFO - Connection accepted from ('127.0.0.1', 47446) -2025-09-17 16:41:29,947 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4224419f654bd839cea844bbe503272a95dedf7ae2c1743bcd1bc5c7.PubTator"} -2025-09-17 16:47:36,561 - INFO - Connection accepted from ('127.0.0.1', 38678) -2025-09-17 16:47:36,561 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "209bf04a447d6f7e96a3dfb2c4a88790d500aaae14b3105ecd02764d.PubTator"} -2025-09-17 16:54:25,440 - INFO - Connection accepted from ('127.0.0.1', 40080) -2025-09-17 16:54:25,440 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ca1db229f1ef3847c6828c295d4940ac1f6c78f81b734fa66461caa6.PubTator"} -2025-09-17 16:59:33,066 - INFO - Connection accepted from ('127.0.0.1', 50822) -2025-09-17 16:59:33,066 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "34f2e2dcfad7023766c0a7cc225aabbd2ea73bedda30df50ceb57945.PubTator"} -2025-09-17 17:07:39,376 - INFO - Connection accepted from ('127.0.0.1', 35054) -2025-09-17 17:07:39,377 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7ca5eaca22563071eab1bfb5f7eadf6c66bbc2bf8e103af1f88504a4.PubTator"} -2025-09-17 17:13:14,423 - INFO - Connection accepted from ('127.0.0.1', 36024) -2025-09-17 17:13:14,424 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8e4a42068dac51e8bb81f364a934429b58a08ce6f927ca01b4e93316.PubTator"} -2025-09-17 17:20:48,700 - INFO - Connection accepted from ('127.0.0.1', 49556) -2025-09-17 17:20:48,700 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8954bd538e3f3376549bfec4f7b763471be35e85123949d8c7c84ac5.PubTator"} -2025-09-17 17:27:45,046 - INFO - Connection accepted from ('127.0.0.1', 52622) -2025-09-17 17:27:45,046 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b32183c5c3d03c5b0aef0dd168a383affeb16900a62524ae3f6c6e31.PubTator"} -2025-09-17 17:32:40,181 - INFO - Connection accepted from ('127.0.0.1', 56844) -2025-09-17 17:32:40,182 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2921d686c0e322af074408698c9622213fc25fae92a8a27c7968cd36.PubTator"} -2025-09-17 17:37:10,016 - INFO - Connection accepted from ('127.0.0.1', 40772) -2025-09-17 17:37:10,017 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "16291d172c065db0c03bc088a38f14c204ca2361ff0e636f0513ae33.PubTator"} -2025-09-17 17:41:18,115 - INFO - Connection accepted from ('127.0.0.1', 49100) -2025-09-17 17:41:18,115 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "56e5d54adf5a52fc2a38efcf5edd8de93fad43bf11c7bc104727e060.PubTator"} -2025-09-17 17:45:29,211 - INFO - Connection accepted from ('127.0.0.1', 45778) -2025-09-17 17:45:29,211 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "23276a4c7b62cba6c0723436fe72678d8c4a5ce1550e424508e90136.PubTator"} -2025-09-17 17:51:59,949 - INFO - Connection accepted from ('127.0.0.1', 56118) -2025-09-17 17:51:59,949 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3eb61697c2c016ce65e3d89ecf23acd7c83c802b38bf13283f3d0f16.PubTator"} -2025-09-17 17:58:28,378 - INFO - Connection accepted from ('127.0.0.1', 33050) -2025-09-17 17:58:28,378 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "14caa8dbd3c091857813e0e85b2fab6adda30e74c1dd3305846a2810.PubTator"} -2025-09-17 18:06:08,673 - INFO - Connection accepted from ('127.0.0.1', 59706) -2025-09-17 18:06:08,674 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6bd8bd22bb14d060a85dcb8d5f10db52f8068bd1a58f8480752bcc5c.PubTator"} -2025-09-17 18:09:28,942 - INFO - Connection accepted from ('127.0.0.1', 52084) -2025-09-17 18:09:28,942 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cc14128c935bd9de76da8e58588cd316b1d30407ed052cbb7e68347a.PubTator"} -2025-09-17 18:22:30,191 - INFO - Connection accepted from ('127.0.0.1', 50598) -2025-09-17 18:22:30,191 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a63504cba3492975c9648d710aab8cfa9f4fd39b37dc59508ae7235d.PubTator"} -2025-09-17 18:29:07,728 - INFO - Connection accepted from ('127.0.0.1', 34200) -2025-09-17 18:29:07,729 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ecf8afce29ed17b1e677eb66c44ab1524a9763daf0edf34014b45a84.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 09:34:37,227 - INFO - Connection accepted from ('127.0.0.1', 51696) -2025-09-18 09:34:37,228 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5049bcfec01f4f1d8b656cabcfa9e5b8caf802c714c8d39e043a29fa.PubTator"} -2025-09-18 09:39:27,466 - INFO - Connection accepted from ('127.0.0.1', 48308) -2025-09-18 09:39:27,467 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ac1b31d7f2a8e867832571c4744ff29e8059eea683df90bc6a137d9e.PubTator"} -2025-09-18 09:44:17,690 - INFO - Connection accepted from ('127.0.0.1', 58166) -2025-09-18 09:44:17,690 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2b67bd8a16443927a46d11779226567f82f3aa4c87d16befa692f1c9.PubTator"} -2025-09-18 09:50:36,733 - INFO - Connection accepted from ('127.0.0.1', 48836) -2025-09-18 09:50:36,734 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f1b99bb5a7f3b88950dcb007f8211e6ec96ba02f950adb0eec6eee14.PubTator"} -2025-09-18 09:56:45,271 - INFO - Connection accepted from ('127.0.0.1', 52598) -2025-09-18 09:56:45,271 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d46844df7077d2f721e3f5f21abb0efe5fb5f86e808cee77c4908ff9.PubTator"} -2025-09-18 10:01:21,582 - INFO - Connection accepted from ('127.0.0.1', 59398) -2025-09-18 10:01:21,582 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c711fe5dd543f86071bd13298d01a32749f7dfb9f573859d252a86ee.PubTator"} -2025-09-18 10:07:41,933 - INFO - Connection accepted from ('127.0.0.1', 34056) -2025-09-18 10:07:41,933 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c9eba8f4d2ec18dbca3dfe17411ecfd4df409c2d5c0f6c9cf5b19658.PubTator"} -2025-09-18 10:14:08,238 - INFO - Connection accepted from ('127.0.0.1', 32832) -2025-09-18 10:14:08,238 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "46f6a40db0a9f6c3a591d600259ea573f1006d37ab274d5ad32f1858.PubTator"} -2025-09-18 10:21:11,160 - INFO - Connection accepted from ('127.0.0.1', 57418) -2025-09-18 10:21:11,160 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "97c6cca09972e90229c64dde01fb3643e7e2f9d2b1464c5a0d5f460d.PubTator"} -2025-09-18 10:27:48,306 - INFO - Connection accepted from ('127.0.0.1', 40892) -2025-09-18 10:27:48,307 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4c359d813daeb97f6e7ba03eb46a1a71f9451995d0101420d813935c.PubTator"} -2025-09-18 10:34:03,550 - INFO - Connection accepted from ('127.0.0.1', 42298) -2025-09-18 10:34:03,550 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b6cdc400fa6035b9db4c7a3aa1063324fd34cb8fc0a60999db4a7088.PubTator"} -2025-09-18 10:39:39,718 - INFO - Connection accepted from ('127.0.0.1', 33610) -2025-09-18 10:39:39,719 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "69da3d5c9756484561d38f6b18b486efb3ef03abff2cdca8d4db0470.PubTator"} -2025-09-18 10:45:14,147 - INFO - Connection accepted from ('127.0.0.1', 56592) -2025-09-18 10:45:14,148 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1501995ce586ffd0c7522df67e52af96f151f639f40a785a87e4a1ab.PubTator"} -2025-09-18 10:50:04,609 - INFO - Connection accepted from ('127.0.0.1', 49304) -2025-09-18 10:50:04,609 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "303706e25823bd0149547accec6ec3affcc4b2b7b85151fc9585b934.PubTator"} -2025-09-18 10:53:46,249 - INFO - Connection accepted from ('127.0.0.1', 54308) -2025-09-18 10:53:46,249 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "82aaf78c7d477b26c6d6de9a4891aa26aec9c5eaad2b4bc0f52ff40c.PubTator"} -2025-09-18 10:59:16,103 - INFO - Connection accepted from ('127.0.0.1', 38162) -2025-09-18 10:59:16,103 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "14cc615342962ce4f6996ac0ae9cd43a3b133d5ea971a4ecd1628679.PubTator"} -2025-09-18 11:05:17,978 - INFO - Connection accepted from ('127.0.0.1', 46020) -2025-09-18 11:05:17,978 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fa40b5a14e86ed1202c7bf4fbf0a5c8ad1163491e5e388cec23b586e.PubTator"} -2025-09-18 11:12:08,564 - INFO - Connection accepted from ('127.0.0.1', 42380) -2025-09-18 11:12:08,564 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a365c0dd1424220c97f5edb66db093580b2f05b882a3ab791206f6a8.PubTator"} -2025-09-18 11:17:47,882 - INFO - Connection accepted from ('127.0.0.1', 47256) -2025-09-18 11:17:47,883 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d080d04547c5a24aab2cb28eb234670adc3985a80aaecacc7c4f708e.PubTator"} -2025-09-18 11:22:00,164 - INFO - Connection accepted from ('127.0.0.1', 60832) -2025-09-18 11:22:00,165 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a3a639e2a4441ddea4d69af957c164ad6ee595ca0b5301c102d697c0.PubTator"} -2025-09-18 11:28:28,021 - INFO - Connection accepted from ('127.0.0.1', 34666) -2025-09-18 11:28:28,021 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0d9b43e2b228a67da2f1615501a481166c7188675b6839c7e7f178ee.PubTator"} -2025-09-18 11:34:16,996 - INFO - Connection accepted from ('127.0.0.1', 54366) -2025-09-18 11:34:16,996 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a8c4468f804d0bc20cddc7db6a652a906a210c1e494f9adfc6bf4a60.PubTator"} -2025-09-18 11:39:12,304 - INFO - Connection accepted from ('127.0.0.1', 46782) -2025-09-18 11:39:12,305 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e696b2e5a7cfb0afad922b6c4fa921b9f19cecdc97384b603310188c.PubTator"} -2025-09-18 11:44:20,257 - INFO - Connection accepted from ('127.0.0.1', 37722) -2025-09-18 11:44:20,257 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a1a9809c4e476f8d900c78f59802a0a25d0a10dcc786371721e174b6.PubTator"} -2025-09-18 11:51:21,135 - INFO - Connection accepted from ('127.0.0.1', 34686) -2025-09-18 11:51:21,135 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d4b31b8900dd2f1d35e13c88a8decefbcf3aa6fff6c171729bfefe96.PubTator"} -2025-09-18 11:57:02,831 - INFO - Connection accepted from ('127.0.0.1', 36436) -2025-09-18 11:57:02,831 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "111eea2c637963c95ca9bf8587b8203b26d9c9073e516436ff029cf4.PubTator"} -2025-09-18 12:01:37,800 - INFO - Connection accepted from ('127.0.0.1', 39046) -2025-09-18 12:01:37,800 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "83d8d008497bd9133e049fc0a68c2f6ccf053283c6c29793f2c29a46.PubTator"} -2025-09-18 12:06:03,380 - INFO - Connection accepted from ('127.0.0.1', 48162) -2025-09-18 12:06:03,381 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0880c1da9adc4eb6836a3b843f63f5a686d66f6a42c3384746bcd569.PubTator"} -2025-09-18 12:09:43,954 - INFO - Connection accepted from ('127.0.0.1', 58850) -2025-09-18 12:09:43,954 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9bf1c4d0a56866015b17d47a224aa769db41a3bb5b68adeaccea4ef8.PubTator"} -2025-09-18 12:15:48,503 - INFO - Connection accepted from ('127.0.0.1', 49840) -2025-09-18 12:15:48,503 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "30981ae22ee94255da8e19eaade584f52cb851a13c56403452d1763a.PubTator"} -2025-09-18 12:22:39,972 - INFO - Connection accepted from ('127.0.0.1', 52698) -2025-09-18 12:22:39,972 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "af1e85300903ea8ef9d73a2bb4188355b64ce7c19e77f7fbecbcffd7.PubTator"} -2025-09-18 12:31:42,308 - INFO - Connection accepted from ('127.0.0.1', 43148) -2025-09-18 12:31:42,309 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "01a3f691d8dec6b385d7bc379ae95559617fcc57d36edd3a162e4e01.PubTator"} -2025-09-18 12:38:17,339 - INFO - Connection accepted from ('127.0.0.1', 38060) -2025-09-18 12:38:17,339 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b1c5dc511d34e30adea874dc4ebe5a15055b5abcd050820fa531e1ad.PubTator"} -2025-09-18 12:41:42,124 - INFO - Connection accepted from ('127.0.0.1', 50694) -2025-09-18 12:41:42,124 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c713c8537457ffe19a2661ed94afb4fd453e37fc31c33d4c61092aa9.PubTator"} -2025-09-18 12:48:55,452 - INFO - Connection accepted from ('127.0.0.1', 49804) -2025-09-18 12:48:55,452 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "db5d75df2bcce6388234127f0517dad4bf02de8e8462438dc9e32284.PubTator"} -2025-09-18 12:55:42,932 - INFO - Connection accepted from ('127.0.0.1', 43356) -2025-09-18 12:55:42,932 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c4db6ef33a6162bf1ec17f0ed155a1b260a6eaf41ac55ad0771f9d28.PubTator"} -2025-09-18 13:00:34,357 - INFO - Connection accepted from ('127.0.0.1', 47984) -2025-09-18 13:00:34,357 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6daf824e33e03585f02add175f1f5833067969d7630b3e2b9da65846.PubTator"} -2025-09-18 13:06:27,871 - INFO - Connection accepted from ('127.0.0.1', 44374) -2025-09-18 13:06:27,871 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d2ebf1ed40624802693fbaf646e42396b2e8a6b95e1a1977f433f231.PubTator"} -2025-09-18 13:12:11,816 - INFO - Connection accepted from ('127.0.0.1', 46938) -2025-09-18 13:12:11,817 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "60ebb311323b94b4e93318b4bb6b9191c266c1fa1637c7ca69cdbc78.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 14:17:24,692 - INFO - Connection accepted from ('127.0.0.1', 52728) -2025-09-18 14:17:24,693 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 14:28:59,943 - INFO - Connection accepted from ('127.0.0.1', 49890) -2025-09-18 14:28:59,943 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 14:45:08,478 - INFO - Connection accepted from ('127.0.0.1', 60906) -2025-09-18 14:45:08,478 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cbf764a70b62954566ef689aa887ec7d0fd3a312d5f673fd8db0f760.PubTator"} -2025-09-18 14:54:38,788 - INFO - Connection accepted from ('127.0.0.1', 34526) -2025-09-18 14:54:38,788 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "69e2d12e4df39d6821e2ad18aa12d61be7a461db5f692d6ac18b2a92.PubTator"} -2025-09-18 15:03:42,012 - INFO - Connection accepted from ('127.0.0.1', 33362) -2025-09-18 15:03:42,012 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "de7d9c2697092fb51ef8c021ae24bd26eea3be85c11d82cfb4ee292c.PubTator"} -2025-09-18 15:09:21,903 - INFO - Connection accepted from ('127.0.0.1', 56974) -2025-09-18 15:09:21,903 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d073b0038f542e06d7d174be1015f99b6861fa37e2ac0b00050bed0b.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 15:25:51,471 - INFO - Connection accepted from ('127.0.0.1', 49352) -2025-09-18 15:25:51,471 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "954340c9a89d52dc144557373eb3ea07410622b9db633546c284aacb.PubTator"} -2025-09-18 15:33:30,906 - INFO - Connection accepted from ('127.0.0.1', 58182) -2025-09-18 15:33:30,906 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a3a2271b007d7d01ed6856dc25ee8a8e12e8563c1c6664a3b07f37ee.PubTator"} -2025-09-18 15:39:33,601 - INFO - Connection accepted from ('127.0.0.1', 40700) -2025-09-18 15:39:33,601 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e247a78d735f84fbd245fe69072cf7adae43eecbf543041264c903f5.PubTator"} -2025-09-18 15:42:38,172 - INFO - Connection accepted from ('127.0.0.1', 58460) -2025-09-18 15:42:38,173 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ad98e24772b66b1e6633b19085f457b93d1647ddfa55d27028520eaf.PubTator"} -2025-09-18 15:45:14,764 - INFO - Connection accepted from ('127.0.0.1', 53582) -2025-09-18 15:45:14,764 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8ad06b86b09c8592d5b32f8d4c7b55290552cf63d6c96aa9ce675843.PubTator"} -2025-09-18 15:53:22,071 - INFO - Connection accepted from ('127.0.0.1', 36074) -2025-09-18 15:53:22,071 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "acf7b3170dae39a5584f8afe43cd111d0e1a731212b03a055a4d9a68.PubTator"} -2025-09-18 15:58:26,725 - INFO - Connection accepted from ('127.0.0.1', 54570) -2025-09-18 15:58:26,725 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "03120879462f4ab9426b3fe7956585ac571b4697a2b9a8d659daa55b.PubTator"} -2025-09-18 16:04:24,010 - INFO - Connection accepted from ('127.0.0.1', 52420) -2025-09-18 16:04:24,010 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "57898f44678fbfc1d92e94def7d294d3199a5fbd07d8d9ee37856a17.PubTator"} -2025-09-18 16:15:20,713 - INFO - Connection accepted from ('127.0.0.1', 36016) -2025-09-18 16:15:20,713 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ec3c89691a4f14011228af36714c7c1a76714ba1f69bb1a9a67d24c8.PubTator"} -2025-09-18 16:18:49,092 - INFO - Connection accepted from ('127.0.0.1', 56644) -2025-09-18 16:18:49,093 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4d220d56e87b3bbf3e5f3805d85d65513c9204adb05bb730eaf5969b.PubTator"} -2025-09-18 16:20:45,910 - INFO - Connection accepted from ('127.0.0.1', 41386) -2025-09-18 16:20:45,910 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "25bed10e400940e27cac58db4041ce1e55451d05ade101f45501f48a.PubTator"} -2025-09-18 16:25:21,787 - INFO - Connection accepted from ('127.0.0.1', 41146) -2025-09-18 16:25:21,787 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f7677c0a388102214de9f713a81d3ac4acbbc18549d0767fcb3634c8.PubTator"} -2025-09-18 16:30:39,272 - INFO - Connection accepted from ('127.0.0.1', 59180) -2025-09-18 16:30:39,272 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e9b6cce27a110f601a69995057f50539e442f068bbb8d868fdec0c4c.PubTator"} -2025-09-18 16:34:22,127 - INFO - Connection accepted from ('127.0.0.1', 54736) -2025-09-18 16:34:22,127 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ab5974547f8ae144d1a31b8832f2e7d46811057d0047dd8fc5d2b77d.PubTator"} -2025-09-18 16:38:42,174 - INFO - Connection accepted from ('127.0.0.1', 54132) -2025-09-18 16:38:42,174 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "df6c580fa3698044ac3ab9b1cefac6dca8402aaf776a0f31c9bd3fdb.PubTator"} -2025-09-18 16:45:34,126 - INFO - Connection accepted from ('127.0.0.1', 33396) -2025-09-18 16:45:34,126 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5a134894005431f76832b77a120f94ab28614c3473ac56626559e410.PubTator"} -2025-09-18 16:49:43,716 - INFO - Connection accepted from ('127.0.0.1', 47724) -2025-09-18 16:49:43,716 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "057b00c6ea12be08c9f9aeff2eb25c271a5435018f9dff2632e43ebe.PubTator"} -2025-09-18 16:57:37,781 - INFO - Connection accepted from ('127.0.0.1', 34130) -2025-09-18 16:57:37,781 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "31a4d66dcd6a8bc5ed750e2d64aee5207e3fda56e310428cab3ed633.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 17:02:29,262 - INFO - Connection accepted from ('127.0.0.1', 37718) -2025-09-18 17:02:29,263 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3fc3eeb12584d858be7122a31c56f422f177e29ea0904094d0d058bc.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-18 17:14:24,169 - INFO - Connection accepted from ('127.0.0.1', 57218) -2025-09-18 17:14:24,170 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "77018b9b19e70f1d70501dc8857f3d6394b8d2eb5ea3123679ebefc0.PubTator"} -2025-09-18 17:16:30,241 - INFO - Connection accepted from ('127.0.0.1', 53666) -2025-09-18 17:16:30,242 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0eab6c13791e54b6ad7d1a411bf1dab01bbd8894826cb1a8cecf92d6.PubTator"} -2025-09-18 17:20:34,528 - INFO - Connection accepted from ('127.0.0.1', 41466) -2025-09-18 17:20:34,528 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fe9089e6093f81a87ddb5cad117a11cfb11cd8102889d73873bf77aa.PubTator"} -2025-09-18 17:22:32,499 - INFO - Connection accepted from ('127.0.0.1', 32830) -2025-09-18 17:22:32,499 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d4c1140e8f027f1ed99263a27ecbdd378a11fda959d07f17d5ee9680.PubTator"} -2025-09-18 17:29:04,279 - INFO - Connection accepted from ('127.0.0.1', 35768) -2025-09-18 17:29:04,280 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bfc483cad20f3fe622a8d8c1e579364e26566ce8dee3cf0523fe823b.PubTator"} -2025-09-18 17:36:08,193 - INFO - Connection accepted from ('127.0.0.1', 40518) -2025-09-18 17:36:08,193 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e7cdc9060c04c66306bf421778d65e5ea26db92b124e29e398190d40.PubTator"} -2025-09-18 17:39:40,175 - INFO - Connection accepted from ('127.0.0.1', 48254) -2025-09-18 17:39:40,176 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "98a4909f55310bd6092d4648f344d2f3d964d823e2c01e1079fb3cd7.PubTator"} -2025-09-18 17:41:30,775 - INFO - Connection accepted from ('127.0.0.1', 58426) -2025-09-18 17:41:30,775 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "df3b0f795385d2b3ac0597ff226b151d8921bdf2d6f574cf1f2fc49e.PubTator"} -2025-09-18 17:47:41,785 - INFO - Connection accepted from ('127.0.0.1', 53974) -2025-09-18 17:47:41,785 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "265c71c0318b5858a65200e379fe294137dd553210a882ede3b28b41.PubTator"} -2025-09-18 17:52:39,825 - INFO - Connection accepted from ('127.0.0.1', 48538) -2025-09-18 17:52:39,825 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3045fd7d8e059f7c7e98919cbbe715b38ae5fb09ce52cb44088c2f6f.PubTator"} -2025-09-18 17:57:43,712 - INFO - Connection accepted from ('127.0.0.1', 47556) -2025-09-18 17:57:43,712 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a857d2beb4a279b9d2974859214096a28707e2274041da05317394ed.PubTator"} -2025-09-18 17:59:45,946 - INFO - Connection accepted from ('127.0.0.1', 51112) -2025-09-18 17:59:45,946 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bc6b288387f2dc5ad551cf388a98af62b8bdbc75d1d2ae5f9a0afb06.PubTator"} -2025-09-18 18:01:42,380 - INFO - Connection accepted from ('127.0.0.1', 55664) -2025-09-18 18:01:42,380 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d067d918e9744876e189122f3a7ea86a8d9c1a9cd3f38ead0f9cbb89.PubTator"} -2025-09-18 18:03:19,794 - INFO - Connection accepted from ('127.0.0.1', 44468) -2025-09-18 18:03:19,794 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2c86eba64f1ee8990c41105beb7a04703d017530e55abd2afb634d7e.PubTator"} -2025-09-18 18:05:56,713 - INFO - Connection accepted from ('127.0.0.1', 43628) -2025-09-18 18:05:56,714 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6ab8a5d990e958a50d1b61a912cf51bf394256bb98b8709d437d074f.PubTator"} -2025-09-18 18:09:49,001 - INFO - Connection accepted from ('127.0.0.1', 47286) -2025-09-18 18:09:49,001 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2e25534b847e70038295a86f580c92a46f9b0235c258128b22ea346a.PubTator"} -2025-09-18 18:10:54,128 - INFO - Connection accepted from ('127.0.0.1', 51640) -2025-09-18 18:10:54,128 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "94289d45a2e3fe283f893de0e4ec80022f3201e50a2af61335f7dcfa.PubTator"} -2025-09-18 18:17:25,790 - INFO - Connection accepted from ('127.0.0.1', 43850) -2025-09-18 18:17:25,791 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6b990e3489183a67390fc86fdcb00fa3d19d471fe404e23321f13d5b.PubTator"} -2025-09-18 18:21:35,589 - INFO - Connection accepted from ('127.0.0.1', 44816) -2025-09-18 18:21:35,589 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "56774355c5ad4ede23fdf90f89d9121a53f332a8a61ccb2046d25567.PubTator"} -2025-09-18 18:24:29,874 - INFO - Connection accepted from ('127.0.0.1', 45018) -2025-09-18 18:24:29,874 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5b3bf3591ae9607b9e4088131fc0670244c71825cd0ef671d35b7ead.PubTator"} -2025-09-18 18:29:22,228 - INFO - Connection accepted from ('127.0.0.1', 50678) -2025-09-18 18:29:22,229 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4675b0dccd492746a62b60ab697e300779b44900e3b20c73318b3ec6.PubTator"} -2025-09-18 18:35:40,034 - INFO - Connection accepted from ('127.0.0.1', 52772) -2025-09-18 18:35:40,035 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "34f7d60d86ac64f84ffe1c75a0555a53188639b79747f92f14750897.PubTator"} -2025-09-18 18:40:27,494 - INFO - Connection accepted from ('127.0.0.1', 39006) -2025-09-18 18:40:27,494 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3c0157756963ca15c3e544efd1ee01394a1fc5fc75630e8c9cb4287f.PubTator"} -2025-09-18 18:42:31,946 - INFO - Connection accepted from ('127.0.0.1', 52248) -2025-09-18 18:42:31,947 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "be616bdacc737be1c0128f7a6169eb138091d170677835fec39720d8.PubTator"} -2025-09-18 18:44:43,987 - INFO - Connection accepted from ('127.0.0.1', 58660) -2025-09-18 18:44:43,987 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "05ad9eb69959b351a44c144f3f3481bb8b73efb5e664ad3fe45d58d2.PubTator"} -2025-09-18 18:46:21,249 - INFO - Connection accepted from ('127.0.0.1', 37138) -2025-09-18 18:46:21,249 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d048f9f68e37ba861cfb4a6151ce0ad33a1657fe2baf9f0ffa5f56e3.PubTator"} -2025-09-18 18:51:25,831 - INFO - Connection accepted from ('127.0.0.1', 39594) -2025-09-18 18:51:25,831 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "856ea346ffda32002f1058f1f2641f52cbe604a67f7a2171e330929f.PubTator"} -2025-09-18 18:57:08,492 - INFO - Connection accepted from ('127.0.0.1', 53990) -2025-09-18 18:57:08,492 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a9d724f38f1a9d283dbe86e0fba90f2c482b74c183ef7fed83640e3c.PubTator"} -2025-09-18 18:58:22,453 - INFO - Connection accepted from ('127.0.0.1', 33002) -2025-09-18 18:58:22,454 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "52e08b9bac398c764d1bd5e3c99a7ce606529e46f3ac45e8e7a12bad.PubTator"} -2025-09-18 19:00:48,473 - INFO - Connection accepted from ('127.0.0.1', 55702) -2025-09-18 19:00:48,474 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9bb23f5d43bca137cd50c923a376c3e0fd0b48d54fbe9d581a6f5194.PubTator"} -2025-09-18 19:03:43,692 - INFO - Connection accepted from ('127.0.0.1', 43956) -2025-09-18 19:03:43,692 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1f5930397170dd327f9378332c4509f515f26eb1ab16e73e5ed5b2a5.PubTator"} -2025-09-18 19:04:37,453 - INFO - Connection accepted from ('127.0.0.1', 33912) -2025-09-18 19:04:37,453 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "47e71977159d7f5d5a142aaddd090bff28ba66ffacb8908d6c55f812.PubTator"} -2025-09-18 19:06:59,869 - INFO - Connection accepted from ('127.0.0.1', 45422) -2025-09-18 19:06:59,869 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3bff36eed2351d3c58e9428dce1fda58c7997ee49da5e4e910c7d133.PubTator"} -2025-09-18 19:09:05,755 - INFO - Connection accepted from ('127.0.0.1', 57642) -2025-09-18 19:09:05,755 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "920e960a1d9b4307b21d516514768936af46b460f385aa516ce84504.PubTator"} -2025-09-18 19:10:11,331 - INFO - Connection accepted from ('127.0.0.1', 34020) -2025-09-18 19:10:11,331 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "447f6d9dab85d7d82bb33a5bd3f62b0300a243d57d2c6436a432f7e6.PubTator"} -2025-09-18 19:14:16,268 - INFO - Connection accepted from ('127.0.0.1', 56458) -2025-09-18 19:14:16,269 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d6efb29974a805c658cd2d5e45b3bdbe9a01e427c5e2080c9eddf178.PubTator"} -2025-09-18 19:20:44,669 - INFO - Connection accepted from ('127.0.0.1', 38108) -2025-09-18 19:20:44,670 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7fc19ab2df36ddfd866a1d4aa2b25b84ba031b004faa0e5d4d1b8983.PubTator"} -2025-09-18 19:24:37,520 - INFO - Connection accepted from ('127.0.0.1', 57122) -2025-09-18 19:24:37,520 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "789a480bbcc1316093831ec79f9062d9c1efba17edf30bdd305b8b20.PubTator"} -2025-09-18 19:38:53,797 - INFO - Connection accepted from ('127.0.0.1', 33562) -2025-09-18 19:38:53,797 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6dd893d100ec5df5205b81f51f88211c066f7be6343770de05765da0.PubTator"} -2025-09-18 19:45:22,329 - INFO - Connection accepted from ('127.0.0.1', 34380) -2025-09-18 19:45:22,330 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3451cfaade39905a11e51cfeb43676ccf234495bbf0a24df449dd038.PubTator"} -2025-09-18 19:52:03,529 - INFO - Connection accepted from ('127.0.0.1', 53114) -2025-09-18 19:52:03,530 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f233c18d1e574ed30d4668a0c8ef27c366efdb068ea771796a6a276d.PubTator"} -2025-09-18 20:04:56,223 - INFO - Connection accepted from ('127.0.0.1', 46268) -2025-09-18 20:04:56,224 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "25d6874dff2d9a8b2af6ee78166b1985e122ed869d80d766d9724f31.PubTator"} -2025-09-18 20:07:04,190 - INFO - Connection accepted from ('127.0.0.1', 37614) -2025-09-18 20:07:04,190 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "198ba4be34a8afaba951fc537a2f2889453d8cf57e9c46c4b533acf3.PubTator"} -2025-09-18 20:08:29,953 - INFO - Connection accepted from ('127.0.0.1', 59858) -2025-09-18 20:08:29,953 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "034454635d6c4d53217f14a817c72ca5680c2e4095b82c459e726ff5.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-19 09:30:22,007 - INFO - Connection accepted from ('127.0.0.1', 51848) -2025-09-19 09:30:22,007 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "143956f2912f6d2e3f3e9815d61ded24698f5715e178273ef00dad1e.PubTator"} -2025-09-19 09:33:06,618 - INFO - Connection accepted from ('127.0.0.1', 48584) -2025-09-19 09:33:06,618 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dc4ddc4891a32e37eea954d98d4dcdedaffd321320cdcca6675d54b2.PubTator"} -2025-09-19 09:38:03,502 - INFO - Connection accepted from ('127.0.0.1', 38108) -2025-09-19 09:38:03,502 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0255a68fb738d365f5ed285bc8d9967ccd7009cd2336528d34906c75.PubTator"} -2025-09-19 09:44:28,619 - INFO - Connection accepted from ('127.0.0.1', 35790) -2025-09-19 09:44:28,619 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8ec99913ccee65fb982ad39ca28de73841ad58a356f66abcdcb77de0.PubTator"} -2025-09-19 09:46:24,764 - INFO - Connection accepted from ('127.0.0.1', 44412) -2025-09-19 09:46:24,765 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fa5c36ab57e8882ea077d4cba9f8fb7c6a3d4910ce05a6ec02420a86.PubTator"} -2025-09-19 09:48:44,078 - INFO - Connection accepted from ('127.0.0.1', 42216) -2025-09-19 09:48:44,078 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ccb8ae87f74313a2e16094cb93d2d0267c3927a8fc09ab285427121e.PubTator"} -2025-09-19 09:50:22,074 - INFO - Connection accepted from ('127.0.0.1', 58460) -2025-09-19 09:50:22,074 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a0bb869bc88070d5ce0668e50eff6e4e7b729e4f52092b7d9fbc39ff.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-19 09:56:36,034 - INFO - Connection accepted from ('127.0.0.1', 39004) -2025-09-19 09:56:36,034 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bf0f3f82a0f5d93c0a434a7179a1973e52fce83cb490b0cb7b612833.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-19 11:05:23,647 - INFO - Connection accepted from ('127.0.0.1', 50832) -2025-09-19 11:05:23,648 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "71307f7056c5bdd3809e893aaf18db2f9bdf77f72f1584e540528a51.PubTator"} -2025-09-19 11:09:38,368 - INFO - Connection accepted from ('127.0.0.1', 47040) -2025-09-19 11:09:38,368 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a120dd754be1b6332560c5f8c19677f702ddb67897be9e5d8f8c4c22.PubTator"} -2025-09-19 11:11:49,536 - INFO - Connection accepted from ('127.0.0.1', 50272) -2025-09-19 11:11:49,536 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c3cbd55f24018bf5f65662c77cfad13d99a62b3b92efb996020ffca0.PubTator"} -2025-09-19 11:16:22,437 - INFO - Connection accepted from ('127.0.0.1', 52990) -2025-09-19 11:16:22,437 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "eb3a9b2afe4ec337d42384cf4884d56deb0d73159fe24ad430a57d04.PubTator"} -2025-09-19 11:20:15,525 - INFO - Connection accepted from ('127.0.0.1', 41230) -2025-09-19 11:20:15,525 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d654c6ec60a57a63006c19bec72a4ff5984517358a5e3a96fc0f972b.PubTator"} -2025-09-19 11:22:52,008 - INFO - Connection accepted from ('127.0.0.1', 51824) -2025-09-19 11:22:52,008 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "08683d4947702432c762b30a5bd315c60d9549756cbb8982b0f80435.PubTator"} -2025-09-19 11:25:53,587 - INFO - Connection accepted from ('127.0.0.1', 49414) -2025-09-19 11:25:53,588 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0e7c4d9706d76ce746bd9bd4a49e8e2c88882893f6e3064e2959f5e0.PubTator"} -2025-09-19 11:30:44,840 - INFO - Connection accepted from ('127.0.0.1', 48078) -2025-09-19 11:30:44,840 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "72b708d554dfd1cc64a7740a2ae6ad814e44eef3128378e0f0e80643.PubTator"} -2025-09-19 11:33:44,534 - INFO - Connection accepted from ('127.0.0.1', 57890) -2025-09-19 11:33:44,534 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5e293e23db67128eb0c8f0e8d5040b7e9366547ffe243c223c998885.PubTator"} -2025-09-19 11:37:32,060 - INFO - Connection accepted from ('127.0.0.1', 37180) -2025-09-19 11:37:32,060 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cfa83f06e09ec0163b65e2627c0cd882190caea8517b8487e27a3ad1.PubTator"} -2025-09-19 11:41:47,361 - INFO - Connection accepted from ('127.0.0.1', 39100) -2025-09-19 11:41:47,361 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "51d06446961ae8425b555a72ea6120f93a0708bfd313659e535f9401.PubTator"} -2025-09-19 11:44:40,273 - INFO - Connection accepted from ('127.0.0.1', 49642) -2025-09-19 11:44:40,273 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b12b0517732991c95c133d1b3a5695d2c81f10c0f87e2e45a89c9977.PubTator"} -2025-09-19 11:47:40,021 - INFO - Connection accepted from ('127.0.0.1', 59142) -2025-09-19 11:47:40,021 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e57acffafd469e70be1667767a615a279163d621b4a3dc9291230361.PubTator"} -2025-09-19 11:50:15,390 - INFO - Connection accepted from ('127.0.0.1', 36456) -2025-09-19 11:50:15,390 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "43f4a165643ded775a06053215258dd16d770493c6f9765661705bd9.PubTator"} -2025-09-19 11:54:02,520 - INFO - Connection accepted from ('127.0.0.1', 57502) -2025-09-19 11:54:02,520 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "285774cbeafa63ef1c0ed93c594aa78e467ef2f86806205cc5fce289.PubTator"} -2025-09-19 11:56:51,198 - INFO - Connection accepted from ('127.0.0.1', 40420) -2025-09-19 11:56:51,199 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8cac582b6bed8043216666ce82267b493f6eb16483871eada6a941a3.PubTator"} -2025-09-19 12:00:28,752 - INFO - Connection accepted from ('127.0.0.1', 43146) -2025-09-19 12:00:28,752 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "244ed21841aeed3d878d76e459c0a0931953f3ff02f4f0020af0a18c.PubTator"} -2025-09-19 12:03:35,515 - INFO - Connection accepted from ('127.0.0.1', 41124) -2025-09-19 12:03:35,516 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7422eaf59ef0ba946412a3e3bf62c453ce6cd0f33645c445488f404e.PubTator"} -2025-09-19 12:06:12,342 - INFO - Connection accepted from ('127.0.0.1', 43840) -2025-09-19 12:06:12,342 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "256b013b958377bdb71244639df1a9a0af101d7cca35ffc0692ebfaa.PubTator"} -2025-09-19 12:08:24,001 - INFO - Connection accepted from ('127.0.0.1', 55338) -2025-09-19 12:08:24,001 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "94185e6d5a641a9ba9d9d8005467c5085a2c05ec4e65792507b4fb91.PubTator"} -2025-09-19 12:11:10,910 - INFO - Connection accepted from ('127.0.0.1', 42736) -2025-09-19 12:11:10,910 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "38584afcb0c262498326e844ca924b1456d1e0f59ec56533bbc4a3b3.PubTator"} -2025-09-19 12:13:21,518 - INFO - Connection accepted from ('127.0.0.1', 54270) -2025-09-19 12:13:21,519 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c2bd5ae7ba5032b6a19647985407bdf380011eaccd37f6ca43f063d3.PubTator"} -2025-09-19 12:16:30,426 - INFO - Connection accepted from ('127.0.0.1', 58514) -2025-09-19 12:16:30,426 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "74d4848c514a39710b447735dd2c72799a1c1df4644610fa83e005bc.PubTator"} -2025-09-19 12:19:51,866 - INFO - Connection accepted from ('127.0.0.1', 48414) -2025-09-19 12:19:51,866 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ed6b163b3fa11fa664c680a518d1d1f30f259497730fe2c00e135c5c.PubTator"} -2025-09-19 12:23:29,204 - INFO - Connection accepted from ('127.0.0.1', 41906) -2025-09-19 12:23:29,205 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "192f8e35935cfa6dc68e82ff302eb2bb6d791276f73f375fca680e69.PubTator"} -2025-09-19 12:25:32,757 - INFO - Connection accepted from ('127.0.0.1', 39340) -2025-09-19 12:25:32,758 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "aba4d596bfb02d9797ff8a8e8fd0f495dc42cb34a4eeee7a56b2b5c4.PubTator"} -2025-09-19 12:32:01,290 - INFO - Connection accepted from ('127.0.0.1', 55450) -2025-09-19 12:32:01,290 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "511de8dca3c0e23e3e0a33926e79f3a25ab09247225e9dcad2fb0076.PubTator"} -2025-09-19 12:35:17,195 - INFO - Connection accepted from ('127.0.0.1', 39950) -2025-09-19 12:35:17,195 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "14f767fc9f11e1b5528e336381743ad8870bdc3e7bc0850c50344616.PubTator"} -2025-09-19 12:39:30,362 - INFO - Connection accepted from ('127.0.0.1', 46668) -2025-09-19 12:39:30,362 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "05e681dde91d2ec492736e9863e75917c65d7ebbe788e337ec411a79.PubTator"} -2025-09-19 12:42:16,373 - INFO - Connection accepted from ('127.0.0.1', 44620) -2025-09-19 12:42:16,373 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c2b10142ee68d356267344b4c97689e05f2efda5e39d975a17898eda.PubTator"} -2025-09-19 12:44:57,963 - INFO - Connection accepted from ('127.0.0.1', 38638) -2025-09-19 12:44:57,963 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3ff666732551c9cadb4b94ab76b60111216a959b26f7cb8a7a19ab47.PubTator"} -2025-09-19 12:48:13,694 - INFO - Connection accepted from ('127.0.0.1', 47594) -2025-09-19 12:48:13,695 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8bc4937a423f854f0f21b4d0a56f721abedc5db4b8da45b89c3a0641.PubTator"} -2025-09-19 12:50:43,720 - INFO - Connection accepted from ('127.0.0.1', 44836) -2025-09-19 12:50:43,720 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b23419d8fb119c35091314e4c82d3af4a5e26f13a6b9c7a0a7fe6ca9.PubTator"} -2025-09-19 12:53:09,327 - INFO - Connection accepted from ('127.0.0.1', 44178) -2025-09-19 12:53:09,327 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "553b58ace9fe43816bf34052ccadfcfabb81fe20fceb965cf7087d84.PubTator"} -2025-09-19 12:56:17,947 - INFO - Connection accepted from ('127.0.0.1', 40582) -2025-09-19 12:56:17,947 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "01cd858bb4e9252f7f96804917fa7fa08aae64bf9cb7cae5e41ed52f.PubTator"} -2025-09-19 12:59:08,607 - INFO - Connection accepted from ('127.0.0.1', 55590) -2025-09-19 12:59:08,608 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "73cf64a5b62d0f47e5b8cd67d0e4fcbb3157cde313df8e82d23fc62b.PubTator"} -2025-09-19 13:02:58,826 - INFO - Connection accepted from ('127.0.0.1', 36706) -2025-09-19 13:02:58,827 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bae5f09781fc9b4738b4f39f4e1e29121187d0e8890a45de621f253e.PubTator"} -2025-09-19 13:06:41,519 - INFO - Connection accepted from ('127.0.0.1', 59976) -2025-09-19 13:06:41,520 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d8be928f0c155ef66a510823266c505503a97ba35c771a735918ee5d.PubTator"} -2025-09-19 13:10:27,004 - INFO - Connection accepted from ('127.0.0.1', 44304) -2025-09-19 13:10:27,004 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f72b29c96f91b31fca3e93e5b0cd790c0ecd885865c8a5dbb71f6092.PubTator"} -2025-09-19 13:12:39,846 - INFO - Connection accepted from ('127.0.0.1', 40842) -2025-09-19 13:12:39,846 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9489eb18cf3b8018ca7cfd9414b55930e43a3c52f8deb1667e50f0d4.PubTator"} -2025-09-19 13:15:21,387 - INFO - Connection accepted from ('127.0.0.1', 33664) -2025-09-19 13:15:21,387 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "145c5d63928e8d61a2193c2c34f434cd9ecc21fdf55a366132048b9c.PubTator"} -2025-09-19 13:17:56,422 - INFO - Connection accepted from ('127.0.0.1', 56834) -2025-09-19 13:17:56,423 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4ddc36bc9a370250bf902814f17faa1e0144eac8281f40188301573d.PubTator"} -2025-09-19 13:19:46,713 - INFO - Connection accepted from ('127.0.0.1', 38582) -2025-09-19 13:19:46,713 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7f74e45c5aceaba3c809369d730fc5b486849b44706e1e53bfd1f878.PubTator"} -2025-09-19 13:22:36,738 - INFO - Connection accepted from ('127.0.0.1', 53290) -2025-09-19 13:22:36,738 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9cd7fa05d163cc07fb96b80c0ffbc94f668205a398234c5e2a1893a7.PubTator"} -2025-09-19 13:25:51,419 - INFO - Connection accepted from ('127.0.0.1', 54398) -2025-09-19 13:25:51,420 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c83d38c65c57058e626a71840da2c4f73a3fac383ba236b1e753b123.PubTator"} -2025-09-19 13:28:55,816 - INFO - Connection accepted from ('127.0.0.1', 39556) -2025-09-19 13:28:55,816 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d42822d25ee8a2ea8c25865b8a0c82015febafeb14e15d7c222afcaa.PubTator"} -2025-09-19 13:31:54,492 - INFO - Connection accepted from ('127.0.0.1', 43590) -2025-09-19 13:31:54,492 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "af2f80599c19e1660aa119e9c8e7ad07861b8c3d919e542718f71500.PubTator"} -2025-09-19 13:34:21,006 - INFO - Connection accepted from ('127.0.0.1', 33034) -2025-09-19 13:34:21,006 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ec1900ecbb4262ec597096316730f4a679df50a20326676303aae02a.PubTator"} -2025-09-19 13:36:47,859 - INFO - Connection accepted from ('127.0.0.1', 55076) -2025-09-19 13:36:47,860 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3208993a0ad8c103429df6b137510f759709d7c7e1f149b83e3300e1.PubTator"} -2025-09-19 13:39:43,232 - INFO - Connection accepted from ('127.0.0.1', 40480) -2025-09-19 13:39:43,232 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "19acd64c9fa261f897bb51c061f2d8b3be89ea9fb0c5938b88f15f81.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-19 15:43:50,070 - INFO - Connection accepted from ('127.0.0.1', 60410) -2025-09-19 15:43:50,070 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7906b66f710bd0249f19d33c238a4315d921d8e1ee015d0299fea3f0.PubTator"} -2025-09-19 15:46:05,248 - INFO - Connection accepted from ('127.0.0.1', 53980) -2025-09-19 15:46:05,248 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5a38376eba124cb90952eb85e96b1b82f89d393aad1d9e4622e582b8.PubTator"} -2025-09-19 15:49:17,672 - INFO - Connection accepted from ('127.0.0.1', 35830) -2025-09-19 15:49:17,672 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "90c4ebd65d71423ae6bfa166cb0e05c49dc87b0deccbef842b31e2b0.PubTator"} -2025-09-19 15:51:43,406 - INFO - Connection accepted from ('127.0.0.1', 34244) -2025-09-19 15:51:43,406 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "318bc8793de48e0e378c0f2fc6d3d13c2f92ecbf37982ff936118749.PubTator"} -2025-09-19 15:54:07,883 - INFO - Connection accepted from ('127.0.0.1', 49726) -2025-09-19 15:54:07,883 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cc0d49dce8d734d20a222175a4a7754e4caac42aec637837fb774fe1.PubTator"} -2025-09-19 15:56:21,654 - INFO - Connection accepted from ('127.0.0.1', 51116) -2025-09-19 15:56:21,654 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "77cf1309f24eccd732e05e11091e3456c1d6327702081b01d3e19995.PubTator"} -2025-09-19 15:58:29,619 - INFO - Connection accepted from ('127.0.0.1', 44930) -2025-09-19 15:58:29,619 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "36364443f39e5cd9f14fedb44e62f095b2cad994fea7868794a409b5.PubTator"} -2025-09-19 16:01:09,107 - INFO - Connection accepted from ('127.0.0.1', 45374) -2025-09-19 16:01:09,108 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4b4eb680d31ddf3bdbe39ec3912fabcf68bd24963b086073d79152c3.PubTator"} -2025-09-19 16:03:58,611 - INFO - Connection accepted from ('127.0.0.1', 32940) -2025-09-19 16:03:58,612 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4439854d0de63973156b18cd112544745353560019b9f3220813054f.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 09:22:27,933 - INFO - Connection accepted from ('127.0.0.1', 48544) -2025-09-20 09:22:27,933 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 09:40:45,180 - INFO - Connection accepted from ('127.0.0.1', 59154) -2025-09-20 09:40:45,180 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5664f237c831964c0dd0a8a1f54a9be8a471c60c5999c74bfe844c33.PubTator"} -2025-09-20 09:44:55,510 - INFO - Connection accepted from ('127.0.0.1', 57416) -2025-09-20 09:44:55,510 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c102291a9efb43013fd47137a4358ebcd0350fd2c999cbc5c46ce081.PubTator"} -2025-09-20 09:48:55,753 - INFO - Connection accepted from ('127.0.0.1', 52552) -2025-09-20 09:48:55,753 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3d879b3015a4b778e7f5d800fe3829e52038c666f76f9ae41ab81ade.PubTator"} -2025-09-20 09:50:50,558 - INFO - Connection accepted from ('127.0.0.1', 53600) -2025-09-20 09:50:50,558 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "305474915b2859ce32c828a2004d1dcdaebe8a397c7af4cb8bf5ea12.PubTator"} -2025-09-20 09:55:11,871 - INFO - Connection accepted from ('127.0.0.1', 53640) -2025-09-20 09:55:11,871 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9b0155136432a6ea20e66720768eaf58f3473f17d17940d3caffce29.PubTator"} -2025-09-20 09:58:11,941 - INFO - Connection accepted from ('127.0.0.1', 45066) -2025-09-20 09:58:11,941 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dcbebaa4e802b6811b24a6a619ced93b98f9edf1a564b2127efc7eef.PubTator"} -2025-09-20 10:01:30,383 - INFO - Connection accepted from ('127.0.0.1', 35050) -2025-09-20 10:01:30,383 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "59439ff29240579aa294f945d63fc56bb060d12f7f04d7537f5ef482.PubTator"} -2025-09-20 10:04:29,576 - INFO - Connection accepted from ('127.0.0.1', 43020) -2025-09-20 10:04:29,577 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "592a9331c9ffbd4311082ccc9b9d6a0380f51733edeb179fea3214da.PubTator"} -2025-09-20 10:07:37,117 - INFO - Connection accepted from ('127.0.0.1', 44554) -2025-09-20 10:07:37,117 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "96386b8c65566b29206e45ae67263210c43221515cbe7953aa82dfd6.PubTator"} -2025-09-20 10:11:16,064 - INFO - Connection accepted from ('127.0.0.1', 56884) -2025-09-20 10:11:16,064 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "15cd22375b4eeeb3ff92fa09996ca5325d5ff0f96de658b5f67f893d.PubTator"} -2025-09-20 10:13:37,910 - INFO - Connection accepted from ('127.0.0.1', 46352) -2025-09-20 10:13:37,910 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "da13bbd5fe4db230644fda2c26a0e82f24a0ff4faf00bba69b0e55ef.PubTator"} -2025-09-20 10:16:30,148 - INFO - Connection accepted from ('127.0.0.1', 60524) -2025-09-20 10:16:30,148 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "71b3f96ba8e8f80c708913d22880886107093dd7402e4e33302e08eb.PubTator"} -2025-09-20 10:20:56,653 - INFO - Connection accepted from ('127.0.0.1', 52540) -2025-09-20 10:20:56,653 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9e7ea7f8d66e0b5452b96b6e1a77f16d31579b793efc7d256dedd5e9.PubTator"} -2025-09-20 10:23:49,794 - INFO - Connection accepted from ('127.0.0.1', 41046) -2025-09-20 10:23:49,794 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "339161045d58c984f3c809ac01f74933004957b64abbedd41eb3c345.PubTator"} -2025-09-20 10:27:34,473 - INFO - Connection accepted from ('127.0.0.1', 34056) -2025-09-20 10:27:34,473 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "232485fb9d82cca08280deeb231064b74018cf004dc845305824faef.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 10:34:54,160 - INFO - Connection accepted from ('127.0.0.1', 56144) -2025-09-20 10:34:54,160 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b98d71393a5d13b634ab712a980e7dce04688253db209c41d3119be3.PubTator"} -2025-09-20 10:40:58,140 - INFO - Connection accepted from ('127.0.0.1', 35492) -2025-09-20 10:40:58,140 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "816e018295d58462ad4058b020920d62cda50569fd8a61449028535e.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 10:46:38,939 - INFO - Connection accepted from ('127.0.0.1', 43300) -2025-09-20 10:46:38,939 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "199bfa66ee289858bb288eb7aa196542cc543b5528d05143fb7b6141.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 10:57:03,220 - INFO - Connection accepted from ('127.0.0.1', 33324) -2025-09-20 10:57:03,220 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d4627bafaffb0215e3d6d8c9de5449b3639d35cbd81583c65b3c7099.PubTator"} -2025-09-20 11:10:58,039 - INFO - Connection accepted from ('127.0.0.1', 50642) -2025-09-20 11:10:58,039 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "717fab74fe9dc657f7b4ffb1c6b33148d3a5dc0673b63805555eb665.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 13:52:58,690 - INFO - Connection accepted from ('127.0.0.1', 46128) -2025-09-20 13:52:58,691 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0daebd7fdc2bd1917650e8ffbd2f77ddcf8365bd7b44807293e8e2bc.PubTator"} -2025-09-20 13:59:04,680 - INFO - Connection accepted from ('127.0.0.1', 58370) -2025-09-20 13:59:04,680 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0aa6cae425b69a43ffb4ce182504187f8fe058d1d824a0db87d8da60.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 19:27:33,287 - INFO - Connection accepted from ('127.0.0.1', 39684) -2025-09-20 19:27:33,287 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c6be8663260e1ef89c8f8babd9cc88aee203e1ccc21efc12a664a17e.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 19:34:13,540 - INFO - Connection accepted from ('127.0.0.1', 48598) -2025-09-20 19:34:13,540 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8c735abb49a84cdc27e493aa0a1de4668468f0360b38163f6cce10e9.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 19:40:18,661 - INFO - Connection accepted from ('127.0.0.1', 41122) -2025-09-20 19:40:18,662 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6fe003eeeb7fffe1cad629a6fd301c8a3f0fc72ccb9d80ac91c321b5.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 19:42:05,920 - INFO - Connection accepted from ('127.0.0.1', 50350) -2025-09-20 19:42:05,920 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f986602ae4eae69125005e80d6cfd57ee0aa5e49b7546f305bd43d0f.PubTator"} -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 11, in - from gliner import GLiNER -ModuleNotFoundError: No module named 'gliner' - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-20 19:52:50,539 - INFO - Connection accepted from ('127.0.0.1', 44068) -2025-09-20 19:52:50,540 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ccf3fe74cbf3412eac68934089e74cfed41393a1d73a16a2c7b9b563.PubTator"} -2025-09-20 19:58:05,149 - INFO - Connection accepted from ('127.0.0.1', 33012) -2025-09-20 19:58:05,150 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "364846871a1bfc47c37ef0668bfdcedd4051a92d8605473707d5dea4.PubTator"} -2025-09-20 20:01:45,490 - INFO - Connection accepted from ('127.0.0.1', 38822) -2025-09-20 20:01:45,491 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5526e0ea6b75a03edb15c77612c552c010ae4ac39b2f517c79314bf3.PubTator"} -2025-09-20 20:09:36,481 - INFO - Connection accepted from ('127.0.0.1', 39248) -2025-09-20 20:09:36,481 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "414a706897e2271ce0fc7402ffa424524ea74f836be8370fa2f2de53.PubTator"} -2025-09-20 20:15:59,729 - INFO - Connection accepted from ('127.0.0.1', 54476) -2025-09-20 20:15:59,729 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d6e2c59d0a00ca9c0ce5573ba382ed3ff4eb2b181ac52895f5e5d050.PubTator"} -2025-09-20 20:19:57,921 - INFO - Connection accepted from ('127.0.0.1', 51110) -2025-09-20 20:19:57,921 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f18ed1cea6745bcd04a51701e33f2a35a3fad218084e6c44d18caf1f.PubTator"} -2025-09-20 20:25:14,149 - INFO - Connection accepted from ('127.0.0.1', 59440) -2025-09-20 20:25:14,150 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "48f4afda33e3a0dba0b51e8f6294e7802eabddfcec1fe83dc10c46ef.PubTator"} -2025-09-20 20:31:30,940 - INFO - Connection accepted from ('127.0.0.1', 53038) -2025-09-20 20:31:30,940 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c12699693e0dd97c1c5eff3691b27cd5118208103c687fbf4c7a68cf.PubTator"} -2025-09-20 20:36:13,225 - INFO - Connection accepted from ('127.0.0.1', 60828) -2025-09-20 20:36:13,225 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3ea82e6b6dccf3779203d6b703b7d4883f0d8a1e0501142355c0b38c.PubTator"} -2025-09-20 20:42:21,090 - INFO - Connection accepted from ('127.0.0.1', 47968) -2025-09-20 20:42:21,090 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a964cd175dac4e06700e88066ac00e70d50c40df1878990b057d563f.PubTator"} -2025-09-20 20:48:51,044 - INFO - Connection accepted from ('127.0.0.1', 37378) -2025-09-20 20:48:51,044 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1b95ac7132602fc3e0c5b96e3d3cda3273992835489148e18020ffa7.PubTator"} -2025-09-20 20:53:36,344 - INFO - Connection accepted from ('127.0.0.1', 43014) -2025-09-20 20:53:36,344 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dcd6169502e10362c1c1010cec7f252738ec760514552f3b6649ef1a.PubTator"} -2025-09-20 20:58:19,028 - INFO - Connection accepted from ('127.0.0.1', 58452) -2025-09-20 20:58:19,028 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b647426d42c8dcb49ce726d70a3870dc7660632b034165ee92395386.PubTator"} -2025-09-20 21:02:24,195 - INFO - Connection accepted from ('127.0.0.1', 58742) -2025-09-20 21:02:24,196 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c9806fad79b8ea9f2a61cd9abf63c318c4864935b5f1367bf1f06b3d.PubTator"} -2025-09-20 21:08:27,474 - INFO - Connection accepted from ('127.0.0.1', 49180) -2025-09-20 21:08:27,474 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "99f37ba35f157d8da36d84673a5897fce2fbfaaee81d6e344b4e027f.PubTator"} -2025-09-20 21:13:21,501 - INFO - Connection accepted from ('127.0.0.1', 56684) -2025-09-20 21:13:21,502 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "db62c74dff398a892a67bcd133e368604da615792094fdb3fbf6b93a.PubTator"} -2025-09-20 21:19:12,713 - INFO - Connection accepted from ('127.0.0.1', 43024) -2025-09-20 21:19:12,713 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "44da7d4b752dac584317e7a454d3ca6e9662793e6a722addbb7701fb.PubTator"} -2025-09-20 21:23:58,245 - INFO - Connection accepted from ('127.0.0.1', 51764) -2025-09-20 21:23:58,246 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dca7aea6473dcdddbb60cea66c7b58be97882a9e64a9863b43084ba2.PubTator"} -2025-09-20 21:28:16,499 - INFO - Connection accepted from ('127.0.0.1', 34168) -2025-09-20 21:28:16,500 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6248af82794d424bec6b9f64f960431a4de0a76b6dc4e0815e613cb5.PubTator"} -2025-09-20 21:32:05,127 - INFO - Connection accepted from ('127.0.0.1', 41326) -2025-09-20 21:32:05,127 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6cec604f57b112c02ddc4425e2d8ce899f6b0d47181b05e7f41ed403.PubTator"} -2025-09-20 21:37:11,603 - INFO - Connection accepted from ('127.0.0.1', 51970) -2025-09-20 21:37:11,603 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9a57928bc1f6300f27f21a99ff9d04340191533bf0eedb85aa9699a6.PubTator"} -2025-09-20 21:40:29,485 - INFO - Connection accepted from ('127.0.0.1', 40074) -2025-09-20 21:40:29,485 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "97594acaabc0e717744ce5533a66132d675227c616580a08e1823144.PubTator"} -2025-09-20 21:46:18,775 - INFO - Connection accepted from ('127.0.0.1', 54694) -2025-09-20 21:46:18,775 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "057d34521cf4521ea9a86cf47dfa2313dc1bf94f9421e0ad5b305836.PubTator"} -2025-09-20 21:51:43,245 - INFO - Connection accepted from ('127.0.0.1', 54366) -2025-09-20 21:51:43,245 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ca3465210e4b9ff5a7e837e7f37c8d3e2d57e6cb1d8382f58e94c5f0.PubTator"} -2025-09-20 21:59:24,068 - INFO - Connection accepted from ('127.0.0.1', 40282) -2025-09-20 21:59:24,068 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "053ef3afacc077adb727f73eff6472652d88b18084391d46cdf5e355.PubTator"} -2025-09-20 22:02:32,779 - INFO - Connection accepted from ('127.0.0.1', 59132) -2025-09-20 22:02:32,779 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "47dda50da12e378d0215d88d46534fed7c941f2372b66fa9b9f42ec6.PubTator"} -2025-09-20 22:14:17,329 - INFO - Connection accepted from ('127.0.0.1', 33496) -2025-09-20 22:14:17,329 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "17721d7cd3b352cef603c5cbf367cc012caeb03fb9209cb9df09fa5b.PubTator"} -2025-09-20 22:19:30,572 - INFO - Connection accepted from ('127.0.0.1', 52440) -2025-09-20 22:19:30,572 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dcfc294e7eeaeaaca63459a31a54eb18ef80592da6c2f3da68c8e627.PubTator"} -2025-09-20 22:26:09,964 - INFO - Connection accepted from ('127.0.0.1', 60346) -2025-09-20 22:26:09,965 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "19b92d2279c74f644a73f890d679b6b6dde5826d8a79e0ad7f11b317.PubTator"} -2025-09-20 22:31:41,162 - INFO - Connection accepted from ('127.0.0.1', 39708) -2025-09-20 22:31:41,162 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c6a55f186900420e5b87229d7c70f0b7c16ac7de7ed20fc5bd30cceb.PubTator"} -2025-09-20 22:36:26,378 - INFO - Connection accepted from ('127.0.0.1', 60728) -2025-09-20 22:36:26,378 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "549debc385d0613e6bbee78178f81d9050199c694ad902d76b80f0c5.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-22 09:20:28,942 - INFO - Connection accepted from ('127.0.0.1', 52580) -2025-09-22 09:20:28,942 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a3085b94d5613f1b07a209e1b219453c9711502c21e341272f34e306.PubTator"} -2025-09-22 09:24:36,681 - INFO - Connection accepted from ('127.0.0.1', 37944) -2025-09-22 09:24:36,682 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "98f03a2ebaea961d9fcbef05edf45776187801124de4d26fa6d7601b.PubTator"} -2025-09-22 09:29:06,838 - INFO - Connection accepted from ('127.0.0.1', 56058) -2025-09-22 09:29:06,839 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3c20df9d45a6a4dfdba22b57999c1ce6e8cd640a33392f43f89907d7.PubTator"} -2025-09-22 09:34:47,530 - INFO - Connection accepted from ('127.0.0.1', 54368) -2025-09-22 09:34:47,530 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "697d6cfef55297954433d686aa973938cd9d6bbe962d91a054ca026f.PubTator"} -2025-09-22 09:39:33,214 - INFO - Connection accepted from ('127.0.0.1', 45798) -2025-09-22 09:39:33,215 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d13dc8f2c5df5c29826479db64314b2ec153ff42817f87535872e8c6.PubTator"} -2025-09-22 09:44:48,860 - INFO - Connection accepted from ('127.0.0.1', 33874) -2025-09-22 09:44:48,860 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4c69017b22f199bbcc4c8652d61609fdbc2b616ed424ea21f4a5dfc4.PubTator"} -2025-09-22 09:50:04,875 - INFO - Connection accepted from ('127.0.0.1', 56048) -2025-09-22 09:50:04,876 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d192c6f786324a1b5860bfaaf62de5c26487c7434e65a4b4a4861c32.PubTator"} -2025-09-22 09:56:43,492 - INFO - Connection accepted from ('127.0.0.1', 54250) -2025-09-22 09:56:43,492 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c90ceb346679da90befb23e2e1bdaea6bb8c294d3b5108e56337e5ab.PubTator"} -2025-09-22 10:00:51,263 - INFO - Connection accepted from ('127.0.0.1', 60082) -2025-09-22 10:00:51,263 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ff37f44607a04fadbd76c41201c8641c21f662349590ef517cbd7630.PubTator"} -2025-09-22 10:05:38,620 - INFO - Connection accepted from ('127.0.0.1', 42238) -2025-09-22 10:05:38,620 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7106e927ebd56e43712f3d837a1bd02f2282ef07a6dc07fa60522ea9.PubTator"} -2025-09-22 10:09:17,825 - INFO - Connection accepted from ('127.0.0.1', 56758) -2025-09-22 10:09:17,825 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ee53242f93025b923ccb1a8a5d45d2c46a9c323dccac86dc1446a8fb.PubTator"} -2025-09-22 10:12:05,708 - INFO - Connection accepted from ('127.0.0.1', 42806) -2025-09-22 10:12:05,709 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5adc68b4ceb390219c10852b40bbae07358ded0fb0393a9a23d51df4.PubTator"} -2025-09-22 10:16:20,749 - INFO - Connection accepted from ('127.0.0.1', 51350) -2025-09-22 10:16:20,749 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "321554cb35627a265140a67977c105cf4bf95989f2b39002f80b7d09.PubTator"} -2025-09-22 10:20:44,417 - INFO - Connection accepted from ('127.0.0.1', 45332) -2025-09-22 10:20:44,417 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ee26873dc0dd8eb531884dfaafaa5c33f9cc18359a9ef8e9c9bd585e.PubTator"} -2025-09-22 10:25:40,901 - INFO - Connection accepted from ('127.0.0.1', 55182) -2025-09-22 10:25:40,901 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1ddf3cd26852eb961f7b983b5f5cc330bf3396ef5f771ab80804ec2d.PubTator"} -2025-09-22 10:29:52,177 - INFO - Connection accepted from ('127.0.0.1', 42714) -2025-09-22 10:29:52,177 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "420c08dfddbc9341c660761dd3cb935d66abf03c849f59a17a1b2f00.PubTator"} -2025-09-22 10:33:37,681 - INFO - Connection accepted from ('127.0.0.1', 45292) -2025-09-22 10:33:37,681 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9584b2b865f419ee57238a86e48eeca73e5ab46c71488c13457d0826.PubTator"} -2025-09-22 10:37:58,748 - INFO - Connection accepted from ('127.0.0.1', 39200) -2025-09-22 10:37:58,748 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7c3013bef8cc4fbd4735f380a1e487adc887a0427e4d2c6a103b68a7.PubTator"} -2025-09-22 10:43:49,017 - INFO - Connection accepted from ('127.0.0.1', 53898) -2025-09-22 10:43:49,017 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "96cd8c79dd63c0deaf209db0ee8a091dc1ead54c5ccf9dd0ebc999e8.PubTator"} -2025-09-22 10:47:49,848 - INFO - Connection accepted from ('127.0.0.1', 39040) -2025-09-22 10:47:49,848 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9339881e9900411c4d873f6213abaeb4d92f832d9b8b767da148510e.PubTator"} -2025-09-22 10:51:08,478 - INFO - Connection accepted from ('127.0.0.1', 55034) -2025-09-22 10:51:08,479 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f28f4e6b624cb1cd666502ce54a13b6b8c2af5db39720d67ca87b1ed.PubTator"} -2025-09-22 10:56:47,739 - INFO - Connection accepted from ('127.0.0.1', 41026) -2025-09-22 10:56:47,740 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b43c8a02ed8b79429e379c3255b54f18a2c085afb949fce8eb29ab6e.PubTator"} -2025-09-22 11:01:20,517 - INFO - Connection accepted from ('127.0.0.1', 45690) -2025-09-22 11:01:20,517 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9b343a7d92f283d22032480ea0246ac6abb3ddccc40fdbc2a11e382f.PubTator"} -2025-09-22 11:05:10,756 - INFO - Connection accepted from ('127.0.0.1', 34796) -2025-09-22 11:05:10,756 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "54c134353fcb4d9a8f8f9baaa910adc1a61a64a187d7583bbaee65a6.PubTator"} -2025-09-22 11:08:53,992 - INFO - Connection accepted from ('127.0.0.1', 51348) -2025-09-22 11:08:53,992 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7c6668670f0e2a52c95b822c1f3355e1bddd7a9606a1eee366a4079c.PubTator"} -2025-09-22 11:12:18,412 - INFO - Connection accepted from ('127.0.0.1', 55478) -2025-09-22 11:12:18,412 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a6ceb599a8e4915c9e3a7175f3232c9414c7a97b824fa0723869c195.PubTator"} -2025-09-22 11:16:40,869 - INFO - Connection accepted from ('127.0.0.1', 43398) -2025-09-22 11:16:40,869 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "12aad532e1cf987ab12a9fe725460d313ab50565f21fe3d89fbb6206.PubTator"} -2025-09-22 11:21:40,369 - INFO - Connection accepted from ('127.0.0.1', 35106) -2025-09-22 11:21:40,369 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5f9ea548ac21a5f04cd59501d0d4b9aac07d1c46202ce9142ac13336.PubTator"} -2025-09-22 11:28:37,776 - INFO - Connection accepted from ('127.0.0.1', 53346) -2025-09-22 11:28:37,776 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3c082197a7e688d2b89b66848630377920a88c43ba504abd0d9c12a0.PubTator"} -2025-09-22 11:33:46,360 - INFO - Connection accepted from ('127.0.0.1', 56888) -2025-09-22 11:33:46,361 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b82c53d9860ebeea96151558905da443b0169fd5883cabc6c97f1846.PubTator"} -2025-09-22 11:38:22,405 - INFO - Connection accepted from ('127.0.0.1', 49108) -2025-09-22 11:38:22,405 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fe46196692846700425810e6484da8fcaf8d9b79a5ddba8354bb5554.PubTator"} -2025-09-22 11:43:30,373 - INFO - Connection accepted from ('127.0.0.1', 38366) -2025-09-22 11:43:30,373 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a410c29544a8877e5a456e02c65defd03c1bd147e9a2e52a8db5d4ff.PubTator"} -2025-09-22 11:48:36,869 - INFO - Connection accepted from ('127.0.0.1', 40500) -2025-09-22 11:48:36,869 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5e0eb7159e765aa47cc95222edfb8976b684f39515d3f15a5e43ce6a.PubTator"} -2025-09-22 11:54:14,531 - INFO - Connection accepted from ('127.0.0.1', 36608) -2025-09-22 11:54:14,531 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9a4ba134329e77454bbc25ca29fd15a12f60753b0086f68008549ac7.PubTator"} -2025-09-22 11:59:11,473 - INFO - Connection accepted from ('127.0.0.1', 60910) -2025-09-22 11:59:11,473 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "392b09925e68cea7f78d966da6747b9ba21f9e484e48037726fb2444.PubTator"} -2025-09-22 12:04:27,846 - INFO - Connection accepted from ('127.0.0.1', 36282) -2025-09-22 12:04:27,846 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c1731d1091f67dbee9a845c6cfd0e6ec6392963399dd3dc2995615e6.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-22 14:49:00,940 - INFO - Connection accepted from ('127.0.0.1', 56034) -2025-09-22 14:49:00,940 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "719c67ddef08cc31bbf0b3bd360e1c9f066f9308da92a758b3e84997.PubTator"} -2025-09-22 14:54:43,076 - INFO - Connection accepted from ('127.0.0.1', 52550) -2025-09-22 14:54:43,077 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4736a25cc7c80645c89f5895d8eef71d041bc6463b134a00db25c734.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-22 16:53:07,480 - INFO - Connection accepted from ('127.0.0.1', 48032) -2025-09-22 16:53:07,480 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3eb0b5c5d703a4382fa2ce8d7fe9750dcc75089bb97e39846de22f95.PubTator"} -2025-09-22 16:58:49,569 - INFO - Connection accepted from ('127.0.0.1', 48716) -2025-09-22 16:58:49,569 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b741dc7664d78bfa07ef4acbc16353fdc4f49444d0c46dbfe9e60011.PubTator"} -2025-09-22 17:03:32,185 - INFO - Connection accepted from ('127.0.0.1', 41474) -2025-09-22 17:03:32,185 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4c6b1ed6d40419a6777a1c09dda6604a8bd7f673f133372ea385ae1f.PubTator"} -2025-09-22 17:07:04,908 - INFO - Connection accepted from ('127.0.0.1', 42392) -2025-09-22 17:07:04,908 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e75f16effdc8c5e103b7da0da10a521d7c07a1a2f95ac538e947d659.PubTator"} -2025-09-22 17:13:13,655 - INFO - Connection accepted from ('127.0.0.1', 40486) -2025-09-22 17:13:13,655 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a23ec63602fc8a0bceca6220510f79a2cc398a3f14c2654c3f503089.PubTator"} -2025-09-22 17:18:59,342 - INFO - Connection accepted from ('127.0.0.1', 38378) -2025-09-22 17:18:59,343 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "937d97047cb7e15e5513fb28e213bc24a40bba42b5f2e3cb9229ab60.PubTator"} -2025-09-22 17:22:47,576 - INFO - Connection accepted from ('127.0.0.1', 60202) -2025-09-22 17:22:47,576 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a13176ec332a2f02b7843c7763a8caec477b76c3ec000e98fa4e0e1e.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-23 09:03:15,683 - INFO - Connection accepted from ('127.0.0.1', 53954) -2025-09-23 09:03:15,683 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "327c9dd938596b405c137d4ea57679fc7c484514e1e57d9102b29c2f.PubTator"} -2025-09-23 09:09:01,754 - INFO - Connection accepted from ('127.0.0.1', 47288) -2025-09-23 09:09:01,755 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d5b1c64ccfd55e02594d3053e0d083ce142e3f039d5f6c0845f65c35.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-23 09:25:10,249 - INFO - Connection accepted from ('127.0.0.1', 54668) -2025-09-23 09:25:10,249 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bca13b1a769f13befae32f00955a8c1b7214e01a06ae51c8a4ca2900.PubTator"} -2025-09-23 09:30:34,087 - INFO - Connection accepted from ('127.0.0.1', 60922) -2025-09-23 09:30:34,088 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "80c311dd450f146257afafaf4170756321ec90c748c8431599c2d7cd.PubTator"} -2025-09-23 09:34:17,087 - INFO - Connection accepted from ('127.0.0.1', 54236) -2025-09-23 09:34:17,087 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c9e7f4025719c7513636dc5769e66d1bcc4f3467f8cf6882affa4e5f.PubTator"} -2025-09-23 09:40:36,919 - INFO - Connection accepted from ('127.0.0.1', 48920) -2025-09-23 09:40:36,919 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0e27188b3c7854f411fd03db6d93593fcce49d37b39c91478db74d7c.PubTator"} -2025-09-23 09:46:36,947 - INFO - Connection accepted from ('127.0.0.1', 41316) -2025-09-23 09:46:36,947 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "43d3288c465eace42f8d2e821bfa62fade9140655e2e3fdc352abaaf.PubTator"} -2025-09-23 09:50:24,515 - INFO - Connection accepted from ('127.0.0.1', 35960) -2025-09-23 09:50:24,516 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ae35bffac3b726e5d6d0066093df0313d9c293c293856eb28e315b7a.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-24 10:06:29,881 - INFO - Connection accepted from ('127.0.0.1', 41096) -2025-09-24 10:06:29,881 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1420ef0a237c759a2739c98c4bf4aa2f0660f479eafe10c6fd4f8922.PubTator"} -2025-09-24 10:10:38,671 - INFO - Connection accepted from ('127.0.0.1', 38974) -2025-09-24 10:10:38,671 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fd94a48ff9d719c02bd3c37565a4a35cdbac18256382cad66884324c.PubTator"} -2025-09-24 10:14:13,418 - INFO - Connection accepted from ('127.0.0.1', 37396) -2025-09-24 10:14:13,418 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "70c43f9636cb7b0c2e58e38c3352e696cbc1ea5f9f8ec26a1f9e7cdb.PubTator"} -2025-09-24 10:17:12,834 - INFO - Connection accepted from ('127.0.0.1', 48140) -2025-09-24 10:17:12,834 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ff5ec87c3a0f7295127c0b50e4dcd9412579a880e4901f25466824f0.PubTator"} -2025-09-24 10:21:35,380 - INFO - Connection accepted from ('127.0.0.1', 50230) -2025-09-24 10:21:35,381 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "e0bcdc9db6eafd0fb63c18bb2e0208b7869244d7bc6fb827427682a3.PubTator"} -2025-09-24 10:25:23,540 - INFO - Connection accepted from ('127.0.0.1', 35618) -2025-09-24 10:25:23,540 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "acfe4a2c63aa4a123f49e102bce54b28e7305d93846cf924a062757c.PubTator"} -2025-09-24 10:28:14,424 - INFO - Connection accepted from ('127.0.0.1', 55204) -2025-09-24 10:28:14,424 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bbb4678f5ba7c996d3113d5f581a0813c1800dff0e08cfb7cc473abe.PubTator"} -2025-09-24 10:31:16,207 - INFO - Connection accepted from ('127.0.0.1', 58404) -2025-09-24 10:31:16,207 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b6d1ac149f65608356b5feaad1090070c97047fd395854ee9a121e65.PubTator"} -2025-09-24 10:35:50,053 - INFO - Connection accepted from ('127.0.0.1', 53486) -2025-09-24 10:35:50,053 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ca19d75bcbcec421beee662261485eac8849c9f724e5aecbb3c1a4bc.PubTator"} -2025-09-24 10:39:03,321 - INFO - Connection accepted from ('127.0.0.1', 42772) -2025-09-24 10:39:03,321 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8026ffd52bab97cfc1a296544e009e8dd8695f24add18b6159d20a77.PubTator"} -2025-09-25 10:17:40,685 - INFO - Connection accepted from ('127.0.0.1', 55844) -2025-09-25 10:17:40,685 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-25 10:18:57,323 - INFO - Connection accepted from ('127.0.0.1', 42184) -2025-09-25 10:18:57,323 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "eb19953861f5b6f6d1aa4f357f2ca273518d81d4dc6d1b4434e2feb6.PubTator"} -2025-09-25 10:23:04,686 - INFO - Connection accepted from ('127.0.0.1', 57342) -2025-09-25 10:23:04,686 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cadb18b4259610e726ae682e4f7fe3a922aa2780c1ad27b9160fdd59.PubTator"} -2025-09-25 10:26:38,724 - INFO - Connection accepted from ('127.0.0.1', 56370) -2025-09-25 10:26:38,724 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c81d864090193109077d92ebb48e7f88d1fef10d830ed1cad0c3fdf6.PubTator"} -2025-09-25 10:29:45,272 - INFO - Connection accepted from ('127.0.0.1', 47858) -2025-09-25 10:29:45,272 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3f2af23f1531322bde91a95bfc32fcaf813c56cad6fe23fcae807c62.PubTator"} -2025-09-25 10:33:33,070 - INFO - Connection accepted from ('127.0.0.1', 40060) -2025-09-25 10:33:33,070 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8085539581cafb29416e026946930ff1d0e87d625d12ead1c682e40b.PubTator"} -2025-09-25 10:37:13,698 - INFO - Connection accepted from ('127.0.0.1', 43114) -2025-09-25 10:37:13,698 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a08afbaa186c08be34702f0eec1e79b67130325a7c98869e44405715.PubTator"} -2025-09-25 10:40:02,128 - INFO - Connection accepted from ('127.0.0.1', 34722) -2025-09-25 10:40:02,128 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "baa7796c33bcdb35ccac6e2e2a90018e23e817f798357d01021a4815.PubTator"} -2025-09-25 10:42:51,153 - INFO - Connection accepted from ('127.0.0.1', 60626) -2025-09-25 10:42:51,154 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d529ee87ef1deb4b563867af119c31d025df2f5c0620daeb8b6507b2.PubTator"} -2025-09-25 10:47:36,559 - INFO - Connection accepted from ('127.0.0.1', 52324) -2025-09-25 10:47:36,559 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d0ab29c312375239293c2090efa54ef0a97ef0f4da46b547f3b0965f.PubTator"} -2025-09-25 10:50:45,598 - INFO - Connection accepted from ('127.0.0.1', 53764) -2025-09-25 10:50:45,598 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "91da54bc3dffa2c4a75bb100ede5515c4a8054907228d6b99a3545bc.PubTator"} -2025-09-25 10:54:07,523 - INFO - Connection accepted from ('127.0.0.1', 57774) -2025-09-25 10:54:07,523 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8d85d7de379640b3b1a8781f94586ff546c113f47eee3877461d2110.PubTator"} -2025-09-25 10:58:40,455 - INFO - Connection accepted from ('127.0.0.1', 53066) -2025-09-25 10:58:40,456 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "674ba3a99dcc2dac46c7adac623d6860156e8e7d561a0046b5acdaa6.PubTator"} -2025-09-25 11:02:15,851 - INFO - Connection accepted from ('127.0.0.1', 35836) -2025-09-25 11:02:15,851 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9474dd20ece3e1487b32e0df6dff380479753e0ebea06e392d082f75.PubTator"} -2025-09-25 11:05:44,861 - INFO - Connection accepted from ('127.0.0.1', 36280) -2025-09-25 11:05:44,861 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "26a00d62b705fb245b3596bc0ce6d4e3c497151032ab313de2863823.PubTator"} -2025-09-25 11:09:02,158 - INFO - Connection accepted from ('127.0.0.1', 35212) -2025-09-25 11:09:02,158 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "758ef39cc60138c66288e7850d8f7c74422bcf2b5df8ef708fa057ef.PubTator"} -2025-09-25 11:13:44,056 - INFO - Connection accepted from ('127.0.0.1', 42572) -2025-09-25 11:13:44,057 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "27a9d917884cad0159eacbba51169ff8cf37e7d7358a50ed3613a0ea.PubTator"} -2025-09-25 11:17:11,708 - INFO - Connection accepted from ('127.0.0.1', 33202) -2025-09-25 11:17:11,708 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6bdb0453de11f13741830b2b80b65cf69f26c5554dc27424488631dc.PubTator"} -2025-09-25 11:21:09,664 - INFO - Connection accepted from ('127.0.0.1', 34608) -2025-09-25 11:21:09,664 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d715f13c5b10f1a7bfb758dd9e911df816ab683560d63a7a3eac30f6.PubTator"} -2025-09-25 11:24:46,125 - INFO - Connection accepted from ('127.0.0.1', 49528) -2025-09-25 11:24:46,125 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a5e505dc0c39f4440971ca79009792fe6319596174edcc8e9caf0b8b.PubTator"} -2025-09-25 11:27:10,121 - INFO - Connection accepted from ('127.0.0.1', 42020) -2025-09-25 11:27:10,121 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "648007db092fb23d67c1eea3f95328cd25af752dea6b22ae6f18bfe0.PubTator"} -2025-09-25 11:29:14,744 - INFO - Connection accepted from ('127.0.0.1', 43538) -2025-09-25 11:29:14,744 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "afe00e9a65cdb73d1b9ffb9c911b0868785457ccc8e4025f38cfd913.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-25 11:32:00,080 - INFO - Connection accepted from ('127.0.0.1', 54586) -2025-09-25 11:32:00,080 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b610acc53bb3e20eab35d52629cd4ede3a3d60eff2ea196d83059fa8.PubTator"} -2025-09-25 11:33:44,776 - INFO - Connection accepted from ('127.0.0.1', 42374) -2025-09-25 11:33:44,776 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cb63f2131b5b858a1a575c30fa9248be301f46d14e9bc5fb8ba027fd.PubTator"} -2025-09-25 11:35:53,418 - INFO - Connection accepted from ('127.0.0.1', 53348) -2025-09-25 11:35:53,419 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c7b85706f55829e90abe9abebdd0fe59d65ac4f71bf8e1be44060905.PubTator"} -2025-09-25 11:39:39,197 - INFO - Connection accepted from ('127.0.0.1', 54242) -2025-09-25 11:39:39,197 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cdb006c53853e7ad66fbf3dcd1c10d199de009050ce1b039d7982697.PubTator"} -2025-09-25 11:43:11,230 - INFO - Connection accepted from ('127.0.0.1', 54512) -2025-09-25 11:43:11,231 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1028ef1ed1109621c194239b1cd9930726de5f7054fc008e699894c1.PubTator"} -2025-09-25 11:48:42,009 - INFO - Connection accepted from ('127.0.0.1', 57772) -2025-09-25 11:48:42,009 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d0533299c877cc0db3a726c046a7b9c0077737a90779c5e9ca9c4cc5.PubTator"} -2025-09-25 11:50:20,539 - INFO - Connection accepted from ('127.0.0.1', 42240) -2025-09-25 11:50:20,539 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7f855d3f4f3f78c1087fbfd0c7a2a3954404ed2d0a084b076b532d89.PubTator"} -2025-09-25 11:53:53,503 - INFO - Connection accepted from ('127.0.0.1', 37172) -2025-09-25 11:53:53,503 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b1bdb26a089df24cbf20c47719c4426c15be0a49f727e37f7fc6b4e5.PubTator"} -2025-09-25 11:57:09,920 - INFO - Connection accepted from ('127.0.0.1', 43208) -2025-09-25 11:57:09,920 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7461561dab8deef3d9aab5ba7c45f803c92b3bcb51d4b48e4da39c77.PubTator"} -2025-09-25 12:00:47,369 - INFO - Connection accepted from ('127.0.0.1', 41596) -2025-09-25 12:00:47,369 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2927384d80663bb86c9096bc589f1d45289f9ffac6daa434be0c2092.PubTator"} -2025-09-25 12:05:11,793 - INFO - Connection accepted from ('127.0.0.1', 50886) -2025-09-25 12:05:11,794 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "66f4b8c961bef8b9773e57dfc7abf0cdb6ec9a70430f2ca91f43d4c2.PubTator"} -2025-09-25 12:08:12,017 - INFO - Connection accepted from ('127.0.0.1', 35042) -2025-09-25 12:08:12,017 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "836b38ce9f14af52d2810a986bd46bdcc23be119ab117c27c7bcf943.PubTator"} -2025-09-25 12:10:33,106 - INFO - Connection accepted from ('127.0.0.1', 50948) -2025-09-25 12:10:33,106 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0281529e4fd29553bf6e971da91304d8a9f404ec41aa5e5abdc85640.PubTator"} -2025-09-25 12:13:38,240 - INFO - Connection accepted from ('127.0.0.1', 33836) -2025-09-25 12:13:38,241 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "80fe0918ed787d678c381f108936617276a3f0c7d84263966791962f.PubTator"} -2025-09-25 12:17:01,734 - INFO - Connection accepted from ('127.0.0.1', 34914) -2025-09-25 12:17:01,734 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "11df6b5b12744da37f20133d14c56c50954ad7d4979be356771843c7.PubTator"} -2025-09-25 12:19:13,090 - INFO - Connection accepted from ('127.0.0.1', 54020) -2025-09-25 12:19:13,090 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7e12000e716c7388d82bf510877edfa4053b7788c69b14c0d8d59d6f.PubTator"} -2025-09-25 12:22:33,249 - INFO - Connection accepted from ('127.0.0.1', 33398) -2025-09-25 12:22:33,249 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cf527edae4f230e16cc609598128c4d40e2cbb0f5dfcaf2b92c60acb.PubTator"} -2025-09-25 12:26:08,333 - INFO - Connection accepted from ('127.0.0.1', 41968) -2025-09-25 12:26:08,333 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9c886f5efd40493a9237aaeae50158cc686c36a179299b30d2fab21a.PubTator"} -2025-09-25 12:28:54,554 - INFO - Connection accepted from ('127.0.0.1', 37230) -2025-09-25 12:28:54,555 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "37ca0bfe8b236abd0738ddd73c7e1b471ca218809103c917e12b6a9c.PubTator"} -2025-09-25 12:31:56,942 - INFO - Connection accepted from ('127.0.0.1', 37828) -2025-09-25 12:31:56,942 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a8cc98b8d9f662efe9a460c2a8a69a49ce11621bc8e07c6dc8c137c3.PubTator"} -2025-09-25 12:35:16,845 - INFO - Connection accepted from ('127.0.0.1', 52602) -2025-09-25 12:35:16,846 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "99a52718b2b70e3baf3599c97342e8765d38c120d05b5c2b42899c80.PubTator"} -2025-09-25 12:38:05,113 - INFO - Connection accepted from ('127.0.0.1', 46406) -2025-09-25 12:38:05,113 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1e9f90f8eb4f4a77b33093fe2e93874f25cd1941fcadb9b8d0338a5e.PubTator"} -2025-09-25 12:40:25,174 - INFO - Connection accepted from ('127.0.0.1', 54352) -2025-09-25 12:40:25,174 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dc812159259aa6f682f667ad8eca95ae51eb6aabae205db2a3d06c0f.PubTator"} -2025-09-25 12:42:35,135 - INFO - Connection accepted from ('127.0.0.1', 42698) -2025-09-25 12:42:35,136 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "16c5e5d3ca95387e9b4f0e059ee2cd24d0041ccb4f8876426d4d312e.PubTator"} -2025-09-25 12:44:09,624 - INFO - Connection accepted from ('127.0.0.1', 34158) -2025-09-25 12:44:09,624 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0a22a91d43dab42b3d700708248a0603349e48ee53236848b7584930.PubTator"} -2025-09-25 12:47:05,316 - INFO - Connection accepted from ('127.0.0.1', 47118) -2025-09-25 12:47:05,316 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "97fa148e788eb2e0467c7205d067fa250aa7654af359b322015c7555.PubTator"} -2025-09-25 12:50:13,862 - INFO - Connection accepted from ('127.0.0.1', 56304) -2025-09-25 12:50:13,862 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d93e4c6c35f22d46f426a6b77cf102987b0312d0a3fb44fdb7d3f429.PubTator"} -2025-09-25 12:53:50,758 - INFO - Connection accepted from ('127.0.0.1', 38680) -2025-09-25 12:53:50,759 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "63ca51a7d34213e26976081c922792475eb0abf7382735703b097e59.PubTator"} -2025-09-25 12:56:43,267 - INFO - Connection accepted from ('127.0.0.1', 37816) -2025-09-25 12:56:43,267 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bfa8808dfc82d3e5c0c240a50a7034b4e7be1998e1a5ea3cfc0af237.PubTator"} -2025-09-25 12:58:33,290 - INFO - Connection accepted from ('127.0.0.1', 60584) -2025-09-25 12:58:33,291 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ac245204cda743653e71c16aedddca12d65369b7d9660d3ea594ebc4.PubTator"} -2025-09-25 13:01:50,494 - INFO - Connection accepted from ('127.0.0.1', 54940) -2025-09-25 13:01:50,494 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b767578bec59163524f54d8e757d5443b1ff13d4a97215bd3bc5efec.PubTator"} -2025-09-25 13:04:56,372 - INFO - Connection accepted from ('127.0.0.1', 58004) -2025-09-25 13:04:56,372 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f78416eb33cd0fb83a8fc4ade26ae6d729c265c99eaf15027a27dcbb.PubTator"} -2025-09-25 13:07:37,413 - INFO - Connection accepted from ('127.0.0.1', 36550) -2025-09-25 13:07:37,414 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cf541e246f95268ecea83ba1df38aa4140141eec06596da2703e0760.PubTator"} -2025-09-25 13:09:22,152 - INFO - Connection accepted from ('127.0.0.1', 40436) -2025-09-25 13:09:22,152 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0c88d1e3422f6a3de274e0e54eda8a9e5ee9de18acd855dbe7b4c609.PubTator"} -2025-09-25 13:12:55,866 - INFO - Connection accepted from ('127.0.0.1', 59008) -2025-09-25 13:12:55,866 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "693631ad5e84c355cc744ec8870c9ad63b77c25b2560a026403f8242.PubTator"} -2025-09-25 13:15:33,450 - INFO - Connection accepted from ('127.0.0.1', 43084) -2025-09-25 13:15:33,450 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f96521adbead876da69411df8cee32d216a59c3963202d5e8d42e28a.PubTator"} -2025-09-25 13:17:47,840 - INFO - Connection accepted from ('127.0.0.1', 59314) -2025-09-25 13:17:47,840 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "09f9a9d2837a9ee1dd3b930967dc402f16c4e5fe51c4c581629a4d17.PubTator"} -2025-09-25 13:19:45,905 - INFO - Connection accepted from ('127.0.0.1', 58616) -2025-09-25 13:19:45,905 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4ca9db0721c66c539cdf434af30a7f9ff81285a1e0f8904c3833f8ea.PubTator"} -2025-09-25 13:28:14,344 - INFO - Connection accepted from ('127.0.0.1', 38476) -2025-09-25 13:28:14,344 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "028edba2fdebaa2930c9807624f08c9a0af839a9219f75dea4231dae.PubTator"} -2025-09-25 13:33:30,643 - INFO - Connection accepted from ('127.0.0.1', 54124) -2025-09-25 13:33:30,643 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6bbd72452f996aa5145570eadbd15f6c6efa471690e3ac355f7c30d9.PubTator"} -2025-09-25 13:39:41,031 - INFO - Connection accepted from ('127.0.0.1', 36570) -2025-09-25 13:39:41,032 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1ed9d3f799cc736bfcee91381404bb0b9613b7fdd280ee76b2543733.PubTator"} -2025-09-25 13:46:53,643 - INFO - Connection accepted from ('127.0.0.1', 50636) -2025-09-25 13:46:53,643 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "758ceffdb35dc66b64141387d0d8caf3bd5b2bbabf4e3544066b7e38.PubTator"} -2025-09-25 13:49:49,678 - INFO - Connection accepted from ('127.0.0.1', 49286) -2025-09-25 13:49:49,678 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "03a9cdd8f43493d2b532d0871fcfb9490f613729792275ff3da94696.PubTator"} -2025-09-25 13:51:43,553 - INFO - Connection accepted from ('127.0.0.1', 36812) -2025-09-25 13:51:43,553 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ef7ffde39deb7270736733dc4636da8b810d8af7c81f23a029c370e6.PubTator"} -2025-09-25 13:54:29,620 - INFO - Connection accepted from ('127.0.0.1', 52474) -2025-09-25 13:54:29,621 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "be3c408eb7c8d0390c254bb4abd8d8d30cbb74704de579db7f5ec316.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-25 14:23:21,778 - INFO - Connection accepted from ('127.0.0.1', 32948) -2025-09-25 14:23:21,778 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3faa09f575f6ff729e877e7fc2f6b04dfbdf0cf36dc562e0153e1b7f.PubTator"} -2025-09-25 14:28:56,363 - INFO - Connection accepted from ('127.0.0.1', 40378) -2025-09-25 14:28:56,363 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1b7e2720810289025fb580fb72acb7ec9f4b6013c400f9cd2a71aa92.PubTator"} -2025-09-25 14:34:19,001 - INFO - Connection accepted from ('127.0.0.1', 38678) -2025-09-25 14:34:19,001 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "adc84f02baadc3f93adda48b8c9fb6644d45641040d43de0bb2c51d2.PubTator"} -2025-09-25 14:38:04,090 - INFO - Connection accepted from ('127.0.0.1', 48344) -2025-09-25 14:38:04,090 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d1b66d37afdd0b4e2a190845321759a63b55997fc29a58e9b7cb9cdc.PubTator"} -2025-09-25 14:44:11,444 - INFO - Connection accepted from ('127.0.0.1', 42810) -2025-09-25 14:44:11,444 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "bf496a70d5669cba642c4c4c76d75369a1f22b8f1408b1c57bb30c5f.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-25 17:15:57,650 - INFO - Connection accepted from ('127.0.0.1', 60926) -2025-09-25 17:15:57,651 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3c1b7290dd09d0a5707faa7da03525cc9b06ab056fb4039be9600a4f.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-25 17:21:22,899 - INFO - Connection accepted from ('127.0.0.1', 60060) -2025-09-25 17:21:22,900 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f201c21487f1585d8ea2898424af0ed51cbe637ff2085dec0ab2e82c.PubTator"} -2025-09-25 17:27:01,170 - INFO - Connection accepted from ('127.0.0.1', 43162) -2025-09-25 17:27:01,171 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "79c95ed9b3ccdfb1891308215cbf2df5561cd6be88b091447e1d7967.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 206, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-26 17:33:15,664 - INFO - Connection accepted from ('127.0.0.1', 40828) -2025-09-26 17:33:15,664 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "88e5636b8845355f4bdc4b5cdd9114ca871c1c204ad5ae62c0fc749f.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-26 17:37:13,152 - INFO - Connection accepted from ('127.0.0.1', 51086) -2025-09-26 17:37:13,153 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ff5dd16ba0a85786a1fb175203da80b23bd2161390d870d2506c6e5e.PubTator"} -2025-09-26 17:41:42,537 - INFO - Connection accepted from ('127.0.0.1', 58836) -2025-09-26 17:41:42,537 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "7e3f2c39c2fd66e17cb2fb717b3cdefcf372bb713e95144ec6083686.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 206, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-27 11:11:16,229 - INFO - Connection accepted from ('127.0.0.1', 41338) -2025-09-27 11:11:16,230 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0e004494fb1bf34a225727e6b878025b720e123f798c8977aa77bfb8.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-27 11:26:17,215 - INFO - Connection accepted from ('127.0.0.1', 45828) -2025-09-27 11:26:17,215 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9388076fdb8fad740dd87124e802ebb191a28f2c619132012525b0f0.PubTator"} -2025-09-27 11:29:52,921 - INFO - Connection accepted from ('127.0.0.1', 51434) -2025-09-27 11:29:52,921 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ccad25b8532bf9520083aa3053180779852682425be60067eb23dc87.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-27 11:40:26,483 - INFO - Connection accepted from ('127.0.0.1', 50840) -2025-09-27 11:40:26,483 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ec64407fc853fb1277271392c19a237b438498670f984ec801fdaeb6.PubTator"} -2025-09-27 11:46:24,593 - INFO - Connection accepted from ('127.0.0.1', 37822) -2025-09-27 11:46:24,594 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4a9b4079bf1b24e98b7eef04bc7035e11beef89862402eed409d7249.PubTator"} -2025-09-27 11:50:34,831 - INFO - Connection accepted from ('127.0.0.1', 55768) -2025-09-27 11:50:34,831 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ed7237d174b0152e51e05cc6e1b44178fb071dc30e1517107f81b164.PubTator"} -2025-09-27 11:56:05,206 - INFO - Connection accepted from ('127.0.0.1', 34588) -2025-09-27 11:56:05,207 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "aa0417ec60c80db81931be58b68a520cbddf566d885ce7831562f2ce.PubTator"} -2025-09-27 12:02:25,453 - INFO - Connection accepted from ('127.0.0.1', 39086) -2025-09-27 12:02:25,453 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "621fabed39d3c5f16576ac76b4164355e6eb732e79a434e295d8ae44.PubTator"} -2025-09-27 12:07:06,450 - INFO - Connection accepted from ('127.0.0.1', 36250) -2025-09-27 12:07:06,450 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cde4f6863ab9f2c5deb47b2cdf0f851aceb2b3f0635cef8dda017e92.PubTator"} -2025-09-27 12:13:27,766 - INFO - Connection accepted from ('127.0.0.1', 56140) -2025-09-27 12:13:27,767 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "da6e343c942dcd0a7e967b865a023c063d90d33e710a5b7accd1e51a.PubTator"} -2025-09-27 12:19:41,538 - INFO - Connection accepted from ('127.0.0.1', 57178) -2025-09-27 12:19:41,539 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b1aa7179947f5562d61ebad44f4faa1c276b4fe97ce299ec8df896a8.PubTator"} -2025-09-27 12:24:35,183 - INFO - Connection accepted from ('127.0.0.1', 45700) -2025-09-27 12:24:35,183 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1ac0eeb746dd1469b5b5576ae02f6a056d92467aa13eaceb1ca49a28.PubTator"} -2025-09-27 12:29:24,977 - INFO - Connection accepted from ('127.0.0.1', 45180) -2025-09-27 12:29:24,978 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "644de15f2398322340ab63953b652080b517e53457edc348c96e2b08.PubTator"} -2025-09-27 12:33:32,898 - INFO - Connection accepted from ('127.0.0.1', 57884) -2025-09-27 12:33:32,899 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ae9e71de011e72210246bc21fb5e8c8f1b9943b4492af3e970e69ec7.PubTator"} -2025-09-27 12:39:04,799 - INFO - Connection accepted from ('127.0.0.1', 32836) -2025-09-27 12:39:04,800 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9c220164c9184d529c42ef0a79f13b643108fd536916df9a99c9ac4f.PubTator"} -2025-09-27 12:44:02,231 - INFO - Connection accepted from ('127.0.0.1', 49876) -2025-09-27 12:44:02,231 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6a23d54a14f1533367307e71ca0f4cb85e2c221cbb3ce0584b099acc.PubTator"} -2025-09-27 12:49:37,000 - INFO - Connection accepted from ('127.0.0.1', 53676) -2025-09-27 12:49:37,000 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "23278c706400dbb032011f15f4dbf10570230e9ba3c353bacc357ece.PubTator"} -2025-09-27 12:54:24,151 - INFO - Connection accepted from ('127.0.0.1', 59552) -2025-09-27 12:54:24,152 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a98b8d6d4d34da098ab9bce4febb21547e162c561768909258532eb5.PubTator"} -2025-09-27 12:58:22,660 - INFO - Connection accepted from ('127.0.0.1', 35788) -2025-09-27 12:58:22,660 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "947b97a51ca23d0d971a4eef20db68c9b052c2f49f22ae81c0176097.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-28 10:19:48,347 - INFO - Connection accepted from ('127.0.0.1', 45728) -2025-09-28 10:19:48,347 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a146d3102f103ea887a6e1c31e9d974edd2c45ef5e06798a02ac0c52.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-28 10:44:47,766 - INFO - Connection accepted from ('127.0.0.1', 55056) -2025-09-28 10:44:47,766 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d07fd4e984b69f583a11a4f42f97506748df2519299e5bb25f42e9e8.PubTator"} -2025-09-28 10:51:04,101 - INFO - Connection accepted from ('127.0.0.1', 49886) -2025-09-28 10:51:04,102 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "528f10ba30ae86eecf1ac2d4c99b9670afc80c6b03344d06a7b254cc.PubTator"} -2025-09-28 10:56:01,781 - INFO - Connection accepted from ('127.0.0.1', 48110) -2025-09-28 10:56:01,781 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2d7099457ba68aa6ba454666d19b1690afd357b775241c2bc6d835b0.PubTator"} -2025-09-28 11:00:16,497 - INFO - Connection accepted from ('127.0.0.1', 33198) -2025-09-28 11:00:16,497 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0ca4d3d2a56739d04d66262c5510d2c6644f461ca461d1c71d15ceed.PubTator"} -2025-09-28 11:06:21,960 - INFO - Connection accepted from ('127.0.0.1', 54360) -2025-09-28 11:06:21,961 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a17248fe2c838d07fd13b407fa55ea1be16a029ba6d21844f6500ba9.PubTator"} -2025-09-28 11:11:57,065 - INFO - Connection accepted from ('127.0.0.1', 51896) -2025-09-28 11:11:57,066 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "651cdebe064fbb80752b960e6b0b3a49553d159862f3f10351e0f450.PubTator"} -2025-09-28 11:16:19,106 - INFO - Connection accepted from ('127.0.0.1', 37422) -2025-09-28 11:16:19,106 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "81fdb9b10d81c428898d881879d5d2e8625ed8da51909820604bbbf9.PubTator"} -2025-09-28 11:21:15,302 - INFO - Connection accepted from ('127.0.0.1', 40628) -2025-09-28 11:21:15,303 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b83d2398fb6e889dedcf984c3805d0d70ac7c0bfdb7e45ce3d6d815a.PubTator"} -2025-09-28 11:27:30,939 - INFO - Connection accepted from ('127.0.0.1', 39750) -2025-09-28 11:27:30,939 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ed73593e140c57a7e1403ef961dfedd220a8f4782a3643c9f4771189.PubTator"} -2025-09-28 11:32:55,553 - INFO - Connection accepted from ('127.0.0.1', 51452) -2025-09-28 11:32:55,553 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "da2fedb3d923bc996f4bb953da642819db4abe90dbdd5ff47332f77b.PubTator"} -2025-09-28 11:38:09,072 - INFO - Connection accepted from ('127.0.0.1', 33546) -2025-09-28 11:38:09,072 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8fe4e0606e5f0403b3bd0474a72fd3bc9fc5d137c4cbefc19ea2bd7f.PubTator"} -2025-09-28 11:42:57,064 - INFO - Connection accepted from ('127.0.0.1', 33960) -2025-09-28 11:42:57,065 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "754e56c01bd4673180b62b2d5e841fbf659a4749e2655d3ab2ee3e6a.PubTator"} -2025-09-28 11:46:32,641 - INFO - Connection accepted from ('127.0.0.1', 36422) -2025-09-28 11:46:32,642 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "628155fa7f0dbfa6db550c9ca7f132ea18c9ffa7c2dfd55dc4a1e61b.PubTator"} -2025-09-28 11:50:47,068 - INFO - Connection accepted from ('127.0.0.1', 34506) -2025-09-28 11:50:47,069 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "de53f648840e59ab76bb1763fc9395344acf912c9631d524bc925a85.PubTator"} -2025-09-28 11:55:21,522 - INFO - Connection accepted from ('127.0.0.1', 49236) -2025-09-28 11:55:21,522 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f3b708cf987e256b9bc781bbc9e5841c24d3a7596278b29800355645.PubTator"} -2025-09-28 12:00:08,609 - INFO - Connection accepted from ('127.0.0.1', 39068) -2025-09-28 12:00:08,609 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "4bb92b0ac587e7111550bff58dff84e4f7168e086e4b4b83bd8dc3ca.PubTator"} -2025-09-28 12:03:55,445 - INFO - Connection accepted from ('127.0.0.1', 37814) -2025-09-28 12:03:55,445 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f066543dc38bed0dc227b7467a029c103880867e7d69eed91b7f8226.PubTator"} -2025-09-28 12:09:39,149 - INFO - Connection accepted from ('127.0.0.1', 56884) -2025-09-28 12:09:39,149 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "85cdea09a57885c5cfc0c0684cd0b7a0bc760af57556a07fc92992e6.PubTator"} -2025-09-28 12:13:38,785 - INFO - Connection accepted from ('127.0.0.1', 45822) -2025-09-28 12:13:38,786 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1bc9a5337c5911101c0084da1de1a07ddeef2bc69b75c78535aa8a84.PubTator"} -2025-09-28 12:17:37,187 - INFO - Connection accepted from ('127.0.0.1', 52130) -2025-09-28 12:17:37,187 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d1bcde4444b3d7f57513495345861abdfa8277d99e6019e908289a22.PubTator"} -2025-09-28 12:21:36,406 - INFO - Connection accepted from ('127.0.0.1', 60418) -2025-09-28 12:21:36,406 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "22aeeb29b1938db37952d3e9daad73489acee36777b4fa9b6cae3071.PubTator"} -2025-09-28 12:25:53,131 - INFO - Connection accepted from ('127.0.0.1', 43236) -2025-09-28 12:25:53,132 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "afc90b1b3fdbffbfebc5fa5444bb4ecd75876abe52f30bd227e9f21b.PubTator"} -2025-09-28 12:28:28,245 - INFO - Connection accepted from ('127.0.0.1', 37750) -2025-09-28 12:28:28,245 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6bc71bd40dff82f542da4835c58ded27e9addd81534a6302ebbe6f88.PubTator"} -2025-09-28 12:35:06,669 - INFO - Connection accepted from ('127.0.0.1', 45336) -2025-09-28 12:35:06,669 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "14b6a869b7eeaeb651581cb4ee83b45af0394865787d83d8d4ca831c.PubTator"} -2025-09-28 12:41:03,585 - INFO - Connection accepted from ('127.0.0.1', 57040) -2025-09-28 12:41:03,585 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "37388ade13bb3d8ab015df00c0198898bc7e1c5a4708ecb7bd2c0aec.PubTator"} -2025-09-28 12:47:26,853 - INFO - Connection accepted from ('127.0.0.1', 35090) -2025-09-28 12:47:26,853 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d6fe76e398c6cc8a4567489c4e1042bdeb36c2e32ee512ad4b6c66b6.PubTator"} -2025-09-28 12:51:12,428 - INFO - Connection accepted from ('127.0.0.1', 51158) -2025-09-28 12:51:12,428 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0a280cf3f91c1c844a3ae1909b991cd059aeb95cd56a87ea8d979bec.PubTator"} -2025-09-28 13:01:52,010 - INFO - Connection accepted from ('127.0.0.1', 51570) -2025-09-28 13:01:52,010 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "90d5e8c2b2f6c48b0311b7bc95ce38f247b3ede53541010e3a810c8d.PubTator"} -2025-09-28 13:07:43,063 - INFO - Connection accepted from ('127.0.0.1', 52238) -2025-09-28 13:07:43,063 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d349adb0c0b14f91a3565a93a56d4cdc1b1cafd904483480e0076448.PubTator"} -2025-09-28 13:12:31,475 - INFO - Connection accepted from ('127.0.0.1', 52986) -2025-09-28 13:12:31,475 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9ad69a6fed51ec56c51f2822189f97e963213ef6b685b11085c13142.PubTator"} -2025-09-28 13:17:01,100 - INFO - Connection accepted from ('127.0.0.1', 55116) -2025-09-28 13:17:01,100 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "feaeb2b7d4eb097e15015599bfd0a707af6071a55de297f804952287.PubTator"} -2025-09-28 13:21:03,567 - INFO - Connection accepted from ('127.0.0.1', 50774) -2025-09-28 13:21:03,568 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "776b4d47a75f3b7428d50d588f1e770e77c2408c6e14f5f6ebf8b871.PubTator"} -2025-09-28 13:25:03,733 - INFO - Connection accepted from ('127.0.0.1', 34578) -2025-09-28 13:25:03,733 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "88404ff27b36fd5ea8592dccfe9af3cfc2c450c97c519ebcf985b58c.PubTator"} -2025-09-28 13:29:36,276 - INFO - Connection accepted from ('127.0.0.1', 40526) -2025-09-28 13:29:36,276 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a3b4c161a1ab15500a70e74353505ebfcf7f4d378fa8924043893ab6.PubTator"} -2025-09-28 13:35:30,932 - INFO - Connection accepted from ('127.0.0.1', 32932) -2025-09-28 13:35:30,932 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d156e2f9adf82d68470c2aec42ab216174f6f8ceadf455f0721ec9bb.PubTator"} -2025-09-28 13:41:02,264 - INFO - Connection accepted from ('127.0.0.1', 37462) -2025-09-28 13:41:02,264 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "762ed75e1ac78ed1d5c390eadc05cac23c8982934bd4921a77a5088c.PubTator"} -2025-09-28 13:46:04,882 - INFO - Connection accepted from ('127.0.0.1', 34192) -2025-09-28 13:46:04,882 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "825e174644353061b2f654db662abee1e0dd9a40bb5ad5ed826dd741.PubTator"} -2025-09-28 13:50:53,623 - INFO - Connection accepted from ('127.0.0.1', 58194) -2025-09-28 13:50:53,623 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f936e50f5b6a8d92cf388f34b76735198fb8afa8ab84c22a451254e6.PubTator"} -2025-09-28 13:54:41,625 - INFO - Connection accepted from ('127.0.0.1', 45168) -2025-09-28 13:54:41,626 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c8f8dd56184287ad869344b62afcac15e5a262c1f96c9b4daf60e23d.PubTator"} -2025-09-28 13:59:29,033 - INFO - Connection accepted from ('127.0.0.1', 36586) -2025-09-28 13:59:29,033 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "51abd5a22878659843299924fcdb36c98802ffef690b7daf564d599c.PubTator"} -2025-09-28 14:03:50,426 - INFO - Connection accepted from ('127.0.0.1', 49906) -2025-09-28 14:03:50,426 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "48a4973a2688c8d464500235e9fde703d7d035caf4302b18784c7079.PubTator"} -2025-09-28 14:07:45,676 - INFO - Connection accepted from ('127.0.0.1', 38624) -2025-09-28 14:07:45,677 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b3c12ebf57fd39c8d818d8d14a4d2d5491f600f53c0c555080ae4a2b.PubTator"} -2025-09-28 14:11:27,089 - INFO - Connection accepted from ('127.0.0.1', 48656) -2025-09-28 14:11:27,089 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d1457ef366a4d954210e8c6402bfef74d5e0b9e9d979dd66e5b4faf2.PubTator"} -2025-09-28 14:14:52,506 - INFO - Connection accepted from ('127.0.0.1', 43586) -2025-09-28 14:14:52,506 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b58ba0047bdcbcc3a93c562d637618ee08411706aab9ac48503a2cef.PubTator"} -2025-09-28 14:18:59,903 - INFO - Connection accepted from ('127.0.0.1', 45340) -2025-09-28 14:18:59,903 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "99340d290e8b0c3a7fe7cd8999228317b9a123d9d456e6c3c04df951.PubTator"} -2025-09-28 14:23:42,904 - INFO - Connection accepted from ('127.0.0.1', 58064) -2025-09-28 14:23:42,905 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3b7506c9512001a78cbc16daa8b0ba45e3cc688e78b3769073c569d0.PubTator"} -2025-09-28 14:29:02,466 - INFO - Connection accepted from ('127.0.0.1', 39384) -2025-09-28 14:29:02,466 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f2ca61aa395e347ca334b33b08ae5dd234f3ae4d543817fea9f00d1f.PubTator"} -2025-09-28 14:33:14,406 - INFO - Connection accepted from ('127.0.0.1', 41856) -2025-09-28 14:33:14,406 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "376453ac425edf498c6d0cdd9ab767ff759bbcede8ed57bbe6988a8d.PubTator"} -2025-09-28 14:36:05,107 - INFO - Connection accepted from ('127.0.0.1', 39108) -2025-09-28 14:36:05,107 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "02a01b5a213384ccc526c83fb963f008a855c994addcb835666a4d55.PubTator"} -2025-09-28 14:39:38,090 - INFO - Connection accepted from ('127.0.0.1', 32868) -2025-09-28 14:39:38,090 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "18f19070123416bef42fb63e32d9d992e012b2d878038fe073010f1f.PubTator"} -2025-09-28 14:43:42,066 - INFO - Connection accepted from ('127.0.0.1', 47972) -2025-09-28 14:43:42,066 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "6f5d6bf9b256ead4943ca5a5ab47d9fa274cfca68a3403c3f8c16e21.PubTator"} -2025-09-28 14:47:08,912 - INFO - Connection accepted from ('127.0.0.1', 46408) -2025-09-28 14:47:08,913 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cc0534da02a42f433a8c42a4d9aae2defe90a96db062f18eafc85c1e.PubTator"} -2025-09-28 14:50:09,973 - INFO - Connection accepted from ('127.0.0.1', 37630) -2025-09-28 14:50:09,973 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d22f7a107a1edd6955a0f77e6bd11b7228df784f6c43475983ea6fa4.PubTator"} -2025-09-28 14:54:59,555 - INFO - Connection accepted from ('127.0.0.1', 39792) -2025-09-28 14:54:59,555 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "0d3fc22c53707777ea937b5d90a2917ea34836f7b7d6bac303c8a8da.PubTator"} -2025-09-28 15:02:31,558 - INFO - Connection accepted from ('127.0.0.1', 53662) -2025-09-28 15:02:31,559 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2f09cf446ef0bc2f39d164df30563c2b41c0b50cec51b6410b4f4fc2.PubTator"} -2025-09-28 15:06:36,556 - INFO - Connection accepted from ('127.0.0.1', 41618) -2025-09-28 15:06:36,556 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b51515243017e94dd0d6cef83ca993f7ed5ff595c3dca87561c60d80.PubTator"} -2025-09-28 15:20:14,890 - INFO - Connection accepted from ('127.0.0.1', 33540) -2025-09-28 15:20:14,890 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "518cce2213aaec5ac066f04becac2479ebf98213c6ded41a39265f43.PubTator"} -2025-09-28 15:25:15,638 - INFO - Connection accepted from ('127.0.0.1', 55480) -2025-09-28 15:25:15,639 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "dc705c128481508dbe2d571e3d7ce16ed3546d6623b62fcd9f939c95.PubTator"} -2025-09-28 15:34:47,043 - INFO - Connection accepted from ('127.0.0.1', 33506) -2025-09-28 15:34:47,043 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f888ce80d16463adbd75e8947e1cf1c579a9e5b500cd67ea25dc791a.PubTator"} -2025-09-28 15:45:16,165 - INFO - Connection accepted from ('127.0.0.1', 37074) -2025-09-28 15:45:16,165 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f34dd2edcb5b78e147c9eb6f750c15273c0ca1e601b08abc812e74fb.PubTator"} -2025-09-28 15:50:36,640 - INFO - Connection accepted from ('127.0.0.1', 50568) -2025-09-28 15:50:36,640 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "716dd8fd7c730de44efe1272f10ab1cadd463883f410d96b077e865d.PubTator"} -2025-09-28 15:54:26,736 - INFO - Connection accepted from ('127.0.0.1', 33884) -2025-09-28 15:54:26,737 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "62f4e3688b82b8cfa821e83e3f22c7badbd6271e1ae0bca44073faa1.PubTator"} -2025-09-28 15:59:29,200 - INFO - Connection accepted from ('127.0.0.1', 58648) -2025-09-28 15:59:29,201 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "56aa36ea4ace3a11dc7dc5b0d91081c473df6102289f7651b72d633d.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-09-30 11:23:42,138 - INFO - Connection accepted from ('127.0.0.1', 53642) -2025-09-30 11:23:42,139 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9dc696dc10fc3c02e4256ff513d6670b4953195ec4dc0e88ddf03207.PubTator"} -Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation. -2025-09-30 11:31:01,868 - INFO - Connection accepted from ('127.0.0.1', 51264) -2025-09-30 11:31:01,869 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "97e1e36f1eb8d35ebaa56b16d73c4409466b7957eed67d74708fa398.PubTator"} -2025-09-30 11:42:27,703 - INFO - Connection accepted from ('127.0.0.1', 48060) -2025-09-30 11:42:27,704 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c10f3314102693f88ad5ad6ff4ec2f2fcbf9bb43fb8f1075a40deae1.PubTator"} -2025-09-30 11:48:53,542 - INFO - Connection accepted from ('127.0.0.1', 55496) -2025-09-30 11:48:53,543 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b80510d88d70dcbe9bd50bcca01e312c31e7f70ea3264ad4244cbe8c.PubTator"} -2025-09-30 11:57:57,116 - INFO - Connection accepted from ('127.0.0.1', 53562) -2025-09-30 11:57:57,116 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "350775959f4563bfc0a8eb79f948d2efa7098e25f24405cdb9cb9d38.PubTator"} -2025-09-30 12:07:20,991 - INFO - Connection accepted from ('127.0.0.1', 33176) -2025-09-30 12:07:20,991 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cb2ff4066fc6bb759927e910dfc8953328a02138d2e5f328466e1f0d.PubTator"} -2025-09-30 12:13:31,876 - INFO - Connection accepted from ('127.0.0.1', 45380) -2025-09-30 12:13:31,876 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "909add6b51a39ebba55fc3eee2ac1395530da0d58f6d08f1060c3058.PubTator"} -2025-09-30 12:19:56,735 - INFO - Connection accepted from ('127.0.0.1', 43646) -2025-09-30 12:19:56,735 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "c6bae1422d4144a2f699a62c969eb40307e995e7615dc28632eced04.PubTator"} -2025-09-30 12:27:00,200 - INFO - Connection accepted from ('127.0.0.1', 50310) -2025-09-30 12:27:00,200 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "cc4ed7da2040e96e30c6f0624ac8089a9b90866870c93d4e1af415ae.PubTator"} -2025-09-30 12:35:51,229 - INFO - Connection accepted from ('127.0.0.1', 45324) -2025-09-30 12:35:51,230 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "d5e8986ebc16918ca83210fabe5200e355341ae02c50dd563db52918.PubTator"} -2025-09-30 12:43:48,147 - INFO - Connection accepted from ('127.0.0.1', 58112) -2025-09-30 12:43:48,148 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "3e72724ded443bcc27745e262933293f3318e59d6d733d22eb0713a8.PubTator"} -2025-09-30 12:51:49,376 - INFO - Connection accepted from ('127.0.0.1', 33602) -2025-09-30 12:51:49,376 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "ce2b668c80b049e1422dd490a3fa89d29f788ee9558514d78e47030d.PubTator"} -2025-09-30 12:58:45,927 - INFO - Connection accepted from ('127.0.0.1', 35938) -2025-09-30 12:58:45,927 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "52e48637b93ee0c8ccb408fc8bb518c869d2baed085ad687a9c3afc3.PubTator"} -2025-09-30 13:04:51,535 - INFO - Connection accepted from ('127.0.0.1', 39448) -2025-09-30 13:04:51,535 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "5f179b2b5403ba934d8555354a7183b8f648725e72fbe2057494cd93.PubTator"} -2025-09-30 13:09:38,632 - INFO - Connection accepted from ('127.0.0.1', 55376) -2025-09-30 13:09:38,633 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "808280b1fef87ac3268b5564aa9ffb8d285c72a01adb37999ccf08b3.PubTator"} -2025-09-30 13:14:47,891 - INFO - Connection accepted from ('127.0.0.1', 33224) -2025-09-30 13:14:47,891 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "f99960800e0b273cc9f59eb2f1df9b070b307f867c27a2fca3d3807e.PubTator"} -2025-09-30 13:18:19,146 - INFO - Connection accepted from ('127.0.0.1', 49952) -2025-09-30 13:18:19,147 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "2a15b7338089a58b0411cb03e83320ffdf968386a228ce7efbd79baa.PubTator"} -2025-09-30 13:25:43,938 - INFO - Connection accepted from ('127.0.0.1', 45932) -2025-09-30 13:25:43,939 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "15fe96f1a5453a5784e1f1d0eec7d030aff94b59bf979d36ebae2205.PubTator"} -2025-09-30 13:33:16,892 - INFO - Connection accepted from ('127.0.0.1', 49240) -2025-09-30 13:33:16,892 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "254cdf2755df48eea22854aa76ae64b9e263454c27514962ee6858cc.PubTator"} -2025-09-30 13:41:31,260 - INFO - Connection accepted from ('127.0.0.1', 43262) -2025-09-30 13:41:31,261 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "a5fccd4b4a4cfcb6bb0a1474206b553e0999e2a6f2bbb9b6f5f6d4cb.PubTator"} -2025-09-30 13:46:28,984 - INFO - Connection accepted from ('127.0.0.1', 42934) -2025-09-30 13:46:28,984 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "8e83f0a7669c64f74f096948376634a95298e9fbdb1ceefcc4e6bf7f.PubTator"} -2025-09-30 13:54:14,968 - INFO - Connection accepted from ('127.0.0.1', 34568) -2025-09-30 13:54:14,968 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "fd02acb9f7dde07cf29631c1dfd120fca454fc3c8da580be45f887fb.PubTator"} -2025-09-30 14:00:10,248 - INFO - Connection accepted from ('127.0.0.1', 37252) -2025-09-30 14:00:10,248 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "974022e0e84f62b9466791d7fdf1e7de01194039f4982dee86c5a38d.PubTator"} -2025-09-30 14:06:54,481 - INFO - Connection accepted from ('127.0.0.1', 50352) -2025-09-30 14:06:54,481 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "1f7dc8f7d5b1b4a6336a68af0a7dc77706a7381e6c25e7865be238ed.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-10-04 12:33:59,063 - INFO - Connection accepted from ('127.0.0.1', 36990) -2025-10-04 12:33:59,064 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-10-04 12:35:09,664 - INFO - Connection accepted from ('127.0.0.1', 39510) -2025-10-04 12:35:09,664 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "9e5db371e5181462e04aa9ff614e8855ccb7a99eef016ccb87033016.PubTator"} -Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation. -2025-10-04 12:35:26,092 - INFO - Connection accepted from ('127.0.0.1', 44718) -2025-10-04 12:35:26,092 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "427659203dcf0a0c1fe3ef6117d0ddcd0a1149f52a519a618d5b363c.PubTator"} - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-10-04 12:42:07,237 - INFO - Connection accepted from ('127.0.0.1', 47446) -2025-10-04 12:42:07,238 - ERROR - An error occurred: unpack requires a buffer of 2 bytes - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use - Fetching 10 files: 0%| | 0/10 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/gner_server.py", line 177, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -2025-10-04 12:43:08,048 - INFO - Connection accepted from ('127.0.0.1', 52792) -2025-10-04 12:43:08,048 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "b29289e71b2cb5235f2a632c3d898362e27afe1519f6e99c6b1f76ef.PubTator"} -2025-10-04 12:43:16,100 - INFO - Connection accepted from ('127.0.0.1', 46382) -2025-10-04 12:43:16,101 - INFO - Received data: {"biomedner_home": "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser", "inputfile": "981bc74e79c14e76efe4e8f05c270a7347b2dbaa05aaee8c2cdbe2d1.PubTator"} diff --git a/source/Parser/logs/nohup_multi_ner.out b/source/Parser/logs/nohup_multi_ner.out deleted file mode 100644 index a64be470..00000000 --- a/source/Parser/logs/nohup_multi_ner.out +++ /dev/null @@ -1,5747 +0,0 @@ -/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py:129: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.) - return torch._C._cuda_getDeviceCount() > 0 -BioMedNER init_t 29.402 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 35966) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.669 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.610 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 45884) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.859 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.568 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 42404) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.614 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.569 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 41016) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.588 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.575 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 56102) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.709 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.588 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 48200) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.661 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.557 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36736) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.591 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.584 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47216) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.595 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.570 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 43336) - 0it [00:00, ?it/s] 1it [00:00, 277.49it/s] - Prediction: 0%| | 0/1 [00:00 0 -/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py:129: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.) - return torch._C._cuda_getDeviceCount() > 0 -BioMedNER init_t 0.587 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 40404) - 0it [00:00, ?it/s] 1it [00:00, 314.77it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.655 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.574 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 43746) - 0it [00:00, ?it/s] 1it [00:00, 293.29it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.553 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.607 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 56030) - 0it [00:00, ?it/s] 1it [00:00, 280.82it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.635 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.585 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 41308) - 0it [00:00, ?it/s] 1it [00:00, 251.53it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.592 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.577 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47960) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.694 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 6.985 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47844) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.696 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.662 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 59032) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.741 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.699 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50936) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.726 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.672 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36716) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.801 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.655 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 37582) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.739 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.679 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 42482) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.742 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.665 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 33430) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.814 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.659 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54618) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.698 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py:182: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:109.) - return torch._C._cuda_getDeviceCount() > 0 -BioMedNER init_t 7.251 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54154) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.674 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.603 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 37958) - 0it [00:00, ?it/s] 1it [00:00, 39.05it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.695 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.627 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 46032) - 0it [00:00, ?it/s] 1it [00:00, 287.18it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.690 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.631 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 60866) - 0it [00:00, ?it/s] 1it [00:00, 269.75it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.724 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.632 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52600) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.655 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.625 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 42170) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.675 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.595 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38802) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.720 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.655 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 39294) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.688 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.609 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 34964) - 0it [00:00, ?it/s] 1it [00:00, 276.47it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -Traceback (most recent call last): - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 421, in _lazy_init - queued_call() - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 269, in _check_capability - capability = get_device_capability(d) - ^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 598, in get_device_capability - prop = get_device_properties(device) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 618, in get_device_properties - return _get_device_properties(device) # type: ignore[name-defined] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -RuntimeError: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -The above exception was the direct cause of the following exception: - -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 115, in - mt_ner = BioMedNER(args) - ^^^^^^^^^^^^^^^ - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 574, in __init__ - self.model.to(self.device) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/transformers/modeling_utils.py", line 4276, in to - return super().to(*args, **kwargs) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1371, in to - return self._apply(convert) - ^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 957, in _apply - param_applied = fn(param) - ^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1357, in convert - return t.to( - ^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 427, in _lazy_init - raise DeferredCudaCallError(msg) from e -torch.cuda.DeferredCudaCallError: CUDA call failed lazily at initialization with error: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -CUDA call was originally invoked at: - - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 9, in - from biomedner_init import BioMedNER - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 10, in - import torch - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/__init__.py", line 2087, in - _C._initExtension(_manager_path()) - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 356, in - _lazy_call(_check_capability) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 353, in _lazy_call - _queued_calls.append((callable, traceback.format_stack())) - -Traceback (most recent call last): - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 421, in _lazy_init - queued_call() - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 269, in _check_capability - capability = get_device_capability(d) - ^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 598, in get_device_capability - prop = get_device_properties(device) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 618, in get_device_properties - return _get_device_properties(device) # type: ignore[name-defined] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -RuntimeError: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -The above exception was the direct cause of the following exception: - -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 115, in - mt_ner = BioMedNER(args) - ^^^^^^^^^^^^^^^ - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 574, in __init__ - self.model.to(self.device) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/transformers/modeling_utils.py", line 4276, in to - return super().to(*args, **kwargs) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1371, in to - return self._apply(convert) - ^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 957, in _apply - param_applied = fn(param) - ^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1357, in convert - return t.to( - ^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 427, in _lazy_init - raise DeferredCudaCallError(msg) from e -torch.cuda.DeferredCudaCallError: CUDA call failed lazily at initialization with error: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -CUDA call was originally invoked at: - - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 9, in - from biomedner_init import BioMedNER - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 10, in - import torch - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/__init__.py", line 2087, in - _C._initExtension(_manager_path()) - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 356, in - _lazy_call(_check_capability) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 353, in _lazy_call - _queued_calls.append((callable, traceback.format_stack())) - -Traceback (most recent call last): - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 421, in _lazy_init - queued_call() - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 269, in _check_capability - capability = get_device_capability(d) - ^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 598, in get_device_capability - prop = get_device_properties(device) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 618, in get_device_properties - return _get_device_properties(device) # type: ignore[name-defined] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -RuntimeError: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -The above exception was the direct cause of the following exception: - -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 115, in - mt_ner = BioMedNER(args) - ^^^^^^^^^^^^^^^ - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 574, in __init__ - self.model.to(self.device) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/transformers/modeling_utils.py", line 4276, in to - return super().to(*args, **kwargs) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1371, in to - return self._apply(convert) - ^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 957, in _apply - param_applied = fn(param) - ^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1357, in convert - return t.to( - ^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 427, in _lazy_init - raise DeferredCudaCallError(msg) from e -torch.cuda.DeferredCudaCallError: CUDA call failed lazily at initialization with error: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -CUDA call was originally invoked at: - - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 9, in - from biomedner_init import BioMedNER - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 10, in - import torch - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/__init__.py", line 2087, in - _C._initExtension(_manager_path()) - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 356, in - _lazy_call(_check_capability) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 353, in _lazy_call - _queued_calls.append((callable, traceback.format_stack())) - -Traceback (most recent call last): - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 421, in _lazy_init - queued_call() - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 269, in _check_capability - capability = get_device_capability(d) - ^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 598, in get_device_capability - prop = get_device_properties(device) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 618, in get_device_properties - return _get_device_properties(device) # type: ignore[name-defined] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -RuntimeError: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -The above exception was the direct cause of the following exception: - -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 115, in - mt_ner = BioMedNER(args) - ^^^^^^^^^^^^^^^ - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 574, in __init__ - self.model.to(self.device) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/transformers/modeling_utils.py", line 4276, in to - return super().to(*args, **kwargs) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1371, in to - return self._apply(convert) - ^^^^^^^^^^^^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 930, in _apply - module._apply(fn) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 957, in _apply - param_applied = fn(param) - ^^^^^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1357, in convert - return t.to( - ^^^^^ - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 427, in _lazy_init - raise DeferredCudaCallError(msg) from e -torch.cuda.DeferredCudaCallError: CUDA call failed lazily at initialization with error: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "/pytorch/aten/src/ATen/cuda/CUDAContext.cpp":52, please report a bug to PyTorch. device=1, num_gpus=1 - -CUDA call was originally invoked at: - - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 9, in - from biomedner_init import BioMedNER - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 10, in - import torch - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/__init__.py", line 2087, in - _C._initExtension(_manager_path()) - File "", line 1178, in _find_and_load - File "", line 1149, in _find_and_load_unlocked - File "", line 690, in _load_unlocked - File "", line 940, in exec_module - File "", line 241, in _call_with_frames_removed - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 356, in - _lazy_call(_check_capability) - File "/home/mabdallah/.conda/envs/trialmatchai/lib/python3.11/site-packages/torch/cuda/__init__.py", line 353, in _lazy_call - _queued_calls.append((callable, traceback.format_stack())) - -BioMedNER init_t 0.242 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 7.317 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 58510) - 0it [00:00, ?it/s] 1it [00:00, 19.72it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.764 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.683 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.603 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 56866) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.685 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.634 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 40636) - 0it [00:00, ?it/s] 1it [00:00, 269.31it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.653 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.631 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55970) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.647 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.633 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57358) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.673 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.827 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 48700) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.700 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.592 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 53558) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.643 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.699 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.615 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 35666) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.725 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.618 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 41872) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.699 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.616 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 59346) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.661 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.672 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.605 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 34754) - 0it [00:00, ?it/s] 1it [00:00, 242.38it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.588 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.656 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.695 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.607 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 34186) - 0it [00:00, ?it/s] 1it [00:00, 45.21it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.654 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.659 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 46644) - 0it [00:00, ?it/s] 1it [00:00, 38.32it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.673 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.648 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38736) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.682 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 7.581 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55662) - 0it [00:00, ?it/s] 1it [00:00, 262.60it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.600 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36148) - 0it [00:00, ?it/s] 1it [00:00, 254.39it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.670 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 58876) - 0it [00:00, ?it/s] 1it [00:00, 288.45it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.880 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.647 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 53574) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.655 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.671 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 59480) - 0it [00:00, ?it/s] 1it [00:00, 260.69it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.734 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.691 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.617 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 40534) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.677 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Response sent for 61d5392634e0658327dab1a020c904645ec31ef6fbb49b058ee86cdc.PubTator -Connected by ('127.0.0.1', 49444) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.674 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.632 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 45120) - 0it [00:00, ?it/s] 1it [00:00, 248.26it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.686 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.617 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54440) - 0it [00:00, ?it/s] 1it [00:00, 302.01it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.701 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.670 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.713 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.635 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55824) - 0it [00:00, ?it/s] 1it [00:00, 258.81it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.685 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.658 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52026) - 0it [00:00, ?it/s] 1it [00:00, 253.88it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.674 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.630 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 49418) - 0it [00:00, ?it/s] 1it [00:00, 289.18it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.699 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.617 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38980) - 0it [00:00, ?it/s] 1it [00:00, 271.30it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.716 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.660 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52322) - 0it [00:00, ?it/s] 1it [00:00, 270.16it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.599 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55710) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.693 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.642 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51514) - 0it [00:00, ?it/s] 1it [00:00, 300.39it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.645 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.600 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52062) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.661 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.664 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 58326) - 0it [00:00, ?it/s] 1it [00:00, 27.60it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.664 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.676 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.761 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55874) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.678 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.664 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57998) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.679 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.672 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 53008) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.630 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.621 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.638 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36312) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.624 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.621 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 60350) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.669 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.679 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47356) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.623 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.677 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57180) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.670 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.660 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 49116) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.651 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.687 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50804) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.899 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.631 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51960) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.660 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.629 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50042) - 0it [00:00, ?it/s] 1it [00:00, 234.52it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 6.950 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54262) - 0it [00:00, ?it/s] 1it [00:00, 40.99it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.589 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.640 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 37384) - 0it [00:00, ?it/s] 1it [00:00, 303.85it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.654 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.641 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55558) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.646 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.629 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 45134) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.643 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.583 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54608) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.591 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.601 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 37706) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.734 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.608 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 35874) - 0it [00:00, ?it/s] 1it [00:00, 44.39it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.620 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.606 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.632 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.609 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 40950) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.659 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.618 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 59594) - 0it [00:00, ?it/s] 1it [00:00, 272.66it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.630 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.626 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 35992) - 0it [00:00, ?it/s] 1it [00:00, 249.45it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.636 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.679 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51178) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.610 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.685 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51420) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.660 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.662 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38132) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 1.084 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36706) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.651 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.671 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55340) - 0it [00:00, ?it/s] 1it [00:00, 277.35it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.621 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.655 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 56258) - 0it [00:00, ?it/s] 1it [00:00, 32.02it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.625 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.645 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38912) - 0it [00:00, ?it/s] 1it [00:00, 245.11it/s] - Prediction: 0%| | 0/1 [00:00H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 1.136 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.689 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50952) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 1.155 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Response sent for 69da3d5c9756484561d38f6b18b486efb3ef03abff2cdca8d4db0470.PubTator -Connected by ('127.0.0.1', 44940) - 0it [00:00, ?it/s] 1it [00:00, 480.89it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Response sent for 1501995ce586ffd0c7522df67e52af96f151f639f40a785a87e4a1ab.PubTator -Connected by ('127.0.0.1', 44138) - 0it [00:00, ?it/s] 1it [00:00, 475.22it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.599 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57780) - 0it [00:00, ?it/s] 1it [00:00, 301.40it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.626 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.743 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 46162) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.623 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.641 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51732) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.592 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.651 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.676 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55168) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.599 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.618 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.705 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50706) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.619 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.678 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47454) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.605 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.669 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36056) - 0it [00:00, ?it/s] 1it [00:00, 167.10it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.607 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.761 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50442) - 0it [00:00, ?it/s] 1it [00:00, 254.32it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.657 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.675 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 48094) - 0it [00:00, ?it/s] 1it [00:00, 257.18it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.688 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.706 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 39282) - 0it [00:00, ?it/s] 1it [00:00, 291.11it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.607 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.682 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 44094) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.621 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.637 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 44206) - 0it [00:00, ?it/s] 1it [00:00, 45.36it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.618 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.621 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 60840) - 0it [00:00, ?it/s] 1it [00:00, 211.71it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.615 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.731 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47788) - 0it [00:00, ?it/s] 1it [00:00, 273.73it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.641 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.673 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52268) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.600 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.649 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54538) - 0it [00:00, ?it/s] 1it [00:00, 50.53it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.614 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.654 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 55100) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.613 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.613 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.656 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 43618) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.643 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.609 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 49372) - 0it [00:00, ?it/s] 1it [00:00, 49.29it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.644 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.709 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51396) - 0it [00:00, ?it/s] 1it [00:00, 285.87it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.616 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.659 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 33552) - 0it [00:00, ?it/s] 1it [00:00, 314.63it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.632 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.669 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36438) - 0it [00:00, ?it/s] 1it [00:00, 294.92it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.652 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.660 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 58114) - 0it [00:00, ?it/s] 1it [00:00, 76.53it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.617 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.626 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 51132) - 0it [00:00, ?it/s] 1it [00:00, 45.80it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.617 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.630 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 45558) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.620 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.654 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57234) - 0it [00:00, ?it/s] 1it [00:00, 293.33it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.660 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.640 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 33816) - 0it [00:00, ?it/s] 1it [00:00, 278.01it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.668 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.664 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 9, in - from biomedner_init import BioMedNER - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_init.py", line 10, in - import torch -ModuleNotFoundError: No module named 'torch' -BioMedNER init_t 0.685 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54500) - 0it [00:00, ?it/s] 1it [00:00, 281.82it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.812 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.600 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57122) - 0it [00:00, ?it/s] 1it [00:00, 117.55it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.618 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.668 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 58328) - 0it [00:00, ?it/s] 1it [00:00, 263.94it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.584 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.669 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 33454) - 0it [00:00, ?it/s] 1it [00:00, 280.22it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.595 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.726 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36446) - 0it [00:00, ?it/s] 1it [00:00, 38.11it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.634 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.670 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 32980) - 0it [00:00, ?it/s] 1it [00:00, 99.35it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.611 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.637 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38790) - 0it [00:00, ?it/s] 1it [00:00, 322.22it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.615 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.693 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 49014) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.648 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.671 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47712) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.617 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.663 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54922) - 0it [00:00, ?it/s] 1it [00:00, 27.25it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.667 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52508) - 0it [00:00, ?it/s] 1it [00:00, 310.78it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.622 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.662 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 36956) - 0it [00:00, ?it/s] 1it [00:00, 320.08it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.632 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.761 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 58470) - 0it [00:00, ?it/s] 1it [00:00, 299.55it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.600 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.725 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 39066) - 0it [00:00, ?it/s] 1it [00:00, 37.91it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.630 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.640 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38604) - 0it [00:00, ?it/s] 1it [00:00, 252.70it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.646 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.667 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 57876) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.651 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.609 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 7.686 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 39636) - 0it [00:00, ?it/s] 1it [00:00, 306.06it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.656 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.635 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54280) - 0it [00:00, ?it/s] 1it [00:00, 35.67it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.644 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.628 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 59526) - 0it [00:00, ?it/s] 1it [00:00, 317.41it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.644 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.650 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52382) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.615 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.636 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 33324) - 0it [00:00, ?it/s] 1it [00:00, 38.50it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.655 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.573 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 60648) - 0it [00:00, ?it/s] 1it [00:00, 50.69it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.603 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.633 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 39646) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.582 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.673 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 43590) - 0it [00:00, ?it/s] 1it [00:00, 281.38it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.650 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.625 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 56334) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.636 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.595 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.570 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 52778) - 0it [00:00, ?it/s] 1it [00:00, 58.14it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.606 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.598 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 43512) - 0it [00:00, ?it/s] 1it [00:00, 321.92it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.575 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.634 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 46524) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.600 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.615 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 60002) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.621 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.593 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 44016) - 0it [00:00, ?it/s] 1it [00:00, 337.35it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.568 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 47056) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.584 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.792 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38682) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.583 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.623 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 42872) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.626 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.595 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 38908) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.601 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.610 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 41668) - 0it [00:00, ?it/s] 1it [00:00, 27.26it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.646 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.631 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 48016) - 0it [00:00, ?it/s] 1it [00:00, 302.07it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.589 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.588 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 60800) - 0it [00:00, ?it/s] 1it [00:00, 267.70it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.632 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.650 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 48744) - 0it [00:00, ?it/s] 1it [00:00, 303.25it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.647 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.600 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 56694) -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.620 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.663 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 50922) - 0it [00:00, ?it/s] 1it [00:00, 41.07it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.677 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.646 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.622 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 45338) - 0it [00:00, ?it/s] 1it [00:00, 340.81it/s] - Prediction: 0%| | 0/1 [00:00 - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 70, in run_server - message_length = struct.unpack(">H", conn.recv(2))[0] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -struct.error: unpack requires a buffer of 2 bytes -BioMedNER init_t 0.654 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.670 sec. -Traceback (most recent call last): - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 116, in - run_server(mt_ner, args) - File "/nfs/scratch/mabdallah/TrialMatchAI/source/Parser/biomedner_server.py", line 63, in run_server - s.bind((host, port)) -OSError: [Errno 98] Address already in use -BioMedNER init_t 0.610 sec. -Server listening on localhost:18894 -Connected by ('127.0.0.1', 54022) - 0it [00:00, ?it/s] 1it [00:00, 314.86it/s] - Prediction: 0%| | 0/1 [00:00= 18", "Patient has lung cancer.") + + assert "Written informed consent has been obtained" not in prompt + + +def test_json_extraction_uses_balanced_object(): + output = 'prefix {"outer": {"inner": "value"}, "items": [1, 2]} suffix {"bad": true}' + + parsed = extract_json_object(output) + + assert parsed == {"outer": {"inner": "value"}, "items": [1, 2]} + + +def test_json_extraction_rejects_malformed_output(): + try: + extract_json_object('prefix {"outer": {"inner": "value"}') + except ValueError as exc: + assert "Unbalanced JSON object" in str(exc) + else: + raise AssertionError("Malformed output should fail JSON extraction") diff --git a/tests/test_file_utils_pytest.py b/tests/test_file_utils_pytest.py index 7533d38d..bee17e6e 100644 --- a/tests/test_file_utils_pytest.py +++ b/tests/test_file_utils_pytest.py @@ -1,5 +1,3 @@ -import json - from Matcher.utils.file_utils import read_json_file, read_text_file, write_json_file, write_text_file diff --git a/tests/test_logging.py b/tests/test_logging.py index 1c07e2f4..8d82c083 100644 --- a/tests/test_logging.py +++ b/tests/test_logging.py @@ -1,10 +1,5 @@ import logging -import sys import unittest -from pathlib import Path - -ROOT = Path(__file__).resolve().parents[1] -sys.path.append(str(ROOT / "source")) from Matcher.utils.logging_config import reset_request_id, set_request_id, setup_logging diff --git a/tests/test_preflight_and_indexer.py b/tests/test_preflight_and_indexer.py new file mode 100644 index 00000000..316ddcd7 --- /dev/null +++ b/tests/test_preflight_and_indexer.py @@ -0,0 +1,135 @@ +from __future__ import annotations + +import json +import importlib.util +from pathlib import Path + +from Matcher.services import preflight +from Matcher.services.preflight import run_preflight_checks + +ES_CONFIG_PATH = Path(__file__).resolve().parents[1] / "utils/Indexer/es_config.py" +spec = importlib.util.spec_from_file_location("indexer_es_config", ES_CONFIG_PATH) +assert spec and spec.loader +indexer_es_config = importlib.util.module_from_spec(spec) +spec.loader.exec_module(indexer_es_config) +load_config = indexer_es_config.load_config + + +class HealthyIndices: + def __init__(self, existing: set[str]): + self.existing = existing + + def exists(self, index: str) -> bool: + return index in self.existing + + +class FakeES: + def __init__(self, *, healthy: bool = True, existing: set[str] | None = None): + self.healthy = healthy + self.indices = HealthyIndices(existing or set()) + + def ping(self) -> bool: + return self.healthy + + +def _base_config(tmp_path): + cert = tmp_path / "ca.crt" + cert.write_text("cert") + patients = tmp_path / "patients" + patients.mkdir() + trials = tmp_path / "trials" + trials.mkdir() + return { + "paths": { + "patients_dir": str(patients), + "trials_json_folder": str(trials), + "output_dir": str(tmp_path / "results"), + "docker_certs": str(cert), + }, + "elasticsearch": { + "host": "https://localhost:9200", + "index_trials": "clinical_trials", + "index_trials_eligibility": "trials_eligibility", + }, + "model": { + "cot_adapter_path": str(tmp_path / "models" / "cot"), + "reranker_adapter_path": str(tmp_path / "models" / "reranker"), + }, + "cot_backend": "default", + } + + +def test_preflight_passes_for_required_paths_and_indices(tmp_path): + cfg = _base_config(tmp_path) + issues = run_preflight_checks( + cfg, + es_client=FakeES( + existing={"clinical_trials", "trials_eligibility"}, + ), + require_patient_inputs=True, + require_trials_json=True, + require_indices=True, + ) + + assert issues == [] + + +def test_preflight_reports_missing_indices(tmp_path): + cfg = _base_config(tmp_path) + issues = run_preflight_checks( + cfg, + es_client=FakeES(existing={"clinical_trials"}), + require_indices=True, + ) + + assert issues == ["Missing Elasticsearch indices: trials_eligibility"] + + +def test_preflight_reports_unreachable_elasticsearch(tmp_path): + cfg = _base_config(tmp_path) + issues = run_preflight_checks(cfg, es_client=FakeES(healthy=False)) + + assert issues == ["Elasticsearch is not reachable at https://localhost:9200."] + + +def test_preflight_reports_missing_vllm_extra(tmp_path, monkeypatch): + cfg = _base_config(tmp_path) + cfg["cot_backend"] = "vllm" + Path(cfg["model"]["cot_adapter_path"]).mkdir(parents=True) + Path(cfg["model"]["reranker_adapter_path"]).mkdir(parents=True) + monkeypatch.setattr(preflight.importlib.util, "find_spec", lambda name: None) + monkeypatch.setattr(preflight.torch.cuda, "is_available", lambda: True) + + issues = run_preflight_checks(cfg, require_models=True) + + assert issues == [ + "cot_backend=vllm requires the GPU extra " + "(`uv sync --extra gpu`) or the Docker worker image." + ] + + +def test_indexer_config_uses_env_overrides_and_resolves_certs(tmp_path, monkeypatch): + config_path = tmp_path / "config.json" + cert = tmp_path / "certs" / "ca.crt" + cert.parent.mkdir() + cert.write_text("cert") + config_path.write_text( + json.dumps( + { + "elasticsearch": { + "hosts": ["https://localhost:9200"], + "ca_certs": "certs/ca.crt", + "username": "elastic", + "password": "CHANGE_ME", + } + } + ) + ) + monkeypatch.setenv("TRIALMATCHAI_ES_HOST", "https://es.example.test:9200") + monkeypatch.setenv("TRIALMATCHAI_ES_PASSWORD", "from-env") + + cfg = load_config(config_path) + + assert cfg["elasticsearch"]["hosts"] == ["https://es.example.test:9200"] + assert cfg["elasticsearch"]["password"] == "from-env" + assert cfg["elasticsearch"]["ca_certs"] == str(cert.resolve()) diff --git a/tests/test_schemas.py b/tests/test_schemas.py index 14587fad..73e6c5ce 100644 --- a/tests/test_schemas.py +++ b/tests/test_schemas.py @@ -1,9 +1,4 @@ -import sys import unittest -from pathlib import Path - -ROOT = Path(__file__).resolve().parents[1] -sys.path.append(str(ROOT / "source")) from Matcher.schemas.phenopacket import Keywords, Phenopacket diff --git a/tests/test_search_queries.py b/tests/test_search_queries.py index eb86ded8..c53d185c 100644 --- a/tests/test_search_queries.py +++ b/tests/test_search_queries.py @@ -1,9 +1,4 @@ -import sys import unittest -from pathlib import Path - -ROOT = Path(__file__).resolve().parents[1] -sys.path.append(str(ROOT / "source")) from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch diff --git a/tests/test_settings.py b/tests/test_settings.py index 5559475a..8b6327ab 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -1,11 +1,7 @@ import os -import sys import unittest from pathlib import Path -ROOT = Path(__file__).resolve().parents[1] -sys.path.append(str(ROOT / "source")) - from Matcher.config.config_loader import load_config from Matcher.config.settings import apply_env_overrides diff --git a/utils/DataLoader/nct_ids.txt b/utils/DataLoader/nct_ids.txt deleted file mode 100644 index 986b18a5..00000000 --- a/utils/DataLoader/nct_ids.txt +++ /dev/null @@ -1 +0,0 @@ -NCT04127110 \ No newline at end of file diff --git a/utils/Indexer/config.json b/utils/Indexer/config.json index 18d62cf7..4a421a57 100644 --- a/utils/Indexer/config.json +++ b/utils/Indexer/config.json @@ -1,11 +1,11 @@ { "elasticsearch": { "hosts": ["https://localhost:9200"], - "ca_certs": "../../elasticsearch/certs/ca.crt", + "ca_certs": "../../elasticsearch/certs/ca/ca.crt", "username": "elastic", - "password": "QQ7wWoB_WnKe*L*X9tAW", + "password": "CHANGE_ME", "request_timeout": 300, "retry_on_timeout": true, "max_retries": 3 } - } \ No newline at end of file + } diff --git a/utils/Indexer/es_config.py b/utils/Indexer/es_config.py new file mode 100644 index 00000000..b13a106b --- /dev/null +++ b/utils/Indexer/es_config.py @@ -0,0 +1,42 @@ +from __future__ import annotations + +import json +import os +from pathlib import Path +from typing import Any + +from elasticsearch import Elasticsearch + + +def load_config(path: str | Path) -> dict[str, Any]: + config_path = Path(path) + cfg = json.loads(config_path.read_text()) + es_conf = cfg.setdefault("elasticsearch", {}) + if os.getenv("TRIALMATCHAI_ES_HOST"): + es_conf["hosts"] = [os.environ["TRIALMATCHAI_ES_HOST"]] + if os.getenv("TRIALMATCHAI_ES_USERNAME"): + es_conf["username"] = os.environ["TRIALMATCHAI_ES_USERNAME"] + if os.getenv("TRIALMATCHAI_ES_PASSWORD"): + es_conf["password"] = os.environ["TRIALMATCHAI_ES_PASSWORD"] + if os.getenv("TRIALMATCHAI_ES_CA_CERTS"): + es_conf["ca_certs"] = os.environ["TRIALMATCHAI_ES_CA_CERTS"] + if es_conf.get("ca_certs"): + ca_path = Path(es_conf["ca_certs"]).expanduser() + if not ca_path.is_absolute(): + es_conf["ca_certs"] = str((config_path.parent / ca_path).resolve()) + return cfg + + +def make_es_client(cfg: dict[str, Any]) -> Elasticsearch: + es_conf = cfg["elasticsearch"] + kwargs: dict[str, Any] = { + "hosts": es_conf["hosts"], + "basic_auth": (es_conf["username"], es_conf["password"]), + "verify_certs": True, + "request_timeout": es_conf.get("request_timeout", 60), + "max_retries": es_conf.get("max_retries", 3), + "retry_on_timeout": es_conf.get("retry_on_timeout", True), + } + if es_conf.get("ca_certs") and Path(es_conf["ca_certs"]).exists(): + kwargs["ca_certs"] = es_conf["ca_certs"] + return Elasticsearch(**kwargs) diff --git a/utils/Indexer/index_criteria.py b/utils/Indexer/index_criteria.py index cc2f8208..4d2aa892 100644 --- a/utils/Indexer/index_criteria.py +++ b/utils/Indexer/index_criteria.py @@ -8,6 +8,11 @@ from elasticsearch import Elasticsearch, NotFoundError from elasticsearch.helpers import bulk +try: + from .es_config import load_config, make_es_client +except ImportError: # pragma: no cover - direct script execution + from es_config import load_config, make_es_client + logging.basicConfig( format="%(asctime)s %(levelname)s %(name)s - %(message)s", level=logging.INFO, @@ -200,23 +205,6 @@ def index_all( ) -def load_config(path: str) -> dict: - return json.loads(Path(path).read_text()) - - -def make_es_client(cfg: dict) -> Elasticsearch: - es_conf = cfg["elasticsearch"] - return Elasticsearch( - hosts=es_conf["hosts"], - basic_auth=(es_conf["username"], es_conf["password"]), - ca_certs=es_conf["ca_certs"], - verify_certs=True, - request_timeout=es_conf.get("request_timeout", 60), - max_retries=es_conf.get("max_retries", 3), - retry_on_timeout=True, - ) - - def main(): parser = argparse.ArgumentParser( description="Bulk‑index prepared eligibility criteria in parallel" @@ -226,7 +214,7 @@ def main(): "--processed-folder", required=True, help="Root folder of trial subfolders" ) parser.add_argument( - "--index-name", default="trec_trials_eligibility_v3", help="ES index name" + "--index-name", default="trials_eligibility", help="ES index name" ) parser.add_argument( "--batch-size", type=int, default=100, help="Docs per bulk request" diff --git a/utils/Indexer/index_trials.py b/utils/Indexer/index_trials.py index 6dbc5a06..c0ee4803 100644 --- a/utils/Indexer/index_trials.py +++ b/utils/Indexer/index_trials.py @@ -1,25 +1,16 @@ #!/usr/bin/env python3 -import os -import json import argparse +import json +import os from pathlib import Path from elasticsearch import Elasticsearch from elasticsearch.helpers import bulk - -def load_config(path: str) -> dict: - return json.loads(Path(path).read_text()) - - -def make_es_client(cfg: dict) -> Elasticsearch: - es_conf = cfg["elasticsearch"] - return Elasticsearch( - hosts=es_conf["hosts"], - basic_auth=(es_conf["username"], es_conf["password"]), - ca_certs=es_conf["ca_certs"], - verify_certs=True, - ) +try: + from .es_config import load_config, make_es_client +except ImportError: # pragma: no cover - direct script execution + from es_config import load_config, make_es_client def detect_vector_dim(sample: dict) -> int: diff --git a/utils/Indexer/nct_ids.txt b/utils/Indexer/nct_ids.txt deleted file mode 100644 index 81ca4c2a..00000000 --- a/utils/Indexer/nct_ids.txt +++ /dev/null @@ -1,109282 +0,0 @@ -NCT00000411 -NCT00000102 -NCT00000419 -NCT00000105 -NCT00000413 -NCT00000108 -NCT00000424 -NCT00000110 -NCT00000425 -NCT00000113 -NCT00000427 -NCT00000114 -NCT00000479 -NCT00000115 -NCT00000487 -NCT00000117 -NCT00000501 -NCT00000119 -NCT00000502 -NCT00000120 -NCT00000513 -NCT00000121 -NCT00000515 -NCT00000123 -NCT00000518 -NCT00000124 -NCT00000519 -NCT00000125 -NCT00000520 -NCT00000126 -NCT00000521 -NCT00000127 -NCT00000522 -NCT00000129 -NCT00000524 -NCT00000133 -NCT00000525 -NCT00000137 -NCT00000526 -NCT00000144 -NCT00000528 -NCT00000150 -NCT00000531 -NCT00000151 -NCT00000539 -NCT00000152 -NCT00000546 -NCT00000153 -NCT00000548 -NCT00000154 -NCT00000555 -NCT00000155 -NCT00000559 -NCT00000156 -NCT00000560 -NCT00000158 -NCT00000562 -NCT00000159 -NCT00000567 -NCT00000160 -NCT00000568 -NCT00000161 -NCT00000570 -NCT00000167 -NCT00000572 -NCT00000171 -NCT00000574 -NCT00000173 -NCT00000575 -NCT00000176 -NCT00000576 -NCT00000179 -NCT00000577 -NCT00000292 -NCT00000580 -NCT00000359 -NCT00000582 -NCT00000361 -NCT00000583 -NCT00000362 -NCT00000585 -NCT00000377 -NCT00000586 -NCT00000390 -NCT00000588 -NCT00000396 -NCT00000592 -NCT00000402 -NCT00000598 -NCT00000403 -NCT00000599 -NCT00000406 -NCT00000602 -NCT00000408 -NCT00000606 -NCT00000409 -NCT00000619 -NCT00000410 -NCT00000430 -NCT00000620 -NCT00000432 -NCT00000621 -NCT00000437 -NCT00000633 -NCT00000461 -NCT00000636 -NCT00000468 -NCT00000638 -NCT00000469 -NCT00002492 -NCT00000641 -NCT00000642 -NCT00000644 -NCT00000653 -NCT00000654 -NCT00000672 -NCT00000678 -NCT00000682 -NCT00000706 -NCT00000707 -NCT00000714 -NCT00000715 -NCT00000717 -NCT00000722 -NCT00000724 -NCT00000727 -NCT00000730 -NCT00000732 -NCT00000734 -NCT00000739 -NCT00000740 -NCT00000748 -NCT00000749 -NCT00000755 -NCT00000768 -NCT00000769 - -NCT00000773 -NCT00000776 -NCT00000778 -NCT00000785 -NCT00000790 -NCT00000794 -NCT00000796 -NCT00000801 -NCT00000802 -NCT00000811 -NCT00000816 -NCT00000832 -NCT00000854 -NCT00000855 -NCT00000860 -NCT00000862 -NCT00000863 -NCT00000873 -NCT00000879 -NCT00000910 -NCT00000937 -NCT00000938 -NCT00000941 -NCT00000955 -NCT00000959 -NCT00000961 -NCT00000963 -NCT00000964 -NCT00000970 -NCT00000975 -NCT00000980 -NCT00000987 -NCT00000998 -NCT00001001 -NCT00001013 -NCT00001014 -NCT00001015 -NCT00001025 -NCT00001028 -NCT00001030 -NCT00001033 -NCT00001038 -NCT00001077 -NCT00001081 -NCT00001092 -NCT00001100 -NCT00001101 -NCT00001103 -NCT00001109 -NCT00001115 -NCT00001119 -NCT00001126 -NCT00001127 -NCT00001128 -NCT00001143 -NCT00001144 -NCT00001145 -NCT00001148 -NCT00001149 -NCT00001152 -NCT00001153 -NCT00001155 -NCT00001156 -NCT00001159 -NCT00001160 -NCT00001161 -NCT00001165 -NCT00001166 -NCT00001167 -NCT00001173 -NCT00001177 -NCT00001180 -NCT00001181 -NCT00001184 -NCT00001188 -NCT00001189 -NCT00001190 -NCT00001193 -NCT00001196 -NCT00001197 -NCT00001202 -NCT00001203 -NCT00001204 -NCT00001205 -NCT00001208 -NCT00001215 -NCT00001216 -NCT00001220 -NCT00001221 -NCT00001224 -NCT00001225 -NCT00001228 -NCT00001230 -NCT00001237 -NCT00001241 -NCT00001242 -NCT00001246 -NCT00001249 -NCT00001250 -NCT00001252 -NCT00001253 -NCT00001254 -NCT00001256 -NCT00001259 -NCT00001261 -NCT00001262 -NCT00001265 -NCT00001266 -NCT00001267 -NCT00001269 -NCT00001270 -NCT00001276 -NCT00001277 -NCT00001278 -NCT00001280 -NCT00001282 -NCT00001284 -NCT00001287 -NCT00001288 -NCT00001291 -NCT00001292 -NCT00001296 -NCT00001301 -NCT00001302 -NCT00001303 -NCT00001304 -NCT00001305 -NCT00001306 -NCT00001307 -NCT00001308 -NCT00001313 -NCT00001314 -NCT00001318 -NCT00001322 -NCT00001323 -NCT00001325 -NCT00001332 -NCT00001335 -NCT00001337 -NCT00001338 -NCT00001339 -NCT00001341 -NCT00001342 -NCT00001343 -NCT00001344 -NCT00001347 -NCT00001349 -NCT00001350 -NCT00001356 -NCT00001359 -NCT00001364 -NCT00001365 -NCT00001366 -NCT00001367 -NCT00001368 -NCT00001371 -NCT00001378 -NCT00001379 -NCT00001381 -NCT00001383 -NCT00001384 -NCT00001386 -NCT00001393 -NCT00001394 -NCT00001398 -NCT00001399 -NCT00001400 -NCT00001402 -NCT00001403 -NCT00001405 -NCT00001407 -NCT00001408 -NCT00001412 -NCT00001413 -NCT00001415 -NCT00001417 -NCT00001420 -NCT00001421 -NCT00001431 -NCT00001436 -NCT00001437 -NCT00001442 -NCT00001444 -NCT00001445 -NCT00001446 -NCT00001452 -NCT00001453 -NCT00001454 -NCT00001455 -NCT00001456 -NCT00001457 -NCT00001458 -NCT00001460 -NCT00001462 -NCT00001466 -NCT00001469 -NCT00001473 -NCT00001476 -NCT00001478 -NCT00001480 -NCT00001481 -NCT00001482 -NCT00001483 -NCT00001487 -NCT00001489 -NCT00001493 -NCT00001496 -NCT00001498 -NCT00001502 -NCT00001505 -NCT00001520 -NCT00001521 -NCT00001522 -NCT00001523 -NCT00001524 -NCT00001527 -NCT00001528 -NCT00001529 -NCT00001530 -NCT00001532 -NCT00001533 -NCT00001534 -NCT00001536 -NCT00001538 -NCT00001539 -NCT00001541 -NCT00001542 -NCT00001543 -NCT00001544 -NCT00001546 -NCT00001549 -NCT00001550 -NCT00001551 -NCT00001553 -NCT00001554 -NCT00001560 -NCT00001561 -NCT00001565 -NCT00001568 -NCT00001573 -NCT00001574 -NCT00001579 -NCT00001586 -NCT00001589 -NCT00001596 -NCT00001598 -NCT00001599 -NCT00001600 -NCT00001605 -NCT00001606 -NCT00001610 -NCT00001611 -NCT00001615 -NCT00001621 -NCT00001622 -NCT00001623 -NCT00001625 -NCT00001628 -NCT00001629 -NCT00001631 -NCT00001633 -NCT00001637 -NCT00001638 -NCT00001639 -NCT00001640 -NCT00001641 -NCT00001643 -NCT00001645 -NCT00001646 -NCT00001649 -NCT00001656 -NCT00001657 -NCT00001658 -NCT00001659 -NCT00001661 -NCT00001662 -NCT00001663 -NCT00001664 -NCT00001665 -NCT00001666 -NCT00001668 -NCT00001669 -NCT00001672 -NCT00001676 -NCT00001685 -NCT00001688 -NCT00001693 -NCT00001696 -NCT00001699 -NCT00001713 -NCT00001716 -NCT00001718 -NCT00001719 -NCT00001720 -NCT00001721 -NCT00001722 -NCT00001723 -NCT00001724 -NCT00001725 -NCT00001728 -NCT00001729 -NCT00001730 -NCT00001731 -NCT00001735 -NCT00001737 -NCT00001742 -NCT00001748 -NCT00001750 -NCT00001752 -NCT00001754 -NCT00001756 -NCT00001759 -NCT00001760 -NCT00001761 -NCT00001763 -NCT00001764 -NCT00001765 -NCT00001770 -NCT00001774 -NCT00001776 -NCT00001777 -NCT00001780 -NCT00001781 -NCT00001783 -NCT00001784 -NCT00001790 -NCT00001814 -NCT00001830 -NCT00001836 -NCT00001839 -NCT00001840 -NCT00001848 -NCT00001849 -NCT00001851 -NCT00001852 -NCT00001853 -NCT00001854 -NCT00001859 -NCT00001860 -NCT00001861 -NCT00001862 -NCT00001864 -NCT00001865 -NCT00001866 -NCT00001870 -NCT00001871 -NCT00001873 -NCT00001876 -NCT00001877 -NCT00001878 -NCT00001881 -NCT00001884 -NCT00001885 -NCT00001886 -NCT00001887 -NCT00001888 -NCT00001889 -NCT00001890 -NCT00001891 -NCT00001893 -NCT00001894 -NCT00001895 -NCT00001899 -NCT00001901 -NCT00001987 -NCT00001903 -NCT00001990 -NCT00001905 -NCT00001991 -NCT00001906 -NCT00002032 -NCT00001908 -NCT00002047 -NCT00001909 -NCT00002055 -NCT00001910 -NCT00002056 -NCT00001911 -NCT00002062 -NCT00001915 -NCT00002063 -NCT00001916 -NCT00002068 -NCT00001918 -NCT00002082 -NCT00001921 -NCT00002085 -NCT00001922 -NCT00002088 -NCT00001923 -NCT00002101 -NCT00001925 -NCT00002102 -NCT00001926 -NCT00002103 -NCT00001927 -NCT00002104 -NCT00001928 -NCT00002116 -NCT00001929 -NCT00002120 -NCT00001930 -NCT00002121 -NCT00001931 -NCT00002136 -NCT00001932 -NCT00002137 -NCT00001933 -NCT00002138 -NCT00001934 -NCT00002140 -NCT00001936 -NCT00002144 -NCT00001940 -NCT00002177 -NCT00001946 -NCT00002181 -NCT00001950 -NCT00002182 -NCT00001951 -NCT00002219 -NCT00001952 -NCT00002248 -NCT00001953 -NCT00002252 -NCT00001954 -NCT00002253 -NCT00001955 -NCT00002258 -NCT00001957 -NCT00002273 -NCT00001960 -NCT00002274 -NCT00001961 -NCT00002297 -NCT00001963 -NCT00002317 -NCT00001965 -NCT00002331 -NCT00001966 -NCT00002340 -NCT00001968 -NCT00002342 -NCT00001969 -NCT00002343 -NCT00001971 -NCT00002404 -NCT00001972 -NCT00002408 -NCT00001973 -NCT00002426 -NCT00001975 -NCT00002434 -NCT00001976 -NCT00002444 -NCT00001977 -NCT00002459 -NCT00001981 -NCT00002471 -NCT00001982 -NCT00002478 -NCT00001985 -NCT00002490 -NCT00001986 -NCT00003000 -NCT00002493 -NCT00002742 -NCT00002495 -NCT00002735 -NCT00002496 -NCT00002744 -NCT00002502 -NCT00002746 -NCT00002511 -NCT00002749 -NCT00002514 -NCT00002755 -NCT00002523 -NCT00002759 -NCT00002528 -NCT00002761 -NCT00002529 -NCT00002762 -NCT00002536 -NCT00002764 -NCT00002537 -NCT00002766 -NCT00002542 -NCT00002771 -NCT00002548 -NCT00002772 -NCT00002550 -NCT00002774 -NCT00002555 -NCT00002777 -NCT00002562 -NCT00002783 -NCT00002564 -NCT00002784 -NCT00002569 -NCT00002791 -NCT00002575 -NCT00002800 -NCT00002580 -NCT00002803 -NCT00002581 -NCT00002804 -NCT00002590 -NCT00002806 -NCT00002593 -NCT00002809 -NCT00002598 -NCT00002810 -NCT00002602 -NCT00002813 -NCT00002608 -NCT00002814 -NCT00002615 -NCT00002827 -NCT00002616 -NCT00002835 -NCT00002619 -NCT00002839 -NCT00002620 -NCT00002849 -NCT00002622 -NCT00002850 -NCT00002623 -NCT00002864 -NCT00002628 -NCT00002869 -NCT00002630 -NCT00002872 -NCT00002633 -NCT00002873 -NCT00002639 -NCT00002875 -NCT00002641 -NCT00002878 -NCT00002646 -NCT00002879 -NCT00002651 -NCT00002882 -NCT00002653 -NCT00002890 -NCT00002654 -NCT00002908 -NCT00002659 -NCT00002916 -NCT00002663 -NCT00002917 -NCT00002665 -NCT00002919 -NCT00002670 -NCT00002920 -NCT00002676 -NCT00002934 -NCT00002680 -NCT00002946 -NCT00002681 -NCT00002967 -NCT00002682 -NCT00002968 -NCT00002687 -NCT00002971 -NCT00002689 -NCT00002974 -NCT00002701 -NCT00002985 -NCT00002706 -NCT00002990 -NCT00002708 -NCT00002996 -NCT00002718 -NCT00002999 -NCT00002725 -NCT00003511 -NCT00003002 -NCT00003257 -NCT00003012 -NCT00003253 -NCT00003013 -NCT00003266 -NCT00003017 -NCT00003267 -NCT00003018 -NCT00003276 -NCT00003022 -NCT00003279 -NCT00003025 -NCT00003280 -NCT00003031 -NCT00003292 -NCT00003039 -NCT00003296 -NCT00003041 -NCT00003298 -NCT00003049 -NCT00003315 -NCT00003052 -NCT00003322 -NCT00003055 -NCT00003325 -NCT00003056 -NCT00003328 -NCT00003057 -NCT00003331 -NCT00003058 -NCT00003335 -NCT00003065 -NCT00003337 -NCT00003067 -NCT00003338 -NCT00003072 -NCT00003342 -NCT00003075 -NCT00003346 -NCT00003078 -NCT00003353 -NCT00003082 -NCT00003364 -NCT00003088 -NCT00003368 -NCT00003093 -NCT00003369 -NCT00003094 -NCT00003372 -NCT00003098 -NCT00003375 -NCT00003099 -NCT00003376 -NCT00003105 -NCT00003377 -NCT00003115 -NCT00003379 -NCT00003116 -NCT00003381 -NCT00003117 -NCT00003384 -NCT00003118 -NCT00003387 -NCT00003124 -NCT00003388 -NCT00003125 -NCT00003391 -NCT00003126 -NCT00003396 -NCT00003128 -NCT00003409 -NCT00003129 -NCT00003410 -NCT00003132 -NCT00003416 -NCT00003133 -NCT00003418 -NCT00003137 -NCT00003434 -NCT00003139 -NCT00003440 -NCT00003145 -NCT00003443 -NCT00003153 -NCT00003445 -NCT00003157 -NCT00003449 -NCT00003162 -NCT00003453 -NCT00003172 -NCT00003463 -NCT00003176 -NCT00003465 -NCT00003190 -NCT00003466 -NCT00003199 -NCT00003468 -NCT00003209 -NCT00003470 -NCT00003210 -NCT00003471 -NCT00003213 -NCT00003476 -NCT00003217 -NCT00003489 -NCT00003232 -NCT00003494 -NCT00003234 -NCT00003509 -NCT00003237 -NCT00004041 -NCT00003519 -NCT00003798 -NCT00003520 -NCT00003797 -NCT00003524 -NCT00003805 -NCT00003537 -NCT00003809 -NCT00003539 -NCT00003814 -NCT00003549 -NCT00003816 -NCT00003557 -NCT00003817 -NCT00003564 -NCT00003820 -NCT00003565 -NCT00003824 -NCT00003568 -NCT00003825 -NCT00003571 -NCT00003829 -NCT00003576 -NCT00003830 -NCT00003590 -NCT00003831 -NCT00003591 -NCT00003838 -NCT00003593 -NCT00003842 -NCT00003595 -NCT00003851 -NCT00003596 -NCT00003853 -NCT00003598 -NCT00003856 -NCT00003612 -NCT00003857 -NCT00003615 -NCT00003862 -NCT00003621 -NCT00003863 -NCT00003623 -NCT00003868 -NCT00003640 -NCT00003875 -NCT00003642 -NCT00003876 -NCT00003645 -NCT00003877 -NCT00003654 -NCT00003881 -NCT00003658 -NCT00003887 -NCT00003659 -NCT00003896 -NCT00003667 -NCT00003899 -NCT00003669 -NCT00003906 -NCT00003675 -NCT00003908 -NCT00003677 -NCT00003909 -NCT00003684 -NCT00003923 -NCT00003685 -NCT00003930 -NCT00003686 -NCT00003934 -NCT00003694 -NCT00003936 -NCT00003700 -NCT00003937 -NCT00003701 -NCT00003938 -NCT00003702 -NCT00003941 -NCT00003703 -NCT00003945 -NCT00003714 -NCT00003953 -NCT00003719 -NCT00003954 -NCT00003740 -NCT00003957 -NCT00003742 -NCT00003966 -NCT00003754 -NCT00003970 -NCT00003759 -NCT00003977 -NCT00003760 -NCT00003984 -NCT00003761 -NCT00003985 -NCT00003771 -NCT00003992 -NCT00003775 -NCT00003995 -NCT00003778 -NCT00004010 -NCT00003779 -NCT00004013 -NCT00003780 -NCT00004017 -NCT00003781 -NCT00004028 -NCT00003782 -NCT00004033 -NCT00003784 -NCT00004553 -NCT00004048 -NCT00004276 -NCT00004050 -NCT00004275 -NCT00004054 -NCT00004287 -NCT00004062 -NCT00004296 -NCT00004063 -NCT00004297 -NCT00004067 -NCT00004313 -NCT00004068 -NCT00004317 -NCT00004074 -NCT00004326 -NCT00004080 -NCT00004332 -NCT00004088 -NCT00004334 -NCT00004089 -NCT00004335 -NCT00004091 -NCT00004338 -NCT00004094 -NCT00004339 -NCT00004099 -NCT00004341 -NCT00004113 -NCT00004343 -NCT00004122 -NCT00004351 -NCT00004125 -NCT00004357 -NCT00004128 -NCT00004359 -NCT00004139 -NCT00004364 -NCT00004143 -NCT00004365 -NCT00004146 -NCT00004381 -NCT00004148 -NCT00004387 -NCT00004154 -NCT00004392 -NCT00004157 -NCT00004399 -NCT00004161 -NCT00004401 -NCT00004163 -NCT00004402 -NCT00004164 -NCT00004403 -NCT00004165 -NCT00004404 -NCT00004177 -NCT00004407 -NCT00004192 -NCT00004408 -NCT00004194 -NCT00004410 -NCT00004197 -NCT00004414 -NCT00004202 -NCT00004416 -NCT00004203 -NCT00004418 -NCT00004204 -NCT00004428 -NCT00004205 -NCT00004429 -NCT00004211 -NCT00004431 -NCT00004216 -NCT00004438 -NCT00004218 -NCT00004441 -NCT00004219 -NCT00004444 -NCT00004223 -NCT00004451 -NCT00004226 -NCT00004465 -NCT00004227 -NCT00004466 -NCT00004232 -NCT00004467 -NCT00004235 -NCT00004475 -NCT00004236 -NCT00004478 -NCT00004245 -NCT00004480 -NCT00004246 -NCT00004485 -NCT00004248 -NCT00004487 -NCT00004250 -NCT00004492 -NCT00004254 -NCT00004493 -NCT00004259 -NCT00004494 -NCT00004260 -NCT00004496 -NCT00004266 -NCT00004497 -NCT00004268 -NCT00004533 -NCT00004274 -NCT00005086 -NCT00004554 -NCT00004826 -NCT00004557 -NCT00004825 -NCT00004562 -NCT00004829 -NCT00004563 -NCT00004838 -NCT00004566 -NCT00004842 -NCT00004567 -NCT00004843 -NCT00004571 -NCT00004844 -NCT00004572 -NCT00004848 -NCT00004576 -NCT00004850 -NCT00004635 -NCT00004851 -NCT00004637 -NCT00004856 -NCT00004645 -NCT00004857 -NCT00004648 -NCT00004862 -NCT00004649 -NCT00004865 -NCT00004654 -NCT00004866 -NCT00004669 -NCT00004868 -NCT00004670 -NCT00004883 -NCT00004682 -NCT00004888 -NCT00004685 -NCT00004890 -NCT00004686 -NCT00004895 -NCT00004689 -NCT00004896 -NCT00004694 -NCT00004899 -NCT00004696 -NCT00004900 -NCT00004727 -NCT00004901 -NCT00004728 -NCT00004911 -NCT00004729 -NCT00004912 -NCT00004731 -NCT00004925 -NCT00004732 -NCT00004928 -NCT00004733 -NCT00004929 -NCT00004734 -NCT00004937 -NCT00004736 -NCT00004982 -NCT00004738 -NCT00004983 -NCT00004740 -NCT00004984 -NCT00004748 -NCT00004991 -NCT00004751 -NCT00004992 -NCT00004755 -NCT00005001 -NCT00004760 -NCT00005003 -NCT00004762 -NCT00005004 -NCT00004763 -NCT00005005 -NCT00004769 -NCT00005007 -NCT00004770 -NCT00005009 -NCT00004776 -NCT00005011 -NCT00004784 -NCT00005013 -NCT00004785 -NCT00005016 -NCT00004787 -NCT00005033 -NCT00004788 -NCT00005035 -NCT00004793 -NCT00005039 -NCT00004796 -NCT00005047 -NCT00004797 -NCT00005053 -NCT00004805 -NCT00005066 -NCT00004806 -NCT00005070 -NCT00004808 -NCT00005072 -NCT00004809 -NCT00005075 -NCT00004810 -NCT00005079 -NCT00004812 -NCT00005081 -NCT00004817 -NCT00005796 -NCT00005090 -NCT00005595 -NCT00005100 -NCT00005589 -NCT00005101 -NCT00005596 -NCT00005102 -NCT00005599 -NCT00005103 -NCT00005607 -NCT00005105 -NCT00005610 -NCT00005108 -NCT00005622 -NCT00005111 -NCT00005624 -NCT00005112 -NCT00005625 -NCT00005113 -NCT00005628 -NCT00005117 -NCT00005629 -NCT00005129 -NCT00005630 -NCT00005136 -NCT00005631 -NCT00005141 -NCT00005632 -NCT00005176 -NCT00005635 -NCT00005189 -NCT00005636 -NCT00005190 -NCT00005637 -NCT00005199 -NCT00005640 -NCT00005200 -NCT00005647 -NCT00005202 -NCT00005652 -NCT00005203 -NCT00005654 -NCT00005210 -NCT00005655 -NCT00005243 -NCT00005657 -NCT00005246 -NCT00005660 -NCT00005251 -NCT00005663 -NCT00005267 -NCT00005664 -NCT00005271 -NCT00005665 -NCT00005289 -NCT00005669 -NCT00005293 -NCT00005674 -NCT00005299 -NCT00005730 -NCT00005313 -NCT00005736 -NCT00005317 -NCT00005739 -NCT00005322 -NCT00005754 -NCT00005345 -NCT00005760 -NCT00005348 -NCT00005761 -NCT00005357 -NCT00005765 -NCT00005361 -NCT00005766 -NCT00005372 -NCT00005768 -NCT00005373 -NCT00005771 -NCT00005381 -NCT00005772 -NCT00005402 -NCT00005773 -NCT00005470 -NCT00005774 -NCT00005475 -NCT00005775 -NCT00005479 -NCT00005776 -NCT00005536 -NCT00005777 -NCT00005541 -NCT00005778 -NCT00005543 -NCT00005781 -NCT00005559 -NCT00005782 -NCT00005564 -NCT00005783 -NCT00005567 -NCT00005784 -NCT00005570 -NCT00005785 -NCT00005571 -NCT00005786 -NCT00005574 -NCT00005788 -NCT00005575 -NCT00005791 -NCT00005576 -NCT00005793 -NCT00005579 -NCT00006128 -NCT00005797 -NCT00005957 -NCT00005799 -NCT00005951 -NCT00005800 -NCT00005958 -NCT00005802 -NCT00005965 -NCT00005805 -NCT00005969 -NCT00005808 -NCT00005970 -NCT00005810 -NCT00005974 -NCT00005812 -NCT00005975 -NCT00005814 -NCT00005985 -NCT00005823 -NCT00005988 -NCT00005826 -NCT00005991 -NCT00005829 -NCT00005997 -NCT00005831 -NCT00005999 -NCT00005832 -NCT00006002 -NCT00005834 -NCT00006014 -NCT00005837 -NCT00006021 -NCT00005842 -NCT00006024 -NCT00005847 -NCT00006026 -NCT00005848 -NCT00006032 -NCT00005849 -NCT00006034 -NCT00005850 -NCT00006038 -NCT00005856 -NCT00006040 -NCT00005862 -NCT00006042 -NCT00005863 -NCT00006044 -NCT00005866 -NCT00006051 -NCT00005869 -NCT00006054 -NCT00005871 -NCT00006055 -NCT00005874 -NCT00006056 -NCT00005880 -NCT00006058 -NCT00005883 -NCT00006059 -NCT00005888 -NCT00006062 -NCT00005889 -NCT00006068 -NCT00005891 -NCT00006070 -NCT00005892 -NCT00006071 -NCT00005893 -NCT00006072 -NCT00005902 -NCT00006077 -NCT00005903 -NCT00006078 -NCT00005905 -NCT00006079 -NCT00005907 -NCT00006080 -NCT00005910 -NCT00006081 -NCT00005917 -NCT00006083 -NCT00005919 -NCT00006088 -NCT00005921 -NCT00006089 -NCT00005924 -NCT00006091 -NCT00005925 -NCT00006096 -NCT00005926 -NCT00006097 -NCT00005927 -NCT00006101 -NCT00005933 -NCT00006103 -NCT00005937 -NCT00006104 -NCT00005938 -NCT00006105 -NCT00005940 -NCT00006110 -NCT00005941 -NCT00006111 -NCT00005945 -NCT00006112 -NCT00005947 -NCT00006118 -NCT00005949 -NCT00006124 -NCT00005950 -NCT00006721 -NCT00006131 -NCT00006343 -NCT00006132 -NCT00006342 -NCT00006135 -NCT00006345 -NCT00006146 -NCT00006348 -NCT00006148 -NCT00006351 -NCT00006150 -NCT00006352 -NCT00006155 -NCT00006355 -NCT00006156 -NCT00006360 -NCT00006157 -NCT00006363 -NCT00006158 -NCT00006376 -NCT00006159 -NCT00006379 -NCT00006160 -NCT00006381 -NCT00006164 -NCT00006386 -NCT00006168 -NCT00006388 -NCT00006173 -NCT00006395 -NCT00006174 -NCT00006398 -NCT00006175 -NCT00006400 -NCT00006180 -NCT00006401 -NCT00006184 -NCT00006411 -NCT00006188 -NCT00006413 -NCT00006193 -NCT00006414 -NCT00006198 -NCT00006417 -NCT00006202 -NCT00006421 -NCT00006213 -NCT00006422 -NCT00006214 -NCT00006424 -NCT00006224 -NCT00006425 -NCT00006226 -NCT00006426 -NCT00006228 -NCT00006428 -NCT00006239 -NCT00006429 -NCT00006240 -NCT00006430 -NCT00006242 -NCT00006432 -NCT00006251 -NCT00006435 -NCT00006252 -NCT00006436 -NCT00006259 -NCT00006438 -NCT00006263 -NCT00006444 -NCT00006269 -NCT00006445 -NCT00006270 -NCT00006447 -NCT00006271 -NCT00006450 -NCT00006272 -NCT00006451 -NCT00006278 -NCT00006455 -NCT00006279 -NCT00006460 -NCT00006289 -NCT00006472 -NCT00006292 -NCT00006474 -NCT00006295 -NCT00006476 -NCT00006299 -NCT00006478 -NCT00006305 -NCT00006481 -NCT00006306 -NCT00006482 -NCT00006312 -NCT00006488 -NCT00006329 -NCT00006501 -NCT00006331 -NCT00006505 -NCT00006333 -NCT00006516 -NCT00006334 -NCT00006518 -NCT00006335 -NCT00006656 -NCT00006336 -NCT00006669 -NCT00006337 -NCT00006695 -NCT00006341 -NCT00016107 -NCT00006890 -NCT00010764 -NCT00006916 -NCT00010517 -NCT00007020 -NCT00010816 -NCT00007150 -NCT00010933 -NCT00007163 -NCT00010946 -NCT00007189 -NCT00011063 -NCT00007280 -NCT00011258 -NCT00007319 -NCT00011323 -NCT00007345 -NCT00011336 -NCT00007475 -NCT00011570 -NCT00007501 -NCT00011648 -NCT00007670 -NCT00011700 -NCT00007800 -NCT00011752 -NCT00007904 -NCT00011765 -NCT00007982 -NCT00011960 -NCT00007995 -NCT00011973 -NCT00008112 -NCT00012259 -NCT00008164 -NCT00012350 -NCT00008177 -NCT00012376 -NCT00008216 -NCT00012857 -NCT00008229 -NCT00013156 -NCT00008307 -NCT00013377 -NCT00008424 -NCT00013390 -NCT00008463 -NCT00013416 -NCT00008476 -NCT00013468 -NCT00008515 -NCT00013546 -NCT00008697 -NCT00013559 -NCT00008736 -NCT00013650 -NCT00008749 -NCT00013689 -NCT00008814 -NCT00013741 -NCT00008827 -NCT00013793 -NCT00009035 -NCT00013832 -NCT00009048 -NCT00013845 -NCT00009204 -NCT00013923 -NCT00009243 -NCT00014235 -NCT00009529 -NCT00014430 -NCT00009542 -NCT00014469 -NCT00009555 -NCT00014495 -NCT00009568 -NCT00014508 -NCT00009581 -NCT00014612 -NCT00009620 -NCT00014638 -NCT00009633 -NCT00014794 -NCT00009646 -NCT00014950 -NCT00009659 -NCT00014976 -NCT00009672 -NCT00015431 -NCT00009698 -NCT00015470 -NCT00009763 -NCT00015587 -NCT00009789 -NCT00015613 -NCT00009841 -NCT00015782 -NCT00009945 -NCT00015795 -NCT00009958 -NCT00015834 -NCT00009984 -NCT00015925 -NCT00009997 -NCT00015938 -NCT00010192 -NCT00016081 -NCT00010439 -NCT00016094 -NCT00010465 -NCT00025909 -NCT00016159 -NCT00021567 -NCT00016367 -NCT00021541 -NCT00016419 -NCT00021580 -NCT00016432 -NCT00021645 -NCT00016471 -NCT00021671 -NCT00016497 -NCT00021723 -NCT00016627 -NCT00021749 -NCT00016653 -NCT00021827 -NCT00016679 -NCT00021866 -NCT00016848 -NCT00021918 -NCT00016952 -NCT00022048 -NCT00017329 -NCT00022451 -NCT00017342 -NCT00022581 -NCT00017394 -NCT00022607 -NCT00017472 -NCT00022672 -NCT00017550 -NCT00022737 -NCT00017589 -NCT00022841 -NCT00017810 -NCT00022945 -NCT00017862 -NCT00023010 -NCT00017914 -NCT00023036 -NCT00017927 -NCT00023049 -NCT00017940 -NCT00023062 -NCT00017979 -NCT00023101 -NCT00018070 -NCT00023192 -NCT00018109 -NCT00023296 -NCT00018174 -NCT00023374 -NCT00018408 -NCT00023439 -NCT00018447 -NCT00023452 -NCT00018486 -NCT00023491 -NCT00018525 -NCT00023569 -NCT00018564 -NCT00023764 -NCT00018889 -NCT00023998 -NCT00019084 -NCT00024102 -NCT00019110 -NCT00024115 -NCT00019331 -NCT00024154 -NCT00019383 -NCT00024440 -NCT00019643 -NCT00024479 -NCT00019812 -NCT00024570 -NCT00019825 -NCT00024791 -NCT00019994 -NCT00024908 -NCT00020111 -NCT00024986 -NCT00020397 -NCT00024999 -NCT00020527 -NCT00025038 -NCT00020605 -NCT00025402 -NCT00020618 -NCT00025428 -NCT00020670 -NCT00025532 -NCT00020709 -NCT00025597 -NCT00020735 -NCT00025610 -NCT00020761 -NCT00025623 -NCT00020865 -NCT00025649 -NCT00020943 -NCT00025662 -NCT00021151 -NCT00025701 -NCT00021255 -NCT00025805 -NCT00021359 -NCT00025870 -NCT00021372 -NCT00025883 -NCT00021528 -NCT00034021 -NCT00025935 -NCT00029822 -NCT00026052 -NCT00029809 -NCT00026065 -NCT00029861 -NCT00026104 -NCT00029939 -NCT00026286 -NCT00029952 -NCT00026312 -NCT00030004 -NCT00026533 -NCT00030108 -NCT00026598 -NCT00030134 -NCT00026637 -NCT00030160 -NCT00026702 -NCT00030199 -NCT00026728 -NCT00030212 -NCT00026741 -NCT00030238 -NCT00026793 -NCT00030277 -NCT00026923 -NCT00030290 -NCT00026962 -NCT00030355 -NCT00027027 -NCT00030394 -NCT00027170 -NCT00030498 -NCT00027209 -NCT00030550 -NCT00027235 -NCT00030589 -NCT00027274 -NCT00030602 -NCT00027287 -NCT00030797 -NCT00027300 -NCT00030940 -NCT00027391 -NCT00030966 -NCT00027560 -NCT00031005 -NCT00027586 -NCT00031096 -NCT00027638 -NCT00031239 -NCT00027794 -NCT00031278 -NCT00027872 -NCT00031655 -NCT00027937 -NCT00031681 -NCT00028028 -NCT00031720 -NCT00028080 -NCT00031837 -NCT00028158 -NCT00032006 -NCT00028184 -NCT00032019 -NCT00028210 -NCT00032097 -NCT00028275 -NCT00032240 -NCT00028340 -NCT00032331 -NCT00028379 -NCT00032383 -NCT00028496 -NCT00032448 -NCT00028535 -NCT00032461 -NCT00028756 -NCT00032513 -NCT00028795 -NCT00032643 -NCT00028847 -NCT00032682 -NCT00028886 -NCT00032877 -NCT00028938 -NCT00032890 -NCT00029003 -NCT00033137 -NCT00029107 -NCT00033189 -NCT00029120 -NCT00033280 -NCT00029146 -NCT00033332 -NCT00029159 -NCT00033371 -NCT00029198 -NCT00033462 -NCT00029211 -NCT00033514 -NCT00029315 -NCT00033553 -NCT00029380 -NCT00033774 -NCT00029666 -NCT00033813 -NCT00029731 -NCT00033891 -NCT00029770 -NCT00043316 -NCT00034060 -NCT00039546 -NCT00034242 -NCT00039416 -NCT00034281 -NCT00039676 -NCT00034346 -NCT00039702 -NCT00034424 -NCT00039858 -NCT00034450 -NCT00039962 -NCT00034736 -NCT00040027 -NCT00034762 -NCT00040105 -NCT00034788 -NCT00040131 -NCT00034905 -NCT00040196 -NCT00035269 -NCT00040248 -NCT00035373 -NCT00040326 -NCT00035386 -NCT00040339 -NCT00035451 -NCT00040352 -NCT00035477 -NCT00040378 -NCT00035633 -NCT00040443 -NCT00035789 -NCT00040456 -NCT00035815 -NCT00040560 -NCT00035828 -NCT00040690 -NCT00035854 -NCT00040742 -NCT00036335 -NCT00040755 -NCT00036595 -NCT00040794 -NCT00036608 -NCT00040846 -NCT00036647 -NCT00040872 -NCT00036738 -NCT00040885 -NCT00036764 -NCT00040937 -NCT00036790 -NCT00041067 -NCT00037050 -NCT00041106 -NCT00037154 -NCT00041119 -NCT00037388 -NCT00041587 -NCT00037479 -NCT00041600 -NCT00037557 -NCT00041665 -NCT00037817 -NCT00041899 -NCT00037843 -NCT00041938 -NCT00037921 -NCT00041977 -NCT00037973 -NCT00042042 -NCT00038051 -NCT00042120 -NCT00038064 -NCT00042159 -NCT00038077 -NCT00042172 -NCT00038090 -NCT00042211 -NCT00038116 -NCT00042276 -NCT00038142 -NCT00042549 -NCT00038233 -NCT00042562 -NCT00038350 -NCT00042575 -NCT00038402 -NCT00042705 -NCT00038415 -NCT00042770 -NCT00038623 -NCT00042809 -NCT00038792 -NCT00042822 -NCT00038857 -NCT00042835 -NCT00039117 -NCT00042848 -NCT00039130 -NCT00042952 -NCT00039182 -NCT00042991 -NCT00039312 -NCT00043134 -NCT00039338 -NCT00043186 -NCT00039364 -NCT00043303 -NCT00039377 -NCT00051363 -NCT00043394 -NCT00047021 -NCT00043628 -NCT00046995 -NCT00043680 -NCT00047125 -NCT00043719 -NCT00047164 -NCT00043784 -NCT00047190 -NCT00043836 -NCT00047203 -NCT00043849 -NCT00047255 -NCT00043940 -NCT00047268 -NCT00043992 -NCT00047281 -NCT00044057 -NCT00047333 -NCT00044122 -NCT00047554 -NCT00044174 -NCT00047723 -NCT00044226 -NCT00047879 -NCT00044252 -NCT00047918 -NCT00044304 -NCT00047957 -NCT00044369 -NCT00048061 -NCT00044473 -NCT00048347 -NCT00044629 -NCT00048360 -NCT00044733 -NCT00048399 -NCT00044798 -NCT00048490 -NCT00044811 -NCT00048542 -NCT00044824 -NCT00048685 -NCT00044863 -NCT00048815 -NCT00044876 -NCT00048880 -NCT00044954 -NCT00049036 -NCT00045006 -NCT00049114 -NCT00045032 -NCT00049179 -NCT00045136 -NCT00049192 -NCT00045201 -NCT00049283 -NCT00045305 -NCT00049296 -NCT00045396 -NCT00049374 -NCT00045435 -NCT00049504 -NCT00045708 -NCT00049517 -NCT00045812 -NCT00049543 -NCT00045838 -NCT00049556 -NCT00045877 -NCT00049673 -NCT00045942 -NCT00049764 -NCT00045955 -NCT00049803 -NCT00045981 -NCT00049816 -NCT00045994 -NCT00049829 -NCT00046072 -NCT00049920 -NCT00046124 -NCT00050024 -NCT00046189 -NCT00050167 -NCT00046254 -NCT00050193 -NCT00046397 -NCT00050219 -NCT00046410 -NCT00050245 -NCT00046436 -NCT00050310 -NCT00046527 -NCT00050362 -NCT00046579 -NCT00050479 -NCT00046618 -NCT00050609 -NCT00046644 -NCT00050752 -NCT00046670 -NCT00050778 -NCT00046683 -NCT00050817 -NCT00046748 -NCT00051311 -NCT00046774 -NCT00051337 -NCT00046930 -NCT00060528 -NCT00051402 -NCT00055835 -NCT00051597 -NCT00055692 -NCT00051623 -NCT00055848 -NCT00051636 -NCT00055874 -NCT00051792 -NCT00055926 -NCT00051961 -NCT00055991 -NCT00052221 -NCT00056160 -NCT00052286 -NCT00056199 -NCT00052299 -NCT00056225 -NCT00052520 -NCT00056329 -NCT00052624 -NCT00056355 -NCT00052754 -NCT00056433 -NCT00052897 -NCT00056576 -NCT00052910 -NCT00056602 -NCT00052962 -NCT00056628 -NCT00053040 -NCT00056654 -NCT00053053 -NCT00056719 -NCT00053196 -NCT00056771 -NCT00053287 -NCT00056784 -NCT00053339 -NCT00056862 -NCT00053469 -NCT00057018 -NCT00053482 -NCT00057122 -NCT00053625 -NCT00057161 -NCT00053742 -NCT00057434 -NCT00053846 -NCT00057694 -NCT00053898 -NCT00057746 -NCT00053989 -NCT00057798 -NCT00054054 -NCT00057811 -NCT00054067 -NCT00057993 -NCT00054132 -NCT00058006 -NCT00054158 -NCT00058240 -NCT00054236 -NCT00058461 -NCT00054301 -NCT00058526 -NCT00054327 -NCT00058604 -NCT00054431 -NCT00058656 -NCT00054457 -NCT00058760 -NCT00054548 -NCT00058812 -NCT00054587 -NCT00059410 -NCT00054639 -NCT00059423 -NCT00054665 -NCT00059449 -NCT00054704 -NCT00059501 -NCT00054730 -NCT00059592 -NCT00054756 -NCT00059748 -NCT00054925 -NCT00059787 -NCT00055029 -NCT00059826 -NCT00055042 -NCT00059995 -NCT00055055 -NCT00060138 -NCT00055120 -NCT00060242 -NCT00055198 -NCT00060255 -NCT00055302 -NCT00060346 -NCT00055380 -NCT00060372 -NCT00055419 -NCT00060398 -NCT00055445 -NCT00060411 -NCT00055484 -NCT00060463 -NCT00055549 -NCT00060515 -NCT00055588 -NCT00069186 -NCT00060580 -NCT00065052 -NCT00060593 -NCT00065013 -NCT00060606 -NCT00065078 -NCT00060697 -NCT00065143 -NCT00060749 -NCT00065169 -NCT00060970 -NCT00065182 -NCT00060996 -NCT00065221 -NCT00061022 -NCT00065234 -NCT00061048 -NCT00065273 -NCT00061269 -NCT00065286 -NCT00061373 -NCT00065299 -NCT00061581 -NCT00065364 -NCT00061633 -NCT00065585 -NCT00061789 -NCT00065858 -NCT00061815 -NCT00065949 -NCT00061893 -NCT00065975 -NCT00061906 -NCT00066079 -NCT00061932 -NCT00066144 -NCT00061958 -NCT00066183 -NCT00062062 -NCT00066248 -NCT00062075 -NCT00066573 -NCT00062140 -NCT00066690 -NCT00062231 -NCT00066794 -NCT00062348 -NCT00066807 -NCT00062439 -NCT00066846 -NCT00062465 -NCT00066911 -NCT00062504 -NCT00067145 -NCT00062569 -NCT00067327 -NCT00062582 -NCT00067431 -NCT00062595 -NCT00067444 -NCT00062621 -NCT00067496 -NCT00062764 -NCT00067509 -NCT00062881 -NCT00067691 -NCT00062985 -NCT00067821 -NCT00063024 -NCT00067925 -NCT00063076 -NCT00068029 -NCT00063115 -NCT00068042 -NCT00063141 -NCT00068055 -NCT00063180 -NCT00068146 -NCT00063232 -NCT00068159 -NCT00063388 -NCT00068263 -NCT00063401 -NCT00068315 -NCT00063765 -NCT00068341 -NCT00063817 -NCT00068419 -NCT00063856 -NCT00068484 -NCT00063882 -NCT00068510 -NCT00063895 -NCT00068523 -NCT00064090 -NCT00068575 -NCT00064285 -NCT00068588 -NCT00064337 -NCT00068614 -NCT00064363 -NCT00068757 -NCT00064467 -NCT00068822 -NCT00064649 -NCT00068861 -NCT00064766 -NCT00068887 -NCT00064961 -NCT00069056 -NCT00064987 -NCT00077805 -NCT00069199 -NCT00073723 -NCT00069303 -NCT00073541 -NCT00069329 -NCT00073749 -NCT00069550 -NCT00073775 -NCT00069589 -NCT00073788 -NCT00069680 -NCT00073801 -NCT00069823 -NCT00073944 -NCT00069914 -NCT00074282 -NCT00069966 -NCT00074373 -NCT00070057 -NCT00074633 -NCT00070135 -NCT00074685 -NCT00070200 -NCT00074711 -NCT00070278 -NCT00074880 -NCT00070317 -NCT00074932 -NCT00070473 -NCT00075023 -NCT00070499 -NCT00075114 -NCT00070538 -NCT00075166 -NCT00070551 -NCT00075205 -NCT00070564 -NCT00075244 -NCT00070577 -NCT00075335 -NCT00070655 -NCT00075387 -NCT00070694 -NCT00075439 -NCT00070707 -NCT00075465 -NCT00070733 -NCT00075478 -NCT00070902 -NCT00075608 -NCT00070993 -NCT00075621 -NCT00071227 -NCT00075686 -NCT00071305 -NCT00075803 -NCT00071396 -NCT00075816 -NCT00071435 -NCT00076024 -NCT00071526 -NCT00076271 -NCT00071786 -NCT00076336 -NCT00071838 -NCT00076414 -NCT00071942 -NCT00076440 -NCT00071968 -NCT00076505 -NCT00071994 -NCT00076557 -NCT00072020 -NCT00076674 -NCT00072176 -NCT00076726 -NCT00072293 -NCT00076752 -NCT00072462 -NCT00076960 -NCT00072475 -NCT00077012 -NCT00072501 -NCT00077038 -NCT00072592 -NCT00077064 -NCT00072605 -NCT00077103 -NCT00072683 -NCT00077116 -NCT00072709 -NCT00077181 -NCT00072748 -NCT00077194 -NCT00072800 -NCT00077207 -NCT00072826 -NCT00077311 -NCT00072904 -NCT00077350 -NCT00072969 -NCT00077376 -NCT00073073 -NCT00077493 -NCT00073190 -NCT00077532 -NCT00073242 -NCT00077545 -NCT00073463 -NCT00077558 -NCT00073528 -NCT00085709 -NCT00077818 -NCT00081822 -NCT00077909 -NCT00081744 -NCT00077922 -NCT00081835 -NCT00078026 -NCT00081913 -NCT00078078 -NCT00081991 -NCT00078091 -NCT00082017 -NCT00078104 -NCT00082043 -NCT00078195 -NCT00082069 -NCT00078208 -NCT00082108 -NCT00078234 -NCT00082251 -NCT00078338 -NCT00082446 -NCT00078351 -NCT00082654 -NCT00078364 -NCT00082667 -NCT00078403 -NCT00082862 -NCT00078533 -NCT00082914 -NCT00078663 -NCT00082927 -NCT00078715 -NCT00083031 -NCT00078858 -NCT00083135 -NCT00079001 -NCT00083187 -NCT00079053 -NCT00083330 -NCT00079066 -NCT00083356 -NCT00079118 -NCT00083382 -NCT00079235 -NCT00083408 -NCT00079274 -NCT00083499 -NCT00079313 -NCT00083551 -NCT00079378 -NCT00083564 -NCT00079417 -NCT00083577 -NCT00079456 -NCT00083681 -NCT00079521 -NCT00083720 -NCT00079599 -NCT00083798 -NCT00079755 -NCT00083811 -NCT00079768 -NCT00083902 -NCT00079820 -NCT00084097 -NCT00080054 -NCT00084123 -NCT00080067 -NCT00084201 -NCT00080210 -NCT00084279 -NCT00080275 -NCT00084305 -NCT00080288 -NCT00084370 -NCT00080366 -NCT00084409 -NCT00080392 -NCT00084435 -NCT00080405 -NCT00084513 -NCT00080444 -NCT00084656 -NCT00080483 -NCT00084838 -NCT00080535 -NCT00084916 -NCT00080574 -NCT00084981 -NCT00080600 -NCT00085020 -NCT00080613 -NCT00085098 -NCT00080756 -NCT00085124 -NCT00080860 -NCT00085189 -NCT00080925 -NCT00085202 -NCT00081263 -NCT00085293 -NCT00081341 -NCT00085449 -NCT00081432 -NCT00085475 -NCT00081575 -NCT00085657 -NCT00081640 -NCT00085683 -NCT00081731 -NCT00095472 -NCT00085917 -NCT00091494 -NCT00085930 -NCT00091247 -NCT00085995 -NCT00091611 -NCT00086073 -NCT00091702 -NCT00086190 -NCT00091884 -NCT00086359 -NCT00091897 -NCT00086619 -NCT00092144 -NCT00086658 -NCT00092287 -NCT00086671 -NCT00092482 -NCT00086723 -NCT00092521 -NCT00086827 -NCT00092599 -NCT00086840 -NCT00092612 -NCT00086957 -NCT00092625 -NCT00086983 -NCT00092755 -NCT00087074 -NCT00092937 -NCT00087139 -NCT00092976 -NCT00087178 -NCT00093054 -NCT00087204 -NCT00093145 -NCT00087256 -NCT00093158 -NCT00088153 -NCT00093353 -NCT00088309 -NCT00093366 -NCT00088348 -NCT00093418 -NCT00088374 -NCT00093470 -NCT00088426 -NCT00093483 -NCT00088582 -NCT00093600 -NCT00088608 -NCT00093613 -NCT00088699 -NCT00093639 -NCT00088829 -NCT00093743 -NCT00088907 -NCT00093795 -NCT00088959 -NCT00093808 -NCT00089011 -NCT00093860 -NCT00089050 -NCT00093938 -NCT00089167 -NCT00094016 -NCT00089310 -NCT00094055 -NCT00089349 -NCT00094068 -NCT00089401 -NCT00094094 -NCT00089414 -NCT00094120 -NCT00089427 -NCT00094172 -NCT00089531 -NCT00094237 -NCT00089557 -NCT00094354 -NCT00089609 -NCT00094406 -NCT00089739 -NCT00094536 -NCT00089765 -NCT00094562 -NCT00089791 -NCT00094627 -NCT00089830 -NCT00094731 -NCT00090103 -NCT00094887 -NCT00090207 -NCT00094900 -NCT00090337 -NCT00094913 -NCT00090402 -NCT00094939 -NCT00090545 -NCT00094952 -NCT00090896 -NCT00094978 -NCT00091026 -NCT00095082 -NCT00091104 -NCT00095095 -NCT00091130 -NCT00095199 -NCT00091169 -NCT00095459 -NCT00091234 -NCT00174369 -NCT00095563 -NCT00099762 -NCT00095654 -NCT00099593 -NCT00095667 -NCT00099996 -NCT00095693 -NCT00100009 -NCT00095706 -NCT00100061 -NCT00095797 -NCT00100217 -NCT00095836 -NCT00100282 -NCT00095940 -NCT00100321 -NCT00096018 -NCT00100360 -NCT00096122 -NCT00100698 -NCT00096161 -NCT00100802 -NCT00096174 -NCT00100828 -NCT00096213 -NCT00100880 -NCT00096278 -NCT00100919 -NCT00096291 -NCT00100997 -NCT00096369 -NCT00101036 -NCT00096408 -NCT00101114 -NCT00096434 -NCT00171925 -NCT00096473 -NCT00171951 -NCT00096551 -NCT00171964 -NCT00096694 -NCT00172068 -NCT00096798 -NCT00172081 -NCT00096902 -NCT00172107 -NCT00096954 -NCT00172120 -NCT00097162 -NCT00172172 -NCT00097331 -NCT00172341 -NCT00097396 -NCT00172354 -NCT00097422 -NCT00172419 -NCT00097448 -NCT00172445 -NCT00097513 -NCT00172523 -NCT00097526 -NCT00172549 -NCT00097552 -NCT00172588 -NCT00097734 -NCT00172601 -NCT00097760 -NCT00172653 -NCT00097981 -NCT00172666 -NCT00098046 -NCT00172822 -NCT00098072 -NCT00172835 -NCT00098202 -NCT00172952 -NCT00098280 -NCT00173043 -NCT00098384 -NCT00173134 -NCT00098423 -NCT00173186 -NCT00098436 -NCT00173199 -NCT00098475 -NCT00173212 -NCT00098488 -NCT00173264 -NCT00098501 -NCT00173459 -NCT00098527 -NCT00173498 -NCT00098540 -NCT00173628 -NCT00098605 -NCT00173875 -NCT00098670 -NCT00174005 -NCT00098826 -NCT00174018 -NCT00098839 -NCT00174174 -NCT00099255 -NCT00174187 -NCT00099359 -NCT00174252 -NCT00099424 -NCT00174278 -NCT00099463 -NCT00174304 -NCT00099502 -NCT00174330 -NCT00101140 -NCT00171457 -NCT00101153 -NCT00171652 -NCT00101296 -NCT00171665 -NCT00101374 -NCT00171730 -NCT00101595 -NCT00159289 -NCT00159302 -NCT00159341 -NCT00159354 -NCT00159367 -NCT00159406 -NCT00159419 -NCT00159861 -NCT00159913 -NCT00159991 -NCT00160082 -NCT00160264 -NCT00160303 -NCT00160316 -NCT00160433 -NCT00160446 -NCT00160550 -NCT00160693 -NCT00160719 -NCT00160771 -NCT00160797 -NCT00160940 -NCT00161005 -NCT00161031 -NCT00161083 -NCT00161187 -NCT00161200 -NCT00161226 -NCT00161291 -NCT00161304 -NCT00161330 -NCT00161421 -NCT00161447 -NCT00161473 -NCT00161486 -NCT00161902 -NCT00161915 -NCT00161980 -NCT00162513 -NCT00162539 -NCT00162773 -NCT00162825 -NCT00162851 -NCT00162864 -NCT00163007 -NCT00163059 -NCT00163111 -NCT00163189 -NCT00163215 -NCT00163293 -NCT00163306 -NCT00163410 -NCT00163553 -NCT00163566 -NCT00163683 -NCT00163709 -NCT00163943 -NCT00164060 -NCT00164073 -NCT00164125 -NCT00164281 -NCT00164723 -NCT00164957 -NCT00165178 -NCT00165191 -NCT00165490 -NCT00165555 -NCT00165620 -NCT00165646 -NCT00165672 -NCT00165698 -NCT00165828 -NCT00165919 -NCT00165932 -NCT00166205 -NCT00166218 -NCT00166387 -NCT00166400 -NCT00166413 -NCT00166491 -NCT00166543 -NCT00166569 -NCT00166751 -NCT00166777 -NCT00166868 -NCT00166894 -NCT00167219 -NCT00167310 -NCT00167375 -NCT00167596 -NCT00167648 -NCT00167713 -NCT00168051 -NCT00168090 -NCT00168220 -NCT00168350 -NCT00168532 -NCT00168636 -NCT00168714 -NCT00168974 -NCT00169000 -NCT00169169 -NCT00169273 -NCT00169325 -NCT00169702 -NCT00169754 -NCT00169767 -NCT00169897 -NCT00170001 -NCT00170261 -NCT00170339 -NCT00170547 -NCT00170781 -NCT00171093 -NCT00171327 -NCT00171886 -NCT00101621 -NCT00159250 -NCT00101647 -NCT00147147 -NCT00147186 -NCT00147251 -NCT00147277 -NCT00147290 -NCT00147316 -NCT00147342 -NCT00147368 -NCT00147420 -NCT00147433 -NCT00147823 -NCT00148044 -NCT00148109 -NCT00148122 -NCT00148200 -NCT00148213 -NCT00148343 -NCT00148512 -NCT00148668 -NCT00148681 -NCT00148707 -NCT00148733 -NCT00148772 -NCT00148798 -NCT00148837 -NCT00148863 -NCT00148876 -NCT00148915 -NCT00149045 -NCT00149084 -NCT00149136 -NCT00149162 -NCT00149188 -NCT00149305 -NCT00149318 -NCT00149461 -NCT00149565 -NCT00149656 -NCT00149721 -NCT00149838 -NCT00149851 -NCT00149877 -NCT00150033 -NCT00150111 -NCT00150397 -NCT00150644 -NCT00150774 -NCT00150969 -NCT00151034 -NCT00151125 -NCT00151385 -NCT00151437 -NCT00151723 -NCT00151736 -NCT00151801 -NCT00152243 -NCT00152282 -NCT00152321 -NCT00152451 -NCT00152503 -NCT00152581 -NCT00152620 -NCT00152685 -NCT00153062 -NCT00153114 -NCT00153751 -NCT00153777 -NCT00153816 -NCT00153933 -NCT00153972 -NCT00153998 -NCT00154076 -NCT00154102 -NCT00154440 -NCT00154479 -NCT00154505 -NCT00154570 -NCT00154583 -NCT00154596 -NCT00154622 -NCT00154635 -NCT00154830 -NCT00154843 -NCT00154869 -NCT00154934 -NCT00155025 -NCT00155051 -NCT00155077 -NCT00155168 -NCT00155194 -NCT00155311 -NCT00155363 -NCT00155545 -NCT00155740 -NCT00155753 -NCT00155766 -NCT00155792 -NCT00155805 -NCT00155857 -NCT00155870 -NCT00155922 -NCT00156442 -NCT00156520 -NCT00156533 -NCT00156546 -NCT00156559 -NCT00156650 -NCT00156728 -NCT00156767 -NCT00156780 -NCT00156819 -NCT00157105 -NCT00157482 -NCT00157534 -NCT00157586 -NCT00157690 -NCT00158301 -NCT00158366 -NCT00158522 -NCT00158613 -NCT00158665 -NCT00158743 -NCT00101660 -NCT00146679 -NCT00101712 -NCT00146731 -NCT00101725 -NCT00147069 -NCT00101790 -NCT00147082 -NCT00101829 -NCT00136552 -NCT00136643 -NCT00136669 -NCT00136695 -NCT00136708 -NCT00136721 -NCT00136747 -NCT00136773 -NCT00136786 -NCT00136838 -NCT00136877 -NCT00136942 -NCT00136981 -NCT00137319 -NCT00137462 -NCT00137722 -NCT00137839 -NCT00137995 -NCT00138099 -NCT00138125 -NCT00138138 -NCT00138164 -NCT00138385 -NCT00138476 -NCT00138684 -NCT00138918 -NCT00139113 -NCT00139178 -NCT00139282 -NCT00139425 -NCT00139685 -NCT00139776 -NCT00139828 -NCT00139880 -NCT00139893 -NCT00140010 -NCT00140088 -NCT00140101 -NCT00140140 -NCT00140153 -NCT00140205 -NCT00140231 -NCT00140309 -NCT00140413 -NCT00140439 -NCT00140491 -NCT00140517 -NCT00140556 -NCT00140569 -NCT00140647 -NCT00140699 -NCT00140738 -NCT00140868 -NCT00140998 -NCT00141089 -NCT00141843 -NCT00141869 -NCT00141882 -NCT00141960 -NCT00141986 -NCT00142038 -NCT00142077 -NCT00142090 -NCT00142272 -NCT00142363 -NCT00142402 -NCT00142428 -NCT00142558 -NCT00142584 -NCT00142610 -NCT00142792 -NCT00142805 -NCT00142987 -NCT00143026 -NCT00143039 -NCT00143052 -NCT00143078 -NCT00143221 -NCT00143416 -NCT00143546 -NCT00143598 -NCT00143611 -NCT00143715 -NCT00143741 -NCT00143754 -NCT00143793 -NCT00143949 -NCT00143988 -NCT00144196 -NCT00144235 -NCT00144313 -NCT00144339 -NCT00144391 -NCT00144404 -NCT00144417 -NCT00144456 -NCT00145080 -NCT00145288 -NCT00145405 -NCT00145483 -NCT00145691 -NCT00145886 -NCT00145938 -NCT00145977 -NCT00146042 -NCT00146055 -NCT00146120 -NCT00146146 -NCT00146172 -NCT00146185 -NCT00146211 -NCT00146354 -NCT00146367 -NCT00146536 -NCT00146549 -NCT00147095 -NCT00101920 -NCT00132561 -NCT00101933 -NCT00132613 -NCT00102089 -NCT00132951 -NCT00102102 -NCT00133276 -NCT00102154 -NCT00133406 -NCT00102258 -NCT00133419 -NCT00102401 -NCT00133432 -NCT00102453 -NCT00133510 -NCT00102492 -NCT00133562 -NCT00102557 -NCT00133575 -NCT00102570 -NCT00133588 -NCT00102596 -NCT00133679 -NCT00102661 -NCT00133783 -NCT00102739 -NCT00133809 -NCT00102765 -NCT00133835 -NCT00102791 -NCT00133991 -NCT00102817 -NCT00134004 -NCT00102882 -NCT00134017 -NCT00102908 -NCT00134043 -NCT00102934 -NCT00134069 -NCT00103155 -NCT00134173 -NCT00103181 -NCT00134199 -NCT00103194 -NCT00134238 -NCT00103207 -NCT00134420 -NCT00103233 -NCT00134485 -NCT00103259 -NCT00134511 -NCT00103272 -NCT00134537 -NCT00103285 -NCT00134550 -NCT00103298 -NCT00134680 -NCT00103324 -NCT00134732 -NCT00103415 -NCT00134745 -NCT00103506 -NCT00134784 -NCT00103558 -NCT00134823 -NCT00103740 -NCT00135122 -NCT00103792 -NCT00135135 -NCT00103818 -NCT00135148 -NCT00103844 -NCT00135200 -NCT00104000 -NCT00135551 -NCT00104065 -NCT00135603 -NCT00104299 -NCT00135707 -NCT00104468 -NCT00135733 -NCT00104520 -NCT00135915 -NCT00104572 -NCT00136032 -NCT00104611 -NCT00136058 -NCT00104923 -NCT00136084 -NCT00104949 -NCT00136110 -NCT00104962 -NCT00136305 -NCT00104975 -NCT00131495 -NCT00131508 -NCT00131586 -NCT00131911 -NCT00131963 -NCT00131989 -NCT00132015 -NCT00132080 -NCT00132158 -NCT00132171 -NCT00132236 -NCT00132327 -NCT00132340 -NCT00132366 -NCT00132405 -NCT00132444 -NCT00132496 -NCT00132548 -NCT00136539 -NCT00105001 -NCT00130507 -NCT00105066 -NCT00130533 -NCT00105105 -NCT00130572 -NCT00105131 -NCT00130611 -NCT00105222 -NCT00130689 -NCT00105326 -NCT00130741 -NCT00105378 -NCT00130949 -NCT00105404 -NCT00131014 -NCT00105417 -NCT00131027 -NCT00105430 -NCT00131053 -NCT00105482 -NCT00131157 -NCT00105508 -NCT00131183 -NCT00105547 -NCT00131274 -NCT00105703 -NCT00131482 -NCT00105742 -NCT00124020 -NCT00124033 -NCT00124384 -NCT00124410 -NCT00124579 -NCT00124605 -NCT00124722 -NCT00124813 -NCT00124930 -NCT00125164 -NCT00125190 -NCT00125281 -NCT00125437 -NCT00125476 -NCT00125489 -NCT00125658 -NCT00125671 -NCT00125788 -NCT00125918 -NCT00125957 -NCT00126035 -NCT00126048 -NCT00126139 -NCT00126191 -NCT00126243 -NCT00126386 -NCT00126399 -NCT00126464 -NCT00126503 -NCT00126581 -NCT00126620 -NCT00126646 -NCT00126698 -NCT00126763 -NCT00126841 -NCT00126867 -NCT00126945 -NCT00126958 -NCT00127205 -NCT00127257 -NCT00127322 -NCT00127335 -NCT00127374 -NCT00127439 -NCT00127465 -NCT00127517 -NCT00127608 -NCT00127634 -NCT00127686 -NCT00127842 -NCT00127933 -NCT00127985 -NCT00128011 -NCT00128141 -NCT00128154 -NCT00128193 -NCT00128232 -NCT00128271 -NCT00128310 -NCT00128336 -NCT00128362 -NCT00128492 -NCT00128557 -NCT00128661 -NCT00128687 -NCT00128700 -NCT00128726 -NCT00128739 -NCT00128895 -NCT00128921 -NCT00128973 -NCT00129376 -NCT00129389 -NCT00129428 -NCT00129506 -NCT00129532 -NCT00129701 -NCT00129753 -NCT00129831 -NCT00129896 -NCT00129922 -NCT00129935 -NCT00130000 -NCT00130039 -NCT00130078 -NCT00130182 -NCT00130195 -NCT00130247 -NCT00130325 -NCT00130351 -NCT00130364 -NCT00130468 -NCT00130494 -NCT00105950 -NCT00123864 -NCT00105963 -NCT00113347 -NCT00113373 -NCT00113386 -NCT00113425 -NCT00113503 -NCT00113542 -NCT00113568 -NCT00113581 -NCT00113633 -NCT00113971 -NCT00113997 -NCT00114088 -NCT00114101 -NCT00114114 -NCT00114140 -NCT00114205 -NCT00114257 -NCT00114309 -NCT00114322 -NCT00114426 -NCT00114543 -NCT00114764 -NCT00114816 -NCT00114972 -NCT00115076 -NCT00115336 -NCT00115401 -NCT00115440 -NCT00115570 -NCT00115622 -NCT00115661 -NCT00115700 -NCT00115895 -NCT00116168 -NCT00116311 -NCT00116337 -NCT00116571 -NCT00116753 -NCT00116779 -NCT00116818 -NCT00116935 -NCT00116961 -NCT00117000 -NCT00117013 -NCT00117052 -NCT00117117 -NCT00117182 -NCT00117195 -NCT00117221 -NCT00117260 -NCT00117377 -NCT00117403 -NCT00117533 -NCT00117572 -NCT00117884 -NCT00117962 -NCT00117988 -NCT00118092 -NCT00118157 -NCT00118170 -NCT00118235 -NCT00118248 -NCT00118326 -NCT00118352 -NCT00118482 -NCT00118586 -NCT00118729 -NCT00118820 -NCT00119041 -NCT00119158 -NCT00119197 -NCT00119236 -NCT00119249 -NCT00119366 -NCT00119483 -NCT00119509 -NCT00119626 -NCT00119678 -NCT00119704 -NCT00119730 -NCT00119821 -NCT00120003 -NCT00120094 -NCT00120120 -NCT00120133 -NCT00120159 -NCT00120263 -NCT00120289 -NCT00120432 -NCT00120484 -NCT00120497 -NCT00120562 -NCT00120614 -NCT00120666 -NCT00120744 -NCT00120887 -NCT00120900 -NCT00120978 -NCT00121095 -NCT00121173 -NCT00121303 -NCT00121381 -NCT00121433 -NCT00121563 -NCT00121797 -NCT00121836 -NCT00121875 -NCT00121901 -NCT00121953 -NCT00121992 -NCT00122278 -NCT00122616 -NCT00122681 -NCT00122694 -NCT00122954 -NCT00123006 -NCT00123435 -NCT00123474 -NCT00123487 -NCT00123630 -NCT00123656 -NCT00123799 -NCT00106119 -NCT00110058 -NCT00106132 -NCT00110006 -NCT00106184 -NCT00110214 -NCT00106366 -NCT00110253 -NCT00106496 -NCT00110318 -NCT00106665 -NCT00110500 -NCT00106717 -NCT00110617 -NCT00106743 -NCT00110669 -NCT00106756 -NCT00110695 -NCT00106769 -NCT00110851 -NCT00106795 -NCT00110864 -NCT00106821 -NCT00110890 -NCT00106886 -NCT00110916 -NCT00106938 -NCT00110929 -NCT00106977 -NCT00110968 -NCT00107003 -NCT00111072 -NCT00107081 -NCT00111215 -NCT00107172 -NCT00111241 -NCT00107198 -NCT00111254 -NCT00107211 -NCT00111267 -NCT00107354 -NCT00111293 -NCT00107393 -NCT00111306 -NCT00107419 -NCT00111319 -NCT00107432 -NCT00111384 -NCT00107458 -NCT00111592 -NCT00107523 -NCT00111644 -NCT00107536 -NCT00111657 -NCT00107562 -NCT00111735 -NCT00107601 -NCT00111787 -NCT00107614 -NCT00111839 -NCT00107744 -NCT00111852 -NCT00107783 -NCT00111917 -NCT00107796 -NCT00112151 -NCT00107991 -NCT00112203 -NCT00108134 -NCT00112333 -NCT00108186 -NCT00112385 -NCT00108394 -NCT00112437 -NCT00108420 -NCT00112476 -NCT00108433 -NCT00112515 -NCT00108446 -NCT00112554 -NCT00108485 -NCT00112567 -NCT00108628 -NCT00112593 -NCT00108667 -NCT00112671 -NCT00108680 -NCT00112723 -NCT00108758 -NCT00112736 -NCT00108992 -NCT00112775 -NCT00109148 -NCT00112827 -NCT00109200 -NCT00112853 -NCT00109265 -NCT00112879 -NCT00109395 -NCT00112957 -NCT00109525 -NCT00113022 -NCT00109564 -NCT00113061 -NCT00109616 -NCT00113074 -NCT00109707 -NCT00113152 -NCT00109811 -NCT00113217 -NCT00109837 -NCT00185575 -NCT00174408 -NCT00178672 -NCT00174421 -NCT00178607 -NCT00174434 -NCT00178724 -NCT00174460 -NCT00178763 -NCT00174655 -NCT00178997 -NCT00174941 -NCT00179127 -NCT00174954 -NCT00179400 -NCT00174967 -NCT00179413 -NCT00175006 -NCT00179517 -NCT00175019 -NCT00179647 -NCT00175032 -NCT00179790 -NCT00175045 -NCT00179907 -NCT00175071 -NCT00179933 -NCT00175110 -NCT00180128 -NCT00175149 -NCT00180362 -NCT00175175 -NCT00180518 -NCT00175188 -NCT00180531 -NCT00175214 -NCT00180635 -NCT00175240 -NCT00180661 -NCT00175253 -NCT00180765 -NCT00175266 -NCT00180882 -NCT00175448 -NCT00180895 -NCT00175565 -NCT00180921 -NCT00175617 -NCT00181272 -NCT00175747 -NCT00181623 -NCT00175825 -NCT00182078 -NCT00175838 -NCT00182091 -NCT00175929 -NCT00182208 -NCT00176098 -NCT00182260 -NCT00176150 -NCT00182299 -NCT00176176 -NCT00182481 -NCT00176410 -NCT00182611 -NCT00176462 -NCT00182650 -NCT00176579 -NCT00182702 -NCT00176631 -NCT00182871 -NCT00176696 -NCT00183040 -NCT00176722 -NCT00183066 -NCT00176761 -NCT00183352 -NCT00176956 -NCT00183430 -NCT00177034 -NCT00183456 -NCT00177047 -NCT00183482 -NCT00177320 -NCT00183677 -NCT00177346 -NCT00183911 -NCT00177372 -NCT00183950 -NCT00177385 -NCT00184197 -NCT00177411 -NCT00184236 -NCT00177775 -NCT00184431 -NCT00177892 -NCT00184483 -NCT00177970 -NCT00184548 -NCT00178165 -NCT00184691 -NCT00178204 -NCT00184717 -NCT00178373 -NCT00184756 -NCT00178451 -NCT00184808 -NCT00178490 -NCT00184873 -NCT00178516 -NCT00185458 -NCT00178542 -NCT00199394 -NCT00185692 -NCT00194480 -NCT00185718 -NCT00194402 -NCT00185744 -NCT00194571 -NCT00186017 -NCT00194584 -NCT00186407 -NCT00194597 -NCT00186628 -NCT00194610 -NCT00186719 -NCT00194636 -NCT00186784 -NCT00194675 -NCT00186888 -NCT00194701 -NCT00186940 -NCT00194714 -NCT00187161 -NCT00194753 -NCT00187187 -NCT00194779 -NCT00187291 -NCT00194870 -NCT00187499 -NCT00194922 -NCT00187824 -NCT00194961 -NCT00187863 -NCT00194974 -NCT00188201 -NCT00195052 -NCT00188240 -NCT00195091 -NCT00188344 -NCT00195143 -NCT00188396 -NCT00195286 -NCT00188474 -NCT00195351 -NCT00188500 -NCT00195637 -NCT00188682 -NCT00195741 -NCT00188890 -NCT00195793 -NCT00189163 -NCT00195806 -NCT00189228 -NCT00195871 -NCT00189280 -NCT00195923 -NCT00189436 -NCT00195936 -NCT00189722 -NCT00195975 -NCT00189787 -NCT00195988 -NCT00189930 -NCT00196001 -NCT00190060 -NCT00196313 -NCT00190398 -NCT00196365 -NCT00190502 -NCT00196729 -NCT00190554 -NCT00196768 -NCT00190658 -NCT00196820 -NCT00191074 -NCT00196898 -NCT00191113 -NCT00196937 -NCT00191321 -NCT00196963 -NCT00191373 -NCT00196989 -NCT00191425 -NCT00197418 -NCT00191451 -NCT00197496 -NCT00191529 -NCT00197613 -NCT00192205 -NCT00197652 -NCT00192348 -NCT00197678 -NCT00192413 -NCT00198029 -NCT00192556 -NCT00198718 -NCT00192569 -NCT00198757 -NCT00193063 -NCT00198796 -NCT00193141 -NCT00199030 -NCT00193648 -NCT00199082 -NCT00193661 -NCT00199108 -NCT00194155 -NCT00199147 -NCT00194259 -NCT00199212 -NCT00194285 -NCT00199355 -NCT00194324 -NCT00209456 -NCT00199407 -NCT00204074 -NCT00199420 -NCT00203996 -NCT00199498 -NCT00204165 -NCT00199550 -NCT00204204 -NCT00199810 -NCT00204230 -NCT00200005 -NCT00204269 -NCT00200044 -NCT00204399 -NCT00200057 -NCT00204464 -NCT00200174 -NCT00204503 -NCT00200252 -NCT00204672 -NCT00200304 -NCT00205010 -NCT00200486 -NCT00205361 -NCT00200577 -NCT00205647 -NCT00200655 -NCT00205660 -NCT00200681 -NCT00205855 -NCT00200876 -NCT00205868 -NCT00200902 -NCT00205881 -NCT00200967 -NCT00205907 -NCT00200993 -NCT00205920 -NCT00201058 -NCT00206024 -NCT00201240 -NCT00206206 -NCT00201253 -NCT00206258 -NCT00201292 -NCT00206297 -NCT00201318 -NCT00206375 -NCT00201370 -NCT00206401 -NCT00201383 -NCT00206427 -NCT00201422 -NCT00206466 -NCT00201617 -NCT00206544 -NCT00201721 -NCT00206570 -NCT00201773 -NCT00206830 -NCT00201994 -NCT00206843 -NCT00202111 -NCT00206921 -NCT00202137 -NCT00207012 -NCT00202150 -NCT00207233 -NCT00202163 -NCT00207376 -NCT00202176 -NCT00207519 -NCT00202189 -NCT00207727 -NCT00202228 -NCT00207909 -NCT00202371 -NCT00207935 -NCT00202384 -NCT00207974 -NCT00202397 -NCT00208000 -NCT00202436 -NCT00208221 -NCT00202462 -NCT00208325 -NCT00202670 -NCT00208689 -NCT00202709 -NCT00208819 -NCT00202904 -NCT00208871 -NCT00203034 -NCT00208936 -NCT00203060 -NCT00209027 -NCT00203255 -NCT00209118 -NCT00203268 -NCT00209131 -NCT00203333 -NCT00209144 -NCT00203372 -NCT00209235 -NCT00203554 -NCT00209274 -NCT00203593 -NCT00209326 -NCT00203697 -NCT00209339 -NCT00203931 -NCT00219518 -NCT00209833 -NCT00215384 -NCT00209872 -NCT00215215 -NCT00209898 -NCT00215436 -NCT00210002 -NCT00215449 -NCT00210015 -NCT00215514 -NCT00210119 -NCT00215592 -NCT00210340 -NCT00215618 -NCT00210444 -NCT00215644 -NCT00210483 -NCT00215722 -NCT00210535 -NCT00215748 -NCT00210600 -NCT00215787 -NCT00210886 -NCT00215865 -NCT00210990 -NCT00215930 -NCT00211016 -NCT00215943 -NCT00211081 -NCT00215995 -NCT00211224 -NCT00216021 -NCT00211263 -NCT00216125 -NCT00211276 -NCT00216242 -NCT00211354 -NCT00216320 -NCT00211510 -NCT00216398 -NCT00211536 -NCT00216450 -NCT00211614 -NCT00216489 -NCT00211627 -NCT00216502 -NCT00211692 -NCT00216515 -NCT00211952 -NCT00216567 -NCT00212043 -NCT00216593 -NCT00212108 -NCT00216658 -NCT00212134 -NCT00216736 -NCT00212160 -NCT00216775 -NCT00212225 -NCT00217100 -NCT00212303 -NCT00217178 -NCT00212355 -NCT00217295 -NCT00212368 -NCT00217321 -NCT00212459 -NCT00217347 -NCT00212550 -NCT00217425 -NCT00212576 -NCT00217464 -NCT00212602 -NCT00217503 -NCT00212719 -NCT00217542 -NCT00213005 -NCT00217581 -NCT00213044 -NCT00217594 -NCT00213135 -NCT00217620 -NCT00213252 -NCT00217646 -NCT00213356 -NCT00217672 -NCT00213447 -NCT00217724 -NCT00213590 -NCT00217737 -NCT00213603 -NCT00217815 -NCT00213824 -NCT00217854 -NCT00213941 -NCT00217945 -NCT00214149 -NCT00218855 -NCT00214305 -NCT00218868 -NCT00214448 -NCT00219284 -NCT00214487 -NCT00219427 -NCT00214552 -NCT00219466 -NCT00214708 -NCT00219479 -NCT00214734 -NCT00219492 -NCT00215059 -NCT00230620 -NCT00219570 -NCT00224614 -NCT00219778 -NCT00224536 -NCT00219882 -NCT00224640 -NCT00219999 -NCT00224939 -NCT00220012 -NCT00224991 -NCT00220181 -NCT00225004 -NCT00220272 -NCT00225069 -NCT00220298 -NCT00225160 -NCT00220311 -NCT00225225 -NCT00220350 -NCT00225446 -NCT00220506 -NCT00225537 -NCT00220532 -NCT00225797 -NCT00220545 -NCT00225979 -NCT00220584 -NCT00226083 -NCT00220753 -NCT00226174 -NCT00220935 -NCT00226421 -NCT00220961 -NCT00226577 -NCT00220987 -NCT00226590 -NCT00221013 -NCT00226616 -NCT00221091 -NCT00226798 -NCT00221195 -NCT00227253 -NCT00221325 -NCT00227331 -NCT00221351 -NCT00227448 -NCT00221832 -NCT00227539 -NCT00221845 -NCT00227617 -NCT00221897 -NCT00227630 -NCT00221910 -NCT00227734 -NCT00222079 -NCT00227877 -NCT00222092 -NCT00227929 -NCT00222131 -NCT00227955 -NCT00222183 -NCT00227968 -NCT00222300 -NCT00228150 -NCT00222352 -NCT00228215 -NCT00222417 -NCT00228228 -NCT00222521 -NCT00228267 -NCT00222612 -NCT00228358 -NCT00222651 -NCT00228670 -NCT00222768 -NCT00228878 -NCT00222781 -NCT00228891 -NCT00222872 -NCT00228904 -NCT00222950 -NCT00229021 -NCT00222963 -NCT00229294 -NCT00223275 -NCT00229424 -NCT00223548 -NCT00229502 -NCT00223665 -NCT00229580 -NCT00223743 -NCT00229762 -NCT00223756 -NCT00229918 -NCT00223860 -NCT00229944 -NCT00224042 -NCT00229996 -NCT00224055 -NCT00230087 -NCT00224081 -NCT00230165 -NCT00224107 -NCT00230178 -NCT00224120 -NCT00230282 -NCT00224198 -NCT00230360 -NCT00224211 -NCT00230594 -NCT00224354 -NCT00240162 -NCT00230685 -NCT00235703 -NCT00230750 -NCT00235677 -NCT00230802 -NCT00235716 -NCT00230815 -NCT00235937 -NCT00230854 -NCT00236002 -NCT00230971 -NCT00236080 -NCT00231010 -NCT00236158 -NCT00231023 -NCT00236184 -NCT00231231 -NCT00236197 -NCT00231270 -NCT00236327 -NCT00231387 -NCT00236366 -NCT00231556 -NCT00236392 -NCT00231569 -NCT00236496 -NCT00231686 -NCT00236509 -NCT00231881 -NCT00236561 -NCT00231907 -NCT00236730 -NCT00232219 -NCT00236769 -NCT00232297 -NCT00236782 -NCT00232375 -NCT00236795 -NCT00232453 -NCT00236847 -NCT00232466 -NCT00236860 -NCT00232479 -NCT00236873 -NCT00232505 -NCT00237016 -NCT00232557 -NCT00237055 -NCT00232570 -NCT00237133 -NCT00232583 -NCT00237302 -NCT00232934 -NCT00237354 -NCT00233025 -NCT00237367 -NCT00233038 -NCT00237380 -NCT00233233 -NCT00237497 -NCT00233363 -NCT00237523 -NCT00233454 -NCT00237601 -NCT00233519 -NCT00237627 -NCT00233545 -NCT00237692 -NCT00233610 -NCT00237705 -NCT00233727 -NCT00238043 -NCT00233909 -NCT00238212 -NCT00233922 -NCT00238225 -NCT00233935 -NCT00238290 -NCT00233961 -NCT00238368 -NCT00233974 -NCT00238537 -NCT00233987 -NCT00238641 -NCT00234065 -NCT00238745 -NCT00234143 -NCT00238927 -NCT00234156 -NCT00239161 -NCT00234195 -NCT00239252 -NCT00234247 -NCT00239395 -NCT00234403 -NCT00239538 -NCT00234494 -NCT00239564 -NCT00234533 -NCT00239590 -NCT00234572 -NCT00239629 -NCT00234949 -NCT00239707 -NCT00235131 -NCT00239759 -NCT00235248 -NCT00240097 -NCT00235521 -NCT00240136 -NCT00235599 -NCT00251316 -NCT00240461 -NCT00245518 -NCT00240682 -NCT00245453 -NCT00240734 -NCT00245622 -NCT00240760 -NCT00245661 -NCT00240773 -NCT00245700 -NCT00240786 -NCT00245791 -NCT00240799 -NCT00245856 -NCT00240838 -NCT00245921 -NCT00240929 -NCT00246038 -NCT00240981 -NCT00246064 -NCT00241319 -NCT00246090 -NCT00241358 -NCT00246324 -NCT00241436 -NCT00246389 -NCT00241527 -NCT00246467 -NCT00241553 -NCT00246506 -NCT00241631 -NCT00246558 -NCT00241813 -NCT00246571 -NCT00241904 -NCT00246805 -NCT00242060 -NCT00246896 -NCT00242138 -NCT00246922 -NCT00242177 -NCT00247052 -NCT00242242 -NCT00247169 -NCT00242268 -NCT00247273 -NCT00242281 -NCT00247377 -NCT00242333 -NCT00247533 -NCT00242502 -NCT00247546 -NCT00242541 -NCT00247585 -NCT00242723 -NCT00248105 -NCT00242944 -NCT00248144 -NCT00243139 -NCT00248287 -NCT00243152 -NCT00248443 -NCT00243282 -NCT00248495 -NCT00243360 -NCT00248690 -NCT00243386 -NCT00248859 -NCT00243503 -NCT00249080 -NCT00243620 -NCT00249093 -NCT00243659 -NCT00249743 -NCT00243685 -NCT00250055 -NCT00243789 -NCT00250159 -NCT00243880 -NCT00250250 -NCT00243906 -NCT00250484 -NCT00243945 -NCT00250497 -NCT00243984 -NCT00250536 -NCT00244023 -NCT00250861 -NCT00244153 -NCT00250874 -NCT00244517 -NCT00250978 -NCT00244543 -NCT00250991 -NCT00244582 -NCT00251056 -NCT00244881 -NCT00251108 -NCT00244959 -NCT00251121 -NCT00244972 -NCT00251147 -NCT00245011 -NCT00251212 -NCT00245037 -NCT00251251 -NCT00245102 -NCT00251264 -NCT00245245 -NCT00251277 -NCT00245375 -NCT00261482 -NCT00251329 -NCT00256776 -NCT00251381 -NCT00256685 -NCT00251745 -NCT00256802 -NCT00251758 -NCT00256841 -NCT00251836 -NCT00256984 -NCT00251914 -NCT00257010 -NCT00252018 -NCT00257049 -NCT00252070 -NCT00257309 -NCT00252148 -NCT00257348 -NCT00252239 -NCT00257374 -NCT00252317 -NCT00257582 -NCT00252421 -NCT00257634 -NCT00252603 -NCT00257777 -NCT00252941 -NCT00257842 -NCT00252993 -NCT00257855 -NCT00253084 -NCT00257933 -NCT00253188 -NCT00257985 -NCT00253201 -NCT00257998 -NCT00253214 -NCT00258089 -NCT00253227 -NCT00258102 -NCT00253253 -NCT00258154 -NCT00253305 -NCT00258245 -NCT00253487 -NCT00258284 -NCT00253500 -NCT00258427 -NCT00253539 -NCT00258466 -NCT00253734 -NCT00258518 -NCT00253786 -NCT00258544 -NCT00253981 -NCT00258570 -NCT00254111 -NCT00258661 -NCT00254150 -NCT00258960 -NCT00254371 -NCT00258973 -NCT00254384 -NCT00259610 -NCT00254397 -NCT00259649 -NCT00254423 -NCT00259688 -NCT00254449 -NCT00259779 -NCT00254553 -NCT00259857 -NCT00254566 -NCT00260000 -NCT00254579 -NCT00260039 -NCT00254592 -NCT00260091 -NCT00255073 -NCT00260104 -NCT00255086 -NCT00260143 -NCT00255177 -NCT00260182 -NCT00255242 -NCT00260364 -NCT00255294 -NCT00260572 -NCT00255307 -NCT00260585 -NCT00255346 -NCT00260624 -NCT00255372 -NCT00260663 -NCT00255385 -NCT00260702 -NCT00255398 -NCT00260897 -NCT00256165 -NCT00261001 -NCT00256178 -NCT00261014 -NCT00256217 -NCT00261248 -NCT00256308 -NCT00261300 -NCT00256503 -NCT00261339 -NCT00256529 -NCT00261391 -NCT00256581 -NCT00271310 -NCT00261495 -NCT00266383 -NCT00261508 -NCT00266370 -NCT00261768 -NCT00266487 -NCT00261807 -NCT00266578 -NCT00261846 -NCT00266604 -NCT00261898 -NCT00266656 -NCT00262067 -NCT00266721 -NCT00262080 -NCT00266734 -NCT00262132 -NCT00266864 -NCT00262197 -NCT00266877 -NCT00262210 -NCT00267033 -NCT00262249 -NCT00267085 -NCT00262340 -NCT00267176 -NCT00262626 -NCT00267293 -NCT00262652 -NCT00267618 -NCT00262743 -NCT00267826 -NCT00262808 -NCT00267982 -NCT00263094 -NCT00268060 -NCT00263185 -NCT00268086 -NCT00263198 -NCT00268203 -NCT00263237 -NCT00268229 -NCT00263250 -NCT00268372 -NCT00263289 -NCT00268489 -NCT00263341 -NCT00268580 -NCT00263445 -NCT00268697 -NCT00263536 -NCT00268762 -NCT00263562 -NCT00268814 -NCT00263588 -NCT00268866 -NCT00263744 -NCT00268879 -NCT00263952 -NCT00268931 -NCT00264017 -NCT00269048 -NCT00264121 -NCT00269113 -NCT00264407 -NCT00269165 -NCT00264732 -NCT00269282 -NCT00264810 -NCT00269347 -NCT00264888 -NCT00269399 -NCT00265096 -NCT00269412 -NCT00265148 -NCT00269529 -NCT00265226 -NCT00269568 -NCT00265304 -NCT00270010 -NCT00265447 -NCT00270270 -NCT00265525 -NCT00270309 -NCT00265590 -NCT00270348 -NCT00265707 -NCT00270374 -NCT00265733 -NCT00270478 -NCT00265759 -NCT00270491 -NCT00265798 -NCT00270504 -NCT00265837 -NCT00270608 -NCT00265915 -NCT00270686 -NCT00265941 -NCT00270894 -NCT00266097 -NCT00270920 -NCT00266110 -NCT00271076 -NCT00266214 -NCT00271115 -NCT00266266 -NCT00271128 -NCT00266318 -NCT00271206 -NCT00266357 -NCT00280605 -NCT00271427 -NCT00276640 -NCT00271518 -NCT00276601 -NCT00271583 -NCT00276783 -NCT00271973 -NCT00276926 -NCT00272090 -NCT00277147 -NCT00272116 -NCT00277238 -NCT00272285 -NCT00277277 -NCT00272363 -NCT00277368 -NCT00272376 -NCT00277433 -NCT00272389 -NCT00277472 -NCT00272545 -NCT00277550 -NCT00272610 -NCT00277654 -NCT00272714 -NCT00277680 -NCT00272818 -NCT00277784 -NCT00272883 -NCT00277875 -NCT00273130 -NCT00277966 -NCT00273195 -NCT00278083 -NCT00273208 -NCT00278148 -NCT00273377 -NCT00278408 -NCT00273559 -NCT00278486 -NCT00273572 -NCT00278512 -NCT00273676 -NCT00278551 -NCT00273741 -NCT00278564 -NCT00273962 -NCT00278629 -NCT00274027 -NCT00278798 -NCT00274131 -NCT00278824 -NCT00274170 -NCT00278863 -NCT00274196 -NCT00278876 -NCT00274248 -NCT00279032 -NCT00274261 -NCT00279123 -NCT00274287 -NCT00279136 -NCT00274352 -NCT00279149 -NCT00274378 -NCT00279279 -NCT00274391 -NCT00279344 -NCT00274690 -NCT00279370 -NCT00274781 -NCT00279500 -NCT00274807 -NCT00279526 -NCT00274820 -NCT00279552 -NCT00274846 -NCT00279578 -NCT00274885 -NCT00279643 -NCT00274937 -NCT00279708 -NCT00275028 -NCT00279747 -NCT00275041 -NCT00279825 -NCT00275080 -NCT00279890 -NCT00275145 -NCT00279903 -NCT00275392 -NCT00279916 -NCT00275561 -NCT00280202 -NCT00275691 -NCT00280254 -NCT00275743 -NCT00280267 -NCT00275938 -NCT00280371 -NCT00276068 -NCT00280410 -NCT00276146 -NCT00280423 -NCT00276328 -NCT00280436 -NCT00276393 -NCT00280514 -NCT00276406 -NCT00280592 -NCT00276510 -NCT00289978 -NCT00280657 -NCT00285779 -NCT00280683 -NCT00285649 -NCT00281034 -NCT00285870 -NCT00281138 -NCT00285961 -NCT00281333 -NCT00286052 -NCT00281346 -NCT00286065 -NCT00281398 -NCT00286130 -NCT00281502 -NCT00286208 -NCT00281645 -NCT00286312 -NCT00281684 -NCT00286364 -NCT00281697 -NCT00286429 -NCT00281801 -NCT00286442 -NCT00281814 -NCT00286468 -NCT00281840 -NCT00286507 -NCT00281918 -NCT00286520 -NCT00281931 -NCT00286650 -NCT00282035 -NCT00286663 -NCT00282061 -NCT00286689 -NCT00282074 -NCT00286767 -NCT00282100 -NCT00286884 -NCT00282152 -NCT00286962 -NCT00282191 -NCT00286988 -NCT00282412 -NCT00287001 -NCT00282438 -NCT00287144 -NCT00282607 -NCT00287248 -NCT00282776 -NCT00287339 -NCT00282815 -NCT00287378 -NCT00282854 -NCT00287391 -NCT00283088 -NCT00287456 -NCT00283101 -NCT00287508 -NCT00283153 -NCT00287586 -NCT00283166 -NCT00287625 -NCT00283218 -NCT00288002 -NCT00283283 -NCT00288080 -NCT00283309 -NCT00288171 -NCT00283335 -NCT00288470 -NCT00283361 -NCT00288600 -NCT00283712 -NCT00288652 -NCT00283881 -NCT00288691 -NCT00283894 -NCT00288704 -NCT00284063 -NCT00288821 -NCT00284128 -NCT00288912 -NCT00284180 -NCT00289120 -NCT00284245 -NCT00289159 -NCT00284310 -NCT00289224 -NCT00284440 -NCT00289484 -NCT00284557 -NCT00289536 -NCT00284583 -NCT00289549 -NCT00284622 -NCT00289666 -NCT00284661 -NCT00289718 -NCT00285168 -NCT00289744 -NCT00285194 -NCT00289770 -NCT00285207 -NCT00289796 -NCT00285350 -NCT00289900 -NCT00285467 -NCT00289926 -NCT00285584 -NCT00299494 -NCT00290030 -NCT00294775 -NCT00290134 -NCT00294762 -NCT00290251 -NCT00295022 -NCT00290329 -NCT00295087 -NCT00290498 -NCT00295178 -NCT00290589 -NCT00295204 -NCT00290602 -NCT00295308 -NCT00290641 -NCT00295464 -NCT00290732 -NCT00295490 -NCT00290745 -NCT00295503 -NCT00290810 -NCT00295516 -NCT00290862 -NCT00295581 -NCT00290940 -NCT00295711 -NCT00290992 -NCT00295724 -NCT00291122 -NCT00295828 -NCT00291148 -NCT00295841 -NCT00291161 -NCT00295867 -NCT00291265 -NCT00295893 -NCT00291395 -NCT00295919 -NCT00291421 -NCT00295997 -NCT00291577 -NCT00296010 -NCT00291642 -NCT00296023 -NCT00291733 -NCT00296244 -NCT00291980 -NCT00296296 -NCT00292032 -NCT00296491 -NCT00292045 -NCT00296621 -NCT00292344 -NCT00296699 -NCT00292448 -NCT00296764 -NCT00292552 -NCT00296868 -NCT00292695 -NCT00296907 -NCT00292760 -NCT00296933 -NCT00292825 -NCT00296959 -NCT00292838 -NCT00297037 -NCT00292903 -NCT00297154 -NCT00293059 -NCT00297349 -NCT00293072 -NCT00297401 -NCT00293150 -NCT00297492 -NCT00293371 -NCT00297596 -NCT00293410 -NCT00297895 -NCT00293436 -NCT00297908 -NCT00293631 -NCT00297921 -NCT00293657 -NCT00298038 -NCT00293735 -NCT00298116 -NCT00293748 -NCT00298233 -NCT00293852 -NCT00298246 -NCT00294047 -NCT00298337 -NCT00294125 -NCT00298389 -NCT00294229 -NCT00298402 -NCT00294398 -NCT00298454 -NCT00294463 -NCT00298818 -NCT00294593 -NCT00298870 -NCT00294619 -NCT00299039 -NCT00294632 -NCT00299182 -NCT00294658 -NCT00299195 -NCT00294684 -NCT00299312 -NCT00294697 -NCT00306839 -NCT00299949 -NCT00303849 -NCT00299975 -NCT00303823 -NCT00300326 -NCT00303940 -NCT00300378 -NCT00303953 -NCT00300417 -NCT00303966 -NCT00300586 -NCT00303992 -NCT00300625 -NCT00304018 -NCT00300768 -NCT00304070 -NCT00300781 -NCT00304213 -NCT00300807 -NCT00304265 -NCT00300833 -NCT00304278 -NCT00300898 -NCT00304291 -NCT00301119 -NCT00304330 -NCT00301171 -NCT00304356 -NCT00301184 -NCT00304369 -NCT00301249 -NCT00304408 -NCT00301392 -NCT00304447 -NCT00301405 -NCT00304460 -NCT00301418 -NCT00304642 -NCT00301509 -NCT00304668 -NCT00301587 -NCT00304863 -NCT00301639 -NCT00304876 -NCT00301652 -NCT00304889 -NCT00301730 -NCT00304954 -NCT00301808 -NCT00304967 -NCT00301886 -NCT00305032 -NCT00301899 -NCT00305071 -NCT00301912 -NCT00305110 -NCT00301938 -NCT00305149 -NCT00301951 -NCT00305214 -NCT00302068 -NCT00305227 -NCT00302107 -NCT00305344 -NCT00302172 -NCT00305539 -NCT00302211 -NCT00305552 -NCT00302224 -NCT00305604 -NCT00302263 -NCT00305682 -NCT00302315 -NCT00305695 -NCT00302328 -NCT00305734 -NCT00302341 -NCT00305760 -NCT00302367 -NCT00305773 -NCT00302380 -NCT00305786 -NCT00302393 -NCT00305799 -NCT00302406 -NCT00305812 -NCT00302432 -NCT00305825 -NCT00302588 -NCT00305851 -NCT00302874 -NCT00305890 -NCT00302900 -NCT00306033 -NCT00302926 -NCT00306046 -NCT00302991 -NCT00306124 -NCT00303004 -NCT00306189 -NCT00303108 -NCT00306449 -NCT00303355 -NCT00306501 -NCT00303459 -NCT00306748 -NCT00303511 -NCT00306774 -NCT00303732 -NCT00306813 -NCT00303784 -NCT00315770 -NCT00306917 -NCT00311714 -NCT00306995 -NCT00311675 -NCT00307125 -NCT00311831 -NCT00307164 -NCT00311883 -NCT00307190 -NCT00311935 -NCT00307281 -NCT00311987 -NCT00307307 -NCT00312026 -NCT00307346 -NCT00312169 -NCT00307450 -NCT00312208 -NCT00307476 -NCT00312247 -NCT00307593 -NCT00312286 -NCT00307632 -NCT00312390 -NCT00307645 -NCT00312598 -NCT00307658 -NCT00312689 -NCT00307801 -NCT00312832 -NCT00308074 -NCT00312910 -NCT00308113 -NCT00313066 -NCT00308178 -NCT00313092 -NCT00308412 -NCT00313209 -NCT00308490 -NCT00313365 -NCT00309088 -NCT00313404 -NCT00309101 -NCT00313521 -NCT00309114 -NCT00313573 -NCT00309166 -NCT00313586 -NCT00309205 -NCT00313703 -NCT00309257 -NCT00313742 -NCT00309322 -NCT00313963 -NCT00309439 -NCT00314002 -NCT00309478 -NCT00314301 -NCT00309556 -NCT00314405 -NCT00309712 -NCT00314431 -NCT00309790 -NCT00314548 -NCT00309842 -NCT00314652 -NCT00309881 -NCT00314691 -NCT00309959 -NCT00314743 -NCT00309985 -NCT00314795 -NCT00310037 -NCT00314899 -NCT00310089 -NCT00314951 -NCT00310128 -NCT00315081 -NCT00310245 -NCT00315120 -NCT00310258 -NCT00315133 -NCT00310310 -NCT00315159 -NCT00310323 -NCT00315315 -NCT00310349 -NCT00315354 -NCT00310388 -NCT00315380 -NCT00310414 -NCT00315393 -NCT00310531 -NCT00315406 -NCT00310765 -NCT00315432 -NCT00310869 -NCT00315458 -NCT00310882 -NCT00315497 -NCT00311129 -NCT00315523 -NCT00311207 -NCT00315575 -NCT00311246 -NCT00315627 -NCT00311571 -NCT00315666 -NCT00311623 -NCT00315679 -NCT00311649 -NCT00326521 -NCT00315822 -NCT00321477 -NCT00315952 -NCT00321360 -NCT00316108 -NCT00321503 -NCT00316134 -NCT00321555 -NCT00316160 -NCT00321620 -NCT00316342 -NCT00321633 -NCT00316485 -NCT00321724 -NCT00316524 -NCT00321750 -NCT00316576 -NCT00321815 -NCT00316589 -NCT00321828 -NCT00316602 -NCT00322101 -NCT00316732 -NCT00322231 -NCT00316849 -NCT00322751 -NCT00316953 -NCT00322881 -NCT00317057 -NCT00323427 -NCT00317083 -NCT00323479 -NCT00317122 -NCT00323570 -NCT00317252 -NCT00323609 -NCT00317265 -NCT00323635 -NCT00317421 -NCT00323674 -NCT00317447 -NCT00323752 -NCT00317486 -NCT00323804 -NCT00317551 -NCT00323830 -NCT00317564 -NCT00323856 -NCT00317629 -NCT00323960 -NCT00317720 -NCT00323973 -NCT00317733 -NCT00324077 -NCT00317785 -NCT00324090 -NCT00317811 -NCT00324259 -NCT00318097 -NCT00324285 -NCT00318500 -NCT00324389 -NCT00318591 -NCT00324402 -NCT00318708 -NCT00324428 -NCT00318773 -NCT00324610 -NCT00319124 -NCT00324714 -NCT00319137 -NCT00324896 -NCT00319202 -NCT00325078 -NCT00319241 -NCT00325195 -NCT00319358 -NCT00325273 -NCT00319449 -NCT00325416 -NCT00319670 -NCT00325507 -NCT00319748 -NCT00325546 -NCT00319839 -NCT00325572 -NCT00319865 -NCT00325598 -NCT00320385 -NCT00325624 -NCT00320424 -NCT00325650 -NCT00320476 -NCT00325819 -NCT00320580 -NCT00325845 -NCT00320619 -NCT00325897 -NCT00320632 -NCT00325936 -NCT00320840 -NCT00326027 -NCT00321061 -NCT00326170 -NCT00321074 -NCT00326183 -NCT00321087 -NCT00326443 -NCT00321295 -NCT00326495 -NCT00321347 -NCT00338312 -NCT00326560 -NCT00333775 -NCT00326703 -NCT00333749 -NCT00326742 -NCT00333957 -NCT00326820 -NCT00334100 -NCT00326950 -NCT00334139 -NCT00327080 -NCT00334152 -NCT00327132 -NCT00334204 -NCT00327262 -NCT00334542 -NCT00327366 -NCT00334568 -NCT00327548 -NCT00334672 -NCT00327678 -NCT00334685 -NCT00327873 -NCT00334815 -NCT00327951 -NCT00334828 -NCT00327990 -NCT00334932 -NCT00328198 -NCT00334945 -NCT00328250 -NCT00334971 -NCT00328380 -NCT00335023 -NCT00328484 -NCT00335049 -NCT00328549 -NCT00335075 -NCT00328835 -NCT00335348 -NCT00328848 -NCT00335361 -NCT00328926 -NCT00335491 -NCT00329017 -NCT00335543 -NCT00329056 -NCT00335556 -NCT00329069 -NCT00335569 -NCT00329277 -NCT00335738 -NCT00329524 -NCT00335803 -NCT00329602 -NCT00335868 -NCT00329706 -NCT00335920 -NCT00329797 -NCT00335933 -NCT00329901 -NCT00336024 -NCT00330122 -NCT00336076 -NCT00330161 -NCT00336570 -NCT00330252 -NCT00336648 -NCT00330434 -NCT00336895 -NCT00330447 -NCT00336921 -NCT00330707 -NCT00336960 -NCT00330850 -NCT00337064 -NCT00330876 -NCT00337103 -NCT00330993 -NCT00337194 -NCT00331006 -NCT00337259 -NCT00331188 -NCT00337402 -NCT00331474 -NCT00337454 -NCT00331487 -NCT00337558 -NCT00331513 -NCT00337597 -NCT00331552 -NCT00337649 -NCT00331708 -NCT00337766 -NCT00331747 -NCT00337883 -NCT00331812 -NCT00337909 -NCT00332150 -NCT00337974 -NCT00332254 -NCT00338104 -NCT00332449 -NCT00338182 -NCT00332631 -NCT00338208 -NCT00333307 -NCT00338221 -NCT00333333 -NCT00338286 -NCT00333684 -NCT00347815 -NCT00338520 -NCT00342771 -NCT00338624 -NCT00342706 -NCT00338715 -NCT00342862 -NCT00338728 -NCT00343005 -NCT00339105 -NCT00343083 -NCT00339196 -NCT00343148 -NCT00339430 -NCT00343187 -NCT00339560 -NCT00343213 -NCT00339586 -NCT00343252 -NCT00339742 -NCT00343304 -NCT00339846 -NCT00343655 -NCT00339989 -NCT00343798 -NCT00340106 -NCT00344097 -NCT00340158 -NCT00344123 -NCT00340171 -NCT00344266 -NCT00340184 -NCT00344383 -NCT00340275 -NCT00344448 -NCT00340288 -NCT00344487 -NCT00340301 -NCT00344643 -NCT00340509 -NCT00344721 -NCT00340652 -NCT00344773 -NCT00340665 -NCT00344851 -NCT00340678 -NCT00344877 -NCT00340808 -NCT00344994 -NCT00340834 -NCT00345111 -NCT00340899 -NCT00345267 -NCT00340964 -NCT00345345 -NCT00340990 -NCT00345514 -NCT00341003 -NCT00345553 -NCT00341120 -NCT00345579 -NCT00341159 -NCT00345748 -NCT00341250 -NCT00345774 -NCT00341276 -NCT00345826 -NCT00341328 -NCT00345839 -NCT00341367 -NCT00345917 -NCT00341432 -NCT00345969 -NCT00341497 -NCT00346060 -NCT00341549 -NCT00346099 -NCT00341601 -NCT00346255 -NCT00341744 -NCT00346359 -NCT00341822 -NCT00346372 -NCT00341874 -NCT00346775 -NCT00341965 -NCT00346801 -NCT00342043 -NCT00346853 -NCT00342069 -NCT00346905 -NCT00342082 -NCT00346983 -NCT00342121 -NCT00347061 -NCT00342173 -NCT00347139 -NCT00342199 -NCT00347152 -NCT00342290 -NCT00347308 -NCT00342433 -NCT00347451 -NCT00342446 -NCT00347464 -NCT00342511 -NCT00347490 -NCT00342524 -NCT00347516 -NCT00342537 -NCT00347529 -NCT00342589 -NCT00356512 -NCT00348075 -NCT00352664 -NCT00348140 -NCT00352651 -NCT00348166 -NCT00352846 -NCT00348218 -NCT00352872 -NCT00348270 -NCT00352976 -NCT00348309 -NCT00353093 -NCT00348478 -NCT00353158 -NCT00348647 -NCT00353171 -NCT00348660 -NCT00353301 -NCT00348686 -NCT00353340 -NCT00348777 -NCT00353379 -NCT00348816 -NCT00353405 -NCT00348946 -NCT00353431 -NCT00348985 -NCT00353444 -NCT00349037 -NCT00353470 -NCT00349050 -NCT00353548 -NCT00349063 -NCT00353600 -NCT00349453 -NCT00353665 -NCT00349596 -NCT00353717 -NCT00349622 -NCT00353730 -NCT00349635 -NCT00353743 -NCT00349674 -NCT00353782 -NCT00349791 -NCT00353860 -NCT00349843 -NCT00353951 -NCT00349856 -NCT00354068 -NCT00349882 -NCT00354081 -NCT00349895 -NCT00354159 -NCT00349921 -NCT00354276 -NCT00349999 -NCT00354302 -NCT00350194 -NCT00354354 -NCT00350298 -NCT00354575 -NCT00350337 -NCT00354653 -NCT00350753 -NCT00354757 -NCT00350818 -NCT00354809 -NCT00350831 -NCT00354835 -NCT00350896 -NCT00354887 -NCT00350987 -NCT00354939 -NCT00351065 -NCT00354978 -NCT00351208 -NCT00355030 -NCT00351221 -NCT00355108 -NCT00351273 -NCT00355134 -NCT00351403 -NCT00355160 -NCT00351520 -NCT00355394 -NCT00351819 -NCT00355459 -NCT00351858 -NCT00355472 -NCT00351975 -NCT00355576 -NCT00352170 -NCT00355667 -NCT00352313 -NCT00355706 -NCT00352365 -NCT00355823 -NCT00352391 -NCT00355836 -NCT00352430 -NCT00355914 -NCT00352443 -NCT00355927 -NCT00352482 -NCT00356265 -NCT00352495 -NCT00356369 -NCT00352599 -NCT00356382 -NCT00352625 -NCT00365651 -NCT00356603 -NCT00360945 -NCT00356889 -NCT00360932 -NCT00357006 -NCT00361049 -NCT00357019 -NCT00361127 -NCT00357032 -NCT00361179 -NCT00357201 -NCT00361192 -NCT00357292 -NCT00361205 -NCT00357305 -NCT00361218 -NCT00357331 -NCT00361296 -NCT00357383 -NCT00361387 -NCT00357435 -NCT00361439 -NCT00357461 -NCT00361465 -NCT00357539 -NCT00361504 -NCT00357565 -NCT00361582 -NCT00357591 -NCT00361777 -NCT00357656 -NCT00361816 -NCT00357708 -NCT00361920 -NCT00357851 -NCT00361933 -NCT00357864 -NCT00361972 -NCT00357981 -NCT00362063 -NCT00358020 -NCT00362297 -NCT00358072 -NCT00362518 -NCT00358189 -NCT00362570 -NCT00358241 -NCT00362739 -NCT00358371 -NCT00362752 -NCT00358501 -NCT00362843 -NCT00358618 -NCT00362869 -NCT00358631 -NCT00362908 -NCT00358761 -NCT00362986 -NCT00358774 -NCT00363220 -NCT00358813 -NCT00363233 -NCT00358839 -NCT00363662 -NCT00359073 -NCT00363727 -NCT00359177 -NCT00363740 -NCT00359203 -NCT00363857 -NCT00359229 -NCT00364065 -NCT00359268 -NCT00364286 -NCT00359320 -NCT00364481 -NCT00359333 -NCT00364611 -NCT00359411 -NCT00364689 -NCT00359515 -NCT00364780 -NCT00359645 -NCT00364949 -NCT00359710 -NCT00364988 -NCT00359723 -NCT00365092 -NCT00359840 -NCT00365131 -NCT00359853 -NCT00365144 -NCT00359931 -NCT00365157 -NCT00359970 -NCT00365274 -NCT00360373 -NCT00365287 -NCT00360399 -NCT00365365 -NCT00360425 -NCT00365391 -NCT00360607 -NCT00365417 -NCT00360633 -NCT00365456 -NCT00360789 -NCT00365586 -NCT00360828 -NCT00365625 -NCT00360906 -NCT00375180 -NCT00365716 -NCT00370344 -NCT00365846 -NCT00370214 -NCT00365859 -NCT00370383 -NCT00365976 -NCT00370604 -NCT00366132 -NCT00370695 -NCT00366158 -NCT00370799 -NCT00366236 -NCT00370877 -NCT00366392 -NCT00370968 -NCT00366405 -NCT00371033 -NCT00366418 -NCT00371124 -NCT00366496 -NCT00371150 -NCT00366587 -NCT00371163 -NCT00366730 -NCT00371293 -NCT00366782 -NCT00371449 -NCT00366847 -NCT00371462 -NCT00366964 -NCT00371527 -NCT00367003 -NCT00371631 -NCT00367185 -NCT00371657 -NCT00367198 -NCT00371670 -NCT00367250 -NCT00371683 -NCT00367315 -NCT00371943 -NCT00367367 -NCT00372008 -NCT00367432 -NCT00372021 -NCT00367588 -NCT00372177 -NCT00367627 -NCT00372203 -NCT00367796 -NCT00372333 -NCT00367848 -NCT00372424 -NCT00367913 -NCT00372450 -NCT00367952 -NCT00372515 -NCT00368004 -NCT00372580 -NCT00368043 -NCT00372593 -NCT00368173 -NCT00372710 -NCT00368225 -NCT00372801 -NCT00368277 -NCT00372918 -NCT00368303 -NCT00372931 -NCT00368381 -NCT00373139 -NCT00368394 -NCT00373256 -NCT00368446 -NCT00373334 -NCT00368459 -NCT00373425 -NCT00368628 -NCT00373529 -NCT00368693 -NCT00373555 -NCT00368758 -NCT00373594 -NCT00369057 -NCT00373867 -NCT00369096 -NCT00373997 -NCT00369304 -NCT00374036 -NCT00369317 -NCT00374114 -NCT00369590 -NCT00374530 -NCT00369655 -NCT00374543 -NCT00369668 -NCT00374608 -NCT00369707 -NCT00374699 -NCT00369889 -NCT00374751 -NCT00369967 -NCT00375050 -NCT00369980 -NCT00375076 -NCT00370019 -NCT00375115 -NCT00370071 -NCT00375141 -NCT00370084 -NCT00385281 -NCT00375206 -NCT00380029 -NCT00375271 -NCT00379951 -NCT00375323 -NCT00380055 -NCT00375336 -NCT00380068 -NCT00375375 -NCT00380185 -NCT00375388 -NCT00380250 -NCT00375622 -NCT00380289 -NCT00375700 -NCT00380315 -NCT00375778 -NCT00380419 -NCT00375921 -NCT00380614 -NCT00375947 -NCT00381004 -NCT00375973 -NCT00381108 -NCT00376064 -NCT00381134 -NCT00376090 -NCT00381147 -NCT00376181 -NCT00381251 -NCT00376194 -NCT00381433 -NCT00376311 -NCT00381550 -NCT00376441 -NCT00381563 -NCT00376467 -NCT00381641 -NCT00376480 -NCT00381680 -NCT00376506 -NCT00381706 -NCT00376688 -NCT00381888 -NCT00376727 -NCT00381914 -NCT00376766 -NCT00381966 -NCT00376870 -NCT00382057 -NCT00376948 -NCT00382070 -NCT00377208 -NCT00382109 -NCT00377247 -NCT00382343 -NCT00377260 -NCT00382447 -NCT00377312 -NCT00382590 -NCT00377364 -NCT00382629 -NCT00377559 -NCT00382681 -NCT00377754 -NCT00382915 -NCT00377949 -NCT00382928 -NCT00378196 -NCT00382941 -NCT00378235 -NCT00382967 -NCT00378365 -NCT00383084 -NCT00378456 -NCT00383097 -NCT00378469 -NCT00383110 -NCT00378534 -NCT00383227 -NCT00378573 -NCT00383357 -NCT00378638 -NCT00383409 -NCT00378664 -NCT00383474 -NCT00378677 -NCT00383591 -NCT00378690 -NCT00383643 -NCT00378755 -NCT00383669 -NCT00378846 -NCT00383708 -NCT00378898 -NCT00383799 -NCT00378937 -NCT00383916 -NCT00379015 -NCT00384046 -NCT00379184 -NCT00384267 -NCT00379223 -NCT00384527 -NCT00379275 -NCT00384618 -NCT00379288 -NCT00384761 -NCT00379340 -NCT00384878 -NCT00379821 -NCT00394290 -NCT00385346 -NCT00390143 -NCT00385385 -NCT00390104 -NCT00385749 -NCT00390195 -NCT00385788 -NCT00390221 -NCT00386113 -NCT00390299 -NCT00386178 -NCT00390390 -NCT00386282 -NCT00390429 -NCT00386308 -NCT00390455 -NCT00386360 -NCT00390663 -NCT00386620 -NCT00390741 -NCT00386633 -NCT00390793 -NCT00386672 -NCT00391066 -NCT00386685 -NCT00391092 -NCT00386737 -NCT00391157 -NCT00386776 -NCT00391300 -NCT00386880 -NCT00391417 -NCT00386906 -NCT00391664 -NCT00386958 -NCT00391690 -NCT00387179 -NCT00391703 -NCT00387192 -NCT00391781 -NCT00387244 -NCT00391794 -NCT00387283 -NCT00391976 -NCT00387374 -NCT00391989 -NCT00387582 -NCT00392067 -NCT00387842 -NCT00392080 -NCT00387907 -NCT00392093 -NCT00388089 -NCT00392171 -NCT00388141 -NCT00392327 -NCT00388258 -NCT00392392 -NCT00388297 -NCT00392457 -NCT00388401 -NCT00392496 -NCT00388479 -NCT00392652 -NCT00388505 -NCT00392756 -NCT00388531 -NCT00392769 -NCT00388609 -NCT00392808 -NCT00388661 -NCT00392834 -NCT00388726 -NCT00392873 -NCT00388921 -NCT00392912 -NCT00389038 -NCT00392938 -NCT00389090 -NCT00392951 -NCT00389142 -NCT00392990 -NCT00389272 -NCT00393159 -NCT00389376 -NCT00393172 -NCT00389428 -NCT00393250 -NCT00389467 -NCT00393263 -NCT00389649 -NCT00393380 -NCT00389714 -NCT00393874 -NCT00389805 -NCT00393900 -NCT00389818 -NCT00393913 -NCT00389870 -NCT00393939 -NCT00389922 -NCT00394043 -NCT00389935 -NCT00394082 -NCT00389948 -NCT00394147 -NCT00390039 -NCT00394225 -NCT00390065 -NCT00394251 -NCT00390091 -NCT00403975 -NCT00394316 -NCT00398333 -NCT00394329 -NCT00398151 -NCT00394407 -NCT00398437 -NCT00394472 -NCT00398489 -NCT00394524 -NCT00398541 -NCT00394537 -NCT00398567 -NCT00394784 -NCT00398580 -NCT00394888 -NCT00398775 -NCT00394901 -NCT00398866 -NCT00394940 -NCT00399048 -NCT00394966 -NCT00399165 -NCT00395135 -NCT00399269 -NCT00395161 -NCT00399373 -NCT00395226 -NCT00399399 -NCT00395291 -NCT00399516 -NCT00395304 -NCT00399529 -NCT00395330 -NCT00399542 -NCT00395369 -NCT00399646 -NCT00395408 -NCT00400140 -NCT00395538 -NCT00400465 -NCT00395590 -NCT00400530 -NCT00395616 -NCT00400816 -NCT00395629 -NCT00400946 -NCT00395694 -NCT00400998 -NCT00395967 -NCT00401011 -NCT00396084 -NCT00401193 -NCT00396097 -NCT00401219 -NCT00396188 -NCT00401245 -NCT00396305 -NCT00401271 -NCT00396370 -NCT00401297 -NCT00396396 -NCT00401427 -NCT00396435 -NCT00401518 -NCT00396474 -NCT00401934 -NCT00396513 -NCT00401999 -NCT00396604 -NCT00402077 -NCT00396643 -NCT00402545 -NCT00396773 -NCT00402623 -NCT00397215 -NCT00402688 -NCT00397267 -NCT00402727 -NCT00397345 -NCT00402896 -NCT00397358 -NCT00402935 -NCT00397384 -NCT00402974 -NCT00397423 -NCT00403039 -NCT00397462 -NCT00403104 -NCT00397475 -NCT00403273 -NCT00397501 -NCT00403338 -NCT00397579 -NCT00403390 -NCT00397657 -NCT00403507 -NCT00397670 -NCT00403520 -NCT00397683 -NCT00403572 -NCT00397787 -NCT00403598 -NCT00397813 -NCT00403819 -NCT00397839 -NCT00403884 -NCT00398034 -NCT00403897 -NCT00398112 -NCT00403949 -NCT00398138 -NCT00412971 -NCT00404066 -NCT00409331 -NCT00404079 -NCT00409214 -NCT00404118 -NCT00409357 -NCT00404222 -NCT00409383 -NCT00404586 -NCT00409435 -NCT00404625 -NCT00409500 -NCT00404664 -NCT00409630 -NCT00404859 -NCT00409721 -NCT00404937 -NCT00409747 -NCT00405119 -NCT00409864 -NCT00405145 -NCT00409968 -NCT00405236 -NCT00410059 -NCT00405340 -NCT00410189 -NCT00405366 -NCT00410228 -NCT00405509 -NCT00410293 -NCT00405587 -NCT00410306 -NCT00405613 -NCT00410540 -NCT00405639 -NCT00410579 -NCT00405756 -NCT00410592 -NCT00405782 -NCT00410605 -NCT00405847 -NCT00410618 -NCT00405860 -NCT00410670 -NCT00405938 -NCT00410761 -NCT00406198 -NCT00410774 -NCT00406770 -NCT00410852 -NCT00406874 -NCT00410995 -NCT00406926 -NCT00411034 -NCT00406978 -NCT00411047 -NCT00407329 -NCT00411112 -NCT00407355 -NCT00411151 -NCT00407381 -NCT00411216 -NCT00407446 -NCT00411255 -NCT00407472 -NCT00411281 -NCT00407537 -NCT00411307 -NCT00407576 -NCT00411346 -NCT00407602 -NCT00411372 -NCT00407680 -NCT00411450 -NCT00407706 -NCT00411567 -NCT00407797 -NCT00411619 -NCT00407888 -NCT00411632 -NCT00407966 -NCT00411671 -NCT00408005 -NCT00411684 -NCT00408031 -NCT00411788 -NCT00408057 -NCT00411801 -NCT00408109 -NCT00412100 -NCT00408148 -NCT00412152 -NCT00408226 -NCT00412360 -NCT00408278 -NCT00412386 -NCT00408408 -NCT00412412 -NCT00408447 -NCT00412542 -NCT00408473 -NCT00412607 -NCT00408499 -NCT00412815 -NCT00408902 -NCT00412867 -NCT00408954 -NCT00412880 -NCT00409032 -NCT00412906 -NCT00409149 -NCT00422643 -NCT00413088 -NCT00417781 -NCT00413166 -NCT00417768 -NCT00413244 -NCT00417872 -NCT00413309 -NCT00417898 -NCT00413348 -NCT00417911 -NCT00413387 -NCT00417937 -NCT00413465 -NCT00417963 -NCT00413595 -NCT00418002 -NCT00413621 -NCT00418028 -NCT00413751 -NCT00418054 -NCT00413855 -NCT00418080 -NCT00413920 -NCT00418275 -NCT00413959 -NCT00418301 -NCT00413998 -NCT00418340 -NCT00414024 -NCT00418470 -NCT00414128 -NCT00418639 -NCT00414271 -NCT00418678 -NCT00414336 -NCT00418782 -NCT00414375 -NCT00418925 -NCT00414531 -NCT00418938 -NCT00414557 -NCT00419094 -NCT00414583 -NCT00419133 -NCT00414830 -NCT00419172 -NCT00414843 -NCT00419185 -NCT00414960 -NCT00419263 -NCT00414973 -NCT00419276 -NCT00415077 -NCT00419549 -NCT00415233 -NCT00419562 -NCT00415350 -NCT00419627 -NCT00415376 -NCT00419692 -NCT00415545 -NCT00419731 -NCT00415584 -NCT00419796 -NCT00415610 -NCT00419874 -NCT00415714 -NCT00420147 -NCT00415909 -NCT00420199 -NCT00416143 -NCT00420251 -NCT00416234 -NCT00420394 -NCT00416325 -NCT00420459 -NCT00416364 -NCT00420641 -NCT00416442 -NCT00420654 -NCT00416468 -NCT00420810 -NCT00416585 -NCT00420875 -NCT00416598 -NCT00420992 -NCT00416702 -NCT00421096 -NCT00416728 -NCT00421239 -NCT00416897 -NCT00421369 -NCT00416949 -NCT00421421 -NCT00416962 -NCT00421434 -NCT00417053 -NCT00421460 -NCT00417313 -NCT00421694 -NCT00417352 -NCT00421967 -NCT00417404 -NCT00422188 -NCT00417456 -NCT00422201 -NCT00417547 -NCT00422487 -NCT00417573 -NCT00422630 -NCT00417612 -NCT00430794 -NCT00422695 -NCT00426725 -NCT00422708 -NCT00426686 -NCT00422760 -NCT00426764 -NCT00422773 -NCT00426777 -NCT00422812 -NCT00426842 -NCT00422851 -NCT00426933 -NCT00422903 -NCT00426959 -NCT00422994 -NCT00426985 -NCT00423072 -NCT00427024 -NCT00423085 -NCT00427219 -NCT00423215 -NCT00427323 -NCT00423267 -NCT00427427 -NCT00423319 -NCT00427700 -NCT00423514 -NCT00427726 -NCT00423579 -NCT00427791 -NCT00423735 -NCT00427830 -NCT00423839 -NCT00427947 -NCT00423878 -NCT00428012 -NCT00423917 -NCT00428025 -NCT00424008 -NCT00428038 -NCT00424099 -NCT00428090 -NCT00424242 -NCT00428103 -NCT00424346 -NCT00428142 -NCT00424398 -NCT00428168 -NCT00424489 -NCT00428220 -NCT00424580 -NCT00428558 -NCT00424606 -NCT00428753 -NCT00424619 -NCT00428831 -NCT00424658 -NCT00428922 -NCT00424671 -NCT00428935 -NCT00424736 -NCT00428987 -NCT00424827 -NCT00429104 -NCT00424905 -NCT00429117 -NCT00424996 -NCT00429156 -NCT00425061 -NCT00429182 -NCT00425113 -NCT00429247 -NCT00425165 -NCT00429260 -NCT00425321 -NCT00429299 -NCT00425347 -NCT00429325 -NCT00425477 -NCT00429364 -NCT00425607 -NCT00429533 -NCT00425854 -NCT00429689 -NCT00426127 -NCT00429754 -NCT00426244 -NCT00429832 -NCT00426283 -NCT00429949 -NCT00426374 -NCT00430001 -NCT00426413 -NCT00430014 -NCT00426465 -NCT00430105 -NCT00426478 -NCT00430118 -NCT00426491 -NCT00430287 -NCT00426517 -NCT00430495 -NCT00426530 -NCT00430521 -NCT00426556 -NCT00430599 -NCT00426595 -NCT00430664 -NCT00426621 -NCT00430755 -NCT00426647 -NCT00439673 -NCT00430807 -NCT00435591 -NCT00430859 -NCT00435552 -NCT00430872 -NCT00435604 -NCT00430911 -NCT00435708 -NCT00430937 -NCT00435773 -NCT00431067 -NCT00435942 -NCT00431080 -NCT00436137 -NCT00431197 -NCT00436215 -NCT00431366 -NCT00436488 -NCT00431457 -NCT00436527 -NCT00431496 -NCT00436566 -NCT00431561 -NCT00436579 -NCT00431600 -NCT00436618 -NCT00431626 -NCT00436644 -NCT00431704 -NCT00436683 -NCT00431717 -NCT00436787 -NCT00431756 -NCT00436904 -NCT00431925 -NCT00436956 -NCT00432068 -NCT00437021 -NCT00432146 -NCT00437060 -NCT00432172 -NCT00437086 -NCT00432276 -NCT00437346 -NCT00432393 -NCT00437658 -NCT00432458 -NCT00437684 -NCT00432484 -NCT00437762 -NCT00433056 -NCT00437827 -NCT00433095 -NCT00437840 -NCT00433108 -NCT00437983 -NCT00433160 -NCT00438048 -NCT00433173 -NCT00438061 -NCT00433199 -NCT00438178 -NCT00433329 -NCT00438191 -NCT00433368 -NCT00438243 -NCT00433407 -NCT00438308 -NCT00433498 -NCT00438321 -NCT00433537 -NCT00438334 -NCT00433550 -NCT00438451 -NCT00433589 -NCT00438464 -NCT00433628 -NCT00438568 -NCT00433654 -NCT00438581 -NCT00433680 -NCT00438633 -NCT00433732 -NCT00438672 -NCT00433862 -NCT00438763 -NCT00433901 -NCT00438841 -NCT00433927 -NCT00438854 -NCT00434031 -NCT00438958 -NCT00434096 -NCT00439127 -NCT00434122 -NCT00439231 -NCT00434473 -NCT00439244 -NCT00434551 -NCT00439270 -NCT00434564 -NCT00439387 -NCT00434824 -NCT00439543 -NCT00434876 -NCT00439621 -NCT00435123 -NCT00439647 -NCT00435214 -NCT00439660 -NCT00435526 -NCT00448981 -NCT00439699 -NCT00444691 -NCT00439803 -NCT00444678 -NCT00439816 -NCT00444769 -NCT00440180 -NCT00444873 -NCT00440362 -NCT00444899 -NCT00440440 -NCT00444912 -NCT00440583 -NCT00445003 -NCT00440635 -NCT00445055 -NCT00440661 -NCT00445198 -NCT00440986 -NCT00445224 -NCT00441090 -NCT00445393 -NCT00441103 -NCT00445432 -NCT00441168 -NCT00445458 -NCT00441194 -NCT00445575 -NCT00441415 -NCT00445627 -NCT00441480 -NCT00445744 -NCT00441701 -NCT00445887 -NCT00442000 -NCT00445900 -NCT00442013 -NCT00445913 -NCT00442078 -NCT00445952 -NCT00442117 -NCT00445965 -NCT00442130 -NCT00446030 -NCT00442182 -NCT00446082 -NCT00442195 -NCT00446134 -NCT00442351 -NCT00446225 -NCT00442364 -NCT00446316 -NCT00442390 -NCT00446329 -NCT00442468 -NCT00446355 -NCT00442481 -NCT00446433 -NCT00442767 -NCT00446563 -NCT00442936 -NCT00446823 -NCT00443144 -NCT00446940 -NCT00443170 -NCT00446979 -NCT00443222 -NCT00447018 -NCT00443287 -NCT00447304 -NCT00443313 -NCT00447356 -NCT00443482 -NCT00447395 -NCT00443768 -NCT00447499 -NCT00443781 -NCT00447681 -NCT00443820 -NCT00447915 -NCT00443872 -NCT00447928 -NCT00443898 -NCT00447980 -NCT00443963 -NCT00447993 -NCT00444041 -NCT00448019 -NCT00444119 -NCT00448071 -NCT00444210 -NCT00448201 -NCT00444236 -NCT00448279 -NCT00444275 -NCT00448292 -NCT00444288 -NCT00448357 -NCT00444353 -NCT00448422 -NCT00444392 -NCT00448474 -NCT00444405 -NCT00448591 -NCT00444535 -NCT00448682 -NCT00444561 -NCT00448851 -NCT00444587 -NCT00448955 -NCT00444639 -NCT00457145 -NCT00449072 -NCT00453206 -NCT00449124 -NCT00453128 -NCT00449462 -NCT00453245 -NCT00449514 -NCT00453427 -NCT00449540 -NCT00453453 -NCT00449670 -NCT00453635 -NCT00449748 -NCT00453765 -NCT00449787 -NCT00453791 -NCT00449865 -NCT00453830 -NCT00450164 -NCT00453843 -NCT00450203 -NCT00453908 -NCT00450281 -NCT00454051 -NCT00450294 -NCT00454142 -NCT00450437 -NCT00454168 -NCT00450463 -NCT00454194 -NCT00450541 -NCT00454207 -NCT00450619 -NCT00454220 -NCT00450697 -NCT00454259 -NCT00450853 -NCT00454285 -NCT00450892 -NCT00454441 -NCT00450996 -NCT00454480 -NCT00451061 -NCT00454571 -NCT00451074 -NCT00454623 -NCT00451204 -NCT00455039 -NCT00451321 -NCT00455078 -NCT00451373 -NCT00455091 -NCT00451490 -NCT00455156 -NCT00451503 -NCT00455234 -NCT00451529 -NCT00455247 -NCT00451555 -NCT00455286 -NCT00451568 -NCT00455312 -NCT00451620 -NCT00455325 -NCT00451789 -NCT00455403 -NCT00451841 -NCT00455429 -NCT00451880 -NCT00455455 -NCT00451893 -NCT00455507 -NCT00451919 -NCT00455598 -NCT00451997 -NCT00455728 -NCT00452036 -NCT00456118 -NCT00452062 -NCT00456157 -NCT00452101 -NCT00456222 -NCT00452140 -NCT00456300 -NCT00452322 -NCT00456313 -NCT00452335 -NCT00456378 -NCT00452348 -NCT00456404 -NCT00452374 -NCT00456508 -NCT00452530 -NCT00456664 -NCT00452543 -NCT00456846 -NCT00452556 -NCT00456885 -NCT00452582 -NCT00456924 -NCT00452699 -NCT00456963 -NCT00452712 -NCT00457002 -NCT00452725 -NCT00457015 -NCT00452855 -NCT00457067 -NCT00452894 -NCT00457132 -NCT00453102 -NCT00465699 -NCT00457184 -NCT00461669 -NCT00457236 -NCT00461591 -NCT00457275 -NCT00461747 -NCT00457288 -NCT00461760 -NCT00457340 -NCT00461864 -NCT00457366 -NCT00461916 -NCT00457509 -NCT00461968 -NCT00457613 -NCT00461994 -NCT00457717 -NCT00462020 -NCT00457951 -NCT00462046 -NCT00458237 -NCT00462098 -NCT00458263 -NCT00462137 -NCT00458276 -NCT00462241 -NCT00458406 -NCT00462267 -NCT00458419 -NCT00462397 -NCT00458458 -NCT00462449 -NCT00458471 -NCT00462475 -NCT00458523 -NCT00462605 -NCT00458562 -NCT00462644 -NCT00458575 -NCT00462657 -NCT00458627 -NCT00462670 -NCT00458705 -NCT00462683 -NCT00458731 -NCT00462735 -NCT00458770 -NCT00462761 -NCT00458796 -NCT00462813 -NCT00458822 -NCT00462865 -NCT00458926 -NCT00462891 -NCT00458991 -NCT00463073 -NCT00459056 -NCT00463112 -NCT00459212 -NCT00463125 -NCT00459329 -NCT00463242 -NCT00459342 -NCT00463294 -NCT00459368 -NCT00463450 -NCT00459433 -NCT00463580 -NCT00459459 -NCT00463762 -NCT00459498 -NCT00463788 -NCT00459537 -NCT00463814 -NCT00459914 -NCT00463853 -NCT00459979 -NCT00463879 -NCT00459992 -NCT00464074 -NCT00460031 -NCT00464295 -NCT00460109 -NCT00464308 -NCT00460174 -NCT00464555 -NCT00460408 -NCT00464581 -NCT00460447 -NCT00464594 -NCT00460538 -NCT00464646 -NCT00460928 -NCT00464711 -NCT00461149 -NCT00464919 -NCT00461162 -NCT00464984 -NCT00461188 -NCT00465101 -NCT00461240 -NCT00465361 -NCT00461370 -NCT00465387 -NCT00461396 -NCT00465426 -NCT00461448 -NCT00465452 -NCT00461526 -NCT00465517 -NCT00461578 -NCT00474669 -NCT00465790 -NCT00469859 -NCT00465907 -NCT00469456 -NCT00465933 -NCT00470119 -NCT00465972 -NCT00470171 -NCT00466102 -NCT00470197 -NCT00466167 -NCT00470353 -NCT00466193 -NCT00470392 -NCT00466271 -NCT00470652 -NCT00466336 -NCT00470704 -NCT00466349 -NCT00470782 -NCT00466375 -NCT00470847 -NCT00466505 -NCT00470977 -NCT00466518 -NCT00470990 -NCT00466635 -NCT00471159 -NCT00466674 -NCT00471237 -NCT00466713 -NCT00471250 -NCT00466739 -NCT00471315 -NCT00466817 -NCT00471497 -NCT00466869 -NCT00471523 -NCT00466921 -NCT00471536 -NCT00467194 -NCT00471627 -NCT00467246 -NCT00471692 -NCT00467350 -NCT00471731 -NCT00467363 -NCT00471796 -NCT00467376 -NCT00471809 -NCT00467597 -NCT00471835 -NCT00467636 -NCT00471861 -NCT00467675 -NCT00471887 -NCT00467701 -NCT00471900 -NCT00467792 -NCT00471952 -NCT00467818 -NCT00472030 -NCT00467831 -NCT00472069 -NCT00467844 -NCT00472186 -NCT00467870 -NCT00472303 -NCT00467896 -NCT00472355 -NCT00467922 -NCT00472485 -NCT00467961 -NCT00472550 -NCT00468013 -NCT00472628 -NCT00468026 -NCT00472680 -NCT00468052 -NCT00472823 -NCT00468065 -NCT00472849 -NCT00468078 -NCT00472901 -NCT00468208 -NCT00473083 -NCT00468299 -NCT00473161 -NCT00468325 -NCT00473291 -NCT00468338 -NCT00473356 -NCT00468403 -NCT00473369 -NCT00468585 -NCT00473408 -NCT00468624 -NCT00473460 -NCT00468715 -NCT00473655 -NCT00468832 -NCT00474162 -NCT00468858 -NCT00474175 -NCT00469079 -NCT00474396 -NCT00469118 -NCT00474409 -NCT00469144 -NCT00474474 -NCT00469196 -NCT00484484 -NCT00474721 -NCT00479830 -NCT00474773 -NCT00479739 -NCT00474838 -NCT00480038 -NCT00474942 -NCT00480272 -NCT00475046 -NCT00480311 -NCT00475150 -NCT00480519 -NCT00475176 -NCT00480545 -NCT00475306 -NCT00480662 -NCT00475436 -NCT00480870 -NCT00475462 -NCT00481052 -NCT00475501 -NCT00481208 -NCT00475514 -NCT00481260 -NCT00475592 -NCT00481403 -NCT00475670 -NCT00481416 -NCT00475683 -NCT00481429 -NCT00475761 -NCT00481598 -NCT00475943 -NCT00481676 -NCT00475982 -NCT00481689 -NCT00476138 -NCT00481754 -NCT00476190 -NCT00481780 -NCT00476203 -NCT00481845 -NCT00476255 -NCT00481871 -NCT00476333 -NCT00481949 -NCT00476398 -NCT00482053 -NCT00476450 -NCT00482066 -NCT00476476 -NCT00482105 -NCT00476489 -NCT00482209 -NCT00476645 -NCT00482248 -NCT00476736 -NCT00482378 -NCT00476775 -NCT00482391 -NCT00476814 -NCT00482612 -NCT00477256 -NCT00482677 -NCT00477399 -NCT00482703 -NCT00477477 -NCT00482833 -NCT00477516 -NCT00482885 -NCT00477620 -NCT00483067 -NCT00477711 -NCT00483119 -NCT00477724 -NCT00483145 -NCT00477750 -NCT00483184 -NCT00477789 -NCT00483236 -NCT00477841 -NCT00483288 -NCT00477971 -NCT00483379 -NCT00478296 -NCT00483418 -NCT00478491 -NCT00483457 -NCT00478504 -NCT00483600 -NCT00478699 -NCT00483704 -NCT00478712 -NCT00483834 -NCT00479011 -NCT00483886 -NCT00479037 -NCT00483912 -NCT00479063 -NCT00483925 -NCT00479154 -NCT00484042 -NCT00479193 -NCT00484068 -NCT00479336 -NCT00484081 -NCT00479479 -NCT00484263 -NCT00479518 -NCT00484458 -NCT00479531 -NCT00494260 -NCT00484679 -NCT00489346 -NCT00484705 -NCT00489333 -NCT00484718 -NCT00489385 -NCT00484783 -NCT00489437 -NCT00484848 -NCT00489463 -NCT00485069 -NCT00489476 -NCT00485277 -NCT00489502 -NCT00485290 -NCT00489918 -NCT00485303 -NCT00490022 -NCT00485316 -NCT00490100 -NCT00485368 -NCT00490139 -NCT00485446 -NCT00490165 -NCT00485576 -NCT00490243 -NCT00485836 -NCT00490386 -NCT00485940 -NCT00490555 -NCT00486109 -NCT00490750 -NCT00486148 -NCT00490789 -NCT00486239 -NCT00490906 -NCT00486278 -NCT00490932 -NCT00486460 -NCT00491218 -NCT00486486 -NCT00491283 -NCT00486603 -NCT00491335 -NCT00486642 -NCT00491400 -NCT00486668 -NCT00491478 -NCT00486759 -NCT00491582 -NCT00486876 -NCT00491816 -NCT00486941 -NCT00491881 -NCT00486980 -NCT00492011 -NCT00487162 -NCT00492154 -NCT00487201 -NCT00492219 -NCT00487279 -NCT00492388 -NCT00487370 -NCT00492401 -NCT00487396 -NCT00492531 -NCT00487422 -NCT00492622 -NCT00487578 -NCT00492726 -NCT00487643 -NCT00492856 -NCT00487695 -NCT00492973 -NCT00487760 -NCT00492999 -NCT00487825 -NCT00493103 -NCT00487838 -NCT00493116 -NCT00487916 -NCT00493129 -NCT00488007 -NCT00493389 -NCT00488033 -NCT00493571 -NCT00488124 -NCT00493636 -NCT00488137 -NCT00493649 -NCT00488267 -NCT00493870 -NCT00488306 -NCT00493935 -NCT00488332 -NCT00493948 -NCT00488410 -NCT00493961 -NCT00488514 -NCT00493974 -NCT00488527 -NCT00493987 -NCT00488540 -NCT00494065 -NCT00488644 -NCT00494169 -NCT00488826 -NCT00494208 -NCT00489281 -NCT00494234 -NCT00489307 -NCT00503750 -NCT00494364 -NCT00499174 -NCT00494442 -NCT00499122 -NCT00494507 -NCT00499291 -NCT00494585 -NCT00499330 -NCT00494624 -NCT00499603 -NCT00494689 -NCT00499616 -NCT00495079 -NCT00499655 -NCT00495157 -NCT00499785 -NCT00495235 -NCT00499837 -NCT00495287 -NCT00499967 -NCT00495365 -NCT00499993 -NCT00495586 -NCT00500175 -NCT00495638 -NCT00500331 -NCT00495690 -NCT00500344 -NCT00495781 -NCT00500435 -NCT00495846 -NCT00500474 -NCT00495872 -NCT00500526 -NCT00496106 -NCT00500552 -NCT00496834 -NCT00500617 -NCT00497094 -NCT00500734 -NCT00497146 -NCT00500747 -NCT00497224 -NCT00500799 -NCT00497263 -NCT00500994 -NCT00497276 -NCT00501059 -NCT00497484 -NCT00501215 -NCT00497523 -NCT00501358 -NCT00497549 -NCT00501371 -NCT00497575 -NCT00501410 -NCT00497653 -NCT00501462 -NCT00497666 -NCT00501748 -NCT00497705 -NCT00501826 -NCT00497809 -NCT00501943 -NCT00497835 -NCT00502047 -NCT00497861 -NCT00502073 -NCT00497913 -NCT00502177 -NCT00497939 -NCT00502320 -NCT00498082 -NCT00502450 -NCT00498095 -NCT00502554 -NCT00498147 -NCT00502593 -NCT00498238 -NCT00502632 -NCT00498394 -NCT00502658 -NCT00498433 -NCT00502684 -NCT00498446 -NCT00502697 -NCT00498485 -NCT00502840 -NCT00498511 -NCT00502905 -NCT00498537 -NCT00502957 -NCT00498667 -NCT00502970 -NCT00498719 -NCT00502983 -NCT00498875 -NCT00503035 -NCT00498901 -NCT00503100 -NCT00498953 -NCT00503152 -NCT00498992 -NCT00503165 -NCT00499005 -NCT00503256 -NCT00499070 -NCT00503347 -NCT00499083 -NCT00503399 -NCT00499109 -NCT00513617 -NCT00503854 -NCT00508989 -NCT00503906 -NCT00508924 -NCT00503919 -NCT00509041 -NCT00504010 -NCT00509080 -NCT00504101 -NCT00509093 -NCT00504153 -NCT00509145 -NCT00504387 -NCT00509197 -NCT00504556 -NCT00509275 -NCT00504634 -NCT00509288 -NCT00504660 -NCT00509431 -NCT00504738 -NCT00509483 -NCT00504764 -NCT00509535 -NCT00505011 -NCT00509652 -NCT00505297 -NCT00509678 -NCT00505414 -NCT00509769 -NCT00505609 -NCT00509782 -NCT00505648 -NCT00510042 -NCT00505752 -NCT00510133 -NCT00505791 -NCT00510172 -NCT00505804 -NCT00510406 -NCT00505882 -NCT00510536 -NCT00506103 -NCT00510549 -NCT00506116 -NCT00510575 -NCT00506194 -NCT00510757 -NCT00506324 -NCT00510783 -NCT00506376 -NCT00510939 -NCT00506532 -NCT00511069 -NCT00506597 -NCT00511316 -NCT00506636 -NCT00511459 -NCT00506831 -NCT00511654 -NCT00506870 -NCT00511693 -NCT00506883 -NCT00511771 -NCT00506922 -NCT00511797 -NCT00506961 -NCT00512070 -NCT00507117 -NCT00512096 -NCT00507195 -NCT00512252 -NCT00507338 -NCT00512304 -NCT00507377 -NCT00512343 -NCT00507416 -NCT00512499 -NCT00507455 -NCT00512564 -NCT00507611 -NCT00512694 -NCT00507728 -NCT00512707 -NCT00507767 -NCT00512746 -NCT00507780 -NCT00512837 -NCT00507806 -NCT00512850 -NCT00507832 -NCT00512941 -NCT00507858 -NCT00512954 -NCT00507871 -NCT00513058 -NCT00507962 -NCT00513071 -NCT00508027 -NCT00513123 -NCT00508066 -NCT00513292 -NCT00508209 -NCT00513370 -NCT00508287 -NCT00513396 -NCT00508326 -NCT00513422 -NCT00508404 -NCT00513461 -NCT00508677 -NCT00524056 -NCT00513656 -NCT00518817 -NCT00513903 -NCT00518635 -NCT00513929 -NCT00518895 -NCT00514020 -NCT00519051 -NCT00514046 -NCT00519077 -NCT00514150 -NCT00519155 -NCT00514462 -NCT00519298 -NCT00514475 -NCT00519311 -NCT00514540 -NCT00519597 -NCT00514592 -NCT00519857 -NCT00514787 -NCT00519935 -NCT00514865 -NCT00520104 -NCT00514982 -NCT00520156 -NCT00515008 -NCT00520182 -NCT00515021 -NCT00520481 -NCT00515034 -NCT00520520 -NCT00515411 -NCT00520611 -NCT00515450 -NCT00520689 -NCT00515476 -NCT00520741 -NCT00515619 -NCT00520884 -NCT00515632 -NCT00520988 -NCT00515710 -NCT00521092 -NCT00515775 -NCT00521118 -NCT00515866 -NCT00521144 -NCT00515892 -NCT00521222 -NCT00516035 -NCT00521300 -NCT00516048 -NCT00521430 -NCT00516074 -NCT00521638 -NCT00516191 -NCT00521729 -NCT00516373 -NCT00521846 -NCT00516399 -NCT00522002 -NCT00516581 -NCT00522093 -NCT00516828 -NCT00522145 -NCT00517023 -NCT00522158 -NCT00517062 -NCT00522288 -NCT00517231 -NCT00522353 -NCT00517257 -NCT00522392 -NCT00517361 -NCT00522431 -NCT00517491 -NCT00522665 -NCT00517712 -NCT00522743 -NCT00517751 -NCT00522847 -NCT00517842 -NCT00522860 -NCT00517881 -NCT00523068 -NCT00517933 -NCT00523107 -NCT00517946 -NCT00523549 -NCT00517959 -NCT00523588 -NCT00518050 -NCT00523666 -NCT00518154 -NCT00523718 -NCT00518310 -NCT00523796 -NCT00518414 -NCT00523835 -NCT00518427 -NCT00523848 -NCT00518466 -NCT00523874 -NCT00518479 -NCT00523926 -NCT00518531 -NCT00523939 -NCT00518570 -NCT00524017 -NCT00518609 -NCT00533871 -NCT00524134 -NCT00528541 -NCT00524147 -NCT00528528 -NCT00524225 -NCT00528762 -NCT00524238 -NCT00528801 -NCT00524251 -NCT00528853 -NCT00524303 -NCT00528866 -NCT00524342 -NCT00529061 -NCT00524381 -NCT00529464 -NCT00524719 -NCT00529529 -NCT00524862 -NCT00529737 -NCT00524888 -NCT00529854 -NCT00524914 -NCT00529997 -NCT00524992 -NCT00530049 -NCT00525044 -NCT00530075 -NCT00525148 -NCT00530179 -NCT00525265 -NCT00530894 -NCT00525551 -NCT00530907 -NCT00525668 -NCT00530946 -NCT00525785 -NCT00530972 -NCT00525967 -NCT00530998 -NCT00526032 -NCT00531024 -NCT00526045 -NCT00531089 -NCT00526084 -NCT00531141 -NCT00526097 -NCT00531219 -NCT00526110 -NCT00531310 -NCT00526214 -NCT00531453 -NCT00526292 -NCT00531505 -NCT00526318 -NCT00531713 -NCT00526357 -NCT00531765 -NCT00526370 -NCT00531791 -NCT00526604 -NCT00531804 -NCT00526630 -NCT00531895 -NCT00526656 -NCT00532077 -NCT00526734 -NCT00532116 -NCT00526812 -NCT00532207 -NCT00526864 -NCT00532259 -NCT00526903 -NCT00532272 -NCT00527228 -NCT00532285 -NCT00527293 -NCT00532337 -NCT00527306 -NCT00532545 -NCT00527371 -NCT00532727 -NCT00527397 -NCT00532740 -NCT00527488 -NCT00532779 -NCT00527514 -NCT00532857 -NCT00527527 -NCT00532883 -NCT00527540 -NCT00533000 -NCT00527605 -NCT00533234 -NCT00527709 -NCT00533364 -NCT00527878 -NCT00533390 -NCT00528008 -NCT00533455 -NCT00528112 -NCT00533611 -NCT00528138 -NCT00533637 -NCT00528216 -NCT00533650 -NCT00528307 -NCT00533676 -NCT00528398 -NCT00533702 -NCT00528476 -NCT00544167 -NCT00533910 -NCT00538824 -NCT00533923 -NCT00538811 -NCT00533949 -NCT00538850 -NCT00533975 -NCT00538876 -NCT00534066 -NCT00539149 -NCT00534118 -NCT00539240 -NCT00534157 -NCT00539409 -NCT00534417 -NCT00539448 -NCT00534430 -NCT00539643 -NCT00534443 -NCT00539656 -NCT00534469 -NCT00540033 -NCT00534508 -NCT00540072 -NCT00534534 -NCT00540189 -NCT00534638 -NCT00540358 -NCT00534677 -NCT00540410 -NCT00534703 -NCT00540475 -NCT00534859 -NCT00540527 -NCT00534937 -NCT00540891 -NCT00535054 -NCT00540956 -NCT00535119 -NCT00541086 -NCT00535158 -NCT00541164 -NCT00535379 -NCT00541177 -NCT00535522 -NCT00541216 -NCT00535561 -NCT00541255 -NCT00535600 -NCT00541554 -NCT00535717 -NCT00541658 -NCT00535899 -NCT00541671 -NCT00536016 -NCT00541723 -NCT00536081 -NCT00541736 -NCT00536146 -NCT00541931 -NCT00536237 -NCT00541957 -NCT00536328 -NCT00542022 -NCT00536367 -NCT00542035 -NCT00536471 -NCT00542100 -NCT00536601 -NCT00542152 -NCT00536718 -NCT00542178 -NCT00536796 -NCT00542191 -NCT00536809 -NCT00542230 -NCT00536965 -NCT00542256 -NCT00537095 -NCT00542412 -NCT00537108 -NCT00542425 -NCT00537173 -NCT00542451 -NCT00537316 -NCT00542503 -NCT00537420 -NCT00542646 -NCT00537524 -NCT00542763 -NCT00537589 -NCT00542867 -NCT00537628 -NCT00542984 -NCT00537654 -NCT00543023 -NCT00537849 -NCT00543218 -NCT00537901 -NCT00543257 -NCT00537940 -NCT00543829 -NCT00537953 -NCT00543959 -NCT00538018 -NCT00543998 -NCT00538694 -NCT00544089 -NCT00538733 -NCT00544115 -NCT00538759 -NCT00555087 -NCT00544219 -NCT00549549 -NCT00544232 -NCT00549445 -NCT00544245 -NCT00549679 -NCT00544466 -NCT00549848 -NCT00544544 -NCT00549926 -NCT00544804 -NCT00550173 -NCT00544869 -NCT00550368 -NCT00544999 -NCT00550459 -NCT00545025 -NCT00550511 -NCT00545064 -NCT00550537 -NCT00545077 -NCT00550771 -NCT00545311 -NCT00550784 -NCT00545454 -NCT00550836 -NCT00545597 -NCT00550862 -NCT00545688 -NCT00550992 -NCT00546026 -NCT00551070 -NCT00546104 -NCT00551161 -NCT00546117 -NCT00551187 -NCT00546156 -NCT00551252 -NCT00546234 -NCT00551304 -NCT00546286 -NCT00551369 -NCT00546377 -NCT00551421 -NCT00546468 -NCT00551460 -NCT00546494 -NCT00551499 -NCT00546507 -NCT00551941 -NCT00546520 -NCT00552045 -NCT00546585 -NCT00552071 -NCT00546715 -NCT00552084 -NCT00546728 -NCT00552097 -NCT00546754 -NCT00552149 -NCT00546832 -NCT00552162 -NCT00546897 -NCT00552253 -NCT00546949 -NCT00552487 -NCT00546988 -NCT00552981 -NCT00547001 -NCT00553150 -NCT00547053 -NCT00553254 -NCT00547131 -NCT00553332 -NCT00547196 -NCT00553358 -NCT00547391 -NCT00553410 -NCT00547456 -NCT00553423 -NCT00547469 -NCT00553449 -NCT00547534 -NCT00553462 -NCT00547625 -NCT00553514 -NCT00547638 -NCT00553605 -NCT00547768 -NCT00553644 -NCT00548041 -NCT00553800 -NCT00548054 -NCT00553917 -NCT00548184 -NCT00554008 -NCT00548301 -NCT00554281 -NCT00548483 -NCT00554476 -NCT00548522 -NCT00554645 -NCT00548821 -NCT00554788 -NCT00548899 -NCT00554814 -NCT00548977 -NCT00554827 -NCT00549172 -NCT00554996 -NCT00549185 -NCT00565864 -NCT00555139 -NCT00560794 -NCT00555152 -NCT00560625 -NCT00555321 -NCT00560833 -NCT00555347 -NCT00560859 -NCT00555529 -NCT00560989 -NCT00555555 -NCT00561106 -NCT00555607 -NCT00561119 -NCT00555620 -NCT00561262 -NCT00555672 -NCT00561431 -NCT00555880 -NCT00561522 -NCT00555919 -NCT00561574 -NCT00555971 -NCT00561652 -NCT00555997 -NCT00561691 -NCT00556114 -NCT00561808 -NCT00556335 -NCT00561821 -NCT00556400 -NCT00561834 -NCT00556413 -NCT00562068 -NCT00556439 -NCT00562276 -NCT00556647 -NCT00562328 -NCT00556686 -NCT00562354 -NCT00556777 -NCT00562640 -NCT00556842 -NCT00562705 -NCT00556907 -NCT00562731 -NCT00556933 -NCT00562796 -NCT00557115 -NCT00562978 -NCT00557141 -NCT00563264 -NCT00557219 -NCT00563290 -NCT00557310 -NCT00563329 -NCT00557336 -NCT00563394 -NCT00557427 -NCT00563433 -NCT00557492 -NCT00563615 -NCT00557544 -NCT00563758 -NCT00557609 -NCT00564005 -NCT00557817 -NCT00564018 -NCT00557908 -NCT00564096 -NCT00558012 -NCT00564135 -NCT00558038 -NCT00564252 -NCT00558103 -NCT00564395 -NCT00558129 -NCT00564460 -NCT00558220 -NCT00564512 -NCT00558480 -NCT00564525 -NCT00558558 -NCT00564629 -NCT00558636 -NCT00564759 -NCT00558896 -NCT00564850 -NCT00559299 -NCT00564889 -NCT00559312 -NCT00565214 -NCT00559390 -NCT00565266 -NCT00559416 -NCT00565513 -NCT00559507 -NCT00565526 -NCT00559754 -NCT00565539 -NCT00559845 -NCT00565552 -NCT00559949 -NCT00565604 -NCT00560053 -NCT00565669 -NCT00560352 -NCT00565760 -NCT00560521 -NCT00565851 -NCT00560586 -NCT00577226 -NCT00565955 -NCT00571246 -NCT00566020 -NCT00571090 -NCT00566033 -NCT00571337 -NCT00566046 -NCT00571415 -NCT00566098 -NCT00571792 -NCT00566137 -NCT00571818 -NCT00566215 -NCT00571844 -NCT00566267 -NCT00571948 -NCT00566280 -NCT00571987 -NCT00566358 -NCT00572000 -NCT00566384 -NCT00572065 -NCT00566579 -NCT00572156 -NCT00566657 -NCT00572299 -NCT00566696 -NCT00572481 -NCT00566995 -NCT00572858 -NCT00567151 -NCT00572936 -NCT00567190 -NCT00573378 -NCT00567333 -NCT00573573 -NCT00567359 -NCT00573586 -NCT00567476 -NCT00573599 -NCT00567554 -NCT00573755 -NCT00567567 -NCT00573807 -NCT00567606 -NCT00573924 -NCT00567645 -NCT00573937 -NCT00568035 -NCT00573989 -NCT00568048 -NCT00574041 -NCT00568126 -NCT00574184 -NCT00568243 -NCT00574301 -NCT00568269 -NCT00574366 -NCT00568295 -NCT00574392 -NCT00568321 -NCT00574535 -NCT00568347 -NCT00574587 -NCT00568386 -NCT00574717 -NCT00568750 -NCT00574795 -NCT00568789 -NCT00574808 -NCT00568802 -NCT00575159 -NCT00569023 -NCT00575276 -NCT00569049 -NCT00575341 -NCT00569062 -NCT00575367 -NCT00569192 -NCT00575588 -NCT00569244 -NCT00575822 -NCT00569283 -NCT00575887 -NCT00569504 -NCT00575913 -NCT00569582 -NCT00575939 -NCT00569751 -NCT00576069 -NCT00569972 -NCT00576082 -NCT00569998 -NCT00576407 -NCT00570154 -NCT00576485 -NCT00570180 -NCT00576498 -NCT00570401 -NCT00576654 -NCT00570544 -NCT00576693 -NCT00570661 -NCT00576810 -NCT00570739 -NCT00576927 -NCT00570804 -NCT00576992 -NCT00571025 -NCT00577018 -NCT00571051 -NCT00587119 -NCT00577330 -NCT00582309 -NCT00577343 -NCT00582049 -NCT00577369 -NCT00582569 -NCT00577499 -NCT00582647 -NCT00577590 -NCT00582660 -NCT00577668 -NCT00582868 -NCT00577707 -NCT00582920 -NCT00577772 -NCT00582946 -NCT00577798 -NCT00583024 -NCT00577876 -NCT00583180 -NCT00577889 -NCT00583284 -NCT00578071 -NCT00583453 -NCT00578240 -NCT00583518 -NCT00578344 -NCT00583570 -NCT00578461 -NCT00583648 -NCT00578474 -NCT00583778 -NCT00578578 -NCT00583895 -NCT00578669 -NCT00584168 -NCT00578773 -NCT00584246 -NCT00578864 -NCT00584259 -NCT00578877 -NCT00584311 -NCT00578942 -NCT00584376 -NCT00579189 -NCT00584389 -NCT00579371 -NCT00584441 -NCT00579410 -NCT00584571 -NCT00579488 -NCT00584610 -NCT00579527 -NCT00584623 -NCT00579540 -NCT00584636 -NCT00579709 -NCT00584727 -NCT00579787 -NCT00584870 -NCT00579865 -NCT00584948 -NCT00580034 -NCT00585039 -NCT00580112 -NCT00585104 -NCT00580138 -NCT00585195 -NCT00580177 -NCT00585494 -NCT00580281 -NCT00585650 -NCT00580307 -NCT00585702 -NCT00580333 -NCT00585715 -NCT00580346 -NCT00585741 -NCT00580372 -NCT00586014 -NCT00580502 -NCT00586092 -NCT00580723 -NCT00586131 -NCT00580749 -NCT00586209 -NCT00580892 -NCT00586313 -NCT00581061 -NCT00586365 -NCT00581087 -NCT00586391 -NCT00581126 -NCT00586404 -NCT00581230 -NCT00586443 -NCT00581308 -NCT00586521 -NCT00581321 -NCT00586651 -NCT00581490 -NCT00586755 -NCT00581529 -NCT00586794 -NCT00581568 -NCT00586924 -NCT00581737 -NCT00586963 -NCT00581867 -NCT00587054 -NCT00581906 -NCT00596115 -NCT00587132 -NCT00591669 -NCT00587171 -NCT00591643 -NCT00587197 -NCT00591838 -NCT00587275 -NCT00591851 -NCT00587314 -NCT00591903 -NCT00587470 -NCT00591942 -NCT00587535 -NCT00591968 -NCT00587691 -NCT00592072 -NCT00587795 -NCT00592540 -NCT00587847 -NCT00592553 -NCT00587873 -NCT00592566 -NCT00587899 -NCT00592618 -NCT00587925 -NCT00592943 -NCT00587938 -NCT00593047 -NCT00588029 -NCT00593138 -NCT00588146 -NCT00593320 -NCT00588224 -NCT00593346 -NCT00588354 -NCT00593528 -NCT00588367 -NCT00593567 -NCT00588445 -NCT00593593 -NCT00588536 -NCT00593697 -NCT00588627 -NCT00593710 -NCT00588809 -NCT00593723 -NCT00588822 -NCT00593736 -NCT00588926 -NCT00593827 -NCT00588939 -NCT00593853 -NCT00588991 -NCT00593892 -NCT00589368 -NCT00593944 -NCT00589472 -NCT00594022 -NCT00589498 -NCT00594061 -NCT00589888 -NCT00594074 -NCT00590005 -NCT00594100 -NCT00590044 -NCT00594126 -NCT00590096 -NCT00594139 -NCT00590135 -NCT00594217 -NCT00590200 -NCT00594425 -NCT00590226 -NCT00594685 -NCT00590252 -NCT00594763 -NCT00590304 -NCT00594867 -NCT00590369 -NCT00594984 -NCT00590408 -NCT00594997 -NCT00590421 -NCT00595101 -NCT00590512 -NCT00595114 -NCT00590525 -NCT00595127 -NCT00590603 -NCT00595140 -NCT00590629 -NCT00595153 -NCT00590655 -NCT00595205 -NCT00590811 -NCT00595387 -NCT00590915 -NCT00595439 -NCT00591019 -NCT00595491 -NCT00591227 -NCT00595530 -NCT00591240 -NCT00595660 -NCT00591344 -NCT00595725 -NCT00591357 -NCT00596011 -NCT00591461 -NCT00596063 -NCT00591526 -NCT00606008 -NCT00596219 -NCT00601471 -NCT00596336 -NCT00601432 -NCT00596362 -NCT00601692 -NCT00596596 -NCT00601705 -NCT00596687 -NCT00601900 -NCT00596752 -NCT00601991 -NCT00596908 -NCT00602056 -NCT00597012 -NCT00602108 -NCT00597051 -NCT00602147 -NCT00597064 -NCT00602225 -NCT00597194 -NCT00602264 -NCT00597376 -NCT00602316 -NCT00597415 -NCT00602355 -NCT00597519 -NCT00602433 -NCT00597623 -NCT00602459 -NCT00597909 -NCT00602511 -NCT00597948 -NCT00602589 -NCT00597987 -NCT00602602 -NCT00598078 -NCT00602641 -NCT00598234 -NCT00602667 -NCT00598338 -NCT00602680 -NCT00598364 -NCT00602771 -NCT00598403 -NCT00602784 -NCT00598494 -NCT00602836 -NCT00598598 -NCT00602862 -NCT00598624 -NCT00602901 -NCT00598754 -NCT00603109 -NCT00598832 -NCT00603187 -NCT00598923 -NCT00603278 -NCT00598949 -NCT00603304 -NCT00598975 -NCT00603382 -NCT00599092 -NCT00603434 -NCT00599209 -NCT00603447 -NCT00599248 -NCT00603655 -NCT00599365 -NCT00603681 -NCT00599482 -NCT00603707 -NCT00599521 -NCT00603746 -NCT00599560 -NCT00603759 -NCT00599716 -NCT00603902 -NCT00599729 -NCT00603967 -NCT00599937 -NCT00604305 -NCT00599989 -NCT00604318 -NCT00600028 -NCT00604370 -NCT00600106 -NCT00604448 -NCT00600275 -NCT00604474 -NCT00600340 -NCT00604539 -NCT00600353 -NCT00604578 -NCT00600431 -NCT00604864 -NCT00600587 -NCT00604916 -NCT00600665 -NCT00604942 -NCT00600808 -NCT00605163 -NCT00600886 -NCT00605319 -NCT00601159 -NCT00605657 -NCT00601289 -NCT00605878 -NCT00601341 -NCT00605891 -NCT00601393 -NCT00616902 -NCT00606060 -NCT00612352 -NCT00606437 -NCT00612248 -NCT00606502 -NCT00612417 -NCT00606684 -NCT00612456 -NCT00606697 -NCT00612560 -NCT00606749 -NCT00612573 -NCT00606840 -NCT00612729 -NCT00606918 -NCT00613054 -NCT00606931 -NCT00613093 -NCT00607087 -NCT00613444 -NCT00607204 -NCT00613457 -NCT00607451 -NCT00613548 -NCT00607685 -NCT00613600 -NCT00607763 -NCT00613717 -NCT00608101 -NCT00613743 -NCT00608140 -NCT00613847 -NCT00608361 -NCT00613886 -NCT00608400 -NCT00613912 -NCT00608452 -NCT00613977 -NCT00608556 -NCT00614042 -NCT00608764 -NCT00614198 -NCT00608777 -NCT00614211 -NCT00608790 -NCT00614354 -NCT00608842 -NCT00614393 -NCT00608868 -NCT00614406 -NCT00608894 -NCT00614653 -NCT00608972 -NCT00614666 -NCT00609063 -NCT00614744 -NCT00609128 -NCT00614809 -NCT00609141 -NCT00614822 -NCT00609609 -NCT00614887 -NCT00609726 -NCT00614900 -NCT00609869 -NCT00614926 -NCT00610025 -NCT00614952 -NCT00610077 -NCT00614978 -NCT00610103 -NCT00615004 -NCT00610363 -NCT00615017 -NCT00610402 -NCT00615147 -NCT00610558 -NCT00615381 -NCT00610597 -NCT00615498 -NCT00610662 -NCT00615537 -NCT00610818 -NCT00615589 -NCT00610909 -NCT00615602 -NCT00610935 -NCT00615628 -NCT00611104 -NCT00615641 -NCT00611182 -NCT00615758 -NCT00611351 -NCT00615836 -NCT00611624 -NCT00616005 -NCT00611650 -NCT00616187 -NCT00611715 -NCT00616278 -NCT00611754 -NCT00616343 -NCT00611767 -NCT00616408 -NCT00612001 -NCT00616499 -NCT00612014 -NCT00616512 -NCT00612066 -NCT00616642 -NCT00612183 -NCT00627497 -NCT00616928 -NCT00622622 -NCT00616967 -NCT00622544 -NCT00617058 -NCT00622674 -NCT00617110 -NCT00622765 -NCT00617227 -NCT00623129 -NCT00617240 -NCT00623220 -NCT00617292 -NCT00623233 -NCT00617513 -NCT00623350 -NCT00617578 -NCT00623454 -NCT00617695 -NCT00623480 -NCT00617721 -NCT00623714 -NCT00617760 -NCT00623727 -NCT00617799 -NCT00623740 -NCT00617825 -NCT00623896 -NCT00617903 -NCT00623961 -NCT00618150 -NCT00624000 -NCT00618293 -NCT00624078 -NCT00618553 -NCT00624169 -NCT00618566 -NCT00624182 -NCT00618644 -NCT00624416 -NCT00618657 -NCT00624481 -NCT00618813 -NCT00624676 -NCT00618826 -NCT00624884 -NCT00618904 -NCT00624936 -NCT00619125 -NCT00624949 -NCT00619190 -NCT00624975 -NCT00619463 -NCT00625001 -NCT00619645 -NCT00625027 -NCT00619671 -NCT00625040 -NCT00619684 -NCT00625053 -NCT00619775 -NCT00625079 -NCT00619957 -NCT00625092 -NCT00619970 -NCT00625118 -NCT00620087 -NCT00625196 -NCT00620113 -NCT00625274 -NCT00620165 -NCT00625404 -NCT00620191 -NCT00625469 -NCT00620269 -NCT00625495 -NCT00620412 -NCT00625534 -NCT00620477 -NCT00625573 -NCT00620594 -NCT00625690 -NCT00620698 -NCT00625742 -NCT00620737 -NCT00625846 -NCT00620828 -NCT00626015 -NCT00620906 -NCT00626080 -NCT00620919 -NCT00626223 -NCT00621205 -NCT00626418 -NCT00621218 -NCT00626483 -NCT00621387 -NCT00626587 -NCT00621439 -NCT00626769 -NCT00621517 -NCT00626938 -NCT00621530 -NCT00626990 -NCT00621673 -NCT00627016 -NCT00621790 -NCT00627211 -NCT00622089 -NCT00627289 -NCT00622115 -NCT00635960 -NCT00627523 -NCT00631657 -NCT00627627 -NCT00631644 -NCT00627640 -NCT00631670 -NCT00627666 -NCT00631735 -NCT00627796 -NCT00631813 -NCT00627965 -NCT00632190 -NCT00628056 -NCT00632242 -NCT00628082 -NCT00632333 -NCT00628108 -NCT00632359 -NCT00628238 -NCT00632593 -NCT00628251 -NCT00632606 -NCT00628329 -NCT00632736 -NCT00628342 -NCT00632801 -NCT00628355 -NCT00632814 -NCT00628498 -NCT00632866 -NCT00628511 -NCT00632892 -NCT00628537 -NCT00633022 -NCT00628602 -NCT00633035 -NCT00628615 -NCT00633191 -NCT00628719 -NCT00633217 -NCT00628745 -NCT00633295 -NCT00628784 -NCT00633386 -NCT00628823 -NCT00633464 -NCT00629005 -NCT00633776 -NCT00629135 -NCT00633828 -NCT00629226 -NCT00633841 -NCT00629239 -NCT00634010 -NCT00629265 -NCT00634140 -NCT00629278 -NCT00634244 -NCT00629486 -NCT00634270 -NCT00629499 -NCT00634296 -NCT00629538 -NCT00634426 -NCT00629564 -NCT00634478 -NCT00629616 -NCT00634517 -NCT00629642 -NCT00634569 -NCT00629668 -NCT00634647 -NCT00629837 -NCT00634777 -NCT00629902 -NCT00635024 -NCT00630006 -NCT00635050 -NCT00630032 -NCT00635063 -NCT00630071 -NCT00635115 -NCT00630084 -NCT00635141 -NCT00630214 -NCT00635271 -NCT00630448 -NCT00635297 -NCT00630461 -NCT00635310 -NCT00630513 -NCT00635349 -NCT00630565 -NCT00635375 -NCT00630591 -NCT00635414 -NCT00630604 -NCT00635583 -NCT00630786 -NCT00635609 -NCT00630838 -NCT00635622 -NCT00631137 -NCT00635804 -NCT00631241 -NCT00635817 -NCT00631267 -NCT00635843 -NCT00631501 -NCT00635934 -NCT00631618 -NCT00647374 -NCT00636103 -NCT00641251 -NCT00636155 -NCT00641108 -NCT00636181 -NCT00641277 -NCT00636298 -NCT00641602 -NCT00636402 -NCT00641667 -NCT00636415 -NCT00641914 -NCT00636597 -NCT00642148 -NCT00636662 -NCT00642161 -NCT00636857 -NCT00642187 -NCT00636935 -NCT00642200 -NCT00637078 -NCT00642421 -NCT00637091 -NCT00642473 -NCT00637182 -NCT00642564 -NCT00637195 -NCT00642616 -NCT00637221 -NCT00642720 -NCT00637260 -NCT00642772 -NCT00637325 -NCT00642863 -NCT00637572 -NCT00643071 -NCT00637676 -NCT00643110 -NCT00637715 -NCT00643149 -NCT00637793 -NCT00643487 -NCT00637845 -NCT00643552 -NCT00637858 -NCT00643591 -NCT00637910 -NCT00644046 -NCT00637962 -NCT00644059 -NCT00638092 -NCT00644319 -NCT00638131 -NCT00644527 -NCT00638144 -NCT00644605 -NCT00638170 -NCT00644657 -NCT00638378 -NCT00644696 -NCT00638443 -NCT00644774 -NCT00638521 -NCT00644839 -NCT00638534 -NCT00644891 -NCT00638677 -NCT00644943 -NCT00639041 -NCT00645112 -NCT00639054 -NCT00645125 -NCT00639067 -NCT00645177 -NCT00639080 -NCT00645203 -NCT00639223 -NCT00645424 -NCT00639392 -NCT00645489 -NCT00639431 -NCT00645541 -NCT00639470 -NCT00645606 -NCT00639808 -NCT00645619 -NCT00640120 -NCT00645749 -NCT00640172 -NCT00645996 -NCT00640237 -NCT00646204 -NCT00640289 -NCT00646282 -NCT00640315 -NCT00646295 -NCT00640328 -NCT00646308 -NCT00640471 -NCT00646347 -NCT00640549 -NCT00646451 -NCT00640744 -NCT00646490 -NCT00640757 -NCT00646958 -NCT00640926 -NCT00647088 -NCT00640939 -NCT00647283 -NCT00641030 -NCT00659672 -NCT00647530 -NCT00654498 -NCT00647790 -NCT00654485 -NCT00647855 -NCT00654563 -NCT00647868 -NCT00654615 -NCT00648245 -NCT00654628 -NCT00648258 -NCT00654745 -NCT00648323 -NCT00654784 -NCT00648700 -NCT00654927 -NCT00648739 -NCT00655057 -NCT00648882 -NCT00655109 -NCT00649025 -NCT00655278 -NCT00649142 -NCT00655369 -NCT00649337 -NCT00655499 -NCT00649415 -NCT00655616 -NCT00649766 -NCT00655915 -NCT00649961 -NCT00655967 -NCT00650403 -NCT00655993 -NCT00650689 -NCT00656058 -NCT00650728 -NCT00656227 -NCT00650806 -NCT00656279 -NCT00650858 -NCT00656318 -NCT00650910 -NCT00656370 -NCT00650923 -NCT00656747 -NCT00651040 -NCT00656786 -NCT00651079 -NCT00656877 -NCT00651235 -NCT00656981 -NCT00651261 -NCT00657046 -NCT00651313 -NCT00657072 -NCT00651326 -NCT00657085 -NCT00651352 -NCT00657111 -NCT00651378 -NCT00657228 -NCT00651469 -NCT00657410 -NCT00651768 -NCT00657449 -NCT00651807 -NCT00657618 -NCT00651937 -NCT00657670 -NCT00652093 -NCT00657774 -NCT00652184 -NCT00657826 -NCT00652366 -NCT00657917 -NCT00652379 -NCT00657969 -NCT00652964 -NCT00657982 -NCT00653068 -NCT00658060 -NCT00653185 -NCT00658086 -NCT00653250 -NCT00658099 -NCT00653393 -NCT00658151 -NCT00653471 -NCT00658164 -NCT00653614 -NCT00658190 -NCT00653627 -NCT00658593 -NCT00653874 -NCT00658619 -NCT00654056 -NCT00658736 -NCT00654108 -NCT00658749 -NCT00654121 -NCT00658814 -NCT00654160 -NCT00659087 -NCT00654212 -NCT00659425 -NCT00654264 -NCT00659542 -NCT00654407 -NCT00659646 -NCT00654472 -NCT00670501 -NCT00659906 -NCT00665184 -NCT00659958 -NCT00665171 -NCT00660010 -NCT00665210 -NCT00660166 -NCT00665236 -NCT00660244 -NCT00665470 -NCT00660582 -NCT00665548 -NCT00660660 -NCT00666276 -NCT00660829 -NCT00666328 -NCT00660894 -NCT00666471 -NCT00661440 -NCT00666562 -NCT00661466 -NCT00666588 -NCT00661557 -NCT00666640 -NCT00661817 -NCT00666653 -NCT00661882 -NCT00666887 -NCT00661999 -NCT00667121 -NCT00662012 -NCT00667251 -NCT00662064 -NCT00667329 -NCT00662129 -NCT00667394 -NCT00662194 -NCT00667407 -NCT00662259 -NCT00667420 -NCT00662298 -NCT00667498 -NCT00662350 -NCT00667524 -NCT00662363 -NCT00667602 -NCT00662454 -NCT00667667 -NCT00662506 -NCT00667810 -NCT00662610 -NCT00667836 -NCT00662675 -NCT00667901 -NCT00662753 -NCT00668109 -NCT00662896 -NCT00668122 -NCT00662961 -NCT00668200 -NCT00663026 -NCT00668330 -NCT00663143 -NCT00668343 -NCT00663169 -NCT00668369 -NCT00663182 -NCT00668408 -NCT00663208 -NCT00668421 -NCT00663247 -NCT00668434 -NCT00663338 -NCT00668980 -NCT00663481 -NCT00669019 -NCT00663507 -NCT00669032 -NCT00663546 -NCT00669188 -NCT00663624 -NCT00669305 -NCT00663689 -NCT00669318 -NCT00663858 -NCT00669409 -NCT00663897 -NCT00669461 -NCT00663910 -NCT00669604 -NCT00663988 -NCT00669669 -NCT00664066 -NCT00669786 -NCT00664131 -NCT00669877 -NCT00664209 -NCT00669968 -NCT00664430 -NCT00669994 -NCT00664508 -NCT00670059 -NCT00664742 -NCT00670150 -NCT00664781 -NCT00670202 -NCT00664859 -NCT00670280 -NCT00664937 -NCT00670306 -NCT00665015 -NCT00682994 -NCT00670800 -NCT00676975 -NCT00670865 -NCT00676871 -NCT00670878 -NCT00677157 -NCT00670982 -NCT00677261 -NCT00671021 -NCT00677339 -NCT00671138 -NCT00677417 -NCT00671203 -NCT00677469 -NCT00671450 -NCT00677495 -NCT00671528 -NCT00677508 -NCT00671580 -NCT00677755 -NCT00671619 -NCT00677963 -NCT00671658 -NCT00677976 -NCT00671736 -NCT00677989 -NCT00671892 -NCT00678028 -NCT00671931 -NCT00678366 -NCT00671970 -NCT00678535 -NCT00671983 -NCT00678574 -NCT00672308 -NCT00678626 -NCT00672360 -NCT00678639 -NCT00672529 -NCT00678782 -NCT00672607 -NCT00678821 -NCT00672789 -NCT00678873 -NCT00673114 -NCT00678899 -NCT00673283 -NCT00679146 -NCT00673335 -NCT00679211 -NCT00673374 -NCT00679315 -NCT00673595 -NCT00679341 -NCT00673816 -NCT00679549 -NCT00673972 -NCT00679679 -NCT00674154 -NCT00679692 -NCT00674167 -NCT00679718 -NCT00674245 -NCT00679783 -NCT00674336 -NCT00680030 -NCT00674401 -NCT00680160 -NCT00674479 -NCT00680199 -NCT00674557 -NCT00680264 -NCT00674622 -NCT00680680 -NCT00674843 -NCT00680758 -NCT00674895 -NCT00680797 -NCT00675090 -NCT00680901 -NCT00675103 -NCT00680979 -NCT00675155 -NCT00681291 -NCT00675259 -NCT00681382 -NCT00675298 -NCT00681434 -NCT00675337 -NCT00681616 -NCT00675623 -NCT00681629 -NCT00675727 -NCT00682084 -NCT00675753 -NCT00682188 -NCT00675818 -NCT00682214 -NCT00675870 -NCT00682435 -NCT00675883 -NCT00682552 -NCT00676026 -NCT00682565 -NCT00676052 -NCT00682591 -NCT00676247 -NCT00682630 -NCT00676533 -NCT00682955 -NCT00676715 -NCT00693329 -NCT00683124 -NCT00688129 -NCT00683254 -NCT00688077 -NCT00683449 -NCT00688168 -NCT00683722 -NCT00688220 -NCT00683761 -NCT00688467 -NCT00683904 -NCT00688740 -NCT00683917 -NCT00688987 -NCT00683943 -NCT00689169 -NCT00683969 -NCT00689182 -NCT00684021 -NCT00689221 -NCT00684112 -NCT00689273 -NCT00684125 -NCT00689377 -NCT00684164 -NCT00689429 -NCT00684528 -NCT00689533 -NCT00684593 -NCT00689715 -NCT00684879 -NCT00689741 -NCT00684905 -NCT00689793 -NCT00684957 -NCT00689845 -NCT00684983 -NCT00689936 -NCT00685009 -NCT00689988 -NCT00685074 -NCT00690105 -NCT00685230 -NCT00690118 -NCT00685360 -NCT00690261 -NCT00685464 -NCT00690326 -NCT00685503 -NCT00690378 -NCT00685607 -NCT00690469 -NCT00685633 -NCT00690508 -NCT00685698 -NCT00690885 -NCT00685789 -NCT00690898 -NCT00685880 -NCT00690911 -NCT00685971 -NCT00691132 -NCT00686010 -NCT00691184 -NCT00686218 -NCT00691210 -NCT00686348 -NCT00691223 -NCT00686439 -NCT00691379 -NCT00686530 -NCT00691600 -NCT00686556 -NCT00691678 -NCT00686699 -NCT00691704 -NCT00686751 -NCT00691782 -NCT00686777 -NCT00691808 -NCT00686920 -NCT00691938 -NCT00687115 -NCT00692068 -NCT00687180 -NCT00692224 -NCT00687219 -NCT00692276 -NCT00687258 -NCT00692328 -NCT00687297 -NCT00692367 -NCT00687375 -NCT00692458 -NCT00687388 -NCT00692484 -NCT00687440 -NCT00692497 -NCT00687479 -NCT00692848 -NCT00687531 -NCT00692913 -NCT00687544 -NCT00693082 -NCT00687648 -NCT00693225 -NCT00687947 -NCT00693264 -NCT00687999 -NCT00693303 -NCT00688064 -NCT00704080 -NCT00693407 -NCT00698347 -NCT00693433 -NCT00698191 -NCT00693589 -NCT00698412 -NCT00693784 -NCT00698425 -NCT00693940 -NCT00698451 -NCT00694018 -NCT00698581 -NCT00694122 -NCT00698815 -NCT00694252 -NCT00698867 -NCT00694265 -NCT00698984 -NCT00694486 -NCT00699140 -NCT00694525 -NCT00699166 -NCT00694551 -NCT00699231 -NCT00694564 -NCT00699283 -NCT00694577 -NCT00699452 -NCT00694733 -NCT00699907 -NCT00694759 -NCT00699933 -NCT00694785 -NCT00700128 -NCT00694850 -NCT00700505 -NCT00694941 -NCT00700882 -NCT00695071 -NCT00701012 -NCT00695097 -NCT00701194 -NCT00695110 -NCT00701259 -NCT00695136 -NCT00701311 -NCT00695227 -NCT00701363 -NCT00695422 -NCT00701506 -NCT00695500 -NCT00701584 -NCT00695526 -NCT00701740 -NCT00695552 -NCT00701779 -NCT00695669 -NCT00701883 -NCT00695695 -NCT00702195 -NCT00696072 -NCT00702403 -NCT00696111 -NCT00702455 -NCT00696475 -NCT00702481 -NCT00696527 -NCT00702507 -NCT00696540 -NCT00702533 -NCT00696644 -NCT00702585 -NCT00696683 -NCT00702650 -NCT00696917 -NCT00702832 -NCT00697177 -NCT00702897 -NCT00697216 -NCT00703079 -NCT00697346 -NCT00703092 -NCT00697385 -NCT00703196 -NCT00697411 -NCT00703209 -NCT00697463 -NCT00703300 -NCT00697632 -NCT00703326 -NCT00697684 -NCT00703339 -NCT00697749 -NCT00703443 -NCT00697762 -NCT00703716 -NCT00697775 -NCT00703820 -NCT00697814 -NCT00703846 -NCT00697957 -NCT00703911 -NCT00698009 -NCT00703937 -NCT00698022 -NCT00703989 -NCT00698035 -NCT00704015 -NCT00698165 -NCT00704028 -NCT00698178 -NCT00713193 -NCT00704158 -NCT00708799 -NCT00704197 -NCT00708786 -NCT00704262 -NCT00708877 -NCT00704522 -NCT00708981 -NCT00704626 -NCT00709124 -NCT00704717 -NCT00709150 -NCT00704743 -NCT00709228 -NCT00704899 -NCT00709410 -NCT00704912 -NCT00709423 -NCT00705055 -NCT00709488 -NCT00705120 -NCT00709501 -NCT00705198 -NCT00709514 -NCT00705250 -NCT00709566 -NCT00705315 -NCT00709631 -NCT00705341 -NCT00709826 -NCT00705406 -NCT00709839 -NCT00705601 -NCT00709878 -NCT00705666 -NCT00709891 -NCT00705796 -NCT00710047 -NCT00705952 -NCT00710138 -NCT00705965 -NCT00710151 -NCT00706056 -NCT00710177 -NCT00706160 -NCT00710255 -NCT00706238 -NCT00710307 -NCT00706355 -NCT00710346 -NCT00706433 -NCT00710450 -NCT00706446 -NCT00710606 -NCT00706576 -NCT00710619 -NCT00706602 -NCT00710840 -NCT00706641 -NCT00711087 -NCT00706667 -NCT00711204 -NCT00706719 -NCT00711347 -NCT00706771 -NCT00711399 -NCT00706784 -NCT00711516 -NCT00706914 -NCT00711698 -NCT00706953 -NCT00711711 -NCT00707122 -NCT00711750 -NCT00707148 -NCT00711776 -NCT00707187 -NCT00711815 -NCT00707213 -NCT00711828 -NCT00707408 -NCT00711984 -NCT00707473 -NCT00712140 -NCT00707486 -NCT00712166 -NCT00707564 -NCT00712296 -NCT00707590 -NCT00712387 -NCT00707642 -NCT00712621 -NCT00707707 -NCT00712647 -NCT00707746 -NCT00712712 -NCT00707772 -NCT00712738 -NCT00707811 -NCT00712881 -NCT00707850 -NCT00712972 -NCT00707941 -NCT00712985 -NCT00708227 -NCT00713050 -NCT00708448 -NCT00713115 -NCT00708617 -NCT00713128 -NCT00708630 -NCT00723567 -NCT00713219 -NCT00718939 -NCT00713258 -NCT00718913 -NCT00713414 -NCT00719043 -NCT00713492 -NCT00719082 -NCT00713609 -NCT00719108 -NCT00713635 -NCT00719186 -NCT00714012 -NCT00719290 -NCT00714064 -NCT00719303 -NCT00714103 -NCT00719342 -NCT00714116 -NCT00719563 -NCT00714181 -NCT00719719 -NCT00714220 -NCT00719849 -NCT00714350 -NCT00719862 -NCT00714558 -NCT00719888 -NCT00714597 -NCT00720070 -NCT00714701 -NCT00720083 -NCT00714714 -NCT00720109 -NCT00714753 -NCT00720135 -NCT00714805 -NCT00720239 -NCT00714870 -NCT00720304 -NCT00714935 -NCT00720317 -NCT00715078 -NCT00720356 -NCT00715273 -NCT00720434 -NCT00715533 -NCT00720564 -NCT00715572 -NCT00720577 -NCT00715611 -NCT00720616 -NCT00715715 -NCT00720642 -NCT00715819 -NCT00720785 -NCT00715845 -NCT00720902 -NCT00716027 -NCT00720954 -NCT00716066 -NCT00720980 -NCT00716131 -NCT00721032 -NCT00716378 -NCT00721201 -NCT00716456 -NCT00721396 -NCT00716729 -NCT00721409 -NCT00716781 -NCT00721487 -NCT00716872 -NCT00721617 -NCT00717106 -NCT00721630 -NCT00717210 -NCT00721643 -NCT00717405 -NCT00721721 -NCT00717431 -NCT00721747 -NCT00717587 -NCT00721760 -NCT00717626 -NCT00721916 -NCT00717691 -NCT00722137 -NCT00717860 -NCT00722189 -NCT00717886 -NCT00722254 -NCT00717925 -NCT00722553 -NCT00718172 -NCT00722683 -NCT00718315 -NCT00722735 -NCT00718341 -NCT00722748 -NCT00718458 -NCT00722761 -NCT00718497 -NCT00723125 -NCT00718549 -NCT00723242 -NCT00718601 -NCT00723294 -NCT00718809 -NCT00723502 -NCT00718874 -NCT00735020 -NCT00723762 -NCT00730028 -NCT00723788 -NCT00730015 -NCT00723801 -NCT00730067 -NCT00723827 -NCT00730106 -NCT00724178 -NCT00730132 -NCT00724217 -NCT00730158 -NCT00724282 -NCT00730184 -NCT00724347 -NCT00730210 -NCT00724555 -NCT00730652 -NCT00724646 -NCT00730925 -NCT00724659 -NCT00731081 -NCT00724815 -NCT00731198 -NCT00724971 -NCT00731289 -NCT00725023 -NCT00731302 -NCT00725114 -NCT00731419 -NCT00725205 -NCT00731575 -NCT00725686 -NCT00731757 -NCT00725712 -NCT00731809 -NCT00725764 -NCT00731822 -NCT00725842 -NCT00732056 -NCT00726310 -NCT00732108 -NCT00726375 -NCT00732147 -NCT00726492 -NCT00732160 -NCT00726544 -NCT00732238 -NCT00726830 -NCT00732394 -NCT00727168 -NCT00732407 -NCT00727194 -NCT00732524 -NCT00727233 -NCT00732732 -NCT00727259 -NCT00732797 -NCT00727324 -NCT00732810 -NCT00727337 -NCT00733265 -NCT00727844 -NCT00733382 -NCT00727909 -NCT00733408 -NCT00728026 -NCT00733538 -NCT00728104 -NCT00733590 -NCT00728195 -NCT00733629 -NCT00728208 -NCT00733655 -NCT00728520 -NCT00733746 -NCT00728533 -NCT00733759 -NCT00728871 -NCT00733889 -NCT00728910 -NCT00733980 -NCT00728975 -NCT00734123 -NCT00729040 -NCT00734201 -NCT00729157 -NCT00734227 -NCT00729183 -NCT00734279 -NCT00729313 -NCT00734526 -NCT00729339 -NCT00734656 -NCT00729456 -NCT00734682 -NCT00729586 -NCT00734812 -NCT00729612 -NCT00734825 -NCT00729625 -NCT00734838 -NCT00729664 -NCT00734864 -NCT00729742 -NCT00734877 -NCT00729859 -NCT00734942 -NCT00729911 -NCT00734955 -NCT00729937 -NCT00747500 -NCT00735033 -NCT00741091 -NCT00735189 -NCT00741052 -NCT00735215 -NCT00741260 -NCT00735254 -NCT00741312 -NCT00735319 -NCT00741533 -NCT00735423 -NCT00741637 -NCT00735462 -NCT00741676 -NCT00735566 -NCT00741741 -NCT00735787 -NCT00741767 -NCT00735826 -NCT00741780 -NCT00735917 -NCT00741832 -NCT00736086 -NCT00741910 -NCT00736112 -NCT00741936 -NCT00736203 -NCT00742092 -NCT00736281 -NCT00742144 -NCT00736567 -NCT00742235 -NCT00736671 -NCT00742365 -NCT00736723 -NCT00742404 -NCT00736801 -NCT00742469 -NCT00736814 -NCT00742625 -NCT00736853 -NCT00742664 -NCT00736944 -NCT00742677 -NCT00736970 -NCT00742820 -NCT00736996 -NCT00742872 -NCT00737048 -NCT00742976 -NCT00737191 -NCT00743184 -NCT00737334 -NCT00743626 -NCT00737412 -NCT00743730 -NCT00737451 -NCT00743990 -NCT00737607 -NCT00744172 -NCT00737698 -NCT00744185 -NCT00737802 -NCT00744393 -NCT00737854 -NCT00744445 -NCT00737971 -NCT00744523 -NCT00737997 -NCT00744731 -NCT00738036 -NCT00744887 -NCT00738127 -NCT00745030 -NCT00738205 -NCT00745069 -NCT00738244 -NCT00745251 -NCT00738621 -NCT00745407 -NCT00738673 -NCT00745420 -NCT00738751 -NCT00745537 -NCT00738972 -NCT00745550 -NCT00739141 -NCT00745563 -NCT00739388 -NCT00745732 -NCT00739479 -NCT00745901 -NCT00739492 -NCT00746317 -NCT00739674 -NCT00746564 -NCT00740129 -NCT00746668 -NCT00740142 -NCT00746772 -NCT00740467 -NCT00746902 -NCT00740623 -NCT00747071 -NCT00740844 -NCT00747162 -NCT00740948 -NCT00747227 -NCT00740987 -NCT00747435 -NCT00741013 -NCT00758316 -NCT00747539 -NCT00752674 -NCT00747591 -NCT00752609 -NCT00747682 -NCT00752765 -NCT00747760 -NCT00752778 -NCT00747864 -NCT00752869 -NCT00747929 -NCT00752921 -NCT00747994 -NCT00753064 -NCT00748007 -NCT00753090 -NCT00748072 -NCT00753103 -NCT00748098 -NCT00753142 -NCT00748501 -NCT00753168 -NCT00748540 -NCT00753233 -NCT00748553 -NCT00753571 -NCT00748579 -NCT00753597 -NCT00748592 -NCT00753714 -NCT00748605 -NCT00753870 -NCT00748631 -NCT00754013 -NCT00748644 -NCT00754065 -NCT00748657 -NCT00754312 -NCT00748696 -NCT00754351 -NCT00748852 -NCT00754481 -NCT00748904 -NCT00754585 -NCT00748969 -NCT00754611 -NCT00749086 -NCT00754676 -NCT00749294 -NCT00754806 -NCT00749359 -NCT00754832 -NCT00749411 -NCT00754923 -NCT00749502 -NCT00754975 -NCT00749645 -NCT00755027 -NCT00749788 -NCT00755040 -NCT00749814 -NCT00755430 -NCT00750009 -NCT00755482 -NCT00750139 -NCT00755495 -NCT00750152 -NCT00755508 -NCT00750256 -NCT00755573 -NCT00750269 -NCT00755599 -NCT00750451 -NCT00755781 -NCT00750477 -NCT00755885 -NCT00750594 -NCT00755950 -NCT00750659 -NCT00756002 -NCT00750698 -NCT00756366 -NCT00750724 -NCT00756379 -NCT00750789 -NCT00756522 -NCT00750828 -NCT00756561 -NCT00750867 -NCT00757003 -NCT00751036 -NCT00757120 -NCT00751140 -NCT00757289 -NCT00751296 -NCT00757302 -NCT00751426 -NCT00757315 -NCT00751660 -NCT00757393 -NCT00751699 -NCT00757484 -NCT00751868 -NCT00757549 -NCT00752076 -NCT00757757 -NCT00752102 -NCT00757848 -NCT00752193 -NCT00758108 -NCT00752245 -NCT00769002 -NCT00758368 -NCT00763893 -NCT00758381 -NCT00763880 -NCT00758459 -NCT00764309 -NCT00758498 -NCT00764322 -NCT00758706 -NCT00764673 -NCT00758927 -NCT00764699 -NCT00758992 -NCT00764751 -NCT00759044 -NCT00764764 -NCT00759109 -NCT00764816 -NCT00759174 -NCT00764972 -NCT00759525 -NCT00764985 -NCT00759603 -NCT00765193 -NCT00759655 -NCT00765297 -NCT00759707 -NCT00765323 -NCT00759733 -NCT00765388 -NCT00759772 -NCT00765401 -NCT00759785 -NCT00765505 -NCT00759798 -NCT00765635 -NCT00759863 -NCT00765648 -NCT00759876 -NCT00765700 -NCT00759928 -NCT00765713 -NCT00760006 -NCT00765726 -NCT00760097 -NCT00765882 -NCT00760149 -NCT00766090 -NCT00760240 -NCT00766168 -NCT00760344 -NCT00766220 -NCT00760513 -NCT00766298 -NCT00760786 -NCT00766649 -NCT00760825 -NCT00766870 -NCT00760864 -NCT00767013 -NCT00760903 -NCT00767091 -NCT00761085 -NCT00767117 -NCT00761280 -NCT00767130 -NCT00761332 -NCT00767234 -NCT00761358 -NCT00767299 -NCT00761397 -NCT00767403 -NCT00761449 -NCT00767429 -NCT00761501 -NCT00767546 -NCT00761527 -NCT00767559 -NCT00761956 -NCT00767793 -NCT00762034 -NCT00767897 -NCT00762307 -NCT00767988 -NCT00762541 -NCT00768131 -NCT00762619 -NCT00768157 -NCT00762723 -NCT00768170 -NCT00762749 -NCT00768313 -NCT00762788 -NCT00768365 -NCT00762866 -NCT00768599 -NCT00762905 -NCT00768612 -NCT00762970 -NCT00768742 -NCT00763113 -NCT00768781 -NCT00763399 -NCT00768807 -NCT00763594 -NCT00768820 -NCT00763633 -NCT00768859 -NCT00763763 -NCT00768911 -NCT00763867 -NCT00779922 -NCT00769197 -NCT00773227 -NCT00769262 -NCT00773175 -NCT00769327 -NCT00773266 -NCT00769353 -NCT00773279 -NCT00769379 -NCT00773344 -NCT00769470 -NCT00773682 -NCT00769483 -NCT00773695 -NCT00769522 -NCT00773890 -NCT00769535 -NCT00774020 -NCT00769587 -NCT00774241 -NCT00769626 -NCT00774449 -NCT00769730 -NCT00774462 -NCT00769756 -NCT00774566 -NCT00769834 -NCT00774631 -NCT00770094 -NCT00774657 -NCT00770185 -NCT00774930 -NCT00770198 -NCT00775138 -NCT00770263 -NCT00775151 -NCT00770276 -NCT00775190 -NCT00770419 -NCT00775242 -NCT00770432 -NCT00775463 -NCT00770510 -NCT00775489 -NCT00770588 -NCT00775593 -NCT00770640 -NCT00775619 -NCT00770653 -NCT00775723 -NCT00770809 -NCT00775749 -NCT00770887 -NCT00775905 -NCT00771043 -NCT00776087 -NCT00771095 -NCT00776113 -NCT00771290 -NCT00776295 -NCT00771316 -NCT00776607 -NCT00771342 -NCT00776789 -NCT00771355 -NCT00776919 -NCT00771498 -NCT00776997 -NCT00771589 -NCT00777049 -NCT00771602 -NCT00777088 -NCT00771615 -NCT00777101 -NCT00771706 -NCT00777569 -NCT00771758 -NCT00777673 -NCT00771771 -NCT00777777 -NCT00772057 -NCT00777894 -NCT00772122 -NCT00777998 -NCT00772278 -NCT00778011 -NCT00772408 -NCT00778037 -NCT00772447 -NCT00778167 -NCT00772486 -NCT00778609 -NCT00772525 -NCT00778765 -NCT00772629 -NCT00778830 -NCT00772694 -NCT00778843 -NCT00772850 -NCT00778999 -NCT00772876 -NCT00779402 -NCT00772915 -NCT00779454 -NCT00772954 -NCT00779584 -NCT00772967 -NCT00779688 -NCT00773136 -NCT00779857 -NCT00773149 -NCT00791297 -NCT00779961 -NCT00787163 -NCT00780117 -NCT00786929 -NCT00780247 -NCT00787189 -NCT00780351 -NCT00787319 -NCT00780780 -NCT00787358 -NCT00780988 -NCT00787384 -NCT00781170 -NCT00787527 -NCT00781261 -NCT00787540 -NCT00781378 -NCT00787644 -NCT00781469 -NCT00787657 -NCT00781495 -NCT00787670 -NCT00782067 -NCT00787696 -NCT00782158 -NCT00787722 -NCT00782236 -NCT00787761 -NCT00782327 -NCT00787878 -NCT00782379 -NCT00787943 -NCT00782639 -NCT00787969 -NCT00782652 -NCT00788073 -NCT00782782 -NCT00788112 -NCT00782795 -NCT00788125 -NCT00782860 -NCT00788164 -NCT00783016 -NCT00788307 -NCT00783315 -NCT00788528 -NCT00783393 -NCT00788554 -NCT00783419 -NCT00788775 -NCT00783523 -NCT00788866 -NCT00783575 -NCT00788892 -NCT00783627 -NCT00788918 -NCT00783653 -NCT00788931 -NCT00783926 -NCT00788957 -NCT00783965 -NCT00789061 -NCT00784043 -NCT00789087 -NCT00784082 -NCT00789126 -NCT00784134 -NCT00789243 -NCT00784173 -NCT00789451 -NCT00784394 -NCT00789529 -NCT00784485 -NCT00789581 -NCT00784511 -NCT00789685 -NCT00784563 -NCT00789776 -NCT00784615 -NCT00789802 -NCT00784706 -NCT00789919 -NCT00784758 -NCT00789945 -NCT00784810 -NCT00789997 -NCT00784914 -NCT00790075 -NCT00785122 -NCT00790101 -NCT00785135 -NCT00790179 -NCT00785187 -NCT00790231 -NCT00785291 -NCT00790283 -NCT00785304 -NCT00790530 -NCT00785343 -NCT00790582 -NCT00785824 -NCT00790647 -NCT00786084 -NCT00790777 -NCT00786188 -NCT00790790 -NCT00786279 -NCT00791141 -NCT00786500 -NCT00791193 -NCT00786604 -NCT00802425 -NCT00791492 -NCT00796731 -NCT00791960 -NCT00796692 -NCT00792077 -NCT00796783 -NCT00792090 -NCT00796887 -NCT00792103 -NCT00796926 -NCT00792142 -NCT00796952 -NCT00792194 -NCT00796978 -NCT00792337 -NCT00797069 -NCT00792363 -NCT00797121 -NCT00792597 -NCT00797186 -NCT00792701 -NCT00797277 -NCT00792727 -NCT00797316 -NCT00792740 -NCT00797407 -NCT00792766 -NCT00797420 -NCT00792948 -NCT00797433 -NCT00792961 -NCT00797615 -NCT00793065 -NCT00797693 -NCT00793143 -NCT00797758 -NCT00793208 -NCT00797810 -NCT00793247 -NCT00797836 -NCT00793286 -NCT00798057 -NCT00793338 -NCT00798226 -NCT00793715 -NCT00798369 -NCT00793845 -NCT00798382 -NCT00794040 -NCT00798512 -NCT00794053 -NCT00798603 -NCT00794105 -NCT00798655 -NCT00794118 -NCT00799136 -NCT00794235 -NCT00799214 -NCT00794274 -NCT00799240 -NCT00794313 -NCT00799266 -NCT00794352 -NCT00799565 -NCT00794430 -NCT00799617 -NCT00794677 -NCT00799760 -NCT00794820 -NCT00799773 -NCT00794924 -NCT00799916 -NCT00794976 -NCT00799955 -NCT00795002 -NCT00800033 -NCT00795015 -NCT00800098 -NCT00795028 -NCT00800358 -NCT00795158 -NCT00800436 -NCT00795184 -NCT00800579 -NCT00795301 -NCT00800943 -NCT00795483 -NCT00801021 -NCT00795496 -NCT00801307 -NCT00795639 -NCT00801385 -NCT00795756 -NCT00801489 -NCT00795782 -NCT00801619 -NCT00795886 -NCT00801788 -NCT00795899 -NCT00801853 -NCT00796042 -NCT00802009 -NCT00796068 -NCT00802139 -NCT00796133 -NCT00802191 -NCT00796185 -NCT00802230 -NCT00796549 -NCT00802308 -NCT00796679 -NCT00813605 -NCT00802438 -NCT00808197 -NCT00802529 -NCT00808158 -NCT00802581 -NCT00808613 -NCT00802646 -NCT00808743 -NCT00802672 -NCT00808938 -NCT00802698 -NCT00808990 -NCT00802815 -NCT00809003 -NCT00802841 -NCT00809094 -NCT00802867 -NCT00809211 -NCT00802932 -NCT00809237 -NCT00802997 -NCT00809354 -NCT00803426 -NCT00809562 -NCT00803504 -NCT00809601 -NCT00803647 -NCT00809640 -NCT00803842 -NCT00809861 -NCT00803972 -NCT00809913 -NCT00803985 -NCT00809952 -NCT00804089 -NCT00810095 -NCT00804128 -NCT00810485 -NCT00804193 -NCT00810550 -NCT00804336 -NCT00810563 -NCT00804349 -NCT00810719 -NCT00804466 -NCT00810797 -NCT00804557 -NCT00810849 -NCT00804830 -NCT00810888 -NCT00805142 -NCT00811135 -NCT00805181 -NCT00811330 -NCT00805207 -NCT00811486 -NCT00805311 -NCT00811538 -NCT00805324 -NCT00811681 -NCT00805428 -NCT00811759 -NCT00805493 -NCT00811785 -NCT00805649 -NCT00811967 -NCT00805844 -NCT00812045 -NCT00806065 -NCT00812149 -NCT00806117 -NCT00812162 -NCT00806299 -NCT00812188 -NCT00806637 -NCT00812370 -NCT00806767 -NCT00812383 -NCT00806871 -NCT00812409 -NCT00806962 -NCT00812422 -NCT00807040 -NCT00812617 -NCT00807066 -NCT00812630 -NCT00807183 -NCT00812669 -NCT00807326 -NCT00812708 -NCT00807560 -NCT00812838 -NCT00807599 -NCT00812851 -NCT00807651 -NCT00812968 -NCT00807664 -NCT00813007 -NCT00807729 -NCT00813033 -NCT00807820 -NCT00813241 -NCT00807859 -NCT00813384 -NCT00807872 -NCT00813423 -NCT00807885 -NCT00813475 -NCT00807963 -NCT00813527 -NCT00808106 -NCT00824668 -NCT00813683 -NCT00819780 -NCT00813761 -NCT00819676 -NCT00813826 -NCT00819832 -NCT00813917 -NCT00820040 -NCT00813943 -NCT00820079 -NCT00814073 -NCT00820170 -NCT00814138 -NCT00820235 -NCT00814177 -NCT00820287 -NCT00814307 -NCT00820352 -NCT00814346 -NCT00820378 -NCT00814385 -NCT00820417 -NCT00814580 -NCT00820547 -NCT00815126 -NCT00820638 -NCT00815191 -NCT00820664 -NCT00815282 -NCT00820742 -NCT00815308 -NCT00820781 -NCT00815425 -NCT00820807 -NCT00815438 -NCT00820820 -NCT00815490 -NCT00820846 -NCT00815503 -NCT00820924 -NCT00815529 -NCT00820989 -NCT00815698 -NCT00821054 -NCT00815711 -NCT00821132 -NCT00815724 -NCT00821236 -NCT00816127 -NCT00821470 -NCT00816179 -NCT00821509 -NCT00816218 -NCT00821626 -NCT00816244 -NCT00821821 -NCT00816257 -NCT00821886 -NCT00816283 -NCT00822094 -NCT00816335 -NCT00822198 -NCT00816387 -NCT00822276 -NCT00816413 -NCT00822393 -NCT00816504 -NCT00822432 -NCT00816530 -NCT00822523 -NCT00816595 -NCT00822575 -NCT00816660 -NCT00822627 -NCT00816829 -NCT00822653 -NCT00816868 -NCT00822679 -NCT00816998 -NCT00822757 -NCT00817180 -NCT00822861 -NCT00817232 -NCT00822900 -NCT00817661 -NCT00823004 -NCT00817726 -NCT00823394 -NCT00817765 -NCT00823459 -NCT00817843 -NCT00823511 -NCT00817882 -NCT00823524 -NCT00818311 -NCT00823537 -NCT00818389 -NCT00823550 -NCT00818441 -NCT00823901 -NCT00818870 -NCT00824122 -NCT00818896 -NCT00824135 -NCT00819130 -NCT00824252 -NCT00819208 -NCT00824408 -NCT00819299 -NCT00824473 -NCT00819585 -NCT00835445 -NCT00824863 -NCT00829829 -NCT00824941 -NCT00829712 -NCT00825019 -NCT00829855 -NCT00825071 -NCT00830089 -NCT00825175 -NCT00830141 -NCT00825344 -NCT00830232 -NCT00825396 -NCT00830284 -NCT00825435 -NCT00830297 -NCT00825591 -NCT00830323 -NCT00825617 -NCT00830388 -NCT00825734 -NCT00830583 -NCT00825916 -NCT00830596 -NCT00826007 -NCT00830726 -NCT00826020 -NCT00830739 -NCT00826267 -NCT00830830 -NCT00826306 -NCT00830934 -NCT00826423 -NCT00831103 -NCT00826449 -NCT00831194 -NCT00826462 -NCT00831441 -NCT00826527 -NCT00831675 -NCT00826540 -NCT00831740 -NCT00826579 -NCT00831766 -NCT00826605 -NCT00831844 -NCT00826709 -NCT00831974 -NCT00826774 -NCT00832065 -NCT00826813 -NCT00832234 -NCT00826904 -NCT00832312 -NCT00827034 -NCT00832377 -NCT00827138 -NCT00832416 -NCT00827177 -NCT00832429 -NCT00827398 -NCT00832520 -NCT00827502 -NCT00832585 -NCT00827658 -NCT00832611 -NCT00827684 -NCT00832767 -NCT00827814 -NCT00832806 -NCT00827892 -NCT00832871 -NCT00828048 -NCT00833144 -NCT00828100 -NCT00833222 -NCT00828347 -NCT00833274 -NCT00828568 -NCT00833534 -NCT00828685 -NCT00833625 -NCT00828750 -NCT00833690 -NCT00828763 -NCT00833794 -NCT00828828 -NCT00833846 -NCT00828919 -NCT00833911 -NCT00828945 -NCT00833989 -NCT00828971 -NCT00834210 -NCT00829049 -NCT00834236 -NCT00829101 -NCT00834366 -NCT00829114 -NCT00834678 -NCT00829153 -NCT00834886 -NCT00829166 -NCT00834899 -NCT00829361 -NCT00835198 -NCT00829387 -NCT00835211 -NCT00829543 -NCT00835302 -NCT00829673 -NCT00846924 -NCT00835510 -NCT00842205 -NCT00835770 -NCT00842140 -NCT00835861 -NCT00842218 -NCT00836043 -NCT00842244 -NCT00836160 -NCT00842257 -NCT00836277 -NCT00842426 -NCT00836316 -NCT00842621 -NCT00836368 -NCT00842712 -NCT00836771 -NCT00842751 -NCT00836797 -NCT00842777 -NCT00836810 -NCT00842998 -NCT00836823 -NCT00843024 -NCT00836953 -NCT00843167 -NCT00837044 -NCT00843310 -NCT00837395 -NCT00843401 -NCT00837486 -NCT00843505 -NCT00837616 -NCT00843518 -NCT00837785 -NCT00843570 -NCT00837850 -NCT00843726 -NCT00838032 -NCT00843817 -NCT00838240 -NCT00843882 -NCT00838370 -NCT00843986 -NCT00838513 -NCT00844038 -NCT00838526 -NCT00844194 -NCT00838552 -NCT00844259 -NCT00838591 -NCT00844311 -NCT00838682 -NCT00844428 -NCT00838851 -NCT00844441 -NCT00838864 -NCT00844532 -NCT00838942 -NCT00844545 -NCT00839124 -NCT00844597 -NCT00839137 -NCT00844649 -NCT00839189 -NCT00844662 -NCT00839202 -NCT00844844 -NCT00839228 -NCT00844870 -NCT00839306 -NCT00845117 -NCT00839319 -NCT00845156 -NCT00839488 -NCT00845221 -NCT00839787 -NCT00845299 -NCT00839969 -NCT00845351 -NCT00839982 -NCT00845520 -NCT00840047 -NCT00845559 -NCT00840086 -NCT00845572 -NCT00840177 -NCT00845676 -NCT00840190 -NCT00845754 -NCT00840294 -NCT00845832 -NCT00840463 -NCT00845936 -NCT00840528 -NCT00845962 -NCT00840931 -NCT00845975 -NCT00840944 -NCT00846027 -NCT00841113 -NCT00846040 -NCT00841152 -NCT00846248 -NCT00841191 -NCT00846534 -NCT00841555 -NCT00846703 -NCT00841828 -NCT00846898 -NCT00841919 -NCT00858143 -NCT00847002 -NCT00852566 -NCT00847106 -NCT00852345 -NCT00847171 -NCT00852631 -NCT00847236 -NCT00852748 -NCT00847340 -NCT00852839 -NCT00847379 -NCT00852917 -NCT00847431 -NCT00853008 -NCT00847457 -NCT00853138 -NCT00847522 -NCT00853489 -NCT00847847 -NCT00853502 -NCT00847899 -NCT00853515 -NCT00847990 -NCT00853541 -NCT00848172 -NCT00853697 -NCT00848263 -NCT00853723 -NCT00848289 -NCT00853931 -NCT00848315 -NCT00854139 -NCT00848406 -NCT00854204 -NCT00848666 -NCT00854373 -NCT00848731 -NCT00854412 -NCT00848744 -NCT00854672 -NCT00849095 -NCT00854815 -NCT00849329 -NCT00855114 -NCT00849342 -NCT00855192 -NCT00849394 -NCT00855296 -NCT00849472 -NCT00855374 -NCT00849524 -NCT00855426 -NCT00849615 -NCT00855530 -NCT00849745 -NCT00855595 -NCT00849849 -NCT00855712 -NCT00849888 -NCT00855764 -NCT00849927 -NCT00855829 -NCT00850018 -NCT00855894 -NCT00850031 -NCT00855920 -NCT00850057 -NCT00855972 -NCT00850382 -NCT00856232 -NCT00850408 -NCT00856297 -NCT00850577 -NCT00856375 -NCT00850993 -NCT00856388 -NCT00851162 -NCT00856492 -NCT00851188 -NCT00856544 -NCT00851331 -NCT00856596 -NCT00851461 -NCT00856609 -NCT00851487 -NCT00856648 -NCT00851747 -NCT00856973 -NCT00851799 -NCT00857051 -NCT00851838 -NCT00857194 -NCT00851942 -NCT00857363 -NCT00851981 -NCT00857376 -NCT00852020 -NCT00857389 -NCT00852072 -NCT00857454 -NCT00852098 -NCT00857532 -NCT00852124 -NCT00857662 -NCT00852150 -NCT00857701 -NCT00852202 -NCT00857766 -NCT00852228 -NCT00858117 -NCT00852293 -NCT00868478 -NCT00858169 -NCT00863356 -NCT00858351 -NCT00863343 -NCT00858494 -NCT00863616 -NCT00858520 -NCT00863642 -NCT00858611 -NCT00863785 -NCT00858624 -NCT00863941 -NCT00858650 -NCT00864058 -NCT00858689 -NCT00864136 -NCT00858793 -NCT00864175 -NCT00858806 -NCT00864305 -NCT00858819 -NCT00864383 -NCT00858845 -NCT00864422 -NCT00859053 -NCT00864461 -NCT00859105 -NCT00864552 -NCT00859274 -NCT00864760 -NCT00859287 -NCT00864929 -NCT00859339 -NCT00865046 -NCT00859690 -NCT00865098 -NCT00859794 -NCT00865111 -NCT00859872 -NCT00865358 -NCT00859911 -NCT00865371 -NCT00859937 -NCT00865410 -NCT00860067 -NCT00865449 -NCT00860145 -NCT00865462 -NCT00860184 -NCT00865631 -NCT00860327 -NCT00865644 -NCT00860366 -NCT00866008 -NCT00860457 -NCT00866099 -NCT00860535 -NCT00866138 -NCT00860574 -NCT00866177 -NCT00860587 -NCT00866294 -NCT00860639 -NCT00866346 -NCT00860678 -NCT00866437 -NCT00860691 -NCT00866476 -NCT00860743 -NCT00866554 -NCT00860808 -NCT00866645 -NCT00861029 -NCT00866736 -NCT00861120 -NCT00866749 -NCT00861159 -NCT00866775 -NCT00861523 -NCT00866840 -NCT00861588 -NCT00866905 -NCT00861627 -NCT00866918 -NCT00861705 -NCT00867087 -NCT00861731 -NCT00867243 -NCT00861861 -NCT00867334 -NCT00861887 -NCT00867698 -NCT00862004 -NCT00867763 -NCT00862095 -NCT00867828 -NCT00862277 -NCT00867867 -NCT00862433 -NCT00867919 -NCT00862628 -NCT00867932 -NCT00862758 -NCT00868075 -NCT00862810 -NCT00868153 -NCT00862940 -NCT00868166 -NCT00863122 -NCT00868218 -NCT00863278 -NCT00879060 -NCT00868530 -NCT00873782 -NCT00868608 -NCT00873769 -NCT00868634 -NCT00874029 -NCT00868738 -NCT00874172 -NCT00868985 -NCT00874419 -NCT00869037 -NCT00874653 -NCT00869063 -NCT00874900 -NCT00869206 -NCT00874926 -NCT00869336 -NCT00874978 -NCT00869544 -NCT00875121 -NCT00869674 -NCT00875251 -NCT00869739 -NCT00875355 -NCT00869804 -NCT00875433 -NCT00869934 -NCT00875446 -NCT00869960 -NCT00875537 -NCT00869986 -NCT00875576 -NCT00870220 -NCT00875771 -NCT00870246 -NCT00875875 -NCT00870272 -NCT00875979 -NCT00870519 -NCT00876161 -NCT00870753 -NCT00876291 -NCT00870766 -NCT00876356 -NCT00870896 -NCT00876395 -NCT00870922 -NCT00876499 -NCT00871130 -NCT00876655 -NCT00871299 -NCT00876694 -NCT00871377 -NCT00876759 -NCT00871494 -NCT00876772 -NCT00871572 -NCT00876798 -NCT00871611 -NCT00877097 -NCT00871650 -NCT00877110 -NCT00871780 -NCT00877292 -NCT00871962 -NCT00877383 -NCT00872001 -NCT00877409 -NCT00872092 -NCT00877448 -NCT00872157 -NCT00877500 -NCT00872209 -NCT00877604 -NCT00872274 -NCT00877682 -NCT00872287 -NCT00877708 -NCT00872365 -NCT00877838 -NCT00872495 -NCT00877968 -NCT00872612 -NCT00878059 -NCT00872664 -NCT00878098 -NCT00872755 -NCT00878163 -NCT00872781 -NCT00878176 -NCT00872924 -NCT00878228 -NCT00872937 -NCT00878423 -NCT00873093 -NCT00878475 -NCT00873145 -NCT00878514 -NCT00873262 -NCT00878553 -NCT00873314 -NCT00878592 -NCT00873405 -NCT00878709 -NCT00873457 -NCT00878826 -NCT00873522 -NCT00878904 -NCT00873600 -NCT00879034 -NCT00873678 -NCT00889200 -NCT00879125 -NCT00884416 -NCT00879216 -NCT00884403 -NCT00879359 -NCT00884494 -NCT00879385 -NCT00884507 -NCT00879437 -NCT00884624 -NCT00879502 -NCT00884936 -NCT00879515 -NCT00885001 -NCT00879541 -NCT00885365 -NCT00879658 -NCT00885469 -NCT00879710 -NCT00885560 -NCT00879775 -NCT00885703 -NCT00879814 -NCT00885755 -NCT00880022 -NCT00885885 -NCT00880048 -NCT00885924 -NCT00880087 -NCT00886080 -NCT00880282 -NCT00886197 -NCT00880321 -NCT00886210 -NCT00880347 -NCT00886327 -NCT00880386 -NCT00886496 -NCT00880399 -NCT00886522 -NCT00880412 -NCT00886652 -NCT00880425 -NCT00886769 -NCT00880451 -NCT00886834 -NCT00880477 -NCT00886847 -NCT00880490 -NCT00886925 -NCT00880594 -NCT00887068 -NCT00880763 -NCT00887081 -NCT00880802 -NCT00887146 -NCT00880906 -NCT00887172 -NCT00881049 -NCT00887185 -NCT00881283 -NCT00887224 -NCT00881322 -NCT00887250 -NCT00881361 -NCT00887276 -NCT00881595 -NCT00887315 -NCT00881660 -NCT00887328 -NCT00881920 -NCT00887354 -NCT00882089 -NCT00887484 -NCT00882193 -NCT00887510 -NCT00882440 -NCT00887536 -NCT00882726 -NCT00887575 -NCT00882869 -NCT00887705 -NCT00882999 -NCT00887744 -NCT00883129 -NCT00887835 -NCT00883220 -NCT00887939 -NCT00883272 -NCT00888017 -NCT00883350 -NCT00888134 -NCT00883402 -NCT00888173 -NCT00883493 -NCT00888225 -NCT00883519 -NCT00888342 -NCT00883571 -NCT00888563 -NCT00883584 -NCT00888589 -NCT00883701 -NCT00889018 -NCT00884000 -NCT00889031 -NCT00884221 -NCT00889174 -NCT00884260 -NCT00889187 -NCT00884273 -NCT00899379 -NCT00889226 -NCT00894764 -NCT00889408 -NCT00894608 -NCT00889434 -NCT00894803 -NCT00889512 -NCT00894907 -NCT00889707 -NCT00895089 -NCT00889837 -NCT00895128 -NCT00890058 -NCT00895362 -NCT00890071 -NCT00895544 -NCT00890162 -NCT00895687 -NCT00890201 -NCT00895752 -NCT00890435 -NCT00895817 -NCT00890552 -NCT00895934 -NCT00890747 -NCT00895960 -NCT00890812 -NCT00896077 -NCT00890825 -NCT00896272 -NCT00890877 -NCT00896285 -NCT00891124 -NCT00896376 -NCT00891189 -NCT00896402 -NCT00891228 -NCT00896441 -NCT00891267 -NCT00896519 -NCT00891319 -NCT00896701 -NCT00891579 -NCT00896753 -NCT00891592 -NCT00896766 -NCT00891722 -NCT00896818 -NCT00891813 -NCT00896831 -NCT00891852 -NCT00896857 -NCT00891904 -NCT00897039 -NCT00891917 -NCT00897091 -NCT00891930 -NCT00897143 -NCT00891969 -NCT00897182 -NCT00892073 -NCT00897208 -NCT00892268 -NCT00897247 -NCT00892346 -NCT00897442 -NCT00892359 -NCT00897455 -NCT00892619 -NCT00897767 -NCT00892697 -NCT00897806 -NCT00892723 -NCT00897923 -NCT00892736 -NCT00897936 -NCT00892879 -NCT00897975 -NCT00893009 -NCT00898014 -NCT00893217 -NCT00898144 -NCT00893347 -NCT00898274 -NCT00893373 -NCT00898326 -NCT00893399 -NCT00898365 -NCT00893425 -NCT00898443 -NCT00893477 -NCT00898456 -NCT00893633 -NCT00898508 -NCT00893646 -NCT00898573 -NCT00893789 -NCT00898612 -NCT00893880 -NCT00898677 -NCT00893932 -NCT00898937 -NCT00894075 -NCT00899041 -NCT00894192 -NCT00899080 -NCT00894205 -NCT00899132 -NCT00894504 -NCT00899171 -NCT00894569 -NCT00912015 -NCT00899431 -NCT00904969 -NCT00899613 -NCT00904956 -NCT00899743 -NCT00904982 -NCT00899795 -NCT00905320 -NCT00899873 -NCT00905632 -NCT00899964 -NCT00905736 -NCT00900081 -NCT00905970 -NCT00900094 -NCT00906243 -NCT00900120 -NCT00906399 -NCT00900211 -NCT00906412 -NCT00900224 -NCT00906438 -NCT00900380 -NCT00906945 -NCT00900432 -NCT00906971 -NCT00900575 -NCT00907205 -NCT00900601 -NCT00907257 -NCT00900627 -NCT00907348 -NCT00900874 -NCT00907452 -NCT00900965 -NCT00907517 -NCT00901004 -NCT00907595 -NCT00901147 -NCT00907660 -NCT00901342 -NCT00907751 -NCT00901459 -NCT00907790 -NCT00901524 -NCT00908076 -NCT00901615 -NCT00908089 -NCT00901940 -NCT00908427 -NCT00902031 -NCT00908531 -NCT00902057 -NCT00908804 -NCT00902109 -NCT00909103 -NCT00902135 -NCT00909116 -NCT00902174 -NCT00909168 -NCT00902226 -NCT00909220 -NCT00902564 -NCT00909259 -NCT00902629 -NCT00909350 -NCT00902837 -NCT00909389 -NCT00902902 -NCT00909766 -NCT00902954 -NCT00909857 -NCT00903071 -NCT00909909 -NCT00903136 -NCT00909961 -NCT00903201 -NCT00910065 -NCT00903214 -NCT00910208 -NCT00903227 -NCT00910325 -NCT00903422 -NCT00910533 -NCT00903721 -NCT00910598 -NCT00903734 -NCT00910637 -NCT00903877 -NCT00910650 -NCT00903903 -NCT00910715 -NCT00903994 -NCT00910897 -NCT00904098 -NCT00911131 -NCT00904137 -NCT00911300 -NCT00904202 -NCT00911586 -NCT00904540 -NCT00911625 -NCT00904696 -NCT00911716 -NCT00904709 -NCT00911742 -NCT00904748 -NCT00911859 -NCT00904826 -NCT00911898 -NCT00904865 -NCT00922155 -NCT00912132 -NCT00917124 -NCT00912158 -NCT00917007 -NCT00912184 -NCT00917241 -NCT00912197 -NCT00917410 -NCT00912223 -NCT00917618 -NCT00912275 -NCT00917683 -NCT00912327 -NCT00917709 -NCT00912340 -NCT00917943 -NCT00912444 -NCT00918255 -NCT00912665 -NCT00918333 -NCT00912717 -NCT00918411 -NCT00912782 -NCT00918437 -NCT00912808 -NCT00918450 -NCT00912977 -NCT00918476 -NCT00913042 -NCT00918528 -NCT00913055 -NCT00918723 -NCT00913081 -NCT00918736 -NCT00913146 -NCT00918892 -NCT00913172 -NCT00918931 -NCT00913263 -NCT00918983 -NCT00913380 -NCT00919074 -NCT00913445 -NCT00919165 -NCT00913497 -NCT00919204 -NCT00913978 -NCT00919217 -NCT00914056 -NCT00919243 -NCT00914095 -NCT00919269 -NCT00914134 -NCT00919334 -NCT00914147 -NCT00919360 -NCT00914173 -NCT00919373 -NCT00914407 -NCT00919412 -NCT00914433 -NCT00919425 -NCT00914459 -NCT00919516 -NCT00914524 -NCT00919633 -NCT00914602 -NCT00919672 -NCT00914823 -NCT00920075 -NCT00914862 -NCT00920127 -NCT00914966 -NCT00920140 -NCT00915018 -NCT00920179 -NCT00915330 -NCT00920413 -NCT00915343 -NCT00920478 -NCT00915603 -NCT00920621 -NCT00915681 -NCT00920725 -NCT00915798 -NCT00920790 -NCT00915954 -NCT00920985 -NCT00915980 -NCT00921024 -NCT00916032 -NCT00921115 -NCT00916058 -NCT00921206 -NCT00916240 -NCT00921414 -NCT00916292 -NCT00921427 -NCT00916305 -NCT00921492 -NCT00916383 -NCT00921518 -NCT00916396 -NCT00921544 -NCT00916643 -NCT00921609 -NCT00916747 -NCT00921648 -NCT00916903 -NCT00921856 -NCT00916916 -NCT00932880 -NCT00922194 -NCT00927589 -NCT00922233 -NCT00927511 -NCT00922597 -NCT00927901 -NCT00922805 -NCT00927953 -NCT00922870 -NCT00928044 -NCT00922883 -NCT00928161 -NCT00923013 -NCT00928330 -NCT00923052 -NCT00928564 -NCT00923195 -NCT00928629 -NCT00923247 -NCT00928707 -NCT00923364 -NCT00928759 -NCT00923429 -NCT00928837 -NCT00923559 -NCT00928993 -NCT00923780 -NCT00929006 -NCT00924040 -NCT00929188 -NCT00924170 -NCT00929240 -NCT00924183 -NCT00929305 -NCT00924196 -NCT00929318 -NCT00924261 -NCT00929591 -NCT00924287 -NCT00929643 -NCT00924326 -NCT00929903 -NCT00924352 -NCT00929981 -NCT00924508 -NCT00930007 -NCT00924612 -NCT00930124 -NCT00924638 -NCT00930202 -NCT00924755 -NCT00930228 -NCT00924768 -NCT00930332 -NCT00924872 -NCT00930423 -NCT00924950 -NCT00930709 -NCT00925041 -NCT00930852 -NCT00925067 -NCT00930930 -NCT00925145 -NCT00931099 -NCT00925158 -NCT00931164 -NCT00925210 -NCT00931190 -NCT00925236 -NCT00931450 -NCT00925522 -NCT00931528 -NCT00925652 -NCT00931593 -NCT00925691 -NCT00931619 -NCT00925847 -NCT00931645 -NCT00925977 -NCT00931788 -NCT00926120 -NCT00931840 -NCT00926237 -NCT00931866 -NCT00926380 -NCT00931970 -NCT00926419 -NCT00932022 -NCT00926471 -NCT00932256 -NCT00926601 -NCT00932373 -NCT00926640 -NCT00932412 -NCT00926835 -NCT00932425 -NCT00926913 -NCT00932451 -NCT00927030 -NCT00932555 -NCT00927056 -NCT00932698 -NCT00927069 -NCT00932737 -NCT00927108 -NCT00932763 -NCT00927186 -NCT00932841 -NCT00927212 -NCT00932854 -NCT00927303 -NCT00942019 -NCT00932893 -NCT00937638 -NCT00932919 -NCT00937547 -NCT00932971 -NCT00937690 -NCT00933036 -NCT00937898 -NCT00933140 -NCT00938184 -NCT00933244 -NCT00938301 -NCT00933296 -NCT00938483 -NCT00933322 -NCT00938535 -NCT00933361 -NCT00938626 -NCT00933465 -NCT00938652 -NCT00933478 -NCT00938860 -NCT00933543 -NCT00938925 -NCT00933608 -NCT00938977 -NCT00933660 -NCT00939107 -NCT00933686 -NCT00939120 -NCT00933777 -NCT00939211 -NCT00933829 -NCT00939419 -NCT00933894 -NCT00939523 -NCT00934102 -NCT00939536 -NCT00934258 -NCT00939549 -NCT00934271 -NCT00939627 -NCT00934388 -NCT00939640 -NCT00934479 -NCT00939653 -NCT00934596 -NCT00939679 -NCT00934713 -NCT00939692 -NCT00934752 -NCT00939770 -NCT00934830 -NCT00939822 -NCT00934856 -NCT00940082 -NCT00934960 -NCT00940225 -NCT00935090 -NCT00940238 -NCT00935129 -NCT00940316 -NCT00935311 -NCT00940342 -NCT00935584 -NCT00940381 -NCT00935649 -NCT00940433 -NCT00935779 -NCT00940524 -NCT00935792 -NCT00940563 -NCT00935896 -NCT00940654 -NCT00936156 -NCT00940784 -NCT00936221 -NCT00940810 -NCT00936273 -NCT00940836 -NCT00936312 -NCT00940927 -NCT00936325 -NCT00941070 -NCT00936338 -NCT00941174 -NCT00936429 -NCT00941330 -NCT00936585 -NCT00941343 -NCT00936728 -NCT00941369 -NCT00936741 -NCT00941499 -NCT00936767 -NCT00941551 -NCT00936793 -NCT00941616 -NCT00936806 -NCT00941681 -NCT00936845 -NCT00941746 -NCT00937092 -NCT00941928 -NCT00937131 -NCT00941941 -NCT00937144 -NCT00941993 -NCT00937274 -NCT00942006 -NCT00937287 -NCT00951730 -NCT00942227 -NCT00947219 -NCT00942409 -NCT00947193 -NCT00942591 -NCT00947271 -NCT00942630 -NCT00947453 -NCT00942812 -NCT00947479 -NCT00942851 -NCT00947505 -NCT00942955 -NCT00947765 -NCT00943033 -NCT00947882 -NCT00943059 -NCT00947960 -NCT00943267 -NCT00947986 -NCT00943280 -NCT00948012 -NCT00943358 -NCT00948064 -NCT00943410 -NCT00948142 -NCT00943514 -NCT00948220 -NCT00943527 -NCT00948259 -NCT00943553 -NCT00948376 -NCT00943631 -NCT00948402 -NCT00943644 -NCT00948467 -NCT00943657 -NCT00948506 -NCT00943670 -NCT00948766 -NCT00943722 -NCT00948779 -NCT00943748 -NCT00948922 -NCT00943774 -NCT00949169 -NCT00943839 -NCT00949208 -NCT00943865 -NCT00949247 -NCT00943878 -NCT00949416 -NCT00943943 -NCT00949455 -NCT00944047 -NCT00949598 -NCT00944216 -NCT00949637 -NCT00944567 -NCT00949650 -NCT00944671 -NCT00949702 -NCT00944801 -NCT00949741 -NCT00944879 -NCT00949975 -NCT00945009 -NCT00950170 -NCT00945022 -NCT00950183 -NCT00945061 -NCT00950261 -NCT00945334 -NCT00950300 -NCT00945373 -NCT00950326 -NCT00945412 -NCT00950482 -NCT00945581 -NCT00950625 -NCT00945685 -NCT00950651 -NCT00945750 -NCT00950677 -NCT00945880 -NCT00950690 -NCT00945919 -NCT00950742 -NCT00946010 -NCT00950755 -NCT00946023 -NCT00950768 -NCT00946101 -NCT00950781 -NCT00946114 -NCT00950989 -NCT00946192 -NCT00951119 -NCT00946335 -NCT00951145 -NCT00946374 -NCT00951223 -NCT00946400 -NCT00951405 -NCT00946712 -NCT00951431 -NCT00946816 -NCT00951522 -NCT00946842 -NCT00951665 -NCT00947037 -NCT00962312 -NCT00952146 -NCT00956839 -NCT00952185 -NCT00956748 -NCT00952354 -NCT00956982 -NCT00952692 -NCT00957086 -NCT00952731 -NCT00957125 -NCT00952744 -NCT00957281 -NCT00952770 -NCT00957359 -NCT00952965 -NCT00957411 -NCT00953043 -NCT00957645 -NCT00953316 -NCT00957788 -NCT00953394 -NCT00957840 -NCT00953420 -NCT00957866 -NCT00953511 -NCT00957879 -NCT00953667 -NCT00957892 -NCT00953771 -NCT00957918 -NCT00953914 -NCT00958113 -NCT00954005 -NCT00958139 -NCT00954031 -NCT00958204 -NCT00954070 -NCT00958256 -NCT00954135 -NCT00958360 -NCT00954174 -NCT00958386 -NCT00954226 -NCT00958438 -NCT00954291 -NCT00958542 -NCT00954356 -NCT00958737 -NCT00954382 -NCT00958750 -NCT00954421 -NCT00958763 -NCT00954434 -NCT00958776 -NCT00954629 -NCT00958802 -NCT00954707 -NCT00958919 -NCT00954798 -NCT00958971 -NCT00954850 -NCT00959049 -NCT00954876 -NCT00959127 -NCT00954889 -NCT00959283 -NCT00954928 -NCT00959491 -NCT00954993 -NCT00959621 -NCT00955019 -NCT00959751 -NCT00955045 -NCT00959764 -NCT00955149 -NCT00960011 -NCT00955370 -NCT00960167 -NCT00955422 -NCT00960245 -NCT00955500 -NCT00960336 -NCT00955669 -NCT00960635 -NCT00955773 -NCT00960661 -NCT00955838 -NCT00960934 -NCT00955981 -NCT00961012 -NCT00955994 -NCT00961220 -NCT00956007 -NCT00961467 -NCT00956033 -NCT00961558 -NCT00956150 -NCT00961623 -NCT00956215 -NCT00961701 -NCT00956306 -NCT00962039 -NCT00956358 -NCT00962065 -NCT00956397 -NCT00962169 -NCT00956475 -NCT00962221 -NCT00956501 -NCT00962299 -NCT00956696 -NCT00972101 -NCT00962338 -NCT00967330 -NCT00962390 -NCT00967317 -NCT00962637 -NCT00967473 -NCT00962767 -NCT00967499 -NCT00962845 -NCT00967759 -NCT00962936 -NCT00967785 -NCT00963001 -NCT00967811 -NCT00963027 -NCT00968214 -NCT00963040 -NCT00968240 -NCT00963157 -NCT00968357 -NCT00963274 -NCT00968370 -NCT00963339 -NCT00968396 -NCT00963417 -NCT00968500 -NCT00963521 -NCT00968682 -NCT00963690 -NCT00968695 -NCT00963729 -NCT00968747 -NCT00963755 -NCT00968760 -NCT00963807 -NCT00968786 -NCT00963937 -NCT00968890 -NCT00963950 -NCT00969020 -NCT00964210 -NCT00969072 -NCT00964223 -NCT00969085 -NCT00964457 -NCT00969124 -NCT00964535 -NCT00969280 -NCT00964704 -NCT00969319 -NCT00964821 -NCT00969462 -NCT00964951 -NCT00969501 -NCT00965276 -NCT00969579 -NCT00965289 -NCT00969969 -NCT00965315 -NCT00970047 -NCT00965341 -NCT00970086 -NCT00965354 -NCT00970190 -NCT00965575 -NCT00970359 -NCT00965627 -NCT00970502 -NCT00965679 -NCT00970541 -NCT00965770 -NCT00970567 -NCT00965835 -NCT00970658 -NCT00965848 -NCT00970697 -NCT00965913 -NCT00970801 -NCT00966004 -NCT00970866 -NCT00966017 -NCT00970983 -NCT00966264 -NCT00971035 -NCT00966342 -NCT00971074 -NCT00966381 -NCT00971165 -NCT00966459 -NCT00971334 -NCT00966472 -NCT00971438 -NCT00966498 -NCT00971555 -NCT00966576 -NCT00971737 -NCT00966589 -NCT00971750 -NCT00966693 -NCT00971763 -NCT00966719 -NCT00971776 -NCT00966901 -NCT00971789 -NCT00966940 -NCT00971932 -NCT00967031 -NCT00971958 -NCT00967070 -NCT00971971 -NCT00967174 -NCT00981461 -NCT00972218 -NCT00977080 -NCT00972231 -NCT00977054 -NCT00972296 -NCT00977093 -NCT00972309 -NCT00977236 -NCT00972530 -NCT00977353 -NCT00973063 -NCT00977366 -NCT00973154 -NCT00977392 -NCT00973219 -NCT00977431 -NCT00973336 -NCT00977470 -NCT00973362 -NCT00977574 -NCT00973661 -NCT00977730 -NCT00973674 -NCT00977821 -NCT00973739 -NCT00977847 -NCT00973752 -NCT00978042 -NCT00973895 -NCT00978159 -NCT00973908 -NCT00978237 -NCT00973999 -NCT00978354 -NCT00974363 -NCT00978419 -NCT00974389 -NCT00978458 -NCT00974480 -NCT00978549 -NCT00974532 -NCT00978627 -NCT00974558 -NCT00978679 -NCT00974636 -NCT00978861 -NCT00974727 -NCT00978939 -NCT00974831 -NCT00978991 -NCT00974883 -NCT00979043 -NCT00974935 -NCT00979108 -NCT00975013 -NCT00979160 -NCT00975078 -NCT00979212 -NCT00975130 -NCT00979589 -NCT00975143 -NCT00979602 -NCT00975156 -NCT00979628 -NCT00975208 -NCT00979719 -NCT00975403 -NCT00979758 -NCT00975442 -NCT00979836 -NCT00975546 -NCT00979914 -NCT00975585 -NCT00979979 -NCT00975650 -NCT00980018 -NCT00975728 -NCT00980161 -NCT00975741 -NCT00980174 -NCT00975793 -NCT00980187 -NCT00975819 -NCT00980239 -NCT00975884 -NCT00980395 -NCT00975897 -NCT00980603 -NCT00976040 -NCT00980785 -NCT00976313 -NCT00980798 -NCT00976443 -NCT00980954 -NCT00976547 -NCT00981032 -NCT00976560 -NCT00981045 -NCT00976573 -NCT00981058 -NCT00976586 -NCT00981071 -NCT00976599 -NCT00981136 -NCT00976625 -NCT00981201 -NCT00976677 -NCT00981305 -NCT00976781 -NCT00981370 -NCT00976989 -NCT00993356 -NCT00981552 -NCT00987831 -NCT00981604 -NCT00987805 -NCT00981656 -NCT00988065 -NCT00981695 -NCT00988078 -NCT00981708 -NCT00988143 -NCT00981734 -NCT00988260 -NCT00981851 -NCT00988351 -NCT00982007 -NCT00988442 -NCT00982124 -NCT00988468 -NCT00982228 -NCT00988559 -NCT00982332 -NCT00988572 -NCT00982540 -NCT00988715 -NCT00982579 -NCT00988741 -NCT00982605 -NCT00988949 -NCT00982787 -NCT00988975 -NCT00982800 -NCT00989196 -NCT00982839 -NCT00989222 -NCT00982852 -NCT00989261 -NCT00982891 -NCT00989443 -NCT00982904 -NCT00989469 -NCT00982969 -NCT00989508 -NCT00982995 -NCT00989547 -NCT00983138 -NCT00989612 -NCT00983307 -NCT00989625 -NCT00983437 -NCT00989651 -NCT00983489 -NCT00989677 -NCT00983502 -NCT00989690 -NCT00983554 -NCT00989716 -NCT00983697 -NCT00989742 -NCT00983749 -NCT00989794 -NCT00984100 -NCT00989859 -NCT00984191 -NCT00989898 -NCT00984217 -NCT00989976 -NCT00984243 -NCT00990054 -NCT00984334 -NCT00990132 -NCT00984659 -NCT00990223 -NCT00984828 -NCT00990379 -NCT00984893 -NCT00990652 -NCT00985010 -NCT00990808 -NCT00985088 -NCT00991146 -NCT00985309 -NCT00991159 -NCT00985413 -NCT00991406 -NCT00985504 -NCT00991562 -NCT00985803 -NCT00991601 -NCT00986180 -NCT00991731 -NCT00986284 -NCT00991874 -NCT00986674 -NCT00991952 -NCT00986765 -NCT00992017 -NCT00986882 -NCT00992277 -NCT00986973 -NCT00992433 -NCT00987012 -NCT00992693 -NCT00987077 -NCT00992836 -NCT00987116 -NCT00992992 -NCT00987194 -NCT00993252 -NCT00987350 -NCT00993265 -NCT00987389 -NCT01129349 -NCT00993408 -NCT00998465 -NCT00993447 -NCT00998335 -NCT00993499 -NCT00998621 -NCT00993551 -NCT00998725 -NCT00993642 -NCT00998868 -NCT00993707 -NCT00998920 -NCT00993902 -NCT00998985 -NCT00993915 -NCT00999050 -NCT00993928 -NCT00999219 -NCT00994045 -NCT00999284 -NCT00994175 -NCT00999310 -NCT00994214 -NCT00999427 -NCT00994552 -NCT00999518 -NCT00994656 -NCT00999557 -NCT00994851 -NCT00999700 -NCT00994929 -NCT00999804 -NCT00995007 -NCT01000025 -NCT00995020 -NCT01000090 -NCT00995059 -NCT01000116 -NCT00995098 -NCT01000129 -NCT00995150 -NCT01000181 -NCT00995163 -NCT01000246 -NCT00995215 -NCT01000272 -NCT00995306 -NCT01000285 -NCT00995527 -NCT01000376 -NCT00995722 -NCT01000415 -NCT00995774 -NCT01000480 -NCT00995813 -NCT01000636 -NCT00995826 -NCT01000662 -NCT00995891 -NCT01000701 -NCT00996047 -NCT01000740 -NCT00996112 -NCT01000779 -NCT00996424 -NCT01000857 -NCT00996567 -NCT01128257 -NCT00996593 -NCT01128296 -NCT00996632 -NCT01128387 -NCT00996697 -NCT01128517 -NCT00996710 -NCT01128543 -NCT00996762 -NCT01128556 -NCT00996801 -NCT01128608 -NCT00996996 -NCT01128660 -NCT00997009 -NCT01128712 -NCT00997100 -NCT01128803 -NCT00997269 -NCT01128842 -NCT00997334 -NCT01128881 -NCT00997412 -NCT01128998 -NCT00997425 -NCT01129037 -NCT00997490 -NCT01129063 -NCT00997516 -NCT01129128 -NCT00997581 -NCT01129154 -NCT00997828 -NCT01129167 -NCT00997854 -NCT01129180 -NCT00997867 -NCT01129193 -NCT00997958 -NCT01129206 -NCT00998244 -NCT01129310 -NCT00998322 -NCT01129336 -NCT01000896 -NCT01127698 -NCT01000948 -NCT01127737 -NCT01001143 -NCT01127763 -NCT01001221 -NCT01127841 -NCT01001299 -NCT01127867 -NCT01001377 -NCT01128010 -NCT01001390 -NCT01128101 -NCT01001442 -NCT01128192 -NCT01001598 -NCT01128218 -NCT01001728 -NCT01122888 -NCT01122901 -NCT01123005 -NCT01123044 -NCT01123096 -NCT01123109 -NCT01123161 -NCT01123304 -NCT01123356 -NCT01123369 -NCT01123473 -NCT01123486 -NCT01123512 -NCT01123603 -NCT01123811 -NCT01123876 -NCT01123902 -NCT01123928 -NCT01123941 -NCT01123954 -NCT01124136 -NCT01124240 -NCT01124253 -NCT01124357 -NCT01124409 -NCT01124435 -NCT01124500 -NCT01124526 -NCT01124539 -NCT01124591 -NCT01124630 -NCT01124656 -NCT01124669 -NCT01124682 -NCT01124695 -NCT01124734 -NCT01124786 -NCT01124812 -NCT01124864 -NCT01124994 -NCT01125020 -NCT01125046 -NCT01125085 -NCT01125124 -NCT01125176 -NCT01125215 -NCT01125241 -NCT01125267 -NCT01125293 -NCT01125345 -NCT01125449 -NCT01125488 -NCT01125566 -NCT01125683 -NCT01125709 -NCT01125774 -NCT01125787 -NCT01125800 -NCT01125813 -NCT01125865 -NCT01125891 -NCT01125930 -NCT01125943 -NCT01125969 -NCT01125995 -NCT01126008 -NCT01126060 -NCT01126112 -NCT01126138 -NCT01126177 -NCT01126216 -NCT01126281 -NCT01126307 -NCT01126346 -NCT01126450 -NCT01126463 -NCT01126476 -NCT01126502 -NCT01126645 -NCT01126671 -NCT01126684 -NCT01126736 -NCT01126749 -NCT01126814 -NCT01126866 -NCT01126879 -NCT01126892 -NCT01126905 -NCT01126931 -NCT01126944 -NCT01127009 -NCT01127061 -NCT01127074 -NCT01127178 -NCT01127295 -NCT01127373 -NCT01127386 -NCT01127425 -NCT01127451 -NCT01127464 -NCT01127542 -NCT01127555 -NCT01127594 -NCT01127659 -NCT01001793 -NCT01122875 -NCT01001858 -NCT01116336 -NCT01116362 -NCT01116414 -NCT01116466 -NCT01116479 -NCT01116622 -NCT01116635 -NCT01116648 -NCT01116661 -NCT01116687 -NCT01116791 -NCT01116804 -NCT01116843 -NCT01117012 -NCT01117025 -NCT01117051 -NCT01117142 -NCT01117246 -NCT01117337 -NCT01117402 -NCT01117428 -NCT01117441 -NCT01117506 -NCT01117558 -NCT01117623 -NCT01117714 -NCT01117818 -NCT01117831 -NCT01117844 -NCT01117935 -NCT01118013 -NCT01118026 -NCT01118039 -NCT01118052 -NCT01118065 -NCT01118091 -NCT01118221 -NCT01118234 -NCT01118338 -NCT01118351 -NCT01118377 -NCT01118507 -NCT01118585 -NCT01118611 -NCT01118624 -NCT01118676 -NCT01118689 -NCT01118741 -NCT01118819 -NCT01118845 -NCT01118897 -NCT01118975 -NCT01118988 -NCT01119066 -NCT01119105 -NCT01119118 -NCT01119443 -NCT01119456 -NCT01119482 -NCT01119508 -NCT01119521 -NCT01119547 -NCT01119599 -NCT01119664 -NCT01119742 -NCT01119794 -NCT01119833 -NCT01119898 -NCT01119976 -NCT01120158 -NCT01120171 -NCT01120184 -NCT01120197 -NCT01120236 -NCT01120249 -NCT01120275 -NCT01120288 -NCT01120340 -NCT01120457 -NCT01120470 -NCT01120574 -NCT01120600 -NCT01120626 -NCT01120639 -NCT01120795 -NCT01120821 -NCT01120834 -NCT01121107 -NCT01121120 -NCT01121133 -NCT01121263 -NCT01121393 -NCT01121406 -NCT01121432 -NCT01121484 -NCT01121497 -NCT01121562 -NCT01121575 -NCT01121588 -NCT01121601 -NCT01121640 -NCT01121718 -NCT01121731 -NCT01121757 -NCT01121848 -NCT01121900 -NCT01121926 -NCT01121939 -NCT01122121 -NCT01122147 -NCT01122160 -NCT01122199 -NCT01122303 -NCT01122342 -NCT01122381 -NCT01122459 -NCT01122472 -NCT01122485 -NCT01122524 -NCT01122615 -NCT01122732 -NCT01122797 -NCT01001910 -NCT01116167 -NCT01001936 -NCT01116193 -NCT01002014 -NCT01116206 -NCT01002066 -NCT01116219 -NCT01002092 -NCT01116232 -NCT01002248 -NCT01116245 -NCT01002417 -NCT01116271 -NCT01002443 -NCT01116297 -NCT01002664 -NCT01110941 -NCT01110954 -NCT01110980 -NCT01110993 -NCT01111019 -NCT01111058 -NCT01111097 -NCT01111188 -NCT01111253 -NCT01111292 -NCT01111448 -NCT01111461 -NCT01111526 -NCT01111591 -NCT01111604 -NCT01111656 -NCT01111812 -NCT01111825 -NCT01111838 -NCT01111903 -NCT01111929 -NCT01111942 -NCT01112007 -NCT01112046 -NCT01112098 -NCT01112189 -NCT01112215 -NCT01112228 -NCT01112254 -NCT01112280 -NCT01112293 -NCT01112345 -NCT01112384 -NCT01112514 -NCT01112527 -NCT01112540 -NCT01112592 -NCT01112618 -NCT01112631 -NCT01112657 -NCT01112683 -NCT01112826 -NCT01112839 -NCT01112891 -NCT01112982 -NCT01113034 -NCT01113255 -NCT01113268 -NCT01113320 -NCT01113333 -NCT01113385 -NCT01113398 -NCT01113463 -NCT01113476 -NCT01113502 -NCT01113554 -NCT01113632 -NCT01113710 -NCT01113736 -NCT01113905 -NCT01113918 -NCT01113957 -NCT01113970 -NCT01114048 -NCT01114087 -NCT01114113 -NCT01114139 -NCT01114165 -NCT01114191 -NCT01114230 -NCT01114243 -NCT01114269 -NCT01114282 -NCT01114360 -NCT01114373 -NCT01114386 -NCT01114555 -NCT01114581 -NCT01114633 -NCT01114698 -NCT01114711 -NCT01114802 -NCT01114815 -NCT01114828 -NCT01114867 -NCT01114932 -NCT01114958 -NCT01115036 -NCT01115244 -NCT01115270 -NCT01115283 -NCT01115335 -NCT01115361 -NCT01115452 -NCT01115491 -NCT01115686 -NCT01115751 -NCT01115790 -NCT01115803 -NCT01115985 -NCT01116037 -NCT01116063 -NCT01116102 -NCT01116115 -NCT01116128 -NCT01116154 -NCT01116323 -NCT01002703 -NCT01110928 -NCT01002755 -NCT01094184 -NCT01094288 -NCT01094301 -NCT01094379 -NCT01094405 -NCT01094431 -NCT01094470 -NCT01094496 -NCT01094535 -NCT01094548 -NCT01094561 -NCT01094600 -NCT01094626 -NCT01094665 -NCT01094704 -NCT01094808 -NCT01094860 -NCT01094912 -NCT01094964 -NCT01095003 -NCT01095094 -NCT01095120 -NCT01095133 -NCT01095198 -NCT01095302 -NCT01095328 -NCT01095367 -NCT01095458 -NCT01095471 -NCT01095523 -NCT01095627 -NCT01095744 -NCT01095757 -NCT01095822 -NCT01095848 -NCT01095913 -NCT01095926 -NCT01096030 -NCT01096134 -NCT01096199 -NCT01096238 -NCT01096290 -NCT01096316 -NCT01096342 -NCT01096355 -NCT01096368 -NCT01096446 -NCT01096472 -NCT01096524 -NCT01096602 -NCT01096615 -NCT01096641 -NCT01096719 -NCT01096732 -NCT01096745 -NCT01101646 -NCT01101659 -NCT01101672 -NCT01101724 -NCT01101750 -NCT01101841 -NCT01101880 -NCT01101906 -NCT01102023 -NCT01102088 -NCT01102179 -NCT01102192 -NCT01102205 -NCT01102231 -NCT01102309 -NCT01102335 -NCT01102361 -NCT01102426 -NCT01102517 -NCT01102595 -NCT01108666 -NCT01108705 -NCT01108783 -NCT01108835 -NCT01108991 -NCT01109004 -NCT01109069 -NCT01109095 -NCT01109121 -NCT01109199 -NCT01109212 -NCT01109264 -NCT01109277 -NCT01109329 -NCT01109420 -NCT01109446 -NCT01109472 -NCT01109524 -NCT01109537 -NCT01109576 -NCT01109602 -NCT01109615 -NCT01109667 -NCT01109771 -NCT01109849 -NCT01109901 -NCT01110083 -NCT01110135 -NCT01110174 -NCT01110200 -NCT01110226 -NCT01110265 -NCT01110330 -NCT01110421 -NCT01110447 -NCT01110473 -NCT01110486 -NCT01110603 -NCT01110668 -NCT01110694 -NCT01110733 -NCT01110785 -NCT01110798 -NCT01110824 -NCT01110837 -NCT01110850 -NCT01110876 -NCT01002781 -NCT01094132 -NCT01002924 -NCT01070628 -NCT01070706 -NCT01070862 -NCT01070875 -NCT01070927 -NCT01071018 -NCT01071109 -NCT01071161 -NCT01071200 -NCT01071226 -NCT01071239 -NCT01071304 -NCT01071447 -NCT01071564 -NCT01071655 -NCT01071694 -NCT01071733 -NCT01071824 -NCT01071837 -NCT01071915 -NCT01071928 -NCT01071941 -NCT01072045 -NCT01072084 -NCT01072149 -NCT01072175 -NCT01072266 -NCT01072318 -NCT01072409 -NCT01072513 -NCT01072526 -NCT01072630 -NCT01072682 -NCT01072773 -NCT01072838 -NCT01072851 -NCT01072890 -NCT01072929 -NCT01072981 -NCT01073163 -NCT01073241 -NCT01073267 -NCT01073319 -NCT01073358 -NCT01073527 -NCT01073605 -NCT01073683 -NCT01073709 -NCT01073722 -NCT01073839 -NCT01073865 -NCT01073982 -NCT01074008 -NCT01074021 -NCT01074047 -NCT01074060 -NCT01074086 -NCT01074138 -NCT01074177 -NCT01074203 -NCT01074216 -NCT01074307 -NCT01074359 -NCT01074385 -NCT01074411 -NCT01074437 -NCT01074476 -NCT01074502 -NCT01074528 -NCT01074554 -NCT01074645 -NCT01074658 -NCT01074671 -NCT01074697 -NCT01074736 -NCT01074775 -NCT01074801 -NCT01074814 -NCT01074827 -NCT01074853 -NCT01074957 -NCT01074970 -NCT01074996 -NCT01075048 -NCT01075087 -NCT01091974 -NCT01091987 -NCT01092052 -NCT01092078 -NCT01092091 -NCT01092182 -NCT01092247 -NCT01092351 -NCT01092468 -NCT01092481 -NCT01092546 -NCT01092585 -NCT01092624 -NCT01092689 -NCT01092728 -NCT01092741 -NCT01092780 -NCT01092897 -NCT01092910 -NCT01093027 -NCT01093066 -NCT01093092 -NCT01093183 -NCT01093196 -NCT01093222 -NCT01093235 -NCT01093365 -NCT01093378 -NCT01093521 -NCT01093573 -NCT01093586 -NCT01093612 -NCT01093690 -NCT01093755 -NCT01093768 -NCT01093859 -NCT01093950 -NCT01003002 -NCT01068938 -NCT01003015 -NCT01068964 -NCT01003054 -NCT01068977 -NCT01003106 -NCT01069055 -NCT01003145 -NCT01069081 -NCT01003158 -NCT01069172 -NCT01003223 -NCT01069289 -NCT01003249 -NCT01069328 -NCT01003262 -NCT01069536 -NCT01003379 -NCT01069575 -NCT01003509 -NCT01069627 -NCT01003522 -NCT01069640 -NCT01003548 -NCT01069653 -NCT01003574 -NCT01069757 -NCT01003626 -NCT01069770 -NCT01003639 -NCT01069796 -NCT01003678 -NCT01069887 -NCT01003769 -NCT01069900 -NCT01003808 -NCT01069991 -NCT01003886 -NCT01070056 -NCT01003899 -NCT01070160 -NCT01003938 -NCT01070173 -NCT01003951 -NCT01070186 -NCT01003964 -NCT01070277 -NCT01004003 -NCT01070290 -NCT01004081 -NCT01070316 -NCT01004094 -NCT01070355 -NCT01004159 -NCT01070485 -NCT01004172 -NCT01065935 -NCT01066013 -NCT01066052 -NCT01066091 -NCT01066169 -NCT01066195 -NCT01066208 -NCT01066221 -NCT01066234 -NCT01066338 -NCT01066390 -NCT01066429 -NCT01066468 -NCT01066494 -NCT01066507 -NCT01066572 -NCT01066624 -NCT01066663 -NCT01066676 -NCT01066741 -NCT01066871 -NCT01066884 -NCT01066936 -NCT01067014 -NCT01067053 -NCT01067066 -NCT01067144 -NCT01067274 -NCT01067287 -NCT01067300 -NCT01067352 -NCT01067365 -NCT01067456 -NCT01067469 -NCT01067508 -NCT01067690 -NCT01067755 -NCT01067768 -NCT01067937 -NCT01067976 -NCT01067989 -NCT01068054 -NCT01068132 -NCT01068184 -NCT01068210 -NCT01068236 -NCT01068249 -NCT01068288 -NCT01068301 -NCT01068314 -NCT01068327 -NCT01068366 -NCT01068392 -NCT01068405 -NCT01068444 -NCT01068483 -NCT01068509 -NCT01068587 -NCT01068704 -NCT01068769 -NCT01068782 -NCT01070537 -NCT01004211 -NCT01065818 -NCT01004224 -NCT01065831 -NCT01004250 -NCT01065844 -NCT01004380 -NCT01026051 -NCT01026116 -NCT01026142 -NCT01026181 -NCT01026207 -NCT01026220 -NCT01026233 -NCT01026324 -NCT01026415 -NCT01026493 -NCT01026532 -NCT01026571 -NCT01026584 -NCT01026623 -NCT01026675 -NCT01026753 -NCT01026792 -NCT01026844 -NCT01026870 -NCT01026935 -NCT01027000 -NCT01027039 -NCT01027156 -NCT01027182 -NCT01027195 -NCT01027208 -NCT01027221 -NCT01027286 -NCT01027325 -NCT01027416 -NCT01027429 -NCT01027494 -NCT01027559 -NCT01027598 -NCT01027637 -NCT01027663 -NCT01027676 -NCT01027741 -NCT01027793 -NCT01027819 -NCT01027884 -NCT01027910 -NCT01027923 -NCT01027975 -NCT01028040 -NCT01028222 -NCT01028235 -NCT01028287 -NCT01028352 -NCT01028365 -NCT01028378 -NCT01028417 -NCT01028456 -NCT01028469 -NCT01028495 -NCT01028612 -NCT01028651 -NCT01028677 -NCT01028716 -NCT01028729 -NCT01028755 -NCT01028859 -NCT01028885 -NCT01028989 -NCT01029054 -NCT01029093 -NCT01029275 -NCT01063517 -NCT01063530 -NCT01063556 -NCT01063569 -NCT01063660 -NCT01063673 -NCT01063790 -NCT01063816 -NCT01063868 -NCT01063907 -NCT01063920 -NCT01063946 -NCT01064011 -NCT01064050 -NCT01064089 -NCT01064128 -NCT01064245 -NCT01064284 -NCT01064310 -NCT01064375 -NCT01064401 -NCT01064466 -NCT01064479 -NCT01064557 -NCT01064570 -NCT01064622 -NCT01064635 -NCT01064648 -NCT01064661 -NCT01064713 -NCT01064726 -NCT01064921 -NCT01064999 -NCT01065025 -NCT01065038 -NCT01065090 -NCT01065129 -NCT01065233 -NCT01065246 -NCT01065441 -NCT01065454 -NCT01065467 -NCT01065545 -NCT01065623 -NCT01065649 -NCT01065662 -NCT01065675 -NCT01065688 -NCT01065753 -NCT01065805 -NCT01065870 -NCT01004393 -NCT01026025 -NCT01004419 -NCT01019486 -NCT01019499 -NCT01019512 -NCT01019577 -NCT01019616 -NCT01019798 -NCT01019850 -NCT01019863 -NCT01019876 -NCT01019889 -NCT01019928 -NCT01019941 -NCT01019980 -NCT01020006 -NCT01020071 -NCT01020097 -NCT01020136 -NCT01020175 -NCT01020279 -NCT01020292 -NCT01020305 -NCT01020331 -NCT01020370 -NCT01020448 -NCT01020513 -NCT01020539 -NCT01020630 -NCT01020682 -NCT01020721 -NCT01020734 -NCT01020786 -NCT01020812 -NCT01020864 -NCT01020916 -NCT01021059 -NCT01021072 -NCT01021137 -NCT01021150 -NCT01021267 -NCT01021280 -NCT01021358 -NCT01021423 -NCT01021579 -NCT01021748 -NCT01021800 -NCT01021852 -NCT01021891 -NCT01021904 -NCT01021982 -NCT01022021 -NCT01022099 -NCT01022138 -NCT01022255 -NCT01022268 -NCT01022333 -NCT01022346 -NCT01022385 -NCT01022398 -NCT01022476 -NCT01022541 -NCT01022619 -NCT01022632 -NCT01022645 -NCT01022671 -NCT01022827 -NCT01022853 -NCT01022905 -NCT01022918 -NCT01022996 -NCT01023061 -NCT01023113 -NCT01023191 -NCT01023204 -NCT01023217 -NCT01023308 -NCT01023347 -NCT01023386 -NCT01023412 -NCT01023477 -NCT01023490 -NCT01023516 -NCT01023633 -NCT01023867 -NCT01023880 -NCT01023958 -NCT01023971 -NCT01023984 -NCT01024010 -NCT01024062 -NCT01024088 -NCT01024101 -NCT01024205 -NCT01024231 -NCT01024270 -NCT01024387 -NCT01024413 -NCT01024504 -NCT01024582 -NCT01024712 -NCT01024829 -NCT01024907 -NCT01024920 -NCT01024946 -NCT01024959 -NCT01025076 -NCT01025089 -NCT01025128 -NCT01025154 -NCT01025206 -NCT01025284 -NCT01025349 -NCT01025453 -NCT01025505 -NCT01025518 -NCT01025570 -NCT01025583 -NCT01025622 -NCT01025635 -NCT01025778 -NCT01025882 -NCT01025960 -NCT01026012 -NCT01004484 -NCT01019109 -NCT01004497 -NCT01019122 -NCT01004510 -NCT01019161 -NCT01004601 -NCT01019174 -NCT01004718 -NCT01019187 -NCT01004731 -NCT01019213 -NCT01004744 -NCT01019226 -NCT01004822 -NCT01019239 -NCT01004835 -NCT01019278 -NCT01004861 -NCT01019317 -NCT01004874 -NCT01019343 -NCT01004887 -NCT01019382 -NCT01004965 -NCT01019434 -NCT01004978 -NCT01015261 -NCT01015300 -NCT01015339 -NCT01015352 -NCT01015378 -NCT01015417 -NCT01015430 -NCT01015443 -NCT01015521 -NCT01015534 -NCT01015560 -NCT01015625 -NCT01015664 -NCT01015677 -NCT01015690 -NCT01015742 -NCT01015755 -NCT01015820 -NCT01015833 -NCT01015898 -NCT01015911 -NCT01016002 -NCT01016015 -NCT01016054 -NCT01016093 -NCT01016106 -NCT01016327 -NCT01016353 -NCT01016366 -NCT01016418 -NCT01016483 -NCT01016548 -NCT01016561 -NCT01016574 -NCT01016600 -NCT01016639 -NCT01016652 -NCT01016665 -NCT01016678 -NCT01016691 -NCT01016730 -NCT01016743 -NCT01016769 -NCT01016782 -NCT01016795 -NCT01016860 -NCT01016886 -NCT01016964 -NCT01016977 -NCT01016990 -NCT01017120 -NCT01017133 -NCT01017146 -NCT01017172 -NCT01017185 -NCT01017198 -NCT01017250 -NCT01017354 -NCT01017497 -NCT01017510 -NCT01017549 -NCT01017601 -NCT01017640 -NCT01017653 -NCT01017679 -NCT01017731 -NCT01017809 -NCT01017822 -NCT01017874 -NCT01017939 -NCT01017952 -NCT01017965 -NCT01017978 -NCT01018069 -NCT01018108 -NCT01018147 -NCT01018160 -NCT01018173 -NCT01018251 -NCT01018329 -NCT01018381 -NCT01018485 -NCT01018511 -NCT01018563 -NCT01018680 -NCT01018706 -NCT01018745 -NCT01018758 -NCT01018784 -NCT01018836 -NCT01018901 -NCT01018966 -NCT01018979 -NCT01019070 -NCT01019083 -NCT01004991 -NCT01013883 -NCT01005017 -NCT01013909 -NCT01005043 -NCT01013948 -NCT01005095 -NCT01013961 -NCT01005147 -NCT01014013 -NCT01005199 -NCT01014026 -NCT01005277 -NCT01014039 -NCT01005303 -NCT01014130 -NCT01005329 -NCT01014156 -NCT01005355 -NCT01014169 -NCT01005381 -NCT01014208 -NCT01005433 -NCT01014221 -NCT01005472 -NCT01014312 -NCT01005563 -NCT01014351 -NCT01005589 -NCT01014390 -NCT01005641 -NCT01014429 -NCT01005680 -NCT01014507 -NCT01005693 -NCT01014520 -NCT01005745 -NCT01014546 -NCT01005758 -NCT01014559 -NCT01005797 -NCT01014598 -NCT01005849 -NCT01014624 -NCT01005875 -NCT01014715 -NCT01005914 -NCT01014767 -NCT01005979 -NCT01014819 -NCT01006044 -NCT01014871 -NCT01006226 -NCT01014897 -NCT01006252 -NCT01014936 -NCT01006265 -NCT01015118 -NCT01006330 -NCT01015131 -NCT01006343 -NCT01015196 -NCT01006356 -NCT01015222 -NCT01006369 -NCT01015248 -NCT01006395 -NCT01011751 -NCT01011777 -NCT01011803 -NCT01011816 -NCT01011842 -NCT01011894 -NCT01011920 -NCT01011933 -NCT01011946 -NCT01011972 -NCT01011998 -NCT01012037 -NCT01012102 -NCT01012141 -NCT01012154 -NCT01012258 -NCT01012271 -NCT01012297 -NCT01012336 -NCT01012349 -NCT01012362 -NCT01012401 -NCT01012427 -NCT01012440 -NCT01012492 -NCT01012609 -NCT01012739 -NCT01012804 -NCT01012817 -NCT01012882 -NCT01013168 -NCT01013207 -NCT01013285 -NCT01013324 -NCT01013337 -NCT01013441 -NCT01013480 -NCT01013493 -NCT01013506 -NCT01013597 -NCT01013623 -NCT01013636 -NCT01013649 -NCT01013714 -NCT01013740 -NCT01013779 -NCT01013792 -NCT01013805 -NCT01013831 -NCT01013844 -NCT01006408 -NCT01009463 -NCT01006447 -NCT01009450 -NCT01006564 -NCT01009502 -NCT01006577 -NCT01009515 -NCT01006785 -NCT01009593 -NCT01006941 -NCT01009723 -NCT01006980 -NCT01009736 -NCT01006993 -NCT01009775 -NCT01007032 -NCT01009788 -NCT01007162 -NCT01009801 -NCT01007214 -NCT01009840 -NCT01007240 -NCT01009866 -NCT01007266 -NCT01009918 -NCT01007292 -NCT01009931 -NCT01007318 -NCT01009970 -NCT01007331 -NCT01009983 -NCT01007448 -NCT01010061 -NCT01007474 -NCT01010074 -NCT01007526 -NCT01010113 -NCT01007552 -NCT01010126 -NCT01007565 -NCT01010152 -NCT01007656 -NCT01010165 -NCT01007695 -NCT01010217 -NCT01007942 -NCT01010243 -NCT01007968 -NCT01010295 -NCT01008007 -NCT01010308 -NCT01008150 -NCT01010321 -NCT01008163 -NCT01010334 -NCT01008358 -NCT01010373 -NCT01008397 -NCT01010451 -NCT01008462 -NCT01010568 -NCT01008475 -NCT01010672 -NCT01008488 -NCT01010711 -NCT01008501 -NCT01010802 -NCT01008514 -NCT01010841 -NCT01008527 -NCT01010854 -NCT01008566 -NCT01010880 -NCT01008657 -NCT01010945 -NCT01008696 -NCT01010958 -NCT01008774 -NCT01010984 -NCT01008787 -NCT01011010 -NCT01008865 -NCT01011075 -NCT01008904 -NCT01011231 -NCT01008917 -NCT01011257 -NCT01008930 -NCT01011270 -NCT01008969 -NCT01011283 -NCT01009008 -NCT01011322 -NCT01009073 -NCT01011426 -NCT01009099 -NCT01011439 -NCT01009177 -NCT01011478 -NCT01009190 -NCT01011517 -NCT01009203 -NCT01011530 -NCT01009255 -NCT01011543 -NCT01009294 -NCT01011595 -NCT01009346 -NCT01011647 -NCT01009437 -NCT01063478 -NCT01029301 -NCT01031654 -NCT01029340 -NCT01031641 -NCT01029366 -NCT01031680 -NCT01029392 -NCT01031719 -NCT01029418 -NCT01031732 -NCT01029444 -NCT01031784 -NCT01029509 -NCT01031875 -NCT01029561 -NCT01038609 -NCT01029587 -NCT01038635 -NCT01029626 -NCT01038661 -NCT01029639 -NCT01038713 -NCT01029652 -NCT01038752 -NCT01029678 -NCT01038778 -NCT01029691 -NCT01038804 -NCT01029704 -NCT01038856 -NCT01029730 -NCT01038869 -NCT01029834 -NCT01038908 -NCT01029860 -NCT01038960 -NCT01029873 -NCT01039025 -NCT01029912 -NCT01039038 -NCT01029925 -NCT01039103 -NCT01029990 -NCT01039155 -NCT01030042 -NCT01039181 -NCT01030055 -NCT01039207 -NCT01030081 -NCT01039298 -NCT01030107 -NCT01039350 -NCT01030211 -NCT01039363 -NCT01030263 -NCT01039519 -NCT01030380 -NCT01039545 -NCT01030393 -NCT01039675 -NCT01030445 -NCT01039688 -NCT01030536 -NCT01039844 -NCT01030614 -NCT01039909 -NCT01030653 -NCT01039948 -NCT01030718 -NCT01062334 -NCT01030757 -NCT01062373 -NCT01030783 -NCT01062399 -NCT01030861 -NCT01062425 -NCT01030887 -NCT01062451 -NCT01030900 -NCT01062490 -NCT01031030 -NCT01062568 -NCT01031043 -NCT01062620 -NCT01031121 -NCT01062659 -NCT01031212 -NCT01062789 -NCT01031225 -NCT01062893 -NCT01031238 -NCT01062919 -NCT01031342 -NCT01062945 -NCT01031368 -NCT01063075 -NCT01031381 -NCT01063114 -NCT01031407 -NCT01063179 -NCT01031420 -NCT01063192 -NCT01031446 -NCT01063205 -NCT01031498 -NCT01063257 -NCT01031576 -NCT01063283 -NCT01031589 -NCT01063387 -NCT01031628 -NCT01063439 -NCT01031901 -NCT01034683 -NCT01031953 -NCT01034670 -NCT01031992 -NCT01034748 -NCT01032031 -NCT01034787 -NCT01032044 -NCT01034878 -NCT01032057 -NCT01034995 -NCT01032122 -NCT01035099 -NCT01032148 -NCT01035112 -NCT01032200 -NCT01035177 -NCT01032213 -NCT01035216 -NCT01032252 -NCT01035229 -NCT01032278 -NCT01035268 -NCT01032291 -NCT01035385 -NCT01032343 -NCT01035437 -NCT01032434 -NCT01035463 -NCT01032512 -NCT01035502 -NCT01032590 -NCT01035567 -NCT01032603 -NCT01035658 -NCT01032681 -NCT01035775 -NCT01032694 -NCT01035983 -NCT01032746 -NCT01036009 -NCT01032850 -NCT01036087 -NCT01032928 -NCT01036113 -NCT01032967 -NCT01036230 -NCT01033019 -NCT01036321 -NCT01033032 -NCT01036399 -NCT01033123 -NCT01036412 -NCT01033162 -NCT01036594 -NCT01033175 -NCT01036841 -NCT01033227 -NCT01037049 -NCT01033240 -NCT01037127 -NCT01033266 -NCT01037309 -NCT01033292 -NCT01037335 -NCT01033578 -NCT01037400 -NCT01033643 -NCT01037452 -NCT01033773 -NCT01037478 -NCT01033838 -NCT01037517 -NCT01033903 -NCT01037530 -NCT01033916 -NCT01037556 -NCT01034046 -NCT01037764 -NCT01034163 -NCT01037790 -NCT01034189 -NCT01037933 -NCT01034215 -NCT01037998 -NCT01034280 -NCT01038024 -NCT01034306 -NCT01038037 -NCT01034332 -NCT01038154 -NCT01034371 -NCT01038219 -NCT01034384 -NCT01038245 -NCT01034397 -NCT01038258 -NCT01034410 -NCT01038271 -NCT01034514 -NCT01038388 -NCT01034553 -NCT01038427 -NCT01034566 -NCT01038492 -NCT01034592 -NCT01038518 -NCT01034631 -NCT01038544 -NCT01034657 -NCT01062308 -NCT01040000 -NCT01061645 -NCT01040026 -NCT01061749 -NCT01040039 -NCT01061788 -NCT01040052 -NCT01061801 -NCT01040065 -NCT01061840 -NCT01040286 -NCT01061918 -NCT01040299 -NCT01061957 -NCT01040338 -NCT01062087 -NCT01040377 -NCT01062100 -NCT01040416 -NCT01062126 -NCT01040455 -NCT01062152 -NCT01040481 -NCT01062178 -NCT01040533 -NCT01062230 -NCT01040559 -NCT01062256 -NCT01040598 -NCT01056692 -NCT01056718 -NCT01056757 -NCT01056796 -NCT01056809 -NCT01056913 -NCT01057017 -NCT01057069 -NCT01057095 -NCT01057121 -NCT01057173 -NCT01057199 -NCT01057212 -NCT01057225 -NCT01057264 -NCT01057277 -NCT01057342 -NCT01057355 -NCT01057589 -NCT01057641 -NCT01057732 -NCT01057771 -NCT01057810 -NCT01057836 -NCT01057953 -NCT01058044 -NCT01058070 -NCT01058161 -NCT01058239 -NCT01058330 -NCT01058369 -NCT01058408 -NCT01058434 -NCT01058460 -NCT01058616 -NCT01058629 -NCT01058655 -NCT01058681 -NCT01058733 -NCT01058746 -NCT01058759 -NCT01058785 -NCT01058824 -NCT01058850 -NCT01058863 -NCT01058876 -NCT01058902 -NCT01058941 -NCT01059071 -NCT01059097 -NCT01059123 -NCT01059188 -NCT01059227 -NCT01059279 -NCT01059305 -NCT01059318 -NCT01059357 -NCT01059396 -NCT01059422 -NCT01059526 -NCT01059552 -NCT01059630 -NCT01059643 -NCT01059656 -NCT01059682 -NCT01059708 -NCT01059734 -NCT01059786 -NCT01059968 -NCT01060007 -NCT01060033 -NCT01060046 -NCT01060124 -NCT01060137 -NCT01060215 -NCT01060228 -NCT01060293 -NCT01060345 -NCT01060384 -NCT01060423 -NCT01060436 -NCT01060501 -NCT01060514 -NCT01060722 -NCT01060761 -NCT01060956 -NCT01061268 -NCT01061281 -NCT01061294 -NCT01061411 -NCT01061476 -NCT01061515 -NCT01061606 -NCT01040611 -NCT01056367 -NCT01040624 -NCT01056406 -NCT01040650 -NCT01056419 -NCT01040663 -NCT01056445 -NCT01040780 -NCT01056510 -NCT01040832 -NCT01056523 -NCT01040845 -NCT01056601 -NCT01040871 -NCT01056614 -NCT01040884 -NCT01046552 -NCT01046591 -NCT01046643 -NCT01046656 -NCT01046734 -NCT01046812 -NCT01046825 -NCT01046838 -NCT01046864 -NCT01046877 -NCT01046916 -NCT01046929 -NCT01046981 -NCT01047007 -NCT01047059 -NCT01047085 -NCT01047111 -NCT01047163 -NCT01047293 -NCT01047332 -NCT01047345 -NCT01047358 -NCT01047397 -NCT01047462 -NCT01047475 -NCT01047501 -NCT01047553 -NCT01047683 -NCT01047709 -NCT01047761 -NCT01047774 -NCT01047787 -NCT01047800 -NCT01047826 -NCT01047878 -NCT01047891 -NCT01047930 -NCT01047956 -NCT01047969 -NCT01048008 -NCT01048021 -NCT01048034 -NCT01048086 -NCT01048099 -NCT01048112 -NCT01048151 -NCT01048177 -NCT01048216 -NCT01048320 -NCT01048385 -NCT01048450 -NCT01048463 -NCT01048502 -NCT01048528 -NCT01048541 -NCT01048554 -NCT01048580 -NCT01048619 -NCT01048632 -NCT01048645 -NCT01048684 -NCT01048697 -NCT01048723 -NCT01048749 -NCT01048762 -NCT01048788 -NCT01048827 -NCT01048853 -NCT01048892 -NCT01048931 -NCT01048970 -NCT01048983 -NCT01049061 -NCT01049074 -NCT01054482 -NCT01054599 -NCT01054625 -NCT01054690 -NCT01054781 -NCT01054911 -NCT01054937 -NCT01055028 -NCT01055041 -NCT01055067 -NCT01055197 -NCT01055249 -NCT01055301 -NCT01055314 -NCT01055405 -NCT01055483 -NCT01055496 -NCT01055522 -NCT01055548 -NCT01055678 -NCT01055743 -NCT01055795 -NCT01055821 -NCT01056003 -NCT01056029 -NCT01056055 -NCT01056107 -NCT01056172 -NCT01056198 -NCT01056276 -NCT01056315 -NCT01056341 -NCT01056679 -NCT01041001 -NCT01043913 -NCT01041027 -NCT01043874 -NCT01041040 -NCT01043978 -NCT01041079 -NCT01044004 -NCT01041105 -NCT01044043 -NCT01041222 -NCT01044069 -NCT01041235 -NCT01044173 -NCT01041261 -NCT01044225 -NCT01041326 -NCT01044264 -NCT01041404 -NCT01044290 -NCT01041430 -NCT01044420 -NCT01041443 -NCT01044433 -NCT01041482 -NCT01044485 -NCT01041508 -NCT01044511 -NCT01041612 -NCT01044628 -NCT01041625 -NCT01044732 -NCT01041638 -NCT01044745 -NCT01041755 -NCT01044797 -NCT01041781 -NCT01044953 -NCT01041833 -NCT01044966 -NCT01041950 -NCT01044992 -NCT01042028 -NCT01045057 -NCT01042041 -NCT01045109 -NCT01042171 -NCT01045148 -NCT01042288 -NCT01045187 -NCT01042366 -NCT01045226 -NCT01042379 -NCT01045304 -NCT01042522 -NCT01045382 -NCT01042535 -NCT01045421 -NCT01042548 -NCT01045460 -NCT01042613 -NCT01045499 -NCT01042691 -NCT01045525 -NCT01042704 -NCT01045538 -NCT01042717 -NCT01045551 -NCT01042743 -NCT01045616 -NCT01042782 -NCT01045655 -NCT01042795 -NCT01045668 -NCT01042860 -NCT01045681 -NCT01042912 -NCT01045694 -NCT01042925 -NCT01045759 -NCT01042938 -NCT01045824 -NCT01042951 -NCT01045876 -NCT01043003 -NCT01045889 -NCT01043016 -NCT01045902 -NCT01043068 -NCT01045915 -NCT01043172 -NCT01045928 -NCT01043198 -NCT01045941 -NCT01043367 -NCT01046006 -NCT01043484 -NCT01046032 -NCT01043536 -NCT01046123 -NCT01043588 -NCT01046266 -NCT01043601 -NCT01046279 -NCT01043627 -NCT01046331 -NCT01043822 -NCT01046383 -NCT01043835 -NCT01046487 -NCT01043848 -NCT01054443 -NCT01049100 -NCT01051869 -NCT01049113 -NCT01051817 -NCT01049191 -NCT01051895 -NCT01049230 -NCT01051934 -NCT01049295 -NCT01052051 -NCT01049412 -NCT01052142 -NCT01049425 -NCT01052207 -NCT01049464 -NCT01052272 -NCT01049620 -NCT01052285 -NCT01049672 -NCT01052311 -NCT01049750 -NCT01052363 -NCT01049776 -NCT01052428 -NCT01049841 -NCT01052532 -NCT01049854 -NCT01052597 -NCT01049880 -NCT01052623 -NCT01049893 -NCT01052636 -NCT01049945 -NCT01052766 -NCT01050036 -NCT01052792 -NCT01050075 -NCT01052870 -NCT01050088 -NCT01052922 -NCT01050114 -NCT01053013 -NCT01050283 -NCT01053026 -NCT01050361 -NCT01053065 -NCT01050426 -NCT01053156 -NCT01050439 -NCT01053182 -NCT01050465 -NCT01053286 -NCT01050478 -NCT01053312 -NCT01050530 -NCT01053364 -NCT01050582 -NCT01053390 -NCT01050621 -NCT01053416 -NCT01050764 -NCT01053442 -NCT01050790 -NCT01053468 -NCT01050842 -NCT01053481 -NCT01050946 -NCT01053494 -NCT01050985 -NCT01053533 -NCT01050998 -NCT01053546 -NCT01051037 -NCT01053572 -NCT01051076 -NCT01053598 -NCT01051115 -NCT01053624 -NCT01051154 -NCT01053754 -NCT01051167 -NCT01053806 -NCT01051284 -NCT01053819 -NCT01051297 -NCT01053923 -NCT01051310 -NCT01053949 -NCT01051362 -NCT01054001 -NCT01051401 -NCT01054079 -NCT01051427 -NCT01054105 -NCT01051479 -NCT01054131 -NCT01051544 -NCT01054144 -NCT01051557 -NCT01054157 -NCT01051570 -NCT01054196 -NCT01051596 -NCT01054274 -NCT01051635 -NCT01054313 -NCT01051726 -NCT01054378 -NCT01051765 -NCT01054417 -NCT01051791 -NCT01091883 -NCT01075100 -NCT01091064 -NCT01075113 -NCT01091077 -NCT01075269 -NCT01091103 -NCT01075282 -NCT01091142 -NCT01075295 -NCT01091168 -NCT01075308 -NCT01091207 -NCT01075321 -NCT01091259 -NCT01075334 -NCT01091376 -NCT01075399 -NCT01091428 -NCT01075412 -NCT01091454 -NCT01075425 -NCT01091493 -NCT01075438 -NCT01091545 -NCT01075464 -NCT01091558 -NCT01075555 -NCT01091584 -NCT01075633 -NCT01091597 -NCT01075672 -NCT01091636 -NCT01075711 -NCT01091662 -NCT01075802 -NCT01091714 -NCT01075815 -NCT01091792 -NCT01075828 -NCT01091805 -NCT01075841 -NCT01091831 -NCT01075880 -NCT01081899 -NCT01081912 -NCT01081951 -NCT01081964 -NCT01081977 -NCT01082029 -NCT01082068 -NCT01082094 -NCT01082107 -NCT01082198 -NCT01087697 -NCT01087892 -NCT01087957 -NCT01087970 -NCT01087983 -NCT01088035 -NCT01088048 -NCT01088061 -NCT01088204 -NCT01088230 -NCT01088308 -NCT01088347 -NCT01088373 -NCT01088412 -NCT01088438 -NCT01088464 -NCT01088529 -NCT01088581 -NCT01088620 -NCT01088737 -NCT01088750 -NCT01088763 -NCT01088789 -NCT01088802 -NCT01088815 -NCT01088893 -NCT01088906 -NCT01088971 -NCT01088984 -NCT01089049 -NCT01089088 -NCT01089101 -NCT01089140 -NCT01089218 -NCT01089335 -NCT01089374 -NCT01089387 -NCT01089491 -NCT01089595 -NCT01089686 -NCT01089699 -NCT01089764 -NCT01089816 -NCT01089881 -NCT01089933 -NCT01090011 -NCT01090050 -NCT01090089 -NCT01090128 -NCT01090167 -NCT01090193 -NCT01090219 -NCT01090284 -NCT01090375 -NCT01090414 -NCT01090466 -NCT01090505 -NCT01090596 -NCT01090674 -NCT01090765 -NCT01090830 -NCT01090882 -NCT01090921 -NCT01090934 -NCT01090960 -NCT01090973 -NCT01091051 -NCT01076010 -NCT01079078 -NCT01076179 -NCT01079013 -NCT01076231 -NCT01079130 -NCT01076270 -NCT01079143 -NCT01076335 -NCT01079286 -NCT01076387 -NCT01079481 -NCT01076400 -NCT01079494 -NCT01076426 -NCT01079520 -NCT01076439 -NCT01079533 -NCT01076504 -NCT01079546 -NCT01076530 -NCT01079559 -NCT01076543 -NCT01079572 -NCT01076556 -NCT01079650 -NCT01076699 -NCT01079676 -NCT01076712 -NCT01079741 -NCT01076842 -NCT01079767 -NCT01077050 -NCT01079780 -NCT01077076 -NCT01079793 -NCT01077115 -NCT01079832 -NCT01077154 -NCT01079845 -NCT01077193 -NCT01079871 -NCT01077245 -NCT01079936 -NCT01077336 -NCT01079949 -NCT01077401 -NCT01080131 -NCT01077427 -NCT01080196 -NCT01077453 -NCT01080248 -NCT01077518 -NCT01080352 -NCT01077544 -NCT01080391 -NCT01077583 -NCT01080404 -NCT01077713 -NCT01080456 -NCT01077726 -NCT01080469 -NCT01077739 -NCT01080482 -NCT01077856 -NCT01080534 -NCT01077895 -NCT01080560 -NCT01077921 -NCT01080586 -NCT01077986 -NCT01080690 -NCT01077999 -NCT01080703 -NCT01078103 -NCT01080781 -NCT01078142 -NCT01080807 -NCT01078246 -NCT01080924 -NCT01078298 -NCT01080950 -NCT01078324 -NCT01081015 -NCT01078389 -NCT01081041 -NCT01078415 -NCT01081093 -NCT01078441 -NCT01081106 -NCT01078454 -NCT01081223 -NCT01078467 -NCT01081262 -NCT01078545 -NCT01081288 -NCT01078636 -NCT01081301 -NCT01078649 -NCT01081431 -NCT01078857 -NCT01081600 -NCT01078883 -NCT01081704 -NCT01078922 -NCT01081756 -NCT01078961 -NCT01081782 -NCT01078974 -NCT01081808 -NCT01079000 -NCT01087658 -NCT01082211 -NCT01085253 -NCT01082224 -NCT01085214 -NCT01082302 -NCT01085318 -NCT01082315 -NCT01085331 -NCT01082354 -NCT01085409 -NCT01082419 -NCT01085422 -NCT01082510 -NCT01085448 -NCT01082549 -NCT01085474 -NCT01082627 -NCT01085487 -NCT01082770 -NCT01085500 -NCT01082809 -NCT01085513 -NCT01082887 -NCT01085565 -NCT01082900 -NCT01085591 -NCT01082913 -NCT01085604 -NCT01082926 -NCT01085617 -NCT01082939 -NCT01085630 -NCT01082965 -NCT01085656 -NCT01082978 -NCT01085721 -NCT01083199 -NCT01085799 -NCT01083316 -NCT01085825 -NCT01083342 -NCT01085838 -NCT01083368 -NCT01085864 -NCT01083485 -NCT01085903 -NCT01083537 -NCT01086007 -NCT01083550 -NCT01086046 -NCT01083589 -NCT01086254 -NCT01083602 -NCT01086267 -NCT01083615 -NCT01086332 -NCT01083641 -NCT01086345 -NCT01083667 -NCT01086384 -NCT01083693 -NCT01086488 -NCT01083706 -NCT01086514 -NCT01083719 -NCT01086540 -NCT01083745 -NCT01086605 -NCT01083771 -NCT01086618 -NCT01083888 -NCT01086683 -NCT01083966 -NCT01086696 -NCT01083979 -NCT01086748 -NCT01084057 -NCT01086826 -NCT01084083 -NCT01086878 -NCT01084239 -NCT01086956 -NCT01084330 -NCT01086982 -NCT01084343 -NCT01087008 -NCT01084369 -NCT01087021 -NCT01084525 -NCT01087034 -NCT01084655 -NCT01087151 -NCT01084746 -NCT01087203 -NCT01084759 -NCT01087268 -NCT01084837 -NCT01087294 -NCT01084863 -NCT01087320 -NCT01084876 -NCT01087333 -NCT01084941 -NCT01087424 -NCT01085058 -NCT01087554 -NCT01085110 -NCT01087580 -NCT01085136 -NCT01087619 -NCT01085201 -NCT01101594 -NCT01096810 -NCT01099423 -NCT01096914 -NCT01099358 -NCT01096927 -NCT01099436 -NCT01096992 -NCT01099449 -NCT01097018 -NCT01099514 -NCT01097057 -NCT01099527 -NCT01097083 -NCT01099540 -NCT01097109 -NCT01099592 -NCT01097239 -NCT01099618 -NCT01097252 -NCT01099631 -NCT01097265 -NCT01099644 -NCT01097278 -NCT01099657 -NCT01097304 -NCT01099696 -NCT01097317 -NCT01099709 -NCT01097330 -NCT01099761 -NCT01097356 -NCT01099826 -NCT01097369 -NCT01099852 -NCT01097460 -NCT01099917 -NCT01097512 -NCT01100021 -NCT01097525 -NCT01100073 -NCT01097616 -NCT01100086 -NCT01097629 -NCT01100177 -NCT01097642 -NCT01100242 -NCT01097707 -NCT01100320 -NCT01097746 -NCT01100359 -NCT01097798 -NCT01100372 -NCT01097811 -NCT01100398 -NCT01097993 -NCT01100424 -NCT01098084 -NCT01100463 -NCT01098162 -NCT01100489 -NCT01098188 -NCT01100528 -NCT01098201 -NCT01100619 -NCT01098240 -NCT01100632 -NCT01098266 -NCT01100645 -NCT01098331 -NCT01100658 -NCT01098344 -NCT01100684 -NCT01098383 -NCT01100801 -NCT01098422 -NCT01100866 -NCT01098643 -NCT01100931 -NCT01098656 -NCT01100944 -NCT01098708 -NCT01101035 -NCT01098747 -NCT01101048 -NCT01098760 -NCT01101087 -NCT01098838 -NCT01101113 -NCT01098890 -NCT01101165 -NCT01098942 -NCT01101204 -NCT01098955 -NCT01101282 -NCT01098981 -NCT01101308 -NCT01099033 -NCT01101321 -NCT01099046 -NCT01101334 -NCT01099085 -NCT01101412 -NCT01099124 -NCT01101438 -NCT01099163 -NCT01101451 -NCT01099202 -NCT01101503 -NCT01099228 -NCT01101581 -NCT01099241 -NCT01108588 -NCT01102608 -NCT01105858 -NCT01102621 -NCT01105702 -NCT01102907 -NCT01105923 -NCT01102985 -NCT01105988 -NCT01103024 -NCT01106040 -NCT01103037 -NCT01106235 -NCT01103206 -NCT01106248 -NCT01103232 -NCT01106261 -NCT01103284 -NCT01106313 -NCT01103310 -NCT01106352 -NCT01103323 -NCT01106443 -NCT01103375 -NCT01106508 -NCT01103388 -NCT01106521 -NCT01103479 -NCT01106599 -NCT01103492 -NCT01106820 -NCT01103557 -NCT01106859 -NCT01103635 -NCT01106872 -NCT01104051 -NCT01106885 -NCT01104116 -NCT01106898 -NCT01104155 -NCT01106924 -NCT01104181 -NCT01106950 -NCT01104259 -NCT01106976 -NCT01104298 -NCT01107067 -NCT01104350 -NCT01107093 -NCT01104389 -NCT01107119 -NCT01104428 -NCT01107197 -NCT01104571 -NCT01107418 -NCT01104584 -NCT01107444 -NCT01104610 -NCT01107509 -NCT01104649 -NCT01107522 -NCT01104675 -NCT01107626 -NCT01104727 -NCT01107639 -NCT01104805 -NCT01107665 -NCT01104922 -NCT01107743 -NCT01104935 -NCT01107756 -NCT01104987 -NCT01107769 -NCT01105013 -NCT01107860 -NCT01105039 -NCT01108003 -NCT01105052 -NCT01108016 -NCT01105065 -NCT01108029 -NCT01105130 -NCT01108042 -NCT01105156 -NCT01108055 -NCT01105169 -NCT01108068 -NCT01105221 -NCT01108094 -NCT01105247 -NCT01108107 -NCT01105312 -NCT01108185 -NCT01105338 -NCT01108211 -NCT01105364 -NCT01108224 -NCT01105377 -NCT01108315 -NCT01105390 -NCT01108341 -NCT01105403 -NCT01108380 -NCT01105520 -NCT01108406 -NCT01105533 -NCT01108445 -NCT01105546 -NCT01108458 -NCT01105650 -NCT01108484 -NCT01105676 -NCT01134536 -NCT01129375 -NCT01132170 -NCT01129453 -NCT01132144 -NCT01129492 -NCT01132378 -NCT01129518 -NCT01132404 -NCT01129544 -NCT01132469 -NCT01129570 -NCT01132534 -NCT01129622 -NCT01132547 -NCT01129700 -NCT01132573 -NCT01129726 -NCT01132586 -NCT01129739 -NCT01132599 -NCT01129765 -NCT01132625 -NCT01129778 -NCT01132664 -NCT01129934 -NCT01132677 -NCT01130012 -NCT01132703 -NCT01130038 -NCT01132755 -NCT01130077 -NCT01132807 -NCT01130142 -NCT01132820 -NCT01130181 -NCT01132846 -NCT01130194 -NCT01132859 -NCT01130233 -NCT01132911 -NCT01130311 -NCT01132989 -NCT01130337 -NCT01133132 -NCT01130402 -NCT01133158 -NCT01130506 -NCT01133275 -NCT01130519 -NCT01133327 -NCT01130597 -NCT01133340 -NCT01130623 -NCT01133509 -NCT01130662 -NCT01133522 -NCT01130688 -NCT01133535 -NCT01130701 -NCT01133548 -NCT01130714 -NCT01133665 -NCT01130753 -NCT01133678 -NCT01130766 -NCT01133704 -NCT01130779 -NCT01133743 -NCT01130805 -NCT01133756 -NCT01130857 -NCT01133795 -NCT01131039 -NCT01133834 -NCT01131052 -NCT01133873 -NCT01131078 -NCT01133886 -NCT01131104 -NCT01133912 -NCT01131117 -NCT01133951 -NCT01131169 -NCT01133977 -NCT01131195 -NCT01133990 -NCT01131234 -NCT01134016 -NCT01131247 -NCT01134120 -NCT01131312 -NCT01134146 -NCT01131325 -NCT01134198 -NCT01131364 -NCT01134237 -NCT01131403 -NCT01134250 -NCT01131429 -NCT01134276 -NCT01131468 -NCT01134341 -NCT01131494 -NCT01134432 -NCT01131689 -NCT01134484 -NCT01132014 -NCT01134497 -NCT01132092 -NCT01134523 -NCT01132105 -NCT01140945 -NCT01134575 -NCT01137994 -NCT01134601 -NCT01137968 -NCT01134614 -NCT01138007 -NCT01134627 -NCT01138033 -NCT01134692 -NCT01138046 -NCT01134796 -NCT01138085 -NCT01134848 -NCT01138137 -NCT01134861 -NCT01138163 -NCT01134991 -NCT01138241 -NCT01135004 -NCT01138384 -NCT01135030 -NCT01138410 -NCT01135056 -NCT01138423 -NCT01135069 -NCT01138449 -NCT01135199 -NCT01138501 -NCT01135329 -NCT01138553 -NCT01135342 -NCT01138566 -NCT01135368 -NCT01138579 -NCT01135498 -NCT01138592 -NCT01135537 -NCT01138644 -NCT01135563 -NCT01138722 -NCT01135615 -NCT01138748 -NCT01135628 -NCT01138761 -NCT01135836 -NCT01138904 -NCT01135849 -NCT01139138 -NCT01135979 -NCT01139151 -NCT01136005 -NCT01139229 -NCT01136031 -NCT01139242 -NCT01136083 -NCT01139294 -NCT01136226 -NCT01139346 -NCT01136291 -NCT01139359 -NCT01136304 -NCT01139437 -NCT01136369 -NCT01139580 -NCT01136421 -NCT01139710 -NCT01136460 -NCT01139723 -NCT01136499 -NCT01139736 -NCT01136577 -NCT01139775 -NCT01136733 -NCT01139788 -NCT01136967 -NCT01139970 -NCT01136980 -NCT01140074 -NCT01137006 -NCT01140178 -NCT01137071 -NCT01140217 -NCT01137084 -NCT01140282 -NCT01137097 -NCT01140347 -NCT01137123 -NCT01140360 -NCT01137149 -NCT01140373 -NCT01137162 -NCT01140516 -NCT01137552 -NCT01140568 -NCT01137591 -NCT01140581 -NCT01137604 -NCT01140607 -NCT01137643 -NCT01140685 -NCT01137682 -NCT01140737 -NCT01137747 -NCT01140789 -NCT01137825 -NCT01140841 -NCT01137916 -NCT01140867 -NCT01137929 -NCT01140906 -NCT01137955 -NCT01146704 -NCT01141023 -NCT01143974 -NCT01141114 -NCT01143818 -NCT01141244 -NCT01144039 -NCT01141257 -NCT01144052 -NCT01141309 -NCT01144078 -NCT01141465 -NCT01144169 -NCT01141478 -NCT01144195 -NCT01141491 -NCT01144247 -NCT01141543 -NCT01144260 -NCT01141569 -NCT01144325 -NCT01141712 -NCT01144351 -NCT01141725 -NCT01144364 -NCT01141751 -NCT01144377 -NCT01141816 -NCT01144403 -NCT01141842 -NCT01144442 -NCT01141868 -NCT01144455 -NCT01141881 -NCT01144650 -NCT01141933 -NCT01144702 -NCT01141946 -NCT01144897 -NCT01142011 -NCT01144910 -NCT01142037 -NCT01144936 -NCT01142089 -NCT01144988 -NCT01142102 -NCT01145040 -NCT01142141 -NCT01145066 -NCT01142219 -NCT01145170 -NCT01142232 -NCT01145209 -NCT01142245 -NCT01145248 -NCT01142336 -NCT01145274 -NCT01142388 -NCT01145300 -NCT01142401 -NCT01145404 -NCT01142414 -NCT01145430 -NCT01142466 -NCT01145456 -NCT01142479 -NCT01145482 -NCT01142505 -NCT01145495 -NCT01142531 -NCT01145508 -NCT01142661 -NCT01145612 -NCT01142713 -NCT01145716 -NCT01142778 -NCT01145781 -NCT01142973 -NCT01145833 -NCT01143012 -NCT01145846 -NCT01143142 -NCT01145885 -NCT01143285 -NCT01145924 -NCT01143311 -NCT01145989 -NCT01143363 -NCT01146002 -NCT01143389 -NCT01146054 -NCT01143402 -NCT01146132 -NCT01143428 -NCT01146171 -NCT01143441 -NCT01146223 -NCT01143480 -NCT01146262 -NCT01143493 -NCT01146340 -NCT01143545 -NCT01146483 -NCT01143558 -NCT01146535 -NCT01143584 -NCT01146587 -NCT01143740 -NCT01146613 -NCT01143753 -NCT01146678 -NCT01143779 -NCT01151761 -NCT01146756 -NCT01149434 -NCT01146769 -NCT01149421 -NCT01146782 -NCT01149447 -NCT01146795 -NCT01149577 -NCT01146834 -NCT01149629 -NCT01146977 -NCT01149642 -NCT01147016 -NCT01149668 -NCT01147029 -NCT01149694 -NCT01147042 -NCT01149707 -NCT01147107 -NCT01149720 -NCT01147211 -NCT01149733 -NCT01147263 -NCT01149746 -NCT01147328 -NCT01149798 -NCT01147367 -NCT01149811 -NCT01147380 -NCT01149850 -NCT01147393 -NCT01149876 -NCT01147432 -NCT01149902 -NCT01147445 -NCT01149915 -NCT01147458 -NCT01150006 -NCT01147484 -NCT01150045 -NCT01147536 -NCT01150058 -NCT01147562 -NCT01150071 -NCT01147601 -NCT01150084 -NCT01147822 -NCT01150149 -NCT01147926 -NCT01150162 -NCT01147939 -NCT01150175 -NCT01147965 -NCT01150266 -NCT01147991 -NCT01150292 -NCT01148056 -NCT01150305 -NCT01148069 -NCT01150318 -NCT01148108 -NCT01150513 -NCT01148121 -NCT01150539 -NCT01148173 -NCT01150591 -NCT01148199 -NCT01150630 -NCT01148420 -NCT01150721 -NCT01148433 -NCT01150786 -NCT01148446 -NCT01150877 -NCT01148472 -NCT01150916 -NCT01148615 -NCT01151046 -NCT01148628 -NCT01151111 -NCT01148654 -NCT01151124 -NCT01148758 -NCT01151150 -NCT01148849 -NCT01151163 -NCT01148888 -NCT01151202 -NCT01148966 -NCT01151215 -NCT01148979 -NCT01151280 -NCT01149083 -NCT01151384 -NCT01149109 -NCT01151449 -NCT01149122 -NCT01151488 -NCT01149161 -NCT01151566 -NCT01149174 -NCT01151605 -NCT01149304 -NCT01151631 -NCT01149343 -NCT01151670 -NCT01149356 -NCT01151709 -NCT01149395 -NCT01151748 -NCT01149408 -NCT01157728 -NCT01151787 -NCT01155115 -NCT01151839 -NCT01155102 -NCT01151852 -NCT01155180 -NCT01152073 -NCT01155232 -NCT01152203 -NCT01155245 -NCT01152346 -NCT01155258 -NCT01152398 -NCT01155271 -NCT01152437 -NCT01155323 -NCT01152476 -NCT01155440 -NCT01152580 -NCT01155453 -NCT01152606 -NCT01155492 -NCT01152645 -NCT01155505 -NCT01152710 -NCT01155518 -NCT01152775 -NCT01155557 -NCT01152788 -NCT01155583 -NCT01152801 -NCT01155609 -NCT01152827 -NCT01155713 -NCT01152840 -NCT01155791 -NCT01152853 -NCT01155817 -NCT01152892 -NCT01156142 -NCT01152970 -NCT01156259 -NCT01153035 -NCT01156311 -NCT01153113 -NCT01156350 -NCT01153126 -NCT01156441 -NCT01153204 -NCT01156454 -NCT01153243 -NCT01156519 -NCT01153256 -NCT01156545 -NCT01153373 -NCT01156558 -NCT01153386 -NCT01156584 -NCT01153425 -NCT01156610 -NCT01153568 -NCT01156623 -NCT01153672 -NCT01156636 -NCT01153685 -NCT01156675 -NCT01153750 -NCT01156688 -NCT01153763 -NCT01156753 -NCT01153971 -NCT01156818 -NCT01153984 -NCT01156844 -NCT01154140 -NCT01156870 -NCT01154166 -NCT01156883 -NCT01154270 -NCT01156935 -NCT01154335 -NCT01156961 -NCT01154361 -NCT01156987 -NCT01154413 -NCT01157013 -NCT01154426 -NCT01157026 -NCT01154439 -NCT01157039 -NCT01154452 -NCT01157052 -NCT01154517 -NCT01157091 -NCT01154712 -NCT01157130 -NCT01154764 -NCT01157156 -NCT01154790 -NCT01157325 -NCT01154816 -NCT01157338 -NCT01154842 -NCT01157390 -NCT01154920 -NCT01157572 -NCT01154972 -NCT01157598 -NCT01154998 -NCT01157676 -NCT01155089 -NCT01163032 -NCT01157806 -NCT01160107 -NCT01157819 -NCT01159964 -NCT01157832 -NCT01160146 -NCT01157923 -NCT01160211 -NCT01157962 -NCT01160263 -NCT01157975 -NCT01160302 -NCT01157988 -NCT01160315 -NCT01158053 -NCT01160328 -NCT01158079 -NCT01160341 -NCT01158092 -NCT01160354 -NCT01158118 -NCT01160367 -NCT01158144 -NCT01160380 -NCT01158157 -NCT01160419 -NCT01158170 -NCT01160445 -NCT01158222 -NCT01160458 -NCT01158248 -NCT01160484 -NCT01158274 -NCT01160536 -NCT01158287 -NCT01160601 -NCT01158300 -NCT01160627 -NCT01158313 -NCT01160718 -NCT01158326 -NCT01160731 -NCT01158352 -NCT01160744 -NCT01158378 -NCT01160822 -NCT01158404 -NCT01160848 -NCT01158456 -NCT01160926 -NCT01158495 -NCT01161108 -NCT01158508 -NCT01161186 -NCT01158521 -NCT01161316 -NCT01158534 -NCT01161368 -NCT01158573 -NCT01161498 -NCT01158625 -NCT01161511 -NCT01158651 -NCT01161550 -NCT01158742 -NCT01161563 -NCT01158794 -NCT01161641 -NCT01158807 -NCT01161823 -NCT01158885 -NCT01161836 -NCT01159028 -NCT01161888 -NCT01159067 -NCT01161966 -NCT01159093 -NCT01161979 -NCT01159119 -NCT01162018 -NCT01159171 -NCT01162031 -NCT01159236 -NCT01162057 -NCT01159288 -NCT01162135 -NCT01159301 -NCT01162200 -NCT01159327 -NCT01162278 -NCT01159405 -NCT01162304 -NCT01159418 -NCT01162395 -NCT01159431 -NCT01162447 -NCT01159470 -NCT01162460 -NCT01159522 -NCT01162551 -NCT01159574 -NCT01162642 -NCT01159587 -NCT01162785 -NCT01159613 -NCT01162863 -NCT01159678 -NCT01162915 -NCT01159808 -NCT01163019 -NCT01159860 -NCT01167738 -NCT01163071 -NCT01165476 -NCT01163084 -NCT01165385 -NCT01163110 -NCT01165489 -NCT01163201 -NCT01165528 -NCT01163214 -NCT01165619 -NCT01163240 -NCT01165632 -NCT01163253 -NCT01165645 -NCT01163357 -NCT01165658 -NCT01163396 -NCT01165671 -NCT01163435 -NCT01165697 -NCT01163448 -NCT01165749 -NCT01163487 -NCT01165827 -NCT01163552 -NCT01165905 -NCT01163617 -NCT01165983 -NCT01163682 -NCT01165996 -NCT01163760 -NCT01166035 -NCT01163773 -NCT01166113 -NCT01163812 -NCT01166126 -NCT01163851 -NCT01166152 -NCT01163929 -NCT01166178 -NCT01163955 -NCT01166191 -NCT01163994 -NCT01166204 -NCT01164007 -NCT01166308 -NCT01164033 -NCT01166321 -NCT01164046 -NCT01166412 -NCT01164150 -NCT01166451 -NCT01164163 -NCT01166490 -NCT01164176 -NCT01166529 -NCT01164189 -NCT01166542 -NCT01164202 -NCT01166737 -NCT01164215 -NCT01166763 -NCT01164228 -NCT01166854 -NCT01164241 -NCT01166906 -NCT01164267 -NCT01166932 -NCT01164345 -NCT01166958 -NCT01164384 -NCT01167049 -NCT01164475 -NCT01167101 -NCT01164553 -NCT01167114 -NCT01164566 -NCT01167166 -NCT01164683 -NCT01167179 -NCT01164709 -NCT01167192 -NCT01164722 -NCT01167218 -NCT01164748 -NCT01167244 -NCT01164891 -NCT01167270 -NCT01164930 -NCT01167322 -NCT01164956 -NCT01167361 -NCT01164995 -NCT01167374 -NCT01165008 -NCT01167426 -NCT01165021 -NCT01167465 -NCT01165112 -NCT01167491 -NCT01165216 -NCT01167530 -NCT01165268 -NCT01167673 -NCT01165281 -NCT01167686 -NCT01165307 -NCT01167712 -NCT01165333 -NCT01167725 -NCT01165346 -NCT01172561 -NCT01167790 -NCT01170039 -NCT01167816 -NCT01169961 -NCT01167829 -NCT01170052 -NCT01167894 -NCT01170104 -NCT01167907 -NCT01170143 -NCT01167933 -NCT01170169 -NCT01168011 -NCT01170182 -NCT01168050 -NCT01170234 -NCT01168141 -NCT01170299 -NCT01168154 -NCT01170364 -NCT01168180 -NCT01170390 -NCT01168206 -NCT01170429 -NCT01168219 -NCT01170494 -NCT01168232 -NCT01170559 -NCT01168323 -NCT01170598 -NCT01168388 -NCT01170650 -NCT01168401 -NCT01170663 -NCT01168440 -NCT01170754 -NCT01168479 -NCT01170780 -NCT01168505 -NCT01170845 -NCT01168544 -NCT01170871 -NCT01168674 -NCT01170884 -NCT01168713 -NCT01170897 -NCT01168752 -NCT01170923 -NCT01168791 -NCT01170962 -NCT01168804 -NCT01170975 -NCT01168895 -NCT01171092 -NCT01168908 -NCT01171170 -NCT01168921 -NCT01171196 -NCT01168973 -NCT01171222 -NCT01169012 -NCT01171300 -NCT01169038 -NCT01171378 -NCT01169077 -NCT01171430 -NCT01169103 -NCT01171469 -NCT01169116 -NCT01171482 -NCT01169129 -NCT01171638 -NCT01169155 -NCT01171651 -NCT01169181 -NCT01171729 -NCT01169220 -NCT01171755 -NCT01169259 -NCT01171781 -NCT01169298 -NCT01171846 -NCT01169337 -NCT01171898 -NCT01169350 -NCT01171924 -NCT01169363 -NCT01171976 -NCT01169415 -NCT01171989 -NCT01169532 -NCT01172028 -NCT01169558 -NCT01172184 -NCT01169584 -NCT01172223 -NCT01169597 -NCT01172249 -NCT01169636 -NCT01172314 -NCT01169649 -NCT01172379 -NCT01169675 -NCT01172470 -NCT01169714 -NCT01172509 -NCT01169740 -NCT01172535 -NCT01169753 -NCT01172548 -NCT01169870 -NCT01178411 -NCT01172587 -NCT01175460 -NCT01172600 -NCT01175447 -NCT01172769 -NCT01175499 -NCT01172860 -NCT01175538 -NCT01172912 -NCT01175655 -NCT01172925 -NCT01175694 -NCT01172964 -NCT01175733 -NCT01173003 -NCT01175772 -NCT01173068 -NCT01175785 -NCT01173172 -NCT01175798 -NCT01173198 -NCT01175837 -NCT01173224 -NCT01175876 -NCT01173289 -NCT01175980 -NCT01173432 -NCT01175993 -NCT01173497 -NCT01176240 -NCT01173523 -NCT01176435 -NCT01173575 -NCT01176461 -NCT01173679 -NCT01176474 -NCT01173692 -NCT01176487 -NCT01173861 -NCT01176500 -NCT01173887 -NCT01176513 -NCT01173900 -NCT01176552 -NCT01173913 -NCT01176565 -NCT01174017 -NCT01176604 -NCT01174043 -NCT01176669 -NCT01174056 -NCT01176708 -NCT01174082 -NCT01176747 -NCT01174121 -NCT01176760 -NCT01174186 -NCT01176773 -NCT01174199 -NCT01176799 -NCT01174238 -NCT01176916 -NCT01174264 -NCT01176981 -NCT01174368 -NCT01176994 -NCT01174381 -NCT01177007 -NCT01174446 -NCT01177124 -NCT01174537 -NCT01177163 -NCT01174550 -NCT01177371 -NCT01174563 -NCT01177397 -NCT01174836 -NCT01177436 -NCT01174888 -NCT01177501 -NCT01174901 -NCT01177540 -NCT01174940 -NCT01177631 -NCT01174953 -NCT01177683 -NCT01175005 -NCT01177735 -NCT01175031 -NCT01177800 -NCT01175096 -NCT01177865 -NCT01175109 -NCT01177891 -NCT01175174 -NCT01177956 -NCT01175239 -NCT01177969 -NCT01175278 -NCT01178008 -NCT01175291 -NCT01178086 -NCT01175317 -NCT01178112 -NCT01175343 -NCT01178151 -NCT01175356 -NCT01178294 -NCT01175382 -NCT01178372 -NCT01175395 -NCT01183884 -NCT01178463 -NCT01181401 -NCT01178645 -NCT01181375 -NCT01178658 -NCT01181440 -NCT01178736 -NCT01181453 -NCT01178775 -NCT01181479 -NCT01178788 -NCT01181570 -NCT01178814 -NCT01181596 -NCT01178853 -NCT01181609 -NCT01178892 -NCT01181804 -NCT01178918 -NCT01181830 -NCT01178944 -NCT01181869 -NCT01178957 -NCT01181999 -NCT01178996 -NCT01182051 -NCT01179074 -NCT01182116 -NCT01179139 -NCT01182129 -NCT01179152 -NCT01182142 -NCT01179217 -NCT01182168 -NCT01179269 -NCT01182233 -NCT01179295 -NCT01182246 -NCT01179308 -NCT01182272 -NCT01179334 -NCT01182285 -NCT01179464 -NCT01182298 -NCT01179490 -NCT01182350 -NCT01179672 -NCT01182415 -NCT01179685 -NCT01182506 -NCT01179698 -NCT01182584 -NCT01179750 -NCT01182610 -NCT01179893 -NCT01182688 -NCT01180049 -NCT01182753 -NCT01180088 -NCT01182779 -NCT01180153 -NCT01182805 -NCT01180166 -NCT01182831 -NCT01180322 -NCT01182844 -NCT01180335 -NCT01182883 -NCT01180426 -NCT01182922 -NCT01180478 -NCT01182974 -NCT01180504 -NCT01182987 -NCT01180569 -NCT01183065 -NCT01180660 -NCT01183156 -NCT01180686 -NCT01183299 -NCT01180725 -NCT01183364 -NCT01180751 -NCT01183416 -NCT01180790 -NCT01183429 -NCT01180803 -NCT01183494 -NCT01180816 -NCT01183533 -NCT01180855 -NCT01183559 -NCT01180946 -NCT01183611 -NCT01180959 -NCT01183624 -NCT01180998 -NCT01183650 -NCT01181128 -NCT01183663 -NCT01181193 -NCT01183741 -NCT01181245 -NCT01183767 -NCT01181258 -NCT01183780 -NCT01181271 -NCT01183806 -NCT01181323 -NCT01183858 -NCT01181336 -NCT01189734 -NCT01183897 -NCT01186731 -NCT01183936 -NCT01186705 -NCT01183949 -NCT01186822 -NCT01184027 -NCT01186835 -NCT01184053 -NCT01186861 -NCT01184066 -NCT01186913 -NCT01184144 -NCT01186939 -NCT01184196 -NCT01186978 -NCT01184209 -NCT01186991 -NCT01184248 -NCT01187043 -NCT01184274 -NCT01187199 -NCT01184287 -NCT01187212 -NCT01184326 -NCT01187238 -NCT01184378 -NCT01187290 -NCT01184417 -NCT01187446 -NCT01184456 -NCT01187485 -NCT01184482 -NCT01187524 -NCT01184651 -NCT01187550 -NCT01184703 -NCT01187615 -NCT01184781 -NCT01187784 -NCT01184885 -NCT01187810 -NCT01184898 -NCT01187927 -NCT01184989 -NCT01188096 -NCT01185028 -NCT01188109 -NCT01185054 -NCT01188161 -NCT01185132 -NCT01188174 -NCT01185145 -NCT01188187 -NCT01185158 -NCT01188252 -NCT01185171 -NCT01188330 -NCT01185262 -NCT01188408 -NCT01185314 -NCT01188473 -NCT01185366 -NCT01188486 -NCT01185444 -NCT01188499 -NCT01185470 -NCT01188681 -NCT01185509 -NCT01188707 -NCT01185548 -NCT01188733 -NCT01185626 -NCT01188785 -NCT01185639 -NCT01188798 -NCT01185665 -NCT01188837 -NCT01185704 -NCT01188876 -NCT01185730 -NCT01188889 -NCT01185847 -NCT01188915 -NCT01185964 -NCT01189123 -NCT01186068 -NCT01189227 -NCT01186081 -NCT01189240 -NCT01186185 -NCT01189253 -NCT01186224 -NCT01189266 -NCT01186237 -NCT01189331 -NCT01186263 -NCT01189344 -NCT01186328 -NCT01189370 -NCT01186367 -NCT01189383 -NCT01186406 -NCT01189409 -NCT01186458 -NCT01189435 -NCT01186484 -NCT01189513 -NCT01186601 -NCT01189643 -NCT01186640 -NCT01195181 -NCT01189786 -NCT01192438 -NCT01189851 -NCT01192399 -NCT01189877 -NCT01192464 -NCT01189903 -NCT01192555 -NCT01189929 -NCT01192633 -NCT01189942 -NCT01192763 -NCT01189968 -NCT01192815 -NCT01190007 -NCT01192958 -NCT01190098 -NCT01192971 -NCT01190150 -NCT01192984 -NCT01190241 -NCT01193140 -NCT01190280 -NCT01193244 -NCT01190332 -NCT01193257 -NCT01190345 -NCT01193270 -NCT01190449 -NCT01193348 -NCT01190462 -NCT01193361 -NCT01190527 -NCT01193400 -NCT01190644 -NCT01193439 -NCT01190657 -NCT01193452 -NCT01190787 -NCT01193478 -NCT01190904 -NCT01193517 -NCT01190930 -NCT01193530 -NCT01190982 -NCT01193595 -NCT01191034 -NCT01193673 -NCT01191060 -NCT01193699 -NCT01191164 -NCT01193803 -NCT01191190 -NCT01193842 -NCT01191216 -NCT01193855 -NCT01191229 -NCT01193868 -NCT01191294 -NCT01193881 -NCT01191411 -NCT01193933 -NCT01191502 -NCT01193998 -NCT01191528 -NCT01194089 -NCT01191541 -NCT01194193 -NCT01191632 -NCT01194206 -NCT01191671 -NCT01194271 -NCT01191684 -NCT01194362 -NCT01191697 -NCT01194427 -NCT01191749 -NCT01194440 -NCT01191775 -NCT01194453 -NCT01191801 -NCT01194466 -NCT01191814 -NCT01194609 -NCT01191853 -NCT01194648 -NCT01191892 -NCT01194661 -NCT01191957 -NCT01194687 -NCT01192048 -NCT01194791 -NCT01192087 -NCT01194843 -NCT01192100 -NCT01194869 -NCT01192113 -NCT01194908 -NCT01192165 -NCT01194960 -NCT01192204 -NCT01194973 -NCT01192230 -NCT01194986 -NCT01192243 -NCT01195064 -NCT01192269 -NCT01195090 -NCT01192308 -NCT01195142 -NCT01192373 -NCT01200485 -NCT01195220 -NCT01198028 -NCT01195285 -NCT01197885 -NCT01195298 -NCT01198054 -NCT01195311 -NCT01198067 -NCT01195376 -NCT01198119 -NCT01195415 -NCT01198145 -NCT01195428 -NCT01198158 -NCT01195454 -NCT01198184 -NCT01195480 -NCT01198392 -NCT01195532 -NCT01198509 -NCT01195545 -NCT01198522 -NCT01195610 -NCT01198535 -NCT01195701 -NCT01198548 -NCT01195714 -NCT01198587 -NCT01195766 -NCT01198626 -NCT01195922 -NCT01198665 -NCT01196000 -NCT01198782 -NCT01196013 -NCT01198821 -NCT01196052 -NCT01198834 -NCT01196078 -NCT01198899 -NCT01196117 -NCT01199055 -NCT01196156 -NCT01199068 -NCT01196221 -NCT01199146 -NCT01196234 -NCT01199198 -NCT01196247 -NCT01199224 -NCT01196260 -NCT01199250 -NCT01196273 -NCT01199263 -NCT01196390 -NCT01199354 -NCT01196403 -NCT01199367 -NCT01196416 -NCT01199406 -NCT01196429 -NCT01199432 -NCT01196442 -NCT01199562 -NCT01196455 -NCT01199575 -NCT01196494 -NCT01199614 -NCT01196507 -NCT01199640 -NCT01196559 -NCT01199666 -NCT01196572 -NCT01199718 -NCT01196585 -NCT01199757 -NCT01196650 -NCT01199822 -NCT01196663 -NCT01199835 -NCT01196715 -NCT01199978 -NCT01196741 -NCT01200004 -NCT01196845 -NCT01200017 -NCT01196936 -NCT01200069 -NCT01197040 -NCT01200082 -NCT01197118 -NCT01200121 -NCT01197170 -NCT01200134 -NCT01197183 -NCT01200147 -NCT01197196 -NCT01200212 -NCT01197209 -NCT01200238 -NCT01197287 -NCT01200277 -NCT01197560 -NCT01200316 -NCT01197625 -NCT01200329 -NCT01197664 -NCT01200342 -NCT01197794 -NCT01200355 -NCT01197820 -NCT01275287 -NCT01200537 -NCT01275183 -NCT01200576 -NCT01275196 -NCT01200589 -NCT01275209 -NCT01200706 -NCT01275222 -NCT01200732 -NCT01275235 -NCT01200758 -NCT01275274 -NCT01200797 -NCT01249820 -NCT01249859 -NCT01254903 -NCT01254929 -NCT01254994 -NCT01255007 -NCT01255137 -NCT01255163 -NCT01255228 -NCT01255397 -NCT01255410 -NCT01255514 -NCT01255527 -NCT01255553 -NCT01255644 -NCT01255657 -NCT01255761 -NCT01255800 -NCT01255852 -NCT01255891 -NCT01256008 -NCT01256034 -NCT01256047 -NCT01256073 -NCT01256112 -NCT01256177 -NCT01256203 -NCT01256229 -NCT01256268 -NCT01256281 -NCT01256359 -NCT01256385 -NCT01256398 -NCT01256424 -NCT01256528 -NCT01256554 -NCT01256567 -NCT01256619 -NCT01256762 -NCT01256853 -NCT01256944 -NCT01257048 -NCT01257126 -NCT01257139 -NCT01257152 -NCT01257178 -NCT01257191 -NCT01257243 -NCT01257269 -NCT01257295 -NCT01257308 -NCT01257360 -NCT01257425 -NCT01257438 -NCT01257451 -NCT01257503 -NCT01257542 -NCT01257594 -NCT01257607 -NCT01257711 -NCT01257763 -NCT01257828 -NCT01257867 -NCT01257880 -NCT01257945 -NCT01273090 -NCT01273103 -NCT01273129 -NCT01273155 -NCT01273168 -NCT01273181 -NCT01273207 -NCT01273272 -NCT01273350 -NCT01273402 -NCT01273480 -NCT01273493 -NCT01273584 -NCT01273610 -NCT01273662 -NCT01273688 -NCT01273766 -NCT01273805 -NCT01273818 -NCT01273844 -NCT01273883 -NCT01273896 -NCT01273948 -NCT01273974 -NCT01273987 -NCT01274000 -NCT01274013 -NCT01274104 -NCT01274143 -NCT01274260 -NCT01274273 -NCT01274312 -NCT01274338 -NCT01274351 -NCT01274364 -NCT01274403 -NCT01274455 -NCT01274507 -NCT01274533 -NCT01274624 -NCT01274637 -NCT01274676 -NCT01274793 -NCT01274806 -NCT01274962 -NCT01275118 -NCT01200810 -NCT01249040 -NCT01200823 -NCT01249105 -NCT01200862 -NCT01249157 -NCT01200940 -NCT01249222 -NCT01200966 -NCT01249235 -NCT01200992 -NCT01249300 -NCT01201018 -NCT01249352 -NCT01201044 -NCT01249391 -NCT01201213 -NCT01249430 -NCT01201265 -NCT01249443 -NCT01201343 -NCT01249482 -NCT01201551 -NCT01249521 -NCT01201603 -NCT01249547 -NCT01201616 -NCT01249638 -NCT01201629 -NCT01249651 -NCT01201642 -NCT01249677 -NCT01201694 -NCT01249690 -NCT01201733 -NCT01239485 -NCT01239550 -NCT01239641 -NCT01239732 -NCT01239797 -NCT01239810 -NCT01239823 -NCT01239875 -NCT01239966 -NCT01240005 -NCT01240070 -NCT01240083 -NCT01240213 -NCT01240304 -NCT01240356 -NCT01240408 -NCT01240434 -NCT01240447 -NCT01240460 -NCT01240499 -NCT01240525 -NCT01240538 -NCT01240551 -NCT01240577 -NCT01240590 -NCT01240616 -NCT01240629 -NCT01240642 -NCT01240655 -NCT01240681 -NCT01240694 -NCT01240707 -NCT01240720 -NCT01246141 -NCT01246219 -NCT01246297 -NCT01246336 -NCT01246427 -NCT01246440 -NCT01246544 -NCT01246557 -NCT01246622 -NCT01246726 -NCT01246739 -NCT01246752 -NCT01246817 -NCT01246869 -NCT01246947 -NCT01246960 -NCT01246986 -NCT01247129 -NCT01247168 -NCT01247194 -NCT01247233 -NCT01247298 -NCT01247337 -NCT01247415 -NCT01247493 -NCT01247532 -NCT01247571 -NCT01247623 -NCT01247779 -NCT01247857 -NCT01247922 -NCT01247961 -NCT01248208 -NCT01248247 -NCT01248273 -NCT01248299 -NCT01248403 -NCT01248416 -NCT01248455 -NCT01248494 -NCT01248585 -NCT01248611 -NCT01248624 -NCT01248663 -NCT01248676 -NCT01248741 -NCT01248754 -NCT01248819 -NCT01248858 -NCT01248923 -NCT01248936 -NCT01248949 -NCT01248962 -NCT01201811 -NCT01204593 -NCT01201824 -NCT01204476 -NCT01201863 -NCT01204684 -NCT01201915 -NCT01204697 -NCT01201941 -NCT01204710 -NCT01201993 -NCT01204736 -NCT01202032 -NCT01204749 -NCT01202227 -NCT01204775 -NCT01202409 -NCT01204788 -NCT01202448 -NCT01237808 -NCT01202487 -NCT01237860 -NCT01202513 -NCT01237912 -NCT01202591 -NCT01237938 -NCT01202630 -NCT01237951 -NCT01202643 -NCT01238003 -NCT01202721 -NCT01238029 -NCT01202760 -NCT01238042 -NCT01202851 -NCT01238055 -NCT01202864 -NCT01238081 -NCT01202877 -NCT01238094 -NCT01202890 -NCT01238107 -NCT01202981 -NCT01238120 -NCT01203020 -NCT01238133 -NCT01203046 -NCT01238146 -NCT01203228 -NCT01238159 -NCT01203267 -NCT01238172 -NCT01203306 -NCT01238185 -NCT01203410 -NCT01238211 -NCT01203423 -NCT01238237 -NCT01203436 -NCT01238354 -NCT01203449 -NCT01238419 -NCT01203462 -NCT01238471 -NCT01203566 -NCT01238536 -NCT01203579 -NCT01238692 -NCT01203618 -NCT01238731 -NCT01203722 -NCT01238770 -NCT01203735 -NCT01238835 -NCT01203787 -NCT01238900 -NCT01203839 -NCT01238939 -NCT01203878 -NCT01238952 -NCT01203930 -NCT01238965 -NCT01203969 -NCT01239004 -NCT01204060 -NCT01239082 -NCT01204073 -NCT01239095 -NCT01204099 -NCT01239108 -NCT01204125 -NCT01239134 -NCT01204151 -NCT01239147 -NCT01204164 -NCT01239251 -NCT01204177 -NCT01239316 -NCT01204203 -NCT01239342 -NCT01204242 -NCT01239355 -NCT01204255 -NCT01239368 -NCT01204307 -NCT01239381 -NCT01204372 -NCT01239394 -NCT01204437 -NCT01239407 -NCT01204450 -NCT01239446 -NCT01204801 -NCT01236989 -NCT01204931 -NCT01237041 -NCT01204957 -NCT01237054 -NCT01204996 -NCT01237067 -NCT01205022 -NCT01237106 -NCT01205217 -NCT01237236 -NCT01205230 -NCT01237249 -NCT01205256 -NCT01237262 -NCT01205308 -NCT01237327 -NCT01205334 -NCT01237457 -NCT01205490 -NCT01237470 -NCT01205503 -NCT01237483 -NCT01205581 -NCT01237665 -NCT01205646 -NCT01237678 -NCT01205672 -NCT01237704 -NCT01205685 -NCT01221077 -NCT01221103 -NCT01221181 -NCT01221233 -NCT01221376 -NCT01221441 -NCT01221467 -NCT01221493 -NCT01221506 -NCT01221571 -NCT01221675 -NCT01221688 -NCT01221753 -NCT01221857 -NCT01221870 -NCT01221883 -NCT01221935 -NCT01222013 -NCT01222026 -NCT01222052 -NCT01222065 -NCT01222130 -NCT01222143 -NCT01222195 -NCT01222208 -NCT01222221 -NCT01222260 -NCT01222286 -NCT01222312 -NCT01222338 -NCT01222377 -NCT01222416 -NCT01222546 -NCT01222572 -NCT01222624 -NCT01222637 -NCT01222650 -NCT01222676 -NCT01222689 -NCT01222702 -NCT01222715 -NCT01222754 -NCT01222767 -NCT01222780 -NCT01222819 -NCT01222884 -NCT01222897 -NCT01222910 -NCT01222936 -NCT01223027 -NCT01223092 -NCT01223105 -NCT01223144 -NCT01223209 -NCT01223235 -NCT01223248 -NCT01223261 -NCT01223287 -NCT01223300 -NCT01223313 -NCT01223560 -NCT01223638 -NCT01223716 -NCT01223807 -NCT01223885 -NCT01223898 -NCT01223924 -NCT01224041 -NCT01224145 -NCT01224288 -NCT01236352 -NCT01236365 -NCT01236391 -NCT01236417 -NCT01236443 -NCT01236508 -NCT01236534 -NCT01236547 -NCT01236560 -NCT01236573 -NCT01236586 -NCT01236690 -NCT01236716 -NCT01236742 -NCT01236755 -NCT01236768 -NCT01236781 -NCT01236833 -NCT01236885 -NCT01236937 -NCT01237756 -NCT01205711 -NCT01208220 -NCT01205737 -NCT01208194 -NCT01205828 -NCT01208259 -NCT01205880 -NCT01208272 -NCT01206010 -NCT01208441 -NCT01206036 -NCT01208454 -NCT01206049 -NCT01208480 -NCT01206062 -NCT01208519 -NCT01206088 -NCT01208662 -NCT01206140 -NCT01208766 -NCT01206205 -NCT01208792 -NCT01206218 -NCT01208818 -NCT01206270 -NCT01208831 -NCT01206296 -NCT01208883 -NCT01206335 -NCT01208896 -NCT01206413 -NCT01208922 -NCT01206465 -NCT01208974 -NCT01206491 -NCT01219673 -NCT01206530 -NCT01219699 -NCT01206543 -NCT01219751 -NCT01206556 -NCT01219777 -NCT01206621 -NCT01219790 -NCT01206686 -NCT01219816 -NCT01206764 -NCT01219907 -NCT01206816 -NCT01219920 -NCT01206881 -NCT01219985 -NCT01206894 -NCT01220024 -NCT01207011 -NCT01220050 -NCT01207050 -NCT01220063 -NCT01207063 -NCT01220076 -NCT01207076 -NCT01220128 -NCT01207102 -NCT01220141 -NCT01207193 -NCT01220154 -NCT01207206 -NCT01220167 -NCT01207258 -NCT01220271 -NCT01207323 -NCT01220284 -NCT01207388 -NCT01220297 -NCT01207440 -NCT01220336 -NCT01207492 -NCT01220349 -NCT01207609 -NCT01220362 -NCT01207661 -NCT01220375 -NCT01207687 -NCT01220505 -NCT01207726 -NCT01220544 -NCT01207739 -NCT01220570 -NCT01207765 -NCT01220583 -NCT01207778 -NCT01220609 -NCT01207895 -NCT01220635 -NCT01207908 -NCT01220648 -NCT01207921 -NCT01220739 -NCT01207986 -NCT01220752 -NCT01208025 -NCT01220817 -NCT01208038 -NCT01220869 -NCT01208051 -NCT01220960 -NCT01208064 -NCT01220973 -NCT01208077 -NCT01220999 -NCT01208103 -NCT01221064 -NCT01209000 -NCT01211938 -NCT01209013 -NCT01211691 -NCT01209130 -NCT01211977 -NCT01209143 -NCT01211990 -NCT01209182 -NCT01212016 -NCT01209195 -NCT01212068 -NCT01209273 -NCT01212107 -NCT01209286 -NCT01212276 -NCT01209325 -NCT01212341 -NCT01209338 -NCT01212354 -NCT01209364 -NCT01212367 -NCT01209442 -NCT01212380 -NCT01209507 -NCT01212484 -NCT01209520 -NCT01217424 -NCT01209572 -NCT01217437 -NCT01209585 -NCT01217450 -NCT01209598 -NCT01217567 -NCT01209676 -NCT01217593 -NCT01209832 -NCT01217619 -NCT01209871 -NCT01217658 -NCT01209988 -NCT01217749 -NCT01210014 -NCT01217801 -NCT01210053 -NCT01217931 -NCT01210066 -NCT01217957 -NCT01210131 -NCT01217996 -NCT01210144 -NCT01218048 -NCT01210222 -NCT01218087 -NCT01210235 -NCT01218139 -NCT01210248 -NCT01218178 -NCT01210287 -NCT01218217 -NCT01210326 -NCT01218386 -NCT01210365 -NCT01218477 -NCT01210378 -NCT01218490 -NCT01210430 -NCT01218516 -NCT01210495 -NCT01218529 -NCT01210534 -NCT01218542 -NCT01210599 -NCT01218555 -NCT01210742 -NCT01218568 -NCT01210768 -NCT01218581 -NCT01210846 -NCT01218594 -NCT01210911 -NCT01218607 -NCT01210937 -NCT01218620 -NCT01211002 -NCT01218646 -NCT01211054 -NCT01218672 -NCT01211132 -NCT01218737 -NCT01211145 -NCT01218789 -NCT01211158 -NCT01218854 -NCT01211210 -NCT01218867 -NCT01211262 -NCT01218880 -NCT01211275 -NCT01218919 -NCT01211379 -NCT01219010 -NCT01211392 -NCT01219075 -NCT01211457 -NCT01219192 -NCT01211483 -NCT01219348 -NCT01211561 -NCT01219361 -NCT01211613 -NCT01219543 -NCT01212510 -NCT01215318 -NCT01212549 -NCT01215292 -NCT01212614 -NCT01215344 -NCT01212627 -NCT01215383 -NCT01212718 -NCT01215422 -NCT01212809 -NCT01215448 -NCT01212822 -NCT01215500 -NCT01212887 -NCT01215513 -NCT01212900 -NCT01215539 -NCT01212926 -NCT01215565 -NCT01212952 -NCT01215578 -NCT01212991 -NCT01215617 -NCT01213004 -NCT01215747 -NCT01213017 -NCT01215799 -NCT01213030 -NCT01215864 -NCT01213056 -NCT01215877 -NCT01213095 -NCT01215890 -NCT01213147 -NCT01215916 -NCT01213160 -NCT01215981 -NCT01213238 -NCT01216020 -NCT01213277 -NCT01216033 -NCT01213290 -NCT01216085 -NCT01213381 -NCT01216111 -NCT01213407 -NCT01216163 -NCT01213446 -NCT01216176 -NCT01213459 -NCT01216215 -NCT01213472 -NCT01216254 -NCT01213732 -NCT01216267 -NCT01213745 -NCT01216319 -NCT01213771 -NCT01216332 -NCT01213875 -NCT01216371 -NCT01213888 -NCT01216436 -NCT01213927 -NCT01216514 -NCT01214031 -NCT01216527 -NCT01214070 -NCT01216631 -NCT01214109 -NCT01216644 -NCT01214200 -NCT01216657 -NCT01214330 -NCT01216683 -NCT01214343 -NCT01216696 -NCT01214408 -NCT01216787 -NCT01214564 -NCT01216800 -NCT01214603 -NCT01216826 -NCT01214616 -NCT01216839 -NCT01214629 -NCT01216956 -NCT01214642 -NCT01217034 -NCT01214655 -NCT01217060 -NCT01214668 -NCT01217125 -NCT01214681 -NCT01217177 -NCT01214707 -NCT01217203 -NCT01214720 -NCT01217216 -NCT01215032 -NCT01217229 -NCT01215071 -NCT01217333 -NCT01215123 -NCT01217385 -NCT01215136 -NCT01217398 -NCT01215162 -NCT01217411 -NCT01215266 -NCT01236144 -NCT01224301 -NCT01234467 -NCT01224392 -NCT01234480 -NCT01224405 -NCT01234519 -NCT01224418 -NCT01234532 -NCT01224483 -NCT01234545 -NCT01224496 -NCT01234740 -NCT01224652 -NCT01234753 -NCT01224665 -NCT01234766 -NCT01224678 -NCT01234805 -NCT01224691 -NCT01234857 -NCT01224704 -NCT01234883 -NCT01224730 -NCT01234922 -NCT01224795 -NCT01234935 -NCT01224808 -NCT01234974 -NCT01224821 -NCT01235052 -NCT01224912 -NCT01235091 -NCT01224990 -NCT01235117 -NCT01225029 -NCT01235182 -NCT01225172 -NCT01235416 -NCT01225211 -NCT01235572 -NCT01225237 -NCT01235741 -NCT01225263 -NCT01235793 -NCT01225289 -NCT01235832 -NCT01225302 -NCT01235845 -NCT01225328 -NCT01235897 -NCT01225354 -NCT01235910 -NCT01225419 -NCT01235962 -NCT01225445 -NCT01236027 -NCT01225471 -NCT01231074 -NCT01231113 -NCT01231204 -NCT01231230 -NCT01231269 -NCT01231347 -NCT01231399 -NCT01231412 -NCT01231568 -NCT01231581 -NCT01231594 -NCT01231659 -NCT01231724 -NCT01231737 -NCT01231802 -NCT01231906 -NCT01231919 -NCT01231945 -NCT01231971 -NCT01232075 -NCT01232101 -NCT01232140 -NCT01232296 -NCT01232374 -NCT01232452 -NCT01232504 -NCT01232556 -NCT01232582 -NCT01232595 -NCT01232634 -NCT01232712 -NCT01232738 -NCT01232829 -NCT01232842 -NCT01232855 -NCT01232868 -NCT01232959 -NCT01233258 -NCT01233362 -NCT01233375 -NCT01233427 -NCT01233479 -NCT01233492 -NCT01233505 -NCT01233544 -NCT01233687 -NCT01233713 -NCT01233778 -NCT01233843 -NCT01233895 -NCT01233921 -NCT01233947 -NCT01234012 -NCT01234025 -NCT01234038 -NCT01234051 -NCT01234272 -NCT01234311 -NCT01234324 -NCT01234337 -NCT01234402 -NCT01236040 -NCT01225510 -NCT01227928 -NCT01225523 -NCT01227889 -NCT01225536 -NCT01227941 -NCT01225640 -NCT01227954 -NCT01225679 -NCT01227980 -NCT01225744 -NCT01228045 -NCT01225757 -NCT01228071 -NCT01225822 -NCT01228084 -NCT01225874 -NCT01228240 -NCT01225887 -NCT01228331 -NCT01225913 -NCT01228435 -NCT01226030 -NCT01228448 -NCT01226056 -NCT01228565 -NCT01226186 -NCT01228734 -NCT01226264 -NCT01228760 -NCT01226277 -NCT01228773 -NCT01226290 -NCT01228929 -NCT01226303 -NCT01228942 -NCT01226316 -NCT01229007 -NCT01226342 -NCT01229111 -NCT01226368 -NCT01229150 -NCT01226381 -NCT01229319 -NCT01226394 -NCT01229566 -NCT01226472 -NCT01229605 -NCT01226485 -NCT01229618 -NCT01226498 -NCT01229644 -NCT01226524 -NCT01229683 -NCT01226537 -NCT01229774 -NCT01226576 -NCT01229813 -NCT01226654 -NCT01229839 -NCT01226693 -NCT01229865 -NCT01226719 -NCT01229930 -NCT01226732 -NCT01229943 -NCT01226758 -NCT01229995 -NCT01226797 -NCT01230177 -NCT01226849 -NCT01230346 -NCT01226901 -NCT01230424 -NCT01226914 -NCT01230476 -NCT01226979 -NCT01230554 -NCT01226992 -NCT01230593 -NCT01227018 -NCT01230619 -NCT01227083 -NCT01230658 -NCT01227109 -NCT01230671 -NCT01227135 -NCT01230710 -NCT01227187 -NCT01230775 -NCT01227239 -NCT01230788 -NCT01227317 -NCT01230866 -NCT01227408 -NCT01230879 -NCT01227434 -NCT01230905 -NCT01227499 -NCT01230918 -NCT01227551 -NCT01230957 -NCT01227577 -NCT01230970 -NCT01227642 -NCT01230983 -NCT01227707 -NCT01230996 -NCT01227772 -NCT01231061 -NCT01227863 -NCT01246128 -NCT01240811 -NCT01243359 -NCT01240824 -NCT01243333 -NCT01240876 -NCT01243385 -NCT01240902 -NCT01243398 -NCT01240928 -NCT01243476 -NCT01240941 -NCT01243489 -NCT01240954 -NCT01243515 -NCT01241019 -NCT01243541 -NCT01241110 -NCT01243619 -NCT01241149 -NCT01243632 -NCT01241162 -NCT01243645 -NCT01241227 -NCT01243762 -NCT01241292 -NCT01243775 -NCT01241305 -NCT01243853 -NCT01241448 -NCT01243892 -NCT01241461 -NCT01243944 -NCT01241500 -NCT01243996 -NCT01241552 -NCT01244009 -NCT01241565 -NCT01244152 -NCT01241604 -NCT01244191 -NCT01241682 -NCT01244230 -NCT01241708 -NCT01244243 -NCT01241721 -NCT01244347 -NCT01241734 -NCT01244438 -NCT01241786 -NCT01244503 -NCT01241799 -NCT01244516 -NCT01241825 -NCT01244529 -NCT01241929 -NCT01244568 -NCT01241968 -NCT01244711 -NCT01241994 -NCT01244724 -NCT01242007 -NCT01244737 -NCT01242033 -NCT01244789 -NCT01242046 -NCT01244906 -NCT01242072 -NCT01244945 -NCT01242124 -NCT01245023 -NCT01242267 -NCT01245036 -NCT01242397 -NCT01245062 -NCT01242436 -NCT01245179 -NCT01242449 -NCT01245205 -NCT01242540 -NCT01245296 -NCT01242553 -NCT01245543 -NCT01242566 -NCT01245556 -NCT01242605 -NCT01245582 -NCT01242618 -NCT01245608 -NCT01242631 -NCT01245621 -NCT01242748 -NCT01245660 -NCT01242774 -NCT01245673 -NCT01242800 -NCT01245712 -NCT01242878 -NCT01245751 -NCT01242930 -NCT01245959 -NCT01242943 -NCT01245972 -NCT01243047 -NCT01245985 -NCT01243060 -NCT01246063 -NCT01243073 -NCT01246076 -NCT01243125 -NCT01246102 -NCT01243190 -NCT01254890 -NCT01249911 -NCT01252693 -NCT01250067 -NCT01252667 -NCT01250119 -NCT01252719 -NCT01250158 -NCT01252732 -NCT01250288 -NCT01252745 -NCT01250314 -NCT01252771 -NCT01250340 -NCT01252797 -NCT01250379 -NCT01252823 -NCT01250405 -NCT01252875 -NCT01250470 -NCT01253018 -NCT01250509 -NCT01253070 -NCT01250535 -NCT01253096 -NCT01250574 -NCT01253135 -NCT01250613 -NCT01253148 -NCT01250717 -NCT01253161 -NCT01250756 -NCT01253213 -NCT01250912 -NCT01253278 -NCT01250951 -NCT01253356 -NCT01251107 -NCT01253369 -NCT01251120 -NCT01253408 -NCT01251159 -NCT01253447 -NCT01251172 -NCT01253460 -NCT01251237 -NCT01253512 -NCT01251250 -NCT01253525 -NCT01251263 -NCT01253564 -NCT01251328 -NCT01253590 -NCT01251354 -NCT01253629 -NCT01251432 -NCT01253642 -NCT01251484 -NCT01253668 -NCT01251536 -NCT01253681 -NCT01251562 -NCT01253707 -NCT01251575 -NCT01253720 -NCT01251627 -NCT01253733 -NCT01251640 -NCT01253837 -NCT01251666 -NCT01254019 -NCT01251796 -NCT01254032 -NCT01251809 -NCT01254045 -NCT01251822 -NCT01254071 -NCT01251861 -NCT01254136 -NCT01251874 -NCT01254162 -NCT01251900 -NCT01254175 -NCT01251926 -NCT01254188 -NCT01251952 -NCT01254201 -NCT01251965 -NCT01254279 -NCT01251978 -NCT01254513 -NCT01252108 -NCT01254526 -NCT01252199 -NCT01254578 -NCT01252225 -NCT01254591 -NCT01252251 -NCT01254617 -NCT01252277 -NCT01254669 -NCT01252290 -NCT01254682 -NCT01252329 -NCT01254734 -NCT01252459 -NCT01254838 -NCT01252472 -NCT01254851 -NCT01252602 -NCT01254864 -NCT01252628 -NCT01273064 -NCT01258101 -NCT01265940 -NCT01258114 -NCT01265927 -NCT01258192 -NCT01265953 -NCT01258257 -NCT01265966 -NCT01258322 -NCT01266018 -NCT01258348 -NCT01266031 -NCT01258413 -NCT01266044 -NCT01258478 -NCT01266057 -NCT01258543 -NCT01266070 -NCT01258608 -NCT01266083 -NCT01258634 -NCT01266096 -NCT01258829 -NCT01266148 -NCT01258855 -NCT01266187 -NCT01258868 -NCT01266213 -NCT01258933 -NCT01266317 -NCT01258985 -NCT01266369 -NCT01258998 -NCT01266447 -NCT01259024 -NCT01266460 -NCT01259037 -NCT01266486 -NCT01259063 -NCT01266512 -NCT01259089 -NCT01266525 -NCT01259141 -NCT01266603 -NCT01259167 -NCT01266642 -NCT01259180 -NCT01266694 -NCT01259193 -NCT01266707 -NCT01259219 -NCT01266720 -NCT01259245 -NCT01266759 -NCT01259284 -NCT01266811 -NCT01259336 -NCT01266824 -NCT01259375 -NCT01266837 -NCT01259414 -NCT01266902 -NCT01259440 -NCT01266915 -NCT01259479 -NCT01266967 -NCT01259505 -NCT01267084 -NCT01259518 -NCT01271972 -NCT01259531 -NCT01272011 -NCT01259674 -NCT01272024 -NCT01259765 -NCT01272037 -NCT01259856 -NCT01272050 -NCT01259869 -NCT01272141 -NCT01259934 -NCT01272245 -NCT01260064 -NCT01272310 -NCT01260077 -NCT01272388 -NCT01260103 -NCT01272414 -NCT01260116 -NCT01272466 -NCT01260129 -NCT01272505 -NCT01260181 -NCT01272557 -NCT01260194 -NCT01272609 -NCT01260389 -NCT01272622 -NCT01260415 -NCT01272674 -NCT01260467 -NCT01272713 -NCT01260480 -NCT01272778 -NCT01260506 -NCT01272791 -NCT01260532 -NCT01272817 -NCT01260623 -NCT01273025 -NCT01260688 -NCT01273051 -NCT01260701 -NCT01263418 -NCT01260714 -NCT01263392 -NCT01260727 -NCT01263613 -NCT01260740 -NCT01263626 -NCT01260805 -NCT01263639 -NCT01260883 -NCT01263665 -NCT01260987 -NCT01263691 -NCT01261000 -NCT01263704 -NCT01261026 -NCT01263769 -NCT01261039 -NCT01263782 -NCT01261234 -NCT01263821 -NCT01261247 -NCT01263886 -NCT01261260 -NCT01263899 -NCT01261299 -NCT01263951 -NCT01261312 -NCT01264003 -NCT01261325 -NCT01264055 -NCT01261377 -NCT01264081 -NCT01261429 -NCT01264120 -NCT01261442 -NCT01264172 -NCT01261520 -NCT01264315 -NCT01261546 -NCT01264328 -NCT01261572 -NCT01264341 -NCT01261598 -NCT01264380 -NCT01261728 -NCT01264406 -NCT01261754 -NCT01264419 -NCT01261884 -NCT01264432 -NCT01261936 -NCT01264510 -NCT01261962 -NCT01264705 -NCT01262014 -NCT01264731 -NCT01262027 -NCT01264874 -NCT01262040 -NCT01264887 -NCT01262183 -NCT01264926 -NCT01262209 -NCT01264952 -NCT01262235 -NCT01264991 -NCT01262274 -NCT01265030 -NCT01262417 -NCT01265082 -NCT01262469 -NCT01265147 -NCT01262482 -NCT01265160 -NCT01262560 -NCT01265186 -NCT01262612 -NCT01265199 -NCT01262651 -NCT01265264 -NCT01262664 -NCT01265290 -NCT01262820 -NCT01265342 -NCT01262859 -NCT01265355 -NCT01262963 -NCT01265368 -NCT01263002 -NCT01265381 -NCT01263119 -NCT01265433 -NCT01263132 -NCT01265459 -NCT01263145 -NCT01265550 -NCT01263171 -NCT01265576 -NCT01263301 -NCT01265602 -NCT01263314 -NCT01265628 -NCT01263327 -NCT01265810 -NCT01263340 -NCT01265849 -NCT01263353 -NCT01265901 -NCT01263366 -NCT01271920 -NCT01267110 -NCT01269528 -NCT01267240 -NCT01269437 -NCT01267253 -NCT01269554 -NCT01267266 -NCT01269567 -NCT01267305 -NCT01269593 -NCT01267344 -NCT01269645 -NCT01267383 -NCT01269697 -NCT01267396 -NCT01269749 -NCT01267448 -NCT01269775 -NCT01267461 -NCT01269788 -NCT01267513 -NCT01269853 -NCT01267539 -NCT01269879 -NCT01267552 -NCT01269892 -NCT01267578 -NCT01269918 -NCT01267643 -NCT01269931 -NCT01267669 -NCT01269996 -NCT01267695 -NCT01270139 -NCT01267812 -NCT01270191 -NCT01267864 -NCT01270204 -NCT01267877 -NCT01270321 -NCT01267903 -NCT01270373 -NCT01267955 -NCT01270386 -NCT01267994 -NCT01270425 -NCT01268007 -NCT01270438 -NCT01268059 -NCT01270516 -NCT01268072 -NCT01270581 -NCT01268150 -NCT01270698 -NCT01268163 -NCT01270724 -NCT01268280 -NCT01270750 -NCT01268293 -NCT01270841 -NCT01268384 -NCT01270880 -NCT01268410 -NCT01270893 -NCT01268501 -NCT01270906 -NCT01268566 -NCT01270919 -NCT01268579 -NCT01270932 -NCT01268709 -NCT01270984 -NCT01268735 -NCT01271010 -NCT01268748 -NCT01271088 -NCT01268774 -NCT01271127 -NCT01268891 -NCT01271166 -NCT01268943 -NCT01271192 -NCT01268969 -NCT01271283 -NCT01269008 -NCT01271296 -NCT01269047 -NCT01271322 -NCT01269060 -NCT01271335 -NCT01269138 -NCT01271439 -NCT01269190 -NCT01271504 -NCT01269203 -NCT01271530 -NCT01269216 -NCT01271582 -NCT01269229 -NCT01271712 -NCT01269255 -NCT01271725 -NCT01269320 -NCT01271738 -NCT01269346 -NCT01271764 -NCT01269385 -NCT01271803 -NCT01269411 -NCT01271907 -NCT01269424 -NCT01321008 -NCT01275339 -NCT01320059 -NCT01275404 -NCT01320085 -NCT01275586 -NCT01320111 -NCT01275612 -NCT01320176 -NCT01275664 -NCT01320189 -NCT01275677 -NCT01320241 -NCT01275690 -NCT01320254 -NCT01275859 -NCT01320267 -NCT01275872 -NCT01320280 -NCT01276041 -NCT01320319 -NCT01276054 -NCT01320384 -NCT01276093 -NCT01320488 -NCT01276106 -NCT01320501 -NCT01276171 -NCT01320527 -NCT01276210 -NCT01320592 -NCT01276236 -NCT01320670 -NCT01276249 -NCT01320683 -NCT01276379 -NCT01320787 -NCT01276392 -NCT01320852 -NCT01276496 -NCT01320891 -NCT01276548 -NCT01315678 -NCT01315743 -NCT01315769 -NCT01315873 -NCT01315938 -NCT01315990 -NCT01316029 -NCT01316042 -NCT01316146 -NCT01316211 -NCT01316250 -NCT01316263 -NCT01316276 -NCT01316458 -NCT01316471 -NCT01316523 -NCT01316614 -NCT01316692 -NCT01316744 -NCT01316757 -NCT01316796 -NCT01316809 -NCT01316822 -NCT01316874 -NCT01317004 -NCT01317069 -NCT01317108 -NCT01317173 -NCT01317199 -NCT01317212 -NCT01317420 -NCT01317433 -NCT01317550 -NCT01317589 -NCT01317615 -NCT01317641 -NCT01317745 -NCT01317758 -NCT01317888 -NCT01317901 -NCT01317927 -NCT01317940 -NCT01318070 -NCT01318083 -NCT01318109 -NCT01318161 -NCT01318200 -NCT01318239 -NCT01318317 -NCT01318369 -NCT01318434 -NCT01318447 -NCT01318473 -NCT01318564 -NCT01318590 -NCT01318616 -NCT01318642 -NCT01318707 -NCT01318733 -NCT01318902 -NCT01318980 -NCT01319123 -NCT01319266 -NCT01319422 -NCT01319448 -NCT01319461 -NCT01319539 -NCT01319552 -NCT01319565 -NCT01319669 -NCT01319838 -NCT01319851 -NCT01319864 -NCT01319929 -NCT01319981 -NCT01320007 -NCT01320020 -NCT01320033 -NCT01320046 -NCT01320904 -NCT01276600 -NCT01313650 -NCT01276613 -NCT01313663 -NCT01276639 -NCT01313676 -NCT01276665 -NCT01313689 -NCT01276678 -NCT01313780 -NCT01276704 -NCT01313884 -NCT01276717 -NCT01313897 -NCT01276730 -NCT01313936 -NCT01276769 -NCT01313962 -NCT01276782 -NCT01314014 -NCT01276795 -NCT01314027 -NCT01276886 -NCT01314053 -NCT01276938 -NCT01314105 -NCT01276964 -NCT01314118 -NCT01276977 -NCT01314144 -NCT01277016 -NCT01314183 -NCT01277107 -NCT01314261 -NCT01277146 -NCT01314274 -NCT01277159 -NCT01314300 -NCT01277172 -NCT01314313 -NCT01277198 -NCT01314339 -NCT01277315 -NCT01314352 -NCT01277380 -NCT01314456 -NCT01277406 -NCT01314508 -NCT01277484 -NCT01314586 -NCT01277510 -NCT01314599 -NCT01277731 -NCT01314638 -NCT01277744 -NCT01314677 -NCT01277757 -NCT01314716 -NCT01277796 -NCT01314755 -NCT01277861 -NCT01314807 -NCT01277939 -NCT01314820 -NCT01278004 -NCT01314833 -NCT01278017 -NCT01314963 -NCT01278056 -NCT01315015 -NCT01278212 -NCT01315132 -NCT01278329 -NCT01315223 -NCT01278342 -NCT01315366 -NCT01278368 -NCT01315431 -NCT01278394 -NCT01315470 -NCT01278420 -NCT01315483 -NCT01278446 -NCT01315522 -NCT01278537 -NCT01315548 -NCT01278602 -NCT01315561 -NCT01278615 -NCT01315639 -NCT01278758 -NCT01312922 -NCT01313026 -NCT01313039 -NCT01313065 -NCT01313078 -NCT01313104 -NCT01313208 -NCT01313234 -NCT01313247 -NCT01313273 -NCT01313312 -NCT01313377 -NCT01313390 -NCT01313416 -NCT01313429 -NCT01313442 -NCT01313455 -NCT01313546 -NCT01313559 -NCT01313598 -NCT01313611 -NCT01313624 -NCT01313637 -NCT01278810 -NCT01311440 -NCT01278849 -NCT01311466 -NCT01278888 -NCT01311648 -NCT01278914 -NCT01311687 -NCT01278940 -NCT01311713 -NCT01279096 -NCT01311752 -NCT01279122 -NCT01311869 -NCT01279135 -NCT01311895 -NCT01279252 -NCT01311960 -NCT01279278 -NCT01311973 -NCT01279291 -NCT01311986 -NCT01279330 -NCT01312012 -NCT01279369 -NCT01312025 -NCT01279421 -NCT01312038 -NCT01279473 -NCT01312090 -NCT01279590 -NCT01312246 -NCT01279603 -NCT01312285 -NCT01279616 -NCT01312311 -NCT01279668 -NCT01312324 -NCT01279681 -NCT01312337 -NCT01279694 -NCT01312350 -NCT01279733 -NCT01312376 -NCT01279811 -NCT01312389 -NCT01279863 -NCT01312467 -NCT01279876 -NCT01312493 -NCT01279902 -NCT01312506 -NCT01279941 -NCT01312662 -NCT01279967 -NCT01312675 -NCT01280032 -NCT01312818 -NCT01280045 -NCT01312857 -NCT01280058 -NCT01290783 -NCT01290822 -NCT01290835 -NCT01290887 -NCT01290926 -NCT01290939 -NCT01291017 -NCT01291095 -NCT01291225 -NCT01291238 -NCT01291407 -NCT01291420 -NCT01291615 -NCT01291628 -NCT01291680 -NCT01291823 -NCT01291849 -NCT01309516 -NCT01309529 -NCT01309568 -NCT01309607 -NCT01309633 -NCT01309672 -NCT01309737 -NCT01309750 -NCT01309789 -NCT01309919 -NCT01310010 -NCT01310036 -NCT01310075 -NCT01310101 -NCT01310140 -NCT01310166 -NCT01310179 -NCT01310192 -NCT01310231 -NCT01310244 -NCT01310322 -NCT01310387 -NCT01310478 -NCT01310491 -NCT01310530 -NCT01310556 -NCT01310673 -NCT01310699 -NCT01310803 -NCT01310816 -NCT01310855 -NCT01310868 -NCT01310894 -NCT01311089 -NCT01311102 -NCT01311219 -NCT01311232 -NCT01311271 -NCT01311323 -NCT01311375 -NCT01280201 -NCT01289210 -NCT01280227 -NCT01289223 -NCT01280292 -NCT01289288 -NCT01280318 -NCT01289314 -NCT01280461 -NCT01289327 -NCT01280474 -NCT01289353 -NCT01280487 -NCT01289457 -NCT01280500 -NCT01289470 -NCT01280526 -NCT01289522 -NCT01280552 -NCT01289574 -NCT01280565 -NCT01289613 -NCT01280643 -NCT01289652 -NCT01280695 -NCT01289678 -NCT01280786 -NCT01289808 -NCT01280864 -NCT01289821 -NCT01280877 -NCT01289834 -NCT01280981 -NCT01289860 -NCT01280994 -NCT01289912 -NCT01281033 -NCT01290120 -NCT01281059 -NCT01290250 -NCT01281124 -NCT01290263 -NCT01281150 -NCT01290302 -NCT01281163 -NCT01290341 -NCT01281176 -NCT01290354 -NCT01281189 -NCT01290380 -NCT01281254 -NCT01290406 -NCT01281358 -NCT01290471 -NCT01281488 -NCT01290523 -NCT01281514 -NCT01290536 -NCT01281592 -NCT01290549 -NCT01281696 -NCT01290562 -NCT01281709 -NCT01290588 -NCT01281722 -NCT01290640 -NCT01281748 -NCT01290692 -NCT01281761 -NCT01290718 -NCT01281787 -NCT01287078 -NCT01287104 -NCT01287130 -NCT01287143 -NCT01287286 -NCT01287351 -NCT01287390 -NCT01287429 -NCT01287520 -NCT01287546 -NCT01287585 -NCT01287598 -NCT01287624 -NCT01287637 -NCT01287663 -NCT01287702 -NCT01287728 -NCT01287741 -NCT01287754 -NCT01287962 -NCT01288053 -NCT01288092 -NCT01288222 -NCT01288235 -NCT01288261 -NCT01288287 -NCT01288339 -NCT01288352 -NCT01288378 -NCT01288430 -NCT01288443 -NCT01288534 -NCT01288573 -NCT01288612 -NCT01288651 -NCT01288742 -NCT01288768 -NCT01288833 -NCT01288911 -NCT01288989 -NCT01289015 -NCT01289028 -NCT01289041 -NCT01289067 -NCT01289093 -NCT01290757 -NCT01281800 -NCT01284556 -NCT01281826 -NCT01284504 -NCT01281852 -NCT01284647 -NCT01281865 -NCT01284673 -NCT01281904 -NCT01284829 -NCT01281917 -NCT01284855 -NCT01281943 -NCT01284894 -NCT01281956 -NCT01284920 -NCT01282151 -NCT01284933 -NCT01282164 -NCT01284946 -NCT01282216 -NCT01284985 -NCT01282268 -NCT01285037 -NCT01282333 -NCT01285063 -NCT01282398 -NCT01285089 -NCT01282424 -NCT01285102 -NCT01282437 -NCT01285193 -NCT01282450 -NCT01285219 -NCT01282463 -NCT01285245 -NCT01282476 -NCT01285310 -NCT01282502 -NCT01285349 -NCT01282580 -NCT01285414 -NCT01282593 -NCT01285427 -NCT01282697 -NCT01285440 -NCT01283009 -NCT01285453 -NCT01283035 -NCT01285466 -NCT01283048 -NCT01285557 -NCT01283061 -NCT01285583 -NCT01283152 -NCT01285609 -NCT01283178 -NCT01285635 -NCT01283204 -NCT01285648 -NCT01283217 -NCT01285674 -NCT01283269 -NCT01285765 -NCT01283321 -NCT01285778 -NCT01283334 -NCT01286012 -NCT01283373 -NCT01286064 -NCT01283386 -NCT01286077 -NCT01283503 -NCT01286168 -NCT01283516 -NCT01286181 -NCT01283542 -NCT01286194 -NCT01283646 -NCT01286272 -NCT01283698 -NCT01286324 -NCT01283763 -NCT01286389 -NCT01283776 -NCT01286467 -NCT01283789 -NCT01286480 -NCT01283815 -NCT01286610 -NCT01283945 -NCT01286675 -NCT01283958 -NCT01286727 -NCT01283997 -NCT01286753 -NCT01284075 -NCT01286766 -NCT01284192 -NCT01286818 -NCT01284205 -NCT01286883 -NCT01284231 -NCT01286974 -NCT01284335 -NCT01286987 -NCT01284348 -NCT01287013 -NCT01284413 -NCT01287052 -NCT01284426 -NCT01309477 -NCT01291901 -NCT01306942 -NCT01291927 -NCT01307007 -NCT01292031 -NCT01307020 -NCT01292044 -NCT01307085 -NCT01292057 -NCT01307267 -NCT01292083 -NCT01307397 -NCT01292135 -NCT01307449 -NCT01292161 -NCT01307462 -NCT01292187 -NCT01307501 -NCT01292200 -NCT01307540 -NCT01292213 -NCT01307579 -NCT01292291 -NCT01307592 -NCT01292330 -NCT01307605 -NCT01292356 -NCT01307618 -NCT01292408 -NCT01307631 -NCT01292486 -NCT01307722 -NCT01292603 -NCT01307813 -NCT01292655 -NCT01307878 -NCT01292668 -NCT01307891 -NCT01292681 -NCT01307904 -NCT01292733 -NCT01307930 -NCT01292863 -NCT01307956 -NCT01292889 -NCT01307982 -NCT01293006 -NCT01308034 -NCT01293032 -NCT01308086 -NCT01293045 -NCT01308112 -NCT01293084 -NCT01308190 -NCT01293110 -NCT01308294 -NCT01293162 -NCT01308320 -NCT01293279 -NCT01308346 -NCT01293292 -NCT01308463 -NCT01293318 -NCT01308489 -NCT01293448 -NCT01308567 -NCT01293539 -NCT01308580 -NCT01293552 -NCT01308632 -NCT01293630 -NCT01308645 -NCT01293682 -NCT01308684 -NCT01293721 -NCT01308723 -NCT01293942 -NCT01308762 -NCT01293968 -NCT01308775 -NCT01294046 -NCT01308827 -NCT01294072 -NCT01308840 -NCT01294150 -NCT01308905 -NCT01294202 -NCT01308944 -NCT01294293 -NCT01309048 -NCT01294306 -NCT01309126 -NCT01294319 -NCT01309230 -NCT01294579 -NCT01309334 -NCT01294618 -NCT01309386 -NCT01294670 -NCT01309399 -NCT01294735 -NCT01309412 -NCT01294787 -NCT01306383 -NCT01306448 -NCT01306500 -NCT01306591 -NCT01306604 -NCT01306630 -NCT01306643 -NCT01306656 -NCT01306721 -NCT01309425 -NCT01294800 -NCT01297647 -NCT01294826 -NCT01297543 -NCT01294852 -NCT01297725 -NCT01294865 -NCT01297764 -NCT01294917 -NCT01297777 -NCT01295047 -NCT01297790 -NCT01295060 -NCT01297881 -NCT01295086 -NCT01297946 -NCT01295138 -NCT01297998 -NCT01295229 -NCT01298011 -NCT01295307 -NCT01298167 -NCT01295385 -NCT01298193 -NCT01295463 -NCT01298284 -NCT01295502 -NCT01298323 -NCT01295593 -NCT01298336 -NCT01295632 -NCT01298375 -NCT01295645 -NCT01304407 -NCT01295697 -NCT01304446 -NCT01295710 -NCT01304459 -NCT01295723 -NCT01304485 -NCT01295762 -NCT01304524 -NCT01295801 -NCT01304602 -NCT01295827 -NCT01304745 -NCT01295905 -NCT01304758 -NCT01295918 -NCT01304784 -NCT01295931 -NCT01304797 -NCT01295944 -NCT01304849 -NCT01295957 -NCT01304875 -NCT01295970 -NCT01304927 -NCT01296022 -NCT01304940 -NCT01296035 -NCT01305044 -NCT01296087 -NCT01305122 -NCT01296113 -NCT01305148 -NCT01296139 -NCT01305200 -NCT01296178 -NCT01305213 -NCT01296204 -NCT01305447 -NCT01296217 -NCT01305460 -NCT01296243 -NCT01305499 -NCT01296256 -NCT01305512 -NCT01296503 -NCT01305655 -NCT01296529 -NCT01305681 -NCT01296555 -NCT01305759 -NCT01296568 -NCT01305772 -NCT01296581 -NCT01305915 -NCT01296659 -NCT01305941 -NCT01296672 -NCT01305967 -NCT01296763 -NCT01305980 -NCT01296815 -NCT01305993 -NCT01296893 -NCT01306019 -NCT01296932 -NCT01306032 -NCT01297023 -NCT01306045 -NCT01297244 -NCT01306058 -NCT01297270 -NCT01306084 -NCT01297452 -NCT01306266 -NCT01297491 -NCT01306331 -NCT01297530 -NCT01306370 -NCT01298401 -NCT01301716 -NCT01298570 -NCT01301703 -NCT01298596 -NCT01301729 -NCT01298713 -NCT01301755 -NCT01298765 -NCT01301781 -NCT01298882 -NCT01301807 -NCT01298921 -NCT01301820 -NCT01298999 -NCT01301911 -NCT01299012 -NCT01301963 -NCT01299038 -NCT01302002 -NCT01299090 -NCT01302041 -NCT01299220 -NCT01302106 -NCT01299415 -NCT01302353 -NCT01299493 -NCT01302366 -NCT01299623 -NCT01302379 -NCT01299636 -NCT01302392 -NCT01299701 -NCT01302405 -NCT01299714 -NCT01302496 -NCT01299883 -NCT01302509 -NCT01299948 -NCT01302535 -NCT01299987 -NCT01302561 -NCT01300026 -NCT01302613 -NCT01300104 -NCT01302756 -NCT01300143 -NCT01302769 -NCT01300156 -NCT01302808 -NCT01300182 -NCT01302821 -NCT01300221 -NCT01302834 -NCT01300247 -NCT01302886 -NCT01300299 -NCT01302925 -NCT01300351 -NCT01303029 -NCT01300533 -NCT01303094 -NCT01300546 -NCT01303159 -NCT01300572 -NCT01303172 -NCT01300585 -NCT01303211 -NCT01300611 -NCT01303224 -NCT01300637 -NCT01303328 -NCT01300793 -NCT01303341 -NCT01300858 -NCT01303380 -NCT01300923 -NCT01303419 -NCT01300949 -NCT01303497 -NCT01300962 -NCT01303679 -NCT01300975 -NCT01303705 -NCT01301040 -NCT01303757 -NCT01301144 -NCT01303796 -NCT01301183 -NCT01303822 -NCT01301235 -NCT01303835 -NCT01301248 -NCT01303887 -NCT01301391 -NCT01303926 -NCT01301417 -NCT01303965 -NCT01301430 -NCT01303991 -NCT01301469 -NCT01304017 -NCT01301495 -NCT01304121 -NCT01301560 -NCT01304160 -NCT01301612 -NCT01304251 -NCT01301677 -NCT01304303 -NCT01301690 -NCT01326260 -NCT01321034 -NCT01323920 -NCT01321242 -NCT01323855 -NCT01321281 -NCT01323933 -NCT01321346 -NCT01323985 -NCT01321424 -NCT01324037 -NCT01321437 -NCT01324063 -NCT01321541 -NCT01324076 -NCT01321554 -NCT01324102 -NCT01321619 -NCT01324115 -NCT01321658 -NCT01324141 -NCT01321684 -NCT01324180 -NCT01321697 -NCT01324284 -NCT01321736 -NCT01324310 -NCT01321775 -NCT01324323 -NCT01321827 -NCT01324479 -NCT01321879 -NCT01324492 -NCT01321957 -NCT01324570 -NCT01321970 -NCT01324583 -NCT01321996 -NCT01324596 -NCT01322022 -NCT01324635 -NCT01322100 -NCT01324739 -NCT01322126 -NCT01324791 -NCT01322152 -NCT01324830 -NCT01322165 -NCT01324856 -NCT01322178 -NCT01324882 -NCT01322191 -NCT01324921 -NCT01322243 -NCT01324947 -NCT01322269 -NCT01324960 -NCT01322334 -NCT01324986 -NCT01322386 -NCT01325155 -NCT01322438 -NCT01325207 -NCT01322490 -NCT01325233 -NCT01322672 -NCT01325259 -NCT01322763 -NCT01325311 -NCT01322776 -NCT01325428 -NCT01322789 -NCT01325441 -NCT01322802 -NCT01325454 -NCT01322815 -NCT01325480 -NCT01322854 -NCT01325558 -NCT01322867 -NCT01325571 -NCT01323010 -NCT01325584 -NCT01323062 -NCT01325688 -NCT01323140 -NCT01325701 -NCT01323218 -NCT01325740 -NCT01323231 -NCT01325753 -NCT01323335 -NCT01325818 -NCT01323361 -NCT01325844 -NCT01323400 -NCT01325857 -NCT01323517 -NCT01325909 -NCT01323530 -NCT01325961 -NCT01323543 -NCT01326000 -NCT01323608 -NCT01326065 -NCT01323660 -NCT01326078 -NCT01323673 -NCT01326104 -NCT01323712 -NCT01326195 -NCT01323751 -NCT01332344 -NCT01326312 -NCT01329549 -NCT01326468 -NCT01329484 -NCT01326481 -NCT01329562 -NCT01326559 -NCT01329627 -NCT01326637 -NCT01329640 -NCT01326663 -NCT01329653 -NCT01326676 -NCT01329692 -NCT01326689 -NCT01329718 -NCT01326702 -NCT01329731 -NCT01326728 -NCT01329770 -NCT01326741 -NCT01329809 -NCT01326767 -NCT01329900 -NCT01326845 -NCT01329926 -NCT01326871 -NCT01330173 -NCT01326923 -NCT01330381 -NCT01326936 -NCT01330446 -NCT01326949 -NCT01330459 -NCT01327053 -NCT01330511 -NCT01327066 -NCT01330550 -NCT01327222 -NCT01330667 -NCT01327300 -NCT01330732 -NCT01327313 -NCT01330823 -NCT01327521 -NCT01330966 -NCT01327599 -NCT01331018 -NCT01327612 -NCT01331083 -NCT01327742 -NCT01331135 -NCT01327768 -NCT01331187 -NCT01327781 -NCT01331200 -NCT01327807 -NCT01331213 -NCT01327885 -NCT01331239 -NCT01327976 -NCT01331291 -NCT01327989 -NCT01331421 -NCT01328028 -NCT01331434 -NCT01328054 -NCT01331447 -NCT01328106 -NCT01331525 -NCT01328171 -NCT01331590 -NCT01328197 -NCT01331603 -NCT01328236 -NCT01331616 -NCT01328418 -NCT01331629 -NCT01328444 -NCT01331642 -NCT01328457 -NCT01331746 -NCT01328483 -NCT01331772 -NCT01328535 -NCT01331824 -NCT01328574 -NCT01331863 -NCT01328613 -NCT01331915 -NCT01328626 -NCT01331928 -NCT01328769 -NCT01331941 -NCT01328782 -NCT01331954 -NCT01328860 -NCT01332006 -NCT01328951 -NCT01332032 -NCT01328990 -NCT01332110 -NCT01329068 -NCT01332240 -NCT01329107 -NCT01332266 -NCT01329250 -NCT01332279 -NCT01329289 -NCT01332331 -NCT01329354 -NCT01337050 -NCT01332357 -NCT01334242 -NCT01332396 -NCT01334177 -NCT01332526 -NCT01334320 -NCT01332539 -NCT01334476 -NCT01332552 -NCT01334502 -NCT01332578 -NCT01334515 -NCT01332604 -NCT01334697 -NCT01332617 -NCT01334710 -NCT01332630 -NCT01334723 -NCT01332656 -NCT01334801 -NCT01332669 -NCT01334814 -NCT01332682 -NCT01334983 -NCT01332695 -NCT01334996 -NCT01332721 -NCT01335009 -NCT01332760 -NCT01335074 -NCT01332773 -NCT01335152 -NCT01332786 -NCT01335204 -NCT01332825 -NCT01335256 -NCT01332864 -NCT01335269 -NCT01332916 -NCT01335386 -NCT01332929 -NCT01335399 -NCT01332968 -NCT01335490 -NCT01333033 -NCT01335503 -NCT01333046 -NCT01335646 -NCT01333085 -NCT01335685 -NCT01333124 -NCT01335763 -NCT01333137 -NCT01335776 -NCT01333189 -NCT01335802 -NCT01333254 -NCT01335893 -NCT01333267 -NCT01335906 -NCT01333293 -NCT01335945 -NCT01333332 -NCT01335958 -NCT01333384 -NCT01335997 -NCT01333423 -NCT01336010 -NCT01333449 -NCT01336049 -NCT01333462 -NCT01336062 -NCT01333475 -NCT01336140 -NCT01333527 -NCT01336192 -NCT01333605 -NCT01336257 -NCT01333631 -NCT01336283 -NCT01333696 -NCT01336452 -NCT01333709 -NCT01336543 -NCT01333748 -NCT01336582 -NCT01333800 -NCT01336634 -NCT01333826 -NCT01336647 -NCT01333852 -NCT01336660 -NCT01333917 -NCT01336699 -NCT01333995 -NCT01336712 -NCT01334008 -NCT01336764 -NCT01334021 -NCT01336803 -NCT01334047 -NCT01336842 -NCT01334073 -NCT01336894 -NCT01334086 -NCT01336920 -NCT01334099 -NCT01336933 -NCT01334112 -NCT01336985 -NCT01334138 -NCT01342965 -NCT01337076 -NCT01339988 -NCT01337089 -NCT01339910 -NCT01337102 -NCT01340040 -NCT01337115 -NCT01340105 -NCT01337154 -NCT01340300 -NCT01337297 -NCT01340326 -NCT01337310 -NCT01340417 -NCT01337401 -NCT01340430 -NCT01337479 -NCT01340482 -NCT01337492 -NCT01340495 -NCT01337518 -NCT01340508 -NCT01337544 -NCT01340547 -NCT01337752 -NCT01340599 -NCT01337765 -NCT01340729 -NCT01337778 -NCT01340755 -NCT01337804 -NCT01340794 -NCT01337999 -NCT01340833 -NCT01338012 -NCT01340846 -NCT01338051 -NCT01341080 -NCT01338077 -NCT01341158 -NCT01338298 -NCT01341262 -NCT01338389 -NCT01341288 -NCT01338402 -NCT01341301 -NCT01338519 -NCT01341314 -NCT01338558 -NCT01341366 -NCT01338584 -NCT01341405 -NCT01338597 -NCT01341457 -NCT01338649 -NCT01341483 -NCT01338688 -NCT01341496 -NCT01338753 -NCT01341535 -NCT01338766 -NCT01341652 -NCT01338792 -NCT01341756 -NCT01338831 -NCT01341834 -NCT01338857 -NCT01341847 -NCT01338948 -NCT01341886 -NCT01338974 -NCT01342068 -NCT01338987 -NCT01342120 -NCT01339000 -NCT01342146 -NCT01339039 -NCT01342172 -NCT01339052 -NCT01342224 -NCT01339104 -NCT01342237 -NCT01339143 -NCT01342289 -NCT01339156 -NCT01342302 -NCT01339273 -NCT01342315 -NCT01339325 -NCT01342354 -NCT01339338 -NCT01342367 -NCT01339351 -NCT01342510 -NCT01339442 -NCT01342627 -NCT01339572 -NCT01342653 -NCT01339611 -NCT01342679 -NCT01339650 -NCT01342692 -NCT01339663 -NCT01342705 -NCT01339754 -NCT01342757 -NCT01339780 -NCT01342770 -NCT01339845 -NCT01342887 -NCT01339871 -NCT01349322 -NCT01343004 -NCT01346475 -NCT01343043 -NCT01346410 -NCT01343121 -NCT01346527 -NCT01343173 -NCT01346540 -NCT01343277 -NCT01346618 -NCT01343303 -NCT01346670 -NCT01343368 -NCT01346761 -NCT01343459 -NCT01346787 -NCT01343680 -NCT01346839 -NCT01343940 -NCT01346852 -NCT01343966 -NCT01346904 -NCT01344005 -NCT01346917 -NCT01344018 -NCT01347034 -NCT01344031 -NCT01347060 -NCT01344096 -NCT01347229 -NCT01344304 -NCT01347281 -NCT01344317 -NCT01347307 -NCT01344356 -NCT01347320 -NCT01344408 -NCT01347333 -NCT01344421 -NCT01347424 -NCT01344538 -NCT01347567 -NCT01344564 -NCT01347645 -NCT01344798 -NCT01347697 -NCT01344824 -NCT01347736 -NCT01344876 -NCT01347788 -NCT01344902 -NCT01347866 -NCT01344967 -NCT01347905 -NCT01344993 -NCT01347918 -NCT01345006 -NCT01347970 -NCT01345019 -NCT01347996 -NCT01345084 -NCT01348009 -NCT01345136 -NCT01348048 -NCT01345175 -NCT01348113 -NCT01345188 -NCT01348126 -NCT01345201 -NCT01348217 -NCT01345266 -NCT01348256 -NCT01345357 -NCT01348347 -NCT01345383 -NCT01348412 -NCT01345448 -NCT01348451 -NCT01345526 -NCT01348477 -NCT01345539 -NCT01348490 -NCT01345552 -NCT01348503 -NCT01345643 -NCT01348607 -NCT01345669 -NCT01348620 -NCT01345682 -NCT01348633 -NCT01345838 -NCT01348646 -NCT01345851 -NCT01348672 -NCT01345903 -NCT01348919 -NCT01345929 -NCT01348997 -NCT01346020 -NCT01349036 -NCT01346059 -NCT01349049 -NCT01346085 -NCT01349088 -NCT01346124 -NCT01349205 -NCT01346150 -NCT01349283 -NCT01346267 -NCT01349296 -NCT01346358 -NCT01355445 -NCT01349361 -NCT01352117 -NCT01349413 -NCT01352091 -NCT01349517 -NCT01352208 -NCT01349543 -NCT01352273 -NCT01349556 -NCT01352286 -NCT01349569 -NCT01352312 -NCT01349634 -NCT01352338 -NCT01349647 -NCT01352390 -NCT01349660 -NCT01352494 -NCT01349738 -NCT01352520 -NCT01349842 -NCT01352572 -NCT01349881 -NCT01352598 -NCT01349933 -NCT01352650 -NCT01349959 -NCT01352676 -NCT01349972 -NCT01352728 -NCT01349998 -NCT01352819 -NCT01350089 -NCT01352884 -NCT01350115 -NCT01352949 -NCT01350206 -NCT01352962 -NCT01350232 -NCT01353209 -NCT01350245 -NCT01353222 -NCT01350258 -NCT01353235 -NCT01350336 -NCT01353352 -NCT01350401 -NCT01353430 -NCT01350505 -NCT01353482 -NCT01350557 -NCT01353573 -NCT01350583 -NCT01353625 -NCT01350648 -NCT01353664 -NCT01350674 -NCT01353781 -NCT01350817 -NCT01353820 -NCT01350830 -NCT01353976 -NCT01350908 -NCT01354041 -NCT01350947 -NCT01354119 -NCT01351038 -NCT01354145 -NCT01351103 -NCT01354171 -NCT01351116 -NCT01354249 -NCT01351194 -NCT01354262 -NCT01351220 -NCT01354314 -NCT01351337 -NCT01354379 -NCT01351376 -NCT01354392 -NCT01351389 -NCT01354431 -NCT01351415 -NCT01354457 -NCT01351519 -NCT01354522 -NCT01351532 -NCT01354613 -NCT01351597 -NCT01354639 -NCT01351623 -NCT01354795 -NCT01351688 -NCT01354860 -NCT01351714 -NCT01354912 -NCT01351831 -NCT01354951 -NCT01351844 -NCT01355107 -NCT01351870 -NCT01355120 -NCT01351883 -NCT01355159 -NCT01351896 -NCT01355172 -NCT01351909 -NCT01355302 -NCT01351935 -NCT01355393 -NCT01351987 -NCT01360125 -NCT01355458 -NCT01357772 -NCT01355471 -NCT01357733 -NCT01355484 -NCT01357837 -NCT01355497 -NCT01358019 -NCT01355523 -NCT01358032 -NCT01355562 -NCT01358045 -NCT01355679 -NCT01358058 -NCT01355705 -NCT01358071 -NCT01355744 -NCT01358084 -NCT01355783 -NCT01358110 -NCT01355796 -NCT01358136 -NCT01355913 -NCT01358149 -NCT01355926 -NCT01358201 -NCT01355965 -NCT01358227 -NCT01356017 -NCT01358240 -NCT01356030 -NCT01358253 -NCT01356043 -NCT01358331 -NCT01356056 -NCT01358474 -NCT01356121 -NCT01358500 -NCT01356173 -NCT01358526 -NCT01356212 -NCT01358539 -NCT01356251 -NCT01358708 -NCT01356264 -NCT01358721 -NCT01356290 -NCT01358734 -NCT01356303 -NCT01358747 -NCT01356316 -NCT01358799 -NCT01356329 -NCT01358812 -NCT01356342 -NCT01358851 -NCT01356368 -NCT01358877 -NCT01356433 -NCT01358903 -NCT01356485 -NCT01358968 -NCT01356602 -NCT01359007 -NCT01356628 -NCT01359046 -NCT01356641 -NCT01359072 -NCT01356680 -NCT01359098 -NCT01356693 -NCT01359124 -NCT01356771 -NCT01359189 -NCT01356823 -NCT01359267 -NCT01356862 -NCT01359397 -NCT01356875 -NCT01359410 -NCT01357018 -NCT01359436 -NCT01357161 -NCT01359501 -NCT01357239 -NCT01359592 -NCT01357278 -NCT01359644 -NCT01357317 -NCT01359657 -NCT01357330 -NCT01359670 -NCT01357343 -NCT01359696 -NCT01357382 -NCT01359735 -NCT01357395 -NCT01359839 -NCT01357447 -NCT01359891 -NCT01357473 -NCT01359917 -NCT01357486 -NCT01359956 -NCT01357512 -NCT01359982 -NCT01357525 -NCT01360086 -NCT01357564 -NCT01360099 -NCT01357655 -NCT01366677 -NCT01360177 -NCT01362790 -NCT01360268 -NCT01362777 -NCT01360450 -NCT01362803 -NCT01360515 -NCT01363024 -NCT01360541 -NCT01363128 -NCT01360554 -NCT01363193 -NCT01360593 -NCT01363206 -NCT01360606 -NCT01363232 -NCT01360619 -NCT01363297 -NCT01360684 -NCT01363388 -NCT01360697 -NCT01363466 -NCT01360827 -NCT01363557 -NCT01360840 -NCT01363570 -NCT01360853 -NCT01363596 -NCT01360892 -NCT01363817 -NCT01360905 -NCT01363843 -NCT01360918 -NCT01363947 -NCT01360944 -NCT01363986 -NCT01360957 -NCT01364012 -NCT01360970 -NCT01364051 -NCT01360996 -NCT01364064 -NCT01361035 -NCT01364077 -NCT01361087 -NCT01364090 -NCT01361100 -NCT01364324 -NCT01361113 -NCT01364337 -NCT01361139 -NCT01364363 -NCT01361178 -NCT01364376 -NCT01361191 -NCT01364389 -NCT01361334 -NCT01364415 -NCT01361464 -NCT01364454 -NCT01361529 -NCT01364493 -NCT01361581 -NCT01364636 -NCT01361607 -NCT01364727 -NCT01361711 -NCT01364805 -NCT01361724 -NCT01364844 -NCT01361750 -NCT01364909 -NCT01361880 -NCT01365130 -NCT01361932 -NCT01365143 -NCT01361945 -NCT01365156 -NCT01362010 -NCT01365169 -NCT01362101 -NCT01365260 -NCT01362127 -NCT01365351 -NCT01362140 -NCT01365442 -NCT01362296 -NCT01365559 -NCT01362348 -NCT01365585 -NCT01362361 -NCT01365611 -NCT01362374 -NCT01365715 -NCT01362400 -NCT01365845 -NCT01362413 -NCT01365910 -NCT01362452 -NCT01366014 -NCT01362530 -NCT01366027 -NCT01362569 -NCT01366118 -NCT01362582 -NCT01366131 -NCT01362608 -NCT01366144 -NCT01362660 -NCT01366612 -NCT01362712 -NCT01372904 -NCT01366833 -NCT01370239 -NCT01366898 -NCT01370213 -NCT01367002 -NCT01370278 -NCT01367015 -NCT01370369 -NCT01367028 -NCT01370434 -NCT01367106 -NCT01370512 -NCT01367275 -NCT01370525 -NCT01367288 -NCT01370538 -NCT01367301 -NCT01370642 -NCT01367353 -NCT01370694 -NCT01367366 -NCT01370772 -NCT01367418 -NCT01370876 -NCT01367626 -NCT01370928 -NCT01367639 -NCT01370954 -NCT01367652 -NCT01371071 -NCT01367665 -NCT01371149 -NCT01367782 -NCT01371201 -NCT01367834 -NCT01371227 -NCT01367886 -NCT01371240 -NCT01367990 -NCT01371305 -NCT01368003 -NCT01371487 -NCT01368055 -NCT01371513 -NCT01368094 -NCT01371526 -NCT01368107 -NCT01371552 -NCT01368133 -NCT01371565 -NCT01368263 -NCT01371591 -NCT01368276 -NCT01371630 -NCT01368341 -NCT01371643 -NCT01368380 -NCT01371656 -NCT01368419 -NCT01371773 -NCT01368523 -NCT01371825 -NCT01368575 -NCT01371838 -NCT01368588 -NCT01371877 -NCT01368601 -NCT01371981 -NCT01368614 -NCT01372007 -NCT01368731 -NCT01372111 -NCT01368757 -NCT01372202 -NCT01368835 -NCT01372241 -NCT01368848 -NCT01372319 -NCT01369121 -NCT01372332 -NCT01369303 -NCT01372384 -NCT01369368 -NCT01372423 -NCT01369407 -NCT01372436 -NCT01369420 -NCT01372475 -NCT01369433 -NCT01372527 -NCT01369576 -NCT01372540 -NCT01369641 -NCT01372566 -NCT01369849 -NCT01372579 -NCT01369875 -NCT01372618 -NCT01369888 -NCT01372631 -NCT01369966 -NCT01372644 -NCT01370057 -NCT01372696 -NCT01370070 -NCT01372735 -NCT01370083 -NCT01372774 -NCT01370096 -NCT01372813 -NCT01370161 -NCT01378481 -NCT01372943 -NCT01375816 -NCT01373021 -NCT01375803 -NCT01373034 -NCT01375829 -NCT01373047 -NCT01375842 -NCT01373125 -NCT01375920 -NCT01373164 -NCT01375959 -NCT01373229 -NCT01375972 -NCT01373294 -NCT01376024 -NCT01373320 -NCT01376076 -NCT01373346 -NCT01376115 -NCT01373372 -NCT01376193 -NCT01373398 -NCT01376232 -NCT01373411 -NCT01376310 -NCT01373450 -NCT01376349 -NCT01373463 -NCT01376401 -NCT01373515 -NCT01376414 -NCT01373528 -NCT01376427 -NCT01373580 -NCT01376453 -NCT01373671 -NCT01376466 -NCT01373710 -NCT01376505 -NCT01373723 -NCT01376700 -NCT01373736 -NCT01376713 -NCT01373970 -NCT01376752 -NCT01374087 -NCT01376817 -NCT01374100 -NCT01376830 -NCT01374139 -NCT01376856 -NCT01374152 -NCT01376934 -NCT01374165 -NCT01376960 -NCT01374191 -NCT01377025 -NCT01374204 -NCT01377103 -NCT01374217 -NCT01377181 -NCT01374269 -NCT01377194 -NCT01374334 -NCT01377220 -NCT01374412 -NCT01377298 -NCT01374425 -NCT01377324 -NCT01374451 -NCT01377350 -NCT01374477 -NCT01377376 -NCT01374620 -NCT01377389 -NCT01374659 -NCT01377415 -NCT01374750 -NCT01377467 -NCT01374776 -NCT01377584 -NCT01374789 -NCT01377701 -NCT01374841 -NCT01377753 -NCT01374880 -NCT01377766 -NCT01374906 -NCT01378026 -NCT01375023 -NCT01378039 -NCT01375062 -NCT01378091 -NCT01375075 -NCT01378117 -NCT01375114 -NCT01378143 -NCT01375322 -NCT01378169 -NCT01375543 -NCT01378182 -NCT01375569 -NCT01378195 -NCT01375608 -NCT01378299 -NCT01375660 -NCT01378377 -NCT01375699 -NCT01378416 -NCT01375738 -NCT01384708 -NCT01378520 -NCT01381861 -NCT01378533 -NCT01381822 -NCT01378598 -NCT01381874 -NCT01378676 -NCT01381978 -NCT01378819 -NCT01382030 -NCT01378871 -NCT01382095 -NCT01378962 -NCT01382134 -NCT01378975 -NCT01382147 -NCT01379092 -NCT01382212 -NCT01379170 -NCT01382225 -NCT01379183 -NCT01382407 -NCT01379274 -NCT01382420 -NCT01379287 -NCT01382537 -NCT01379339 -NCT01382615 -NCT01379482 -NCT01382641 -NCT01379521 -NCT01382667 -NCT01379534 -NCT01382706 -NCT01379690 -NCT01382745 -NCT01379742 -NCT01382862 -NCT01379807 -NCT01382953 -NCT01379976 -NCT01383044 -NCT01379989 -NCT01383109 -NCT01380015 -NCT01383135 -NCT01380067 -NCT01383148 -NCT01380106 -NCT01383174 -NCT01380119 -NCT01383226 -NCT01380145 -NCT01383343 -NCT01380171 -NCT01383408 -NCT01380184 -NCT01383447 -NCT01380223 -NCT01383460 -NCT01380275 -NCT01383538 -NCT01380301 -NCT01383564 -NCT01380314 -NCT01383668 -NCT01380353 -NCT01383707 -NCT01380600 -NCT01383733 -NCT01380730 -NCT01383759 -NCT01380756 -NCT01383772 -NCT01380769 -NCT01383902 -NCT01380782 -NCT01383928 -NCT01380795 -NCT01383941 -NCT01380808 -NCT01383954 -NCT01380899 -NCT01384201 -NCT01380964 -NCT01384227 -NCT01381094 -NCT01384253 -NCT01381211 -NCT01384266 -NCT01381263 -NCT01384331 -NCT01381315 -NCT01384357 -NCT01381341 -NCT01384370 -NCT01381354 -NCT01384396 -NCT01381510 -NCT01384409 -NCT01381549 -NCT01384513 -NCT01381627 -NCT01384565 -NCT01381692 -NCT01384617 -NCT01381718 -NCT01384669 -NCT01381757 -NCT01384695 -NCT01381809 -NCT01390207 -NCT01384721 -NCT01387061 -NCT01384799 -NCT01386996 -NCT01384851 -NCT01387204 -NCT01384864 -NCT01387230 -NCT01384877 -NCT01387256 -NCT01384890 -NCT01387269 -NCT01384994 -NCT01387282 -NCT01385007 -NCT01387295 -NCT01385020 -NCT01387321 -NCT01385059 -NCT01387373 -NCT01385072 -NCT01387399 -NCT01385098 -NCT01387425 -NCT01385111 -NCT01387503 -NCT01385137 -NCT01387555 -NCT01385150 -NCT01387711 -NCT01385176 -NCT01387750 -NCT01385215 -NCT01387763 -NCT01385228 -NCT01387841 -NCT01385280 -NCT01387880 -NCT01385293 -NCT01387906 -NCT01385319 -NCT01387919 -NCT01385410 -NCT01387932 -NCT01385423 -NCT01387971 -NCT01385436 -NCT01387997 -NCT01385501 -NCT01388101 -NCT01385579 -NCT01388192 -NCT01385605 -NCT01388335 -NCT01385683 -NCT01388348 -NCT01385774 -NCT01388413 -NCT01385787 -NCT01388595 -NCT01385826 -NCT01388621 -NCT01385852 -NCT01388647 -NCT01385891 -NCT01388660 -NCT01385917 -NCT01388712 -NCT01385930 -NCT01388764 -NCT01385956 -NCT01388777 -NCT01386242 -NCT01388790 -NCT01386346 -NCT01388933 -NCT01386372 -NCT01388959 -NCT01386385 -NCT01388985 -NCT01386398 -NCT01389050 -NCT01386411 -NCT01389076 -NCT01386437 -NCT01389349 -NCT01386502 -NCT01389414 -NCT01386515 -NCT01389427 -NCT01386567 -NCT01389440 -NCT01386580 -NCT01389583 -NCT01386606 -NCT01389726 -NCT01386619 -NCT01389739 -NCT01386632 -NCT01389765 -NCT01386710 -NCT01389869 -NCT01386853 -NCT01389999 -NCT01386866 -NCT01390012 -NCT01386905 -NCT01390064 -NCT01386957 -NCT01390181 -NCT01386983 -NCT01395407 -NCT01390311 -NCT01392963 -NCT01390324 -NCT01392924 -NCT01390337 -NCT01392976 -NCT01390402 -NCT01392989 -NCT01390454 -NCT01393080 -NCT01390532 -NCT01393093 -NCT01390571 -NCT01393106 -NCT01390584 -NCT01393119 -NCT01390818 -NCT01393184 -NCT01390935 -NCT01393197 -NCT01390948 -NCT01393366 -NCT01391039 -NCT01393509 -NCT01391052 -NCT01393717 -NCT01391065 -NCT01393730 -NCT01391078 -NCT01393743 -NCT01391091 -NCT01393756 -NCT01391117 -NCT01393769 -NCT01391130 -NCT01393808 -NCT01391143 -NCT01393821 -NCT01391182 -NCT01393847 -NCT01391208 -NCT01393886 -NCT01391234 -NCT01393912 -NCT01391260 -NCT01393964 -NCT01391325 -NCT01393990 -NCT01391351 -NCT01394003 -NCT01391455 -NCT01394016 -NCT01391533 -NCT01394042 -NCT01391572 -NCT01394120 -NCT01391611 -NCT01394133 -NCT01391689 -NCT01394146 -NCT01391702 -NCT01394159 -NCT01391715 -NCT01394172 -NCT01391767 -NCT01394211 -NCT01391806 -NCT01394263 -NCT01391962 -NCT01394354 -NCT01392027 -NCT01394393 -NCT01392053 -NCT01394471 -NCT01392079 -NCT01394497 -NCT01392131 -NCT01394510 -NCT01392170 -NCT01394536 -NCT01392183 -NCT01394575 -NCT01392209 -NCT01394614 -NCT01392235 -NCT01394679 -NCT01392339 -NCT01394692 -NCT01392352 -NCT01394926 -NCT01392365 -NCT01394939 -NCT01392456 -NCT01394965 -NCT01392521 -NCT01394978 -NCT01392586 -NCT01394991 -NCT01392612 -NCT01395004 -NCT01392716 -NCT01395017 -NCT01392768 -NCT01395030 -NCT01392859 -NCT01395121 -NCT01392885 -NCT01395134 -NCT01392898 -NCT01395251 -NCT01392911 -NCT01401660 -NCT01395459 -NCT01398371 -NCT01395537 -NCT01398124 -NCT01395550 -NCT01398423 -NCT01395563 -NCT01398449 -NCT01395628 -NCT01398462 -NCT01395667 -NCT01398501 -NCT01395706 -NCT01398579 -NCT01395758 -NCT01398618 -NCT01395914 -NCT01398644 -NCT01396005 -NCT01398657 -NCT01396070 -NCT01399008 -NCT01396148 -NCT01399216 -NCT01396161 -NCT01399372 -NCT01396174 -NCT01399658 -NCT01396200 -NCT01399684 -NCT01396226 -NCT01399788 -NCT01396252 -NCT01399814 -NCT01396317 -NCT01399840 -NCT01396369 -NCT01399892 -NCT01396382 -NCT01399905 -NCT01396499 -NCT01399918 -NCT01396525 -NCT01399983 -NCT01396551 -NCT01400074 -NCT01396642 -NCT01400113 -NCT01396655 -NCT01400334 -NCT01396668 -NCT01400438 -NCT01396681 -NCT01400451 -NCT01396707 -NCT01400464 -NCT01396733 -NCT01400477 -NCT01396785 -NCT01400542 -NCT01396811 -NCT01400555 -NCT01396954 -NCT01400646 -NCT01397019 -NCT01400672 -NCT01397045 -NCT01400685 -NCT01397084 -NCT01400698 -NCT01397149 -NCT01400828 -NCT01397162 -NCT01400893 -NCT01397201 -NCT01400906 -NCT01397253 -NCT01400945 -NCT01397305 -NCT01400958 -NCT01397409 -NCT01401010 -NCT01397552 -NCT01401023 -NCT01397565 -NCT01401062 -NCT01397591 -NCT01401075 -NCT01397604 -NCT01401166 -NCT01397643 -NCT01401192 -NCT01397695 -NCT01401257 -NCT01397708 -NCT01401322 -NCT01397721 -NCT01401387 -NCT01397734 -NCT01401413 -NCT01397799 -NCT01401439 -NCT01397825 -NCT01401504 -NCT01397877 -NCT01401530 -NCT01397916 -NCT01401582 -NCT01397929 -NCT01401647 -NCT01398085 -NCT01418118 -NCT01401699 -NCT01416480 -NCT01401829 -NCT01416493 -NCT01401868 -NCT01416558 -NCT01401907 -NCT01416571 -NCT01401933 -NCT01416597 -NCT01401946 -NCT01416623 -NCT01401959 -NCT01416662 -NCT01402011 -NCT01416831 -NCT01402063 -NCT01416844 -NCT01402089 -NCT01416922 -NCT01402115 -NCT01416961 -NCT01402180 -NCT01416974 -NCT01402193 -NCT01417000 -NCT01402219 -NCT01417065 -NCT01402271 -NCT01417130 -NCT01402284 -NCT01417143 -NCT01402401 -NCT01417182 -NCT01402440 -NCT01417208 -NCT01402453 -NCT01417286 -NCT01402531 -NCT01417377 -NCT01402570 -NCT01417390 -NCT01402583 -NCT01417403 -NCT01402648 -NCT01417442 -NCT01402752 -NCT01417494 -NCT01402804 -NCT01417520 -NCT01402817 -NCT01417533 -NCT01402843 -NCT01417546 -NCT01402895 -NCT01417598 -NCT01402908 -NCT01417611 -NCT01402934 -NCT01417676 -NCT01403103 -NCT01417767 -NCT01403116 -NCT01417806 -NCT01403168 -NCT01417923 -NCT01403181 -NCT01417936 -NCT01403246 -NCT01417975 -NCT01403259 -NCT01418001 -NCT01403285 -NCT01414608 -NCT01414673 -NCT01414686 -NCT01414738 -NCT01414790 -NCT01414803 -NCT01414855 -NCT01414868 -NCT01415011 -NCT01415050 -NCT01415063 -NCT01415089 -NCT01415115 -NCT01415193 -NCT01415297 -NCT01415336 -NCT01415375 -NCT01415427 -NCT01415479 -NCT01415648 -NCT01415674 -NCT01415700 -NCT01415713 -NCT01415752 -NCT01415765 -NCT01415817 -NCT01415830 -NCT01415856 -NCT01415869 -NCT01415882 -NCT01415908 -NCT01415921 -NCT01415947 -NCT01415960 -NCT01415986 -NCT01416038 -NCT01416077 -NCT01416168 -NCT01416181 -NCT01416246 -NCT01416337 -NCT01416389 -NCT01416428 -NCT01418079 -NCT01403311 -NCT01406210 -NCT01403324 -NCT01406119 -NCT01403402 -NCT01406249 -NCT01403415 -NCT01406275 -NCT01403532 -NCT01406288 -NCT01403571 -NCT01406314 -NCT01403610 -NCT01406353 -NCT01403636 -NCT01406509 -NCT01403675 -NCT01406548 -NCT01403740 -NCT01406574 -NCT01403779 -NCT01406613 -NCT01403870 -NCT01406639 -NCT01403883 -NCT01406769 -NCT01403896 -NCT01406951 -NCT01403948 -NCT01406990 -NCT01403974 -NCT01407107 -NCT01404091 -NCT01407120 -NCT01404104 -NCT01407198 -NCT01404156 -NCT01407263 -NCT01404247 -NCT01407341 -NCT01404260 -NCT01407432 -NCT01404312 -NCT01407562 -NCT01404377 -NCT01407692 -NCT01404390 -NCT01407757 -NCT01404520 -NCT01407796 -NCT01404533 -NCT01407822 -NCT01404611 -NCT01407848 -NCT01404650 -NCT01407978 -NCT01404702 -NCT01408004 -NCT01404741 -NCT01408030 -NCT01404754 -NCT01408043 -NCT01404832 -NCT01408108 -NCT01404884 -NCT01408121 -NCT01404897 -NCT01408160 -NCT01404936 -NCT01408212 -NCT01404949 -NCT01408407 -NCT01405079 -NCT01408472 -NCT01405144 -NCT01408498 -NCT01405222 -NCT01408563 -NCT01405235 -NCT01408615 -NCT01405313 -NCT01408706 -NCT01405391 -NCT01408732 -NCT01405417 -NCT01408784 -NCT01405430 -NCT01408836 -NCT01405469 -NCT01408966 -NCT01405560 -NCT01408992 -NCT01405573 -NCT01409005 -NCT01405586 -NCT01409018 -NCT01405638 -NCT01409031 -NCT01405768 -NCT01409122 -NCT01405781 -NCT01409135 -NCT01405807 -NCT01409148 -NCT01405820 -NCT01409161 -NCT01405846 -NCT01409174 -NCT01405937 -NCT01409187 -NCT01406106 -NCT01414556 -NCT01409200 -NCT01411995 -NCT01409226 -NCT01411904 -NCT01409343 -NCT01412047 -NCT01409356 -NCT01412177 -NCT01409382 -NCT01412229 -NCT01409460 -NCT01412242 -NCT01409473 -NCT01412294 -NCT01409499 -NCT01412307 -NCT01409551 -NCT01412424 -NCT01409720 -NCT01412489 -NCT01409733 -NCT01412515 -NCT01409746 -NCT01412788 -NCT01409811 -NCT01412853 -NCT01409837 -NCT01412879 -NCT01409876 -NCT01412892 -NCT01409902 -NCT01412918 -NCT01409915 -NCT01412957 -NCT01410045 -NCT01413022 -NCT01410097 -NCT01413074 -NCT01410214 -NCT01413087 -NCT01410227 -NCT01413113 -NCT01410344 -NCT01413152 -NCT01410370 -NCT01413178 -NCT01410409 -NCT01413191 -NCT01410513 -NCT01413256 -NCT01410526 -NCT01413269 -NCT01410565 -NCT01413295 -NCT01410578 -NCT01413386 -NCT01410656 -NCT01413438 -NCT01410708 -NCT01413451 -NCT01410734 -NCT01413503 -NCT01410760 -NCT01413555 -NCT01410825 -NCT01413568 -NCT01410916 -NCT01413581 -NCT01410929 -NCT01413607 -NCT01410942 -NCT01413633 -NCT01410955 -NCT01413646 -NCT01410968 -NCT01413698 -NCT01411072 -NCT01413711 -NCT01411098 -NCT01413750 -NCT01411176 -NCT01413763 -NCT01411189 -NCT01413828 -NCT01411202 -NCT01413893 -NCT01411267 -NCT01413906 -NCT01411306 -NCT01414062 -NCT01411319 -NCT01414205 -NCT01411332 -NCT01414231 -NCT01411345 -NCT01414244 -NCT01411358 -NCT01414257 -NCT01411410 -NCT01414283 -NCT01411527 -NCT01414296 -NCT01411657 -NCT01414322 -NCT01411722 -NCT01414387 -NCT01411787 -NCT01414426 -NCT01411826 -NCT01414530 -NCT01411878 -NCT01439633 -NCT01418131 -NCT01438476 -NCT01418157 -NCT01438554 -NCT01418222 -NCT01438567 -NCT01418235 -NCT01438593 -NCT01418287 -NCT01438645 -NCT01418391 -NCT01438710 -NCT01418430 -NCT01438762 -NCT01418534 -NCT01438853 -NCT01418547 -NCT01439100 -NCT01418677 -NCT01439191 -NCT01418729 -NCT01439256 -NCT01418742 -NCT01439269 -NCT01418924 -NCT01439282 -NCT01419002 -NCT01439347 -NCT01419015 -NCT01439360 -NCT01419028 -NCT01439490 -NCT01419067 -NCT01439516 -NCT01419119 -NCT01439542 -NCT01419145 -NCT01439568 -NCT01419184 -NCT01439581 -NCT01419197 -NCT01434524 -NCT01434550 -NCT01434602 -NCT01434758 -NCT01434810 -NCT01434849 -NCT01434862 -NCT01434992 -NCT01435005 -NCT01435070 -NCT01435122 -NCT01435200 -NCT01435252 -NCT01435343 -NCT01435356 -NCT01435369 -NCT01435395 -NCT01435499 -NCT01435551 -NCT01435590 -NCT01435603 -NCT01435616 -NCT01435629 -NCT01435720 -NCT01435733 -NCT01435863 -NCT01435902 -NCT01435941 -NCT01435954 -NCT01436071 -NCT01436084 -NCT01436110 -NCT01436214 -NCT01436227 -NCT01436253 -NCT01436266 -NCT01436318 -NCT01436370 -NCT01436565 -NCT01436604 -NCT01436656 -NCT01436669 -NCT01436721 -NCT01436747 -NCT01436877 -NCT01436890 -NCT01436955 -NCT01436968 -NCT01436994 -NCT01437007 -NCT01437098 -NCT01437254 -NCT01437280 -NCT01437345 -NCT01437410 -NCT01437436 -NCT01437449 -NCT01437488 -NCT01437514 -NCT01437566 -NCT01437605 -NCT01437618 -NCT01437631 -NCT01437709 -NCT01437735 -NCT01437787 -NCT01437865 -NCT01437956 -NCT01437969 -NCT01438021 -NCT01438034 -NCT01438073 -NCT01438112 -NCT01438177 -NCT01438203 -NCT01438307 -NCT01438398 -NCT01438437 -NCT01438450 -NCT01439594 -NCT01419210 -NCT01421680 -NCT01419236 -NCT01421667 -NCT01419249 -NCT01421693 -NCT01419483 -NCT01421758 -NCT01419496 -NCT01421784 -NCT01419535 -NCT01421797 -NCT01419548 -NCT01421810 -NCT01419561 -NCT01421836 -NCT01419574 -NCT01421862 -NCT01419587 -NCT01421875 -NCT01419613 -NCT01421888 -NCT01419639 -NCT01421927 -NCT01419665 -NCT01421940 -NCT01419691 -NCT01421953 -NCT01419704 -NCT01422057 -NCT01419717 -NCT01422226 -NCT01419795 -NCT01422239 -NCT01419821 -NCT01422408 -NCT01419834 -NCT01422499 -NCT01419860 -NCT01422551 -NCT01419886 -NCT01422603 -NCT01419938 -NCT01422616 -NCT01419977 -NCT01422629 -NCT01420003 -NCT01422668 -NCT01420055 -NCT01422707 -NCT01420081 -NCT01422746 -NCT01420133 -NCT01422759 -NCT01420146 -NCT01422798 -NCT01420250 -NCT01422850 -NCT01420354 -NCT01422928 -NCT01420367 -NCT01422993 -NCT01420419 -NCT01423006 -NCT01420523 -NCT01423032 -NCT01420679 -NCT01423071 -NCT01420744 -NCT01423123 -NCT01420770 -NCT01423175 -NCT01420783 -NCT01423214 -NCT01420861 -NCT01423266 -NCT01420874 -NCT01423331 -NCT01420887 -NCT01423344 -NCT01420913 -NCT01423396 -NCT01420926 -NCT01423474 -NCT01420939 -NCT01434199 -NCT01420965 -NCT01434251 -NCT01420991 -NCT01434264 -NCT01421004 -NCT01434290 -NCT01421017 -NCT01434303 -NCT01421095 -NCT01434316 -NCT01421160 -NCT01434342 -NCT01421173 -NCT01434355 -NCT01421186 -NCT01434368 -NCT01421316 -NCT01434394 -NCT01421355 -NCT01434420 -NCT01421368 -NCT01434446 -NCT01421472 -NCT01434459 -NCT01421524 -NCT01434472 -NCT01423500 -NCT01426269 -NCT01423539 -NCT01426126 -NCT01423591 -NCT01426334 -NCT01423604 -NCT01426490 -NCT01423695 -NCT01426620 -NCT01423708 -NCT01426633 -NCT01423734 -NCT01426646 -NCT01423747 -NCT01426672 -NCT01423760 -NCT01426724 -NCT01423799 -NCT01426750 -NCT01423890 -NCT01426828 -NCT01423903 -NCT01426841 -NCT01423942 -NCT01426880 -NCT01423994 -NCT01426932 -NCT01424046 -NCT01427010 -NCT01424176 -NCT01427114 -NCT01424241 -NCT01427166 -NCT01424254 -NCT01427179 -NCT01424293 -NCT01427192 -NCT01424306 -NCT01427205 -NCT01424358 -NCT01427244 -NCT01424423 -NCT01427270 -NCT01424475 -NCT01427283 -NCT01424514 -NCT01427322 -NCT01424527 -NCT01432821 -NCT01424566 -NCT01432847 -NCT01424631 -NCT01432860 -NCT01424709 -NCT01432873 -NCT01424748 -NCT01432886 -NCT01424761 -NCT01432938 -NCT01424839 -NCT01432951 -NCT01424904 -NCT01433003 -NCT01424930 -NCT01433016 -NCT01424982 -NCT01433068 -NCT01425008 -NCT01433107 -NCT01425034 -NCT01433172 -NCT01425177 -NCT01433263 -NCT01425268 -NCT01433354 -NCT01425463 -NCT01433562 -NCT01425476 -NCT01433601 -NCT01425528 -NCT01433614 -NCT01425541 -NCT01433731 -NCT01425606 -NCT01433744 -NCT01425619 -NCT01433809 -NCT01425736 -NCT01433848 -NCT01425749 -NCT01433861 -NCT01425775 -NCT01433874 -NCT01425788 -NCT01433913 -NCT01425827 -NCT01433965 -NCT01425879 -NCT01433991 -NCT01425892 -NCT01434004 -NCT01425957 -NCT01434069 -NCT01425970 -NCT01434108 -NCT01425996 -NCT01434121 -NCT01426074 -NCT01434134 -NCT01426087 -NCT01434147 -NCT01427400 -NCT01430013 -NCT01427478 -NCT01430000 -NCT01427491 -NCT01430052 -NCT01427556 -NCT01430091 -NCT01427595 -NCT01430286 -NCT01427608 -NCT01430351 -NCT01427647 -NCT01430390 -NCT01427673 -NCT01430403 -NCT01427842 -NCT01430416 -NCT01427855 -NCT01430442 -NCT01427881 -NCT01430520 -NCT01427894 -NCT01430572 -NCT01427933 -NCT01430585 -NCT01427946 -NCT01430689 -NCT01428089 -NCT01430754 -NCT01428128 -NCT01430793 -NCT01428141 -NCT01430845 -NCT01428167 -NCT01430897 -NCT01428193 -NCT01430988 -NCT01428219 -NCT01431053 -NCT01428245 -NCT01431196 -NCT01428336 -NCT01431209 -NCT01428414 -NCT01431222 -NCT01428440 -NCT01431313 -NCT01428492 -NCT01431326 -NCT01428531 -NCT01431365 -NCT01428544 -NCT01431391 -NCT01428583 -NCT01431534 -NCT01428635 -NCT01431547 -NCT01428648 -NCT01431586 -NCT01428713 -NCT01431599 -NCT01428726 -NCT01431638 -NCT01428739 -NCT01431651 -NCT01428895 -NCT01431664 -NCT01428908 -NCT01431755 -NCT01429025 -NCT01431794 -NCT01429051 -NCT01431924 -NCT01429064 -NCT01431963 -NCT01429090 -NCT01432015 -NCT01429155 -NCT01432067 -NCT01429168 -NCT01432093 -NCT01429207 -NCT01432119 -NCT01429259 -NCT01432145 -NCT01429298 -NCT01432171 -NCT01429376 -NCT01432223 -NCT01429389 -NCT01432314 -NCT01429402 -NCT01432353 -NCT01429480 -NCT01432392 -NCT01429493 -NCT01432431 -NCT01429597 -NCT01432470 -NCT01429610 -NCT01432600 -NCT01429766 -NCT01432613 -NCT01429844 -NCT01432626 -NCT01429909 -NCT01432769 -NCT01429935 -NCT01432782 -NCT01429961 -NCT01471405 -NCT01439659 -NCT01441648 -NCT01439672 -NCT01441635 -NCT01439711 -NCT01441674 -NCT01439724 -NCT01441687 -NCT01439750 -NCT01441752 -NCT01439815 -NCT01441765 -NCT01439854 -NCT01441882 -NCT01439919 -NCT01441895 -NCT01439945 -NCT01441934 -NCT01439971 -NCT01441947 -NCT01440036 -NCT01441973 -NCT01440088 -NCT01442051 -NCT01440127 -NCT01442090 -NCT01440140 -NCT01442181 -NCT01440179 -NCT01442220 -NCT01440205 -NCT01442233 -NCT01440244 -NCT01442246 -NCT01440270 -NCT01442259 -NCT01440283 -NCT01442285 -NCT01440361 -NCT01442324 -NCT01440413 -NCT01442350 -NCT01440439 -NCT01442441 -NCT01440491 -NCT01442454 -NCT01440517 -NCT01442519 -NCT01440582 -NCT01442623 -NCT01440621 -NCT01442649 -NCT01440764 -NCT01442662 -NCT01440777 -NCT01442701 -NCT01440816 -NCT01442714 -NCT01440855 -NCT01442727 -NCT01440920 -NCT01442779 -NCT01440959 -NCT01442870 -NCT01440998 -NCT01442909 -NCT01441011 -NCT01442935 -NCT01441024 -NCT01442974 -NCT01441037 -NCT01443026 -NCT01441089 -NCT01443065 -NCT01441102 -NCT01443078 -NCT01441115 -NCT01443260 -NCT01441128 -NCT01443377 -NCT01441141 -NCT01443481 -NCT01441154 -NCT01443494 -NCT01441284 -NCT01443624 -NCT01441297 -NCT01443676 -NCT01441310 -NCT01443832 -NCT01441323 -NCT01443845 -NCT01441336 -NCT01443923 -NCT01441349 -NCT01443936 -NCT01441375 -NCT01471132 -NCT01441388 -NCT01471184 -NCT01441414 -NCT01471197 -NCT01441453 -NCT01471210 -NCT01441466 -NCT01471288 -NCT01441479 -NCT01471314 -NCT01441492 -NCT01471353 -NCT01441596 -NCT01471379 -NCT01444001 -NCT01446666 -NCT01444014 -NCT01446562 -NCT01444066 -NCT01446731 -NCT01444118 -NCT01446744 -NCT01444157 -NCT01446809 -NCT01444209 -NCT01446822 -NCT01444365 -NCT01446848 -NCT01444404 -NCT01446874 -NCT01444495 -NCT01446887 -NCT01444521 -NCT01458457 -NCT01444534 -NCT01458613 -NCT01444547 -NCT01458704 -NCT01444625 -NCT01458717 -NCT01444716 -NCT01458730 -NCT01444742 -NCT01458808 -NCT01444768 -NCT01458847 -NCT01444807 -NCT01458860 -NCT01444820 -NCT01458886 -NCT01444846 -NCT01458925 -NCT01444924 -NCT01459003 -NCT01444989 -NCT01459016 -NCT01445041 -NCT01459081 -NCT01445054 -NCT01459172 -NCT01445080 -NCT01459185 -NCT01445106 -NCT01469715 -NCT01445119 -NCT01469793 -NCT01445132 -NCT01469819 -NCT01445171 -NCT01469832 -NCT01445301 -NCT01469975 -NCT01445340 -NCT01470040 -NCT01445379 -NCT01470131 -NCT01445392 -NCT01470196 -NCT01445405 -NCT01470209 -NCT01445418 -NCT01470248 -NCT01445509 -NCT01470365 -NCT01445522 -NCT01470417 -NCT01445535 -NCT01470443 -NCT01445587 -NCT01470456 -NCT01445613 -NCT01470495 -NCT01445691 -NCT01470534 -NCT01445821 -NCT01470586 -NCT01445977 -NCT01470638 -NCT01446016 -NCT01470677 -NCT01446042 -NCT01470729 -NCT01446081 -NCT01470742 -NCT01446133 -NCT01470794 -NCT01446159 -NCT01470807 -NCT01446185 -NCT01470820 -NCT01446211 -NCT01470885 -NCT01446237 -NCT01470937 -NCT01446276 -NCT01470989 -NCT01446315 -NCT01471002 -NCT01446393 -NCT01471054 -NCT01446458 -NCT01471067 -NCT01446471 -NCT01471106 -NCT01446549 -NCT01471119 -NCT01446900 -NCT01449539 -NCT01446939 -NCT01449513 -NCT01446952 -NCT01449591 -NCT01446991 -NCT01449604 -NCT01447056 -NCT01449864 -NCT01447069 -NCT01449916 -NCT01447199 -NCT01449942 -NCT01447225 -NCT01449994 -NCT01447329 -NCT01450020 -NCT01447355 -NCT01450046 -NCT01447381 -NCT01450137 -NCT01447589 -NCT01450150 -NCT01447667 -NCT01450202 -NCT01447693 -NCT01450215 -NCT01447706 -NCT01450319 -NCT01447732 -NCT01450384 -NCT01447745 -NCT01450449 -NCT01447771 -NCT01450501 -NCT01447810 -NCT01450566 -NCT01447823 -NCT01450683 -NCT01447888 -NCT01450696 -NCT01447914 -NCT01450748 -NCT01447927 -NCT01450761 -NCT01447979 -NCT01450826 -NCT01447992 -NCT01450930 -NCT01448005 -NCT01451008 -NCT01448044 -NCT01451034 -NCT01448096 -NCT01451086 -NCT01448161 -NCT01451268 -NCT01448395 -NCT01451281 -NCT01448434 -NCT01451359 -NCT01448447 -NCT01451372 -NCT01448473 -NCT01457118 -NCT01448733 -NCT01457131 -NCT01448759 -NCT01457144 -NCT01448772 -NCT01457196 -NCT01448798 -NCT01457313 -NCT01448850 -NCT01457417 -NCT01448980 -NCT01457443 -NCT01449019 -NCT01457469 -NCT01449058 -NCT01457573 -NCT01449084 -NCT01457625 -NCT01449110 -NCT01457703 -NCT01449149 -NCT01457846 -NCT01449162 -NCT01457885 -NCT01449201 -NCT01457924 -NCT01449253 -NCT01457950 -NCT01449266 -NCT01458002 -NCT01449279 -NCT01458067 -NCT01449292 -NCT01458106 -NCT01449305 -NCT01458249 -NCT01449344 -NCT01458288 -NCT01449357 -NCT01458301 -NCT01449370 -NCT01458366 -NCT01449409 -NCT01458392 -NCT01449461 -NCT01458418 -NCT01451411 -NCT01454661 -NCT01451437 -NCT01454635 -NCT01451515 -NCT01454739 -NCT01451580 -NCT01454804 -NCT01451593 -NCT01454934 -NCT01451619 -NCT01455025 -NCT01451632 -NCT01455051 -NCT01451658 -NCT01455077 -NCT01451749 -NCT01455090 -NCT01451853 -NCT01455103 -NCT01452061 -NCT01455259 -NCT01452165 -NCT01455272 -NCT01452334 -NCT01455298 -NCT01452399 -NCT01455363 -NCT01452477 -NCT01455376 -NCT01452490 -NCT01455389 -NCT01452516 -NCT01455402 -NCT01452607 -NCT01455454 -NCT01452646 -NCT01455493 -NCT01452659 -NCT01455506 -NCT01452672 -NCT01455532 -NCT01452815 -NCT01455571 -NCT01452893 -NCT01455753 -NCT01452932 -NCT01455792 -NCT01452945 -NCT01455805 -NCT01452997 -NCT01455831 -NCT01453062 -NCT01455935 -NCT01453075 -NCT01456039 -NCT01453088 -NCT01456065 -NCT01453101 -NCT01456078 -NCT01453114 -NCT01456104 -NCT01453153 -NCT01456143 -NCT01453179 -NCT01456156 -NCT01453205 -NCT01456182 -NCT01453244 -NCT01456325 -NCT01453283 -NCT01456351 -NCT01453335 -NCT01456377 -NCT01453361 -NCT01456416 -NCT01453387 -NCT01456429 -NCT01453452 -NCT01456481 -NCT01453504 -NCT01456585 -NCT01453595 -NCT01456598 -NCT01453738 -NCT01456637 -NCT01453777 -NCT01456650 -NCT01453894 -NCT01456676 -NCT01453985 -NCT01456689 -NCT01454076 -NCT01456741 -NCT01454089 -NCT01456845 -NCT01454102 -NCT01456858 -NCT01454180 -NCT01456923 -NCT01454284 -NCT01456975 -NCT01454349 -NCT01457014 -NCT01454375 -NCT01457040 -NCT01454479 -NCT01457053 -NCT01454505 -NCT01457092 -NCT01454596 -NCT01469702 -NCT01459211 -NCT01468441 -NCT01459237 -NCT01468467 -NCT01459328 -NCT01468493 -NCT01459380 -NCT01468532 -NCT01459393 -NCT01468623 -NCT01459484 -NCT01468636 -NCT01459497 -NCT01468649 -NCT01459614 -NCT01468675 -NCT01459627 -NCT01468740 -NCT01459640 -NCT01468766 -NCT01459770 -NCT01468779 -NCT01459783 -NCT01468818 -NCT01459887 -NCT01468831 -NCT01459913 -NCT01468844 -NCT01459965 -NCT01468883 -NCT01460017 -NCT01468896 -NCT01460030 -NCT01468909 -NCT01460043 -NCT01468922 -NCT01460082 -NCT01468948 -NCT01460108 -NCT01468987 -NCT01460121 -NCT01469000 -NCT01460134 -NCT01469026 -NCT01460160 -NCT01469052 -NCT01460186 -NCT01469117 -NCT01460199 -NCT01469130 -NCT01460368 -NCT01469221 -NCT01460420 -NCT01469247 -NCT01460472 -NCT01469338 -NCT01460498 -NCT01469364 -NCT01460537 -NCT01469429 -NCT01460589 -NCT01469455 -NCT01460602 -NCT01469533 -NCT01460693 -NCT01469546 -NCT01460706 -NCT01469572 -NCT01460758 -NCT01469598 -NCT01460797 -NCT01469611 -NCT01460810 -NCT01469663 -NCT01460875 -NCT01469676 -NCT01460888 -NCT01466036 -NCT01466114 -NCT01466153 -NCT01466179 -NCT01466231 -NCT01466257 -NCT01466270 -NCT01466348 -NCT01466504 -NCT01466569 -NCT01466647 -NCT01466660 -NCT01466686 -NCT01466712 -NCT01466777 -NCT01466855 -NCT01466868 -NCT01466881 -NCT01466972 -NCT01467037 -NCT01467102 -NCT01467115 -NCT01467219 -NCT01467297 -NCT01467310 -NCT01467479 -NCT01467505 -NCT01467635 -NCT01467700 -NCT01467869 -NCT01467882 -NCT01467921 -NCT01467986 -NCT01468025 -NCT01468038 -NCT01468220 -NCT01468311 -NCT01468324 -NCT01468389 -NCT01460901 -NCT01463592 -NCT01460940 -NCT01463540 -NCT01460966 -NCT01463605 -NCT01460979 -NCT01463631 -NCT01461005 -NCT01463644 -NCT01461057 -NCT01463670 -NCT01461148 -NCT01463696 -NCT01461174 -NCT01463709 -NCT01461200 -NCT01463761 -NCT01461252 -NCT01463787 -NCT01461265 -NCT01463813 -NCT01461330 -NCT01463852 -NCT01461369 -NCT01463982 -NCT01461408 -NCT01464021 -NCT01461473 -NCT01464034 -NCT01461525 -NCT01464086 -NCT01461538 -NCT01464112 -NCT01461616 -NCT01464177 -NCT01461746 -NCT01464203 -NCT01461759 -NCT01464359 -NCT01461772 -NCT01464593 -NCT01461850 -NCT01464606 -NCT01461915 -NCT01464762 -NCT01461928 -NCT01464775 -NCT01461954 -NCT01464788 -NCT01462006 -NCT01464879 -NCT01462149 -NCT01464905 -NCT01462175 -NCT01464918 -NCT01462214 -NCT01464944 -NCT01462253 -NCT01464957 -NCT01462292 -NCT01464970 -NCT01462396 -NCT01464983 -NCT01462474 -NCT01465022 -NCT01462513 -NCT01465230 -NCT01462526 -NCT01465243 -NCT01462578 -NCT01465295 -NCT01462630 -NCT01465308 -NCT01462695 -NCT01465334 -NCT01462773 -NCT01465347 -NCT01462838 -NCT01465386 -NCT01462877 -NCT01465399 -NCT01462890 -NCT01465451 -NCT01462903 -NCT01465464 -NCT01462994 -NCT01465516 -NCT01463007 -NCT01465568 -NCT01463046 -NCT01465594 -NCT01463072 -NCT01465633 -NCT01463085 -NCT01465646 -NCT01463098 -NCT01465659 -NCT01463189 -NCT01465672 -NCT01463280 -NCT01465776 -NCT01463358 -NCT01465802 -NCT01463423 -NCT01465815 -NCT01463462 -NCT01465841 -NCT01463488 -NCT01465867 -NCT01463501 -NCT01489241 -NCT01471444 -NCT01486849 -NCT01471470 -NCT01486927 -NCT01471522 -NCT01486979 -NCT01471548 -NCT01486992 -NCT01471600 -NCT01487031 -NCT01471639 -NCT01487174 -NCT01471652 -NCT01487226 -NCT01471678 -NCT01487239 -NCT01471756 -NCT01487252 -NCT01471782 -NCT01487265 -NCT01471847 -NCT01487486 -NCT01471899 -NCT01487499 -NCT01471964 -NCT01487525 -NCT01472003 -NCT01487538 -NCT01472016 -NCT01487590 -NCT01472029 -NCT01487694 -NCT01472055 -NCT01487720 -NCT01472081 -NCT01487785 -NCT01472133 -NCT01487837 -NCT01472146 -NCT01487863 -NCT01472198 -NCT01487902 -NCT01472432 -NCT01487915 -NCT01472445 -NCT01487954 -NCT01472523 -NCT01488045 -NCT01472562 -NCT01488123 -NCT01472653 -NCT01488136 -NCT01472692 -NCT01488175 -NCT01472731 -NCT01488253 -NCT01472770 -NCT01488318 -NCT01472783 -NCT01488344 -NCT01472874 -NCT01488487 -NCT01472887 -NCT01488500 -NCT01472913 -NCT01488513 -NCT01472978 -NCT01488552 -NCT01473004 -NCT01488565 -NCT01473095 -NCT01488591 -NCT01473290 -NCT01488669 -NCT01473303 -NCT01488682 -NCT01473342 -NCT01488773 -NCT01473472 -NCT01488838 -NCT01473485 -NCT01488968 -NCT01473524 -NCT01488981 -NCT01473563 -NCT01489059 -NCT01473628 -NCT01489137 -NCT01473784 -NCT01489215 -NCT01473849 -NCT01485848 -NCT01485861 -NCT01485874 -NCT01485913 -NCT01485926 -NCT01485978 -NCT01486043 -NCT01486134 -NCT01486225 -NCT01486251 -NCT01486277 -NCT01486329 -NCT01486368 -NCT01486381 -NCT01486394 -NCT01486459 -NCT01486550 -NCT01486563 -NCT01486602 -NCT01486667 -NCT01486745 -NCT01486784 -NCT01486797 -NCT01473901 -NCT01484080 -NCT01473940 -NCT01484093 -NCT01473979 -NCT01484106 -NCT01474005 -NCT01484171 -NCT01474187 -NCT01484275 -NCT01474239 -NCT01484314 -NCT01474356 -NCT01484405 -NCT01474369 -NCT01484483 -NCT01474447 -NCT01484574 -NCT01474499 -NCT01484626 -NCT01474551 -NCT01484665 -NCT01474564 -NCT01484678 -NCT01474642 -NCT01484847 -NCT01474681 -NCT01484860 -NCT01474746 -NCT01484873 -NCT01474811 -NCT01484925 -NCT01475006 -NCT01485042 -NCT01475019 -NCT01485055 -NCT01475058 -NCT01485094 -NCT01475214 -NCT01485172 -NCT01475227 -NCT01485198 -NCT01475240 -NCT01485224 -NCT01475266 -NCT01485263 -NCT01475292 -NCT01485276 -NCT01475318 -NCT01485471 -NCT01475344 -NCT01485536 -NCT01475370 -NCT01485627 -NCT01475708 -NCT01485679 -NCT01475890 -NCT01485692 -NCT01475955 -NCT01485731 -NCT01476085 -NCT01485744 -NCT01476137 -NCT01485809 -NCT01476150 -NCT01481909 -NCT01481948 -NCT01482104 -NCT01482130 -NCT01482143 -NCT01482156 -NCT01482208 -NCT01482286 -NCT01482299 -NCT01482312 -NCT01482338 -NCT01482377 -NCT01482442 -NCT01482481 -NCT01482494 -NCT01482520 -NCT01482559 -NCT01482702 -NCT01482715 -NCT01482728 -NCT01482754 -NCT01482767 -NCT01482858 -NCT01482897 -NCT01482949 -NCT01482962 -NCT01483001 -NCT01483014 -NCT01483027 -NCT01483040 -NCT01483118 -NCT01483144 -NCT01483196 -NCT01483274 -NCT01483287 -NCT01483300 -NCT01483365 -NCT01483443 -NCT01483560 -NCT01483573 -NCT01483586 -NCT01483625 -NCT01483638 -NCT01483690 -NCT01483716 -NCT01483742 -NCT01483768 -NCT01483820 -NCT01483911 -NCT01483989 -NCT01484015 -NCT01484041 -NCT01485835 -NCT01476410 -NCT01479179 -NCT01476423 -NCT01479075 -NCT01476501 -NCT01479192 -NCT01476527 -NCT01479244 -NCT01476553 -NCT01479283 -NCT01476592 -NCT01479348 -NCT01476605 -NCT01479426 -NCT01476644 -NCT01479465 -NCT01476683 -NCT01479504 -NCT01476787 -NCT01479569 -NCT01476839 -NCT01479582 -NCT01476878 -NCT01479608 -NCT01476891 -NCT01479686 -NCT01476930 -NCT01479803 -NCT01476956 -NCT01479842 -NCT01476995 -NCT01479855 -NCT01477021 -NCT01479907 -NCT01477060 -NCT01479920 -NCT01477073 -NCT01479946 -NCT01477138 -NCT01480050 -NCT01477177 -NCT01480141 -NCT01477190 -NCT01480154 -NCT01477333 -NCT01480167 -NCT01477346 -NCT01480323 -NCT01477437 -NCT01480349 -NCT01477463 -NCT01480375 -NCT01477476 -NCT01480427 -NCT01477489 -NCT01480479 -NCT01477606 -NCT01480583 -NCT01477749 -NCT01480596 -NCT01477814 -NCT01480674 -NCT01477827 -NCT01480778 -NCT01477866 -NCT01480817 -NCT01478009 -NCT01480843 -NCT01478048 -NCT01480869 -NCT01478074 -NCT01480908 -NCT01478178 -NCT01480973 -NCT01478204 -NCT01481129 -NCT01478308 -NCT01481155 -NCT01478321 -NCT01481168 -NCT01478347 -NCT01481194 -NCT01478373 -NCT01481220 -NCT01478438 -NCT01481233 -NCT01478477 -NCT01481259 -NCT01478542 -NCT01481272 -NCT01478581 -NCT01481324 -NCT01478594 -NCT01481376 -NCT01478620 -NCT01481441 -NCT01478685 -NCT01481532 -NCT01478724 -NCT01481545 -NCT01478802 -NCT01481701 -NCT01478828 -NCT01481779 -NCT01478854 -NCT01481792 -NCT01478932 -NCT01481831 -NCT01479023 -NCT01481870 -NCT01479036 -NCT01512069 -NCT01489254 -NCT01511874 -NCT01489332 -NCT01511939 -NCT01489371 -NCT01511952 -NCT01489397 -NCT01505517 -NCT01505530 -NCT01505569 -NCT01505582 -NCT01505595 -NCT01505608 -NCT01505686 -NCT01505751 -NCT01505764 -NCT01505842 -NCT01505868 -NCT01505946 -NCT01505972 -NCT01506037 -NCT01506050 -NCT01506115 -NCT01506128 -NCT01506336 -NCT01506427 -NCT01506453 -NCT01506466 -NCT01506479 -NCT01506518 -NCT01506557 -NCT01506596 -NCT01506609 -NCT01506661 -NCT01506687 -NCT01506700 -NCT01506791 -NCT01506856 -NCT01506908 -NCT01506934 -NCT01506947 -NCT01506960 -NCT01506973 -NCT01507064 -NCT01507103 -NCT01507168 -NCT01507207 -NCT01507285 -NCT01507428 -NCT01507467 -NCT01507480 -NCT01507506 -NCT01507545 -NCT01507571 -NCT01507610 -NCT01507662 -NCT01507792 -NCT01507974 -NCT01508000 -NCT01508013 -NCT01508104 -NCT01508117 -NCT01508221 -NCT01508260 -NCT01508273 -NCT01508312 -NCT01508390 -NCT01508520 -NCT01508546 -NCT01508572 -NCT01508702 -NCT01508741 -NCT01508767 -NCT01508819 -NCT01508884 -NCT01509014 -NCT01509066 -NCT01509079 -NCT01509183 -NCT01509300 -NCT01509430 -NCT01509482 -NCT01509534 -NCT01509599 -NCT01509612 -NCT01509781 -NCT01509911 -NCT01509924 -NCT01509963 -NCT01510002 -NCT01510041 -NCT01510119 -NCT01510158 -NCT01510184 -NCT01510236 -NCT01510288 -NCT01510392 -NCT01510418 -NCT01510457 -NCT01510561 -NCT01510730 -NCT01510743 -NCT01510756 -NCT01510769 -NCT01510847 -NCT01510912 -NCT01510964 -NCT01510990 -NCT01511042 -NCT01511055 -NCT01511081 -NCT01511146 -NCT01511211 -NCT01511276 -NCT01511289 -NCT01511302 -NCT01511328 -NCT01511419 -NCT01511458 -NCT01511536 -NCT01511562 -NCT01511575 -NCT01511588 -NCT01511601 -NCT01512056 -NCT01489410 -NCT01499628 -NCT01489436 -NCT01499667 -NCT01489527 -NCT01499784 -NCT01489566 -NCT01499823 -NCT01489592 -NCT01499888 -NCT01489722 -NCT01505426 -NCT01489787 -NCT01494714 -NCT01494883 -NCT01495000 -NCT01495026 -NCT01495065 -NCT01495130 -NCT01495247 -NCT01495325 -NCT01495351 -NCT01495455 -NCT01495572 -NCT01495585 -NCT01495598 -NCT01495650 -NCT01495663 -NCT01495676 -NCT01495806 -NCT01495884 -NCT01495897 -NCT01495923 -NCT01495988 -NCT01496001 -NCT01496066 -NCT01496079 -NCT01496118 -NCT01496131 -NCT01496157 -NCT01496248 -NCT01496313 -NCT01496326 -NCT01496404 -NCT01496482 -NCT01496495 -NCT01496521 -NCT01496534 -NCT01496547 -NCT01496599 -NCT01496612 -NCT01496651 -NCT01496742 -NCT01496807 -NCT01496872 -NCT01496885 -NCT01496963 -NCT01496976 -NCT01497002 -NCT01497015 -NCT01497041 -NCT01497093 -NCT01497145 -NCT01497158 -NCT01497184 -NCT01497197 -NCT01497262 -NCT01497275 -NCT01497392 -NCT01497431 -NCT01497444 -NCT01497457 -NCT01497470 -NCT01497496 -NCT01497548 -NCT01497626 -NCT01497665 -NCT01497691 -NCT01497704 -NCT01497808 -NCT01497821 -NCT01497860 -NCT01497873 -NCT01497925 -NCT01497964 -NCT01497977 -NCT01498016 -NCT01498068 -NCT01498081 -NCT01498172 -NCT01498211 -NCT01498237 -NCT01498289 -NCT01498328 -NCT01498406 -NCT01498419 -NCT01498432 -NCT01498445 -NCT01498458 -NCT01498471 -NCT01498484 -NCT01498536 -NCT01498562 -NCT01498588 -NCT01498653 -NCT01498666 -NCT01498679 -NCT01498705 -NCT01498783 -NCT01498835 -NCT01498952 -NCT01498978 -NCT01499043 -NCT01499056 -NCT01499121 -NCT01499134 -NCT01499147 -NCT01499160 -NCT01499212 -NCT01499251 -NCT01499303 -NCT01499446 -NCT01499485 -NCT01499576 -NCT01489800 -NCT01492413 -NCT01489813 -NCT01492387 -NCT01489839 -NCT01492517 -NCT01489865 -NCT01492543 -NCT01489969 -NCT01492556 -NCT01490047 -NCT01492569 -NCT01490060 -NCT01492582 -NCT01490164 -NCT01492673 -NCT01490190 -NCT01492790 -NCT01490203 -NCT01492855 -NCT01490320 -NCT01492881 -NCT01490437 -NCT01492907 -NCT01490476 -NCT01492920 -NCT01490502 -NCT01492972 -NCT01490723 -NCT01493011 -NCT01490749 -NCT01493050 -NCT01490775 -NCT01493089 -NCT01490866 -NCT01493128 -NCT01490892 -NCT01493154 -NCT01490905 -NCT01493206 -NCT01490983 -NCT01493284 -NCT01490996 -NCT01493310 -NCT01491048 -NCT01493336 -NCT01491100 -NCT01493349 -NCT01491139 -NCT01493453 -NCT01491165 -NCT01493479 -NCT01491204 -NCT01493505 -NCT01491217 -NCT01493531 -NCT01491360 -NCT01493635 -NCT01491490 -NCT01493687 -NCT01491516 -NCT01493713 -NCT01491542 -NCT01493791 -NCT01491555 -NCT01493843 -NCT01491568 -NCT01493921 -NCT01491594 -NCT01494012 -NCT01491633 -NCT01494025 -NCT01491672 -NCT01494103 -NCT01491698 -NCT01494155 -NCT01491711 -NCT01494168 -NCT01491737 -NCT01494181 -NCT01491763 -NCT01494285 -NCT01491828 -NCT01494324 -NCT01491841 -NCT01494337 -NCT01491893 -NCT01494363 -NCT01491958 -NCT01494415 -NCT01491971 -NCT01494467 -NCT01492049 -NCT01494506 -NCT01492062 -NCT01494532 -NCT01492088 -NCT01494558 -NCT01492101 -NCT01494571 -NCT01492127 -NCT01494610 -NCT01492179 -NCT01494636 -NCT01492192 -NCT01494649 -NCT01492270 -NCT01494662 -NCT01492296 -NCT01494688 -NCT01492374 -NCT01505413 -NCT01499901 -NCT01502670 -NCT01499914 -NCT01502605 -NCT01500057 -NCT01502696 -NCT01500083 -NCT01502748 -NCT01500122 -NCT01502800 -NCT01500148 -NCT01502917 -NCT01500161 -NCT01502982 -NCT01500200 -NCT01503086 -NCT01500304 -NCT01503099 -NCT01500356 -NCT01503125 -NCT01500447 -NCT01503164 -NCT01500512 -NCT01503177 -NCT01500525 -NCT01503229 -NCT01500538 -NCT01503242 -NCT01500577 -NCT01503294 -NCT01500616 -NCT01503307 -NCT01500629 -NCT01503346 -NCT01500720 -NCT01503372 -NCT01500733 -NCT01503385 -NCT01500824 -NCT01503476 -NCT01500876 -NCT01503502 -NCT01500889 -NCT01503515 -NCT01500915 -NCT01503541 -NCT01500993 -NCT01503632 -NCT01501136 -NCT01503749 -NCT01501149 -NCT01503775 -NCT01501162 -NCT01503827 -NCT01501279 -NCT01503905 -NCT01501370 -NCT01503983 -NCT01501409 -NCT01504009 -NCT01501487 -NCT01504048 -NCT01501500 -NCT01504126 -NCT01501578 -NCT01504256 -NCT01501604 -NCT01504360 -NCT01501643 -NCT01504399 -NCT01501669 -NCT01504464 -NCT01501708 -NCT01504477 -NCT01501903 -NCT01504490 -NCT01501942 -NCT01504542 -NCT01502059 -NCT01504555 -NCT01502072 -NCT01504711 -NCT01502085 -NCT01504776 -NCT01502124 -NCT01504789 -NCT01502137 -NCT01504802 -NCT01502176 -NCT01504815 -NCT01502189 -NCT01504880 -NCT01502202 -NCT01504932 -NCT01502228 -NCT01504945 -NCT01502241 -NCT01504958 -NCT01502254 -NCT01504997 -NCT01502280 -NCT01505010 -NCT01502293 -NCT01505075 -NCT01502410 -NCT01505153 -NCT01502514 -NCT01505166 -NCT01502527 -NCT01505400 -NCT01502592 -NCT01517399 -NCT01512147 -NCT01514890 -NCT01512173 -NCT01514877 -NCT01512199 -NCT01514955 -NCT01512212 -NCT01515046 -NCT01512251 -NCT01515137 -NCT01512277 -NCT01515150 -NCT01512342 -NCT01515176 -NCT01512407 -NCT01515189 -NCT01512472 -NCT01515215 -NCT01512537 -NCT01515254 -NCT01512563 -NCT01515293 -NCT01512589 -NCT01515306 -NCT01512654 -NCT01515527 -NCT01512719 -NCT01515566 -NCT01512745 -NCT01515683 -NCT01512758 -NCT01515696 -NCT01512810 -NCT01515748 -NCT01512927 -NCT01515787 -NCT01512940 -NCT01515800 -NCT01512992 -NCT01515865 -NCT01513083 -NCT01515969 -NCT01513109 -NCT01515995 -NCT01513161 -NCT01516008 -NCT01513174 -NCT01516190 -NCT01513187 -NCT01516203 -NCT01513239 -NCT01516216 -NCT01513317 -NCT01516229 -NCT01513356 -NCT01516307 -NCT01513408 -NCT01516320 -NCT01513421 -NCT01516489 -NCT01513447 -NCT01516515 -NCT01513603 -NCT01516528 -NCT01513616 -NCT01516567 -NCT01513655 -NCT01516580 -NCT01513707 -NCT01516593 -NCT01513733 -NCT01516606 -NCT01513928 -NCT01516619 -NCT01513980 -NCT01516684 -NCT01514071 -NCT01516710 -NCT01514110 -NCT01516736 -NCT01514123 -NCT01516801 -NCT01514188 -NCT01516840 -NCT01514201 -NCT01516931 -NCT01514214 -NCT01516944 -NCT01514253 -NCT01516983 -NCT01514279 -NCT01516996 -NCT01514344 -NCT01517009 -NCT01514448 -NCT01517035 -NCT01514526 -NCT01517048 -NCT01514552 -NCT01517126 -NCT01514630 -NCT01517165 -NCT01514643 -NCT01517191 -NCT01514734 -NCT01517217 -NCT01514760 -NCT01517243 -NCT01514786 -NCT01517347 -NCT01514864 -NCT01522768 -NCT01517451 -NCT01520220 -NCT01517464 -NCT01520194 -NCT01517529 -NCT01520272 -NCT01517646 -NCT01520389 -NCT01517659 -NCT01520441 -NCT01517698 -NCT01520454 -NCT01517724 -NCT01520467 -NCT01517776 -NCT01520519 -NCT01517802 -NCT01520558 -NCT01517828 -NCT01520584 -NCT01518036 -NCT01520675 -NCT01518049 -NCT01520701 -NCT01518062 -NCT01520740 -NCT01518075 -NCT01520805 -NCT01518140 -NCT01520870 -NCT01518153 -NCT01520909 -NCT01518192 -NCT01520922 -NCT01518218 -NCT01520948 -NCT01518231 -NCT01521000 -NCT01518283 -NCT01521013 -NCT01518322 -NCT01521117 -NCT01518374 -NCT01521143 -NCT01518413 -NCT01521221 -NCT01518465 -NCT01521299 -NCT01518517 -NCT01521325 -NCT01518556 -NCT01521351 -NCT01518621 -NCT01521468 -NCT01518686 -NCT01521481 -NCT01518920 -NCT01521533 -NCT01518946 -NCT01521546 -NCT01518959 -NCT01521611 -NCT01519011 -NCT01521676 -NCT01519050 -NCT01521689 -NCT01519076 -NCT01521702 -NCT01519141 -NCT01521715 -NCT01519193 -NCT01521754 -NCT01519271 -NCT01521780 -NCT01519323 -NCT01521936 -NCT01519349 -NCT01521949 -NCT01519388 -NCT01522118 -NCT01519414 -NCT01522170 -NCT01519427 -NCT01522183 -NCT01519596 -NCT01522196 -NCT01519609 -NCT01522209 -NCT01519700 -NCT01522300 -NCT01519752 -NCT01522326 -NCT01519778 -NCT01522443 -NCT01519804 -NCT01522469 -NCT01519817 -NCT01522521 -NCT01519869 -NCT01522534 -NCT01519882 -NCT01522547 -NCT01519999 -NCT01522573 -NCT01520038 -NCT01522612 -NCT01520051 -NCT01522664 -NCT01520103 -NCT01522677 -NCT01520181 -NCT01527214 -NCT01522794 -NCT01525082 -NCT01522820 -NCT01525069 -NCT01522859 -NCT01525121 -NCT01522872 -NCT01525134 -NCT01522937 -NCT01525173 -NCT01522950 -NCT01525264 -NCT01522976 -NCT01525329 -NCT01522989 -NCT01525394 -NCT01523002 -NCT01525407 -NCT01523015 -NCT01525433 -NCT01523171 -NCT01525446 -NCT01523197 -NCT01525550 -NCT01523223 -NCT01525563 -NCT01523353 -NCT01525589 -NCT01523431 -NCT01525602 -NCT01523457 -NCT01525706 -NCT01523561 -NCT01525719 -NCT01523587 -NCT01525732 -NCT01523639 -NCT01525745 -NCT01523678 -NCT01525771 -NCT01523782 -NCT01525875 -NCT01523808 -NCT01525927 -NCT01523834 -NCT01525940 -NCT01523847 -NCT01525966 -NCT01523860 -NCT01526096 -NCT01523912 -NCT01526135 -NCT01523964 -NCT01526161 -NCT01523977 -NCT01526174 -NCT01524003 -NCT01526239 -NCT01524016 -NCT01526278 -NCT01524081 -NCT01526304 -NCT01524094 -NCT01526356 -NCT01524159 -NCT01526369 -NCT01524198 -NCT01526408 -NCT01524224 -NCT01526473 -NCT01524432 -NCT01526486 -NCT01524458 -NCT01526499 -NCT01524471 -NCT01526512 -NCT01524536 -NCT01526590 -NCT01524562 -NCT01526603 -NCT01524575 -NCT01526655 -NCT01524640 -NCT01526694 -NCT01524653 -NCT01526707 -NCT01524692 -NCT01526772 -NCT01524705 -NCT01526811 -NCT01524731 -NCT01526837 -NCT01524757 -NCT01526889 -NCT01524783 -NCT01526902 -NCT01524848 -NCT01526915 -NCT01524926 -NCT01526928 -NCT01524978 -NCT01527032 -NCT01524991 -NCT01527045 -NCT01525004 -NCT01527058 -NCT01525017 -NCT01527136 -NCT01525043 -NCT01527149 -NCT01525056 -NCT01533090 -NCT01527292 -NCT01530061 -NCT01527331 -NCT01530035 -NCT01527409 -NCT01530178 -NCT01527422 -NCT01530217 -NCT01527487 -NCT01530256 -NCT01527669 -NCT01530269 -NCT01527812 -NCT01530295 -NCT01527838 -NCT01530334 -NCT01527864 -NCT01530373 -NCT01527877 -NCT01530503 -NCT01527929 -NCT01530568 -NCT01527955 -NCT01530594 -NCT01528046 -NCT01530607 -NCT01528059 -NCT01530698 -NCT01528085 -NCT01530724 -NCT01528137 -NCT01530802 -NCT01528163 -NCT01530880 -NCT01528176 -NCT01530971 -NCT01528345 -NCT01530984 -NCT01528462 -NCT01530997 -NCT01528488 -NCT01531023 -NCT01528501 -NCT01531205 -NCT01528540 -NCT01531218 -NCT01528566 -NCT01531244 -NCT01528618 -NCT01531361 -NCT01528683 -NCT01531374 -NCT01528722 -NCT01531439 -NCT01528735 -NCT01531452 -NCT01528748 -NCT01531478 -NCT01528826 -NCT01531504 -NCT01528865 -NCT01531595 -NCT01528878 -NCT01531673 -NCT01528930 -NCT01531699 -NCT01529073 -NCT01531712 -NCT01529099 -NCT01531764 -NCT01529112 -NCT01531777 -NCT01529138 -NCT01531790 -NCT01529164 -NCT01531829 -NCT01529177 -NCT01531868 -NCT01529242 -NCT01531894 -NCT01529307 -NCT01531998 -NCT01529333 -NCT01532011 -NCT01529359 -NCT01532089 -NCT01529385 -NCT01532362 -NCT01529411 -NCT01532401 -NCT01529437 -NCT01532453 -NCT01529450 -NCT01532635 -NCT01529593 -NCT01532687 -NCT01529645 -NCT01532700 -NCT01529658 -NCT01532765 -NCT01529684 -NCT01532804 -NCT01529788 -NCT01532830 -NCT01529827 -NCT01532856 -NCT01529840 -NCT01532960 -NCT01529944 -NCT01533012 -NCT01529996 -NCT01538628 -NCT01533129 -NCT01535391 -NCT01533181 -NCT01535352 -NCT01533194 -NCT01535456 -NCT01533207 -NCT01535560 -NCT01533233 -NCT01535599 -NCT01533246 -NCT01535612 -NCT01533285 -NCT01535664 -NCT01533324 -NCT01535846 -NCT01533571 -NCT01535911 -NCT01533636 -NCT01535924 -NCT01533649 -NCT01535950 -NCT01533727 -NCT01535989 -NCT01533753 -NCT01536054 -NCT01533948 -NCT01536067 -NCT01534052 -NCT01536080 -NCT01534065 -NCT01536145 -NCT01534078 -NCT01536223 -NCT01534104 -NCT01536262 -NCT01534117 -NCT01536288 -NCT01534130 -NCT01536301 -NCT01534143 -NCT01536392 -NCT01534182 -NCT01536444 -NCT01534208 -NCT01536561 -NCT01534260 -NCT01536678 -NCT01534273 -NCT01536691 -NCT01534286 -NCT01536717 -NCT01534351 -NCT01536743 -NCT01534377 -NCT01536782 -NCT01534429 -NCT01536795 -NCT01534455 -NCT01537029 -NCT01534507 -NCT01537081 -NCT01534546 -NCT01537107 -NCT01534585 -NCT01537211 -NCT01534598 -NCT01537536 -NCT01534637 -NCT01537666 -NCT01534650 -NCT01537744 -NCT01534702 -NCT01537770 -NCT01534715 -NCT01537861 -NCT01534754 -NCT01537900 -NCT01534793 -NCT01537926 -NCT01534806 -NCT01537991 -NCT01534819 -NCT01538017 -NCT01534832 -NCT01538095 -NCT01534845 -NCT01538238 -NCT01534897 -NCT01538316 -NCT01534949 -NCT01538329 -NCT01535001 -NCT01538355 -NCT01535027 -NCT01538381 -NCT01535040 -NCT01538407 -NCT01535053 -NCT01538420 -NCT01535066 -NCT01538459 -NCT01535131 -NCT01538472 -NCT01535157 -NCT01538537 -NCT01535183 -NCT01538550 -NCT01535209 -NCT01538563 -NCT01535326 -NCT01543698 -NCT01538641 -NCT01541280 -NCT01538706 -NCT01541241 -NCT01538745 -NCT01541306 -NCT01538849 -NCT01541332 -NCT01538862 -NCT01541358 -NCT01538966 -NCT01541423 -NCT01539018 -NCT01541553 -NCT01539044 -NCT01541618 -NCT01539083 -NCT01541644 -NCT01539161 -NCT01541683 -NCT01539174 -NCT01541709 -NCT01539187 -NCT01541722 -NCT01539291 -NCT01541813 -NCT01539317 -NCT01541878 -NCT01539356 -NCT01541943 -NCT01539395 -NCT01542021 -NCT01539447 -NCT01542047 -NCT01539512 -NCT01542138 -NCT01539525 -NCT01542177 -NCT01539655 -NCT01542216 -NCT01539681 -NCT01542255 -NCT01539733 -NCT01542281 -NCT01539772 -NCT01542294 -NCT01539785 -NCT01542437 -NCT01539824 -NCT01542515 -NCT01539876 -NCT01542567 -NCT01539980 -NCT01542606 -NCT01540019 -NCT01542632 -NCT01540058 -NCT01542684 -NCT01540071 -NCT01542736 -NCT01540110 -NCT01542879 -NCT01540136 -NCT01542892 -NCT01540201 -NCT01542918 -NCT01540253 -NCT01542931 -NCT01540344 -NCT01542944 -NCT01540396 -NCT01542957 -NCT01540435 -NCT01542983 -NCT01540461 -NCT01543022 -NCT01540513 -NCT01543048 -NCT01540526 -NCT01543100 -NCT01540565 -NCT01543113 -NCT01540617 -NCT01543204 -NCT01540682 -NCT01543282 -NCT01540708 -NCT01543334 -NCT01540747 -NCT01543347 -NCT01540799 -NCT01543399 -NCT01540812 -NCT01543412 -NCT01540955 -NCT01543438 -NCT01540968 -NCT01543464 -NCT01540994 -NCT01543542 -NCT01541007 -NCT01543581 -NCT01541020 -NCT01543594 -NCT01541072 -NCT01543607 -NCT01541111 -NCT01543659 -NCT01541124 -NCT01543672 -NCT01541228 -NCT01549951 -NCT01543763 -NCT01547260 -NCT01543776 -NCT01547208 -NCT01543802 -NCT01547299 -NCT01543997 -NCT01547364 -NCT01544101 -NCT01547416 -NCT01544179 -NCT01547442 -NCT01544205 -NCT01547481 -NCT01544322 -NCT01547494 -NCT01544374 -NCT01547546 -NCT01544413 -NCT01547676 -NCT01544452 -NCT01547715 -NCT01544478 -NCT01547741 -NCT01544647 -NCT01547793 -NCT01544738 -NCT01547806 -NCT01544790 -NCT01547845 -NCT01544920 -NCT01547871 -NCT01544959 -NCT01547923 -NCT01545011 -NCT01547949 -NCT01545037 -NCT01548105 -NCT01545141 -NCT01548118 -NCT01545193 -NCT01548144 -NCT01545297 -NCT01548170 -NCT01545518 -NCT01548209 -NCT01545648 -NCT01548222 -NCT01545674 -NCT01548313 -NCT01545687 -NCT01548339 -NCT01545804 -NCT01548352 -NCT01545817 -NCT01548482 -NCT01545830 -NCT01548534 -NCT01545869 -NCT01548573 -NCT01545882 -NCT01548651 -NCT01545921 -NCT01548677 -NCT01545947 -NCT01548690 -NCT01545986 -NCT01548807 -NCT01546012 -NCT01548846 -NCT01546038 -NCT01548911 -NCT01546116 -NCT01548924 -NCT01546207 -NCT01548950 -NCT01546298 -NCT01549015 -NCT01546363 -NCT01549093 -NCT01546428 -NCT01549184 -NCT01546454 -NCT01549210 -NCT01546519 -NCT01549327 -NCT01546571 -NCT01549379 -NCT01546623 -NCT01549392 -NCT01546649 -NCT01549431 -NCT01546675 -NCT01549535 -NCT01546701 -NCT01549730 -NCT01546740 -NCT01549756 -NCT01546766 -NCT01549782 -NCT01546844 -NCT01549795 -NCT01546922 -NCT01549847 -NCT01546987 -NCT01549873 -NCT01547078 -NCT01549886 -NCT01547130 -NCT01549925 -NCT01547169 -NCT01555489 -NCT01550055 -NCT01553149 -NCT01550094 -NCT01553071 -NCT01550185 -NCT01553188 -NCT01550224 -NCT01553227 -NCT01550237 -NCT01553240 -NCT01550250 -NCT01553253 -NCT01550276 -NCT01553318 -NCT01550367 -NCT01553357 -NCT01550380 -NCT01553396 -NCT01550484 -NCT01553461 -NCT01550497 -NCT01553487 -NCT01550510 -NCT01553539 -NCT01550523 -NCT01553565 -NCT01550627 -NCT01553578 -NCT01550783 -NCT01553643 -NCT01550848 -NCT01553656 -NCT01550913 -NCT01553747 -NCT01551030 -NCT01553786 -NCT01551043 -NCT01553838 -NCT01551407 -NCT01553851 -NCT01551446 -NCT01553890 -NCT01551459 -NCT01553903 -NCT01551498 -NCT01553916 -NCT01551511 -NCT01553942 -NCT01551589 -NCT01554020 -NCT01551628 -NCT01554059 -NCT01551641 -NCT01554163 -NCT01551654 -NCT01554254 -NCT01551680 -NCT01554267 -NCT01551693 -NCT01554371 -NCT01551706 -NCT01554384 -NCT01551719 -NCT01554397 -NCT01551745 -NCT01554410 -NCT01551914 -NCT01554514 -NCT01551966 -NCT01554553 -NCT01552005 -NCT01554579 -NCT01552031 -NCT01554592 -NCT01552083 -NCT01554683 -NCT01552161 -NCT01554774 -NCT01552200 -NCT01554852 -NCT01552226 -NCT01554943 -NCT01552239 -NCT01554969 -NCT01552291 -NCT01555021 -NCT01552356 -NCT01555047 -NCT01552421 -NCT01555086 -NCT01552434 -NCT01555138 -NCT01552655 -NCT01555216 -NCT01552681 -NCT01555242 -NCT01552694 -NCT01555268 -NCT01552811 -NCT01555281 -NCT01552824 -NCT01555333 -NCT01552967 -NCT01555346 -NCT01552980 -NCT01555437 -NCT01552993 -NCT01555450 -NCT01553019 -NCT01555463 -NCT01553032 -NCT01561482 -NCT01555515 -NCT01558167 -NCT01555541 -NCT01558141 -NCT01555580 -NCT01558219 -NCT01555606 -NCT01558245 -NCT01555632 -NCT01558258 -NCT01555645 -NCT01558427 -NCT01555710 -NCT01558453 -NCT01555801 -NCT01558479 -NCT01555840 -NCT01558492 -NCT01555853 -NCT01558544 -NCT01555892 -NCT01558583 -NCT01555905 -NCT01558661 -NCT01555957 -NCT01558778 -NCT01556009 -NCT01558869 -NCT01556035 -NCT01558921 -NCT01556191 -NCT01558947 -NCT01556230 -NCT01558960 -NCT01556243 -NCT01559025 -NCT01556256 -NCT01559116 -NCT01556282 -NCT01559181 -NCT01556360 -NCT01559194 -NCT01556438 -NCT01559220 -NCT01556477 -NCT01559545 -NCT01556490 -NCT01559636 -NCT01556581 -NCT01559714 -NCT01556646 -NCT01559740 -NCT01556711 -NCT01559818 -NCT01556776 -NCT01559844 -NCT01556789 -NCT01559935 -NCT01556815 -NCT01559987 -NCT01556841 -NCT01560104 -NCT01556958 -NCT01560117 -NCT01557075 -NCT01560195 -NCT01557101 -NCT01560260 -NCT01557114 -NCT01560325 -NCT01557140 -NCT01560377 -NCT01557361 -NCT01560416 -NCT01557400 -NCT01560533 -NCT01557439 -NCT01560559 -NCT01557465 -NCT01560663 -NCT01557478 -NCT01560676 -NCT01557556 -NCT01560741 -NCT01557595 -NCT01560832 -NCT01557686 -NCT01560845 -NCT01557738 -NCT01560923 -NCT01557764 -NCT01560949 -NCT01557777 -NCT01560962 -NCT01557790 -NCT01561014 -NCT01557842 -NCT01561040 -NCT01557855 -NCT01561118 -NCT01557868 -NCT01561248 -NCT01557881 -NCT01561287 -NCT01557959 -NCT01561326 -NCT01558011 -NCT01561430 -NCT01558050 -NCT01561456 -NCT01558115 -NCT01566838 -NCT01561495 -NCT01564056 -NCT01561586 -NCT01564004 -NCT01561664 -NCT01564121 -NCT01561755 -NCT01564251 -NCT01561833 -NCT01564264 -NCT01561885 -NCT01564277 -NCT01561911 -NCT01564290 -NCT01561924 -NCT01564329 -NCT01561989 -NCT01564368 -NCT01562015 -NCT01564394 -NCT01562028 -NCT01564537 -NCT01562093 -NCT01564602 -NCT01562106 -NCT01564784 -NCT01562184 -NCT01564810 -NCT01562197 -NCT01564836 -NCT01562210 -NCT01564849 -NCT01562223 -NCT01564914 -NCT01562275 -NCT01565083 -NCT01562301 -NCT01565109 -NCT01562405 -NCT01565135 -NCT01562418 -NCT01565200 -NCT01562431 -NCT01565239 -NCT01562457 -NCT01565486 -NCT01562496 -NCT01565499 -NCT01562509 -NCT01565512 -NCT01562522 -NCT01565538 -NCT01562535 -NCT01565616 -NCT01562548 -NCT01565668 -NCT01562626 -NCT01565746 -NCT01562678 -NCT01565772 -NCT01562717 -NCT01565837 -NCT01562756 -NCT01565889 -NCT01562782 -NCT01565928 -NCT01562847 -NCT01565980 -NCT01562873 -NCT01566019 -NCT01562899 -NCT01566045 -NCT01562977 -NCT01566071 -NCT01562990 -NCT01566123 -NCT01563055 -NCT01566240 -NCT01563094 -NCT01566279 -NCT01563133 -NCT01566292 -NCT01563172 -NCT01566383 -NCT01563289 -NCT01566409 -NCT01563302 -NCT01566435 -NCT01563354 -NCT01566448 -NCT01563536 -NCT01566474 -NCT01563588 -NCT01566500 -NCT01563601 -NCT01566604 -NCT01563614 -NCT01566669 -NCT01563627 -NCT01566695 -NCT01563757 -NCT01566721 -NCT01563796 -NCT01566734 -NCT01563822 -NCT01566747 -NCT01563900 -NCT01566799 -NCT01563926 -NCT01566812 -NCT01563991 -NCT01572545 -NCT01566890 -NCT01569815 -NCT01566903 -NCT01569763 -NCT01566942 -NCT01569919 -NCT01566968 -NCT01569958 -NCT01566994 -NCT01569984 -NCT01567059 -NCT01570010 -NCT01567072 -NCT01570023 -NCT01567137 -NCT01570036 -NCT01567163 -NCT01570049 -NCT01567202 -NCT01570075 -NCT01567345 -NCT01570166 -NCT01567384 -NCT01570192 -NCT01567462 -NCT01570218 -NCT01567475 -NCT01570231 -NCT01567488 -NCT01570257 -NCT01567501 -NCT01570296 -NCT01567618 -NCT01570309 -NCT01567631 -NCT01570361 -NCT01567709 -NCT01570387 -NCT01567735 -NCT01570582 -NCT01567787 -NCT01570621 -NCT01567800 -NCT01570634 -NCT01567891 -NCT01570647 -NCT01567930 -NCT01570816 -NCT01568034 -NCT01570868 -NCT01568138 -NCT01570998 -NCT01568151 -NCT01571024 -NCT01568294 -NCT01571141 -NCT01568307 -NCT01571180 -NCT01568346 -NCT01571271 -NCT01568359 -NCT01571284 -NCT01568450 -NCT01571362 -NCT01568476 -NCT01571453 -NCT01568580 -NCT01571544 -NCT01568632 -NCT01571596 -NCT01568658 -NCT01571622 -NCT01568684 -NCT01571648 -NCT01568697 -NCT01571726 -NCT01568710 -NCT01571739 -NCT01568853 -NCT01571934 -NCT01568866 -NCT01571960 -NCT01568879 -NCT01572012 -NCT01568918 -NCT01572038 -NCT01568996 -NCT01572051 -NCT01569074 -NCT01572064 -NCT01569204 -NCT01572090 -NCT01569282 -NCT01572103 -NCT01569295 -NCT01572116 -NCT01569321 -NCT01572181 -NCT01569412 -NCT01572233 -NCT01569425 -NCT01572324 -NCT01569620 -NCT01572428 -NCT01569633 -NCT01572480 -NCT01569672 -NCT01572493 -NCT01569724 -NCT01572519 -NCT01569750 -NCT01578499 -NCT01572571 -NCT01575782 -NCT01572623 -NCT01575730 -NCT01572662 -NCT01575821 -NCT01572688 -NCT01575834 -NCT01572701 -NCT01575860 -NCT01572727 -NCT01575873 -NCT01572818 -NCT01575925 -NCT01572857 -NCT01575951 -NCT01572935 -NCT01575990 -NCT01572987 -NCT01576029 -NCT01573000 -NCT01576055 -NCT01573156 -NCT01576107 -NCT01573169 -NCT01576172 -NCT01573247 -NCT01576354 -NCT01573260 -NCT01576380 -NCT01573286 -NCT01576393 -NCT01573338 -NCT01576406 -NCT01573416 -NCT01576419 -NCT01573442 -NCT01576458 -NCT01573468 -NCT01576549 -NCT01573494 -NCT01576562 -NCT01573546 -NCT01576588 -NCT01573611 -NCT01576666 -NCT01573702 -NCT01576692 -NCT01573754 -NCT01576705 -NCT01573780 -NCT01576718 -NCT01573793 -NCT01576796 -NCT01574001 -NCT01576900 -NCT01574027 -NCT01576939 -NCT01574066 -NCT01577017 -NCT01574092 -NCT01577173 -NCT01574170 -NCT01577212 -NCT01574209 -NCT01577316 -NCT01574222 -NCT01577355 -NCT01574274 -NCT01577407 -NCT01574339 -NCT01577420 -NCT01574365 -NCT01577459 -NCT01574456 -NCT01577602 -NCT01574495 -NCT01577654 -NCT01574716 -NCT01577745 -NCT01574729 -NCT01577771 -NCT01574781 -NCT01577784 -NCT01574859 -NCT01577862 -NCT01574937 -NCT01577914 -NCT01574989 -NCT01577953 -NCT01575249 -NCT01577966 -NCT01575275 -NCT01578018 -NCT01575314 -NCT01578031 -NCT01575340 -NCT01578109 -NCT01575444 -NCT01578213 -NCT01575522 -NCT01578239 -NCT01575535 -NCT01578252 -NCT01575548 -NCT01578265 -NCT01575574 -NCT01578317 -NCT01575678 -NCT01578343 -NCT01575717 -NCT01583517 -NCT01578551 -NCT01580969 -NCT01578564 -NCT01580891 -NCT01578577 -NCT01580982 -NCT01578642 -NCT01581008 -NCT01578655 -NCT01581034 -NCT01578668 -NCT01581125 -NCT01578681 -NCT01581281 -NCT01578694 -NCT01581294 -NCT01578707 -NCT01581307 -NCT01578733 -NCT01581346 -NCT01578811 -NCT01581463 -NCT01578824 -NCT01581541 -NCT01578889 -NCT01581580 -NCT01578902 -NCT01581619 -NCT01578954 -NCT01581645 -NCT01578967 -NCT01581723 -NCT01578980 -NCT01581749 -NCT01579058 -NCT01581775 -NCT01579071 -NCT01581801 -NCT01579084 -NCT01581840 -NCT01579110 -NCT01581905 -NCT01579188 -NCT01581944 -NCT01579227 -NCT01581970 -NCT01579318 -NCT01581996 -NCT01579357 -NCT01582009 -NCT01579435 -NCT01582035 -NCT01579487 -NCT01582061 -NCT01579539 -NCT01582100 -NCT01579552 -NCT01582139 -NCT01579578 -NCT01582152 -NCT01579591 -NCT01582178 -NCT01579630 -NCT01582191 -NCT01579721 -NCT01582204 -NCT01579734 -NCT01582269 -NCT01579747 -NCT01582295 -NCT01579812 -NCT01582516 -NCT01579929 -NCT01582529 -NCT01579942 -NCT01582659 -NCT01579994 -NCT01582672 -NCT01580033 -NCT01582685 -NCT01580085 -NCT01582724 -NCT01580137 -NCT01582776 -NCT01580202 -NCT01582841 -NCT01580228 -NCT01582971 -NCT01580293 -NCT01582984 -NCT01580345 -NCT01582997 -NCT01580358 -NCT01583205 -NCT01580371 -NCT01583283 -NCT01580397 -NCT01583296 -NCT01580410 -NCT01583309 -NCT01580462 -NCT01583322 -NCT01580501 -NCT01583348 -NCT01580696 -NCT01583361 -NCT01580735 -NCT01583426 -NCT01580787 -NCT01583478 -NCT01580878 -NCT01588873 -NCT01583543 -NCT01586273 -NCT01583621 -NCT01586260 -NCT01583660 -NCT01586299 -NCT01583686 -NCT01586403 -NCT01583699 -NCT01586416 -NCT01583712 -NCT01586455 -NCT01583777 -NCT01586520 -NCT01583816 -NCT01586546 -NCT01583842 -NCT01586611 -NCT01583881 -NCT01586624 -NCT01583920 -NCT01586728 -NCT01584011 -NCT01586767 -NCT01584076 -NCT01586858 -NCT01584115 -NCT01586884 -NCT01584141 -NCT01586910 -NCT01584258 -NCT01586988 -NCT01584271 -NCT01587014 -NCT01584284 -NCT01587040 -NCT01584297 -NCT01587144 -NCT01584336 -NCT01587248 -NCT01584388 -NCT01587313 -NCT01584440 -NCT01587352 -NCT01584531 -NCT01587430 -NCT01584544 -NCT01587443 -NCT01584648 -NCT01587534 -NCT01584674 -NCT01587586 -NCT01584830 -NCT01587677 -NCT01584960 -NCT01587703 -NCT01585012 -NCT01587807 -NCT01585051 -NCT01587820 -NCT01585194 -NCT01587846 -NCT01585246 -NCT01587859 -NCT01585311 -NCT01587872 -NCT01585350 -NCT01587885 -NCT01585415 -NCT01588015 -NCT01585428 -NCT01588132 -NCT01585454 -NCT01588145 -NCT01585532 -NCT01588184 -NCT01585597 -NCT01588236 -NCT01585623 -NCT01588249 -NCT01585649 -NCT01588262 -NCT01585662 -NCT01588301 -NCT01585688 -NCT01588340 -NCT01585727 -NCT01588379 -NCT01585805 -NCT01588418 -NCT01585831 -NCT01588431 -NCT01585870 -NCT01588483 -NCT01585883 -NCT01588509 -NCT01585987 -NCT01588522 -NCT01586000 -NCT01588548 -NCT01586104 -NCT01588678 -NCT01586117 -NCT01588704 -NCT01586169 -NCT01588769 -NCT01586182 -NCT01588821 -NCT01586195 -NCT01588847 -NCT01586234 -NCT01593995 -NCT01588951 -NCT01591681 -NCT01588964 -NCT01591590 -NCT01588990 -NCT01591733 -NCT01589003 -NCT01591746 -NCT01589016 -NCT01591798 -NCT01589094 -NCT01591811 -NCT01589146 -NCT01591863 -NCT01589159 -NCT01591902 -NCT01589172 -NCT01591915 -NCT01589289 -NCT01591967 -NCT01589302 -NCT01591980 -NCT01589328 -NCT01592019 -NCT01589367 -NCT01592045 -NCT01589380 -NCT01592240 -NCT01589419 -NCT01592370 -NCT01589471 -NCT01592383 -NCT01589497 -NCT01592396 -NCT01589601 -NCT01592422 -NCT01589627 -NCT01592500 -NCT01589796 -NCT01592578 -NCT01589848 -NCT01592617 -NCT01589861 -NCT01592669 -NCT01589926 -NCT01592708 -NCT01590017 -NCT01592721 -NCT01590069 -NCT01592734 -NCT01590082 -NCT01592747 -NCT01590095 -NCT01592929 -NCT01590147 -NCT01592968 -NCT01590160 -NCT01592981 -NCT01590199 -NCT01592994 -NCT01590316 -NCT01593007 -NCT01590355 -NCT01593020 -NCT01590394 -NCT01593111 -NCT01590719 -NCT01593124 -NCT01590732 -NCT01593189 -NCT01590745 -NCT01593228 -NCT01590758 -NCT01593241 -NCT01590784 -NCT01593254 -NCT01590862 -NCT01593280 -NCT01590940 -NCT01593293 -NCT01591005 -NCT01593306 -NCT01591018 -NCT01593410 -NCT01591031 -NCT01593449 -NCT01591096 -NCT01593475 -NCT01591122 -NCT01593488 -NCT01591135 -NCT01593514 -NCT01591174 -NCT01593527 -NCT01591226 -NCT01593618 -NCT01591317 -NCT01593644 -NCT01591356 -NCT01593670 -NCT01591395 -NCT01593696 -NCT01591421 -NCT01593748 -NCT01591473 -NCT01593761 -NCT01591486 -NCT01593852 -NCT01591499 -NCT01593943 -NCT01591577 -NCT01599520 -NCT01594099 -NCT01596816 -NCT01594112 -NCT01596790 -NCT01594125 -NCT01596829 -NCT01594177 -NCT01596868 -NCT01594216 -NCT01596907 -NCT01594229 -NCT01596933 -NCT01594242 -NCT01596972 -NCT01594346 -NCT01597063 -NCT01594372 -NCT01597076 -NCT01594398 -NCT01597193 -NCT01594567 -NCT01597219 -NCT01594593 -NCT01597232 -NCT01594658 -NCT01597258 -NCT01594723 -NCT01597336 -NCT01594762 -NCT01597349 -NCT01594879 -NCT01597375 -NCT01594892 -NCT01597388 -NCT01594918 -NCT01597401 -NCT01594996 -NCT01597414 -NCT01595009 -NCT01597505 -NCT01595061 -NCT01597518 -NCT01595087 -NCT01597687 -NCT01595178 -NCT01597778 -NCT01595204 -NCT01597791 -NCT01595217 -NCT01597804 -NCT01595243 -NCT01597817 -NCT01595256 -NCT01597830 -NCT01595321 -NCT01597908 -NCT01595438 -NCT01597973 -NCT01595451 -NCT01597999 -NCT01595503 -NCT01598025 -NCT01595529 -NCT01598038 -NCT01595542 -NCT01598077 -NCT01595607 -NCT01598090 -NCT01595646 -NCT01598194 -NCT01595672 -NCT01598298 -NCT01595763 -NCT01598311 -NCT01596049 -NCT01598402 -NCT01596088 -NCT01598415 -NCT01596101 -NCT01598454 -NCT01596114 -NCT01598558 -NCT01596127 -NCT01598584 -NCT01596140 -NCT01598649 -NCT01596153 -NCT01598792 -NCT01596166 -NCT01598857 -NCT01596244 -NCT01598935 -NCT01596257 -NCT01599013 -NCT01596270 -NCT01599026 -NCT01596283 -NCT01599039 -NCT01596530 -NCT01599143 -NCT01596582 -NCT01599156 -NCT01596621 -NCT01599195 -NCT01596634 -NCT01599208 -NCT01596647 -NCT01599273 -NCT01596699 -NCT01599416 -NCT01596751 -NCT01616199 -NCT01599533 -NCT01602289 -NCT01599546 -NCT01602224 -NCT01599559 -NCT01602315 -NCT01599754 -NCT01602380 -NCT01599780 -NCT01602406 -NCT01599793 -NCT01602471 -NCT01599806 -NCT01602588 -NCT01599832 -NCT01602601 -NCT01599884 -NCT01602627 -NCT01599897 -NCT01602666 -NCT01599910 -NCT01602783 -NCT01599923 -NCT01602809 -NCT01599936 -NCT01602926 -NCT01599949 -NCT01602939 -NCT01599975 -NCT01602952 -NCT01600014 -NCT01602965 -NCT01600040 -NCT01603017 -NCT01600053 -NCT01603095 -NCT01600105 -NCT01603134 -NCT01600196 -NCT01603160 -NCT01600339 -NCT01603173 -NCT01600417 -NCT01603186 -NCT01600521 -NCT01603212 -NCT01600573 -NCT01603303 -NCT01600638 -NCT01603316 -NCT01600742 -NCT01603407 -NCT01600781 -NCT01603420 -NCT01600807 -NCT01603459 -NCT01600833 -NCT01603576 -NCT01600859 -NCT01603693 -NCT01600898 -NCT01603745 -NCT01600963 -NCT01603849 -NCT01600976 -NCT01603888 -NCT01601015 -NCT01603979 -NCT01601041 -NCT01604005 -NCT01601184 -NCT01604031 -NCT01601197 -NCT01604070 -NCT01601262 -NCT01604148 -NCT01601275 -NCT01604161 -NCT01601288 -NCT01604174 -NCT01601314 -NCT01604239 -NCT01601327 -NCT01604356 -NCT01601340 -NCT01604382 -NCT01601366 -NCT01604395 -NCT01601379 -NCT01604408 -NCT01601444 -NCT01604460 -NCT01601535 -NCT01604512 -NCT01601548 -NCT01604642 -NCT01601678 -NCT01604655 -NCT01601691 -NCT01604759 -NCT01601808 -NCT01604772 -NCT01601977 -NCT01604785 -NCT01602042 -NCT01616056 -NCT01602055 -NCT01616134 -NCT01602068 -NCT01616160 -NCT01602211 -NCT01616186 -NCT01604811 -NCT01608009 -NCT01604863 -NCT01607996 -NCT01604889 -NCT01608022 -NCT01604980 -NCT01608074 -NCT01605032 -NCT01608139 -NCT01605097 -NCT01608165 -NCT01605162 -NCT01608360 -NCT01605227 -NCT01608399 -NCT01605240 -NCT01608451 -NCT01605305 -NCT01608464 -NCT01605318 -NCT01608529 -NCT01605331 -NCT01608594 -NCT01605344 -NCT01608620 -NCT01605396 -NCT01608646 -NCT01605513 -NCT01613924 -NCT01605526 -NCT01613950 -NCT01605630 -NCT01613976 -NCT01605669 -NCT01614132 -NCT01605734 -NCT01614171 -NCT01605916 -NCT01614184 -NCT01605929 -NCT01614197 -NCT01605981 -NCT01614210 -NCT01606033 -NCT01614301 -NCT01606072 -NCT01614379 -NCT01606085 -NCT01614392 -NCT01606098 -NCT01614418 -NCT01606124 -NCT01614522 -NCT01606228 -NCT01614561 -NCT01606241 -NCT01614652 -NCT01606345 -NCT01614717 -NCT01606384 -NCT01614743 -NCT01606397 -NCT01614795 -NCT01606449 -NCT01614821 -NCT01606566 -NCT01614847 -NCT01606579 -NCT01614886 -NCT01606631 -NCT01614938 -NCT01606748 -NCT01614990 -NCT01606774 -NCT01615029 -NCT01606787 -NCT01615042 -NCT01606878 -NCT01615120 -NCT01607008 -NCT01615146 -NCT01607047 -NCT01615224 -NCT01607151 -NCT01615367 -NCT01607216 -NCT01615380 -NCT01607255 -NCT01615406 -NCT01607294 -NCT01615510 -NCT01607554 -NCT01615562 -NCT01607580 -NCT01615653 -NCT01607645 -NCT01615666 -NCT01607658 -NCT01615705 -NCT01607684 -NCT01615757 -NCT01607827 -NCT01615783 -NCT01607866 -NCT01615809 -NCT01607879 -NCT01615913 -NCT01607905 -NCT01615926 -NCT01607957 -NCT01615965 -NCT01608711 -NCT01611584 -NCT01608841 -NCT01611571 -NCT01608867 -NCT01611597 -NCT01608971 -NCT01611623 -NCT01609010 -NCT01611649 -NCT01609062 -NCT01611662 -NCT01609127 -NCT01611675 -NCT01609140 -NCT01611727 -NCT01609179 -NCT01611766 -NCT01609231 -NCT01611857 -NCT01609257 -NCT01611961 -NCT01609309 -NCT01612091 -NCT01609361 -NCT01612182 -NCT01609504 -NCT01612221 -NCT01609543 -NCT01612247 -NCT01609556 -NCT01612286 -NCT01609582 -NCT01612325 -NCT01609608 -NCT01612338 -NCT01609660 -NCT01612351 -NCT01609790 -NCT01612416 -NCT01609816 -NCT01612481 -NCT01609894 -NCT01612546 -NCT01609920 -NCT01612598 -NCT01609933 -NCT01612624 -NCT01610050 -NCT01612650 -NCT01610180 -NCT01612728 -NCT01610193 -NCT01612793 -NCT01610206 -NCT01612871 -NCT01610219 -NCT01612910 -NCT01610284 -NCT01612988 -NCT01610336 -NCT01613131 -NCT01610375 -NCT01613222 -NCT01610440 -NCT01613248 -NCT01610479 -NCT01613300 -NCT01610531 -NCT01613313 -NCT01610544 -NCT01613352 -NCT01610570 -NCT01613430 -NCT01610648 -NCT01613443 -NCT01610843 -NCT01613469 -NCT01610869 -NCT01613482 -NCT01610895 -NCT01613521 -NCT01610908 -NCT01613534 -NCT01610934 -NCT01613560 -NCT01610999 -NCT01613573 -NCT01611025 -NCT01613586 -NCT01611038 -NCT01613599 -NCT01611051 -NCT01613638 -NCT01611090 -NCT01613651 -NCT01611116 -NCT01613677 -NCT01611142 -NCT01613729 -NCT01611259 -NCT01613768 -NCT01611298 -NCT01613807 -NCT01611480 -NCT01613833 -NCT01611506 -NCT01613846 -NCT01611532 -NCT01613885 -NCT01611558 -NCT01621685 -NCT01616238 -NCT01619358 -NCT01616303 -NCT01619293 -NCT01616316 -NCT01619423 -NCT01616381 -NCT01619475 -NCT01616537 -NCT01619514 -NCT01616589 -NCT01619553 -NCT01616602 -NCT01619605 -NCT01616641 -NCT01619631 -NCT01616758 -NCT01619683 -NCT01616849 -NCT01619696 -NCT01616862 -NCT01619761 -NCT01616875 -NCT01619774 -NCT01616901 -NCT01619813 -NCT01617031 -NCT01619839 -NCT01617057 -NCT01619865 -NCT01617161 -NCT01619943 -NCT01617213 -NCT01619969 -NCT01617226 -NCT01619995 -NCT01617278 -NCT01620034 -NCT01617473 -NCT01620138 -NCT01617603 -NCT01620164 -NCT01617616 -NCT01620190 -NCT01617629 -NCT01620216 -NCT01617642 -NCT01620229 -NCT01617668 -NCT01620242 -NCT01617694 -NCT01620281 -NCT01617733 -NCT01620359 -NCT01617915 -NCT01620398 -NCT01617928 -NCT01620411 -NCT01617980 -NCT01620515 -NCT01618136 -NCT01620580 -NCT01618149 -NCT01620593 -NCT01618227 -NCT01620645 -NCT01618253 -NCT01620684 -NCT01618357 -NCT01620710 -NCT01618370 -NCT01620736 -NCT01618422 -NCT01620749 -NCT01618448 -NCT01620801 -NCT01618474 -NCT01620970 -NCT01618487 -NCT01620996 -NCT01618513 -NCT01621061 -NCT01618591 -NCT01621100 -NCT01618617 -NCT01621217 -NCT01618721 -NCT01621243 -NCT01618760 -NCT01621256 -NCT01618838 -NCT01621282 -NCT01618851 -NCT01621308 -NCT01618890 -NCT01621451 -NCT01618929 -NCT01621477 -NCT01619033 -NCT01621490 -NCT01619046 -NCT01621529 -NCT01619098 -NCT01621542 -NCT01619111 -NCT01621568 -NCT01619150 -NCT01621659 -NCT01619163 -NCT01621672 -NCT01619228 -NCT01628380 -NCT01621698 -NCT01625013 -NCT01621724 -NCT01624805 -NCT01621789 -NCT01625156 -NCT01621854 -NCT01625234 -NCT01621880 -NCT01625260 -NCT01621906 -NCT01625286 -NCT01621971 -NCT01625338 -NCT01622114 -NCT01625351 -NCT01622218 -NCT01625390 -NCT01622257 -NCT01625429 -NCT01622322 -NCT01625442 -NCT01622361 -NCT01625455 -NCT01622439 -NCT01625520 -NCT01622543 -NCT01625533 -NCT01622582 -NCT01625546 -NCT01622621 -NCT01625702 -NCT01622660 -NCT01625741 -NCT01622699 -NCT01625936 -NCT01622712 -NCT01626001 -NCT01622751 -NCT01626014 -NCT01622764 -NCT01626066 -NCT01622803 -NCT01626079 -NCT01622868 -NCT01626105 -NCT01622894 -NCT01626209 -NCT01622933 -NCT01626222 -NCT01623037 -NCT01626235 -NCT01623102 -NCT01626352 -NCT01623115 -NCT01626391 -NCT01623141 -NCT01626417 -NCT01623154 -NCT01626495 -NCT01623206 -NCT01626638 -NCT01623336 -NCT01626664 -NCT01623349 -NCT01626820 -NCT01623440 -NCT01626833 -NCT01623596 -NCT01626963 -NCT01623739 -NCT01627028 -NCT01623765 -NCT01627041 -NCT01623804 -NCT01627054 -NCT01623817 -NCT01627067 -NCT01623869 -NCT01627132 -NCT01623908 -NCT01627197 -NCT01623921 -NCT01627288 -NCT01624025 -NCT01627366 -NCT01624051 -NCT01627379 -NCT01624090 -NCT01627522 -NCT01624155 -NCT01627535 -NCT01624220 -NCT01627704 -NCT01624272 -NCT01627717 -NCT01624285 -NCT01627795 -NCT01624441 -NCT01627951 -NCT01624467 -NCT01628029 -NCT01624493 -NCT01628211 -NCT01624610 -NCT01628250 -NCT01624701 -NCT01628263 -NCT01624753 -NCT01628315 -NCT01624766 -NCT01634113 -NCT01628432 -NCT01631318 -NCT01628458 -NCT01631305 -NCT01628471 -NCT01631331 -NCT01628484 -NCT01631357 -NCT01628497 -NCT01631409 -NCT01628510 -NCT01631422 -NCT01628536 -NCT01631435 -NCT01628549 -NCT01631474 -NCT01628640 -NCT01631513 -NCT01628653 -NCT01631526 -NCT01628887 -NCT01631539 -NCT01628900 -NCT01631552 -NCT01628913 -NCT01631565 -NCT01628978 -NCT01631591 -NCT01629082 -NCT01631708 -NCT01629095 -NCT01631760 -NCT01629147 -NCT01631890 -NCT01629160 -NCT01631903 -NCT01629251 -NCT01631968 -NCT01629303 -NCT01632020 -NCT01629329 -NCT01632137 -NCT01629381 -NCT01632150 -NCT01629498 -NCT01632228 -NCT01629511 -NCT01632241 -NCT01629563 -NCT01632306 -NCT01629615 -NCT01632332 -NCT01629667 -NCT01632436 -NCT01629758 -NCT01632696 -NCT01629797 -NCT01632709 -NCT01629823 -NCT01632722 -NCT01630018 -NCT01632787 -NCT01630083 -NCT01632800 -NCT01630096 -NCT01632852 -NCT01630226 -NCT01632904 -NCT01630239 -NCT01632956 -NCT01630265 -NCT01633008 -NCT01630291 -NCT01633021 -NCT01630408 -NCT01633060 -NCT01630421 -NCT01633099 -NCT01630499 -NCT01633203 -NCT01630525 -NCT01633255 -NCT01630564 -NCT01633333 -NCT01630590 -NCT01633372 -NCT01630603 -NCT01633437 -NCT01630655 -NCT01633463 -NCT01630681 -NCT01633476 -NCT01630733 -NCT01633515 -NCT01630746 -NCT01633541 -NCT01630772 -NCT01633645 -NCT01630798 -NCT01633762 -NCT01630889 -NCT01633918 -NCT01630954 -NCT01633931 -NCT01630967 -NCT01633970 -NCT01631136 -NCT01634009 -NCT01631214 -NCT01634061 -NCT01631279 -NCT01640665 -NCT01634126 -NCT01637701 -NCT01634217 -NCT01637649 -NCT01634269 -NCT01637714 -NCT01634282 -NCT01637753 -NCT01634555 -NCT01637766 -NCT01634620 -NCT01637805 -NCT01634685 -NCT01637857 -NCT01634750 -NCT01637961 -NCT01634763 -NCT01638039 -NCT01634893 -NCT01638052 -NCT01634984 -NCT01638091 -NCT01635088 -NCT01638156 -NCT01635140 -NCT01638247 -NCT01635244 -NCT01638390 -NCT01635270 -NCT01638533 -NCT01635283 -NCT01638546 -NCT01635296 -NCT01638611 -NCT01635374 -NCT01638676 -NCT01635400 -NCT01638923 -NCT01635413 -NCT01638936 -NCT01635504 -NCT01638962 -NCT01635530 -NCT01639001 -NCT01635647 -NCT01639118 -NCT01635699 -NCT01639131 -NCT01635712 -NCT01639170 -NCT01635868 -NCT01639248 -NCT01635907 -NCT01639274 -NCT01635946 -NCT01639287 -NCT01635959 -NCT01639326 -NCT01636128 -NCT01639352 -NCT01636219 -NCT01639365 -NCT01636245 -NCT01639391 -NCT01636388 -NCT01639430 -NCT01636427 -NCT01639443 -NCT01636479 -NCT01639456 -NCT01636492 -NCT01639508 -NCT01636544 -NCT01639521 -NCT01636609 -NCT01639612 -NCT01636622 -NCT01639625 -NCT01636674 -NCT01639677 -NCT01636882 -NCT01639703 -NCT01636908 -NCT01639846 -NCT01636934 -NCT01639859 -NCT01636960 -NCT01639885 -NCT01636973 -NCT01639911 -NCT01637090 -NCT01639924 -NCT01637103 -NCT01640015 -NCT01637129 -NCT01640119 -NCT01637194 -NCT01640301 -NCT01637220 -NCT01640340 -NCT01637376 -NCT01640353 -NCT01637402 -NCT01640405 -NCT01637532 -NCT01640444 -NCT01637558 -NCT01640509 -NCT01637584 -NCT01640522 -NCT01637623 -NCT01646034 -NCT01640678 -NCT01643460 -NCT01640717 -NCT01643447 -NCT01640782 -NCT01643499 -NCT01640808 -NCT01643577 -NCT01640847 -NCT01643603 -NCT01640886 -NCT01643668 -NCT01641029 -NCT01643707 -NCT01641068 -NCT01643759 -NCT01641107 -NCT01643811 -NCT01641172 -NCT01643824 -NCT01641185 -NCT01643837 -NCT01641250 -NCT01643850 -NCT01641276 -NCT01643902 -NCT01641406 -NCT01643954 -NCT01641419 -NCT01644097 -NCT01641458 -NCT01644136 -NCT01641484 -NCT01644253 -NCT01641497 -NCT01644305 -NCT01641575 -NCT01644448 -NCT01641653 -NCT01644565 -NCT01641679 -NCT01644591 -NCT01641705 -NCT01644669 -NCT01641718 -NCT01644682 -NCT01641757 -NCT01644708 -NCT01641783 -NCT01644773 -NCT01641835 -NCT01644799 -NCT01641939 -NCT01644825 -NCT01641952 -NCT01644864 -NCT01642004 -NCT01644890 -NCT01642017 -NCT01644916 -NCT01642082 -NCT01644955 -NCT01642121 -NCT01644968 -NCT01642147 -NCT01644994 -NCT01642186 -NCT01645046 -NCT01642251 -NCT01645098 -NCT01642342 -NCT01645111 -NCT01642446 -NCT01645124 -NCT01642511 -NCT01645150 -NCT01642563 -NCT01645176 -NCT01642615 -NCT01645215 -NCT01642732 -NCT01645293 -NCT01642771 -NCT01645306 -NCT01642797 -NCT01645332 -NCT01642849 -NCT01645371 -NCT01642875 -NCT01645384 -NCT01642888 -NCT01645436 -NCT01642914 -NCT01645449 -NCT01642953 -NCT01645696 -NCT01642979 -NCT01645709 -NCT01643005 -NCT01645748 -NCT01643070 -NCT01645774 -NCT01643109 -NCT01645826 -NCT01643239 -NCT01645839 -NCT01643278 -NCT01645930 -NCT01643291 -NCT01646021 -NCT01643408 -NCT01685125 -NCT01646086 -NCT01666977 -NCT01646125 -NCT01667042 -NCT01646203 -NCT01667068 -NCT01646242 -NCT01667081 -NCT01646268 -NCT01667133 -NCT01646346 -NCT01667172 -NCT01646437 -NCT01667198 -NCT01646450 -NCT01683864 -NCT01646476 -NCT01683877 -NCT01646541 -NCT01683968 -NCT01646554 -NCT01683994 -NCT01646684 -NCT01684072 -NCT01646697 -NCT01684098 -NCT01646762 -NCT01684111 -NCT01646775 -NCT01684150 -NCT01646853 -NCT01684202 -NCT01647165 -NCT01684215 -NCT01647334 -NCT01684241 -NCT01647477 -NCT01684384 -NCT01647594 -NCT01684397 -NCT01647607 -NCT01684449 -NCT01647620 -NCT01684579 -NCT01647646 -NCT01684605 -NCT01647659 -NCT01684670 -NCT01647672 -NCT01684696 -NCT01647711 -NCT01684839 -NCT01647737 -NCT01684878 -NCT01647750 -NCT01684904 -NCT01647789 -NCT01684943 -NCT01647828 -NCT01685008 -NCT01647867 -NCT01685021 -NCT01647958 -NCT01685047 -NCT01647971 -NCT01664000 -NCT01664026 -NCT01664091 -NCT01664130 -NCT01664182 -NCT01664195 -NCT01664221 -NCT01664273 -NCT01664546 -NCT01664663 -NCT01664728 -NCT01664754 -NCT01664897 -NCT01664910 -NCT01664923 -NCT01664975 -NCT01665001 -NCT01665014 -NCT01665118 -NCT01665183 -NCT01665274 -NCT01665417 -NCT01665495 -NCT01665521 -NCT01665547 -NCT01665586 -NCT01665599 -NCT01665625 -NCT01665703 -NCT01665768 -NCT01665781 -NCT01665794 -NCT01665820 -NCT01665859 -NCT01665937 -NCT01666015 -NCT01666145 -NCT01666158 -NCT01666314 -NCT01666353 -NCT01666418 -NCT01666431 -NCT01666444 -NCT01666509 -NCT01666548 -NCT01666600 -NCT01666730 -NCT01666756 -NCT01666782 -NCT01666808 -NCT01666873 -NCT01666899 -NCT01685060 -NCT01648010 -NCT01662960 -NCT01648023 -NCT01663012 -NCT01648140 -NCT01663090 -NCT01648218 -NCT01663103 -NCT01648322 -NCT01663155 -NCT01648348 -NCT01663207 -NCT01648452 -NCT01663246 -NCT01648465 -NCT01663259 -NCT01648504 -NCT01663272 -NCT01648517 -NCT01663285 -NCT01648530 -NCT01663350 -NCT01648608 -NCT01663415 -NCT01648764 -NCT01663493 -NCT01648803 -NCT01663545 -NCT01648894 -NCT01663584 -NCT01648972 -NCT01663597 -NCT01649024 -NCT01663623 -NCT01649089 -NCT01663675 -NCT01649180 -NCT01663701 -NCT01649258 -NCT01663714 -NCT01649271 -NCT01663727 -NCT01649336 -NCT01663753 -NCT01649349 -NCT01663766 -NCT01649505 -NCT01663857 -NCT01649583 -NCT01663909 -NCT01649622 -NCT01663935 -NCT01649635 -NCT01659788 -NCT01659853 -NCT01659879 -NCT01660009 -NCT01660048 -NCT01660087 -NCT01660152 -NCT01660347 -NCT01660360 -NCT01660399 -NCT01660451 -NCT01660529 -NCT01660542 -NCT01660607 -NCT01660633 -NCT01660672 -NCT01660711 -NCT01660750 -NCT01660906 -NCT01660971 -NCT01660997 -NCT01661010 -NCT01661062 -NCT01661088 -NCT01661114 -NCT01661127 -NCT01661166 -NCT01661179 -NCT01661270 -NCT01661283 -NCT01661322 -NCT01661335 -NCT01661387 -NCT01661400 -NCT01661439 -NCT01661465 -NCT01661595 -NCT01661621 -NCT01661686 -NCT01661712 -NCT01661777 -NCT01661842 -NCT01661868 -NCT01661881 -NCT01661959 -NCT01661972 -NCT01661998 -NCT01662050 -NCT01662076 -NCT01662102 -NCT01662128 -NCT01662427 -NCT01662453 -NCT01662505 -NCT01662531 -NCT01662596 -NCT01662609 -NCT01662713 -NCT01662726 -NCT01662739 -NCT01662752 -NCT01662804 -NCT01662843 -NCT01662869 -NCT01662921 -NCT01662947 -NCT01649700 -NCT01659112 -NCT01649791 -NCT01659151 -NCT01649804 -NCT01659203 -NCT01649830 -NCT01659255 -NCT01649843 -NCT01659346 -NCT01649856 -NCT01659372 -NCT01649947 -NCT01659411 -NCT01650090 -NCT01659424 -NCT01650194 -NCT01659463 -NCT01650207 -NCT01659476 -NCT01650285 -NCT01659502 -NCT01650350 -NCT01659541 -NCT01650376 -NCT01659554 -NCT01650389 -NCT01659567 -NCT01650402 -NCT01659606 -NCT01650428 -NCT01659619 -NCT01650506 -NCT01659632 -NCT01650597 -NCT01659645 -NCT01650688 -NCT01655472 -NCT01655537 -NCT01655550 -NCT01655589 -NCT01655628 -NCT01655641 -NCT01655693 -NCT01655719 -NCT01655745 -NCT01655797 -NCT01655836 -NCT01655875 -NCT01655888 -NCT01655927 -NCT01655966 -NCT01655992 -NCT01656031 -NCT01656044 -NCT01656161 -NCT01656226 -NCT01656252 -NCT01656265 -NCT01656278 -NCT01656304 -NCT01656460 -NCT01656538 -NCT01656551 -NCT01656629 -NCT01656642 -NCT01656668 -NCT01656746 -NCT01656772 -NCT01656863 -NCT01656980 -NCT01657123 -NCT01657175 -NCT01657188 -NCT01657214 -NCT01657331 -NCT01657370 -NCT01657409 -NCT01657448 -NCT01657461 -NCT01657487 -NCT01657591 -NCT01657604 -NCT01657617 -NCT01657656 -NCT01657682 -NCT01657695 -NCT01657747 -NCT01657786 -NCT01657799 -NCT01657955 -NCT01657981 -NCT01658007 -NCT01658020 -NCT01658033 -NCT01658124 -NCT01658176 -NCT01658228 -NCT01658241 -NCT01658280 -NCT01658319 -NCT01658332 -NCT01658345 -NCT01658358 -NCT01658423 -NCT01658436 -NCT01658462 -NCT01658527 -NCT01658553 -NCT01658670 -NCT01658800 -NCT01658813 -NCT01658878 -NCT01658904 -NCT01658930 -NCT01658943 -NCT01658956 -NCT01659008 -NCT01659021 -NCT01659047 -NCT01659099 -NCT01650701 -NCT01653106 -NCT01650727 -NCT01653093 -NCT01650805 -NCT01653145 -NCT01651039 -NCT01653171 -NCT01651078 -NCT01653249 -NCT01651182 -NCT01653301 -NCT01651312 -NCT01653327 -NCT01651377 -NCT01653366 -NCT01651468 -NCT01653418 -NCT01651494 -NCT01653470 -NCT01651520 -NCT01653496 -NCT01651624 -NCT01653522 -NCT01651663 -NCT01653561 -NCT01651754 -NCT01653574 -NCT01651767 -NCT01653639 -NCT01651793 -NCT01653717 -NCT01651832 -NCT01653834 -NCT01651871 -NCT01653873 -NCT01651949 -NCT01653886 -NCT01651975 -NCT01653899 -NCT01652014 -NCT01653912 -NCT01652027 -NCT01653925 -NCT01652066 -NCT01653964 -NCT01652079 -NCT01653990 -NCT01652092 -NCT01654068 -NCT01652144 -NCT01654081 -NCT01652157 -NCT01654120 -NCT01652170 -NCT01654146 -NCT01652183 -NCT01654159 -NCT01652196 -NCT01654185 -NCT01652222 -NCT01654198 -NCT01652261 -NCT01654224 -NCT01652456 -NCT01654289 -NCT01652469 -NCT01654367 -NCT01652482 -NCT01654445 -NCT01652521 -NCT01654458 -NCT01652547 -NCT01654497 -NCT01652560 -NCT01654588 -NCT01652573 -NCT01654666 -NCT01652625 -NCT01654692 -NCT01652651 -NCT01654809 -NCT01652768 -NCT01654861 -NCT01652781 -NCT01654874 -NCT01652794 -NCT01654965 -NCT01652820 -NCT01655004 -NCT01652859 -NCT01655043 -NCT01652898 -NCT01655056 -NCT01652911 -NCT01655121 -NCT01652963 -NCT01655212 -NCT01652976 -NCT01655225 -NCT01652989 -NCT01655238 -NCT01653002 -NCT01655251 -NCT01653028 -NCT01655264 -NCT01653054 -NCT01655329 -NCT01653067 -NCT01655446 -NCT01653080 -NCT01683825 -NCT01667211 -NCT01670097 -NCT01667237 -NCT01670084 -NCT01667250 -NCT01670175 -NCT01667289 -NCT01670292 -NCT01667302 -NCT01670370 -NCT01667328 -NCT01670409 -NCT01667367 -NCT01670422 -NCT01667419 -NCT01670435 -NCT01667536 -NCT01670448 -NCT01667562 -NCT01670461 -NCT01667627 -NCT01670474 -NCT01667640 -NCT01681563 -NCT01667718 -NCT01681615 -NCT01667744 -NCT01681641 -NCT01667770 -NCT01681654 -NCT01667848 -NCT01681667 -NCT01668017 -NCT01681823 -NCT01668134 -NCT01681836 -NCT01668173 -NCT01681875 -NCT01668251 -NCT01682031 -NCT01668290 -NCT01682044 -NCT01668381 -NCT01682083 -NCT01668459 -NCT01682122 -NCT01668472 -NCT01682135 -NCT01668498 -NCT01682187 -NCT01668654 -NCT01682200 -NCT01668680 -NCT01682213 -NCT01668719 -NCT01682226 -NCT01668784 -NCT01682317 -NCT01668823 -NCT01682460 -NCT01668849 -NCT01682473 -NCT01668862 -NCT01682616 -NCT01668875 -NCT01682720 -NCT01668914 -NCT01682733 -NCT01668953 -NCT01682746 -NCT01669109 -NCT01682772 -NCT01669148 -NCT01682798 -NCT01669161 -NCT01682837 -NCT01669174 -NCT01682850 -NCT01669187 -NCT01682941 -NCT01669226 -NCT01683019 -NCT01669239 -NCT01683149 -NCT01669252 -NCT01683162 -NCT01669304 -NCT01683175 -NCT01669317 -NCT01683188 -NCT01669343 -NCT01683240 -NCT01669356 -NCT01683279 -NCT01669369 -NCT01683422 -NCT01669499 -NCT01683435 -NCT01669655 -NCT01683487 -NCT01669668 -NCT01683565 -NCT01669707 -NCT01683682 -NCT01669720 -NCT01683708 -NCT01669798 -NCT01683786 -NCT01669928 -NCT01683799 -NCT01670006 -NCT01683812 -NCT01670500 -NCT01673334 -NCT01670539 -NCT01673308 -NCT01670617 -NCT01673347 -NCT01670643 -NCT01673373 -NCT01670721 -NCT01673386 -NCT01670786 -NCT01673438 -NCT01670799 -NCT01673490 -NCT01670812 -NCT01673568 -NCT01670877 -NCT01673607 -NCT01670890 -NCT01673633 -NCT01670994 -NCT01673646 -NCT01671150 -NCT01673698 -NCT01671267 -NCT01673737 -NCT01671319 -NCT01673789 -NCT01671332 -NCT01673802 -NCT01671371 -NCT01673854 -NCT01671384 -NCT01673867 -NCT01671397 -NCT01673919 -NCT01671423 -NCT01673932 -NCT01671436 -NCT01673945 -NCT01671449 -NCT01673984 -NCT01671462 -NCT01674049 -NCT01671488 -NCT01674062 -NCT01671592 -NCT01674101 -NCT01671774 -NCT01674140 -NCT01671813 -NCT01674205 -NCT01671826 -NCT01674270 -NCT01671878 -NCT01674309 -NCT01671904 -NCT01674374 -NCT01671943 -NCT01674530 -NCT01672021 -NCT01674556 -NCT01672151 -NCT01674582 -NCT01672216 -NCT01674608 -NCT01672242 -NCT01674621 -NCT01672268 -NCT01674725 -NCT01672294 -NCT01674738 -NCT01672307 -NCT01674842 -NCT01672333 -NCT01674881 -NCT01672411 -NCT01674959 -NCT01672450 -NCT01674985 -NCT01672463 -NCT01674998 -NCT01672658 -NCT01675037 -NCT01672671 -NCT01675128 -NCT01672684 -NCT01675141 -NCT01672736 -NCT01675219 -NCT01672749 -NCT01675310 -NCT01672775 -NCT01675323 -NCT01672892 -NCT01675362 -NCT01672918 -NCT01681004 -NCT01672944 -NCT01681212 -NCT01673009 -NCT01681303 -NCT01673022 -NCT01681368 -NCT01673152 -NCT01681433 -NCT01673217 -NCT01681446 -NCT01673269 -NCT01681472 -NCT01673282 -NCT01681537 -NCT01675401 -NCT01677988 -NCT01675440 -NCT01677975 -NCT01675466 -NCT01678027 -NCT01675531 -NCT01678053 -NCT01675622 -NCT01678105 -NCT01675635 -NCT01678131 -NCT01675713 -NCT01678144 -NCT01675765 -NCT01678157 -NCT01675778 -NCT01678261 -NCT01675856 -NCT01678274 -NCT01675908 -NCT01678352 -NCT01675921 -NCT01678365 -NCT01675934 -NCT01678391 -NCT01675999 -NCT01678404 -NCT01676090 -NCT01678417 -NCT01676194 -NCT01678430 -NCT01676259 -NCT01678443 -NCT01676363 -NCT01678664 -NCT01676428 -NCT01678690 -NCT01676480 -NCT01678729 -NCT01676493 -NCT01678859 -NCT01676558 -NCT01678963 -NCT01676649 -NCT01679041 -NCT01676714 -NCT01679119 -NCT01676753 -NCT01679158 -NCT01676779 -NCT01679210 -NCT01676792 -NCT01679327 -NCT01676818 -NCT01679340 -NCT01676831 -NCT01679405 -NCT01676909 -NCT01679431 -NCT01676948 -NCT01679470 -NCT01676961 -NCT01679483 -NCT01677091 -NCT01679522 -NCT01677234 -NCT01679548 -NCT01677260 -NCT01679574 -NCT01677286 -NCT01679691 -NCT01677312 -NCT01679717 -NCT01677390 -NCT01679743 -NCT01677416 -NCT01679756 -NCT01677455 -NCT01679860 -NCT01677468 -NCT01679925 -NCT01677481 -NCT01679951 -NCT01677559 -NCT01679977 -NCT01677572 -NCT01680029 -NCT01677624 -NCT01680172 -NCT01677637 -NCT01680198 -NCT01677689 -NCT01680211 -NCT01677715 -NCT01680380 -NCT01677741 -NCT01680432 -NCT01677780 -NCT01680523 -NCT01677845 -NCT01680640 -NCT01677858 -NCT01680796 -NCT01677884 -NCT01680822 -NCT01677897 -NCT01680874 -NCT01677949 -NCT01680991 -NCT01677962 -NCT01696032 -NCT01685138 -NCT01693939 -NCT01685190 -NCT01693991 -NCT01685255 -NCT01694043 -NCT01685268 -NCT01694056 -NCT01685333 -NCT01694225 -NCT01685346 -NCT01694238 -NCT01685359 -NCT01694251 -NCT01685385 -NCT01694277 -NCT01685398 -NCT01694472 -NCT01685411 -NCT01694511 -NCT01685489 -NCT01694576 -NCT01685515 -NCT01694589 -NCT01685567 -NCT01694654 -NCT01685580 -NCT01694771 -NCT01685606 -NCT01694784 -NCT01685632 -NCT01694875 -NCT01685723 -NCT01694953 -NCT01685749 -NCT01694966 -NCT01685814 -NCT01695005 -NCT01685827 -NCT01695031 -NCT01685892 -NCT01695044 -NCT01685983 -NCT01695057 -NCT01685996 -NCT01695122 -NCT01686126 -NCT01695135 -NCT01686152 -NCT01695187 -NCT01686165 -NCT01695226 -NCT01686256 -NCT01695265 -NCT01686282 -NCT01695330 -NCT01686321 -NCT01695369 -NCT01686334 -NCT01695382 -NCT01686360 -NCT01695434 -NCT01686386 -NCT01695447 -NCT01686412 -NCT01695473 -NCT01686568 -NCT01695525 -NCT01686594 -NCT01695577 -NCT01686672 -NCT01695590 -NCT01686698 -NCT01695733 -NCT01686737 -NCT01695772 -NCT01686776 -NCT01695850 -NCT01686828 -NCT01695863 -NCT01686880 -NCT01695902 -NCT01686958 -NCT01695915 -NCT01686971 -NCT01695941 -NCT01687049 -NCT01692379 -NCT01692405 -NCT01692496 -NCT01692587 -NCT01692626 -NCT01692678 -NCT01692691 -NCT01692704 -NCT01692834 -NCT01692873 -NCT01692964 -NCT01693068 -NCT01693172 -NCT01693237 -NCT01693276 -NCT01693419 -NCT01693432 -NCT01693445 -NCT01693510 -NCT01693523 -NCT01693549 -NCT01693562 -NCT01693575 -NCT01693614 -NCT01693770 -NCT01693783 -NCT01693822 -NCT01695993 -NCT01687101 -NCT01689636 -NCT01687179 -NCT01689623 -NCT01687192 -NCT01689662 -NCT01687205 -NCT01689714 -NCT01687244 -NCT01689727 -NCT01687257 -NCT01689766 -NCT01687283 -NCT01689792 -NCT01687387 -NCT01689870 -NCT01687400 -NCT01689883 -NCT01687413 -NCT01689896 -NCT01687439 -NCT01689948 -NCT01687543 -NCT01689961 -NCT01687608 -NCT01689974 -NCT01687647 -NCT01689987 -NCT01687673 -NCT01690013 -NCT01687738 -NCT01690065 -NCT01687790 -NCT01690143 -NCT01687842 -NCT01690182 -NCT01687959 -NCT01690325 -NCT01687972 -NCT01690364 -NCT01687998 -NCT01690377 -NCT01688076 -NCT01690390 -NCT01688128 -NCT01690468 -NCT01688206 -NCT01690507 -NCT01688336 -NCT01690520 -NCT01688349 -NCT01690559 -NCT01688388 -NCT01690598 -NCT01688401 -NCT01690624 -NCT01688414 -NCT01690702 -NCT01688453 -NCT01690741 -NCT01688466 -NCT01690767 -NCT01688479 -NCT01690871 -NCT01688492 -NCT01690936 -NCT01688531 -NCT01691040 -NCT01688557 -NCT01691196 -NCT01688609 -NCT01691248 -NCT01688700 -NCT01691300 -NCT01688713 -NCT01691339 -NCT01688791 -NCT01691352 -NCT01688817 -NCT01691391 -NCT01688908 -NCT01691508 -NCT01688934 -NCT01691521 -NCT01688960 -NCT01691547 -NCT01688973 -NCT01691625 -NCT01688999 -NCT01691664 -NCT01689064 -NCT01691781 -NCT01689194 -NCT01691807 -NCT01689220 -NCT01691898 -NCT01689350 -NCT01691976 -NCT01689402 -NCT01692015 -NCT01689467 -NCT01692106 -NCT01689519 -NCT01692132 -NCT01689532 -NCT01692197 -NCT01689558 -NCT01692223 -NCT01689584 -NCT01692262 -NCT01689610 -NCT01701284 -NCT01696045 -NCT01698658 -NCT01696084 -NCT01698489 -NCT01696123 -NCT01698697 -NCT01696136 -NCT01698801 -NCT01696227 -NCT01698840 -NCT01696266 -NCT01698879 -NCT01696461 -NCT01698905 -NCT01696539 -NCT01698918 -NCT01696552 -NCT01699009 -NCT01696565 -NCT01699022 -NCT01696630 -NCT01699061 -NCT01696669 -NCT01699074 -NCT01696734 -NCT01699139 -NCT01696760 -NCT01699152 -NCT01696799 -NCT01699269 -NCT01696864 -NCT01699399 -NCT01696877 -NCT01699542 -NCT01696955 -NCT01699555 -NCT01696968 -NCT01699581 -NCT01696981 -NCT01699607 -NCT01696994 -NCT01699672 -NCT01697020 -NCT01699698 -NCT01697059 -NCT01699906 -NCT01697072 -NCT01699919 -NCT01697150 -NCT01700010 -NCT01697228 -NCT01700049 -NCT01697267 -NCT01700062 -NCT01697293 -NCT01700244 -NCT01697306 -NCT01700257 -NCT01697332 -NCT01700270 -NCT01697345 -NCT01700283 -NCT01697358 -NCT01700309 -NCT01697371 -NCT01700335 -NCT01697384 -NCT01700400 -NCT01697514 -NCT01700413 -NCT01697527 -NCT01700426 -NCT01697540 -NCT01700439 -NCT01697605 -NCT01700517 -NCT01697800 -NCT01700530 -NCT01697891 -NCT01700569 -NCT01697917 -NCT01700634 -NCT01697930 -NCT01700673 -NCT01697943 -NCT01700686 -NCT01698047 -NCT01700738 -NCT01698073 -NCT01700751 -NCT01698086 -NCT01700829 -NCT01698099 -NCT01700881 -NCT01698164 -NCT01700946 -NCT01698190 -NCT01700959 -NCT01698203 -NCT01701037 -NCT01698268 -NCT01701076 -NCT01698281 -NCT01701089 -NCT01698398 -NCT01701232 -NCT01698411 -NCT01701245 -NCT01698424 -NCT01701258 -NCT01698437 -NCT01706120 -NCT01701310 -NCT01703845 -NCT01701323 -NCT01703806 -NCT01701349 -NCT01703910 -NCT01701375 -NCT01703949 -NCT01701388 -NCT01704027 -NCT01701427 -NCT01704157 -NCT01701466 -NCT01704274 -NCT01701479 -NCT01704287 -NCT01701622 -NCT01704313 -NCT01701674 -NCT01704339 -NCT01701687 -NCT01704430 -NCT01701804 -NCT01704469 -NCT01701843 -NCT01704495 -NCT01701869 -NCT01704586 -NCT01701947 -NCT01704651 -NCT01701986 -NCT01704664 -NCT01702012 -NCT01704690 -NCT01702064 -NCT01704703 -NCT01702116 -NCT01704716 -NCT01702129 -NCT01704729 -NCT01702155 -NCT01704742 -NCT01702246 -NCT01704807 -NCT01702285 -NCT01704820 -NCT01702337 -NCT01704872 -NCT01702376 -NCT01704885 -NCT01702519 -NCT01704963 -NCT01702558 -NCT01704976 -NCT01702571 -NCT01705002 -NCT01702610 -NCT01705054 -NCT01702636 -NCT01705106 -NCT01702714 -NCT01705158 -NCT01702740 -NCT01705184 -NCT01702792 -NCT01705288 -NCT01702831 -NCT01705340 -NCT01702844 -NCT01705366 -NCT01702870 -NCT01705379 -NCT01702896 -NCT01705392 -NCT01702909 -NCT01705405 -NCT01702961 -NCT01705444 -NCT01703065 -NCT01705496 -NCT01703078 -NCT01705548 -NCT01703091 -NCT01705587 -NCT01703195 -NCT01705600 -NCT01703351 -NCT01705652 -NCT01703364 -NCT01705691 -NCT01703390 -NCT01705795 -NCT01703403 -NCT01705834 -NCT01703455 -NCT01705847 -NCT01703481 -NCT01705886 -NCT01703494 -NCT01705899 -NCT01703507 -NCT01705964 -NCT01703559 -NCT01706016 -NCT01703676 -NCT01706068 -NCT01703728 -NCT01706081 -NCT01703754 -NCT01706094 -NCT01703780 -NCT01712204 -NCT01706237 -NCT01709331 -NCT01706250 -NCT01709292 -NCT01706263 -NCT01709344 -NCT01706393 -NCT01709370 -NCT01706445 -NCT01709396 -NCT01706458 -NCT01709435 -NCT01706562 -NCT01709487 -NCT01706627 -NCT01709513 -NCT01706666 -NCT01709539 -NCT01706705 -NCT01709734 -NCT01706822 -NCT01709812 -NCT01706835 -NCT01709864 -NCT01706900 -NCT01710072 -NCT01706939 -NCT01710085 -NCT01707004 -NCT01710176 -NCT01707056 -NCT01710215 -NCT01707121 -NCT01710254 -NCT01707173 -NCT01710293 -NCT01707212 -NCT01710501 -NCT01707225 -NCT01710592 -NCT01707238 -NCT01710605 -NCT01707251 -NCT01710618 -NCT01707264 -NCT01710683 -NCT01707290 -NCT01710696 -NCT01707329 -NCT01710722 -NCT01707472 -NCT01710956 -NCT01707524 -NCT01711034 -NCT01707563 -NCT01711099 -NCT01707615 -NCT01711112 -NCT01707628 -NCT01711229 -NCT01707771 -NCT01711242 -NCT01707823 -NCT01711398 -NCT01707966 -NCT01711450 -NCT01708005 -NCT01711515 -NCT01708109 -NCT01711528 -NCT01708161 -NCT01711541 -NCT01708174 -NCT01711554 -NCT01708265 -NCT01711580 -NCT01708317 -NCT01711606 -NCT01708564 -NCT01711632 -NCT01708798 -NCT01711658 -NCT01708824 -NCT01711671 -NCT01708850 -NCT01711684 -NCT01708941 -NCT01711697 -NCT01708954 -NCT01711710 -NCT01708993 -NCT01711749 -NCT01709006 -NCT01711879 -NCT01709058 -NCT01711892 -NCT01709071 -NCT01711918 -NCT01709110 -NCT01711944 -NCT01709149 -NCT01711970 -NCT01709162 -NCT01711983 -NCT01709175 -NCT01712009 -NCT01709214 -NCT01712048 -NCT01709227 -NCT01712178 -NCT01709253 -NCT01717729 -NCT01712217 -NCT01715207 -NCT01712230 -NCT01715168 -NCT01712243 -NCT01715220 -NCT01712269 -NCT01715233 -NCT01712308 -NCT01715285 -NCT01712360 -NCT01715363 -NCT01712438 -NCT01715376 -NCT01712490 -NCT01715415 -NCT01712646 -NCT01715441 -NCT01712659 -NCT01715532 -NCT01712685 -NCT01715597 -NCT01712789 -NCT01715727 -NCT01712815 -NCT01715935 -NCT01712841 -NCT01715948 -NCT01712893 -NCT01715961 -NCT01712919 -NCT01716000 -NCT01712984 -NCT01716104 -NCT01713023 -NCT01716156 -NCT01713036 -NCT01716195 -NCT01713049 -NCT01716208 -NCT01713218 -NCT01716247 -NCT01713244 -NCT01716364 -NCT01713296 -NCT01716416 -NCT01713361 -NCT01716468 -NCT01713387 -NCT01716520 -NCT01713439 -NCT01716546 -NCT01713452 -NCT01716611 -NCT01713582 -NCT01716689 -NCT01713699 -NCT01716702 -NCT01713842 -NCT01716715 -NCT01713972 -NCT01716754 -NCT01714037 -NCT01716767 -NCT01714089 -NCT01716780 -NCT01714102 -NCT01716793 -NCT01714128 -NCT01716806 -NCT01714167 -NCT01716897 -NCT01714219 -NCT01716949 -NCT01714271 -NCT01717014 -NCT01714466 -NCT01717053 -NCT01714505 -NCT01717066 -NCT01714557 -NCT01717079 -NCT01714635 -NCT01717118 -NCT01714648 -NCT01717131 -NCT01714661 -NCT01717196 -NCT01714739 -NCT01717261 -NCT01714765 -NCT01717326 -NCT01714791 -NCT01717391 -NCT01714843 -NCT01717404 -NCT01714908 -NCT01717430 -NCT01714934 -NCT01717482 -NCT01714947 -NCT01717599 -NCT01715025 -NCT01717664 -NCT01715064 -NCT01717677 -NCT01715077 -NCT01717703 -NCT01715129 -NCT01717716 -NCT01715142 -NCT01723124 -NCT01717768 -NCT01720264 -NCT01717781 -NCT01720225 -NCT01717794 -NCT01720342 -NCT01717898 -NCT01720407 -NCT01717911 -NCT01720433 -NCT01717924 -NCT01720459 -NCT01718067 -NCT01720550 -NCT01718119 -NCT01720563 -NCT01718171 -NCT01720602 -NCT01718223 -NCT01720693 -NCT01718275 -NCT01720745 -NCT01718327 -NCT01720771 -NCT01718353 -NCT01720836 -NCT01718366 -NCT01720875 -NCT01718379 -NCT01720901 -NCT01718444 -NCT01721018 -NCT01718496 -NCT01721083 -NCT01718561 -NCT01721174 -NCT01718574 -NCT01721265 -NCT01718626 -NCT01721291 -NCT01718639 -NCT01721343 -NCT01718691 -NCT01721369 -NCT01718743 -NCT01721525 -NCT01718808 -NCT01721577 -NCT01718873 -NCT01721603 -NCT01718886 -NCT01721668 -NCT01718899 -NCT01721694 -NCT01719068 -NCT01721746 -NCT01719081 -NCT01721759 -NCT01719107 -NCT01721772 -NCT01719120 -NCT01721850 -NCT01719211 -NCT01721876 -NCT01719237 -NCT01721902 -NCT01719250 -NCT01721941 -NCT01719302 -NCT01721954 -NCT01719380 -NCT01721967 -NCT01719393 -NCT01722084 -NCT01719445 -NCT01722149 -NCT01719471 -NCT01722162 -NCT01719484 -NCT01722175 -NCT01719536 -NCT01722201 -NCT01719549 -NCT01722214 -NCT01719562 -NCT01722240 -NCT01719575 -NCT01722292 -NCT01719679 -NCT01722305 -NCT01719744 -NCT01722318 -NCT01719757 -NCT01722487 -NCT01719783 -NCT01722578 -NCT01719835 -NCT01722617 -NCT01719861 -NCT01722773 -NCT01719926 -NCT01722812 -NCT01720004 -NCT01722825 -NCT01720043 -NCT01722942 -NCT01720147 -NCT01722968 -NCT01720173 -NCT01723020 -NCT01720186 -NCT01728805 -NCT01723150 -NCT01725828 -NCT01723202 -NCT01725815 -NCT01723306 -NCT01725893 -NCT01723475 -NCT01726010 -NCT01723488 -NCT01726036 -NCT01723553 -NCT01726049 -NCT01723592 -NCT01726062 -NCT01723644 -NCT01726296 -NCT01723657 -NCT01726374 -NCT01723748 -NCT01726452 -NCT01723774 -NCT01726465 -NCT01723800 -NCT01726556 -NCT01723813 -NCT01726582 -NCT01723839 -NCT01726725 -NCT01723904 -NCT01726738 -NCT01723943 -NCT01726751 -NCT01723956 -NCT01726803 -NCT01723995 -NCT01726842 -NCT01724021 -NCT01726894 -NCT01724034 -NCT01726920 -NCT01724086 -NCT01726985 -NCT01724112 -NCT01727011 -NCT01724177 -NCT01727076 -NCT01724229 -NCT01727089 -NCT01724242 -NCT01727193 -NCT01724320 -NCT01727206 -NCT01724346 -NCT01727284 -NCT01724450 -NCT01727336 -NCT01724463 -NCT01727349 -NCT01724528 -NCT01727362 -NCT01724580 -NCT01727388 -NCT01724606 -NCT01727531 -NCT01724619 -NCT01727570 -NCT01724658 -NCT01727583 -NCT01724671 -NCT01727674 -NCT01724801 -NCT01727687 -NCT01724840 -NCT01727752 -NCT01724879 -NCT01727817 -NCT01724905 -NCT01727869 -NCT01724944 -NCT01727908 -NCT01724996 -NCT01727921 -NCT01725048 -NCT01728090 -NCT01725100 -NCT01728155 -NCT01725152 -NCT01728181 -NCT01725165 -NCT01728207 -NCT01725191 -NCT01728233 -NCT01725204 -NCT01728259 -NCT01725217 -NCT01728311 -NCT01725438 -NCT01728389 -NCT01725451 -NCT01728454 -NCT01725477 -NCT01728480 -NCT01725529 -NCT01728506 -NCT01725555 -NCT01728623 -NCT01725568 -NCT01728662 -NCT01725581 -NCT01728779 -NCT01725633 -NCT01734525 -NCT01728896 -NCT01731665 -NCT01729039 -NCT01731652 -NCT01729091 -NCT01731678 -NCT01729104 -NCT01731704 -NCT01729260 -NCT01731769 -NCT01729338 -NCT01731795 -NCT01729416 -NCT01731821 -NCT01729429 -NCT01731886 -NCT01729442 -NCT01731912 -NCT01729481 -NCT01731925 -NCT01729533 -NCT01732107 -NCT01729559 -NCT01732120 -NCT01729624 -NCT01732276 -NCT01729663 -NCT01732380 -NCT01729689 -NCT01732497 -NCT01729715 -NCT01732549 -NCT01729806 -NCT01732627 -NCT01729832 -NCT01732640 -NCT01729845 -NCT01732770 -NCT01729884 -NCT01732783 -NCT01729923 -NCT01732796 -NCT01730053 -NCT01732835 -NCT01730118 -NCT01732861 -NCT01730144 -NCT01732913 -NCT01730157 -NCT01732926 -NCT01730209 -NCT01733004 -NCT01730222 -NCT01733069 -NCT01730404 -NCT01733095 -NCT01730417 -NCT01733147 -NCT01730560 -NCT01733238 -NCT01730586 -NCT01733290 -NCT01730612 -NCT01733342 -NCT01730638 -NCT01733472 -NCT01730651 -NCT01733511 -NCT01730664 -NCT01733589 -NCT01730677 -NCT01733706 -NCT01730716 -NCT01733719 -NCT01730729 -NCT01733797 -NCT01730781 -NCT01733823 -NCT01730833 -NCT01733836 -NCT01730911 -NCT01733953 -NCT01730937 -NCT01733979 -NCT01730950 -NCT01734044 -NCT01731028 -NCT01734096 -NCT01731054 -NCT01734122 -NCT01731145 -NCT01734161 -NCT01731158 -NCT01734174 -NCT01731223 -NCT01734187 -NCT01731262 -NCT01734304 -NCT01731288 -NCT01734369 -NCT01731301 -NCT01734447 -NCT01731340 -NCT01734473 -NCT01731444 -NCT01734486 -NCT01731548 -NCT01734499 -NCT01731561 -NCT01734512 -NCT01731587 -NCT01740271 -NCT01734564 -NCT01737216 -NCT01734655 -NCT01737177 -NCT01734681 -NCT01737346 -NCT01734707 -NCT01737398 -NCT01734720 -NCT01737450 -NCT01734746 -NCT01737463 -NCT01734798 -NCT01737502 -NCT01734837 -NCT01737619 -NCT01734863 -NCT01737671 -NCT01734928 -NCT01737723 -NCT01734967 -NCT01737801 -NCT01735006 -NCT01737827 -NCT01735032 -NCT01737840 -NCT01735045 -NCT01737983 -NCT01735071 -NCT01738087 -NCT01735136 -NCT01738113 -NCT01735175 -NCT01738139 -NCT01735201 -NCT01738152 -NCT01735396 -NCT01738217 -NCT01735409 -NCT01738243 -NCT01735604 -NCT01738347 -NCT01735747 -NCT01738412 -NCT01735760 -NCT01738438 -NCT01735799 -NCT01738451 -NCT01735812 -NCT01738594 -NCT01735851 -NCT01738620 -NCT01735877 -NCT01738633 -NCT01735942 -NCT01738646 -NCT01735955 -NCT01738685 -NCT01736033 -NCT01738724 -NCT01736059 -NCT01738776 -NCT01736072 -NCT01738802 -NCT01736111 -NCT01738815 -NCT01736267 -NCT01738880 -NCT01736345 -NCT01738945 -NCT01736410 -NCT01738984 -NCT01736423 -NCT01738997 -NCT01736436 -NCT01739062 -NCT01736475 -NCT01739218 -NCT01736605 -NCT01739244 -NCT01736670 -NCT01739283 -NCT01736683 -NCT01739309 -NCT01736722 -NCT01739335 -NCT01736774 -NCT01739439 -NCT01736800 -NCT01739465 -NCT01736813 -NCT01739608 -NCT01736878 -NCT01739634 -NCT01736904 -NCT01739764 -NCT01736917 -NCT01739881 -NCT01736943 -NCT01739894 -NCT01736956 -NCT01739972 -NCT01737008 -NCT01740063 -NCT01737112 -NCT01740154 -NCT01737138 -NCT01740219 -NCT01737151 -NCT01740258 -NCT01737164 -NCT01745588 -NCT01740297 -NCT01743001 -NCT01740323 -NCT01742988 -NCT01740336 -NCT01743040 -NCT01740375 -NCT01743066 -NCT01740388 -NCT01743131 -NCT01740401 -NCT01743157 -NCT01740427 -NCT01743235 -NCT01740492 -NCT01743365 -NCT01740557 -NCT01743469 -NCT01740570 -NCT01743482 -NCT01740583 -NCT01743521 -NCT01740648 -NCT01743547 -NCT01740726 -NCT01743560 -NCT01740947 -NCT01743573 -NCT01740999 -NCT01743586 -NCT01741038 -NCT01743638 -NCT01741116 -NCT01743729 -NCT01741155 -NCT01743768 -NCT01741363 -NCT01743807 -NCT01741428 -NCT01743859 -NCT01741480 -NCT01743885 -NCT01741506 -NCT01743950 -NCT01741519 -NCT01743989 -NCT01741571 -NCT01744015 -NCT01741597 -NCT01744028 -NCT01741623 -NCT01744041 -NCT01741636 -NCT01744054 -NCT01741662 -NCT01744106 -NCT01741727 -NCT01744171 -NCT01741753 -NCT01744223 -NCT01741792 -NCT01744249 -NCT01741805 -NCT01744262 -NCT01741883 -NCT01744340 -NCT01741948 -NCT01744353 -NCT01742026 -NCT01744366 -NCT01742065 -NCT01744509 -NCT01742117 -NCT01744587 -NCT01742156 -NCT01744626 -NCT01742169 -NCT01744639 -NCT01742286 -NCT01744652 -NCT01742325 -NCT01744665 -NCT01742338 -NCT01744691 -NCT01742377 -NCT01744821 -NCT01742403 -NCT01744847 -NCT01742481 -NCT01744873 -NCT01742494 -NCT01744912 -NCT01742598 -NCT01744925 -NCT01742663 -NCT01745107 -NCT01742741 -NCT01745237 -NCT01742767 -NCT01745302 -NCT01742793 -NCT01745354 -NCT01742806 -NCT01745367 -NCT01742819 -NCT01745406 -NCT01742897 -NCT01745445 -NCT01742936 -NCT01745484 -NCT01742975 -NCT01750970 -NCT01745601 -NCT01747889 -NCT01745640 -NCT01747876 -NCT01745718 -NCT01747993 -NCT01745757 -NCT01748019 -NCT01745796 -NCT01748058 -NCT01745822 -NCT01748110 -NCT01745861 -NCT01748136 -NCT01745913 -NCT01748149 -NCT01745939 -NCT01748240 -NCT01745952 -NCT01748357 -NCT01745965 -NCT01748370 -NCT01746043 -NCT01748448 -NCT01746173 -NCT01748500 -NCT01746225 -NCT01748578 -NCT01746238 -NCT01748656 -NCT01746251 -NCT01748682 -NCT01746277 -NCT01748721 -NCT01746420 -NCT01748734 -NCT01746498 -NCT01748747 -NCT01746511 -NCT01748773 -NCT01746589 -NCT01748812 -NCT01746602 -NCT01748825 -NCT01746628 -NCT01748851 -NCT01746693 -NCT01748890 -NCT01746771 -NCT01748942 -NCT01746810 -NCT01748981 -NCT01746823 -NCT01749072 -NCT01746836 -NCT01749111 -NCT01746849 -NCT01749332 -NCT01746862 -NCT01749384 -NCT01746979 -NCT01749397 -NCT01746992 -NCT01749527 -NCT01747005 -NCT01749592 -NCT01747018 -NCT01749618 -NCT01747070 -NCT01749722 -NCT01747096 -NCT01749774 -NCT01747135 -NCT01749865 -NCT01747148 -NCT01749956 -NCT01747174 -NCT01749969 -NCT01747187 -NCT01750073 -NCT01747213 -NCT01750099 -NCT01747226 -NCT01750151 -NCT01747239 -NCT01750281 -NCT01747304 -NCT01750320 -NCT01747499 -NCT01750398 -NCT01747512 -NCT01750515 -NCT01747551 -NCT01750567 -NCT01747577 -NCT01750580 -NCT01747603 -NCT01750632 -NCT01747629 -NCT01750658 -NCT01747707 -NCT01750697 -NCT01747720 -NCT01750762 -NCT01747772 -NCT01750866 -NCT01747798 -NCT01750918 -NCT01747811 -NCT01750957 -NCT01747824 -NCT01757639 -NCT01750983 -NCT01754857 -NCT01751191 -NCT01754792 -NCT01751308 -NCT01754870 -NCT01751412 -NCT01754896 -NCT01751425 -NCT01754909 -NCT01751438 -NCT01754935 -NCT01751451 -NCT01754987 -NCT01751516 -NCT01755000 -NCT01751529 -NCT01755013 -NCT01751555 -NCT01755130 -NCT01751568 -NCT01755182 -NCT01751737 -NCT01755195 -NCT01751776 -NCT01755208 -NCT01751867 -NCT01755325 -NCT01751880 -NCT01755364 -NCT01751919 -NCT01755390 -NCT01751997 -NCT01755429 -NCT01752023 -NCT01755598 -NCT01752036 -NCT01755624 -NCT01752140 -NCT01755650 -NCT01752205 -NCT01755767 -NCT01752257 -NCT01755832 -NCT01752309 -NCT01755845 -NCT01752387 -NCT01755897 -NCT01752400 -NCT01755923 -NCT01752426 -NCT01755975 -NCT01752491 -NCT01756092 -NCT01752569 -NCT01756105 -NCT01752621 -NCT01756118 -NCT01752647 -NCT01756170 -NCT01752686 -NCT01756196 -NCT01752907 -NCT01756209 -NCT01752920 -NCT01756222 -NCT01752933 -NCT01756339 -NCT01752998 -NCT01756352 -NCT01753076 -NCT01756391 -NCT01753089 -NCT01756547 -NCT01753128 -NCT01756638 -NCT01753154 -NCT01756690 -NCT01753219 -NCT01756729 -NCT01753297 -NCT01756742 -NCT01753414 -NCT01756989 -NCT01753453 -NCT01757145 -NCT01753479 -NCT01757158 -NCT01753713 -NCT01757171 -NCT01753856 -NCT01757223 -NCT01753908 -NCT01757288 -NCT01754038 -NCT01757314 -NCT01754350 -NCT01757327 -NCT01754376 -NCT01757405 -NCT01754402 -NCT01757418 -NCT01754441 -NCT01757431 -NCT01754493 -NCT01757444 -NCT01754519 -NCT01757535 -NCT01754597 -NCT01757626 -NCT01754623 -NCT01763970 -NCT01757717 -NCT01761097 -NCT01757769 -NCT01760980 -NCT01757964 -NCT01761201 -NCT01758042 -NCT01761240 -NCT01758094 -NCT01761266 -NCT01758146 -NCT01761305 -NCT01758211 -NCT01761331 -NCT01758328 -NCT01761435 -NCT01758341 -NCT01761461 -NCT01758367 -NCT01761500 -NCT01758445 -NCT01761539 -NCT01758458 -NCT01761604 -NCT01758484 -NCT01761630 -NCT01758497 -NCT01761747 -NCT01758549 -NCT01761812 -NCT01758614 -NCT01761825 -NCT01758666 -NCT01761838 -NCT01758692 -NCT01761864 -NCT01758718 -NCT01761877 -NCT01758731 -NCT01761929 -NCT01758874 -NCT01761955 -NCT01758965 -NCT01761968 -NCT01759095 -NCT01761981 -NCT01759108 -NCT01762020 -NCT01759134 -NCT01762033 -NCT01759186 -NCT01762150 -NCT01759225 -NCT01762189 -NCT01759238 -NCT01762202 -NCT01759303 -NCT01762215 -NCT01759472 -NCT01762241 -NCT01759615 -NCT01762280 -NCT01759654 -NCT01762293 -NCT01759706 -NCT01762410 -NCT01759758 -NCT01762514 -NCT01759771 -NCT01762527 -NCT01759810 -NCT01762540 -NCT01759836 -NCT01762592 -NCT01759849 -NCT01762722 -NCT01759901 -NCT01762956 -NCT01759914 -NCT01762969 -NCT01760070 -NCT01762982 -NCT01760096 -NCT01763034 -NCT01760226 -NCT01763047 -NCT01760252 -NCT01763164 -NCT01760421 -NCT01763320 -NCT01760499 -NCT01763385 -NCT01760525 -NCT01763450 -NCT01760616 -NCT01763489 -NCT01760642 -NCT01763606 -NCT01760655 -NCT01763645 -NCT01760668 -NCT01763671 -NCT01760694 -NCT01763710 -NCT01760798 -NCT01763788 -NCT01760811 -NCT01763931 -NCT01760850 -NCT01763944 -NCT01760915 -NCT01769248 -NCT01764009 -NCT01766765 -NCT01764022 -NCT01766739 -NCT01764061 -NCT01766804 -NCT01764074 -NCT01766830 -NCT01764087 -NCT01766856 -NCT01764139 -NCT01767155 -NCT01764230 -NCT01767194 -NCT01764347 -NCT01767220 -NCT01764360 -NCT01767233 -NCT01764412 -NCT01767415 -NCT01764451 -NCT01767597 -NCT01764477 -NCT01767610 -NCT01764503 -NCT01767623 -NCT01764607 -NCT01767636 -NCT01764646 -NCT01767675 -NCT01764789 -NCT01767701 -NCT01764802 -NCT01767714 -NCT01764815 -NCT01767766 -NCT01764828 -NCT01767792 -NCT01764867 -NCT01767818 -NCT01764880 -NCT01767857 -NCT01764919 -NCT01767909 -NCT01765036 -NCT01767922 -NCT01765088 -NCT01767935 -NCT01765179 -NCT01767961 -NCT01765192 -NCT01768104 -NCT01765309 -NCT01768156 -NCT01765348 -NCT01768247 -NCT01765387 -NCT01768325 -NCT01765439 -NCT01768338 -NCT01765465 -NCT01768351 -NCT01765543 -NCT01768403 -NCT01765556 -NCT01768468 -NCT01765569 -NCT01768494 -NCT01765582 -NCT01768520 -NCT01765764 -NCT01768546 -NCT01765790 -NCT01768598 -NCT01765894 -NCT01768689 -NCT01765907 -NCT01768715 -NCT01765920 -NCT01768741 -NCT01766037 -NCT01768793 -NCT01766102 -NCT01768806 -NCT01766115 -NCT01768832 -NCT01766141 -NCT01768845 -NCT01766180 -NCT01768897 -NCT01766206 -NCT01768962 -NCT01766219 -NCT01768975 -NCT01766284 -NCT01768988 -NCT01766297 -NCT01769040 -NCT01766323 -NCT01769066 -NCT01766375 -NCT01769092 -NCT01766583 -NCT01769105 -NCT01766622 -NCT01769157 -NCT01766661 -NCT01769209 -NCT01766700 -NCT01769222 -NCT01766713 -NCT01775267 -NCT01769352 -NCT01772420 -NCT01769391 -NCT01772368 -NCT01769508 -NCT01772459 -NCT01769547 -NCT01772472 -NCT01769560 -NCT01772563 -NCT01769625 -NCT01772706 -NCT01769729 -NCT01772719 -NCT01769768 -NCT01772732 -NCT01769820 -NCT01772758 -NCT01769885 -NCT01772797 -NCT01769911 -NCT01772849 -NCT01769950 -NCT01772862 -NCT01770002 -NCT01772888 -NCT01770080 -NCT01772953 -NCT01770106 -NCT01772979 -NCT01770132 -NCT01773018 -NCT01770171 -NCT01773031 -NCT01770197 -NCT01773109 -NCT01770210 -NCT01773330 -NCT01770223 -NCT01773395 -NCT01770249 -NCT01773408 -NCT01770275 -NCT01773421 -NCT01770301 -NCT01773434 -NCT01770353 -NCT01773447 -NCT01770366 -NCT01773460 -NCT01770405 -NCT01773486 -NCT01770418 -NCT01773538 -NCT01770431 -NCT01773616 -NCT01770483 -NCT01773772 -NCT01770509 -NCT01773785 -NCT01770626 -NCT01773837 -NCT01770795 -NCT01773889 -NCT01770886 -NCT01774019 -NCT01770951 -NCT01774045 -NCT01770964 -NCT01774071 -NCT01771003 -NCT01774162 -NCT01771107 -NCT01774253 -NCT01771133 -NCT01774279 -NCT01771146 -NCT01774318 -NCT01771159 -NCT01774344 -NCT01771172 -NCT01774357 -NCT01771276 -NCT01774409 -NCT01771289 -NCT01774448 -NCT01771328 -NCT01774526 -NCT01771458 -NCT01774578 -NCT01771666 -NCT01774630 -NCT01771796 -NCT01774721 -NCT01771952 -NCT01774760 -NCT01772004 -NCT01774786 -NCT01772043 -NCT01774851 -NCT01772095 -NCT01774903 -NCT01772121 -NCT01774916 -NCT01772134 -NCT01775085 -NCT01772147 -NCT01775098 -NCT01772199 -NCT01775215 -NCT01772316 -NCT01781520 -NCT01775280 -NCT01778803 -NCT01775293 -NCT01778738 -NCT01775332 -NCT01778920 -NCT01775371 -NCT01778933 -NCT01775423 -NCT01778959 -NCT01775449 -NCT01779050 -NCT01775475 -NCT01779063 -NCT01775488 -NCT01779115 -NCT01775501 -NCT01779128 -NCT01775553 -NCT01779167 -NCT01775592 -NCT01779206 -NCT01775618 -NCT01779219 -NCT01775709 -NCT01779323 -NCT01775813 -NCT01779336 -NCT01775865 -NCT01779479 -NCT01775917 -NCT01779583 -NCT01775930 -NCT01779596 -NCT01775995 -NCT01779609 -NCT01776008 -NCT01779635 -NCT01776021 -NCT01779726 -NCT01776060 -NCT01779791 -NCT01776125 -NCT01779843 -NCT01776255 -NCT01779882 -NCT01776307 -NCT01779921 -NCT01776372 -NCT01779947 -NCT01776385 -NCT01780025 -NCT01776684 -NCT01780064 -NCT01776723 -NCT01780220 -NCT01776749 -NCT01780285 -NCT01776840 -NCT01780298 -NCT01776931 -NCT01780311 -NCT01777152 -NCT01780350 -NCT01777243 -NCT01780532 -NCT01777334 -NCT01780545 -NCT01777347 -NCT01780610 -NCT01777373 -NCT01780623 -NCT01777477 -NCT01780649 -NCT01777594 -NCT01780662 -NCT01777633 -NCT01780675 -NCT01777711 -NCT01780818 -NCT01777776 -NCT01780831 -NCT01777815 -NCT01780857 -NCT01777828 -NCT01780870 -NCT01777867 -NCT01780961 -NCT01777919 -NCT01781026 -NCT01777945 -NCT01781039 -NCT01777971 -NCT01781182 -NCT01778023 -NCT01781299 -NCT01778088 -NCT01781325 -NCT01778127 -NCT01781338 -NCT01778192 -NCT01781403 -NCT01778270 -NCT01781429 -NCT01778348 -NCT01781455 -NCT01778439 -NCT01781468 -NCT01778530 -NCT01781507 -NCT01778673 -NCT01786473 -NCT01781546 -NCT01784120 -NCT01781572 -NCT01784107 -NCT01781650 -NCT01784185 -NCT01781663 -NCT01784237 -NCT01781689 -NCT01784302 -NCT01781715 -NCT01784328 -NCT01781728 -NCT01784393 -NCT01781741 -NCT01784406 -NCT01781793 -NCT01784549 -NCT01781975 -NCT01784640 -NCT01781988 -NCT01784757 -NCT01782040 -NCT01784848 -NCT01782053 -NCT01784861 -NCT01782105 -NCT01784874 -NCT01782274 -NCT01784900 -NCT01782287 -NCT01784913 -NCT01782313 -NCT01784939 -NCT01782339 -NCT01784952 -NCT01782378 -NCT01784978 -NCT01782443 -NCT01785173 -NCT01782495 -NCT01785186 -NCT01782508 -NCT01785212 -NCT01782521 -NCT01785316 -NCT01782560 -NCT01785368 -NCT01782573 -NCT01785394 -NCT01782625 -NCT01785420 -NCT01782651 -NCT01785459 -NCT01782677 -NCT01785511 -NCT01782690 -NCT01785550 -NCT01782703 -NCT01785563 -NCT01782768 -NCT01785576 -NCT01782820 -NCT01785589 -NCT01782963 -NCT01785602 -NCT01782976 -NCT01785641 -NCT01783054 -NCT01785680 -NCT01783171 -NCT01785706 -NCT01783197 -NCT01785719 -NCT01783236 -NCT01785758 -NCT01783418 -NCT01785810 -NCT01783431 -NCT01785940 -NCT01783444 -NCT01785979 -NCT01783522 -NCT01785992 -NCT01783535 -NCT01786018 -NCT01783574 -NCT01786031 -NCT01783587 -NCT01786096 -NCT01783600 -NCT01786109 -NCT01783639 -NCT01786122 -NCT01783730 -NCT01786135 -NCT01783756 -NCT01786174 -NCT01783808 -NCT01786187 -NCT01783834 -NCT01786200 -NCT01783938 -NCT01786252 -NCT01783951 -NCT01786265 -NCT01784042 -NCT01786278 -NCT01784055 -NCT01786343 -NCT01784068 -NCT01792245 -NCT01786512 -NCT01789658 -NCT01786538 -NCT01789567 -NCT01786590 -NCT01789684 -NCT01786603 -NCT01789723 -NCT01786694 -NCT01789775 -NCT01786720 -NCT01789788 -NCT01786746 -NCT01789827 -NCT01786811 -NCT01789840 -NCT01786837 -NCT01789866 -NCT01786889 -NCT01789892 -NCT01786902 -NCT01790022 -NCT01786928 -NCT01790035 -NCT01787006 -NCT01790074 -NCT01787084 -NCT01790087 -NCT01787097 -NCT01790126 -NCT01787175 -NCT01790139 -NCT01787188 -NCT01790204 -NCT01787331 -NCT01790230 -NCT01787383 -NCT01790269 -NCT01787409 -NCT01790282 -NCT01787474 -NCT01790399 -NCT01787487 -NCT01790425 -NCT01787500 -NCT01790451 -NCT01787539 -NCT01790503 -NCT01787552 -NCT01790516 -NCT01787591 -NCT01790568 -NCT01787604 -NCT01790633 -NCT01787630 -NCT01790685 -NCT01787760 -NCT01790737 -NCT01788007 -NCT01790776 -NCT01788020 -NCT01790789 -NCT01788085 -NCT01790919 -NCT01788098 -NCT01790932 -NCT01788111 -NCT01791088 -NCT01788137 -NCT01791153 -NCT01788176 -NCT01791309 -NCT01788189 -NCT01791335 -NCT01788215 -NCT01791374 -NCT01788280 -NCT01791387 -NCT01788332 -NCT01791452 -NCT01788566 -NCT01791478 -NCT01788579 -NCT01791595 -NCT01788618 -NCT01791608 -NCT01788735 -NCT01791634 -NCT01788748 -NCT01791660 -NCT01788813 -NCT01791816 -NCT01788878 -NCT01791842 -NCT01788982 -NCT01791894 -NCT01789008 -NCT01791933 -NCT01789073 -NCT01791946 -NCT01789099 -NCT01791985 -NCT01789242 -NCT01791998 -NCT01789255 -NCT01792024 -NCT01789268 -NCT01792050 -NCT01789281 -NCT01792102 -NCT01789502 -NCT01797627 -NCT01792310 -NCT01795274 -NCT01792336 -NCT01795157 -NCT01792362 -NCT01795300 -NCT01792427 -NCT01795313 -NCT01792466 -NCT01795365 -NCT01792479 -NCT01795378 -NCT01792505 -NCT01795404 -NCT01792687 -NCT01795430 -NCT01792726 -NCT01795443 -NCT01792739 -NCT01795456 -NCT01792778 -NCT01795521 -NCT01792791 -NCT01795573 -NCT01792817 -NCT01795586 -NCT01792830 -NCT01795612 -NCT01792934 -NCT01795703 -NCT01792947 -NCT01795716 -NCT01792973 -NCT01795768 -NCT01792999 -NCT01795794 -NCT01793025 -NCT01795898 -NCT01793051 -NCT01795924 -NCT01793064 -NCT01795976 -NCT01793155 -NCT01796002 -NCT01793168 -NCT01796028 -NCT01793272 -NCT01796041 -NCT01793480 -NCT01796145 -NCT01793493 -NCT01796171 -NCT01793519 -NCT01796184 -NCT01793532 -NCT01796197 -NCT01793584 -NCT01796288 -NCT01793636 -NCT01796301 -NCT01793649 -NCT01796314 -NCT01793883 -NCT01796353 -NCT01793922 -NCT01796405 -NCT01793948 -NCT01796444 -NCT01793987 -NCT01796470 -NCT01794026 -NCT01796548 -NCT01794039 -NCT01796652 -NCT01794104 -NCT01796665 -NCT01794117 -NCT01796782 -NCT01794169 -NCT01796808 -NCT01794299 -NCT01796821 -NCT01794403 -NCT01796860 -NCT01794481 -NCT01796977 -NCT01794507 -NCT01797016 -NCT01794520 -NCT01797055 -NCT01794572 -NCT01797068 -NCT01794585 -NCT01797120 -NCT01794624 -NCT01797159 -NCT01794702 -NCT01797289 -NCT01794793 -NCT01797315 -NCT01794819 -NCT01797354 -NCT01794845 -NCT01797471 -NCT01794936 -NCT01797484 -NCT01795014 -NCT01797523 -NCT01795027 -NCT01797575 -NCT01795131 -NCT01802879 -NCT01797692 -NCT01800591 -NCT01797718 -NCT01800565 -NCT01797848 -NCT01800604 -NCT01797874 -NCT01800617 -NCT01797900 -NCT01800630 -NCT01797913 -NCT01800643 -NCT01798004 -NCT01800656 -NCT01798108 -NCT01800695 -NCT01798134 -NCT01800799 -NCT01798147 -NCT01800812 -NCT01798160 -NCT01800838 -NCT01798173 -NCT01800981 -NCT01798212 -NCT01800994 -NCT01798251 -NCT01801046 -NCT01798277 -NCT01801059 -NCT01798316 -NCT01801111 -NCT01798368 -NCT01801137 -NCT01798446 -NCT01801163 -NCT01798485 -NCT01801358 -NCT01798628 -NCT01801371 -NCT01798641 -NCT01801436 -NCT01798706 -NCT01801449 -NCT01798771 -NCT01801475 -NCT01798823 -NCT01801527 -NCT01798875 -NCT01801553 -NCT01798901 -NCT01801644 -NCT01798914 -NCT01801670 -NCT01798953 -NCT01801735 -NCT01799018 -NCT01801761 -NCT01799031 -NCT01801826 -NCT01799044 -NCT01801839 -NCT01799070 -NCT01801852 -NCT01799083 -NCT01801878 -NCT01799109 -NCT01801904 -NCT01799135 -NCT01801930 -NCT01799161 -NCT01802008 -NCT01799213 -NCT01802021 -NCT01799278 -NCT01802060 -NCT01799317 -NCT01802138 -NCT01799382 -NCT01802190 -NCT01799408 -NCT01802242 -NCT01799499 -NCT01802307 -NCT01799538 -NCT01802320 -NCT01799889 -NCT01802333 -NCT01799902 -NCT01802346 -NCT01799915 -NCT01802398 -NCT01800071 -NCT01802450 -NCT01800149 -NCT01802463 -NCT01800162 -NCT01802567 -NCT01800188 -NCT01802632 -NCT01800305 -NCT01802645 -NCT01800422 -NCT01802684 -NCT01800487 -NCT01802723 -NCT01800500 -NCT01802749 -NCT01800526 -NCT01802814 -NCT01800552 -NCT01808248 -NCT01802905 -NCT01805089 -NCT01802970 -NCT01805076 -NCT01802996 -NCT01805271 -NCT01803009 -NCT01805375 -NCT01803061 -NCT01805453 -NCT01803113 -NCT01805557 -NCT01803139 -NCT01805596 -NCT01803152 -NCT01805622 -NCT01803256 -NCT01805817 -NCT01803269 -NCT01805882 -NCT01803282 -NCT01805908 -NCT01803295 -NCT01806025 -NCT01803334 -NCT01806064 -NCT01803386 -NCT01806116 -NCT01803477 -NCT01806129 -NCT01803503 -NCT01806181 -NCT01803542 -NCT01806207 -NCT01803607 -NCT01806259 -NCT01803646 -NCT01806272 -NCT01803672 -NCT01806324 -NCT01803685 -NCT01806337 -NCT01803711 -NCT01806350 -NCT01803906 -NCT01806376 -NCT01803919 -NCT01806506 -NCT01803958 -NCT01806558 -NCT01803997 -NCT01806571 -NCT01804036 -NCT01806649 -NCT01804101 -NCT01806675 -NCT01804127 -NCT01806740 -NCT01804140 -NCT01806753 -NCT01804166 -NCT01806792 -NCT01804179 -NCT01806857 -NCT01804205 -NCT01806961 -NCT01804231 -NCT01807065 -NCT01804309 -NCT01807091 -NCT01804335 -NCT01807117 -NCT01804374 -NCT01807156 -NCT01804426 -NCT01807182 -NCT01804465 -NCT01807286 -NCT01804478 -NCT01807325 -NCT01804517 -NCT01807429 -NCT01804530 -NCT01807468 -NCT01804543 -NCT01807481 -NCT01804595 -NCT01807533 -NCT01804621 -NCT01807546 -NCT01804634 -NCT01807559 -NCT01804647 -NCT01807598 -NCT01804686 -NCT01807611 -NCT01804712 -NCT01807637 -NCT01804751 -NCT01807832 -NCT01804790 -NCT01807936 -NCT01804829 -NCT01808040 -NCT01804946 -NCT01808131 -NCT01804985 -NCT01808183 -NCT01804998 -NCT01808222 -NCT01805037 -NCT01830478 -NCT01808417 -NCT01829737 -NCT01808508 -NCT01829841 -NCT01808534 -NCT01829906 -NCT01808573 -NCT01829958 -NCT01808599 -NCT01829971 -NCT01808638 -NCT01830101 -NCT01808742 -NCT01830153 -NCT01808755 -NCT01830166 -NCT01808820 -NCT01830231 -NCT01808885 -NCT01830244 -NCT01808950 -NCT01830270 -NCT01809028 -NCT01830283 -NCT01809106 -NCT01830322 -NCT01809119 -NCT01830361 -NCT01809132 -NCT01830387 -NCT01809171 -NCT01830452 -NCT01809210 -NCT01830465 -NCT01809262 -NCT01825824 -NCT01825863 -NCT01825902 -NCT01825967 -NCT01826045 -NCT01826071 -NCT01826097 -NCT01826201 -NCT01826214 -NCT01826227 -NCT01826266 -NCT01826279 -NCT01826396 -NCT01826448 -NCT01826474 -NCT01826487 -NCT01826513 -NCT01826565 -NCT01826617 -NCT01826682 -NCT01826708 -NCT01826838 -NCT01826851 -NCT01826864 -NCT01826877 -NCT01827046 -NCT01827111 -NCT01827137 -NCT01827150 -NCT01827163 -NCT01827267 -NCT01827371 -NCT01827384 -NCT01827436 -NCT01827462 -NCT01827553 -NCT01827592 -NCT01827605 -NCT01827618 -NCT01827644 -NCT01827709 -NCT01827787 -NCT01827813 -NCT01827904 -NCT01827930 -NCT01827943 -NCT01827969 -NCT01828021 -NCT01828034 -NCT01828073 -NCT01828099 -NCT01828112 -NCT01828125 -NCT01828138 -NCT01828177 -NCT01828216 -NCT01828255 -NCT01828294 -NCT01828333 -NCT01828346 -NCT01828476 -NCT01828489 -NCT01828502 -NCT01828554 -NCT01828645 -NCT01828684 -NCT01828723 -NCT01828736 -NCT01828762 -NCT01828775 -NCT01828918 -NCT01829035 -NCT01829074 -NCT01829113 -NCT01829139 -NCT01829178 -NCT01829191 -NCT01829217 -NCT01829373 -NCT01829386 -NCT01829399 -NCT01829412 -NCT01829503 -NCT01829568 -NCT01829646 -NCT01829711 -NCT01809301 -NCT01823198 -NCT01809379 -NCT01823224 -NCT01809392 -NCT01823250 -NCT01809496 -NCT01823315 -NCT01809691 -NCT01823393 -NCT01809717 -NCT01823432 -NCT01809730 -NCT01823471 -NCT01809756 -NCT01823562 -NCT01809808 -NCT01823679 -NCT01809847 -NCT01823718 -NCT01809912 -NCT01823783 -NCT01810016 -NCT01823835 -NCT01810068 -NCT01823848 -NCT01810081 -NCT01823939 -NCT01810120 -NCT01823952 -NCT01810237 -NCT01823965 -NCT01810302 -NCT01823978 -NCT01810367 -NCT01823991 -NCT01810393 -NCT01824004 -NCT01810432 -NCT01824108 -NCT01810666 -NCT01824186 -NCT01810692 -NCT01824329 -NCT01810705 -NCT01824342 -NCT01810744 -NCT01824368 -NCT01810757 -NCT01824420 -NCT01810770 -NCT01824459 -NCT01810809 -NCT01824498 -NCT01810835 -NCT01824537 -NCT01810848 -NCT01824615 -NCT01810874 -NCT01824654 -NCT01810913 -NCT01824693 -NCT01810939 -NCT01824745 -NCT01810952 -NCT01824823 -NCT01810965 -NCT01824836 -NCT01811069 -NCT01824875 -NCT01811095 -NCT01824901 -NCT01811121 -NCT01824940 -NCT01811147 -NCT01824966 -NCT01811212 -NCT01824992 -NCT01811264 -NCT01825187 -NCT01811277 -NCT01825239 -NCT01811368 -NCT01825330 -NCT01811394 -NCT01825408 -NCT01811459 -NCT01825421 -NCT01811498 -NCT01825434 -NCT01811537 -NCT01825538 -NCT01811563 -NCT01825603 -NCT01811654 -NCT01825642 -NCT01811706 -NCT01825785 -NCT01811771 -NCT01822665 -NCT01822691 -NCT01822756 -NCT01822795 -NCT01822808 -NCT01822860 -NCT01822873 -NCT01822886 -NCT01822899 -NCT01822977 -NCT01823003 -NCT01823068 -NCT01823107 -NCT01823172 -NCT01811810 -NCT01814449 -NCT01811823 -NCT01814345 -NCT01811862 -NCT01814488 -NCT01811992 -NCT01814501 -NCT01812005 -NCT01814553 -NCT01812018 -NCT01814631 -NCT01812031 -NCT01814813 -NCT01812070 -NCT01814826 -NCT01812096 -NCT01814865 -NCT01812109 -NCT01814969 -NCT01812161 -NCT01814982 -NCT01812252 -NCT01815021 -NCT01812278 -NCT01815086 -NCT01812304 -NCT01815112 -NCT01812369 -NCT01815190 -NCT01812395 -NCT01815242 -NCT01812447 -NCT01815281 -NCT01812460 -NCT01815294 -NCT01812486 -NCT01815307 -NCT01812551 -NCT01815333 -NCT01812603 -NCT01815346 -NCT01812616 -NCT01815359 -NCT01812668 -NCT01815424 -NCT01812694 -NCT01815476 -NCT01812720 -NCT01815515 -NCT01812746 -NCT01815528 -NCT01812837 -NCT01815606 -NCT01812876 -NCT01815645 -NCT01812902 -NCT01815697 -NCT01812928 -NCT01821443 -NCT01813006 -NCT01821482 -NCT01813058 -NCT01821495 -NCT01813071 -NCT01821586 -NCT01813084 -NCT01821612 -NCT01813097 -NCT01821638 -NCT01813136 -NCT01821729 -NCT01813162 -NCT01821768 -NCT01813214 -NCT01821781 -NCT01813227 -NCT01821833 -NCT01813240 -NCT01821859 -NCT01813253 -NCT01821911 -NCT01813396 -NCT01822015 -NCT01813409 -NCT01822106 -NCT01813474 -NCT01822119 -NCT01813539 -NCT01822158 -NCT01813630 -NCT01822210 -NCT01813734 -NCT01822275 -NCT01813825 -NCT01822301 -NCT01813877 -NCT01822314 -NCT01813916 -NCT01822379 -NCT01813929 -NCT01822496 -NCT01813994 -NCT01822509 -NCT01814033 -NCT01822522 -NCT01814046 -NCT01822561 -NCT01814111 -NCT01822613 -NCT01814228 -NCT01822652 -NCT01815710 -NCT01818739 -NCT01815749 -NCT01818713 -NCT01815775 -NCT01818752 -NCT01815827 -NCT01818804 -NCT01815840 -NCT01818973 -NCT01815853 -NCT01818986 -NCT01815905 -NCT01818999 -NCT01815918 -NCT01819077 -NCT01815970 -NCT01819220 -NCT01816035 -NCT01819233 -NCT01816048 -NCT01819272 -NCT01816230 -NCT01819285 -NCT01816256 -NCT01819324 -NCT01816295 -NCT01819363 -NCT01816334 -NCT01819376 -NCT01816490 -NCT01819389 -NCT01816516 -NCT01819428 -NCT01816555 -NCT01819441 -NCT01816594 -NCT01819480 -NCT01816659 -NCT01819519 -NCT01816711 -NCT01819558 -NCT01816815 -NCT01819649 -NCT01816841 -NCT01819701 -NCT01816919 -NCT01819714 -NCT01816932 -NCT01819792 -NCT01816971 -NCT01819831 -NCT01816984 -NCT01819844 -NCT01817023 -NCT01819948 -NCT01817075 -NCT01819961 -NCT01817192 -NCT01819987 -NCT01817205 -NCT01820091 -NCT01817257 -NCT01820117 -NCT01817296 -NCT01820234 -NCT01817322 -NCT01820260 -NCT01817335 -NCT01820299 -NCT01817374 -NCT01820312 -NCT01817400 -NCT01820325 -NCT01817452 -NCT01820364 -NCT01817686 -NCT01820416 -NCT01817738 -NCT01820546 -NCT01817751 -NCT01820624 -NCT01817764 -NCT01820754 -NCT01817868 -NCT01820793 -NCT01817894 -NCT01820858 -NCT01817907 -NCT01820871 -NCT01818050 -NCT01820884 -NCT01818063 -NCT01820910 -NCT01818089 -NCT01821001 -NCT01818180 -NCT01821040 -NCT01818206 -NCT01821105 -NCT01818323 -NCT01821118 -NCT01818336 -NCT01821196 -NCT01818349 -NCT01821209 -NCT01818479 -NCT01821248 -NCT01818505 -NCT01821404 -NCT01818557 -NCT01846182 -NCT01830504 -NCT01845792 -NCT01830556 -NCT01845805 -NCT01830582 -NCT01845831 -NCT01830621 -NCT01845883 -NCT01830751 -NCT01845922 -NCT01830777 -NCT01845935 -NCT01830816 -NCT01846091 -NCT01830894 -NCT01846130 -NCT01830907 -NCT01846143 -NCT01830933 -NCT01841021 -NCT01841047 -NCT01841060 -NCT01841294 -NCT01841333 -NCT01841372 -NCT01841463 -NCT01841489 -NCT01841515 -NCT01841528 -NCT01841541 -NCT01841554 -NCT01841723 -NCT01841736 -NCT01841749 -NCT01841775 -NCT01841814 -NCT01841827 -NCT01841840 -NCT01841957 -NCT01842035 -NCT01842048 -NCT01842113 -NCT01842139 -NCT01842165 -NCT01842230 -NCT01842256 -NCT01842308 -NCT01842321 -NCT01842347 -NCT01842373 -NCT01842399 -NCT01842425 -NCT01842438 -NCT01842490 -NCT01842542 -NCT01842581 -NCT01842594 -NCT01842633 -NCT01842646 -NCT01842672 -NCT01842724 -NCT01842737 -NCT01842750 -NCT01842893 -NCT01842971 -NCT01843049 -NCT01843062 -NCT01843179 -NCT01843218 -NCT01843374 -NCT01843413 -NCT01843439 -NCT01843452 -NCT01843478 -NCT01843582 -NCT01843608 -NCT01843634 -NCT01843647 -NCT01843660 -NCT01843673 -NCT01843725 -NCT01843738 -NCT01843803 -NCT01843816 -NCT01843829 -NCT01843868 -NCT01843998 -NCT01844076 -NCT01844180 -NCT01844245 -NCT01844271 -NCT01844375 -NCT01844440 -NCT01844505 -NCT01844583 -NCT01844609 -NCT01844622 -NCT01844661 -NCT01844674 -NCT01844765 -NCT01844791 -NCT01844817 -NCT01844856 -NCT01844869 -NCT01844934 -NCT01844947 -NCT01844986 -NCT01844999 -NCT01845025 -NCT01845090 -NCT01845285 -NCT01845337 -NCT01845376 -NCT01845441 -NCT01845454 -NCT01845493 -NCT01845506 -NCT01845519 -NCT01845532 -NCT01845662 -NCT01845675 -NCT01845727 -NCT01845779 -NCT01831011 -NCT01833546 -NCT01831024 -NCT01833533 -NCT01831037 -NCT01833572 -NCT01831076 -NCT01833637 -NCT01831089 -NCT01833650 -NCT01831115 -NCT01833676 -NCT01831180 -NCT01833728 -NCT01831232 -NCT01833767 -NCT01831297 -NCT01833806 -NCT01831310 -NCT01833832 -NCT01831375 -NCT01833858 -NCT01831388 -NCT01833884 -NCT01831505 -NCT01833923 -NCT01831531 -NCT01834001 -NCT01831726 -NCT01834014 -NCT01831739 -NCT01834027 -NCT01831843 -NCT01834079 -NCT01831882 -NCT01834170 -NCT01831960 -NCT01834183 -NCT01831973 -NCT01834235 -NCT01832051 -NCT01834248 -NCT01832116 -NCT01839500 -NCT01832233 -NCT01839539 -NCT01832246 -NCT01839604 -NCT01832259 -NCT01839617 -NCT01832298 -NCT01839682 -NCT01832311 -NCT01839721 -NCT01832402 -NCT01839747 -NCT01832467 -NCT01839773 -NCT01832506 -NCT01839799 -NCT01832623 -NCT01839838 -NCT01832636 -NCT01839851 -NCT01832727 -NCT01839877 -NCT01832753 -NCT01839916 -NCT01832766 -NCT01839942 -NCT01832805 -NCT01839955 -NCT01832857 -NCT01839981 -NCT01832870 -NCT01839994 -NCT01832922 -NCT01840007 -NCT01832935 -NCT01840111 -NCT01832948 -NCT01840137 -NCT01832961 -NCT01840150 -NCT01832974 -NCT01840163 -NCT01832987 -NCT01840189 -NCT01833026 -NCT01840306 -NCT01833065 -NCT01840332 -NCT01833091 -NCT01840436 -NCT01833143 -NCT01840449 -NCT01833169 -NCT01840488 -NCT01833208 -NCT01840566 -NCT01833273 -NCT01840579 -NCT01833286 -NCT01840592 -NCT01833299 -NCT01840618 -NCT01833325 -NCT01840670 -NCT01833390 -NCT01840852 -NCT01833520 -NCT01840943 -NCT01834300 -NCT01837147 -NCT01834469 -NCT01837095 -NCT01834521 -NCT01837160 -NCT01834651 -NCT01837199 -NCT01834742 -NCT01837251 -NCT01834898 -NCT01837290 -NCT01834950 -NCT01837303 -NCT01834963 -NCT01837316 -NCT01835041 -NCT01837329 -NCT01835054 -NCT01837342 -NCT01835067 -NCT01837381 -NCT01835145 -NCT01837407 -NCT01835158 -NCT01837459 -NCT01835184 -NCT01837524 -NCT01835223 -NCT01837602 -NCT01835236 -NCT01837667 -NCT01835288 -NCT01837693 -NCT01835379 -NCT01837745 -NCT01835483 -NCT01837784 -NCT01835496 -NCT01837862 -NCT01835509 -NCT01837927 -NCT01835522 -NCT01837979 -NCT01835561 -NCT01838057 -NCT01835587 -NCT01838109 -NCT01835626 -NCT01838122 -NCT01835756 -NCT01838200 -NCT01835860 -NCT01838252 -NCT01835873 -NCT01838317 -NCT01835964 -NCT01838343 -NCT01835977 -NCT01838356 -NCT01836029 -NCT01838369 -NCT01836055 -NCT01838395 -NCT01836107 -NCT01838434 -NCT01836120 -NCT01838447 -NCT01836172 -NCT01838460 -NCT01836211 -NCT01838538 -NCT01836237 -NCT01838551 -NCT01836341 -NCT01838564 -NCT01836354 -NCT01838642 -NCT01836367 -NCT01838655 -NCT01836393 -NCT01838668 -NCT01836406 -NCT01838720 -NCT01836432 -NCT01838980 -NCT01836536 -NCT01839032 -NCT01836549 -NCT01839097 -NCT01836575 -NCT01839110 -NCT01836588 -NCT01839175 -NCT01836653 -NCT01839188 -NCT01836679 -NCT01839240 -NCT01836692 -NCT01839331 -NCT01836705 -NCT01839370 -NCT01836822 -NCT01839383 -NCT01836926 -NCT01839448 -NCT01836978 -NCT01839461 -NCT01836991 -NCT01839487 -NCT01837017 -NCT01856452 -NCT01846221 -NCT01848990 -NCT01846234 -NCT01848925 -NCT01846286 -NCT01849016 -NCT01846390 -NCT01849055 -NCT01846416 -NCT01849133 -NCT01846429 -NCT01849146 -NCT01846442 -NCT01849159 -NCT01846468 -NCT01849224 -NCT01846507 -NCT01849250 -NCT01846520 -NCT01849263 -NCT01846533 -NCT01849276 -NCT01846611 -NCT01849302 -NCT01846624 -NCT01849380 -NCT01846650 -NCT01849406 -NCT01846676 -NCT01849445 -NCT01846689 -NCT01849484 -NCT01846793 -NCT01854723 -NCT01846806 -NCT01854749 -NCT01846819 -NCT01854970 -NCT01846832 -NCT01855126 -NCT01846871 -NCT01855165 -NCT01847001 -NCT01855178 -NCT01847027 -NCT01855243 -NCT01847118 -NCT01855308 -NCT01847157 -NCT01855334 -NCT01847209 -NCT01855360 -NCT01847235 -NCT01855425 -NCT01847274 -NCT01855451 -NCT01847300 -NCT01855477 -NCT01847326 -NCT01855503 -NCT01847352 -NCT01855516 -NCT01847378 -NCT01855568 -NCT01847495 -NCT01855607 -NCT01847573 -NCT01855672 -NCT01847599 -NCT01855724 -NCT01847651 -NCT01855750 -NCT01847677 -NCT01855828 -NCT01847690 -NCT01855841 -NCT01847703 -NCT01855854 -NCT01847794 -NCT01855880 -NCT01847937 -NCT01855932 -NCT01848015 -NCT01855958 -NCT01848041 -NCT01855971 -NCT01848067 -NCT01856023 -NCT01848132 -NCT01856036 -NCT01848145 -NCT01856101 -NCT01848171 -NCT01856114 -NCT01848197 -NCT01856140 -NCT01848353 -NCT01856192 -NCT01848457 -NCT01856205 -NCT01848600 -NCT01856270 -NCT01848613 -NCT01856283 -NCT01848652 -NCT01856296 -NCT01848756 -NCT01856322 -NCT01848782 -NCT01856361 -NCT01848834 -NCT01856426 -NCT01849510 -NCT01852006 -NCT01849523 -NCT01851941 -NCT01849536 -NCT01852032 -NCT01849588 -NCT01852045 -NCT01849627 -NCT01852266 -NCT01849666 -NCT01852292 -NCT01849744 -NCT01852435 -NCT01849770 -NCT01852448 -NCT01849783 -NCT01852578 -NCT01849796 -NCT01852591 -NCT01849848 -NCT01852708 -NCT01849874 -NCT01852786 -NCT01849939 -NCT01852799 -NCT01849952 -NCT01852864 -NCT01849978 -NCT01852890 -NCT01850004 -NCT01852968 -NCT01850030 -NCT01853046 -NCT01850095 -NCT01853098 -NCT01850108 -NCT01853202 -NCT01850147 -NCT01853228 -NCT01850303 -NCT01853293 -NCT01850316 -NCT01853306 -NCT01850368 -NCT01853319 -NCT01850498 -NCT01853436 -NCT01850524 -NCT01853579 -NCT01850563 -NCT01853618 -NCT01850628 -NCT01853631 -NCT01850654 -NCT01853644 -NCT01850667 -NCT01853670 -NCT01850693 -NCT01853748 -NCT01850745 -NCT01853774 -NCT01850758 -NCT01853787 -NCT01850771 -NCT01853800 -NCT01850797 -NCT01853813 -NCT01850836 -NCT01853826 -NCT01850888 -NCT01853865 -NCT01850979 -NCT01853878 -NCT01851018 -NCT01854021 -NCT01851044 -NCT01854034 -NCT01851096 -NCT01854047 -NCT01851109 -NCT01854099 -NCT01851135 -NCT01854203 -NCT01851174 -NCT01854229 -NCT01851200 -NCT01854255 -NCT01851226 -NCT01854268 -NCT01851252 -NCT01854294 -NCT01851278 -NCT01854372 -NCT01851369 -NCT01854385 -NCT01851408 -NCT01854515 -NCT01851499 -NCT01854528 -NCT01851551 -NCT01854554 -NCT01851577 -NCT01854567 -NCT01851681 -NCT01854580 -NCT01851733 -NCT01854606 -NCT01851772 -NCT01854684 -NCT01851824 -NCT01862068 -NCT01856478 -NCT01859234 -NCT01856543 -NCT01859221 -NCT01856621 -NCT01859286 -NCT01856686 -NCT01859312 -NCT01856699 -NCT01859429 -NCT01856751 -NCT01859442 -NCT01856777 -NCT01859507 -NCT01856803 -NCT01859663 -NCT01856855 -NCT01859689 -NCT01856868 -NCT01859728 -NCT01856920 -NCT01859741 -NCT01856933 -NCT01859819 -NCT01856972 -NCT01859845 -NCT01857037 -NCT01859858 -NCT01857102 -NCT01859936 -NCT01857115 -NCT01859949 -NCT01857141 -NCT01860027 -NCT01857193 -NCT01860040 -NCT01857271 -NCT01860222 -NCT01857310 -NCT01860482 -NCT01857401 -NCT01860508 -NCT01857440 -NCT01860534 -NCT01857453 -NCT01860612 -NCT01857505 -NCT01860638 -NCT01857570 -NCT01860742 -NCT01857661 -NCT01860833 -NCT01857713 -NCT01860898 -NCT01857726 -NCT01860937 -NCT01857752 -NCT01860963 -NCT01857778 -NCT01861002 -NCT01857817 -NCT01861054 -NCT01857882 -NCT01861067 -NCT01857934 -NCT01861093 -NCT01857947 -NCT01861106 -NCT01857999 -NCT01861223 -NCT01858025 -NCT01861301 -NCT01858116 -NCT01861314 -NCT01858129 -NCT01861340 -NCT01858155 -NCT01861431 -NCT01858168 -NCT01861496 -NCT01858207 -NCT01861509 -NCT01858389 -NCT01861535 -NCT01858558 -NCT01861639 -NCT01858571 -NCT01861652 -NCT01858649 -NCT01861678 -NCT01858662 -NCT01861691 -NCT01858688 -NCT01861704 -NCT01858740 -NCT01861717 -NCT01858766 -NCT01861873 -NCT01858883 -NCT01861912 -NCT01858922 -NCT01861938 -NCT01858935 -NCT01861951 -NCT01858961 -NCT01861977 -NCT01859026 -NCT01861990 -NCT01859130 -NCT01862003 -NCT01859182 -NCT01926587 -NCT01862081 -NCT01864889 -NCT01862159 -NCT01864876 -NCT01862198 -NCT01864902 -NCT01862237 -NCT01864941 -NCT01862315 -NCT01865071 -NCT01862328 -NCT01865084 -NCT01862341 -NCT01865110 -NCT01862380 -NCT01865162 -NCT01862510 -NCT01924208 -NCT01862536 -NCT01924260 -NCT01862562 -NCT01924312 -NCT01862640 -NCT01924351 -NCT01862718 -NCT01924390 -NCT01862744 -NCT01924416 -NCT01862770 -NCT01924455 -NCT01862809 -NCT01924533 -NCT01862900 -NCT01924572 -NCT01862978 -NCT01924624 -NCT01863017 -NCT01924689 -NCT01863095 -NCT01924806 -NCT01863108 -NCT01924819 -NCT01863173 -NCT01924884 -NCT01863264 -NCT01924897 -NCT01863355 -NCT01924988 -NCT01863381 -NCT01925001 -NCT01863485 -NCT01925014 -NCT01863550 -NCT01925053 -NCT01863628 -NCT01925092 -NCT01863745 -NCT01925118 -NCT01863758 -NCT01925131 -NCT01863862 -NCT01925170 -NCT01863914 -NCT01925261 -NCT01864018 -NCT01925274 -NCT01864070 -NCT01925287 -NCT01864083 -NCT01925378 -NCT01864096 -NCT01925391 -NCT01864109 -NCT01925482 -NCT01864135 -NCT01925495 -NCT01864291 -NCT01925547 -NCT01864382 -NCT01925573 -NCT01864408 -NCT01925612 -NCT01864434 -NCT01925625 -NCT01864473 -NCT01925638 -NCT01864486 -NCT01925651 -NCT01864499 -NCT01925703 -NCT01864525 -NCT01925742 -NCT01864538 -NCT01925833 -NCT01864564 -NCT01925872 -NCT01864655 -NCT01925976 -NCT01864681 -NCT01926171 -NCT01864733 -NCT01926197 -NCT01864746 -NCT01926236 -NCT01864759 -NCT01926249 -NCT01864772 -NCT01926327 -NCT01864798 -NCT01926444 -NCT01864850 -NCT01926483 -NCT01865201 -NCT01923233 -NCT01865227 -NCT01923298 -NCT01865279 -NCT01923337 -NCT01865292 -NCT01923376 -NCT01865305 -NCT01923506 -NCT01865396 -NCT01923571 -NCT01865448 -NCT01923675 -NCT01865500 -NCT01923701 -NCT01865539 -NCT01923727 -NCT01865617 -NCT01923753 -NCT01865656 -NCT01923922 -NCT01865721 -NCT01923935 -NCT01865747 -NCT01923948 -NCT01865838 -NCT01923987 -NCT01865903 -NCT01924000 -NCT01865929 -NCT01924078 -NCT01865942 -NCT01924091 -NCT01865955 -NCT01924104 -NCT01866111 -NCT01924117 -NCT01866228 -NCT01924156 -NCT01866293 -NCT01924195 -NCT01866319 -NCT01871948 -NCT01872078 -NCT01872104 -NCT01872221 -NCT01872260 -NCT01872273 -NCT01872351 -NCT01872377 -NCT01872403 -NCT01872416 -NCT01872442 -NCT01872481 -NCT01872572 -NCT01872585 -NCT01872819 -NCT01872884 -NCT01872897 -NCT01872949 -NCT01872962 -NCT01872975 -NCT01872988 -NCT01873014 -NCT01873066 -NCT01873131 -NCT01873248 -NCT01873287 -NCT01873326 -NCT01873417 -NCT01873482 -NCT01873495 -NCT01873664 -NCT01873690 -NCT01873703 -NCT01873794 -NCT01873807 -NCT01873833 -NCT01873872 -NCT01874028 -NCT01874054 -NCT01874067 -NCT01874132 -NCT01874171 -NCT01874184 -NCT01874223 -NCT01874275 -NCT01874288 -NCT01921790 -NCT01921803 -NCT01921816 -NCT01921855 -NCT01921972 -NCT01922011 -NCT01922050 -NCT01922076 -NCT01922089 -NCT01922180 -NCT01922258 -NCT01922492 -NCT01922583 -NCT01922596 -NCT01922674 -NCT01922700 -NCT01922752 -NCT01922778 -NCT01922882 -NCT01922895 -NCT01922921 -NCT01922986 -NCT01922999 -NCT01923051 -NCT01923077 -NCT01923103 -NCT01923129 -NCT01923155 -NCT01923168 -NCT01923194 -NCT01923220 -NCT01866410 -NCT01868906 -NCT01866423 -NCT01868893 -NCT01866449 -NCT01868932 -NCT01866527 -NCT01868971 -NCT01866553 -NCT01869023 -NCT01866670 -NCT01869088 -NCT01866774 -NCT01869114 -NCT01866813 -NCT01869166 -NCT01866839 -NCT01869192 -NCT01866969 -NCT01869335 -NCT01866995 -NCT01869348 -NCT01867008 -NCT01869413 -NCT01867086 -NCT01869478 -NCT01867268 -NCT01869491 -NCT01867294 -NCT01869699 -NCT01867333 -NCT01869725 -NCT01867346 -NCT01869751 -NCT01867359 -NCT01869764 -NCT01867424 -NCT01869777 -NCT01867437 -NCT01870050 -NCT01867502 -NCT01870310 -NCT01867515 -NCT01870479 -NCT01867554 -NCT01870492 -NCT01867593 -NCT01870505 -NCT01867606 -NCT01870596 -NCT01867645 -NCT01870609 -NCT01867697 -NCT01870661 -NCT01867710 -NCT01870700 -NCT01867749 -NCT01870791 -NCT01867866 -NCT01870817 -NCT01867879 -NCT01870830 -NCT01867892 -NCT01870895 -NCT01867918 -NCT01870947 -NCT01867931 -NCT01870960 -NCT01867944 -NCT01871038 -NCT01868009 -NCT01871116 -NCT01868022 -NCT01871155 -NCT01868035 -NCT01871311 -NCT01868087 -NCT01871350 -NCT01868100 -NCT01871363 -NCT01868139 -NCT01871441 -NCT01868204 -NCT01871454 -NCT01868230 -NCT01871480 -NCT01868269 -NCT01871519 -NCT01868334 -NCT01871545 -NCT01868347 -NCT01871571 -NCT01868373 -NCT01871597 -NCT01868386 -NCT01871636 -NCT01868438 -NCT01871675 -NCT01868451 -NCT01871688 -NCT01868490 -NCT01871727 -NCT01868503 -NCT01871766 -NCT01868542 -NCT01871779 -NCT01868581 -NCT01871805 -NCT01868828 -NCT01871896 -NCT01868880 -NCT01921751 -NCT01874301 -NCT01919476 -NCT01874353 -NCT01919489 -NCT01874418 -NCT01919541 -NCT01874483 -NCT01919619 -NCT01874522 -NCT01919710 -NCT01874535 -NCT01919736 -NCT01874548 -NCT01919749 -NCT01874561 -NCT01919762 -NCT01874587 -NCT01919788 -NCT01874665 -NCT01919801 -NCT01874678 -NCT01919840 -NCT01874808 -NCT01919866 -NCT01874860 -NCT01919879 -NCT01874873 -NCT01920061 -NCT01874938 -NCT01920087 -NCT01875042 -NCT01920113 -NCT01875133 -NCT01920139 -NCT01875198 -NCT01920191 -NCT01875237 -NCT01920204 -NCT01875250 -NCT01920269 -NCT01875341 -NCT01920321 -NCT01875367 -NCT01920373 -NCT01875380 -NCT01920451 -NCT01875393 -NCT01920477 -NCT01875458 -NCT01920529 -NCT01875510 -NCT01920633 -NCT01875523 -NCT01920698 -NCT01875549 -NCT01920737 -NCT01875601 -NCT01920750 -NCT01875640 -NCT01920789 -NCT01875653 -NCT01920815 -NCT01875666 -NCT01920880 -NCT01875705 -NCT01920906 -NCT01875744 -NCT01920932 -NCT01875926 -NCT01921023 -NCT01876004 -NCT01921218 -NCT01876043 -NCT01921244 -NCT01876069 -NCT01921283 -NCT01876082 -NCT01921335 -NCT01876121 -NCT01921387 -NCT01876147 -NCT01921426 -NCT01876212 -NCT01921452 -NCT01876238 -NCT01921504 -NCT01876251 -NCT01921517 -NCT01876290 -NCT01921569 -NCT01876342 -NCT01921673 -NCT01876420 -NCT01921686 -NCT01876446 -NCT01918527 -NCT01918592 -NCT01918605 -NCT01918631 -NCT01918644 -NCT01918683 -NCT01918761 -NCT01918852 -NCT01918917 -NCT01918930 -NCT01919086 -NCT01919151 -NCT01919164 -NCT01919229 -NCT01919294 -NCT01919359 -NCT01919398 -NCT01919463 -NCT01921699 -NCT01876511 -NCT01917942 -NCT01876550 -NCT01918098 -NCT01876641 -NCT01918254 -NCT01876693 -NCT01918280 -NCT01876706 -NCT01918306 -NCT01876771 -NCT01918332 -NCT01876784 -NCT01918384 -NCT01876836 -NCT01912313 -NCT01912326 -NCT01912339 -NCT01912430 -NCT01912560 -NCT01912586 -NCT01912625 -NCT01912677 -NCT01912690 -NCT01912820 -NCT01912846 -NCT01912963 -NCT01913015 -NCT01913054 -NCT01913067 -NCT01913106 -NCT01913119 -NCT01913132 -NCT01913197 -NCT01913223 -NCT01913262 -NCT01913275 -NCT01913366 -NCT01913405 -NCT01913561 -NCT01913574 -NCT01913613 -NCT01913639 -NCT01913652 -NCT01913691 -NCT01913717 -NCT01913730 -NCT01913782 -NCT01913860 -NCT01913951 -NCT01914016 -NCT01914029 -NCT01914068 -NCT01914107 -NCT01914172 -NCT01914263 -NCT01914289 -NCT01914458 -NCT01914484 -NCT01914510 -NCT01914692 -NCT01914718 -NCT01914744 -NCT01914757 -NCT01914770 -NCT01914900 -NCT01915004 -NCT01915056 -NCT01915121 -NCT01915134 -NCT01915173 -NCT01915303 -NCT01915368 -NCT01915381 -NCT01915420 -NCT01915472 -NCT01915485 -NCT01915498 -NCT01915511 -NCT01915524 -NCT01915576 -NCT01915589 -NCT01915602 -NCT01915693 -NCT01915745 -NCT01915940 -NCT01915992 -NCT01916005 -NCT01916018 -NCT01916070 -NCT01916109 -NCT01916122 -NCT01916135 -NCT01916187 -NCT01916239 -NCT01916252 -NCT01916304 -NCT01916317 -NCT01916356 -NCT01916421 -NCT01916447 -NCT01916655 -NCT01916772 -NCT01916785 -NCT01916824 -NCT01916850 -NCT01916967 -NCT01917019 -NCT01917084 -NCT01917110 -NCT01917279 -NCT01917331 -NCT01917474 -NCT01917500 -NCT01917513 -NCT01917539 -NCT01917552 -NCT01917578 -NCT01917617 -NCT01917695 -NCT01917708 -NCT01917773 -NCT01917890 -NCT01918410 -NCT01876901 -NCT01910012 -NCT01876927 -NCT01910025 -NCT01876953 -NCT01910038 -NCT01877005 -NCT01910064 -NCT01877018 -NCT01910129 -NCT01877083 -NCT01910181 -NCT01877096 -NCT01910233 -NCT01877122 -NCT01910350 -NCT01877174 -NCT01910428 -NCT01877187 -NCT01910545 -NCT01877278 -NCT01910584 -NCT01877317 -NCT01910597 -NCT01877382 -NCT01910610 -NCT01877564 -NCT01910753 -NCT01877590 -NCT01910792 -NCT01877616 -NCT01910844 -NCT01877681 -NCT01910870 -NCT01877694 -NCT01910909 -NCT01877707 -NCT01910948 -NCT01877811 -NCT01910974 -NCT01877863 -NCT01910987 -NCT01878019 -NCT01911000 -NCT01878032 -NCT01911247 -NCT01878058 -NCT01911260 -NCT01878136 -NCT01911273 -NCT01878175 -NCT01911325 -NCT01878188 -NCT01911351 -NCT01878214 -NCT01911416 -NCT01878266 -NCT01911455 -NCT01878370 -NCT01911507 -NCT01878422 -NCT01911598 -NCT01878448 -NCT01911689 -NCT01878604 -NCT01911702 -NCT01878617 -NCT01911728 -NCT01878695 -NCT01911741 -NCT01878708 -NCT01911806 -NCT01878773 -NCT01911819 -NCT01878799 -NCT01911832 -NCT01878890 -NCT01911936 -NCT01878955 -NCT01911975 -NCT01879085 -NCT01912001 -NCT01879189 -NCT01912053 -NCT01879241 -NCT01912066 -NCT01879293 -NCT01912131 -NCT01879384 -NCT01912209 -NCT01879397 -NCT01912222 -NCT01879410 -NCT01912261 -NCT01879475 -NCT01908972 -NCT01909245 -NCT01909284 -NCT01909336 -NCT01909388 -NCT01909440 -NCT01909453 -NCT01909505 -NCT01909531 -NCT01909609 -NCT01909648 -NCT01909752 -NCT01909791 -NCT01909804 -NCT01909830 -NCT01909856 -NCT01909934 -NCT01909960 -NCT01912274 -NCT01879501 -NCT01907607 -NCT01879592 -NCT01907646 -NCT01879618 -NCT01907737 -NCT01879657 -NCT01907789 -NCT01879787 -NCT01907802 -NCT01879878 -NCT01907815 -NCT01879904 -NCT01907880 -NCT01879943 -NCT01907893 -NCT01879969 -NCT01907997 -NCT01880086 -NCT01908023 -NCT01880151 -NCT01908101 -NCT01880281 -NCT01908166 -NCT01880320 -NCT01908270 -NCT01880359 -NCT01908335 -NCT01880385 -NCT01908387 -NCT01880411 -NCT01908400 -NCT01880437 -NCT01908413 -NCT01880463 -NCT01908426 -NCT01880515 -NCT01908478 -NCT01880528 -NCT01908504 -NCT01880541 -NCT01908543 -NCT01880554 -NCT01908556 -NCT01880567 -NCT01908621 -NCT01880580 -NCT01908777 -NCT01880632 -NCT01908868 -NCT01880645 -NCT01908933 -NCT01880658 -NCT01904565 -NCT01904604 -NCT01904643 -NCT01904656 -NCT01904682 -NCT01904734 -NCT01904786 -NCT01904864 -NCT01904890 -NCT01904903 -NCT01904916 -NCT01905007 -NCT01905046 -NCT01905072 -NCT01905085 -NCT01905111 -NCT01905150 -NCT01905163 -NCT01905202 -NCT01905228 -NCT01905254 -NCT01905358 -NCT01905410 -NCT01905488 -NCT01905592 -NCT01905657 -NCT01905709 -NCT01905748 -NCT01905800 -NCT01905839 -NCT01905852 -NCT01905865 -NCT01905891 -NCT01905943 -NCT01905956 -NCT01905995 -NCT01906008 -NCT01906021 -NCT01906073 -NCT01906099 -NCT01906112 -NCT01906190 -NCT01906216 -NCT01906372 -NCT01906385 -NCT01906411 -NCT01906554 -NCT01906567 -NCT01906632 -NCT01906658 -NCT01906671 -NCT01906775 -NCT01906814 -NCT01906944 -NCT01906996 -NCT01907009 -NCT01907100 -NCT01907165 -NCT01907269 -NCT01907308 -NCT01907321 -NCT01907334 -NCT01907425 -NCT01907438 -NCT01907464 -NCT01907529 -NCT01880710 -NCT01883726 -NCT01880749 -NCT01883635 -NCT01880853 -NCT01883778 -NCT01880892 -NCT01883869 -NCT01880970 -NCT01883882 -NCT01880996 -NCT01883908 -NCT01881022 -NCT01883986 -NCT01881048 -NCT01884168 -NCT01881126 -NCT01884259 -NCT01881217 -NCT01884285 -NCT01881230 -NCT01884428 -NCT01881295 -NCT01884441 -NCT01881399 -NCT01884467 -NCT01881516 -NCT01884571 -NCT01881542 -NCT01884584 -NCT01881607 -NCT01884623 -NCT01881620 -NCT01884649 -NCT01881789 -NCT01884688 -NCT01881867 -NCT01884740 -NCT01881880 -NCT01884844 -NCT01881906 -NCT01884870 -NCT01881932 -NCT01884922 -NCT01882088 -NCT01884935 -NCT01882153 -NCT01884961 -NCT01882205 -NCT01902823 -NCT01882218 -NCT01902862 -NCT01882231 -NCT01902875 -NCT01882283 -NCT01902914 -NCT01882478 -NCT01902940 -NCT01882621 -NCT01902953 -NCT01882660 -NCT01902966 -NCT01882712 -NCT01903018 -NCT01882803 -NCT01903083 -NCT01882816 -NCT01903135 -NCT01882855 -NCT01903148 -NCT01882868 -NCT01903174 -NCT01882894 -NCT01903239 -NCT01882920 -NCT01903278 -NCT01882933 -NCT01903317 -NCT01882946 -NCT01903330 -NCT01882972 -NCT01903395 -NCT01882985 -NCT01903408 -NCT01883024 -NCT01903564 -NCT01883115 -NCT01903694 -NCT01883128 -NCT01903733 -NCT01883219 -NCT01903746 -NCT01883245 -NCT01903811 -NCT01883271 -NCT01903993 -NCT01883297 -NCT01904006 -NCT01883323 -NCT01904123 -NCT01883349 -NCT01904136 -NCT01883362 -NCT01904162 -NCT01883375 -NCT01904188 -NCT01883427 -NCT01904253 -NCT01883518 -NCT01904396 -NCT01883609 -NCT01904474 -NCT01885000 -NCT01894477 -NCT01885013 -NCT01894607 -NCT01885065 -NCT01894633 -NCT01885104 -NCT01894672 -NCT01885156 -NCT01894711 -NCT01885182 -NCT01894763 -NCT01885195 -NCT01894828 -NCT01885273 -NCT01894958 -NCT01885351 -NCT01900717 -NCT01885455 -NCT01900730 -NCT01885637 -NCT01900743 -NCT01885650 -NCT01900847 -NCT01885689 -NCT01900860 -NCT01885702 -NCT01900925 -NCT01885741 -NCT01900951 -NCT01885884 -NCT01901029 -NCT01885897 -NCT01901042 -NCT01885949 -NCT01901094 -NCT01886027 -NCT01901146 -NCT01886066 -NCT01901172 -NCT01886105 -NCT01901224 -NCT01886131 -NCT01901237 -NCT01886222 -NCT01901367 -NCT01886235 -NCT01901432 -NCT01886248 -NCT01901562 -NCT01886287 -NCT01901653 -NCT01886313 -NCT01901666 -NCT01886391 -NCT01901692 -NCT01886508 -NCT01901835 -NCT01886521 -NCT01901861 -NCT01886573 -NCT01901874 -NCT01886677 -NCT01901991 -NCT01886846 -NCT01902017 -NCT01886859 -NCT01902030 -NCT01886872 -NCT01902160 -NCT01886898 -NCT01902173 -NCT01886937 -NCT01902225 -NCT01886976 -NCT01902251 -NCT01887002 -NCT01902264 -NCT01887041 -NCT01902329 -NCT01887067 -NCT01902407 -NCT01887119 -NCT01902420 -NCT01887132 -NCT01902511 -NCT01887158 -NCT01902680 -NCT01887288 -NCT01892982 -NCT01893047 -NCT01893099 -NCT01893216 -NCT01893281 -NCT01893294 -NCT01893307 -NCT01893320 -NCT01893333 -NCT01893372 -NCT01893476 -NCT01893554 -NCT01893580 -NCT01893606 -NCT01893775 -NCT01893801 -NCT01893879 -NCT01893918 -NCT01893957 -NCT01894061 -NCT01894269 -NCT01894282 -NCT01894308 -NCT01894321 -NCT01894451 -NCT01902771 -NCT01887301 -NCT01890538 -NCT01887314 -NCT01890525 -NCT01887327 -NCT01890590 -NCT01887340 -NCT01890616 -NCT01887418 -NCT01890694 -NCT01887431 -NCT01890746 -NCT01887509 -NCT01890759 -NCT01887522 -NCT01890837 -NCT01887561 -NCT01890954 -NCT01887574 -NCT01891084 -NCT01887587 -NCT01891123 -NCT01887678 -NCT01891149 -NCT01887717 -NCT01891227 -NCT01887795 -NCT01891305 -NCT01887886 -NCT01891318 -NCT01887912 -NCT01891344 -NCT01888042 -NCT01891357 -NCT01888081 -NCT01891487 -NCT01888120 -NCT01891630 -NCT01888133 -NCT01891643 -NCT01888159 -NCT01891669 -NCT01888510 -NCT01891682 -NCT01888523 -NCT01891695 -NCT01888562 -NCT01891747 -NCT01888614 -NCT01891773 -NCT01888705 -NCT01891838 -NCT01888822 -NCT01891851 -NCT01888835 -NCT01891890 -NCT01888900 -NCT01891903 -NCT01888939 -NCT01891968 -NCT01888965 -NCT01891981 -NCT01888978 -NCT01892007 -NCT01888991 -NCT01892046 -NCT01889056 -NCT01892059 -NCT01889069 -NCT01892111 -NCT01889186 -NCT01892137 -NCT01889199 -NCT01892176 -NCT01889212 -NCT01892215 -NCT01889238 -NCT01892241 -NCT01889264 -NCT01892254 -NCT01889303 -NCT01892293 -NCT01889368 -NCT01892371 -NCT01889407 -NCT01892397 -NCT01889420 -NCT01892488 -NCT01889511 -NCT01892501 -NCT01889641 -NCT01892527 -NCT01889680 -NCT01892540 -NCT01889719 -NCT01892553 -NCT01889797 -NCT01892579 -NCT01889849 -NCT01892618 -NCT01889888 -NCT01892644 -NCT01890096 -NCT01892709 -NCT01890161 -NCT01892852 -NCT01890200 -NCT01892904 -NCT01890213 -NCT01892930 -NCT01890278 -NCT01900691 -NCT01895010 -NCT01898130 -NCT01895166 -NCT01898117 -NCT01895192 -NCT01898156 -NCT01895257 -NCT01898273 -NCT01895361 -NCT01898312 -NCT01895400 -NCT01898351 -NCT01895478 -NCT01898403 -NCT01895491 -NCT01898416 -NCT01895504 -NCT01898494 -NCT01895517 -NCT01898572 -NCT01895530 -NCT01898585 -NCT01895647 -NCT01898598 -NCT01895725 -NCT01898637 -NCT01895790 -NCT01898663 -NCT01895803 -NCT01898715 -NCT01895816 -NCT01898741 -NCT01895829 -NCT01898793 -NCT01895842 -NCT01898845 -NCT01895959 -NCT01898936 -NCT01896076 -NCT01898962 -NCT01896167 -NCT01899066 -NCT01896245 -NCT01899105 -NCT01896271 -NCT01899118 -NCT01896414 -NCT01899183 -NCT01896440 -NCT01899209 -NCT01896479 -NCT01899222 -NCT01896505 -NCT01899261 -NCT01896531 -NCT01899300 -NCT01896557 -NCT01899326 -NCT01896713 -NCT01899339 -NCT01896778 -NCT01899404 -NCT01896856 -NCT01899508 -NCT01896869 -NCT01899547 -NCT01896973 -NCT01899573 -NCT01896999 -NCT01899599 -NCT01897012 -NCT01899703 -NCT01897038 -NCT01899742 -NCT01897116 -NCT01899833 -NCT01897181 -NCT01899950 -NCT01897207 -NCT01899976 -NCT01897259 -NCT01899989 -NCT01897402 -NCT01900002 -NCT01897415 -NCT01900132 -NCT01897441 -NCT01900158 -NCT01897454 -NCT01900327 -NCT01897480 -NCT01900392 -NCT01897571 -NCT01900418 -NCT01897584 -NCT01900470 -NCT01897610 -NCT01900496 -NCT01897623 -NCT01900509 -NCT01897636 -NCT01900548 -NCT01897714 -NCT01900561 -NCT01898039 -NCT01900626 -NCT01898065 -NCT01900652 -NCT01898078 -NCT01900665 -NCT01898104 -NCT01931826 -NCT01926600 -NCT01928888 -NCT01926639 -NCT01928784 -NCT01926665 -NCT01929057 -NCT01926678 -NCT01929122 -NCT01926743 -NCT01929200 -NCT01926769 -NCT01929239 -NCT01926808 -NCT01929265 -NCT01926821 -NCT01929395 -NCT01926886 -NCT01929421 -NCT01927081 -NCT01929486 -NCT01927094 -NCT01929499 -NCT01927133 -NCT01929538 -NCT01927146 -NCT01929616 -NCT01927198 -NCT01929642 -NCT01927328 -NCT01929655 -NCT01927341 -NCT01929720 -NCT01927393 -NCT01929850 -NCT01927419 -NCT01929915 -NCT01927432 -NCT01929941 -NCT01927445 -NCT01929954 -NCT01927458 -NCT01929993 -NCT01927471 -NCT01930032 -NCT01927497 -NCT01930162 -NCT01927536 -NCT01930292 -NCT01927627 -NCT01930318 -NCT01927653 -NCT01930396 -NCT01927692 -NCT01930435 -NCT01927718 -NCT01930513 -NCT01927744 -NCT01930552 -NCT01927757 -NCT01930630 -NCT01927809 -NCT01930643 -NCT01927835 -NCT01930708 -NCT01927861 -NCT01930747 -NCT01927887 -NCT01930799 -NCT01927939 -NCT01930812 -NCT01927965 -NCT01930864 -NCT01928030 -NCT01930916 -NCT01928160 -NCT01930929 -NCT01928186 -NCT01930942 -NCT01928290 -NCT01931046 -NCT01928368 -NCT01931098 -NCT01928381 -NCT01931150 -NCT01928394 -NCT01931163 -NCT01928433 -NCT01931319 -NCT01928459 -NCT01931449 -NCT01928472 -NCT01931462 -NCT01928485 -NCT01931488 -NCT01928524 -NCT01931540 -NCT01928537 -NCT01931579 -NCT01928576 -NCT01931592 -NCT01928589 -NCT01931605 -NCT01928615 -NCT01931644 -NCT01928641 -NCT01931696 -NCT01928680 -NCT01931709 -NCT01928719 -NCT01931787 -NCT01928758 -NCT01937793 -NCT01931943 -NCT01935063 -NCT01931956 -NCT01935050 -NCT01931969 -NCT01935154 -NCT01932047 -NCT01935232 -NCT01932125 -NCT01935258 -NCT01932164 -NCT01935336 -NCT01932177 -NCT01935401 -NCT01932190 -NCT01935427 -NCT01932229 -NCT01935453 -NCT01932385 -NCT01935492 -NCT01932450 -NCT01935531 -NCT01932463 -NCT01935700 -NCT01932489 -NCT01935752 -NCT01932554 -NCT01935765 -NCT01932580 -NCT01935778 -NCT01932671 -NCT01935817 -NCT01932697 -NCT01935843 -NCT01932710 -NCT01935921 -NCT01932723 -NCT01935934 -NCT01932736 -NCT01935947 -NCT01932788 -NCT01935973 -NCT01932931 -NCT01936077 -NCT01933022 -NCT01936090 -NCT01933061 -NCT01936129 -NCT01933269 -NCT01936155 -NCT01933282 -NCT01936207 -NCT01933347 -NCT01936233 -NCT01933373 -NCT01936298 -NCT01933464 -NCT01936350 -NCT01933516 -NCT01936363 -NCT01933555 -NCT01936532 -NCT01933568 -NCT01936571 -NCT01933607 -NCT01936584 -NCT01933711 -NCT01936818 -NCT01933789 -NCT01936883 -NCT01933815 -NCT01936922 -NCT01933828 -NCT01936961 -NCT01933841 -NCT01936974 -NCT01933906 -NCT01937104 -NCT01933932 -NCT01937117 -NCT01933984 -NCT01937208 -NCT01934023 -NCT01937429 -NCT01934270 -NCT01937442 -NCT01934283 -NCT01937455 -NCT01934322 -NCT01937468 -NCT01934335 -NCT01937507 -NCT01934361 -NCT01937585 -NCT01934504 -NCT01937624 -NCT01934634 -NCT01937637 -NCT01934660 -NCT01937650 -NCT01934673 -NCT01937663 -NCT01934790 -NCT01937676 -NCT01934829 -NCT01937689 -NCT01934894 -NCT01937715 -NCT01934959 -NCT01937728 -NCT01934998 -NCT01943318 -NCT01937910 -NCT01940406 -NCT01938001 -NCT01940393 -NCT01938027 -NCT01940497 -NCT01938105 -NCT01940510 -NCT01938157 -NCT01940601 -NCT01938196 -NCT01940666 -NCT01938300 -NCT01940718 -NCT01938313 -NCT01940744 -NCT01938326 -NCT01940809 -NCT01938339 -NCT01940835 -NCT01938430 -NCT01941108 -NCT01938443 -NCT01941173 -NCT01938456 -NCT01941316 -NCT01938573 -NCT01941342 -NCT01938612 -NCT01941407 -NCT01938638 -NCT01941459 -NCT01938651 -NCT01941537 -NCT01938677 -NCT01941550 -NCT01938716 -NCT01941641 -NCT01938729 -NCT01941654 -NCT01938781 -NCT01941758 -NCT01938820 -NCT01941771 -NCT01938833 -NCT01941784 -NCT01938846 -NCT01941810 -NCT01938924 -NCT01941849 -NCT01938950 -NCT01941901 -NCT01938989 -NCT01941927 -NCT01939028 -NCT01941953 -NCT01939054 -NCT01941966 -NCT01939184 -NCT01941979 -NCT01939210 -NCT01941992 -NCT01939223 -NCT01942018 -NCT01939236 -NCT01942083 -NCT01939275 -NCT01942122 -NCT01939327 -NCT01942135 -NCT01939418 -NCT01942265 -NCT01939431 -NCT01942395 -NCT01939483 -NCT01942434 -NCT01939496 -NCT01942447 -NCT01939561 -NCT01942486 -NCT01939574 -NCT01942564 -NCT01939665 -NCT01942577 -NCT01939730 -NCT01942733 -NCT01939743 -NCT01942746 -NCT01939756 -NCT01942837 -NCT01939834 -NCT01942941 -NCT01939847 -NCT01942980 -NCT01939899 -NCT01942993 -NCT01940081 -NCT01943058 -NCT01940094 -NCT01943162 -NCT01940120 -NCT01943188 -NCT01940133 -NCT01943240 -NCT01940172 -NCT01943253 -NCT01940237 -NCT01943279 -NCT01940276 -NCT01943292 -NCT01940328 -NCT01949545 -NCT01943409 -NCT01946152 -NCT01943422 -NCT01946139 -NCT01943448 -NCT01946165 -NCT01943461 -NCT01946204 -NCT01943513 -NCT01946282 -NCT01943526 -NCT01946373 -NCT01943617 -NCT01946438 -NCT01943682 -NCT01946477 -NCT01943695 -NCT01946529 -NCT01943721 -NCT01946646 -NCT01943786 -NCT01946724 -NCT01943799 -NCT01946750 -NCT01943838 -NCT01946776 -NCT01943851 -NCT01946789 -NCT01943864 -NCT01946828 -NCT01943916 -NCT01946854 -NCT01943929 -NCT01946867 -NCT01944020 -NCT01946880 -NCT01944137 -NCT01946984 -NCT01944176 -NCT01947023 -NCT01944228 -NCT01947062 -NCT01944306 -NCT01947140 -NCT01944384 -NCT01947166 -NCT01944475 -NCT01947322 -NCT01944501 -NCT01947530 -NCT01944540 -NCT01947556 -NCT01944696 -NCT01947582 -NCT01944709 -NCT01948076 -NCT01944722 -NCT01948128 -NCT01944761 -NCT01948141 -NCT01944787 -NCT01948180 -NCT01944813 -NCT01948232 -NCT01944878 -NCT01948362 -NCT01944904 -NCT01948388 -NCT01944943 -NCT01948453 -NCT01944969 -NCT01948518 -NCT01944982 -NCT01948544 -NCT01945008 -NCT01948726 -NCT01945021 -NCT01948778 -NCT01945034 -NCT01948843 -NCT01945060 -NCT01948960 -NCT01945125 -NCT01949051 -NCT01945164 -NCT01949090 -NCT01945177 -NCT01949129 -NCT01945476 -NCT01949168 -NCT01945528 -NCT01949181 -NCT01945567 -NCT01949194 -NCT01945593 -NCT01949233 -NCT01945710 -NCT01949246 -NCT01945762 -NCT01949337 -NCT01945775 -NCT01949467 -NCT01945879 -NCT01949493 -NCT01946061 -NCT01949506 -NCT01946074 -NCT01949519 -NCT01946100 -NCT01949532 -NCT01946126 -NCT01954355 -NCT01949662 -NCT01951950 -NCT01949675 -NCT01951885 -NCT01949688 -NCT01951976 -NCT01949701 -NCT01952054 -NCT01949727 -NCT01952080 -NCT01949805 -NCT01952210 -NCT01949818 -NCT01952223 -NCT01949870 -NCT01952249 -NCT01949883 -NCT01952275 -NCT01949974 -NCT01952327 -NCT01949987 -NCT01952353 -NCT01950039 -NCT01952379 -NCT01950065 -NCT01952431 -NCT01950117 -NCT01952470 -NCT01950143 -NCT01952613 -NCT01950156 -NCT01952678 -NCT01950169 -NCT01952730 -NCT01950182 -NCT01952769 -NCT01950195 -NCT01952834 -NCT01950260 -NCT01952847 -NCT01950273 -NCT01952860 -NCT01950286 -NCT01952886 -NCT01950338 -NCT01952912 -NCT01950351 -NCT01952951 -NCT01950364 -NCT01953003 -NCT01950377 -NCT01953055 -NCT01950390 -NCT01953094 -NCT01950403 -NCT01953107 -NCT01950429 -NCT01953172 -NCT01950442 -NCT01953198 -NCT01950611 -NCT01953224 -NCT01950624 -NCT01953289 -NCT01950689 -NCT01953406 -NCT01950741 -NCT01953419 -NCT01950806 -NCT01953445 -NCT01950871 -NCT01953458 -NCT01950923 -NCT01953536 -NCT01950936 -NCT01953588 -NCT01950975 -NCT01953679 -NCT01951040 -NCT01953692 -NCT01951066 -NCT01953770 -NCT01951079 -NCT01953783 -NCT01951105 -NCT01953900 -NCT01951157 -NCT01953913 -NCT01951287 -NCT01953926 -NCT01951378 -NCT01953952 -NCT01951391 -NCT01954030 -NCT01951469 -NCT01954043 -NCT01951482 -NCT01954082 -NCT01951521 -NCT01954121 -NCT01951534 -NCT01954173 -NCT01951586 -NCT01954199 -NCT01951664 -NCT01954225 -NCT01951690 -NCT01954303 -NCT01951807 -NCT01954316 -NCT01951859 -NCT01959438 -NCT01954420 -NCT01956773 -NCT01954446 -NCT01956734 -NCT01954524 -NCT01956812 -NCT01954550 -NCT01956864 -NCT01954576 -NCT01956877 -NCT01954615 -NCT01956890 -NCT01954628 -NCT01956955 -NCT01954641 -NCT01957007 -NCT01954654 -NCT01957020 -NCT01954667 -NCT01957059 -NCT01954706 -NCT01957150 -NCT01954732 -NCT01957163 -NCT01954745 -NCT01957280 -NCT01954784 -NCT01957319 -NCT01954836 -NCT01957332 -NCT01954862 -NCT01957345 -NCT01954875 -NCT01957436 -NCT01954940 -NCT01957501 -NCT01954992 -NCT01957527 -NCT01955005 -NCT01957579 -NCT01955018 -NCT01957618 -NCT01955057 -NCT01957644 -NCT01955096 -NCT01957709 -NCT01955122 -NCT01957735 -NCT01955174 -NCT01957761 -NCT01955239 -NCT01957774 -NCT01955317 -NCT01957787 -NCT01955369 -NCT01957813 -NCT01955382 -NCT01957956 -NCT01955395 -NCT01957995 -NCT01955421 -NCT01958021 -NCT01955434 -NCT01958073 -NCT01955460 -NCT01958112 -NCT01955473 -NCT01958125 -NCT01955486 -NCT01958268 -NCT01955499 -NCT01958281 -NCT01955629 -NCT01958294 -NCT01955668 -NCT01958372 -NCT01955681 -NCT01958463 -NCT01955707 -NCT01958476 -NCT01955746 -NCT01958580 -NCT01955811 -NCT01958736 -NCT01955824 -NCT01958749 -NCT01955837 -NCT01958762 -NCT01955863 -NCT01958931 -NCT01956019 -NCT01958996 -NCT01956058 -NCT01959048 -NCT01956084 -NCT01959061 -NCT01956149 -NCT01959087 -NCT01956266 -NCT01959139 -NCT01956409 -NCT01959152 -NCT01956500 -NCT01959204 -NCT01956552 -NCT01959256 -NCT01956630 -NCT01959386 -NCT01956669 -NCT01959412 -NCT01956695 -NCT01965171 -NCT01959464 -NCT01962480 -NCT01959477 -NCT01962467 -NCT01959490 -NCT01962519 -NCT01959542 -NCT01962532 -NCT01959581 -NCT01962610 -NCT01959633 -NCT01962636 -NCT01959672 -NCT01962649 -NCT01959698 -NCT01962779 -NCT01959711 -NCT01962792 -NCT01959841 -NCT01962883 -NCT01959867 -NCT01962896 -NCT01959919 -NCT01962909 -NCT01960023 -NCT01962948 -NCT01960101 -NCT01962987 -NCT01960192 -NCT01963039 -NCT01960348 -NCT01963052 -NCT01960387 -NCT01963182 -NCT01960452 -NCT01963195 -NCT01960478 -NCT01963312 -NCT01960530 -NCT01963325 -NCT01960777 -NCT01963390 -NCT01960803 -NCT01963429 -NCT01960829 -NCT01963481 -NCT01960998 -NCT01963572 -NCT01961063 -NCT01963611 -NCT01961115 -NCT01963702 -NCT01961128 -NCT01963715 -NCT01961154 -NCT01963793 -NCT01961219 -NCT01963845 -NCT01961258 -NCT01963910 -NCT01961271 -NCT01963923 -NCT01961284 -NCT01964001 -NCT01961466 -NCT01964027 -NCT01961531 -NCT01964040 -NCT01961544 -NCT01964144 -NCT01961557 -NCT01964157 -NCT01961570 -NCT01964170 -NCT01961583 -NCT01964222 -NCT01961700 -NCT01964235 -NCT01961726 -NCT01964287 -NCT01961752 -NCT01964300 -NCT01961765 -NCT01964339 -NCT01961778 -NCT01964378 -NCT01961804 -NCT01964391 -NCT01961843 -NCT01964430 -NCT01961882 -NCT01964534 -NCT01961908 -NCT01964638 -NCT01961934 -NCT01964677 -NCT01961973 -NCT01964742 -NCT01962103 -NCT01964755 -NCT01962129 -NCT01964885 -NCT01962246 -NCT01964924 -NCT01962272 -NCT01965002 -NCT01962324 -NCT01965080 -NCT01962376 -NCT01965119 -NCT01962441 -NCT01970631 -NCT01965223 -NCT01968200 -NCT01965353 -NCT01968109 -NCT01965483 -NCT01968213 -NCT01965522 -NCT01968226 -NCT01965587 -NCT01968291 -NCT01965756 -NCT01968304 -NCT01965834 -NCT01968317 -NCT01965873 -NCT01968408 -NCT01965886 -NCT01968434 -NCT01965964 -NCT01968447 -NCT01965977 -NCT01968603 -NCT01966003 -NCT01968629 -NCT01966081 -NCT01968655 -NCT01966120 -NCT01968733 -NCT01966133 -NCT01968798 -NCT01966289 -NCT01968837 -NCT01966341 -NCT01968915 -NCT01966367 -NCT01968941 -NCT01966393 -NCT01969006 -NCT01966406 -NCT01969032 -NCT01966419 -NCT01969071 -NCT01966445 -NCT01969110 -NCT01966471 -NCT01969123 -NCT01966549 -NCT01969136 -NCT01966614 -NCT01969201 -NCT01966640 -NCT01969214 -NCT01966653 -NCT01969292 -NCT01966809 -NCT01969370 -NCT01966848 -NCT01969396 -NCT01966913 -NCT01969409 -NCT01966991 -NCT01969435 -NCT01967030 -NCT01969448 -NCT01967043 -NCT01969487 -NCT01967095 -NCT01969565 -NCT01967173 -NCT01969578 -NCT01967251 -NCT01969591 -NCT01967290 -NCT01969643 -NCT01967342 -NCT01969669 -NCT01967407 -NCT01969682 -NCT01967433 -NCT01969695 -NCT01967459 -NCT01969734 -NCT01967498 -NCT01969799 -NCT01967537 -NCT01969877 -NCT01967550 -NCT01969916 -NCT01967576 -NCT01969942 -NCT01967628 -NCT01969955 -NCT01967745 -NCT01970163 -NCT01967758 -NCT01970306 -NCT01967810 -NCT01970319 -NCT01967823 -NCT01970358 -NCT01967836 -NCT01970488 -NCT01967862 -NCT01970501 -NCT01967875 -NCT01970527 -NCT01967927 -NCT01970540 -NCT01968018 -NCT01970553 -NCT01968083 -NCT01976429 -NCT01970670 -NCT01973946 -NCT01970722 -NCT01973868 -NCT01970735 -NCT01973985 -NCT01970748 -NCT01973998 -NCT01970800 -NCT01974011 -NCT01970813 -NCT01974024 -NCT01970865 -NCT01974089 -NCT01970891 -NCT01974102 -NCT01970969 -NCT01974167 -NCT01971034 -NCT01974180 -NCT01971099 -NCT01974193 -NCT01971255 -NCT01974258 -NCT01971281 -NCT01974284 -NCT01971294 -NCT01974297 -NCT01971476 -NCT01974440 -NCT01971489 -NCT01974466 -NCT01971515 -NCT01974479 -NCT01971645 -NCT01974661 -NCT01971658 -NCT01974726 -NCT01971697 -NCT01974752 -NCT01971775 -NCT01974765 -NCT01971944 -NCT01974791 -NCT01971957 -NCT01974908 -NCT01971983 -NCT01974947 -NCT01972048 -NCT01975038 -NCT01972217 -NCT01975064 -NCT01972347 -NCT01975077 -NCT01972373 -NCT01975090 -NCT01972451 -NCT01975116 -NCT01972477 -NCT01975142 -NCT01972490 -NCT01975194 -NCT01972503 -NCT01975259 -NCT01972516 -NCT01975363 -NCT01972594 -NCT01975376 -NCT01972620 -NCT01975389 -NCT01972672 -NCT01975454 -NCT01972737 -NCT01975519 -NCT01972750 -NCT01975545 -NCT01972802 -NCT01975571 -NCT01972867 -NCT01975623 -NCT01972919 -NCT01975688 -NCT01972984 -NCT01975701 -NCT01973062 -NCT01975727 -NCT01973101 -NCT01975766 -NCT01973179 -NCT01975831 -NCT01973309 -NCT01975909 -NCT01973322 -NCT01976091 -NCT01973387 -NCT01976117 -NCT01973465 -NCT01976143 -NCT01973608 -NCT01976169 -NCT01973647 -NCT01976182 -NCT01973660 -NCT01976273 -NCT01973673 -NCT01976351 -NCT01973725 -NCT01976364 -NCT01973751 -NCT01976416 -NCT01973855 -NCT01982747 -NCT01976494 -NCT01979952 -NCT01976520 -NCT01979861 -NCT01976585 -NCT01980056 -NCT01976741 -NCT01980199 -NCT01976910 -NCT01980238 -NCT01976936 -NCT01980277 -NCT01976949 -NCT01980303 -NCT01976962 -NCT01980355 -NCT01977001 -NCT01980368 -NCT01977053 -NCT01980394 -NCT01977066 -NCT01980407 -NCT01977196 -NCT01980433 -NCT01977209 -NCT01980472 -NCT01977235 -NCT01980498 -NCT01977274 -NCT01980589 -NCT01977313 -NCT01980628 -NCT01977417 -NCT01980654 -NCT01977456 -NCT01980667 -NCT01977586 -NCT01980680 -NCT01977638 -NCT01980693 -NCT01977651 -NCT01980745 -NCT01977677 -NCT01980797 -NCT01977833 -NCT01980810 -NCT01977898 -NCT01980823 -NCT01977937 -NCT01980849 -NCT01978080 -NCT01980875 -NCT01978119 -NCT01980888 -NCT01978145 -NCT01980940 -NCT01978158 -NCT01981122 -NCT01978184 -NCT01981135 -NCT01978236 -NCT01981187 -NCT01978249 -NCT01981265 -NCT01978262 -NCT01981369 -NCT01978444 -NCT01981525 -NCT01978470 -NCT01981551 -NCT01978717 -NCT01981590 -NCT01978834 -NCT01981655 -NCT01978873 -NCT01981668 -NCT01978899 -NCT01981707 -NCT01978938 -NCT01981733 -NCT01978964 -NCT01981850 -NCT01979003 -NCT01982058 -NCT01979029 -NCT01982123 -NCT01979042 -NCT01982136 -NCT01979146 -NCT01982149 -NCT01979211 -NCT01982175 -NCT01979250 -NCT01982214 -NCT01979276 -NCT01982292 -NCT01979328 -NCT01982331 -NCT01979393 -NCT01982422 -NCT01979419 -NCT01982448 -NCT01979471 -NCT01982487 -NCT01979523 -NCT01982604 -NCT01979536 -NCT01982682 -NCT01979588 -NCT01982695 -NCT01979718 -NCT01989546 -NCT01982760 -NCT01986140 -NCT01982786 -NCT01985971 -NCT01982929 -NCT01986166 -NCT01982955 -NCT01986205 -NCT01982994 -NCT01986218 -NCT01983072 -NCT01986322 -NCT01983124 -NCT01986348 -NCT01983267 -NCT01986426 -NCT01983371 -NCT01986465 -NCT01983397 -NCT01986569 -NCT01983501 -NCT01986660 -NCT01983514 -NCT01986686 -NCT01983683 -NCT01986725 -NCT01983709 -NCT01986829 -NCT01983748 -NCT01986972 -NCT01983761 -NCT01987063 -NCT01983878 -NCT01987076 -NCT01983943 -NCT01987102 -NCT01983956 -NCT01987128 -NCT01983969 -NCT01987232 -NCT01984099 -NCT01987245 -NCT01984138 -NCT01987297 -NCT01984242 -NCT01987362 -NCT01984255 -NCT01987375 -NCT01984359 -NCT01987505 -NCT01984502 -NCT01987596 -NCT01984593 -NCT01987609 -NCT01984619 -NCT01987622 -NCT01984658 -NCT01987635 -NCT01984710 -NCT01987804 -NCT01984775 -NCT01987830 -NCT01984866 -NCT01987869 -NCT01984892 -NCT01987895 -NCT01984996 -NCT01987999 -NCT01985061 -NCT01988090 -NCT01985087 -NCT01988181 -NCT01985126 -NCT01988194 -NCT01985191 -NCT01988324 -NCT01985256 -NCT01988376 -NCT01985295 -NCT01988402 -NCT01985438 -NCT01988428 -NCT01985451 -NCT01988493 -NCT01985477 -NCT01988571 -NCT01985555 -NCT01988623 -NCT01985633 -NCT01988753 -NCT01985646 -NCT01988831 -NCT01985698 -NCT01988870 -NCT01985724 -NCT01988896 -NCT01985763 -NCT01989000 -NCT01985828 -NCT01989052 -NCT01985841 -NCT01989221 -NCT01985867 -NCT01989299 -NCT01985893 -NCT01989325 -NCT01985932 -NCT01989507 -NCT01985945 -NCT01989533 -NCT01985958 -NCT01994837 -NCT01989559 -NCT01992328 -NCT01989572 -NCT01992250 -NCT01989585 -NCT01992341 -NCT01989598 -NCT01992380 -NCT01989624 -NCT01992536 -NCT01989676 -NCT01992562 -NCT01989689 -NCT01992575 -NCT01989780 -NCT01992627 -NCT01989845 -NCT01992653 -NCT01989858 -NCT01992666 -NCT01989884 -NCT01992705 -NCT01989923 -NCT01992718 -NCT01990066 -NCT01992783 -NCT01990144 -NCT01992796 -NCT01990196 -NCT01992809 -NCT01990209 -NCT01992874 -NCT01990274 -NCT01992952 -NCT01990287 -NCT01992978 -NCT01990313 -NCT01993160 -NCT01990339 -NCT01993199 -NCT01990352 -NCT01993290 -NCT01990365 -NCT01993342 -NCT01990404 -NCT01993394 -NCT01990521 -NCT01993472 -NCT01990534 -NCT01993498 -NCT01990612 -NCT01993550 -NCT01990807 -NCT01993576 -NCT01990859 -NCT01993641 -NCT01991041 -NCT01993654 -NCT01991080 -NCT01993693 -NCT01991158 -NCT01993719 -NCT01991184 -NCT01993732 -NCT01991197 -NCT01993784 -NCT01991210 -NCT01993810 -NCT01991223 -NCT01993836 -NCT01991249 -NCT01993901 -NCT01991275 -NCT01993979 -NCT01991314 -NCT01994031 -NCT01991379 -NCT01994044 -NCT01991392 -NCT01994187 -NCT01991405 -NCT01994200 -NCT01991457 -NCT01994213 -NCT01991522 -NCT01994239 -NCT01991548 -NCT01994330 -NCT01991678 -NCT01994343 -NCT01991808 -NCT01994369 -NCT01991847 -NCT01994382 -NCT01991873 -NCT01994395 -NCT01991925 -NCT01994434 -NCT01991938 -NCT01994460 -NCT01991977 -NCT01994538 -NCT01992016 -NCT01994564 -NCT01992042 -NCT01994577 -NCT01992146 -NCT01994590 -NCT01992159 -NCT01994642 -NCT01992198 -NCT02000427 -NCT01994850 -NCT01997866 -NCT01994889 -NCT01997840 -NCT01995019 -NCT01997957 -NCT01995058 -NCT01998009 -NCT01995071 -NCT01998035 -NCT01995084 -NCT01998061 -NCT01995188 -NCT01998126 -NCT01995227 -NCT01998152 -NCT01995240 -NCT01998230 -NCT01995266 -NCT01998334 -NCT01995344 -NCT01998347 -NCT01995370 -NCT01998503 -NCT01995396 -NCT01998529 -NCT01995500 -NCT01998542 -NCT01995513 -NCT01998633 -NCT01995578 -NCT01998685 -NCT01995591 -NCT01998724 -NCT01995669 -NCT01998737 -NCT01995695 -NCT01998828 -NCT01995708 -NCT01998841 -NCT01995734 -NCT01998880 -NCT01995812 -NCT01998893 -NCT01995851 -NCT01998906 -NCT01995929 -NCT01998919 -NCT01996007 -NCT01998958 -NCT01996059 -NCT01998971 -NCT01996098 -NCT01998984 -NCT01996124 -NCT01999062 -NCT01996202 -NCT01999075 -NCT01996267 -NCT01999166 -NCT01996306 -NCT01999179 -NCT01996332 -NCT01999231 -NCT01996345 -NCT01999270 -NCT01996410 -NCT01999335 -NCT01996449 -NCT01999387 -NCT01996527 -NCT01999413 -NCT01996540 -NCT01999556 -NCT01996683 -NCT01999595 -NCT01996696 -NCT01999634 -NCT01996852 -NCT01999673 -NCT01996865 -NCT01999738 -NCT01996930 -NCT01999803 -NCT01996969 -NCT01999881 -NCT01997047 -NCT01999907 -NCT01997190 -NCT01999933 -NCT01997229 -NCT01999972 -NCT01997255 -NCT01999985 -NCT01997333 -NCT02000011 -NCT01997476 -NCT02000050 -NCT01997489 -NCT02000089 -NCT01997554 -NCT02000154 -NCT01997580 -NCT02000180 -NCT01997658 -NCT02000193 -NCT01997684 -NCT02000375 -NCT01997775 -NCT02000414 -NCT01997788 -NCT02005822 -NCT02000531 -NCT02003573 -NCT02000596 -NCT02003560 -NCT02000622 -NCT02003586 -NCT02000635 -NCT02003599 -NCT02000739 -NCT02003625 -NCT02000778 -NCT02003651 -NCT02000882 -NCT02003742 -NCT02000934 -NCT02003924 -NCT02000947 -NCT02003963 -NCT02000986 -NCT02004028 -NCT02001051 -NCT02004093 -NCT02001168 -NCT02004106 -NCT02001272 -NCT02004184 -NCT02001324 -NCT02004210 -NCT02001415 -NCT02004223 -NCT02001441 -NCT02004262 -NCT02001454 -NCT02004275 -NCT02001506 -NCT02004366 -NCT02001519 -NCT02004418 -NCT02001571 -NCT02004431 -NCT02001623 -NCT02004470 -NCT02001688 -NCT02004496 -NCT02001701 -NCT02004522 -NCT02001818 -NCT02004535 -NCT02001857 -NCT02004548 -NCT02001896 -NCT02004561 -NCT02001909 -NCT02004639 -NCT02001948 -NCT02004717 -NCT02001974 -NCT02004769 -NCT02002000 -NCT02004782 -NCT02002052 -NCT02004795 -NCT02002065 -NCT02004834 -NCT02002143 -NCT02004925 -NCT02002182 -NCT02004964 -NCT02002234 -NCT02005029 -NCT02002260 -NCT02005042 -NCT02002273 -NCT02005068 -NCT02002286 -NCT02005120 -NCT02002299 -NCT02005172 -NCT02002312 -NCT02005289 -NCT02002455 -NCT02005315 -NCT02002468 -NCT02005380 -NCT02002533 -NCT02005419 -NCT02002572 -NCT02005458 -NCT02002598 -NCT02005471 -NCT02002663 -NCT02005484 -NCT02002689 -NCT02005497 -NCT02002793 -NCT02005510 -NCT02002806 -NCT02005549 -NCT02002871 -NCT02005562 -NCT02002936 -NCT02005614 -NCT02003092 -NCT02005666 -NCT02003209 -NCT02005705 -NCT02003222 -NCT02005770 -NCT02003339 -NCT02005809 -NCT02003521 -NCT02011542 -NCT02005874 -NCT02008929 -NCT02005887 -NCT02008877 -NCT02005900 -NCT02008994 -NCT02005926 -NCT02009176 -NCT02006030 -NCT02009241 -NCT02006043 -NCT02009306 -NCT02006056 -NCT02009319 -NCT02006290 -NCT02009332 -NCT02006303 -NCT02009345 -NCT02006342 -NCT02009384 -NCT02006368 -NCT02009397 -NCT02006407 -NCT02009436 -NCT02006420 -NCT02009449 -NCT02006485 -NCT02009462 -NCT02006615 -NCT02009579 -NCT02006667 -NCT02009605 -NCT02006927 -NCT02009631 -NCT02006940 -NCT02009722 -NCT02006966 -NCT02009787 -NCT02006979 -NCT02009969 -NCT02007005 -NCT02009982 -NCT02007044 -NCT02010008 -NCT02007070 -NCT02010021 -NCT02007083 -NCT02010047 -NCT02007148 -NCT02010125 -NCT02007200 -NCT02010138 -NCT02007226 -NCT02010164 -NCT02007291 -NCT02010177 -NCT02007330 -NCT02010203 -NCT02007421 -NCT02010268 -NCT02007473 -NCT02010385 -NCT02007512 -NCT02010398 -NCT02007564 -NCT02010567 -NCT02007798 -NCT02010606 -NCT02007811 -NCT02010645 -NCT02007850 -NCT02010671 -NCT02007863 -NCT02010697 -NCT02007954 -NCT02010710 -NCT02007967 -NCT02010801 -NCT02008006 -NCT02010814 -NCT02008019 -NCT02010840 -NCT02008045 -NCT02010853 -NCT02008084 -NCT02010918 -NCT02008214 -NCT02010957 -NCT02008227 -NCT02010970 -NCT02008305 -NCT02011048 -NCT02008318 -NCT02011087 -NCT02008344 -NCT02011113 -NCT02008383 -NCT02011126 -NCT02008422 -NCT02011191 -NCT02008539 -NCT02011204 -NCT02008617 -NCT02011243 -NCT02008656 -NCT02011308 -NCT02008721 -NCT02011360 -NCT02008734 -NCT02011464 -NCT02008799 -NCT02016560 -NCT02011594 -NCT02014116 -NCT02011620 -NCT02014051 -NCT02011659 -NCT02014129 -NCT02011698 -NCT02014246 -NCT02011776 -NCT02014311 -NCT02011789 -NCT02014337 -NCT02011919 -NCT02014389 -NCT02011945 -NCT02014441 -NCT02011997 -NCT02014467 -NCT02012023 -NCT02014545 -NCT02012049 -NCT02014558 -NCT02012062 -NCT02014571 -NCT02012088 -NCT02014597 -NCT02012101 -NCT02014636 -NCT02012127 -NCT02014649 -NCT02012192 -NCT02014688 -NCT02012231 -NCT02014805 -NCT02012296 -NCT02014831 -NCT02012413 -NCT02014844 -NCT02012426 -NCT02014909 -NCT02012465 -NCT02015013 -NCT02012491 -NCT02015065 -NCT02012582 -NCT02015091 -NCT02012608 -NCT02015104 -NCT02012634 -NCT02015117 -NCT02012647 -NCT02015169 -NCT02012673 -NCT02015195 -NCT02012686 -NCT02015208 -NCT02012751 -NCT02015416 -NCT02012816 -NCT02015468 -NCT02012829 -NCT02015559 -NCT02012920 -NCT02015572 -NCT02013076 -NCT02015650 -NCT02013089 -NCT02015676 -NCT02013102 -NCT02015728 -NCT02013128 -NCT02015754 -NCT02013154 -NCT02015806 -NCT02013167 -NCT02015819 -NCT02013206 -NCT02015858 -NCT02013219 -NCT02015871 -NCT02013297 -NCT02015897 -NCT02013336 -NCT02015923 -NCT02013362 -NCT02015936 -NCT02013414 -NCT02016040 -NCT02013453 -NCT02016118 -NCT02013479 -NCT02016170 -NCT02013492 -NCT02016209 -NCT02013648 -NCT02016222 -NCT02013700 -NCT02016248 -NCT02013726 -NCT02016274 -NCT02013765 -NCT02016287 -NCT02013778 -NCT02016326 -NCT02013817 -NCT02016391 -NCT02013830 -NCT02016417 -NCT02013999 -NCT02016534 -NCT02014025 -NCT02022904 -NCT02016586 -NCT02019693 -NCT02016716 -NCT02019680 -NCT02016729 -NCT02019706 -NCT02016781 -NCT02019784 -NCT02016872 -NCT02019888 -NCT02017002 -NCT02019979 -NCT02017015 -NCT02020018 -NCT02017249 -NCT02020070 -NCT02017275 -NCT02020096 -NCT02017327 -NCT02020135 -NCT02017353 -NCT02020161 -NCT02017366 -NCT02020174 -NCT02017457 -NCT02020226 -NCT02017574 -NCT02020278 -NCT02017587 -NCT02020291 -NCT02017600 -NCT02020369 -NCT02017613 -NCT02020499 -NCT02017678 -NCT02020577 -NCT02017704 -NCT02020642 -NCT02017717 -NCT02020655 -NCT02017782 -NCT02020681 -NCT02017795 -NCT02020707 -NCT02017808 -NCT02020720 -NCT02017834 -NCT02020785 -NCT02017860 -NCT02020889 -NCT02017912 -NCT02020928 -NCT02017925 -NCT02020941 -NCT02017964 -NCT02021019 -NCT02018003 -NCT02021032 -NCT02018068 -NCT02021097 -NCT02018107 -NCT02021253 -NCT02018172 -NCT02021422 -NCT02018276 -NCT02021474 -NCT02018367 -NCT02021604 -NCT02018419 -NCT02021617 -NCT02018432 -NCT02021643 -NCT02018458 -NCT02021656 -NCT02018471 -NCT02021695 -NCT02018497 -NCT02021721 -NCT02018523 -NCT02021747 -NCT02018653 -NCT02022033 -NCT02018679 -NCT02022098 -NCT02018705 -NCT02022137 -NCT02018757 -NCT02022293 -NCT02018835 -NCT02022358 -NCT02018874 -NCT02022371 -NCT02018926 -NCT02022384 -NCT02019017 -NCT02022553 -NCT02019069 -NCT02022566 -NCT02019277 -NCT02022579 -NCT02019303 -NCT02022644 -NCT02019355 -NCT02022670 -NCT02019446 -NCT02022800 -NCT02019524 -NCT02022826 -NCT02019576 -NCT02022852 -NCT02019641 -NCT02027935 -NCT02022917 -NCT02025114 -NCT02022982 -NCT02025088 -NCT02023008 -NCT02025179 -NCT02023021 -NCT02025192 -NCT02023203 -NCT02025218 -NCT02023229 -NCT02025231 -NCT02023333 -NCT02025270 -NCT02023359 -NCT02025361 -NCT02023424 -NCT02025413 -NCT02023463 -NCT02025465 -NCT02023476 -NCT02025504 -NCT02023489 -NCT02025543 -NCT02023541 -NCT02025699 -NCT02023554 -NCT02025712 -NCT02023593 -NCT02025751 -NCT02023671 -NCT02025777 -NCT02023697 -NCT02025790 -NCT02023710 -NCT02025803 -NCT02023762 -NCT02025881 -NCT02023801 -NCT02025985 -NCT02023905 -NCT02026115 -NCT02023931 -NCT02026154 -NCT02023996 -NCT02026258 -NCT02024009 -NCT02026271 -NCT02024074 -NCT02026310 -NCT02024087 -NCT02026349 -NCT02024113 -NCT02026362 -NCT02024178 -NCT02026427 -NCT02024217 -NCT02026479 -NCT02024256 -NCT02026583 -NCT02024269 -NCT02026596 -NCT02024282 -NCT02026609 -NCT02024308 -NCT02026687 -NCT02024347 -NCT02026726 -NCT02024360 -NCT02026869 -NCT02024386 -NCT02026908 -NCT02024399 -NCT02026921 -NCT02024412 -NCT02026960 -NCT02024425 -NCT02027064 -NCT02024438 -NCT02027077 -NCT02024451 -NCT02027090 -NCT02024529 -NCT02027207 -NCT02024555 -NCT02027220 -NCT02024568 -NCT02027298 -NCT02024607 -NCT02027311 -NCT02024633 -NCT02027350 -NCT02024685 -NCT02027363 -NCT02024789 -NCT02027376 -NCT02024815 -NCT02027428 -NCT02024841 -NCT02027545 -NCT02024906 -NCT02027610 -NCT02024997 -NCT02027623 -NCT02025010 -NCT02027779 -NCT02025036 -NCT02027818 -NCT02025049 -NCT02027831 -NCT02025062 -NCT02032979 -NCT02027948 -NCT02030418 -NCT02027961 -NCT02030405 -NCT02028013 -NCT02030444 -NCT02028039 -NCT02030457 -NCT02028052 -NCT02030483 -NCT02028065 -NCT02030561 -NCT02028117 -NCT02030574 -NCT02028221 -NCT02030587 -NCT02028286 -NCT02030678 -NCT02028325 -NCT02030717 -NCT02028351 -NCT02030756 -NCT02028364 -NCT02030769 -NCT02028377 -NCT02030834 -NCT02028429 -NCT02030860 -NCT02028442 -NCT02030951 -NCT02028455 -NCT02030964 -NCT02028468 -NCT02031029 -NCT02028494 -NCT02031055 -NCT02028507 -NCT02031120 -NCT02028572 -NCT02031172 -NCT02028637 -NCT02031250 -NCT02028806 -NCT02031263 -NCT02028845 -NCT02031328 -NCT02028858 -NCT02031393 -NCT02028910 -NCT02031419 -NCT02028949 -NCT02031432 -NCT02028988 -NCT02031458 -NCT02029001 -NCT02031484 -NCT02029053 -NCT02031523 -NCT02029066 -NCT02031536 -NCT02029144 -NCT02031588 -NCT02029157 -NCT02031601 -NCT02029183 -NCT02031614 -NCT02029209 -NCT02031640 -NCT02029352 -NCT02031653 -NCT02029417 -NCT02031731 -NCT02029430 -NCT02031744 -NCT02029443 -NCT02031939 -NCT02029456 -NCT02031952 -NCT02029573 -NCT02031965 -NCT02029690 -NCT02032121 -NCT02029729 -NCT02032251 -NCT02029781 -NCT02032277 -NCT02029794 -NCT02032368 -NCT02029859 -NCT02032485 -NCT02029911 -NCT02032498 -NCT02029937 -NCT02032550 -NCT02029950 -NCT02032563 -NCT02030067 -NCT02032576 -NCT02030184 -NCT02032693 -NCT02030223 -NCT02032745 -NCT02030249 -NCT02032810 -NCT02030314 -NCT02032823 -NCT02030353 -NCT02032888 -NCT02030379 -NCT02032953 -NCT02030392 -NCT02038348 -NCT02033096 -NCT02035787 -NCT02033148 -NCT02035774 -NCT02033200 -NCT02035813 -NCT02033213 -NCT02035904 -NCT02033343 -NCT02035930 -NCT02033408 -NCT02035956 -NCT02033447 -NCT02035982 -NCT02033473 -NCT02036008 -NCT02033486 -NCT02036060 -NCT02033538 -NCT02036086 -NCT02033551 -NCT02036112 -NCT02033616 -NCT02036164 -NCT02033642 -NCT02036177 -NCT02033720 -NCT02036203 -NCT02033811 -NCT02036281 -NCT02033876 -NCT02036359 -NCT02033980 -NCT02036463 -NCT02033993 -NCT02036476 -NCT02034097 -NCT02036489 -NCT02034110 -NCT02036502 -NCT02034123 -NCT02036528 -NCT02034227 -NCT02036580 -NCT02034279 -NCT02036684 -NCT02034344 -NCT02036710 -NCT02034435 -NCT02036866 -NCT02034487 -NCT02036918 -NCT02034513 -NCT02036944 -NCT02034552 -NCT02036957 -NCT02034708 -NCT02037035 -NCT02034799 -NCT02037048 -NCT02034903 -NCT02037217 -NCT02034916 -NCT02037230 -NCT02034929 -NCT02037256 -NCT02034955 -NCT02037347 -NCT02034968 -NCT02037399 -NCT02034981 -NCT02037438 -NCT02035033 -NCT02037451 -NCT02035072 -NCT02037464 -NCT02035085 -NCT02037516 -NCT02035098 -NCT02037529 -NCT02035124 -NCT02037568 -NCT02035137 -NCT02037646 -NCT02035293 -NCT02037776 -NCT02035319 -NCT02037893 -NCT02035332 -NCT02037945 -NCT02035345 -NCT02037997 -NCT02035358 -NCT02038010 -NCT02035423 -NCT02038036 -NCT02035475 -NCT02038049 -NCT02035514 -NCT02038114 -NCT02035527 -NCT02038153 -NCT02035631 -NCT02038205 -NCT02035657 -NCT02038218 -NCT02035670 -NCT02038296 -NCT02035683 -NCT02038322 -NCT02035735 -NCT02043756 -NCT02038361 -NCT02041065 -NCT02038374 -NCT02040935 -NCT02038400 -NCT02041169 -NCT02038478 -NCT02041195 -NCT02038621 -NCT02041260 -NCT02038634 -NCT02041338 -NCT02038647 -NCT02041351 -NCT02038673 -NCT02041429 -NCT02038699 -NCT02041481 -NCT02038712 -NCT02041507 -NCT02038738 -NCT02041533 -NCT02038751 -NCT02041611 -NCT02038777 -NCT02041819 -NCT02038816 -NCT02041845 -NCT02038868 -NCT02041858 -NCT02038933 -NCT02041871 -NCT02038946 -NCT02041910 -NCT02038972 -NCT02041923 -NCT02039011 -NCT02041936 -NCT02039219 -NCT02042053 -NCT02039232 -NCT02042079 -NCT02039323 -NCT02042092 -NCT02039336 -NCT02042170 -NCT02039375 -NCT02042196 -NCT02039388 -NCT02042261 -NCT02039518 -NCT02042313 -NCT02039635 -NCT02042378 -NCT02039674 -NCT02042404 -NCT02039726 -NCT02042430 -NCT02039778 -NCT02042443 -NCT02039791 -NCT02042482 -NCT02039869 -NCT02042495 -NCT02039895 -NCT02042638 -NCT02039947 -NCT02042690 -NCT02039999 -NCT02042755 -NCT02040064 -NCT02042807 -NCT02040142 -NCT02042820 -NCT02040155 -NCT02042846 -NCT02040181 -NCT02042859 -NCT02040194 -NCT02042885 -NCT02040233 -NCT02042911 -NCT02040272 -NCT02042924 -NCT02040376 -NCT02042950 -NCT02040480 -NCT02042989 -NCT02040493 -NCT02043002 -NCT02040506 -NCT02043054 -NCT02040545 -NCT02043184 -NCT02040558 -NCT02043236 -NCT02040610 -NCT02043288 -NCT02040662 -NCT02043444 -NCT02040766 -NCT02043470 -NCT02040779 -NCT02043587 -NCT02040831 -NCT02043665 -NCT02040857 -NCT02043678 -NCT02040870 -NCT02043730 -NCT02040922 -NCT02049047 -NCT02043821 -NCT02046538 -NCT02043847 -NCT02046421 -NCT02043860 -NCT02046603 -NCT02043899 -NCT02046694 -NCT02044120 -NCT02046733 -NCT02044172 -NCT02046811 -NCT02044198 -NCT02046837 -NCT02044224 -NCT02046863 -NCT02044276 -NCT02046915 -NCT02044328 -NCT02046928 -NCT02044341 -NCT02046941 -NCT02044354 -NCT02047136 -NCT02044380 -NCT02047149 -NCT02044419 -NCT02047162 -NCT02044510 -NCT02047175 -NCT02044523 -NCT02047201 -NCT02044536 -NCT02047214 -NCT02044562 -NCT02047253 -NCT02044601 -NCT02047279 -NCT02044640 -NCT02047305 -NCT02044796 -NCT02047344 -NCT02044822 -NCT02047370 -NCT02044861 -NCT02047474 -NCT02044965 -NCT02047500 -NCT02045004 -NCT02047513 -NCT02045017 -NCT02047552 -NCT02045030 -NCT02047578 -NCT02045095 -NCT02047747 -NCT02045121 -NCT02047825 -NCT02045186 -NCT02047851 -NCT02045199 -NCT02047864 -NCT02045238 -NCT02047890 -NCT02045264 -NCT02047903 -NCT02045342 -NCT02047994 -NCT02045368 -NCT02048020 -NCT02045420 -NCT02048059 -NCT02045433 -NCT02048150 -NCT02045446 -NCT02048163 -NCT02045550 -NCT02048254 -NCT02045589 -NCT02048267 -NCT02045602 -NCT02048371 -NCT02045641 -NCT02048384 -NCT02045719 -NCT02048488 -NCT02045771 -NCT02048540 -NCT02045784 -NCT02048553 -NCT02045901 -NCT02048670 -NCT02045940 -NCT02048709 -NCT02046057 -NCT02048722 -NCT02046070 -NCT02048748 -NCT02046122 -NCT02048813 -NCT02046174 -NCT02048865 -NCT02046187 -NCT02048904 -NCT02046265 -NCT02048917 -NCT02046278 -NCT02048943 -NCT02046304 -NCT02048956 -NCT02046395 -NCT02054793 -NCT02049060 -NCT02052102 -NCT02049073 -NCT02052089 -NCT02049086 -NCT02052115 -NCT02049112 -NCT02052128 -NCT02049151 -NCT02052193 -NCT02049190 -NCT02052271 -NCT02049203 -NCT02052479 -NCT02049242 -NCT02052492 -NCT02049268 -NCT02052557 -NCT02049281 -NCT02052648 -NCT02049489 -NCT02052661 -NCT02049515 -NCT02052752 -NCT02049541 -NCT02052778 -NCT02049580 -NCT02052921 -NCT02049593 -NCT02052934 -NCT02049606 -NCT02052947 -NCT02049632 -NCT02052960 -NCT02049801 -NCT02052999 -NCT02049892 -NCT02053181 -NCT02049905 -NCT02053220 -NCT02049918 -NCT02053311 -NCT02049957 -NCT02053324 -NCT02050009 -NCT02053350 -NCT02050022 -NCT02053376 -NCT02050048 -NCT02053389 -NCT02050178 -NCT02053402 -NCT02050243 -NCT02053428 -NCT02050256 -NCT02053467 -NCT02050282 -NCT02053480 -NCT02050321 -NCT02053493 -NCT02050347 -NCT02053545 -NCT02050451 -NCT02053597 -NCT02050529 -NCT02053610 -NCT02050542 -NCT02053623 -NCT02050685 -NCT02053636 -NCT02050724 -NCT02053753 -NCT02050763 -NCT02053961 -NCT02050815 -NCT02054013 -NCT02050906 -NCT02054052 -NCT02050919 -NCT02054104 -NCT02051101 -NCT02054117 -NCT02051205 -NCT02054221 -NCT02051218 -NCT02054286 -NCT02051244 -NCT02054338 -NCT02051257 -NCT02054351 -NCT02051413 -NCT02054442 -NCT02051530 -NCT02054455 -NCT02051608 -NCT02054520 -NCT02051751 -NCT02054559 -NCT02051855 -NCT02054598 -NCT02051868 -NCT02054624 -NCT02051894 -NCT02054715 -NCT02051907 -NCT02054741 -NCT02051972 -NCT02054754 -NCT02052024 -NCT02054780 -NCT02052050 -NCT02060474 -NCT02054806 -NCT02057536 -NCT02054819 -NCT02057523 -NCT02054884 -NCT02057627 -NCT02054923 -NCT02057640 -NCT02055053 -NCT02057666 -NCT02055066 -NCT02057770 -NCT02055157 -NCT02057809 -NCT02055170 -NCT02057874 -NCT02055196 -NCT02057913 -NCT02055248 -NCT02057939 -NCT02055495 -NCT02057991 -NCT02055534 -NCT02058017 -NCT02055573 -NCT02058056 -NCT02055690 -NCT02058069 -NCT02055716 -NCT02058082 -NCT02055729 -NCT02058303 -NCT02055820 -NCT02058381 -NCT02055833 -NCT02058433 -NCT02055846 -NCT02058459 -NCT02055924 -NCT02058550 -NCT02055937 -NCT02058615 -NCT02055963 -NCT02058628 -NCT02055989 -NCT02058667 -NCT02056015 -NCT02058680 -NCT02056054 -NCT02058706 -NCT02056067 -NCT02058745 -NCT02056223 -NCT02058823 -NCT02056288 -NCT02058901 -NCT02056457 -NCT02058953 -NCT02056522 -NCT02059018 -NCT02056587 -NCT02059122 -NCT02056678 -NCT02059135 -NCT02056691 -NCT02059213 -NCT02056730 -NCT02059239 -NCT02056756 -NCT02059252 -NCT02056782 -NCT02059265 -NCT02056847 -NCT02059317 -NCT02056886 -NCT02059473 -NCT02057003 -NCT02059538 -NCT02057029 -NCT02059720 -NCT02057055 -NCT02059850 -NCT02057107 -NCT02059876 -NCT02057133 -NCT02059889 -NCT02057146 -NCT02059954 -NCT02057198 -NCT02059967 -NCT02057237 -NCT02059993 -NCT02057250 -NCT02060058 -NCT02057289 -NCT02060071 -NCT02057328 -NCT02060136 -NCT02057367 -NCT02060149 -NCT02057380 -NCT02060188 -NCT02057393 -NCT02060253 -NCT02057432 -NCT02060331 -NCT02057445 -NCT02060370 -NCT02057471 -NCT02060383 -NCT02057484 -NCT02066298 -NCT02060487 -NCT02063568 -NCT02060539 -NCT02063529 -NCT02060552 -NCT02063633 -NCT02060578 -NCT02063685 -NCT02060656 -NCT02063724 -NCT02060669 -NCT02063828 -NCT02060695 -NCT02063958 -NCT02060799 -NCT02063971 -NCT02060929 -NCT02063997 -NCT02060955 -NCT02064036 -NCT02060994 -NCT02064127 -NCT02061007 -NCT02064166 -NCT02061033 -NCT02064244 -NCT02061072 -NCT02064283 -NCT02061085 -NCT02064309 -NCT02061228 -NCT02064361 -NCT02061332 -NCT02064387 -NCT02061384 -NCT02064491 -NCT02061397 -NCT02064582 -NCT02061423 -NCT02064608 -NCT02061449 -NCT02064673 -NCT02061514 -NCT02064686 -NCT02061527 -NCT02064725 -NCT02061592 -NCT02064803 -NCT02061605 -NCT02064829 -NCT02061631 -NCT02064881 -NCT02061657 -NCT02064946 -NCT02061761 -NCT02065037 -NCT02061800 -NCT02065063 -NCT02061995 -NCT02065154 -NCT02062229 -NCT02065219 -NCT02062242 -NCT02065323 -NCT02062255 -NCT02065362 -NCT02062307 -NCT02065466 -NCT02062359 -NCT02065479 -NCT02062372 -NCT02065492 -NCT02062489 -NCT02065609 -NCT02062515 -NCT02065687 -NCT02062554 -NCT02065726 -NCT02062606 -NCT02065804 -NCT02062632 -NCT02065869 -NCT02062697 -NCT02065921 -NCT02062749 -NCT02065960 -NCT02062775 -NCT02065999 -NCT02062827 -NCT02066012 -NCT02062840 -NCT02066038 -NCT02062983 -NCT02066064 -NCT02063022 -NCT02066103 -NCT02063048 -NCT02066116 -NCT02063087 -NCT02066129 -NCT02063113 -NCT02066142 -NCT02063126 -NCT02066181 -NCT02063230 -NCT02066220 -NCT02063282 -NCT02066233 -NCT02063295 -NCT02066285 -NCT02063438 -NCT02072031 -NCT02066363 -NCT02069041 -NCT02066454 -NCT02068950 -NCT02066493 -NCT02069080 -NCT02066506 -NCT02069093 -NCT02066519 -NCT02069106 -NCT02066532 -NCT02069145 -NCT02066545 -NCT02069158 -NCT02066636 -NCT02069197 -NCT02066649 -NCT02069340 -NCT02066675 -NCT02069366 -NCT02066688 -NCT02069418 -NCT02066870 -NCT02069470 -NCT02066896 -NCT02069626 -NCT02066922 -NCT02069678 -NCT02067026 -NCT02069704 -NCT02067052 -NCT02069730 -NCT02067104 -NCT02069743 -NCT02067130 -NCT02069756 -NCT02067143 -NCT02069769 -NCT02067156 -NCT02069873 -NCT02067247 -NCT02069912 -NCT02067260 -NCT02070016 -NCT02067286 -NCT02070120 -NCT02067299 -NCT02070224 -NCT02067312 -NCT02070406 -NCT02067325 -NCT02070419 -NCT02067351 -NCT02070432 -NCT02067377 -NCT02070458 -NCT02067416 -NCT02070497 -NCT02067468 -NCT02070523 -NCT02067481 -NCT02070549 -NCT02067520 -NCT02070640 -NCT02067546 -NCT02070679 -NCT02067598 -NCT02070705 -NCT02067624 -NCT02070952 -NCT02067663 -NCT02071004 -NCT02067702 -NCT02071043 -NCT02067741 -NCT02071056 -NCT02067806 -NCT02071069 -NCT02067858 -NCT02071225 -NCT02067884 -NCT02071355 -NCT02067897 -NCT02071394 -NCT02067988 -NCT02071472 -NCT02068053 -NCT02071511 -NCT02068079 -NCT02071537 -NCT02068092 -NCT02071589 -NCT02068131 -NCT02071641 -NCT02068157 -NCT02071654 -NCT02068196 -NCT02071693 -NCT02068378 -NCT02071849 -NCT02068586 -NCT02071862 -NCT02068677 -NCT02071888 -NCT02068794 -NCT02071901 -NCT02068820 -NCT02071927 -NCT02068846 -NCT02071940 -NCT02068872 -NCT02077868 -NCT02072044 -NCT02075372 -NCT02072057 -NCT02075320 -NCT02072070 -NCT02075385 -NCT02072148 -NCT02075437 -NCT02072317 -NCT02075489 -NCT02072356 -NCT02075567 -NCT02072473 -NCT02075580 -NCT02072486 -NCT02075606 -NCT02072512 -NCT02075632 -NCT02072590 -NCT02075658 -NCT02072616 -NCT02075671 -NCT02072655 -NCT02075684 -NCT02072720 -NCT02075775 -NCT02072733 -NCT02075840 -NCT02072785 -NCT02075879 -NCT02072811 -NCT02076009 -NCT02072863 -NCT02076074 -NCT02073006 -NCT02076152 -NCT02073045 -NCT02076191 -NCT02073071 -NCT02076230 -NCT02073097 -NCT02076243 -NCT02073123 -NCT02076308 -NCT02073201 -NCT02076438 -NCT02073305 -NCT02076451 -NCT02073396 -NCT02076477 -NCT02073448 -NCT02076503 -NCT02073461 -NCT02076529 -NCT02073487 -NCT02076581 -NCT02073591 -NCT02076594 -NCT02073682 -NCT02076620 -NCT02073773 -NCT02076633 -NCT02073838 -NCT02076646 -NCT02073890 -NCT02076672 -NCT02073916 -NCT02076776 -NCT02073968 -NCT02076815 -NCT02073994 -NCT02076867 -NCT02074007 -NCT02076906 -NCT02074046 -NCT02076997 -NCT02074111 -NCT02077023 -NCT02074137 -NCT02077036 -NCT02074150 -NCT02077101 -NCT02074189 -NCT02077114 -NCT02074202 -NCT02077166 -NCT02074553 -NCT02077218 -NCT02074644 -NCT02077335 -NCT02074709 -NCT02077348 -NCT02074787 -NCT02077439 -NCT02074839 -NCT02077504 -NCT02074878 -NCT02077530 -NCT02075021 -NCT02077543 -NCT02075034 -NCT02077569 -NCT02075060 -NCT02077621 -NCT02075086 -NCT02077634 -NCT02075112 -NCT02077673 -NCT02075177 -NCT02077777 -NCT02075229 -NCT02083016 -NCT02077881 -NCT02080299 -NCT02077933 -NCT02080260 -NCT02077959 -NCT02080312 -NCT02077998 -NCT02080416 -NCT02078011 -NCT02080455 -NCT02078076 -NCT02080598 -NCT02078089 -NCT02080624 -NCT02078102 -NCT02080650 -NCT02078154 -NCT02080663 -NCT02078167 -NCT02080689 -NCT02078219 -NCT02080806 -NCT02078232 -NCT02080949 -NCT02078245 -NCT02080962 -NCT02078258 -NCT02080988 -NCT02078323 -NCT02081040 -NCT02078349 -NCT02081053 -NCT02078388 -NCT02081066 -NCT02078479 -NCT02081079 -NCT02078531 -NCT02081131 -NCT02078648 -NCT02081196 -NCT02078661 -NCT02081222 -NCT02078687 -NCT02081300 -NCT02078700 -NCT02081339 -NCT02078726 -NCT02081365 -NCT02078739 -NCT02081378 -NCT02078752 -NCT02081404 -NCT02078765 -NCT02081456 -NCT02078791 -NCT02081469 -NCT02078804 -NCT02081495 -NCT02078843 -NCT02081508 -NCT02078960 -NCT02081612 -NCT02079025 -NCT02081625 -NCT02079103 -NCT02081755 -NCT02079155 -NCT02081768 -NCT02079181 -NCT02081794 -NCT02079220 -NCT02081937 -NCT02079272 -NCT02082119 -NCT02079324 -NCT02082197 -NCT02079363 -NCT02082210 -NCT02079389 -NCT02082275 -NCT02079428 -NCT02082340 -NCT02079519 -NCT02082353 -NCT02079558 -NCT02082379 -NCT02079636 -NCT02082405 -NCT02079662 -NCT02082431 -NCT02079688 -NCT02082470 -NCT02079714 -NCT02082522 -NCT02079727 -NCT02082626 -NCT02079740 -NCT02082665 -NCT02079753 -NCT02082691 -NCT02079948 -NCT02082730 -NCT02080052 -NCT02082782 -NCT02080078 -NCT02082925 -NCT02080221 -NCT02082951 -NCT02080234 -NCT02082977 -NCT02080247 -NCT02089230 -NCT02083029 -NCT02086071 -NCT02083185 -NCT02085941 -NCT02083211 -NCT02086136 -NCT02083250 -NCT02086175 -NCT02083354 -NCT02086266 -NCT02083510 -NCT02086292 -NCT02083536 -NCT02086448 -NCT02083614 -NCT02086461 -NCT02083653 -NCT02086487 -NCT02083679 -NCT02086552 -NCT02083692 -NCT02086578 -NCT02083770 -NCT02086591 -NCT02083848 -NCT02086604 -NCT02083861 -NCT02086656 -NCT02083887 -NCT02086773 -NCT02083926 -NCT02086825 -NCT02083939 -NCT02086838 -NCT02083965 -NCT02086890 -NCT02083978 -NCT02086916 -NCT02084095 -NCT02086942 -NCT02084134 -NCT02086994 -NCT02084147 -NCT02087007 -NCT02084160 -NCT02087046 -NCT02084199 -NCT02087059 -NCT02084238 -NCT02087150 -NCT02084264 -NCT02087176 -NCT02084342 -NCT02087241 -NCT02084355 -NCT02087397 -NCT02084407 -NCT02087423 -NCT02084459 -NCT02087475 -NCT02084472 -NCT02087488 -NCT02084524 -NCT02087592 -NCT02084563 -NCT02087631 -NCT02084732 -NCT02087657 -NCT02084745 -NCT02087748 -NCT02084784 -NCT02087852 -NCT02084823 -NCT02087917 -NCT02084888 -NCT02087956 -NCT02084914 -NCT02088086 -NCT02084927 -NCT02088112 -NCT02085005 -NCT02088281 -NCT02085018 -NCT02088333 -NCT02085031 -NCT02088372 -NCT02085070 -NCT02088515 -NCT02085096 -NCT02088541 -NCT02085187 -NCT02088645 -NCT02085252 -NCT02088684 -NCT02085304 -NCT02088775 -NCT02085395 -NCT02088827 -NCT02085408 -NCT02088866 -NCT02085460 -NCT02089048 -NCT02085499 -NCT02089087 -NCT02085525 -NCT02089100 -NCT02085603 -NCT02089178 -NCT02085655 -NCT02089217 -NCT02085928 -NCT02095132 -NCT02089243 -NCT02092363 -NCT02089334 -NCT02092337 -NCT02089373 -NCT02092519 -NCT02089386 -NCT02092571 -NCT02089555 -NCT02092584 -NCT02089633 -NCT02092636 -NCT02089685 -NCT02092662 -NCT02089711 -NCT02092714 -NCT02089737 -NCT02092740 -NCT02089750 -NCT02092792 -NCT02089763 -NCT02092805 -NCT02089802 -NCT02092831 -NCT02089854 -NCT02092909 -NCT02089919 -NCT02092922 -NCT02089932 -NCT02092935 -NCT02090010 -NCT02092948 -NCT02090101 -NCT02093013 -NCT02090114 -NCT02093039 -NCT02090153 -NCT02093065 -NCT02090166 -NCT02093143 -NCT02090348 -NCT02093247 -NCT02090374 -NCT02093299 -NCT02090400 -NCT02093312 -NCT02090413 -NCT02093325 -NCT02090582 -NCT02093390 -NCT02090660 -NCT02093403 -NCT02090816 -NCT02093598 -NCT02090894 -NCT02093767 -NCT02090907 -NCT02093871 -NCT02090933 -NCT02093910 -NCT02090998 -NCT02093962 -NCT02091024 -NCT02094053 -NCT02091050 -NCT02094079 -NCT02091063 -NCT02094105 -NCT02091141 -NCT02094144 -NCT02091167 -NCT02094235 -NCT02091245 -NCT02094261 -NCT02091362 -NCT02094274 -NCT02091492 -NCT02094313 -NCT02091531 -NCT02094339 -NCT02091596 -NCT02094391 -NCT02091661 -NCT02094443 -NCT02091674 -NCT02094482 -NCT02091765 -NCT02094560 -NCT02091778 -NCT02094573 -NCT02091791 -NCT02094625 -NCT02091869 -NCT02094729 -NCT02091947 -NCT02094742 -NCT02091960 -NCT02094794 -NCT02091999 -NCT02094872 -NCT02092038 -NCT02094950 -NCT02092064 -NCT02095041 -NCT02092129 -NCT02095054 -NCT02092155 -NCT02095093 -NCT02092298 -NCT02095119 -NCT02092324 -NCT02100969 -NCT02095145 -NCT02098291 -NCT02095158 -NCT02098265 -NCT02095184 -NCT02098343 -NCT02095210 -NCT02098369 -NCT02095236 -NCT02098499 -NCT02095249 -NCT02098512 -NCT02095301 -NCT02098538 -NCT02095561 -NCT02098616 -NCT02095574 -NCT02098642 -NCT02095587 -NCT02098681 -NCT02095600 -NCT02098707 -NCT02095678 -NCT02098759 -NCT02095717 -NCT02098772 -NCT02095743 -NCT02098863 -NCT02095782 -NCT02098889 -NCT02095808 -NCT02098902 -NCT02095834 -NCT02098915 -NCT02095847 -NCT02098954 -NCT02095951 -NCT02098967 -NCT02096042 -NCT02099006 -NCT02096055 -NCT02099045 -NCT02096068 -NCT02099058 -NCT02096094 -NCT02099175 -NCT02096185 -NCT02099188 -NCT02096224 -NCT02099214 -NCT02096237 -NCT02099240 -NCT02096289 -NCT02099266 -NCT02096341 -NCT02099292 -NCT02096354 -NCT02099396 -NCT02096406 -NCT02099487 -NCT02096445 -NCT02099539 -NCT02096458 -NCT02099578 -NCT02096510 -NCT02099604 -NCT02096562 -NCT02099721 -NCT02096588 -NCT02099734 -NCT02096614 -NCT02099773 -NCT02096666 -NCT02099864 -NCT02096783 -NCT02099916 -NCT02096835 -NCT02100007 -NCT02097095 -NCT02100150 -NCT02097212 -NCT02100189 -NCT02097225 -NCT02100202 -NCT02097238 -NCT02100254 -NCT02097303 -NCT02100332 -NCT02097368 -NCT02100358 -NCT02097420 -NCT02100371 -NCT02097459 -NCT02100423 -NCT02097615 -NCT02100488 -NCT02097719 -NCT02100657 -NCT02097732 -NCT02100670 -NCT02097810 -NCT02100722 -NCT02097875 -NCT02100813 -NCT02098044 -NCT02100852 -NCT02098109 -NCT02100891 -NCT02098239 -NCT02100930 -NCT02098252 -NCT02106598 -NCT02101008 -NCT02103426 -NCT02101021 -NCT02103387 -NCT02101034 -NCT02103478 -NCT02101164 -NCT02103504 -NCT02101177 -NCT02103530 -NCT02101203 -NCT02103582 -NCT02101242 -NCT02103608 -NCT02101281 -NCT02103946 -NCT02101294 -NCT02104050 -NCT02101320 -NCT02104076 -NCT02101385 -NCT02104180 -NCT02101580 -NCT02104193 -NCT02101593 -NCT02104323 -NCT02101606 -NCT02104362 -NCT02101684 -NCT02104427 -NCT02101736 -NCT02104440 -NCT02101775 -NCT02104492 -NCT02101788 -NCT02104505 -NCT02101853 -NCT02104583 -NCT02101905 -NCT02104609 -NCT02101918 -NCT02104817 -NCT02101931 -NCT02104882 -NCT02101944 -NCT02104895 -NCT02101970 -NCT02104921 -NCT02101983 -NCT02104986 -NCT02102009 -NCT02105090 -NCT02102022 -NCT02105103 -NCT02102035 -NCT02105116 -NCT02102061 -NCT02105168 -NCT02102100 -NCT02105233 -NCT02102165 -NCT02105350 -NCT02102178 -NCT02105441 -NCT02102269 -NCT02105480 -NCT02102438 -NCT02105519 -NCT02102477 -NCT02105545 -NCT02102490 -NCT02105636 -NCT02102542 -NCT02105675 -NCT02102568 -NCT02105714 -NCT02102620 -NCT02105766 -NCT02102646 -NCT02105909 -NCT02102724 -NCT02105948 -NCT02102789 -NCT02105961 -NCT02102880 -NCT02105974 -NCT02102906 -NCT02106091 -NCT02102958 -NCT02106143 -NCT02102984 -NCT02106182 -NCT02103062 -NCT02106312 -NCT02103075 -NCT02106416 -NCT02103088 -NCT02106442 -NCT02103192 -NCT02106455 -NCT02103218 -NCT02106507 -NCT02103244 -NCT02106520 -NCT02103257 -NCT02106546 -NCT02103322 -NCT02106559 -NCT02103335 -NCT02106572 -NCT02103348 -NCT02111850 -NCT02106650 -NCT02109263 -NCT02106676 -NCT02109250 -NCT02106741 -NCT02109289 -NCT02106806 -NCT02109302 -NCT02106819 -NCT02109328 -NCT02106845 -NCT02109341 -NCT02106871 -NCT02109354 -NCT02106884 -NCT02109445 -NCT02106897 -NCT02109614 -NCT02106910 -NCT02109627 -NCT02106988 -NCT02109640 -NCT02107066 -NCT02109653 -NCT02107196 -NCT02109744 -NCT02107235 -NCT02109770 -NCT02107287 -NCT02109861 -NCT02107378 -NCT02109887 -NCT02107391 -NCT02109913 -NCT02107404 -NCT02109939 -NCT02107430 -NCT02109952 -NCT02107443 -NCT02110004 -NCT02107495 -NCT02110069 -NCT02107521 -NCT02110082 -NCT02107638 -NCT02110186 -NCT02107703 -NCT02110225 -NCT02107755 -NCT02110277 -NCT02107898 -NCT02110329 -NCT02107937 -NCT02110355 -NCT02107950 -NCT02110433 -NCT02107963 -NCT02110485 -NCT02108002 -NCT02110563 -NCT02108132 -NCT02110628 -NCT02108145 -NCT02110641 -NCT02108171 -NCT02110706 -NCT02108340 -NCT02110745 -NCT02108392 -NCT02110810 -NCT02108431 -NCT02110914 -NCT02108509 -NCT02110953 -NCT02108522 -NCT02110992 -NCT02108587 -NCT02111005 -NCT02108613 -NCT02111044 -NCT02108652 -NCT02111057 -NCT02108769 -NCT02111187 -NCT02108782 -NCT02111239 -NCT02108821 -NCT02111304 -NCT02108860 -NCT02111356 -NCT02108912 -NCT02111369 -NCT02108925 -NCT02111460 -NCT02108964 -NCT02111538 -NCT02108990 -NCT02111577 -NCT02109016 -NCT02111616 -NCT02109068 -NCT02111668 -NCT02109146 -NCT02111681 -NCT02109159 -NCT02111785 -NCT02109198 -NCT02111824 -NCT02109224 -NCT02111837 -NCT02109237 -NCT02115919 -NCT02111863 -NCT02113891 -NCT02111889 -NCT02113878 -NCT02111941 -NCT02113904 -NCT02112019 -NCT02113917 -NCT02112032 -NCT02113982 -NCT02112045 -NCT02114034 -NCT02112084 -NCT02114099 -NCT02112149 -NCT02114112 -NCT02112162 -NCT02114164 -NCT02112175 -NCT02114203 -NCT02112214 -NCT02114216 -NCT02112240 -NCT02114229 -NCT02112279 -NCT02114359 -NCT02112344 -NCT02114411 -NCT02112370 -NCT02114476 -NCT02112409 -NCT02114489 -NCT02112422 -NCT02114502 -NCT02112461 -NCT02114528 -NCT02112526 -NCT02114606 -NCT02112552 -NCT02114658 -NCT02112565 -NCT02114684 -NCT02112578 -NCT02114710 -NCT02112604 -NCT02114762 -NCT02112617 -NCT02114775 -NCT02112643 -NCT02114827 -NCT02112656 -NCT02114944 -NCT02112682 -NCT02115009 -NCT02112721 -NCT02115035 -NCT02112747 -NCT02115048 -NCT02112799 -NCT02115074 -NCT02112812 -NCT02115100 -NCT02112864 -NCT02115126 -NCT02112890 -NCT02115139 -NCT02112903 -NCT02115152 -NCT02112916 -NCT02115165 -NCT02112929 -NCT02115178 -NCT02113007 -NCT02115204 -NCT02113163 -NCT02115230 -NCT02113241 -NCT02115243 -NCT02113319 -NCT02115269 -NCT02113332 -NCT02115282 -NCT02113358 -NCT02115295 -NCT02113423 -NCT02115334 -NCT02113436 -NCT02115373 -NCT02113514 -NCT02115386 -NCT02113527 -NCT02115464 -NCT02113553 -NCT02115490 -NCT02113618 -NCT02115542 -NCT02113657 -NCT02115594 -NCT02113709 -NCT02115607 -NCT02113774 -NCT02115672 -NCT02113787 -NCT02115802 -NCT02113800 -NCT02115828 -NCT02113813 -NCT02115867 -NCT02113826 -NCT02115906 -NCT02113865 -NCT02121301 -NCT02115958 -NCT02118285 -NCT02115984 -NCT02118233 -NCT02115997 -NCT02118324 -NCT02116101 -NCT02118337 -NCT02116127 -NCT02118532 -NCT02116140 -NCT02118558 -NCT02116218 -NCT02118675 -NCT02116244 -NCT02118727 -NCT02116322 -NCT02118766 -NCT02116361 -NCT02118792 -NCT02116439 -NCT02118805 -NCT02116530 -NCT02119026 -NCT02116569 -NCT02119091 -NCT02116582 -NCT02119286 -NCT02116647 -NCT02119338 -NCT02116673 -NCT02119429 -NCT02116712 -NCT02119468 -NCT02116738 -NCT02119481 -NCT02116764 -NCT02119494 -NCT02116777 -NCT02119559 -NCT02116803 -NCT02119611 -NCT02116829 -NCT02119624 -NCT02116894 -NCT02119637 -NCT02116907 -NCT02119650 -NCT02116920 -NCT02119663 -NCT02116959 -NCT02119676 -NCT02117011 -NCT02119715 -NCT02117024 -NCT02119728 -NCT02117063 -NCT02119754 -NCT02117115 -NCT02119780 -NCT02117167 -NCT02119858 -NCT02117219 -NCT02119871 -NCT02117258 -NCT02119884 -NCT02117284 -NCT02119923 -NCT02117297 -NCT02120027 -NCT02117310 -NCT02120053 -NCT02117336 -NCT02120118 -NCT02117362 -NCT02120222 -NCT02117375 -NCT02120287 -NCT02117401 -NCT02120417 -NCT02117427 -NCT02120456 -NCT02117453 -NCT02120469 -NCT02117466 -NCT02120638 -NCT02117479 -NCT02120651 -NCT02117557 -NCT02120677 -NCT02117635 -NCT02120768 -NCT02117648 -NCT02120807 -NCT02117661 -NCT02120833 -NCT02117674 -NCT02120885 -NCT02117817 -NCT02120898 -NCT02117895 -NCT02120911 -NCT02117908 -NCT02120924 -NCT02117960 -NCT02121028 -NCT02117973 -NCT02121080 -NCT02118064 -NCT02121171 -NCT02118077 -NCT02126527 -NCT02121353 -NCT02124031 -NCT02121366 -NCT02123953 -NCT02121379 -NCT02124044 -NCT02121405 -NCT02124070 -NCT02121418 -NCT02124096 -NCT02121457 -NCT02124109 -NCT02121496 -NCT02124148 -NCT02121548 -NCT02124174 -NCT02121561 -NCT02124239 -NCT02121587 -NCT02124252 -NCT02121600 -NCT02124317 -NCT02121613 -NCT02124356 -NCT02121639 -NCT02124369 -NCT02121691 -NCT02124421 -NCT02121756 -NCT02124551 -NCT02121938 -NCT02124577 -NCT02121990 -NCT02124668 -NCT02122003 -NCT02124707 -NCT02122042 -NCT02124733 -NCT02122081 -NCT02124746 -NCT02122146 -NCT02124772 -NCT02122159 -NCT02124850 -NCT02122172 -NCT02124889 -NCT02122185 -NCT02124902 -NCT02122211 -NCT02124928 -NCT02122419 -NCT02125006 -NCT02122432 -NCT02125058 -NCT02122445 -NCT02125084 -NCT02122523 -NCT02125136 -NCT02122601 -NCT02125175 -NCT02122614 -NCT02125240 -NCT02122640 -NCT02125318 -NCT02122653 -NCT02125344 -NCT02122770 -NCT02125357 -NCT02122783 -NCT02125396 -NCT02122796 -NCT02125409 -NCT02122809 -NCT02125461 -NCT02122822 -NCT02125474 -NCT02122861 -NCT02125513 -NCT02122900 -NCT02125591 -NCT02122913 -NCT02125604 -NCT02123043 -NCT02125669 -NCT02123056 -NCT02125682 -NCT02123147 -NCT02125747 -NCT02123381 -NCT02125760 -NCT02123407 -NCT02125786 -NCT02123498 -NCT02125825 -NCT02123511 -NCT02125929 -NCT02123537 -NCT02126098 -NCT02123641 -NCT02126137 -NCT02123680 -NCT02126176 -NCT02123758 -NCT02126254 -NCT02123823 -NCT02126319 -NCT02123836 -NCT02126449 -NCT02123849 -NCT02126501 -NCT02123888 -NCT02131376 -NCT02126553 -NCT02129218 -NCT02126579 -NCT02129205 -NCT02126631 -NCT02129257 -NCT02126644 -NCT02129309 -NCT02126670 -NCT02129322 -NCT02126683 -NCT02129335 -NCT02126709 -NCT02129348 -NCT02126722 -NCT02129413 -NCT02126774 -NCT02129439 -NCT02126891 -NCT02129452 -NCT02126969 -NCT02129556 -NCT02126982 -NCT02129569 -NCT02126995 -NCT02129582 -NCT02127073 -NCT02129608 -NCT02127151 -NCT02129634 -NCT02127268 -NCT02129647 -NCT02127333 -NCT02129686 -NCT02127372 -NCT02129699 -NCT02127398 -NCT02129712 -NCT02127515 -NCT02129764 -NCT02127554 -NCT02129855 -NCT02127645 -NCT02129933 -NCT02127710 -NCT02130011 -NCT02127814 -NCT02130115 -NCT02127827 -NCT02130128 -NCT02127905 -NCT02130180 -NCT02128061 -NCT02130193 -NCT02128100 -NCT02130245 -NCT02128126 -NCT02130258 -NCT02128152 -NCT02130271 -NCT02128165 -NCT02130284 -NCT02128217 -NCT02130297 -NCT02128230 -NCT02130323 -NCT02128243 -NCT02130427 -NCT02128282 -NCT02130466 -NCT02128373 -NCT02130492 -NCT02128425 -NCT02130505 -NCT02128438 -NCT02130557 -NCT02128490 -NCT02130570 -NCT02128529 -NCT02130687 -NCT02128542 -NCT02130700 -NCT02128646 -NCT02130726 -NCT02128659 -NCT02130752 -NCT02128685 -NCT02130765 -NCT02128698 -NCT02130843 -NCT02128724 -NCT02130869 -NCT02128763 -NCT02130882 -NCT02128776 -NCT02130947 -NCT02128906 -NCT02130973 -NCT02128945 -NCT02131064 -NCT02128958 -NCT02131155 -NCT02129049 -NCT02131207 -NCT02129062 -NCT02131259 -NCT02129075 -NCT02131324 -NCT02129088 -NCT02131350 -NCT02129101 -NCT02136043 -NCT02131441 -NCT02133625 -NCT02131467 -NCT02133612 -NCT02131480 -NCT02133651 -NCT02131493 -NCT02133677 -NCT02131506 -NCT02133703 -NCT02131545 -NCT02133742 -NCT02131558 -NCT02133768 -NCT02131584 -NCT02133781 -NCT02131636 -NCT02133794 -NCT02131649 -NCT02133820 -NCT02131662 -NCT02133885 -NCT02131688 -NCT02133898 -NCT02131701 -NCT02133924 -NCT02131714 -NCT02134015 -NCT02131753 -NCT02134067 -NCT02131766 -NCT02134197 -NCT02131779 -NCT02134223 -NCT02131805 -NCT02134262 -NCT02132000 -NCT02134327 -NCT02132052 -NCT02134340 -NCT02132078 -NCT02134392 -NCT02132117 -NCT02134444 -NCT02132130 -NCT02134457 -NCT02132143 -NCT02134470 -NCT02132208 -NCT02134522 -NCT02132260 -NCT02134535 -NCT02132325 -NCT02134600 -NCT02132364 -NCT02134652 -NCT02132390 -NCT02134704 -NCT02132403 -NCT02134717 -NCT02132468 -NCT02134782 -NCT02132507 -NCT02134886 -NCT02132533 -NCT02134912 -NCT02132585 -NCT02134990 -NCT02132598 -NCT02135042 -NCT02132624 -NCT02135094 -NCT02132637 -NCT02135133 -NCT02132728 -NCT02135159 -NCT02132754 -NCT02135185 -NCT02132845 -NCT02135211 -NCT02132884 -NCT02135276 -NCT02132949 -NCT02135380 -NCT02132975 -NCT02135406 -NCT02132988 -NCT02135419 -NCT02133014 -NCT02135445 -NCT02133027 -NCT02135484 -NCT02133079 -NCT02135510 -NCT02133157 -NCT02135523 -NCT02133183 -NCT02135562 -NCT02133196 -NCT02135601 -NCT02133222 -NCT02135692 -NCT02133235 -NCT02135731 -NCT02133274 -NCT02135822 -NCT02133300 -NCT02135874 -NCT02133417 -NCT02135900 -NCT02133599 -NCT02141802 -NCT02136095 -NCT02138786 -NCT02136121 -NCT02138760 -NCT02136134 -NCT02138890 -NCT02136342 -NCT02138929 -NCT02136355 -NCT02138955 -NCT02136368 -NCT02138981 -NCT02136394 -NCT02139046 -NCT02136459 -NCT02139267 -NCT02136602 -NCT02139358 -NCT02136719 -NCT02139371 -NCT02136758 -NCT02139397 -NCT02136823 -NCT02139579 -NCT02136836 -NCT02139605 -NCT02136849 -NCT02139644 -NCT02136927 -NCT02139683 -NCT02136953 -NCT02139813 -NCT02137044 -NCT02139852 -NCT02137083 -NCT02139904 -NCT02137096 -NCT02139930 -NCT02137135 -NCT02140021 -NCT02137200 -NCT02140034 -NCT02137213 -NCT02140073 -NCT02137252 -NCT02140138 -NCT02137265 -NCT02140164 -NCT02137278 -NCT02140203 -NCT02137291 -NCT02140242 -NCT02137304 -NCT02140320 -NCT02137317 -NCT02140333 -NCT02137343 -NCT02140437 -NCT02137356 -NCT02140476 -NCT02137408 -NCT02140567 -NCT02137460 -NCT02140593 -NCT02137538 -NCT02140606 -NCT02137564 -NCT02140632 -NCT02137577 -NCT02140840 -NCT02137746 -NCT02140892 -NCT02137759 -NCT02140905 -NCT02137785 -NCT02140983 -NCT02137837 -NCT02140996 -NCT02137889 -NCT02141035 -NCT02137928 -NCT02141061 -NCT02137954 -NCT02141100 -NCT02138214 -NCT02141139 -NCT02138292 -NCT02141282 -NCT02138331 -NCT02141295 -NCT02138383 -NCT02141347 -NCT02138422 -NCT02141373 -NCT02138448 -NCT02141451 -NCT02138526 -NCT02141464 -NCT02138539 -NCT02141477 -NCT02138578 -NCT02141490 -NCT02138617 -NCT02141542 -NCT02138630 -NCT02141555 -NCT02138643 -NCT02141659 -NCT02138721 -NCT02141698 -NCT02138734 -NCT02146989 -NCT02141828 -NCT02144753 -NCT02141854 -NCT02144727 -NCT02141906 -NCT02144857 -NCT02141919 -NCT02145026 -NCT02141932 -NCT02145039 -NCT02141971 -NCT02145078 -NCT02142010 -NCT02145130 -NCT02142036 -NCT02145143 -NCT02142049 -NCT02145169 -NCT02142244 -NCT02145208 -NCT02142257 -NCT02145234 -NCT02142322 -NCT02145247 -NCT02142335 -NCT02145286 -NCT02142439 -NCT02145312 -NCT02142491 -NCT02145338 -NCT02142530 -NCT02145390 -NCT02142543 -NCT02145442 -NCT02142608 -NCT02145494 -NCT02142660 -NCT02145559 -NCT02142738 -NCT02145598 -NCT02142751 -NCT02145611 -NCT02142790 -NCT02145637 -NCT02142803 -NCT02145650 -NCT02142829 -NCT02145663 -NCT02142894 -NCT02145715 -NCT02142959 -NCT02145728 -NCT02143050 -NCT02145741 -NCT02143154 -NCT02145754 -NCT02143219 -NCT02145819 -NCT02143388 -NCT02145858 -NCT02143401 -NCT02145871 -NCT02143414 -NCT02145884 -NCT02143466 -NCT02145910 -NCT02143609 -NCT02145949 -NCT02143622 -NCT02145975 -NCT02143635 -NCT02146040 -NCT02143700 -NCT02146053 -NCT02143726 -NCT02146092 -NCT02143804 -NCT02146105 -NCT02143830 -NCT02146118 -NCT02143908 -NCT02146131 -NCT02143986 -NCT02146144 -NCT02144012 -NCT02146222 -NCT02144038 -NCT02146248 -NCT02144077 -NCT02146274 -NCT02144103 -NCT02146287 -NCT02144181 -NCT02146313 -NCT02144194 -NCT02146508 -NCT02144311 -NCT02146521 -NCT02144441 -NCT02146586 -NCT02144493 -NCT02146703 -NCT02144545 -NCT02146755 -NCT02144584 -NCT02146833 -NCT02144623 -NCT02146911 -NCT02144649 -NCT02146924 -NCT02144675 -NCT02153073 -NCT02147028 -NCT02150447 -NCT02147054 -NCT02150408 -NCT02147080 -NCT02150486 -NCT02147158 -NCT02150525 -NCT02147171 -NCT02150564 -NCT02147197 -NCT02150590 -NCT02147210 -NCT02150616 -NCT02147249 -NCT02150629 -NCT02147301 -NCT02150733 -NCT02147366 -NCT02150863 -NCT02147509 -NCT02150928 -NCT02147574 -NCT02150941 -NCT02147639 -NCT02150967 -NCT02147691 -NCT02151006 -NCT02147808 -NCT02151019 -NCT02147821 -NCT02151071 -NCT02147873 -NCT02151084 -NCT02147964 -NCT02151149 -NCT02147990 -NCT02151214 -NCT02148159 -NCT02151357 -NCT02148250 -NCT02151448 -NCT02148276 -NCT02151487 -NCT02148380 -NCT02151552 -NCT02148406 -NCT02151591 -NCT02148549 -NCT02151604 -NCT02148575 -NCT02151721 -NCT02148601 -NCT02151760 -NCT02148874 -NCT02151825 -NCT02148900 -NCT02151864 -NCT02148913 -NCT02151903 -NCT02148926 -NCT02151981 -NCT02149030 -NCT02152059 -NCT02149108 -NCT02152072 -NCT02149121 -NCT02152124 -NCT02149173 -NCT02152137 -NCT02149199 -NCT02152163 -NCT02149225 -NCT02152202 -NCT02149264 -NCT02152254 -NCT02149459 -NCT02152462 -NCT02149485 -NCT02152488 -NCT02149524 -NCT02152553 -NCT02149550 -NCT02152592 -NCT02149576 -NCT02152631 -NCT02149628 -NCT02152644 -NCT02149654 -NCT02152696 -NCT02149771 -NCT02152709 -NCT02149784 -NCT02152735 -NCT02149849 -NCT02152800 -NCT02149862 -NCT02152943 -NCT02149914 -NCT02152956 -NCT02150031 -NCT02152982 -NCT02150083 -NCT02152995 -NCT02150135 -NCT02153008 -NCT02150148 -NCT02153021 -NCT02150213 -NCT02153034 -NCT02150317 -NCT02158195 -NCT02153086 -NCT02156102 -NCT02153229 -NCT02156063 -NCT02153398 -NCT02156232 -NCT02153450 -NCT02156271 -NCT02153567 -NCT02156310 -NCT02153580 -NCT02156362 -NCT02153619 -NCT02156375 -NCT02153645 -NCT02156388 -NCT02153658 -NCT02156557 -NCT02153671 -NCT02156570 -NCT02153840 -NCT02156648 -NCT02153905 -NCT02156726 -NCT02153918 -NCT02156739 -NCT02153957 -NCT02156804 -NCT02153983 -NCT02156843 -NCT02154009 -NCT02156869 -NCT02154061 -NCT02156947 -NCT02154087 -NCT02156999 -NCT02154100 -NCT02157051 -NCT02154152 -NCT02157103 -NCT02154165 -NCT02157116 -NCT02154334 -NCT02157155 -NCT02154386 -NCT02157168 -NCT02154399 -NCT02157181 -NCT02154451 -NCT02157194 -NCT02154464 -NCT02157207 -NCT02154490 -NCT02157246 -NCT02154529 -NCT02157259 -NCT02154568 -NCT02157324 -NCT02154620 -NCT02157363 -NCT02154646 -NCT02157441 -NCT02154724 -NCT02157454 -NCT02154737 -NCT02157506 -NCT02154776 -NCT02157519 -NCT02154880 -NCT02157545 -NCT02154958 -NCT02157558 -NCT02155075 -NCT02157584 -NCT02155088 -NCT02157610 -NCT02155153 -NCT02157623 -NCT02155244 -NCT02157636 -NCT02155257 -NCT02157766 -NCT02155283 -NCT02157792 -NCT02155322 -NCT02157831 -NCT02155374 -NCT02157857 -NCT02155465 -NCT02157883 -NCT02155582 -NCT02157896 -NCT02155621 -NCT02157935 -NCT02155634 -NCT02157948 -NCT02155647 -NCT02158000 -NCT02155777 -NCT02158013 -NCT02155790 -NCT02158026 -NCT02155894 -NCT02158039 -NCT02155920 -NCT02158052 -NCT02155933 -NCT02158091 -NCT02155985 -NCT02158182 -NCT02156050 -NCT02164097 -NCT02158208 -NCT02161354 -NCT02158234 -NCT02161029 -NCT02158338 -NCT02161367 -NCT02158351 -NCT02161380 -NCT02158416 -NCT02161419 -NCT02158507 -NCT02161679 -NCT02158520 -NCT02161692 -NCT02158572 -NCT02161822 -NCT02158585 -NCT02161900 -NCT02158650 -NCT02161952 -NCT02158702 -NCT02161991 -NCT02158780 -NCT02162134 -NCT02158858 -NCT02162160 -NCT02158975 -NCT02162316 -NCT02158988 -NCT02162329 -NCT02159066 -NCT02162342 -NCT02159079 -NCT02162381 -NCT02159157 -NCT02162420 -NCT02159248 -NCT02162446 -NCT02159287 -NCT02162524 -NCT02159339 -NCT02162537 -NCT02159365 -NCT02162563 -NCT02159469 -NCT02162589 -NCT02159482 -NCT02162667 -NCT02159495 -NCT02162719 -NCT02159508 -NCT02162732 -NCT02159573 -NCT02162758 -NCT02159612 -NCT02162771 -NCT02159625 -NCT02162836 -NCT02159638 -NCT02162862 -NCT02159690 -NCT02162888 -NCT02159703 -NCT02162914 -NCT02159716 -NCT02163031 -NCT02159755 -NCT02163044 -NCT02159794 -NCT02163057 -NCT02159820 -NCT02163083 -NCT02159872 -NCT02163096 -NCT02159924 -NCT02163187 -NCT02159950 -NCT02163226 -NCT02159963 -NCT02163252 -NCT02159989 -NCT02163291 -NCT02160015 -NCT02163304 -NCT02160041 -NCT02163317 -NCT02160080 -NCT02163356 -NCT02160106 -NCT02163577 -NCT02160132 -NCT02163668 -NCT02160288 -NCT02163694 -NCT02160301 -NCT02163733 -NCT02160353 -NCT02163759 -NCT02160535 -NCT02163785 -NCT02160600 -NCT02163863 -NCT02160626 -NCT02163954 -NCT02160678 -NCT02163993 -NCT02160717 -NCT02164006 -NCT02160730 -NCT02164019 -NCT02160951 -NCT02170025 -NCT02164136 -NCT02167256 -NCT02164149 -NCT02167217 -NCT02164240 -NCT02167321 -NCT02164383 -NCT02167334 -NCT02164448 -NCT02167360 -NCT02164461 -NCT02167412 -NCT02164500 -NCT02167490 -NCT02164513 -NCT02167568 -NCT02164643 -NCT02167581 -NCT02164838 -NCT02167594 -NCT02164916 -NCT02167633 -NCT02165020 -NCT02167646 -NCT02165176 -NCT02167698 -NCT02165267 -NCT02167711 -NCT02165293 -NCT02167737 -NCT02165384 -NCT02167854 -NCT02165436 -NCT02167906 -NCT02165462 -NCT02167919 -NCT02165514 -NCT02167958 -NCT02165527 -NCT02168036 -NCT02165566 -NCT02168062 -NCT02165605 -NCT02168075 -NCT02165696 -NCT02168088 -NCT02165761 -NCT02168101 -NCT02165800 -NCT02168114 -NCT02165826 -NCT02168140 -NCT02165839 -NCT02168153 -NCT02165852 -NCT02168179 -NCT02165865 -NCT02168205 -NCT02165917 -NCT02168270 -NCT02165995 -NCT02168296 -NCT02166190 -NCT02168387 -NCT02166242 -NCT02168426 -NCT02166255 -NCT02168608 -NCT02166320 -NCT02168660 -NCT02166333 -NCT02168673 -NCT02166372 -NCT02168725 -NCT02166411 -NCT02168777 -NCT02166463 -NCT02168842 -NCT02166476 -NCT02168907 -NCT02166619 -NCT02169063 -NCT02166658 -NCT02169180 -NCT02166697 -NCT02169219 -NCT02166723 -NCT02169271 -NCT02166788 -NCT02169284 -NCT02166801 -NCT02169323 -NCT02166814 -NCT02169388 -NCT02166892 -NCT02169505 -NCT02166905 -NCT02169531 -NCT02166944 -NCT02169609 -NCT02166970 -NCT02169765 -NCT02166983 -NCT02169791 -NCT02166996 -NCT02169830 -NCT02167009 -NCT02169856 -NCT02167087 -NCT02169908 -NCT02167204 -NCT02177188 -NCT02170064 -NCT02173990 -NCT02170077 -NCT02173964 -NCT02170090 -NCT02174107 -NCT02170142 -NCT02174172 -NCT02170220 -NCT02174445 -NCT02170272 -NCT02174458 -NCT02170350 -NCT02174471 -NCT02170389 -NCT02174549 -NCT02170402 -NCT02174562 -NCT02170415 -NCT02174575 -NCT02170441 -NCT02174731 -NCT02170727 -NCT02174770 -NCT02170740 -NCT02174783 -NCT02170831 -NCT02174874 -NCT02170844 -NCT02174887 -NCT02171117 -NCT02174978 -NCT02171130 -NCT02175004 -NCT02171221 -NCT02175017 -NCT02171260 -NCT02175095 -NCT02171312 -NCT02175212 -NCT02171325 -NCT02175316 -NCT02171403 -NCT02175381 -NCT02171429 -NCT02175446 -NCT02171637 -NCT02175498 -NCT02171650 -NCT02175511 -NCT02171663 -NCT02175641 -NCT02171676 -NCT02175654 -NCT02171702 -NCT02175745 -NCT02171728 -NCT02175758 -NCT02171741 -NCT02175966 -NCT02172027 -NCT02176031 -NCT02172105 -NCT02176070 -NCT02172300 -NCT02176083 -NCT02172326 -NCT02176161 -NCT02172339 -NCT02176213 -NCT02172651 -NCT02176304 -NCT02172690 -NCT02176369 -NCT02172833 -NCT02176408 -NCT02172846 -NCT02176460 -NCT02172872 -NCT02176525 -NCT02172911 -NCT02176564 -NCT02172950 -NCT02176655 -NCT02172976 -NCT02176707 -NCT02173093 -NCT02176720 -NCT02173145 -NCT02176746 -NCT02173262 -NCT02176785 -NCT02173470 -NCT02176863 -NCT02173522 -NCT02176902 -NCT02173587 -NCT02176941 -NCT02173678 -NCT02176967 -NCT02173691 -NCT02177045 -NCT02173704 -NCT02177084 -NCT02173756 -NCT02177136 -NCT02173808 -NCT02177162 -NCT02173925 -NCT02177175 -NCT02173951 -NCT02183246 -NCT02177214 -NCT02180204 -NCT02177292 -NCT02180126 -NCT02177331 -NCT02180217 -NCT02177396 -NCT02180269 -NCT02177461 -NCT02180282 -NCT02177513 -NCT02180412 -NCT02177526 -NCT02180555 -NCT02177552 -NCT02180568 -NCT02177578 -NCT02180698 -NCT02177643 -NCT02180711 -NCT02177669 -NCT02180789 -NCT02177682 -NCT02180867 -NCT02177695 -NCT02180919 -NCT02177773 -NCT02181075 -NCT02177838 -NCT02181101 -NCT02178072 -NCT02181140 -NCT02178098 -NCT02181166 -NCT02178150 -NCT02181192 -NCT02178163 -NCT02181218 -NCT02178241 -NCT02181257 -NCT02178280 -NCT02181335 -NCT02178319 -NCT02181413 -NCT02178345 -NCT02181465 -NCT02178358 -NCT02181478 -NCT02178436 -NCT02181556 -NCT02178449 -NCT02181634 -NCT02178514 -NCT02181660 -NCT02178579 -NCT02181686 -NCT02178644 -NCT02181699 -NCT02178670 -NCT02181738 -NCT02178709 -NCT02181751 -NCT02178722 -NCT02181829 -NCT02178761 -NCT02181933 -NCT02178774 -NCT02182050 -NCT02178800 -NCT02182063 -NCT02178891 -NCT02182089 -NCT02178956 -NCT02182102 -NCT02179034 -NCT02182128 -NCT02179073 -NCT02182141 -NCT02179086 -NCT02182206 -NCT02179125 -NCT02182219 -NCT02179177 -NCT02182232 -NCT02179294 -NCT02182245 -NCT02179333 -NCT02182440 -NCT02179359 -NCT02182596 -NCT02179489 -NCT02182622 -NCT02179515 -NCT02182687 -NCT02179528 -NCT02182778 -NCT02179567 -NCT02182804 -NCT02179658 -NCT02182830 -NCT02179671 -NCT02182973 -NCT02179762 -NCT02183116 -NCT02179788 -NCT02183129 -NCT02179918 -NCT02183155 -NCT02179970 -NCT02183168 -NCT02180061 -NCT02189603 -NCT02183259 -NCT02186860 -NCT02183311 -NCT02186847 -NCT02183519 -NCT02186938 -NCT02183688 -NCT02187003 -NCT02183753 -NCT02187029 -NCT02183766 -NCT02187081 -NCT02183805 -NCT02187133 -NCT02183831 -NCT02187276 -NCT02183870 -NCT02187289 -NCT02183883 -NCT02187302 -NCT02183948 -NCT02187315 -NCT02183961 -NCT02187341 -NCT02183974 -NCT02187367 -NCT02184156 -NCT02187393 -NCT02184182 -NCT02187549 -NCT02184195 -NCT02187601 -NCT02184299 -NCT02187627 -NCT02184533 -NCT02187640 -NCT02184559 -NCT02187718 -NCT02184663 -NCT02187744 -NCT02184715 -NCT02187783 -NCT02184767 -NCT02187822 -NCT02184897 -NCT02187848 -NCT02184975 -NCT02187861 -NCT02185092 -NCT02187991 -NCT02185105 -NCT02188147 -NCT02185170 -NCT02188264 -NCT02185261 -NCT02188329 -NCT02185313 -NCT02188342 -NCT02185352 -NCT02188368 -NCT02185443 -NCT02188446 -NCT02185456 -NCT02188537 -NCT02185495 -NCT02188550 -NCT02185690 -NCT02188563 -NCT02185768 -NCT02188589 -NCT02185781 -NCT02188615 -NCT02185807 -NCT02188628 -NCT02185820 -NCT02188667 -NCT02185859 -NCT02188745 -NCT02185937 -NCT02188784 -NCT02185963 -NCT02188901 -NCT02186015 -NCT02188927 -NCT02186028 -NCT02189005 -NCT02186106 -NCT02189083 -NCT02186119 -NCT02189109 -NCT02186145 -NCT02189148 -NCT02186171 -NCT02189174 -NCT02186301 -NCT02189226 -NCT02186405 -NCT02189278 -NCT02186470 -NCT02189291 -NCT02186509 -NCT02189343 -NCT02186574 -NCT02189421 -NCT02186639 -NCT02189434 -NCT02186678 -NCT02189473 -NCT02186821 -NCT02189551 -NCT02186834 -NCT02195141 -NCT02189629 -NCT02192606 -NCT02189668 -NCT02192567 -NCT02189694 -NCT02192671 -NCT02189707 -NCT02192697 -NCT02189798 -NCT02192775 -NCT02189824 -NCT02192788 -NCT02189902 -NCT02192905 -NCT02189967 -NCT02192918 -NCT02190006 -NCT02193061 -NCT02190097 -NCT02193152 -NCT02190110 -NCT02193282 -NCT02190149 -NCT02193321 -NCT02190214 -NCT02193347 -NCT02190227 -NCT02193399 -NCT02190266 -NCT02193451 -NCT02190279 -NCT02193464 -NCT02190448 -NCT02193490 -NCT02190539 -NCT02193503 -NCT02190604 -NCT02193568 -NCT02190669 -NCT02193581 -NCT02190695 -NCT02193594 -NCT02190747 -NCT02193633 -NCT02190786 -NCT02193672 -NCT02190812 -NCT02193685 -NCT02190838 -NCT02193815 -NCT02190916 -NCT02193880 -NCT02190929 -NCT02193958 -NCT02190942 -NCT02194049 -NCT02190981 -NCT02194127 -NCT02190994 -NCT02194140 -NCT02191059 -NCT02194166 -NCT02191267 -NCT02194205 -NCT02191475 -NCT02194231 -NCT02191488 -NCT02194348 -NCT02191566 -NCT02194361 -NCT02191761 -NCT02194374 -NCT02191839 -NCT02194387 -NCT02191878 -NCT02194413 -NCT02191891 -NCT02194426 -NCT02191930 -NCT02194452 -NCT02191969 -NCT02194556 -NCT02191982 -NCT02194647 -NCT02192021 -NCT02194738 -NCT02192034 -NCT02194751 -NCT02192125 -NCT02194816 -NCT02192138 -NCT02194829 -NCT02192190 -NCT02194842 -NCT02192216 -NCT02194894 -NCT02192229 -NCT02194972 -NCT02192242 -NCT02194998 -NCT02192333 -NCT02195011 -NCT02192346 -NCT02195063 -NCT02192359 -NCT02195076 -NCT02192411 -NCT02195089 -NCT02192450 -NCT02195115 -NCT02192541 -NCT02200731 -NCT02195180 -NCT02198040 -NCT02195232 -NCT02198001 -NCT02195336 -NCT02198131 -NCT02195375 -NCT02198183 -NCT02195453 -NCT02198235 -NCT02195479 -NCT02198248 -NCT02195596 -NCT02198274 -NCT02195635 -NCT02198339 -NCT02195752 -NCT02198469 -NCT02195791 -NCT02198482 -NCT02195960 -NCT02198651 -NCT02195973 -NCT02198677 -NCT02195986 -NCT02198690 -NCT02196012 -NCT02198742 -NCT02196025 -NCT02198755 -NCT02196064 -NCT02198820 -NCT02196077 -NCT02198833 -NCT02196129 -NCT02198859 -NCT02196168 -NCT02198911 -NCT02196181 -NCT02199002 -NCT02196207 -NCT02199119 -NCT02196220 -NCT02199171 -NCT02196311 -NCT02199184 -NCT02196337 -NCT02199197 -NCT02196467 -NCT02199223 -NCT02196493 -NCT02199236 -NCT02196662 -NCT02199262 -NCT02196688 -NCT02199314 -NCT02196727 -NCT02199418 -NCT02196844 -NCT02199483 -NCT02196857 -NCT02199496 -NCT02196961 -NCT02199587 -NCT02196987 -NCT02199665 -NCT02197000 -NCT02199717 -NCT02197026 -NCT02199795 -NCT02197169 -NCT02199886 -NCT02197208 -NCT02199912 -NCT02197221 -NCT02199990 -NCT02197234 -NCT02200042 -NCT02197247 -NCT02200055 -NCT02197299 -NCT02200081 -NCT02197351 -NCT02200107 -NCT02197572 -NCT02200172 -NCT02197585 -NCT02200263 -NCT02197611 -NCT02200276 -NCT02197637 -NCT02200302 -NCT02197676 -NCT02200315 -NCT02197702 -NCT02200328 -NCT02197780 -NCT02200354 -NCT02197832 -NCT02200367 -NCT02197871 -NCT02200380 -NCT02197897 -NCT02200484 -NCT02197923 -NCT02200562 -NCT02197936 -NCT02200614 -NCT02197962 -NCT02200705 -NCT02197988 -NCT02205762 -NCT02200757 -NCT02203643 -NCT02200796 -NCT02203604 -NCT02200809 -NCT02203695 -NCT02200848 -NCT02203721 -NCT02200887 -NCT02203760 -NCT02200978 -NCT02203773 -NCT02200991 -NCT02203825 -NCT02201147 -NCT02203864 -NCT02201212 -NCT02203903 -NCT02201329 -NCT02204020 -NCT02201355 -NCT02204033 -NCT02201381 -NCT02204046 -NCT02201420 -NCT02204059 -NCT02201459 -NCT02204072 -NCT02201719 -NCT02204085 -NCT02201732 -NCT02204098 -NCT02201797 -NCT02204124 -NCT02201823 -NCT02204150 -NCT02201862 -NCT02204163 -NCT02201966 -NCT02204189 -NCT02201992 -NCT02204241 -NCT02202044 -NCT02204254 -NCT02202096 -NCT02204306 -NCT02202109 -NCT02204332 -NCT02202200 -NCT02204345 -NCT02202252 -NCT02204371 -NCT02202317 -NCT02204423 -NCT02202382 -NCT02204462 -NCT02202395 -NCT02204553 -NCT02202408 -NCT02204579 -NCT02202447 -NCT02204618 -NCT02202512 -NCT02204631 -NCT02202538 -NCT02204722 -NCT02202564 -NCT02204735 -NCT02202746 -NCT02204748 -NCT02202759 -NCT02204761 -NCT02202772 -NCT02204774 -NCT02202785 -NCT02204826 -NCT02202902 -NCT02204943 -NCT02202928 -NCT02204969 -NCT02202980 -NCT02204982 -NCT02202993 -NCT02205008 -NCT02203045 -NCT02205047 -NCT02203058 -NCT02205125 -NCT02203162 -NCT02205281 -NCT02203188 -NCT02205307 -NCT02203227 -NCT02205333 -NCT02203240 -NCT02205346 -NCT02203253 -NCT02205385 -NCT02203305 -NCT02205398 -NCT02203318 -NCT02205463 -NCT02203357 -NCT02205515 -NCT02203513 -NCT02205541 -NCT02203526 -NCT02205554 -NCT02203552 -NCT02205736 -NCT02203565 -NCT02212015 -NCT02205801 -NCT02208544 -NCT02205853 -NCT02208401 -NCT02206048 -NCT02208583 -NCT02206061 -NCT02208804 -NCT02206100 -NCT02208843 -NCT02206191 -NCT02208895 -NCT02206230 -NCT02208947 -NCT02206243 -NCT02209259 -NCT02206256 -NCT02209324 -NCT02206308 -NCT02209376 -NCT02206321 -NCT02209415 -NCT02206334 -NCT02209428 -NCT02206360 -NCT02209519 -NCT02206373 -NCT02209532 -NCT02206425 -NCT02209636 -NCT02206503 -NCT02209688 -NCT02206685 -NCT02209701 -NCT02206724 -NCT02209727 -NCT02206763 -NCT02209935 -NCT02206919 -NCT02209948 -NCT02206984 -NCT02210000 -NCT02207010 -NCT02210039 -NCT02207062 -NCT02210065 -NCT02207114 -NCT02210078 -NCT02207179 -NCT02210104 -NCT02207231 -NCT02210117 -NCT02207309 -NCT02210182 -NCT02207335 -NCT02210260 -NCT02207361 -NCT02210364 -NCT02207400 -NCT02210546 -NCT02207439 -NCT02210559 -NCT02207465 -NCT02210637 -NCT02207478 -NCT02210663 -NCT02207491 -NCT02210689 -NCT02207504 -NCT02210715 -NCT02207530 -NCT02210741 -NCT02207543 -NCT02210858 -NCT02207556 -NCT02210884 -NCT02207595 -NCT02210923 -NCT02207647 -NCT02210975 -NCT02207764 -NCT02211014 -NCT02207842 -NCT02211027 -NCT02207894 -NCT02211053 -NCT02207907 -NCT02211105 -NCT02207946 -NCT02211131 -NCT02207959 -NCT02211196 -NCT02207985 -NCT02211313 -NCT02207998 -NCT02211404 -NCT02208024 -NCT02211443 -NCT02208037 -NCT02211755 -NCT02208050 -NCT02211768 -NCT02208128 -NCT02211833 -NCT02208154 -NCT02211859 -NCT02208323 -NCT02211872 -NCT02208362 -NCT02211898 -NCT02208375 -NCT02218502 -NCT02212028 -NCT02215577 -NCT02212054 -NCT02215551 -NCT02212197 -NCT02215629 -NCT02212548 -NCT02215707 -NCT02212561 -NCT02215720 -NCT02212574 -NCT02215837 -NCT02212639 -NCT02215876 -NCT02212652 -NCT02215889 -NCT02212678 -NCT02215967 -NCT02212717 -NCT02215980 -NCT02212730 -NCT02216071 -NCT02212860 -NCT02216084 -NCT02212886 -NCT02216123 -NCT02213042 -NCT02216149 -NCT02213094 -NCT02216162 -NCT02213107 -NCT02216279 -NCT02213120 -NCT02216292 -NCT02213133 -NCT02216344 -NCT02213263 -NCT02216409 -NCT02213289 -NCT02216422 -NCT02213341 -NCT02216435 -NCT02213354 -NCT02216487 -NCT02213419 -NCT02216513 -NCT02213432 -NCT02216552 -NCT02213484 -NCT02216578 -NCT02213497 -NCT02216604 -NCT02213653 -NCT02216617 -NCT02213692 -NCT02216669 -NCT02213744 -NCT02216773 -NCT02213757 -NCT02216786 -NCT02213861 -NCT02216799 -NCT02213913 -NCT02216890 -NCT02213926 -NCT02216916 -NCT02213991 -NCT02216994 -NCT02214004 -NCT02217020 -NCT02214147 -NCT02217033 -NCT02214186 -NCT02217163 -NCT02214212 -NCT02217202 -NCT02214238 -NCT02217228 -NCT02214277 -NCT02217358 -NCT02214290 -NCT02217423 -NCT02214368 -NCT02217540 -NCT02214381 -NCT02217566 -NCT02214407 -NCT02217631 -NCT02214602 -NCT02217709 -NCT02214745 -NCT02217852 -NCT02214771 -NCT02217943 -NCT02214914 -NCT02217956 -NCT02215044 -NCT02218047 -NCT02215096 -NCT02218099 -NCT02215161 -NCT02218164 -NCT02215265 -NCT02218242 -NCT02215356 -NCT02218268 -NCT02215395 -NCT02218372 -NCT02215447 -NCT02218398 -NCT02215512 -NCT02224209 -NCT02218554 -NCT02221713 -NCT02218580 -NCT02221700 -NCT02218606 -NCT02221739 -NCT02218762 -NCT02221778 -NCT02218827 -NCT02221882 -NCT02218879 -NCT02221895 -NCT02218931 -NCT02221908 -NCT02218957 -NCT02221921 -NCT02219074 -NCT02221947 -NCT02219113 -NCT02221960 -NCT02219126 -NCT02221973 -NCT02219178 -NCT02221986 -NCT02219204 -NCT02221999 -NCT02219360 -NCT02222155 -NCT02219503 -NCT02222246 -NCT02219529 -NCT02222259 -NCT02219555 -NCT02222272 -NCT02219698 -NCT02222311 -NCT02219711 -NCT02222337 -NCT02219724 -NCT02222363 -NCT02219737 -NCT02222545 -NCT02219763 -NCT02222558 -NCT02219789 -NCT02222623 -NCT02219815 -NCT02222688 -NCT02219828 -NCT02222714 -NCT02219854 -NCT02222740 -NCT02219893 -NCT02222844 -NCT02219997 -NCT02222922 -NCT02220049 -NCT02222948 -NCT02220062 -NCT02223039 -NCT02220088 -NCT02223052 -NCT02220127 -NCT02223078 -NCT02220231 -NCT02223091 -NCT02220270 -NCT02223208 -NCT02220374 -NCT02223221 -NCT02220491 -NCT02223247 -NCT02220517 -NCT02223286 -NCT02220543 -NCT02223299 -NCT02220556 -NCT02223312 -NCT02220608 -NCT02223325 -NCT02220699 -NCT02223364 -NCT02220829 -NCT02223377 -NCT02220842 -NCT02223546 -NCT02220855 -NCT02223572 -NCT02220894 -NCT02223598 -NCT02220972 -NCT02223611 -NCT02220985 -NCT02223676 -NCT02221076 -NCT02223715 -NCT02221141 -NCT02223754 -NCT02221245 -NCT02223819 -NCT02221310 -NCT02223832 -NCT02221427 -NCT02223884 -NCT02221479 -NCT02223936 -NCT02221492 -NCT02223975 -NCT02221505 -NCT02224014 -NCT02221648 -NCT02230553 -NCT02224482 -NCT02227823 -NCT02224547 -NCT02227784 -NCT02224586 -NCT02227888 -NCT02224599 -NCT02227901 -NCT02224664 -NCT02227914 -NCT02224677 -NCT02227940 -NCT02224729 -NCT02227953 -NCT02224781 -NCT02228057 -NCT02224807 -NCT02228096 -NCT02225002 -NCT02228174 -NCT02225015 -NCT02228200 -NCT02225093 -NCT02228239 -NCT02225106 -NCT02228265 -NCT02225119 -NCT02228330 -NCT02225132 -NCT02228343 -NCT02225197 -NCT02228369 -NCT02225223 -NCT02228395 -NCT02225262 -NCT02228473 -NCT02225275 -NCT02228512 -NCT02225366 -NCT02228525 -NCT02225405 -NCT02228681 -NCT02225444 -NCT02228772 -NCT02225470 -NCT02228785 -NCT02225483 -NCT02228811 -NCT02225496 -NCT02228837 -NCT02225509 -NCT02228889 -NCT02225574 -NCT02228902 -NCT02225652 -NCT02229058 -NCT02225704 -NCT02229071 -NCT02225795 -NCT02229084 -NCT02225834 -NCT02229136 -NCT02225925 -NCT02229149 -NCT02226107 -NCT02229266 -NCT02226276 -NCT02229370 -NCT02226289 -NCT02229422 -NCT02226380 -NCT02229500 -NCT02226471 -NCT02229539 -NCT02226484 -NCT02229656 -NCT02226497 -NCT02229682 -NCT02226692 -NCT02229734 -NCT02226731 -NCT02229747 -NCT02226757 -NCT02229799 -NCT02226861 -NCT02229812 -NCT02226939 -NCT02229890 -NCT02226965 -NCT02229955 -NCT02227082 -NCT02229981 -NCT02227108 -NCT02229994 -NCT02227199 -NCT02230020 -NCT02227251 -NCT02230176 -NCT02227433 -NCT02230306 -NCT02227537 -NCT02230319 -NCT02227576 -NCT02230397 -NCT02227654 -NCT02230410 -NCT02227667 -NCT02230462 -NCT02227680 -NCT02230475 -NCT02227732 -NCT02236572 -NCT02230631 -NCT02233712 -NCT02230722 -NCT02233608 -NCT02230800 -NCT02233725 -NCT02230813 -NCT02233868 -NCT02230917 -NCT02233985 -NCT02230943 -NCT02233998 -NCT02231047 -NCT02234037 -NCT02231086 -NCT02234050 -NCT02231112 -NCT02234115 -NCT02231164 -NCT02234154 -NCT02231203 -NCT02234180 -NCT02231229 -NCT02234206 -NCT02231294 -NCT02234219 -NCT02231320 -NCT02234284 -NCT02231385 -NCT02234297 -NCT02231424 -NCT02234310 -NCT02231593 -NCT02234388 -NCT02231606 -NCT02234453 -NCT02231619 -NCT02234466 -NCT02231658 -NCT02234479 -NCT02231723 -NCT02234596 -NCT02231749 -NCT02234661 -NCT02231762 -NCT02234921 -NCT02231775 -NCT02234986 -NCT02231853 -NCT02235025 -NCT02231879 -NCT02235051 -NCT02232074 -NCT02235129 -NCT02232126 -NCT02235142 -NCT02232152 -NCT02235207 -NCT02232178 -NCT02235233 -NCT02232243 -NCT02235246 -NCT02232386 -NCT02235311 -NCT02232438 -NCT02235324 -NCT02232490 -NCT02235402 -NCT02232516 -NCT02235428 -NCT02232620 -NCT02235493 -NCT02232633 -NCT02235506 -NCT02232646 -NCT02235519 -NCT02232672 -NCT02235571 -NCT02232685 -NCT02235623 -NCT02232724 -NCT02235662 -NCT02232737 -NCT02235688 -NCT02232893 -NCT02235701 -NCT02232906 -NCT02235740 -NCT02232932 -NCT02235818 -NCT02232945 -NCT02235974 -NCT02233049 -NCT02235987 -NCT02233205 -NCT02236000 -NCT02233231 -NCT02236013 -NCT02233257 -NCT02236078 -NCT02233322 -NCT02236195 -NCT02233335 -NCT02236273 -NCT02233374 -NCT02236299 -NCT02233387 -NCT02236442 -NCT02233543 -NCT02236546 -NCT02233569 -NCT02242526 -NCT02236611 -NCT02239900 -NCT02236689 -NCT02239861 -NCT02236806 -NCT02239952 -NCT02236871 -NCT02239991 -NCT02236884 -NCT02240017 -NCT02236910 -NCT02240212 -NCT02236936 -NCT02240238 -NCT02237092 -NCT02240251 -NCT02237157 -NCT02240381 -NCT02237183 -NCT02240407 -NCT02237196 -NCT02240433 -NCT02237209 -NCT02240472 -NCT02237248 -NCT02240498 -NCT02237261 -NCT02240524 -NCT02237326 -NCT02240537 -NCT02237391 -NCT02240550 -NCT02237547 -NCT02240563 -NCT02237612 -NCT02240706 -NCT02237625 -NCT02240719 -NCT02237638 -NCT02240758 -NCT02237690 -NCT02240771 -NCT02237729 -NCT02240836 -NCT02237755 -NCT02240888 -NCT02237846 -NCT02240966 -NCT02237859 -NCT02241044 -NCT02237924 -NCT02241083 -NCT02237937 -NCT02241109 -NCT02238184 -NCT02241122 -NCT02238223 -NCT02241161 -NCT02238288 -NCT02241187 -NCT02238418 -NCT02241278 -NCT02238496 -NCT02241356 -NCT02238509 -NCT02241369 -NCT02238522 -NCT02241434 -NCT02238587 -NCT02241499 -NCT02238613 -NCT02241551 -NCT02238626 -NCT02241668 -NCT02238704 -NCT02241681 -NCT02238808 -NCT02241707 -NCT02238847 -NCT02241720 -NCT02238873 -NCT02241876 -NCT02238886 -NCT02241928 -NCT02238912 -NCT02241954 -NCT02238925 -NCT02242045 -NCT02238938 -NCT02242058 -NCT02238951 -NCT02242084 -NCT02239016 -NCT02242097 -NCT02239185 -NCT02242123 -NCT02239224 -NCT02242175 -NCT02239289 -NCT02242227 -NCT02239315 -NCT02242266 -NCT02239536 -NCT02242292 -NCT02239601 -NCT02242305 -NCT02239666 -NCT02242409 -NCT02239679 -NCT02242448 -NCT02239705 -NCT02248597 -NCT02242617 -NCT02245737 -NCT02242708 -NCT02245555 -NCT02242747 -NCT02245828 -NCT02242773 -NCT02245854 -NCT02242786 -NCT02245867 -NCT02242812 -NCT02245919 -NCT02242929 -NCT02245971 -NCT02242942 -NCT02245997 -NCT02243007 -NCT02246023 -NCT02243059 -NCT02246049 -NCT02243124 -NCT02246127 -NCT02243163 -NCT02246205 -NCT02243228 -NCT02246231 -NCT02243280 -NCT02246244 -NCT02243293 -NCT02246270 -NCT02243358 -NCT02246322 -NCT02243371 -NCT02246400 -NCT02243384 -NCT02246439 -NCT02243436 -NCT02246621 -NCT02243488 -NCT02246634 -NCT02243501 -NCT02246673 -NCT02243540 -NCT02246699 -NCT02243579 -NCT02246894 -NCT02243605 -NCT02246907 -NCT02243618 -NCT02246946 -NCT02243657 -NCT02247011 -NCT02243735 -NCT02247076 -NCT02243748 -NCT02247180 -NCT02243917 -NCT02247232 -NCT02244021 -NCT02247336 -NCT02244060 -NCT02247349 -NCT02244125 -NCT02247375 -NCT02244138 -NCT02247401 -NCT02244164 -NCT02247453 -NCT02244242 -NCT02247544 -NCT02244255 -NCT02247609 -NCT02244268 -NCT02247635 -NCT02244281 -NCT02247726 -NCT02244294 -NCT02247843 -NCT02244320 -NCT02247869 -NCT02244411 -NCT02247960 -NCT02244463 -NCT02247973 -NCT02244489 -NCT02248012 -NCT02244502 -NCT02248038 -NCT02244580 -NCT02248090 -NCT02244593 -NCT02248194 -NCT02244632 -NCT02248233 -NCT02244658 -NCT02248298 -NCT02244749 -NCT02248350 -NCT02244957 -NCT02248389 -NCT02245139 -NCT02248402 -NCT02245204 -NCT02248428 -NCT02245217 -NCT02248519 -NCT02245295 -NCT02248571 -NCT02245490 -NCT02248584 -NCT02245529 -NCT02253901 -NCT02248688 -NCT02251327 -NCT02248753 -NCT02251210 -NCT02248805 -NCT02251379 -NCT02248831 -NCT02251392 -NCT02248909 -NCT02251548 -NCT02249013 -NCT02251574 -NCT02249052 -NCT02251600 -NCT02249065 -NCT02251639 -NCT02249091 -NCT02251665 -NCT02249104 -NCT02251730 -NCT02249156 -NCT02251756 -NCT02249182 -NCT02251795 -NCT02249195 -NCT02251912 -NCT02249208 -NCT02251938 -NCT02249273 -NCT02251951 -NCT02249312 -NCT02251977 -NCT02249429 -NCT02252042 -NCT02249494 -NCT02252107 -NCT02249520 -NCT02252146 -NCT02249546 -NCT02252172 -NCT02249572 -NCT02252185 -NCT02249624 -NCT02252211 -NCT02249637 -NCT02252250 -NCT02249650 -NCT02252263 -NCT02249702 -NCT02252367 -NCT02249767 -NCT02252393 -NCT02249858 -NCT02252445 -NCT02249949 -NCT02252484 -NCT02249975 -NCT02252549 -NCT02249988 -NCT02252640 -NCT02250014 -NCT02252666 -NCT02250053 -NCT02252679 -NCT02250118 -NCT02252796 -NCT02250157 -NCT02252874 -NCT02250170 -NCT02252887 -NCT02250196 -NCT02252913 -NCT02250209 -NCT02252978 -NCT02250222 -NCT02252991 -NCT02250313 -NCT02253095 -NCT02250326 -NCT02253134 -NCT02250352 -NCT02253212 -NCT02250378 -NCT02253238 -NCT02250430 -NCT02253277 -NCT02250456 -NCT02253290 -NCT02250521 -NCT02253303 -NCT02250599 -NCT02253316 -NCT02250716 -NCT02253459 -NCT02250755 -NCT02253485 -NCT02250781 -NCT02253511 -NCT02250794 -NCT02253524 -NCT02250846 -NCT02253537 -NCT02250859 -NCT02253550 -NCT02250872 -NCT02253576 -NCT02250885 -NCT02253602 -NCT02250937 -NCT02253719 -NCT02250950 -NCT02259348 -NCT02253992 -NCT02256696 -NCT02254005 -NCT02256670 -NCT02254018 -NCT02256774 -NCT02254031 -NCT02256800 -NCT02254044 -NCT02256813 -NCT02254239 -NCT02256852 -NCT02254265 -NCT02256917 -NCT02254278 -NCT02256982 -NCT02254382 -NCT02257138 -NCT02254473 -NCT02257242 -NCT02254486 -NCT02257307 -NCT02254551 -NCT02257385 -NCT02254681 -NCT02257398 -NCT02254746 -NCT02257424 -NCT02254772 -NCT02257476 -NCT02254785 -NCT02257528 -NCT02254811 -NCT02257541 -NCT02254850 -NCT02257567 -NCT02254863 -NCT02257606 -NCT02254889 -NCT02257619 -NCT02254915 -NCT02257684 -NCT02254954 -NCT02257723 -NCT02254967 -NCT02257736 -NCT02255071 -NCT02257814 -NCT02255084 -NCT02257827 -NCT02255097 -NCT02257892 -NCT02255110 -NCT02258087 -NCT02255162 -NCT02258100 -NCT02255240 -NCT02258152 -NCT02255292 -NCT02258204 -NCT02255305 -NCT02258217 -NCT02255318 -NCT02258269 -NCT02255331 -NCT02258295 -NCT02255396 -NCT02258347 -NCT02255461 -NCT02258360 -NCT02255474 -NCT02258451 -NCT02255578 -NCT02258464 -NCT02255617 -NCT02258490 -NCT02255669 -NCT02258529 -NCT02255721 -NCT02258555 -NCT02255734 -NCT02258607 -NCT02255747 -NCT02258659 -NCT02255773 -NCT02258763 -NCT02255825 -NCT02258802 -NCT02255903 -NCT02258815 -NCT02255929 -NCT02258841 -NCT02256046 -NCT02258932 -NCT02256111 -NCT02258945 -NCT02256124 -NCT02258997 -NCT02256163 -NCT02259010 -NCT02256319 -NCT02259101 -NCT02256397 -NCT02259114 -NCT02256436 -NCT02259192 -NCT02256501 -NCT02259231 -NCT02256514 -NCT02259283 -NCT02256631 -NCT02266199 -NCT02259361 -NCT02262455 -NCT02259387 -NCT02262325 -NCT02259465 -NCT02262715 -NCT02259556 -NCT02262728 -NCT02259582 -NCT02262741 -NCT02259595 -NCT02262806 -NCT02259621 -NCT02262845 -NCT02259647 -NCT02262897 -NCT02259699 -NCT02262910 -NCT02259725 -NCT02263027 -NCT02259920 -NCT02263105 -NCT02260128 -NCT02263118 -NCT02260180 -NCT02263495 -NCT02260206 -NCT02263508 -NCT02260349 -NCT02263638 -NCT02260362 -NCT02263651 -NCT02260414 -NCT02263703 -NCT02260440 -NCT02263898 -NCT02260453 -NCT02264002 -NCT02260466 -NCT02264210 -NCT02260505 -NCT02264236 -NCT02260531 -NCT02264314 -NCT02260544 -NCT02264392 -NCT02260635 -NCT02264496 -NCT02260648 -NCT02264548 -NCT02260661 -NCT02264574 -NCT02260674 -NCT02264613 -NCT02260804 -NCT02264652 -NCT02260817 -NCT02264678 -NCT02260908 -NCT02264730 -NCT02261181 -NCT02264873 -NCT02261207 -NCT02264886 -NCT02261220 -NCT02264925 -NCT02261246 -NCT02264990 -NCT02261285 -NCT02265003 -NCT02261298 -NCT02265107 -NCT02261389 -NCT02265120 -NCT02261415 -NCT02265159 -NCT02261467 -NCT02265185 -NCT02261506 -NCT02265237 -NCT02261532 -NCT02265328 -NCT02261571 -NCT02265341 -NCT02261610 -NCT02265380 -NCT02261662 -NCT02265510 -NCT02261714 -NCT02265536 -NCT02261727 -NCT02265601 -NCT02261753 -NCT02265614 -NCT02261779 -NCT02265731 -NCT02261805 -NCT02265770 -NCT02261844 -NCT02265952 -NCT02261987 -NCT02266056 -NCT02262000 -NCT02266095 -NCT02262143 -NCT02266147 -NCT02262156 -NCT02266160 -NCT02262221 -NCT02266173 -NCT02262299 -NCT02271737 -NCT02266238 -NCT02269293 -NCT02266329 -NCT02269280 -NCT02266355 -NCT02269306 -NCT02266420 -NCT02269579 -NCT02266433 -NCT02269592 -NCT02266602 -NCT02269631 -NCT02266641 -NCT02269644 -NCT02266667 -NCT02269670 -NCT02266745 -NCT02269683 -NCT02266823 -NCT02269696 -NCT02266849 -NCT02269722 -NCT02267083 -NCT02269735 -NCT02267096 -NCT02269761 -NCT02267213 -NCT02269826 -NCT02267278 -NCT02269865 -NCT02267343 -NCT02269891 -NCT02267603 -NCT02269943 -NCT02267655 -NCT02270021 -NCT02267707 -NCT02270034 -NCT02267772 -NCT02270216 -NCT02267863 -NCT02270255 -NCT02267915 -NCT02270307 -NCT02267928 -NCT02270372 -NCT02267941 -NCT02270450 -NCT02267967 -NCT02270463 -NCT02268006 -NCT02270476 -NCT02268045 -NCT02270554 -NCT02268058 -NCT02270580 -NCT02268162 -NCT02270593 -NCT02268175 -NCT02270606 -NCT02268188 -NCT02270645 -NCT02268253 -NCT02270697 -NCT02268305 -NCT02270788 -NCT02268344 -NCT02270814 -NCT02268370 -NCT02270827 -NCT02268383 -NCT02270840 -NCT02268435 -NCT02270853 -NCT02268578 -NCT02270866 -NCT02268617 -NCT02270996 -NCT02268630 -NCT02271126 -NCT02268695 -NCT02271178 -NCT02268747 -NCT02271217 -NCT02268825 -NCT02271243 -NCT02268851 -NCT02271282 -NCT02268877 -NCT02271308 -NCT02268890 -NCT02271399 -NCT02268903 -NCT02271464 -NCT02268955 -NCT02271516 -NCT02269020 -NCT02271568 -NCT02269033 -NCT02271594 -NCT02269046 -NCT02271620 -NCT02269085 -NCT02271646 -NCT02269098 -NCT02271659 -NCT02269111 -NCT02271711 -NCT02269124 -NCT02271724 -NCT02269267 -NCT02277366 -NCT02271750 -NCT02274584 -NCT02271828 -NCT02274532 -NCT02271906 -NCT02274597 -NCT02271945 -NCT02274610 -NCT02271984 -NCT02274623 -NCT02272036 -NCT02274636 -NCT02272075 -NCT02274740 -NCT02272127 -NCT02274753 -NCT02272153 -NCT02274779 -NCT02272218 -NCT02274831 -NCT02272244 -NCT02274987 -NCT02272270 -NCT02275039 -NCT02272335 -NCT02275169 -NCT02272400 -NCT02275221 -NCT02272413 -NCT02275286 -NCT02272478 -NCT02275325 -NCT02272608 -NCT02275390 -NCT02272686 -NCT02275403 -NCT02272699 -NCT02275416 -NCT02272738 -NCT02275533 -NCT02272751 -NCT02275546 -NCT02272777 -NCT02275598 -NCT02272790 -NCT02275611 -NCT02272803 -NCT02275663 -NCT02272816 -NCT02275702 -NCT02272855 -NCT02275754 -NCT02272998 -NCT02275793 -NCT02273102 -NCT02275806 -NCT02273141 -NCT02275871 -NCT02273167 -NCT02275910 -NCT02273206 -NCT02275936 -NCT02273219 -NCT02276027 -NCT02273271 -NCT02276053 -NCT02273362 -NCT02276248 -NCT02273375 -NCT02276300 -NCT02273388 -NCT02276404 -NCT02273583 -NCT02276443 -NCT02273596 -NCT02276547 -NCT02273713 -NCT02276560 -NCT02273739 -NCT02276573 -NCT02273752 -NCT02276690 -NCT02273778 -NCT02276716 -NCT02273882 -NCT02276768 -NCT02273973 -NCT02276885 -NCT02274012 -NCT02276924 -NCT02274038 -NCT02277028 -NCT02274155 -NCT02277093 -NCT02274168 -NCT02277106 -NCT02274272 -NCT02277119 -NCT02274311 -NCT02277158 -NCT02274337 -NCT02277184 -NCT02274363 -NCT02277197 -NCT02274402 -NCT02277210 -NCT02274493 -NCT02277275 -NCT02274506 -NCT02277327 -NCT02274519 -NCT02282436 -NCT02277392 -NCT02279771 -NCT02277444 -NCT02279758 -NCT02277457 -NCT02279862 -NCT02277522 -NCT02279875 -NCT02277548 -NCT02279901 -NCT02277561 -NCT02279940 -NCT02277587 -NCT02279992 -NCT02277717 -NCT02280005 -NCT02277730 -NCT02280070 -NCT02277834 -NCT02280083 -NCT02277847 -NCT02280174 -NCT02277860 -NCT02280239 -NCT02277886 -NCT02280252 -NCT02277964 -NCT02280265 -NCT02278055 -NCT02280278 -NCT02278120 -NCT02280317 -NCT02278133 -NCT02280343 -NCT02278185 -NCT02280356 -NCT02278198 -NCT02280525 -NCT02278250 -NCT02280694 -NCT02278315 -NCT02280707 -NCT02278341 -NCT02280772 -NCT02278458 -NCT02280785 -NCT02278510 -NCT02280811 -NCT02278536 -NCT02280954 -NCT02278718 -NCT02280967 -NCT02278744 -NCT02280993 -NCT02278783 -NCT02281006 -NCT02278796 -NCT02281084 -NCT02278861 -NCT02281097 -NCT02278874 -NCT02281162 -NCT02278887 -NCT02281214 -NCT02278913 -NCT02281266 -NCT02278965 -NCT02281279 -NCT02278978 -NCT02281318 -NCT02279017 -NCT02281383 -NCT02279108 -NCT02281409 -NCT02279134 -NCT02281513 -NCT02279199 -NCT02281669 -NCT02279264 -NCT02281708 -NCT02279277 -NCT02281760 -NCT02279303 -NCT02281812 -NCT02279368 -NCT02281955 -NCT02279394 -NCT02282020 -NCT02279433 -NCT02282033 -NCT02279472 -NCT02282111 -NCT02279511 -NCT02282137 -NCT02279550 -NCT02282150 -NCT02279576 -NCT02282202 -NCT02279602 -NCT02282215 -NCT02279641 -NCT02282267 -NCT02279654 -NCT02282345 -NCT02279693 -NCT02282358 -NCT02279719 -NCT02282371 -NCT02279732 -NCT02282410 -NCT02279745 -NCT02288195 -NCT02282449 -NCT02285244 -NCT02282488 -NCT02285231 -NCT02282514 -NCT02285296 -NCT02282540 -NCT02285348 -NCT02282644 -NCT02285400 -NCT02282696 -NCT02285413 -NCT02282722 -NCT02285439 -NCT02282839 -NCT02285530 -NCT02282917 -NCT02285543 -NCT02282995 -NCT02285634 -NCT02283008 -NCT02285660 -NCT02283151 -NCT02285738 -NCT02283177 -NCT02285790 -NCT02283190 -NCT02285816 -NCT02283203 -NCT02285855 -NCT02283268 -NCT02285920 -NCT02283320 -NCT02285959 -NCT02283346 -NCT02285998 -NCT02283359 -NCT02286076 -NCT02283372 -NCT02286167 -NCT02283411 -NCT02286219 -NCT02283424 -NCT02286245 -NCT02283476 -NCT02286466 -NCT02283489 -NCT02286531 -NCT02283632 -NCT02286583 -NCT02283658 -NCT02286687 -NCT02283684 -NCT02286713 -NCT02283749 -NCT02286726 -NCT02283775 -NCT02286778 -NCT02283853 -NCT02286817 -NCT02283892 -NCT02286830 -NCT02283944 -NCT02286843 -NCT02283957 -NCT02286921 -NCT02283970 -NCT02287129 -NCT02283983 -NCT02287168 -NCT02284061 -NCT02287233 -NCT02284074 -NCT02287311 -NCT02284139 -NCT02287337 -NCT02284334 -NCT02287402 -NCT02284464 -NCT02287428 -NCT02284490 -NCT02287506 -NCT02284529 -NCT02287519 -NCT02284724 -NCT02287558 -NCT02284789 -NCT02287636 -NCT02284802 -NCT02287675 -NCT02284841 -NCT02287701 -NCT02284867 -NCT02287727 -NCT02284919 -NCT02287818 -NCT02284945 -NCT02287844 -NCT02284958 -NCT02287883 -NCT02284971 -NCT02287987 -NCT02284997 -NCT02288052 -NCT02285062 -NCT02288078 -NCT02285101 -NCT02288156 -NCT02285179 -NCT02288169 -NCT02285192 -NCT02294149 -NCT02288247 -NCT02291016 -NCT02288351 -NCT02290977 -NCT02288377 -NCT02291029 -NCT02288416 -NCT02291055 -NCT02288455 -NCT02291107 -NCT02288507 -NCT02291133 -NCT02288572 -NCT02291211 -NCT02288611 -NCT02291224 -NCT02288702 -NCT02291237 -NCT02288741 -NCT02291289 -NCT02288858 -NCT02291354 -NCT02288897 -NCT02291614 -NCT02288910 -NCT02291744 -NCT02288936 -NCT02291757 -NCT02288949 -NCT02291796 -NCT02288962 -NCT02291848 -NCT02288988 -NCT02291913 -NCT02289014 -NCT02291991 -NCT02289092 -NCT02292095 -NCT02289144 -NCT02292173 -NCT02289183 -NCT02292225 -NCT02289196 -NCT02292238 -NCT02289209 -NCT02292316 -NCT02289222 -NCT02292368 -NCT02289300 -NCT02292394 -NCT02289352 -NCT02292407 -NCT02289456 -NCT02292420 -NCT02289547 -NCT02292446 -NCT02289560 -NCT02292459 -NCT02289690 -NCT02292524 -NCT02289768 -NCT02292550 -NCT02289807 -NCT02292641 -NCT02289833 -NCT02292732 -NCT02289898 -NCT02292745 -NCT02289924 -NCT02292758 -NCT02289950 -NCT02292914 -NCT02290002 -NCT02292940 -NCT02290145 -NCT02292979 -NCT02290210 -NCT02293005 -NCT02290288 -NCT02293031 -NCT02290340 -NCT02293109 -NCT02290366 -NCT02293239 -NCT02290405 -NCT02293356 -NCT02290431 -NCT02293447 -NCT02290444 -NCT02293707 -NCT02290522 -NCT02293772 -NCT02290561 -NCT02293811 -NCT02290574 -NCT02293850 -NCT02290587 -NCT02293863 -NCT02290613 -NCT02293954 -NCT02290730 -NCT02293980 -NCT02290782 -NCT02293993 -NCT02290808 -NCT02294006 -NCT02290834 -NCT02294084 -NCT02290886 -NCT02294136 -NCT02290951 -NCT02299323 -NCT02294253 -NCT02296944 -NCT02294279 -NCT02296918 -NCT02294357 -NCT02296970 -NCT02294461 -NCT02296996 -NCT02294500 -NCT02297048 -NCT02294552 -NCT02297061 -NCT02294565 -NCT02297087 -NCT02294708 -NCT02297139 -NCT02294734 -NCT02297178 -NCT02294773 -NCT02297217 -NCT02294786 -NCT02297230 -NCT02294838 -NCT02297282 -NCT02294903 -NCT02297386 -NCT02294981 -NCT02297412 -NCT02295007 -NCT02297438 -NCT02295033 -NCT02297451 -NCT02295059 -NCT02297542 -NCT02295163 -NCT02297607 -NCT02295176 -NCT02297672 -NCT02295189 -NCT02297698 -NCT02295254 -NCT02297711 -NCT02295280 -NCT02297841 -NCT02295397 -NCT02297919 -NCT02295449 -NCT02297945 -NCT02295540 -NCT02298153 -NCT02295722 -NCT02298166 -NCT02295748 -NCT02298257 -NCT02295761 -NCT02298270 -NCT02295774 -NCT02298283 -NCT02295839 -NCT02298348 -NCT02295917 -NCT02298387 -NCT02295930 -NCT02298491 -NCT02295956 -NCT02298569 -NCT02295982 -NCT02298595 -NCT02296047 -NCT02298608 -NCT02296112 -NCT02298621 -NCT02296125 -NCT02298634 -NCT02296177 -NCT02298647 -NCT02296203 -NCT02298673 -NCT02296216 -NCT02298686 -NCT02296229 -NCT02298699 -NCT02296242 -NCT02298712 -NCT02296255 -NCT02298764 -NCT02296307 -NCT02298855 -NCT02296411 -NCT02298933 -NCT02296437 -NCT02298946 -NCT02296476 -NCT02298959 -NCT02296528 -NCT02298972 -NCT02296541 -NCT02299089 -NCT02296580 -NCT02299115 -NCT02296658 -NCT02299128 -NCT02296671 -NCT02299141 -NCT02296684 -NCT02299206 -NCT02296710 -NCT02299219 -NCT02296801 -NCT02299245 -NCT02296879 -NCT02304289 -NCT02299375 -NCT02301858 -NCT02299388 -NCT02301845 -NCT02299414 -NCT02301897 -NCT02299505 -NCT02301962 -NCT02299518 -NCT02301975 -NCT02299570 -NCT02301988 -NCT02299583 -NCT02302092 -NCT02299596 -NCT02302105 -NCT02299635 -NCT02302118 -NCT02299648 -NCT02302196 -NCT02299713 -NCT02302235 -NCT02299765 -NCT02302300 -NCT02299778 -NCT02302339 -NCT02299843 -NCT02302365 -NCT02299973 -NCT02302417 -NCT02299999 -NCT02302469 -NCT02300103 -NCT02302495 -NCT02300129 -NCT02302794 -NCT02300272 -NCT02302807 -NCT02300298 -NCT02302833 -NCT02300389 -NCT02302846 -NCT02300467 -NCT02302898 -NCT02300506 -NCT02302937 -NCT02300519 -NCT02302963 -NCT02300545 -NCT02303028 -NCT02300610 -NCT02303041 -NCT02300675 -NCT02303054 -NCT02300792 -NCT02303080 -NCT02300883 -NCT02303093 -NCT02300909 -NCT02303119 -NCT02300922 -NCT02303145 -NCT02300935 -NCT02303197 -NCT02300948 -NCT02303262 -NCT02300961 -NCT02303288 -NCT02300987 -NCT02303301 -NCT02301000 -NCT02303327 -NCT02301039 -NCT02303340 -NCT02301052 -NCT02303366 -NCT02301091 -NCT02303392 -NCT02301104 -NCT02303457 -NCT02301117 -NCT02303574 -NCT02301130 -NCT02303600 -NCT02301143 -NCT02303678 -NCT02301156 -NCT02303730 -NCT02301208 -NCT02303782 -NCT02301221 -NCT02303808 -NCT02301286 -NCT02303821 -NCT02301325 -NCT02303873 -NCT02301338 -NCT02303899 -NCT02301364 -NCT02303912 -NCT02301390 -NCT02303925 -NCT02301481 -NCT02303938 -NCT02301494 -NCT02303951 -NCT02301611 -NCT02303977 -NCT02301741 -NCT02303990 -NCT02301754 -NCT02309931 -NCT02304302 -NCT02307253 -NCT02304367 -NCT02307240 -NCT02304393 -NCT02307435 -NCT02304419 -NCT02307474 -NCT02304445 -NCT02307487 -NCT02304458 -NCT02307500 -NCT02304471 -NCT02307526 -NCT02304510 -NCT02307539 -NCT02304757 -NCT02307552 -NCT02304770 -NCT02307565 -NCT02304809 -NCT02307617 -NCT02304848 -NCT02307630 -NCT02304874 -NCT02307721 -NCT02304887 -NCT02307916 -NCT02304913 -NCT02307981 -NCT02304926 -NCT02307994 -NCT02304978 -NCT02308020 -NCT02305043 -NCT02308072 -NCT02305056 -NCT02308085 -NCT02305186 -NCT02308124 -NCT02305199 -NCT02308202 -NCT02305342 -NCT02308241 -NCT02305498 -NCT02308254 -NCT02305563 -NCT02308280 -NCT02305654 -NCT02308319 -NCT02305758 -NCT02308345 -NCT02305810 -NCT02308384 -NCT02305888 -NCT02308449 -NCT02305914 -NCT02308514 -NCT02305953 -NCT02308527 -NCT02305992 -NCT02308540 -NCT02306070 -NCT02308553 -NCT02306161 -NCT02308631 -NCT02306187 -NCT02308709 -NCT02306252 -NCT02308722 -NCT02306265 -NCT02308735 -NCT02306278 -NCT02308748 -NCT02306291 -NCT02308761 -NCT02306317 -NCT02308865 -NCT02306473 -NCT02308891 -NCT02306499 -NCT02309047 -NCT02306512 -NCT02309099 -NCT02306564 -NCT02309164 -NCT02306590 -NCT02309177 -NCT02306694 -NCT02309242 -NCT02306707 -NCT02309307 -NCT02306759 -NCT02309476 -NCT02306850 -NCT02309515 -NCT02306954 -NCT02309554 -NCT02306967 -NCT02309580 -NCT02306993 -NCT02309619 -NCT02307006 -NCT02309632 -NCT02307058 -NCT02309658 -NCT02307149 -NCT02309814 -NCT02307162 -NCT02309892 -NCT02307227 -NCT02314884 -NCT02309944 -NCT02312258 -NCT02310061 -NCT02312245 -NCT02310074 -NCT02312297 -NCT02310191 -NCT02312401 -NCT02310230 -NCT02312453 -NCT02310243 -NCT02312505 -NCT02310321 -NCT02312557 -NCT02310399 -NCT02312570 -NCT02310425 -NCT02312609 -NCT02310451 -NCT02312622 -NCT02310464 -NCT02312661 -NCT02310607 -NCT02312674 -NCT02310737 -NCT02312700 -NCT02310763 -NCT02312778 -NCT02310828 -NCT02312804 -NCT02310880 -NCT02312817 -NCT02310906 -NCT02312908 -NCT02310919 -NCT02312934 -NCT02310945 -NCT02312960 -NCT02310958 -NCT02313012 -NCT02310971 -NCT02313051 -NCT02310997 -NCT02313103 -NCT02311049 -NCT02313233 -NCT02311075 -NCT02313272 -NCT02311101 -NCT02313298 -NCT02311205 -NCT02313389 -NCT02311283 -NCT02313454 -NCT02311309 -NCT02313467 -NCT02311322 -NCT02313480 -NCT02311361 -NCT02313506 -NCT02311439 -NCT02313636 -NCT02311478 -NCT02313675 -NCT02311530 -NCT02313688 -NCT02311543 -NCT02313805 -NCT02311556 -NCT02313870 -NCT02311569 -NCT02313909 -NCT02311582 -NCT02314039 -NCT02311595 -NCT02314052 -NCT02311608 -NCT02314117 -NCT02311621 -NCT02314143 -NCT02311673 -NCT02314156 -NCT02311712 -NCT02314169 -NCT02311764 -NCT02314182 -NCT02311803 -NCT02314247 -NCT02311829 -NCT02314312 -NCT02311881 -NCT02314325 -NCT02311894 -NCT02314364 -NCT02311907 -NCT02314377 -NCT02311920 -NCT02314481 -NCT02311933 -NCT02314676 -NCT02311959 -NCT02314715 -NCT02311998 -NCT02314741 -NCT02312102 -NCT02314806 -NCT02312115 -NCT02314819 -NCT02312167 -NCT02314871 -NCT02312206 -NCT02319538 -NCT02314936 -NCT02317302 -NCT02315053 -NCT02317211 -NCT02315066 -NCT02317315 -NCT02315105 -NCT02317328 -NCT02315118 -NCT02317341 -NCT02315131 -NCT02317393 -NCT02315157 -NCT02317419 -NCT02315196 -NCT02317471 -NCT02315235 -NCT02317549 -NCT02315326 -NCT02317653 -NCT02315430 -NCT02317705 -NCT02315443 -NCT02317731 -NCT02315521 -NCT02317783 -NCT02315534 -NCT02317874 -NCT02315560 -NCT02317887 -NCT02315586 -NCT02317926 -NCT02315612 -NCT02317965 -NCT02315625 -NCT02317978 -NCT02315664 -NCT02317991 -NCT02315716 -NCT02318082 -NCT02315768 -NCT02318095 -NCT02315781 -NCT02318147 -NCT02315833 -NCT02318160 -NCT02315859 -NCT02318225 -NCT02315885 -NCT02318277 -NCT02315989 -NCT02318329 -NCT02316002 -NCT02318368 -NCT02316028 -NCT02318394 -NCT02316106 -NCT02318407 -NCT02316171 -NCT02318420 -NCT02316197 -NCT02318511 -NCT02316249 -NCT02318550 -NCT02316262 -NCT02318615 -NCT02316327 -NCT02318771 -NCT02316340 -NCT02318784 -NCT02316366 -NCT02318875 -NCT02316444 -NCT02318901 -NCT02316457 -NCT02319005 -NCT02316496 -NCT02319018 -NCT02316509 -NCT02319044 -NCT02316535 -NCT02319070 -NCT02316548 -NCT02319083 -NCT02316561 -NCT02319109 -NCT02316587 -NCT02319122 -NCT02316743 -NCT02319135 -NCT02316795 -NCT02319187 -NCT02316834 -NCT02319200 -NCT02316899 -NCT02319239 -NCT02316912 -NCT02319304 -NCT02316925 -NCT02319356 -NCT02316964 -NCT02319369 -NCT02317016 -NCT02319395 -NCT02317042 -NCT02319408 -NCT02317055 -NCT02319421 -NCT02317120 -NCT02319486 -NCT02317159 -NCT02324283 -NCT02319577 -NCT02322021 -NCT02319824 -NCT02321982 -NCT02319837 -NCT02322112 -NCT02319863 -NCT02322138 -NCT02319889 -NCT02322203 -NCT02319928 -NCT02322281 -NCT02320006 -NCT02322320 -NCT02320058 -NCT02322333 -NCT02320071 -NCT02322411 -NCT02320123 -NCT02322593 -NCT02320149 -NCT02322671 -NCT02320214 -NCT02322814 -NCT02320227 -NCT02322853 -NCT02320253 -NCT02322866 -NCT02320292 -NCT02322931 -NCT02320305 -NCT02323022 -NCT02320318 -NCT02323087 -NCT02320383 -NCT02323113 -NCT02320435 -NCT02323126 -NCT02320448 -NCT02323139 -NCT02320487 -NCT02323178 -NCT02320552 -NCT02323191 -NCT02320565 -NCT02323204 -NCT02320578 -NCT02323230 -NCT02320617 -NCT02323269 -NCT02320656 -NCT02323295 -NCT02320734 -NCT02323360 -NCT02320760 -NCT02323451 -NCT02320825 -NCT02323516 -NCT02320851 -NCT02323555 -NCT02320942 -NCT02323568 -NCT02320968 -NCT02323607 -NCT02321124 -NCT02323646 -NCT02321202 -NCT02323659 -NCT02321228 -NCT02323724 -NCT02321267 -NCT02323737 -NCT02321280 -NCT02323841 -NCT02321293 -NCT02323854 -NCT02321358 -NCT02323867 -NCT02321384 -NCT02323880 -NCT02321449 -NCT02323893 -NCT02321501 -NCT02323906 -NCT02321514 -NCT02323932 -NCT02321527 -NCT02323997 -NCT02321540 -NCT02324023 -NCT02321579 -NCT02324036 -NCT02321592 -NCT02324049 -NCT02321631 -NCT02324088 -NCT02321670 -NCT02324101 -NCT02321696 -NCT02324114 -NCT02321735 -NCT02324127 -NCT02321800 -NCT02324192 -NCT02321813 -NCT02324205 -NCT02321826 -NCT02324231 -NCT02321930 -NCT02324257 -NCT02321969 -NCT02329938 -NCT02324335 -NCT02327065 -NCT02324374 -NCT02326974 -NCT02324387 -NCT02327078 -NCT02324439 -NCT02327091 -NCT02324452 -NCT02327247 -NCT02324517 -NCT02327377 -NCT02324530 -NCT02327390 -NCT02324543 -NCT02327481 -NCT02324582 -NCT02327494 -NCT02324595 -NCT02327520 -NCT02324608 -NCT02327650 -NCT02324621 -NCT02327793 -NCT02324803 -NCT02327819 -NCT02324868 -NCT02327871 -NCT02324881 -NCT02327884 -NCT02324894 -NCT02327897 -NCT02324907 -NCT02327936 -NCT02324920 -NCT02328014 -NCT02324985 -NCT02328040 -NCT02324998 -NCT02328105 -NCT02325024 -NCT02328196 -NCT02325063 -NCT02328261 -NCT02325089 -NCT02328274 -NCT02325128 -NCT02328313 -NCT02325154 -NCT02328339 -NCT02325232 -NCT02328365 -NCT02325349 -NCT02328404 -NCT02325375 -NCT02328469 -NCT02325401 -NCT02328625 -NCT02325440 -NCT02328664 -NCT02325453 -NCT02328716 -NCT02325492 -NCT02328755 -NCT02325557 -NCT02328807 -NCT02325661 -NCT02328872 -NCT02325739 -NCT02328885 -NCT02325973 -NCT02329054 -NCT02325986 -NCT02329080 -NCT02325999 -NCT02329106 -NCT02326025 -NCT02329171 -NCT02326168 -NCT02329210 -NCT02326246 -NCT02329236 -NCT02326285 -NCT02329275 -NCT02326311 -NCT02329301 -NCT02326324 -NCT02329327 -NCT02326454 -NCT02329379 -NCT02326558 -NCT02329470 -NCT02326584 -NCT02329509 -NCT02326597 -NCT02329522 -NCT02326623 -NCT02329548 -NCT02326727 -NCT02329665 -NCT02326779 -NCT02329717 -NCT02326805 -NCT02329730 -NCT02326844 -NCT02329847 -NCT02326857 -NCT02329860 -NCT02326909 -NCT02329873 -NCT02326922 -NCT02335580 -NCT02329977 -NCT02332980 -NCT02329990 -NCT02332928 -NCT02330094 -NCT02333110 -NCT02330107 -NCT02333162 -NCT02330302 -NCT02333188 -NCT02330315 -NCT02333292 -NCT02330328 -NCT02333370 -NCT02330367 -NCT02333409 -NCT02330471 -NCT02333435 -NCT02330497 -NCT02333474 -NCT02330510 -NCT02333513 -NCT02330536 -NCT02333565 -NCT02330562 -NCT02333617 -NCT02330575 -NCT02333708 -NCT02330770 -NCT02333721 -NCT02330783 -NCT02333773 -NCT02330796 -NCT02333838 -NCT02330913 -NCT02333851 -NCT02330926 -NCT02333890 -NCT02330991 -NCT02334007 -NCT02331017 -NCT02334111 -NCT02331134 -NCT02334163 -NCT02331147 -NCT02334189 -NCT02331251 -NCT02334202 -NCT02331368 -NCT02334254 -NCT02331381 -NCT02334319 -NCT02331394 -NCT02334332 -NCT02331498 -NCT02334371 -NCT02331550 -NCT02334475 -NCT02331693 -NCT02334527 -NCT02331706 -NCT02334579 -NCT02331836 -NCT02334657 -NCT02331875 -NCT02334709 -NCT02331927 -NCT02334722 -NCT02332031 -NCT02334735 -NCT02332096 -NCT02334774 -NCT02332122 -NCT02334826 -NCT02332187 -NCT02334852 -NCT02332317 -NCT02334865 -NCT02332369 -NCT02334891 -NCT02332447 -NCT02335034 -NCT02332486 -NCT02335099 -NCT02332499 -NCT02335112 -NCT02332512 -NCT02335151 -NCT02332538 -NCT02335164 -NCT02332551 -NCT02335190 -NCT02332590 -NCT02335203 -NCT02332668 -NCT02335216 -NCT02332707 -NCT02335255 -NCT02332772 -NCT02335268 -NCT02332785 -NCT02335359 -NCT02332850 -NCT02335372 -NCT02332863 -NCT02335411 -NCT02332876 -NCT02335424 -NCT02332889 -NCT02335567 -NCT02332902 -NCT02340117 -NCT02335619 -NCT02337907 -NCT02335671 -NCT02337868 -NCT02335710 -NCT02337933 -NCT02335749 -NCT02337946 -NCT02335814 -NCT02337972 -NCT02335827 -NCT02337985 -NCT02335853 -NCT02338011 -NCT02335879 -NCT02338037 -NCT02335918 -NCT02338050 -NCT02335944 -NCT02338076 -NCT02335957 -NCT02338141 -NCT02335970 -NCT02338167 -NCT02335983 -NCT02338245 -NCT02336009 -NCT02338297 -NCT02336048 -NCT02338310 -NCT02336087 -NCT02338349 -NCT02336139 -NCT02338427 -NCT02336165 -NCT02338492 -NCT02336256 -NCT02338518 -NCT02336282 -NCT02338531 -NCT02336386 -NCT02338570 -NCT02336425 -NCT02338609 -NCT02336438 -NCT02338622 -NCT02336451 -NCT02338700 -NCT02336464 -NCT02338713 -NCT02336490 -NCT02338752 -NCT02336516 -NCT02338778 -NCT02336529 -NCT02338804 -NCT02336672 -NCT02338882 -NCT02336711 -NCT02338895 -NCT02336724 -NCT02338973 -NCT02336737 -NCT02339090 -NCT02336750 -NCT02339116 -NCT02336763 -NCT02339142 -NCT02336815 -NCT02339168 -NCT02336984 -NCT02339272 -NCT02337049 -NCT02339324 -NCT02337088 -NCT02339337 -NCT02337179 -NCT02339350 -NCT02337205 -NCT02339376 -NCT02337244 -NCT02339402 -NCT02337296 -NCT02339506 -NCT02337309 -NCT02339532 -NCT02337426 -NCT02339558 -NCT02337465 -NCT02339571 -NCT02337478 -NCT02339701 -NCT02337491 -NCT02339740 -NCT02337530 -NCT02339753 -NCT02337582 -NCT02339779 -NCT02337595 -NCT02339805 -NCT02337673 -NCT02339831 -NCT02337686 -NCT02339922 -NCT02337712 -NCT02339948 -NCT02337738 -NCT02340013 -NCT02337764 -NCT02340065 -NCT02337829 -NCT02344667 -NCT02340156 -NCT02342587 -NCT02340208 -NCT02342483 -NCT02340221 -NCT02342600 -NCT02340273 -NCT02342626 -NCT02340377 -NCT02342639 -NCT02340390 -NCT02342665 -NCT02340429 -NCT02342704 -NCT02340494 -NCT02342730 -NCT02340507 -NCT02342782 -NCT02340520 -NCT02342808 -NCT02340533 -NCT02342886 -NCT02340611 -NCT02343042 -NCT02340728 -NCT02343068 -NCT02340780 -NCT02343081 -NCT02340845 -NCT02343172 -NCT02340858 -NCT02343224 -NCT02340871 -NCT02343237 -NCT02340884 -NCT02343276 -NCT02340923 -NCT02343315 -NCT02340936 -NCT02343354 -NCT02340949 -NCT02343406 -NCT02340962 -NCT02343536 -NCT02340975 -NCT02343549 -NCT02341014 -NCT02343562 -NCT02341040 -NCT02343575 -NCT02341170 -NCT02343601 -NCT02341196 -NCT02343614 -NCT02341209 -NCT02343627 -NCT02341235 -NCT02343666 -NCT02341287 -NCT02343692 -NCT02341339 -NCT02343718 -NCT02341365 -NCT02343822 -NCT02341404 -NCT02343835 -NCT02341495 -NCT02343939 -NCT02341547 -NCT02343952 -NCT02341625 -NCT02343991 -NCT02341664 -NCT02344004 -NCT02341677 -NCT02344017 -NCT02341690 -NCT02344095 -NCT02341846 -NCT02344108 -NCT02341911 -NCT02344199 -NCT02341950 -NCT02344264 -NCT02341989 -NCT02344277 -NCT02342054 -NCT02344316 -NCT02342067 -NCT02344329 -NCT02342093 -NCT02344355 -NCT02342132 -NCT02344407 -NCT02342158 -NCT02344433 -NCT02342197 -NCT02344446 -NCT02342223 -NCT02344472 -NCT02342262 -NCT02344485 -NCT02342275 -NCT02344537 -NCT02342301 -NCT02344550 -NCT02342353 -NCT02344563 -NCT02342379 -NCT02344654 -NCT02342457 -NCT02349893 -NCT02344810 -NCT02347618 -NCT02344862 -NCT02347501 -NCT02344927 -NCT02347722 -NCT02344940 -NCT02347787 -NCT02344992 -NCT02347813 -NCT02345031 -NCT02347839 -NCT02345135 -NCT02347878 -NCT02345161 -NCT02347904 -NCT02345174 -NCT02347917 -NCT02345200 -NCT02347956 -NCT02345265 -NCT02347969 -NCT02345330 -NCT02348008 -NCT02345382 -NCT02348021 -NCT02345408 -NCT02348099 -NCT02345421 -NCT02348203 -NCT02345460 -NCT02348216 -NCT02345473 -NCT02348229 -NCT02345499 -NCT02348255 -NCT02345616 -NCT02348281 -NCT02345629 -NCT02348294 -NCT02345746 -NCT02348320 -NCT02345772 -NCT02348372 -NCT02345798 -NCT02348385 -NCT02345824 -NCT02348398 -NCT02345850 -NCT02348437 -NCT02345876 -NCT02348450 -NCT02345889 -NCT02348489 -NCT02345915 -NCT02348502 -NCT02346032 -NCT02348528 -NCT02346071 -NCT02348684 -NCT02346214 -NCT02348710 -NCT02346227 -NCT02348749 -NCT02346253 -NCT02348983 -NCT02346318 -NCT02348996 -NCT02346331 -NCT02349022 -NCT02346370 -NCT02349048 -NCT02346409 -NCT02349061 -NCT02346448 -NCT02349139 -NCT02346500 -NCT02349178 -NCT02346526 -NCT02349217 -NCT02346578 -NCT02349295 -NCT02346604 -NCT02349386 -NCT02346656 -NCT02349399 -NCT02346747 -NCT02349412 -NCT02346825 -NCT02349451 -NCT02346955 -NCT02349464 -NCT02347059 -NCT02349568 -NCT02347111 -NCT02349581 -NCT02347163 -NCT02349633 -NCT02347215 -NCT02349698 -NCT02347241 -NCT02349724 -NCT02347267 -NCT02349776 -NCT02347280 -NCT02349841 -NCT02347332 -NCT02349854 -NCT02347449 -NCT02349867 -NCT02347462 -NCT02355223 -NCT02349919 -NCT02352571 -NCT02349945 -NCT02352558 -NCT02349958 -NCT02352636 -NCT02350153 -NCT02352688 -NCT02350166 -NCT02352727 -NCT02350179 -NCT02352766 -NCT02350283 -NCT02352779 -NCT02350309 -NCT02352792 -NCT02350361 -NCT02352818 -NCT02350387 -NCT02352831 -NCT02350400 -NCT02352844 -NCT02350517 -NCT02352883 -NCT02350530 -NCT02352935 -NCT02350543 -NCT02352948 -NCT02350556 -NCT02353000 -NCT02350582 -NCT02353026 -NCT02350660 -NCT02353039 -NCT02350673 -NCT02353091 -NCT02350686 -NCT02353143 -NCT02350712 -NCT02353260 -NCT02350764 -NCT02353338 -NCT02350855 -NCT02353364 -NCT02350881 -NCT02353390 -NCT02350972 -NCT02353468 -NCT02351037 -NCT02353481 -NCT02351089 -NCT02353559 -NCT02351128 -NCT02353572 -NCT02351141 -NCT02353728 -NCT02351180 -NCT02353741 -NCT02351219 -NCT02353819 -NCT02351297 -NCT02353832 -NCT02351349 -NCT02353858 -NCT02351375 -NCT02353936 -NCT02351401 -NCT02353988 -NCT02351453 -NCT02354079 -NCT02351479 -NCT02354118 -NCT02351492 -NCT02354131 -NCT02351505 -NCT02354261 -NCT02351596 -NCT02354274 -NCT02351700 -NCT02354313 -NCT02351739 -NCT02354352 -NCT02351765 -NCT02354365 -NCT02351791 -NCT02354391 -NCT02351882 -NCT02354469 -NCT02351960 -NCT02354508 -NCT02351986 -NCT02354534 -NCT02352025 -NCT02354547 -NCT02352181 -NCT02354586 -NCT02352220 -NCT02354677 -NCT02352259 -NCT02354690 -NCT02352324 -NCT02354781 -NCT02352337 -NCT02354898 -NCT02352428 -NCT02354924 -NCT02352519 -NCT02355067 -NCT02352532 -NCT02355119 -NCT02352545 -NCT02360969 -NCT02355249 -NCT02357992 -NCT02355353 -NCT02357914 -NCT02355379 -NCT02358031 -NCT02355418 -NCT02358161 -NCT02355431 -NCT02358187 -NCT02355483 -NCT02358200 -NCT02355496 -NCT02358213 -NCT02355535 -NCT02358239 -NCT02355756 -NCT02358330 -NCT02355886 -NCT02358395 -NCT02355925 -NCT02358434 -NCT02355938 -NCT02358473 -NCT02355990 -NCT02358590 -NCT02356068 -NCT02358642 -NCT02356081 -NCT02358681 -NCT02356159 -NCT02358850 -NCT02356172 -NCT02358863 -NCT02356250 -NCT02358876 -NCT02356276 -NCT02358954 -NCT02356302 -NCT02359019 -NCT02356406 -NCT02359058 -NCT02356419 -NCT02359097 -NCT02356445 -NCT02359123 -NCT02356458 -NCT02359162 -NCT02356471 -NCT02359175 -NCT02356549 -NCT02359266 -NCT02356562 -NCT02359474 -NCT02356575 -NCT02359500 -NCT02356627 -NCT02359565 -NCT02356653 -NCT02359643 -NCT02356666 -NCT02359682 -NCT02356679 -NCT02359812 -NCT02356913 -NCT02359838 -NCT02356926 -NCT02359851 -NCT02356965 -NCT02359968 -NCT02356978 -NCT02360046 -NCT02356991 -NCT02360059 -NCT02357108 -NCT02360072 -NCT02357121 -NCT02360111 -NCT02357134 -NCT02360215 -NCT02357147 -NCT02360241 -NCT02357160 -NCT02360254 -NCT02357225 -NCT02360384 -NCT02357407 -NCT02360501 -NCT02357420 -NCT02360540 -NCT02357485 -NCT02360579 -NCT02357498 -NCT02360605 -NCT02357524 -NCT02360618 -NCT02357550 -NCT02360761 -NCT02357563 -NCT02360787 -NCT02357667 -NCT02360826 -NCT02357732 -NCT02360839 -NCT02357758 -NCT02360852 -NCT02357810 -NCT02360865 -NCT02357836 -NCT02360917 -NCT02357862 -NCT02365740 -NCT02361008 -NCT02363335 -NCT02361047 -NCT02363309 -NCT02361086 -NCT02363374 -NCT02361099 -NCT02363400 -NCT02361112 -NCT02363413 -NCT02361125 -NCT02363439 -NCT02361164 -NCT02363465 -NCT02361216 -NCT02363491 -NCT02361281 -NCT02363569 -NCT02361320 -NCT02363595 -NCT02361346 -NCT02363634 -NCT02361359 -NCT02363647 -NCT02361372 -NCT02363686 -NCT02361385 -NCT02363751 -NCT02361411 -NCT02363790 -NCT02361424 -NCT02363816 -NCT02361437 -NCT02363829 -NCT02361450 -NCT02363855 -NCT02361515 -NCT02363933 -NCT02361541 -NCT02363985 -NCT02361580 -NCT02364037 -NCT02361593 -NCT02364076 -NCT02361606 -NCT02364089 -NCT02361723 -NCT02364115 -NCT02361749 -NCT02364128 -NCT02361788 -NCT02364180 -NCT02361827 -NCT02364206 -NCT02361879 -NCT02364336 -NCT02361905 -NCT02364362 -NCT02361996 -NCT02364388 -NCT02362035 -NCT02364427 -NCT02362048 -NCT02364492 -NCT02362165 -NCT02364518 -NCT02362230 -NCT02364557 -NCT02362243 -NCT02364609 -NCT02362295 -NCT02364713 -NCT02362425 -NCT02364726 -NCT02362438 -NCT02364778 -NCT02362451 -NCT02364960 -NCT02362464 -NCT02364999 -NCT02362594 -NCT02365142 -NCT02362659 -NCT02365168 -NCT02362737 -NCT02365207 -NCT02362932 -NCT02365376 -NCT02362958 -NCT02365415 -NCT02362997 -NCT02365441 -NCT02363010 -NCT02365454 -NCT02363049 -NCT02365506 -NCT02363075 -NCT02365532 -NCT02363088 -NCT02365597 -NCT02363153 -NCT02365610 -NCT02363179 -NCT02365662 -NCT02363192 -NCT02365675 -NCT02363218 -NCT02365701 -NCT02363244 -NCT02365714 -NCT02363283 -NCT02371161 -NCT02365766 -NCT02368509 -NCT02365779 -NCT02368496 -NCT02365805 -NCT02368574 -NCT02365818 -NCT02368639 -NCT02365896 -NCT02368691 -NCT02365935 -NCT02368730 -NCT02365974 -NCT02368795 -NCT02366130 -NCT02368860 -NCT02366143 -NCT02368886 -NCT02366182 -NCT02368912 -NCT02366195 -NCT02368977 -NCT02366208 -NCT02369016 -NCT02366221 -NCT02369029 -NCT02366312 -NCT02369042 -NCT02366507 -NCT02369081 -NCT02366546 -NCT02369198 -NCT02366559 -NCT02369458 -NCT02366611 -NCT02369471 -NCT02366650 -NCT02369484 -NCT02366663 -NCT02369653 -NCT02366728 -NCT02369718 -NCT02366741 -NCT02369783 -NCT02366793 -NCT02369835 -NCT02366819 -NCT02369861 -NCT02366858 -NCT02369874 -NCT02366871 -NCT02369939 -NCT02366884 -NCT02370017 -NCT02366975 -NCT02370082 -NCT02367001 -NCT02370108 -NCT02367027 -NCT02370121 -NCT02367040 -NCT02370134 -NCT02367066 -NCT02370160 -NCT02367157 -NCT02370238 -NCT02367196 -NCT02370264 -NCT02367222 -NCT02370342 -NCT02367352 -NCT02370381 -NCT02367404 -NCT02370420 -NCT02367443 -NCT02370498 -NCT02367456 -NCT02370511 -NCT02367508 -NCT02370524 -NCT02367547 -NCT02370563 -NCT02367573 -NCT02370602 -NCT02367625 -NCT02370628 -NCT02367651 -NCT02370667 -NCT02367703 -NCT02370771 -NCT02367729 -NCT02370797 -NCT02367781 -NCT02370823 -NCT02367794 -NCT02370849 -NCT02367859 -NCT02370888 -NCT02367950 -NCT02370953 -NCT02367976 -NCT02371018 -NCT02368002 -NCT02371031 -NCT02368054 -NCT02371044 -NCT02368067 -NCT02371070 -NCT02368236 -NCT02371148 -NCT02368340 -NCT02377570 -NCT02371200 -NCT02374333 -NCT02371252 -NCT02374255 -NCT02371304 -NCT02374424 -NCT02371330 -NCT02374489 -NCT02371369 -NCT02374593 -NCT02371408 -NCT02374645 -NCT02371447 -NCT02374684 -NCT02371473 -NCT02374827 -NCT02371499 -NCT02374931 -NCT02371564 -NCT02374957 -NCT02371577 -NCT02375022 -NCT02371590 -NCT02375048 -NCT02371642 -NCT02375087 -NCT02371655 -NCT02375113 -NCT02371681 -NCT02375204 -NCT02371798 -NCT02375425 -NCT02371811 -NCT02375529 -NCT02371824 -NCT02375555 -NCT02371863 -NCT02375581 -NCT02371902 -NCT02375620 -NCT02372006 -NCT02375672 -NCT02372058 -NCT02375724 -NCT02372071 -NCT02375776 -NCT02372123 -NCT02375789 -NCT02372227 -NCT02375828 -NCT02372240 -NCT02375880 -NCT02372305 -NCT02375945 -NCT02372331 -NCT02375958 -NCT02372409 -NCT02375984 -NCT02372448 -NCT02375997 -NCT02372487 -NCT02376023 -NCT02372500 -NCT02376075 -NCT02372513 -NCT02376114 -NCT02372552 -NCT02376166 -NCT02372747 -NCT02376231 -NCT02372760 -NCT02376322 -NCT02372838 -NCT02376452 -NCT02372864 -NCT02376543 -NCT02372968 -NCT02376634 -NCT02372994 -NCT02376699 -NCT02373007 -NCT02376725 -NCT02373072 -NCT02376790 -NCT02373267 -NCT02376816 -NCT02373488 -NCT02376868 -NCT02373553 -NCT02376933 -NCT02373579 -NCT02376985 -NCT02373618 -NCT02377128 -NCT02373631 -NCT02377141 -NCT02373644 -NCT02377180 -NCT02373722 -NCT02377206 -NCT02373735 -NCT02377232 -NCT02373891 -NCT02377284 -NCT02373930 -NCT02377362 -NCT02373969 -NCT02377492 -NCT02374099 -NCT02377518 -NCT02374242 -NCT02382991 -NCT02377752 -NCT02380222 -NCT02377817 -NCT02380209 -NCT02377869 -NCT02380235 -NCT02377947 -NCT02380313 -NCT02377973 -NCT02380378 -NCT02378012 -NCT02380443 -NCT02378038 -NCT02380469 -NCT02378142 -NCT02380560 -NCT02378233 -NCT02380651 -NCT02378285 -NCT02380677 -NCT02378311 -NCT02380729 -NCT02378324 -NCT02380755 -NCT02378350 -NCT02380898 -NCT02378389 -NCT02380911 -NCT02378415 -NCT02381002 -NCT02378428 -NCT02381015 -NCT02378493 -NCT02381028 -NCT02378532 -NCT02381080 -NCT02378558 -NCT02381184 -NCT02378779 -NCT02381236 -NCT02378805 -NCT02381249 -NCT02378844 -NCT02381288 -NCT02378870 -NCT02381314 -NCT02378883 -NCT02381327 -NCT02378922 -NCT02381366 -NCT02378935 -NCT02381379 -NCT02378948 -NCT02381457 -NCT02378961 -NCT02381470 -NCT02379000 -NCT02381535 -NCT02379169 -NCT02381548 -NCT02379182 -NCT02381561 -NCT02379195 -NCT02381587 -NCT02379221 -NCT02381665 -NCT02379247 -NCT02381678 -NCT02379260 -NCT02381834 -NCT02379364 -NCT02381847 -NCT02379377 -NCT02381886 -NCT02379390 -NCT02381925 -NCT02379416 -NCT02382068 -NCT02379507 -NCT02382094 -NCT02379520 -NCT02382107 -NCT02379559 -NCT02382237 -NCT02379572 -NCT02382250 -NCT02379585 -NCT02382263 -NCT02379728 -NCT02382315 -NCT02379741 -NCT02382406 -NCT02379754 -NCT02382458 -NCT02379819 -NCT02382471 -NCT02379845 -NCT02382523 -NCT02379871 -NCT02382549 -NCT02379988 -NCT02382640 -NCT02380027 -NCT02382653 -NCT02380053 -NCT02382770 -NCT02380118 -NCT02382796 -NCT02380131 -NCT02382809 -NCT02380170 -NCT02389270 -NCT02383030 -NCT02386371 -NCT02383082 -NCT02386332 -NCT02383212 -NCT02386397 -NCT02383251 -NCT02386436 -NCT02383277 -NCT02386501 -NCT02383316 -NCT02386527 -NCT02383368 -NCT02386618 -NCT02383407 -NCT02386631 -NCT02383433 -NCT02386657 -NCT02383498 -NCT02386722 -NCT02383641 -NCT02386735 -NCT02383797 -NCT02386800 -NCT02383927 -NCT02386826 -NCT02383966 -NCT02387086 -NCT02384005 -NCT02387099 -NCT02384083 -NCT02387125 -NCT02384200 -NCT02387138 -NCT02384239 -NCT02387203 -NCT02384252 -NCT02387216 -NCT02384343 -NCT02387242 -NCT02384382 -NCT02387268 -NCT02384408 -NCT02387281 -NCT02384421 -NCT02387307 -NCT02384473 -NCT02387359 -NCT02384616 -NCT02387645 -NCT02384668 -NCT02387840 -NCT02384746 -NCT02387853 -NCT02384759 -NCT02387879 -NCT02384811 -NCT02387892 -NCT02384850 -NCT02387905 -NCT02384876 -NCT02387996 -NCT02384954 -NCT02388048 -NCT02385110 -NCT02388074 -NCT02385136 -NCT02388126 -NCT02385188 -NCT02388152 -NCT02385214 -NCT02388204 -NCT02385240 -NCT02388256 -NCT02385253 -NCT02388269 -NCT02385266 -NCT02388321 -NCT02385292 -NCT02388490 -NCT02385318 -NCT02388516 -NCT02385461 -NCT02388581 -NCT02385487 -NCT02388698 -NCT02385578 -NCT02388750 -NCT02385604 -NCT02388906 -NCT02385617 -NCT02388919 -NCT02385630 -NCT02388932 -NCT02385669 -NCT02389023 -NCT02385812 -NCT02389088 -NCT02385929 -NCT02389101 -NCT02385955 -NCT02389114 -NCT02385994 -NCT02389153 -NCT02386007 -NCT02389192 -NCT02386111 -NCT02389205 -NCT02386137 -NCT02389244 -NCT02386228 -NCT02394834 -NCT02389309 -NCT02392143 -NCT02389335 -NCT02392039 -NCT02389400 -NCT02392156 -NCT02389413 -NCT02392299 -NCT02389517 -NCT02392377 -NCT02389543 -NCT02392403 -NCT02389582 -NCT02392429 -NCT02389634 -NCT02392507 -NCT02389647 -NCT02392572 -NCT02389660 -NCT02392611 -NCT02389673 -NCT02392637 -NCT02389686 -NCT02392676 -NCT02389699 -NCT02392793 -NCT02389751 -NCT02392845 -NCT02389764 -NCT02392871 -NCT02389777 -NCT02393001 -NCT02389803 -NCT02393131 -NCT02389842 -NCT02393157 -NCT02389920 -NCT02393170 -NCT02389972 -NCT02393183 -NCT02389985 -NCT02393209 -NCT02389998 -NCT02393248 -NCT02390063 -NCT02393365 -NCT02390089 -NCT02393430 -NCT02390115 -NCT02393560 -NCT02390154 -NCT02393625 -NCT02390284 -NCT02393664 -NCT02390388 -NCT02393690 -NCT02390427 -NCT02393755 -NCT02390518 -NCT02393794 -NCT02390596 -NCT02393820 -NCT02390635 -NCT02393833 -NCT02390739 -NCT02393859 -NCT02390752 -NCT02394132 -NCT02390843 -NCT02394184 -NCT02390856 -NCT02394197 -NCT02390869 -NCT02394236 -NCT02390882 -NCT02394314 -NCT02390934 -NCT02394327 -NCT02390947 -NCT02394340 -NCT02391012 -NCT02394392 -NCT02391025 -NCT02394431 -NCT02391038 -NCT02394470 -NCT02391051 -NCT02394496 -NCT02391116 -NCT02394535 -NCT02391194 -NCT02394548 -NCT02391220 -NCT02394613 -NCT02391350 -NCT02394626 -NCT02391415 -NCT02394652 -NCT02391454 -NCT02394665 -NCT02391480 -NCT02394678 -NCT02391545 -NCT02394769 -NCT02391662 -NCT02394782 -NCT02391727 -NCT02394795 -NCT02391896 -NCT02394821 -NCT02391987 -NCT02399683 -NCT02394899 -NCT02397200 -NCT02395016 -NCT02397148 -NCT02395068 -NCT02397252 -NCT02395107 -NCT02397304 -NCT02395120 -NCT02397317 -NCT02395172 -NCT02397343 -NCT02395250 -NCT02397408 -NCT02395276 -NCT02397486 -NCT02395471 -NCT02397499 -NCT02395484 -NCT02397525 -NCT02395510 -NCT02397720 -NCT02395523 -NCT02397733 -NCT02395549 -NCT02397785 -NCT02395601 -NCT02397928 -NCT02395614 -NCT02397967 -NCT02395627 -NCT02397993 -NCT02395640 -NCT02398019 -NCT02395666 -NCT02398032 -NCT02395679 -NCT02398058 -NCT02395692 -NCT02398188 -NCT02395705 -NCT02398201 -NCT02395770 -NCT02398214 -NCT02395822 -NCT02398240 -NCT02395848 -NCT02398253 -NCT02395939 -NCT02398344 -NCT02396043 -NCT02398396 -NCT02396108 -NCT02398552 -NCT02396134 -NCT02398656 -NCT02396147 -NCT02398721 -NCT02396212 -NCT02398734 -NCT02396251 -NCT02398773 -NCT02396368 -NCT02398786 -NCT02396420 -NCT02398825 -NCT02396433 -NCT02398864 -NCT02396446 -NCT02398916 -NCT02396498 -NCT02399033 -NCT02396511 -NCT02399059 -NCT02396537 -NCT02399085 -NCT02396589 -NCT02399124 -NCT02396706 -NCT02399137 -NCT02396732 -NCT02399150 -NCT02396745 -NCT02399176 -NCT02396810 -NCT02399189 -NCT02396823 -NCT02399215 -NCT02396849 -NCT02399254 -NCT02396862 -NCT02399306 -NCT02396927 -NCT02399345 -NCT02396940 -NCT02399371 -NCT02396953 -NCT02399410 -NCT02396966 -NCT02399449 -NCT02396992 -NCT02399475 -NCT02397005 -NCT02399566 -NCT02397018 -NCT02399592 -NCT02397057 -NCT02399631 -NCT02397083 -NCT02399670 -NCT02397135 -NCT02405585 -NCT02399735 -NCT02403037 -NCT02399800 -NCT02403024 -NCT02399813 -NCT02403193 -NCT02399839 -NCT02403271 -NCT02399917 -NCT02403310 -NCT02399943 -NCT02403414 -NCT02399969 -NCT02403492 -NCT02400060 -NCT02403505 -NCT02400073 -NCT02403531 -NCT02400190 -NCT02403544 -NCT02400216 -NCT02403687 -NCT02400229 -NCT02403700 -NCT02400242 -NCT02403726 -NCT02400255 -NCT02403752 -NCT02400281 -NCT02403778 -NCT02400359 -NCT02403830 -NCT02400385 -NCT02403843 -NCT02400424 -NCT02403895 -NCT02400437 -NCT02403908 -NCT02400476 -NCT02403921 -NCT02400567 -NCT02403973 -NCT02400580 -NCT02404051 -NCT02400658 -NCT02404064 -NCT02400697 -NCT02404103 -NCT02400775 -NCT02404220 -NCT02400788 -NCT02404285 -NCT02400814 -NCT02404363 -NCT02400866 -NCT02404389 -NCT02400970 -NCT02404428 -NCT02401048 -NCT02404441 -NCT02401295 -NCT02404480 -NCT02401321 -NCT02404493 -NCT02401347 -NCT02404506 -NCT02401542 -NCT02404571 -NCT02401568 -NCT02404623 -NCT02401581 -NCT02404675 -NCT02401685 -NCT02404753 -NCT02401789 -NCT02404844 -NCT02401815 -NCT02404857 -NCT02401919 -NCT02404870 -NCT02401971 -NCT02404883 -NCT02402036 -NCT02404935 -NCT02402062 -NCT02405000 -NCT02402348 -NCT02405065 -NCT02402439 -NCT02405078 -NCT02402543 -NCT02405104 -NCT02402569 -NCT02405143 -NCT02402621 -NCT02405221 -NCT02402712 -NCT02405273 -NCT02402725 -NCT02405312 -NCT02402764 -NCT02405338 -NCT02402803 -NCT02405364 -NCT02402842 -NCT02405416 -NCT02402920 -NCT02405533 -NCT02402972 -NCT02405572 -NCT02403011 -NCT02410785 -NCT02405676 -NCT02408328 -NCT02405780 -NCT02408159 -NCT02405793 -NCT02408393 -NCT02405819 -NCT02408406 -NCT02405858 -NCT02408445 -NCT02405897 -NCT02408523 -NCT02405910 -NCT02408627 -NCT02405949 -NCT02408679 -NCT02405962 -NCT02408692 -NCT02406092 -NCT02408770 -NCT02406118 -NCT02408835 -NCT02406144 -NCT02408861 -NCT02406170 -NCT02408887 -NCT02406183 -NCT02409043 -NCT02406222 -NCT02409108 -NCT02406287 -NCT02409121 -NCT02406326 -NCT02409160 -NCT02406352 -NCT02409199 -NCT02406365 -NCT02409212 -NCT02406391 -NCT02409238 -NCT02406508 -NCT02409251 -NCT02406521 -NCT02409264 -NCT02406547 -NCT02409290 -NCT02406586 -NCT02409316 -NCT02406599 -NCT02409342 -NCT02406742 -NCT02409355 -NCT02406781 -NCT02409368 -NCT02406794 -NCT02409381 -NCT02406820 -NCT02409407 -NCT02406859 -NCT02409472 -NCT02406963 -NCT02409485 -NCT02407002 -NCT02409524 -NCT02407054 -NCT02409576 -NCT02407067 -NCT02409628 -NCT02407080 -NCT02409797 -NCT02407119 -NCT02409849 -NCT02407171 -NCT02409914 -NCT02407366 -NCT02410018 -NCT02407392 -NCT02410135 -NCT02407509 -NCT02410174 -NCT02407535 -NCT02410187 -NCT02407561 -NCT02410226 -NCT02407587 -NCT02410252 -NCT02407600 -NCT02410291 -NCT02407613 -NCT02410304 -NCT02407704 -NCT02410369 -NCT02407795 -NCT02410382 -NCT02407938 -NCT02410486 -NCT02407990 -NCT02410512 -NCT02408003 -NCT02410564 -NCT02408016 -NCT02410577 -NCT02408042 -NCT02410629 -NCT02408068 -NCT02410694 -NCT02408107 -NCT02410733 -NCT02408120 -NCT02410772 -NCT02408133 -NCT02416154 -NCT02410863 -NCT02413580 -NCT02410889 -NCT02413489 -NCT02410993 -NCT02413606 -NCT02411019 -NCT02413671 -NCT02411175 -NCT02413697 -NCT02411266 -NCT02413736 -NCT02411344 -NCT02413788 -NCT02411396 -NCT02413827 -NCT02411448 -NCT02413853 -NCT02411461 -NCT02413944 -NCT02411513 -NCT02414009 -NCT02411565 -NCT02414048 -NCT02411578 -NCT02414139 -NCT02411591 -NCT02414152 -NCT02411617 -NCT02414165 -NCT02411643 -NCT02414191 -NCT02411656 -NCT02414217 -NCT02411682 -NCT02414269 -NCT02411734 -NCT02414295 -NCT02411786 -NCT02414334 -NCT02411825 -NCT02414438 -NCT02411890 -NCT02414516 -NCT02411916 -NCT02414529 -NCT02412020 -NCT02414568 -NCT02412046 -NCT02414659 -NCT02412124 -NCT02414672 -NCT02412137 -NCT02414685 -NCT02412150 -NCT02414724 -NCT02412176 -NCT02414750 -NCT02412228 -NCT02414776 -NCT02412241 -NCT02414789 -NCT02412254 -NCT02414893 -NCT02412267 -NCT02414945 -NCT02412306 -NCT02415023 -NCT02412332 -NCT02415036 -NCT02412371 -NCT02415062 -NCT02412462 -NCT02415101 -NCT02412475 -NCT02415140 -NCT02412527 -NCT02415153 -NCT02412592 -NCT02415179 -NCT02412631 -NCT02415257 -NCT02412670 -NCT02415270 -NCT02412683 -NCT02415361 -NCT02412735 -NCT02415387 -NCT02412826 -NCT02415413 -NCT02412839 -NCT02415465 -NCT02412878 -NCT02415608 -NCT02412956 -NCT02415621 -NCT02413021 -NCT02415699 -NCT02413138 -NCT02415725 -NCT02413268 -NCT02415816 -NCT02413320 -NCT02415829 -NCT02413359 -NCT02415881 -NCT02413437 -NCT02415933 -NCT02413450 -NCT02416063 -NCT02413476 -NCT02421523 -NCT02416167 -NCT02419339 -NCT02416206 -NCT02419287 -NCT02416219 -NCT02419417 -NCT02416336 -NCT02419443 -NCT02416388 -NCT02419456 -NCT02416427 -NCT02419469 -NCT02416440 -NCT02419495 -NCT02416466 -NCT02419534 -NCT02416570 -NCT02419547 -NCT02416609 -NCT02419560 -NCT02416726 -NCT02419586 -NCT02416739 -NCT02419664 -NCT02416752 -NCT02419677 -NCT02416908 -NCT02419742 -NCT02416960 -NCT02419755 -NCT02416999 -NCT02419768 -NCT02417129 -NCT02419807 -NCT02417181 -NCT02419846 -NCT02417285 -NCT02419924 -NCT02417298 -NCT02419950 -NCT02417337 -NCT02420002 -NCT02417480 -NCT02420067 -NCT02417506 -NCT02420093 -NCT02417662 -NCT02420184 -NCT02417701 -NCT02420210 -NCT02417740 -NCT02420223 -NCT02417753 -NCT02420249 -NCT02417896 -NCT02420314 -NCT02417948 -NCT02420405 -NCT02418000 -NCT02420457 -NCT02418039 -NCT02420548 -NCT02418052 -NCT02420561 -NCT02418182 -NCT02420587 -NCT02418195 -NCT02420613 -NCT02418247 -NCT02420652 -NCT02418325 -NCT02420665 -NCT02418390 -NCT02420691 -NCT02418429 -NCT02420717 -NCT02418481 -NCT02420769 -NCT02418507 -NCT02420795 -NCT02418533 -NCT02420821 -NCT02418624 -NCT02420847 -NCT02418689 -NCT02420860 -NCT02418767 -NCT02420873 -NCT02418832 -NCT02420912 -NCT02418858 -NCT02420925 -NCT02418897 -NCT02420938 -NCT02418949 -NCT02420977 -NCT02418988 -NCT02421185 -NCT02419027 -NCT02421276 -NCT02419092 -NCT02421354 -NCT02419105 -NCT02421380 -NCT02419118 -NCT02421406 -NCT02419170 -NCT02421432 -NCT02419209 -NCT02421458 -NCT02419261 -NCT02426424 -NCT02421562 -NCT02423837 -NCT02421575 -NCT02423811 -NCT02421588 -NCT02423863 -NCT02421640 -NCT02423876 -NCT02421705 -NCT02423889 -NCT02421757 -NCT02423902 -NCT02421770 -NCT02423915 -NCT02421822 -NCT02423928 -NCT02421848 -NCT02423954 -NCT02421887 -NCT02423967 -NCT02421926 -NCT02424045 -NCT02421939 -NCT02424123 -NCT02422017 -NCT02424240 -NCT02422030 -NCT02424279 -NCT02422082 -NCT02424305 -NCT02422095 -NCT02424396 -NCT02422108 -NCT02424461 -NCT02422147 -NCT02424474 -NCT02422160 -NCT02424513 -NCT02422199 -NCT02424539 -NCT02422277 -NCT02424617 -NCT02422329 -NCT02424708 -NCT02422381 -NCT02424838 -NCT02422394 -NCT02424851 -NCT02422433 -NCT02424864 -NCT02422459 -NCT02424916 -NCT02422498 -NCT02424955 -NCT02422511 -NCT02424968 -NCT02422524 -NCT02425033 -NCT02422563 -NCT02425059 -NCT02422576 -NCT02425072 -NCT02422589 -NCT02425137 -NCT02422615 -NCT02425150 -NCT02422641 -NCT02425163 -NCT02422680 -NCT02425228 -NCT02422719 -NCT02425280 -NCT02422732 -NCT02425306 -NCT02422745 -NCT02425449 -NCT02422784 -NCT02425475 -NCT02422797 -NCT02425553 -NCT02422953 -NCT02425605 -NCT02422979 -NCT02425631 -NCT02423057 -NCT02425683 -NCT02423083 -NCT02425722 -NCT02423148 -NCT02425735 -NCT02423226 -NCT02425748 -NCT02423239 -NCT02425891 -NCT02423278 -NCT02425904 -NCT02423291 -NCT02425930 -NCT02423343 -NCT02425982 -NCT02423395 -NCT02426034 -NCT02423525 -NCT02426112 -NCT02423564 -NCT02426125 -NCT02423590 -NCT02426281 -NCT02423603 -NCT02426385 -NCT02423720 -NCT02431520 -NCT02426450 -NCT02429362 -NCT02426489 -NCT02429349 -NCT02426515 -NCT02429375 -NCT02426658 -NCT02429427 -NCT02426697 -NCT02429440 -NCT02426723 -NCT02429466 -NCT02426762 -NCT02429479 -NCT02426814 -NCT02429505 -NCT02426853 -NCT02429518 -NCT02426879 -NCT02429544 -NCT02426892 -NCT02429570 -NCT02426905 -NCT02429609 -NCT02426931 -NCT02429622 -NCT02426944 -NCT02429687 -NCT02427009 -NCT02429700 -NCT02427113 -NCT02429765 -NCT02427269 -NCT02429804 -NCT02427295 -NCT02429830 -NCT02427321 -NCT02429843 -NCT02427399 -NCT02429973 -NCT02427451 -NCT02430181 -NCT02427581 -NCT02430194 -NCT02427620 -NCT02430285 -NCT02427646 -NCT02430298 -NCT02427828 -NCT02430363 -NCT02427841 -NCT02430428 -NCT02427893 -NCT02430467 -NCT02427919 -NCT02430480 -NCT02427958 -NCT02430532 -NCT02427984 -NCT02430597 -NCT02428010 -NCT02430610 -NCT02428036 -NCT02430623 -NCT02428062 -NCT02430636 -NCT02428192 -NCT02430649 -NCT02428218 -NCT02430662 -NCT02428270 -NCT02430675 -NCT02428296 -NCT02430688 -NCT02428478 -NCT02430701 -NCT02428530 -NCT02430753 -NCT02428582 -NCT02430766 -NCT02428686 -NCT02430779 -NCT02428712 -NCT02430792 -NCT02428751 -NCT02430948 -NCT02428764 -NCT02430974 -NCT02428842 -NCT02431052 -NCT02428855 -NCT02431117 -NCT02428881 -NCT02431208 -NCT02428920 -NCT02431260 -NCT02428959 -NCT02431351 -NCT02428972 -NCT02431390 -NCT02429037 -NCT02431403 -NCT02429050 -NCT02431416 -NCT02429063 -NCT02431442 -NCT02429089 -NCT02431494 -NCT02429193 -NCT02431507 -NCT02429232 -NCT02437305 -NCT02431533 -NCT02434809 -NCT02431559 -NCT02434731 -NCT02431572 -NCT02434822 -NCT02431624 -NCT02434939 -NCT02431676 -NCT02434991 -NCT02431754 -NCT02435108 -NCT02431806 -NCT02435121 -NCT02431884 -NCT02435147 -NCT02431962 -NCT02435186 -NCT02431988 -NCT02435264 -NCT02432118 -NCT02435303 -NCT02432196 -NCT02435329 -NCT02432209 -NCT02435342 -NCT02432235 -NCT02435381 -NCT02432274 -NCT02435433 -NCT02432326 -NCT02435472 -NCT02432365 -NCT02435524 -NCT02432378 -NCT02435550 -NCT02432417 -NCT02435602 -NCT02432521 -NCT02435680 -NCT02432547 -NCT02435745 -NCT02432612 -NCT02435758 -NCT02432625 -NCT02435810 -NCT02432690 -NCT02435849 -NCT02432729 -NCT02435888 -NCT02432846 -NCT02435927 -NCT02432872 -NCT02435940 -NCT02432911 -NCT02435953 -NCT02432950 -NCT02435966 -NCT02432963 -NCT02435979 -NCT02433002 -NCT02436018 -NCT02433067 -NCT02436070 -NCT02433080 -NCT02436213 -NCT02433197 -NCT02436252 -NCT02433392 -NCT02436343 -NCT02433483 -NCT02436395 -NCT02433535 -NCT02436408 -NCT02433574 -NCT02436499 -NCT02433626 -NCT02436590 -NCT02433639 -NCT02436668 -NCT02433730 -NCT02436681 -NCT02433769 -NCT02436707 -NCT02433795 -NCT02436720 -NCT02433808 -NCT02436733 -NCT02433847 -NCT02436850 -NCT02433938 -NCT02436902 -NCT02434081 -NCT02436993 -NCT02434107 -NCT02437019 -NCT02434146 -NCT02437071 -NCT02434354 -NCT02437136 -NCT02434367 -NCT02437162 -NCT02434432 -NCT02437201 -NCT02434536 -NCT02437227 -NCT02434562 -NCT02437279 -NCT02434575 -NCT02437292 -NCT02434614 -NCT02442674 -NCT02437318 -NCT02440308 -NCT02437370 -NCT02440230 -NCT02437383 -NCT02440334 -NCT02437500 -NCT02440347 -NCT02437539 -NCT02440425 -NCT02437656 -NCT02440438 -NCT02437669 -NCT02440464 -NCT02437760 -NCT02440516 -NCT02437799 -NCT02440568 -NCT02437812 -NCT02440646 -NCT02437851 -NCT02440685 -NCT02437916 -NCT02440737 -NCT02437942 -NCT02440841 -NCT02438007 -NCT02440958 -NCT02438189 -NCT02441049 -NCT02438202 -NCT02441062 -NCT02438358 -NCT02441088 -NCT02438436 -NCT02441140 -NCT02438501 -NCT02441166 -NCT02438579 -NCT02441270 -NCT02438722 -NCT02441309 -NCT02438761 -NCT02441322 -NCT02438852 -NCT02441335 -NCT02438865 -NCT02441413 -NCT02438917 -NCT02441465 -NCT02438995 -NCT02441491 -NCT02439008 -NCT02441517 -NCT02439034 -NCT02441530 -NCT02439047 -NCT02441686 -NCT02439060 -NCT02441803 -NCT02439073 -NCT02441816 -NCT02439086 -NCT02441868 -NCT02439112 -NCT02441894 -NCT02439125 -NCT02441933 -NCT02439138 -NCT02441946 -NCT02439164 -NCT02441972 -NCT02439216 -NCT02441985 -NCT02439242 -NCT02441998 -NCT02439281 -NCT02442063 -NCT02439307 -NCT02442102 -NCT02439385 -NCT02442271 -NCT02439437 -NCT02442284 -NCT02439450 -NCT02442297 -NCT02439489 -NCT02442323 -NCT02439528 -NCT02442336 -NCT02439554 -NCT02442349 -NCT02439567 -NCT02442362 -NCT02439580 -NCT02442375 -NCT02439593 -NCT02442414 -NCT02439645 -NCT02442440 -NCT02439723 -NCT02442466 -NCT02439788 -NCT02442531 -NCT02439892 -NCT02442583 -NCT02439905 -NCT02442635 -NCT02440139 -NCT02442661 -NCT02440178 -NCT02447887 -NCT02442713 -NCT02445664 -NCT02442739 -NCT02445586 -NCT02442765 -NCT02445716 -NCT02442778 -NCT02445755 -NCT02442882 -NCT02445872 -NCT02442999 -NCT02445911 -NCT02443077 -NCT02445976 -NCT02443090 -NCT02446093 -NCT02443103 -NCT02446132 -NCT02443142 -NCT02446145 -NCT02443181 -NCT02446184 -NCT02443246 -NCT02446223 -NCT02443259 -NCT02446236 -NCT02443298 -NCT02446249 -NCT02443311 -NCT02446301 -NCT02443324 -NCT02446366 -NCT02443337 -NCT02446405 -NCT02443415 -NCT02446431 -NCT02443493 -NCT02446444 -NCT02443597 -NCT02446457 -NCT02443623 -NCT02446574 -NCT02443636 -NCT02446600 -NCT02443649 -NCT02446626 -NCT02443740 -NCT02446652 -NCT02443831 -NCT02446665 -NCT02443844 -NCT02446678 -NCT02443883 -NCT02446704 -NCT02443896 -NCT02446769 -NCT02444000 -NCT02446795 -NCT02444026 -NCT02446821 -NCT02444195 -NCT02446860 -NCT02444390 -NCT02446925 -NCT02444546 -NCT02446951 -NCT02444572 -NCT02446964 -NCT02444715 -NCT02447003 -NCT02444741 -NCT02447055 -NCT02444793 -NCT02447120 -NCT02444819 -NCT02447159 -NCT02444884 -NCT02447172 -NCT02444897 -NCT02447211 -NCT02444910 -NCT02447237 -NCT02444936 -NCT02447250 -NCT02444949 -NCT02447263 -NCT02445014 -NCT02447276 -NCT02445027 -NCT02447328 -NCT02445118 -NCT02447380 -NCT02445209 -NCT02447406 -NCT02445248 -NCT02447419 -NCT02445261 -NCT02447549 -NCT02445378 -NCT02447588 -NCT02445391 -NCT02447666 -NCT02445404 -NCT02447679 -NCT02445430 -NCT02447692 -NCT02445456 -NCT02447718 -NCT02445469 -NCT02447731 -NCT02445573 -NCT02452554 -NCT02447900 -NCT02450201 -NCT02447939 -NCT02450188 -NCT02447991 -NCT02450266 -NCT02448069 -NCT02450331 -NCT02448121 -NCT02450474 -NCT02448173 -NCT02450539 -NCT02448225 -NCT02450591 -NCT02448251 -NCT02450630 -NCT02448290 -NCT02450656 -NCT02448303 -NCT02450708 -NCT02448329 -NCT02450825 -NCT02448381 -NCT02450877 -NCT02448420 -NCT02450903 -NCT02448485 -NCT02450942 -NCT02448537 -NCT02450955 -NCT02448576 -NCT02451007 -NCT02448589 -NCT02451111 -NCT02448654 -NCT02451124 -NCT02448693 -NCT02451215 -NCT02448771 -NCT02451345 -NCT02448797 -NCT02451384 -NCT02448810 -NCT02451423 -NCT02448862 -NCT02451462 -NCT02448927 -NCT02451488 -NCT02448953 -NCT02451553 -NCT02448979 -NCT02451657 -NCT02448992 -NCT02451696 -NCT02449083 -NCT02451709 -NCT02449109 -NCT02451735 -NCT02449122 -NCT02451761 -NCT02449161 -NCT02451774 -NCT02449239 -NCT02451787 -NCT02449252 -NCT02451800 -NCT02449265 -NCT02451826 -NCT02449278 -NCT02451865 -NCT02449304 -NCT02451930 -NCT02449343 -NCT02451943 -NCT02449538 -NCT02451956 -NCT02449551 -NCT02451982 -NCT02449564 -NCT02452008 -NCT02449655 -NCT02452073 -NCT02449668 -NCT02452099 -NCT02449681 -NCT02452112 -NCT02449850 -NCT02452164 -NCT02449863 -NCT02452216 -NCT02449902 -NCT02452268 -NCT02449954 -NCT02452281 -NCT02449967 -NCT02452294 -NCT02450019 -NCT02452307 -NCT02450032 -NCT02452333 -NCT02450058 -NCT02452346 -NCT02450097 -NCT02452424 -NCT02450123 -NCT02452437 -NCT02450136 -NCT02452463 -NCT02450149 -NCT02452502 -NCT02450175 -NCT02457897 -NCT02452567 -NCT02454907 -NCT02452671 -NCT02454855 -NCT02452710 -NCT02454933 -NCT02452762 -NCT02454972 -NCT02452775 -NCT02455011 -NCT02452853 -NCT02455076 -NCT02452944 -NCT02455141 -NCT02452970 -NCT02455154 -NCT02452983 -NCT02455245 -NCT02453009 -NCT02455297 -NCT02453087 -NCT02455323 -NCT02453126 -NCT02455362 -NCT02453139 -NCT02455427 -NCT02453191 -NCT02455453 -NCT02453243 -NCT02455544 -NCT02453269 -NCT02455557 -NCT02453282 -NCT02455596 -NCT02453295 -NCT02455622 -NCT02453334 -NCT02455648 -NCT02453360 -NCT02455791 -NCT02453373 -NCT02455804 -NCT02453412 -NCT02455843 -NCT02453438 -NCT02456025 -NCT02453464 -NCT02456051 -NCT02453490 -NCT02456155 -NCT02453503 -NCT02456207 -NCT02453529 -NCT02456246 -NCT02453594 -NCT02456272 -NCT02453620 -NCT02456311 -NCT02453685 -NCT02456350 -NCT02453737 -NCT02456389 -NCT02453984 -NCT02456506 -NCT02454010 -NCT02456649 -NCT02454036 -NCT02456662 -NCT02454062 -NCT02456675 -NCT02454075 -NCT02456701 -NCT02454127 -NCT02456714 -NCT02454140 -NCT02456779 -NCT02454153 -NCT02456857 -NCT02454166 -NCT02456883 -NCT02454179 -NCT02457039 -NCT02454192 -NCT02457065 -NCT02454270 -NCT02457104 -NCT02454283 -NCT02457143 -NCT02454335 -NCT02457156 -NCT02454374 -NCT02457273 -NCT02454426 -NCT02457299 -NCT02454439 -NCT02457338 -NCT02454478 -NCT02457390 -NCT02454517 -NCT02457468 -NCT02454543 -NCT02457637 -NCT02454595 -NCT02457650 -NCT02454634 -NCT02457728 -NCT02454751 -NCT02457793 -NCT02454777 -NCT02457845 -NCT02454842 -NCT02463578 -NCT02457910 -NCT02460874 -NCT02458001 -NCT02460861 -NCT02458014 -NCT02460887 -NCT02458118 -NCT02460913 -NCT02458235 -NCT02460991 -NCT02458326 -NCT02461043 -NCT02458339 -NCT02461056 -NCT02458404 -NCT02461069 -NCT02458417 -NCT02461095 -NCT02458573 -NCT02461121 -NCT02458612 -NCT02461147 -NCT02458638 -NCT02461173 -NCT02458703 -NCT02461303 -NCT02458716 -NCT02461407 -NCT02459041 -NCT02461537 -NCT02459067 -NCT02461550 -NCT02459119 -NCT02461628 -NCT02459132 -NCT02461719 -NCT02459301 -NCT02461784 -NCT02459392 -NCT02461836 -NCT02459431 -NCT02461849 -NCT02459457 -NCT02461862 -NCT02459483 -NCT02461888 -NCT02459600 -NCT02461940 -NCT02459652 -NCT02461966 -NCT02459717 -NCT02461979 -NCT02459769 -NCT02461992 -NCT02459795 -NCT02462018 -NCT02459912 -NCT02462187 -NCT02459951 -NCT02462200 -NCT02459964 -NCT02462213 -NCT02460055 -NCT02462226 -NCT02460068 -NCT02462239 -NCT02460120 -NCT02462265 -NCT02460133 -NCT02462278 -NCT02460159 -NCT02462291 -NCT02460198 -NCT02462356 -NCT02460224 -NCT02462369 -NCT02460237 -NCT02462408 -NCT02460276 -NCT02462486 -NCT02460315 -NCT02462525 -NCT02460367 -NCT02462538 -NCT02460380 -NCT02462629 -NCT02460419 -NCT02462707 -NCT02460432 -NCT02462811 -NCT02460445 -NCT02462954 -NCT02460458 -NCT02463019 -NCT02460471 -NCT02463032 -NCT02460549 -NCT02463045 -NCT02460653 -NCT02463331 -NCT02460679 -NCT02463383 -NCT02460744 -NCT02463435 -NCT02460783 -NCT02463461 -NCT02460809 -NCT02463474 -NCT02460822 -NCT02463539 -NCT02460835 -NCT02468271 -NCT02463656 -NCT02465931 -NCT02463799 -NCT02465892 -NCT02463825 -NCT02465957 -NCT02463851 -NCT02465970 -NCT02463877 -NCT02465983 -NCT02463942 -NCT02466009 -NCT02463968 -NCT02466061 -NCT02463994 -NCT02466113 -NCT02464007 -NCT02466204 -NCT02464124 -NCT02466269 -NCT02464137 -NCT02466308 -NCT02464176 -NCT02466360 -NCT02464215 -NCT02466464 -NCT02464228 -NCT02466477 -NCT02464241 -NCT02466529 -NCT02464319 -NCT02466568 -NCT02464332 -NCT02466633 -NCT02464371 -NCT02466698 -NCT02464553 -NCT02466724 -NCT02464592 -NCT02466737 -NCT02464618 -NCT02466776 -NCT02464644 -NCT02466789 -NCT02464657 -NCT02466802 -NCT02464683 -NCT02466828 -NCT02464696 -NCT02466906 -NCT02464709 -NCT02466932 -NCT02464748 -NCT02466971 -NCT02464761 -NCT02467010 -NCT02464774 -NCT02467049 -NCT02464826 -NCT02467088 -NCT02464839 -NCT02467114 -NCT02464891 -NCT02467127 -NCT02464904 -NCT02467140 -NCT02464982 -NCT02467192 -NCT02464995 -NCT02467244 -NCT02465060 -NCT02467257 -NCT02465112 -NCT02467270 -NCT02465190 -NCT02467361 -NCT02465229 -NCT02467517 -NCT02465268 -NCT02467569 -NCT02465359 -NCT02467582 -NCT02465385 -NCT02467647 -NCT02465502 -NCT02467738 -NCT02465528 -NCT02467751 -NCT02465541 -NCT02467868 -NCT02465580 -NCT02467881 -NCT02465593 -NCT02467907 -NCT02465632 -NCT02467959 -NCT02465645 -NCT02468024 -NCT02465723 -NCT02468037 -NCT02465736 -NCT02468050 -NCT02465749 -NCT02468076 -NCT02465775 -NCT02468141 -NCT02465788 -NCT02468193 -NCT02465814 -NCT02468258 -NCT02465840 -NCT02473159 -NCT02468284 -NCT02470897 -NCT02468362 -NCT02470884 -NCT02468453 -NCT02470910 -NCT02468557 -NCT02470936 -NCT02468596 -NCT02470962 -NCT02468609 -NCT02471014 -NCT02468635 -NCT02471053 -NCT02468648 -NCT02471118 -NCT02468661 -NCT02471261 -NCT02468687 -NCT02471313 -NCT02468726 -NCT02471339 -NCT02468739 -NCT02471352 -NCT02468765 -NCT02471391 -NCT02468778 -NCT02471482 -NCT02468817 -NCT02471495 -NCT02468830 -NCT02471547 -NCT02468882 -NCT02471573 -NCT02468921 -NCT02471599 -NCT02468973 -NCT02471716 -NCT02469012 -NCT02471820 -NCT02469116 -NCT02471846 -NCT02469129 -NCT02471911 -NCT02469298 -NCT02471989 -NCT02469415 -NCT02472080 -NCT02469480 -NCT02472145 -NCT02469493 -NCT02472223 -NCT02469571 -NCT02472249 -NCT02469662 -NCT02472275 -NCT02469675 -NCT02472288 -NCT02469701 -NCT02472340 -NCT02469779 -NCT02472353 -NCT02469805 -NCT02472392 -NCT02469844 -NCT02472418 -NCT02469883 -NCT02472431 -NCT02469922 -NCT02472509 -NCT02469935 -NCT02472548 -NCT02469948 -NCT02472574 -NCT02469974 -NCT02472626 -NCT02470065 -NCT02472665 -NCT02470091 -NCT02472678 -NCT02470117 -NCT02472691 -NCT02470169 -NCT02472808 -NCT02470273 -NCT02472899 -NCT02470299 -NCT02472912 -NCT02470364 -NCT02472938 -NCT02470390 -NCT02472964 -NCT02470468 -NCT02472977 -NCT02470494 -NCT02472990 -NCT02470507 -NCT02473003 -NCT02470533 -NCT02473029 -NCT02470559 -NCT02473042 -NCT02470585 -NCT02473094 -NCT02470663 -NCT02473120 -NCT02470702 -NCT02473133 -NCT02470741 -NCT02473146 -NCT02470819 -NCT02478450 -NCT02473302 -NCT02476175 -NCT02473341 -NCT02476123 -NCT02473380 -NCT02476240 -NCT02473393 -NCT02476279 -NCT02473406 -NCT02476292 -NCT02473523 -NCT02476305 -NCT02473536 -NCT02476357 -NCT02473614 -NCT02476383 -NCT02473653 -NCT02476396 -NCT02473731 -NCT02476409 -NCT02473848 -NCT02476500 -NCT02473861 -NCT02476513 -NCT02473952 -NCT02476526 -NCT02473965 -NCT02476539 -NCT02474004 -NCT02476552 -NCT02474056 -NCT02476617 -NCT02474095 -NCT02476721 -NCT02474108 -NCT02476786 -NCT02474173 -NCT02476864 -NCT02474186 -NCT02476942 -NCT02474251 -NCT02476955 -NCT02474264 -NCT02476968 -NCT02474290 -NCT02477007 -NCT02474355 -NCT02477059 -NCT02474368 -NCT02477124 -NCT02474602 -NCT02477137 -NCT02474615 -NCT02477176 -NCT02474641 -NCT02477202 -NCT02474680 -NCT02477215 -NCT02474706 -NCT02477228 -NCT02474719 -NCT02477254 -NCT02474732 -NCT02477358 -NCT02474745 -NCT02477436 -NCT02474823 -NCT02477488 -NCT02474888 -NCT02477553 -NCT02474914 -NCT02477631 -NCT02474940 -NCT02477644 -NCT02474966 -NCT02477696 -NCT02475005 -NCT02477787 -NCT02475057 -NCT02477813 -NCT02475122 -NCT02477826 -NCT02475213 -NCT02477839 -NCT02475226 -NCT02477878 -NCT02475291 -NCT02477969 -NCT02475317 -NCT02478099 -NCT02475330 -NCT02478112 -NCT02475668 -NCT02478125 -NCT02475681 -NCT02478138 -NCT02475707 -NCT02478164 -NCT02475733 -NCT02478190 -NCT02475772 -NCT02478242 -NCT02475993 -NCT02478320 -NCT02476006 -NCT02478346 -NCT02476019 -NCT02478398 -NCT02476045 -NCT02478411 -NCT02476097 -NCT02484716 -NCT02478502 -NCT02482090 -NCT02478580 -NCT02482025 -NCT02478710 -NCT02482168 -NCT02478866 -NCT02482233 -NCT02478892 -NCT02482311 -NCT02478905 -NCT02482324 -NCT02478957 -NCT02482337 -NCT02478996 -NCT02482350 -NCT02479048 -NCT02482376 -NCT02479074 -NCT02482389 -NCT02479087 -NCT02482415 -NCT02479100 -NCT02482441 -NCT02479178 -NCT02482454 -NCT02479230 -NCT02482467 -NCT02479243 -NCT02482506 -NCT02479295 -NCT02482532 -NCT02479347 -NCT02482740 -NCT02479438 -NCT02482753 -NCT02479490 -NCT02482818 -NCT02479607 -NCT02482909 -NCT02479698 -NCT02483000 -NCT02479945 -NCT02483052 -NCT02479984 -NCT02483104 -NCT02479997 -NCT02483156 -NCT02480010 -NCT02483208 -NCT02480036 -NCT02483247 -NCT02480114 -NCT02483312 -NCT02480283 -NCT02483429 -NCT02480374 -NCT02483637 -NCT02480595 -NCT02483689 -NCT02480608 -NCT02483728 -NCT02480634 -NCT02483767 -NCT02480842 -NCT02483806 -NCT02480881 -NCT02483832 -NCT02480933 -NCT02483858 -NCT02481037 -NCT02483871 -NCT02481050 -NCT02483884 -NCT02481076 -NCT02483923 -NCT02481128 -NCT02484066 -NCT02481154 -NCT02484079 -NCT02481219 -NCT02484092 -NCT02481258 -NCT02484118 -NCT02481297 -NCT02484131 -NCT02481310 -NCT02484261 -NCT02481349 -NCT02484300 -NCT02481414 -NCT02484339 -NCT02481635 -NCT02484391 -NCT02481648 -NCT02484404 -NCT02481661 -NCT02484417 -NCT02481726 -NCT02484430 -NCT02481804 -NCT02484443 -NCT02481830 -NCT02484508 -NCT02481934 -NCT02484560 -NCT02481947 -NCT02484638 -NCT02481960 -NCT02484677 -NCT02481973 -NCT02489929 -NCT02484755 -NCT02487602 -NCT02484846 -NCT02487550 -NCT02484937 -NCT02487615 -NCT02485015 -NCT02487693 -NCT02485119 -NCT02487823 -NCT02485145 -NCT02487836 -NCT02485275 -NCT02487849 -NCT02485340 -NCT02487979 -NCT02485353 -NCT02487992 -NCT02485379 -NCT02488070 -NCT02485418 -NCT02488096 -NCT02485470 -NCT02488122 -NCT02485535 -NCT02488135 -NCT02485548 -NCT02488187 -NCT02485561 -NCT02488200 -NCT02485574 -NCT02488330 -NCT02485652 -NCT02488369 -NCT02485665 -NCT02488382 -NCT02485678 -NCT02488408 -NCT02485691 -NCT02488434 -NCT02485704 -NCT02488512 -NCT02485717 -NCT02488564 -NCT02485743 -NCT02488577 -NCT02485808 -NCT02488603 -NCT02485834 -NCT02488629 -NCT02485964 -NCT02488655 -NCT02485990 -NCT02488694 -NCT02486016 -NCT02488707 -NCT02486042 -NCT02488759 -NCT02486081 -NCT02488772 -NCT02486276 -NCT02488850 -NCT02486302 -NCT02488889 -NCT02486354 -NCT02488967 -NCT02486380 -NCT02489006 -NCT02486497 -NCT02489071 -NCT02486601 -NCT02489110 -NCT02486614 -NCT02489123 -NCT02486653 -NCT02489201 -NCT02486666 -NCT02489214 -NCT02486718 -NCT02489266 -NCT02486731 -NCT02489318 -NCT02486757 -NCT02489357 -NCT02486783 -NCT02489370 -NCT02486809 -NCT02489409 -NCT02486835 -NCT02489422 -NCT02487017 -NCT02489448 -NCT02487069 -NCT02489500 -NCT02487095 -NCT02489604 -NCT02487134 -NCT02489617 -NCT02487225 -NCT02489630 -NCT02487277 -NCT02489695 -NCT02487316 -NCT02489799 -NCT02487394 -NCT02489890 -NCT02487407 -NCT02489903 -NCT02487472 -NCT02489916 -NCT02487524 -NCT02496078 -NCT02490007 -NCT02493374 -NCT02490046 -NCT02493361 -NCT02490059 -NCT02493452 -NCT02490111 -NCT02493517 -NCT02490202 -NCT02493530 -NCT02490358 -NCT02493543 -NCT02490475 -NCT02493582 -NCT02490488 -NCT02493673 -NCT02490527 -NCT02493751 -NCT02490696 -NCT02493829 -NCT02490709 -NCT02493855 -NCT02490735 -NCT02493972 -NCT02490748 -NCT02494011 -NCT02490800 -NCT02494076 -NCT02490878 -NCT02494167 -NCT02490891 -NCT02494206 -NCT02490930 -NCT02494258 -NCT02490943 -NCT02494297 -NCT02490982 -NCT02494310 -NCT02491060 -NCT02494323 -NCT02491099 -NCT02494440 -NCT02491125 -NCT02494466 -NCT02491255 -NCT02494570 -NCT02491281 -NCT02494583 -NCT02491320 -NCT02494596 -NCT02491372 -NCT02494635 -NCT02491411 -NCT02494674 -NCT02491554 -NCT02494687 -NCT02491567 -NCT02494700 -NCT02491632 -NCT02494713 -NCT02491697 -NCT02494791 -NCT02491814 -NCT02494804 -NCT02491840 -NCT02494869 -NCT02491892 -NCT02494882 -NCT02491957 -NCT02494921 -NCT02491983 -NCT02494973 -NCT02492087 -NCT02495090 -NCT02492126 -NCT02495103 -NCT02492295 -NCT02495155 -NCT02492347 -NCT02495168 -NCT02492373 -NCT02495233 -NCT02492503 -NCT02495311 -NCT02492568 -NCT02495376 -NCT02492607 -NCT02495415 -NCT02492711 -NCT02495454 -NCT02492737 -NCT02495493 -NCT02492750 -NCT02495532 -NCT02492789 -NCT02495610 -NCT02492867 -NCT02495636 -NCT02492945 -NCT02495844 -NCT02492984 -NCT02495883 -NCT02493023 -NCT02495896 -NCT02493036 -NCT02495922 -NCT02493049 -NCT02496013 -NCT02493127 -NCT02496065 -NCT02493296 -NCT02501148 -NCT02496104 -NCT02498639 -NCT02496208 -NCT02498613 -NCT02496221 -NCT02498665 -NCT02496273 -NCT02498756 -NCT02496299 -NCT02498860 -NCT02496338 -NCT02498886 -NCT02496429 -NCT02498899 -NCT02496442 -NCT02498912 -NCT02496520 -NCT02498951 -NCT02496546 -NCT02498964 -NCT02496572 -NCT02499003 -NCT02496585 -NCT02499081 -NCT02496624 -NCT02499120 -NCT02496663 -NCT02499146 -NCT02496689 -NCT02499224 -NCT02496715 -NCT02499328 -NCT02496741 -NCT02499367 -NCT02496767 -NCT02499419 -NCT02496780 -NCT02499484 -NCT02496832 -NCT02499497 -NCT02496949 -NCT02499575 -NCT02496988 -NCT02499601 -NCT02497053 -NCT02499614 -NCT02497066 -NCT02499770 -NCT02497079 -NCT02499835 -NCT02497118 -NCT02499848 -NCT02497157 -NCT02499861 -NCT02497183 -NCT02499939 -NCT02497261 -NCT02499952 -NCT02497378 -NCT02500004 -NCT02497404 -NCT02500030 -NCT02497417 -NCT02500043 -NCT02497443 -NCT02500056 -NCT02497508 -NCT02500121 -NCT02497534 -NCT02500147 -NCT02497547 -NCT02500199 -NCT02497586 -NCT02500238 -NCT02497599 -NCT02500264 -NCT02497638 -NCT02500277 -NCT02497664 -NCT02500329 -NCT02497677 -NCT02500407 -NCT02497781 -NCT02500420 -NCT02497820 -NCT02500459 -NCT02497846 -NCT02500550 -NCT02497872 -NCT02500576 -NCT02497898 -NCT02500641 -NCT02497976 -NCT02500693 -NCT02498041 -NCT02500732 -NCT02498275 -NCT02500797 -NCT02498301 -NCT02500901 -NCT02498340 -NCT02500914 -NCT02498353 -NCT02500940 -NCT02498418 -NCT02501070 -NCT02498535 -NCT02501096 -NCT02498587 -NCT02501135 -NCT02498600 -NCT02506634 -NCT02501213 -NCT02504034 -NCT02501239 -NCT02504021 -NCT02501278 -NCT02504047 -NCT02501291 -NCT02504073 -NCT02501304 -NCT02504112 -NCT02501369 -NCT02504164 -NCT02501395 -NCT02504203 -NCT02501460 -NCT02504229 -NCT02501473 -NCT02504333 -NCT02501486 -NCT02504346 -NCT02501551 -NCT02504359 -NCT02501603 -NCT02504372 -NCT02501759 -NCT02504411 -NCT02501876 -NCT02504424 -NCT02501902 -NCT02504489 -NCT02501941 -NCT02504541 -NCT02501954 -NCT02504554 -NCT02502097 -NCT02504671 -NCT02502149 -NCT02504749 -NCT02502266 -NCT02504762 -NCT02502318 -NCT02504788 -NCT02502331 -NCT02504801 -NCT02502370 -NCT02504814 -NCT02502422 -NCT02504840 -NCT02502487 -NCT02504853 -NCT02502630 -NCT02504892 -NCT02502669 -NCT02504931 -NCT02502682 -NCT02504957 -NCT02502708 -NCT02504983 -NCT02502734 -NCT02505048 -NCT02502747 -NCT02505152 -NCT02502760 -NCT02505165 -NCT02502786 -NCT02505269 -NCT02502864 -NCT02505282 -NCT02502890 -NCT02505516 -NCT02502968 -NCT02505750 -NCT02502994 -NCT02505763 -NCT02503072 -NCT02505919 -NCT02503098 -NCT02505932 -NCT02503111 -NCT02505945 -NCT02503150 -NCT02505971 -NCT02503163 -NCT02506023 -NCT02503176 -NCT02506036 -NCT02503189 -NCT02506088 -NCT02503358 -NCT02506114 -NCT02503423 -NCT02506140 -NCT02503501 -NCT02506153 -NCT02503709 -NCT02506166 -NCT02503722 -NCT02506244 -NCT02503748 -NCT02506257 -NCT02503761 -NCT02506387 -NCT02503774 -NCT02506465 -NCT02503891 -NCT02506478 -NCT02503904 -NCT02506517 -NCT02503917 -NCT02506556 -NCT02503943 -NCT02512315 -NCT02506777 -NCT02509702 -NCT02506790 -NCT02509598 -NCT02506803 -NCT02509780 -NCT02506842 -NCT02509806 -NCT02506933 -NCT02509871 -NCT02506959 -NCT02509975 -NCT02507024 -NCT02510001 -NCT02507076 -NCT02510066 -NCT02507102 -NCT02510118 -NCT02507154 -NCT02510261 -NCT02507180 -NCT02510326 -NCT02507232 -NCT02510378 -NCT02507297 -NCT02510430 -NCT02507336 -NCT02510443 -NCT02507375 -NCT02510456 -NCT02507414 -NCT02510469 -NCT02507427 -NCT02510482 -NCT02507479 -NCT02510495 -NCT02507492 -NCT02510638 -NCT02507518 -NCT02510781 -NCT02507544 -NCT02510859 -NCT02507570 -NCT02510872 -NCT02507583 -NCT02510898 -NCT02507661 -NCT02510911 -NCT02507713 -NCT02510950 -NCT02507765 -NCT02510989 -NCT02507778 -NCT02511067 -NCT02507804 -NCT02511106 -NCT02507960 -NCT02511132 -NCT02508038 -NCT02511197 -NCT02508077 -NCT02511223 -NCT02508142 -NCT02511275 -NCT02508207 -NCT02511301 -NCT02508246 -NCT02511327 -NCT02508298 -NCT02511340 -NCT02508324 -NCT02511405 -NCT02508441 -NCT02511431 -NCT02508467 -NCT02511496 -NCT02508532 -NCT02511522 -NCT02508623 -NCT02511600 -NCT02508636 -NCT02511639 -NCT02508870 -NCT02511665 -NCT02508909 -NCT02511678 -NCT02509026 -NCT02511730 -NCT02509039 -NCT02511756 -NCT02509052 -NCT02511795 -NCT02509065 -NCT02511821 -NCT02509143 -NCT02511847 -NCT02509169 -NCT02512120 -NCT02509286 -NCT02512146 -NCT02509364 -NCT02512172 -NCT02509442 -NCT02512237 -NCT02509468 -NCT02512250 -NCT02509507 -NCT02512263 -NCT02509546 -NCT02512276 -NCT02509585 -NCT02517892 -NCT02512328 -NCT02514889 -NCT02512341 -NCT02514837 -NCT02512354 -NCT02514915 -NCT02512380 -NCT02514928 -NCT02512458 -NCT02515006 -NCT02512497 -NCT02515032 -NCT02512575 -NCT02515058 -NCT02512666 -NCT02515084 -NCT02512692 -NCT02515110 -NCT02512913 -NCT02515162 -NCT02512926 -NCT02515227 -NCT02512965 -NCT02515344 -NCT02512978 -NCT02515357 -NCT02513082 -NCT02515435 -NCT02513173 -NCT02515474 -NCT02513186 -NCT02515487 -NCT02513199 -NCT02515513 -NCT02513277 -NCT02515539 -NCT02513342 -NCT02515669 -NCT02513355 -NCT02515734 -NCT02513394 -NCT02515760 -NCT02513472 -NCT02515877 -NCT02513485 -NCT02515903 -NCT02513524 -NCT02516020 -NCT02513563 -NCT02516059 -NCT02513589 -NCT02516085 -NCT02513615 -NCT02516137 -NCT02513667 -NCT02516241 -NCT02513784 -NCT02516371 -NCT02513849 -NCT02516423 -NCT02513914 -NCT02516501 -NCT02513992 -NCT02516527 -NCT02514005 -NCT02516540 -NCT02514031 -NCT02516553 -NCT02514070 -NCT02516670 -NCT02514083 -NCT02516696 -NCT02514174 -NCT02516774 -NCT02514200 -NCT02516813 -NCT02514213 -NCT02516969 -NCT02514239 -NCT02516995 -NCT02514252 -NCT02517034 -NCT02514265 -NCT02517086 -NCT02514278 -NCT02517125 -NCT02514343 -NCT02517151 -NCT02514382 -NCT02517268 -NCT02514421 -NCT02517281 -NCT02514447 -NCT02517359 -NCT02514499 -NCT02517385 -NCT02514512 -NCT02517398 -NCT02514525 -NCT02517489 -NCT02514551 -NCT02517528 -NCT02514603 -NCT02517593 -NCT02514629 -NCT02517736 -NCT02514668 -NCT02517749 -NCT02514681 -NCT02517762 -NCT02514824 -NCT02523378 -NCT02517918 -NCT02520453 -NCT02517931 -NCT02520427 -NCT02517944 -NCT02520492 -NCT02517970 -NCT02520518 -NCT02517983 -NCT02520609 -NCT02518035 -NCT02520622 -NCT02518087 -NCT02520648 -NCT02518100 -NCT02520752 -NCT02518113 -NCT02520778 -NCT02518191 -NCT02520791 -NCT02518256 -NCT02520817 -NCT02518308 -NCT02520856 -NCT02518347 -NCT02520882 -NCT02518373 -NCT02521051 -NCT02518412 -NCT02521090 -NCT02518451 -NCT02521129 -NCT02518464 -NCT02521142 -NCT02518477 -NCT02521181 -NCT02518529 -NCT02521194 -NCT02518542 -NCT02521285 -NCT02518555 -NCT02521298 -NCT02518685 -NCT02521324 -NCT02518750 -NCT02521363 -NCT02518802 -NCT02521493 -NCT02518854 -NCT02521558 -NCT02518945 -NCT02521623 -NCT02518958 -NCT02521649 -NCT02518997 -NCT02521818 -NCT02519114 -NCT02521844 -NCT02519140 -NCT02521870 -NCT02519231 -NCT02521922 -NCT02519244 -NCT02521961 -NCT02519270 -NCT02522000 -NCT02519322 -NCT02522013 -NCT02519348 -NCT02522091 -NCT02519361 -NCT02522195 -NCT02519387 -NCT02522273 -NCT02519452 -NCT02522299 -NCT02519491 -NCT02522351 -NCT02519556 -NCT02522364 -NCT02519582 -NCT02522403 -NCT02519621 -NCT02522455 -NCT02519712 -NCT02522520 -NCT02519764 -NCT02522611 -NCT02519816 -NCT02522715 -NCT02519868 -NCT02522819 -NCT02519972 -NCT02522910 -NCT02520011 -NCT02523014 -NCT02520063 -NCT02523040 -NCT02520102 -NCT02523053 -NCT02520115 -NCT02523066 -NCT02520128 -NCT02523170 -NCT02520141 -NCT02523235 -NCT02520154 -NCT02523313 -NCT02520219 -NCT02523365 -NCT02520258 -NCT02528357 -NCT02523404 -NCT02525757 -NCT02523417 -NCT02525718 -NCT02523430 -NCT02525822 -NCT02523443 -NCT02525913 -NCT02523469 -NCT02525952 -NCT02523521 -NCT02525965 -NCT02523586 -NCT02525991 -NCT02523612 -NCT02526017 -NCT02523625 -NCT02526043 -NCT02523638 -NCT02526134 -NCT02523703 -NCT02526160 -NCT02523781 -NCT02526264 -NCT02523807 -NCT02526316 -NCT02523833 -NCT02526368 -NCT02523885 -NCT02526498 -NCT02523911 -NCT02526511 -NCT02523924 -NCT02526602 -NCT02523950 -NCT02526628 -NCT02523963 -NCT02526654 -NCT02523976 -NCT02526680 -NCT02523989 -NCT02526693 -NCT02524041 -NCT02526719 -NCT02524080 -NCT02526771 -NCT02524106 -NCT02526784 -NCT02524119 -NCT02526823 -NCT02524236 -NCT02526836 -NCT02524262 -NCT02526849 -NCT02524275 -NCT02526927 -NCT02524405 -NCT02526953 -NCT02524470 -NCT02526979 -NCT02524548 -NCT02527174 -NCT02524665 -NCT02527187 -NCT02524756 -NCT02527213 -NCT02524782 -NCT02527226 -NCT02524860 -NCT02527278 -NCT02524925 -NCT02527304 -NCT02524951 -NCT02527317 -NCT02524990 -NCT02527382 -NCT02525055 -NCT02527434 -NCT02525068 -NCT02527486 -NCT02525159 -NCT02527577 -NCT02525172 -NCT02527707 -NCT02525211 -NCT02527746 -NCT02525224 -NCT02527759 -NCT02525237 -NCT02527772 -NCT02525250 -NCT02527785 -NCT02525276 -NCT02527824 -NCT02525380 -NCT02527889 -NCT02525497 -NCT02527954 -NCT02525536 -NCT02528110 -NCT02525549 -NCT02528123 -NCT02525562 -NCT02528175 -NCT02525640 -NCT02528188 -NCT02525653 -NCT02528266 -NCT02525666 -NCT02528279 -NCT02525692 -NCT02533817 -NCT02528370 -NCT02531464 -NCT02528383 -NCT02531425 -NCT02528526 -NCT02531503 -NCT02528643 -NCT02531516 -NCT02528760 -NCT02531542 -NCT02528877 -NCT02531568 -NCT02528942 -NCT02531581 -NCT02528955 -NCT02531594 -NCT02529007 -NCT02531620 -NCT02529072 -NCT02531633 -NCT02529150 -NCT02531685 -NCT02529280 -NCT02531737 -NCT02529306 -NCT02531802 -NCT02529332 -NCT02531841 -NCT02529345 -NCT02531854 -NCT02529540 -NCT02531906 -NCT02529553 -NCT02531919 -NCT02529579 -NCT02531932 -NCT02529735 -NCT02531971 -NCT02529748 -NCT02531997 -NCT02529761 -NCT02532010 -NCT02529774 -NCT02532075 -NCT02529813 -NCT02532114 -NCT02529826 -NCT02532140 -NCT02529852 -NCT02532192 -NCT02529878 -NCT02532231 -NCT02529930 -NCT02532257 -NCT02529995 -NCT02532322 -NCT02530034 -NCT02532361 -NCT02530047 -NCT02532400 -NCT02530125 -NCT02532426 -NCT02530151 -NCT02532543 -NCT02530229 -NCT02532608 -NCT02530281 -NCT02532634 -NCT02530294 -NCT02532660 -NCT02530320 -NCT02532803 -NCT02530346 -NCT02532816 -NCT02530398 -NCT02532868 -NCT02530411 -NCT02532894 -NCT02530424 -NCT02532907 -NCT02530437 -NCT02532920 -NCT02530463 -NCT02532972 -NCT02530476 -NCT02533011 -NCT02530489 -NCT02533089 -NCT02530502 -NCT02533154 -NCT02530515 -NCT02533271 -NCT02530580 -NCT02533323 -NCT02530593 -NCT02533401 -NCT02530606 -NCT02533518 -NCT02530619 -NCT02533674 -NCT02530736 -NCT02533687 -NCT02530762 -NCT02533700 -NCT02530931 -NCT02533739 -NCT02531217 -NCT02533765 -NCT02531308 -NCT02533778 -NCT02531412 -NCT02539121 -NCT02533869 -NCT02536378 -NCT02533895 -NCT02536339 -NCT02533947 -NCT02536391 -NCT02533999 -NCT02536469 -NCT02534051 -NCT02536495 -NCT02534181 -NCT02536586 -NCT02534194 -NCT02536638 -NCT02534220 -NCT02536677 -NCT02534233 -NCT02536742 -NCT02534246 -NCT02536794 -NCT02534337 -NCT02537106 -NCT02534376 -NCT02537158 -NCT02534389 -NCT02537171 -NCT02534428 -NCT02537223 -NCT02534493 -NCT02537249 -NCT02534506 -NCT02537353 -NCT02534519 -NCT02537431 -NCT02534571 -NCT02537444 -NCT02534623 -NCT02537483 -NCT02534649 -NCT02537548 -NCT02534714 -NCT02537561 -NCT02534727 -NCT02537600 -NCT02534779 -NCT02537613 -NCT02534922 -NCT02537626 -NCT02534961 -NCT02537834 -NCT02535013 -NCT02537847 -NCT02535026 -NCT02537860 -NCT02535078 -NCT02537925 -NCT02535091 -NCT02537977 -NCT02535117 -NCT02538042 -NCT02535221 -NCT02538120 -NCT02535247 -NCT02538133 -NCT02535260 -NCT02538198 -NCT02535273 -NCT02538276 -NCT02535286 -NCT02538289 -NCT02535312 -NCT02538328 -NCT02535325 -NCT02538380 -NCT02535338 -NCT02538432 -NCT02535351 -NCT02538471 -NCT02535364 -NCT02538484 -NCT02535507 -NCT02538510 -NCT02535533 -NCT02538523 -NCT02535650 -NCT02538575 -NCT02535806 -NCT02538614 -NCT02535858 -NCT02538627 -NCT02535871 -NCT02538666 -NCT02535949 -NCT02538731 -NCT02535988 -NCT02538770 -NCT02536014 -NCT02538783 -NCT02536027 -NCT02538822 -NCT02536079 -NCT02538861 -NCT02536144 -NCT02538913 -NCT02536183 -NCT02538926 -NCT02536274 -NCT02538965 -NCT02536287 -NCT02539017 -NCT02536300 -NCT02544945 -NCT02539134 -NCT02542111 -NCT02539160 -NCT02542098 -NCT02539212 -NCT02542124 -NCT02539225 -NCT02542137 -NCT02539290 -NCT02542202 -NCT02539355 -NCT02542254 -NCT02539433 -NCT02542293 -NCT02539472 -NCT02542332 -NCT02539537 -NCT02542397 -NCT02539615 -NCT02542514 -NCT02539680 -NCT02542657 -NCT02539706 -NCT02542735 -NCT02539719 -NCT02542878 -NCT02539784 -NCT02542891 -NCT02539810 -NCT02542930 -NCT02539836 -NCT02543255 -NCT02540031 -NCT02543294 -NCT02540083 -NCT02543320 -NCT02540096 -NCT02543385 -NCT02540135 -NCT02543411 -NCT02540148 -NCT02543476 -NCT02540161 -NCT02543541 -NCT02540174 -NCT02543606 -NCT02540187 -NCT02543645 -NCT02540291 -NCT02543658 -NCT02540330 -NCT02543697 -NCT02540356 -NCT02543710 -NCT02540382 -NCT02543749 -NCT02540421 -NCT02543775 -NCT02540499 -NCT02543801 -NCT02540512 -NCT02543879 -NCT02540538 -NCT02543892 -NCT02540551 -NCT02543905 -NCT02540668 -NCT02544100 -NCT02540694 -NCT02544165 -NCT02540824 -NCT02544191 -NCT02540876 -NCT02544217 -NCT02540928 -NCT02544230 -NCT02541058 -NCT02544243 -NCT02541162 -NCT02544282 -NCT02541253 -NCT02544425 -NCT02541292 -NCT02544438 -NCT02541331 -NCT02544477 -NCT02541370 -NCT02544529 -NCT02541383 -NCT02544633 -NCT02541409 -NCT02544659 -NCT02541461 -NCT02544672 -NCT02541487 -NCT02544685 -NCT02541565 -NCT02544711 -NCT02541604 -NCT02544724 -NCT02541617 -NCT02544737 -NCT02541864 -NCT02544750 -NCT02541877 -NCT02544763 -NCT02541903 -NCT02544789 -NCT02541942 -NCT02544880 -NCT02542046 -NCT02549859 -NCT02544958 -NCT02547441 -NCT02544984 -NCT02547363 -NCT02544997 -NCT02547480 -NCT02545010 -NCT02547636 -NCT02545036 -NCT02547662 -NCT02545075 -NCT02547753 -NCT02545114 -NCT02547792 -NCT02545270 -NCT02547857 -NCT02545283 -NCT02547896 -NCT02545322 -NCT02547948 -NCT02545361 -NCT02547961 -NCT02545387 -NCT02547987 -NCT02545504 -NCT02548117 -NCT02545556 -NCT02548143 -NCT02545686 -NCT02548169 -NCT02545699 -NCT02548195 -NCT02545751 -NCT02548221 -NCT02545777 -NCT02548234 -NCT02545868 -NCT02548338 -NCT02545907 -NCT02548377 -NCT02546102 -NCT02548390 -NCT02546167 -NCT02548403 -NCT02546193 -NCT02548468 -NCT02546232 -NCT02548481 -NCT02546284 -NCT02548494 -NCT02546323 -NCT02548585 -NCT02546388 -NCT02548637 -NCT02546414 -NCT02548715 -NCT02546427 -NCT02548767 -NCT02546440 -NCT02548780 -NCT02546453 -NCT02548793 -NCT02546466 -NCT02548806 -NCT02546518 -NCT02548832 -NCT02546531 -NCT02548910 -NCT02546544 -NCT02548962 -NCT02546596 -NCT02548975 -NCT02546622 -NCT02549053 -NCT02546661 -NCT02549196 -NCT02546674 -NCT02549209 -NCT02546739 -NCT02549261 -NCT02546752 -NCT02549274 -NCT02546843 -NCT02549300 -NCT02546856 -NCT02549339 -NCT02546921 -NCT02549352 -NCT02546934 -NCT02549430 -NCT02546986 -NCT02549456 -NCT02547064 -NCT02549495 -NCT02547090 -NCT02549612 -NCT02547103 -NCT02549651 -NCT02547142 -NCT02549664 -NCT02547168 -NCT02549677 -NCT02547233 -NCT02549742 -NCT02547246 -NCT02549755 -NCT02547298 -NCT02549768 -NCT02547324 -NCT02549833 -NCT02547350 -NCT02555358 -NCT02549911 -NCT02552628 -NCT02549937 -NCT02552615 -NCT02549989 -NCT02552641 -NCT02550041 -NCT02552771 -NCT02550119 -NCT02552875 -NCT02550184 -NCT02552953 -NCT02550210 -NCT02552966 -NCT02550236 -NCT02553005 -NCT02550249 -NCT02553083 -NCT02550288 -NCT02553096 -NCT02550314 -NCT02553174 -NCT02550327 -NCT02553187 -NCT02550366 -NCT02553200 -NCT02550457 -NCT02553265 -NCT02550496 -NCT02553304 -NCT02550535 -NCT02553343 -NCT02550665 -NCT02553447 -NCT02550678 -NCT02553460 -NCT02550743 -NCT02553499 -NCT02550756 -NCT02553525 -NCT02550769 -NCT02553590 -NCT02550925 -NCT02553642 -NCT02551055 -NCT02553707 -NCT02551068 -NCT02553746 -NCT02551081 -NCT02553798 -NCT02551120 -NCT02553889 -NCT02551159 -NCT02553941 -NCT02551185 -NCT02553954 -NCT02551211 -NCT02553967 -NCT02551237 -NCT02554097 -NCT02551263 -NCT02554188 -NCT02551341 -NCT02554201 -NCT02551367 -NCT02554240 -NCT02551432 -NCT02554331 -NCT02551458 -NCT02554344 -NCT02551588 -NCT02554422 -NCT02551718 -NCT02554448 -NCT02551744 -NCT02554526 -NCT02551757 -NCT02554552 -NCT02551783 -NCT02554565 -NCT02551822 -NCT02554773 -NCT02551848 -NCT02554812 -NCT02551887 -NCT02554838 -NCT02551991 -NCT02554851 -NCT02552004 -NCT02554890 -NCT02552017 -NCT02555007 -NCT02552121 -NCT02555033 -NCT02552225 -NCT02555137 -NCT02552251 -NCT02555163 -NCT02552290 -NCT02555176 -NCT02552394 -NCT02555189 -NCT02552420 -NCT02555215 -NCT02552433 -NCT02555280 -NCT02552459 -NCT02555332 -NCT02552485 -NCT02555345 -NCT02552576 -NCT02560376 -NCT02555384 -NCT02558140 -NCT02555397 -NCT02558101 -NCT02555462 -NCT02558348 -NCT02555514 -NCT02558374 -NCT02555644 -NCT02558387 -NCT02555657 -NCT02558400 -NCT02555683 -NCT02558478 -NCT02555735 -NCT02558504 -NCT02555748 -NCT02558569 -NCT02555878 -NCT02558712 -NCT02555943 -NCT02558803 -NCT02555969 -NCT02558816 -NCT02555982 -NCT02558842 -NCT02556034 -NCT02558855 -NCT02556047 -NCT02558868 -NCT02556086 -NCT02558894 -NCT02556216 -NCT02558933 -NCT02556281 -NCT02558946 -NCT02556346 -NCT02558959 -NCT02556411 -NCT02558972 -NCT02556437 -NCT02558998 -NCT02556463 -NCT02559011 -NCT02556515 -NCT02559024 -NCT02556528 -NCT02559063 -NCT02556554 -NCT02559115 -NCT02556593 -NCT02559128 -NCT02556619 -NCT02559154 -NCT02556632 -NCT02559206 -NCT02556658 -NCT02559219 -NCT02556710 -NCT02559310 -NCT02556749 -NCT02559336 -NCT02556762 -NCT02559362 -NCT02556827 -NCT02559427 -NCT02556866 -NCT02559479 -NCT02556892 -NCT02559492 -NCT02556918 -NCT02559518 -NCT02556931 -NCT02559557 -NCT02556944 -NCT02559570 -NCT02557061 -NCT02559674 -NCT02557126 -NCT02559687 -NCT02557243 -NCT02559765 -NCT02557321 -NCT02559778 -NCT02557399 -NCT02559817 -NCT02557412 -NCT02559934 -NCT02557464 -NCT02560012 -NCT02557490 -NCT02560025 -NCT02557503 -NCT02560038 -NCT02557516 -NCT02560051 -NCT02557529 -NCT02560129 -NCT02557737 -NCT02560181 -NCT02557776 -NCT02560194 -NCT02557828 -NCT02560259 -NCT02557841 -NCT02560298 -NCT02557854 -NCT02560337 -NCT02557906 -NCT02560350 -NCT02557932 -NCT02565628 -NCT02560441 -NCT02562963 -NCT02560467 -NCT02562911 -NCT02560480 -NCT02563002 -NCT02560493 -NCT02563054 -NCT02560571 -NCT02563067 -NCT02560584 -NCT02563080 -NCT02560623 -NCT02563093 -NCT02560636 -NCT02563158 -NCT02560662 -NCT02563184 -NCT02560740 -NCT02563288 -NCT02560779 -NCT02563379 -NCT02560818 -NCT02563548 -NCT02560883 -NCT02563561 -NCT02560974 -NCT02563626 -NCT02561026 -NCT02563691 -NCT02561039 -NCT02563873 -NCT02561091 -NCT02563886 -NCT02561117 -NCT02563925 -NCT02561143 -NCT02563951 -NCT02561182 -NCT02563977 -NCT02561208 -NCT02564016 -NCT02561234 -NCT02564107 -NCT02561273 -NCT02564146 -NCT02561312 -NCT02564198 -NCT02561455 -NCT02564237 -NCT02561468 -NCT02564263 -NCT02561494 -NCT02564276 -NCT02561533 -NCT02564367 -NCT02561546 -NCT02564380 -NCT02561611 -NCT02564497 -NCT02561663 -NCT02564536 -NCT02561728 -NCT02564549 -NCT02561793 -NCT02564614 -NCT02561819 -NCT02564666 -NCT02561832 -NCT02564744 -NCT02561845 -NCT02564835 -NCT02561910 -NCT02564848 -NCT02561923 -NCT02564874 -NCT02561936 -NCT02564887 -NCT02561962 -NCT02564900 -NCT02561988 -NCT02564952 -NCT02562027 -NCT02564978 -NCT02562118 -NCT02565082 -NCT02562170 -NCT02565095 -NCT02562365 -NCT02565160 -NCT02562378 -NCT02565303 -NCT02562443 -NCT02565342 -NCT02562508 -NCT02565368 -NCT02562599 -NCT02565407 -NCT02562612 -NCT02565433 -NCT02562625 -NCT02565446 -NCT02562638 -NCT02565498 -NCT02562716 -NCT02565524 -NCT02562729 -NCT02565563 -NCT02562755 -NCT02565576 -NCT02562898 -NCT02571569 -NCT02565641 -NCT02568566 -NCT02565654 -NCT02568553 -NCT02565667 -NCT02568657 -NCT02565706 -NCT02568683 -NCT02565758 -NCT02568748 -NCT02565836 -NCT02568826 -NCT02565849 -NCT02568839 -NCT02565901 -NCT02568891 -NCT02565940 -NCT02568982 -NCT02565992 -NCT02569164 -NCT02566096 -NCT02569242 -NCT02566109 -NCT02569294 -NCT02566265 -NCT02569307 -NCT02566304 -NCT02569320 -NCT02566395 -NCT02569398 -NCT02566408 -NCT02569450 -NCT02566421 -NCT02569489 -NCT02566447 -NCT02569645 -NCT02566551 -NCT02569658 -NCT02566655 -NCT02569697 -NCT02566772 -NCT02569723 -NCT02566811 -NCT02569788 -NCT02566876 -NCT02569801 -NCT02566889 -NCT02569827 -NCT02566902 -NCT02569918 -NCT02566993 -NCT02569957 -NCT02567045 -NCT02569970 -NCT02567084 -NCT02569996 -NCT02567162 -NCT02570100 -NCT02567253 -NCT02570165 -NCT02567331 -NCT02570308 -NCT02567383 -NCT02570386 -NCT02567396 -NCT02570399 -NCT02567409 -NCT02570477 -NCT02567422 -NCT02570529 -NCT02567435 -NCT02570542 -NCT02567448 -NCT02570568 -NCT02567461 -NCT02570581 -NCT02567500 -NCT02570698 -NCT02567539 -NCT02570711 -NCT02567643 -NCT02570776 -NCT02567656 -NCT02570789 -NCT02567708 -NCT02570815 -NCT02567734 -NCT02570828 -NCT02567799 -NCT02570867 -NCT02567851 -NCT02570893 -NCT02567877 -NCT02570919 -NCT02567929 -NCT02570958 -NCT02567942 -NCT02571036 -NCT02568033 -NCT02571088 -NCT02568046 -NCT02571374 -NCT02568241 -NCT02571439 -NCT02568267 -NCT02571478 -NCT02568319 -NCT02571530 -NCT02568449 -NCT02571543 -NCT02568488 -NCT02576626 -NCT02571582 -NCT02574377 -NCT02571660 -NCT02574364 -NCT02571686 -NCT02574403 -NCT02571725 -NCT02574455 -NCT02571829 -NCT02574507 -NCT02571868 -NCT02574533 -NCT02571894 -NCT02574546 -NCT02571946 -NCT02574559 -NCT02571998 -NCT02574598 -NCT02572050 -NCT02574663 -NCT02572076 -NCT02574676 -NCT02572141 -NCT02574728 -NCT02572167 -NCT02574793 -NCT02572193 -NCT02574819 -NCT02572232 -NCT02574910 -NCT02572284 -NCT02574975 -NCT02572336 -NCT02575014 -NCT02572414 -NCT02575027 -NCT02572453 -NCT02575066 -NCT02572479 -NCT02575144 -NCT02572492 -NCT02575157 -NCT02572544 -NCT02575222 -NCT02572583 -NCT02575261 -NCT02572596 -NCT02575287 -NCT02572661 -NCT02575300 -NCT02572687 -NCT02575339 -NCT02572713 -NCT02575365 -NCT02572804 -NCT02575378 -NCT02572843 -NCT02575404 -NCT02572869 -NCT02575508 -NCT02573012 -NCT02575521 -NCT02573051 -NCT02575612 -NCT02573194 -NCT02575638 -NCT02573220 -NCT02575729 -NCT02573233 -NCT02575742 -NCT02573259 -NCT02575781 -NCT02573272 -NCT02575794 -NCT02573324 -NCT02575807 -NCT02573363 -NCT02575859 -NCT02573389 -NCT02575872 -NCT02573428 -NCT02575898 -NCT02573441 -NCT02575963 -NCT02573493 -NCT02576080 -NCT02573506 -NCT02576106 -NCT02573571 -NCT02576275 -NCT02573740 -NCT02576301 -NCT02573870 -NCT02576431 -NCT02573896 -NCT02576444 -NCT02573935 -NCT02576470 -NCT02573974 -NCT02576496 -NCT02574013 -NCT02576509 -NCT02574039 -NCT02576522 -NCT02574078 -NCT02576535 -NCT02574195 -NCT02576548 -NCT02574260 -NCT02576574 -NCT02574273 -NCT02581709 -NCT02576652 -NCT02579473 -NCT02576665 -NCT02579460 -NCT02576756 -NCT02579551 -NCT02576795 -NCT02579564 -NCT02576808 -NCT02579616 -NCT02576821 -NCT02579681 -NCT02576847 -NCT02579694 -NCT02576860 -NCT02579720 -NCT02576873 -NCT02579811 -NCT02576925 -NCT02579824 -NCT02576964 -NCT02579863 -NCT02576977 -NCT02579954 -NCT02576990 -NCT02579967 -NCT02577055 -NCT02579980 -NCT02577094 -NCT02580006 -NCT02577120 -NCT02580032 -NCT02577133 -NCT02580058 -NCT02577159 -NCT02580071 -NCT02577172 -NCT02580084 -NCT02577237 -NCT02580175 -NCT02577341 -NCT02580253 -NCT02577367 -NCT02580279 -NCT02577393 -NCT02580344 -NCT02577406 -NCT02580396 -NCT02577419 -NCT02580422 -NCT02577458 -NCT02580448 -NCT02577536 -NCT02580474 -NCT02577588 -NCT02580487 -NCT02577783 -NCT02580539 -NCT02577861 -NCT02580552 -NCT02578108 -NCT02580656 -NCT02578121 -NCT02580669 -NCT02578134 -NCT02580708 -NCT02578186 -NCT02580747 -NCT02578316 -NCT02580799 -NCT02578368 -NCT02580916 -NCT02578394 -NCT02580929 -NCT02578459 -NCT02580981 -NCT02578511 -NCT02580994 -NCT02578524 -NCT02581007 -NCT02578602 -NCT02581059 -NCT02578641 -NCT02581085 -NCT02578667 -NCT02581137 -NCT02578680 -NCT02581176 -NCT02578732 -NCT02581215 -NCT02578797 -NCT02581241 -NCT02578888 -NCT02581358 -NCT02578940 -NCT02581384 -NCT02579005 -NCT02581397 -NCT02579083 -NCT02581423 -NCT02579096 -NCT02581462 -NCT02579148 -NCT02581501 -NCT02579200 -NCT02581514 -NCT02579226 -NCT02581527 -NCT02579252 -NCT02581670 -NCT02579330 -NCT02586337 -NCT02581748 -NCT02584270 -NCT02581761 -NCT02584244 -NCT02581787 -NCT02584296 -NCT02581813 -NCT02584309 -NCT02581839 -NCT02584322 -NCT02581878 -NCT02584400 -NCT02581930 -NCT02584413 -NCT02581943 -NCT02584426 -NCT02581956 -NCT02584465 -NCT02581982 -NCT02584478 -NCT02582008 -NCT02584517 -NCT02582021 -NCT02584556 -NCT02582060 -NCT02584582 -NCT02582125 -NCT02584595 -NCT02582151 -NCT02584634 -NCT02582164 -NCT02584647 -NCT02582177 -NCT02584699 -NCT02582307 -NCT02584712 -NCT02582320 -NCT02584738 -NCT02582359 -NCT02584790 -NCT02582411 -NCT02584829 -NCT02582424 -NCT02584920 -NCT02582450 -NCT02584933 -NCT02582541 -NCT02584985 -NCT02582697 -NCT02584998 -NCT02582723 -NCT02585089 -NCT02582749 -NCT02585219 -NCT02582762 -NCT02585271 -NCT02582801 -NCT02585323 -NCT02582918 -NCT02585362 -NCT02582931 -NCT02585388 -NCT02582970 -NCT02585479 -NCT02582996 -NCT02585492 -NCT02583035 -NCT02585518 -NCT02583100 -NCT02585583 -NCT02583126 -NCT02585674 -NCT02583139 -NCT02585687 -NCT02583152 -NCT02585713 -NCT02583165 -NCT02585739 -NCT02583191 -NCT02585765 -NCT02583204 -NCT02585778 -NCT02583269 -NCT02585791 -NCT02583282 -NCT02585817 -NCT02583360 -NCT02585843 -NCT02583451 -NCT02585856 -NCT02583477 -NCT02585908 -NCT02583516 -NCT02585947 -NCT02583542 -NCT02585973 -NCT02583568 -NCT02586012 -NCT02583646 -NCT02586025 -NCT02583737 -NCT02586038 -NCT02583763 -NCT02586129 -NCT02583828 -NCT02586142 -NCT02583893 -NCT02586207 -NCT02583932 -NCT02586285 -NCT02584179 -NCT02592473 -NCT02586350 -NCT02589600 -NCT02586402 -NCT02589522 -NCT02586506 -NCT02589821 -NCT02586610 -NCT02589847 -NCT02586623 -NCT02589860 -NCT02586675 -NCT02589925 -NCT02586701 -NCT02589938 -NCT02586753 -NCT02589964 -NCT02586857 -NCT02589977 -NCT02586961 -NCT02590003 -NCT02586987 -NCT02590055 -NCT02587000 -NCT02590107 -NCT02587078 -NCT02590133 -NCT02587169 -NCT02590263 -NCT02587247 -NCT02590315 -NCT02587494 -NCT02590380 -NCT02587546 -NCT02590393 -NCT02587559 -NCT02590432 -NCT02587598 -NCT02590458 -NCT02587624 -NCT02590484 -NCT02587650 -NCT02590497 -NCT02587663 -NCT02590510 -NCT02587689 -NCT02590588 -NCT02587715 -NCT02590666 -NCT02587806 -NCT02590809 -NCT02587819 -NCT02590952 -NCT02587871 -NCT02590965 -NCT02587884 -NCT02590978 -NCT02587923 -NCT02591017 -NCT02587962 -NCT02591030 -NCT02588001 -NCT02591095 -NCT02588092 -NCT02591134 -NCT02588131 -NCT02591381 -NCT02588170 -NCT02591394 -NCT02588248 -NCT02591407 -NCT02588261 -NCT02591433 -NCT02588404 -NCT02591446 -NCT02588443 -NCT02591550 -NCT02588456 -NCT02591615 -NCT02588469 -NCT02591641 -NCT02588495 -NCT02591654 -NCT02588560 -NCT02591667 -NCT02588612 -NCT02591836 -NCT02588638 -NCT02591888 -NCT02588651 -NCT02591901 -NCT02588677 -NCT02592070 -NCT02588755 -NCT02592083 -NCT02588781 -NCT02592304 -NCT02588846 -NCT02592317 -NCT02589041 -NCT02592356 -NCT02589145 -NCT02592369 -NCT02589249 -NCT02592395 -NCT02589366 -NCT02592408 -NCT02589431 -NCT02592434 -NCT02589483 -NCT02592447 -NCT02589496 -NCT02597621 -NCT02592538 -NCT02595242 -NCT02592551 -NCT02595138 -NCT02592577 -NCT02595255 -NCT02592629 -NCT02595281 -NCT02592642 -NCT02595307 -NCT02592681 -NCT02595320 -NCT02592707 -NCT02595372 -NCT02592746 -NCT02595424 -NCT02592759 -NCT02595489 -NCT02592785 -NCT02595515 -NCT02592811 -NCT02595554 -NCT02592837 -NCT02595567 -NCT02592863 -NCT02595723 -NCT02592876 -NCT02595775 -NCT02592967 -NCT02595827 -NCT02593019 -NCT02595840 -NCT02593045 -NCT02595866 -NCT02593123 -NCT02595879 -NCT02593175 -NCT02595892 -NCT02593227 -NCT02595905 -NCT02593279 -NCT02595918 -NCT02593331 -NCT02595931 -NCT02593422 -NCT02595944 -NCT02593487 -NCT02595983 -NCT02593643 -NCT02596035 -NCT02593708 -NCT02596100 -NCT02593786 -NCT02596243 -NCT02593799 -NCT02596256 -NCT02593890 -NCT02596308 -NCT02593929 -NCT02596373 -NCT02593942 -NCT02596490 -NCT02593968 -NCT02596503 -NCT02593981 -NCT02596659 -NCT02594072 -NCT02596711 -NCT02594150 -NCT02596776 -NCT02594163 -NCT02596828 -NCT02594189 -NCT02596867 -NCT02594215 -NCT02596971 -NCT02594267 -NCT02596997 -NCT02594371 -NCT02597036 -NCT02594384 -NCT02597062 -NCT02594475 -NCT02597075 -NCT02594631 -NCT02597101 -NCT02594683 -NCT02597153 -NCT02594696 -NCT02597166 -NCT02594709 -NCT02597309 -NCT02594774 -NCT02597322 -NCT02594787 -NCT02597335 -NCT02594826 -NCT02597348 -NCT02594904 -NCT02597374 -NCT02594943 -NCT02597426 -NCT02595021 -NCT02597452 -NCT02595034 -NCT02597465 -NCT02595073 -NCT02597478 -NCT02595086 -NCT02597582 -NCT02595099 -NCT02603445 -NCT02597634 -NCT02600650 -NCT02597712 -NCT02600611 -NCT02597738 -NCT02600806 -NCT02597777 -NCT02600871 -NCT02597868 -NCT02600897 -NCT02597881 -NCT02600923 -NCT02597894 -NCT02600949 -NCT02597946 -NCT02601014 -NCT02598011 -NCT02601053 -NCT02598219 -NCT02601079 -NCT02598310 -NCT02601144 -NCT02598349 -NCT02601183 -NCT02598414 -NCT02601209 -NCT02598427 -NCT02601248 -NCT02598453 -NCT02601274 -NCT02598531 -NCT02601313 -NCT02598557 -NCT02601339 -NCT02598570 -NCT02601378 -NCT02598661 -NCT02601404 -NCT02598674 -NCT02601547 -NCT02598687 -NCT02601573 -NCT02598713 -NCT02601651 -NCT02598726 -NCT02601703 -NCT02598895 -NCT02601794 -NCT02598960 -NCT02601807 -NCT02598973 -NCT02601937 -NCT02599012 -NCT02601950 -NCT02599090 -NCT02602067 -NCT02599103 -NCT02602080 -NCT02599116 -NCT02602119 -NCT02599142 -NCT02602249 -NCT02599194 -NCT02602262 -NCT02599246 -NCT02602314 -NCT02599324 -NCT02602327 -NCT02599363 -NCT02602405 -NCT02599376 -NCT02602431 -NCT02599402 -NCT02602470 -NCT02599454 -NCT02602587 -NCT02599649 -NCT02602717 -NCT02599662 -NCT02602756 -NCT02599701 -NCT02602808 -NCT02599714 -NCT02602938 -NCT02599779 -NCT02602977 -NCT02600000 -NCT02603003 -NCT02600013 -NCT02603016 -NCT02600039 -NCT02603042 -NCT02600065 -NCT02603068 -NCT02600156 -NCT02603081 -NCT02600234 -NCT02603146 -NCT02600299 -NCT02603159 -NCT02600312 -NCT02603172 -NCT02600364 -NCT02603302 -NCT02600390 -NCT02603341 -NCT02600481 -NCT02603419 -NCT02600533 -NCT02603432 -NCT02600598 -NCT02608580 -NCT02603640 -NCT02606292 -NCT02603653 -NCT02606149 -NCT02603679 -NCT02606305 -NCT02603705 -NCT02606357 -NCT02603757 -NCT02606383 -NCT02603783 -NCT02606396 -NCT02603861 -NCT02606461 -NCT02603874 -NCT02606513 -NCT02603887 -NCT02606539 -NCT02603900 -NCT02606578 -NCT02603926 -NCT02606708 -NCT02603939 -NCT02606851 -NCT02603952 -NCT02606916 -NCT02603965 -NCT02606994 -NCT02604030 -NCT02607046 -NCT02604082 -NCT02607072 -NCT02604121 -NCT02607085 -NCT02604225 -NCT02607098 -NCT02604251 -NCT02607124 -NCT02604342 -NCT02607176 -NCT02604368 -NCT02607202 -NCT02604394 -NCT02607215 -NCT02604498 -NCT02607228 -NCT02604511 -NCT02607332 -NCT02604615 -NCT02607423 -NCT02604732 -NCT02607462 -NCT02604745 -NCT02607488 -NCT02604784 -NCT02607527 -NCT02604862 -NCT02607540 -NCT02604953 -NCT02607553 -NCT02605044 -NCT02607579 -NCT02605070 -NCT02607592 -NCT02605083 -NCT02607618 -NCT02605161 -NCT02607631 -NCT02605213 -NCT02607709 -NCT02605226 -NCT02607787 -NCT02605265 -NCT02607813 -NCT02605304 -NCT02607826 -NCT02605356 -NCT02607904 -NCT02605408 -NCT02607956 -NCT02605421 -NCT02607982 -NCT02605460 -NCT02608034 -NCT02605486 -NCT02608073 -NCT02605512 -NCT02608125 -NCT02605564 -NCT02608177 -NCT02605694 -NCT02608203 -NCT02605720 -NCT02608216 -NCT02605746 -NCT02608229 -NCT02605811 -NCT02608255 -NCT02605863 -NCT02608281 -NCT02605915 -NCT02608385 -NCT02605967 -NCT02608411 -NCT02606006 -NCT02608437 -NCT02606045 -NCT02608489 -NCT02606097 -NCT02608554 -NCT02606123 -NCT02613858 -NCT02608684 -NCT02611557 -NCT02608736 -NCT02611544 -NCT02608814 -NCT02611583 -NCT02608866 -NCT02611661 -NCT02608879 -NCT02611700 -NCT02609009 -NCT02611739 -NCT02609022 -NCT02611804 -NCT02609100 -NCT02611882 -NCT02609204 -NCT02611908 -NCT02609230 -NCT02611921 -NCT02609295 -NCT02611960 -NCT02609321 -NCT02611973 -NCT02609373 -NCT02612051 -NCT02609386 -NCT02612168 -NCT02609451 -NCT02612194 -NCT02609503 -NCT02612207 -NCT02609529 -NCT02612285 -NCT02609581 -NCT02612311 -NCT02609594 -NCT02612376 -NCT02609659 -NCT02612402 -NCT02609685 -NCT02612532 -NCT02609724 -NCT02612558 -NCT02609737 -NCT02612571 -NCT02609776 -NCT02612636 -NCT02609828 -NCT02612649 -NCT02609880 -NCT02612714 -NCT02609919 -NCT02612727 -NCT02609958 -NCT02612779 -NCT02609984 -NCT02612870 -NCT02610010 -NCT02613026 -NCT02610062 -NCT02613065 -NCT02610075 -NCT02613078 -NCT02610127 -NCT02613182 -NCT02610140 -NCT02613208 -NCT02610335 -NCT02613221 -NCT02610361 -NCT02613234 -NCT02610556 -NCT02613260 -NCT02610621 -NCT02613273 -NCT02610660 -NCT02613286 -NCT02610699 -NCT02613299 -NCT02610764 -NCT02613312 -NCT02610777 -NCT02613325 -NCT02610855 -NCT02613338 -NCT02610920 -NCT02613364 -NCT02611024 -NCT02613390 -NCT02611037 -NCT02613416 -NCT02611050 -NCT02613455 -NCT02611128 -NCT02613507 -NCT02611167 -NCT02613520 -NCT02611206 -NCT02613598 -NCT02611245 -NCT02613611 -NCT02611258 -NCT02613650 -NCT02611323 -NCT02613676 -NCT02611453 -NCT02613728 -NCT02611466 -NCT02613819 -NCT02611492 -NCT02619084 -NCT02613871 -NCT02616588 -NCT02613923 -NCT02616575 -NCT02613962 -NCT02616601 -NCT02613988 -NCT02616614 -NCT02614066 -NCT02616640 -NCT02614118 -NCT02616653 -NCT02614144 -NCT02616705 -NCT02614157 -NCT02616731 -NCT02614183 -NCT02616744 -NCT02614235 -NCT02616757 -NCT02614248 -NCT02616796 -NCT02614274 -NCT02616848 -NCT02614339 -NCT02616900 -NCT02614365 -NCT02616926 -NCT02614456 -NCT02616952 -NCT02614482 -NCT02616965 -NCT02614495 -NCT02616978 -NCT02614508 -NCT02617004 -NCT02614534 -NCT02617043 -NCT02614560 -NCT02617134 -NCT02614599 -NCT02617173 -NCT02614651 -NCT02617186 -NCT02614703 -NCT02617199 -NCT02614729 -NCT02617264 -NCT02614794 -NCT02617407 -NCT02614833 -NCT02617485 -NCT02614859 -NCT02617537 -NCT02614898 -NCT02617589 -NCT02614989 -NCT02617615 -NCT02615041 -NCT02617706 -NCT02615067 -NCT02617745 -NCT02615106 -NCT02617771 -NCT02615132 -NCT02617784 -NCT02615158 -NCT02617810 -NCT02615210 -NCT02617849 -NCT02615223 -NCT02617862 -NCT02615275 -NCT02617888 -NCT02615457 -NCT02617966 -NCT02615509 -NCT02618044 -NCT02615574 -NCT02618083 -NCT02615691 -NCT02618109 -NCT02615730 -NCT02618161 -NCT02615808 -NCT02618200 -NCT02615834 -NCT02618278 -NCT02615964 -NCT02618317 -NCT02616016 -NCT02618343 -NCT02616172 -NCT02618356 -NCT02616185 -NCT02618369 -NCT02616250 -NCT02618421 -NCT02616263 -NCT02618447 -NCT02616302 -NCT02618681 -NCT02616393 -NCT02618850 -NCT02616406 -NCT02619045 -NCT02616432 -NCT02619058 -NCT02616497 -NCT02619071 -NCT02616562 -NCT02624531 -NCT02619097 -NCT02621567 -NCT02619123 -NCT02621541 -NCT02619149 -NCT02621658 -NCT02619162 -NCT02621684 -NCT02619240 -NCT02621710 -NCT02619253 -NCT02621957 -NCT02619266 -NCT02621970 -NCT02619292 -NCT02621996 -NCT02619357 -NCT02622009 -NCT02619396 -NCT02622074 -NCT02619435 -NCT02622178 -NCT02619448 -NCT02622321 -NCT02619461 -NCT02622373 -NCT02619474 -NCT02622412 -NCT02619565 -NCT02622490 -NCT02619604 -NCT02622516 -NCT02619630 -NCT02622594 -NCT02619669 -NCT02622607 -NCT02619682 -NCT02622620 -NCT02619734 -NCT02622646 -NCT02619747 -NCT02622711 -NCT02619812 -NCT02622776 -NCT02619838 -NCT02622841 -NCT02619864 -NCT02622880 -NCT02619903 -NCT02622932 -NCT02619942 -NCT02623010 -NCT02619955 -NCT02623062 -NCT02620033 -NCT02623101 -NCT02620202 -NCT02623127 -NCT02620254 -NCT02623153 -NCT02620280 -NCT02623166 -NCT02620371 -NCT02623231 -NCT02620397 -NCT02623309 -NCT02620423 -NCT02623413 -NCT02620488 -NCT02623556 -NCT02620605 -NCT02623582 -NCT02620631 -NCT02623595 -NCT02620644 -NCT02623647 -NCT02620670 -NCT02623712 -NCT02620735 -NCT02623751 -NCT02620748 -NCT02623920 -NCT02620774 -NCT02623933 -NCT02620787 -NCT02623959 -NCT02620800 -NCT02623972 -NCT02620839 -NCT02624024 -NCT02620852 -NCT02624102 -NCT02620865 -NCT02624128 -NCT02621021 -NCT02624258 -NCT02621151 -NCT02624271 -NCT02621190 -NCT02624349 -NCT02621268 -NCT02624362 -NCT02621333 -NCT02624388 -NCT02621372 -NCT02624440 -NCT02621398 -NCT02624492 -NCT02621437 -NCT02624518 -NCT02621515 -NCT02629692 -NCT02624687 -NCT02627027 -NCT02624700 -NCT02626962 -NCT02624726 -NCT02627209 -NCT02624934 -NCT02627248 -NCT02624973 -NCT02627274 -NCT02624986 -NCT02627313 -NCT02624999 -NCT02627339 -NCT02625038 -NCT02627352 -NCT02625077 -NCT02627391 -NCT02625090 -NCT02627430 -NCT02625168 -NCT02627443 -NCT02625259 -NCT02627456 -NCT02625272 -NCT02627469 -NCT02625337 -NCT02627560 -NCT02625389 -NCT02627573 -NCT02625441 -NCT02627638 -NCT02625454 -NCT02627664 -NCT02625480 -NCT02627677 -NCT02625506 -NCT02627781 -NCT02625610 -NCT02627807 -NCT02625623 -NCT02627820 -NCT02625662 -NCT02627872 -NCT02625688 -NCT02627963 -NCT02625831 -NCT02627976 -NCT02625857 -NCT02628015 -NCT02625909 -NCT02628041 -NCT02625961 -NCT02628067 -NCT02625987 -NCT02628080 -NCT02626000 -NCT02628093 -NCT02626052 -NCT02628119 -NCT02626065 -NCT02628132 -NCT02626117 -NCT02628171 -NCT02626130 -NCT02628405 -NCT02626195 -NCT02628496 -NCT02626208 -NCT02628535 -NCT02626234 -NCT02628574 -NCT02626312 -NCT02628613 -NCT02626338 -NCT02628665 -NCT02626364 -NCT02628691 -NCT02626377 -NCT02628704 -NCT02626455 -NCT02628808 -NCT02626481 -NCT02628860 -NCT02626507 -NCT02628886 -NCT02626520 -NCT02628899 -NCT02626533 -NCT02628951 -NCT02626598 -NCT02629029 -NCT02626637 -NCT02629081 -NCT02626663 -NCT02629133 -NCT02626715 -NCT02629185 -NCT02626754 -NCT02629315 -NCT02626806 -NCT02629406 -NCT02626845 -NCT02629510 -NCT02626858 -NCT02629523 -NCT02626884 -NCT02629549 -NCT02626897 -NCT02629614 -NCT02626923 -NCT02635061 -NCT02629757 -NCT02632409 -NCT02629809 -NCT02632396 -NCT02629848 -NCT02632435 -NCT02629874 -NCT02632448 -NCT02629913 -NCT02632461 -NCT02629978 -NCT02632565 -NCT02630030 -NCT02632669 -NCT02630043 -NCT02632708 -NCT02630108 -NCT02632721 -NCT02630186 -NCT02632760 -NCT02630199 -NCT02632786 -NCT02630251 -NCT02632851 -NCT02630264 -NCT02632864 -NCT02630368 -NCT02632903 -NCT02630394 -NCT02632955 -NCT02630420 -NCT02633020 -NCT02630433 -NCT02633059 -NCT02630446 -NCT02633098 -NCT02630485 -NCT02633137 -NCT02630589 -NCT02633176 -NCT02630693 -NCT02633189 -NCT02630823 -NCT02633202 -NCT02630927 -NCT02633254 -NCT02631044 -NCT02633280 -NCT02631070 -NCT02633462 -NCT02631135 -NCT02633475 -NCT02631187 -NCT02633514 -NCT02631226 -NCT02633540 -NCT02631239 -NCT02633553 -NCT02631252 -NCT02633579 -NCT02631447 -NCT02633592 -NCT02631460 -NCT02633644 -NCT02631499 -NCT02633696 -NCT02631538 -NCT02633735 -NCT02631577 -NCT02633748 -NCT02631590 -NCT02633800 -NCT02631616 -NCT02633813 -NCT02631655 -NCT02633917 -NCT02631668 -NCT02633943 -NCT02631681 -NCT02633969 -NCT02631733 -NCT02634216 -NCT02631746 -NCT02634294 -NCT02631863 -NCT02634307 -NCT02631876 -NCT02634411 -NCT02631928 -NCT02634502 -NCT02632006 -NCT02634619 -NCT02632019 -NCT02634632 -NCT02632045 -NCT02634710 -NCT02632071 -NCT02634723 -NCT02632110 -NCT02634827 -NCT02632136 -NCT02634905 -NCT02632188 -NCT02634918 -NCT02632201 -NCT02634957 -NCT02632253 -NCT02635009 -NCT02632266 -NCT02635022 -NCT02632305 -NCT02640365 -NCT02635074 -NCT02638051 -NCT02635217 -NCT02638038 -NCT02635256 -NCT02638090 -NCT02635347 -NCT02638285 -NCT02635360 -NCT02638298 -NCT02635425 -NCT02638311 -NCT02635503 -NCT02638350 -NCT02635672 -NCT02638389 -NCT02635724 -NCT02638415 -NCT02635737 -NCT02638428 -NCT02635750 -NCT02638467 -NCT02635763 -NCT02638506 -NCT02635906 -NCT02638519 -NCT02635971 -NCT02638584 -NCT02635984 -NCT02638649 -NCT02635997 -NCT02638701 -NCT02636010 -NCT02638714 -NCT02636036 -NCT02638740 -NCT02636088 -NCT02638766 -NCT02636192 -NCT02638831 -NCT02636205 -NCT02638857 -NCT02636231 -NCT02638909 -NCT02636322 -NCT02638922 -NCT02636426 -NCT02638935 -NCT02636465 -NCT02639026 -NCT02636543 -NCT02639065 -NCT02636556 -NCT02639104 -NCT02636569 -NCT02639117 -NCT02636582 -NCT02639156 -NCT02636634 -NCT02639182 -NCT02636647 -NCT02639208 -NCT02636725 -NCT02639234 -NCT02636894 -NCT02639247 -NCT02637024 -NCT02639273 -NCT02637115 -NCT02639325 -NCT02637141 -NCT02639390 -NCT02637284 -NCT02639403 -NCT02637297 -NCT02639546 -NCT02637349 -NCT02639559 -NCT02637375 -NCT02639611 -NCT02637466 -NCT02639650 -NCT02637479 -NCT02639767 -NCT02637531 -NCT02639819 -NCT02637557 -NCT02639858 -NCT02637596 -NCT02639897 -NCT02637635 -NCT02639910 -NCT02637661 -NCT02640053 -NCT02637687 -NCT02640092 -NCT02637739 -NCT02640105 -NCT02637765 -NCT02640118 -NCT02637921 -NCT02640131 -NCT02637934 -NCT02640209 -NCT02637947 -NCT02640313 -NCT02637986 -NCT02640326 -NCT02638012 -NCT02640352 -NCT02638025 -NCT02645981 -NCT02640378 -NCT02643212 -NCT02640495 -NCT02643160 -NCT02640508 -NCT02643238 -NCT02640534 -NCT02643290 -NCT02640573 -NCT02643303 -NCT02640586 -NCT02643342 -NCT02640599 -NCT02643355 -NCT02640664 -NCT02643407 -NCT02640768 -NCT02643420 -NCT02640781 -NCT02643498 -NCT02640833 -NCT02643511 -NCT02640898 -NCT02643550 -NCT02640924 -NCT02643667 -NCT02640976 -NCT02643849 -NCT02641002 -NCT02643875 -NCT02641015 -NCT02643966 -NCT02641054 -NCT02644018 -NCT02641093 -NCT02644070 -NCT02641145 -NCT02644122 -NCT02641314 -NCT02644135 -NCT02641327 -NCT02644148 -NCT02641353 -NCT02644187 -NCT02641366 -NCT02644200 -NCT02641379 -NCT02644213 -NCT02641431 -NCT02644252 -NCT02641483 -NCT02644278 -NCT02641600 -NCT02644291 -NCT02641639 -NCT02644304 -NCT02641652 -NCT02644369 -NCT02641691 -NCT02644408 -NCT02641769 -NCT02644460 -NCT02641782 -NCT02644603 -NCT02641847 -NCT02644655 -NCT02641873 -NCT02644707 -NCT02641912 -NCT02644772 -NCT02641925 -NCT02644863 -NCT02641938 -NCT02644967 -NCT02642016 -NCT02644993 -NCT02642042 -NCT02645045 -NCT02642094 -NCT02645084 -NCT02642107 -NCT02645123 -NCT02642419 -NCT02645136 -NCT02642432 -NCT02645149 -NCT02642471 -NCT02645175 -NCT02642510 -NCT02645292 -NCT02642653 -NCT02645409 -NCT02642744 -NCT02645461 -NCT02642809 -NCT02645487 -NCT02642913 -NCT02645591 -NCT02642926 -NCT02645604 -NCT02642939 -NCT02645760 -NCT02642965 -NCT02645786 -NCT02642978 -NCT02645864 -NCT02642991 -NCT02645877 -NCT02643043 -NCT02645968 -NCT02643056 -NCT02650752 -NCT02646020 -NCT02648815 -NCT02646085 -NCT02648802 -NCT02646098 -NCT02648841 -NCT02646137 -NCT02648854 -NCT02646241 -NCT02648880 -NCT02646319 -NCT02648919 -NCT02646384 -NCT02648932 -NCT02646423 -NCT02648984 -NCT02646514 -NCT02648997 -NCT02646553 -NCT02649062 -NCT02646566 -NCT02649101 -NCT02646735 -NCT02649153 -NCT02646748 -NCT02649166 -NCT02646839 -NCT02649335 -NCT02646852 -NCT02649348 -NCT02646943 -NCT02649361 -NCT02647021 -NCT02649387 -NCT02647047 -NCT02649439 -NCT02647099 -NCT02649452 -NCT02647112 -NCT02649530 -NCT02647125 -NCT02649582 -NCT02647151 -NCT02649621 -NCT02647190 -NCT02649647 -NCT02647216 -NCT02649673 -NCT02647281 -NCT02649686 -NCT02647385 -NCT02649699 -NCT02647398 -NCT02649712 -NCT02647476 -NCT02649764 -NCT02647502 -NCT02649790 -NCT02647528 -NCT02649829 -NCT02647593 -NCT02649855 -NCT02647671 -NCT02649868 -NCT02647684 -NCT02649894 -NCT02647749 -NCT02649946 -NCT02647788 -NCT02649985 -NCT02647827 -NCT02650011 -NCT02647853 -NCT02650193 -NCT02647944 -NCT02650258 -NCT02647957 -NCT02650271 -NCT02647983 -NCT02650349 -NCT02648009 -NCT02650375 -NCT02648074 -NCT02650401 -NCT02648087 -NCT02650414 -NCT02648178 -NCT02650427 -NCT02648282 -NCT02650453 -NCT02648308 -NCT02650492 -NCT02648386 -NCT02650505 -NCT02648399 -NCT02650544 -NCT02648425 -NCT02650583 -NCT02648477 -NCT02650622 -NCT02648490 -NCT02650635 -NCT02648555 -NCT02650648 -NCT02648633 -NCT02650661 -NCT02648711 -NCT02650700 -NCT02648724 -NCT02650713 -NCT02648763 -NCT02656706 -NCT02650765 -NCT02653937 -NCT02650791 -NCT02653911 -NCT02650804 -NCT02653976 -NCT02650817 -NCT02653989 -NCT02650830 -NCT02654028 -NCT02650843 -NCT02654041 -NCT02650960 -NCT02654054 -NCT02650986 -NCT02654106 -NCT02650999 -NCT02654119 -NCT02651090 -NCT02654132 -NCT02651116 -NCT02654158 -NCT02651129 -NCT02654262 -NCT02651142 -NCT02654405 -NCT02651155 -NCT02654431 -NCT02651207 -NCT02654561 -NCT02651220 -NCT02654587 -NCT02651415 -NCT02654639 -NCT02651441 -NCT02654652 -NCT02651493 -NCT02654665 -NCT02651506 -NCT02654717 -NCT02651610 -NCT02654769 -NCT02651662 -NCT02654821 -NCT02651727 -NCT02654938 -NCT02651818 -NCT02654951 -NCT02651844 -NCT02654964 -NCT02651883 -NCT02654990 -NCT02651909 -NCT02655016 -NCT02651948 -NCT02655055 -NCT02651974 -NCT02655068 -NCT02652195 -NCT02655081 -NCT02652234 -NCT02655094 -NCT02652286 -NCT02655224 -NCT02652299 -NCT02655289 -NCT02652364 -NCT02655341 -NCT02652455 -NCT02655367 -NCT02652468 -NCT02655458 -NCT02652572 -NCT02655536 -NCT02652702 -NCT02655575 -NCT02652715 -NCT02655601 -NCT02652767 -NCT02655653 -NCT02652780 -NCT02655809 -NCT02652871 -NCT02655822 -NCT02652910 -NCT02655913 -NCT02652923 -NCT02655952 -NCT02652975 -NCT02656082 -NCT02653105 -NCT02656121 -NCT02653183 -NCT02656147 -NCT02653196 -NCT02656303 -NCT02653248 -NCT02656368 -NCT02653313 -NCT02656381 -NCT02653443 -NCT02656407 -NCT02653521 -NCT02656563 -NCT02653612 -NCT02656589 -NCT02653625 -NCT02656615 -NCT02653664 -NCT02656654 -NCT02653755 -NCT02661386 -NCT02656849 -NCT02659189 -NCT02656953 -NCT02659059 -NCT02657005 -NCT02659241 -NCT02657031 -NCT02659293 -NCT02657044 -NCT02659332 -NCT02657070 -NCT02659345 -NCT02657083 -NCT02659384 -NCT02657135 -NCT02659501 -NCT02657187 -NCT02659514 -NCT02657213 -NCT02659527 -NCT02657317 -NCT02659540 -NCT02657330 -NCT02659631 -NCT02657343 -NCT02659722 -NCT02657356 -NCT02659800 -NCT02657369 -NCT02659813 -NCT02657408 -NCT02659839 -NCT02657434 -NCT02659852 -NCT02657447 -NCT02659930 -NCT02657486 -NCT02659943 -NCT02657538 -NCT02659995 -NCT02657551 -NCT02660034 -NCT02657603 -NCT02660060 -NCT02657681 -NCT02660125 -NCT02657694 -NCT02660138 -NCT02657707 -NCT02660190 -NCT02657785 -NCT02660229 -NCT02657824 -NCT02660255 -NCT02657876 -NCT02660281 -NCT02657889 -NCT02660320 -NCT02657928 -NCT02660359 -NCT02657993 -NCT02660372 -NCT02658019 -NCT02660411 -NCT02658084 -NCT02660437 -NCT02658097 -NCT02660489 -NCT02658149 -NCT02660515 -NCT02658162 -NCT02660528 -NCT02658201 -NCT02660671 -NCT02658214 -NCT02660697 -NCT02658279 -NCT02660710 -NCT02658396 -NCT02660736 -NCT02658461 -NCT02660788 -NCT02658487 -NCT02660801 -NCT02658500 -NCT02660853 -NCT02658552 -NCT02660905 -NCT02658565 -NCT02660918 -NCT02658669 -NCT02660970 -NCT02658695 -NCT02661022 -NCT02658708 -NCT02661035 -NCT02658721 -NCT02661100 -NCT02658734 -NCT02661152 -NCT02658812 -NCT02661191 -NCT02658890 -NCT02661256 -NCT02658929 -NCT02661282 -NCT02658968 -NCT02661308 -NCT02658981 -NCT02661360 -NCT02659020 -NCT02666742 -NCT02661425 -NCT02664077 -NCT02661451 -NCT02663908 -NCT02661503 -NCT02664103 -NCT02661542 -NCT02664181 -NCT02661659 -NCT02664220 -NCT02661672 -NCT02664259 -NCT02661685 -NCT02664298 -NCT02661789 -NCT02664363 -NCT02661815 -NCT02664389 -NCT02661932 -NCT02664428 -NCT02661945 -NCT02664467 -NCT02661971 -NCT02664493 -NCT02662062 -NCT02664688 -NCT02662075 -NCT02664792 -NCT02662114 -NCT02664805 -NCT02662166 -NCT02664896 -NCT02662192 -NCT02664935 -NCT02662218 -NCT02664961 -NCT02662244 -NCT02664974 -NCT02662296 -NCT02665026 -NCT02662309 -NCT02665039 -NCT02662335 -NCT02665065 -NCT02662348 -NCT02665104 -NCT02662426 -NCT02665117 -NCT02662491 -NCT02665143 -NCT02662504 -NCT02665182 -NCT02662608 -NCT02665195 -NCT02662621 -NCT02665325 -NCT02662634 -NCT02665390 -NCT02662647 -NCT02665416 -NCT02662673 -NCT02665442 -NCT02662712 -NCT02665546 -NCT02662725 -NCT02665559 -NCT02662894 -NCT02665572 -NCT02662907 -NCT02665585 -NCT02662933 -NCT02665650 -NCT02662959 -NCT02665702 -NCT02663011 -NCT02665728 -NCT02663063 -NCT02665741 -NCT02663206 -NCT02665871 -NCT02663258 -NCT02665923 -NCT02663271 -NCT02665962 -NCT02663297 -NCT02666040 -NCT02663427 -NCT02666079 -NCT02663440 -NCT02666105 -NCT02663479 -NCT02666118 -NCT02663492 -NCT02666183 -NCT02663518 -NCT02666209 -NCT02663531 -NCT02666222 -NCT02663544 -NCT02666261 -NCT02663570 -NCT02666326 -NCT02663609 -NCT02666534 -NCT02663622 -NCT02666599 -NCT02663752 -NCT02666612 -NCT02663817 -NCT02666690 -NCT02663895 -NCT02671955 -NCT02666807 -NCT02669251 -NCT02666885 -NCT02669186 -NCT02666898 -NCT02669264 -NCT02666950 -NCT02669420 -NCT02666976 -NCT02669459 -NCT02667145 -NCT02669485 -NCT02667236 -NCT02669511 -NCT02667249 -NCT02669576 -NCT02667275 -NCT02669615 -NCT02667288 -NCT02669719 -NCT02667301 -NCT02669823 -NCT02667392 -NCT02669849 -NCT02667418 -NCT02669888 -NCT02667483 -NCT02669914 -NCT02667496 -NCT02669966 -NCT02667548 -NCT02669992 -NCT02667561 -NCT02670031 -NCT02667574 -NCT02670044 -NCT02667587 -NCT02670057 -NCT02667626 -NCT02670083 -NCT02667743 -NCT02670109 -NCT02667873 -NCT02670161 -NCT02667886 -NCT02670200 -NCT02667925 -NCT02670252 -NCT02667977 -NCT02670265 -NCT02668029 -NCT02670317 -NCT02668081 -NCT02670343 -NCT02668146 -NCT02670356 -NCT02668172 -NCT02670382 -NCT02668185 -NCT02670486 -NCT02668250 -NCT02670525 -NCT02668263 -NCT02670564 -NCT02668276 -NCT02670577 -NCT02668289 -NCT02670603 -NCT02668315 -NCT02670616 -NCT02668393 -NCT02670642 -NCT02668471 -NCT02670655 -NCT02668497 -NCT02670668 -NCT02668523 -NCT02670707 -NCT02668536 -NCT02670980 -NCT02668575 -NCT02671032 -NCT02668601 -NCT02671071 -NCT02668614 -NCT02671188 -NCT02668653 -NCT02671292 -NCT02668666 -NCT02671435 -NCT02668718 -NCT02671448 -NCT02668770 -NCT02671513 -NCT02668783 -NCT02671552 -NCT02668822 -NCT02671617 -NCT02668835 -NCT02671708 -NCT02668913 -NCT02671760 -NCT02669004 -NCT02671877 -NCT02669017 -NCT02671890 -NCT02669056 -NCT02671903 -NCT02669108 -NCT02671942 -NCT02669173 -NCT02677636 -NCT02671994 -NCT02675244 -NCT02672020 -NCT02675231 -NCT02672033 -NCT02675439 -NCT02672098 -NCT02675452 -NCT02672189 -NCT02675478 -NCT02672241 -NCT02675491 -NCT02672358 -NCT02675660 -NCT02672449 -NCT02675673 -NCT02672475 -NCT02675764 -NCT02672488 -NCT02675829 -NCT02672501 -NCT02675842 -NCT02672527 -NCT02675881 -NCT02672553 -NCT02675894 -NCT02672774 -NCT02675946 -NCT02672865 -NCT02675985 -NCT02672904 -NCT02675998 -NCT02672917 -NCT02676050 -NCT02672969 -NCT02676323 -NCT02672995 -NCT02676349 -NCT02673021 -NCT02676388 -NCT02673060 -NCT02676479 -NCT02673151 -NCT02676531 -NCT02673177 -NCT02676544 -NCT02673268 -NCT02676557 -NCT02673333 -NCT02676570 -NCT02673398 -NCT02676674 -NCT02673528 -NCT02676687 -NCT02673632 -NCT02676726 -NCT02673736 -NCT02676778 -NCT02673814 -NCT02676791 -NCT02673879 -NCT02676856 -NCT02673918 -NCT02676869 -NCT02674061 -NCT02676882 -NCT02674152 -NCT02676895 -NCT02674178 -NCT02676908 -NCT02674191 -NCT02676973 -NCT02674204 -NCT02676986 -NCT02674243 -NCT02677038 -NCT02674256 -NCT02677090 -NCT02674269 -NCT02677116 -NCT02674282 -NCT02677129 -NCT02674412 -NCT02677155 -NCT02674555 -NCT02677207 -NCT02674568 -NCT02677220 -NCT02674646 -NCT02677233 -NCT02674659 -NCT02677259 -NCT02674672 -NCT02677311 -NCT02674750 -NCT02677324 -NCT02674763 -NCT02677337 -NCT02674776 -NCT02677389 -NCT02674815 -NCT02677467 -NCT02674971 -NCT02677506 -NCT02674997 -NCT02677558 -NCT02675049 -NCT02677597 -NCT02675088 -NCT02677610 -NCT02675114 -NCT02682836 -NCT02677649 -NCT02680301 -NCT02677714 -NCT02680262 -NCT02677779 -NCT02680379 -NCT02677818 -NCT02680405 -NCT02677857 -NCT02680470 -NCT02677883 -NCT02680483 -NCT02677896 -NCT02680535 -NCT02677922 -NCT02680587 -NCT02677948 -NCT02680613 -NCT02677961 -NCT02680639 -NCT02678013 -NCT02680717 -NCT02678091 -NCT02680795 -NCT02678104 -NCT02680847 -NCT02678143 -NCT02680873 -NCT02678169 -NCT02680925 -NCT02678182 -NCT02680951 -NCT02678299 -NCT02680977 -NCT02678338 -NCT02680990 -NCT02678351 -NCT02681068 -NCT02678429 -NCT02681107 -NCT02678442 -NCT02681172 -NCT02678481 -NCT02681198 -NCT02678520 -NCT02681211 -NCT02678533 -NCT02681237 -NCT02678572 -NCT02681250 -NCT02678741 -NCT02681263 -NCT02678780 -NCT02681302 -NCT02678806 -NCT02681315 -NCT02678832 -NCT02681432 -NCT02678884 -NCT02681445 -NCT02678910 -NCT02681458 -NCT02678936 -NCT02681471 -NCT02678949 -NCT02681523 -NCT02678975 -NCT02681549 -NCT02679040 -NCT02681562 -NCT02679066 -NCT02681588 -NCT02679118 -NCT02681601 -NCT02679131 -NCT02681614 -NCT02679144 -NCT02681640 -NCT02679170 -NCT02681705 -NCT02679196 -NCT02681718 -NCT02679261 -NCT02681770 -NCT02679339 -NCT02681796 -NCT02679443 -NCT02681965 -NCT02679482 -NCT02682082 -NCT02679495 -NCT02682251 -NCT02679547 -NCT02682355 -NCT02679573 -NCT02682368 -NCT02679586 -NCT02682485 -NCT02679755 -NCT02682563 -NCT02679794 -NCT02682589 -NCT02679937 -NCT02682641 -NCT02679963 -NCT02682693 -NCT02680041 -NCT02682732 -NCT02680093 -NCT02682745 -NCT02680184 -NCT02688036 -NCT02682862 -NCT02685527 -NCT02682953 -NCT02685397 -NCT02683083 -NCT02685553 -NCT02683109 -NCT02685566 -NCT02683148 -NCT02685592 -NCT02683174 -NCT02685605 -NCT02683200 -NCT02685657 -NCT02683239 -NCT02685670 -NCT02683304 -NCT02685709 -NCT02683343 -NCT02685774 -NCT02683382 -NCT02685826 -NCT02683395 -NCT02685865 -NCT02683486 -NCT02685904 -NCT02683538 -NCT02685995 -NCT02683590 -NCT02686008 -NCT02683655 -NCT02686164 -NCT02683694 -NCT02686203 -NCT02683772 -NCT02686294 -NCT02683785 -NCT02686346 -NCT02683824 -NCT02686372 -NCT02683941 -NCT02686385 -NCT02683954 -NCT02686463 -NCT02684006 -NCT02686528 -NCT02684032 -NCT02686567 -NCT02684058 -NCT02686593 -NCT02684071 -NCT02686645 -NCT02684097 -NCT02686775 -NCT02684136 -NCT02686788 -NCT02684162 -NCT02686840 -NCT02684227 -NCT02686879 -NCT02684253 -NCT02686918 -NCT02684266 -NCT02686931 -NCT02684292 -NCT02686944 -NCT02684318 -NCT02686996 -NCT02684344 -NCT02687009 -NCT02684409 -NCT02687113 -NCT02684422 -NCT02687139 -NCT02684448 -NCT02687165 -NCT02684461 -NCT02687217 -NCT02684591 -NCT02687230 -NCT02684708 -NCT02687308 -NCT02684799 -NCT02687425 -NCT02684812 -NCT02687464 -NCT02684851 -NCT02687490 -NCT02685046 -NCT02687620 -NCT02685059 -NCT02687633 -NCT02685111 -NCT02687685 -NCT02685137 -NCT02687711 -NCT02685150 -NCT02687815 -NCT02685202 -NCT02687841 -NCT02685228 -NCT02687880 -NCT02685267 -NCT02687919 -NCT02685280 -NCT02687958 -NCT02685306 -NCT02687997 -NCT02685319 -NCT02688023 -NCT02685332 -NCT02693665 -NCT02688088 -NCT02690350 -NCT02688101 -NCT02690337 -NCT02688114 -NCT02690376 -NCT02688140 -NCT02690428 -NCT02688153 -NCT02690480 -NCT02688205 -NCT02690545 -NCT02688218 -NCT02690558 -NCT02688244 -NCT02690610 -NCT02688348 -NCT02690636 -NCT02688491 -NCT02690766 -NCT02688543 -NCT02690922 -NCT02688569 -NCT02690948 -NCT02688608 -NCT02690987 -NCT02688621 -NCT02691078 -NCT02688673 -NCT02691143 -NCT02688686 -NCT02691169 -NCT02688699 -NCT02691299 -NCT02688712 -NCT02691312 -NCT02688725 -NCT02691325 -NCT02688803 -NCT02691338 -NCT02688816 -NCT02691494 -NCT02688881 -NCT02691533 -NCT02688907 -NCT02691689 -NCT02688920 -NCT02691767 -NCT02688972 -NCT02691780 -NCT02688998 -NCT02691793 -NCT02689050 -NCT02691845 -NCT02689141 -NCT02691871 -NCT02689167 -NCT02691923 -NCT02689219 -NCT02691936 -NCT02689284 -NCT02691975 -NCT02689336 -NCT02692105 -NCT02689349 -NCT02692183 -NCT02689375 -NCT02692248 -NCT02689401 -NCT02692365 -NCT02689427 -NCT02692508 -NCT02689440 -NCT02692521 -NCT02689453 -NCT02692534 -NCT02689466 -NCT02692573 -NCT02689505 -NCT02692638 -NCT02689622 -NCT02692742 -NCT02689726 -NCT02692755 -NCT02689752 -NCT02692872 -NCT02689765 -NCT02692976 -NCT02689817 -NCT02693067 -NCT02689830 -NCT02693080 -NCT02689869 -NCT02693119 -NCT02689921 -NCT02693132 -NCT02689960 -NCT02693236 -NCT02689986 -NCT02693379 -NCT02689999 -NCT02693405 -NCT02690038 -NCT02693457 -NCT02690233 -NCT02693509 -NCT02690246 -NCT02693535 -NCT02690259 -NCT02693548 -NCT02690285 -NCT02700360 -NCT02693704 -NCT02697240 -NCT02693717 -NCT02697214 -NCT02693847 -NCT02697331 -NCT02693860 -NCT02697344 -NCT02693977 -NCT02697370 -NCT02693990 -NCT02697383 -NCT02694029 -NCT02697396 -NCT02694081 -NCT02697435 -NCT02694172 -NCT02697539 -NCT02694198 -NCT02697552 -NCT02694224 -NCT02697591 -NCT02694302 -NCT02697630 -NCT02694315 -NCT02697734 -NCT02694393 -NCT02697799 -NCT02694419 -NCT02697838 -NCT02694445 -NCT02698046 -NCT02694536 -NCT02698111 -NCT02694562 -NCT02698124 -NCT02694640 -NCT02698150 -NCT02694718 -NCT02698176 -NCT02694770 -NCT02698189 -NCT02694796 -NCT02698202 -NCT02694809 -NCT02698215 -NCT02694822 -NCT02698254 -NCT02694926 -NCT02698280 -NCT02695173 -NCT02698293 -NCT02695290 -NCT02698332 -NCT02695459 -NCT02698423 -NCT02695550 -NCT02698462 -NCT02695602 -NCT02698761 -NCT02695628 -NCT02698891 -NCT02695719 -NCT02698995 -NCT02695732 -NCT02699047 -NCT02695771 -NCT02699073 -NCT02695940 -NCT02699125 -NCT02696044 -NCT02699138 -NCT02696083 -NCT02699320 -NCT02696122 -NCT02699385 -NCT02696239 -NCT02699424 -NCT02696304 -NCT02699463 -NCT02696330 -NCT02699515 -NCT02696356 -NCT02699606 -NCT02696408 -NCT02699697 -NCT02696486 -NCT02699723 -NCT02696642 -NCT02699749 -NCT02696668 -NCT02699853 -NCT02696707 -NCT02699918 -NCT02696733 -NCT02699983 -NCT02696759 -NCT02699996 -NCT02696837 -NCT02700022 -NCT02696993 -NCT02700074 -NCT02697032 -NCT02700087 -NCT02697058 -NCT02700139 -NCT02697162 -NCT02700230 -NCT02697188 -NCT02700308 -NCT02697201 -NCT02705157 -NCT02700386 -NCT02702947 -NCT02700451 -NCT02702921 -NCT02700464 -NCT02702960 -NCT02700477 -NCT02702986 -NCT02700503 -NCT02703064 -NCT02700529 -NCT02703129 -NCT02700555 -NCT02703207 -NCT02700568 -NCT02703246 -NCT02700724 -NCT02703272 -NCT02700763 -NCT02703285 -NCT02700776 -NCT02703298 -NCT02700789 -NCT02703311 -NCT02700841 -NCT02703402 -NCT02700906 -NCT02703467 -NCT02700971 -NCT02703493 -NCT02701088 -NCT02703545 -NCT02701101 -NCT02703571 -NCT02701153 -NCT02703623 -NCT02701205 -NCT02703701 -NCT02701231 -NCT02703714 -NCT02701244 -NCT02703779 -NCT02701283 -NCT02703818 -NCT02701309 -NCT02703844 -NCT02701348 -NCT02703922 -NCT02701400 -NCT02703935 -NCT02701439 -NCT02703961 -NCT02701491 -NCT02704078 -NCT02701504 -NCT02704091 -NCT02701517 -NCT02704104 -NCT02701595 -NCT02704130 -NCT02701608 -NCT02704143 -NCT02701673 -NCT02704156 -NCT02701699 -NCT02704169 -NCT02701712 -NCT02704247 -NCT02701751 -NCT02704299 -NCT02701803 -NCT02704312 -NCT02701907 -NCT02704338 -NCT02701920 -NCT02704377 -NCT02701946 -NCT02704520 -NCT02701985 -NCT02704637 -NCT02702050 -NCT02704650 -NCT02702141 -NCT02704689 -NCT02702232 -NCT02704741 -NCT02702323 -NCT02704754 -NCT02702349 -NCT02704767 -NCT02702388 -NCT02704793 -NCT02702401 -NCT02704819 -NCT02702414 -NCT02704832 -NCT02702453 -NCT02704845 -NCT02702492 -NCT02704858 -NCT02702596 -NCT02704988 -NCT02702648 -NCT02705014 -NCT02702752 -NCT02705105 -NCT02702765 -NCT02705118 -NCT02702778 -NCT02705144 -NCT02702882 -NCT02711033 -NCT02705183 -NCT02708056 -NCT02705196 -NCT02707952 -NCT02705300 -NCT02708095 -NCT02705339 -NCT02708108 -NCT02705352 -NCT02708186 -NCT02705365 -NCT02708355 -NCT02705443 -NCT02708368 -NCT02705469 -NCT02708511 -NCT02705482 -NCT02708641 -NCT02705573 -NCT02708680 -NCT02705599 -NCT02708953 -NCT02705612 -NCT02708966 -NCT02705651 -NCT02709070 -NCT02705664 -NCT02709083 -NCT02705703 -NCT02709226 -NCT02705768 -NCT02709408 -NCT02705781 -NCT02709460 -NCT02705820 -NCT02709512 -NCT02705859 -NCT02709616 -NCT02705924 -NCT02709681 -NCT02705937 -NCT02709720 -NCT02705963 -NCT02709811 -NCT02706132 -NCT02709850 -NCT02706158 -NCT02709863 -NCT02706171 -NCT02709889 -NCT02706184 -NCT02709967 -NCT02706197 -NCT02709993 -NCT02706210 -NCT02710045 -NCT02706262 -NCT02710110 -NCT02706301 -NCT02710149 -NCT02706353 -NCT02710162 -NCT02706392 -NCT02710175 -NCT02706405 -NCT02710214 -NCT02706431 -NCT02710240 -NCT02706535 -NCT02710253 -NCT02706561 -NCT02710396 -NCT02706626 -NCT02710422 -NCT02706691 -NCT02710461 -NCT02706782 -NCT02710474 -NCT02706899 -NCT02710487 -NCT02706938 -NCT02710526 -NCT02706964 -NCT02710565 -NCT02707042 -NCT02710591 -NCT02707159 -NCT02710643 -NCT02707198 -NCT02710669 -NCT02707315 -NCT02710682 -NCT02707328 -NCT02710721 -NCT02707393 -NCT02710734 -NCT02707510 -NCT02710786 -NCT02707549 -NCT02710799 -NCT02707588 -NCT02710838 -NCT02707601 -NCT02710942 -NCT02707653 -NCT02710968 -NCT02707666 -NCT02710981 -NCT02707796 -NCT02711007 -NCT02707835 -NCT02716623 -NCT02711137 -NCT02714127 -NCT02711345 -NCT02714023 -NCT02711397 -NCT02714218 -NCT02711449 -NCT02714374 -NCT02711514 -NCT02714439 -NCT02711540 -NCT02714530 -NCT02711553 -NCT02714582 -NCT02711683 -NCT02714608 -NCT02711735 -NCT02714621 -NCT02711800 -NCT02714920 -NCT02711826 -NCT02714946 -NCT02711852 -NCT02714972 -NCT02711956 -NCT02714985 -NCT02711969 -NCT02715011 -NCT02711995 -NCT02715024 -NCT02712060 -NCT02715102 -NCT02712112 -NCT02715154 -NCT02712138 -NCT02715193 -NCT02712216 -NCT02715284 -NCT02712229 -NCT02715297 -NCT02712242 -NCT02715323 -NCT02712281 -NCT02715362 -NCT02712320 -NCT02715492 -NCT02712346 -NCT02715531 -NCT02712437 -NCT02715583 -NCT02712476 -NCT02715596 -NCT02712515 -NCT02715609 -NCT02712671 -NCT02715674 -NCT02712723 -NCT02715713 -NCT02712762 -NCT02715765 -NCT02712814 -NCT02715791 -NCT02712827 -NCT02715804 -NCT02712840 -NCT02715856 -NCT02712892 -NCT02715882 -NCT02712905 -NCT02715999 -NCT02712957 -NCT02716012 -NCT02712983 -NCT02716025 -NCT02713035 -NCT02716038 -NCT02713087 -NCT02716051 -NCT02713178 -NCT02716077 -NCT02713256 -NCT02716103 -NCT02713269 -NCT02716116 -NCT02713373 -NCT02716168 -NCT02713386 -NCT02716194 -NCT02713412 -NCT02716207 -NCT02713464 -NCT02716233 -NCT02713529 -NCT02716272 -NCT02713555 -NCT02716285 -NCT02713737 -NCT02716311 -NCT02713763 -NCT02716376 -NCT02713828 -NCT02716415 -NCT02713867 -NCT02716428 -NCT02713932 -NCT02716467 -NCT02713945 -NCT02716493 -NCT02713984 -NCT02716571 -NCT02714010 -NCT02721355 -NCT02716662 -NCT02718976 -NCT02716688 -NCT02718963 -NCT02716714 -NCT02719015 -NCT02716766 -NCT02719028 -NCT02716779 -NCT02719093 -NCT02716792 -NCT02719119 -NCT02716805 -NCT02719145 -NCT02716896 -NCT02719158 -NCT02716948 -NCT02719197 -NCT02716961 -NCT02719249 -NCT02716974 -NCT02719340 -NCT02717000 -NCT02719418 -NCT02717091 -NCT02719509 -NCT02717156 -NCT02719574 -NCT02717455 -NCT02719600 -NCT02717507 -NCT02719613 -NCT02717572 -NCT02719691 -NCT02717611 -NCT02719717 -NCT02717624 -NCT02719769 -NCT02717689 -NCT02719782 -NCT02717741 -NCT02719795 -NCT02717793 -NCT02719821 -NCT02717832 -NCT02719860 -NCT02717884 -NCT02719912 -NCT02717923 -NCT02719977 -NCT02717936 -NCT02720055 -NCT02717962 -NCT02720068 -NCT02717975 -NCT02720081 -NCT02718001 -NCT02720185 -NCT02718027 -NCT02720211 -NCT02718066 -NCT02720302 -NCT02718092 -NCT02720315 -NCT02718131 -NCT02720341 -NCT02718144 -NCT02720367 -NCT02718300 -NCT02720458 -NCT02718365 -NCT02720484 -NCT02718378 -NCT02720510 -NCT02718391 -NCT02720601 -NCT02718404 -NCT02720614 -NCT02718417 -NCT02720640 -NCT02718430 -NCT02720666 -NCT02718443 -NCT02720679 -NCT02718482 -NCT02720796 -NCT02718495 -NCT02720822 -NCT02718534 -NCT02720861 -NCT02718560 -NCT02720926 -NCT02718586 -NCT02720952 -NCT02718677 -NCT02721043 -NCT02718703 -NCT02721056 -NCT02718742 -NCT02721069 -NCT02718755 -NCT02721147 -NCT02718820 -NCT02721173 -NCT02718833 -NCT02721186 -NCT02718846 -NCT02721251 -NCT02718859 -NCT02721277 -NCT02718911 -NCT02726334 -NCT02721394 -NCT02723890 -NCT02721407 -NCT02723877 -NCT02721433 -NCT02723942 -NCT02721459 -NCT02723955 -NCT02721550 -NCT02723994 -NCT02721563 -NCT02724020 -NCT02721576 -NCT02724059 -NCT02721589 -NCT02724163 -NCT02721641 -NCT02724176 -NCT02721732 -NCT02724202 -NCT02721745 -NCT02724228 -NCT02721771 -NCT02724254 -NCT02721784 -NCT02724267 -NCT02721862 -NCT02724306 -NCT02721875 -NCT02724332 -NCT02721979 -NCT02724358 -NCT02722135 -NCT02724397 -NCT02722278 -NCT02724410 -NCT02722330 -NCT02724436 -NCT02722343 -NCT02724462 -NCT02722369 -NCT02724475 -NCT02722512 -NCT02724540 -NCT02722525 -NCT02724579 -NCT02722538 -NCT02724618 -NCT02722551 -NCT02724670 -NCT02722616 -NCT02724696 -NCT02722668 -NCT02724722 -NCT02722681 -NCT02724761 -NCT02722720 -NCT02724774 -NCT02722733 -NCT02724865 -NCT02722772 -NCT02724878 -NCT02722785 -NCT02724904 -NCT02722798 -NCT02725047 -NCT02722811 -NCT02725125 -NCT02722941 -NCT02725268 -NCT02722954 -NCT02725411 -NCT02722980 -NCT02725424 -NCT02722993 -NCT02725463 -NCT02723006 -NCT02725489 -NCT02723032 -NCT02725502 -NCT02723071 -NCT02725541 -NCT02723240 -NCT02725632 -NCT02723253 -NCT02725658 -NCT02723305 -NCT02725671 -NCT02723331 -NCT02725801 -NCT02723435 -NCT02725879 -NCT02723474 -NCT02725918 -NCT02723500 -NCT02725996 -NCT02723539 -NCT02726009 -NCT02723552 -NCT02726048 -NCT02723578 -NCT02726087 -NCT02723617 -NCT02726113 -NCT02723656 -NCT02726139 -NCT02723721 -NCT02726152 -NCT02723838 -NCT02726295 -NCT02723864 -NCT02731352 -NCT02726399 -NCT02729298 -NCT02726451 -NCT02729220 -NCT02726477 -NCT02729324 -NCT02726503 -NCT02729350 -NCT02726568 -NCT02729454 -NCT02726581 -NCT02729493 -NCT02726763 -NCT02729506 -NCT02726854 -NCT02729545 -NCT02726919 -NCT02729558 -NCT02726984 -NCT02729636 -NCT02726997 -NCT02729649 -NCT02727010 -NCT02729701 -NCT02727114 -NCT02729727 -NCT02727153 -NCT02729740 -NCT02727179 -NCT02729753 -NCT02727231 -NCT02729883 -NCT02727244 -NCT02729896 -NCT02727309 -NCT02729909 -NCT02727361 -NCT02729948 -NCT02727387 -NCT02729961 -NCT02727465 -NCT02730052 -NCT02727530 -NCT02730065 -NCT02727569 -NCT02730091 -NCT02727582 -NCT02730130 -NCT02727647 -NCT02730169 -NCT02727686 -NCT02730195 -NCT02727777 -NCT02730247 -NCT02727803 -NCT02730299 -NCT02727868 -NCT02730312 -NCT02727959 -NCT02730338 -NCT02728050 -NCT02730351 -NCT02728076 -NCT02730390 -NCT02728102 -NCT02730416 -NCT02728167 -NCT02730429 -NCT02728193 -NCT02730442 -NCT02728219 -NCT02730481 -NCT02728258 -NCT02730533 -NCT02728349 -NCT02730546 -NCT02728375 -NCT02730585 -NCT02728388 -NCT02730598 -NCT02728427 -NCT02730728 -NCT02728440 -NCT02730767 -NCT02728492 -NCT02730793 -NCT02728531 -NCT02730858 -NCT02728544 -NCT02730884 -NCT02728596 -NCT02730923 -NCT02728622 -NCT02730975 -NCT02728700 -NCT02730988 -NCT02728765 -NCT02731001 -NCT02728830 -NCT02731014 -NCT02728882 -NCT02731118 -NCT02728921 -NCT02731170 -NCT02728999 -NCT02731287 -NCT02729012 -NCT02731300 -NCT02729051 -NCT02731313 -NCT02729194 -NCT02736617 -NCT02731417 -NCT02734199 -NCT02731469 -NCT02734186 -NCT02731586 -NCT02734251 -NCT02731729 -NCT02734290 -NCT02731742 -NCT02734329 -NCT02731872 -NCT02734342 -NCT02731924 -NCT02734368 -NCT02731989 -NCT02734394 -NCT02732015 -NCT02734433 -NCT02732119 -NCT02734446 -NCT02732145 -NCT02734459 -NCT02732171 -NCT02734524 -NCT02732184 -NCT02734537 -NCT02732275 -NCT02734615 -NCT02732314 -NCT02734680 -NCT02732327 -NCT02734771 -NCT02732392 -NCT02735018 -NCT02732431 -NCT02735057 -NCT02732483 -NCT02735083 -NCT02732587 -NCT02735109 -NCT02732600 -NCT02735239 -NCT02732613 -NCT02735252 -NCT02732678 -NCT02735291 -NCT02732691 -NCT02735317 -NCT02732743 -NCT02735343 -NCT02732769 -NCT02735356 -NCT02732795 -NCT02735421 -NCT02732912 -NCT02735447 -NCT02732925 -NCT02735668 -NCT02732938 -NCT02735681 -NCT02733042 -NCT02735694 -NCT02733068 -NCT02735707 -NCT02733107 -NCT02735785 -NCT02733133 -NCT02735798 -NCT02733159 -NCT02735837 -NCT02733172 -NCT02735850 -NCT02733250 -NCT02735863 -NCT02733276 -NCT02735876 -NCT02733328 -NCT02735928 -NCT02733367 -NCT02735980 -NCT02733380 -NCT02736123 -NCT02733458 -NCT02736240 -NCT02733510 -NCT02736266 -NCT02733549 -NCT02736305 -NCT02733666 -NCT02736370 -NCT02733679 -NCT02736435 -NCT02733744 -NCT02736448 -NCT02733809 -NCT02736461 -NCT02733861 -NCT02736500 -NCT02733887 -NCT02736513 -NCT02733965 -NCT02736552 -NCT02734004 -NCT02736565 -NCT02734082 -NCT02736578 -NCT02734121 -NCT02736591 -NCT02734160 -NCT02736604 -NCT02734173 -NCT02742558 -NCT02736721 -NCT02739672 -NCT02736734 -NCT02739659 -NCT02736916 -NCT02739698 -NCT02736942 -NCT02739737 -NCT02736968 -NCT02739958 -NCT02736981 -NCT02740088 -NCT02737046 -NCT02740114 -NCT02737072 -NCT02740127 -NCT02737085 -NCT02740153 -NCT02737189 -NCT02740166 -NCT02737202 -NCT02740270 -NCT02737228 -NCT02740322 -NCT02737267 -NCT02740400 -NCT02737332 -NCT02740413 -NCT02737436 -NCT02740426 -NCT02737449 -NCT02740543 -NCT02737462 -NCT02740673 -NCT02737475 -NCT02740686 -NCT02737501 -NCT02740712 -NCT02737527 -NCT02740738 -NCT02737553 -NCT02740777 -NCT02737592 -NCT02740790 -NCT02737631 -NCT02740920 -NCT02737709 -NCT02740933 -NCT02737735 -NCT02740959 -NCT02737761 -NCT02740972 -NCT02737774 -NCT02740985 -NCT02737787 -NCT02741024 -NCT02737839 -NCT02741245 -NCT02737852 -NCT02741388 -NCT02737930 -NCT02741401 -NCT02738138 -NCT02741440 -NCT02738177 -NCT02741453 -NCT02738268 -NCT02741492 -NCT02738294 -NCT02741531 -NCT02738346 -NCT02741544 -NCT02738398 -NCT02741570 -NCT02738450 -NCT02741609 -NCT02738489 -NCT02741674 -NCT02738606 -NCT02741687 -NCT02738671 -NCT02741778 -NCT02738697 -NCT02741856 -NCT02738723 -NCT02742051 -NCT02738827 -NCT02742090 -NCT02738853 -NCT02742116 -NCT02738866 -NCT02742129 -NCT02738970 -NCT02742155 -NCT02738983 -NCT02742168 -NCT02739204 -NCT02742272 -NCT02739243 -NCT02742298 -NCT02739425 -NCT02742311 -NCT02739529 -NCT02742376 -NCT02739555 -NCT02742402 -NCT02739594 -NCT02742415 -NCT02739620 -NCT02742428 -NCT02739633 -NCT02748135 -NCT02742597 -NCT02745392 -NCT02742675 -NCT02745301 -NCT02742727 -NCT02745483 -NCT02742844 -NCT02745496 -NCT02742883 -NCT02745509 -NCT02742935 -NCT02745561 -NCT02743078 -NCT02745587 -NCT02743221 -NCT02745600 -NCT02743234 -NCT02745639 -NCT02743338 -NCT02745717 -NCT02743351 -NCT02745743 -NCT02743364 -NCT02745756 -NCT02743429 -NCT02745769 -NCT02743442 -NCT02745808 -NCT02743455 -NCT02745847 -NCT02743494 -NCT02746029 -NCT02743546 -NCT02746081 -NCT02743598 -NCT02746185 -NCT02743611 -NCT02746224 -NCT02743637 -NCT02746328 -NCT02743650 -NCT02746367 -NCT02743741 -NCT02746432 -NCT02743819 -NCT02746536 -NCT02743832 -NCT02746562 -NCT02743845 -NCT02746588 -NCT02743923 -NCT02746614 -NCT02743949 -NCT02746666 -NCT02743975 -NCT02746770 -NCT02744053 -NCT02746783 -NCT02744079 -NCT02746796 -NCT02744092 -NCT02746809 -NCT02744131 -NCT02746887 -NCT02744157 -NCT02746952 -NCT02744170 -NCT02747004 -NCT02744274 -NCT02747043 -NCT02744287 -NCT02747056 -NCT02744352 -NCT02747264 -NCT02744469 -NCT02747290 -NCT02744495 -NCT02747303 -NCT02744508 -NCT02747342 -NCT02744521 -NCT02747394 -NCT02744534 -NCT02747485 -NCT02744612 -NCT02747511 -NCT02744651 -NCT02747537 -NCT02744664 -NCT02747550 -NCT02744703 -NCT02747563 -NCT02744729 -NCT02747654 -NCT02744742 -NCT02747732 -NCT02744768 -NCT02747797 -NCT02744898 -NCT02747810 -NCT02745002 -NCT02747849 -NCT02745054 -NCT02747888 -NCT02745093 -NCT02747953 -NCT02745171 -NCT02748005 -NCT02745197 -NCT02748018 -NCT02745288 -NCT02753270 -NCT02748161 -NCT02750514 -NCT02748174 -NCT02750423 -NCT02748213 -NCT02750618 -NCT02748291 -NCT02750644 -NCT02748304 -NCT02750670 -NCT02748343 -NCT02750761 -NCT02748356 -NCT02750826 -NCT02748395 -NCT02750839 -NCT02748434 -NCT02750891 -NCT02748525 -NCT02750995 -NCT02748551 -NCT02751008 -NCT02748564 -NCT02751151 -NCT02748616 -NCT02751177 -NCT02748681 -NCT02751190 -NCT02748707 -NCT02751255 -NCT02748746 -NCT02751307 -NCT02748772 -NCT02751385 -NCT02748798 -NCT02751502 -NCT02748811 -NCT02751528 -NCT02748837 -NCT02751580 -NCT02748850 -NCT02751606 -NCT02748889 -NCT02751710 -NCT02748902 -NCT02751736 -NCT02748941 -NCT02751892 -NCT02749019 -NCT02751918 -NCT02749071 -NCT02751944 -NCT02749110 -NCT02751996 -NCT02749123 -NCT02752009 -NCT02749136 -NCT02752035 -NCT02749201 -NCT02752061 -NCT02749214 -NCT02752074 -NCT02749227 -NCT02752113 -NCT02749292 -NCT02752126 -NCT02749331 -NCT02752204 -NCT02749344 -NCT02752243 -NCT02749474 -NCT02752256 -NCT02749513 -NCT02752360 -NCT02749565 -NCT02752373 -NCT02749682 -NCT02752399 -NCT02749708 -NCT02752516 -NCT02749786 -NCT02752542 -NCT02749825 -NCT02752620 -NCT02749877 -NCT02752659 -NCT02749903 -NCT02752685 -NCT02749929 -NCT02752698 -NCT02750046 -NCT02752711 -NCT02750085 -NCT02752815 -NCT02750124 -NCT02752841 -NCT02750202 -NCT02752906 -NCT02750215 -NCT02752932 -NCT02750228 -NCT02752971 -NCT02750241 -NCT02753023 -NCT02750254 -NCT02753062 -NCT02750319 -NCT02753127 -NCT02750358 -NCT02753140 -NCT02750371 -NCT02758366 -NCT02753283 -NCT02756130 -NCT02753309 -NCT02756104 -NCT02753361 -NCT02756247 -NCT02753465 -NCT02756299 -NCT02753543 -NCT02756312 -NCT02753595 -NCT02756325 -NCT02753621 -NCT02756364 -NCT02753634 -NCT02756468 -NCT02753647 -NCT02756572 -NCT02753686 -NCT02756611 -NCT02753764 -NCT02756650 -NCT02753777 -NCT02756663 -NCT02753790 -NCT02756728 -NCT02753881 -NCT02756754 -NCT02753920 -NCT02756780 -NCT02753972 -NCT02756793 -NCT02754011 -NCT02756845 -NCT02754128 -NCT02756897 -NCT02754141 -NCT02756910 -NCT02754180 -NCT02756962 -NCT02754232 -NCT02757040 -NCT02754245 -NCT02757066 -NCT02754258 -NCT02757079 -NCT02754297 -NCT02757092 -NCT02754362 -NCT02757105 -NCT02754427 -NCT02757170 -NCT02754453 -NCT02757222 -NCT02754544 -NCT02757248 -NCT02754661 -NCT02757326 -NCT02754726 -NCT02757365 -NCT02754752 -NCT02757391 -NCT02754765 -NCT02757495 -NCT02754856 -NCT02757534 -NCT02754882 -NCT02757547 -NCT02754908 -NCT02757573 -NCT02754973 -NCT02757586 -NCT02754999 -NCT02757612 -NCT02755142 -NCT02757651 -NCT02755168 -NCT02757690 -NCT02755272 -NCT02757768 -NCT02755285 -NCT02757859 -NCT02755311 -NCT02757885 -NCT02755363 -NCT02757963 -NCT02755454 -NCT02757989 -NCT02755480 -NCT02758015 -NCT02755519 -NCT02758054 -NCT02755597 -NCT02758106 -NCT02755675 -NCT02758132 -NCT02755727 -NCT02758158 -NCT02755753 -NCT02758197 -NCT02755766 -NCT02758223 -NCT02755844 -NCT02758236 -NCT02755883 -NCT02758249 -NCT02755896 -NCT02758275 -NCT02755961 -NCT02758327 -NCT02755987 -NCT02764242 -NCT02758431 -NCT02760940 -NCT02758483 -NCT02760914 -NCT02758548 -NCT02760953 -NCT02758587 -NCT02761057 -NCT02758639 -NCT02761070 -NCT02758665 -NCT02761083 -NCT02758704 -NCT02761096 -NCT02758717 -NCT02761174 -NCT02758860 -NCT02761239 -NCT02758912 -NCT02761252 -NCT02758925 -NCT02761265 -NCT02758951 -NCT02761291 -NCT02758977 -NCT02761460 -NCT02759016 -NCT02761473 -NCT02759094 -NCT02761499 -NCT02759133 -NCT02761694 -NCT02759146 -NCT02761707 -NCT02759250 -NCT02761824 -NCT02759302 -NCT02761889 -NCT02759380 -NCT02761902 -NCT02759393 -NCT02761915 -NCT02759536 -NCT02761928 -NCT02759549 -NCT02761980 -NCT02759562 -NCT02762006 -NCT02759575 -NCT02762084 -NCT02759588 -NCT02762188 -NCT02759601 -NCT02762214 -NCT02759614 -NCT02762266 -NCT02759640 -NCT02762318 -NCT02759653 -NCT02762474 -NCT02759666 -NCT02762487 -NCT02759679 -NCT02762513 -NCT02759718 -NCT02762682 -NCT02759744 -NCT02762760 -NCT02759757 -NCT02762981 -NCT02759783 -NCT02763111 -NCT02759796 -NCT02763176 -NCT02759835 -NCT02763215 -NCT02759900 -NCT02763228 -NCT02760030 -NCT02763254 -NCT02760108 -NCT02763319 -NCT02760160 -NCT02763384 -NCT02760199 -NCT02763423 -NCT02760225 -NCT02763475 -NCT02760264 -NCT02763566 -NCT02760420 -NCT02763579 -NCT02760485 -NCT02763722 -NCT02760498 -NCT02763748 -NCT02760524 -NCT02763761 -NCT02760537 -NCT02763826 -NCT02760602 -NCT02763865 -NCT02760667 -NCT02764086 -NCT02760745 -NCT02764151 -NCT02760797 -NCT02764177 -NCT02760849 -NCT02764216 -NCT02760862 -NCT02770469 -NCT02764268 -NCT02767362 -NCT02764281 -NCT02767297 -NCT02764333 -NCT02767375 -NCT02764372 -NCT02767453 -NCT02764541 -NCT02767557 -NCT02764593 -NCT02767609 -NCT02764645 -NCT02767635 -NCT02764723 -NCT02767661 -NCT02764801 -NCT02767674 -NCT02764866 -NCT02767726 -NCT02764944 -NCT02767752 -NCT02765035 -NCT02767804 -NCT02765048 -NCT02767921 -NCT02765113 -NCT02767934 -NCT02765165 -NCT02767973 -NCT02765217 -NCT02768181 -NCT02765243 -NCT02768207 -NCT02765256 -NCT02768233 -NCT02765269 -NCT02768259 -NCT02765308 -NCT02768337 -NCT02765451 -NCT02768363 -NCT02765490 -NCT02768389 -NCT02765503 -NCT02768402 -NCT02765581 -NCT02768415 -NCT02765620 -NCT02768428 -NCT02765750 -NCT02768454 -NCT02765776 -NCT02768545 -NCT02765789 -NCT02768558 -NCT02765802 -NCT02768701 -NCT02765854 -NCT02768714 -NCT02765919 -NCT02768753 -NCT02765984 -NCT02768766 -NCT02765997 -NCT02768792 -NCT02766114 -NCT02768870 -NCT02766270 -NCT02768896 -NCT02766335 -NCT02769000 -NCT02766348 -NCT02769039 -NCT02766465 -NCT02769286 -NCT02766478 -NCT02769442 -NCT02766491 -NCT02769494 -NCT02766517 -NCT02769520 -NCT02766530 -NCT02769650 -NCT02766543 -NCT02769832 -NCT02766582 -NCT02769858 -NCT02766621 -NCT02769884 -NCT02766686 -NCT02769949 -NCT02766699 -NCT02769962 -NCT02766764 -NCT02769988 -NCT02766842 -NCT02770014 -NCT02766868 -NCT02770040 -NCT02766933 -NCT02770157 -NCT02767063 -NCT02770326 -NCT02767115 -NCT02770378 -NCT02767128 -NCT02770391 -NCT02767193 -NCT02770443 -NCT02767271 -NCT02775136 -NCT02770534 -NCT02773004 -NCT02770586 -NCT02772913 -NCT02770703 -NCT02773030 -NCT02770781 -NCT02773095 -NCT02770820 -NCT02773238 -NCT02770833 -NCT02773251 -NCT02770846 -NCT02773264 -NCT02770859 -NCT02773290 -NCT02770911 -NCT02773316 -NCT02771028 -NCT02773329 -NCT02771119 -NCT02773407 -NCT02771145 -NCT02773446 -NCT02771184 -NCT02773459 -NCT02771197 -NCT02773485 -NCT02771236 -NCT02773498 -NCT02771262 -NCT02773524 -NCT02771275 -NCT02773537 -NCT02771301 -NCT02773550 -NCT02771314 -NCT02773563 -NCT02771340 -NCT02773589 -NCT02771353 -NCT02773654 -NCT02771405 -NCT02773719 -NCT02771418 -NCT02773732 -NCT02771444 -NCT02773784 -NCT02771470 -NCT02773849 -NCT02771483 -NCT02773888 -NCT02771496 -NCT02773940 -NCT02771561 -NCT02773966 -NCT02771587 -NCT02773992 -NCT02771600 -NCT02774109 -NCT02771626 -NCT02774148 -NCT02771743 -NCT02774161 -NCT02771756 -NCT02774187 -NCT02771769 -NCT02774200 -NCT02771860 -NCT02774239 -NCT02771873 -NCT02774278 -NCT02771938 -NCT02774291 -NCT02772003 -NCT02774304 -NCT02772029 -NCT02774369 -NCT02772042 -NCT02774434 -NCT02772094 -NCT02774460 -NCT02772107 -NCT02774512 -NCT02772198 -NCT02774538 -NCT02772380 -NCT02774551 -NCT02772432 -NCT02774590 -NCT02772510 -NCT02774668 -NCT02772549 -NCT02774681 -NCT02772562 -NCT02774707 -NCT02772588 -NCT02774733 -NCT02772627 -NCT02774746 -NCT02772692 -NCT02774759 -NCT02772731 -NCT02774785 -NCT02772757 -NCT02774928 -NCT02772822 -NCT02774993 -NCT02772848 -NCT02775006 -NCT02772900 -NCT02780401 -NCT02775227 -NCT02777684 -NCT02775292 -NCT02777606 -NCT02775318 -NCT02777710 -NCT02775370 -NCT02777736 -NCT02775396 -NCT02777762 -NCT02775435 -NCT02777788 -NCT02775461 -NCT02777801 -NCT02775578 -NCT02777814 -NCT02775630 -NCT02777827 -NCT02775695 -NCT02777866 -NCT02775786 -NCT02777996 -NCT02775799 -NCT02778087 -NCT02775812 -NCT02778126 -NCT02775851 -NCT02778204 -NCT02775903 -NCT02778217 -NCT02775916 -NCT02778243 -NCT02775968 -NCT02778295 -NCT02776072 -NCT02778308 -NCT02776124 -NCT02778386 -NCT02776137 -NCT02778399 -NCT02776150 -NCT02778425 -NCT02776163 -NCT02778685 -NCT02776176 -NCT02778763 -NCT02776202 -NCT02778893 -NCT02776215 -NCT02778906 -NCT02776228 -NCT02779023 -NCT02776345 -NCT02779062 -NCT02776397 -NCT02779101 -NCT02776436 -NCT02779153 -NCT02776462 -NCT02779166 -NCT02776527 -NCT02779257 -NCT02776540 -NCT02779283 -NCT02776605 -NCT02779348 -NCT02776683 -NCT02779426 -NCT02776709 -NCT02779465 -NCT02776748 -NCT02779478 -NCT02776787 -NCT02779543 -NCT02776813 -NCT02779608 -NCT02776826 -NCT02779621 -NCT02776878 -NCT02779699 -NCT02776891 -NCT02779725 -NCT02776917 -NCT02779751 -NCT02776930 -NCT02779777 -NCT02776943 -NCT02779816 -NCT02776969 -NCT02779855 -NCT02776995 -NCT02779959 -NCT02777060 -NCT02780011 -NCT02777073 -NCT02780024 -NCT02777099 -NCT02780128 -NCT02777164 -NCT02780180 -NCT02777203 -NCT02780271 -NCT02777242 -NCT02780284 -NCT02777320 -NCT02780310 -NCT02777385 -NCT02780349 -NCT02777398 -NCT02780388 -NCT02777437 -NCT02785146 -NCT02780479 -NCT02782715 -NCT02780492 -NCT02782689 -NCT02780531 -NCT02782754 -NCT02780570 -NCT02782832 -NCT02780583 -NCT02782845 -NCT02780596 -NCT02782858 -NCT02780609 -NCT02782871 -NCT02780648 -NCT02782884 -NCT02780687 -NCT02782949 -NCT02780700 -NCT02783118 -NCT02780713 -NCT02783183 -NCT02780765 -NCT02783222 -NCT02780778 -NCT02783235 -NCT02780804 -NCT02783300 -NCT02780830 -NCT02783326 -NCT02780882 -NCT02783391 -NCT02780895 -NCT02783404 -NCT02780921 -NCT02783495 -NCT02780934 -NCT02783508 -NCT02780947 -NCT02783547 -NCT02780960 -NCT02783573 -NCT02780999 -NCT02783599 -NCT02781012 -NCT02783625 -NCT02781051 -NCT02783690 -NCT02781155 -NCT02783755 -NCT02781181 -NCT02783794 -NCT02781207 -NCT02783820 -NCT02781259 -NCT02783898 -NCT02781298 -NCT02783950 -NCT02781363 -NCT02783989 -NCT02781402 -NCT02784015 -NCT02781415 -NCT02784028 -NCT02781441 -NCT02784054 -NCT02781454 -NCT02784093 -NCT02781467 -NCT02784171 -NCT02781506 -NCT02784184 -NCT02781571 -NCT02784288 -NCT02781701 -NCT02784314 -NCT02781714 -NCT02784353 -NCT02781766 -NCT02784470 -NCT02781792 -NCT02784483 -NCT02781805 -NCT02784561 -NCT02781870 -NCT02784613 -NCT02781883 -NCT02784639 -NCT02782013 -NCT02784652 -NCT02782052 -NCT02784678 -NCT02782065 -NCT02784730 -NCT02782182 -NCT02784795 -NCT02782195 -NCT02784834 -NCT02782247 -NCT02784899 -NCT02782325 -NCT02784977 -NCT02782351 -NCT02785029 -NCT02782403 -NCT02785042 -NCT02782468 -NCT02785068 -NCT02782533 -NCT02785120 -NCT02782546 -NCT02790580 -NCT02785250 -NCT02788019 -NCT02785263 -NCT02788006 -NCT02785341 -NCT02788058 -NCT02785380 -NCT02788136 -NCT02785419 -NCT02788149 -NCT02785510 -NCT02788188 -NCT02785523 -NCT02788201 -NCT02785562 -NCT02788214 -NCT02785679 -NCT02788279 -NCT02785757 -NCT02788461 -NCT02785783 -NCT02788513 -NCT02785861 -NCT02788526 -NCT02785874 -NCT02788604 -NCT02785887 -NCT02788643 -NCT02785900 -NCT02788708 -NCT02785913 -NCT02788773 -NCT02785939 -NCT02788825 -NCT02785952 -NCT02788890 -NCT02786017 -NCT02788942 -NCT02786082 -NCT02788955 -NCT02786238 -NCT02788981 -NCT02786290 -NCT02789020 -NCT02786303 -NCT02789163 -NCT02786316 -NCT02789189 -NCT02786329 -NCT02789228 -NCT02786368 -NCT02789254 -NCT02786433 -NCT02789267 -NCT02786459 -NCT02789306 -NCT02786485 -NCT02789332 -NCT02786524 -NCT02789345 -NCT02786589 -NCT02789371 -NCT02786641 -NCT02789384 -NCT02786719 -NCT02789436 -NCT02786797 -NCT02789488 -NCT02786875 -NCT02789566 -NCT02786927 -NCT02789579 -NCT02786940 -NCT02789592 -NCT02787005 -NCT02789605 -NCT02787187 -NCT02789657 -NCT02787239 -NCT02789735 -NCT02787330 -NCT02789800 -NCT02787369 -NCT02789826 -NCT02787434 -NCT02789852 -NCT02787447 -NCT02789865 -NCT02787473 -NCT02789878 -NCT02787486 -NCT02789891 -NCT02787512 -NCT02789917 -NCT02787603 -NCT02790112 -NCT02787616 -NCT02790138 -NCT02787642 -NCT02790190 -NCT02787811 -NCT02790294 -NCT02787863 -NCT02790333 -NCT02787876 -NCT02790463 -NCT02787915 -NCT02790489 -NCT02787980 -NCT02790515 -NCT02787993 -NCT02796846 -NCT02790827 -NCT02793908 -NCT02790853 -NCT02793869 -NCT02790866 -NCT02793921 -NCT02790918 -NCT02793934 -NCT02791191 -NCT02794012 -NCT02791334 -NCT02794064 -NCT02791360 -NCT02794077 -NCT02791373 -NCT02794103 -NCT02791503 -NCT02794129 -NCT02791516 -NCT02794194 -NCT02791581 -NCT02794246 -NCT02791607 -NCT02794324 -NCT02791698 -NCT02794337 -NCT02791724 -NCT02794428 -NCT02791737 -NCT02794454 -NCT02791776 -NCT02794467 -NCT02791828 -NCT02794532 -NCT02791880 -NCT02794558 -NCT02791893 -NCT02794571 -NCT02791919 -NCT02794675 -NCT02792023 -NCT02794766 -NCT02792036 -NCT02794805 -NCT02792114 -NCT02794844 -NCT02792192 -NCT02794857 -NCT02792205 -NCT02794870 -NCT02792257 -NCT02794883 -NCT02792270 -NCT02794909 -NCT02792322 -NCT02794948 -NCT02792426 -NCT02794974 -NCT02792452 -NCT02795104 -NCT02792465 -NCT02795156 -NCT02792491 -NCT02795182 -NCT02792530 -NCT02795195 -NCT02792582 -NCT02795234 -NCT02792608 -NCT02795312 -NCT02792738 -NCT02795364 -NCT02792842 -NCT02795429 -NCT02792881 -NCT02795442 -NCT02792894 -NCT02795520 -NCT02792959 -NCT02795572 -NCT02793076 -NCT02795650 -NCT02793128 -NCT02795767 -NCT02793206 -NCT02795819 -NCT02793219 -NCT02795858 -NCT02793232 -NCT02795884 -NCT02793284 -NCT02795988 -NCT02793375 -NCT02796209 -NCT02793466 -NCT02796261 -NCT02793479 -NCT02796352 -NCT02793531 -NCT02796365 -NCT02793544 -NCT02796391 -NCT02793583 -NCT02796443 -NCT02793739 -NCT02796729 -NCT02793765 -NCT02796807 -NCT02793791 -NCT02796820 -NCT02793856 -NCT02802865 -NCT02796898 -NCT02799836 -NCT02797119 -NCT02799823 -NCT02797158 -NCT02799901 -NCT02797171 -NCT02799953 -NCT02797197 -NCT02800005 -NCT02797275 -NCT02800135 -NCT02797314 -NCT02800174 -NCT02797366 -NCT02800317 -NCT02797405 -NCT02800330 -NCT02797470 -NCT02800369 -NCT02797574 -NCT02800447 -NCT02797587 -NCT02800460 -NCT02797600 -NCT02800473 -NCT02797626 -NCT02800486 -NCT02797639 -NCT02800525 -NCT02797665 -NCT02800551 -NCT02797678 -NCT02800629 -NCT02797704 -NCT02800759 -NCT02797717 -NCT02800785 -NCT02797795 -NCT02800889 -NCT02797834 -NCT02800954 -NCT02797964 -NCT02801032 -NCT02797977 -NCT02801045 -NCT02798029 -NCT02801097 -NCT02798172 -NCT02801123 -NCT02798224 -NCT02801383 -NCT02798406 -NCT02801409 -NCT02798484 -NCT02801487 -NCT02798510 -NCT02801500 -NCT02798536 -NCT02801565 -NCT02798562 -NCT02801578 -NCT02798653 -NCT02801656 -NCT02798666 -NCT02801734 -NCT02798744 -NCT02801955 -NCT02798796 -NCT02801994 -NCT02798965 -NCT02802072 -NCT02798978 -NCT02802098 -NCT02799030 -NCT02802124 -NCT02799069 -NCT02802163 -NCT02799082 -NCT02802267 -NCT02799095 -NCT02802319 -NCT02799147 -NCT02802332 -NCT02799212 -NCT02802358 -NCT02799238 -NCT02802384 -NCT02799277 -NCT02802423 -NCT02799303 -NCT02802449 -NCT02799420 -NCT02802540 -NCT02799472 -NCT02802553 -NCT02799485 -NCT02802566 -NCT02799550 -NCT02802657 -NCT02799589 -NCT02802748 -NCT02799602 -NCT02802774 -NCT02799615 -NCT02802787 -NCT02799693 -NCT02802800 -NCT02799706 -NCT02802826 -NCT02799745 -NCT02809560 -NCT02802878 -NCT02806609 -NCT02802943 -NCT02806544 -NCT02802969 -NCT02806648 -NCT02803151 -NCT02806661 -NCT02803190 -NCT02806687 -NCT02803203 -NCT02806817 -NCT02803320 -NCT02806882 -NCT02803346 -NCT02806999 -NCT02803515 -NCT02807025 -NCT02803593 -NCT02807077 -NCT02803658 -NCT02807103 -NCT02803697 -NCT02807129 -NCT02803736 -NCT02807181 -NCT02803788 -NCT02807233 -NCT02803801 -NCT02807246 -NCT02803814 -NCT02807272 -NCT02803840 -NCT02807337 -NCT02803892 -NCT02807454 -NCT02803957 -NCT02807545 -NCT02804178 -NCT02807558 -NCT02804230 -NCT02807597 -NCT02804308 -NCT02807623 -NCT02804646 -NCT02807636 -NCT02804750 -NCT02807649 -NCT02804776 -NCT02807740 -NCT02804789 -NCT02807753 -NCT02804815 -NCT02807805 -NCT02804893 -NCT02807844 -NCT02805075 -NCT02807883 -NCT02805153 -NCT02808000 -NCT02805166 -NCT02808013 -NCT02805179 -NCT02808091 -NCT02805205 -NCT02808143 -NCT02805218 -NCT02808247 -NCT02805296 -NCT02808299 -NCT02805530 -NCT02808364 -NCT02805608 -NCT02808377 -NCT02805647 -NCT02808416 -NCT02805660 -NCT02808442 -NCT02805725 -NCT02808494 -NCT02805816 -NCT02808598 -NCT02805829 -NCT02808624 -NCT02805868 -NCT02808650 -NCT02805894 -NCT02808793 -NCT02805920 -NCT02808832 -NCT02805998 -NCT02808884 -NCT02806050 -NCT02808897 -NCT02806076 -NCT02809040 -NCT02806115 -NCT02809053 -NCT02806167 -NCT02809092 -NCT02806258 -NCT02809118 -NCT02806297 -NCT02809222 -NCT02806310 -NCT02809235 -NCT02806414 -NCT02809352 -NCT02806479 -NCT02809534 -NCT02806492 -NCT02814968 -NCT02809573 -NCT02812420 -NCT02809599 -NCT02812394 -NCT02809651 -NCT02812511 -NCT02809690 -NCT02812524 -NCT02809729 -NCT02812550 -NCT02809807 -NCT02812589 -NCT02809833 -NCT02812615 -NCT02809846 -NCT02812628 -NCT02809859 -NCT02812641 -NCT02809872 -NCT02812654 -NCT02809911 -NCT02812667 -NCT02810015 -NCT02812693 -NCT02810028 -NCT02812706 -NCT02810223 -NCT02812719 -NCT02810236 -NCT02812836 -NCT02810288 -NCT02812875 -NCT02810418 -NCT02812914 -NCT02810457 -NCT02812992 -NCT02810483 -NCT02813005 -NCT02810652 -NCT02813044 -NCT02810730 -NCT02813057 -NCT02810743 -NCT02813096 -NCT02810847 -NCT02813122 -NCT02810860 -NCT02813135 -NCT02810873 -NCT02813226 -NCT02810886 -NCT02813278 -NCT02810899 -NCT02813603 -NCT02810912 -NCT02813616 -NCT02810990 -NCT02813655 -NCT02811120 -NCT02813694 -NCT02811146 -NCT02813746 -NCT02811172 -NCT02813785 -NCT02811250 -NCT02813837 -NCT02811354 -NCT02813876 -NCT02811367 -NCT02813902 -NCT02811497 -NCT02813928 -NCT02811523 -NCT02813967 -NCT02811549 -NCT02813993 -NCT02811614 -NCT02814006 -NCT02811666 -NCT02814019 -NCT02811679 -NCT02814032 -NCT02811718 -NCT02814045 -NCT02811783 -NCT02814175 -NCT02811809 -NCT02814201 -NCT02811822 -NCT02814227 -NCT02811861 -NCT02814318 -NCT02811887 -NCT02814396 -NCT02811900 -NCT02814448 -NCT02811926 -NCT02814461 -NCT02811978 -NCT02814656 -NCT02812056 -NCT02814669 -NCT02812069 -NCT02814695 -NCT02812173 -NCT02814799 -NCT02812186 -NCT02814916 -NCT02812225 -NCT02814929 -NCT02812316 -NCT02821559 -NCT02815007 -NCT02818530 -NCT02815033 -NCT02818426 -NCT02815059 -NCT02818660 -NCT02815072 -NCT02818725 -NCT02815137 -NCT02818777 -NCT02815150 -NCT02818816 -NCT02815267 -NCT02818829 -NCT02815280 -NCT02818907 -NCT02815319 -NCT02818920 -NCT02815397 -NCT02818946 -NCT02815410 -NCT02819011 -NCT02815436 -NCT02819024 -NCT02815488 -NCT02819245 -NCT02815553 -NCT02819479 -NCT02815566 -NCT02819518 -NCT02815592 -NCT02819583 -NCT02815709 -NCT02819596 -NCT02815761 -NCT02819752 -NCT02815982 -NCT02819804 -NCT02815995 -NCT02819843 -NCT02816021 -NCT02819856 -NCT02816099 -NCT02819869 -NCT02816112 -NCT02819921 -NCT02816125 -NCT02819960 -NCT02816164 -NCT02819999 -NCT02816281 -NCT02820012 -NCT02816294 -NCT02820077 -NCT02816333 -NCT02820116 -NCT02816476 -NCT02820142 -NCT02816645 -NCT02820155 -NCT02816658 -NCT02820194 -NCT02816697 -NCT02820415 -NCT02816762 -NCT02820454 -NCT02816840 -NCT02820506 -NCT02816866 -NCT02820584 -NCT02816879 -NCT02820688 -NCT02816944 -NCT02820714 -NCT02817113 -NCT02820740 -NCT02817126 -NCT02820844 -NCT02817178 -NCT02820857 -NCT02817308 -NCT02820896 -NCT02817334 -NCT02820961 -NCT02817347 -NCT02820974 -NCT02817425 -NCT02821000 -NCT02817464 -NCT02821013 -NCT02817490 -NCT02821026 -NCT02817581 -NCT02821169 -NCT02817607 -NCT02821182 -NCT02817633 -NCT02821234 -NCT02817724 -NCT02821442 -NCT02817893 -NCT02821468 -NCT02817945 -NCT02821494 -NCT02817958 -NCT02821507 -NCT02817997 -NCT02821533 -NCT02818023 -NCT02821546 -NCT02818179 -NCT02827877 -NCT02821637 -NCT02824926 -NCT02821650 -NCT02824861 -NCT02821676 -NCT02824952 -NCT02821728 -NCT02824965 -NCT02821741 -NCT02825043 -NCT02821754 -NCT02825095 -NCT02821832 -NCT02825108 -NCT02821884 -NCT02825147 -NCT02821923 -NCT02825199 -NCT02821936 -NCT02825212 -NCT02821988 -NCT02825225 -NCT02822014 -NCT02825238 -NCT02822053 -NCT02825290 -NCT02822066 -NCT02825550 -NCT02822157 -NCT02825563 -NCT02822196 -NCT02825628 -NCT02822209 -NCT02825719 -NCT02822287 -NCT02825810 -NCT02822326 -NCT02825836 -NCT02822378 -NCT02825940 -NCT02822456 -NCT02826005 -NCT02822482 -NCT02826031 -NCT02822508 -NCT02826161 -NCT02822586 -NCT02826304 -NCT02822716 -NCT02826343 -NCT02822794 -NCT02826369 -NCT02822807 -NCT02826382 -NCT02822833 -NCT02826408 -NCT02822846 -NCT02826434 -NCT02822924 -NCT02826486 -NCT02822963 -NCT02826512 -NCT02823223 -NCT02826564 -NCT02823262 -NCT02826642 -NCT02823314 -NCT02826655 -NCT02823405 -NCT02826720 -NCT02823574 -NCT02826746 -NCT02823626 -NCT02826772 -NCT02823652 -NCT02826837 -NCT02823691 -NCT02826850 -NCT02823704 -NCT02826889 -NCT02823795 -NCT02826928 -NCT02823847 -NCT02827006 -NCT02823860 -NCT02827019 -NCT02823899 -NCT02827175 -NCT02823912 -NCT02827201 -NCT02823990 -NCT02827318 -NCT02824029 -NCT02827370 -NCT02824133 -NCT02827552 -NCT02824172 -NCT02827565 -NCT02824289 -NCT02827617 -NCT02824458 -NCT02827630 -NCT02824484 -NCT02827682 -NCT02824523 -NCT02827734 -NCT02824575 -NCT02827838 -NCT02824718 -NCT02827851 -NCT02824731 -NCT02833480 -NCT02827955 -NCT02830633 -NCT02827968 -NCT02830620 -NCT02827994 -NCT02830685 -NCT02828020 -NCT02830724 -NCT02828085 -NCT02830737 -NCT02828098 -NCT02830880 -NCT02828111 -NCT02830984 -NCT02828124 -NCT02831049 -NCT02828150 -NCT02831088 -NCT02828163 -NCT02831179 -NCT02828189 -NCT02831192 -NCT02828241 -NCT02831244 -NCT02828358 -NCT02831257 -NCT02828410 -NCT02831296 -NCT02828449 -NCT02831374 -NCT02828514 -NCT02831387 -NCT02828527 -NCT02831426 -NCT02828618 -NCT02831439 -NCT02828670 -NCT02831491 -NCT02828709 -NCT02831530 -NCT02828774 -NCT02831569 -NCT02828839 -NCT02831582 -NCT02828865 -NCT02831634 -NCT02828930 -NCT02831686 -NCT02829008 -NCT02831699 -NCT02829021 -NCT02831712 -NCT02829047 -NCT02831855 -NCT02829060 -NCT02831894 -NCT02829099 -NCT02831920 -NCT02829359 -NCT02831933 -NCT02829385 -NCT02831959 -NCT02829450 -NCT02831985 -NCT02829619 -NCT02832011 -NCT02829684 -NCT02832063 -NCT02829723 -NCT02832154 -NCT02829749 -NCT02832167 -NCT02829762 -NCT02832401 -NCT02829775 -NCT02832414 -NCT02829840 -NCT02832492 -NCT02829853 -NCT02832635 -NCT02829918 -NCT02832648 -NCT02829931 -NCT02832713 -NCT02830048 -NCT02832765 -NCT02830139 -NCT02832830 -NCT02830165 -NCT02832882 -NCT02830204 -NCT02832947 -NCT02830321 -NCT02832960 -NCT02830347 -NCT02833038 -NCT02830360 -NCT02833090 -NCT02830399 -NCT02833103 -NCT02830412 -NCT02833155 -NCT02830425 -NCT02833168 -NCT02830477 -NCT02833233 -NCT02830568 -NCT02833246 -NCT02830594 -NCT02833298 -NCT02830607 -NCT02839356 -NCT02833493 -NCT02836769 -NCT02833506 -NCT02836743 -NCT02833610 -NCT02836795 -NCT02833636 -NCT02836821 -NCT02833662 -NCT02836834 -NCT02833701 -NCT02836847 -NCT02833714 -NCT02836860 -NCT02833753 -NCT02836899 -NCT02833766 -NCT02836925 -NCT02833870 -NCT02836977 -NCT02833883 -NCT02837029 -NCT02833896 -NCT02837042 -NCT02833909 -NCT02837146 -NCT02833974 -NCT02837159 -NCT02834013 -NCT02837172 -NCT02834052 -NCT02837237 -NCT02834247 -NCT02837263 -NCT02834286 -NCT02837367 -NCT02834364 -NCT02837523 -NCT02834390 -NCT02837679 -NCT02834403 -NCT02837757 -NCT02834416 -NCT02837783 -NCT02834429 -NCT02837809 -NCT02834455 -NCT02837874 -NCT02834494 -NCT02837900 -NCT02834611 -NCT02837926 -NCT02834780 -NCT02837965 -NCT02834975 -NCT02837991 -NCT02835157 -NCT02838095 -NCT02835222 -NCT02838186 -NCT02835352 -NCT02838225 -NCT02835391 -NCT02838238 -NCT02835404 -NCT02838277 -NCT02835443 -NCT02838342 -NCT02835521 -NCT02838368 -NCT02835599 -NCT02838381 -NCT02835625 -NCT02838420 -NCT02835690 -NCT02838433 -NCT02835729 -NCT02838576 -NCT02835794 -NCT02838602 -NCT02835807 -NCT02838628 -NCT02835820 -NCT02838641 -NCT02835833 -NCT02838654 -NCT02835924 -NCT02838680 -NCT02836028 -NCT02838745 -NCT02836158 -NCT02838758 -NCT02836171 -NCT02838823 -NCT02836288 -NCT02838849 -NCT02836405 -NCT02838966 -NCT02836496 -NCT02839031 -NCT02836509 -NCT02839096 -NCT02836548 -NCT02839109 -NCT02836600 -NCT02839265 -NCT02836639 -NCT02839291 -NCT02836665 -NCT02839343 -NCT02836717 -NCT02844582 -NCT02839434 -NCT02842099 -NCT02839473 -NCT02842047 -NCT02839564 -NCT02842125 -NCT02839577 -NCT02842138 -NCT02839655 -NCT02842268 -NCT02839668 -NCT02842320 -NCT02839681 -NCT02842333 -NCT02839694 -NCT02842346 -NCT02839707 -NCT02842359 -NCT02839720 -NCT02842541 -NCT02839759 -NCT02842580 -NCT02839785 -NCT02842658 -NCT02839889 -NCT02842723 -NCT02839954 -NCT02842736 -NCT02840058 -NCT02842749 -NCT02840123 -NCT02842814 -NCT02840149 -NCT02842827 -NCT02840162 -NCT02842892 -NCT02840201 -NCT02842905 -NCT02840214 -NCT02842931 -NCT02840227 -NCT02843061 -NCT02840266 -NCT02843074 -NCT02840292 -NCT02843126 -NCT02840331 -NCT02843165 -NCT02840344 -NCT02843191 -NCT02840409 -NCT02843217 -NCT02840461 -NCT02843347 -NCT02840487 -NCT02843386 -NCT02840539 -NCT02843425 -NCT02840552 -NCT02843516 -NCT02840617 -NCT02843529 -NCT02840864 -NCT02843568 -NCT02840890 -NCT02843581 -NCT02840929 -NCT02843607 -NCT02840981 -NCT02843633 -NCT02840994 -NCT02843750 -NCT02841020 -NCT02843763 -NCT02841033 -NCT02843802 -NCT02841124 -NCT02843815 -NCT02841137 -NCT02843945 -NCT02841163 -NCT02844023 -NCT02841215 -NCT02844062 -NCT02841228 -NCT02844075 -NCT02841254 -NCT02844101 -NCT02841332 -NCT02844114 -NCT02841436 -NCT02844140 -NCT02841540 -NCT02844192 -NCT02841553 -NCT02844335 -NCT02841579 -NCT02844387 -NCT02841605 -NCT02844439 -NCT02841722 -NCT02844465 -NCT02841748 -NCT02844478 -NCT02841800 -NCT02844504 -NCT02841904 -NCT02844517 -NCT02842008 -NCT02844569 -NCT02842021 -NCT02850172 -NCT02844608 -NCT02847845 -NCT02844647 -NCT02847832 -NCT02844699 -NCT02847871 -NCT02844751 -NCT02847897 -NCT02844777 -NCT02847923 -NCT02844816 -NCT02847949 -NCT02844829 -NCT02847975 -NCT02844868 -NCT02848001 -NCT02844881 -NCT02848027 -NCT02845024 -NCT02848079 -NCT02845050 -NCT02848183 -NCT02845115 -NCT02848196 -NCT02845297 -NCT02848235 -NCT02845323 -NCT02848248 -NCT02845414 -NCT02848443 -NCT02845427 -NCT02848495 -NCT02845466 -NCT02848573 -NCT02845479 -NCT02848651 -NCT02845596 -NCT02848664 -NCT02845752 -NCT02848716 -NCT02845843 -NCT02848755 -NCT02845856 -NCT02848781 -NCT02845882 -NCT02848794 -NCT02845908 -NCT02848807 -NCT02845986 -NCT02848820 -NCT02845999 -NCT02848911 -NCT02846103 -NCT02848989 -NCT02846376 -NCT02849015 -NCT02846389 -NCT02849041 -NCT02846428 -NCT02849093 -NCT02846454 -NCT02849106 -NCT02846467 -NCT02849119 -NCT02846584 -NCT02849145 -NCT02846623 -NCT02849158 -NCT02846714 -NCT02849171 -NCT02846766 -NCT02849314 -NCT02846792 -NCT02849327 -NCT02846870 -NCT02849340 -NCT02846935 -NCT02849353 -NCT02846974 -NCT02849366 -NCT02846987 -NCT02849379 -NCT02847000 -NCT02849418 -NCT02847065 -NCT02849444 -NCT02847078 -NCT02849457 -NCT02847247 -NCT02849496 -NCT02847377 -NCT02849535 -NCT02847403 -NCT02849548 -NCT02847429 -NCT02849678 -NCT02847468 -NCT02849717 -NCT02847559 -NCT02849743 -NCT02847637 -NCT02849977 -NCT02847689 -NCT02849990 -NCT02847715 -NCT02850042 -NCT02847754 -NCT02850068 -NCT02847767 -NCT02850081 -NCT02847806 -NCT02856113 -NCT02850302 -NCT02853292 -NCT02850419 -NCT02853188 -NCT02850497 -NCT02853305 -NCT02850536 -NCT02853318 -NCT02850588 -NCT02853331 -NCT02850744 -NCT02853344 -NCT02850796 -NCT02853357 -NCT02850848 -NCT02853370 -NCT02850874 -NCT02853474 -NCT02850939 -NCT02853487 -NCT02850978 -NCT02853500 -NCT02850991 -NCT02853539 -NCT02851004 -NCT02853565 -NCT02851056 -NCT02853578 -NCT02851121 -NCT02853604 -NCT02851225 -NCT02853708 -NCT02851251 -NCT02853968 -NCT02851290 -NCT02854033 -NCT02851381 -NCT02854059 -NCT02851407 -NCT02854072 -NCT02851420 -NCT02854098 -NCT02851537 -NCT02854176 -NCT02851563 -NCT02854215 -NCT02851589 -NCT02854241 -NCT02851693 -NCT02854280 -NCT02851784 -NCT02854358 -NCT02851797 -NCT02854410 -NCT02851927 -NCT02854436 -NCT02851953 -NCT02854514 -NCT02851966 -NCT02854592 -NCT02852005 -NCT02854618 -NCT02852083 -NCT02854644 -NCT02852096 -NCT02854657 -NCT02852109 -NCT02854826 -NCT02852122 -NCT02854839 -NCT02852161 -NCT02854930 -NCT02852343 -NCT02854956 -NCT02852382 -NCT02855086 -NCT02852408 -NCT02855125 -NCT02852421 -NCT02855138 -NCT02852460 -NCT02855203 -NCT02852473 -NCT02855281 -NCT02852486 -NCT02855359 -NCT02852525 -NCT02855437 -NCT02852564 -NCT02855645 -NCT02852655 -NCT02855697 -NCT02852798 -NCT02855723 -NCT02852824 -NCT02855775 -NCT02852837 -NCT02855788 -NCT02852915 -NCT02855814 -NCT02853006 -NCT02855840 -NCT02853071 -NCT02855892 -NCT02853110 -NCT02855944 -NCT02853123 -NCT02856022 -NCT02853149 -NCT02856048 -NCT02853162 -NCT02861196 -NCT02856126 -NCT02858869 -NCT02856178 -NCT02858856 -NCT02856217 -NCT02858895 -NCT02856269 -NCT02858921 -NCT02856347 -NCT02858934 -NCT02856373 -NCT02858986 -NCT02856425 -NCT02858999 -NCT02856464 -NCT02859012 -NCT02856503 -NCT02859038 -NCT02856516 -NCT02859064 -NCT02856568 -NCT02859077 -NCT02856581 -NCT02859129 -NCT02856633 -NCT02859142 -NCT02856685 -NCT02859155 -NCT02856789 -NCT02859168 -NCT02856802 -NCT02859194 -NCT02856815 -NCT02859207 -NCT02856867 -NCT02859324 -NCT02856893 -NCT02859350 -NCT02856919 -NCT02859389 -NCT02856997 -NCT02859402 -NCT02857114 -NCT02859415 -NCT02857166 -NCT02859441 -NCT02857192 -NCT02859519 -NCT02857205 -NCT02859532 -NCT02857218 -NCT02859584 -NCT02857270 -NCT02859753 -NCT02857283 -NCT02859844 -NCT02857374 -NCT02859857 -NCT02857400 -NCT02859948 -NCT02857426 -NCT02860000 -NCT02857439 -NCT02860039 -NCT02857556 -NCT02860052 -NCT02857569 -NCT02860104 -NCT02857582 -NCT02860182 -NCT02857608 -NCT02860247 -NCT02857686 -NCT02860286 -NCT02857712 -NCT02860377 -NCT02857842 -NCT02860429 -NCT02857972 -NCT02860481 -NCT02857998 -NCT02860494 -NCT02858102 -NCT02860546 -NCT02858167 -NCT02860572 -NCT02858206 -NCT02860663 -NCT02858232 -NCT02860676 -NCT02858258 -NCT02860702 -NCT02858297 -NCT02860780 -NCT02858310 -NCT02860793 -NCT02858336 -NCT02860819 -NCT02858362 -NCT02860936 -NCT02858414 -NCT02860975 -NCT02858583 -NCT02861014 -NCT02858661 -NCT02861040 -NCT02858687 -NCT02861105 -NCT02858778 -NCT02861183 -NCT02858804 -NCT02866240 -NCT02861209 -NCT02863692 -NCT02861222 -NCT02863562 -NCT02861274 -NCT02863718 -NCT02861300 -NCT02863770 -NCT02861417 -NCT02863783 -NCT02861430 -NCT02863822 -NCT02861443 -NCT02863835 -NCT02861456 -NCT02863848 -NCT02861508 -NCT02863900 -NCT02861521 -NCT02863913 -NCT02861573 -NCT02863991 -NCT02861690 -NCT02864030 -NCT02861716 -NCT02864043 -NCT02861742 -NCT02864108 -NCT02861859 -NCT02864147 -NCT02861885 -NCT02864251 -NCT02861898 -NCT02864277 -NCT02861911 -NCT02864290 -NCT02861937 -NCT02864316 -NCT02862015 -NCT02864342 -NCT02862028 -NCT02864355 -NCT02862067 -NCT02864368 -NCT02862132 -NCT02864381 -NCT02862145 -NCT02864394 -NCT02862249 -NCT02864420 -NCT02862275 -NCT02864433 -NCT02862288 -NCT02864485 -NCT02862340 -NCT02864563 -NCT02862353 -NCT02864615 -NCT02862405 -NCT02864784 -NCT02862457 -NCT02864797 -NCT02862470 -NCT02864849 -NCT02862483 -NCT02864888 -NCT02862535 -NCT02864992 -NCT02862587 -NCT02865096 -NCT02862600 -NCT02865135 -NCT02862613 -NCT02865148 -NCT02862652 -NCT02865161 -NCT02862678 -NCT02865187 -NCT02862704 -NCT02865239 -NCT02862743 -NCT02865252 -NCT02862808 -NCT02865304 -NCT02862847 -NCT02865577 -NCT02862925 -NCT02865616 -NCT02863055 -NCT02865811 -NCT02863120 -NCT02865837 -NCT02863133 -NCT02865902 -NCT02863159 -NCT02865915 -NCT02863211 -NCT02866006 -NCT02863250 -NCT02866019 -NCT02863289 -NCT02866045 -NCT02863302 -NCT02866084 -NCT02863367 -NCT02866136 -NCT02863406 -NCT02866149 -NCT02863471 -NCT02866162 -NCT02863484 -NCT02871427 -NCT02866344 -NCT02868892 -NCT02866370 -NCT02868827 -NCT02866383 -NCT02868983 -NCT02866500 -NCT02869035 -NCT02866591 -NCT02869074 -NCT02866695 -NCT02869152 -NCT02866747 -NCT02869217 -NCT02866851 -NCT02869230 -NCT02866864 -NCT02869243 -NCT02866877 -NCT02869295 -NCT02866916 -NCT02869321 -NCT02866942 -NCT02869360 -NCT02866955 -NCT02869399 -NCT02866981 -NCT02869412 -NCT02866994 -NCT02869425 -NCT02867007 -NCT02869490 -NCT02867020 -NCT02869529 -NCT02867033 -NCT02869555 -NCT02867072 -NCT02869620 -NCT02867111 -NCT02869633 -NCT02867280 -NCT02869685 -NCT02867319 -NCT02869698 -NCT02867332 -NCT02869763 -NCT02867358 -NCT02869789 -NCT02867371 -NCT02869945 -NCT02867397 -NCT02869958 -NCT02867410 -NCT02869971 -NCT02867423 -NCT02870010 -NCT02867462 -NCT02870023 -NCT02867475 -NCT02870036 -NCT02867553 -NCT02870049 -NCT02867566 -NCT02870114 -NCT02867592 -NCT02870153 -NCT02867618 -NCT02870244 -NCT02867644 -NCT02870478 -NCT02867709 -NCT02870569 -NCT02867722 -NCT02870582 -NCT02867761 -NCT02870673 -NCT02867826 -NCT02870686 -NCT02867839 -NCT02870699 -NCT02867852 -NCT02870751 -NCT02867865 -NCT02870777 -NCT02867956 -NCT02870907 -NCT02868034 -NCT02870920 -NCT02868112 -NCT02870985 -NCT02868216 -NCT02871011 -NCT02868359 -NCT02871024 -NCT02868411 -NCT02871076 -NCT02868476 -NCT02871089 -NCT02868567 -NCT02871115 -NCT02868580 -NCT02871167 -NCT02868593 -NCT02871180 -NCT02868606 -NCT02871219 -NCT02868632 -NCT02871245 -NCT02868684 -NCT02871388 -NCT02868762 -NCT02876978 -NCT02871518 -NCT02874066 -NCT02871570 -NCT02874040 -NCT02871648 -NCT02874287 -NCT02871661 -NCT02874352 -NCT02871726 -NCT02874404 -NCT02871752 -NCT02874430 -NCT02871791 -NCT02874612 -NCT02871804 -NCT02874651 -NCT02871817 -NCT02874664 -NCT02871843 -NCT02874742 -NCT02871856 -NCT02874846 -NCT02871869 -NCT02874937 -NCT02871908 -NCT02875002 -NCT02871999 -NCT02875067 -NCT02872025 -NCT02875093 -NCT02872064 -NCT02875119 -NCT02872077 -NCT02875132 -NCT02872090 -NCT02875223 -NCT02872103 -NCT02875314 -NCT02872116 -NCT02875340 -NCT02872259 -NCT02875457 -NCT02872363 -NCT02875548 -NCT02872376 -NCT02875613 -NCT02872428 -NCT02875626 -NCT02872467 -NCT02875652 -NCT02872519 -NCT02875678 -NCT02872532 -NCT02875691 -NCT02872623 -NCT02875743 -NCT02872701 -NCT02875756 -NCT02872714 -NCT02875782 -NCT02872779 -NCT02875795 -NCT02872831 -NCT02875990 -NCT02872909 -NCT02876003 -NCT02872948 -NCT02876016 -NCT02873000 -NCT02876081 -NCT02873182 -NCT02876107 -NCT02873195 -NCT02876133 -NCT02873273 -NCT02876224 -NCT02873286 -NCT02876237 -NCT02873338 -NCT02876289 -NCT02873377 -NCT02876302 -NCT02873416 -NCT02876380 -NCT02873442 -NCT02876393 -NCT02873455 -NCT02876419 -NCT02873520 -NCT02876497 -NCT02873533 -NCT02876510 -NCT02873559 -NCT02876575 -NCT02873598 -NCT02876601 -NCT02873689 -NCT02876627 -NCT02873741 -NCT02876640 -NCT02873793 -NCT02876731 -NCT02873819 -NCT02876770 -NCT02873845 -NCT02876848 -NCT02873962 -NCT02876861 -NCT02873975 -NCT02876874 -NCT02874014 -NCT02882971 -NCT02876991 -NCT02880176 -NCT02877082 -NCT02880072 -NCT02877277 -NCT02880228 -NCT02877303 -NCT02880293 -NCT02877329 -NCT02880319 -NCT02877394 -NCT02880332 -NCT02877537 -NCT02880345 -NCT02877550 -NCT02880371 -NCT02877797 -NCT02880410 -NCT02877862 -NCT02880709 -NCT02877966 -NCT02880878 -NCT02878044 -NCT02880904 -NCT02878057 -NCT02880930 -NCT02878148 -NCT02880943 -NCT02878252 -NCT02880956 -NCT02878265 -NCT02881073 -NCT02878278 -NCT02881086 -NCT02878330 -NCT02881099 -NCT02878382 -NCT02881125 -NCT02878395 -NCT02881138 -NCT02878473 -NCT02881190 -NCT02878551 -NCT02881203 -NCT02878694 -NCT02881229 -NCT02878707 -NCT02881242 -NCT02878785 -NCT02881255 -NCT02878863 -NCT02881333 -NCT02878889 -NCT02881515 -NCT02878915 -NCT02881554 -NCT02878941 -NCT02881567 -NCT02878980 -NCT02881723 -NCT02879045 -NCT02881749 -NCT02879071 -NCT02881814 -NCT02879097 -NCT02881957 -NCT02879214 -NCT02881996 -NCT02879227 -NCT02882139 -NCT02879318 -NCT02882152 -NCT02879344 -NCT02882165 -NCT02879409 -NCT02882191 -NCT02879461 -NCT02882217 -NCT02879513 -NCT02882269 -NCT02879526 -NCT02882282 -NCT02879617 -NCT02882295 -NCT02879643 -NCT02882308 -NCT02879682 -NCT02882321 -NCT02879695 -NCT02882334 -NCT02879721 -NCT02882438 -NCT02879747 -NCT02882503 -NCT02879760 -NCT02882555 -NCT02879773 -NCT02882581 -NCT02879799 -NCT02882620 -NCT02879825 -NCT02882659 -NCT02879864 -NCT02882698 -NCT02879903 -NCT02882776 -NCT02879994 -NCT02882893 -NCT02880007 -NCT02882945 -NCT02880020 -NCT02889796 -NCT02882984 -NCT02886741 -NCT02883049 -NCT02886585 -NCT02883062 -NCT02886819 -NCT02883153 -NCT02886897 -NCT02883166 -NCT02886949 -NCT02883361 -NCT02887040 -NCT02883374 -NCT02887092 -NCT02883387 -NCT02887105 -NCT02883543 -NCT02887196 -NCT02883556 -NCT02887248 -NCT02883699 -NCT02887313 -NCT02883738 -NCT02887365 -NCT02883790 -NCT02887443 -NCT02883985 -NCT02887521 -NCT02884102 -NCT02887547 -NCT02884128 -NCT02887573 -NCT02884141 -NCT02887586 -NCT02884154 -NCT02887599 -NCT02884453 -NCT02887651 -NCT02884479 -NCT02887703 -NCT02884492 -NCT02887716 -NCT02884505 -NCT02887742 -NCT02884570 -NCT02887846 -NCT02884648 -NCT02887911 -NCT02884726 -NCT02887976 -NCT02884791 -NCT02888015 -NCT02884830 -NCT02888106 -NCT02884882 -NCT02888132 -NCT02884960 -NCT02888171 -NCT02885116 -NCT02888223 -NCT02885142 -NCT02888392 -NCT02885207 -NCT02888418 -NCT02885259 -NCT02888496 -NCT02885272 -NCT02888665 -NCT02885324 -NCT02888717 -NCT02885467 -NCT02888743 -NCT02885636 -NCT02888964 -NCT02885649 -NCT02888990 -NCT02885688 -NCT02889003 -NCT02885727 -NCT02889068 -NCT02885753 -NCT02889224 -NCT02885766 -NCT02889276 -NCT02885935 -NCT02889328 -NCT02885974 -NCT02889380 -NCT02886026 -NCT02889471 -NCT02886052 -NCT02889510 -NCT02886065 -NCT02889523 -NCT02886104 -NCT02889536 -NCT02886143 -NCT02889627 -NCT02886195 -NCT02889653 -NCT02886247 -NCT02889666 -NCT02886273 -NCT02889679 -NCT02886390 -NCT02889692 -NCT02886546 -NCT02889705 -NCT02886559 -NCT02889718 -NCT02886572 -NCT02895490 -NCT02889809 -NCT02892318 -NCT02889822 -NCT02892266 -NCT02889848 -NCT02892383 -NCT02889861 -NCT02892396 -NCT02889874 -NCT02892474 -NCT02889900 -NCT02892487 -NCT02889913 -NCT02892643 -NCT02889926 -NCT02892656 -NCT02890004 -NCT02892695 -NCT02890017 -NCT02892708 -NCT02890069 -NCT02892721 -NCT02890082 -NCT02892734 -NCT02890095 -NCT02892760 -NCT02890316 -NCT02892786 -NCT02890329 -NCT02892877 -NCT02890342 -NCT02892942 -NCT02890355 -NCT02893124 -NCT02890368 -NCT02893137 -NCT02890420 -NCT02893163 -NCT02890485 -NCT02893176 -NCT02890511 -NCT02893241 -NCT02890524 -NCT02893267 -NCT02890602 -NCT02893306 -NCT02890654 -NCT02893332 -NCT02890758 -NCT02893358 -NCT02890784 -NCT02893397 -NCT02890849 -NCT02893501 -NCT02890862 -NCT02893527 -NCT02890901 -NCT02893540 -NCT02890940 -NCT02893683 -NCT02890966 -NCT02893709 -NCT02890979 -NCT02893774 -NCT02891083 -NCT02893813 -NCT02891161 -NCT02893917 -NCT02891278 -NCT02893930 -NCT02891434 -NCT02893969 -NCT02891447 -NCT02893982 -NCT02891460 -NCT02894151 -NCT02891538 -NCT02894398 -NCT02891590 -NCT02894411 -NCT02891616 -NCT02894567 -NCT02891642 -NCT02894645 -NCT02891668 -NCT02894658 -NCT02891681 -NCT02894671 -NCT02891759 -NCT02894723 -NCT02891785 -NCT02894762 -NCT02891811 -NCT02894775 -NCT02891824 -NCT02894866 -NCT02891863 -NCT02894944 -NCT02891993 -NCT02895178 -NCT02892006 -NCT02895256 -NCT02892058 -NCT02895360 -NCT02892071 -NCT02895412 -NCT02892123 -NCT02895425 -NCT02892188 -NCT02895464 -NCT02892201 -NCT02901548 -NCT02895503 -NCT02898727 -NCT02895529 -NCT02898649 -NCT02895594 -NCT02898766 -NCT02895620 -NCT02898844 -NCT02895633 -NCT02898896 -NCT02895763 -NCT02898922 -NCT02895802 -NCT02899026 -NCT02895854 -NCT02899039 -NCT02895919 -NCT02899052 -NCT02895932 -NCT02899078 -NCT02895945 -NCT02899091 -NCT02896166 -NCT02899117 -NCT02896192 -NCT02899169 -NCT02896231 -NCT02899195 -NCT02896244 -NCT02899221 -NCT02896309 -NCT02899286 -NCT02896322 -NCT02899299 -NCT02896335 -NCT02899325 -NCT02896361 -NCT02899598 -NCT02896387 -NCT02899611 -NCT02896413 -NCT02899624 -NCT02896465 -NCT02899702 -NCT02896530 -NCT02899728 -NCT02896582 -NCT02899754 -NCT02896751 -NCT02899793 -NCT02896803 -NCT02899923 -NCT02896816 -NCT02900105 -NCT02896829 -NCT02900157 -NCT02896842 -NCT02900248 -NCT02896855 -NCT02900326 -NCT02896907 -NCT02900352 -NCT02896946 -NCT02900469 -NCT02897050 -NCT02900495 -NCT02897375 -NCT02900521 -NCT02897388 -NCT02900560 -NCT02897479 -NCT02900651 -NCT02897544 -NCT02900664 -NCT02897596 -NCT02900677 -NCT02897622 -NCT02900716 -NCT02897635 -NCT02900742 -NCT02897661 -NCT02900755 -NCT02897700 -NCT02900820 -NCT02897765 -NCT02900898 -NCT02897778 -NCT02900911 -NCT02897830 -NCT02900950 -NCT02897986 -NCT02900963 -NCT02898012 -NCT02900976 -NCT02898064 -NCT02901106 -NCT02898077 -NCT02901145 -NCT02898116 -NCT02901223 -NCT02898207 -NCT02901288 -NCT02898259 -NCT02901301 -NCT02898363 -NCT02901392 -NCT02898376 -NCT02901405 -NCT02898441 -NCT02901483 -NCT02898519 -NCT02908477 -NCT02901782 -NCT02905188 -NCT02901899 -NCT02905175 -NCT02901925 -NCT02905266 -NCT02901938 -NCT02905305 -NCT02902029 -NCT02905318 -NCT02902042 -NCT02905578 -NCT02902185 -NCT02905591 -NCT02902237 -NCT02905669 -NCT02902302 -NCT02905786 -NCT02902432 -NCT02905877 -NCT02902484 -NCT02905903 -NCT02902510 -NCT02905916 -NCT02902536 -NCT02905942 -NCT02902575 -NCT02905968 -NCT02902588 -NCT02905981 -NCT02902601 -NCT02905994 -NCT02902627 -NCT02906046 -NCT02902731 -NCT02906059 -NCT02902757 -NCT02906098 -NCT02902809 -NCT02906150 -NCT02902822 -NCT02906163 -NCT02902874 -NCT02906241 -NCT02902965 -NCT02906280 -NCT02903004 -NCT02906293 -NCT02903017 -NCT02906332 -NCT02903069 -NCT02906371 -NCT02903160 -NCT02906384 -NCT02903290 -NCT02906397 -NCT02903355 -NCT02906540 -NCT02903368 -NCT02906566 -NCT02903381 -NCT02906605 -NCT02903446 -NCT02906696 -NCT02903498 -NCT02906722 -NCT02903524 -NCT02906800 -NCT02903537 -NCT02906904 -NCT02903615 -NCT02906917 -NCT02903680 -NCT02907021 -NCT02903771 -NCT02907073 -NCT02903784 -NCT02907099 -NCT02903810 -NCT02907333 -NCT02903914 -NCT02907359 -NCT02904031 -NCT02907372 -NCT02904226 -NCT02907385 -NCT02904447 -NCT02907411 -NCT02904525 -NCT02907710 -NCT02904564 -NCT02907788 -NCT02904629 -NCT02907827 -NCT02904707 -NCT02907866 -NCT02904746 -NCT02907918 -NCT02904759 -NCT02908048 -NCT02904798 -NCT02908165 -NCT02904837 -NCT02908217 -NCT02904863 -NCT02908256 -NCT02904954 -NCT02908269 -NCT02905019 -NCT02908451 -NCT02905110 -NCT02914197 -NCT02908607 -NCT02911363 -NCT02908672 -NCT02911350 -NCT02908685 -NCT02911467 -NCT02908698 -NCT02911571 -NCT02908750 -NCT02911610 -NCT02908906 -NCT02911636 -NCT02908958 -NCT02911649 -NCT02908971 -NCT02911662 -NCT02909036 -NCT02911688 -NCT02909049 -NCT02911740 -NCT02909114 -NCT02911831 -NCT02909127 -NCT02911844 -NCT02909257 -NCT02911922 -NCT02909361 -NCT02911948 -NCT02909452 -NCT02911974 -NCT02909465 -NCT02912013 -NCT02909478 -NCT02912052 -NCT02909530 -NCT02912065 -NCT02909569 -NCT02912143 -NCT02909647 -NCT02912195 -NCT02909751 -NCT02912208 -NCT02909777 -NCT02912312 -NCT02909842 -NCT02912403 -NCT02909855 -NCT02912559 -NCT02909907 -NCT02912572 -NCT02909972 -NCT02912611 -NCT02909985 -NCT02912624 -NCT02910037 -NCT02912676 -NCT02910050 -NCT02912754 -NCT02910063 -NCT02912832 -NCT02910180 -NCT02912845 -NCT02910219 -NCT02912923 -NCT02910271 -NCT02912936 -NCT02910323 -NCT02912949 -NCT02910336 -NCT02912988 -NCT02910349 -NCT02913066 -NCT02910388 -NCT02913131 -NCT02910583 -NCT02913196 -NCT02910596 -NCT02913313 -NCT02910700 -NCT02913417 -NCT02910726 -NCT02913430 -NCT02910752 -NCT02913443 -NCT02910791 -NCT02913521 -NCT02910804 -NCT02913573 -NCT02910843 -NCT02913612 -NCT02910869 -NCT02913664 -NCT02910882 -NCT02913729 -NCT02910895 -NCT02913742 -NCT02910960 -NCT02913794 -NCT02910986 -NCT02913859 -NCT02911025 -NCT02914067 -NCT02911103 -NCT02914106 -NCT02911129 -NCT02914132 -NCT02911142 -NCT02914145 -NCT02911233 -NCT02914158 -NCT02911259 -NCT02919787 -NCT02914327 -NCT02917291 -NCT02914353 -NCT02917161 -NCT02914405 -NCT02917356 -NCT02914470 -NCT02917408 -NCT02914496 -NCT02917421 -NCT02914704 -NCT02917460 -NCT02914782 -NCT02917473 -NCT02914808 -NCT02917525 -NCT02914821 -NCT02917551 -NCT02914873 -NCT02917629 -NCT02914886 -NCT02917720 -NCT02914899 -NCT02917746 -NCT02914925 -NCT02917772 -NCT02914938 -NCT02917863 -NCT02914964 -NCT02917928 -NCT02914977 -NCT02917941 -NCT02914990 -NCT02917954 -NCT02915016 -NCT02917980 -NCT02915120 -NCT02917993 -NCT02915172 -NCT02918045 -NCT02915263 -NCT02918071 -NCT02915393 -NCT02918084 -NCT02915432 -NCT02918162 -NCT02915445 -NCT02918188 -NCT02915471 -NCT02918201 -NCT02915523 -NCT02918214 -NCT02915562 -NCT02918253 -NCT02915666 -NCT02918331 -NCT02915744 -NCT02918357 -NCT02915783 -NCT02918422 -NCT02915835 -NCT02918461 -NCT02915848 -NCT02918474 -NCT02915965 -NCT02918656 -NCT02916095 -NCT02918682 -NCT02916134 -NCT02918747 -NCT02916147 -NCT02918773 -NCT02916199 -NCT02918786 -NCT02916212 -NCT02918955 -NCT02916342 -NCT02918968 -NCT02916420 -NCT02919033 -NCT02916433 -NCT02919046 -NCT02916459 -NCT02919111 -NCT02916472 -NCT02919215 -NCT02916511 -NCT02919293 -NCT02916537 -NCT02919345 -NCT02916550 -NCT02919371 -NCT02916602 -NCT02919436 -NCT02916680 -NCT02919449 -NCT02916719 -NCT02919462 -NCT02916745 -NCT02919553 -NCT02916771 -NCT02919618 -NCT02916914 -NCT02919644 -NCT02916979 -NCT02919670 -NCT02917005 -NCT02919683 -NCT02917083 -NCT02919696 -NCT02917135 -NCT02925884 -NCT02919800 -NCT02922998 -NCT02919865 -NCT02922855 -NCT02919878 -NCT02923011 -NCT02919969 -NCT02923037 -NCT02920008 -NCT02923180 -NCT02920177 -NCT02923232 -NCT02920216 -NCT02923258 -NCT02920229 -NCT02923297 -NCT02920268 -NCT02923310 -NCT02920307 -NCT02923323 -NCT02920385 -NCT02923349 -NCT02920450 -NCT02923531 -NCT02920476 -NCT02923557 -NCT02920515 -NCT02923570 -NCT02920541 -NCT02923609 -NCT02920554 -NCT02923635 -NCT02920567 -NCT02923700 -NCT02920645 -NCT02923739 -NCT02920658 -NCT02923778 -NCT02920697 -NCT02923830 -NCT02920944 -NCT02923895 -NCT02920996 -NCT02923921 -NCT02921022 -NCT02923934 -NCT02921061 -NCT02923986 -NCT02921139 -NCT02924025 -NCT02921152 -NCT02924038 -NCT02921204 -NCT02924116 -NCT02921256 -NCT02924233 -NCT02921269 -NCT02924272 -NCT02921490 -NCT02924324 -NCT02921542 -NCT02924363 -NCT02921581 -NCT02924376 -NCT02921646 -NCT02924402 -NCT02921724 -NCT02924441 -NCT02921737 -NCT02924480 -NCT02921815 -NCT02924597 -NCT02921854 -NCT02924623 -NCT02921893 -NCT02924714 -NCT02921919 -NCT02924753 -NCT02921945 -NCT02924766 -NCT02921958 -NCT02924818 -NCT02921984 -NCT02924883 -NCT02921997 -NCT02924909 -NCT02922049 -NCT02924922 -NCT02922127 -NCT02925000 -NCT02922179 -NCT02925026 -NCT02922244 -NCT02925104 -NCT02922257 -NCT02925234 -NCT02922283 -NCT02925260 -NCT02922322 -NCT02925390 -NCT02922348 -NCT02925455 -NCT02922478 -NCT02925507 -NCT02922647 -NCT02925533 -NCT02922738 -NCT02925650 -NCT02922764 -NCT02925819 -NCT02922777 -NCT02931188 -NCT02926014 -NCT02928692 -NCT02926053 -NCT02928640 -NCT02926079 -NCT02928731 -NCT02926131 -NCT02928861 -NCT02926183 -NCT02928978 -NCT02926196 -NCT02929082 -NCT02926209 -NCT02929108 -NCT02926222 -NCT02929147 -NCT02926261 -NCT02929160 -NCT02926534 -NCT02929186 -NCT02926573 -NCT02929225 -NCT02926586 -NCT02929290 -NCT02926625 -NCT02929316 -NCT02926638 -NCT02929355 -NCT02926690 -NCT02929381 -NCT02926703 -NCT02929394 -NCT02926716 -NCT02929420 -NCT02926729 -NCT02929498 -NCT02926768 -NCT02929524 -NCT02926833 -NCT02929576 -NCT02926872 -NCT02929589 -NCT02926911 -NCT02929615 -NCT02926963 -NCT02929693 -NCT02927093 -NCT02929758 -NCT02927145 -NCT02929771 -NCT02927249 -NCT02929797 -NCT02927262 -NCT02929862 -NCT02927301 -NCT02929875 -NCT02927340 -NCT02929966 -NCT02927366 -NCT02930044 -NCT02927379 -NCT02930109 -NCT02927431 -NCT02930122 -NCT02927626 -NCT02930213 -NCT02927691 -NCT02930252 -NCT02927743 -NCT02930278 -NCT02927769 -NCT02930291 -NCT02927899 -NCT02930304 -NCT02927912 -NCT02930317 -NCT02927925 -NCT02930460 -NCT02927938 -NCT02930512 -NCT02927964 -NCT02930538 -NCT02927977 -NCT02930551 -NCT02928029 -NCT02930850 -NCT02928055 -NCT02930876 -NCT02928081 -NCT02930889 -NCT02928107 -NCT02930902 -NCT02928146 -NCT02930915 -NCT02928172 -NCT02930928 -NCT02928224 -NCT02930941 -NCT02928341 -NCT02930954 -NCT02928367 -NCT02930967 -NCT02928406 -NCT02930993 -NCT02928419 -NCT02931032 -NCT02928432 -NCT02931071 -NCT02928523 -NCT02931097 -NCT02928575 -NCT02936752 -NCT02931201 -NCT02934256 -NCT02931292 -NCT02934230 -NCT02931318 -NCT02934399 -NCT02931331 -NCT02934451 -NCT02931448 -NCT02934464 -NCT02931461 -NCT02934490 -NCT02931552 -NCT02934503 -NCT02931591 -NCT02934529 -NCT02931695 -NCT02934568 -NCT02931721 -NCT02934620 -NCT02931760 -NCT02934685 -NCT02931825 -NCT02934815 -NCT02931864 -NCT02934828 -NCT02931890 -NCT02934854 -NCT02931929 -NCT02934880 -NCT02932033 -NCT02934932 -NCT02932046 -NCT02934945 -NCT02932098 -NCT02934958 -NCT02932137 -NCT02935023 -NCT02932189 -NCT02935036 -NCT02932267 -NCT02935153 -NCT02932280 -NCT02935205 -NCT02932332 -NCT02935257 -NCT02932475 -NCT02935309 -NCT02932501 -NCT02935361 -NCT02932527 -NCT02935374 -NCT02932540 -NCT02935452 -NCT02932618 -NCT02935478 -NCT02932761 -NCT02935491 -NCT02932826 -NCT02935530 -NCT02932865 -NCT02935543 -NCT02932904 -NCT02935634 -NCT02932956 -NCT02935699 -NCT02932982 -NCT02935764 -NCT02933060 -NCT02935790 -NCT02933073 -NCT02935868 -NCT02933190 -NCT02935881 -NCT02933216 -NCT02935907 -NCT02933242 -NCT02935920 -NCT02933255 -NCT02935946 -NCT02933294 -NCT02935985 -NCT02933307 -NCT02936024 -NCT02933320 -NCT02936089 -NCT02933333 -NCT02936102 -NCT02933411 -NCT02936167 -NCT02933476 -NCT02936193 -NCT02933580 -NCT02936206 -NCT02933736 -NCT02936258 -NCT02933749 -NCT02936323 -NCT02933775 -NCT02936375 -NCT02933801 -NCT02936388 -NCT02933892 -NCT02936492 -NCT02933944 -NCT02936531 -NCT02933957 -NCT02936596 -NCT02934152 -NCT02936739 -NCT02934204 -NCT02942238 -NCT02936765 -NCT02939456 -NCT02936804 -NCT02939443 -NCT02936817 -NCT02939573 -NCT02936856 -NCT02939586 -NCT02936947 -NCT02939612 -NCT02936986 -NCT02939651 -NCT02936999 -NCT02939664 -NCT02937103 -NCT02939729 -NCT02937116 -NCT02939755 -NCT02937155 -NCT02939807 -NCT02937233 -NCT02939833 -NCT02937246 -NCT02939846 -NCT02937272 -NCT02940067 -NCT02937311 -NCT02940119 -NCT02937402 -NCT02940132 -NCT02937428 -NCT02940223 -NCT02937493 -NCT02940262 -NCT02937506 -NCT02940301 -NCT02937519 -NCT02940470 -NCT02937571 -NCT02940483 -NCT02937662 -NCT02940496 -NCT02937675 -NCT02940613 -NCT02937727 -NCT02940704 -NCT02937740 -NCT02940782 -NCT02937818 -NCT02940860 -NCT02937844 -NCT02940925 -NCT02937948 -NCT02940990 -NCT02938000 -NCT02941003 -NCT02938104 -NCT02941185 -NCT02938182 -NCT02941211 -NCT02938195 -NCT02941263 -NCT02938273 -NCT02941276 -NCT02938299 -NCT02941302 -NCT02938442 -NCT02941328 -NCT02938546 -NCT02941471 -NCT02938585 -NCT02941484 -NCT02938624 -NCT02941497 -NCT02938689 -NCT02941523 -NCT02938715 -NCT02941536 -NCT02938741 -NCT02941562 -NCT02938767 -NCT02941601 -NCT02938780 -NCT02941627 -NCT02938793 -NCT02941640 -NCT02938858 -NCT02941718 -NCT02938988 -NCT02941744 -NCT02939014 -NCT02941770 -NCT02939027 -NCT02941783 -NCT02939040 -NCT02941835 -NCT02939079 -NCT02941887 -NCT02939118 -NCT02941926 -NCT02939183 -NCT02941965 -NCT02939274 -NCT02942043 -NCT02939300 -NCT02942095 -NCT02939326 -NCT02942121 -NCT02939378 -NCT02942173 -NCT02939404 -NCT02947373 -NCT02942251 -NCT02944708 -NCT02942264 -NCT02944643 -NCT02942277 -NCT02944721 -NCT02942329 -NCT02944747 -NCT02942355 -NCT02944799 -NCT02942433 -NCT02944812 -NCT02942498 -NCT02944825 -NCT02942524 -NCT02944864 -NCT02942563 -NCT02945033 -NCT02942615 -NCT02945085 -NCT02942628 -NCT02945098 -NCT02942641 -NCT02945111 -NCT02942693 -NCT02945189 -NCT02942706 -NCT02945215 -NCT02942758 -NCT02945267 -NCT02942797 -NCT02945371 -NCT02943031 -NCT02945566 -NCT02943070 -NCT02945579 -NCT02943083 -NCT02945605 -NCT02943109 -NCT02945631 -NCT02943174 -NCT02945761 -NCT02943252 -NCT02945800 -NCT02943265 -NCT02945813 -NCT02943278 -NCT02945826 -NCT02943304 -NCT02945852 -NCT02943317 -NCT02945891 -NCT02943447 -NCT02945969 -NCT02943473 -NCT02945995 -NCT02943486 -NCT02946008 -NCT02943603 -NCT02946021 -NCT02943642 -NCT02946138 -NCT02943655 -NCT02946359 -NCT02943668 -NCT02946528 -NCT02943733 -NCT02946606 -NCT02943746 -NCT02946619 -NCT02943798 -NCT02946645 -NCT02943824 -NCT02946671 -NCT02943837 -NCT02946697 -NCT02943850 -NCT02946710 -NCT02944032 -NCT02946775 -NCT02944045 -NCT02946840 -NCT02944136 -NCT02946866 -NCT02944162 -NCT02946918 -NCT02944175 -NCT02946996 -NCT02944188 -NCT02947022 -NCT02944201 -NCT02947035 -NCT02944344 -NCT02947048 -NCT02944357 -NCT02947061 -NCT02944396 -NCT02947113 -NCT02944435 -NCT02947152 -NCT02944513 -NCT02947165 -NCT02944539 -NCT02947243 -NCT02944565 -NCT02947256 -NCT02944578 -NCT02947347 -NCT02944604 -NCT02947360 -NCT02944617 -NCT02953301 -NCT02947386 -NCT02950324 -NCT02947399 -NCT02950259 -NCT02947685 -NCT02950337 -NCT02947841 -NCT02950402 -NCT02947945 -NCT02950428 -NCT02947958 -NCT02950480 -NCT02947971 -NCT02950545 -NCT02947984 -NCT02950662 -NCT02948023 -NCT02950727 -NCT02948062 -NCT02950753 -NCT02948075 -NCT02950766 -NCT02948088 -NCT02950792 -NCT02948101 -NCT02950987 -NCT02948166 -NCT02951078 -NCT02948179 -NCT02951091 -NCT02948218 -NCT02951117 -NCT02948244 -NCT02951156 -NCT02948283 -NCT02951195 -NCT02948309 -NCT02951234 -NCT02948348 -NCT02951325 -NCT02948426 -NCT02951481 -NCT02948491 -NCT02951585 -NCT02948543 -NCT02951611 -NCT02948699 -NCT02951637 -NCT02948712 -NCT02951702 -NCT02948738 -NCT02951715 -NCT02948751 -NCT02951728 -NCT02948764 -NCT02951767 -NCT02948790 -NCT02951819 -NCT02948842 -NCT02951832 -NCT02948907 -NCT02951897 -NCT02949076 -NCT02952183 -NCT02949128 -NCT02952209 -NCT02949167 -NCT02952248 -NCT02949219 -NCT02952261 -NCT02949258 -NCT02952456 -NCT02949284 -NCT02952469 -NCT02949310 -NCT02952508 -NCT02949336 -NCT02952534 -NCT02949440 -NCT02952573 -NCT02949622 -NCT02952586 -NCT02949700 -NCT02952612 -NCT02949791 -NCT02952625 -NCT02949843 -NCT02952677 -NCT02949895 -NCT02952729 -NCT02949947 -NCT02952781 -NCT02950025 -NCT02952820 -NCT02950038 -NCT02952885 -NCT02950051 -NCT02952898 -NCT02950064 -NCT02952924 -NCT02950077 -NCT02952989 -NCT02950090 -NCT02953158 -NCT02950103 -NCT02953197 -NCT02950129 -NCT02953223 -NCT02950155 -NCT02953249 -NCT02950220 -NCT02958345 -NCT02953340 -NCT02955550 -NCT02953431 -NCT02955537 -NCT02953457 -NCT02955589 -NCT02953509 -NCT02955628 -NCT02953561 -NCT02955667 -NCT02953652 -NCT02955680 -NCT02953704 -NCT02955758 -NCT02953717 -NCT02955771 -NCT02953730 -NCT02955797 -NCT02953743 -NCT02955810 -NCT02953782 -NCT02955823 -NCT02953808 -NCT02955901 -NCT02953834 -NCT02955927 -NCT02953860 -NCT02955940 -NCT02953912 -NCT02956213 -NCT02954055 -NCT02956239 -NCT02954107 -NCT02956265 -NCT02954172 -NCT02956291 -NCT02954289 -NCT02956382 -NCT02954302 -NCT02956473 -NCT02954354 -NCT02956512 -NCT02954406 -NCT02956525 -NCT02954432 -NCT02956551 -NCT02954445 -NCT02956668 -NCT02954471 -NCT02956681 -NCT02954510 -NCT02956720 -NCT02954523 -NCT02956772 -NCT02954536 -NCT02956798 -NCT02954575 -NCT02956876 -NCT02954601 -NCT02956889 -NCT02954640 -NCT02956915 -NCT02954653 -NCT02956980 -NCT02954666 -NCT02957019 -NCT02954705 -NCT02957032 -NCT02954718 -NCT02957071 -NCT02954757 -NCT02957136 -NCT02954783 -NCT02957149 -NCT02954796 -NCT02957227 -NCT02954809 -NCT02957266 -NCT02954874 -NCT02957474 -NCT02954900 -NCT02957513 -NCT02954913 -NCT02957526 -NCT02954991 -NCT02957565 -NCT02955043 -NCT02957708 -NCT02955069 -NCT02957747 -NCT02955082 -NCT02957968 -NCT02955147 -NCT02957981 -NCT02955173 -NCT02958033 -NCT02955199 -NCT02958059 -NCT02955225 -NCT02958111 -NCT02955251 -NCT02958150 -NCT02955290 -NCT02958163 -NCT02955329 -NCT02958267 -NCT02955368 -NCT02958319 -NCT02955381 -NCT02958332 -NCT02955394 -NCT02963584 -NCT02958410 -NCT02960672 -NCT02958436 -NCT02960646 -NCT02958449 -NCT02960724 -NCT02958462 -NCT02960828 -NCT02958566 -NCT02960906 -NCT02958579 -NCT02960984 -NCT02958605 -NCT02960997 -NCT02958774 -NCT02961114 -NCT02958787 -NCT02961127 -NCT02958813 -NCT02961140 -NCT02958826 -NCT02961218 -NCT02958852 -NCT02961257 -NCT02958878 -NCT02961270 -NCT02958930 -NCT02961283 -NCT02958969 -NCT02961335 -NCT02959047 -NCT02961374 -NCT02959125 -NCT02961426 -NCT02959151 -NCT02961647 -NCT02959164 -NCT02961790 -NCT02959177 -NCT02961816 -NCT02959294 -NCT02961881 -NCT02959320 -NCT02961907 -NCT02959359 -NCT02961959 -NCT02959385 -NCT02961998 -NCT02959398 -NCT02962063 -NCT02959437 -NCT02962115 -NCT02959450 -NCT02962154 -NCT02959463 -NCT02962167 -NCT02959502 -NCT02962180 -NCT02959541 -NCT02962219 -NCT02959554 -NCT02962284 -NCT02959619 -NCT02962388 -NCT02959671 -NCT02962401 -NCT02959788 -NCT02962414 -NCT02959853 -NCT02962427 -NCT02959879 -NCT02962557 -NCT02959905 -NCT02962661 -NCT02959918 -NCT02962804 -NCT02959931 -NCT02962895 -NCT02959957 -NCT02962908 -NCT02959983 -NCT02962947 -NCT02960022 -NCT02962999 -NCT02960048 -NCT02963038 -NCT02960087 -NCT02963051 -NCT02960178 -NCT02963090 -NCT02960191 -NCT02963129 -NCT02960230 -NCT02963155 -NCT02960243 -NCT02963168 -NCT02960295 -NCT02963207 -NCT02960399 -NCT02963337 -NCT02960477 -NCT02963363 -NCT02960503 -NCT02963389 -NCT02960542 -NCT02963428 -NCT02960555 -NCT02963454 -NCT02960594 -NCT02963493 -NCT02960607 -NCT02968758 -NCT02963597 -NCT02966223 -NCT02963610 -NCT02966171 -NCT02963662 -NCT02966249 -NCT02963740 -NCT02966327 -NCT02963831 -NCT02966366 -NCT02963896 -NCT02966431 -NCT02963974 -NCT02966483 -NCT02964013 -NCT02966509 -NCT02964078 -NCT02966535 -NCT02964130 -NCT02966548 -NCT02964169 -NCT02966561 -NCT02964182 -NCT02966574 -NCT02964195 -NCT02966587 -NCT02964234 -NCT02966691 -NCT02964260 -NCT02966730 -NCT02964273 -NCT02966756 -NCT02964286 -NCT02966821 -NCT02964364 -NCT02967029 -NCT02964377 -NCT02967042 -NCT02964416 -NCT02967094 -NCT02964455 -NCT02967107 -NCT02964468 -NCT02967133 -NCT02964494 -NCT02967146 -NCT02964507 -NCT02967250 -NCT02964559 -NCT02967276 -NCT02964689 -NCT02967289 -NCT02964702 -NCT02967341 -NCT02964754 -NCT02967380 -NCT02964806 -NCT02967406 -NCT02964858 -NCT02967445 -NCT02964871 -NCT02967458 -NCT02964884 -NCT02967497 -NCT02964910 -NCT02967536 -NCT02964988 -NCT02967692 -NCT02965001 -NCT02967770 -NCT02965027 -NCT02967822 -NCT02965092 -NCT02967887 -NCT02965157 -NCT02967926 -NCT02965209 -NCT02968004 -NCT02965248 -NCT02968043 -NCT02965352 -NCT02968069 -NCT02965365 -NCT02968147 -NCT02965378 -NCT02968160 -NCT02965417 -NCT02968303 -NCT02965495 -NCT02968329 -NCT02965521 -NCT02968355 -NCT02965534 -NCT02968394 -NCT02965573 -NCT02968472 -NCT02965716 -NCT02968485 -NCT02965755 -NCT02968511 -NCT02965885 -NCT02968563 -NCT02965950 -NCT02968615 -NCT02965976 -NCT02968641 -NCT02966041 -NCT02968680 -NCT02966054 -NCT02968732 -NCT02966093 -NCT02974426 -NCT02968784 -NCT02971748 -NCT02968810 -NCT02971709 -NCT02968849 -NCT02971761 -NCT02968940 -NCT02971878 -NCT02968966 -NCT02971956 -NCT02969031 -NCT02971995 -NCT02969083 -NCT02972034 -NCT02969096 -NCT02972047 -NCT02969122 -NCT02972060 -NCT02969148 -NCT02972073 -NCT02969278 -NCT02972138 -NCT02969291 -NCT02972177 -NCT02969473 -NCT02972229 -NCT02969577 -NCT02972242 -NCT02969590 -NCT02972268 -NCT02969681 -NCT02972320 -NCT02969772 -NCT02972333 -NCT02969837 -NCT02972346 -NCT02969980 -NCT02972372 -NCT02970097 -NCT02972541 -NCT02970136 -NCT02972580 -NCT02970266 -NCT02972671 -NCT02970318 -NCT02972749 -NCT02970396 -NCT02972801 -NCT02970448 -NCT02972840 -NCT02970500 -NCT02973009 -NCT02970513 -NCT02973061 -NCT02970539 -NCT02973087 -NCT02970617 -NCT02973113 -NCT02970682 -NCT02973139 -NCT02970695 -NCT02973191 -NCT02970786 -NCT02973217 -NCT02970877 -NCT02973230 -NCT02970890 -NCT02973282 -NCT02970916 -NCT02973386 -NCT02970981 -NCT02973399 -NCT02971059 -NCT02973438 -NCT02971124 -NCT02973490 -NCT02971163 -NCT02973503 -NCT02971176 -NCT02973516 -NCT02971189 -NCT02973555 -NCT02971254 -NCT02973672 -NCT02971293 -NCT02973685 -NCT02971306 -NCT02973711 -NCT02971319 -NCT02973737 -NCT02971345 -NCT02973763 -NCT02971358 -NCT02973776 -NCT02971397 -NCT02973789 -NCT02971410 -NCT02973841 -NCT02971436 -NCT02973971 -NCT02971475 -NCT02973997 -NCT02971501 -NCT02974075 -NCT02971631 -NCT02974205 -NCT02971657 -NCT02974218 -NCT02971683 -NCT02974335 -NCT02971696 -NCT02979730 -NCT02974556 -NCT02977182 -NCT02974595 -NCT02977169 -NCT02974621 -NCT02977195 -NCT02974647 -NCT02977312 -NCT02974725 -NCT02977364 -NCT02974738 -NCT02977403 -NCT02974751 -NCT02977429 -NCT02974764 -NCT02977468 -NCT02974790 -NCT02977494 -NCT02974803 -NCT02977507 -NCT02974907 -NCT02977572 -NCT02974933 -NCT02977637 -NCT02975128 -NCT02977663 -NCT02975141 -NCT02977689 -NCT02975284 -NCT02977780 -NCT02975297 -NCT02977832 -NCT02975401 -NCT02977845 -NCT02975505 -NCT02977858 -NCT02975570 -NCT02977897 -NCT02975609 -NCT02978014 -NCT02975661 -NCT02978105 -NCT02975687 -NCT02978144 -NCT02975700 -NCT02978170 -NCT02975739 -NCT02978196 -NCT02975804 -NCT02978209 -NCT02975843 -NCT02978222 -NCT02975869 -NCT02978235 -NCT02975882 -NCT02978261 -NCT02975921 -NCT02978313 -NCT02975934 -NCT02978404 -NCT02976051 -NCT02978443 -NCT02976064 -NCT02978495 -NCT02976116 -NCT02978508 -NCT02976142 -NCT02978547 -NCT02976181 -NCT02978612 -NCT02976246 -NCT02978625 -NCT02976259 -NCT02978677 -NCT02976402 -NCT02978716 -NCT02976441 -NCT02978742 -NCT02976493 -NCT02978755 -NCT02976558 -NCT02978781 -NCT02976675 -NCT02978794 -NCT02976740 -NCT02978820 -NCT02976818 -NCT02978859 -NCT02976857 -NCT02979093 -NCT02976870 -NCT02979119 -NCT02976883 -NCT02979288 -NCT02976896 -NCT02979366 -NCT02976909 -NCT02979392 -NCT02976922 -NCT02979431 -NCT02977013 -NCT02979483 -NCT02977052 -NCT02979509 -NCT02977065 -NCT02979522 -NCT02977091 -NCT02979548 -NCT02977143 -NCT02979691 -NCT02977156 -NCT02985541 -NCT02979821 -NCT02982486 -NCT02979899 -NCT02982473 -NCT02979977 -NCT02982512 -NCT02980029 -NCT02982564 -NCT02980211 -NCT02982694 -NCT02980263 -NCT02982720 -NCT02980302 -NCT02982811 -NCT02980315 -NCT02982941 -NCT02980341 -NCT02982954 -NCT02980406 -NCT02983006 -NCT02980445 -NCT02983032 -NCT02980510 -NCT02983045 -NCT02980523 -NCT02983071 -NCT02980601 -NCT02983097 -NCT02980640 -NCT02983253 -NCT02980653 -NCT02983279 -NCT02980666 -NCT02983305 -NCT02980731 -NCT02983578 -NCT02980770 -NCT02983604 -NCT02980783 -NCT02983617 -NCT02980809 -NCT02983760 -NCT02980861 -NCT02983799 -NCT02980926 -NCT02983903 -NCT02980965 -NCT02983942 -NCT02980991 -NCT02984072 -NCT02981056 -NCT02984163 -NCT02981069 -NCT02984254 -NCT02981108 -NCT02984384 -NCT02981121 -NCT02984410 -NCT02981147 -NCT02984501 -NCT02981199 -NCT02984540 -NCT02981303 -NCT02984566 -NCT02981342 -NCT02984618 -NCT02981368 -NCT02984631 -NCT02981433 -NCT02984683 -NCT02981459 -NCT02984761 -NCT02981485 -NCT02984930 -NCT02981498 -NCT02984943 -NCT02981524 -NCT02984969 -NCT02981628 -NCT02984995 -NCT02981641 -NCT02985008 -NCT02981719 -NCT02985021 -NCT02981745 -NCT02985073 -NCT02981784 -NCT02985125 -NCT02981862 -NCT02985151 -NCT02981875 -NCT02985190 -NCT02981914 -NCT02985203 -NCT02981940 -NCT02985255 -NCT02982096 -NCT02985268 -NCT02982148 -NCT02985333 -NCT02982161 -NCT02985372 -NCT02982213 -NCT02985385 -NCT02982304 -NCT02985411 -NCT02982382 -NCT02985424 -NCT02982395 -NCT02985528 -NCT02982421 -NCT02991638 -NCT02985723 -NCT02988843 -NCT02985801 -NCT02988817 -NCT02985840 -NCT02988869 -NCT02985957 -NCT02988921 -NCT02986100 -NCT02988934 -NCT02986152 -NCT02988960 -NCT02986178 -NCT02988986 -NCT02986230 -NCT02988999 -NCT02986334 -NCT02989012 -NCT02986347 -NCT02989064 -NCT02986360 -NCT02989090 -NCT02986373 -NCT02989103 -NCT02986451 -NCT02989142 -NCT02986516 -NCT02989259 -NCT02986568 -NCT02989337 -NCT02986646 -NCT02989376 -NCT02986685 -NCT02989428 -NCT02986815 -NCT02989480 -NCT02986828 -NCT02989493 -NCT02986854 -NCT02989519 -NCT02986867 -NCT02989584 -NCT02986919 -NCT02989623 -NCT02986932 -NCT02989636 -NCT02987010 -NCT02989675 -NCT02987127 -NCT02989701 -NCT02987153 -NCT02989714 -NCT02987166 -NCT02989844 -NCT02987244 -NCT02989857 -NCT02987257 -NCT02989870 -NCT02987296 -NCT02989922 -NCT02987400 -NCT02989974 -NCT02987478 -NCT02990130 -NCT02987504 -NCT02990221 -NCT02987543 -NCT02990338 -NCT02987699 -NCT02990416 -NCT02987738 -NCT02990468 -NCT02987751 -NCT02990481 -NCT02987764 -NCT02990494 -NCT02987790 -NCT02990585 -NCT02987829 -NCT02990676 -NCT02987881 -NCT02990728 -NCT02987907 -NCT02990780 -NCT02987959 -NCT02990845 -NCT02987985 -NCT02990936 -NCT02987998 -NCT02991066 -NCT02988063 -NCT02991092 -NCT02988219 -NCT02991196 -NCT02988271 -NCT02991209 -NCT02988440 -NCT02991339 -NCT02988518 -NCT02991352 -NCT02988596 -NCT02991456 -NCT02988635 -NCT02991482 -NCT02988648 -NCT02991547 -NCT02988726 -NCT02991560 -NCT02988765 -NCT02991612 -NCT02988804 -NCT02996773 -NCT02991651 -NCT02993991 -NCT02991677 -NCT02993913 -NCT02991807 -NCT02994030 -NCT02991833 -NCT02994069 -NCT02991898 -NCT02994186 -NCT02991911 -NCT02994225 -NCT02992015 -NCT02994251 -NCT02992067 -NCT02994342 -NCT02992132 -NCT02994420 -NCT02992145 -NCT02994446 -NCT02992171 -NCT02994459 -NCT02992210 -NCT02994472 -NCT02992236 -NCT02994485 -NCT02992262 -NCT02994498 -NCT02992301 -NCT02994511 -NCT02992327 -NCT02994576 -NCT02992340 -NCT02994602 -NCT02992353 -NCT02994706 -NCT02992379 -NCT02994758 -NCT02992405 -NCT02994797 -NCT02992483 -NCT02994823 -NCT02992522 -NCT02994849 -NCT02992574 -NCT02994888 -NCT02992665 -NCT02994914 -NCT02992678 -NCT02994927 -NCT02992743 -NCT02994953 -NCT02992782 -NCT02995187 -NCT02992808 -NCT02995304 -NCT02992821 -NCT02995330 -NCT02992834 -NCT02995356 -NCT02992860 -NCT02995434 -NCT02992886 -NCT02995525 -NCT02992912 -NCT02995538 -NCT02992925 -NCT02995603 -NCT02992951 -NCT02995655 -NCT02992977 -NCT02995668 -NCT02992990 -NCT02995733 -NCT02993042 -NCT02995772 -NCT02993068 -NCT02995798 -NCT02993094 -NCT02995850 -NCT02993146 -NCT02995889 -NCT02993159 -NCT02995902 -NCT02993198 -NCT02995915 -NCT02993211 -NCT02995980 -NCT02993250 -NCT02996110 -NCT02993315 -NCT02996201 -NCT02993497 -NCT02996214 -NCT02993523 -NCT02996240 -NCT02993562 -NCT02996266 -NCT02993705 -NCT02996461 -NCT02993731 -NCT02996474 -NCT02993744 -NCT02996487 -NCT02993783 -NCT02996552 -NCT02993796 -NCT02996565 -NCT02993822 -NCT02996617 -NCT02993900 -NCT03002532 -NCT02996825 -NCT02999672 -NCT02996838 -NCT02999646 -NCT02996877 -NCT02999698 -NCT02996955 -NCT02999711 -NCT02997150 -NCT02999750 -NCT02997163 -NCT02999854 -NCT02997176 -NCT02999893 -NCT02997202 -NCT02999958 -NCT02997228 -NCT02999997 -NCT02997241 -NCT03000036 -NCT02997254 -NCT03000049 -NCT02997332 -NCT03000127 -NCT02997358 -NCT03000166 -NCT02997501 -NCT03000179 -NCT02997527 -NCT03000231 -NCT02997553 -NCT03000257 -NCT02997761 -NCT03000374 -NCT02997787 -NCT03000452 -NCT02997839 -NCT03000517 -NCT02997943 -NCT03000634 -NCT02997956 -NCT03000660 -NCT02997969 -NCT03000712 -NCT02997982 -NCT03000764 -NCT02997995 -NCT03000790 -NCT02998047 -NCT03000816 -NCT02998086 -NCT03000920 -NCT02998151 -NCT03000933 -NCT02998268 -NCT03001050 -NCT02998359 -NCT03001167 -NCT02998385 -NCT03001323 -NCT02998450 -NCT03001349 -NCT02998476 -NCT03001362 -NCT02998528 -NCT03001401 -NCT02998567 -NCT03001453 -NCT02998619 -NCT03001466 -NCT02998658 -NCT03001570 -NCT02998671 -NCT03001583 -NCT02998736 -NCT03001596 -NCT02998788 -NCT03001609 -NCT02998983 -NCT03001739 -NCT02998996 -NCT03001791 -NCT02999048 -NCT03001843 -NCT02999074 -NCT03001869 -NCT02999087 -NCT03001882 -NCT02999152 -NCT03001895 -NCT02999165 -NCT03002012 -NCT02999217 -NCT03002051 -NCT02999295 -NCT03002064 -NCT02999308 -NCT03002103 -NCT02999386 -NCT03002220 -NCT02999412 -NCT03002298 -NCT02999451 -NCT03002324 -NCT02999477 -NCT03002376 -NCT02999529 -NCT03002454 -NCT02999594 -NCT03002493 -NCT02999633 -NCT03007953 -NCT03002623 -NCT03005756 -NCT03002766 -NCT03005743 -NCT03002805 -NCT03005834 -NCT03002818 -NCT03005860 -NCT03002831 -NCT03005912 -NCT03002844 -NCT03006029 -NCT03002909 -NCT03006055 -NCT03002922 -NCT03006172 -NCT03002974 -NCT03006185 -NCT03003039 -NCT03006224 -NCT03003065 -NCT03006263 -NCT03003078 -NCT03006276 -NCT03003195 -NCT03006302 -NCT03003208 -NCT03006354 -NCT03003234 -NCT03006432 -NCT03003273 -NCT03006445 -NCT03003325 -NCT03006562 -NCT03003468 -NCT03006575 -NCT03003507 -NCT03006588 -NCT03003520 -NCT03006614 -NCT03003533 -NCT03006679 -NCT03003546 -NCT03006705 -NCT03003572 -NCT03006718 -NCT03003637 -NCT03006796 -NCT03003663 -NCT03006848 -NCT03003676 -NCT03006887 -NCT03003728 -NCT03006926 -NCT03003962 -NCT03006978 -NCT03004105 -NCT03007004 -NCT03004118 -NCT03007030 -NCT03004183 -NCT03007095 -NCT03004287 -NCT03007147 -NCT03004534 -NCT03007173 -NCT03004573 -NCT03007212 -NCT03004586 -NCT03007225 -NCT03004599 -NCT03007251 -NCT03004677 -NCT03007277 -NCT03004768 -NCT03007316 -NCT03004833 -NCT03007381 -NCT03004924 -NCT03007407 -NCT03004976 -NCT03007420 -NCT03005002 -NCT03007433 -NCT03005015 -NCT03007446 -NCT03005093 -NCT03007550 -NCT03005145 -NCT03007563 -NCT03005275 -NCT03007589 -NCT03005314 -NCT03007641 -NCT03005379 -NCT03007719 -NCT03005392 -NCT03007732 -NCT03005444 -NCT03007771 -NCT03005522 -NCT03007797 -NCT03005561 -NCT03007823 -NCT03005587 -NCT03007836 -NCT03005600 -NCT03007849 -NCT03005639 -NCT03007875 -NCT03005717 -NCT03018821 -NCT03007979 -NCT03017339 -NCT03007992 -NCT03017391 -NCT03008005 -NCT03017404 -NCT03008018 -NCT03017417 -NCT03008031 -NCT03017443 -NCT03008044 -NCT03017456 -NCT03008109 -NCT03017482 -NCT03008148 -NCT03017521 -NCT03008161 -NCT03017560 -NCT03008187 -NCT03017573 -NCT03008252 -NCT03017599 -NCT03008278 -NCT03017612 -NCT03008291 -NCT03017716 -NCT03008304 -NCT03017768 -NCT03008330 -NCT03017807 -NCT03008343 -NCT03017820 -NCT03008369 -NCT03017833 -NCT03008408 -NCT03018080 -NCT03008447 -NCT03018093 -NCT03008499 -NCT03018132 -NCT03008512 -NCT03018223 -NCT03008551 -NCT03018249 -NCT03008655 -NCT03018288 -NCT03008668 -NCT03018405 -NCT03008694 -NCT03018418 -NCT03008707 -NCT03018431 -NCT03008733 -NCT03018613 -NCT03008824 -NCT03018626 -NCT03008993 -NCT03018652 -NCT03009019 -NCT03018808 -NCT03009058 -NCT03014687 -NCT03014726 -NCT03014804 -NCT03014843 -NCT03014921 -NCT03014973 -NCT03014986 -NCT03015077 -NCT03015129 -NCT03015220 -NCT03015233 -NCT03015311 -NCT03015324 -NCT03015363 -NCT03015415 -NCT03015493 -NCT03015532 -NCT03015675 -NCT03015701 -NCT03015727 -NCT03015740 -NCT03015753 -NCT03015779 -NCT03015792 -NCT03015883 -NCT03015896 -NCT03015922 -NCT03015948 -NCT03015987 -NCT03016000 -NCT03016026 -NCT03016091 -NCT03016130 -NCT03016156 -NCT03016195 -NCT03016286 -NCT03016299 -NCT03016312 -NCT03016338 -NCT03016377 -NCT03016403 -NCT03016637 -NCT03016715 -NCT03016728 -NCT03016741 -NCT03016806 -NCT03016819 -NCT03016871 -NCT03016910 -NCT03016949 -NCT03016988 -NCT03017053 -NCT03017131 -NCT03017183 -NCT03017248 -NCT03017274 -NCT03017326 -NCT03009201 -NCT03012100 -NCT03009214 -NCT03012009 -NCT03009227 -NCT03012152 -NCT03009240 -NCT03012178 -NCT03009253 -NCT03012230 -NCT03009292 -NCT03012256 -NCT03009318 -NCT03012282 -NCT03009331 -NCT03012321 -NCT03009344 -NCT03012334 -NCT03009461 -NCT03012399 -NCT03009565 -NCT03012425 -NCT03009591 -NCT03012477 -NCT03009604 -NCT03012529 -NCT03009630 -NCT03012555 -NCT03009643 -NCT03012581 -NCT03009682 -NCT03012594 -NCT03009760 -NCT03012620 -NCT03009981 -NCT03012672 -NCT03010033 -NCT03012776 -NCT03010059 -NCT03012789 -NCT03010085 -NCT03012841 -NCT03010124 -NCT03012880 -NCT03010176 -NCT03012893 -NCT03010358 -NCT03012932 -NCT03010371 -NCT03012945 -NCT03010449 -NCT03013010 -NCT03010540 -NCT03013101 -NCT03010553 -NCT03013127 -NCT03010579 -NCT03013153 -NCT03010631 -NCT03013166 -NCT03010657 -NCT03013179 -NCT03010709 -NCT03013218 -NCT03010722 -NCT03013335 -NCT03010735 -NCT03013348 -NCT03010813 -NCT03013387 -NCT03010943 -NCT03013413 -NCT03010982 -NCT03013491 -NCT03011034 -NCT03013504 -NCT03011060 -NCT03013608 -NCT03011255 -NCT03013647 -NCT03011294 -NCT03013686 -NCT03011307 -NCT03013699 -NCT03011320 -NCT03013712 -NCT03011359 -NCT03013881 -NCT03011372 -NCT03013933 -NCT03011463 -NCT03013946 -NCT03011476 -NCT03013985 -NCT03011489 -NCT03013998 -NCT03011528 -NCT03014024 -NCT03011606 -NCT03014037 -NCT03011671 -NCT03014076 -NCT03011736 -NCT03014154 -NCT03011749 -NCT03014258 -NCT03011775 -NCT03014297 -NCT03011814 -NCT03014648 -NCT03011840 -NCT03024684 -NCT03018912 -NCT03022032 -NCT03019003 -NCT03021993 -NCT03019029 -NCT03022110 -NCT03019055 -NCT03022123 -NCT03019172 -NCT03022162 -NCT03019237 -NCT03022409 -NCT03019276 -NCT03022500 -NCT03019328 -NCT03022513 -NCT03019380 -NCT03022552 -NCT03019393 -NCT03022565 -NCT03019510 -NCT03022578 -NCT03019536 -NCT03022656 -NCT03019575 -NCT03022695 -NCT03019588 -NCT03022734 -NCT03019640 -NCT03022747 -NCT03019666 -NCT03022786 -NCT03019679 -NCT03022825 -NCT03019757 -NCT03022864 -NCT03019939 -NCT03022968 -NCT03019991 -NCT03022994 -NCT03020004 -NCT03023007 -NCT03020017 -NCT03023046 -NCT03020030 -NCT03023098 -NCT03020121 -NCT03023111 -NCT03020147 -NCT03023124 -NCT03020160 -NCT03023137 -NCT03020212 -NCT03023189 -NCT03020238 -NCT03023319 -NCT03020251 -NCT03023345 -NCT03020303 -NCT03023358 -NCT03020329 -NCT03023384 -NCT03020498 -NCT03023397 -NCT03020511 -NCT03023423 -NCT03020550 -NCT03023436 -NCT03020602 -NCT03023462 -NCT03020797 -NCT03023527 -NCT03020823 -NCT03023592 -NCT03020862 -NCT03023631 -NCT03020888 -NCT03023683 -NCT03020966 -NCT03023722 -NCT03021057 -NCT03023774 -NCT03021122 -NCT03023878 -NCT03021135 -NCT03023904 -NCT03021200 -NCT03024060 -NCT03021330 -NCT03024151 -NCT03021395 -NCT03024190 -NCT03021408 -NCT03024216 -NCT03021460 -NCT03024242 -NCT03021486 -NCT03024333 -NCT03021603 -NCT03024359 -NCT03021629 -NCT03024437 -NCT03021668 -NCT03024450 -NCT03021681 -NCT03024489 -NCT03021720 -NCT03024580 -NCT03021785 -NCT03024658 -NCT03021889 -NCT03138967 -NCT03024749 -NCT03135938 -NCT03024996 -NCT03027284 -NCT03025035 -NCT03135951 -NCT03025139 -NCT03135964 -NCT03025152 -NCT03135977 -NCT03025256 -NCT03136003 -NCT03025269 -NCT03136055 -NCT03025464 -NCT03136146 -NCT03025477 -NCT03136172 -NCT03025516 -NCT03136198 -NCT03025529 -NCT03136328 -NCT03025633 -NCT03136341 -NCT03025646 -NCT03136354 -NCT03025672 -NCT03136367 -NCT03025724 -NCT03136406 -NCT03025750 -NCT03136445 -NCT03025776 -NCT03136497 -NCT03025841 -NCT03136562 -NCT03025880 -NCT03136575 -NCT03025893 -NCT03136627 -NCT03025906 -NCT03136640 -NCT03025932 -NCT03136653 -NCT03025958 -NCT03136783 -NCT03025971 -NCT03136991 -NCT03025984 -NCT03137004 -NCT03026062 -NCT03137069 -NCT03026075 -NCT03137121 -NCT03026088 -NCT03137147 -NCT03026101 -NCT03137173 -NCT03026140 -NCT03137186 -NCT03026166 -NCT03137511 -NCT03026374 -NCT03137537 -NCT03026439 -NCT03137576 -NCT03026452 -NCT03137693 -NCT03026478 -NCT03137758 -NCT03026491 -NCT03137771 -NCT03026504 -NCT03137823 -NCT03026517 -NCT03137888 -NCT03026556 -NCT03137953 -NCT03026686 -NCT03138005 -NCT03026712 -NCT03138031 -NCT03026803 -NCT03138044 -NCT03026842 -NCT03138070 -NCT03026881 -NCT03138083 -NCT03026933 -NCT03138161 -NCT03026972 -NCT03138213 -NCT03026998 -NCT03138239 -NCT03027037 -NCT03138408 -NCT03027063 -NCT03138499 -NCT03027076 -NCT03138512 -NCT03027089 -NCT03138538 -NCT03027102 -NCT03138642 -NCT03027115 -NCT03138655 -NCT03027128 -NCT03138720 -NCT03027154 -NCT03138824 -NCT03027258 -NCT03138889 -NCT03027310 -NCT03132922 -NCT03027349 -NCT03132961 -NCT03027388 -NCT03133221 -NCT03027401 -NCT03133247 -NCT03027427 -NCT03133273 -NCT03027479 -NCT03133351 -NCT03027492 -NCT03133507 -NCT03027544 -NCT03133520 -NCT03027609 -NCT03133533 -NCT03027648 -NCT03133546 -NCT03027739 -NCT03133637 -NCT03027752 -NCT03133650 -NCT03027973 -NCT03133663 -NCT03027986 -NCT03133780 -NCT03028077 -NCT03133884 -NCT03028103 -NCT03133897 -NCT03028142 -NCT03134118 -NCT03028155 -NCT03134261 -NCT03028181 -NCT03134339 -NCT03028246 -NCT03134352 -NCT03028272 -NCT03134378 -NCT03028285 -NCT03134404 -NCT03028298 -NCT03134430 -NCT03028311 -NCT03134456 -NCT03028337 -NCT03134534 -NCT03028467 -NCT03134586 -NCT03028493 -NCT03134638 -NCT03028506 -NCT03134690 -NCT03028519 -NCT03134729 -NCT03028623 -NCT03134742 -NCT03028701 -NCT03134755 -NCT03028753 -NCT03134846 -NCT03028766 -NCT03134872 -NCT03028779 -NCT03134924 -NCT03028818 -NCT03134963 -NCT03028831 -NCT03135015 -NCT03028883 -NCT03135028 -NCT03028948 -NCT03135054 -NCT03028974 -NCT03135171 -NCT03029013 -NCT03135236 -NCT03029039 -NCT03135262 -NCT03029156 -NCT03135275 -NCT03029182 -NCT03135444 -NCT03029234 -NCT03135496 -NCT03029273 -NCT03135522 -NCT03029286 -NCT03135613 -NCT03029299 -NCT03135652 -NCT03029338 -NCT03135769 -NCT03029403 -NCT03135782 -NCT03029416 -NCT03135808 -NCT03029429 -NCT03135821 -NCT03029468 -NCT03135860 -NCT03029533 -NCT03135912 -NCT03029585 -NCT03135925 -NCT03029598 -NCT03132792 -NCT03132883 -NCT03132909 -NCT03029611 -NCT03032172 -NCT03029676 -NCT03032107 -NCT03029780 -NCT03032211 -NCT03029806 -NCT03032224 -NCT03029832 -NCT03032250 -NCT03029871 -NCT03032315 -NCT03029897 -NCT03032380 -NCT03029949 -NCT03032406 -NCT03029988 -NCT03032484 -NCT03030001 -NCT03044743 -NCT03030066 -NCT03044782 -NCT03030131 -NCT03044795 -NCT03030248 -NCT03044977 -NCT03030261 -NCT03045003 -NCT03030274 -NCT03045094 -NCT03030287 -NCT03045107 -NCT03030365 -NCT03045172 -NCT03030378 -NCT03045211 -NCT03030404 -NCT03045289 -NCT03030417 -NCT03045328 -NCT03030430 -NCT03045393 -NCT03030573 -NCT03045445 -NCT03030586 -NCT03045484 -NCT03030612 -NCT03045497 -NCT03030625 -NCT03131219 -NCT03030664 -NCT03131323 -NCT03030677 -NCT03131349 -NCT03030794 -NCT03131362 -NCT03030859 -NCT03131427 -NCT03030885 -NCT03131440 -NCT03030937 -NCT03131453 -NCT03031093 -NCT03131609 -NCT03031132 -NCT03131713 -NCT03031145 -NCT03131726 -NCT03031158 -NCT03131765 -NCT03031171 -NCT03131778 -NCT03031236 -NCT03131869 -NCT03031249 -NCT03131908 -NCT03031262 -NCT03131934 -NCT03031301 -NCT03131999 -NCT03031418 -NCT03132012 -NCT03031444 -NCT03132025 -NCT03031483 -NCT03132038 -NCT03031535 -NCT03132090 -NCT03031561 -NCT03132142 -NCT03031613 -NCT03132155 -NCT03031639 -NCT03132246 -NCT03031691 -NCT03132259 -NCT03031730 -NCT03132324 -NCT03031821 -NCT03132454 -NCT03031873 -NCT03132467 -NCT03031938 -NCT03132532 -NCT03031977 -NCT03132558 -NCT03032003 -NCT03132584 -NCT03032029 -NCT03132636 -NCT03032055 -NCT03132675 -NCT03032510 -NCT03043898 -NCT03032536 -NCT03043950 -NCT03032614 -NCT03043989 -NCT03032783 -NCT03044028 -NCT03032848 -NCT03044054 -NCT03033082 -NCT03044197 -NCT03033121 -NCT03044223 -NCT03033160 -NCT03044353 -NCT03033225 -NCT03044587 -NCT03033303 -NCT03044613 -NCT03033316 -NCT03044626 -NCT03033381 -NCT03044704 -NCT03033446 -NCT03044730 -NCT03033485 -NCT03039140 -NCT03039205 -NCT03039270 -NCT03039296 -NCT03039413 -NCT03039439 -NCT03039465 -NCT03039673 -NCT03039777 -NCT03039855 -NCT03040024 -NCT03040089 -NCT03040102 -NCT03040180 -NCT03040310 -NCT03040375 -NCT03040401 -NCT03040414 -NCT03040453 -NCT03040531 -NCT03040570 -NCT03040583 -NCT03040726 -NCT03040778 -NCT03040791 -NCT03040882 -NCT03040973 -NCT03040986 -NCT03040999 -NCT03041038 -NCT03041051 -NCT03041064 -NCT03041077 -NCT03041142 -NCT03041168 -NCT03041181 -NCT03041246 -NCT03041285 -NCT03041311 -NCT03041402 -NCT03041454 -NCT03041506 -NCT03041519 -NCT03041532 -NCT03041636 -NCT03041688 -NCT03041701 -NCT03041714 -NCT03041766 -NCT03041935 -NCT03042000 -NCT03042013 -NCT03042026 -NCT03042065 -NCT03042091 -NCT03042169 -NCT03042182 -NCT03042195 -NCT03042247 -NCT03042312 -NCT03042416 -NCT03042429 -NCT03042468 -NCT03042585 -NCT03042611 -NCT03042624 -NCT03042689 -NCT03042702 -NCT03042780 -NCT03042793 -NCT03042819 -NCT03042884 -NCT03042897 -NCT03042910 -NCT03043118 -NCT03043131 -NCT03043170 -NCT03043209 -NCT03043222 -NCT03043313 -NCT03043326 -NCT03043391 -NCT03043430 -NCT03043469 -NCT03043495 -NCT03043521 -NCT03043547 -NCT03043586 -NCT03043599 -NCT03043664 -NCT03043729 -NCT03043794 -NCT03043807 -NCT03043872 -NCT03043885 -NCT03033511 -NCT03036020 -NCT03033524 -NCT03035955 -NCT03033550 -NCT03036033 -NCT03033576 -NCT03036046 -NCT03033615 -NCT03036098 -NCT03033693 -NCT03036228 -NCT03033706 -NCT03036254 -NCT03033719 -NCT03036267 -NCT03033758 -NCT03036436 -NCT03033771 -NCT03036475 -NCT03033888 -NCT03036488 -NCT03033914 -NCT03036553 -NCT03033940 -NCT03036761 -NCT03033992 -NCT03036904 -NCT03034044 -NCT03036943 -NCT03034070 -NCT03036995 -NCT03034135 -NCT03037021 -NCT03034148 -NCT03037034 -NCT03034200 -NCT03037073 -NCT03034304 -NCT03037112 -NCT03034330 -NCT03037190 -NCT03034395 -NCT03037346 -NCT03034473 -NCT03037359 -NCT03034525 -NCT03037385 -NCT03034564 -NCT03037437 -NCT03034603 -NCT03037541 -NCT03034733 -NCT03037554 -NCT03034850 -NCT03037645 -NCT03034915 -NCT03037723 -NCT03034941 -NCT03037762 -NCT03034967 -NCT03037944 -NCT03035006 -NCT03038100 -NCT03035032 -NCT03038152 -NCT03035071 -NCT03038191 -NCT03035188 -NCT03038204 -NCT03035201 -NCT03038217 -NCT03035253 -NCT03038230 -NCT03035279 -NCT03038256 -NCT03035292 -NCT03038282 -NCT03035331 -NCT03038308 -NCT03035357 -NCT03038321 -NCT03035396 -NCT03038386 -NCT03035409 -NCT03038425 -NCT03035422 -NCT03038477 -NCT03035448 -NCT03038529 -NCT03035487 -NCT03038581 -NCT03035500 -NCT03038620 -NCT03035591 -NCT03038633 -NCT03035630 -NCT03038672 -NCT03035656 -NCT03038763 -NCT03035708 -NCT03038828 -NCT03035760 -NCT03038893 -NCT03035773 -NCT03038958 -NCT03035825 -NCT03039114 -NCT03035890 -NCT03039127 -NCT03035929 -NCT03131206 -NCT03045510 -NCT03048877 -NCT03045627 -NCT03048760 -NCT03045653 -NCT03048916 -NCT03045679 -NCT03048942 -NCT03045705 -NCT03048955 -NCT03045757 -NCT03048994 -NCT03045770 -NCT03049033 -NCT03045952 -NCT03128944 -NCT03045965 -NCT03128983 -NCT03046004 -NCT03128996 -NCT03046082 -NCT03129061 -NCT03046108 -NCT03129074 -NCT03046238 -NCT03129139 -NCT03046316 -NCT03129204 -NCT03046329 -NCT03129243 -NCT03046394 -NCT03129256 -NCT03046433 -NCT03129295 -NCT03046485 -NCT03129321 -NCT03046563 -NCT03129412 -NCT03046693 -NCT03129451 -NCT03046745 -NCT03129477 -NCT03046862 -NCT03129685 -NCT03046953 -NCT03129737 -NCT03046979 -NCT03129776 -NCT03046992 -NCT03129789 -NCT03047096 -NCT03129828 -NCT03047122 -NCT03129854 -NCT03047174 -NCT03129971 -NCT03047187 -NCT03130049 -NCT03047213 -NCT03130062 -NCT03047239 -NCT03130101 -NCT03047265 -NCT03130140 -NCT03047473 -NCT03130166 -NCT03047525 -NCT03130179 -NCT03047694 -NCT03130270 -NCT03047811 -NCT03130335 -NCT03047837 -NCT03130348 -NCT03047928 -NCT03130439 -NCT03047941 -NCT03130517 -NCT03047993 -NCT03130543 -NCT03048032 -NCT03130569 -NCT03048058 -NCT03130595 -NCT03048084 -NCT03130634 -NCT03048097 -NCT03130712 -NCT03048123 -NCT03130738 -NCT03048136 -NCT03130751 -NCT03048175 -NCT03130764 -NCT03048240 -NCT03130790 -NCT03048383 -NCT03130881 -NCT03048461 -NCT03130920 -NCT03048474 -NCT03130946 -NCT03048500 -NCT03130959 -NCT03048656 -NCT03130972 -NCT03048669 -NCT03131011 -NCT03048682 -NCT03131024 -NCT03048708 -NCT03131037 -NCT03049111 -NCT03051477 -NCT03049124 -NCT03051464 -NCT03049189 -NCT03051503 -NCT03049202 -NCT03051516 -NCT03049280 -NCT03051542 -NCT03049345 -NCT03051555 -NCT03049358 -NCT03051568 -NCT03049384 -NCT03051581 -NCT03049397 -NCT03051646 -NCT03049410 -NCT03051659 -NCT03049449 -NCT03051672 -NCT03049475 -NCT03051737 -NCT03049488 -NCT03051750 -NCT03049618 -NCT03051776 -NCT03049735 -NCT03051789 -NCT03049800 -NCT03051802 -NCT03049956 -NCT03051815 -NCT03049995 -NCT03051841 -NCT03050034 -NCT03051880 -NCT03050047 -NCT03051906 -NCT03050060 -NCT03052049 -NCT03050177 -NCT03052127 -NCT03050203 -NCT03052179 -NCT03050216 -NCT03052205 -NCT03050268 -NCT03052231 -NCT03050398 -NCT03052335 -NCT03050411 -NCT03052361 -NCT03050437 -NCT03052374 -NCT03050450 -NCT03127319 -NCT03050476 -NCT03127332 -NCT03050489 -NCT03127384 -NCT03050515 -NCT03127410 -NCT03050528 -NCT03127514 -NCT03050554 -NCT03127631 -NCT03050723 -NCT03127735 -NCT03050736 -NCT03127774 -NCT03050749 -NCT03127969 -NCT03050762 -NCT03127995 -NCT03050788 -NCT03128008 -NCT03050814 -NCT03128034 -NCT03050866 -NCT03128047 -NCT03050879 -NCT03128060 -NCT03050931 -NCT03128164 -NCT03050957 -NCT03128190 -NCT03050996 -NCT03128216 -NCT03051035 -NCT03128229 -NCT03051048 -NCT03128281 -NCT03051152 -NCT03128333 -NCT03051178 -NCT03128359 -NCT03051243 -NCT03128411 -NCT03051256 -NCT03128619 -NCT03051269 -NCT03128736 -NCT03051334 -NCT03128762 -NCT03051360 -NCT03128827 -NCT03051373 -NCT03128879 -NCT03051451 -NCT03128905 -NCT03052400 -NCT03055624 -NCT03052478 -NCT03055598 -NCT03052556 -NCT03055637 -NCT03052608 -NCT03055650 -NCT03052634 -NCT03055728 -NCT03052751 -NCT03055754 -NCT03052777 -NCT03056001 -NCT03052868 -NCT03056027 -NCT03052907 -NCT03056131 -NCT03052920 -NCT03056144 -NCT03052933 -NCT03125798 -NCT03052959 -NCT03125811 -NCT03052998 -NCT03125876 -NCT03053115 -NCT03125902 -NCT03053154 -NCT03125928 -NCT03053167 -NCT03125941 -NCT03053206 -NCT03125967 -NCT03053219 -NCT03125980 -NCT03053271 -NCT03126019 -NCT03053284 -NCT03126045 -NCT03053466 -NCT03126058 -NCT03053492 -NCT03126071 -NCT03053544 -NCT03126110 -NCT03053635 -NCT03126123 -NCT03053804 -NCT03126175 -NCT03053830 -NCT03126240 -NCT03053856 -NCT03126266 -NCT03054025 -NCT03126331 -NCT03054038 -NCT03126383 -NCT03054194 -NCT03126396 -NCT03054259 -NCT03126435 -NCT03054285 -NCT03126461 -NCT03054298 -NCT03126474 -NCT03054363 -NCT03126487 -NCT03054389 -NCT03126591 -NCT03054454 -NCT03126604 -NCT03054506 -NCT03126630 -NCT03054532 -NCT03126708 -NCT03054558 -NCT03126734 -NCT03054597 -NCT03126760 -NCT03054649 -NCT03126799 -NCT03054701 -NCT03126812 -NCT03054753 -NCT03126864 -NCT03054792 -NCT03126916 -NCT03054805 -NCT03126955 -NCT03054883 -NCT03127007 -NCT03054896 -NCT03127020 -NCT03054909 -NCT03127046 -NCT03054961 -NCT03127072 -NCT03054987 -NCT03127098 -NCT03055013 -NCT03127124 -NCT03055143 -NCT03127215 -NCT03055208 -NCT03127241 -NCT03055286 -NCT03127254 -NCT03055312 -NCT03127267 -NCT03055481 -NCT03127293 -NCT03056300 -NCT03123224 -NCT03056339 -NCT03123276 -NCT03056352 -NCT03123393 -NCT03056469 -NCT03123432 -NCT03056547 -NCT03123445 -NCT03056573 -NCT03123484 -NCT03056599 -NCT03123562 -NCT03056638 -NCT03123588 -NCT03056755 -NCT03123601 -NCT03056833 -NCT03123653 -NCT03056924 -NCT03123679 -NCT03057015 -NCT03123718 -NCT03057054 -NCT03123744 -NCT03057106 -NCT03123770 -NCT03057145 -NCT03123783 -NCT03057171 -NCT03123796 -NCT03057223 -NCT03123822 -NCT03057288 -NCT03123835 -NCT03057314 -NCT03123939 -NCT03057327 -NCT03123952 -NCT03057340 -NCT03123978 -NCT03057366 -NCT03124004 -NCT03057392 -NCT03124017 -NCT03057418 -NCT03124030 -NCT03057470 -NCT03124095 -NCT03057496 -NCT03124108 -NCT03057509 -NCT03124160 -NCT03057600 -NCT03124199 -NCT03057613 -NCT03124316 -NCT03057678 -NCT03124407 -NCT03057743 -NCT03124433 -NCT03057795 -NCT03124498 -NCT03057821 -NCT03124524 -NCT03057860 -NCT03124615 -NCT03057873 -NCT03124732 -NCT03057912 -NCT03125031 -NCT03057990 -NCT03125070 -NCT03058094 -NCT03125083 -NCT03058198 -NCT03125161 -NCT03058289 -NCT03125200 -NCT03058380 -NCT03125226 -NCT03058419 -NCT03125239 -NCT03058432 -NCT03125343 -NCT03058549 -NCT03125525 -NCT03058575 -NCT03125564 -NCT03058627 -NCT03125590 -NCT03058640 -NCT03125616 -NCT03058705 -NCT03125629 -NCT03058757 -NCT03125642 -NCT03058809 -NCT03125733 -NCT03058822 -NCT03125746 -NCT03058874 -NCT03122782 -NCT03122873 -NCT03122886 -NCT03122951 -NCT03123003 -NCT03123042 -NCT03123055 -NCT03123081 -NCT03123185 -NCT03125759 -NCT03058900 -NCT03121729 -NCT03058939 -NCT03121807 -NCT03059043 -NCT03121833 -NCT03059147 -NCT03121846 -NCT03059199 -NCT03121859 -NCT03059238 -NCT03121989 -NCT03059251 -NCT03122106 -NCT03059329 -NCT03122145 -NCT03059342 -NCT03122197 -NCT03059381 -NCT03122223 -NCT03059420 -NCT03122249 -NCT03059485 -NCT03122275 -NCT03059615 -NCT03122444 -NCT03059667 -NCT03122457 -NCT03059797 -NCT03122470 -NCT03059823 -NCT03122496 -NCT03059875 -NCT03122509 -NCT03059888 -NCT03122522 -NCT03059914 -NCT03122548 -NCT03060057 -NCT03122678 -NCT03060070 -NCT03122717 -NCT03060096 -NCT03066115 -NCT03066128 -NCT03066154 -NCT03066167 -NCT03066206 -NCT03066271 -NCT03066336 -NCT03066388 -NCT03066414 -NCT03066427 -NCT03066440 -NCT03066466 -NCT03066557 -NCT03066648 -NCT03066778 -NCT03066817 -NCT03066856 -NCT03066882 -NCT03066947 -NCT03066999 -NCT03067012 -NCT03067051 -NCT03067090 -NCT03067181 -NCT03067298 -NCT03067493 -NCT03067558 -NCT03067571 -NCT03078699 -NCT03078712 -NCT03078751 -NCT03078816 -NCT03078829 -NCT03078855 -NCT03078920 -NCT03078972 -NCT03078998 -NCT03079011 -NCT03079102 -NCT03079115 -NCT03079128 -NCT03079193 -NCT03079219 -NCT03079232 -NCT03079323 -NCT03079414 -NCT03079427 -NCT03079440 -NCT03079453 -NCT03079466 -NCT03079505 -NCT03079596 -NCT03120624 -NCT03120676 -NCT03120728 -NCT03120754 -NCT03120819 -NCT03120832 -NCT03120884 -NCT03120988 -NCT03121001 -NCT03121014 -NCT03121170 -NCT03121209 -NCT03121248 -NCT03121313 -NCT03121352 -NCT03121417 -NCT03121456 -NCT03121469 -NCT03121495 -NCT03121534 -NCT03121547 -NCT03121599 -NCT03121625 -NCT03121677 -NCT03121716 -NCT03060200 -NCT03063632 -NCT03060226 -NCT03063554 -NCT03060304 -NCT03063684 -NCT03060343 -NCT03063723 -NCT03060356 -NCT03063762 -NCT03060421 -NCT03063827 -NCT03060499 -NCT03063840 -NCT03060512 -NCT03063918 -NCT03060850 -NCT03063944 -NCT03060863 -NCT03063983 -NCT03060876 -NCT03064022 -NCT03060941 -NCT03064035 -NCT03061058 -NCT03064087 -NCT03061110 -NCT03064243 -NCT03061162 -NCT03064269 -NCT03061175 -NCT03064308 -NCT03061188 -NCT03064464 -NCT03061201 -NCT03064490 -NCT03061344 -NCT03064581 -NCT03061435 -NCT03064646 -NCT03061539 -NCT03064659 -NCT03061643 -NCT03064763 -NCT03061656 -NCT03064828 -NCT03061669 -NCT03064854 -NCT03061682 -NCT03064867 -NCT03061708 -NCT03064945 -NCT03061773 -NCT03065010 -NCT03061812 -NCT03065023 -NCT03061929 -NCT03065062 -NCT03062007 -NCT03065166 -NCT03062059 -NCT03065179 -NCT03062072 -NCT03065205 -NCT03062111 -NCT03065218 -NCT03062124 -NCT03065231 -NCT03062137 -NCT03065270 -NCT03062254 -NCT03065335 -NCT03062319 -NCT03065348 -NCT03062332 -NCT03065374 -NCT03062358 -NCT03065387 -NCT03062410 -NCT03065400 -NCT03062436 -NCT03065543 -NCT03062462 -NCT03065556 -NCT03062631 -NCT03065582 -NCT03062644 -NCT03065608 -NCT03062683 -NCT03065621 -NCT03062696 -NCT03065634 -NCT03062943 -NCT03065647 -NCT03062982 -NCT03065686 -NCT03063073 -NCT03065712 -NCT03063112 -NCT03065764 -NCT03063125 -NCT03065816 -NCT03063151 -NCT03065855 -NCT03063203 -NCT03065907 -NCT03063255 -NCT03065920 -NCT03063398 -NCT03066050 -NCT03063450 -NCT03078608 -NCT03067610 -NCT03076177 -NCT03067623 -NCT03076190 -NCT03067688 -NCT03076203 -NCT03067701 -NCT03076216 -NCT03067766 -NCT03076255 -NCT03067792 -NCT03076281 -NCT03067831 -NCT03076307 -NCT03068052 -NCT03076333 -NCT03068117 -NCT03076372 -NCT03068156 -NCT03076411 -NCT03068208 -NCT03076437 -NCT03068221 -NCT03076515 -NCT03068260 -NCT03076541 -NCT03068351 -NCT03076554 -NCT03068403 -NCT03076619 -NCT03068416 -NCT03076632 -NCT03068455 -NCT03076645 -NCT03068468 -NCT03076671 -NCT03068507 -NCT03076697 -NCT03068520 -NCT03076749 -NCT03068572 -NCT03076840 -NCT03068624 -NCT03076853 -NCT03068637 -NCT03076879 -NCT03068663 -NCT03076957 -NCT03068819 -NCT03077113 -NCT03068832 -NCT03077126 -NCT03068910 -NCT03077178 -NCT03068936 -NCT03077230 -NCT03068949 -NCT03077243 -NCT03069040 -NCT03077308 -NCT03069079 -NCT03077451 -NCT03069248 -NCT03077477 -NCT03069287 -NCT03077542 -NCT03069352 -NCT03077555 -NCT03069365 -NCT03077607 -NCT03069378 -NCT03077633 -NCT03069469 -NCT03077659 -NCT03069508 -NCT03077685 -NCT03069534 -NCT03077698 -NCT03069664 -NCT03077711 -NCT03069729 -NCT03077776 -NCT03069742 -NCT03077828 -NCT03069846 -NCT03077841 -NCT03069872 -NCT03077854 -NCT03069885 -NCT03078036 -NCT03069924 -NCT03078166 -NCT03069937 -NCT03078335 -NCT03069950 -NCT03078348 -NCT03069963 -NCT03078361 -NCT03070002 -NCT03078387 -NCT03070067 -NCT03078400 -NCT03070145 -NCT03078452 -NCT03070184 -NCT03078530 -NCT03070236 -NCT03078595 -NCT03070262 -NCT03076034 -NCT03076099 -NCT03076164 -NCT03070301 -NCT03072602 -NCT03070327 -NCT03072576 -NCT03070340 -NCT03072641 -NCT03070366 -NCT03072771 -NCT03070392 -NCT03072940 -NCT03070431 -NCT03072966 -NCT03070496 -NCT03072992 -NCT03070548 -NCT03073226 -NCT03070574 -NCT03073278 -NCT03070613 -NCT03073304 -NCT03070626 -NCT03073343 -NCT03070691 -NCT03073395 -NCT03070769 -NCT03073499 -NCT03070808 -NCT03073525 -NCT03070860 -NCT03073694 -NCT03070886 -NCT03073785 -NCT03070899 -NCT03074006 -NCT03070951 -NCT03074032 -NCT03070964 -NCT03074045 -NCT03070990 -NCT03074071 -NCT03071042 -NCT03074084 -NCT03071081 -NCT03074110 -NCT03071094 -NCT03074279 -NCT03071185 -NCT03074292 -NCT03071198 -NCT03074318 -NCT03071276 -NCT03074344 -NCT03071289 -NCT03074461 -NCT03071328 -NCT03074474 -NCT03071354 -NCT03074500 -NCT03071406 -NCT03074513 -NCT03071445 -NCT03074552 -NCT03071471 -NCT03074669 -NCT03071549 -NCT03074825 -NCT03071705 -NCT03074864 -NCT03071744 -NCT03074916 -NCT03071757 -NCT03074942 -NCT03071822 -NCT03075072 -NCT03071861 -NCT03075098 -NCT03071874 -NCT03075163 -NCT03071900 -NCT03075228 -NCT03071926 -NCT03075423 -NCT03071965 -NCT03075449 -NCT03072017 -NCT03075462 -NCT03072030 -NCT03075514 -NCT03072043 -NCT03075527 -NCT03072095 -NCT03075540 -NCT03072134 -NCT03075553 -NCT03072160 -NCT03075605 -NCT03072186 -NCT03075618 -NCT03072225 -NCT03075631 -NCT03072238 -NCT03075696 -NCT03072303 -NCT03075826 -NCT03072368 -NCT03075852 -NCT03072446 -NCT03075891 -NCT03072472 -NCT03075995 -NCT03072550 -NCT03120585 -NCT03079700 -NCT03119428 -NCT03079778 -NCT03119467 -NCT03079843 -NCT03119519 -NCT03079960 -NCT03119571 -NCT03079999 -NCT03119584 -NCT03080116 -NCT03119714 -NCT03080129 -NCT03119857 -NCT03080155 -NCT03119883 -NCT03080181 -NCT03119961 -NCT03080311 -NCT03120000 -NCT03080337 -NCT03120013 -NCT03080389 -NCT03120078 -NCT03080428 -NCT03120104 -NCT03080454 -NCT03120130 -NCT03080519 -NCT03120390 -NCT03080688 -NCT03114683 -NCT03114839 -NCT03114865 -NCT03114930 -NCT03115008 -NCT03115125 -NCT03115138 -NCT03115177 -NCT03115333 -NCT03115372 -NCT03115398 -NCT03115450 -NCT03115463 -NCT03115476 -NCT03115515 -NCT03115593 -NCT03115658 -NCT03115762 -NCT03115801 -NCT03115814 -NCT03115853 -NCT03115879 -NCT03115944 -NCT03115957 -NCT03115983 -NCT03116009 -NCT03116035 -NCT03116048 -NCT03116152 -NCT03116256 -NCT03116360 -NCT03116386 -NCT03116412 -NCT03116529 -NCT03116542 -NCT03116555 -NCT03116568 -NCT03116607 -NCT03116659 -NCT03116763 -NCT03116945 -NCT03116971 -NCT03116984 -NCT03117010 -NCT03117023 -NCT03117049 -NCT03117075 -NCT03117101 -NCT03117179 -NCT03117257 -NCT03117283 -NCT03117309 -NCT03117335 -NCT03117348 -NCT03117361 -NCT03117400 -NCT03117426 -NCT03117543 -NCT03117556 -NCT03117582 -NCT03117751 -NCT03117764 -NCT03117816 -NCT03117829 -NCT03117855 -NCT03117894 -NCT03117920 -NCT03117933 -NCT03117946 -NCT03117972 -NCT03117998 -NCT03118128 -NCT03118180 -NCT03118258 -NCT03118271 -NCT03118349 -NCT03118466 -NCT03118479 -NCT03118674 -NCT03118817 -NCT03118830 -NCT03118882 -NCT03118895 -NCT03118973 -NCT03118986 -NCT03119051 -NCT03119064 -NCT03119181 -NCT03119363 -NCT03119376 -NCT03120403 -NCT03080701 -NCT03082586 -NCT03080714 -NCT03082573 -NCT03080766 -NCT03082599 -NCT03080779 -NCT03082612 -NCT03080792 -NCT03082716 -NCT03080805 -NCT03082781 -NCT03080831 -NCT03082794 -NCT03080883 -NCT03082807 -NCT03080909 -NCT03082833 -NCT03080922 -NCT03082846 -NCT03080961 -NCT03082911 -NCT03080974 -NCT03083041 -NCT03081039 -NCT03083054 -NCT03081104 -NCT03083197 -NCT03081130 -NCT03083210 -NCT03081143 -NCT03083223 -NCT03081221 -NCT03083236 -NCT03081234 -NCT03083262 -NCT03081338 -NCT03083288 -NCT03081468 -NCT03083314 -NCT03081481 -NCT03083327 -NCT03081494 -NCT03083405 -NCT03081507 -NCT03083470 -NCT03081533 -NCT03083522 -NCT03081546 -NCT03083548 -NCT03081663 -NCT03083613 -NCT03081689 -NCT03083678 -NCT03081702 -NCT03083691 -NCT03081715 -NCT03083704 -NCT03081767 -NCT03083743 -NCT03081780 -NCT03083808 -NCT03081793 -NCT03083834 -NCT03081806 -NCT03083847 -NCT03081819 -NCT03083873 -NCT03081858 -NCT03083886 -NCT03081871 -NCT03083899 -NCT03081884 -NCT03083938 -NCT03081897 -NCT03083951 -NCT03081910 -NCT03083964 -NCT03081923 -NCT03084016 -NCT03082053 -NCT03084055 -NCT03082066 -NCT03084081 -NCT03082079 -NCT03084120 -NCT03082092 -NCT03084133 -NCT03082105 -NCT03084159 -NCT03082144 -NCT03114267 -NCT03082157 -NCT03114280 -NCT03082209 -NCT03114319 -NCT03082300 -NCT03114345 -NCT03082404 -NCT03114462 -NCT03082417 -NCT03114501 -NCT03082456 -NCT03114514 -NCT03082495 -NCT03114527 -NCT03082508 -NCT03114631 -NCT03082534 -NCT03114657 -NCT03082547 -NCT03114670 -NCT03084211 -NCT03086681 -NCT03084237 -NCT03086642 -NCT03084341 -NCT03086733 -NCT03084380 -NCT03086785 -NCT03084445 -NCT03086954 -NCT03084497 -NCT03086993 -NCT03084510 -NCT03087019 -NCT03084536 -NCT03087071 -NCT03084640 -NCT03087123 -NCT03084666 -NCT03087149 -NCT03084692 -NCT03087227 -NCT03084705 -NCT03087357 -NCT03084744 -NCT03087370 -NCT03084757 -NCT03087422 -NCT03084809 -NCT03087448 -NCT03084913 -NCT03087461 -NCT03084926 -NCT03087500 -NCT03084939 -NCT03087526 -NCT03085004 -NCT03087552 -NCT03085043 -NCT03087565 -NCT03085056 -NCT03087591 -NCT03085069 -NCT03087643 -NCT03085095 -NCT03087708 -NCT03085121 -NCT03087747 -NCT03085147 -NCT03087760 -NCT03085173 -NCT03087851 -NCT03085212 -NCT03087864 -NCT03085225 -NCT03087903 -NCT03085238 -NCT03088007 -NCT03085368 -NCT03088046 -NCT03085407 -NCT03088059 -NCT03085472 -NCT03088098 -NCT03085537 -NCT03088124 -NCT03085719 -NCT03088150 -NCT03085784 -NCT03088176 -NCT03085810 -NCT03088397 -NCT03085849 -NCT03088488 -NCT03085914 -NCT03113487 -NCT03085927 -NCT03113500 -NCT03085966 -NCT03113526 -NCT03085992 -NCT03113617 -NCT03086018 -NCT03113630 -NCT03086044 -NCT03113643 -NCT03086161 -NCT03113682 -NCT03086174 -NCT03113695 -NCT03086226 -NCT03113799 -NCT03086239 -NCT03113825 -NCT03086252 -NCT03113851 -NCT03086278 -NCT03113942 -NCT03086291 -NCT03113955 -NCT03086369 -NCT03113994 -NCT03086395 -NCT03114085 -NCT03086538 -NCT03114150 -NCT03086564 -NCT03114202 -NCT03086616 -NCT03114215 -NCT03086629 -NCT03114254 -NCT03088501 -NCT03091933 -NCT03088527 -NCT03091842 -NCT03088540 -NCT03092011 -NCT03088605 -NCT03092167 -NCT03088709 -NCT03092180 -NCT03088748 -NCT03092323 -NCT03088774 -NCT03092453 -NCT03088813 -NCT03092492 -NCT03088839 -NCT03092518 -NCT03088878 -NCT03092622 -NCT03088917 -NCT03092635 -NCT03088930 -NCT03092648 -NCT03089060 -NCT03092661 -NCT03089125 -NCT03092674 -NCT03089164 -NCT03110887 -NCT03089177 -NCT03110900 -NCT03089190 -NCT03110926 -NCT03089203 -NCT03110939 -NCT03089398 -NCT03110965 -NCT03089411 -NCT03110978 -NCT03089424 -NCT03111056 -NCT03089502 -NCT03111069 -NCT03089528 -NCT03111108 -NCT03089554 -NCT03111199 -NCT03089606 -NCT03111368 -NCT03089619 -NCT03111407 -NCT03089645 -NCT03111446 -NCT03089723 -NCT03111563 -NCT03089736 -NCT03111615 -NCT03089762 -NCT03111680 -NCT03089853 -NCT03111732 -NCT03089892 -NCT03111771 -NCT03089944 -NCT03111823 -NCT03090035 -NCT03111901 -NCT03090165 -NCT03111914 -NCT03090217 -NCT03111992 -NCT03090295 -NCT03112174 -NCT03090412 -NCT03112200 -NCT03090477 -NCT03112538 -NCT03090516 -NCT03112590 -NCT03090659 -NCT03112642 -NCT03090737 -NCT03112668 -NCT03090880 -NCT03112850 -NCT03090971 -NCT03112954 -NCT03091023 -NCT03113006 -NCT03091049 -NCT03113019 -NCT03091140 -NCT03113071 -NCT03091192 -NCT03113110 -NCT03091257 -NCT03113149 -NCT03091283 -NCT03113188 -NCT03091296 -NCT03113214 -NCT03091348 -NCT03113266 -NCT03091491 -NCT03113318 -NCT03091647 -NCT03113357 -NCT03091660 -NCT03113422 -NCT03091816 -NCT03113448 -NCT03092700 -NCT03108443 -NCT03092817 -NCT03108495 -NCT03092856 -NCT03108547 -NCT03092895 -NCT03108560 -NCT03092934 -NCT03108573 -NCT03092986 -NCT03108612 -NCT03092999 -NCT03108703 -NCT03093116 -NCT03108729 -NCT03093129 -NCT03108807 -NCT03093155 -NCT03108846 -NCT03093168 -NCT03108898 -NCT03093194 -NCT03108911 -NCT03093272 -NCT03108937 -NCT03093285 -NCT03108963 -NCT03093324 -NCT03109015 -NCT03093350 -NCT03109041 -NCT03093363 -NCT03109080 -NCT03093428 -NCT03109106 -NCT03093454 -NCT03109158 -NCT03093480 -NCT03109249 -NCT03093623 -NCT03109262 -NCT03093649 -NCT03109301 -NCT03093675 -NCT03109353 -NCT03093688 -NCT03109522 -NCT03093714 -NCT03109639 -NCT03093831 -NCT03109756 -NCT03093844 -NCT03109795 -NCT03093870 -NCT03109808 -NCT03093909 -NCT03109834 -NCT03093922 -NCT03109873 -NCT03093935 -NCT03109886 -NCT03093961 -NCT03109925 -NCT03094026 -NCT03109977 -NCT03094052 -NCT03109990 -NCT03094143 -NCT03110107 -NCT03094156 -NCT03110159 -NCT03094169 -NCT03110263 -NCT03094286 -NCT03110328 -NCT03094299 -NCT03110354 -NCT03094325 -NCT03110445 -NCT03094351 -NCT03110484 -NCT03094364 -NCT03110497 -NCT03094403 -NCT03110510 -NCT03094416 -NCT03110523 -NCT03094611 -NCT03110562 -NCT03094637 -NCT03110588 -NCT03094741 -NCT03110614 -NCT03094780 -NCT03110640 -NCT03094806 -NCT03110679 -NCT03094832 -NCT03110692 -NCT03094884 -NCT03110744 -NCT03094897 -NCT03110783 -NCT03094949 -NCT03108079 -NCT03108131 -NCT03108144 -NCT03108196 -NCT03108222 -NCT03108300 -NCT03108430 -NCT03110822 -NCT03095001 -NCT03106337 -NCT03095040 -NCT03106389 -NCT03095066 -NCT03106415 -NCT03095079 -NCT03106428 -NCT03095118 -NCT03106467 -NCT03095248 -NCT03106584 -NCT03095274 -NCT03106610 -NCT03095352 -NCT03106675 -NCT03095612 -NCT03106701 -NCT03095664 -NCT03106766 -NCT03095703 -NCT03106779 -NCT03095781 -NCT03106857 -NCT03095963 -NCT03106883 -NCT03096041 -NCT03106935 -NCT03096054 -NCT03106987 -NCT03096093 -NCT03107156 -NCT03096184 -NCT03107182 -NCT03096340 -NCT03107208 -NCT03096418 -NCT03107234 -NCT03096431 -NCT03107325 -NCT03096444 -NCT03107416 -NCT03096457 -NCT03107455 -NCT03096548 -NCT03107468 -NCT03096613 -NCT03107533 -NCT03096652 -NCT03107611 -NCT03096665 -NCT03107663 -NCT03096704 -NCT03107780 -NCT03096782 -NCT03107871 -NCT03096808 -NCT03107884 -NCT03096847 -NCT03107897 -NCT03096912 -NCT03107962 -NCT03096938 -NCT03107988 -NCT03096951 -NCT03108066 -NCT03097107 -NCT03103321 -NCT03103347 -NCT03103464 -NCT03103607 -NCT03103659 -NCT03103711 -NCT03103724 -NCT03103737 -NCT03103776 -NCT03103815 -NCT03103854 -NCT03103906 -NCT03103971 -NCT03104153 -NCT03104270 -NCT03104283 -NCT03104309 -NCT03104335 -NCT03104439 -NCT03104465 -NCT03104491 -NCT03104543 -NCT03104660 -NCT03104699 -NCT03104725 -NCT03104842 -NCT03104881 -NCT03104907 -NCT03104920 -NCT03104998 -NCT03105050 -NCT03105076 -NCT03105141 -NCT03105206 -NCT03105297 -NCT03105336 -NCT03105362 -NCT03105570 -NCT03105596 -NCT03105700 -NCT03105843 -NCT03105856 -NCT03105869 -NCT03105921 -NCT03105947 -NCT03106077 -NCT03106090 -NCT03106155 -NCT03106207 -NCT03106298 -NCT03097211 -NCT03100461 -NCT03097224 -NCT03100409 -NCT03097237 -NCT03100513 -NCT03097276 -NCT03100604 -NCT03097328 -NCT03100851 -NCT03097458 -NCT03100877 -NCT03097588 -NCT03100916 -NCT03097627 -NCT03100942 -NCT03097653 -NCT03100981 -NCT03097666 -NCT03101020 -NCT03097718 -NCT03101033 -NCT03097770 -NCT03101046 -NCT03097809 -NCT03101059 -NCT03097848 -NCT03101098 -NCT03097939 -NCT03101176 -NCT03097952 -NCT03101241 -NCT03097965 -NCT03101254 -NCT03097991 -NCT03101280 -NCT03098030 -NCT03101306 -NCT03098056 -NCT03101358 -NCT03098082 -NCT03101397 -NCT03098108 -NCT03101475 -NCT03098147 -NCT03101488 -NCT03098160 -NCT03101514 -NCT03098199 -NCT03101527 -NCT03098277 -NCT03101566 -NCT03098355 -NCT03101579 -NCT03098381 -NCT03101631 -NCT03098550 -NCT03101670 -NCT03098771 -NCT03101683 -NCT03098836 -NCT03101709 -NCT03099070 -NCT03101748 -NCT03099109 -NCT03101800 -NCT03099161 -NCT03101839 -NCT03099174 -NCT03101995 -NCT03099265 -NCT03102047 -NCT03099317 -NCT03102177 -NCT03099330 -NCT03102203 -NCT03099356 -NCT03102229 -NCT03099382 -NCT03102242 -NCT03099421 -NCT03102281 -NCT03099486 -NCT03102320 -NCT03099499 -NCT03102411 -NCT03099564 -NCT03102489 -NCT03099577 -NCT03102554 -NCT03099629 -NCT03102658 -NCT03099902 -NCT03102684 -NCT03099954 -NCT03102801 -NCT03099993 -NCT03102840 -NCT03100006 -NCT03102866 -NCT03100045 -NCT03103087 -NCT03100149 -NCT03103100 -NCT03100175 -NCT03103152 -NCT03100188 -NCT03103256 -NCT03100266 -NCT03103308 -NCT03100292 -NCT03144765 -NCT03139032 -NCT03142061 -NCT03139058 -NCT03142035 -NCT03139071 -NCT03142152 -NCT03139084 -NCT03142178 -NCT03139201 -NCT03142204 -NCT03139305 -NCT03142217 -NCT03139318 -NCT03142282 -NCT03139331 -NCT03142295 -NCT03139370 -NCT03142334 -NCT03139383 -NCT03142451 -NCT03139435 -NCT03142477 -NCT03139487 -NCT03142516 -NCT03139513 -NCT03142542 -NCT03139669 -NCT03142646 -NCT03139747 -NCT03142802 -NCT03139851 -NCT03142867 -NCT03139890 -NCT03142984 -NCT03139916 -NCT03142997 -NCT03139942 -NCT03143036 -NCT03139955 -NCT03143049 -NCT03140007 -NCT03143062 -NCT03140085 -NCT03143088 -NCT03140111 -NCT03143114 -NCT03140228 -NCT03143140 -NCT03140280 -NCT03143153 -NCT03140332 -NCT03143270 -NCT03140358 -NCT03143322 -NCT03140449 -NCT03143413 -NCT03140553 -NCT03143465 -NCT03140670 -NCT03143478 -NCT03140735 -NCT03143491 -NCT03140761 -NCT03143517 -NCT03140787 -NCT03143569 -NCT03140813 -NCT03143608 -NCT03140865 -NCT03143699 -NCT03140943 -NCT03143829 -NCT03140982 -NCT03143868 -NCT03141034 -NCT03143894 -NCT03141060 -NCT03143920 -NCT03141086 -NCT03143946 -NCT03141177 -NCT03143985 -NCT03141203 -NCT03144037 -NCT03141216 -NCT03144063 -NCT03141268 -NCT03144128 -NCT03141320 -NCT03144154 -NCT03141359 -NCT03144167 -NCT03141372 -NCT03144206 -NCT03141437 -NCT03144245 -NCT03141463 -NCT03144362 -NCT03141671 -NCT03144440 -NCT03141684 -NCT03144466 -NCT03141697 -NCT03144583 -NCT03141775 -NCT03144661 -NCT03141814 -NCT03144674 -NCT03141853 -NCT03144687 -NCT03141944 -NCT03150628 -NCT03144778 -NCT03147586 -NCT03144791 -NCT03147495 -NCT03144804 -NCT03147599 -NCT03144817 -NCT03147612 -NCT03144843 -NCT03147768 -NCT03144856 -NCT03147885 -NCT03144947 -NCT03147963 -NCT03145012 -NCT03147976 -NCT03145051 -NCT03148002 -NCT03145064 -NCT03148015 -NCT03145077 -NCT03148041 -NCT03145285 -NCT03148119 -NCT03145467 -NCT03148158 -NCT03145480 -NCT03148262 -NCT03145558 -NCT03148275 -NCT03145727 -NCT03148327 -NCT03145831 -NCT03148418 -NCT03145857 -NCT03148691 -NCT03145870 -NCT03148795 -NCT03145883 -NCT03148886 -NCT03145909 -NCT03149003 -NCT03145922 -NCT03149029 -NCT03145935 -NCT03149042 -NCT03145961 -NCT03149055 -NCT03146000 -NCT03149081 -NCT03146039 -NCT03149120 -NCT03146065 -NCT03149159 -NCT03146091 -NCT03149185 -NCT03146156 -NCT03149250 -NCT03146234 -NCT03149289 -NCT03146260 -NCT03149302 -NCT03146299 -NCT03149380 -NCT03146312 -NCT03149393 -NCT03146338 -NCT03149549 -NCT03146351 -NCT03149575 -NCT03146377 -NCT03149679 -NCT03146533 -NCT03149692 -NCT03146637 -NCT03149822 -NCT03146650 -NCT03149861 -NCT03146663 -NCT03149965 -NCT03146741 -NCT03150004 -NCT03146806 -NCT03150108 -NCT03146871 -NCT03150121 -NCT03146884 -NCT03150134 -NCT03146962 -NCT03150212 -NCT03147027 -NCT03150225 -NCT03147040 -NCT03150316 -NCT03147105 -NCT03150329 -NCT03147118 -NCT03150381 -NCT03147196 -NCT03150433 -NCT03147287 -NCT03150446 -NCT03147326 -NCT03150524 -NCT03147365 -NCT03150576 -NCT03147378 -NCT03150602 -NCT03147404 -NCT03150615 -NCT03147443 -NCT03156036 -NCT03150693 -NCT03153527 -NCT03150706 -NCT03153514 -NCT03150745 -NCT03153553 -NCT03150810 -NCT03153618 -NCT03150836 -NCT03153670 -NCT03150862 -NCT03153813 -NCT03150875 -NCT03153826 -NCT03150914 -NCT03153852 -NCT03150927 -NCT03153982 -NCT03150992 -NCT03154034 -NCT03151044 -NCT03154047 -NCT03151057 -NCT03154099 -NCT03151161 -NCT03154164 -NCT03151200 -NCT03154190 -NCT03151213 -NCT03154255 -NCT03151291 -NCT03154268 -NCT03151304 -NCT03154281 -NCT03151356 -NCT03154294 -NCT03151408 -NCT03154307 -NCT03151447 -NCT03154411 -NCT03151564 -NCT03154437 -NCT03151772 -NCT03154489 -NCT03151811 -NCT03154515 -NCT03151876 -NCT03154593 -NCT03151889 -NCT03154606 -NCT03151967 -NCT03154619 -NCT03152019 -NCT03154671 -NCT03152071 -NCT03154710 -NCT03152136 -NCT03154749 -NCT03152188 -NCT03154762 -NCT03152305 -NCT03154775 -NCT03152318 -NCT03154801 -NCT03152370 -NCT03154814 -NCT03152383 -NCT03154827 -NCT03152435 -NCT03154918 -NCT03152474 -NCT03154983 -NCT03152487 -NCT03154996 -NCT03152526 -NCT03155009 -NCT03152565 -NCT03155061 -NCT03152578 -NCT03155100 -NCT03152656 -NCT03155191 -NCT03152786 -NCT03155217 -NCT03152851 -NCT03155282 -NCT03152877 -NCT03155373 -NCT03152929 -NCT03155425 -NCT03153085 -NCT03155516 -NCT03153163 -NCT03155529 -NCT03153202 -NCT03155581 -NCT03153267 -NCT03155620 -NCT03153280 -NCT03155737 -NCT03153293 -NCT03155750 -NCT03153358 -NCT03155867 -NCT03153371 -NCT03155958 -NCT03153410 -NCT03155984 -NCT03153449 -NCT03155997 -NCT03153501 -NCT03162289 -NCT03156062 -NCT03159104 -NCT03156101 -NCT03159091 -NCT03156114 -NCT03159117 -NCT03156465 -NCT03159143 -NCT03156517 -NCT03159351 -NCT03156673 -NCT03159377 -NCT03156777 -NCT03159585 -NCT03156829 -NCT03159598 -NCT03156842 -NCT03159702 -NCT03156946 -NCT03159754 -NCT03156959 -NCT03159767 -NCT03156998 -NCT03159819 -NCT03157011 -NCT03159897 -NCT03157050 -NCT03160079 -NCT03157089 -NCT03160313 -NCT03157128 -NCT03160365 -NCT03157167 -NCT03160443 -NCT03157271 -NCT03160469 -NCT03157310 -NCT03160599 -NCT03157323 -NCT03160612 -NCT03157518 -NCT03160638 -NCT03157544 -NCT03160716 -NCT03157596 -NCT03160807 -NCT03157726 -NCT03160833 -NCT03157739 -NCT03160898 -NCT03157752 -NCT03160924 -NCT03157804 -NCT03161041 -NCT03157882 -NCT03161054 -NCT03157947 -NCT03161080 -NCT03157986 -NCT03161106 -NCT03158064 -NCT03161132 -NCT03158090 -NCT03161223 -NCT03158103 -NCT03161314 -NCT03158116 -NCT03161327 -NCT03158129 -NCT03161353 -NCT03158207 -NCT03161379 -NCT03158220 -NCT03161431 -NCT03158246 -NCT03161470 -NCT03158259 -NCT03161522 -NCT03158324 -NCT03161535 -NCT03158389 -NCT03161548 -NCT03158441 -NCT03161574 -NCT03158467 -NCT03161587 -NCT03158493 -NCT03161600 -NCT03158519 -NCT03161756 -NCT03158571 -NCT03161782 -NCT03158610 -NCT03161834 -NCT03158688 -NCT03161964 -NCT03158727 -NCT03162068 -NCT03158779 -NCT03162094 -NCT03158805 -NCT03162133 -NCT03158818 -NCT03162172 -NCT03158831 -NCT03162224 -NCT03158857 -NCT03162263 -NCT03158883 -NCT03162276 -NCT03158935 -NCT03167853 -NCT03162328 -NCT03165383 -NCT03162341 -NCT03165370 -NCT03162458 -NCT03165591 -NCT03162510 -NCT03165604 -NCT03162536 -NCT03165721 -NCT03162562 -NCT03165812 -NCT03162627 -NCT03165851 -NCT03162718 -NCT03165955 -NCT03162731 -NCT03165994 -NCT03163095 -NCT03166046 -NCT03163134 -NCT03166072 -NCT03163290 -NCT03166085 -NCT03163329 -NCT03166176 -NCT03163342 -NCT03166202 -NCT03163355 -NCT03166215 -NCT03163368 -NCT03166254 -NCT03163381 -NCT03166280 -NCT03163394 -NCT03166345 -NCT03163433 -NCT03166397 -NCT03163667 -NCT03166410 -NCT03163719 -NCT03166436 -NCT03163732 -NCT03166449 -NCT03163758 -NCT03166553 -NCT03163797 -NCT03166631 -NCT03163849 -NCT03166670 -NCT03163875 -NCT03166683 -NCT03163888 -NCT03166735 -NCT03163901 -NCT03166878 -NCT03163979 -NCT03166891 -NCT03163992 -NCT03166904 -NCT03164044 -NCT03167008 -NCT03164057 -NCT03167047 -NCT03164070 -NCT03167112 -NCT03164083 -NCT03167125 -NCT03164122 -NCT03167151 -NCT03164148 -NCT03167164 -NCT03164291 -NCT03167177 -NCT03164382 -NCT03167255 -NCT03164460 -NCT03167268 -NCT03164486 -NCT03167320 -NCT03164590 -NCT03167359 -NCT03164603 -NCT03167372 -NCT03164616 -NCT03167385 -NCT03164655 -NCT03167463 -NCT03164694 -NCT03167476 -NCT03164720 -NCT03167567 -NCT03164772 -NCT03167593 -NCT03164837 -NCT03167619 -NCT03164928 -NCT03167632 -NCT03164980 -NCT03167671 -NCT03164993 -NCT03167710 -NCT03165149 -NCT03167749 -NCT03165214 -NCT03167762 -NCT03165253 -NCT03167775 -NCT03165266 -NCT03167814 -NCT03165292 -NCT03173222 -NCT03167918 -NCT03170570 -NCT03167970 -NCT03170557 -NCT03167983 -NCT03170622 -NCT03168035 -NCT03170648 -NCT03168048 -NCT03170687 -NCT03168061 -NCT03170752 -NCT03168074 -NCT03170765 -NCT03168100 -NCT03170804 -NCT03168139 -NCT03170869 -NCT03168152 -NCT03170882 -NCT03168178 -NCT03170895 -NCT03168321 -NCT03170960 -NCT03168334 -NCT03171012 -NCT03168386 -NCT03171025 -NCT03168438 -NCT03171064 -NCT03168464 -NCT03171090 -NCT03168529 -NCT03171168 -NCT03168594 -NCT03171220 -NCT03168607 -NCT03171272 -NCT03168620 -NCT03171285 -NCT03168646 -NCT03171298 -NCT03168737 -NCT03171324 -NCT03168763 -NCT03171389 -NCT03168815 -NCT03171467 -NCT03168854 -NCT03171493 -NCT03168880 -NCT03171506 -NCT03168906 -NCT03171558 -NCT03168919 -NCT03171610 -NCT03168997 -NCT03171857 -NCT03169023 -NCT03171870 -NCT03169075 -NCT03171987 -NCT03169114 -NCT03172052 -NCT03169257 -NCT03172117 -NCT03169309 -NCT03172130 -NCT03169322 -NCT03172195 -NCT03169335 -NCT03172208 -NCT03169361 -NCT03172299 -NCT03169621 -NCT03172312 -NCT03169634 -NCT03172390 -NCT03169699 -NCT03172403 -NCT03169738 -NCT03172416 -NCT03169751 -NCT03172507 -NCT03169764 -NCT03172559 -NCT03169777 -NCT03172585 -NCT03169790 -NCT03172624 -NCT03169829 -NCT03172663 -NCT03169855 -NCT03172754 -NCT03169907 -NCT03172767 -NCT03169933 -NCT03172819 -NCT03170076 -NCT03172832 -NCT03170115 -NCT03172936 -NCT03170141 -NCT03172988 -NCT03170180 -NCT03173092 -NCT03170206 -NCT03173118 -NCT03170310 -NCT03173144 -NCT03170388 -NCT03178656 -NCT03173235 -NCT03175978 -NCT03173248 -NCT03175939 -NCT03173378 -NCT03176082 -NCT03173417 -NCT03176121 -NCT03173430 -NCT03176173 -NCT03173560 -NCT03176199 -NCT03173612 -NCT03176238 -NCT03173638 -NCT03176264 -NCT03173690 -NCT03176277 -NCT03173742 -NCT03176485 -NCT03173807 -NCT03176576 -NCT03173833 -NCT03176589 -NCT03173859 -NCT03176602 -NCT03173924 -NCT03176680 -NCT03173950 -NCT03176693 -NCT03173976 -NCT03176732 -NCT03173989 -NCT03176836 -NCT03174028 -NCT03176849 -NCT03174080 -NCT03176888 -NCT03174145 -NCT03176927 -NCT03174171 -NCT03176979 -NCT03174197 -NCT03176992 -NCT03174275 -NCT03177057 -NCT03174405 -NCT03177122 -NCT03174444 -NCT03177187 -NCT03174509 -NCT03177213 -NCT03174626 -NCT03177239 -NCT03174743 -NCT03177252 -NCT03174782 -NCT03177278 -NCT03174795 -NCT03177291 -NCT03174834 -NCT03177317 -NCT03174873 -NCT03177382 -NCT03174912 -NCT03177434 -NCT03174925 -NCT03177447 -NCT03174938 -NCT03177460 -NCT03175016 -NCT03177642 -NCT03175055 -NCT03177668 -NCT03175107 -NCT03177681 -NCT03175146 -NCT03177707 -NCT03175172 -NCT03177902 -NCT03175211 -NCT03177928 -NCT03175224 -NCT03177941 -NCT03175289 -NCT03177967 -NCT03175341 -NCT03178032 -NCT03175367 -NCT03178071 -NCT03175393 -NCT03178110 -NCT03175432 -NCT03178123 -NCT03175497 -NCT03178136 -NCT03175562 -NCT03178162 -NCT03175666 -NCT03178201 -NCT03175679 -NCT03178214 -NCT03175705 -NCT03178240 -NCT03175718 -NCT03178383 -NCT03175731 -NCT03178552 -NCT03175848 -NCT03178617 -NCT03175874 -NCT03183531 -NCT03178682 -NCT03181035 -NCT03178760 -NCT03180918 -NCT03178799 -NCT03181100 -NCT03178812 -NCT03181126 -NCT03178851 -NCT03181204 -NCT03178929 -NCT03181230 -NCT03179007 -NCT03181243 -NCT03179072 -NCT03181282 -NCT03179111 -NCT03181308 -NCT03179124 -NCT03181334 -NCT03179150 -NCT03181464 -NCT03179176 -NCT03181477 -NCT03179228 -NCT03181503 -NCT03179267 -NCT03181581 -NCT03179280 -NCT03181815 -NCT03179306 -NCT03181854 -NCT03179332 -NCT03181867 -NCT03179358 -NCT03181893 -NCT03179410 -NCT03181932 -NCT03179436 -NCT03182036 -NCT03179449 -NCT03182049 -NCT03179540 -NCT03182127 -NCT03179579 -NCT03182179 -NCT03179735 -NCT03182244 -NCT03179891 -NCT03182257 -NCT03179904 -NCT03182270 -NCT03179917 -NCT03182296 -NCT03179930 -NCT03182309 -NCT03179943 -NCT03182439 -NCT03179956 -NCT03182452 -NCT03180034 -NCT03182634 -NCT03180086 -NCT03182673 -NCT03180138 -NCT03182686 -NCT03180164 -NCT03182699 -NCT03180177 -NCT03182803 -NCT03180190 -NCT03182816 -NCT03180203 -NCT03182894 -NCT03180268 -NCT03182907 -NCT03180294 -NCT03182920 -NCT03180307 -NCT03182933 -NCT03180398 -NCT03182959 -NCT03180424 -NCT03182998 -NCT03180437 -NCT03183050 -NCT03180463 -NCT03183063 -NCT03180476 -NCT03183089 -NCT03180502 -NCT03183115 -NCT03180515 -NCT03183141 -NCT03180528 -NCT03183167 -NCT03180554 -NCT03183206 -NCT03180671 -NCT03183219 -NCT03180684 -NCT03183232 -NCT03180736 -NCT03183271 -NCT03180788 -NCT03183414 -NCT03180801 -NCT03183479 -NCT03180827 -NCT03183518 -NCT03180892 -NCT03188692 -NCT03183544 -NCT03186313 -NCT03183687 -NCT03186248 -NCT03183700 -NCT03186326 -NCT03183752 -NCT03186404 -NCT03183778 -NCT03186586 -NCT03183986 -NCT03186599 -NCT03184038 -NCT03186638 -NCT03184090 -NCT03186664 -NCT03184194 -NCT03186703 -NCT03184233 -NCT03186729 -NCT03184259 -NCT03186742 -NCT03184324 -NCT03186898 -NCT03184337 -NCT03186937 -NCT03184350 -NCT03186976 -NCT03184389 -NCT03187028 -NCT03184415 -NCT03187080 -NCT03184493 -NCT03187119 -NCT03184558 -NCT03187132 -NCT03184571 -NCT03187184 -NCT03184688 -NCT03187210 -NCT03184714 -NCT03187223 -NCT03184727 -NCT03187236 -NCT03184740 -NCT03187275 -NCT03184753 -NCT03187288 -NCT03184818 -NCT03187314 -NCT03184870 -NCT03187340 -NCT03184935 -NCT03187561 -NCT03184948 -NCT03187587 -NCT03185013 -NCT03187600 -NCT03185039 -NCT03187626 -NCT03185130 -NCT03187652 -NCT03185169 -NCT03187691 -NCT03185182 -NCT03187743 -NCT03185208 -NCT03187795 -NCT03185325 -NCT03187847 -NCT03185364 -NCT03187925 -NCT03185390 -NCT03187951 -NCT03185403 -NCT03187977 -NCT03185416 -NCT03187990 -NCT03185429 -NCT03188107 -NCT03185468 -NCT03188159 -NCT03185494 -NCT03188172 -NCT03185533 -NCT03188198 -NCT03185637 -NCT03188276 -NCT03185702 -NCT03188328 -NCT03185754 -NCT03188354 -NCT03185806 -NCT03188380 -NCT03185871 -NCT03188393 -NCT03185884 -NCT03188406 -NCT03185897 -NCT03188432 -NCT03185988 -NCT03188497 -NCT03186014 -NCT03188562 -NCT03186079 -NCT03188588 -NCT03186105 -NCT03188627 -NCT03186118 -NCT03188666 -NCT03186222 -NCT03194802 -NCT03188757 -NCT03191734 -NCT03188900 -NCT03191682 -NCT03188965 -NCT03191773 -NCT03188991 -NCT03191786 -NCT03189004 -NCT03191799 -NCT03189030 -NCT03191864 -NCT03189108 -NCT03191903 -NCT03189160 -NCT03191942 -NCT03189186 -NCT03191955 -NCT03189316 -NCT03191968 -NCT03189381 -NCT03191981 -NCT03189446 -NCT03192059 -NCT03189459 -NCT03192072 -NCT03189524 -NCT03192098 -NCT03189576 -NCT03192202 -NCT03189628 -NCT03192293 -NCT03189706 -NCT03192345 -NCT03189719 -NCT03192358 -NCT03189836 -NCT03192397 -NCT03189914 -NCT03192462 -NCT03189953 -NCT03192527 -NCT03189992 -NCT03192540 -NCT03190083 -NCT03192618 -NCT03190122 -NCT03192644 -NCT03190148 -NCT03192683 -NCT03190174 -NCT03192709 -NCT03190213 -NCT03192722 -NCT03190239 -NCT03192735 -NCT03190265 -NCT03192813 -NCT03190278 -NCT03192891 -NCT03190330 -NCT03192943 -NCT03190421 -NCT03192969 -NCT03190525 -NCT03193047 -NCT03190551 -NCT03193073 -NCT03190577 -NCT03193190 -NCT03190616 -NCT03193281 -NCT03190642 -NCT03193424 -NCT03190720 -NCT03193437 -NCT03190733 -NCT03193463 -NCT03190759 -NCT03193541 -NCT03190811 -NCT03193567 -NCT03190824 -NCT03193658 -NCT03190915 -NCT03193788 -NCT03190941 -NCT03193814 -NCT03190967 -NCT03193853 -NCT03190980 -NCT03193892 -NCT03191006 -NCT03193918 -NCT03191097 -NCT03193931 -NCT03191123 -NCT03193944 -NCT03191149 -NCT03193996 -NCT03191201 -NCT03194373 -NCT03191448 -NCT03194399 -NCT03191487 -NCT03194568 -NCT03191552 -NCT03194737 -NCT03191578 -NCT03194750 -NCT03191604 -NCT03199898 -NCT03194867 -NCT03197714 -NCT03194893 -NCT03197636 -NCT03194906 -NCT03197766 -NCT03194932 -NCT03197805 -NCT03194997 -NCT03197831 -NCT03195010 -NCT03197883 -NCT03195075 -NCT03197909 -NCT03195101 -NCT03197922 -NCT03195166 -NCT03197935 -NCT03195179 -NCT03198026 -NCT03195192 -NCT03198052 -NCT03195218 -NCT03198065 -NCT03195322 -NCT03198104 -NCT03195413 -NCT03198117 -NCT03195478 -NCT03198130 -NCT03195491 -NCT03198156 -NCT03195517 -NCT03198234 -NCT03195569 -NCT03198260 -NCT03195673 -NCT03198286 -NCT03195699 -NCT03198312 -NCT03195725 -NCT03198338 -NCT03195751 -NCT03198351 -NCT03195764 -NCT03198390 -NCT03195855 -NCT03198403 -NCT03195907 -NCT03198442 -NCT03195959 -NCT03198468 -NCT03196011 -NCT03198546 -NCT03196037 -NCT03198598 -NCT03196050 -NCT03198611 -NCT03196115 -NCT03198650 -NCT03196180 -NCT03198676 -NCT03196232 -NCT03198728 -NCT03196388 -NCT03198754 -NCT03196414 -NCT03198793 -NCT03196453 -NCT03198897 -NCT03196492 -NCT03198923 -NCT03196518 -NCT03198962 -NCT03196635 -NCT03199027 -NCT03196661 -NCT03199040 -NCT03196778 -NCT03199053 -NCT03196791 -NCT03199144 -NCT03196830 -NCT03199196 -NCT03196843 -NCT03199274 -NCT03196869 -NCT03199352 -NCT03196947 -NCT03199495 -NCT03196986 -NCT03199560 -NCT03197012 -NCT03199586 -NCT03197025 -NCT03199651 -NCT03197194 -NCT03199677 -NCT03197259 -NCT03199716 -NCT03197272 -NCT03199768 -NCT03197389 -NCT03199807 -NCT03197467 -NCT03199833 -NCT03197506 -NCT03199872 -NCT03197571 -NCT03199885 -NCT03197584 -NCT03280667 -NCT03199911 -NCT03202992 -NCT03200002 -NCT03202966 -NCT03200015 -NCT03203005 -NCT03200067 -NCT03203070 -NCT03200093 -NCT03203304 -NCT03200171 -NCT03203343 -NCT03200236 -NCT03203356 -NCT03200249 -NCT03203369 -NCT03200262 -NCT03203382 -NCT03200366 -NCT03203421 -NCT03200496 -NCT03203460 -NCT03200587 -NCT03203473 -NCT03200600 -NCT03203525 -NCT03200639 -NCT03203564 -NCT03200691 -NCT03203616 -NCT03200704 -NCT03203655 -NCT03200717 -NCT03203681 -NCT03200769 -NCT03203694 -NCT03200821 -NCT03203759 -NCT03200834 -NCT03203850 -NCT03200847 -NCT03203863 -NCT03200912 -NCT03203876 -NCT03200977 -NCT03204019 -NCT03200990 -NCT03204032 -NCT03201042 -NCT03204123 -NCT03201146 -NCT03204188 -NCT03201159 -NCT03210168 -NCT03201250 -NCT03210207 -NCT03201302 -NCT03210220 -NCT03201367 -NCT03245151 -NCT03201458 -NCT03245177 -NCT03201471 -NCT03245190 -NCT03201588 -NCT03245203 -NCT03201614 -NCT03245294 -NCT03201666 -NCT03245346 -NCT03201679 -NCT03245385 -NCT03201835 -NCT03252028 -NCT03201861 -NCT03252067 -NCT03201913 -NCT03252106 -NCT03201965 -NCT03252171 -NCT03202173 -NCT03252353 -NCT03202199 -NCT03252392 -NCT03202212 -NCT03252431 -NCT03202251 -NCT03252509 -NCT03202316 -NCT03252548 -NCT03202381 -NCT03252561 -NCT03202407 -NCT03280290 -NCT03202446 -NCT03280355 -NCT03202472 -NCT03280368 -NCT03202537 -NCT03280381 -NCT03202628 -NCT03280407 -NCT03202758 -NCT03280420 -NCT03202771 -NCT03280433 -NCT03202862 -NCT03280446 -NCT03202875 -NCT03280511 -NCT03202940 -NCT03280563 -NCT03204201 -NCT03207139 -NCT03204266 -NCT03207126 -NCT03204292 -NCT03207191 -NCT03204409 -NCT03207230 -NCT03204500 -NCT03207256 -NCT03204539 -NCT03207334 -NCT03204708 -NCT03207347 -NCT03204734 -NCT03207360 -NCT03204747 -NCT03207529 -NCT03204760 -NCT03207542 -NCT03204799 -NCT03207555 -NCT03204812 -NCT03207672 -NCT03204838 -NCT03207724 -NCT03204942 -NCT03207763 -NCT03204994 -NCT03207828 -NCT03205046 -NCT03207867 -NCT03205163 -NCT03207997 -NCT03205176 -NCT03208283 -NCT03205202 -NCT03208296 -NCT03205228 -NCT03208309 -NCT03205267 -NCT03208335 -NCT03205306 -NCT03208361 -NCT03205501 -NCT03208556 -NCT03205579 -NCT03208582 -NCT03205761 -NCT03208712 -NCT03205891 -NCT03208816 -NCT03205969 -NCT03208842 -NCT03205995 -NCT03208894 -NCT03206021 -NCT03208933 -NCT03206047 -NCT03208959 -NCT03206060 -NCT03209050 -NCT03206073 -NCT03209063 -NCT03206086 -NCT03209076 -NCT03206125 -NCT03209089 -NCT03206151 -NCT03209141 -NCT03206177 -NCT03209206 -NCT03206203 -NCT03209258 -NCT03206216 -NCT03209336 -NCT03206281 -NCT03209349 -NCT03206346 -NCT03209375 -NCT03206359 -NCT03209401 -NCT03206489 -NCT03209440 -NCT03206554 -NCT03209453 -NCT03206567 -NCT03209466 -NCT03206645 -NCT03209583 -NCT03206658 -NCT03209700 -NCT03206671 -NCT03209752 -NCT03206684 -NCT03209765 -NCT03206827 -NCT03209869 -NCT03206905 -NCT03209895 -NCT03206918 -NCT03209973 -NCT03206970 -NCT03210038 -NCT03207061 -NCT03210064 -NCT03207074 -NCT03210103 -NCT03207100 -NCT03210129 -NCT03207113 -NCT03245073 -NCT03210311 -NCT03213132 -NCT03210324 -NCT03213054 -NCT03210376 -NCT03213262 -NCT03210389 -NCT03242603 -NCT03210545 -NCT03242616 -NCT03210558 -NCT03242629 -NCT03210662 -NCT03242642 -NCT03210714 -NCT03242824 -NCT03210727 -NCT03242889 -NCT03210740 -NCT03242902 -NCT03210948 -NCT03242915 -NCT03210987 -NCT03242993 -NCT03211026 -NCT03243097 -NCT03211052 -NCT03243188 -NCT03211078 -NCT03243240 -NCT03211091 -NCT03243305 -NCT03211104 -NCT03243331 -NCT03211117 -NCT03243461 -NCT03211169 -NCT03243565 -NCT03211351 -NCT03243643 -NCT03211403 -NCT03243695 -NCT03211416 -NCT03243721 -NCT03211507 -NCT03243734 -NCT03211572 -NCT03243773 -NCT03211585 -NCT03243786 -NCT03211598 -NCT03243825 -NCT03211624 -NCT03243838 -NCT03211780 -NCT03243851 -NCT03211806 -NCT03243916 -NCT03211858 -NCT03243929 -NCT03211897 -NCT03243955 -NCT03211988 -NCT03244020 -NCT03212014 -NCT03244137 -NCT03212079 -NCT03244176 -NCT03212157 -NCT03244202 -NCT03212170 -NCT03244280 -NCT03212235 -NCT03244306 -NCT03212248 -NCT03244345 -NCT03212261 -NCT03244358 -NCT03212274 -NCT03244384 -NCT03212404 -NCT03244553 -NCT03212456 -NCT03244605 -NCT03212469 -NCT03244670 -NCT03212521 -NCT03244683 -NCT03212547 -NCT03244696 -NCT03212560 -NCT03244709 -NCT03212573 -NCT03244735 -NCT03212625 -NCT03244774 -NCT03212651 -NCT03244787 -NCT03212742 -NCT03244826 -NCT03212807 -NCT03244930 -NCT03212872 -NCT03244943 -NCT03212937 -NCT03244956 -NCT03212950 -NCT03244969 -NCT03213002 -NCT03244995 -NCT03213041 -NCT03245021 -NCT03213301 -NCT03222323 -NCT03213314 -NCT03222414 -NCT03213444 -NCT03222440 -NCT03213535 -NCT03222557 -NCT03213587 -NCT03222635 -NCT03213626 -NCT03222648 -NCT03213652 -NCT03222674 -NCT03213665 -NCT03222713 -NCT03213678 -NCT03222739 -NCT03213691 -NCT03222817 -NCT03213704 -NCT03222830 -NCT03213717 -NCT03222856 -NCT03213769 -NCT03222882 -NCT03213834 -NCT03222895 -NCT03213925 -NCT03222947 -NCT03213964 -NCT03223025 -NCT03213977 -NCT03223064 -NCT03214003 -NCT03223103 -NCT03214185 -NCT03223116 -NCT03214250 -NCT03223142 -NCT03214263 -NCT03223155 -NCT03214393 -NCT03223181 -NCT03214419 -NCT03223376 -NCT03214562 -NCT03223441 -NCT03214666 -NCT03223454 -NCT03214692 -NCT03223467 -NCT03214718 -NCT03223519 -NCT03214809 -NCT03223558 -NCT03214835 -NCT03223610 -NCT03214926 -NCT03223649 -NCT03214939 -NCT03223662 -NCT03215030 -NCT03223675 -NCT03215056 -NCT03223688 -NCT03215095 -NCT03223740 -NCT03215147 -NCT03223753 -NCT03215186 -NCT03223779 -NCT03215199 -NCT03223805 -NCT03215264 -NCT03223818 -NCT03215290 -NCT03223870 -NCT03215355 -NCT03223922 -NCT03215407 -NCT03223935 -NCT03215511 -NCT03223961 -NCT03215524 -NCT03242421 -NCT03215537 -NCT03242460 -NCT03215693 -NCT03242499 -NCT03215706 -NCT03242525 -NCT03215719 -NCT03242538 -NCT03215810 -NCT03221335 -NCT03221348 -NCT03221387 -NCT03221400 -NCT03221426 -NCT03221608 -NCT03221634 -NCT03221790 -NCT03221803 -NCT03221881 -NCT03221907 -NCT03221920 -NCT03221933 -NCT03222011 -NCT03222076 -NCT03222089 -NCT03222193 -NCT03222297 -NCT03242551 -NCT03215901 -NCT03218683 -NCT03215914 -NCT03218618 -NCT03215992 -NCT03218696 -NCT03216031 -NCT03218709 -NCT03216057 -NCT03218787 -NCT03216070 -NCT03218826 -NCT03216109 -NCT03218839 -NCT03216148 -NCT03218917 -NCT03216174 -NCT03218982 -NCT03216239 -NCT03218995 -NCT03216330 -NCT03219021 -NCT03216343 -NCT03219047 -NCT03216369 -NCT03219242 -NCT03216395 -NCT03219268 -NCT03216421 -NCT03219333 -NCT03216499 -NCT03219359 -NCT03216525 -NCT03219372 -NCT03216772 -NCT03219385 -NCT03216863 -NCT03219450 -NCT03216889 -NCT03219476 -NCT03216941 -NCT03219502 -NCT03217032 -NCT03219515 -NCT03217071 -NCT03219554 -NCT03217097 -NCT03219593 -NCT03217188 -NCT03219671 -NCT03217201 -NCT03219684 -NCT03217227 -NCT03219736 -NCT03217253 -NCT03219762 -NCT03217266 -NCT03219775 -NCT03217409 -NCT03219918 -NCT03217513 -NCT03219970 -NCT03217539 -NCT03220009 -NCT03217617 -NCT03220022 -NCT03217643 -NCT03220035 -NCT03217656 -NCT03220100 -NCT03217669 -NCT03220113 -NCT03217747 -NCT03220178 -NCT03217773 -NCT03220217 -NCT03217799 -NCT03220256 -NCT03217812 -NCT03220282 -NCT03217838 -NCT03220321 -NCT03217851 -NCT03220347 -NCT03217890 -NCT03220451 -NCT03217903 -NCT03220477 -NCT03217968 -NCT03220646 -NCT03218007 -NCT03220854 -NCT03218059 -NCT03220893 -NCT03218072 -NCT03220932 -NCT03218163 -NCT03220945 -NCT03218254 -NCT03220958 -NCT03218319 -NCT03220984 -NCT03218345 -NCT03221062 -NCT03218384 -NCT03221088 -NCT03218410 -NCT03221205 -NCT03218436 -NCT03221322 -NCT03218475 -NCT03242382 -NCT03224000 -NCT03239951 -NCT03224039 -NCT03240016 -NCT03224104 -NCT03240029 -NCT03224143 -NCT03240146 -NCT03224182 -NCT03240211 -NCT03224208 -NCT03240224 -NCT03224221 -NCT03240341 -NCT03224416 -NCT03240393 -NCT03224507 -NCT03240549 -NCT03224598 -NCT03240562 -NCT03224767 -NCT03240640 -NCT03224806 -NCT03240679 -NCT03224819 -NCT03240731 -NCT03224832 -NCT03240861 -NCT03224871 -NCT03240900 -NCT03224949 -NCT03240926 -NCT03224988 -NCT03241017 -NCT03225040 -NCT03241186 -NCT03225053 -NCT03241199 -NCT03225105 -NCT03241420 -NCT03225131 -NCT03241537 -NCT03225157 -NCT03241680 -NCT03225170 -NCT03241745 -NCT03225235 -NCT03241810 -NCT03225300 -NCT03241823 -NCT03225365 -NCT03241914 -NCT03225417 -NCT03241927 -NCT03225547 -NCT03241940 -NCT03225560 -NCT03242187 -NCT03225625 -NCT03242200 -NCT03225664 -NCT03242226 -NCT03225716 -NCT03242265 -NCT03225781 -NCT03242369 -NCT03225885 -NCT03232268 -NCT03232307 -NCT03232424 -NCT03232515 -NCT03232541 -NCT03232567 -NCT03232619 -NCT03232684 -NCT03232710 -NCT03232775 -NCT03238261 -NCT03238274 -NCT03238339 -NCT03238365 -NCT03238378 -NCT03238391 -NCT03238404 -NCT03238443 -NCT03238495 -NCT03238534 -NCT03238599 -NCT03238638 -NCT03238651 -NCT03238664 -NCT03238703 -NCT03238742 -NCT03238807 -NCT03238820 -NCT03238976 -NCT03238989 -NCT03239015 -NCT03239041 -NCT03239145 -NCT03239158 -NCT03239171 -NCT03239184 -NCT03239223 -NCT03239262 -NCT03239340 -NCT03239392 -NCT03239535 -NCT03239613 -NCT03239626 -NCT03239652 -NCT03239730 -NCT03239756 -NCT03239769 -NCT03239782 -NCT03239886 -NCT03239925 -NCT03225911 -NCT03228758 -NCT03225924 -NCT03228719 -NCT03225937 -NCT03228862 -NCT03225989 -NCT03228992 -NCT03226054 -NCT03229057 -NCT03226119 -NCT03229083 -NCT03226145 -NCT03229096 -NCT03226171 -NCT03229174 -NCT03226236 -NCT03229200 -NCT03226249 -NCT03229278 -NCT03226301 -NCT03229382 -NCT03226405 -NCT03229395 -NCT03226418 -NCT03229408 -NCT03226444 -NCT03229421 -NCT03226470 -NCT03229460 -NCT03226483 -NCT03229512 -NCT03226522 -NCT03229603 -NCT03226535 -NCT03229616 -NCT03226574 -NCT03229668 -NCT03226613 -NCT03229772 -NCT03226691 -NCT03229798 -NCT03226717 -NCT03229824 -NCT03226756 -NCT03229850 -NCT03226782 -NCT03229876 -NCT03226860 -NCT03229993 -NCT03226925 -NCT03230201 -NCT03226964 -NCT03230318 -NCT03227016 -NCT03230331 -NCT03227120 -NCT03230396 -NCT03227211 -NCT03230474 -NCT03227263 -NCT03230500 -NCT03227328 -NCT03230513 -NCT03227432 -NCT03230539 -NCT03227497 -NCT03230734 -NCT03227744 -NCT03230825 -NCT03227848 -NCT03230994 -NCT03227926 -NCT03231072 -NCT03227939 -NCT03231111 -NCT03228043 -NCT03231137 -NCT03228056 -NCT03231163 -NCT03228108 -NCT03231176 -NCT03228147 -NCT03231306 -NCT03228186 -NCT03231423 -NCT03228225 -NCT03231501 -NCT03228277 -NCT03231644 -NCT03228303 -NCT03231657 -NCT03228316 -NCT03231683 -NCT03228368 -NCT03231722 -NCT03228407 -NCT03231865 -NCT03228459 -NCT03231878 -NCT03228485 -NCT03231917 -NCT03228511 -NCT03232125 -NCT03228537 -NCT03232138 -NCT03228641 -NCT03232164 -NCT03228667 -NCT03232177 -NCT03228680 -NCT03238248 -NCT03232801 -NCT03235869 -NCT03232814 -NCT03235713 -NCT03232892 -NCT03235908 -NCT03233009 -NCT03235947 -NCT03233035 -NCT03235973 -NCT03233048 -NCT03236051 -NCT03233126 -NCT03236103 -NCT03233152 -NCT03236155 -NCT03233204 -NCT03236181 -NCT03233295 -NCT03236311 -NCT03233321 -NCT03236428 -NCT03233334 -NCT03236467 -NCT03233347 -NCT03236571 -NCT03233386 -NCT03236636 -NCT03233399 -NCT03236649 -NCT03233412 -NCT03236662 -NCT03233555 -NCT03236792 -NCT03233672 -NCT03236831 -NCT03233711 -NCT03236857 -NCT03233724 -NCT03236883 -NCT03233776 -NCT03236909 -NCT03233828 -NCT03236935 -NCT03233854 -NCT03236961 -NCT03234049 -NCT03236974 -NCT03234114 -NCT03236987 -NCT03234140 -NCT03237013 -NCT03234153 -NCT03237156 -NCT03234218 -NCT03237182 -NCT03234296 -NCT03237208 -NCT03234309 -NCT03237221 -NCT03234361 -NCT03237299 -NCT03234556 -NCT03237312 -NCT03234569 -NCT03237325 -NCT03234595 -NCT03237377 -NCT03234621 -NCT03237390 -NCT03234634 -NCT03237416 -NCT03234712 -NCT03237533 -NCT03234764 -NCT03237572 -NCT03234777 -NCT03237611 -NCT03234842 -NCT03237637 -NCT03234855 -NCT03237663 -NCT03234933 -NCT03237702 -NCT03234946 -NCT03237715 -NCT03234972 -NCT03237780 -NCT03235076 -NCT03237962 -NCT03235141 -NCT03238014 -NCT03235167 -NCT03238027 -NCT03235245 -NCT03238053 -NCT03235271 -NCT03238066 -NCT03235349 -NCT03238092 -NCT03235466 -NCT03238105 -NCT03235544 -NCT03238144 -NCT03235570 -NCT03238170 -NCT03235596 -NCT03238196 -NCT03235648 -NCT03238235 -NCT03235687 -NCT03251924 -NCT03245411 -NCT03248427 -NCT03245450 -NCT03248375 -NCT03245463 -NCT03248492 -NCT03245476 -NCT03248544 -NCT03245489 -NCT03248570 -NCT03245541 -NCT03248661 -NCT03245554 -NCT03248713 -NCT03245645 -NCT03248765 -NCT03245658 -NCT03248843 -NCT03245736 -NCT03248973 -NCT03245788 -NCT03249090 -NCT03245827 -NCT03249142 -NCT03245892 -NCT03249389 -NCT03245905 -NCT03249480 -NCT03245944 -NCT03249519 -NCT03245957 -NCT03249584 -NCT03245983 -NCT03249727 -NCT03246009 -NCT03249766 -NCT03246074 -NCT03249792 -NCT03246113 -NCT03249844 -NCT03246230 -NCT03249870 -NCT03246321 -NCT03250065 -NCT03246347 -NCT03250091 -NCT03246412 -NCT03250130 -NCT03246438 -NCT03250260 -NCT03246464 -NCT03250273 -NCT03246516 -NCT03250299 -NCT03246529 -NCT03250325 -NCT03246542 -NCT03250338 -NCT03246659 -NCT03250351 -NCT03246685 -NCT03250390 -NCT03246711 -NCT03250520 -NCT03246750 -NCT03250676 -NCT03246802 -NCT03250689 -NCT03246841 -NCT03250702 -NCT03246854 -NCT03250832 -NCT03246906 -NCT03250884 -NCT03246945 -NCT03250910 -NCT03246958 -NCT03250962 -NCT03247088 -NCT03251027 -NCT03247127 -NCT03251066 -NCT03247231 -NCT03251183 -NCT03247283 -NCT03251313 -NCT03247309 -NCT03251365 -NCT03247413 -NCT03251378 -NCT03247478 -NCT03251417 -NCT03247634 -NCT03251443 -NCT03247686 -NCT03251469 -NCT03247712 -NCT03251495 -NCT03247738 -NCT03251547 -NCT03247764 -NCT03251560 -NCT03247829 -NCT03251586 -NCT03247933 -NCT03251612 -NCT03247946 -NCT03251638 -NCT03247998 -NCT03251677 -NCT03248219 -NCT03280277 -NCT03252600 -NCT03255369 -NCT03252678 -NCT03255252 -NCT03252717 -NCT03255421 -NCT03252769 -NCT03255434 -NCT03252808 -NCT03255460 -NCT03252821 -NCT03255473 -NCT03252899 -NCT03255486 -NCT03252912 -NCT03255577 -NCT03252925 -NCT03255603 -NCT03252938 -NCT03255642 -NCT03253029 -NCT03255720 -NCT03253068 -NCT03255733 -NCT03253133 -NCT03255811 -NCT03253159 -NCT03255915 -NCT03253172 -NCT03256045 -NCT03253185 -NCT03256071 -NCT03253211 -NCT03256084 -NCT03253250 -NCT03256136 -NCT03253276 -NCT03256201 -NCT03253289 -NCT03256292 -NCT03253367 -NCT03256305 -NCT03253458 -NCT03256331 -NCT03253627 -NCT03256344 -NCT03253653 -NCT03256383 -NCT03253679 -NCT03256396 -NCT03253705 -NCT03256604 -NCT03253744 -NCT03256708 -NCT03253848 -NCT03256721 -NCT03253861 -NCT03256825 -NCT03253913 -NCT03256877 -NCT03253965 -NCT03256916 -NCT03253978 -NCT03256981 -NCT03253991 -NCT03257007 -NCT03254004 -NCT03257033 -NCT03254160 -NCT03257111 -NCT03254173 -NCT03257124 -NCT03254212 -NCT03257137 -NCT03254394 -NCT03257150 -NCT03254407 -NCT03257163 -NCT03254420 -NCT03257241 -NCT03254498 -NCT03257267 -NCT03254511 -NCT03257280 -NCT03254615 -NCT03257293 -NCT03254654 -NCT03257319 -NCT03254732 -NCT03279692 -NCT03254875 -NCT03279770 -NCT03254927 -NCT03279939 -NCT03254940 -NCT03279952 -NCT03255018 -NCT03279991 -NCT03255031 -NCT03280030 -NCT03255057 -NCT03280056 -NCT03255070 -NCT03280121 -NCT03255083 -NCT03280134 -NCT03255096 -NCT03280147 -NCT03255135 -NCT03280160 -NCT03255161 -NCT03280264 -NCT03257410 -NCT03259880 -NCT03257462 -NCT03259867 -NCT03257553 -NCT03260023 -NCT03257566 -NCT03260062 -NCT03257618 -NCT03260088 -NCT03257631 -NCT03260140 -NCT03257644 -NCT03260179 -NCT03257657 -NCT03260231 -NCT03257696 -NCT03260322 -NCT03257722 -NCT03260400 -NCT03257735 -NCT03260491 -NCT03257761 -NCT03260504 -NCT03257800 -NCT03260673 -NCT03257891 -NCT03260712 -NCT03257930 -NCT03260855 -NCT03257969 -NCT03260868 -NCT03258008 -NCT03260881 -NCT03258034 -NCT03260894 -NCT03258047 -NCT03272373 -NCT03258229 -NCT03272386 -NCT03258307 -NCT03272399 -NCT03258320 -NCT03272464 -NCT03258359 -NCT03272477 -NCT03258398 -NCT03272503 -NCT03258450 -NCT03272568 -NCT03258515 -NCT03272633 -NCT03258541 -NCT03272659 -NCT03258554 -NCT03272789 -NCT03258567 -NCT03272880 -NCT03258593 -NCT03272932 -NCT03258658 -NCT03272971 -NCT03258671 -NCT03272984 -NCT03258684 -NCT03272997 -NCT03258710 -NCT03273153 -NCT03258736 -NCT03273231 -NCT03258892 -NCT03273348 -NCT03258931 -NCT03273374 -NCT03258944 -NCT03273426 -NCT03259022 -NCT03273452 -NCT03259035 -NCT03273465 -NCT03259048 -NCT03273595 -NCT03259061 -NCT03273621 -NCT03259087 -NCT03273634 -NCT03259152 -NCT03273647 -NCT03259165 -NCT03273686 -NCT03259178 -NCT03273712 -NCT03259282 -NCT03273751 -NCT03259425 -NCT03273920 -NCT03259438 -NCT03273998 -NCT03259477 -NCT03279250 -NCT03259503 -NCT03279289 -NCT03259516 -NCT03279367 -NCT03259529 -NCT03279432 -NCT03259581 -NCT03279588 -NCT03259607 -NCT03279601 -NCT03259828 -NCT03279614 -NCT03261011 -NCT03264066 -NCT03261180 -NCT03264040 -NCT03261245 -NCT03264092 -NCT03261271 -NCT03264131 -NCT03261297 -NCT03264170 -NCT03261323 -NCT03264209 -NCT03261336 -NCT03264274 -NCT03261349 -NCT03270007 -NCT03261648 -NCT03270020 -NCT03261713 -NCT03270059 -NCT03261726 -NCT03270085 -NCT03261778 -NCT03270111 -NCT03261791 -NCT03270137 -NCT03261947 -NCT03270176 -NCT03261999 -NCT03270215 -NCT03262103 -NCT03270241 -NCT03262207 -NCT03270384 -NCT03262246 -NCT03270488 -NCT03262259 -NCT03270553 -NCT03262298 -NCT03270657 -NCT03262311 -NCT03270722 -NCT03262389 -NCT03270982 -NCT03262454 -NCT03270995 -NCT03262545 -NCT03271021 -NCT03262610 -NCT03271047 -NCT03262623 -NCT03271073 -NCT03262636 -NCT03271099 -NCT03262753 -NCT03271138 -NCT03262779 -NCT03271203 -NCT03262792 -NCT03271255 -NCT03262805 -NCT03271281 -NCT03262831 -NCT03271294 -NCT03262935 -NCT03271372 -NCT03262948 -NCT03271385 -NCT03263026 -NCT03271476 -NCT03263039 -NCT03271489 -NCT03263130 -NCT03271502 -NCT03263195 -NCT03271515 -NCT03263208 -NCT03271554 -NCT03263273 -NCT03271567 -NCT03263299 -NCT03271606 -NCT03263351 -NCT03271632 -NCT03263403 -NCT03271671 -NCT03263416 -NCT03271723 -NCT03263429 -NCT03271749 -NCT03263520 -NCT03271762 -NCT03263572 -NCT03271814 -NCT03263585 -NCT03271892 -NCT03263611 -NCT03271905 -NCT03263637 -NCT03271918 -NCT03263650 -NCT03271957 -NCT03263715 -NCT03271970 -NCT03263741 -NCT03272087 -NCT03263780 -NCT03272217 -NCT03263923 -NCT03272256 -NCT03263936 -NCT03272334 -NCT03264300 -NCT03267329 -NCT03264352 -NCT03267316 -NCT03264404 -NCT03267368 -NCT03264456 -NCT03267381 -NCT03264482 -NCT03267433 -NCT03264547 -NCT03267498 -NCT03264599 -NCT03267524 -NCT03264612 -NCT03267589 -NCT03264664 -NCT03267602 -NCT03264716 -NCT03267628 -NCT03264781 -NCT03267654 -NCT03264794 -NCT03267680 -NCT03264807 -NCT03267836 -NCT03264885 -NCT03267888 -NCT03264989 -NCT03267914 -NCT03265080 -NCT03267940 -NCT03265106 -NCT03267966 -NCT03265132 -NCT03268057 -NCT03265301 -NCT03268200 -NCT03265392 -NCT03268317 -NCT03265418 -NCT03268343 -NCT03265483 -NCT03268382 -NCT03265496 -NCT03268499 -NCT03265574 -NCT03268603 -NCT03265652 -NCT03268629 -NCT03265717 -NCT03268681 -NCT03265730 -NCT03268772 -NCT03265860 -NCT03268785 -NCT03265925 -NCT03268824 -NCT03266003 -NCT03268889 -NCT03266068 -NCT03268954 -NCT03266185 -NCT03268993 -NCT03266276 -NCT03269136 -NCT03266419 -NCT03269149 -NCT03266432 -NCT03269162 -NCT03266471 -NCT03269201 -NCT03266562 -NCT03269227 -NCT03266692 -NCT03269292 -NCT03266718 -NCT03269318 -NCT03266731 -NCT03269344 -NCT03266744 -NCT03269422 -NCT03266770 -NCT03269435 -NCT03266900 -NCT03269526 -NCT03266913 -NCT03269552 -NCT03267017 -NCT03269565 -NCT03267030 -NCT03269604 -NCT03267069 -NCT03269630 -NCT03267082 -NCT03269669 -NCT03267108 -NCT03269812 -NCT03267121 -NCT03269877 -NCT03267147 -NCT03269903 -NCT03267173 -NCT03269929 -NCT03267186 -NCT03269955 -NCT03267251 -NCT03269981 -NCT03267290 -NCT03269994 -NCT03267303 -NCT03279237 -NCT03274011 -NCT03276676 -NCT03274063 -NCT03276650 -NCT03274206 -NCT03276715 -NCT03274219 -NCT03276728 -NCT03274232 -NCT03276806 -NCT03274258 -NCT03276819 -NCT03274284 -NCT03276832 -NCT03274349 -NCT03276845 -NCT03274388 -NCT03276871 -NCT03274414 -NCT03276923 -NCT03274427 -NCT03276962 -NCT03274479 -NCT03276975 -NCT03274492 -NCT03277066 -NCT03274544 -NCT03277105 -NCT03274661 -NCT03277144 -NCT03274687 -NCT03277170 -NCT03274726 -NCT03277209 -NCT03274778 -NCT03277235 -NCT03274804 -NCT03277261 -NCT03274830 -NCT03277287 -NCT03274882 -NCT03277352 -NCT03274960 -NCT03277469 -NCT03274973 -NCT03277482 -NCT03275090 -NCT03277638 -NCT03275103 -NCT03277690 -NCT03275181 -NCT03277716 -NCT03275194 -NCT03277729 -NCT03275272 -NCT03277859 -NCT03275285 -NCT03277898 -NCT03275376 -NCT03277924 -NCT03275402 -NCT03277963 -NCT03275493 -NCT03278015 -NCT03275506 -NCT03278106 -NCT03275519 -NCT03278145 -NCT03275558 -NCT03278158 -NCT03275597 -NCT03278197 -NCT03275636 -NCT03278210 -NCT03275727 -NCT03278249 -NCT03275792 -NCT03278275 -NCT03275818 -NCT03278327 -NCT03275844 -NCT03278340 -NCT03275857 -NCT03278379 -NCT03275974 -NCT03278405 -NCT03275987 -NCT03278444 -NCT03276013 -NCT03278561 -NCT03276091 -NCT03278574 -NCT03276156 -NCT03278600 -NCT03276195 -NCT03278626 -NCT03276234 -NCT03278652 -NCT03276247 -NCT03278665 -NCT03276286 -NCT03278717 -NCT03276468 -NCT03278782 -NCT03276507 -NCT03278808 -NCT03276572 -NCT03279120 -NCT03276585 -NCT03279198 -NCT03276624 -NCT03286413 -NCT03280693 -NCT03283371 -NCT03280719 -NCT03283319 -NCT03280784 -NCT03283384 -NCT03280836 -NCT03283423 -NCT03280849 -NCT03283488 -NCT03280862 -NCT03283553 -NCT03281018 -NCT03283605 -NCT03281031 -NCT03283618 -NCT03281070 -NCT03283631 -NCT03281109 -NCT03283696 -NCT03281122 -NCT03283761 -NCT03281135 -NCT03283813 -NCT03281161 -NCT03283852 -NCT03281187 -NCT03283917 -NCT03281369 -NCT03283943 -NCT03281382 -NCT03284346 -NCT03281421 -NCT03284385 -NCT03281447 -NCT03284424 -NCT03281499 -NCT03284489 -NCT03281551 -NCT03284502 -NCT03281681 -NCT03284554 -NCT03281720 -NCT03284567 -NCT03281746 -NCT03284619 -NCT03281811 -NCT03284658 -NCT03281824 -NCT03284710 -NCT03281837 -NCT03284723 -NCT03281889 -NCT03284775 -NCT03281902 -NCT03284866 -NCT03281915 -NCT03284957 -NCT03281954 -NCT03285048 -NCT03282006 -NCT03285152 -NCT03282058 -NCT03285321 -NCT03282084 -NCT03285412 -NCT03282097 -NCT03285490 -NCT03282149 -NCT03285568 -NCT03282188 -NCT03285607 -NCT03282214 -NCT03285620 -NCT03282344 -NCT03285633 -NCT03282396 -NCT03285724 -NCT03282435 -NCT03285763 -NCT03282461 -NCT03285802 -NCT03282474 -NCT03285815 -NCT03282487 -NCT03285906 -NCT03282617 -NCT03285919 -NCT03282643 -NCT03285932 -NCT03282682 -NCT03285945 -NCT03282825 -NCT03286062 -NCT03283007 -NCT03286088 -NCT03283046 -NCT03286114 -NCT03283059 -NCT03286153 -NCT03283111 -NCT03286166 -NCT03283137 -NCT03286244 -NCT03283176 -NCT03286257 -NCT03283202 -NCT03286296 -NCT03283293 -NCT03286335 -NCT03283306 -NCT03308942 -NCT03286517 -NCT03289286 -NCT03286530 -NCT03289221 -NCT03286634 -NCT03289299 -NCT03286699 -NCT03289351 -NCT03286842 -NCT03289364 -NCT03286855 -NCT03289390 -NCT03287024 -NCT03289416 -NCT03287050 -NCT03289455 -NCT03287141 -NCT03289533 -NCT03287193 -NCT03289585 -NCT03287206 -NCT03289702 -NCT03287245 -NCT03289741 -NCT03287271 -NCT03289819 -NCT03287375 -NCT03289832 -NCT03287427 -NCT03306849 -NCT03287453 -NCT03306901 -NCT03287492 -NCT03306992 -NCT03287557 -NCT03307005 -NCT03287635 -NCT03307044 -NCT03287648 -NCT03307070 -NCT03287674 -NCT03307096 -NCT03287778 -NCT03307122 -NCT03287791 -NCT03307148 -NCT03287804 -NCT03307265 -NCT03287817 -NCT03307317 -NCT03287843 -NCT03307330 -NCT03287908 -NCT03307382 -NCT03287921 -NCT03307460 -NCT03287947 -NCT03307512 -NCT03287999 -NCT03307538 -NCT03288012 -NCT03307564 -NCT03288103 -NCT03307603 -NCT03288116 -NCT03307616 -NCT03288259 -NCT03307629 -NCT03288272 -NCT03307746 -NCT03288298 -NCT03307759 -NCT03288337 -NCT03307785 -NCT03288350 -NCT03307811 -NCT03288402 -NCT03307876 -NCT03288454 -NCT03307941 -NCT03288480 -NCT03307993 -NCT03288493 -NCT03308006 -NCT03288532 -NCT03308084 -NCT03288545 -NCT03308149 -NCT03288636 -NCT03308201 -NCT03288662 -NCT03308266 -NCT03288714 -NCT03308370 -NCT03288792 -NCT03308396 -NCT03288818 -NCT03308435 -NCT03288831 -NCT03308487 -NCT03288870 -NCT03308526 -NCT03288922 -NCT03308552 -NCT03288987 -NCT03308591 -NCT03289039 -NCT03308604 -NCT03289117 -NCT03308682 -NCT03289195 -NCT03308734 -NCT03289910 -NCT03304314 -NCT03289962 -NCT03304366 -NCT03290027 -NCT03304379 -NCT03290066 -NCT03304405 -NCT03290079 -NCT03304418 -NCT03290183 -NCT03304444 -NCT03290209 -NCT03304587 -NCT03290235 -NCT03304639 -NCT03290313 -NCT03304678 -NCT03290417 -NCT03304730 -NCT03290456 -NCT03304756 -NCT03290534 -NCT03304795 -NCT03290586 -NCT03304847 -NCT03290651 -NCT03304860 -NCT03290677 -NCT03304925 -NCT03290703 -NCT03305146 -NCT03290755 -NCT03305185 -NCT03290807 -NCT03305224 -NCT03290820 -NCT03305276 -NCT03290937 -NCT03305445 -NCT03290950 -NCT03305549 -NCT03291002 -NCT03305588 -NCT03291015 -NCT03305627 -NCT03291028 -NCT03305653 -NCT03291054 -NCT03305705 -NCT03291080 -NCT03305757 -NCT03291210 -NCT03305783 -NCT03291314 -NCT03305809 -NCT03291327 -NCT03305913 -NCT03291353 -NCT03305965 -NCT03291379 -NCT03305978 -NCT03291444 -NCT03306004 -NCT03291522 -NCT03306030 -NCT03291535 -NCT03306121 -NCT03291600 -NCT03306264 -NCT03291652 -NCT03306290 -NCT03291678 -NCT03306329 -NCT03291886 -NCT03306381 -NCT03291899 -NCT03306394 -NCT03291912 -NCT03306420 -NCT03291925 -NCT03306446 -NCT03291938 -NCT03306472 -NCT03291951 -NCT03306485 -NCT03291964 -NCT03306498 -NCT03291977 -NCT03306641 -NCT03291990 -NCT03306680 -NCT03292055 -NCT03306693 -NCT03292133 -NCT03306771 -NCT03292146 -NCT03306784 -NCT03292172 -NCT03306823 -NCT03292198 -NCT03303521 -NCT03303547 -NCT03303586 -NCT03303937 -NCT03303950 -NCT03303963 -NCT03304054 -NCT03304080 -NCT03304093 -NCT03304145 -NCT03304184 -NCT03304210 -NCT03292211 -NCT03294746 -NCT03292237 -NCT03294733 -NCT03292250 -NCT03294889 -NCT03292263 -NCT03294902 -NCT03292289 -NCT03294954 -NCT03292302 -NCT03295084 -NCT03292328 -NCT03295162 -NCT03292341 -NCT03295175 -NCT03292406 -NCT03295227 -NCT03292497 -NCT03295240 -NCT03292536 -NCT03295279 -NCT03292588 -NCT03295383 -NCT03292640 -NCT03295396 -NCT03292757 -NCT03295526 -NCT03292783 -NCT03295552 -NCT03292822 -NCT03295565 -NCT03292835 -NCT03295643 -NCT03292874 -NCT03295695 -NCT03292978 -NCT03295721 -NCT03293108 -NCT03295747 -NCT03293173 -NCT03295916 -NCT03293186 -NCT03295942 -NCT03293212 -NCT03295981 -NCT03293238 -NCT03296098 -NCT03293251 -NCT03296137 -NCT03293368 -NCT03296150 -NCT03293394 -NCT03296163 -NCT03293524 -NCT03296241 -NCT03293602 -NCT03296267 -NCT03293615 -NCT03296306 -NCT03293628 -NCT03296319 -NCT03293667 -NCT03296358 -NCT03293680 -NCT03296397 -NCT03293693 -NCT03302559 -NCT03293784 -NCT03302598 -NCT03293849 -NCT03302676 -NCT03293992 -NCT03302728 -NCT03294044 -NCT03302767 -NCT03294083 -NCT03302819 -NCT03294096 -NCT03302858 -NCT03294148 -NCT03302884 -NCT03294187 -NCT03302910 -NCT03294239 -NCT03302962 -NCT03294252 -NCT03303053 -NCT03294304 -NCT03303066 -NCT03294317 -NCT03303157 -NCT03294330 -NCT03303183 -NCT03294343 -NCT03303287 -NCT03294408 -NCT03303313 -NCT03294421 -NCT03303339 -NCT03294460 -NCT03303352 -NCT03294486 -NCT03303365 -NCT03294525 -NCT03303430 -NCT03294538 -NCT03303469 -NCT03294603 -NCT03303482 -NCT03294694 -NCT03303495 -NCT03296501 -NCT03299465 -NCT03296514 -NCT03299452 -NCT03296527 -NCT03299660 -NCT03296553 -NCT03299673 -NCT03296566 -NCT03299738 -NCT03296579 -NCT03299829 -NCT03296683 -NCT03299855 -NCT03296696 -NCT03299894 -NCT03296709 -NCT03299946 -NCT03296787 -NCT03299985 -NCT03296878 -NCT03299998 -NCT03296930 -NCT03300115 -NCT03296982 -NCT03300193 -NCT03297177 -NCT03300284 -NCT03297307 -NCT03300362 -NCT03297346 -NCT03300375 -NCT03297359 -NCT03300401 -NCT03297385 -NCT03300492 -NCT03297424 -NCT03300505 -NCT03297463 -NCT03300544 -NCT03297489 -NCT03300557 -NCT03297528 -NCT03300570 -NCT03297593 -NCT03300609 -NCT03297606 -NCT03300674 -NCT03297632 -NCT03300687 -NCT03297671 -NCT03300765 -NCT03297710 -NCT03300817 -NCT03297788 -NCT03300843 -NCT03297892 -NCT03300908 -NCT03297957 -NCT03300921 -NCT03298074 -NCT03301155 -NCT03298087 -NCT03301168 -NCT03298321 -NCT03301207 -NCT03298373 -NCT03301220 -NCT03298399 -NCT03301233 -NCT03298412 -NCT03301272 -NCT03298451 -NCT03301350 -NCT03298516 -NCT03301454 -NCT03298594 -NCT03301597 -NCT03298607 -NCT03301636 -NCT03298685 -NCT03301675 -NCT03298763 -NCT03301688 -NCT03298828 -NCT03301701 -NCT03298867 -NCT03301753 -NCT03298893 -NCT03301805 -NCT03298945 -NCT03301857 -NCT03298958 -NCT03301896 -NCT03298984 -NCT03302104 -NCT03299036 -NCT03302156 -NCT03299088 -NCT03302221 -NCT03299114 -NCT03302234 -NCT03299283 -NCT03302247 -NCT03299309 -NCT03302403 -NCT03299322 -NCT03302442 -NCT03299335 -NCT03302468 -NCT03299439 -NCT03314896 -NCT03309111 -NCT03312530 -NCT03309150 -NCT03312478 -NCT03309293 -NCT03312543 -NCT03309319 -NCT03312634 -NCT03309358 -NCT03312686 -NCT03309410 -NCT03312738 -NCT03309462 -NCT03312777 -NCT03309488 -NCT03312842 -NCT03309501 -NCT03312907 -NCT03309852 -NCT03312972 -NCT03309878 -NCT03313011 -NCT03309891 -NCT03313089 -NCT03309917 -NCT03313102 -NCT03310008 -NCT03313128 -NCT03310021 -NCT03313154 -NCT03310164 -NCT03313193 -NCT03310190 -NCT03313206 -NCT03310372 -NCT03313219 -NCT03310424 -NCT03313271 -NCT03310463 -NCT03313284 -NCT03310541 -NCT03313323 -NCT03310567 -NCT03313362 -NCT03310619 -NCT03313492 -NCT03310632 -NCT03313531 -NCT03310645 -NCT03313544 -NCT03310671 -NCT03313557 -NCT03310879 -NCT03313596 -NCT03310892 -NCT03313635 -NCT03310918 -NCT03313648 -NCT03310957 -NCT03313700 -NCT03310996 -NCT03313726 -NCT03311035 -NCT03313778 -NCT03311126 -NCT03313804 -NCT03311152 -NCT03313856 -NCT03311204 -NCT03313908 -NCT03311308 -NCT03314025 -NCT03311334 -NCT03314090 -NCT03311412 -NCT03314116 -NCT03311451 -NCT03314168 -NCT03311477 -NCT03314181 -NCT03311555 -NCT03314259 -NCT03311620 -NCT03314311 -NCT03311672 -NCT03314324 -NCT03311685 -NCT03314415 -NCT03311750 -NCT03314441 -NCT03311789 -NCT03314480 -NCT03311828 -NCT03314532 -NCT03311932 -NCT03314584 -NCT03311958 -NCT03314636 -NCT03312062 -NCT03314688 -NCT03312114 -NCT03314740 -NCT03312153 -NCT03314792 -NCT03312205 -NCT03314805 -NCT03312244 -NCT03314844 -NCT03312257 -NCT03314870 -NCT03312309 -NCT03320083 -NCT03314922 -NCT03317899 -NCT03314935 -NCT03317886 -NCT03314974 -NCT03317977 -NCT03314987 -NCT03317990 -NCT03315026 -NCT03318016 -NCT03315039 -NCT03318029 -NCT03315065 -NCT03318068 -NCT03315078 -NCT03318107 -NCT03315130 -NCT03318159 -NCT03315195 -NCT03318198 -NCT03315286 -NCT03318237 -NCT03315351 -NCT03318263 -NCT03315364 -NCT03318315 -NCT03315403 -NCT03318328 -NCT03315455 -NCT03318341 -NCT03315481 -NCT03318393 -NCT03315520 -NCT03318419 -NCT03315533 -NCT03318445 -NCT03315546 -NCT03318471 -NCT03315585 -NCT03318497 -NCT03315754 -NCT03318510 -NCT03315871 -NCT03318523 -NCT03315975 -NCT03318562 -NCT03316053 -NCT03318614 -NCT03316144 -NCT03318783 -NCT03316157 -NCT03318861 -NCT03316222 -NCT03318900 -NCT03316274 -NCT03318939 -NCT03316326 -NCT03318952 -NCT03316469 -NCT03318991 -NCT03316521 -NCT03319030 -NCT03316547 -NCT03319043 -NCT03316573 -NCT03319069 -NCT03316586 -NCT03319121 -NCT03316599 -NCT03319186 -NCT03316638 -NCT03319251 -NCT03316677 -NCT03319316 -NCT03316742 -NCT03319342 -NCT03316794 -NCT03319420 -NCT03316872 -NCT03319459 -NCT03316898 -NCT03319472 -NCT03317119 -NCT03319511 -NCT03317158 -NCT03319537 -NCT03317210 -NCT03319602 -NCT03317262 -NCT03319628 -NCT03317327 -NCT03319641 -NCT03317366 -NCT03319667 -NCT03317392 -NCT03319745 -NCT03317405 -NCT03319810 -NCT03317457 -NCT03319823 -NCT03317496 -NCT03319862 -NCT03317574 -NCT03319901 -NCT03317730 -NCT03319940 -NCT03317743 -NCT03319966 -NCT03317795 -NCT03319992 -NCT03317808 -NCT03324932 -NCT03320213 -NCT03322735 -NCT03320330 -NCT03322696 -NCT03320421 -NCT03322761 -NCT03320460 -NCT03322800 -NCT03320486 -NCT03322813 -NCT03320525 -NCT03322865 -NCT03320538 -NCT03322891 -NCT03320577 -NCT03322904 -NCT03320590 -NCT03322930 -NCT03320629 -NCT03322969 -NCT03320733 -NCT03322995 -NCT03320772 -NCT03323021 -NCT03320798 -NCT03323034 -NCT03320811 -NCT03323047 -NCT03320915 -NCT03323060 -NCT03320928 -NCT03323151 -NCT03320941 -NCT03323229 -NCT03321019 -NCT03323333 -NCT03321045 -NCT03323346 -NCT03321097 -NCT03323359 -NCT03321123 -NCT03323398 -NCT03321149 -NCT03323424 -NCT03321188 -NCT03323450 -NCT03321240 -NCT03323463 -NCT03321396 -NCT03323476 -NCT03321448 -NCT03323489 -NCT03321461 -NCT03323528 -NCT03321487 -NCT03323580 -NCT03321513 -NCT03323658 -NCT03321526 -NCT03323710 -NCT03321539 -NCT03323775 -NCT03321630 -NCT03323788 -NCT03321643 -NCT03323801 -NCT03321734 -NCT03323827 -NCT03321747 -NCT03323879 -NCT03321760 -NCT03323905 -NCT03321825 -NCT03323944 -NCT03321864 -NCT03324009 -NCT03321890 -NCT03324061 -NCT03321903 -NCT03324074 -NCT03321929 -NCT03324113 -NCT03321981 -NCT03324165 -NCT03322020 -NCT03324243 -NCT03322059 -NCT03324282 -NCT03322072 -NCT03324295 -NCT03322215 -NCT03324308 -NCT03322267 -NCT03324360 -NCT03322280 -NCT03324373 -NCT03322345 -NCT03324425 -NCT03322384 -NCT03324503 -NCT03322514 -NCT03324542 -NCT03322540 -NCT03324737 -NCT03322566 -NCT03324802 -NCT03322592 -NCT03324815 -NCT03322644 -NCT03324880 -NCT03322670 -NCT03330106 -NCT03324958 -NCT03327740 -NCT03325023 -NCT03327701 -NCT03325088 -NCT03327779 -NCT03325101 -NCT03327831 -NCT03325166 -NCT03327857 -NCT03325192 -NCT03327896 -NCT03325205 -NCT03327974 -NCT03325244 -NCT03327987 -NCT03325296 -NCT03328000 -NCT03325309 -NCT03328026 -NCT03325348 -NCT03328065 -NCT03325361 -NCT03328078 -NCT03325374 -NCT03328091 -NCT03325387 -NCT03328104 -NCT03325465 -NCT03328169 -NCT03325634 -NCT03328234 -NCT03325647 -NCT03328247 -NCT03325790 -NCT03328260 -NCT03325803 -NCT03328273 -NCT03325816 -NCT03328325 -NCT03325829 -NCT03328338 -NCT03325868 -NCT03328390 -NCT03325907 -NCT03328403 -NCT03325933 -NCT03328416 -NCT03325985 -NCT03328429 -NCT03326024 -NCT03328559 -NCT03326102 -NCT03328663 -NCT03326154 -NCT03328676 -NCT03326193 -NCT03328858 -NCT03326232 -NCT03328884 -NCT03326258 -NCT03328936 -NCT03326310 -NCT03328975 -NCT03326375 -NCT03329001 -NCT03326388 -NCT03329027 -NCT03326440 -NCT03329040 -NCT03326583 -NCT03329183 -NCT03326622 -NCT03329235 -NCT03326674 -NCT03329248 -NCT03326713 -NCT03329261 -NCT03326752 -NCT03329274 -NCT03326791 -NCT03329300 -NCT03326843 -NCT03329365 -NCT03326895 -NCT03329378 -NCT03326921 -NCT03329534 -NCT03326947 -NCT03329664 -NCT03326986 -NCT03329690 -NCT03327025 -NCT03329742 -NCT03327064 -NCT03329755 -NCT03327233 -NCT03329846 -NCT03327285 -NCT03329885 -NCT03327428 -NCT03329911 -NCT03327597 -NCT03329937 -NCT03327636 -NCT03329950 -NCT03327662 -NCT03329963 -NCT03327675 -NCT03330015 -NCT03327688 -NCT03335826 -NCT03330158 -NCT03332927 -NCT03330197 -NCT03332797 -NCT03330249 -NCT03332992 -NCT03330275 -NCT03333005 -NCT03330288 -NCT03333031 -NCT03330353 -NCT03333070 -NCT03330379 -NCT03333109 -NCT03330405 -NCT03333226 -NCT03330457 -NCT03333330 -NCT03330522 -NCT03333343 -NCT03330561 -NCT03333486 -NCT03330600 -NCT03333616 -NCT03330691 -NCT03333655 -NCT03330717 -NCT03333694 -NCT03330730 -NCT03333746 -NCT03330821 -NCT03333785 -NCT03330834 -NCT03333837 -NCT03330847 -NCT03333863 -NCT03330964 -NCT03333915 -NCT03330990 -NCT03333993 -NCT03331042 -NCT03334071 -NCT03331055 -NCT03334162 -NCT03331198 -NCT03334188 -NCT03331250 -NCT03334227 -NCT03331276 -NCT03334292 -NCT03331315 -NCT03334305 -NCT03331341 -NCT03334344 -NCT03331367 -NCT03334383 -NCT03331406 -NCT03334409 -NCT03331445 -NCT03334487 -NCT03331458 -NCT03334500 -NCT03331510 -NCT03334539 -NCT03331562 -NCT03334617 -NCT03331575 -NCT03334682 -NCT03331588 -NCT03334695 -NCT03331601 -NCT03334708 -NCT03331627 -NCT03334864 -NCT03331640 -NCT03334955 -NCT03331731 -NCT03335033 -NCT03332017 -NCT03335059 -NCT03332069 -NCT03335098 -NCT03332121 -NCT03335124 -NCT03332160 -NCT03335189 -NCT03332199 -NCT03335202 -NCT03332225 -NCT03335241 -NCT03332303 -NCT03335254 -NCT03332355 -NCT03335267 -NCT03332368 -NCT03335319 -NCT03332433 -NCT03335332 -NCT03332472 -NCT03335384 -NCT03332498 -NCT03335527 -NCT03332511 -NCT03335540 -NCT03332576 -NCT03335631 -NCT03332589 -NCT03335670 -NCT03332667 -NCT03335813 -NCT03332745 -NCT03341364 -NCT03335839 -NCT03338868 -NCT03335865 -NCT03338790 -NCT03335878 -NCT03338881 -NCT03335904 -NCT03338920 -NCT03335969 -NCT03338959 -NCT03336021 -NCT03338972 -NCT03336034 -NCT03338985 -NCT03336047 -NCT03339076 -NCT03336073 -NCT03339102 -NCT03336138 -NCT03339115 -NCT03336203 -NCT03339128 -NCT03336216 -NCT03339219 -NCT03336229 -NCT03339362 -NCT03336333 -NCT03339518 -NCT03336476 -NCT03339531 -NCT03336528 -NCT03339544 -NCT03336606 -NCT03339622 -NCT03336632 -NCT03339635 -NCT03336827 -NCT03339700 -NCT03336905 -NCT03339726 -NCT03336983 -NCT03339765 -NCT03337035 -NCT03339804 -NCT03337048 -NCT03339843 -NCT03337061 -NCT03339908 -NCT03337087 -NCT03339973 -NCT03337139 -NCT03340012 -NCT03337165 -NCT03340038 -NCT03337256 -NCT03340116 -NCT03337269 -NCT03340129 -NCT03337347 -NCT03340155 -NCT03337360 -NCT03340259 -NCT03337399 -NCT03340298 -NCT03337451 -NCT03340376 -NCT03337516 -NCT03340402 -NCT03337607 -NCT03340415 -NCT03337698 -NCT03340506 -NCT03337724 -NCT03340558 -NCT03337776 -NCT03340584 -NCT03337789 -NCT03340740 -NCT03337841 -NCT03340766 -NCT03337919 -NCT03340844 -NCT03337932 -NCT03340857 -NCT03337997 -NCT03340883 -NCT03338049 -NCT03340896 -NCT03338062 -NCT03340935 -NCT03338218 -NCT03340948 -NCT03338348 -NCT03340961 -NCT03338400 -NCT03340974 -NCT03338426 -NCT03341039 -NCT03338465 -NCT03341104 -NCT03338530 -NCT03341143 -NCT03338543 -NCT03341208 -NCT03338621 -NCT03341221 -NCT03338647 -NCT03341286 -NCT03338764 -NCT03341338 -NCT03338777 -NCT03347097 -NCT03341468 -NCT03344406 -NCT03341520 -NCT03344367 -NCT03341533 -NCT03344497 -NCT03341546 -NCT03344536 -NCT03341650 -NCT03344588 -NCT03341689 -NCT03344614 -NCT03341754 -NCT03344744 -NCT03341806 -NCT03344757 -NCT03341845 -NCT03344822 -NCT03341871 -NCT03344835 -NCT03341910 -NCT03344861 -NCT03341936 -NCT03344913 -NCT03341988 -NCT03344965 -NCT03342001 -NCT03344991 -NCT03342144 -NCT03345095 -NCT03342196 -NCT03345108 -NCT03342235 -NCT03345134 -NCT03342261 -NCT03345186 -NCT03342274 -NCT03345225 -NCT03342352 -NCT03345251 -NCT03342365 -NCT03345264 -NCT03342417 -NCT03345277 -NCT03342430 -NCT03345303 -NCT03342625 -NCT03345407 -NCT03342664 -NCT03345420 -NCT03342677 -NCT03345472 -NCT03342716 -NCT03345485 -NCT03342755 -NCT03345498 -NCT03342794 -NCT03345563 -NCT03342859 -NCT03345641 -NCT03342911 -NCT03345654 -NCT03342937 -NCT03345693 -NCT03343002 -NCT03345784 -NCT03343054 -NCT03345810 -NCT03343093 -NCT03345875 -NCT03343145 -NCT03345940 -NCT03343197 -NCT03345966 -NCT03343210 -NCT03346005 -NCT03343249 -NCT03346057 -NCT03343301 -NCT03346096 -NCT03343327 -NCT03346109 -NCT03343405 -NCT03346135 -NCT03343470 -NCT03346161 -NCT03343613 -NCT03346304 -NCT03343652 -NCT03346421 -NCT03343665 -NCT03346603 -NCT03343678 -NCT03346642 -NCT03343925 -NCT03346733 -NCT03343977 -NCT03346759 -NCT03344016 -NCT03346811 -NCT03344029 -NCT03346915 -NCT03344068 -NCT03346954 -NCT03344172 -NCT03346967 -NCT03344211 -NCT03347045 -NCT03344250 -NCT03347058 -NCT03344276 -NCT03352349 -NCT03347123 -NCT03349437 -NCT03347149 -NCT03349411 -NCT03347253 -NCT03349450 -NCT03347292 -NCT03349463 -NCT03347344 -NCT03349502 -NCT03347409 -NCT03349710 -NCT03347461 -NCT03349827 -NCT03347513 -NCT03349840 -NCT03347591 -NCT03349866 -NCT03347617 -NCT03349879 -NCT03347630 -NCT03349892 -NCT03347656 -NCT03350048 -NCT03347721 -NCT03350087 -NCT03347799 -NCT03350126 -NCT03347838 -NCT03350139 -NCT03347864 -NCT03350217 -NCT03347903 -NCT03350243 -NCT03347929 -NCT03350425 -NCT03347994 -NCT03350477 -NCT03348007 -NCT03350490 -NCT03348033 -NCT03350503 -NCT03348046 -NCT03350529 -NCT03348059 -NCT03350594 -NCT03348098 -NCT03350620 -NCT03348124 -NCT03350646 -NCT03348150 -NCT03350659 -NCT03348189 -NCT03350685 -NCT03348215 -NCT03350763 -NCT03348280 -NCT03350854 -NCT03348293 -NCT03350906 -NCT03348514 -NCT03350919 -NCT03348527 -NCT03350945 -NCT03348631 -NCT03351010 -NCT03348670 -NCT03351062 -NCT03348696 -NCT03351075 -NCT03348748 -NCT03351088 -NCT03348761 -NCT03351127 -NCT03348826 -NCT03351231 -NCT03348891 -NCT03351296 -NCT03348904 -NCT03351335 -NCT03348917 -NCT03351348 -NCT03348969 -NCT03351361 -NCT03349008 -NCT03351517 -NCT03349021 -NCT03351725 -NCT03349034 -NCT03351842 -NCT03349060 -NCT03351855 -NCT03349073 -NCT03351868 -NCT03349177 -NCT03351907 -NCT03349203 -NCT03352037 -NCT03349255 -NCT03352089 -NCT03349281 -NCT03352115 -NCT03349307 -NCT03352154 -NCT03349320 -NCT03352245 -NCT03349333 -NCT03352271 -NCT03349346 -NCT03352323 -NCT03349398 -NCT03357952 -NCT03352362 -NCT03355261 -NCT03352375 -NCT03355248 -NCT03352427 -NCT03355339 -NCT03352531 -NCT03355378 -NCT03352739 -NCT03355443 -NCT03352765 -NCT03355495 -NCT03352804 -NCT03355560 -NCT03352895 -NCT03355612 -NCT03352908 -NCT03355742 -NCT03352921 -NCT03355768 -NCT03352934 -NCT03355794 -NCT03352947 -NCT03355820 -NCT03353025 -NCT03355859 -NCT03353064 -NCT03355937 -NCT03353077 -NCT03355976 -NCT03353129 -NCT03356002 -NCT03353181 -NCT03356054 -NCT03353194 -NCT03356080 -NCT03353233 -NCT03356158 -NCT03353246 -NCT03356171 -NCT03353402 -NCT03356223 -NCT03353428 -NCT03356301 -NCT03353467 -NCT03356405 -NCT03353506 -NCT03356444 -NCT03353558 -NCT03356522 -NCT03353571 -NCT03356548 -NCT03353610 -NCT03356587 -NCT03353675 -NCT03356600 -NCT03353740 -NCT03356665 -NCT03353753 -NCT03356678 -NCT03353831 -NCT03356743 -NCT03353896 -NCT03356769 -NCT03353948 -NCT03356782 -NCT03354000 -NCT03356795 -NCT03354026 -NCT03356808 -NCT03354039 -NCT03356860 -NCT03354065 -NCT03356912 -NCT03354169 -NCT03356925 -NCT03354299 -NCT03356938 -NCT03354351 -NCT03357029 -NCT03354390 -NCT03357042 -NCT03354455 -NCT03357120 -NCT03354533 -NCT03357224 -NCT03354572 -NCT03357237 -NCT03354598 -NCT03357276 -NCT03354611 -NCT03357289 -NCT03354689 -NCT03357315 -NCT03354741 -NCT03357419 -NCT03354832 -NCT03357484 -NCT03354884 -NCT03357614 -NCT03354962 -NCT03357627 -NCT03355014 -NCT03357679 -NCT03355066 -NCT03357757 -NCT03355079 -NCT03357770 -NCT03355157 -NCT03357809 -NCT03355196 -NCT03363659 -NCT03357978 -NCT03360708 -NCT03358004 -NCT03360695 -NCT03358017 -NCT03360721 -NCT03358095 -NCT03360734 -NCT03358199 -NCT03360760 -NCT03358407 -NCT03360890 -NCT03358472 -NCT03360916 -NCT03358511 -NCT03360929 -NCT03358563 -NCT03360994 -NCT03358576 -NCT03361111 -NCT03358589 -NCT03361137 -NCT03358602 -NCT03361150 -NCT03358719 -NCT03361228 -NCT03358732 -NCT03361306 -NCT03358849 -NCT03361319 -NCT03358862 -NCT03361345 -NCT03358875 -NCT03361423 -NCT03358979 -NCT03361436 -NCT03359005 -NCT03361709 -NCT03359070 -NCT03361735 -NCT03359083 -NCT03361748 -NCT03359161 -NCT03361800 -NCT03359187 -NCT03361852 -NCT03359239 -NCT03361865 -NCT03359252 -NCT03361917 -NCT03359265 -NCT03361969 -NCT03359278 -NCT03361982 -NCT03359434 -NCT03362060 -NCT03359447 -NCT03362073 -NCT03359460 -NCT03362138 -NCT03359525 -NCT03362255 -NCT03359603 -NCT03362268 -NCT03359616 -NCT03362281 -NCT03359668 -NCT03362359 -NCT03359681 -NCT03362437 -NCT03359733 -NCT03362606 -NCT03359811 -NCT03362619 -NCT03359850 -NCT03362632 -NCT03359941 -NCT03362684 -NCT03359954 -NCT03362723 -NCT03360006 -NCT03362762 -NCT03360110 -NCT03362801 -NCT03360149 -NCT03362827 -NCT03360162 -NCT03362970 -NCT03360214 -NCT03363126 -NCT03360227 -NCT03363191 -NCT03360292 -NCT03363217 -NCT03360318 -NCT03363373 -NCT03360331 -NCT03363399 -NCT03360344 -NCT03363451 -NCT03360383 -NCT03363490 -NCT03360461 -NCT03363529 -NCT03360474 -NCT03363555 -NCT03360500 -NCT03363620 -NCT03360591 -NCT03363633 -NCT03360630 -NCT03370172 -NCT03363698 -NCT03367143 -NCT03363776 -NCT03367091 -NCT03363867 -NCT03367156 -NCT03364049 -NCT03367247 -NCT03364166 -NCT03367299 -NCT03364231 -NCT03367338 -NCT03364270 -NCT03367429 -NCT03364348 -NCT03367572 -NCT03364400 -NCT03367611 -NCT03364439 -NCT03367637 -NCT03364530 -NCT03367676 -NCT03364673 -NCT03367689 -NCT03364803 -NCT03367702 -NCT03364881 -NCT03367715 -NCT03364998 -NCT03367728 -NCT03365076 -NCT03367741 -NCT03365297 -NCT03367793 -NCT03365336 -NCT03367819 -NCT03365414 -NCT03367845 -NCT03365518 -NCT03367871 -NCT03365661 -NCT03367884 -NCT03365687 -NCT03367923 -NCT03365778 -NCT03368066 -NCT03365791 -NCT03368079 -NCT03365882 -NCT03368131 -NCT03365895 -NCT03368196 -NCT03366012 -NCT03368378 -NCT03366051 -NCT03368534 -NCT03366064 -NCT03368547 -NCT03366077 -NCT03368625 -NCT03366103 -NCT03368651 -NCT03366116 -NCT03368664 -NCT03366142 -NCT03368729 -NCT03366155 -NCT03368742 -NCT03366181 -NCT03368859 -NCT03366207 -NCT03368898 -NCT03366272 -NCT03368924 -NCT03366324 -NCT03368963 -NCT03366350 -NCT03368976 -NCT03366376 -NCT03369119 -NCT03366415 -NCT03369132 -NCT03366428 -NCT03369223 -NCT03366454 -NCT03369353 -NCT03366480 -NCT03369509 -NCT03366493 -NCT03369522 -NCT03366558 -NCT03369587 -NCT03366649 -NCT03369600 -NCT03366675 -NCT03369652 -NCT03366740 -NCT03369730 -NCT03366766 -NCT03369782 -NCT03366779 -NCT03369847 -NCT03366792 -NCT03369964 -NCT03366805 -NCT03370016 -NCT03366844 -NCT03370055 -NCT03366883 -NCT03370159 -NCT03366961 -NCT03376087 -NCT03370185 -NCT03373305 -NCT03370198 -NCT03373266 -NCT03370276 -NCT03373383 -NCT03370302 -NCT03373422 -NCT03370367 -NCT03373474 -NCT03370406 -NCT03373487 -NCT03370588 -NCT03373526 -NCT03370718 -NCT03373552 -NCT03370744 -NCT03373656 -NCT03370770 -NCT03373708 -NCT03370809 -NCT03373760 -NCT03370835 -NCT03373773 -NCT03370913 -NCT03373942 -NCT03370926 -NCT03373955 -NCT03370965 -NCT03374007 -NCT03371004 -NCT03374059 -NCT03371017 -NCT03374085 -NCT03371147 -NCT03374254 -NCT03371277 -NCT03374280 -NCT03371381 -NCT03374293 -NCT03371407 -NCT03374319 -NCT03371420 -NCT03374332 -NCT03371433 -NCT03374475 -NCT03371446 -NCT03374488 -NCT03371485 -NCT03374501 -NCT03371550 -NCT03374592 -NCT03371563 -NCT03374683 -NCT03371589 -NCT03374826 -NCT03371693 -NCT03374839 -NCT03371719 -NCT03374852 -NCT03371732 -NCT03374865 -NCT03371979 -NCT03374943 -NCT03371992 -NCT03374982 -NCT03372057 -NCT03374995 -NCT03372096 -NCT03375086 -NCT03372122 -NCT03375112 -NCT03372148 -NCT03375164 -NCT03372200 -NCT03375242 -NCT03372291 -NCT03375281 -NCT03372421 -NCT03375307 -NCT03372499 -NCT03375320 -NCT03372551 -NCT03375359 -NCT03372642 -NCT03375437 -NCT03372655 -NCT03375489 -NCT03372681 -NCT03375502 -NCT03372694 -NCT03375515 -NCT03372720 -NCT03375567 -NCT03372772 -NCT03375593 -NCT03373006 -NCT03375632 -NCT03373019 -NCT03375801 -NCT03373058 -NCT03375814 -NCT03373097 -NCT03375827 -NCT03373110 -NCT03375892 -NCT03373123 -NCT03375931 -NCT03373136 -NCT03375983 -NCT03373188 -NCT03381612 -NCT03376386 -NCT03379025 -NCT03376412 -NCT03379012 -NCT03376451 -NCT03379051 -NCT03376477 -NCT03379168 -NCT03376503 -NCT03379194 -NCT03376568 -NCT03379259 -NCT03376594 -NCT03379350 -NCT03376659 -NCT03379363 -NCT03376672 -NCT03379376 -NCT03376737 -NCT03379415 -NCT03376919 -NCT03379428 -NCT03376945 -NCT03379441 -NCT03376958 -NCT03379493 -NCT03376971 -NCT03379571 -NCT03377023 -NCT03379584 -NCT03377036 -NCT03379597 -NCT03377062 -NCT03379675 -NCT03377101 -NCT03379727 -NCT03377166 -NCT03379792 -NCT03377179 -NCT03379805 -NCT03377192 -NCT03379844 -NCT03377218 -NCT03379909 -NCT03377270 -NCT03379935 -NCT03377296 -NCT03379948 -NCT03377309 -NCT03379961 -NCT03377361 -NCT03379974 -NCT03377387 -NCT03380026 -NCT03377400 -NCT03380039 -NCT03377426 -NCT03380052 -NCT03377439 -NCT03380130 -NCT03377465 -NCT03380182 -NCT03377491 -NCT03380299 -NCT03377517 -NCT03380364 -NCT03377530 -NCT03380468 -NCT03377556 -NCT03380572 -NCT03377569 -NCT03380689 -NCT03377660 -NCT03380793 -NCT03377725 -NCT03380806 -NCT03377764 -NCT03380845 -NCT03377816 -NCT03380871 -NCT03377829 -NCT03380897 -NCT03377842 -NCT03381066 -NCT03377881 -NCT03381092 -NCT03377894 -NCT03381118 -NCT03378128 -NCT03381183 -NCT03378167 -NCT03381274 -NCT03378193 -NCT03381287 -NCT03378258 -NCT03381300 -NCT03378297 -NCT03381339 -NCT03378362 -NCT03381352 -NCT03378375 -NCT03381417 -NCT03378466 -NCT03381430 -NCT03378479 -NCT03381534 -NCT03378648 -NCT03381560 -NCT03378895 -NCT03381573 -NCT03378934 -NCT03387085 -NCT03381651 -NCT03384654 -NCT03381677 -NCT03384628 -NCT03381755 -NCT03384667 -NCT03381768 -NCT03384784 -NCT03381781 -NCT03384836 -NCT03381820 -NCT03384914 -NCT03381846 -NCT03384940 -NCT03382106 -NCT03384992 -NCT03382145 -NCT03385018 -NCT03382171 -NCT03385070 -NCT03382249 -NCT03385096 -NCT03382327 -NCT03385148 -NCT03382340 -NCT03385187 -NCT03382392 -NCT03385200 -NCT03382418 -NCT03385226 -NCT03382561 -NCT03385343 -NCT03382574 -NCT03385408 -NCT03382600 -NCT03385434 -NCT03382795 -NCT03385486 -NCT03382886 -NCT03385551 -NCT03382899 -NCT03385577 -NCT03382912 -NCT03385616 -NCT03382964 -NCT03385655 -NCT03382977 -NCT03385668 -NCT03383016 -NCT03385681 -NCT03383055 -NCT03385720 -NCT03383094 -NCT03385798 -NCT03383237 -NCT03385889 -NCT03383302 -NCT03385915 -NCT03383367 -NCT03385941 -NCT03383406 -NCT03386045 -NCT03383458 -NCT03386162 -NCT03383575 -NCT03386292 -NCT03383614 -NCT03386357 -NCT03383679 -NCT03386383 -NCT03383692 -NCT03386409 -NCT03383705 -NCT03386500 -NCT03383757 -NCT03386513 -NCT03383796 -NCT03386526 -NCT03383835 -NCT03386539 -NCT03383952 -NCT03386552 -NCT03383965 -NCT03386578 -NCT03383978 -NCT03386617 -NCT03384043 -NCT03386643 -NCT03384056 -NCT03386695 -NCT03384082 -NCT03386721 -NCT03384095 -NCT03386734 -NCT03384134 -NCT03386773 -NCT03384199 -NCT03386838 -NCT03384212 -NCT03386929 -NCT03384225 -NCT03386942 -NCT03384238 -NCT03386955 -NCT03384251 -NCT03387020 -NCT03384316 -NCT03387033 -NCT03384407 -NCT03387046 -NCT03384511 -NCT03392402 -NCT03387098 -NCT03389724 -NCT03387111 -NCT03389568 -NCT03387228 -NCT03389776 -NCT03387241 -NCT03389802 -NCT03387280 -NCT03389815 -NCT03387306 -NCT03390062 -NCT03387332 -NCT03390127 -NCT03387436 -NCT03390166 -NCT03387475 -NCT03390231 -NCT03387501 -NCT03390296 -NCT03387514 -NCT03390348 -NCT03387527 -NCT03390387 -NCT03387553 -NCT03390413 -NCT03387592 -NCT03390504 -NCT03387670 -NCT03390517 -NCT03387761 -NCT03390569 -NCT03387774 -NCT03390595 -NCT03387904 -NCT03390608 -NCT03387917 -NCT03390634 -NCT03387943 -NCT03390686 -NCT03387969 -NCT03390738 -NCT03388021 -NCT03390894 -NCT03388047 -NCT03390907 -NCT03388073 -NCT03390946 -NCT03388125 -NCT03390972 -NCT03388190 -NCT03391011 -NCT03388268 -NCT03391050 -NCT03388346 -NCT03391154 -NCT03388372 -NCT03391232 -NCT03388385 -NCT03391271 -NCT03388606 -NCT03391310 -NCT03388619 -NCT03391362 -NCT03388632 -NCT03391388 -NCT03388645 -NCT03391427 -NCT03388671 -NCT03391466 -NCT03388749 -NCT03391479 -NCT03388814 -NCT03391531 -NCT03388905 -NCT03391557 -NCT03388931 -NCT03391726 -NCT03388944 -NCT03391778 -NCT03388970 -NCT03391843 -NCT03389035 -NCT03391869 -NCT03389061 -NCT03391895 -NCT03389087 -NCT03391934 -NCT03389126 -NCT03391947 -NCT03389204 -NCT03391973 -NCT03389230 -NCT03392064 -NCT03389256 -NCT03392090 -NCT03389295 -NCT03392103 -NCT03389347 -NCT03392129 -NCT03389438 -NCT03392181 -NCT03389451 -NCT03392220 -NCT03389464 -NCT03392233 -NCT03389477 -NCT03392246 -NCT03389516 -NCT03392363 -NCT03389542 -NCT03397394 -NCT03392428 -NCT03395028 -NCT03392506 -NCT03394989 -NCT03392519 -NCT03395067 -NCT03392545 -NCT03395080 -NCT03392571 -NCT03395119 -NCT03392935 -NCT03395132 -NCT03392974 -NCT03395249 -NCT03393000 -NCT03395340 -NCT03393065 -NCT03395444 -NCT03393078 -NCT03395457 -NCT03393091 -NCT03395496 -NCT03393117 -NCT03395522 -NCT03393182 -NCT03395561 -NCT03393208 -NCT03395587 -NCT03393234 -NCT03395626 -NCT03393273 -NCT03395704 -NCT03393286 -NCT03395717 -NCT03393351 -NCT03395756 -NCT03393403 -NCT03395847 -NCT03393416 -NCT03395873 -NCT03393507 -NCT03395899 -NCT03393546 -NCT03395938 -NCT03393611 -NCT03395964 -NCT03393689 -NCT03396042 -NCT03393715 -NCT03396107 -NCT03393754 -NCT03396185 -NCT03393845 -NCT03396211 -NCT03393858 -NCT03396289 -NCT03393884 -NCT03396341 -NCT03393936 -NCT03396354 -NCT03393962 -NCT03396445 -NCT03393975 -NCT03396471 -NCT03394014 -NCT03396497 -NCT03394027 -NCT03396510 -NCT03394040 -NCT03396562 -NCT03394105 -NCT03396575 -NCT03394118 -NCT03396666 -NCT03394157 -NCT03396718 -NCT03394222 -NCT03396757 -NCT03394287 -NCT03396770 -NCT03394300 -NCT03396822 -NCT03394313 -NCT03396848 -NCT03394417 -NCT03396874 -NCT03394443 -NCT03396913 -NCT03394547 -NCT03396926 -NCT03394651 -NCT03396952 -NCT03394664 -NCT03396991 -NCT03394690 -NCT03397017 -NCT03394703 -NCT03397030 -NCT03394742 -NCT03397056 -NCT03394807 -NCT03397160 -NCT03394885 -NCT03397173 -NCT03394898 -NCT03397186 -NCT03394924 -NCT03397199 -NCT03394937 -NCT03397342 -NCT03394963 -NCT03402854 -NCT03397472 -NCT03400202 -NCT03397511 -NCT03400176 -NCT03397537 -NCT03400215 -NCT03397654 -NCT03400254 -NCT03397693 -NCT03400280 -NCT03397706 -NCT03400306 -NCT03397745 -NCT03400332 -NCT03397758 -NCT03400592 -NCT03397784 -NCT03400631 -NCT03397849 -NCT03400644 -NCT03397914 -NCT03400748 -NCT03397953 -NCT03400826 -NCT03398057 -NCT03400865 -NCT03398070 -NCT03400904 -NCT03398122 -NCT03400917 -NCT03398161 -NCT03400930 -NCT03398200 -NCT03400956 -NCT03398252 -NCT03401008 -NCT03398291 -NCT03401047 -NCT03398486 -NCT03401060 -NCT03398512 -NCT03401086 -NCT03398538 -NCT03401125 -NCT03398603 -NCT03401177 -NCT03398629 -NCT03401229 -NCT03398655 -NCT03401281 -NCT03398668 -NCT03401294 -NCT03398694 -NCT03401359 -NCT03398720 -NCT03401385 -NCT03398798 -NCT03401593 -NCT03398811 -NCT03401671 -NCT03398824 -NCT03401710 -NCT03398915 -NCT03401788 -NCT03398967 -NCT03401827 -NCT03398993 -NCT03401840 -NCT03399071 -NCT03401853 -NCT03399110 -NCT03401866 -NCT03399214 -NCT03401879 -NCT03399253 -NCT03401918 -NCT03399331 -NCT03401957 -NCT03399344 -NCT03402048 -NCT03399383 -NCT03402100 -NCT03399396 -NCT03402230 -NCT03399448 -NCT03402269 -NCT03399474 -NCT03402295 -NCT03399487 -NCT03402412 -NCT03399513 -NCT03402425 -NCT03399539 -NCT03402464 -NCT03399552 -NCT03402529 -NCT03399669 -NCT03402594 -NCT03399747 -NCT03402607 -NCT03399773 -NCT03402620 -NCT03399864 -NCT03402633 -NCT03399955 -NCT03402737 -NCT03400072 -NCT03402828 -NCT03400124 -NCT03402841 -NCT03400150 -NCT03513614 -NCT03402880 -NCT03513471 -NCT03402893 -NCT03513484 -NCT03403049 -NCT03513549 -NCT03403062 -NCT03513562 -NCT03403075 -NCT03436550 -NCT03436563 -NCT03436576 -NCT03436654 -NCT03436719 -NCT03436732 -NCT03436745 -NCT03436758 -NCT03436836 -NCT03436862 -NCT03436901 -NCT03436914 -NCT03436953 -NCT03437070 -NCT03437135 -NCT03437161 -NCT03437200 -NCT03437239 -NCT03437252 -NCT03437382 -NCT03437395 -NCT03437486 -NCT03437733 -NCT03437837 -NCT03437915 -NCT03437941 -NCT03508817 -NCT03508856 -NCT03508869 -NCT03508947 -NCT03508986 -NCT03509012 -NCT03509090 -NCT03509103 -NCT03509168 -NCT03509207 -NCT03509246 -NCT03509298 -NCT03509350 -NCT03509428 -NCT03509467 -NCT03509532 -NCT03509584 -NCT03509636 -NCT03509662 -NCT03509675 -NCT03509805 -NCT03509961 -NCT03509974 -NCT03510104 -NCT03510143 -NCT03510156 -NCT03510208 -NCT03510273 -NCT03510312 -NCT03510351 -NCT03510390 -NCT03510416 -NCT03510429 -NCT03510442 -NCT03510455 -NCT03510507 -NCT03510546 -NCT03510559 -NCT03510611 -NCT03510767 -NCT03510858 -NCT03510871 -NCT03510923 -NCT03510936 -NCT03510988 -NCT03511053 -NCT03511079 -NCT03511170 -NCT03511183 -NCT03511196 -NCT03511222 -NCT03511326 -NCT03511378 -NCT03511391 -NCT03511417 -NCT03511625 -NCT03511664 -NCT03511677 -NCT03511690 -NCT03511703 -NCT03511716 -NCT03511768 -NCT03511781 -NCT03511846 -NCT03511963 -NCT03512015 -NCT03512106 -NCT03512158 -NCT03512171 -NCT03512197 -NCT03512262 -NCT03512275 -NCT03512288 -NCT03512340 -NCT03512353 -NCT03512366 -NCT03512405 -NCT03512457 -NCT03512756 -NCT03512834 -NCT03512899 -NCT03512951 -NCT03513055 -NCT03513094 -NCT03513120 -NCT03513211 -NCT03513354 -NCT03513367 -NCT03513458 -NCT03513601 -NCT03403101 -NCT03406273 -NCT03403127 -NCT03406260 -NCT03403205 -NCT03406299 -NCT03403322 -NCT03406325 -NCT03403361 -NCT03406364 -NCT03403387 -NCT03406416 -NCT03403400 -NCT03406468 -NCT03403413 -NCT03406650 -NCT03403452 -NCT03406715 -NCT03403465 -NCT03406858 -NCT03403530 -NCT03406871 -NCT03403595 -NCT03406949 -NCT03403634 -NCT03407053 -NCT03403725 -NCT03407066 -NCT03403777 -NCT03407144 -NCT03403829 -NCT03407170 -NCT03403855 -NCT03407300 -NCT03403920 -NCT03407417 -NCT03404128 -NCT03407430 -NCT03404193 -NCT03407534 -NCT03404297 -NCT03407612 -NCT03404310 -NCT03407651 -NCT03404336 -NCT03407716 -NCT03404362 -NCT03407768 -NCT03404414 -NCT03407781 -NCT03404648 -NCT03407807 -NCT03404726 -NCT03407859 -NCT03404752 -NCT03407963 -NCT03404791 -NCT03407976 -NCT03404804 -NCT03407989 -NCT03404843 -NCT03408080 -NCT03404934 -NCT03408093 -NCT03404960 -NCT03408119 -NCT03405025 -NCT03408158 -NCT03405090 -NCT03408184 -NCT03405142 -NCT03408197 -NCT03405155 -NCT03435848 -NCT03405168 -NCT03435913 -NCT03405272 -NCT03435926 -NCT03405285 -NCT03435939 -NCT03405337 -NCT03435952 -NCT03405363 -NCT03436004 -NCT03405454 -NCT03436056 -NCT03405519 -NCT03436069 -NCT03405597 -NCT03436082 -NCT03405649 -NCT03436108 -NCT03405701 -NCT03436147 -NCT03405792 -NCT03436186 -NCT03405922 -NCT03436225 -NCT03406013 -NCT03436251 -NCT03406130 -NCT03436290 -NCT03406156 -NCT03436329 -NCT03406169 -NCT03436342 -NCT03406195 -NCT03436420 -NCT03406208 -NCT03436433 -NCT03406247 -NCT03436485 -NCT03408210 -NCT03435042 -NCT03408223 -NCT03435107 -NCT03408236 -NCT03435159 -NCT03408314 -NCT03435224 -NCT03408561 -NCT03435237 -NCT03408587 -NCT03435250 -NCT03408613 -NCT03435289 -NCT03408639 -NCT03435302 -NCT03408652 -NCT03435315 -NCT03408665 -NCT03435367 -NCT03408808 -NCT03435380 -NCT03408938 -NCT03435432 -NCT03409029 -NCT03435471 -NCT03409042 -NCT03435536 -NCT03409055 -NCT03435588 -NCT03409120 -NCT03435640 -NCT03409146 -NCT03435653 -NCT03409198 -NCT03435666 -NCT03409380 -NCT03435692 -NCT03409406 -NCT03435731 -NCT03409432 -NCT03435770 -NCT03409458 -NCT03435796 -NCT03409471 -NCT03431090 -NCT03431103 -NCT03431155 -NCT03431272 -NCT03431285 -NCT03431311 -NCT03431350 -NCT03431415 -NCT03431428 -NCT03431584 -NCT03431727 -NCT03431753 -NCT03431922 -NCT03431948 -NCT03432026 -NCT03432052 -NCT03432117 -NCT03432143 -NCT03432156 -NCT03432221 -NCT03432247 -NCT03432299 -NCT03432416 -NCT03432507 -NCT03432520 -NCT03432533 -NCT03432559 -NCT03432598 -NCT03432611 -NCT03432637 -NCT03432676 -NCT03432741 -NCT03432780 -NCT03432806 -NCT03432897 -NCT03432936 -NCT03432949 -NCT03432962 -NCT03433014 -NCT03433027 -NCT03433118 -NCT03433183 -NCT03433196 -NCT03433274 -NCT03433287 -NCT03433313 -NCT03433404 -NCT03433417 -NCT03433430 -NCT03433469 -NCT03433703 -NCT03433716 -NCT03433781 -NCT03433807 -NCT03433833 -NCT03433898 -NCT03433950 -NCT03434067 -NCT03434080 -NCT03434093 -NCT03434132 -NCT03434158 -NCT03434262 -NCT03434379 -NCT03434418 -NCT03434470 -NCT03434678 -NCT03434704 -NCT03434717 -NCT03434730 -NCT03434769 -NCT03434834 -NCT03434925 -NCT03434951 -NCT03435016 -NCT03409510 -NCT03429582 -NCT03409614 -NCT03429764 -NCT03409679 -NCT03429777 -NCT03409705 -NCT03429803 -NCT03409822 -NCT03429816 -NCT03409848 -NCT03429868 -NCT03409861 -NCT03429894 -NCT03409874 -NCT03429907 -NCT03409913 -NCT03429972 -NCT03410004 -NCT03430011 -NCT03410030 -NCT03430063 -NCT03410043 -NCT03430128 -NCT03410069 -NCT03430141 -NCT03410095 -NCT03430297 -NCT03410108 -NCT03430440 -NCT03410121 -NCT03430466 -NCT03410134 -NCT03430479 -NCT03410160 -NCT03430518 -NCT03410290 -NCT03430648 -NCT03410368 -NCT03430687 -NCT03410407 -NCT03430700 -NCT03410446 -NCT03430765 -NCT03410498 -NCT03430778 -NCT03410615 -NCT03430791 -NCT03410628 -NCT03430804 -NCT03410693 -NCT03430843 -NCT03410732 -NCT03430856 -NCT03410745 -NCT03430869 -NCT03410784 -NCT03430882 -NCT03410862 -NCT03430895 -NCT03410875 -NCT03430934 -NCT03410888 -NCT03420911 -NCT03420963 -NCT03421028 -NCT03421236 -NCT03421288 -NCT03421340 -NCT03421418 -NCT03421522 -NCT03421652 -NCT03421782 -NCT03421834 -NCT03421899 -NCT03421912 -NCT03421925 -NCT03421951 -NCT03422003 -NCT03422029 -NCT03422094 -NCT03422198 -NCT03427827 -NCT03427853 -NCT03427944 -NCT03427957 -NCT03427970 -NCT03427983 -NCT03428022 -NCT03428048 -NCT03428113 -NCT03428126 -NCT03428217 -NCT03428347 -NCT03428373 -NCT03428425 -NCT03428477 -NCT03428529 -NCT03428581 -NCT03428607 -NCT03428672 -NCT03428802 -NCT03428841 -NCT03428854 -NCT03428919 -NCT03428958 -NCT03429062 -NCT03429101 -NCT03429127 -NCT03429218 -NCT03429244 -NCT03429296 -NCT03429387 -NCT03429400 -NCT03429426 -NCT03429478 -NCT03429517 -NCT03430947 -NCT03410901 -NCT03413514 -NCT03410914 -NCT03413462 -NCT03410927 -NCT03413553 -NCT03411031 -NCT03413579 -NCT03411070 -NCT03413605 -NCT03411161 -NCT03413631 -NCT03411174 -NCT03413683 -NCT03411187 -NCT03413800 -NCT03411200 -NCT03413826 -NCT03411226 -NCT03413839 -NCT03411252 -NCT03413865 -NCT03411278 -NCT03413891 -NCT03411408 -NCT03413904 -NCT03411538 -NCT03413930 -NCT03411577 -NCT03413995 -NCT03411629 -NCT03414021 -NCT03411642 -NCT03414034 -NCT03411811 -NCT03414047 -NCT03411850 -NCT03414125 -NCT03411863 -NCT03414229 -NCT03411915 -NCT03419130 -NCT03411928 -NCT03419234 -NCT03411967 -NCT03419247 -NCT03412019 -NCT03419338 -NCT03412045 -NCT03419364 -NCT03412058 -NCT03419403 -NCT03412201 -NCT03419481 -NCT03412266 -NCT03419559 -NCT03412292 -NCT03419585 -NCT03412357 -NCT03419637 -NCT03412383 -NCT03419650 -NCT03412396 -NCT03419689 -NCT03412409 -NCT03419741 -NCT03412474 -NCT03419754 -NCT03412526 -NCT03419767 -NCT03412565 -NCT03419858 -NCT03412591 -NCT03419897 -NCT03412630 -NCT03420014 -NCT03412643 -NCT03420079 -NCT03412669 -NCT03420105 -NCT03412708 -NCT03420118 -NCT03412773 -NCT03420144 -NCT03412786 -NCT03420157 -NCT03412799 -NCT03420248 -NCT03412812 -NCT03420274 -NCT03412877 -NCT03420300 -NCT03412890 -NCT03420339 -NCT03412929 -NCT03420443 -NCT03412955 -NCT03420482 -NCT03412994 -NCT03420508 -NCT03413085 -NCT03420521 -NCT03413202 -NCT03420547 -NCT03413254 -NCT03420651 -NCT03413332 -NCT03420742 -NCT03413358 -NCT03420846 -NCT03413436 -NCT03420885 -NCT03414411 -NCT03416803 -NCT03414424 -NCT03416777 -NCT03414450 -NCT03416816 -NCT03414593 -NCT03416842 -NCT03414658 -NCT03416933 -NCT03414684 -NCT03416998 -NCT03414697 -NCT03417037 -NCT03414710 -NCT03417063 -NCT03414749 -NCT03417102 -NCT03414775 -NCT03417154 -NCT03414814 -NCT03417284 -NCT03414853 -NCT03417297 -NCT03414905 -NCT03417414 -NCT03414944 -NCT03417427 -NCT03414957 -NCT03417544 -NCT03414970 -NCT03417570 -NCT03414983 -NCT03417596 -NCT03415126 -NCT03417622 -NCT03415165 -NCT03417648 -NCT03415204 -NCT03417739 -NCT03415269 -NCT03417765 -NCT03415321 -NCT03417817 -NCT03415334 -NCT03417830 -NCT03415347 -NCT03417843 -NCT03415399 -NCT03417869 -NCT03415477 -NCT03417882 -NCT03415646 -NCT03417895 -NCT03415659 -NCT03417921 -NCT03415763 -NCT03417973 -NCT03415776 -NCT03418025 -NCT03415802 -NCT03418038 -NCT03415854 -NCT03418116 -NCT03415880 -NCT03418207 -NCT03415945 -NCT03418298 -NCT03416010 -NCT03418324 -NCT03416062 -NCT03418337 -NCT03416101 -NCT03418441 -NCT03416153 -NCT03418480 -NCT03416179 -NCT03418558 -NCT03416205 -NCT03418584 -NCT03416231 -NCT03418597 -NCT03416244 -NCT03418610 -NCT03416283 -NCT03418662 -NCT03416309 -NCT03418792 -NCT03416322 -NCT03418805 -NCT03416335 -NCT03418818 -NCT03416374 -NCT03418844 -NCT03416452 -NCT03418857 -NCT03416517 -NCT03418883 -NCT03416530 -NCT03418922 -NCT03416582 -NCT03418935 -NCT03416647 -NCT03418948 -NCT03416686 -NCT03418961 -NCT03416725 -NCT03418987 -NCT03416738 -NCT03419000 -NCT03416751 -NCT03427814 -NCT03422211 -NCT03425279 -NCT03422302 -NCT03425240 -NCT03422315 -NCT03425292 -NCT03422380 -NCT03425331 -NCT03422393 -NCT03425383 -NCT03422432 -NCT03425461 -NCT03422445 -NCT03425526 -NCT03422523 -NCT03425565 -NCT03422536 -NCT03425578 -NCT03422679 -NCT03425591 -NCT03422731 -NCT03425617 -NCT03422744 -NCT03425643 -NCT03422796 -NCT03425656 -NCT03422809 -NCT03425773 -NCT03422835 -NCT03425838 -NCT03422874 -NCT03425851 -NCT03423056 -NCT03425864 -NCT03423082 -NCT03426189 -NCT03423199 -NCT03426241 -NCT03423264 -NCT03426254 -NCT03423277 -NCT03426306 -NCT03423303 -NCT03426319 -NCT03423472 -NCT03426332 -NCT03423498 -NCT03426371 -NCT03423511 -NCT03426384 -NCT03423537 -NCT03426475 -NCT03423550 -NCT03426514 -NCT03423628 -NCT03426605 -NCT03423706 -NCT03426657 -NCT03423771 -NCT03426722 -NCT03423784 -NCT03426748 -NCT03423836 -NCT03426800 -NCT03423849 -NCT03426839 -NCT03423927 -NCT03426878 -NCT03423966 -NCT03426891 -NCT03423979 -NCT03426904 -NCT03423992 -NCT03426943 -NCT03424005 -NCT03426982 -NCT03424018 -NCT03426995 -NCT03424044 -NCT03427034 -NCT03424122 -NCT03427073 -NCT03424278 -NCT03427099 -NCT03424291 -NCT03427125 -NCT03424499 -NCT03427216 -NCT03424512 -NCT03427229 -NCT03424603 -NCT03427242 -NCT03424694 -NCT03427268 -NCT03424733 -NCT03427320 -NCT03424759 -NCT03427346 -NCT03424772 -NCT03427359 -NCT03424837 -NCT03427411 -NCT03424850 -NCT03427476 -NCT03424980 -NCT03427671 -NCT03425006 -NCT03427684 -NCT03425201 -NCT03427710 -NCT03425214 -NCT03508765 -NCT03438201 -NCT03506815 -NCT03438266 -NCT03506906 -NCT03438318 -NCT03506919 -NCT03438344 -NCT03506997 -NCT03438396 -NCT03507088 -NCT03438435 -NCT03507166 -NCT03438474 -NCT03507218 -NCT03438552 -NCT03507244 -NCT03438708 -NCT03507257 -NCT03438734 -NCT03507322 -NCT03438760 -NCT03507361 -NCT03438786 -NCT03507374 -NCT03439033 -NCT03507400 -NCT03439046 -NCT03507452 -NCT03439085 -NCT03507465 -NCT03439137 -NCT03507491 -NCT03439163 -NCT03507530 -NCT03439202 -NCT03507543 -NCT03439215 -NCT03507569 -NCT03439254 -NCT03507608 -NCT03439280 -NCT03507673 -NCT03439293 -NCT03507699 -NCT03439371 -NCT03507725 -NCT03439397 -NCT03507829 -NCT03439449 -NCT03507842 -NCT03439462 -NCT03507959 -NCT03439501 -NCT03507998 -NCT03439592 -NCT03508011 -NCT03439670 -NCT03508024 -NCT03439696 -NCT03508037 -NCT03439709 -NCT03508076 -NCT03439735 -NCT03508115 -NCT03439761 -NCT03508180 -NCT03439787 -NCT03508232 -NCT03439891 -NCT03508284 -NCT03439904 -NCT03508440 -NCT03439982 -NCT03508479 -NCT03440034 -NCT03508518 -NCT03440151 -NCT03508570 -NCT03440164 -NCT03508622 -NCT03440346 -NCT03508726 -NCT03440359 -NCT03508752 -NCT03440398 -NCT03505411 -NCT03505528 -NCT03505554 -NCT03505606 -NCT03505645 -NCT03505671 -NCT03505710 -NCT03505762 -NCT03505775 -NCT03505827 -NCT03505879 -NCT03505944 -NCT03505983 -NCT03505996 -NCT03506009 -NCT03506048 -NCT03506139 -NCT03506217 -NCT03506230 -NCT03506256 -NCT03506295 -NCT03506321 -NCT03506334 -NCT03506360 -NCT03506373 -NCT03506425 -NCT03506438 -NCT03506451 -NCT03506607 -NCT03506802 -NCT03440411 -NCT03443973 -NCT03440437 -NCT03443921 -NCT03440450 -NCT03444025 -NCT03440489 -NCT03444181 -NCT03440515 -NCT03444194 -NCT03440554 -NCT03444259 -NCT03440567 -NCT03444272 -NCT03440632 -NCT03444298 -NCT03440697 -NCT03444324 -NCT03440827 -NCT03444376 -NCT03440879 -NCT03444428 -NCT03440957 -NCT03444519 -NCT03441048 -NCT03444532 -NCT03441061 -NCT03444545 -NCT03441100 -NCT03444584 -NCT03441113 -NCT03444623 -NCT03441191 -NCT03444649 -NCT03441347 -NCT03444688 -NCT03441360 -NCT03461588 -NCT03441373 -NCT03461601 -NCT03441464 -NCT03461640 -NCT03441516 -NCT03461835 -NCT03441555 -NCT03461952 -NCT03441958 -NCT03462056 -NCT03442049 -NCT03462095 -NCT03442062 -NCT03462160 -NCT03442127 -NCT03462212 -NCT03442296 -NCT03462251 -NCT03442400 -NCT03462316 -NCT03442452 -NCT03462329 -NCT03442478 -NCT03462342 -NCT03442504 -NCT03462459 -NCT03442543 -NCT03462563 -NCT03442556 -NCT03462589 -NCT03442569 -NCT03462602 -NCT03442647 -NCT03462641 -NCT03442673 -NCT03462706 -NCT03442686 -NCT03462719 -NCT03442764 -NCT03504449 -NCT03442777 -NCT03504462 -NCT03443011 -NCT03504475 -NCT03443115 -NCT03504488 -NCT03443128 -NCT03504618 -NCT03443258 -NCT03504644 -NCT03443414 -NCT03504761 -NCT03443492 -NCT03504787 -NCT03443505 -NCT03504865 -NCT03443544 -NCT03504878 -NCT03443596 -NCT03504995 -NCT03443609 -NCT03505021 -NCT03443622 -NCT03505112 -NCT03443635 -NCT03505151 -NCT03443661 -NCT03505203 -NCT03443765 -NCT03505216 -NCT03443843 -NCT03505229 -NCT03443856 -NCT03505320 -NCT03444701 -NCT03460613 -NCT03444714 -NCT03460678 -NCT03444753 -NCT03460743 -NCT03444766 -NCT03460795 -NCT03444831 -NCT03460873 -NCT03444844 -NCT03460912 -NCT03444870 -NCT03460925 -NCT03444883 -NCT03460977 -NCT03444948 -NCT03461068 -NCT03445000 -NCT03461159 -NCT03445013 -NCT03461185 -NCT03445195 -NCT03461237 -NCT03445260 -NCT03461250 -NCT03445403 -NCT03461354 -NCT03445481 -NCT03461393 -NCT03445533 -NCT03461458 -NCT03445559 -NCT03461536 -NCT03445572 -NCT03456752 -NCT03456804 -NCT03456843 -NCT03456882 -NCT03456895 -NCT03456908 -NCT03456934 -NCT03456973 -NCT03457025 -NCT03457116 -NCT03457142 -NCT03457168 -NCT03457233 -NCT03457246 -NCT03457337 -NCT03457363 -NCT03457389 -NCT03457467 -NCT03457506 -NCT03457532 -NCT03457571 -NCT03457610 -NCT03457753 -NCT03457766 -NCT03457779 -NCT03457805 -NCT03457818 -NCT03457844 -NCT03457857 -NCT03457896 -NCT03457909 -NCT03457948 -NCT03457961 -NCT03458000 -NCT03458026 -NCT03458117 -NCT03458130 -NCT03458221 -NCT03458234 -NCT03458247 -NCT03458260 -NCT03458312 -NCT03458546 -NCT03458559 -NCT03458598 -NCT03458689 -NCT03458702 -NCT03458728 -NCT03458780 -NCT03458806 -NCT03458871 -NCT03458949 -NCT03458975 -NCT03459170 -NCT03459222 -NCT03459235 -NCT03459248 -NCT03459261 -NCT03459326 -NCT03459339 -NCT03459352 -NCT03459417 -NCT03459443 -NCT03459469 -NCT03459482 -NCT03459534 -NCT03459547 -NCT03459599 -NCT03459651 -NCT03459729 -NCT03459755 -NCT03459781 -NCT03459820 -NCT03459846 -NCT03459859 -NCT03459898 -NCT03460067 -NCT03460080 -NCT03460171 -NCT03460236 -NCT03460275 -NCT03460457 -NCT03460470 -NCT03460483 -NCT03460522 -NCT03460561 -NCT03445611 -NCT03448718 -NCT03445624 -NCT03448666 -NCT03445663 -NCT03448757 -NCT03445858 -NCT03448770 -NCT03445936 -NCT03448835 -NCT03445962 -NCT03448874 -NCT03446001 -NCT03448939 -NCT03446040 -NCT03448952 -NCT03446092 -NCT03448978 -NCT03446105 -NCT03449030 -NCT03446118 -NCT03449082 -NCT03446157 -NCT03449095 -NCT03446261 -NCT03449108 -NCT03446339 -NCT03449134 -NCT03446352 -NCT03449147 -NCT03446417 -NCT03449173 -NCT03446534 -NCT03449225 -NCT03446612 -NCT03449238 -NCT03446625 -NCT03449264 -NCT03446638 -NCT03449303 -NCT03446768 -NCT03449316 -NCT03446807 -NCT03449368 -NCT03446989 -NCT03449381 -NCT03447015 -NCT03449433 -NCT03447093 -NCT03449459 -NCT03447106 -NCT03449498 -NCT03447132 -NCT03449511 -NCT03447145 -NCT03449524 -NCT03447314 -NCT03449563 -NCT03447340 -NCT03449628 -NCT03447470 -NCT03449641 -NCT03447483 -NCT03449719 -NCT03447639 -NCT03455517 -NCT03447678 -NCT03455556 -NCT03447691 -NCT03455712 -NCT03447769 -NCT03455751 -NCT03447782 -NCT03455764 -NCT03447808 -NCT03455790 -NCT03447951 -NCT03455829 -NCT03448029 -NCT03455907 -NCT03448042 -NCT03455998 -NCT03448055 -NCT03456024 -NCT03448146 -NCT03456076 -NCT03448211 -NCT03456167 -NCT03448250 -NCT03456349 -NCT03448276 -NCT03456401 -NCT03448341 -NCT03456427 -NCT03448354 -NCT03456466 -NCT03448393 -NCT03456479 -NCT03448458 -NCT03456531 -NCT03448471 -NCT03456544 -NCT03448484 -NCT03456557 -NCT03448510 -NCT03456622 -NCT03448536 -NCT03456661 -NCT03448549 -NCT03456700 -NCT03448640 -NCT03456726 -NCT03449901 -NCT03452774 -NCT03449966 -NCT03452735 -NCT03449979 -NCT03452787 -NCT03450018 -NCT03452852 -NCT03450044 -NCT03452930 -NCT03450057 -NCT03452982 -NCT03450109 -NCT03453034 -NCT03450122 -NCT03453164 -NCT03450135 -NCT03453216 -NCT03450213 -NCT03453255 -NCT03450252 -NCT03453307 -NCT03450330 -NCT03453346 -NCT03450343 -NCT03453424 -NCT03450369 -NCT03453489 -NCT03450421 -NCT03453528 -NCT03450473 -NCT03453580 -NCT03450538 -NCT03453593 -NCT03450564 -NCT03453632 -NCT03450603 -NCT03453645 -NCT03450616 -NCT03453697 -NCT03450642 -NCT03453788 -NCT03450668 -NCT03453853 -NCT03450681 -NCT03453905 -NCT03450811 -NCT03453918 -NCT03450824 -NCT03453931 -NCT03450850 -NCT03453944 -NCT03450889 -NCT03453970 -NCT03450967 -NCT03454009 -NCT03451045 -NCT03454035 -NCT03451084 -NCT03454087 -NCT03451123 -NCT03454165 -NCT03451162 -NCT03454243 -NCT03451266 -NCT03454282 -NCT03451292 -NCT03454295 -NCT03451331 -NCT03454360 -NCT03451435 -NCT03454451 -NCT03451513 -NCT03454464 -NCT03451643 -NCT03454477 -NCT03451734 -NCT03454516 -NCT03451773 -NCT03454529 -NCT03451799 -NCT03454542 -NCT03451825 -NCT03454620 -NCT03451942 -NCT03454750 -NCT03451968 -NCT03454763 -NCT03452111 -NCT03454919 -NCT03452137 -NCT03454945 -NCT03452150 -NCT03454971 -NCT03452267 -NCT03454984 -NCT03452280 -NCT03455023 -NCT03452319 -NCT03455036 -NCT03452332 -NCT03455140 -NCT03452384 -NCT03455153 -NCT03452462 -NCT03455205 -NCT03452553 -NCT03455270 -NCT03452579 -NCT03455504 -NCT03452696 -NCT03504423 -NCT03462810 -NCT03504293 -NCT03462836 -NCT03504345 -NCT03463057 -NCT03504397 -NCT03463161 -NCT03468933 -NCT03468959 -NCT03468985 -NCT03469011 -NCT03469024 -NCT03469037 -NCT03469050 -NCT03469219 -NCT03469258 -NCT03469271 -NCT03469284 -NCT03475186 -NCT03475199 -NCT03475251 -NCT03475355 -NCT03475368 -NCT03475524 -NCT03475589 -NCT03475615 -NCT03475628 -NCT03475680 -NCT03475823 -NCT03475888 -NCT03475953 -NCT03475966 -NCT03475992 -NCT03476018 -NCT03476044 -NCT03476083 -NCT03476135 -NCT03476174 -NCT03476187 -NCT03476226 -NCT03476239 -NCT03476317 -NCT03476330 -NCT03476434 -NCT03476447 -NCT03476486 -NCT03476564 -NCT03476616 -NCT03476681 -NCT03476798 -NCT03476941 -NCT03477019 -NCT03477110 -NCT03477149 -NCT03477162 -NCT03477175 -NCT03477188 -NCT03477201 -NCT03477240 -NCT03477253 -NCT03477396 -NCT03477422 -NCT03483298 -NCT03483324 -NCT03483337 -NCT03483441 -NCT03483519 -NCT03483610 -NCT03483688 -NCT03483844 -NCT03483883 -NCT03483935 -NCT03483948 -NCT03484000 -NCT03484026 -NCT03484039 -NCT03484078 -NCT03484130 -NCT03484143 -NCT03484195 -NCT03484221 -NCT03484299 -NCT03484416 -NCT03484429 -NCT03484520 -NCT03502681 -NCT03502720 -NCT03502733 -NCT03502746 -NCT03502785 -NCT03502798 -NCT03502850 -NCT03502993 -NCT03503032 -NCT03503110 -NCT03503123 -NCT03503136 -NCT03503162 -NCT03503175 -NCT03503240 -NCT03503305 -NCT03503344 -NCT03503409 -NCT03503474 -NCT03503487 -NCT03503500 -NCT03503513 -NCT03503539 -NCT03503604 -NCT03503617 -NCT03503630 -NCT03503682 -NCT03503721 -NCT03503734 -NCT03503786 -NCT03503838 -NCT03503864 -NCT03503955 -NCT03503994 -NCT03504046 -NCT03504150 -NCT03504163 -NCT03504202 -NCT03504280 -NCT03504410 -NCT03463200 -NCT03465826 -NCT03463213 -NCT03465813 -NCT03463226 -NCT03465891 -NCT03463252 -NCT03465982 -NCT03463265 -NCT03466099 -NCT03463408 -NCT03466216 -NCT03463460 -NCT03466268 -NCT03463473 -NCT03466294 -NCT03463525 -NCT03466320 -NCT03463681 -NCT03466398 -NCT03463694 -NCT03466450 -NCT03463720 -NCT03466502 -NCT03463733 -NCT03466593 -NCT03463759 -NCT03466684 -NCT03463811 -NCT03466710 -NCT03463824 -NCT03466736 -NCT03463850 -NCT03466788 -NCT03463876 -NCT03466827 -NCT03463889 -NCT03466918 -NCT03463928 -NCT03466957 -NCT03463941 -NCT03467165 -NCT03463954 -NCT03467178 -NCT03464032 -NCT03467191 -NCT03464188 -NCT03467256 -NCT03464201 -NCT03467347 -NCT03464253 -NCT03467360 -NCT03464279 -NCT03467373 -NCT03464305 -NCT03467386 -NCT03464344 -NCT03467438 -NCT03464487 -NCT03467477 -NCT03464578 -NCT03467516 -NCT03464656 -NCT03467685 -NCT03464682 -NCT03467789 -NCT03464695 -NCT03467828 -NCT03464734 -NCT03467867 -NCT03464851 -NCT03467880 -NCT03464916 -NCT03468010 -NCT03464942 -NCT03468075 -NCT03464968 -NCT03468153 -NCT03465020 -NCT03468205 -NCT03465111 -NCT03468218 -NCT03465150 -NCT03468231 -NCT03465176 -NCT03468244 -NCT03465202 -NCT03468335 -NCT03465267 -NCT03468374 -NCT03465293 -NCT03468387 -NCT03465345 -NCT03468426 -NCT03465423 -NCT03468452 -NCT03465527 -NCT03468465 -NCT03465540 -NCT03468491 -NCT03465579 -NCT03468634 -NCT03465592 -NCT03468660 -NCT03465618 -NCT03468712 -NCT03465722 -NCT03468725 -NCT03465748 -NCT03468751 -NCT03465761 -NCT03475134 -NCT03469310 -NCT03472183 -NCT03469323 -NCT03472092 -NCT03469362 -NCT03472196 -NCT03469479 -NCT03472235 -NCT03469531 -NCT03472274 -NCT03469544 -NCT03472352 -NCT03469557 -NCT03472365 -NCT03469583 -NCT03472378 -NCT03469609 -NCT03472560 -NCT03469674 -NCT03472573 -NCT03469713 -NCT03472586 -NCT03469726 -NCT03472599 -NCT03469804 -NCT03472625 -NCT03469895 -NCT03472677 -NCT03469960 -NCT03472716 -NCT03470090 -NCT03472807 -NCT03470155 -NCT03472833 -NCT03470220 -NCT03472859 -NCT03470246 -NCT03472872 -NCT03470259 -NCT03472924 -NCT03470285 -NCT03473119 -NCT03470298 -NCT03473236 -NCT03470350 -NCT03473457 -NCT03470402 -NCT03473496 -NCT03470545 -NCT03473574 -NCT03470662 -NCT03473587 -NCT03470740 -NCT03473639 -NCT03470766 -NCT03473691 -NCT03470805 -NCT03473730 -NCT03470922 -NCT03473743 -NCT03471052 -NCT03473756 -NCT03471065 -NCT03473925 -NCT03471156 -NCT03473938 -NCT03471221 -NCT03474016 -NCT03471260 -NCT03474068 -NCT03471273 -NCT03474081 -NCT03471286 -NCT03474094 -NCT03471312 -NCT03474107 -NCT03471351 -NCT03474133 -NCT03471364 -NCT03474159 -NCT03471442 -NCT03474198 -NCT03471455 -NCT03474237 -NCT03471468 -NCT03474263 -NCT03471494 -NCT03474289 -NCT03471546 -NCT03474341 -NCT03471650 -NCT03474367 -NCT03471663 -NCT03474406 -NCT03471702 -NCT03474497 -NCT03471728 -NCT03474575 -NCT03471767 -NCT03474601 -NCT03471832 -NCT03474744 -NCT03471884 -NCT03474822 -NCT03471936 -NCT03474835 -NCT03472014 -NCT03474861 -NCT03472027 -NCT03475004 -NCT03472053 -NCT03483194 -NCT03477500 -NCT03480256 -NCT03477513 -NCT03480243 -NCT03477539 -NCT03480282 -NCT03477552 -NCT03480334 -NCT03477565 -NCT03480360 -NCT03477591 -NCT03480438 -NCT03477760 -NCT03480490 -NCT03477864 -NCT03480503 -NCT03477890 -NCT03480646 -NCT03477929 -NCT03480672 -NCT03477942 -NCT03480750 -NCT03478033 -NCT03480776 -NCT03478072 -NCT03480841 -NCT03478163 -NCT03480867 -NCT03478176 -NCT03480893 -NCT03478189 -NCT03480958 -NCT03478358 -NCT03480997 -NCT03478371 -NCT03481010 -NCT03478384 -NCT03481101 -NCT03478397 -NCT03481114 -NCT03478423 -NCT03481296 -NCT03478449 -NCT03481491 -NCT03478462 -NCT03481504 -NCT03478488 -NCT03481517 -NCT03478514 -NCT03481556 -NCT03478826 -NCT03481647 -NCT03478852 -NCT03481816 -NCT03478865 -NCT03481829 -NCT03478878 -NCT03481868 -NCT03478891 -NCT03481920 -NCT03478904 -NCT03481946 -NCT03478982 -NCT03481998 -NCT03478995 -NCT03482050 -NCT03479008 -NCT03482089 -NCT03479151 -NCT03482102 -NCT03479190 -NCT03482128 -NCT03479268 -NCT03482180 -NCT03479385 -NCT03482310 -NCT03479437 -NCT03482323 -NCT03479463 -NCT03482362 -NCT03479476 -NCT03482375 -NCT03479528 -NCT03482401 -NCT03479554 -NCT03482479 -NCT03479567 -NCT03482557 -NCT03479645 -NCT03482570 -NCT03479749 -NCT03482609 -NCT03479788 -NCT03482713 -NCT03479814 -NCT03482791 -NCT03479827 -NCT03482895 -NCT03479905 -NCT03482921 -NCT03479918 -NCT03482960 -NCT03479983 -NCT03483012 -NCT03480022 -NCT03483038 -NCT03480074 -NCT03483090 -NCT03480152 -NCT03483103 -NCT03480230 -NCT03502668 -NCT03484611 -NCT03499756 -NCT03484702 -NCT03499795 -NCT03484819 -NCT03499808 -NCT03484832 -NCT03499834 -NCT03484923 -NCT03499899 -NCT03484949 -NCT03499964 -NCT03484962 -NCT03499990 -NCT03485027 -NCT03500016 -NCT03485079 -NCT03500068 -NCT03485118 -NCT03500133 -NCT03485170 -NCT03500263 -NCT03485183 -NCT03500328 -NCT03485209 -NCT03500367 -NCT03485378 -NCT03500380 -NCT03485495 -NCT03500393 -NCT03485547 -NCT03500419 -NCT03485625 -NCT03500445 -NCT03485729 -NCT03500588 -NCT03485768 -NCT03500666 -NCT03485911 -NCT03500692 -NCT03486067 -NCT03500770 -NCT03486119 -NCT03500861 -NCT03486197 -NCT03500874 -NCT03486262 -NCT03500991 -NCT03486301 -NCT03501056 -NCT03486314 -NCT03501368 -NCT03486327 -NCT03501381 -NCT03486340 -NCT03501394 -NCT03486366 -NCT03501407 -NCT03486431 -NCT03501420 -NCT03486496 -NCT03501680 -NCT03486509 -NCT03501758 -NCT03486587 -NCT03501771 -NCT03486626 -NCT03501849 -NCT03486678 -NCT03501901 -NCT03486730 -NCT03501966 -NCT03486821 -NCT03501979 -NCT03486873 -NCT03502135 -NCT03486886 -NCT03502148 -NCT03486899 -NCT03502213 -NCT03486912 -NCT03502265 -NCT03487016 -NCT03502317 -NCT03487055 -NCT03502330 -NCT03487120 -NCT03502343 -NCT03487133 -NCT03502395 -NCT03487237 -NCT03502421 -NCT03487250 -NCT03502473 -NCT03487276 -NCT03502577 -NCT03487523 -NCT03502629 -NCT03487549 -NCT03502655 -NCT03487588 -NCT03499210 -NCT03499301 -NCT03499353 -NCT03499418 -NCT03499444 -NCT03499496 -NCT03499522 -NCT03499535 -NCT03499561 -NCT03499613 -NCT03499626 -NCT03499665 -NCT03487601 -NCT03490487 -NCT03487666 -NCT03490474 -NCT03487705 -NCT03496402 -NCT03487731 -NCT03496519 -NCT03487757 -NCT03496545 -NCT03487809 -NCT03496558 -NCT03487900 -NCT03496662 -NCT03487939 -NCT03496753 -NCT03487965 -NCT03496766 -NCT03488095 -NCT03496779 -NCT03488134 -NCT03496792 -NCT03488147 -NCT03496805 -NCT03488160 -NCT03496818 -NCT03488212 -NCT03496831 -NCT03488225 -NCT03496844 -NCT03488251 -NCT03496961 -NCT03488472 -NCT03497026 -NCT03488485 -NCT03497039 -NCT03488537 -NCT03497117 -NCT03488589 -NCT03497208 -NCT03488628 -NCT03497377 -NCT03488667 -NCT03497429 -NCT03488693 -NCT03497442 -NCT03488797 -NCT03497455 -NCT03488810 -NCT03497468 -NCT03488953 -NCT03497520 -NCT03489031 -NCT03497533 -NCT03489044 -NCT03497663 -NCT03489057 -NCT03497702 -NCT03489213 -NCT03497728 -NCT03489252 -NCT03497767 -NCT03489265 -NCT03497806 -NCT03489278 -NCT03497819 -NCT03489317 -NCT03497845 -NCT03489343 -NCT03497871 -NCT03489356 -NCT03497897 -NCT03489369 -NCT03498001 -NCT03489525 -NCT03498014 -NCT03489616 -NCT03498053 -NCT03489681 -NCT03498157 -NCT03489707 -NCT03498196 -NCT03489824 -NCT03498222 -NCT03489876 -NCT03498326 -NCT03489993 -NCT03498378 -NCT03490032 -NCT03498417 -NCT03490045 -NCT03498430 -NCT03490071 -NCT03498521 -NCT03490084 -NCT03498612 -NCT03490123 -NCT03498625 -NCT03490214 -NCT03498664 -NCT03490279 -NCT03498716 -NCT03490292 -NCT03498742 -NCT03490344 -NCT03498794 -NCT03490370 -NCT03498885 -NCT03490409 -NCT03498976 -NCT03490448 -NCT03499119 -NCT03490500 -NCT03493594 -NCT03490513 -NCT03493581 -NCT03490539 -NCT03493633 -NCT03490565 -NCT03493646 -NCT03490578 -NCT03493789 -NCT03490669 -NCT03493802 -NCT03490747 -NCT03493854 -NCT03490760 -NCT03493880 -NCT03490773 -NCT03493906 -NCT03490799 -NCT03493932 -NCT03490838 -NCT03493945 -NCT03490890 -NCT03493971 -NCT03491111 -NCT03493997 -NCT03491176 -NCT03494023 -NCT03491280 -NCT03494166 -NCT03491345 -NCT03494179 -NCT03491410 -NCT03494231 -NCT03491436 -NCT03494283 -NCT03491462 -NCT03494322 -NCT03491540 -NCT03494400 -NCT03491579 -NCT03494452 -NCT03491631 -NCT03494517 -NCT03491657 -NCT03494569 -NCT03491683 -NCT03494621 -NCT03491696 -NCT03494634 -NCT03491709 -NCT03494673 -NCT03491878 -NCT03494751 -NCT03491904 -NCT03494764 -NCT03492073 -NCT03494816 -NCT03492125 -NCT03494881 -NCT03492138 -NCT03494946 -NCT03492164 -NCT03495050 -NCT03492268 -NCT03495115 -NCT03492450 -NCT03495167 -NCT03492463 -NCT03495219 -NCT03492515 -NCT03495258 -NCT03492671 -NCT03495271 -NCT03492762 -NCT03495323 -NCT03492775 -NCT03495388 -NCT03492827 -NCT03495427 -NCT03492853 -NCT03495440 -NCT03492918 -NCT03495479 -NCT03493009 -NCT03495492 -NCT03493048 -NCT03495518 -NCT03493061 -NCT03495570 -NCT03493204 -NCT03495609 -NCT03493217 -NCT03495661 -NCT03493230 -NCT03495713 -NCT03493360 -NCT03495830 -NCT03493425 -NCT03495882 -NCT03493438 -NCT03495921 -NCT03493451 -NCT03495960 -NCT03493464 -NCT03496142 -NCT03493477 -NCT03496220 -NCT03493529 -NCT03496233 -NCT03493542 -NCT03518294 -NCT03513666 -NCT03515863 -NCT03513679 -NCT03515837 -NCT03513705 -NCT03515941 -NCT03513731 -NCT03516045 -NCT03513744 -NCT03516071 -NCT03513757 -NCT03516084 -NCT03513861 -NCT03516123 -NCT03513887 -NCT03516149 -NCT03513900 -NCT03516188 -NCT03513952 -NCT03516214 -NCT03514017 -NCT03516240 -NCT03514069 -NCT03516253 -NCT03514082 -NCT03516279 -NCT03514108 -NCT03516448 -NCT03514121 -NCT03516487 -NCT03514173 -NCT03516500 -NCT03514251 -NCT03516526 -NCT03514277 -NCT03516617 -NCT03514329 -NCT03516708 -NCT03514368 -NCT03516747 -NCT03514381 -NCT03516760 -NCT03514407 -NCT03516773 -NCT03514433 -NCT03516812 -NCT03514459 -NCT03516929 -NCT03514550 -NCT03516981 -NCT03514654 -NCT03516994 -NCT03514667 -NCT03517072 -NCT03514680 -NCT03517111 -NCT03514719 -NCT03517137 -NCT03514836 -NCT03517150 -NCT03514849 -NCT03517176 -NCT03514888 -NCT03517319 -NCT03514901 -NCT03517371 -NCT03514927 -NCT03517423 -NCT03514979 -NCT03517449 -NCT03515018 -NCT03517488 -NCT03515044 -NCT03517514 -NCT03515070 -NCT03517579 -NCT03515174 -NCT03517618 -NCT03515187 -NCT03517670 -NCT03515200 -NCT03517722 -NCT03515252 -NCT03517852 -NCT03515278 -NCT03517956 -NCT03515356 -NCT03517969 -NCT03515369 -NCT03517982 -NCT03515512 -NCT03517995 -NCT03515551 -NCT03518034 -NCT03515577 -NCT03518099 -NCT03515603 -NCT03518112 -NCT03515629 -NCT03518203 -NCT03515707 -NCT03518229 -NCT03515746 -NCT03518242 -NCT03515759 -NCT03518255 -NCT03515772 -NCT03518268 -NCT03515798 -NCT03518281 -NCT03515824 -NCT03523312 -NCT03518320 -NCT03520790 -NCT03518424 -NCT03520712 -NCT03518502 -NCT03520842 -NCT03518554 -NCT03520855 -NCT03518606 -NCT03520894 -NCT03518632 -NCT03520920 -NCT03518671 -NCT03520946 -NCT03518710 -NCT03520959 -NCT03518775 -NCT03520985 -NCT03518853 -NCT03520998 -NCT03518918 -NCT03521011 -NCT03518957 -NCT03521037 -NCT03518970 -NCT03521154 -NCT03519048 -NCT03521167 -NCT03519074 -NCT03521219 -NCT03519165 -NCT03521245 -NCT03519178 -NCT03521271 -NCT03519230 -NCT03521375 -NCT03519256 -NCT03521479 -NCT03519295 -NCT03521518 -NCT03519308 -NCT03521557 -NCT03519360 -NCT03521570 -NCT03519412 -NCT03521583 -NCT03519425 -NCT03521648 -NCT03519464 -NCT03521739 -NCT03519490 -NCT03521765 -NCT03519516 -NCT03521817 -NCT03519542 -NCT03521830 -NCT03519581 -NCT03521869 -NCT03519607 -NCT03521921 -NCT03519646 -NCT03521986 -NCT03519737 -NCT03522064 -NCT03519971 -NCT03522142 -NCT03519984 -NCT03522155 -NCT03519997 -NCT03522207 -NCT03520075 -NCT03522233 -NCT03520088 -NCT03522246 -NCT03520140 -NCT03522298 -NCT03520166 -NCT03522441 -NCT03520218 -NCT03522467 -NCT03520231 -NCT03522493 -NCT03520257 -NCT03522506 -NCT03520283 -NCT03522584 -NCT03520322 -NCT03522649 -NCT03520348 -NCT03522766 -NCT03520439 -NCT03522831 -NCT03520478 -NCT03522909 -NCT03520491 -NCT03523065 -NCT03520504 -NCT03523104 -NCT03520517 -NCT03523195 -NCT03520530 -NCT03523234 -NCT03520634 -NCT03523247 -NCT03520647 -NCT03523273 -NCT03520660 -NCT03523286 -NCT03520673 -NCT03523299 -NCT03520686 -NCT03528473 -NCT03523351 -NCT03525782 -NCT03523377 -NCT03525717 -NCT03523390 -NCT03525795 -NCT03523429 -NCT03525808 -NCT03523442 -NCT03525834 -NCT03523468 -NCT03525873 -NCT03523520 -NCT03525925 -NCT03523546 -NCT03525990 -NCT03523572 -NCT03526016 -NCT03523585 -NCT03526185 -NCT03523702 -NCT03526211 -NCT03523728 -NCT03526250 -NCT03523741 -NCT03526432 -NCT03523819 -NCT03526510 -NCT03523845 -NCT03526536 -NCT03523897 -NCT03526562 -NCT03523975 -NCT03526588 -NCT03524001 -NCT03526679 -NCT03524040 -NCT03526731 -NCT03524066 -NCT03526822 -NCT03524118 -NCT03526835 -NCT03524170 -NCT03526874 -NCT03524222 -NCT03526887 -NCT03524235 -NCT03526900 -NCT03524248 -NCT03526913 -NCT03524261 -NCT03526952 -NCT03524274 -NCT03527108 -NCT03524287 -NCT03527147 -NCT03524300 -NCT03527225 -NCT03524326 -NCT03527251 -NCT03524378 -NCT03527264 -NCT03524391 -NCT03527277 -NCT03524430 -NCT03527498 -NCT03524508 -NCT03527563 -NCT03524573 -NCT03527589 -NCT03524638 -NCT03527628 -NCT03524677 -NCT03527706 -NCT03524716 -NCT03527784 -NCT03524755 -NCT03527810 -NCT03524781 -NCT03527836 -NCT03524807 -NCT03527875 -NCT03524820 -NCT03527888 -NCT03524872 -NCT03527966 -NCT03524898 -NCT03527992 -NCT03525080 -NCT03528057 -NCT03525236 -NCT03528070 -NCT03525262 -NCT03528161 -NCT03525288 -NCT03528226 -NCT03525301 -NCT03528265 -NCT03525392 -NCT03528304 -NCT03525431 -NCT03528343 -NCT03525522 -NCT03528369 -NCT03525535 -NCT03528382 -NCT03525652 -NCT03528408 -NCT03525678 -NCT03528421 -NCT03525691 -NCT03533699 -NCT03528538 -NCT03531034 -NCT03528590 -NCT03531008 -NCT03528616 -NCT03531099 -NCT03528629 -NCT03531138 -NCT03528642 -NCT03531190 -NCT03528694 -NCT03531281 -NCT03528733 -NCT03531320 -NCT03528746 -NCT03531333 -NCT03528785 -NCT03531372 -NCT03528824 -NCT03531502 -NCT03528863 -NCT03531606 -NCT03528876 -NCT03531619 -NCT03528954 -NCT03531632 -NCT03529071 -NCT03531645 -NCT03529084 -NCT03531775 -NCT03529110 -NCT03531814 -NCT03529175 -NCT03531827 -NCT03529188 -NCT03531840 -NCT03529266 -NCT03531918 -NCT03529279 -NCT03532061 -NCT03529318 -NCT03532074 -NCT03529370 -NCT03532087 -NCT03529383 -NCT03532139 -NCT03529422 -NCT03532165 -NCT03529448 -NCT03532204 -NCT03529461 -NCT03532217 -NCT03529474 -NCT03532230 -NCT03529513 -NCT03532269 -NCT03529526 -NCT03532282 -NCT03529565 -NCT03532295 -NCT03529591 -NCT03532308 -NCT03529630 -NCT03532347 -NCT03529643 -NCT03532451 -NCT03529669 -NCT03532516 -NCT03529708 -NCT03532620 -NCT03529747 -NCT03532698 -NCT03529786 -NCT03532737 -NCT03529851 -NCT03532750 -NCT03529890 -NCT03532802 -NCT03529955 -NCT03532880 -NCT03530033 -NCT03532932 -NCT03530085 -NCT03532997 -NCT03530124 -NCT03533010 -NCT03530241 -NCT03533049 -NCT03530267 -NCT03533127 -NCT03530397 -NCT03533257 -NCT03530423 -NCT03533270 -NCT03530514 -NCT03533283 -NCT03530553 -NCT03533322 -NCT03530592 -NCT03533413 -NCT03530605 -NCT03533504 -NCT03530683 -NCT03533569 -NCT03530696 -NCT03533582 -NCT03530787 -NCT03533647 -NCT03530917 -NCT03533686 -NCT03530969 -NCT03540368 -NCT03533764 -NCT03536780 -NCT03533816 -NCT03536728 -NCT03533920 -NCT03536936 -NCT03533946 -NCT03536962 -NCT03533985 -NCT03537001 -NCT03534024 -NCT03537092 -NCT03534050 -NCT03537378 -NCT03534141 -NCT03537391 -NCT03534180 -NCT03537430 -NCT03534206 -NCT03537443 -NCT03534245 -NCT03537495 -NCT03534323 -NCT03537534 -NCT03534453 -NCT03537573 -NCT03534492 -NCT03537599 -NCT03534505 -NCT03537625 -NCT03534557 -NCT03537690 -NCT03534635 -NCT03537768 -NCT03534713 -NCT03537807 -NCT03534739 -NCT03537911 -NCT03534804 -NCT03537989 -NCT03534934 -NCT03538028 -NCT03534947 -NCT03538041 -NCT03534986 -NCT03538171 -NCT03534999 -NCT03538223 -NCT03535129 -NCT03538314 -NCT03535207 -NCT03538327 -NCT03535246 -NCT03538483 -NCT03535259 -NCT03538574 -NCT03535272 -NCT03538587 -NCT03535350 -NCT03538704 -NCT03535363 -NCT03538834 -NCT03535415 -NCT03538951 -NCT03535506 -NCT03539094 -NCT03535545 -NCT03539172 -NCT03535610 -NCT03539302 -NCT03535636 -NCT03539328 -NCT03535675 -NCT03539406 -NCT03535688 -NCT03539471 -NCT03535701 -NCT03539484 -NCT03535727 -NCT03539536 -NCT03535740 -NCT03539588 -NCT03535753 -NCT03539614 -NCT03535831 -NCT03539627 -NCT03535909 -NCT03539731 -NCT03535961 -NCT03539744 -NCT03536039 -NCT03539822 -NCT03536065 -NCT03539835 -NCT03536078 -NCT03539861 -NCT03536104 -NCT03539952 -NCT03536130 -NCT03540017 -NCT03536182 -NCT03540069 -NCT03536208 -NCT03540160 -NCT03536481 -NCT03540199 -NCT03536533 -NCT03540251 -NCT03536572 -NCT03540303 -NCT03536702 -NCT03546842 -NCT03540407 -NCT03543345 -NCT03540420 -NCT03543306 -NCT03540563 -NCT03543358 -NCT03540654 -NCT03543410 -NCT03540706 -NCT03543436 -NCT03540823 -NCT03543462 -NCT03540849 -NCT03543501 -NCT03540862 -NCT03543670 -NCT03540953 -NCT03543683 -NCT03541148 -NCT03543696 -NCT03541252 -NCT03543813 -NCT03541278 -NCT03543852 -NCT03541304 -NCT03543969 -NCT03541330 -NCT03544021 -NCT03541369 -NCT03544086 -NCT03541395 -NCT03544099 -NCT03541421 -NCT03544125 -NCT03541486 -NCT03544216 -NCT03541538 -NCT03544281 -NCT03541551 -NCT03544502 -NCT03541629 -NCT03544567 -NCT03541720 -NCT03544671 -NCT03541733 -NCT03544723 -NCT03541772 -NCT03544736 -NCT03541850 -NCT03544762 -NCT03541902 -NCT03544814 -NCT03541928 -NCT03544840 -NCT03541941 -NCT03544905 -NCT03541967 -NCT03544918 -NCT03541980 -NCT03544983 -NCT03542136 -NCT03545035 -NCT03542175 -NCT03545048 -NCT03542214 -NCT03545100 -NCT03542240 -NCT03545113 -NCT03542266 -NCT03545165 -NCT03542318 -NCT03545204 -NCT03542370 -NCT03545230 -NCT03542409 -NCT03545256 -NCT03542422 -NCT03545334 -NCT03542461 -NCT03545529 -NCT03542474 -NCT03545542 -NCT03542539 -NCT03545711 -NCT03542565 -NCT03545815 -NCT03542604 -NCT03545945 -NCT03542656 -NCT03545971 -NCT03542669 -NCT03546166 -NCT03542695 -NCT03546361 -NCT03542773 -NCT03546426 -NCT03542799 -NCT03546478 -NCT03542838 -NCT03546582 -NCT03542877 -NCT03546660 -NCT03542916 -NCT03546673 -NCT03542942 -NCT03546686 -NCT03543046 -NCT03546816 -NCT03543085 -NCT03546829 -NCT03543189 -NCT03552406 -NCT03546855 -NCT03549286 -NCT03546894 -NCT03549273 -NCT03546959 -NCT03549338 -NCT03546972 -NCT03549377 -NCT03547011 -NCT03549390 -NCT03547024 -NCT03549442 -NCT03547037 -NCT03549494 -NCT03547050 -NCT03549546 -NCT03547115 -NCT03549559 -NCT03547154 -NCT03549650 -NCT03547206 -NCT03549689 -NCT03547232 -NCT03549715 -NCT03547323 -NCT03549728 -NCT03547336 -NCT03549949 -NCT03547375 -NCT03550001 -NCT03547388 -NCT03550014 -NCT03547453 -NCT03550027 -NCT03547492 -NCT03550040 -NCT03547557 -NCT03550053 -NCT03547596 -NCT03550157 -NCT03547648 -NCT03550183 -NCT03547661 -NCT03550287 -NCT03547687 -NCT03550313 -NCT03547700 -NCT03550365 -NCT03547804 -NCT03550391 -NCT03547895 -NCT03550482 -NCT03547960 -NCT03550508 -NCT03547973 -NCT03550586 -NCT03547999 -NCT03550690 -NCT03548077 -NCT03550703 -NCT03548103 -NCT03550716 -NCT03548168 -NCT03550755 -NCT03548181 -NCT03550885 -NCT03548207 -NCT03551015 -NCT03548246 -NCT03551028 -NCT03548285 -NCT03551171 -NCT03548415 -NCT03551249 -NCT03548428 -NCT03551379 -NCT03548467 -NCT03551444 -NCT03548571 -NCT03551600 -NCT03548610 -NCT03551626 -NCT03548636 -NCT03551717 -NCT03548688 -NCT03551782 -NCT03548727 -NCT03551795 -NCT03548740 -NCT03551821 -NCT03548753 -NCT03551847 -NCT03548831 -NCT03551977 -NCT03548844 -NCT03551990 -NCT03548870 -NCT03552016 -NCT03548896 -NCT03552029 -NCT03548961 -NCT03552055 -NCT03549000 -NCT03552068 -NCT03549052 -NCT03552081 -NCT03549117 -NCT03552120 -NCT03549130 -NCT03552380 -NCT03549195 -NCT03558516 -NCT03552458 -NCT03555500 -NCT03552471 -NCT03555474 -NCT03552549 -NCT03555734 -NCT03552692 -NCT03555877 -NCT03552718 -NCT03555955 -NCT03552744 -NCT03556020 -NCT03552796 -NCT03556046 -NCT03552861 -NCT03556228 -NCT03552874 -NCT03556332 -NCT03552887 -NCT03556345 -NCT03552965 -NCT03556358 -NCT03553004 -NCT03556384 -NCT03553108 -NCT03556397 -NCT03553212 -NCT03556436 -NCT03553238 -NCT03556475 -NCT03553329 -NCT03556527 -NCT03553355 -NCT03556566 -NCT03553368 -NCT03556657 -NCT03553381 -NCT03556709 -NCT03553485 -NCT03556748 -NCT03553537 -NCT03556839 -NCT03553576 -NCT03556904 -NCT03553602 -NCT03556917 -NCT03553654 -NCT03556930 -NCT03553693 -NCT03556943 -NCT03553706 -NCT03556956 -NCT03553784 -NCT03556982 -NCT03553836 -NCT03557112 -NCT03553849 -NCT03557216 -NCT03553862 -NCT03557268 -NCT03553888 -NCT03557359 -NCT03553914 -NCT03557372 -NCT03553966 -NCT03557411 -NCT03554005 -NCT03557463 -NCT03554018 -NCT03557528 -NCT03554044 -NCT03557554 -NCT03554083 -NCT03557710 -NCT03554109 -NCT03557762 -NCT03554200 -NCT03557788 -NCT03554265 -NCT03557801 -NCT03554317 -NCT03557840 -NCT03554356 -NCT03557879 -NCT03554395 -NCT03557905 -NCT03554447 -NCT03557918 -NCT03554473 -NCT03557970 -NCT03554707 -NCT03558035 -NCT03554785 -NCT03558087 -NCT03554889 -NCT03558139 -NCT03554954 -NCT03558165 -NCT03555032 -NCT03558191 -NCT03555149 -NCT03558204 -NCT03555188 -NCT03558230 -NCT03555227 -NCT03558412 -NCT03555266 -NCT03558490 -NCT03555396 -NCT03558503 -NCT03555422 -NCT03563703 -NCT03558542 -NCT03561610 -NCT03558594 -NCT03561441 -NCT03558607 -NCT03561623 -NCT03558711 -NCT03561688 -NCT03558724 -NCT03561727 -NCT03558750 -NCT03561740 -NCT03558841 -NCT03561753 -NCT03558919 -NCT03561779 -NCT03558945 -NCT03561805 -NCT03559023 -NCT03561844 -NCT03559049 -NCT03561857 -NCT03559244 -NCT03561870 -NCT03559348 -NCT03561883 -NCT03559374 -NCT03561896 -NCT03559413 -NCT03561948 -NCT03559439 -NCT03561961 -NCT03559478 -NCT03562039 -NCT03559543 -NCT03562143 -NCT03559556 -NCT03562169 -NCT03559764 -NCT03562182 -NCT03559803 -NCT03562195 -NCT03559881 -NCT03562390 -NCT03559894 -NCT03562403 -NCT03560050 -NCT03562429 -NCT03560089 -NCT03562507 -NCT03560102 -NCT03562637 -NCT03560128 -NCT03562663 -NCT03560154 -NCT03562715 -NCT03560167 -NCT03562741 -NCT03560180 -NCT03562832 -NCT03560349 -NCT03562871 -NCT03560362 -NCT03562897 -NCT03560479 -NCT03562910 -NCT03560531 -NCT03562975 -NCT03560622 -NCT03563001 -NCT03560635 -NCT03563040 -NCT03560648 -NCT03563053 -NCT03560661 -NCT03563066 -NCT03560752 -NCT03563144 -NCT03560856 -NCT03563157 -NCT03560869 -NCT03563170 -NCT03560882 -NCT03563196 -NCT03560908 -NCT03563248 -NCT03560973 -NCT03563261 -NCT03561051 -NCT03563300 -NCT03561064 -NCT03563313 -NCT03561090 -NCT03563326 -NCT03561142 -NCT03563365 -NCT03561168 -NCT03563482 -NCT03561181 -NCT03563560 -NCT03561207 -NCT03563586 -NCT03561220 -NCT03563599 -NCT03561259 -NCT03563625 -NCT03561272 -NCT03563677 -NCT03561324 -NCT03563690 -NCT03561428 -NCT03569397 -NCT03563716 -NCT03566563 -NCT03563729 -NCT03566485 -NCT03563781 -NCT03566576 -NCT03563898 -NCT03566745 -NCT03564054 -NCT03566784 -NCT03564119 -NCT03566862 -NCT03564171 -NCT03567044 -NCT03564275 -NCT03567265 -NCT03564288 -NCT03567343 -NCT03564340 -NCT03567369 -NCT03564379 -NCT03567395 -NCT03564405 -NCT03567460 -NCT03564418 -NCT03567499 -NCT03564470 -NCT03567616 -NCT03564535 -NCT03567642 -NCT03564548 -NCT03567655 -NCT03564678 -NCT03567720 -NCT03564691 -NCT03567785 -NCT03564704 -NCT03567837 -NCT03564730 -NCT03567850 -NCT03564769 -NCT03567863 -NCT03564782 -NCT03567876 -NCT03564808 -NCT03567889 -NCT03564821 -NCT03568019 -NCT03564834 -NCT03568032 -NCT03564899 -NCT03568058 -NCT03564912 -NCT03568097 -NCT03564938 -NCT03568123 -NCT03564977 -NCT03568188 -NCT03565003 -NCT03568292 -NCT03565029 -NCT03568370 -NCT03565068 -NCT03568422 -NCT03565120 -NCT03568461 -NCT03565146 -NCT03568526 -NCT03565198 -NCT03568539 -NCT03565341 -NCT03568656 -NCT03565354 -NCT03568682 -NCT03565367 -NCT03568747 -NCT03565393 -NCT03568773 -NCT03565406 -NCT03568799 -NCT03565445 -NCT03568825 -NCT03565471 -NCT03568851 -NCT03565536 -NCT03568942 -NCT03565757 -NCT03568968 -NCT03565783 -NCT03568994 -NCT03565822 -NCT03569007 -NCT03565835 -NCT03569046 -NCT03565926 -NCT03569072 -NCT03565965 -NCT03569228 -NCT03565991 -NCT03569241 -NCT03566199 -NCT03569254 -NCT03566316 -NCT03569280 -NCT03566355 -NCT03569306 -NCT03566394 -NCT03569345 -NCT03566433 -NCT03569384 -NCT03566446 -NCT03574610 -NCT03569527 -NCT03572387 -NCT03569540 -NCT03572374 -NCT03569605 -NCT03572400 -NCT03569631 -NCT03572452 -NCT03569657 -NCT03572478 -NCT03569696 -NCT03572504 -NCT03569761 -NCT03572530 -NCT03569787 -NCT03572556 -NCT03569800 -NCT03572569 -NCT03569826 -NCT03572582 -NCT03569943 -NCT03572621 -NCT03569969 -NCT03572634 -NCT03569995 -NCT03572647 -NCT03570021 -NCT03572712 -NCT03570125 -NCT03572738 -NCT03570138 -NCT03572764 -NCT03570177 -NCT03572803 -NCT03570190 -NCT03572829 -NCT03570242 -NCT03572855 -NCT03570281 -NCT03572946 -NCT03570307 -NCT03572959 -NCT03570359 -NCT03572998 -NCT03570398 -NCT03573011 -NCT03570437 -NCT03573024 -NCT03570476 -NCT03573141 -NCT03570593 -NCT03573271 -NCT03570619 -NCT03573284 -NCT03570645 -NCT03573310 -NCT03570684 -NCT03573362 -NCT03570775 -NCT03573375 -NCT03570827 -NCT03573401 -NCT03570892 -NCT03573531 -NCT03570905 -NCT03573544 -NCT03570983 -NCT03573635 -NCT03570996 -NCT03573648 -NCT03571126 -NCT03573661 -NCT03571139 -NCT03573700 -NCT03571191 -NCT03573765 -NCT03571308 -NCT03573804 -NCT03571321 -NCT03573921 -NCT03571360 -NCT03573947 -NCT03571438 -NCT03573960 -NCT03571568 -NCT03573986 -NCT03571633 -NCT03574012 -NCT03571737 -NCT03574038 -NCT03571828 -NCT03574051 -NCT03571841 -NCT03574168 -NCT03571867 -NCT03574194 -NCT03571984 -NCT03574207 -NCT03571997 -NCT03574220 -NCT03572088 -NCT03574298 -NCT03572153 -NCT03574324 -NCT03572283 -NCT03574402 -NCT03572296 -NCT03574454 -NCT03572348 -NCT03574571 -NCT03572361 -NCT03579784 -NCT03574636 -NCT03576872 -NCT03574649 -NCT03576833 -NCT03574753 -NCT03576963 -NCT03574779 -NCT03577002 -NCT03574792 -NCT03577028 -NCT03574805 -NCT03577132 -NCT03574818 -NCT03577184 -NCT03574831 -NCT03577236 -NCT03574870 -NCT03577262 -NCT03574922 -NCT03577600 -NCT03575013 -NCT03577613 -NCT03575065 -NCT03577665 -NCT03575078 -NCT03577704 -NCT03575104 -NCT03577743 -NCT03575117 -NCT03577795 -NCT03575143 -NCT03577873 -NCT03575195 -NCT03577925 -NCT03575221 -NCT03577951 -NCT03575234 -NCT03578042 -NCT03575247 -NCT03578081 -NCT03575312 -NCT03578198 -NCT03575325 -NCT03578263 -NCT03575351 -NCT03578289 -NCT03575377 -NCT03578367 -NCT03575390 -NCT03578380 -NCT03575507 -NCT03578406 -NCT03575520 -NCT03578432 -NCT03575598 -NCT03578445 -NCT03575611 -NCT03578575 -NCT03575624 -NCT03578627 -NCT03575637 -NCT03578679 -NCT03575793 -NCT03578705 -NCT03575806 -NCT03578874 -NCT03575819 -NCT03578952 -NCT03575832 -NCT03578991 -NCT03575845 -NCT03579004 -NCT03575871 -NCT03579082 -NCT03575949 -NCT03579147 -NCT03576131 -NCT03579199 -NCT03576183 -NCT03579303 -NCT03576274 -NCT03579316 -NCT03576352 -NCT03579368 -NCT03576378 -NCT03579394 -NCT03576417 -NCT03579446 -NCT03576430 -NCT03579472 -NCT03576443 -NCT03579485 -NCT03576456 -NCT03579524 -NCT03576521 -NCT03579550 -NCT03576534 -NCT03579576 -NCT03576547 -NCT03579602 -NCT03576612 -NCT03579628 -NCT03576755 -NCT03579654 -NCT03576768 -NCT03579680 -NCT03576794 -NCT03579758 -NCT03576807 -NCT03579771 -NCT03576820 -NCT03585426 -NCT03579836 -NCT03582462 -NCT03579875 -NCT03582319 -NCT03579888 -NCT03582475 -NCT03579927 -NCT03582514 -NCT03579966 -NCT03582566 -NCT03579979 -NCT03582618 -NCT03580044 -NCT03582670 -NCT03580109 -NCT03582683 -NCT03580135 -NCT03582722 -NCT03580239 -NCT03582774 -NCT03580252 -NCT03582865 -NCT03580382 -NCT03582891 -NCT03580395 -NCT03582969 -NCT03580408 -NCT03583086 -NCT03580421 -NCT03583125 -NCT03580434 -NCT03583164 -NCT03580499 -NCT03583242 -NCT03580525 -NCT03583255 -NCT03580564 -NCT03583294 -NCT03580577 -NCT03583320 -NCT03580655 -NCT03583424 -NCT03580681 -NCT03583489 -NCT03580694 -NCT03583541 -NCT03580928 -NCT03583567 -NCT03580941 -NCT03583580 -NCT03580967 -NCT03583606 -NCT03580980 -NCT03583619 -NCT03581136 -NCT03583697 -NCT03581188 -NCT03583710 -NCT03581201 -NCT03583723 -NCT03581253 -NCT03583736 -NCT03581279 -NCT03583879 -NCT03581292 -NCT03583905 -NCT03581331 -NCT03583931 -NCT03581344 -NCT03583944 -NCT03581357 -NCT03583957 -NCT03581370 -NCT03584009 -NCT03581422 -NCT03584022 -NCT03581435 -NCT03584048 -NCT03581487 -NCT03584269 -NCT03581500 -NCT03584308 -NCT03581565 -NCT03584334 -NCT03581591 -NCT03584360 -NCT03581630 -NCT03584425 -NCT03581682 -NCT03584438 -NCT03581695 -NCT03584659 -NCT03581786 -NCT03584711 -NCT03581838 -NCT03584776 -NCT03581942 -NCT03584802 -NCT03582033 -NCT03584815 -NCT03582059 -NCT03584919 -NCT03582111 -NCT03585062 -NCT03582124 -NCT03585114 -NCT03582176 -NCT03585218 -NCT03582254 -NCT03585257 -NCT03582306 -NCT03590457 -NCT03585465 -NCT03588091 -NCT03585517 -NCT03588078 -NCT03585530 -NCT03588182 -NCT03585569 -NCT03588208 -NCT03585621 -NCT03588234 -NCT03585660 -NCT03588247 -NCT03585673 -NCT03588286 -NCT03585686 -NCT03588299 -NCT03585699 -NCT03588325 -NCT03585712 -NCT03588364 -NCT03585725 -NCT03588468 -NCT03585764 -NCT03588533 -NCT03585933 -NCT03588598 -NCT03585959 -NCT03588650 -NCT03585972 -NCT03588676 -NCT03585998 -NCT03588689 -NCT03586024 -NCT03588819 -NCT03586050 -NCT03588832 -NCT03586089 -NCT03588845 -NCT03586154 -NCT03588936 -NCT03586167 -NCT03588949 -NCT03586206 -NCT03589014 -NCT03586427 -NCT03589053 -NCT03586453 -NCT03589131 -NCT03586544 -NCT03589196 -NCT03586609 -NCT03589222 -NCT03586661 -NCT03589300 -NCT03586687 -NCT03589326 -NCT03586700 -NCT03589339 -NCT03586778 -NCT03589430 -NCT03586804 -NCT03589443 -NCT03586869 -NCT03589469 -NCT03586908 -NCT03589547 -NCT03586973 -NCT03589573 -NCT03586986 -NCT03589612 -NCT03586999 -NCT03589651 -NCT03587012 -NCT03589716 -NCT03587038 -NCT03589729 -NCT03587116 -NCT03589768 -NCT03587129 -NCT03589781 -NCT03587168 -NCT03589820 -NCT03587233 -NCT03589833 -NCT03587246 -NCT03589924 -NCT03587259 -NCT03589950 -NCT03587285 -NCT03590054 -NCT03587311 -NCT03590080 -NCT03587402 -NCT03590119 -NCT03587480 -NCT03590145 -NCT03587532 -NCT03590171 -NCT03587662 -NCT03590197 -NCT03587714 -NCT03590210 -NCT03587740 -NCT03590249 -NCT03587818 -NCT03590353 -NCT03587844 -NCT03590366 -NCT03588039 -NCT03590418 -NCT03588065 -NCT03596437 -NCT03590509 -NCT03593512 -NCT03590574 -NCT03593447 -NCT03590626 -NCT03593551 -NCT03590652 -NCT03593798 -NCT03590665 -NCT03593902 -NCT03590743 -NCT03593993 -NCT03590808 -NCT03594058 -NCT03590899 -NCT03594149 -NCT03590912 -NCT03594188 -NCT03591263 -NCT03594292 -NCT03591276 -NCT03594383 -NCT03591367 -NCT03594396 -NCT03591380 -NCT03594409 -NCT03591419 -NCT03594422 -NCT03591497 -NCT03594487 -NCT03591510 -NCT03594578 -NCT03591523 -NCT03594630 -NCT03591549 -NCT03594669 -NCT03591562 -NCT03594747 -NCT03591575 -NCT03594760 -NCT03591614 -NCT03594799 -NCT03591666 -NCT03594916 -NCT03591705 -NCT03594929 -NCT03591731 -NCT03594955 -NCT03591744 -NCT03595059 -NCT03591848 -NCT03595124 -NCT03591861 -NCT03595150 -NCT03591952 -NCT03595189 -NCT03591965 -NCT03595228 -NCT03591978 -NCT03595436 -NCT03592043 -NCT03595462 -NCT03592082 -NCT03595540 -NCT03592121 -NCT03595553 -NCT03592199 -NCT03595566 -NCT03592212 -NCT03595579 -NCT03592264 -NCT03595592 -NCT03592316 -NCT03595618 -NCT03592342 -NCT03595644 -NCT03592381 -NCT03595657 -NCT03592407 -NCT03595683 -NCT03592433 -NCT03595722 -NCT03592459 -NCT03595735 -NCT03592472 -NCT03595787 -NCT03592641 -NCT03595800 -NCT03592706 -NCT03595813 -NCT03592719 -NCT03595852 -NCT03592771 -NCT03595904 -NCT03592810 -NCT03595917 -NCT03592849 -NCT03595982 -NCT03592888 -NCT03596073 -NCT03593018 -NCT03596086 -NCT03593057 -NCT03596281 -NCT03593109 -NCT03596320 -NCT03593226 -NCT03596372 -NCT03593304 -NCT03596411 -NCT03593330 -NCT03752138 -NCT03596476 -NCT03598959 -NCT03596541 -NCT03598946 -NCT03596554 -NCT03598998 -NCT03596567 -NCT03599011 -NCT03596593 -NCT03599180 -NCT03596619 -NCT03599193 -NCT03596658 -NCT03599258 -NCT03596684 -NCT03599323 -NCT03596710 -NCT03599362 -NCT03596736 -NCT03599375 -NCT03596814 -NCT03599453 -NCT03596827 -NCT03599518 -NCT03596892 -NCT03599648 -NCT03597009 -NCT03599700 -NCT03597022 -NCT03599713 -NCT03597061 -NCT03599752 -NCT03597087 -NCT03599765 -NCT03597100 -NCT03599778 -NCT03597126 -NCT03599804 -NCT03597165 -NCT03599830 -NCT03597204 -NCT03599843 -NCT03597282 -NCT03599895 -NCT03597295 -NCT03599921 -NCT03597321 -NCT03599960 -NCT03597347 -NCT03600038 -NCT03597360 -NCT03600051 -NCT03597373 -NCT03600064 -NCT03597451 -NCT03600090 -NCT03597581 -NCT03600129 -NCT03597620 -NCT03600155 -NCT03597737 -NCT03600207 -NCT03597763 -NCT03600233 -NCT03597802 -NCT03600324 -NCT03597984 -NCT03600350 -NCT03598010 -NCT03600363 -NCT03598088 -NCT03600441 -NCT03598166 -NCT03600454 -NCT03598179 -NCT03600467 -NCT03598218 -NCT03600597 -NCT03598231 -NCT03600623 -NCT03598244 -NCT03600649 -NCT03598257 -NCT03751566 -NCT03598270 -NCT03751592 -NCT03598309 -NCT03751644 -NCT03598348 -NCT03751761 -NCT03598387 -NCT03751800 -NCT03598413 -NCT03751878 -NCT03598491 -NCT03751917 -NCT03598517 -NCT03751930 -NCT03598582 -NCT03751956 -NCT03598595 -NCT03751969 -NCT03598608 -NCT03751995 -NCT03598647 -NCT03752047 -NCT03598712 -NCT03752060 -NCT03598816 -NCT03752086 -NCT03598842 -NCT03752099 -NCT03600701 -NCT03750461 -NCT03600714 -NCT03750513 -NCT03600766 -NCT03750539 -NCT03600805 -NCT03750617 -NCT03600818 -NCT03750656 -NCT03600831 -NCT03750669 -NCT03600883 -NCT03750760 -NCT03600909 -NCT03750773 -NCT03600974 -NCT03750786 -NCT03601039 -NCT03750864 -NCT03601078 -NCT03750916 -NCT03601156 -NCT03750968 -NCT03601208 -NCT03750981 -NCT03601234 -NCT03751124 -NCT03601247 -NCT03751176 -NCT03601260 -NCT03751241 -NCT03601273 -NCT03751293 -NCT03601325 -NCT03751384 -NCT03601455 -NCT03751436 -NCT03601507 -NCT03751449 -NCT03601533 -NCT03751462 -NCT03601598 -NCT03745794 -NCT03745807 -NCT03745846 -NCT03745872 -NCT03745911 -NCT03745937 -NCT03745950 -NCT03745989 -NCT03746041 -NCT03746054 -NCT03746080 -NCT03746184 -NCT03746223 -NCT03746249 -NCT03746288 -NCT03746353 -NCT03746392 -NCT03746431 -NCT03746652 -NCT03746665 -NCT03746717 -NCT03746847 -NCT03747029 -NCT03747042 -NCT03747120 -NCT03747133 -NCT03747185 -NCT03747198 -NCT03747276 -NCT03747289 -NCT03747380 -NCT03747419 -NCT03747510 -NCT03747562 -NCT03747588 -NCT03747614 -NCT03747679 -NCT03747744 -NCT03747757 -NCT03747796 -NCT03747874 -NCT03747965 -NCT03748017 -NCT03748134 -NCT03748186 -NCT03748485 -NCT03748550 -NCT03748563 -NCT03748589 -NCT03748641 -NCT03748680 -NCT03748719 -NCT03748953 -NCT03748966 -NCT03749018 -NCT03749096 -NCT03749109 -NCT03749187 -NCT03749213 -NCT03749252 -NCT03749447 -NCT03749460 -NCT03749499 -NCT03749564 -NCT03749707 -NCT03749720 -NCT03749850 -NCT03749993 -NCT03750032 -NCT03750071 -NCT03750110 -NCT03750149 -NCT03750214 -NCT03750227 -NCT03750240 -NCT03750370 -NCT03750396 -NCT03601611 -NCT03603964 -NCT03601624 -NCT03603951 -NCT03601806 -NCT03604042 -NCT03601819 -NCT03604055 -NCT03601832 -NCT03604094 -NCT03601897 -NCT03604198 -NCT03601923 -NCT03604237 -NCT03601975 -NCT03604250 -NCT03601988 -NCT03604276 -NCT03602027 -NCT03604289 -NCT03602066 -NCT03604302 -NCT03602079 -NCT03604315 -NCT03602131 -NCT03604445 -NCT03602157 -NCT03604497 -NCT03602235 -NCT03604588 -NCT03602313 -NCT03604614 -NCT03602326 -NCT03604627 -NCT03602417 -NCT03604679 -NCT03602495 -NCT03604692 -NCT03602534 -NCT03604757 -NCT03602547 -NCT03604783 -NCT03602586 -NCT03604848 -NCT03602612 -NCT03604939 -NCT03602677 -NCT03604965 -NCT03602729 -NCT03604978 -NCT03602833 -NCT03604991 -NCT03602859 -NCT03605056 -NCT03602885 -NCT03605069 -NCT03602898 -NCT03605173 -NCT03602911 -NCT03605199 -NCT03602976 -NCT03605212 -NCT03603002 -NCT03605329 -NCT03603015 -NCT03605355 -NCT03603067 -NCT03605368 -NCT03603171 -NCT03605459 -NCT03603184 -NCT03744715 -NCT03603197 -NCT03744728 -NCT03603262 -NCT03744793 -NCT03603275 -NCT03744975 -NCT03603314 -NCT03744988 -NCT03603327 -NCT03745014 -NCT03603379 -NCT03745027 -NCT03603405 -NCT03745105 -NCT03603418 -NCT03745157 -NCT03603444 -NCT03745170 -NCT03603483 -NCT03745183 -NCT03603522 -NCT03745196 -NCT03603587 -NCT03745222 -NCT03603652 -NCT03745287 -NCT03603691 -NCT03745326 -NCT03603756 -NCT03745352 -NCT03603795 -NCT03745365 -NCT03603821 -NCT03745430 -NCT03603834 -NCT03745586 -NCT03603886 -NCT03745690 -NCT03603899 -NCT03745716 -NCT03605511 -NCT03743467 -NCT03605550 -NCT03743480 -NCT03605563 -NCT03743649 -NCT03605589 -NCT03743662 -NCT03605706 -NCT03743688 -NCT03605719 -NCT03743740 -NCT03605745 -NCT03743766 -NCT03605979 -NCT03743792 -NCT03606031 -NCT03743844 -NCT03606057 -NCT03744026 -NCT03606070 -NCT03744208 -NCT03606135 -NCT03744234 -NCT03606161 -NCT03744247 -NCT03606174 -NCT03744273 -NCT03606239 -NCT03744299 -NCT03606291 -NCT03744338 -NCT03606330 -NCT03744390 -NCT03606369 -NCT03744403 -NCT03606395 -NCT03744468 -NCT03606408 -NCT03744494 -NCT03606486 -NCT03744585 -NCT03606577 -NCT03744624 -NCT03606590 -NCT03744650 -NCT03606642 -NCT03623581 -NCT03623620 -NCT03623646 -NCT03623672 -NCT03623737 -NCT03623750 -NCT03623789 -NCT03623802 -NCT03623854 -NCT03623867 -NCT03623893 -NCT03623945 -NCT03623958 -NCT03623984 -NCT03624036 -NCT03624075 -NCT03624088 -NCT03624114 -NCT03624179 -NCT03624231 -NCT03624244 -NCT03624270 -NCT03624309 -NCT03624374 -NCT03624478 -NCT03624517 -NCT03624530 -NCT03624543 -NCT03624556 -NCT03624608 -NCT03624660 -NCT03624673 -NCT03624907 -NCT03624920 -NCT03624972 -NCT03625037 -NCT03625089 -NCT03625102 -NCT03625141 -NCT03625167 -NCT03625323 -NCT03625375 -NCT03625388 -NCT03742258 -NCT03742297 -NCT03742323 -NCT03742336 -NCT03742349 -NCT03742362 -NCT03742401 -NCT03742427 -NCT03742453 -NCT03742479 -NCT03742596 -NCT03742635 -NCT03742687 -NCT03742713 -NCT03742726 -NCT03742804 -NCT03742843 -NCT03742869 -NCT03742895 -NCT03742908 -NCT03742986 -NCT03743038 -NCT03743051 -NCT03743064 -NCT03743129 -NCT03743246 -NCT03743298 -NCT03743415 -NCT03743428 -NCT03744676 -NCT03606811 -NCT03609476 -NCT03606837 -NCT03609424 -NCT03606863 -NCT03609489 -NCT03606889 -NCT03609528 -NCT03606928 -NCT03609541 -NCT03606967 -NCT03609554 -NCT03607149 -NCT03609580 -NCT03607162 -NCT03609593 -NCT03607188 -NCT03609671 -NCT03607227 -NCT03609684 -NCT03607292 -NCT03609710 -NCT03607357 -NCT03609892 -NCT03607370 -NCT03609931 -NCT03607396 -NCT03609944 -NCT03607474 -NCT03610022 -NCT03607487 -NCT03610035 -NCT03607539 -NCT03610061 -NCT03607578 -NCT03610100 -NCT03607643 -NCT03610178 -NCT03607656 -NCT03610243 -NCT03607682 -NCT03610256 -NCT03607890 -NCT03610308 -NCT03607929 -NCT03610360 -NCT03607955 -NCT03610386 -NCT03608007 -NCT03610412 -NCT03608020 -NCT03610438 -NCT03608046 -NCT03610490 -NCT03608059 -NCT03610620 -NCT03608215 -NCT03610646 -NCT03608228 -NCT03621995 -NCT03608293 -NCT03622008 -NCT03608410 -NCT03622060 -NCT03608423 -NCT03622164 -NCT03608501 -NCT03622216 -NCT03608527 -NCT03622229 -NCT03608540 -NCT03622333 -NCT03608566 -NCT03622437 -NCT03608618 -NCT03622541 -NCT03608631 -NCT03622554 -NCT03608670 -NCT03622723 -NCT03608748 -NCT03622775 -NCT03608761 -NCT03622788 -NCT03608787 -NCT03622827 -NCT03608865 -NCT03622892 -NCT03608878 -NCT03622931 -NCT03608943 -NCT03623074 -NCT03609047 -NCT03623087 -NCT03609060 -NCT03623191 -NCT03609073 -NCT03623230 -NCT03609099 -NCT03623295 -NCT03609151 -NCT03623334 -NCT03609177 -NCT03623373 -NCT03609216 -NCT03623425 -NCT03609255 -NCT03623464 -NCT03609268 -NCT03623490 -NCT03609359 -NCT03623516 -NCT03610711 -NCT03613532 -NCT03610724 -NCT03613519 -NCT03610776 -NCT03613545 -NCT03610854 -NCT03613584 -NCT03610971 -NCT03613597 -NCT03610997 -NCT03613623 -NCT03611127 -NCT03613727 -NCT03611179 -NCT03613753 -NCT03611205 -NCT03613779 -NCT03611231 -NCT03613974 -NCT03611244 -NCT03614000 -NCT03611296 -NCT03614065 -NCT03611309 -NCT03614169 -NCT03611517 -NCT03614221 -NCT03611556 -NCT03614299 -NCT03611595 -NCT03614364 -NCT03611712 -NCT03614403 -NCT03611738 -NCT03614468 -NCT03611777 -NCT03614481 -NCT03611855 -NCT03614546 -NCT03611868 -NCT03614650 -NCT03611920 -NCT03614663 -NCT03611972 -NCT03614728 -NCT03611985 -NCT03614754 -NCT03612011 -NCT03614767 -NCT03612089 -NCT03614793 -NCT03612154 -NCT03614806 -NCT03612219 -NCT03614858 -NCT03612232 -NCT03614949 -NCT03612323 -NCT03614975 -NCT03612440 -NCT03614988 -NCT03612466 -NCT03615105 -NCT03612531 -NCT03615313 -NCT03612596 -NCT03615326 -NCT03612648 -NCT03615352 -NCT03612674 -NCT03615404 -NCT03612739 -NCT03615430 -NCT03612791 -NCT03615547 -NCT03612804 -NCT03615599 -NCT03612830 -NCT03615664 -NCT03612973 -NCT03615859 -NCT03612986 -NCT03615976 -NCT03613025 -NCT03616223 -NCT03613116 -NCT03616262 -NCT03613129 -NCT03616470 -NCT03613142 -NCT03616574 -NCT03613168 -NCT03616587 -NCT03613181 -NCT03621527 -NCT03613194 -NCT03621553 -NCT03613207 -NCT03621579 -NCT03613220 -NCT03621644 -NCT03613259 -NCT03621696 -NCT03613272 -NCT03621735 -NCT03613363 -NCT03621748 -NCT03613428 -NCT03621813 -NCT03613493 -NCT03621982 -NCT03616600 -NCT03619200 -NCT03616626 -NCT03619161 -NCT03616678 -NCT03619239 -NCT03616691 -NCT03619252 -NCT03616782 -NCT03619304 -NCT03616834 -NCT03619317 -NCT03616847 -NCT03619369 -NCT03616860 -NCT03619408 -NCT03616886 -NCT03619486 -NCT03617003 -NCT03619512 -NCT03617016 -NCT03619538 -NCT03617029 -NCT03619551 -NCT03617133 -NCT03619616 -NCT03617172 -NCT03619642 -NCT03617224 -NCT03619655 -NCT03617328 -NCT03619681 -NCT03617354 -NCT03619733 -NCT03617393 -NCT03619746 -NCT03617432 -NCT03619811 -NCT03617484 -NCT03619824 -NCT03617497 -NCT03619967 -NCT03617588 -NCT03619993 -NCT03617614 -NCT03620019 -NCT03617640 -NCT03620032 -NCT03617666 -NCT03620058 -NCT03617679 -NCT03620071 -NCT03617731 -NCT03620084 -NCT03617835 -NCT03620123 -NCT03617900 -NCT03620149 -NCT03617913 -NCT03620201 -NCT03617965 -NCT03620253 -NCT03618017 -NCT03620292 -NCT03618043 -NCT03620422 -NCT03618082 -NCT03620500 -NCT03618095 -NCT03620526 -NCT03618134 -NCT03620578 -NCT03618238 -NCT03620643 -NCT03618277 -NCT03620877 -NCT03618329 -NCT03620903 -NCT03618355 -NCT03620916 -NCT03618381 -NCT03620942 -NCT03618407 -NCT03620955 -NCT03618433 -NCT03620994 -NCT03618537 -NCT03621020 -NCT03618550 -NCT03621046 -NCT03618576 -NCT03621072 -NCT03618602 -NCT03621085 -NCT03618641 -NCT03621137 -NCT03618654 -NCT03621150 -NCT03618667 -NCT03621215 -NCT03618680 -NCT03621280 -NCT03618706 -NCT03621319 -NCT03618758 -NCT03621332 -NCT03618797 -NCT03621449 -NCT03618953 -NCT03621462 -NCT03619044 -NCT03742245 -NCT03625401 -NCT03741244 -NCT03625505 -NCT03741283 -NCT03625570 -NCT03741322 -NCT03625583 -NCT03741335 -NCT03625622 -NCT03741426 -NCT03625635 -NCT03741673 -NCT03625752 -NCT03741712 -NCT03625817 -NCT03741803 -NCT03625882 -NCT03741972 -NCT03625973 -NCT03742024 -NCT03626090 -NCT03742102 -NCT03626168 -NCT03742128 -NCT03626246 -NCT03742193 -NCT03626298 -NCT03736616 -NCT03736720 -NCT03736746 -NCT03736811 -NCT03736824 -NCT03736837 -NCT03736850 -NCT03736863 -NCT03736889 -NCT03736902 -NCT03736941 -NCT03737123 -NCT03737175 -NCT03737266 -NCT03737344 -NCT03737370 -NCT03737448 -NCT03737500 -NCT03737526 -NCT03737630 -NCT03737643 -NCT03737708 -NCT03737721 -NCT03737734 -NCT03737786 -NCT03737851 -NCT03737890 -NCT03737903 -NCT03737955 -NCT03737981 -NCT03737994 -NCT03738072 -NCT03738111 -NCT03738228 -NCT03738332 -NCT03738358 -NCT03738488 -NCT03738527 -NCT03738540 -NCT03738553 -NCT03738605 -NCT03738618 -NCT03738670 -NCT03738761 -NCT03738787 -NCT03738813 -NCT03738865 -NCT03738969 -NCT03738982 -NCT03739047 -NCT03739138 -NCT03739190 -NCT03739281 -NCT03739333 -NCT03739372 -NCT03739398 -NCT03739411 -NCT03739502 -NCT03739554 -NCT03739567 -NCT03739606 -NCT03739619 -NCT03739684 -NCT03739710 -NCT03739736 -NCT03739775 -NCT03739801 -NCT03739814 -NCT03739840 -NCT03739931 -NCT03739944 -NCT03739957 -NCT03740100 -NCT03740126 -NCT03740165 -NCT03740191 -NCT03740256 -NCT03740334 -NCT03740464 -NCT03740529 -NCT03740633 -NCT03740685 -NCT03740737 -NCT03740750 -NCT03740789 -NCT03740815 -NCT03740854 -NCT03740893 -NCT03740906 -NCT03740945 -NCT03740958 -NCT03740984 -NCT03741088 -NCT03741101 -NCT03741127 -NCT03626311 -NCT03629886 -NCT03626324 -NCT03629873 -NCT03626428 -NCT03629899 -NCT03626519 -NCT03629964 -NCT03626558 -NCT03629977 -NCT03626610 -NCT03630042 -NCT03626675 -NCT03630081 -NCT03626753 -NCT03630120 -NCT03626766 -NCT03630159 -NCT03626779 -NCT03630198 -NCT03626805 -NCT03630289 -NCT03626896 -NCT03630354 -NCT03626922 -NCT03630393 -NCT03626974 -NCT03630419 -NCT03627026 -NCT03630523 -NCT03627234 -NCT03630601 -NCT03627364 -NCT03630640 -NCT03627390 -NCT03630653 -NCT03627442 -NCT03630666 -NCT03627507 -NCT03630731 -NCT03627611 -NCT03630809 -NCT03627702 -NCT03735186 -NCT03627728 -NCT03735199 -NCT03627962 -NCT03735264 -NCT03627988 -NCT03735277 -NCT03628053 -NCT03735290 -NCT03628066 -NCT03735303 -NCT03628079 -NCT03735316 -NCT03628131 -NCT03735355 -NCT03628144 -NCT03735407 -NCT03628209 -NCT03735446 -NCT03628248 -NCT03735498 -NCT03628274 -NCT03735511 -NCT03628313 -NCT03735589 -NCT03628417 -NCT03735628 -NCT03628456 -NCT03735654 -NCT03628508 -NCT03735680 -NCT03628521 -NCT03735693 -NCT03628534 -NCT03735745 -NCT03628612 -NCT03735758 -NCT03628677 -NCT03735849 -NCT03628716 -NCT03735862 -NCT03628885 -NCT03735875 -NCT03629171 -NCT03735953 -NCT03629275 -NCT03735966 -NCT03629288 -NCT03735979 -NCT03629509 -NCT03735992 -NCT03629522 -NCT03736057 -NCT03629587 -NCT03736083 -NCT03629613 -NCT03736109 -NCT03629626 -NCT03736122 -NCT03629717 -NCT03736174 -NCT03629743 -NCT03736265 -NCT03629756 -NCT03736330 -NCT03629808 -NCT03736369 -NCT03629847 -NCT03736382 -NCT03630900 -NCT03633383 -NCT03630913 -NCT03633344 -NCT03630926 -NCT03633500 -NCT03630939 -NCT03633539 -NCT03630991 -NCT03633552 -NCT03631017 -NCT03633565 -NCT03631043 -NCT03633695 -NCT03631108 -NCT03633708 -NCT03631173 -NCT03633721 -NCT03631199 -NCT03633734 -NCT03631290 -NCT03633773 -NCT03631407 -NCT03633799 -NCT03631420 -NCT03633812 -NCT03631446 -NCT03633877 -NCT03631472 -NCT03633955 -NCT03631537 -NCT03634059 -NCT03631615 -NCT03634098 -NCT03631641 -NCT03634150 -NCT03631706 -NCT03634202 -NCT03631758 -NCT03634228 -NCT03631771 -NCT03634241 -NCT03631784 -NCT03634267 -NCT03631836 -NCT03634332 -NCT03631862 -NCT03634371 -NCT03631953 -NCT03634384 -NCT03631992 -NCT03634397 -NCT03632005 -NCT03634501 -NCT03632135 -NCT03634540 -NCT03632187 -NCT03634579 -NCT03632200 -NCT03634683 -NCT03632317 -NCT03634696 -NCT03632343 -NCT03634748 -NCT03632486 -NCT03634800 -NCT03632512 -NCT03634891 -NCT03632525 -NCT03634930 -NCT03632551 -NCT03634982 -NCT03632577 -NCT03635008 -NCT03632603 -NCT03635021 -NCT03632629 -NCT03635034 -NCT03632642 -NCT03635060 -NCT03632655 -NCT03635164 -NCT03632694 -NCT03635294 -NCT03632772 -NCT03635359 -NCT03632798 -NCT03635372 -NCT03632811 -NCT03635385 -NCT03632876 -NCT03635424 -NCT03632928 -NCT03635450 -NCT03632941 -NCT03635489 -NCT03632980 -NCT03635528 -NCT03633110 -NCT03635567 -NCT03633149 -NCT03635580 -NCT03633214 -NCT03635593 -NCT03633227 -NCT03635632 -NCT03633279 -NCT03735082 -NCT03633305 -NCT03735095 -NCT03633331 -NCT03735121 -NCT03635710 -NCT03732846 -NCT03635749 -NCT03732859 -NCT03635866 -NCT03732872 -NCT03635892 -NCT03732937 -NCT03635918 -NCT03732950 -NCT03635983 -NCT03733067 -NCT03636256 -NCT03733106 -NCT03636308 -NCT03733119 -NCT03636373 -NCT03733171 -NCT03636477 -NCT03733197 -NCT03636503 -NCT03733210 -NCT03636568 -NCT03733249 -NCT03636607 -NCT03733327 -NCT03636620 -NCT03733587 -NCT03636659 -NCT03733639 -NCT03636685 -NCT03733691 -NCT03636711 -NCT03733717 -NCT03636737 -NCT03733821 -NCT03636750 -NCT03733886 -NCT03636776 -NCT03733951 -NCT03636841 -NCT03733990 -NCT03636893 -NCT03734016 -NCT03636945 -NCT03734029 -NCT03636958 -NCT03734120 -NCT03637023 -NCT03734146 -NCT03637335 -NCT03734198 -NCT03637348 -NCT03734224 -NCT03637400 -NCT03734237 -NCT03637413 -NCT03734263 -NCT03637491 -NCT03734302 -NCT03637543 -NCT03734354 -NCT03637595 -NCT03734432 -NCT03637673 -NCT03734523 -NCT03637738 -NCT03734562 -NCT03637764 -NCT03734575 -NCT03637777 -NCT03734588 -NCT03637803 -NCT03734601 -NCT03637816 -NCT03734653 -NCT03637868 -NCT03734692 -NCT03637985 -NCT03734757 -NCT03638063 -NCT03734809 -NCT03638141 -NCT03734900 -NCT03638167 -NCT03734913 -NCT03638193 -NCT03734926 -NCT03638206 -NCT03735030 -NCT03638297 -NCT03731910 -NCT03731923 -NCT03731988 -NCT03732001 -NCT03732105 -NCT03732118 -NCT03732261 -NCT03732274 -NCT03732339 -NCT03732352 -NCT03732365 -NCT03732391 -NCT03732469 -NCT03732482 -NCT03732495 -NCT03732508 -NCT03732547 -NCT03732664 -NCT03732677 -NCT03732703 -NCT03732768 -NCT03732781 -NCT03732820 -NCT03638310 -NCT03730363 -NCT03638414 -NCT03730519 -NCT03638453 -NCT03730545 -NCT03638479 -NCT03730662 -NCT03638492 -NCT03730675 -NCT03638531 -NCT03730714 -NCT03638622 -NCT03730727 -NCT03638648 -NCT03730740 -NCT03638752 -NCT03730818 -NCT03638765 -NCT03730922 -NCT03638804 -NCT03730948 -NCT03638830 -NCT03730974 -NCT03638921 -NCT03731026 -NCT03639051 -NCT03731078 -NCT03639103 -NCT03731234 -NCT03639168 -NCT03731247 -NCT03639181 -NCT03731260 -NCT03639194 -NCT03731351 -NCT03639207 -NCT03731390 -NCT03639246 -NCT03731442 -NCT03639272 -NCT03731455 -NCT03639298 -NCT03731585 -NCT03639324 -NCT03731624 -NCT03639376 -NCT03731663 -NCT03639415 -NCT03731754 -NCT03639428 -NCT03731819 -NCT03639454 -NCT03731832 -NCT03639467 -NCT03731845 -NCT03639545 -NCT03731858 -NCT03639571 -NCT03727789 -NCT03727841 -NCT03727867 -NCT03727880 -NCT03727919 -NCT03728036 -NCT03728062 -NCT03728114 -NCT03728140 -NCT03728179 -NCT03728205 -NCT03728218 -NCT03728231 -NCT03728296 -NCT03728335 -NCT03728361 -NCT03728374 -NCT03728387 -NCT03728426 -NCT03728465 -NCT03728491 -NCT03728543 -NCT03728556 -NCT03728595 -NCT03728660 -NCT03728673 -NCT03728712 -NCT03728777 -NCT03728803 -NCT03728881 -NCT03728907 -NCT03728972 -NCT03729115 -NCT03729245 -NCT03729271 -NCT03729297 -NCT03729323 -NCT03729375 -NCT03729479 -NCT03729518 -NCT03729544 -NCT03729596 -NCT03729609 -NCT03729661 -NCT03729687 -NCT03729804 -NCT03729817 -NCT03729882 -NCT03729921 -NCT03729947 -NCT03730012 -NCT03730077 -NCT03730142 -NCT03730181 -NCT03730233 -NCT03730298 -NCT03730311 -NCT03730324 -NCT03730337 -NCT03639610 -NCT03724825 -NCT03639649 -NCT03724851 -NCT03639662 -NCT03724877 -NCT03639688 -NCT03724890 -NCT03639714 -NCT03724903 -NCT03639727 -NCT03724968 -NCT03639805 -NCT03725007 -NCT03639935 -NCT03725059 -NCT03639948 -NCT03725202 -NCT03640078 -NCT03725254 -NCT03640195 -NCT03725306 -NCT03640208 -NCT03725384 -NCT03640260 -NCT03725423 -NCT03640273 -NCT03725436 -NCT03640299 -NCT03725449 -NCT03640325 -NCT03725553 -NCT03640351 -NCT03725605 -NCT03640429 -NCT03725696 -NCT03640533 -NCT03725761 -NCT03640819 -NCT03726281 -NCT03640832 -NCT03726294 -NCT03640871 -NCT03726320 -NCT03640897 -NCT03726333 -NCT03640962 -NCT03726359 -NCT03640975 -NCT03726385 -NCT03641040 -NCT03726398 -NCT03641157 -NCT03726424 -NCT03641222 -NCT03726515 -NCT03641261 -NCT03726619 -NCT03641274 -NCT03726658 -NCT03641287 -NCT03726697 -NCT03641313 -NCT03726736 -NCT03641326 -NCT03726749 -NCT03641339 -NCT03726775 -NCT03641391 -NCT03726801 -NCT03641430 -NCT03726879 -NCT03641443 -NCT03726931 -NCT03641456 -NCT03726944 -NCT03641482 -NCT03726983 -NCT03641547 -NCT03727061 -NCT03641560 -NCT03727126 -NCT03641573 -NCT03727308 -NCT03641586 -NCT03727360 -NCT03641599 -NCT03727373 -NCT03641638 -NCT03727412 -NCT03641742 -NCT03727516 -NCT03641755 -NCT03727633 -NCT03641794 -NCT03727646 -NCT03641872 -NCT03727672 -NCT03641976 -NCT03727685 -NCT03642067 -NCT03727698 -NCT03642093 -NCT03727724 -NCT03642132 -NCT03724331 -NCT03724409 -NCT03724461 -NCT03724591 -NCT03724617 -NCT03724747 -NCT03724773 -NCT03727763 -NCT03642210 -NCT03722537 -NCT03642236 -NCT03722602 -NCT03642418 -NCT03722628 -NCT03642457 -NCT03722732 -NCT03642522 -NCT03722771 -NCT03642561 -NCT03722810 -NCT03642613 -NCT03722875 -NCT03642626 -NCT03722888 -NCT03642652 -NCT03722914 -NCT03642678 -NCT03723044 -NCT03642769 -NCT03723122 -NCT03642782 -NCT03723187 -NCT03642834 -NCT03723330 -NCT03642938 -NCT03723447 -NCT03642964 -NCT03723564 -NCT03642990 -NCT03723681 -NCT03643016 -NCT03723824 -NCT03643042 -NCT03723863 -NCT03643055 -NCT03723902 -NCT03643107 -NCT03723915 -NCT03643133 -NCT03723928 -NCT03643146 -NCT03723941 -NCT03643172 -NCT03723967 -NCT03643237 -NCT03724071 -NCT03643263 -NCT03724084 -NCT03643276 -NCT03724253 -NCT03643471 -NCT03719768 -NCT03719807 -NCT03719846 -NCT03719859 -NCT03719885 -NCT03719898 -NCT03719924 -NCT03719950 -NCT03719989 -NCT03720041 -NCT03720132 -NCT03720158 -NCT03720197 -NCT03720275 -NCT03720340 -NCT03720366 -NCT03720392 -NCT03720431 -NCT03720457 -NCT03720470 -NCT03720496 -NCT03720574 -NCT03720626 -NCT03720639 -NCT03720678 -NCT03720873 -NCT03720886 -NCT03721042 -NCT03721055 -NCT03721068 -NCT03721120 -NCT03721146 -NCT03721159 -NCT03721211 -NCT03721341 -NCT03721484 -NCT03721497 -NCT03721523 -NCT03721601 -NCT03721627 -NCT03721653 -NCT03721679 -NCT03721744 -NCT03721757 -NCT03721770 -NCT03721848 -NCT03721926 -NCT03721952 -NCT03721978 -NCT03721991 -NCT03722030 -NCT03722108 -NCT03722147 -NCT03722186 -NCT03722251 -NCT03722277 -NCT03722290 -NCT03722329 -NCT03722342 -NCT03722355 -NCT03722394 -NCT03722407 -NCT03722420 -NCT03722472 -NCT03722498 -NCT03722511 -NCT03643510 -NCT03718637 -NCT03643549 -NCT03718650 -NCT03643640 -NCT03718728 -NCT03643692 -NCT03718741 -NCT03643744 -NCT03718754 -NCT03643783 -NCT03718767 -NCT03643835 -NCT03718910 -NCT03643861 -NCT03718949 -NCT03643900 -NCT03719105 -NCT03643978 -NCT03719131 -NCT03644056 -NCT03719183 -NCT03644108 -NCT03719196 -NCT03644173 -NCT03719248 -NCT03644186 -NCT03719274 -NCT03644212 -NCT03719300 -NCT03644303 -NCT03719326 -NCT03644329 -NCT03719430 -NCT03644342 -NCT03719534 -NCT03644368 -NCT03719547 -NCT03644459 -NCT03719560 -NCT03644550 -NCT03719573 -NCT03644589 -NCT03719677 -NCT03644602 -NCT03719690 -NCT03644615 -NCT03719716 -NCT03644797 -NCT03715374 -NCT03715413 -NCT03715478 -NCT03715504 -NCT03715517 -NCT03715569 -NCT03715660 -NCT03715673 -NCT03715686 -NCT03715764 -NCT03715777 -NCT03715855 -NCT03715881 -NCT03715933 -NCT03715946 -NCT03715959 -NCT03715985 -NCT03716063 -NCT03716128 -NCT03716180 -NCT03716193 -NCT03716232 -NCT03716245 -NCT03716258 -NCT03716284 -NCT03716518 -NCT03716531 -NCT03716583 -NCT03716596 -NCT03716635 -NCT03716661 -NCT03716739 -NCT03716843 -NCT03716856 -NCT03716986 -NCT03717038 -NCT03717051 -NCT03717142 -NCT03717155 -NCT03717207 -NCT03717298 -NCT03717402 -NCT03717415 -NCT03717428 -NCT03717454 -NCT03717480 -NCT03717506 -NCT03717532 -NCT03717584 -NCT03717610 -NCT03717714 -NCT03717844 -NCT03717857 -NCT03717883 -NCT03717896 -NCT03718000 -NCT03718013 -NCT03718078 -NCT03718091 -NCT03718104 -NCT03718143 -NCT03718221 -NCT03718234 -NCT03718260 -NCT03718325 -NCT03718351 -NCT03718442 -NCT03718455 -NCT03718559 -NCT03718624 -NCT03719742 -NCT03644810 -NCT03714828 -NCT03644823 -NCT03714867 -NCT03644849 -NCT03714906 -NCT03644966 -NCT03714958 -NCT03645005 -NCT03715140 -NCT03645018 -NCT03715205 -NCT03645031 -NCT03715231 -NCT03645057 -NCT03715309 -NCT03645148 -NCT03715322 -NCT03645187 -NCT03709810 -NCT03709849 -NCT03709888 -NCT03709914 -NCT03709953 -NCT03710148 -NCT03710187 -NCT03710226 -NCT03710265 -NCT03710278 -NCT03710356 -NCT03710369 -NCT03710421 -NCT03710499 -NCT03710525 -NCT03710577 -NCT03710603 -NCT03710772 -NCT03710798 -NCT03710876 -NCT03710889 -NCT03710902 -NCT03710915 -NCT03710928 -NCT03710954 -NCT03710993 -NCT03711032 -NCT03711058 -NCT03711110 -NCT03711188 -NCT03711214 -NCT03711240 -NCT03711279 -NCT03711305 -NCT03711422 -NCT03711448 -NCT03711461 -NCT03711578 -NCT03711695 -NCT03711864 -NCT03711877 -NCT03711890 -NCT03711916 -NCT03712020 -NCT03712085 -NCT03712098 -NCT03712202 -NCT03712293 -NCT03712345 -NCT03712358 -NCT03712371 -NCT03712397 -NCT03712423 -NCT03712436 -NCT03712605 -NCT03712683 -NCT03712696 -NCT03712722 -NCT03712800 -NCT03712813 -NCT03712865 -NCT03712878 -NCT03712891 -NCT03712904 -NCT03712930 -NCT03712943 -NCT03712956 -NCT03712969 -NCT03712982 -NCT03712995 -NCT03713021 -NCT03713047 -NCT03713060 -NCT03713099 -NCT03713203 -NCT03713229 -NCT03713255 -NCT03713294 -NCT03713320 -NCT03713372 -NCT03713411 -NCT03713528 -NCT03713580 -NCT03713593 -NCT03713671 -NCT03713697 -NCT03713710 -NCT03713749 -NCT03713879 -NCT03713905 -NCT03714165 -NCT03714243 -NCT03714282 -NCT03714334 -NCT03714347 -NCT03714412 -NCT03714490 -NCT03714529 -NCT03714542 -NCT03714555 -NCT03714581 -NCT03714607 -NCT03714659 -NCT03714763 -NCT03645200 -NCT03654456 -NCT03645239 -NCT03654469 -NCT03645252 -NCT03654521 -NCT03645291 -NCT03654534 -NCT03645304 -NCT03654547 -NCT03645317 -NCT03654612 -NCT03645395 -NCT03654638 -NCT03645434 -NCT03654664 -NCT03645447 -NCT03654703 -NCT03645785 -NCT03654716 -NCT03645876 -NCT03654729 -NCT03645889 -NCT03654768 -NCT03645928 -NCT03654794 -NCT03645980 -NCT03654833 -NCT03645993 -NCT03654872 -NCT03646019 -NCT03708679 -NCT03646071 -NCT03708692 -NCT03646110 -NCT03708744 -NCT03646123 -NCT03708783 -NCT03646162 -NCT03708796 -NCT03646188 -NCT03708822 -NCT03646461 -NCT03708874 -NCT03646617 -NCT03708900 -NCT03646669 -NCT03708913 -NCT03646747 -NCT03708965 -NCT03646955 -NCT03708978 -NCT03646968 -NCT03709030 -NCT03646994 -NCT03709069 -NCT03647007 -NCT03709082 -NCT03647046 -NCT03709121 -NCT03647072 -NCT03709134 -NCT03647111 -NCT03709147 -NCT03647163 -NCT03709238 -NCT03647241 -NCT03709290 -NCT03647280 -NCT03709316 -NCT03647293 -NCT03709329 -NCT03647358 -NCT03709381 -NCT03647397 -NCT03709446 -NCT03647423 -NCT03709485 -NCT03647462 -NCT03709550 -NCT03647488 -NCT03709576 -NCT03647514 -NCT03709680 -NCT03647540 -NCT03709706 -NCT03647592 -NCT03709719 -NCT03647631 -NCT03709758 -NCT03647657 -NCT03653104 -NCT03653117 -NCT03653143 -NCT03653156 -NCT03653221 -NCT03653299 -NCT03653338 -NCT03653364 -NCT03653507 -NCT03653546 -NCT03653585 -NCT03653741 -NCT03653780 -NCT03653819 -NCT03653988 -NCT03654027 -NCT03654053 -NCT03654105 -NCT03654131 -NCT03654144 -NCT03654300 -NCT03654326 -NCT03654404 -NCT03647800 -NCT03650491 -NCT03647839 -NCT03650439 -NCT03647904 -NCT03650543 -NCT03647917 -NCT03650595 -NCT03647956 -NCT03650673 -NCT03647969 -NCT03650699 -NCT03647995 -NCT03650712 -NCT03648034 -NCT03650738 -NCT03648073 -NCT03650764 -NCT03648190 -NCT03650803 -NCT03648359 -NCT03650868 -NCT03648372 -NCT03650894 -NCT03648489 -NCT03650920 -NCT03648502 -NCT03650933 -NCT03648528 -NCT03651037 -NCT03648632 -NCT03651128 -NCT03648697 -NCT03651154 -NCT03648827 -NCT03651167 -NCT03648879 -NCT03651206 -NCT03648944 -NCT03651219 -NCT03648983 -NCT03651271 -NCT03648996 -NCT03651349 -NCT03649035 -NCT03651362 -NCT03649048 -NCT03651375 -NCT03649256 -NCT03651388 -NCT03649295 -NCT03651492 -NCT03649321 -NCT03651570 -NCT03649334 -NCT03651739 -NCT03649399 -NCT03651765 -NCT03649464 -NCT03651921 -NCT03649516 -NCT03651947 -NCT03649529 -NCT03651973 -NCT03649542 -NCT03651999 -NCT03649737 -NCT03652064 -NCT03649841 -NCT03652077 -NCT03649880 -NCT03652142 -NCT03649906 -NCT03652233 -NCT03649919 -NCT03652246 -NCT03649932 -NCT03652285 -NCT03649945 -NCT03652298 -NCT03649958 -NCT03652415 -NCT03649971 -NCT03652428 -NCT03649984 -NCT03652441 -NCT03650023 -NCT03652467 -NCT03650062 -NCT03652480 -NCT03650075 -NCT03652493 -NCT03650140 -NCT03652545 -NCT03650153 -NCT03652571 -NCT03650205 -NCT03652688 -NCT03650257 -NCT03652714 -NCT03650283 -NCT03652857 -NCT03650296 -NCT03652896 -NCT03650322 -NCT03652935 -NCT03650348 -NCT03653039 -NCT03650361 -NCT03653052 -NCT03650387 -NCT03708536 -NCT03654911 -NCT03706820 -NCT03654950 -NCT03706833 -NCT03655002 -NCT03707028 -NCT03655093 -NCT03707093 -NCT03655145 -NCT03707184 -NCT03655171 -NCT03707353 -NCT03655197 -NCT03707431 -NCT03655236 -NCT03707444 -NCT03655340 -NCT03707457 -NCT03655353 -NCT03707496 -NCT03655366 -NCT03707509 -NCT03655392 -NCT03707548 -NCT03655444 -NCT03707600 -NCT03655483 -NCT03707639 -NCT03655496 -NCT03707808 -NCT03655522 -NCT03707847 -NCT03655587 -NCT03707925 -NCT03655600 -NCT03707938 -NCT03655613 -NCT03708003 -NCT03655665 -NCT03708042 -NCT03655756 -NCT03708055 -NCT03655821 -NCT03708120 -NCT03655834 -NCT03708211 -NCT03655873 -NCT03708224 -NCT03655886 -NCT03708237 -NCT03655938 -NCT03708263 -NCT03655977 -NCT03708302 -NCT03656003 -NCT03708328 -NCT03656055 -NCT03708341 -NCT03656094 -NCT03708354 -NCT03656133 -NCT03708393 -NCT03656159 -NCT03708471 -NCT03656172 -NCT03708497 -NCT03656185 -NCT03704311 -NCT03704467 -NCT03704480 -NCT03704584 -NCT03704597 -NCT03704610 -NCT03704649 -NCT03704662 -NCT03704688 -NCT03704714 -NCT03704870 -NCT03704922 -NCT03704987 -NCT03705052 -NCT03705078 -NCT03705117 -NCT03705130 -NCT03705156 -NCT03705325 -NCT03705351 -NCT03705377 -NCT03705390 -NCT03705403 -NCT03705416 -NCT03705429 -NCT03705442 -NCT03705507 -NCT03705533 -NCT03705650 -NCT03705754 -NCT03705832 -NCT03705858 -NCT03705897 -NCT03706027 -NCT03706079 -NCT03706131 -NCT03706157 -NCT03706183 -NCT03706274 -NCT03706287 -NCT03706326 -NCT03706365 -NCT03706534 -NCT03706547 -NCT03706586 -NCT03706599 -NCT03706690 -NCT03706703 -NCT03706742 -NCT03706768 -NCT03656211 -NCT03659071 -NCT03656237 -NCT03659032 -NCT03656380 -NCT03659136 -NCT03656393 -NCT03659227 -NCT03656536 -NCT03659292 -NCT03656549 -NCT03659331 -NCT03656575 -NCT03659448 -NCT03656627 -NCT03659487 -NCT03656705 -NCT03659578 -NCT03656718 -NCT03659617 -NCT03656731 -NCT03659695 -NCT03656835 -NCT03659864 -NCT03657017 -NCT03659968 -NCT03657043 -NCT03659981 -NCT03657056 -NCT03660085 -NCT03657069 -NCT03660098 -NCT03657108 -NCT03702309 -NCT03657303 -NCT03702478 -NCT03657316 -NCT03702491 -NCT03657329 -NCT03702556 -NCT03657381 -NCT03702582 -NCT03657420 -NCT03702647 -NCT03657576 -NCT03702712 -NCT03657628 -NCT03702725 -NCT03657641 -NCT03702829 -NCT03657667 -NCT03702985 -NCT03657732 -NCT03702998 -NCT03657745 -NCT03703011 -NCT03657849 -NCT03703024 -NCT03657888 -NCT03703050 -NCT03657914 -NCT03703063 -NCT03657966 -NCT03703089 -NCT03658031 -NCT03703115 -NCT03658044 -NCT03703167 -NCT03658057 -NCT03703271 -NCT03658070 -NCT03703297 -NCT03658096 -NCT03703310 -NCT03658109 -NCT03703323 -NCT03658161 -NCT03703375 -NCT03658213 -NCT03703427 -NCT03658265 -NCT03703466 -NCT03658304 -NCT03703479 -NCT03658343 -NCT03703492 -NCT03658356 -NCT03703557 -NCT03658369 -NCT03703570 -NCT03658434 -NCT03703596 -NCT03658447 -NCT03703830 -NCT03658486 -NCT03703882 -NCT03658525 -NCT03703986 -NCT03658668 -NCT03703999 -NCT03658759 -NCT03704051 -NCT03658772 -NCT03704077 -NCT03658785 -NCT03704233 -NCT03658863 -NCT03704246 -NCT03658889 -NCT03704259 -NCT03658915 -NCT03704298 -NCT03660111 -NCT03700359 -NCT03660137 -NCT03700411 -NCT03660163 -NCT03700437 -NCT03660176 -NCT03700450 -NCT03660189 -NCT03700476 -NCT03660228 -NCT03700502 -NCT03660293 -NCT03700541 -NCT03660319 -NCT03700710 -NCT03660449 -NCT03700814 -NCT03660540 -NCT03700905 -NCT03660592 -NCT03700983 -NCT03660605 -NCT03701022 -NCT03660631 -NCT03701061 -NCT03660670 -NCT03701217 -NCT03660761 -NCT03701282 -NCT03660826 -NCT03701295 -NCT03660852 -NCT03701308 -NCT03660917 -NCT03701321 -NCT03660930 -NCT03701334 -NCT03661021 -NCT03701373 -NCT03661047 -NCT03701451 -NCT03661086 -NCT03701477 -NCT03661242 -NCT03701490 -NCT03661307 -NCT03701529 -NCT03661320 -NCT03701581 -NCT03661398 -NCT03701659 -NCT03661424 -NCT03701737 -NCT03661437 -NCT03701776 -NCT03661515 -NCT03702010 -NCT03661541 -NCT03702023 -NCT03661554 -NCT03702101 -NCT03661567 -NCT03702179 -NCT03661632 -NCT03702192 -NCT03661671 -NCT03702218 -NCT03661684 -NCT03702231 -NCT03661697 -NCT03702244 -NCT03661723 -NCT03702296 -NCT03661762 -NCT03668028 -NCT03668067 -NCT03668119 -NCT03668223 -NCT03668275 -NCT03668340 -NCT03668366 -NCT03668392 -NCT03668431 -NCT03668457 -NCT03668496 -NCT03668522 -NCT03668574 -NCT03668639 -NCT03668652 -NCT03668730 -NCT03668769 -NCT03668808 -NCT03668821 -NCT03668847 -NCT03668977 -NCT03669146 -NCT03669172 -NCT03669237 -NCT03669263 -NCT03669432 -NCT03669445 -NCT03669497 -NCT03669523 -NCT03669549 -NCT03669562 -NCT03669601 -NCT03669614 -NCT03669666 -NCT03669705 -NCT03669718 -NCT03669770 -NCT03669783 -NCT03700281 -NCT03700294 -NCT03700333 -NCT03661801 -NCT03665194 -NCT03661892 -NCT03665155 -NCT03662035 -NCT03665285 -NCT03662048 -NCT03665441 -NCT03662074 -NCT03665454 -NCT03662087 -NCT03665480 -NCT03662269 -NCT03665493 -NCT03662412 -NCT03665519 -NCT03662438 -NCT03665545 -NCT03662516 -NCT03665584 -NCT03662555 -NCT03665597 -NCT03662659 -NCT03665714 -NCT03662698 -NCT03665779 -NCT03662789 -NCT03665844 -NCT03662802 -NCT03665922 -NCT03662815 -NCT03665974 -NCT03662841 -NCT03666000 -NCT03662893 -NCT03666052 -NCT03662906 -NCT03666104 -NCT03662958 -NCT03666117 -NCT03663062 -NCT03666143 -NCT03663088 -NCT03666221 -NCT03663153 -NCT03666260 -NCT03663166 -NCT03666273 -NCT03663205 -NCT03666325 -NCT03663218 -NCT03666351 -NCT03663712 -NCT03666429 -NCT03663725 -NCT03666442 -NCT03663764 -NCT03666520 -NCT03663842 -NCT03666559 -NCT03663855 -NCT03666572 -NCT03663959 -NCT03666624 -NCT03664024 -NCT03666676 -NCT03664063 -NCT03666728 -NCT03664115 -NCT03666819 -NCT03664167 -NCT03666832 -NCT03664193 -NCT03666936 -NCT03664206 -NCT03666962 -NCT03664297 -NCT03666988 -NCT03664531 -NCT03667027 -NCT03664609 -NCT03667092 -NCT03664635 -NCT03667170 -NCT03664661 -NCT03667222 -NCT03664674 -NCT03667469 -NCT03664687 -NCT03667482 -NCT03664726 -NCT03667534 -NCT03664739 -NCT03667560 -NCT03664752 -NCT03667664 -NCT03664830 -NCT03667677 -NCT03664856 -NCT03667716 -NCT03664869 -NCT03667742 -NCT03664895 -NCT03667820 -NCT03664934 -NCT03667833 -NCT03665077 -NCT03667911 -NCT03665129 -NCT03667950 -NCT03665142 -NCT03700229 -NCT03669900 -NCT03672422 -NCT03669926 -NCT03672396 -NCT03669939 -NCT03697512 -NCT03669952 -NCT03697551 -NCT03669965 -NCT03697564 -NCT03669978 -NCT03697629 -NCT03670030 -NCT03697655 -NCT03670056 -NCT03697707 -NCT03670069 -NCT03697824 -NCT03670134 -NCT03697850 -NCT03670160 -NCT03697863 -NCT03670173 -NCT03697876 -NCT03670199 -NCT03697889 -NCT03670251 -NCT03697993 -NCT03670355 -NCT03698019 -NCT03670394 -NCT03698071 -NCT03670459 -NCT03698162 -NCT03670563 -NCT03698227 -NCT03670576 -NCT03698253 -NCT03670693 -NCT03698266 -NCT03670706 -NCT03698370 -NCT03670719 -NCT03698383 -NCT03670862 -NCT03698461 -NCT03670888 -NCT03698487 -NCT03670901 -NCT03698539 -NCT03670927 -NCT03698552 -NCT03670966 -NCT03698630 -NCT03671018 -NCT03698721 -NCT03671044 -NCT03698825 -NCT03671083 -NCT03698903 -NCT03671226 -NCT03698994 -NCT03671252 -NCT03699033 -NCT03671265 -NCT03699098 -NCT03671304 -NCT03699124 -NCT03671330 -NCT03699176 -NCT03671343 -NCT03699202 -NCT03671395 -NCT03699280 -NCT03671460 -NCT03699293 -NCT03671538 -NCT03699319 -NCT03671564 -NCT03699332 -NCT03671590 -NCT03699371 -NCT03671642 -NCT03699384 -NCT03671720 -NCT03699449 -NCT03671798 -NCT03699475 -NCT03671811 -NCT03699514 -NCT03671850 -NCT03699631 -NCT03671915 -NCT03699657 -NCT03671928 -NCT03699722 -NCT03672032 -NCT03699735 -NCT03672136 -NCT03699748 -NCT03672149 -NCT03699761 -NCT03672240 -NCT03699800 -NCT03672253 -NCT03699956 -NCT03672266 -NCT03699969 -NCT03672305 -NCT03699995 -NCT03672318 -NCT03700099 -NCT03672500 -NCT03696355 -NCT03672539 -NCT03696394 -NCT03672617 -NCT03696472 -NCT03672643 -NCT03696524 -NCT03672695 -NCT03696537 -NCT03672721 -NCT03696602 -NCT03672773 -NCT03696680 -NCT03672799 -NCT03696784 -NCT03672851 -NCT03696940 -NCT03672877 -NCT03696979 -NCT03672955 -NCT03697096 -NCT03672968 -NCT03697109 -NCT03672981 -NCT03697148 -NCT03672994 -NCT03697161 -NCT03673020 -NCT03697200 -NCT03673072 -NCT03697226 -NCT03673085 -NCT03697239 -NCT03673124 -NCT03697304 -NCT03673137 -NCT03697343 -NCT03673202 -NCT03697395 -NCT03673319 -NCT03697408 -NCT03673332 -NCT03692403 -NCT03692429 -NCT03692520 -NCT03692533 -NCT03692624 -NCT03692637 -NCT03692663 -NCT03692689 -NCT03692767 -NCT03692793 -NCT03692832 -NCT03692845 -NCT03692858 -NCT03693014 -NCT03693170 -NCT03693248 -NCT03693261 -NCT03693300 -NCT03693326 -NCT03693339 -NCT03693365 -NCT03693469 -NCT03693547 -NCT03693573 -NCT03693586 -NCT03693612 -NCT03693677 -NCT03693703 -NCT03693742 -NCT03693807 -NCT03693820 -NCT03693833 -NCT03693846 -NCT03693898 -NCT03693950 -NCT03694002 -NCT03694015 -NCT03694054 -NCT03694080 -NCT03694158 -NCT03694197 -NCT03694249 -NCT03694262 -NCT03694431 -NCT03694522 -NCT03694535 -NCT03694626 -NCT03694756 -NCT03694834 -NCT03694938 -NCT03694977 -NCT03694990 -NCT03695029 -NCT03695042 -NCT03695055 -NCT03695120 -NCT03695250 -NCT03695276 -NCT03695315 -NCT03695380 -NCT03695406 -NCT03695471 -NCT03695510 -NCT03695705 -NCT03695731 -NCT03695744 -NCT03695848 -NCT03695965 -NCT03695978 -NCT03696004 -NCT03696030 -NCT03696056 -NCT03696108 -NCT03696121 -NCT03696186 -NCT03696212 -NCT03696277 -NCT03673410 -NCT03679091 -NCT03679169 -NCT03679182 -NCT03679208 -NCT03679260 -NCT03679286 -NCT03679312 -NCT03679338 -NCT03679377 -NCT03679455 -NCT03679507 -NCT03679520 -NCT03679559 -NCT03679572 -NCT03679585 -NCT03679624 -NCT03679650 -NCT03679663 -NCT03679754 -NCT03679767 -NCT03679819 -NCT03679910 -NCT03679975 -NCT03680092 -NCT03680144 -NCT03680222 -NCT03680261 -NCT03680365 -NCT03680430 -NCT03680495 -NCT03680508 -NCT03680521 -NCT03680560 -NCT03680586 -NCT03680612 -NCT03680651 -NCT03680872 -NCT03680989 -NCT03681015 -NCT03681028 -NCT03681197 -NCT03681392 -NCT03681405 -NCT03681418 -NCT03681470 -NCT03681483 -NCT03681535 -NCT03681548 -NCT03681561 -NCT03681665 -NCT03681873 -NCT03681951 -NCT03681964 -NCT03682029 -NCT03682055 -NCT03682068 -NCT03682094 -NCT03682146 -NCT03682211 -NCT03682224 -NCT03682276 -NCT03682289 -NCT03682367 -NCT03682380 -NCT03682458 -NCT03682536 -NCT03682549 -NCT03682614 -NCT03682666 -NCT03682744 -NCT03682796 -NCT03682939 -NCT03683043 -NCT03683069 -NCT03683121 -NCT03683134 -NCT03683147 -NCT03683212 -NCT03683277 -NCT03683329 -NCT03683342 -NCT03683420 -NCT03683433 -NCT03683550 -NCT03683615 -NCT03683680 -NCT03683849 -NCT03683875 -NCT03683940 -NCT03684005 -NCT03684083 -NCT03684096 -NCT03684109 -NCT03684135 -NCT03684148 -NCT03684161 -NCT03684265 -NCT03684278 -NCT03684330 -NCT03684408 -NCT03684486 -NCT03684499 -NCT03684512 -NCT03684629 -NCT03684694 -NCT03684707 -NCT03684772 -NCT03684785 -NCT03691311 -NCT03691337 -NCT03691376 -NCT03691441 -NCT03691454 -NCT03691493 -NCT03691714 -NCT03691857 -NCT03691870 -NCT03691883 -NCT03691896 -NCT03691974 -NCT03692013 -NCT03692039 -NCT03692065 -NCT03692221 -NCT03692338 -NCT03673501 -NCT03676257 -NCT03673618 -NCT03676192 -NCT03673657 -NCT03676309 -NCT03673735 -NCT03676426 -NCT03673787 -NCT03676478 -NCT03673813 -NCT03676504 -NCT03673826 -NCT03676517 -NCT03673865 -NCT03676530 -NCT03673904 -NCT03676556 -NCT03673917 -NCT03676686 -NCT03673943 -NCT03676712 -NCT03674047 -NCT03676777 -NCT03674073 -NCT03676790 -NCT03674086 -NCT03676868 -NCT03674112 -NCT03676920 -NCT03674138 -NCT03676933 -NCT03674164 -NCT03676946 -NCT03674242 -NCT03676959 -NCT03674281 -NCT03676972 -NCT03674294 -NCT03676985 -NCT03674346 -NCT03677024 -NCT03674411 -NCT03677050 -NCT03674424 -NCT03677128 -NCT03674450 -NCT03677141 -NCT03674463 -NCT03677154 -NCT03674502 -NCT03677206 -NCT03674515 -NCT03677245 -NCT03674567 -NCT03677349 -NCT03674593 -NCT03677362 -NCT03674632 -NCT03677401 -NCT03674710 -NCT03677427 -NCT03674814 -NCT03677531 -NCT03674827 -NCT03677544 -NCT03674996 -NCT03677596 -NCT03675035 -NCT03677648 -NCT03675152 -NCT03677661 -NCT03675230 -NCT03677713 -NCT03675256 -NCT03677739 -NCT03675269 -NCT03677960 -NCT03675282 -NCT03678025 -NCT03675425 -NCT03678090 -NCT03675451 -NCT03678233 -NCT03675529 -NCT03678259 -NCT03675581 -NCT03678272 -NCT03675646 -NCT03678350 -NCT03675737 -NCT03678389 -NCT03675841 -NCT03678428 -NCT03675893 -NCT03678467 -NCT03675958 -NCT03678493 -NCT03675984 -NCT03678519 -NCT03676023 -NCT03678649 -NCT03676036 -NCT03678883 -NCT03676049 -NCT03678922 -NCT03676101 -NCT03678935 -NCT03676114 -NCT03678948 -NCT03676153 -NCT03691272 -NCT03684811 -NCT03687645 -NCT03684837 -NCT03687606 -NCT03684850 -NCT03687710 -NCT03684863 -NCT03687762 -NCT03684889 -NCT03687814 -NCT03684928 -NCT03687853 -NCT03684967 -NCT03687866 -NCT03684980 -NCT03687944 -NCT03685175 -NCT03687957 -NCT03685331 -NCT03688152 -NCT03685344 -NCT03688178 -NCT03685370 -NCT03688230 -NCT03685409 -NCT03688269 -NCT03685448 -NCT03688295 -NCT03685461 -NCT03688321 -NCT03685526 -NCT03688386 -NCT03685539 -NCT03688451 -NCT03685591 -NCT03688646 -NCT03685617 -NCT03688685 -NCT03685695 -NCT03688958 -NCT03685721 -NCT03688971 -NCT03685786 -NCT03688984 -NCT03685890 -NCT03689049 -NCT03685929 -NCT03689192 -NCT03686007 -NCT03689335 -NCT03686072 -NCT03689361 -NCT03686098 -NCT03689439 -NCT03686124 -NCT03689478 -NCT03686202 -NCT03689517 -NCT03686215 -NCT03689582 -NCT03686254 -NCT03689634 -NCT03686332 -NCT03689699 -NCT03686345 -NCT03689855 -NCT03686371 -NCT03689972 -NCT03686384 -NCT03690011 -NCT03686397 -NCT03690024 -NCT03686436 -NCT03690115 -NCT03686475 -NCT03690141 -NCT03686488 -NCT03690154 -NCT03686514 -NCT03690245 -NCT03686527 -NCT03690310 -NCT03686592 -NCT03690323 -NCT03686618 -NCT03690349 -NCT03686644 -NCT03690388 -NCT03686683 -NCT03690414 -NCT03686709 -NCT03690544 -NCT03686787 -NCT03690739 -NCT03686852 -NCT03690869 -NCT03686891 -NCT03690921 -NCT03687034 -NCT03690986 -NCT03687125 -NCT03691051 -NCT03687190 -NCT03691077 -NCT03687216 -NCT03691090 -NCT03687229 -NCT03691181 -NCT03687424 -NCT03691207 -NCT03687502 -NCT03757299 -NCT03752164 -NCT03754751 -NCT03752177 -NCT03754725 -NCT03752190 -NCT03754764 -NCT03752203 -NCT03754777 -NCT03752216 -NCT03754816 -NCT03752268 -NCT03754933 -NCT03752333 -NCT03754959 -NCT03752398 -NCT03754985 -NCT03752541 -NCT03754998 -NCT03752567 -NCT03755037 -NCT03752606 -NCT03755102 -NCT03752619 -NCT03755115 -NCT03752645 -NCT03755141 -NCT03752697 -NCT03755154 -NCT03752710 -NCT03755193 -NCT03752723 -NCT03755219 -NCT03752736 -NCT03755388 -NCT03752827 -NCT03755414 -NCT03752983 -NCT03755440 -NCT03753035 -NCT03755505 -NCT03753100 -NCT03755544 -NCT03753178 -NCT03755726 -NCT03753243 -NCT03755739 -NCT03753334 -NCT03755752 -NCT03753373 -NCT03755765 -NCT03753399 -NCT03755791 -NCT03753438 -NCT03755804 -NCT03753542 -NCT03755869 -NCT03753633 -NCT03755895 -NCT03753659 -NCT03755921 -NCT03753672 -NCT03755947 -NCT03753685 -NCT03755973 -NCT03753724 -NCT03756064 -NCT03753776 -NCT03756090 -NCT03753789 -NCT03756116 -NCT03753802 -NCT03756155 -NCT03753841 -NCT03756168 -NCT03753854 -NCT03756207 -NCT03753893 -NCT03756298 -NCT03753919 -NCT03756454 -NCT03753932 -NCT03756467 -NCT03754075 -NCT03756480 -NCT03754140 -NCT03756493 -NCT03754179 -NCT03756519 -NCT03754192 -NCT03756818 -NCT03754244 -NCT03756896 -NCT03754335 -NCT03756909 -NCT03754361 -NCT03757000 -NCT03754387 -NCT03757078 -NCT03754465 -NCT03757091 -NCT03754491 -NCT03757143 -NCT03754517 -NCT03757169 -NCT03754530 -NCT03757221 -NCT03754569 -NCT03757273 -NCT03754608 -NCT03757286 -NCT03754621 -NCT03763604 -NCT03757364 -NCT03760627 -NCT03757442 -NCT03760614 -NCT03757455 -NCT03760653 -NCT03757572 -NCT03760666 -NCT03757611 -NCT03760822 -NCT03757637 -NCT03760835 -NCT03757663 -NCT03760861 -NCT03757689 -NCT03760887 -NCT03757754 -NCT03761017 -NCT03757858 -NCT03761056 -NCT03757936 -NCT03761069 -NCT03757949 -NCT03761095 -NCT03758001 -NCT03761108 -NCT03758014 -NCT03761121 -NCT03758183 -NCT03761160 -NCT03758209 -NCT03761225 -NCT03758222 -NCT03761238 -NCT03758287 -NCT03761498 -NCT03758326 -NCT03761667 -NCT03758417 -NCT03761706 -NCT03758508 -NCT03761914 -NCT03758534 -NCT03762018 -NCT03758664 -NCT03762044 -NCT03758677 -NCT03762122 -NCT03758729 -NCT03762161 -NCT03758781 -NCT03762174 -NCT03758807 -NCT03762291 -NCT03758820 -NCT03762343 -NCT03758989 -NCT03762382 -NCT03759093 -NCT03762447 -NCT03759184 -NCT03762473 -NCT03759301 -NCT03762525 -NCT03759366 -NCT03762564 -NCT03759431 -NCT03762590 -NCT03759470 -NCT03762616 -NCT03759483 -NCT03762694 -NCT03759496 -NCT03762759 -NCT03759587 -NCT03762785 -NCT03759600 -NCT03762902 -NCT03759613 -NCT03762967 -NCT03759678 -NCT03762980 -NCT03759691 -NCT03763019 -NCT03759730 -NCT03763032 -NCT03759756 -NCT03763123 -NCT03759821 -NCT03763162 -NCT03759951 -NCT03763175 -NCT03760081 -NCT03763214 -NCT03760094 -NCT03763253 -NCT03760120 -NCT03763266 -NCT03760380 -NCT03763383 -NCT03760406 -NCT03763396 -NCT03760445 -NCT03763422 -NCT03760471 -NCT03763513 -NCT03760523 -NCT03763552 -NCT03760575 -NCT03763565 -NCT03760588 -NCT03769753 -NCT03763617 -NCT03766776 -NCT03763734 -NCT03766763 -NCT03763799 -NCT03766854 -NCT03763825 -NCT03766984 -NCT03763838 -NCT03767075 -NCT03763851 -NCT03767179 -NCT03763955 -NCT03767244 -NCT03764020 -NCT03767257 -NCT03764072 -NCT03767335 -NCT03764085 -NCT03767348 -NCT03764137 -NCT03767439 -NCT03764163 -NCT03767517 -NCT03764293 -NCT03767582 -NCT03764306 -NCT03767660 -NCT03764540 -NCT03767725 -NCT03764553 -NCT03767751 -NCT03764735 -NCT03767790 -NCT03764761 -NCT03767881 -NCT03764865 -NCT03767959 -NCT03764943 -NCT03767998 -NCT03764995 -NCT03768063 -NCT03765021 -NCT03768115 -NCT03765073 -NCT03768167 -NCT03765099 -NCT03768310 -NCT03765177 -NCT03768336 -NCT03765190 -NCT03768349 -NCT03765229 -NCT03768375 -NCT03765268 -NCT03768414 -NCT03765346 -NCT03768479 -NCT03765424 -NCT03768492 -NCT03765541 -NCT03768505 -NCT03765593 -NCT03768531 -NCT03765632 -NCT03768570 -NCT03765684 -NCT03768661 -NCT03765762 -NCT03768765 -NCT03765775 -NCT03768830 -NCT03765788 -NCT03768856 -NCT03765801 -NCT03768882 -NCT03765892 -NCT03768960 -NCT03765918 -NCT03769090 -NCT03765983 -NCT03769103 -NCT03765996 -NCT03769116 -NCT03766009 -NCT03769129 -NCT03766061 -NCT03769155 -NCT03766074 -NCT03769181 -NCT03766100 -NCT03769246 -NCT03766126 -NCT03769285 -NCT03766178 -NCT03769311 -NCT03766243 -NCT03769376 -NCT03766295 -NCT03769415 -NCT03766373 -NCT03769428 -NCT03766386 -NCT03769467 -NCT03766412 -NCT03769506 -NCT03766555 -NCT03769532 -NCT03766607 -NCT03769688 -NCT03766659 -NCT03775811 -NCT03769766 -NCT03773107 -NCT03769805 -NCT03773055 -NCT03769961 -NCT03773120 -NCT03769987 -NCT03773133 -NCT03770000 -NCT03773224 -NCT03770026 -NCT03773263 -NCT03770234 -NCT03773302 -NCT03770260 -NCT03773367 -NCT03770273 -NCT03773380 -NCT03770299 -NCT03773510 -NCT03770416 -NCT03773666 -NCT03770429 -NCT03773705 -NCT03770442 -NCT03773718 -NCT03770455 -NCT03773744 -NCT03770494 -NCT03773809 -NCT03770546 -NCT03773991 -NCT03770559 -NCT03774017 -NCT03770585 -NCT03774056 -NCT03770598 -NCT03774121 -NCT03770611 -NCT03774199 -NCT03770689 -NCT03774277 -NCT03770715 -NCT03774355 -NCT03770754 -NCT03774446 -NCT03770884 -NCT03774472 -NCT03770897 -NCT03774563 -NCT03770962 -NCT03774589 -NCT03770988 -NCT03774654 -NCT03771027 -NCT03774680 -NCT03771157 -NCT03774732 -NCT03771222 -NCT03774784 -NCT03771287 -NCT03774810 -NCT03771378 -NCT03774862 -NCT03771404 -NCT03774888 -NCT03771456 -NCT03774901 -NCT03771469 -NCT03774966 -NCT03771651 -NCT03774979 -NCT03771768 -NCT03774992 -NCT03771794 -NCT03775005 -NCT03771820 -NCT03775031 -NCT03771833 -NCT03775096 -NCT03771846 -NCT03775148 -NCT03771989 -NCT03775161 -NCT03772028 -NCT03775213 -NCT03772132 -NCT03775239 -NCT03772158 -NCT03775265 -NCT03772288 -NCT03775291 -NCT03772353 -NCT03775369 -NCT03772561 -NCT03775395 -NCT03772587 -NCT03775473 -NCT03772626 -NCT03775486 -NCT03772756 -NCT03775525 -NCT03772834 -NCT03775616 -NCT03772899 -NCT03775629 -NCT03772912 -NCT03775707 -NCT03772925 -NCT03775733 -NCT03773003 -NCT03781219 -NCT03775850 -NCT03778619 -NCT03775928 -NCT03778593 -NCT03776006 -NCT03778658 -NCT03776045 -NCT03778814 -NCT03776071 -NCT03778879 -NCT03776110 -NCT03778931 -NCT03776136 -NCT03778957 -NCT03776149 -NCT03778996 -NCT03776175 -NCT03779009 -NCT03776253 -NCT03779035 -NCT03776279 -NCT03779100 -NCT03776318 -NCT03779113 -NCT03776383 -NCT03779152 -NCT03776487 -NCT03779165 -NCT03776591 -NCT03779191 -NCT03776604 -NCT03779230 -NCT03776630 -NCT03779464 -NCT03776669 -NCT03779477 -NCT03776812 -NCT03779503 -NCT03776851 -NCT03779529 -NCT03776864 -NCT03779568 -NCT03776955 -NCT03779581 -NCT03776968 -NCT03779594 -NCT03777046 -NCT03779620 -NCT03777085 -NCT03779646 -NCT03777124 -NCT03779659 -NCT03777306 -NCT03779685 -NCT03777319 -NCT03779737 -NCT03777462 -NCT03779750 -NCT03777475 -NCT03779815 -NCT03777488 -NCT03779854 -NCT03777579 -NCT03779867 -NCT03777657 -NCT03780010 -NCT03777722 -NCT03780036 -NCT03777774 -NCT03780049 -NCT03777813 -NCT03780075 -NCT03777852 -NCT03780153 -NCT03777930 -NCT03780283 -NCT03777969 -NCT03780296 -NCT03777982 -NCT03780309 -NCT03778021 -NCT03780387 -NCT03778047 -NCT03780426 -NCT03778060 -NCT03780491 -NCT03778073 -NCT03780569 -NCT03778086 -NCT03780582 -NCT03778112 -NCT03780608 -NCT03778125 -NCT03780634 -NCT03778138 -NCT03780712 -NCT03778151 -NCT03780725 -NCT03778229 -NCT03780972 -NCT03778255 -NCT03781011 -NCT03778268 -NCT03781050 -NCT03778294 -NCT03781063 -NCT03778359 -NCT03781089 -NCT03778411 -NCT03781154 -NCT03778541 -NCT03786861 -NCT03781271 -NCT03784547 -NCT03781323 -NCT03784469 -NCT03781362 -NCT03784599 -NCT03781739 -NCT03784625 -NCT03781778 -NCT03784677 -NCT03781869 -NCT03784703 -NCT03781895 -NCT03784729 -NCT03781908 -NCT03784742 -NCT03781934 -NCT03784755 -NCT03781960 -NCT03784794 -NCT03781986 -NCT03784976 -NCT03782051 -NCT03785015 -NCT03782064 -NCT03785184 -NCT03782207 -NCT03785210 -NCT03782363 -NCT03785249 -NCT03782415 -NCT03785262 -NCT03782428 -NCT03785288 -NCT03782467 -NCT03785366 -NCT03782480 -NCT03785418 -NCT03782701 -NCT03785457 -NCT03782714 -NCT03785496 -NCT03782727 -NCT03785574 -NCT03782831 -NCT03785665 -NCT03782870 -NCT03785678 -NCT03783078 -NCT03785704 -NCT03783143 -NCT03785743 -NCT03783182 -NCT03785756 -NCT03783273 -NCT03785795 -NCT03783312 -NCT03785808 -NCT03783325 -NCT03785873 -NCT03783364 -NCT03785886 -NCT03783403 -NCT03785925 -NCT03783442 -NCT03785938 -NCT03783481 -NCT03785964 -NCT03783546 -NCT03786003 -NCT03783559 -NCT03786055 -NCT03783572 -NCT03786081 -NCT03783585 -NCT03786094 -NCT03783728 -NCT03786172 -NCT03783780 -NCT03786198 -NCT03783871 -NCT03786237 -NCT03783897 -NCT03786289 -NCT03783936 -NCT03786354 -NCT03783949 -NCT03786367 -NCT03784014 -NCT03786406 -NCT03784027 -NCT03786419 -NCT03784040 -NCT03786484 -NCT03784066 -NCT03786575 -NCT03784157 -NCT03786666 -NCT03784183 -NCT03786692 -NCT03784326 -NCT03786744 -NCT03784339 -NCT03786770 -NCT03784378 -NCT03786783 -NCT03784417 -NCT03786796 -NCT03784430 -NCT03786848 -NCT03784456 -NCT03792438 -NCT03786913 -NCT03789656 -NCT03786926 -NCT03789617 -NCT03787017 -NCT03789773 -NCT03787043 -NCT03789838 -NCT03787056 -NCT03789851 -NCT03787251 -NCT03789864 -NCT03787264 -NCT03789877 -NCT03787303 -NCT03789955 -NCT03787498 -NCT03790059 -NCT03787511 -NCT03790072 -NCT03787589 -NCT03790098 -NCT03787602 -NCT03790111 -NCT03787680 -NCT03790215 -NCT03787784 -NCT03790228 -NCT03787823 -NCT03790241 -NCT03787914 -NCT03790384 -NCT03787940 -NCT03790397 -NCT03787953 -NCT03790423 -NCT03787966 -NCT03790475 -NCT03787979 -NCT03790488 -NCT03787992 -NCT03790553 -NCT03788031 -NCT03790592 -NCT03788057 -NCT03790631 -NCT03788083 -NCT03790748 -NCT03788109 -NCT03790813 -NCT03788122 -NCT03790826 -NCT03788161 -NCT03790852 -NCT03788174 -NCT03790891 -NCT03788187 -NCT03791008 -NCT03788213 -NCT03791060 -NCT03788226 -NCT03791112 -NCT03788291 -NCT03791138 -NCT03788434 -NCT03791164 -NCT03788447 -NCT03791229 -NCT03788460 -NCT03791242 -NCT03788499 -NCT03791398 -NCT03788512 -NCT03791515 -NCT03788590 -NCT03791528 -NCT03788603 -NCT03791658 -NCT03788733 -NCT03791736 -NCT03788772 -NCT03791814 -NCT03788785 -NCT03791905 -NCT03788850 -NCT03791918 -NCT03788889 -NCT03791944 -NCT03788954 -NCT03792009 -NCT03788967 -NCT03792048 -NCT03789019 -NCT03792074 -NCT03789097 -NCT03792165 -NCT03789110 -NCT03792191 -NCT03789149 -NCT03792230 -NCT03789175 -NCT03792256 -NCT03789240 -NCT03792269 -NCT03789357 -NCT03792321 -NCT03789422 -NCT03792347 -NCT03789552 -NCT03792425 -NCT03789604 -NCT03796845 -NCT03792477 -NCT03794609 -NCT03792490 -NCT03794596 -NCT03792503 -NCT03794635 -NCT03792516 -NCT03794661 -NCT03792529 -NCT03794713 -NCT03792542 -NCT03794726 -NCT03792555 -NCT03794752 -NCT03792568 -NCT03794791 -NCT03792620 -NCT03794830 -NCT03792633 -NCT03794843 -NCT03792659 -NCT03794895 -NCT03792724 -NCT03794999 -NCT03792750 -NCT03795012 -NCT03792763 -NCT03795194 -NCT03792789 -NCT03795207 -NCT03792802 -NCT03795233 -NCT03792815 -NCT03795246 -NCT03792841 -NCT03795272 -NCT03792867 -NCT03795285 -NCT03792919 -NCT03795311 -NCT03792932 -NCT03795337 -NCT03792958 -NCT03795350 -NCT03792971 -NCT03795493 -NCT03793049 -NCT03795571 -NCT03793114 -NCT03795584 -NCT03793140 -NCT03795597 -NCT03793166 -NCT03795610 -NCT03793179 -NCT03795662 -NCT03793192 -NCT03795675 -NCT03793205 -NCT03795714 -NCT03793322 -NCT03795779 -NCT03793348 -NCT03795935 -NCT03793361 -NCT03795987 -NCT03793387 -NCT03796026 -NCT03793478 -NCT03796052 -NCT03793491 -NCT03796091 -NCT03793517 -NCT03796143 -NCT03793543 -NCT03796195 -NCT03793595 -NCT03796247 -NCT03793686 -NCT03796273 -NCT03793725 -NCT03796390 -NCT03793829 -NCT03796416 -NCT03793894 -NCT03796429 -NCT03793907 -NCT03796455 -NCT03794102 -NCT03796481 -NCT03794167 -NCT03796507 -NCT03794219 -NCT03796520 -NCT03794284 -NCT03796533 -NCT03794297 -NCT03796559 -NCT03794349 -NCT03796598 -NCT03794375 -NCT03796637 -NCT03794388 -NCT03796650 -NCT03794414 -NCT03796702 -NCT03794440 -NCT03796767 -NCT03794544 -NCT03796819 -NCT03794557 -NCT03825055 -NCT03796884 -NCT03799835 -NCT03796988 -NCT03799757 -NCT03797131 -NCT03799887 -NCT03797157 -NCT03799913 -NCT03797235 -NCT03799926 -NCT03797261 -NCT03799939 -NCT03797326 -NCT03799952 -NCT03797391 -NCT03799991 -NCT03797443 -NCT03800095 -NCT03797456 -NCT03800134 -NCT03797469 -NCT03800290 -NCT03797508 -NCT03800446 -NCT03797547 -NCT03800498 -NCT03797586 -NCT03800524 -NCT03797625 -NCT03800602 -NCT03797833 -NCT03800615 -NCT03797846 -NCT03800654 -NCT03797989 -NCT03800693 -NCT03798002 -NCT03800758 -NCT03798015 -NCT03800784 -NCT03798080 -NCT03800836 -NCT03798106 -NCT03800927 -NCT03798119 -NCT03800953 -NCT03798158 -NCT03801031 -NCT03798314 -NCT03801083 -NCT03798418 -NCT03824002 -NCT03798444 -NCT03824080 -NCT03798457 -NCT03824132 -NCT03798509 -NCT03824145 -NCT03798561 -NCT03824158 -NCT03798626 -NCT03824197 -NCT03798639 -NCT03824223 -NCT03798678 -NCT03824275 -NCT03798704 -NCT03824327 -NCT03798743 -NCT03824366 -NCT03798769 -NCT03824379 -NCT03798860 -NCT03824431 -NCT03798899 -NCT03824457 -NCT03798951 -NCT03824483 -NCT03799003 -NCT03824535 -NCT03799094 -NCT03824587 -NCT03799224 -NCT03824652 -NCT03799380 -NCT03824665 -NCT03799406 -NCT03824691 -NCT03799445 -NCT03824704 -NCT03799484 -NCT03824717 -NCT03799510 -NCT03824808 -NCT03799523 -NCT03824834 -NCT03799575 -NCT03824886 -NCT03799601 -NCT03824899 -NCT03799614 -NCT03824912 -NCT03799679 -NCT03824951 -NCT03799692 -NCT03824964 -NCT03799705 -NCT03824977 -NCT03799731 -NCT03824990 -NCT03799744 -NCT03825042 -NCT03801200 -NCT03821545 -NCT03801213 -NCT03821610 -NCT03801304 -NCT03821675 -NCT03801356 -NCT03821792 -NCT03801369 -NCT03821870 -NCT03801395 -NCT03821935 -NCT03801434 -NCT03822117 -NCT03801499 -NCT03822130 -NCT03801525 -NCT03822156 -NCT03801668 -NCT03822195 -NCT03801850 -NCT03822234 -NCT03801863 -NCT03822312 -NCT03801876 -NCT03822351 -NCT03801902 -NCT03822468 -NCT03801915 -NCT03822494 -NCT03802019 -NCT03822520 -NCT03802045 -NCT03822533 -NCT03802058 -NCT03822572 -NCT03802071 -NCT03822650 -NCT03802084 -NCT03822715 -NCT03802097 -NCT03822728 -NCT03802123 -NCT03822780 -NCT03802188 -NCT03822845 -NCT03802240 -NCT03822871 -NCT03802266 -NCT03822897 -NCT03802448 -NCT03822936 -NCT03802474 -NCT03823001 -NCT03802487 -NCT03823027 -NCT03802591 -NCT03823040 -NCT03802604 -NCT03823053 -NCT03802695 -NCT03823079 -NCT03802734 -NCT03823118 -NCT03802747 -NCT03823131 -NCT03802799 -NCT03823144 -NCT03802851 -NCT03823248 -NCT03802903 -NCT03823313 -NCT03802955 -NCT03823352 -NCT03802994 -NCT03823365 -NCT03803007 -NCT03823404 -NCT03803033 -NCT03823534 -NCT03803046 -NCT03823560 -NCT03803137 -NCT03823625 -NCT03803215 -NCT03823651 -NCT03803241 -NCT03823742 -NCT03803254 -NCT03823807 -NCT03803267 -NCT03823846 -NCT03803293 -NCT03823859 -NCT03803319 -NCT03823950 -NCT03803397 -NCT03820986 -NCT03820999 -NCT03821025 -NCT03821038 -NCT03821051 -NCT03821064 -NCT03821116 -NCT03821194 -NCT03821207 -NCT03821233 -NCT03821246 -NCT03821272 -NCT03821285 -NCT03821363 -NCT03821376 -NCT03821454 -NCT03823989 -NCT03803410 -NCT03820011 -NCT03803436 -NCT03820024 -NCT03803475 -NCT03820063 -NCT03803553 -NCT03820089 -NCT03803761 -NCT03820115 -NCT03803774 -NCT03820141 -NCT03803930 -NCT03820206 -NCT03803943 -NCT03820310 -NCT03803969 -NCT03820414 -NCT03804073 -NCT03820427 -NCT03804164 -NCT03820453 -NCT03804203 -NCT03820518 -NCT03804307 -NCT03820544 -NCT03804320 -NCT03820557 -NCT03804333 -NCT03820570 -NCT03804372 -NCT03820661 -NCT03804398 -NCT03820674 -NCT03804424 -NCT03820778 -NCT03804463 -NCT03820791 -NCT03804502 -NCT03820817 -NCT03804515 -NCT03820830 -NCT03804541 -NCT03820843 -NCT03804580 -NCT03820856 -NCT03804671 -NCT03816098 -NCT03816163 -NCT03816319 -NCT03816332 -NCT03816345 -NCT03816358 -NCT03816462 -NCT03816475 -NCT03816540 -NCT03816553 -NCT03816748 -NCT03816774 -NCT03816839 -NCT03817125 -NCT03817216 -NCT03817242 -NCT03817268 -NCT03817307 -NCT03817320 -NCT03817385 -NCT03817398 -NCT03817411 -NCT03817489 -NCT03817567 -NCT03817645 -NCT03817658 -NCT03817736 -NCT03817762 -NCT03817840 -NCT03817853 -NCT03817996 -NCT03818061 -NCT03818165 -NCT03818282 -NCT03818347 -NCT03818386 -NCT03818412 -NCT03818529 -NCT03818542 -NCT03818555 -NCT03818568 -NCT03818633 -NCT03818646 -NCT03818685 -NCT03818763 -NCT03818776 -NCT03818802 -NCT03818815 -NCT03818880 -NCT03818893 -NCT03818919 -NCT03818997 -NCT03819010 -NCT03819062 -NCT03819088 -NCT03819101 -NCT03819140 -NCT03819166 -NCT03819257 -NCT03819296 -NCT03819348 -NCT03819387 -NCT03819465 -NCT03819478 -NCT03819504 -NCT03819569 -NCT03819595 -NCT03819751 -NCT03819777 -NCT03819907 -NCT03819920 -NCT03819985 -NCT03820908 -NCT03804710 -NCT03807999 -NCT03804736 -NCT03807947 -NCT03804762 -NCT03808012 -NCT03804775 -NCT03808038 -NCT03804866 -NCT03808064 -NCT03804944 -NCT03808077 -NCT03804983 -NCT03808116 -NCT03804996 -NCT03808168 -NCT03805022 -NCT03808311 -NCT03805165 -NCT03808337 -NCT03805282 -NCT03808415 -NCT03805334 -NCT03808428 -NCT03805399 -NCT03808441 -NCT03805477 -NCT03808480 -NCT03805516 -NCT03814005 -NCT03805581 -NCT03814161 -NCT03805594 -NCT03814239 -NCT03805607 -NCT03814252 -NCT03805711 -NCT03814317 -NCT03805737 -NCT03814343 -NCT03805750 -NCT03814369 -NCT03805776 -NCT03814408 -NCT03805828 -NCT03814447 -NCT03805906 -NCT03814577 -NCT03805932 -NCT03814668 -NCT03806036 -NCT03814694 -NCT03806049 -NCT03814720 -NCT03806062 -NCT03814759 -NCT03806075 -NCT03814837 -NCT03806088 -NCT03815058 -NCT03806153 -NCT03815084 -NCT03806179 -NCT03815097 -NCT03806192 -NCT03815149 -NCT03806205 -NCT03815175 -NCT03806218 -NCT03815214 -NCT03806244 -NCT03815279 -NCT03806309 -NCT03815318 -NCT03806322 -NCT03815331 -NCT03806543 -NCT03815344 -NCT03806556 -NCT03815357 -NCT03806595 -NCT03815370 -NCT03806647 -NCT03815383 -NCT03806894 -NCT03815448 -NCT03806985 -NCT03815461 -NCT03807024 -NCT03815474 -NCT03807050 -NCT03815526 -NCT03807063 -NCT03815630 -NCT03807076 -NCT03815643 -NCT03807102 -NCT03815682 -NCT03807414 -NCT03815747 -NCT03807479 -NCT03815812 -NCT03807570 -NCT03815838 -NCT03807765 -NCT03815890 -NCT03807778 -NCT03815903 -NCT03807830 -NCT03815942 -NCT03807856 -NCT03815968 -NCT03808610 -NCT03811379 -NCT03808662 -NCT03811288 -NCT03808675 -NCT03811405 -NCT03808701 -NCT03811418 -NCT03808766 -NCT03811431 -NCT03808779 -NCT03811457 -NCT03808805 -NCT03811535 -NCT03808818 -NCT03811652 -NCT03808831 -NCT03811743 -NCT03808857 -NCT03811769 -NCT03808870 -NCT03811782 -NCT03808883 -NCT03811886 -NCT03808935 -NCT03811899 -NCT03809000 -NCT03811951 -NCT03809013 -NCT03811964 -NCT03809026 -NCT03812016 -NCT03809065 -NCT03812068 -NCT03809078 -NCT03812198 -NCT03809104 -NCT03812211 -NCT03809117 -NCT03812263 -NCT03809130 -NCT03812289 -NCT03809169 -NCT03812302 -NCT03809221 -NCT03812341 -NCT03809338 -NCT03812367 -NCT03809585 -NCT03812393 -NCT03809624 -NCT03812432 -NCT03809637 -NCT03812549 -NCT03809767 -NCT03812562 -NCT03809780 -NCT03812692 -NCT03809832 -NCT03812705 -NCT03809988 -NCT03812744 -NCT03810066 -NCT03812770 -NCT03810105 -NCT03812783 -NCT03810196 -NCT03812796 -NCT03810261 -NCT03812809 -NCT03810287 -NCT03812874 -NCT03810326 -NCT03812913 -NCT03810339 -NCT03813056 -NCT03810443 -NCT03813147 -NCT03810482 -NCT03813173 -NCT03810625 -NCT03813186 -NCT03810651 -NCT03813381 -NCT03810716 -NCT03813394 -NCT03810742 -NCT03813498 -NCT03810755 -NCT03813524 -NCT03810781 -NCT03813576 -NCT03810807 -NCT03813615 -NCT03810846 -NCT03813641 -NCT03810872 -NCT03813706 -NCT03810976 -NCT03813732 -NCT03811002 -NCT03813784 -NCT03811015 -NCT03813810 -NCT03811054 -NCT03813836 -NCT03811106 -NCT03813940 -NCT03811145 -NCT03813953 -NCT03811262 -NCT03990454 -NCT03825159 -NCT03828448 -NCT03825237 -NCT03828422 -NCT03825289 -NCT03828578 -NCT03825302 -NCT03828630 -NCT03825328 -NCT03828773 -NCT03825445 -NCT03828799 -NCT03825484 -NCT03828838 -NCT03825510 -NCT03828864 -NCT03825705 -NCT03828903 -NCT03825718 -NCT03828929 -NCT03825731 -NCT03829007 -NCT03825757 -NCT03829020 -NCT03825770 -NCT03829033 -NCT03825783 -NCT03829059 -NCT03825796 -NCT03829098 -NCT03825835 -NCT03829111 -NCT03825848 -NCT03829254 -NCT03825861 -NCT03829319 -NCT03825887 -NCT03829332 -NCT03825913 -NCT03829345 -NCT03825926 -NCT03829371 -NCT03825991 -NCT03988868 -NCT03826030 -NCT03988946 -NCT03826043 -NCT03988959 -NCT03826056 -NCT03988998 -NCT03826095 -NCT03989037 -NCT03826446 -NCT03989089 -NCT03826524 -NCT03989115 -NCT03826589 -NCT03989193 -NCT03826680 -NCT03989258 -NCT03826862 -NCT03989310 -NCT03826940 -NCT03989336 -NCT03826979 -NCT03989362 -NCT03826992 -NCT03989414 -NCT03827018 -NCT03989466 -NCT03827044 -NCT03989544 -NCT03827070 -NCT03989596 -NCT03827317 -NCT03989622 -NCT03827395 -NCT03989713 -NCT03827447 -NCT03989752 -NCT03827473 -NCT03989830 -NCT03827577 -NCT03989869 -NCT03827616 -NCT03989895 -NCT03827668 -NCT03989947 -NCT03827837 -NCT03989973 -NCT03827850 -NCT03989999 -NCT03827967 -NCT03990012 -NCT03827993 -NCT03990025 -NCT03828071 -NCT03990077 -NCT03828123 -NCT03990090 -NCT03828136 -NCT03990103 -NCT03828201 -NCT03990181 -NCT03828227 -NCT03990220 -NCT03828279 -NCT03990233 -NCT03828292 -NCT03990285 -NCT03828318 -NCT03990402 -NCT03829410 -NCT03988712 -NCT03829423 -NCT03988764 -NCT03829436 -NCT03988803 -NCT03829462 -NCT03988816 -NCT03829475 -NCT03983434 -NCT03983486 -NCT03983538 -NCT03983564 -NCT03983577 -NCT03983629 -NCT03983668 -NCT03983746 -NCT03983759 -NCT03983811 -NCT03983824 -NCT03983850 -NCT03983928 -NCT03983954 -NCT03983993 -NCT03984006 -NCT03984019 -NCT03984045 -NCT03984097 -NCT03984149 -NCT03984214 -NCT03984240 -NCT03984253 -NCT03984318 -NCT03984357 -NCT03984370 -NCT03984448 -NCT03984578 -NCT03984604 -NCT03984643 -NCT03984695 -NCT03984721 -NCT03984825 -NCT03984890 -NCT03984903 -NCT03984955 -NCT03984968 -NCT03985007 -NCT03985033 -NCT03985046 -NCT03985072 -NCT03985189 -NCT03985267 -NCT03985449 -NCT03985475 -NCT03985657 -NCT03985670 -NCT03985696 -NCT03985722 -NCT03985748 -NCT03985774 -NCT03985787 -NCT03985852 -NCT03985891 -NCT03986021 -NCT03986034 -NCT03986086 -NCT03986216 -NCT03986255 -NCT03986281 -NCT03986294 -NCT03986385 -NCT03986398 -NCT03986502 -NCT03986515 -NCT03986528 -NCT03986554 -NCT03986580 -NCT03986593 -NCT03986606 -NCT03986684 -NCT03986775 -NCT03987022 -NCT03987087 -NCT03987126 -NCT03987152 -NCT03987165 -NCT03987217 -NCT03987269 -NCT03987386 -NCT03987399 -NCT03987438 -NCT03987503 -NCT03987568 -NCT03987685 -NCT03987698 -NCT03987724 -NCT03987737 -NCT03987815 -NCT03987854 -NCT03987867 -NCT03987880 -NCT03987893 -NCT03987906 -NCT03987971 -NCT03987984 -NCT03988023 -NCT03988036 -NCT03988088 -NCT03988114 -NCT03988192 -NCT03988205 -NCT03988283 -NCT03988296 -NCT03988309 -NCT03988322 -NCT03988374 -NCT03988504 -NCT03988517 -NCT03988543 -NCT03988582 -NCT03988595 -NCT03988647 -NCT03988660 -NCT03988686 -NCT03988855 -NCT03829501 -NCT03981796 -NCT03829540 -NCT03981874 -NCT03829553 -NCT03981978 -NCT03829618 -NCT03982004 -NCT03829631 -NCT03982017 -NCT03829683 -NCT03982082 -NCT03829722 -NCT03982121 -NCT03829748 -NCT03982134 -NCT03829904 -NCT03982173 -NCT03829917 -NCT03982212 -NCT03829930 -NCT03982264 -NCT03829943 -NCT03982303 -NCT03829969 -NCT03982407 -NCT03830060 -NCT03982420 -NCT03830073 -NCT03982446 -NCT03830151 -NCT03982459 -NCT03830164 -NCT03982472 -NCT03830190 -NCT03982485 -NCT03830242 -NCT03982511 -NCT03830281 -NCT03982537 -NCT03830320 -NCT03982628 -NCT03830385 -NCT03982680 -NCT03830398 -NCT03982797 -NCT03830411 -NCT03982992 -NCT03830437 -NCT03983057 -NCT03830502 -NCT03983083 -NCT03830580 -NCT03983109 -NCT03830606 -NCT03983122 -NCT03830658 -NCT03983148 -NCT03830671 -NCT03983161 -NCT03830697 -NCT03983174 -NCT03830775 -NCT03983226 -NCT03830788 -NCT03979651 -NCT03979664 -NCT03979677 -NCT03979690 -NCT03979794 -NCT03979846 -NCT03979872 -NCT03979924 -NCT03979937 -NCT03980002 -NCT03980015 -NCT03980041 -NCT03980054 -NCT03980080 -NCT03980093 -NCT03980145 -NCT03980171 -NCT03980249 -NCT03980288 -NCT03980314 -NCT03980327 -NCT03980340 -NCT03980431 -NCT03980457 -NCT03980509 -NCT03980535 -NCT03980626 -NCT03980704 -NCT03980717 -NCT03980743 -NCT03980925 -NCT03980964 -NCT03980977 -NCT03981016 -NCT03981068 -NCT03981146 -NCT03981159 -NCT03981263 -NCT03981276 -NCT03981315 -NCT03981328 -NCT03981406 -NCT03981432 -NCT03981510 -NCT03981536 -NCT03981562 -NCT03981614 -NCT03981679 -NCT03981705 -NCT03981718 -NCT03981731 -NCT03981744 -NCT03983395 -NCT03830801 -NCT03979508 -NCT03830866 -NCT03979521 -NCT03830905 -NCT03979547 -NCT03830918 -NCT03979573 -NCT03830957 -NCT03979638 -NCT03831035 -NCT03973788 -NCT03973879 -NCT03973905 -NCT03973918 -NCT03973931 -NCT03973957 -NCT03974009 -NCT03974022 -NCT03974074 -NCT03974087 -NCT03974100 -NCT03974191 -NCT03974204 -NCT03974217 -NCT03974243 -NCT03974412 -NCT03974451 -NCT03974464 -NCT03974542 -NCT03974594 -NCT03974789 -NCT03974841 -NCT03974854 -NCT03974867 -NCT03975036 -NCT03975049 -NCT03975101 -NCT03975114 -NCT03975127 -NCT03975179 -NCT03975205 -NCT03975231 -NCT03975270 -NCT03975309 -NCT03975387 -NCT03975413 -NCT03975465 -NCT03975478 -NCT03975491 -NCT03975504 -NCT03975608 -NCT03975621 -NCT03975647 -NCT03975660 -NCT03975725 -NCT03975790 -NCT03975829 -NCT03975842 -NCT03975855 -NCT03975907 -NCT03975959 -NCT03975998 -NCT03976050 -NCT03976102 -NCT03976193 -NCT03976323 -NCT03976349 -NCT03976362 -NCT03976375 -NCT03976518 -NCT03976609 -NCT03976739 -NCT03976804 -NCT03976843 -NCT03976856 -NCT03976960 -NCT03976973 -NCT03976999 -NCT03977025 -NCT03977077 -NCT03977090 -NCT03977103 -NCT03977155 -NCT03977194 -NCT03977207 -NCT03977220 -NCT03977233 -NCT03977272 -NCT03977311 -NCT03977389 -NCT03977415 -NCT03977467 -NCT03977532 -NCT03977571 -NCT03977610 -NCT03977662 -NCT03977766 -NCT03977792 -NCT03977831 -NCT03977896 -NCT03977948 -NCT03978078 -NCT03978195 -NCT03978273 -NCT03978364 -NCT03978546 -NCT03978611 -NCT03978624 -NCT03978663 -NCT03978689 -NCT03978702 -NCT03978780 -NCT03978897 -NCT03978923 -NCT03979066 -NCT03979131 -NCT03979157 -NCT03979274 -NCT03979313 -NCT03979326 -NCT03979339 -NCT03979456 -NCT03979495 -NCT03831100 -NCT03972683 -NCT03831178 -NCT03972696 -NCT03831243 -NCT03972722 -NCT03831256 -NCT03972748 -NCT03831269 -NCT03972813 -NCT03831295 -NCT03972917 -NCT03831321 -NCT03972930 -NCT03831334 -NCT03972943 -NCT03831373 -NCT03973008 -NCT03831386 -NCT03973086 -NCT03831464 -NCT03973112 -NCT03831477 -NCT03973138 -NCT03831516 -NCT03973151 -NCT03831581 -NCT03973255 -NCT03831698 -NCT03973268 -NCT03831711 -NCT03973333 -NCT03831724 -NCT03973450 -NCT03831776 -NCT03973463 -NCT03831893 -NCT03973528 -NCT03831906 -NCT03973619 -NCT03831932 -NCT03973658 -NCT03831958 -NCT03973697 -NCT03831971 -NCT03969316 -NCT03969420 -NCT03969446 -NCT03969459 -NCT03969511 -NCT03969576 -NCT03969706 -NCT03969732 -NCT03969784 -NCT03969823 -NCT03969979 -NCT03970018 -NCT03970070 -NCT03970096 -NCT03970200 -NCT03970252 -NCT03970382 -NCT03970447 -NCT03970499 -NCT03970551 -NCT03970564 -NCT03970616 -NCT03970668 -NCT03970694 -NCT03970733 -NCT03970746 -NCT03970967 -NCT03970993 -NCT03971006 -NCT03971019 -NCT03971032 -NCT03971045 -NCT03971110 -NCT03971175 -NCT03971201 -NCT03971214 -NCT03971266 -NCT03971292 -NCT03971409 -NCT03971422 -NCT03971448 -NCT03971461 -NCT03971474 -NCT03971500 -NCT03971526 -NCT03971539 -NCT03971565 -NCT03971591 -NCT03971643 -NCT03971656 -NCT03971734 -NCT03971747 -NCT03971760 -NCT03971773 -NCT03971786 -NCT03971799 -NCT03971981 -NCT03972020 -NCT03972033 -NCT03972046 -NCT03972059 -NCT03972072 -NCT03972098 -NCT03972150 -NCT03972189 -NCT03972228 -NCT03972241 -NCT03972254 -NCT03972332 -NCT03972358 -NCT03972488 -NCT03972527 -NCT03972540 -NCT03972605 -NCT03972657 -NCT03832010 -NCT03965767 -NCT03832049 -NCT03965819 -NCT03832127 -NCT03965845 -NCT03832283 -NCT03966014 -NCT03832348 -NCT03966066 -NCT03832361 -NCT03966118 -NCT03832569 -NCT03966209 -NCT03832621 -NCT03966248 -NCT03832647 -NCT03966482 -NCT03832673 -NCT03966651 -NCT03832686 -NCT03966742 -NCT03832712 -NCT03966898 -NCT03832803 -NCT03967041 -NCT03832855 -NCT03967093 -NCT03832907 -NCT03967145 -NCT03832959 -NCT03967223 -NCT03832972 -NCT03967327 -NCT03832985 -NCT03967379 -NCT03832998 -NCT03967522 -NCT03833011 -NCT03967613 -NCT03833154 -NCT03967743 -NCT03833167 -NCT03967834 -NCT03833180 -NCT03967886 -NCT03833193 -NCT03967925 -NCT03833206 -NCT03967938 -NCT03833232 -NCT03967977 -NCT03833388 -NCT03967990 -NCT03833414 -NCT03968146 -NCT03833427 -NCT03968250 -NCT03833440 -NCT03968276 -NCT03833466 -NCT03968315 -NCT03833479 -NCT03968328 -NCT03833648 -NCT03968367 -NCT03833661 -NCT03968406 -NCT03833687 -NCT03968419 -NCT03833700 -NCT03968601 -NCT03833726 -NCT03968614 -NCT03833752 -NCT03968653 -NCT03833817 -NCT03968679 -NCT03833869 -NCT03968692 -NCT03833921 -NCT03968718 -NCT03833973 -NCT03968796 -NCT03834012 -NCT03968913 -NCT03834038 -NCT03968978 -NCT03834077 -NCT03969004 -NCT03834116 -NCT03969082 -NCT03834194 -NCT03969095 -NCT03834220 -NCT03969108 -NCT03834233 -NCT03969121 -NCT03834246 -NCT03969277 -NCT03834272 -NCT03964922 -NCT03965091 -NCT03965234 -NCT03965273 -NCT03965286 -NCT03965468 -NCT03965481 -NCT03965494 -NCT03965546 -NCT03965637 -NCT03965676 -NCT03965689 -NCT03834311 -NCT03962543 -NCT03834350 -NCT03962634 -NCT03834402 -NCT03962647 -NCT03834454 -NCT03962686 -NCT03834480 -NCT03962829 -NCT03834493 -NCT03963024 -NCT03834506 -NCT03963115 -NCT03834519 -NCT03963128 -NCT03834532 -NCT03963193 -NCT03834571 -NCT03963206 -NCT03834584 -NCT03963375 -NCT03834623 -NCT03963414 -NCT03834662 -NCT03963427 -NCT03834688 -NCT03963453 -NCT03834701 -NCT03963466 -NCT03834727 -NCT03963635 -NCT03834740 -NCT03963648 -NCT03834779 -NCT03963713 -NCT03834805 -NCT03963726 -NCT03834948 -NCT03963752 -NCT03834961 -NCT03963765 -NCT03834974 -NCT03963804 -NCT03835000 -NCT03963882 -NCT03835065 -NCT03963999 -NCT03835299 -NCT03964064 -NCT03835325 -NCT03964090 -NCT03835351 -NCT03964116 -NCT03835520 -NCT03964233 -NCT03835533 -NCT03964259 -NCT03835624 -NCT03964285 -NCT03835741 -NCT03964324 -NCT03835819 -NCT03964337 -NCT03835910 -NCT03964441 -NCT03835949 -NCT03964506 -NCT03836014 -NCT03964532 -NCT03836040 -NCT03964688 -NCT03836053 -NCT03964714 -NCT03836066 -NCT03964727 -NCT03836157 -NCT03964753 -NCT03836196 -NCT03964779 -NCT03836209 -NCT03964818 -NCT03836261 -NCT03964844 -NCT03836274 -NCT03964896 -NCT03836287 -NCT03960788 -NCT03960840 -NCT03960853 -NCT03960892 -NCT03961100 -NCT03961152 -NCT03961178 -NCT03961282 -NCT03961373 -NCT03961412 -NCT03961555 -NCT03961659 -NCT03961672 -NCT03961698 -NCT03961737 -NCT03961750 -NCT03961763 -NCT03961841 -NCT03961867 -NCT03961919 -NCT03961945 -NCT03961971 -NCT03962023 -NCT03962114 -NCT03962179 -NCT03962465 -NCT03962478 -NCT03964909 -NCT03836300 -NCT03958721 -NCT03836352 -NCT03958747 -NCT03836430 -NCT03958773 -NCT03836495 -NCT03958877 -NCT03836521 -NCT03958890 -NCT03836534 -NCT03959007 -NCT03836586 -NCT03959020 -NCT03836690 -NCT03959046 -NCT03836768 -NCT03959059 -NCT03836807 -NCT03959085 -NCT03836872 -NCT03959137 -NCT03836885 -NCT03959150 -NCT03836937 -NCT03959241 -NCT03837028 -NCT03959267 -NCT03837054 -NCT03959293 -NCT03837171 -NCT03959319 -NCT03837301 -NCT03959358 -NCT03837353 -NCT03959397 -NCT03837444 -NCT03959410 -NCT03837457 -NCT03959553 -NCT03837496 -NCT03959605 -NCT03837509 -NCT03959631 -NCT03837574 -NCT03959644 -NCT03837652 -NCT03959696 -NCT03837691 -NCT03959709 -NCT03837717 -NCT03959748 -NCT03837769 -NCT03959761 -NCT03837808 -NCT03959774 -NCT03837821 -NCT03959839 -NCT03837834 -NCT03959852 -NCT03837873 -NCT03959891 -NCT03837899 -NCT03959917 -NCT03837938 -NCT03959956 -NCT03837951 -NCT03959982 -NCT03837977 -NCT03960008 -NCT03838029 -NCT03960021 -NCT03838042 -NCT03960060 -NCT03838055 -NCT03960099 -NCT03838120 -NCT03960112 -NCT03838159 -NCT03960151 -NCT03838237 -NCT03960177 -NCT03838263 -NCT03960320 -NCT03838367 -NCT03960333 -NCT03838419 -NCT03960450 -NCT03838432 -NCT03960463 -NCT03838484 -NCT03960554 -NCT03838549 -NCT03960619 -NCT03838575 -NCT03957967 -NCT03958006 -NCT03958019 -NCT03958045 -NCT03958058 -NCT03958097 -NCT03958136 -NCT03958175 -NCT03958227 -NCT03958240 -NCT03958253 -NCT03958305 -NCT03958344 -NCT03958383 -NCT03958435 -NCT03958487 -NCT03958500 -NCT03958656 -NCT03960775 -NCT03838601 -NCT03841240 -NCT03838653 -NCT03841201 -NCT03838692 -NCT03841266 -NCT03838744 -NCT03841305 -NCT03838796 -NCT03841318 -NCT03838848 -NCT03841383 -NCT03838861 -NCT03841422 -NCT03838913 -NCT03841435 -NCT03838952 -NCT03841461 -NCT03838991 -NCT03841526 -NCT03839160 -NCT03841565 -NCT03839173 -NCT03841617 -NCT03839277 -NCT03841721 -NCT03839342 -NCT03841734 -NCT03839420 -NCT03841747 -NCT03839433 -NCT03841760 -NCT03839446 -NCT03841955 -NCT03839459 -NCT03842007 -NCT03839472 -NCT03842059 -NCT03839498 -NCT03842085 -NCT03839524 -NCT03842215 -NCT03839550 -NCT03842228 -NCT03839576 -NCT03842254 -NCT03839602 -NCT03842358 -NCT03839615 -NCT03842566 -NCT03839706 -NCT03842605 -NCT03839771 -NCT03842696 -NCT03839823 -NCT03842826 -NCT03839836 -NCT03842852 -NCT03839901 -NCT03842943 -NCT03839914 -NCT03842982 -NCT03839940 -NCT03843073 -NCT03839992 -NCT03843151 -NCT03840005 -NCT03843177 -NCT03840148 -NCT03843229 -NCT03840200 -NCT03843294 -NCT03840239 -NCT03843346 -NCT03840265 -NCT03843359 -NCT03840317 -NCT03843398 -NCT03840408 -NCT03843437 -NCT03840421 -NCT03843515 -NCT03840538 -NCT03843528 -NCT03840564 -NCT03843554 -NCT03840590 -NCT03843567 -NCT03840603 -NCT03843645 -NCT03840772 -NCT03843671 -NCT03840902 -NCT03957642 -NCT03840915 -NCT03957668 -NCT03840967 -NCT03957720 -NCT03840980 -NCT03957733 -NCT03841006 -NCT03957759 -NCT03841032 -NCT03957811 -NCT03841045 -NCT03957837 -NCT03841110 -NCT03957863 -NCT03841136 -NCT03957902 -NCT03841162 -NCT03957915 -NCT03843710 -NCT03957226 -NCT03843749 -NCT03957408 -NCT03843775 -NCT03957421 -NCT03843814 -NCT03957434 -NCT03843853 -NCT03957486 -NCT03843918 -NCT03957551 -NCT03843931 -NCT03957564 -NCT03843957 -NCT03957577 -NCT03844048 -NCT03952091 -NCT03952117 -NCT03952130 -NCT03952286 -NCT03952312 -NCT03952325 -NCT03952403 -NCT03952442 -NCT03952572 -NCT03952585 -NCT03952598 -NCT03952650 -NCT03952741 -NCT03952793 -NCT03952832 -NCT03952845 -NCT03952975 -NCT03953053 -NCT03953118 -NCT03953131 -NCT03953144 -NCT03953157 -NCT03953183 -NCT03953235 -NCT03953261 -NCT03953326 -NCT03953352 -NCT03953469 -NCT03953625 -NCT03953703 -NCT03953742 -NCT03953755 -NCT03953794 -NCT03953833 -NCT03953898 -NCT03953976 -NCT03954067 -NCT03954106 -NCT03954145 -NCT03954171 -NCT03954197 -NCT03954210 -NCT03954327 -NCT03954366 -NCT03954431 -NCT03954444 -NCT03954522 -NCT03954548 -NCT03954561 -NCT03954704 -NCT03954756 -NCT03954782 -NCT03954821 -NCT03955042 -NCT03955055 -NCT03955068 -NCT03955081 -NCT03955120 -NCT03955146 -NCT03955185 -NCT03955198 -NCT03955224 -NCT03955354 -NCT03955367 -NCT03955458 -NCT03955471 -NCT03955484 -NCT03955510 -NCT03955588 -NCT03955627 -NCT03955640 -NCT03955653 -NCT03955783 -NCT03955848 -NCT03955887 -NCT03955913 -NCT03955939 -NCT03955978 -NCT03956056 -NCT03956069 -NCT03956108 -NCT03956160 -NCT03956212 -NCT03956238 -NCT03956303 -NCT03956316 -NCT03956368 -NCT03956446 -NCT03956459 -NCT03956485 -NCT03956498 -NCT03956550 -NCT03956615 -NCT03956641 -NCT03956654 -NCT03956680 -NCT03956706 -NCT03956810 -NCT03956823 -NCT03956875 -NCT03956888 -NCT03956940 -NCT03956979 -NCT03957096 -NCT03957135 -NCT03957200 -NCT03957590 -NCT03844100 -NCT03951571 -NCT03844256 -NCT03951584 -NCT03844347 -NCT03951597 -NCT03844360 -NCT03951649 -NCT03844438 -NCT03951831 -NCT03844490 -NCT03951922 -NCT03844568 -NCT03951961 -NCT03844620 -NCT03952065 -NCT03844685 -NCT03946033 -NCT03946072 -NCT03946202 -NCT03946332 -NCT03946358 -NCT03946397 -NCT03946423 -NCT03946527 -NCT03946553 -NCT03946579 -NCT03946618 -NCT03946670 -NCT03946683 -NCT03946709 -NCT03946722 -NCT03946800 -NCT03946826 -NCT03946852 -NCT03946865 -NCT03946878 -NCT03946917 -NCT03946943 -NCT03946969 -NCT03947112 -NCT03947138 -NCT03947151 -NCT03947242 -NCT03947255 -NCT03947320 -NCT03947372 -NCT03947385 -NCT03947515 -NCT03947567 -NCT03947606 -NCT03947723 -NCT03947736 -NCT03947775 -NCT03947866 -NCT03948035 -NCT03948074 -NCT03948100 -NCT03948113 -NCT03948295 -NCT03948321 -NCT03948386 -NCT03948399 -NCT03948438 -NCT03948477 -NCT03948490 -NCT03948529 -NCT03948568 -NCT03948620 -NCT03948646 -NCT03948659 -NCT03948724 -NCT03948763 -NCT03948802 -NCT03948906 -NCT03948958 -NCT03948997 -NCT03949062 -NCT03949101 -NCT03949153 -NCT03949166 -NCT03949179 -NCT03949231 -NCT03949270 -NCT03949283 -NCT03949322 -NCT03949374 -NCT03949517 -NCT03949634 -NCT03949647 -NCT03949660 -NCT03949777 -NCT03949907 -NCT03949933 -NCT03950102 -NCT03950141 -NCT03950154 -NCT03950180 -NCT03950271 -NCT03950297 -NCT03950323 -NCT03950362 -NCT03950518 -NCT03950531 -NCT03950570 -NCT03950583 -NCT03950609 -NCT03950635 -NCT03950648 -NCT03950674 -NCT03950830 -NCT03950908 -NCT03951116 -NCT03951129 -NCT03951142 -NCT03951246 -NCT03951298 -NCT03951324 -NCT03951337 -NCT03951415 -NCT03951454 -NCT03951467 -NCT03951493 -NCT03952078 -NCT03844711 -NCT03944252 -NCT03844750 -NCT03944265 -NCT03844763 -NCT03944278 -NCT03844776 -NCT03944304 -NCT03844815 -NCT03944356 -NCT03844997 -NCT03944382 -NCT03845166 -NCT03944421 -NCT03845231 -NCT03944434 -NCT03845270 -NCT03944447 -NCT03845296 -NCT03944499 -NCT03845608 -NCT03944551 -NCT03845647 -NCT03944720 -NCT03845751 -NCT03944772 -NCT03845764 -NCT03944798 -NCT03845907 -NCT03944876 -NCT03846024 -NCT03944902 -NCT03846310 -NCT03944915 -NCT03846323 -NCT03944928 -NCT03846336 -NCT03944941 -NCT03846349 -NCT03944980 -NCT03846362 -NCT03945084 -NCT03846401 -NCT03945110 -NCT03846427 -NCT03945162 -NCT03846492 -NCT03945227 -NCT03846531 -NCT03945253 -NCT03846570 -NCT03945266 -NCT03846583 -NCT03945461 -NCT03846674 -NCT03945474 -NCT03846700 -NCT03945487 -NCT03846804 -NCT03945526 -NCT03846817 -NCT03945552 -NCT03846869 -NCT03945604 -NCT03846908 -NCT03945682 -NCT03846934 -NCT03945721 -NCT03847064 -NCT03945734 -NCT03847077 -NCT03945773 -NCT03847103 -NCT03945799 -NCT03847168 -NCT03945851 -NCT03847194 -NCT03942328 -NCT03942380 -NCT03942523 -NCT03942562 -NCT03942575 -NCT03942614 -NCT03942653 -NCT03942692 -NCT03942718 -NCT03942757 -NCT03942861 -NCT03942887 -NCT03942965 -NCT03943004 -NCT03943043 -NCT03943069 -NCT03943082 -NCT03943134 -NCT03943173 -NCT03943251 -NCT03943277 -NCT03943303 -NCT03943342 -NCT03943368 -NCT03943394 -NCT03943420 -NCT03943472 -NCT03943602 -NCT03943667 -NCT03943680 -NCT03943771 -NCT03943901 -NCT03943992 -NCT03944005 -NCT03944057 -NCT03944096 -NCT03944122 -NCT03944148 -NCT03944226 -NCT03847311 -NCT03941301 -NCT03847428 -NCT03941366 -NCT03847480 -NCT03941379 -NCT03847506 -NCT03941405 -NCT03847519 -NCT03941457 -NCT03847558 -NCT03941561 -NCT03847571 -NCT03941574 -NCT03847623 -NCT03941613 -NCT03847649 -NCT03941626 -NCT03847688 -NCT03941730 -NCT03847753 -NCT03941743 -NCT03847818 -NCT03941756 -NCT03847896 -NCT03941769 -NCT03848013 -NCT03941795 -NCT03848039 -NCT03941860 -NCT03848078 -NCT03941873 -NCT03848117 -NCT03941925 -NCT03848182 -NCT03941938 -NCT03848195 -NCT03941964 -NCT03848260 -NCT03942068 -NCT03848286 -NCT03942094 -NCT03848455 -NCT03942224 -NCT03848494 -NCT03942263 -NCT03848507 -NCT03937479 -NCT03937518 -NCT03937635 -NCT03937700 -NCT03937739 -NCT03937791 -NCT03937817 -NCT03937830 -NCT03937843 -NCT03937895 -NCT03937934 -NCT03937947 -NCT03937960 -NCT03937999 -NCT03938064 -NCT03938168 -NCT03938194 -NCT03938220 -NCT03938324 -NCT03938337 -NCT03938545 -NCT03938649 -NCT03938766 -NCT03938792 -NCT03938896 -NCT03938987 -NCT03939000 -NCT03939013 -NCT03939026 -NCT03939169 -NCT03939182 -NCT03939234 -NCT03939247 -NCT03939351 -NCT03939585 -NCT03939598 -NCT03939650 -NCT03939689 -NCT03939845 -NCT03939871 -NCT03939897 -NCT03939962 -NCT03939975 -NCT03940001 -NCT03940027 -NCT03940040 -NCT03940053 -NCT03940066 -NCT03940105 -NCT03940131 -NCT03940196 -NCT03940209 -NCT03940235 -NCT03940248 -NCT03940287 -NCT03940313 -NCT03940352 -NCT03940365 -NCT03940378 -NCT03940482 -NCT03940495 -NCT03940625 -NCT03940703 -NCT03940768 -NCT03940807 -NCT03940820 -NCT03940833 -NCT03940976 -NCT03941093 -NCT03941184 -NCT03941223 -NCT03941262 -NCT03942315 -NCT03848611 -NCT03851627 -NCT03848702 -NCT03851614 -NCT03848754 -NCT03851861 -NCT03848845 -NCT03851887 -NCT03849053 -NCT03851913 -NCT03849066 -NCT03851939 -NCT03849105 -NCT03851952 -NCT03849118 -NCT03851991 -NCT03849352 -NCT03852017 -NCT03849365 -NCT03852030 -NCT03849469 -NCT03852173 -NCT03849482 -NCT03852251 -NCT03849534 -NCT03852407 -NCT03849573 -NCT03852433 -NCT03849625 -NCT03852472 -NCT03849651 -NCT03852511 -NCT03849742 -NCT03852563 -NCT03849768 -NCT03852576 -NCT03849794 -NCT03852654 -NCT03849820 -NCT03852758 -NCT03849950 -NCT03852823 -NCT03850028 -NCT03852836 -NCT03850067 -NCT03936127 -NCT03850080 -NCT03936140 -NCT03850119 -NCT03936153 -NCT03850171 -NCT03936179 -NCT03850197 -NCT03936205 -NCT03850327 -NCT03936218 -NCT03850353 -NCT03936244 -NCT03850418 -NCT03936270 -NCT03850444 -NCT03936283 -NCT03850522 -NCT03936296 -NCT03850535 -NCT03936400 -NCT03850574 -NCT03936426 -NCT03850587 -NCT03936452 -NCT03850691 -NCT03936465 -NCT03850717 -NCT03936478 -NCT03850730 -NCT03936517 -NCT03850769 -NCT03936543 -NCT03850795 -NCT03936621 -NCT03850873 -NCT03936660 -NCT03850912 -NCT03936699 -NCT03850964 -NCT03936751 -NCT03851003 -NCT03936764 -NCT03851042 -NCT03936790 -NCT03851081 -NCT03936829 -NCT03851146 -NCT03936933 -NCT03851237 -NCT03936959 -NCT03851328 -NCT03937102 -NCT03851367 -NCT03937141 -NCT03851406 -NCT03937193 -NCT03851445 -NCT03937219 -NCT03851471 -NCT03937232 -NCT03851497 -NCT03937323 -NCT03851562 -NCT03937401 -NCT03851601 -NCT03937440 -NCT03852901 -NCT03855904 -NCT03852966 -NCT03855813 -NCT03852979 -NCT03856060 -NCT03853044 -NCT03856086 -NCT03853070 -NCT03856099 -NCT03853109 -NCT03856112 -NCT03853135 -NCT03856125 -NCT03853187 -NCT03856138 -NCT03853278 -NCT03856164 -NCT03853317 -NCT03856216 -NCT03853434 -NCT03856229 -NCT03853473 -NCT03856255 -NCT03853486 -NCT03856268 -NCT03853538 -NCT03856294 -NCT03853551 -NCT03856372 -NCT03853603 -NCT03856411 -NCT03853616 -NCT03856437 -NCT03853655 -NCT03856463 -NCT03853707 -NCT03856476 -NCT03853902 -NCT03856515 -NCT03853915 -NCT03856528 -NCT03853928 -NCT03856541 -NCT03853954 -NCT03856658 -NCT03853967 -NCT03856671 -NCT03854032 -NCT03856684 -NCT03854058 -NCT03856697 -NCT03854084 -NCT03934827 -NCT03854110 -NCT03934840 -NCT03854136 -NCT03934866 -NCT03854175 -NCT03934905 -NCT03854227 -NCT03935048 -NCT03854396 -NCT03935100 -NCT03854448 -NCT03935178 -NCT03854474 -NCT03935204 -NCT03854500 -NCT03935217 -NCT03854526 -NCT03935256 -NCT03854617 -NCT03935269 -NCT03854721 -NCT03935282 -NCT03854786 -NCT03935295 -NCT03854799 -NCT03935308 -NCT03854838 -NCT03935347 -NCT03854890 -NCT03935477 -NCT03854903 -NCT03935503 -NCT03854929 -NCT03935516 -NCT03854981 -NCT03935581 -NCT03854994 -NCT03935633 -NCT03855007 -NCT03935646 -NCT03855072 -NCT03935672 -NCT03855358 -NCT03935685 -NCT03855371 -NCT03935698 -NCT03855384 -NCT03935880 -NCT03855423 -NCT03935893 -NCT03855514 -NCT03935906 -NCT03855644 -NCT03935984 -NCT03855670 -NCT03936075 -NCT03855709 -NCT03936101 -NCT03856710 -NCT03862625 -NCT03862729 -NCT03862742 -NCT03862755 -NCT03862768 -NCT03927573 -NCT03927651 -NCT03927664 -NCT03927742 -NCT03927885 -NCT03927898 -NCT03927924 -NCT03928158 -NCT03928210 -NCT03928275 -NCT03928314 -NCT03928379 -NCT03928470 -NCT03928483 -NCT03928678 -NCT03928730 -NCT03928938 -NCT03928951 -NCT03929029 -NCT03929042 -NCT03929094 -NCT03929107 -NCT03929120 -NCT03929159 -NCT03929198 -NCT03929211 -NCT03929263 -NCT03929302 -NCT03929341 -NCT03929354 -NCT03929432 -NCT03929510 -NCT03929666 -NCT03929757 -NCT03929783 -NCT03929809 -NCT03929926 -NCT03929965 -NCT03930004 -NCT03930173 -NCT03930277 -NCT03930368 -NCT03930433 -NCT03930446 -NCT03930498 -NCT03930576 -NCT03930745 -NCT03930797 -NCT03930953 -NCT03931018 -NCT03931044 -NCT03931083 -NCT03931161 -NCT03931200 -NCT03931291 -NCT03931395 -NCT03931408 -NCT03931421 -NCT03931538 -NCT03931551 -NCT03931577 -NCT03931642 -NCT03931681 -NCT03931720 -NCT03931928 -NCT03931941 -NCT03931980 -NCT03932071 -NCT03932201 -NCT03932214 -NCT03932253 -NCT03932266 -NCT03932318 -NCT03932331 -NCT03932409 -NCT03932461 -NCT03932526 -NCT03932565 -NCT03932643 -NCT03932656 -NCT03932877 -NCT03932903 -NCT03932942 -NCT03932955 -NCT03932968 -NCT03932981 -NCT03933007 -NCT03933111 -NCT03933124 -NCT03933150 -NCT03933241 -NCT03933319 -NCT03933358 -NCT03933384 -NCT03933397 -NCT03933423 -NCT03933449 -NCT03933605 -NCT03933618 -NCT03933670 -NCT03933683 -NCT03933735 -NCT03933761 -NCT03933813 -NCT03933969 -NCT03933982 -NCT03934047 -NCT03934060 -NCT03934073 -NCT03934203 -NCT03934294 -NCT03934359 -NCT03934372 -NCT03934502 -NCT03934567 -NCT03934684 -NCT03934736 -NCT03934775 -NCT03934788 -NCT03934814 -NCT03856801 -NCT03859479 -NCT03856957 -NCT03859427 -NCT03856983 -NCT03859492 -NCT03857048 -NCT03859596 -NCT03857061 -NCT03859648 -NCT03857191 -NCT03859687 -NCT03857230 -NCT03859752 -NCT03857451 -NCT03859804 -NCT03857464 -NCT03859830 -NCT03857529 -NCT03859895 -NCT03857607 -NCT03859921 -NCT03857620 -NCT03860038 -NCT03857633 -NCT03860155 -NCT03857646 -NCT03860207 -NCT03857672 -NCT03860233 -NCT03857698 -NCT03860272 -NCT03857737 -NCT03860285 -NCT03857763 -NCT03860519 -NCT03857776 -NCT03860831 -NCT03857815 -NCT03860844 -NCT03857828 -NCT03860883 -NCT03857867 -NCT03860935 -NCT03857880 -NCT03860961 -NCT03857919 -NCT03860987 -NCT03857932 -NCT03861039 -NCT03857958 -NCT03861052 -NCT03857997 -NCT03861091 -NCT03858010 -NCT03861130 -NCT03858036 -NCT03861156 -NCT03858049 -NCT03861195 -NCT03858127 -NCT03861260 -NCT03858166 -NCT03861286 -NCT03858192 -NCT03861299 -NCT03858205 -NCT03861390 -NCT03858244 -NCT03861403 -NCT03858322 -NCT03861468 -NCT03858374 -NCT03861507 -NCT03858452 -NCT03861520 -NCT03858491 -NCT03861598 -NCT03858582 -NCT03861611 -NCT03858595 -NCT03861637 -NCT03858608 -NCT03861676 -NCT03858660 -NCT03861702 -NCT03858712 -NCT03861793 -NCT03858738 -NCT03861897 -NCT03858855 -NCT03861975 -NCT03858920 -NCT03862001 -NCT03858972 -NCT03862092 -NCT03859011 -NCT03862105 -NCT03859128 -NCT03862131 -NCT03859154 -NCT03862157 -NCT03859193 -NCT03862170 -NCT03859206 -NCT03862274 -NCT03859271 -NCT03862417 -NCT03859349 -NCT03862430 -NCT03859362 -NCT03927521 -NCT03862911 -NCT03927027 -NCT03862950 -NCT03927040 -NCT03862976 -NCT03927105 -NCT03862989 -NCT03927183 -NCT03863080 -NCT03927222 -NCT03863093 -NCT03927248 -NCT03863132 -NCT03927261 -NCT03863145 -NCT03927274 -NCT03863184 -NCT03927339 -NCT03863210 -NCT03927391 -NCT03863223 -NCT03927456 -NCT03863236 -NCT03869242 -NCT03869268 -NCT03869437 -NCT03869476 -NCT03869515 -NCT03869632 -NCT03869762 -NCT03869788 -NCT03869892 -NCT03869944 -NCT03870035 -NCT03870113 -NCT03870152 -NCT03870269 -NCT03870308 -NCT03870321 -NCT03870347 -NCT03870399 -NCT03870412 -NCT03870438 -NCT03870451 -NCT03870529 -NCT03870607 -NCT03870620 -NCT03870698 -NCT03870750 -NCT03870763 -NCT03870789 -NCT03870828 -NCT03870854 -NCT03870867 -NCT03870919 -NCT03870945 -NCT03871036 -NCT03871127 -NCT03871153 -NCT03871192 -NCT03871205 -NCT03871257 -NCT03871322 -NCT03871335 -NCT03871348 -NCT03871387 -NCT03871426 -NCT03871686 -NCT03871699 -NCT03871725 -NCT03871829 -NCT03871842 -NCT03871855 -NCT03871868 -NCT03871933 -NCT03871959 -NCT03872102 -NCT03872115 -NCT03872180 -NCT03872206 -NCT03872375 -NCT03872388 -NCT03872427 -NCT03872505 -NCT03872531 -NCT03872583 -NCT03872635 -NCT03872661 -NCT03872739 -NCT03872778 -NCT03872791 -NCT03872856 -NCT03872908 -NCT03872947 -NCT03873025 -NCT03873090 -NCT03873116 -NCT03873168 -NCT03873285 -NCT03925896 -NCT03925909 -NCT03925935 -NCT03925974 -NCT03926013 -NCT03926039 -NCT03926091 -NCT03926143 -NCT03926260 -NCT03926286 -NCT03926299 -NCT03926338 -NCT03926351 -NCT03926403 -NCT03926468 -NCT03926507 -NCT03926520 -NCT03926559 -NCT03926624 -NCT03926832 -NCT03926845 -NCT03926923 -NCT03926936 -NCT03927495 -NCT03863301 -NCT03866603 -NCT03863340 -NCT03866590 -NCT03863418 -NCT03866655 -NCT03863457 -NCT03866694 -NCT03863483 -NCT03866785 -NCT03863496 -NCT03866967 -NCT03863522 -NCT03866980 -NCT03863626 -NCT03866993 -NCT03863717 -NCT03867045 -NCT03863730 -NCT03867084 -NCT03863743 -NCT03867123 -NCT03863769 -NCT03867175 -NCT03863847 -NCT03867188 -NCT03863860 -NCT03867214 -NCT03863873 -NCT03867240 -NCT03863912 -NCT03867331 -NCT03863977 -NCT03867370 -NCT03864042 -NCT03867396 -NCT03864172 -NCT03867409 -NCT03864198 -NCT03867435 -NCT03864211 -NCT03867487 -NCT03864302 -NCT03867526 -NCT03864328 -NCT03867578 -NCT03864406 -NCT03867591 -NCT03864419 -NCT03867630 -NCT03864523 -NCT03867682 -NCT03864562 -NCT03867708 -NCT03864575 -NCT03867747 -NCT03864614 -NCT03867786 -NCT03865030 -NCT03867799 -NCT03865056 -NCT03867916 -NCT03865082 -NCT03868020 -NCT03865121 -NCT03868228 -NCT03865212 -NCT03868267 -NCT03865277 -NCT03868293 -NCT03865511 -NCT03868332 -NCT03865563 -NCT03868358 -NCT03865589 -NCT03868397 -NCT03865641 -NCT03868423 -NCT03865654 -NCT03868449 -NCT03865797 -NCT03868462 -NCT03865875 -NCT03868475 -NCT03865888 -NCT03868553 -NCT03865966 -NCT03868579 -NCT03865992 -NCT03868605 -NCT03866109 -NCT03868657 -NCT03866161 -NCT03868683 -NCT03866187 -NCT03868722 -NCT03866200 -NCT03868852 -NCT03866213 -NCT03868865 -NCT03866239 -NCT03868891 -NCT03866291 -NCT03868943 -NCT03866382 -NCT03869034 -NCT03866447 -NCT03869190 -NCT03866499 -NCT03869216 -NCT03866525 -NCT03925883 -NCT03873311 -NCT03875573 -NCT03873376 -NCT03875560 -NCT03873402 -NCT03875638 -NCT03873493 -NCT03875690 -NCT03873519 -NCT03875716 -NCT03873532 -NCT03875781 -NCT03873571 -NCT03875820 -NCT03873584 -NCT03875833 -NCT03873649 -NCT03875859 -NCT03873662 -NCT03875885 -NCT03873792 -NCT03875924 -NCT03873805 -NCT03876028 -NCT03873818 -NCT03876093 -NCT03873870 -NCT03876145 -NCT03873883 -NCT03876210 -NCT03873974 -NCT03876236 -NCT03874000 -NCT03876249 -NCT03874013 -NCT03876301 -NCT03874026 -NCT03876327 -NCT03874052 -NCT03876392 -NCT03874182 -NCT03876509 -NCT03874273 -NCT03876522 -NCT03874325 -NCT03876561 -NCT03874364 -NCT03876574 -NCT03874416 -NCT03876587 -NCT03874442 -NCT03876613 -NCT03874572 -NCT03876652 -NCT03874598 -NCT03876678 -NCT03874624 -NCT03876769 -NCT03874676 -NCT03876834 -NCT03874741 -NCT03876847 -NCT03874754 -NCT03876860 -NCT03874858 -NCT03876886 -NCT03874884 -NCT03876912 -NCT03874897 -NCT03876925 -NCT03874936 -NCT03876951 -NCT03874962 -NCT03876977 -NCT03874975 -NCT03877055 -NCT03875027 -NCT03877068 -NCT03875040 -NCT03877146 -NCT03875053 -NCT03877211 -NCT03875079 -NCT03877302 -NCT03875092 -NCT03877315 -NCT03875105 -NCT03877588 -NCT03875118 -NCT03925337 -NCT03875144 -NCT03925350 -NCT03875235 -NCT03925428 -NCT03875287 -NCT03925454 -NCT03875300 -NCT03925467 -NCT03875313 -NCT03925610 -NCT03875326 -NCT03925636 -NCT03875339 -NCT03925662 -NCT03875365 -NCT03925675 -NCT03875404 -NCT03925688 -NCT03875495 -NCT03925727 -NCT03875534 -NCT03925870 -NCT03877601 -NCT03923153 -NCT03877614 -NCT03923166 -NCT03877627 -NCT03923179 -NCT03877718 -NCT03923218 -NCT03877731 -NCT03923257 -NCT03877939 -NCT03923270 -NCT03878017 -NCT03923322 -NCT03878095 -NCT03923374 -NCT03878108 -NCT03923504 -NCT03878134 -NCT03923569 -NCT03878199 -NCT03923673 -NCT03878251 -NCT03923686 -NCT03878316 -NCT03923777 -NCT03878342 -NCT03923803 -NCT03878446 -NCT03923842 -NCT03878459 -NCT03923881 -NCT03878472 -NCT03923998 -NCT03878485 -NCT03924011 -NCT03878524 -NCT03924037 -NCT03878719 -NCT03924050 -NCT03878732 -NCT03924089 -NCT03878771 -NCT03924206 -NCT03878823 -NCT03924232 -NCT03878849 -NCT03924245 -NCT03878875 -NCT03924258 -NCT03878927 -NCT03924271 -NCT03878940 -NCT03924349 -NCT03878979 -NCT03924414 -NCT03879044 -NCT03924466 -NCT03879057 -NCT03924583 -NCT03879096 -NCT03924843 -NCT03879109 -NCT03924856 -NCT03879122 -NCT03924869 -NCT03879135 -NCT03924882 -NCT03879148 -NCT03924895 -NCT03879174 -NCT03924947 -NCT03879213 -NCT03924986 -NCT03879278 -NCT03924999 -NCT03879369 -NCT03925012 -NCT03879460 -NCT03925090 -NCT03879486 -NCT03925103 -NCT03879512 -NCT03925168 -NCT03879551 -NCT03925233 -NCT03879577 -NCT03925246 -NCT03879629 -NCT03925285 -NCT03879694 -NCT03925298 -NCT03879798 -NCT03922035 -NCT03922074 -NCT03922100 -NCT03922165 -NCT03922204 -NCT03922295 -NCT03922308 -NCT03922321 -NCT03922438 -NCT03922477 -NCT03922490 -NCT03922555 -NCT03922724 -NCT03922776 -NCT03922841 -NCT03922867 -NCT03922880 -NCT03922906 -NCT03922984 -NCT03922997 -NCT03923062 -NCT03879811 -NCT03920683 -NCT03880019 -NCT03920800 -NCT03880045 -NCT03920813 -NCT03880097 -NCT03920826 -NCT03880123 -NCT03920839 -NCT03880240 -NCT03921008 -NCT03880279 -NCT03921021 -NCT03880292 -NCT03921034 -NCT03880305 -NCT03921073 -NCT03880370 -NCT03921294 -NCT03880409 -NCT03921372 -NCT03880422 -NCT03921554 -NCT03880513 -NCT03921671 -NCT03880539 -NCT03921684 -NCT03880565 -NCT03921710 -NCT03880604 -NCT03921749 -NCT03880695 -NCT03921801 -NCT03880708 -NCT03921814 -NCT03880799 -NCT03921827 -NCT03880851 -NCT03921866 -NCT03880877 -NCT03921879 -NCT03880903 -NCT03921931 -NCT03881046 -NCT03921957 -NCT03881059 -NCT03921983 -NCT03881098 -NCT03916679 -NCT03916705 -NCT03916718 -NCT03916744 -NCT03916757 -NCT03916770 -NCT03916783 -NCT03916796 -NCT03916809 -NCT03916913 -NCT03916978 -NCT03917043 -NCT03917069 -NCT03917082 -NCT03917173 -NCT03917381 -NCT03917498 -NCT03917654 -NCT03917693 -NCT03917719 -NCT03917966 -NCT03917992 -NCT03918005 -NCT03918109 -NCT03918135 -NCT03918174 -NCT03918226 -NCT03918252 -NCT03918278 -NCT03918317 -NCT03918330 -NCT03918356 -NCT03918369 -NCT03918382 -NCT03918499 -NCT03918538 -NCT03918668 -NCT03918772 -NCT03918915 -NCT03919071 -NCT03919136 -NCT03919162 -NCT03919175 -NCT03919188 -NCT03919214 -NCT03919240 -NCT03919253 -NCT03919292 -NCT03919383 -NCT03919461 -NCT03919474 -NCT03919526 -NCT03919552 -NCT03919630 -NCT03919682 -NCT03919734 -NCT03919773 -NCT03919864 -NCT03920033 -NCT03920072 -NCT03920150 -NCT03920189 -NCT03920202 -NCT03920293 -NCT03920397 -NCT03920449 -NCT03920514 -NCT03920527 -NCT03920631 -NCT03920657 -NCT03921996 -NCT03881111 -NCT03916289 -NCT03881124 -NCT03916302 -NCT03881137 -NCT03916354 -NCT03881189 -NCT03916419 -NCT03881228 -NCT03916458 -NCT03881254 -NCT03916510 -NCT03881267 -NCT03916536 -NCT03881306 -NCT03916601 -NCT03881319 -NCT03916627 -NCT03881345 -NCT03910764 -NCT03910842 -NCT03910894 -NCT03910985 -NCT03911037 -NCT03911115 -NCT03911128 -NCT03911193 -NCT03911271 -NCT03911310 -NCT03911336 -NCT03911388 -NCT03911453 -NCT03911531 -NCT03911557 -NCT03911791 -NCT03911817 -NCT03911869 -NCT03911921 -NCT03911973 -NCT03912064 -NCT03912142 -NCT03912168 -NCT03912311 -NCT03912389 -NCT03912402 -NCT03912415 -NCT03912454 -NCT03912480 -NCT03912519 -NCT03912558 -NCT03912571 -NCT03912623 -NCT03912636 -NCT03912818 -NCT03912831 -NCT03912857 -NCT03912935 -NCT03912948 -NCT03913117 -NCT03913182 -NCT03913234 -NCT03913286 -NCT03913312 -NCT03913416 -NCT03913429 -NCT03913455 -NCT03913559 -NCT03913741 -NCT03913806 -NCT03913923 -NCT03913936 -NCT03913949 -NCT03913962 -NCT03914001 -NCT03914014 -NCT03914066 -NCT03914092 -NCT03914170 -NCT03914209 -NCT03914248 -NCT03914300 -NCT03914352 -NCT03914378 -NCT03914417 -NCT03914443 -NCT03914586 -NCT03914612 -NCT03914625 -NCT03914638 -NCT03914716 -NCT03914742 -NCT03914768 -NCT03914794 -NCT03914820 -NCT03914846 -NCT03914911 -NCT03914950 -NCT03915002 -NCT03915054 -NCT03915106 -NCT03915132 -NCT03915171 -NCT03915184 -NCT03915249 -NCT03915288 -NCT03915379 -NCT03915405 -NCT03915418 -NCT03915444 -NCT03915457 -NCT03915548 -NCT03915626 -NCT03915652 -NCT03915678 -NCT03915704 -NCT03915730 -NCT03915873 -NCT03915912 -NCT03915951 -NCT03916029 -NCT03916068 -NCT03916094 -NCT03916237 -NCT03881410 -NCT03884777 -NCT03881488 -NCT03884751 -NCT03881514 -NCT03884816 -NCT03881605 -NCT03884829 -NCT03881657 -NCT03884868 -NCT03881683 -NCT03884972 -NCT03881735 -NCT03884985 -NCT03881761 -NCT03884998 -NCT03881774 -NCT03885076 -NCT03881787 -NCT03885154 -NCT03881826 -NCT03885219 -NCT03881839 -NCT03885232 -NCT03881878 -NCT03885258 -NCT03882034 -NCT03885284 -NCT03882060 -NCT03885297 -NCT03882203 -NCT03885388 -NCT03882281 -NCT03885557 -NCT03882307 -NCT03885570 -NCT03882385 -NCT03885726 -NCT03882411 -NCT03885791 -NCT03882528 -NCT03885817 -NCT03882606 -NCT03885830 -NCT03882801 -NCT03885908 -NCT03882840 -NCT03885947 -NCT03882853 -NCT03886181 -NCT03882866 -NCT03886220 -NCT03882970 -NCT03886311 -NCT03883048 -NCT03886389 -NCT03883087 -NCT03886441 -NCT03883100 -NCT03886493 -NCT03883152 -NCT03886532 -NCT03883217 -NCT03886649 -NCT03883243 -NCT03886662 -NCT03883269 -NCT03886740 -NCT03883464 -NCT03886831 -NCT03883490 -NCT03886844 -NCT03883568 -NCT03886896 -NCT03883672 -NCT03887013 -NCT03883698 -NCT03887091 -NCT03883750 -NCT03887130 -NCT03883776 -NCT03887156 -NCT03883802 -NCT03887195 -NCT03883815 -NCT03887208 -NCT03883919 -NCT03887364 -NCT03883945 -NCT03887442 -NCT03883958 -NCT03887455 -NCT03884010 -NCT03887494 -NCT03884101 -NCT03887663 -NCT03884127 -NCT03887702 -NCT03884140 -NCT03887754 -NCT03884192 -NCT03910634 -NCT03884348 -NCT03910647 -NCT03884426 -NCT03910660 -NCT03884517 -NCT03910699 -NCT03884556 -NCT03910712 -NCT03884582 -NCT03910738 -NCT03887910 -NCT03891173 -NCT03887936 -NCT03891147 -NCT03887962 -NCT03891238 -NCT03887975 -NCT03891355 -NCT03888092 -NCT03891394 -NCT03888105 -NCT03891433 -NCT03888248 -NCT03891472 -NCT03888274 -NCT03891576 -NCT03888287 -NCT03891615 -NCT03888495 -NCT03891654 -NCT03888534 -NCT03891667 -NCT03888547 -NCT03891706 -NCT03888612 -NCT03891719 -NCT03888664 -NCT03891732 -NCT03888677 -NCT03891784 -NCT03888846 -NCT03891823 -NCT03888859 -NCT03891836 -NCT03888950 -NCT03891901 -NCT03889002 -NCT03891914 -NCT03889093 -NCT03891953 -NCT03889106 -NCT03891979 -NCT03889119 -NCT03892018 -NCT03889158 -NCT03892044 -NCT03889223 -NCT03892187 -NCT03889249 -NCT03892213 -NCT03889275 -NCT03892265 -NCT03889483 -NCT03892408 -NCT03889626 -NCT03892421 -NCT03889743 -NCT03892525 -NCT03889769 -NCT03892538 -NCT03889795 -NCT03892642 -NCT03889821 -NCT03892655 -NCT03889899 -NCT03892668 -NCT03889912 -NCT03892681 -NCT03889951 -NCT03892720 -NCT03889990 -NCT03892785 -NCT03890042 -NCT03892798 -NCT03890055 -NCT03892967 -NCT03890068 -NCT03892980 -NCT03890185 -NCT03892993 -NCT03890198 -NCT03893019 -NCT03890211 -NCT03893058 -NCT03890224 -NCT03910244 -NCT03890237 -NCT03910257 -NCT03890289 -NCT03910335 -NCT03890367 -NCT03910374 -NCT03890575 -NCT03910387 -NCT03890640 -NCT03910413 -NCT03890679 -NCT03910426 -NCT03890731 -NCT03910439 -NCT03890744 -NCT03910452 -NCT03890757 -NCT03910530 -NCT03890939 -NCT03910543 -NCT03890952 -NCT03910582 -NCT03891069 -NCT03910595 -NCT03891108 -NCT03910621 -NCT03893110 -NCT03908372 -NCT03893136 -NCT03908424 -NCT03893162 -NCT03908528 -NCT03893292 -NCT03908632 -NCT03893370 -NCT03908671 -NCT03893396 -NCT03908697 -NCT03893487 -NCT03908788 -NCT03893539 -NCT03908814 -NCT03893643 -NCT03908827 -NCT03893682 -NCT03908840 -NCT03893695 -NCT03908944 -NCT03893903 -NCT03908983 -NCT03893929 -NCT03908996 -NCT03893955 -NCT03909152 -NCT03893981 -NCT03909204 -NCT03894007 -NCT03909256 -NCT03894215 -NCT03909282 -NCT03894267 -NCT03909321 -NCT03894293 -NCT03909334 -NCT03894540 -NCT03909412 -NCT03894553 -NCT03909438 -NCT03894618 -NCT03909477 -NCT03894709 -NCT03909529 -NCT03894852 -NCT03909607 -NCT03894865 -NCT03909620 -NCT03894891 -NCT03909724 -NCT03894982 -NCT03909802 -NCT03895255 -NCT03909880 -NCT03895281 -NCT03909893 -NCT03895294 -NCT03909971 -NCT03895359 -NCT03910101 -NCT03895450 -NCT03910127 -NCT03895502 -NCT03910140 -NCT03895593 -NCT03910231 -NCT03895684 -NCT03905902 -NCT03905941 -NCT03905954 -NCT03905967 -NCT03906006 -NCT03906045 -NCT03906058 -NCT03906071 -NCT03906201 -NCT03906214 -NCT03906227 -NCT03906253 -NCT03906292 -NCT03906448 -NCT03906526 -NCT03906539 -NCT03906565 -NCT03906643 -NCT03906669 -NCT03906682 -NCT03906708 -NCT03906812 -NCT03906838 -NCT03907007 -NCT03907098 -NCT03907358 -NCT03907384 -NCT03907436 -NCT03907475 -NCT03907488 -NCT03907514 -NCT03907527 -NCT03907566 -NCT03907579 -NCT03907670 -NCT03907748 -NCT03907787 -NCT03907800 -NCT03907826 -NCT03907852 -NCT03907865 -NCT03908099 -NCT03908138 -NCT03908164 -NCT03908177 -NCT03908255 -NCT03908320 -NCT03908333 -NCT03895710 -NCT03898388 -NCT03895723 -NCT03898284 -NCT03895788 -NCT03898453 -NCT03895905 -NCT03898583 -NCT03895918 -NCT03898596 -NCT03895944 -NCT03898622 -NCT03895970 -NCT03898648 -NCT03895996 -NCT03898661 -NCT03896035 -NCT03898687 -NCT03896074 -NCT03898726 -NCT03896113 -NCT03898791 -NCT03896204 -NCT03898856 -NCT03896230 -NCT03898895 -NCT03896269 -NCT03898908 -NCT03896373 -NCT03898921 -NCT03896399 -NCT03898973 -NCT03896412 -NCT03899077 -NCT03896503 -NCT03899129 -NCT03896516 -NCT03899155 -NCT03896542 -NCT03899246 -NCT03896568 -NCT03899272 -NCT03896646 -NCT03899298 -NCT03896659 -NCT03899337 -NCT03896672 -NCT03899376 -NCT03896685 -NCT03899415 -NCT03896737 -NCT03899428 -NCT03896750 -NCT03899441 -NCT03896854 -NCT03899467 -NCT03896867 -NCT03899506 -NCT03896906 -NCT03904810 -NCT03896997 -NCT03904823 -NCT03897036 -NCT03904862 -NCT03897049 -NCT03904888 -NCT03897127 -NCT03904927 -NCT03897166 -NCT03904966 -NCT03897218 -NCT03905135 -NCT03897244 -NCT03905148 -NCT03897257 -NCT03905161 -NCT03897270 -NCT03905174 -NCT03897283 -NCT03905317 -NCT03897439 -NCT03905343 -NCT03897491 -NCT03905356 -NCT03897504 -NCT03905369 -NCT03897543 -NCT03905434 -NCT03897556 -NCT03905460 -NCT03897595 -NCT03905473 -NCT03897634 -NCT03905512 -NCT03897647 -NCT03905525 -NCT03897686 -NCT03905538 -NCT03897829 -NCT03905603 -NCT03897881 -NCT03905681 -NCT03897959 -NCT03905694 -NCT03898102 -NCT03905720 -NCT03898167 -NCT03905824 -NCT03898180 -NCT03905876 -NCT03898245 -NCT03905889 -NCT03899610 -NCT03902379 -NCT03899636 -NCT03902340 -NCT03899766 -NCT03902470 -NCT03899792 -NCT03902496 -NCT03899805 -NCT03902665 -NCT03899857 -NCT03902678 -NCT03899987 -NCT03902730 -NCT03900078 -NCT03902769 -NCT03900104 -NCT03902782 -NCT03900117 -NCT03902834 -NCT03900299 -NCT03902886 -NCT03900312 -NCT03902899 -NCT03900325 -NCT03902951 -NCT03900364 -NCT03902977 -NCT03900377 -NCT03903029 -NCT03900442 -NCT03903146 -NCT03900468 -NCT03903185 -NCT03900520 -NCT03903224 -NCT03900585 -NCT03903276 -NCT03900598 -NCT03903393 -NCT03900624 -NCT03903419 -NCT03900637 -NCT03903458 -NCT03900650 -NCT03903471 -NCT03900676 -NCT03903562 -NCT03900715 -NCT03903614 -NCT03900793 -NCT03903640 -NCT03900819 -NCT03903666 -NCT03900845 -NCT03903705 -NCT03900871 -NCT03903744 -NCT03900884 -NCT03903770 -NCT03900910 -NCT03903783 -NCT03900936 -NCT03903835 -NCT03900949 -NCT03903848 -NCT03900975 -NCT03903887 -NCT03901118 -NCT03903952 -NCT03901183 -NCT03904004 -NCT03901261 -NCT03904043 -NCT03901339 -NCT03904069 -NCT03901365 -NCT03904095 -NCT03901378 -NCT03904108 -NCT03901417 -NCT03904134 -NCT03901469 -NCT03904199 -NCT03901495 -NCT03904225 -NCT03901573 -NCT03904251 -NCT03901651 -NCT03904342 -NCT03901664 -NCT03904355 -NCT03901703 -NCT03904368 -NCT03901755 -NCT03904485 -NCT03901781 -NCT03904511 -NCT03901950 -NCT03904537 -NCT03901963 -NCT03904563 -NCT03902080 -NCT03904589 -NCT03902184 -NCT03904602 -NCT03902197 -NCT03904628 -NCT03902223 -NCT03904719 -NCT03902262 -NCT03996161 -NCT03990493 -NCT03993301 -NCT03990506 -NCT03993249 -NCT03990532 -NCT03993314 -NCT03990571 -NCT03993327 -NCT03990597 -NCT03993353 -NCT03990610 -NCT03993379 -NCT03990623 -NCT03993561 -NCT03990675 -NCT03993613 -NCT03990896 -NCT03993626 -NCT03990961 -NCT03993678 -NCT03990974 -NCT03993691 -NCT03991065 -NCT03993743 -NCT03991104 -NCT03993821 -NCT03991130 -NCT03993860 -NCT03991169 -NCT03993873 -NCT03991247 -NCT03993899 -NCT03991286 -NCT03993912 -NCT03991403 -NCT03993925 -NCT03991429 -NCT03993964 -NCT03991494 -NCT03994055 -NCT03991520 -NCT03994068 -NCT03991559 -NCT03994094 -NCT03991598 -NCT03994107 -NCT03991663 -NCT03994133 -NCT03991702 -NCT03994172 -NCT03991741 -NCT03994185 -NCT03991793 -NCT03994211 -NCT03991819 -NCT03994263 -NCT03991832 -NCT03994315 -NCT03991845 -NCT03994367 -NCT03991884 -NCT03994393 -NCT03991897 -NCT03994406 -NCT03991910 -NCT03994484 -NCT03991962 -NCT03994588 -NCT03991975 -NCT03994601 -NCT03992131 -NCT03994705 -NCT03992144 -NCT03994744 -NCT03992170 -NCT03994796 -NCT03992209 -NCT03994848 -NCT03992326 -NCT03994913 -NCT03992339 -NCT03995017 -NCT03992456 -NCT03995082 -NCT03992521 -NCT03995147 -NCT03992573 -NCT03995511 -NCT03992625 -NCT03995602 -NCT03992664 -NCT03995641 -NCT03992677 -NCT03995667 -NCT03992833 -NCT03995706 -NCT03992859 -NCT03995823 -NCT03992885 -NCT03995836 -NCT03992911 -NCT03995888 -NCT03993015 -NCT03995953 -NCT03993054 -NCT03996005 -NCT03993106 -NCT03996057 -NCT03993210 -NCT03996148 -NCT03993223 -NCT04001582 -NCT03996239 -NCT03998891 -NCT03996265 -NCT03998761 -NCT03996291 -NCT03998930 -NCT03996356 -NCT03998969 -NCT03996395 -NCT03999008 -NCT03996408 -NCT03999034 -NCT03996460 -NCT03999151 -NCT03996473 -NCT03999164 -NCT03996486 -NCT03999177 -NCT03996590 -NCT03999190 -NCT03996642 -NCT03999203 -NCT03996668 -NCT03999333 -NCT03996681 -NCT03999437 -NCT03996928 -NCT03999502 -NCT03996954 -NCT03999515 -NCT03997110 -NCT03999658 -NCT03997123 -NCT03999671 -NCT03997188 -NCT03999684 -NCT03997201 -NCT03999697 -NCT03997214 -NCT03999710 -NCT03997370 -NCT03999723 -NCT03997396 -NCT03999749 -NCT03997435 -NCT03999775 -NCT03997448 -NCT03999840 -NCT03997474 -NCT04000165 -NCT03997513 -NCT04000204 -NCT03997539 -NCT04000269 -NCT03997643 -NCT04000282 -NCT03997669 -NCT04000295 -NCT03997682 -NCT04000373 -NCT03997760 -NCT04000386 -NCT03997786 -NCT04000412 -NCT03997799 -NCT04000451 -NCT03997890 -NCT04000464 -NCT03997903 -NCT04000477 -NCT03997942 -NCT04000490 -NCT03997968 -NCT04000503 -NCT03997994 -NCT04000529 -NCT03998020 -NCT04000555 -NCT03998033 -NCT04000581 -NCT03998085 -NCT04000698 -NCT03998098 -NCT04000711 -NCT03998150 -NCT04000737 -NCT03998189 -NCT04000763 -NCT03998254 -NCT04000880 -NCT03998293 -NCT04000906 -NCT03998345 -NCT04001010 -NCT03998358 -NCT04001023 -NCT03998514 -NCT04001075 -NCT03998553 -NCT04001101 -NCT03998566 -NCT04001127 -NCT03998579 -NCT04001400 -NCT03998618 -NCT04001413 -NCT03998657 -NCT04001543 -NCT03998696 -NCT04001569 -NCT03998722 -NCT04007081 -NCT04001621 -NCT04004338 -NCT04001725 -NCT04004312 -NCT04001751 -NCT04004416 -NCT04001777 -NCT04004442 -NCT04001829 -NCT04004468 -NCT04001842 -NCT04004507 -NCT04001933 -NCT04004572 -NCT04002024 -NCT04004637 -NCT04002089 -NCT04004650 -NCT04002115 -NCT04004702 -NCT04002128 -NCT04004767 -NCT04002219 -NCT04004858 -NCT04002271 -NCT04004871 -NCT04002284 -NCT04004897 -NCT04002297 -NCT04004910 -NCT04002362 -NCT04004962 -NCT04002401 -NCT04004975 -NCT04002479 -NCT04005040 -NCT04002596 -NCT04005144 -NCT04002622 -NCT04005157 -NCT04002661 -NCT04005170 -NCT04002674 -NCT04005209 -NCT04002778 -NCT04005222 -NCT04002804 -NCT04005235 -NCT04002817 -NCT04005339 -NCT04002947 -NCT04005365 -NCT04002986 -NCT04005521 -NCT04003012 -NCT04005625 -NCT04003038 -NCT04005638 -NCT04003051 -NCT04005651 -NCT04003077 -NCT04005690 -NCT04003168 -NCT04005716 -NCT04003181 -NCT04005820 -NCT04003233 -NCT04006041 -NCT04003246 -NCT04006067 -NCT04003363 -NCT04006119 -NCT04003415 -NCT04006132 -NCT04003558 -NCT04006223 -NCT04003597 -NCT04006249 -NCT04003610 -NCT04006275 -NCT04003623 -NCT04006301 -NCT04003636 -NCT04006314 -NCT04003649 -NCT04006405 -NCT04003662 -NCT04006496 -NCT04003701 -NCT04006522 -NCT04003792 -NCT04006691 -NCT04003818 -NCT04006769 -NCT04003844 -NCT04006795 -NCT04003896 -NCT04006821 -NCT04003935 -NCT04006834 -NCT04004026 -NCT04006847 -NCT04004104 -NCT04006951 -NCT04004117 -NCT04006990 -NCT04004221 -NCT04007029 -NCT04004234 -NCT04007055 -NCT04004273 -NCT04012827 -NCT04007276 -NCT04009681 -NCT04007341 -NCT04009538 -NCT04007354 -NCT04009811 -NCT04007432 -NCT04009837 -NCT04007458 -NCT04009876 -NCT04007471 -NCT04009915 -NCT04007497 -NCT04009941 -NCT04007549 -NCT04009967 -NCT04007588 -NCT04010006 -NCT04007601 -NCT04010071 -NCT04007614 -NCT04010097 -NCT04007640 -NCT04010214 -NCT04007744 -NCT04010227 -NCT04007757 -NCT04010305 -NCT04007770 -NCT04010357 -NCT04007809 -NCT04010383 -NCT04007835 -NCT04010409 -NCT04007874 -NCT04010461 -NCT04007978 -NCT04010487 -NCT04008017 -NCT04010500 -NCT04008030 -NCT04010552 -NCT04008069 -NCT04010799 -NCT04008134 -NCT04010825 -NCT04008238 -NCT04010877 -NCT04008251 -NCT04010955 -NCT04008264 -NCT04010968 -NCT04008277 -NCT04010994 -NCT04008368 -NCT04011033 -NCT04008381 -NCT04011059 -NCT04008394 -NCT04011319 -NCT04008407 -NCT04011332 -NCT04008511 -NCT04011410 -NCT04008537 -NCT04011592 -NCT04008563 -NCT04011605 -NCT04008706 -NCT04011631 -NCT04008732 -NCT04011696 -NCT04008797 -NCT04011865 -NCT04008888 -NCT04011878 -NCT04008940 -NCT04011930 -NCT04008966 -NCT04011982 -NCT04009005 -NCT04012021 -NCT04009044 -NCT04012138 -NCT04009070 -NCT04012294 -NCT04009083 -NCT04012346 -NCT04009096 -NCT04012502 -NCT04009109 -NCT04012528 -NCT04009122 -NCT04012554 -NCT04009174 -NCT04012606 -NCT04009213 -NCT04012619 -NCT04009226 -NCT04012645 -NCT04009265 -NCT04012658 -NCT04009278 -NCT04012671 -NCT04009317 -NCT04012723 -NCT04009421 -NCT04012749 -NCT04009434 -NCT04012801 -NCT04009460 -NCT04019678 -NCT04012879 -NCT04015999 -NCT04012892 -NCT04015986 -NCT04012905 -NCT04016116 -NCT04012918 -NCT04016129 -NCT04012970 -NCT04016142 -NCT04013048 -NCT04016168 -NCT04013126 -NCT04016181 -NCT04013139 -NCT04016350 -NCT04013178 -NCT04016376 -NCT04013217 -NCT04016389 -NCT04013256 -NCT04016571 -NCT04013334 -NCT04016584 -NCT04013542 -NCT04016623 -NCT04013568 -NCT04016675 -NCT04013672 -NCT04016779 -NCT04013685 -NCT04016805 -NCT04013750 -NCT04016818 -NCT04013802 -NCT04016948 -NCT04013841 -NCT04016974 -NCT04013854 -NCT04017130 -NCT04013880 -NCT04017143 -NCT04013984 -NCT04017286 -NCT04014075 -NCT04017377 -NCT04014101 -NCT04017455 -NCT04014179 -NCT04017546 -NCT04014244 -NCT04017650 -NCT04014257 -NCT04017728 -NCT04014283 -NCT04017754 -NCT04014309 -NCT04017819 -NCT04014478 -NCT04017845 -NCT04014530 -NCT04017897 -NCT04014881 -NCT04017936 -NCT04014894 -NCT04018053 -NCT04014985 -NCT04018118 -NCT04015024 -NCT04018131 -NCT04015037 -NCT04018248 -NCT04015063 -NCT04018287 -NCT04015206 -NCT04018547 -NCT04015245 -NCT04018625 -NCT04015336 -NCT04018677 -NCT04015375 -NCT04018859 -NCT04015388 -NCT04018872 -NCT04015492 -NCT04018898 -NCT04015531 -NCT04018963 -NCT04015544 -NCT04019002 -NCT04015609 -NCT04019054 -NCT04015622 -NCT04019197 -NCT04015661 -NCT04019223 -NCT04015700 -NCT04019262 -NCT04015739 -NCT04019288 -NCT04015765 -NCT04019327 -NCT04015778 -NCT04019379 -NCT04015791 -NCT04019535 -NCT04015804 -NCT04019548 -NCT04015856 -NCT04019652 -NCT04015882 -NCT04024826 -NCT04019730 -NCT04022408 -NCT04019834 -NCT04022343 -NCT04019912 -NCT04022460 -NCT04019964 -NCT04022551 -NCT04019990 -NCT04022733 -NCT04020029 -NCT04022746 -NCT04020094 -NCT04022772 -NCT04020133 -NCT04022785 -NCT04020172 -NCT04022798 -NCT04020185 -NCT04022837 -NCT04020198 -NCT04022876 -NCT04020276 -NCT04023019 -NCT04020380 -NCT04023071 -NCT04020406 -NCT04023084 -NCT04020419 -NCT04023110 -NCT04020523 -NCT04023136 -NCT04020575 -NCT04023149 -NCT04020744 -NCT04023201 -NCT04020809 -NCT04023240 -NCT04020835 -NCT04023279 -NCT04020848 -NCT04023292 -NCT04020913 -NCT04023331 -NCT04020978 -NCT04023409 -NCT04021043 -NCT04023422 -NCT04021082 -NCT04023448 -NCT04021108 -NCT04023526 -NCT04021160 -NCT04023617 -NCT04021186 -NCT04023669 -NCT04021212 -NCT04023825 -NCT04021238 -NCT04023864 -NCT04021277 -NCT04023890 -NCT04021316 -NCT04023916 -NCT04021368 -NCT04024072 -NCT04021420 -NCT04024085 -NCT04021446 -NCT04024202 -NCT04021459 -NCT04024215 -NCT04021498 -NCT04024228 -NCT04021524 -NCT04024254 -NCT04021537 -NCT04024267 -NCT04021576 -NCT04024280 -NCT04021589 -NCT04024319 -NCT04021615 -NCT04024332 -NCT04021654 -NCT04024345 -NCT04021706 -NCT04024384 -NCT04021784 -NCT04024436 -NCT04021914 -NCT04024449 -NCT04021927 -NCT04024462 -NCT04021992 -NCT04024514 -NCT04022005 -NCT04024566 -NCT04022018 -NCT04024618 -NCT04022057 -NCT04024696 -NCT04022187 -NCT04024735 -NCT04022213 -NCT04024761 -NCT04022226 -NCT04024774 -NCT04022239 -NCT04024800 -NCT04022330 -NCT04030429 -NCT04024839 -NCT04027400 -NCT04024878 -NCT04027348 -NCT04024917 -NCT04027556 -NCT04024930 -NCT04027647 -NCT04025021 -NCT04027764 -NCT04025112 -NCT04027777 -NCT04025164 -NCT04027803 -NCT04025216 -NCT04027894 -NCT04025229 -NCT04027946 -NCT04025242 -NCT04027985 -NCT04025281 -NCT04028011 -NCT04025307 -NCT04028050 -NCT04025320 -NCT04028063 -NCT04025372 -NCT04028115 -NCT04025437 -NCT04028167 -NCT04025450 -NCT04028180 -NCT04025541 -NCT04028245 -NCT04025567 -NCT04028375 -NCT04025580 -NCT04028388 -NCT04025593 -NCT04028440 -NCT04025606 -NCT04028453 -NCT04025645 -NCT04028466 -NCT04025710 -NCT04028479 -NCT04025801 -NCT04028518 -NCT04025840 -NCT04028531 -NCT04025879 -NCT04028570 -NCT04025918 -NCT04028596 -NCT04025931 -NCT04028778 -NCT04025944 -NCT04029038 -NCT04026035 -NCT04029077 -NCT04026048 -NCT04029155 -NCT04026100 -NCT04029181 -NCT04026113 -NCT04029272 -NCT04026191 -NCT04029337 -NCT04026204 -NCT04029350 -NCT04026230 -NCT04029363 -NCT04026269 -NCT04029428 -NCT04026321 -NCT04029441 -NCT04026360 -NCT04029467 -NCT04026412 -NCT04029688 -NCT04026516 -NCT04029714 -NCT04026529 -NCT04029727 -NCT04026542 -NCT04029766 -NCT04026620 -NCT04029792 -NCT04026659 -NCT04029857 -NCT04026763 -NCT04029909 -NCT04026789 -NCT04029922 -NCT04026841 -NCT04029948 -NCT04026958 -NCT04030000 -NCT04026984 -NCT04030052 -NCT04027049 -NCT04030104 -NCT04027088 -NCT04030130 -NCT04027101 -NCT04030195 -NCT04027270 -NCT04030260 -NCT04027309 -NCT04030338 -NCT04027322 -NCT04035980 -NCT04030455 -NCT04033328 -NCT04030468 -NCT04033302 -NCT04030507 -NCT04033354 -NCT04030546 -NCT04033406 -NCT04030559 -NCT04033432 -NCT04030572 -NCT04033497 -NCT04030624 -NCT04033536 -NCT04030741 -NCT04033549 -NCT04030819 -NCT04033627 -NCT04030884 -NCT04033744 -NCT04030975 -NCT04033822 -NCT04031092 -NCT04033874 -NCT04031235 -NCT04033887 -NCT04031261 -NCT04034004 -NCT04031287 -NCT04034043 -NCT04031339 -NCT04034173 -NCT04031378 -NCT04034199 -NCT04031521 -NCT04034225 -NCT04031534 -NCT04034238 -NCT04031560 -NCT04034251 -NCT04031638 -NCT04034264 -NCT04031677 -NCT04034355 -NCT04031703 -NCT04034394 -NCT04031729 -NCT04034446 -NCT04031781 -NCT04034459 -NCT04031872 -NCT04034472 -NCT04031885 -NCT04034550 -NCT04032067 -NCT04034589 -NCT04032080 -NCT04034641 -NCT04032119 -NCT04034823 -NCT04032132 -NCT04034914 -NCT04032158 -NCT04034927 -NCT04032236 -NCT04034940 -NCT04032262 -NCT04034953 -NCT04032353 -NCT04035096 -NCT04032392 -NCT04035148 -NCT04032418 -NCT04035213 -NCT04032470 -NCT04035252 -NCT04032600 -NCT04035265 -NCT04032691 -NCT04035291 -NCT04032704 -NCT04035421 -NCT04032769 -NCT04035434 -NCT04032821 -NCT04035447 -NCT04032847 -NCT04035460 -NCT04032860 -NCT04035473 -NCT04032951 -NCT04035486 -NCT04032964 -NCT04035590 -NCT04032990 -NCT04035616 -NCT04033029 -NCT04035642 -NCT04033081 -NCT04035707 -NCT04033094 -NCT04035811 -NCT04033107 -NCT04035837 -NCT04033120 -NCT04035876 -NCT04033146 -NCT04035954 -NCT04033172 -NCT04035967 -NCT04033198 -NCT04042090 -NCT04036019 -NCT04038801 -NCT04036149 -NCT04038736 -NCT04036344 -NCT04038879 -NCT04036409 -NCT04039022 -NCT04036448 -NCT04039100 -NCT04036461 -NCT04039126 -NCT04036565 -NCT04039152 -NCT04036604 -NCT04039191 -NCT04036643 -NCT04039230 -NCT04036656 -NCT04039399 -NCT04036682 -NCT04039451 -NCT04036721 -NCT04039516 -NCT04036760 -NCT04039607 -NCT04036929 -NCT04039672 -NCT04036994 -NCT04039750 -NCT04037007 -NCT04039828 -NCT04037241 -NCT04039867 -NCT04037254 -NCT04039893 -NCT04037267 -NCT04040036 -NCT04037358 -NCT04040088 -NCT04037384 -NCT04040114 -NCT04037423 -NCT04040140 -NCT04037436 -NCT04040166 -NCT04037462 -NCT04040179 -NCT04037488 -NCT04040205 -NCT04037527 -NCT04040218 -NCT04037553 -NCT04040231 -NCT04037566 -NCT04040244 -NCT04037579 -NCT04040361 -NCT04037618 -NCT04040374 -NCT04037748 -NCT04040400 -NCT04037787 -NCT04040426 -NCT04037800 -NCT04040491 -NCT04037813 -NCT04040569 -NCT04037852 -NCT04040634 -NCT04037891 -NCT04040673 -NCT04037956 -NCT04040686 -NCT04037982 -NCT04040699 -NCT04037995 -NCT04040712 -NCT04038138 -NCT04040725 -NCT04038229 -NCT04040790 -NCT04038242 -NCT04040855 -NCT04038307 -NCT04040881 -NCT04038346 -NCT04040894 -NCT04038359 -NCT04041011 -NCT04038372 -NCT04041050 -NCT04038385 -NCT04041128 -NCT04038411 -NCT04041310 -NCT04038437 -NCT04041505 -NCT04038450 -NCT04041674 -NCT04038463 -NCT04041700 -NCT04038489 -NCT04041726 -NCT04038502 -NCT04041882 -NCT04038554 -NCT04041895 -NCT04038606 -NCT04042051 -NCT04038619 -NCT04047628 -NCT04042116 -NCT04044885 -NCT04042259 -NCT04044872 -NCT04042376 -NCT04044937 -NCT04042467 -NCT04044950 -NCT04042480 -NCT04045015 -NCT04042506 -NCT04045028 -NCT04042519 -NCT04045067 -NCT04042532 -NCT04045080 -NCT04042545 -NCT04045119 -NCT04042558 -NCT04045158 -NCT04042597 -NCT04045314 -NCT04042701 -NCT04045392 -NCT04042714 -NCT04045444 -NCT04042753 -NCT04045470 -NCT04042805 -NCT04045496 -NCT04042831 -NCT04045613 -NCT04042870 -NCT04045652 -NCT04042922 -NCT04045678 -NCT04042935 -NCT04045691 -NCT04042948 -NCT04045717 -NCT04043104 -NCT04045730 -NCT04043117 -NCT04045756 -NCT04043156 -NCT04045795 -NCT04043169 -NCT04045821 -NCT04043260 -NCT04045847 -NCT04043312 -NCT04045860 -NCT04043390 -NCT04045951 -NCT04043416 -NCT04046003 -NCT04043494 -NCT04046016 -NCT04043520 -NCT04046055 -NCT04043676 -NCT04046094 -NCT04043715 -NCT04046133 -NCT04043832 -NCT04046159 -NCT04043845 -NCT04046172 -NCT04043923 -NCT04046185 -NCT04044040 -NCT04046328 -NCT04044131 -NCT04046445 -NCT04044170 -NCT04046575 -NCT04044209 -NCT04046601 -NCT04044222 -NCT04046614 -NCT04044248 -NCT04046653 -NCT04044313 -NCT04046848 -NCT04044326 -NCT04046887 -NCT04044352 -NCT04047004 -NCT04044378 -NCT04047095 -NCT04044430 -NCT04047134 -NCT04044547 -NCT04047173 -NCT04044560 -NCT04047186 -NCT04044573 -NCT04047225 -NCT04044651 -NCT04047251 -NCT04044716 -NCT04047264 -NCT04044742 -NCT04047290 -NCT04044755 -NCT04047303 -NCT04044768 -NCT04047316 -NCT04044833 -NCT04047602 -NCT04044859 -NCT04053192 -NCT04047641 -NCT04050215 -NCT04047680 -NCT04050176 -NCT04047693 -NCT04050228 -NCT04047706 -NCT04050280 -NCT04047732 -NCT04050397 -NCT04047758 -NCT04050436 -NCT04047771 -NCT04050462 -NCT04047784 -NCT04050514 -NCT04047797 -NCT04050553 -NCT04047862 -NCT04050579 -NCT04047901 -NCT04050709 -NCT04047953 -NCT04050774 -NCT04047966 -NCT04050787 -NCT04047979 -NCT04050852 -NCT04048031 -NCT04050930 -NCT04048083 -NCT04051047 -NCT04048148 -NCT04051060 -NCT04048187 -NCT04051099 -NCT04048278 -NCT04051112 -NCT04048291 -NCT04051125 -NCT04048317 -NCT04051203 -NCT04048343 -NCT04051216 -NCT04048421 -NCT04051307 -NCT04048538 -NCT04051411 -NCT04048785 -NCT04051606 -NCT04048889 -NCT04051658 -NCT04048941 -NCT04051697 -NCT04048954 -NCT04051736 -NCT04049058 -NCT04051827 -NCT04049188 -NCT04051931 -NCT04049214 -NCT04051996 -NCT04049227 -NCT04052061 -NCT04049253 -NCT04052074 -NCT04049305 -NCT04052100 -NCT04049331 -NCT04052113 -NCT04049344 -NCT04052126 -NCT04049357 -NCT04052152 -NCT04049370 -NCT04052204 -NCT04049383 -NCT04052308 -NCT04049448 -NCT04052321 -NCT04049474 -NCT04052334 -NCT04049513 -NCT04052412 -NCT04049539 -NCT04052555 -NCT04049604 -NCT04052607 -NCT04049617 -NCT04052659 -NCT04049669 -NCT04052698 -NCT04049695 -NCT04052737 -NCT04049747 -NCT04052880 -NCT04049825 -NCT04052893 -NCT04049864 -NCT04052971 -NCT04049903 -NCT04052997 -NCT04049929 -NCT04053010 -NCT04049942 -NCT04053062 -NCT04049968 -NCT04053088 -NCT04050085 -NCT04053166 -NCT04050111 -NCT04059081 -NCT04053205 -NCT04056247 -NCT04053283 -NCT04056221 -NCT04053309 -NCT04056260 -NCT04053322 -NCT04056273 -NCT04053426 -NCT04056442 -NCT04053673 -NCT04056676 -NCT04053699 -NCT04056754 -NCT04053816 -NCT04056832 -NCT04053842 -NCT04056845 -NCT04053868 -NCT04056858 -NCT04053972 -NCT04056910 -NCT04053985 -NCT04056923 -NCT04054037 -NCT04056949 -NCT04054063 -NCT04056975 -NCT04054154 -NCT04057040 -NCT04054167 -NCT04057066 -NCT04054206 -NCT04057183 -NCT04054219 -NCT04057196 -NCT04054349 -NCT04057209 -NCT04054362 -NCT04057222 -NCT04054453 -NCT04057274 -NCT04054505 -NCT04057313 -NCT04054518 -NCT04057365 -NCT04054531 -NCT04057443 -NCT04054557 -NCT04057638 -NCT04054609 -NCT04057664 -NCT04054687 -NCT04057729 -NCT04054726 -NCT04057794 -NCT04054752 -NCT04057807 -NCT04054882 -NCT04057846 -NCT04054960 -NCT04057924 -NCT04054986 -NCT04057976 -NCT04055012 -NCT04058015 -NCT04055038 -NCT04058028 -NCT04055220 -NCT04058132 -NCT04055311 -NCT04058145 -NCT04055441 -NCT04058158 -NCT04055467 -NCT04058171 -NCT04055480 -NCT04058197 -NCT04055493 -NCT04058223 -NCT04055584 -NCT04058236 -NCT04055597 -NCT04058327 -NCT04055610 -NCT04058353 -NCT04055649 -NCT04058366 -NCT04055675 -NCT04058379 -NCT04055714 -NCT04058470 -NCT04055766 -NCT04058509 -NCT04055792 -NCT04058522 -NCT04055818 -NCT04058561 -NCT04055831 -NCT04058587 -NCT04055844 -NCT04058600 -NCT04055948 -NCT04058704 -NCT04056026 -NCT04058756 -NCT04056078 -NCT04058795 -NCT04056117 -NCT04058964 -NCT04056130 -NCT04064060 -NCT04059159 -NCT04061733 -NCT04059172 -NCT04061707 -NCT04059224 -NCT04061772 -NCT04059237 -NCT04061785 -NCT04059393 -NCT04061811 -NCT04059484 -NCT04061824 -NCT04059562 -NCT04061863 -NCT04059588 -NCT04061928 -NCT04059601 -NCT04061967 -NCT04059679 -NCT04061980 -NCT04059731 -NCT04062006 -NCT04059809 -NCT04062032 -NCT04059822 -NCT04062045 -NCT04059835 -NCT04062058 -NCT04059861 -NCT04062110 -NCT04059874 -NCT04062162 -NCT04059887 -NCT04062201 -NCT04059900 -NCT04062266 -NCT04060043 -NCT04062279 -NCT04060121 -NCT04062305 -NCT04060160 -NCT04062331 -NCT04060238 -NCT04062344 -NCT04060251 -NCT04062448 -NCT04060264 -NCT04062526 -NCT04060277 -NCT04062552 -NCT04060303 -NCT04062617 -NCT04060342 -NCT04062656 -NCT04060368 -NCT04062708 -NCT04060394 -NCT04062721 -NCT04060407 -NCT04062747 -NCT04060459 -NCT04062877 -NCT04060472 -NCT04062929 -NCT04060511 -NCT04063020 -NCT04060550 -NCT04063072 -NCT04060589 -NCT04063163 -NCT04060732 -NCT04063189 -NCT04060836 -NCT04063254 -NCT04060849 -NCT04063449 -NCT04060862 -NCT04063462 -NCT04060888 -NCT04063514 -NCT04060927 -NCT04063527 -NCT04061109 -NCT04063566 -NCT04061135 -NCT04063631 -NCT04061161 -NCT04063683 -NCT04061187 -NCT04063722 -NCT04061213 -NCT04063839 -NCT04061226 -NCT04063852 -NCT04061239 -NCT04063865 -NCT04061278 -NCT04063891 -NCT04061291 -NCT04063956 -NCT04061343 -NCT04063982 -NCT04061395 -NCT04063995 -NCT04061408 -NCT04064021 -NCT04061421 -NCT04064034 -NCT04061512 -NCT04064047 -NCT04061590 -NCT04069572 -NCT04064151 -NCT04067102 -NCT04064190 -NCT04067037 -NCT04064281 -NCT04067115 -NCT04064294 -NCT04067167 -NCT04064307 -NCT04067180 -NCT04064359 -NCT04067336 -NCT04064411 -NCT04067414 -NCT04064424 -NCT04067427 -NCT04064437 -NCT04067453 -NCT04064567 -NCT04067492 -NCT04064736 -NCT04067518 -NCT04064788 -NCT04067544 -NCT04064840 -NCT04067596 -NCT04064892 -NCT04067609 -NCT04064957 -NCT04067622 -NCT04064983 -NCT04067635 -NCT04065009 -NCT04067648 -NCT04065022 -NCT04067687 -NCT04065087 -NCT04067778 -NCT04065139 -NCT04067830 -NCT04065152 -NCT04067960 -NCT04065217 -NCT04067973 -NCT04065269 -NCT04067986 -NCT04065282 -NCT04068103 -NCT04065308 -NCT04068155 -NCT04065321 -NCT04068181 -NCT04065399 -NCT04068194 -NCT04065516 -NCT04068220 -NCT04065555 -NCT04068246 -NCT04065737 -NCT04068376 -NCT04065776 -NCT04068415 -NCT04065789 -NCT04068480 -NCT04065802 -NCT04068506 -NCT04065815 -NCT04068519 -NCT04065893 -NCT04068597 -NCT04065984 -NCT04068610 -NCT04066023 -NCT04068636 -NCT04066166 -NCT04068649 -NCT04066205 -NCT04068675 -NCT04066361 -NCT04068740 -NCT04066491 -NCT04068753 -NCT04066530 -NCT04068766 -NCT04066543 -NCT04068831 -NCT04066569 -NCT04068896 -NCT04066595 -NCT04068961 -NCT04066621 -NCT04068974 -NCT04066634 -NCT04069026 -NCT04066647 -NCT04069052 -NCT04066660 -NCT04069208 -NCT04066725 -NCT04069234 -NCT04066777 -NCT04069273 -NCT04066790 -NCT04069286 -NCT04066816 -NCT04069325 -NCT04066868 -NCT04069455 -NCT04066894 -NCT04069533 -NCT04066920 -NCT04074759 -NCT04069702 -NCT04072653 -NCT04069793 -NCT04072640 -NCT04069819 -NCT04072679 -NCT04069884 -NCT04072718 -NCT04069897 -NCT04072783 -NCT04069910 -NCT04072796 -NCT04069936 -NCT04072822 -NCT04069949 -NCT04072835 -NCT04069975 -NCT04072874 -NCT04070001 -NCT04072900 -NCT04070040 -NCT04072913 -NCT04070131 -NCT04072952 -NCT04070209 -NCT04073017 -NCT04070222 -NCT04073043 -NCT04070300 -NCT04073147 -NCT04070313 -NCT04073160 -NCT04070352 -NCT04073173 -NCT04070443 -NCT04073212 -NCT04070534 -NCT04073251 -NCT04070768 -NCT04073290 -NCT04070781 -NCT04073329 -NCT04070898 -NCT04073342 -NCT04070976 -NCT04073485 -NCT04071106 -NCT04073511 -NCT04071184 -NCT04073524 -NCT04071223 -NCT04073537 -NCT04071236 -NCT04073550 -NCT04071262 -NCT04073602 -NCT04071314 -NCT04073615 -NCT04071340 -NCT04073680 -NCT04071353 -NCT04073706 -NCT04071379 -NCT04073745 -NCT04071431 -NCT04073784 -NCT04071457 -NCT04073823 -NCT04071574 -NCT04073888 -NCT04071626 -NCT04073927 -NCT04071665 -NCT04073940 -NCT04071691 -NCT04073953 -NCT04071756 -NCT04074031 -NCT04071847 -NCT04074096 -NCT04071899 -NCT04074135 -NCT04071925 -NCT04074239 -NCT04072042 -NCT04074330 -NCT04072068 -NCT04074343 -NCT04072107 -NCT04074408 -NCT04072146 -NCT04074421 -NCT04072198 -NCT04074460 -NCT04072263 -NCT04074473 -NCT04072289 -NCT04074486 -NCT04072302 -NCT04074512 -NCT04072367 -NCT04074525 -NCT04072380 -NCT04074564 -NCT04072393 -NCT04074642 -NCT04072406 -NCT04074720 -NCT04072445 -NCT04074746 -NCT04072458 -NCT04080570 -NCT04074772 -NCT04077827 -NCT04074785 -NCT04077749 -NCT04074824 -NCT04077840 -NCT04074902 -NCT04077866 -NCT04074941 -NCT04077983 -NCT04074967 -NCT04077996 -NCT04074993 -NCT04078139 -NCT04075058 -NCT04078152 -NCT04075097 -NCT04078217 -NCT04075149 -NCT04078230 -NCT04075188 -NCT04078269 -NCT04075253 -NCT04078295 -NCT04075266 -NCT04078386 -NCT04075292 -NCT04078425 -NCT04075396 -NCT04078451 -NCT04075422 -NCT04078542 -NCT04075539 -NCT04078737 -NCT04075604 -NCT04078763 -NCT04075721 -NCT04078828 -NCT04075734 -NCT04078841 -NCT04075747 -NCT04078867 -NCT04075851 -NCT04078945 -NCT04075877 -NCT04079049 -NCT04075903 -NCT04079166 -NCT04076033 -NCT04079179 -NCT04076059 -NCT04079270 -NCT04076111 -NCT04079296 -NCT04076137 -NCT04079309 -NCT04076189 -NCT04079361 -NCT04076280 -NCT04079439 -NCT04076332 -NCT04079504 -NCT04076345 -NCT04079517 -NCT04076397 -NCT04079595 -NCT04076462 -NCT04079699 -NCT04076501 -NCT04079712 -NCT04076514 -NCT04079738 -NCT04076579 -NCT04079777 -NCT04076605 -NCT04079868 -NCT04076618 -NCT04079881 -NCT04076683 -NCT04079894 -NCT04076696 -NCT04079946 -NCT04076761 -NCT04079959 -NCT04077021 -NCT04079985 -NCT04077060 -NCT04080024 -NCT04077073 -NCT04080128 -NCT04077086 -NCT04080141 -NCT04077099 -NCT04080154 -NCT04077112 -NCT04080232 -NCT04077255 -NCT04080245 -NCT04077307 -NCT04080258 -NCT04077359 -NCT04080284 -NCT04077372 -NCT04080362 -NCT04077463 -NCT04080414 -NCT04077489 -NCT04080427 -NCT04077515 -NCT04080531 -NCT04077723 -NCT04085523 -NCT04080583 -NCT04083170 -NCT04080674 -NCT04083131 -NCT04080687 -NCT04083183 -NCT04080726 -NCT04083196 -NCT04080804 -NCT04083235 -NCT04080830 -NCT04083274 -NCT04080843 -NCT04083313 -NCT04080921 -NCT04083365 -NCT04080934 -NCT04083378 -NCT04080999 -NCT04083443 -NCT04081103 -NCT04083495 -NCT04081116 -NCT04083534 -NCT04081168 -NCT04083586 -NCT04081181 -NCT04083599 -NCT04081220 -NCT04083651 -NCT04081246 -NCT04083729 -NCT04081259 -NCT04083768 -NCT04081298 -NCT04083859 -NCT04081389 -NCT04083898 -NCT04081402 -NCT04083911 -NCT04081415 -NCT04083937 -NCT04081558 -NCT04083963 -NCT04081571 -NCT04083976 -NCT04081636 -NCT04084015 -NCT04081688 -NCT04084067 -NCT04081701 -NCT04084119 -NCT04081753 -NCT04084158 -NCT04081779 -NCT04084236 -NCT04081805 -NCT04084249 -NCT04081870 -NCT04084366 -NCT04082065 -NCT04084431 -NCT04082117 -NCT04084496 -NCT04082143 -NCT04084561 -NCT04082182 -NCT04084600 -NCT04082260 -NCT04084665 -NCT04082286 -NCT04084704 -NCT04082338 -NCT04084717 -NCT04082364 -NCT04084730 -NCT04082455 -NCT04084912 -NCT04082520 -NCT04084938 -NCT04082572 -NCT04084951 -NCT04082676 -NCT04085042 -NCT04082689 -NCT04085055 -NCT04082780 -NCT04085081 -NCT04082793 -NCT04085120 -NCT04082832 -NCT04085159 -NCT04082897 -NCT04085237 -NCT04082910 -NCT04085250 -NCT04082936 -NCT04085276 -NCT04082962 -NCT04085315 -NCT04083027 -NCT04085367 -NCT04083053 -NCT04085419 -NCT04083066 -NCT04085471 -NCT04083079 -NCT04085497 -NCT04083092 -NCT04085510 -NCT04083118 -NCT04091022 -NCT04085705 -NCT04088396 -NCT04085796 -NCT04088370 -NCT04085861 -NCT04088409 -NCT04085887 -NCT04088474 -NCT04085952 -NCT04088500 -NCT04085991 -NCT04088604 -NCT04086082 -NCT04088643 -NCT04086134 -NCT04088708 -NCT04086173 -NCT04088786 -NCT04086199 -NCT04088838 -NCT04086212 -NCT04088864 -NCT04086251 -NCT04088877 -NCT04086264 -NCT04088890 -NCT04086290 -NCT04088942 -NCT04086303 -NCT04088968 -NCT04086316 -NCT04089007 -NCT04086394 -NCT04089046 -NCT04086472 -NCT04089150 -NCT04086485 -NCT04089163 -NCT04086524 -NCT04089189 -NCT04086589 -NCT04089215 -NCT04086628 -NCT04089280 -NCT04086667 -NCT04089358 -NCT04086732 -NCT04089449 -NCT04086758 -NCT04089475 -NCT04086771 -NCT04089501 -NCT04086784 -NCT04089527 -NCT04086875 -NCT04089553 -NCT04086901 -NCT04089579 -NCT04086966 -NCT04089631 -NCT04087018 -NCT04089657 -NCT04087083 -NCT04089761 -NCT04087096 -NCT04089787 -NCT04087174 -NCT04089904 -NCT04087239 -NCT04089982 -NCT04087252 -NCT04089995 -NCT04087278 -NCT04090047 -NCT04087330 -NCT04090060 -NCT04087408 -NCT04090125 -NCT04087421 -NCT04090164 -NCT04087447 -NCT04090203 -NCT04087564 -NCT04090268 -NCT04087577 -NCT04090346 -NCT04087629 -NCT04090398 -NCT04087642 -NCT04090463 -NCT04087694 -NCT04090528 -NCT04087759 -NCT04090554 -NCT04087785 -NCT04090567 -NCT04087967 -NCT04090632 -NCT04087980 -NCT04090645 -NCT04088006 -NCT04090671 -NCT04088032 -NCT04090710 -NCT04088045 -NCT04090736 -NCT04088058 -NCT04090775 -NCT04088110 -NCT04090931 -NCT04088188 -NCT04096417 -NCT04091087 -NCT04093388 -NCT04091126 -NCT04093375 -NCT04091178 -NCT04093401 -NCT04091204 -NCT04093414 -NCT04091217 -NCT04093466 -NCT04091230 -NCT04093492 -NCT04091243 -NCT04093505 -NCT04091282 -NCT04093557 -NCT04091321 -NCT04093570 -NCT04091334 -NCT04093596 -NCT04091386 -NCT04093648 -NCT04091399 -NCT04093687 -NCT04091490 -NCT04093778 -NCT04091503 -NCT04093791 -NCT04091516 -NCT04093947 -NCT04091542 -NCT04094025 -NCT04091568 -NCT04094077 -NCT04091620 -NCT04094116 -NCT04091672 -NCT04094129 -NCT04091698 -NCT04094142 -NCT04091750 -NCT04094311 -NCT04091763 -NCT04094402 -NCT04091776 -NCT04094454 -NCT04091789 -NCT04094480 -NCT04091867 -NCT04094506 -NCT04091919 -NCT04094519 -NCT04091958 -NCT04094610 -NCT04091971 -NCT04094675 -NCT04092010 -NCT04094688 -NCT04092127 -NCT04094766 -NCT04092179 -NCT04094779 -NCT04092192 -NCT04094818 -NCT04092231 -NCT04094896 -NCT04092257 -NCT04094961 -NCT04092270 -NCT04095000 -NCT04092283 -NCT04095026 -NCT04092335 -NCT04095169 -NCT04092400 -NCT04095208 -NCT04092556 -NCT04095221 -NCT04092595 -NCT04095234 -NCT04092673 -NCT04095273 -NCT04092803 -NCT04095299 -NCT04092816 -NCT04095312 -NCT04092959 -NCT04095351 -NCT04092985 -NCT04095364 -NCT04093024 -NCT04095390 -NCT04093102 -NCT04095416 -NCT04093115 -NCT04095585 -NCT04093128 -NCT04095689 -NCT04093141 -NCT04095715 -NCT04093154 -NCT04095780 -NCT04093167 -NCT04095858 -NCT04093206 -NCT04095884 -NCT04093271 -NCT04096066 -NCT04093323 -NCT04096183 -NCT04093362 -NCT04102150 -NCT04096534 -NCT04099225 -NCT04096560 -NCT04099147 -NCT04096638 -NCT04099251 -NCT04096690 -NCT04099277 -NCT04096703 -NCT04099342 -NCT04096716 -NCT04099381 -NCT04096794 -NCT04099420 -NCT04096807 -NCT04099563 -NCT04096820 -NCT04099589 -NCT04096833 -NCT04099602 -NCT04096898 -NCT04099615 -NCT04096911 -NCT04099641 -NCT04096924 -NCT04099784 -NCT04097002 -NCT04099797 -NCT04097028 -NCT04099836 -NCT04097067 -NCT04099862 -NCT04097158 -NCT04099888 -NCT04097171 -NCT04099901 -NCT04097197 -NCT04099914 -NCT04097223 -NCT04099966 -NCT04097249 -NCT04100018 -NCT04097262 -NCT04100044 -NCT04097301 -NCT04100057 -NCT04097353 -NCT04100070 -NCT04097366 -NCT04100109 -NCT04097444 -NCT04100174 -NCT04097470 -NCT04100187 -NCT04097613 -NCT04100291 -NCT04097639 -NCT04100330 -NCT04097756 -NCT04100577 -NCT04097769 -NCT04100655 -NCT04097886 -NCT04100707 -NCT04098055 -NCT04100733 -NCT04098068 -NCT04100759 -NCT04098081 -NCT04100811 -NCT04098094 -NCT04100967 -NCT04098185 -NCT04101292 -NCT04098237 -NCT04101331 -NCT04098250 -NCT04101357 -NCT04098406 -NCT04101409 -NCT04098432 -NCT04101435 -NCT04098458 -NCT04101513 -NCT04098471 -NCT04101539 -NCT04098640 -NCT04101578 -NCT04098653 -NCT04101656 -NCT04098666 -NCT04101760 -NCT04098705 -NCT04101812 -NCT04098718 -NCT04101851 -NCT04098744 -NCT04101890 -NCT04098783 -NCT04101929 -NCT04098796 -NCT04101981 -NCT04098809 -NCT04102020 -NCT04098887 -NCT04102046 -NCT04098926 -NCT04102098 -NCT04099017 -NCT04102124 -NCT04099134 -NCT04107454 -NCT04102228 -NCT04105062 -NCT04102254 -NCT04105010 -NCT04102358 -NCT04105075 -NCT04102371 -NCT04105270 -NCT04102397 -NCT04105283 -NCT04102423 -NCT04105335 -NCT04102436 -NCT04105348 -NCT04102553 -NCT04105374 -NCT04102605 -NCT04105413 -NCT04102618 -NCT04105465 -NCT04102657 -NCT04105478 -NCT04102722 -NCT04105530 -NCT04102930 -NCT04105543 -NCT04103021 -NCT04105569 -NCT04103099 -NCT04105582 -NCT04103112 -NCT04105647 -NCT04103372 -NCT04105894 -NCT04103398 -NCT04105920 -NCT04103450 -NCT04105985 -NCT04103463 -NCT04106024 -NCT04103502 -NCT04106076 -NCT04103515 -NCT04106115 -NCT04103528 -NCT04106219 -NCT04103554 -NCT04106232 -NCT04103567 -NCT04106245 -NCT04103619 -NCT04106284 -NCT04103645 -NCT04106323 -NCT04103658 -NCT04106362 -NCT04103684 -NCT04106375 -NCT04103697 -NCT04106414 -NCT04103762 -NCT04106453 -NCT04103853 -NCT04106492 -NCT04103905 -NCT04106505 -NCT04104074 -NCT04106518 -NCT04104113 -NCT04106609 -NCT04104139 -NCT04106661 -NCT04104334 -NCT04106700 -NCT04104347 -NCT04106726 -NCT04104373 -NCT04106778 -NCT04104386 -NCT04106817 -NCT04104412 -NCT04106843 -NCT04104464 -NCT04106856 -NCT04104529 -NCT04106973 -NCT04104542 -NCT04106986 -NCT04104607 -NCT04106999 -NCT04104633 -NCT04107077 -NCT04104672 -NCT04107103 -NCT04104685 -NCT04107116 -NCT04104724 -NCT04107142 -NCT04104776 -NCT04107155 -NCT04104789 -NCT04107181 -NCT04104815 -NCT04107207 -NCT04104893 -NCT04107233 -NCT04104945 -NCT04107324 -NCT04104984 -NCT04107350 -NCT04104997 -NCT04113018 -NCT04107480 -NCT04109885 -NCT04107623 -NCT04109807 -NCT04107636 -NCT04109924 -NCT04107649 -NCT04109937 -NCT04107727 -NCT04110015 -NCT04107896 -NCT04110041 -NCT04108013 -NCT04110054 -NCT04108026 -NCT04110093 -NCT04108117 -NCT04110145 -NCT04108182 -NCT04110184 -NCT04108195 -NCT04110210 -NCT04108208 -NCT04110249 -NCT04108247 -NCT04110275 -NCT04108260 -NCT04110301 -NCT04108325 -NCT04110405 -NCT04108377 -NCT04110483 -NCT04108481 -NCT04110756 -NCT04108494 -NCT04110769 -NCT04108559 -NCT04110782 -NCT04108572 -NCT04110834 -NCT04108598 -NCT04110847 -NCT04108624 -NCT04110860 -NCT04108676 -NCT04110912 -NCT04108754 -NCT04110925 -NCT04108780 -NCT04111081 -NCT04108819 -NCT04111107 -NCT04108832 -NCT04111172 -NCT04108858 -NCT04111250 -NCT04108871 -NCT04111302 -NCT04108897 -NCT04111315 -NCT04108988 -NCT04111341 -NCT04109027 -NCT04111380 -NCT04109040 -NCT04111445 -NCT04109066 -NCT04111458 -NCT04109079 -NCT04111497 -NCT04109092 -NCT04111510 -NCT04109131 -NCT04111588 -NCT04109209 -NCT04111705 -NCT04109274 -NCT04111783 -NCT04109326 -NCT04111822 -NCT04109378 -NCT04111835 -NCT04109391 -NCT04111913 -NCT04109456 -NCT04111978 -NCT04109482 -NCT04112238 -NCT04109495 -NCT04112342 -NCT04109521 -NCT04112381 -NCT04109547 -NCT04112498 -NCT04109573 -NCT04112511 -NCT04109612 -NCT04112589 -NCT04109664 -NCT04112667 -NCT04109677 -NCT04112771 -NCT04109690 -NCT04112901 -NCT04109703 -NCT04112940 -NCT04109729 -NCT04112966 -NCT04109755 -NCT04113005 -NCT04109781 -NCT04119297 -NCT04113070 -NCT04116437 -NCT04113096 -NCT04116411 -NCT04113122 -NCT04116502 -NCT04113187 -NCT04116541 -NCT04113226 -NCT04116645 -NCT04113265 -NCT04116658 -NCT04113369 -NCT04116671 -NCT04113499 -NCT04116710 -NCT04113525 -NCT04116723 -NCT04113603 -NCT04116775 -NCT04113616 -NCT04116801 -NCT04113785 -NCT04116827 -NCT04113811 -NCT04116905 -NCT04113837 -NCT04116970 -NCT04113863 -NCT04117061 -NCT04113902 -NCT04117087 -NCT04113967 -NCT04117139 -NCT04114123 -NCT04117321 -NCT04114136 -NCT04117555 -NCT04114305 -NCT04117594 -NCT04114370 -NCT04117607 -NCT04114422 -NCT04117620 -NCT04114448 -NCT04117698 -NCT04114604 -NCT04117841 -NCT04114617 -NCT04117945 -NCT04114630 -NCT04117958 -NCT04114786 -NCT04118036 -NCT04114825 -NCT04118062 -NCT04114851 -NCT04118114 -NCT04114981 -NCT04118140 -NCT04115007 -NCT04118166 -NCT04115059 -NCT04118218 -NCT04115111 -NCT04118244 -NCT04115163 -NCT04118361 -NCT04115254 -NCT04118426 -NCT04115306 -NCT04118582 -NCT04115527 -NCT04118595 -NCT04115618 -NCT04118634 -NCT04115631 -NCT04118647 -NCT04115735 -NCT04118725 -NCT04115761 -NCT04118842 -NCT04115826 -NCT04118855 -NCT04115878 -NCT04118868 -NCT04115956 -NCT04118881 -NCT04116021 -NCT04118920 -NCT04116047 -NCT04118933 -NCT04116073 -NCT04118998 -NCT04116086 -NCT04119011 -NCT04116125 -NCT04119024 -NCT04116138 -NCT04119037 -NCT04116151 -NCT04119115 -NCT04116164 -NCT04119141 -NCT04116203 -NCT04119154 -NCT04116281 -NCT04119206 -NCT04116320 -NCT04119284 -NCT04116359 -NCT04125563 -NCT04119336 -NCT04122443 -NCT04119349 -NCT04122404 -NCT04119453 -NCT04122456 -NCT04119622 -NCT04122469 -NCT04119635 -NCT04122625 -NCT04119674 -NCT04122716 -NCT04119830 -NCT04122807 -NCT04119869 -NCT04122820 -NCT04120025 -NCT04122911 -NCT04120103 -NCT04123145 -NCT04120116 -NCT04123262 -NCT04120129 -NCT04123301 -NCT04120168 -NCT04123340 -NCT04120246 -NCT04123366 -NCT04120298 -NCT04123379 -NCT04120324 -NCT04123392 -NCT04120350 -NCT04123418 -NCT04120363 -NCT04123470 -NCT04120454 -NCT04123483 -NCT04120519 -NCT04123509 -NCT04120584 -NCT04123535 -NCT04120649 -NCT04123574 -NCT04120701 -NCT04123626 -NCT04120805 -NCT04123704 -NCT04120896 -NCT04123925 -NCT04120974 -NCT04123990 -NCT04121039 -NCT04124094 -NCT04121052 -NCT04124107 -NCT04121117 -NCT04124172 -NCT04121130 -NCT04124198 -NCT04121169 -NCT04124237 -NCT04121260 -NCT04124497 -NCT04121273 -NCT04124510 -NCT04121286 -NCT04124549 -NCT04121325 -NCT04124588 -NCT04121338 -NCT04124601 -NCT04121390 -NCT04124640 -NCT04121442 -NCT04124666 -NCT04121455 -NCT04124679 -NCT04121507 -NCT04124692 -NCT04121572 -NCT04124705 -NCT04121624 -NCT04124731 -NCT04121637 -NCT04124796 -NCT04121676 -NCT04124874 -NCT04121819 -NCT04124991 -NCT04121897 -NCT04125004 -NCT04121936 -NCT04125043 -NCT04121975 -NCT04125134 -NCT04121988 -NCT04125277 -NCT04122105 -NCT04125316 -NCT04122118 -NCT04125342 -NCT04122170 -NCT04125446 -NCT04122183 -NCT04125459 -NCT04122235 -NCT04125498 -NCT04122339 -NCT04125550 -NCT04122352 -NCT04131166 -NCT04125628 -NCT04128306 -NCT04125641 -NCT04128267 -NCT04125693 -NCT04128332 -NCT04125719 -NCT04128358 -NCT04125836 -NCT04128423 -NCT04125849 -NCT04128501 -NCT04125875 -NCT04128618 -NCT04125914 -NCT04128631 -NCT04125953 -NCT04128696 -NCT04125979 -NCT04128709 -NCT04126005 -NCT04128748 -NCT04126018 -NCT04128800 -NCT04126057 -NCT04129099 -NCT04126070 -NCT04129125 -NCT04126200 -NCT04129151 -NCT04126213 -NCT04129216 -NCT04126226 -NCT04129255 -NCT04126304 -NCT04129281 -NCT04126408 -NCT04129294 -NCT04126460 -NCT04129320 -NCT04126473 -NCT04129346 -NCT04126525 -NCT04129385 -NCT04126551 -NCT04129411 -NCT04126590 -NCT04129424 -NCT04126616 -NCT04129437 -NCT04126655 -NCT04129450 -NCT04126668 -NCT04129502 -NCT04126681 -NCT04129515 -NCT04126707 -NCT04129554 -NCT04126720 -NCT04129606 -NCT04126733 -NCT04129645 -NCT04126811 -NCT04129697 -NCT04126824 -NCT04129710 -NCT04126876 -NCT04129775 -NCT04126902 -NCT04129788 -NCT04126993 -NCT04129853 -NCT04127019 -NCT04129931 -NCT04127110 -NCT04129996 -NCT04127149 -NCT04130074 -NCT04127214 -NCT04130152 -NCT04127227 -NCT04130204 -NCT04127279 -NCT04130243 -NCT04127318 -NCT04130399 -NCT04127396 -NCT04130425 -NCT04127617 -NCT04130516 -NCT04127721 -NCT04130542 -NCT04127760 -NCT04130750 -NCT04127838 -NCT04130763 -NCT04127929 -NCT04130776 -NCT04127981 -NCT04130828 -NCT04127994 -NCT04130854 -NCT04128020 -NCT04130867 -NCT04128033 -NCT04130919 -NCT04128072 -NCT04131036 -NCT04128085 -NCT04131153 -NCT04128163 -NCT04137068 -NCT04131192 -NCT04134247 -NCT04131205 -NCT04134221 -NCT04131231 -NCT04134260 -NCT04131270 -NCT04134312 -NCT04131413 -NCT04134325 -NCT04131426 -NCT04134390 -NCT04131491 -NCT04134455 -NCT04131543 -NCT04134468 -NCT04131621 -NCT04134559 -NCT04131634 -NCT04134598 -NCT04131660 -NCT04134715 -NCT04131764 -NCT04134741 -NCT04131803 -NCT04134819 -NCT04131920 -NCT04134884 -NCT04131933 -NCT04134897 -NCT04131946 -NCT04134936 -NCT04131985 -NCT04135118 -NCT04131998 -NCT04135261 -NCT04132063 -NCT04135313 -NCT04132102 -NCT04135326 -NCT04132154 -NCT04135352 -NCT04132167 -NCT04135456 -NCT04132193 -NCT04135508 -NCT04132219 -NCT04135573 -NCT04132323 -NCT04135664 -NCT04132349 -NCT04135690 -NCT04132362 -NCT04135755 -NCT04132375 -NCT04135768 -NCT04132505 -NCT04135781 -NCT04132661 -NCT04135807 -NCT04132739 -NCT04135820 -NCT04132778 -NCT04135833 -NCT04132817 -NCT04135872 -NCT04132843 -NCT04136093 -NCT04132856 -NCT04136132 -NCT04132960 -NCT04136249 -NCT04133077 -NCT04136275 -NCT04133142 -NCT04136340 -NCT04133220 -NCT04136353 -NCT04133324 -NCT04136418 -NCT04133337 -NCT04136431 -NCT04133415 -NCT04136496 -NCT04133441 -NCT04136522 -NCT04133610 -NCT04136548 -NCT04133636 -NCT04136587 -NCT04133662 -NCT04136600 -NCT04133766 -NCT04136665 -NCT04133870 -NCT04136717 -NCT04133883 -NCT04136756 -NCT04133948 -NCT04136769 -NCT04134000 -NCT04136782 -NCT04134065 -NCT04136847 -NCT04134117 -NCT04136860 -NCT04134130 -NCT04136886 -NCT04134182 -NCT04136912 -NCT04134208 -NCT04142645 -NCT04137107 -NCT04139772 -NCT04137185 -NCT04139577 -NCT04137237 -NCT04139902 -NCT04137289 -NCT04139941 -NCT04137302 -NCT04139967 -NCT04137406 -NCT04139980 -NCT04137510 -NCT04139993 -NCT04137536 -NCT04140019 -NCT04137575 -NCT04140097 -NCT04137627 -NCT04140162 -NCT04137640 -NCT04140214 -NCT04137653 -NCT04140292 -NCT04137679 -NCT04140318 -NCT04137744 -NCT04140409 -NCT04137809 -NCT04140474 -NCT04137900 -NCT04140487 -NCT04137926 -NCT04140500 -NCT04138030 -NCT04140513 -NCT04138069 -NCT04140526 -NCT04138095 -NCT04140591 -NCT04138186 -NCT04140617 -NCT04138212 -NCT04140825 -NCT04138316 -NCT04140890 -NCT04138329 -NCT04140916 -NCT04138342 -NCT04141150 -NCT04138368 -NCT04141163 -NCT04138381 -NCT04141176 -NCT04138602 -NCT04141215 -NCT04138615 -NCT04141254 -NCT04138628 -NCT04141319 -NCT04138654 -NCT04141449 -NCT04138706 -NCT04141462 -NCT04138719 -NCT04141488 -NCT04138784 -NCT04141644 -NCT04138823 -NCT04141696 -NCT04138875 -NCT04141709 -NCT04138901 -NCT04141774 -NCT04138914 -NCT04141787 -NCT04139018 -NCT04141891 -NCT04139057 -NCT04141917 -NCT04139070 -NCT04141943 -NCT04139096 -NCT04141969 -NCT04139122 -NCT04141995 -NCT04139135 -NCT04142060 -NCT04139148 -NCT04142099 -NCT04139187 -NCT04142151 -NCT04139226 -NCT04142177 -NCT04139304 -NCT04142229 -NCT04139317 -NCT04142424 -NCT04139330 -NCT04142476 -NCT04139395 -NCT04142489 -NCT04139408 -NCT04142515 -NCT04139434 -NCT04142554 -NCT04139460 -NCT04142619 -NCT04139551 -NCT04142632 -NCT04139564 -NCT04148196 -NCT04142710 -NCT04145427 -NCT04142814 -NCT04145388 -NCT04142892 -NCT04145440 -NCT04142931 -NCT04145518 -NCT04142957 -NCT04145531 -NCT04143191 -NCT04145570 -NCT04143230 -NCT04145622 -NCT04143282 -NCT04145635 -NCT04143295 -NCT04145661 -NCT04143360 -NCT04145700 -NCT04143386 -NCT04145739 -NCT04143399 -NCT04145752 -NCT04143477 -NCT04145804 -NCT04143516 -NCT04145843 -NCT04143607 -NCT04145895 -NCT04143659 -NCT04146012 -NCT04143711 -NCT04146038 -NCT04143724 -NCT04146051 -NCT04143750 -NCT04146103 -NCT04143776 -NCT04146181 -NCT04143789 -NCT04146194 -NCT04143802 -NCT04146272 -NCT04143893 -NCT04146298 -NCT04143906 -NCT04146376 -NCT04143932 -NCT04146402 -NCT04143984 -NCT04146441 -NCT04144023 -NCT04146597 -NCT04144127 -NCT04146610 -NCT04144140 -NCT04146649 -NCT04144179 -NCT04146779 -NCT04144231 -NCT04146831 -NCT04144283 -NCT04146961 -NCT04144296 -NCT04147078 -NCT04144309 -NCT04147117 -NCT04144374 -NCT04147182 -NCT04144387 -NCT04147234 -NCT04144491 -NCT04147247 -NCT04144517 -NCT04147299 -NCT04144530 -NCT04147312 -NCT04144569 -NCT04147429 -NCT04144582 -NCT04147442 -NCT04144608 -NCT04147481 -NCT04144686 -NCT04147494 -NCT04144699 -NCT04147507 -NCT04144725 -NCT04147533 -NCT04144842 -NCT04147637 -NCT04144855 -NCT04147676 -NCT04144907 -NCT04147741 -NCT04145011 -NCT04147767 -NCT04145024 -NCT04147793 -NCT04145115 -NCT04147806 -NCT04145180 -NCT04147819 -NCT04145193 -NCT04147884 -NCT04145297 -NCT04148066 -NCT04145323 -NCT04148144 -NCT04145349 -NCT04152863 -NCT04148222 -NCT04150731 -NCT04148248 -NCT04150705 -NCT04148430 -NCT04150744 -NCT04148534 -NCT04150757 -NCT04148586 -NCT04150822 -NCT04148612 -NCT04150848 -NCT04148625 -NCT04150861 -NCT04148651 -NCT04150874 -NCT04148742 -NCT04150887 -NCT04148768 -NCT04150900 -NCT04148781 -NCT04150913 -NCT04148807 -NCT04150939 -NCT04148885 -NCT04150965 -NCT04148898 -NCT04150991 -NCT04148911 -NCT04151030 -NCT04148937 -NCT04151082 -NCT04148963 -NCT04151147 -NCT04149015 -NCT04151173 -NCT04149054 -NCT04151186 -NCT04149093 -NCT04151212 -NCT04149145 -NCT04151238 -NCT04149197 -NCT04151277 -NCT04149223 -NCT04151329 -NCT04149275 -NCT04151342 -NCT04149314 -NCT04151355 -NCT04149353 -NCT04151368 -NCT04149431 -NCT04151446 -NCT04149444 -NCT04151550 -NCT04149496 -NCT04151563 -NCT04149522 -NCT04151615 -NCT04149535 -NCT04151667 -NCT04149574 -NCT04151706 -NCT04149600 -NCT04151719 -NCT04149626 -NCT04151732 -NCT04149652 -NCT04151810 -NCT04149691 -NCT04151836 -NCT04149704 -NCT04151940 -NCT04149821 -NCT04152018 -NCT04149834 -NCT04152044 -NCT04149847 -NCT04152057 -NCT04150029 -NCT04152096 -NCT04150042 -NCT04152109 -NCT04150120 -NCT04152148 -NCT04150198 -NCT04152226 -NCT04150211 -NCT04152265 -NCT04150250 -NCT04152343 -NCT04150289 -NCT04152356 -NCT04150315 -NCT04152499 -NCT04150445 -NCT04152564 -NCT04150484 -NCT04152577 -NCT04150497 -NCT04152590 -NCT04150562 -NCT04152655 -NCT04150575 -NCT04152720 -NCT04150640 -NCT04152759 -NCT04150679 -NCT04152798 -NCT04150692 -NCT04158362 -NCT04152889 -NCT04155749 -NCT04152902 -NCT04155710 -NCT04152928 -NCT04155801 -NCT04153019 -NCT04155814 -NCT04153058 -NCT04155840 -NCT04153110 -NCT04155853 -NCT04153175 -NCT04155918 -NCT04153214 -NCT04155944 -NCT04153409 -NCT04155970 -NCT04153513 -NCT04156087 -NCT04153552 -NCT04156100 -NCT04153565 -NCT04156178 -NCT04153578 -NCT04156243 -NCT04153669 -NCT04156256 -NCT04153682 -NCT04156269 -NCT04153708 -NCT04156295 -NCT04153721 -NCT04156347 -NCT04153734 -NCT04156399 -NCT04153799 -NCT04156464 -NCT04154098 -NCT04156555 -NCT04154124 -NCT04156633 -NCT04154137 -NCT04156659 -NCT04154189 -NCT04156698 -NCT04154228 -NCT04156711 -NCT04154241 -NCT04156828 -NCT04154280 -NCT04156958 -NCT04154306 -NCT04156984 -NCT04154319 -NCT04156997 -NCT04154358 -NCT04157088 -NCT04154371 -NCT04157127 -NCT04154410 -NCT04157140 -NCT04154436 -NCT04157166 -NCT04154475 -NCT04157283 -NCT04154579 -NCT04157309 -NCT04154644 -NCT04157374 -NCT04154709 -NCT04157478 -NCT04154722 -NCT04157491 -NCT04154839 -NCT04157517 -NCT04154891 -NCT04157530 -NCT04154943 -NCT04157621 -NCT04154956 -NCT04157660 -NCT04155008 -NCT04157712 -NCT04155034 -NCT04157738 -NCT04155099 -NCT04157764 -NCT04155190 -NCT04157842 -NCT04155203 -NCT04157855 -NCT04155242 -NCT04157920 -NCT04155294 -NCT04157946 -NCT04155307 -NCT04157985 -NCT04155359 -NCT04158141 -NCT04155398 -NCT04158193 -NCT04155411 -NCT04158245 -NCT04155541 -NCT04158297 -NCT04155580 -NCT04158336 -NCT04155645 -NCT04158349 -NCT04155671 -NCT04163302 -NCT04158414 -NCT04161092 -NCT04158440 -NCT04161079 -NCT04158505 -NCT04161118 -NCT04158518 -NCT04161157 -NCT04158531 -NCT04161183 -NCT04158557 -NCT04161196 -NCT04158583 -NCT04161222 -NCT04158635 -NCT04161248 -NCT04158648 -NCT04161339 -NCT04158661 -NCT04161365 -NCT04158700 -NCT04161391 -NCT04158726 -NCT04161417 -NCT04158739 -NCT04161482 -NCT04158817 -NCT04161495 -NCT04158830 -NCT04161521 -NCT04158843 -NCT04161664 -NCT04158856 -NCT04161742 -NCT04158947 -NCT04161755 -NCT04158986 -NCT04161794 -NCT04159025 -NCT04161833 -NCT04159051 -NCT04161872 -NCT04159077 -NCT04161885 -NCT04159090 -NCT04162015 -NCT04159142 -NCT04162067 -NCT04159155 -NCT04162093 -NCT04159363 -NCT04162119 -NCT04159376 -NCT04162158 -NCT04159571 -NCT04162171 -NCT04159649 -NCT04162210 -NCT04159792 -NCT04162223 -NCT04159805 -NCT04162301 -NCT04159818 -NCT04162327 -NCT04159831 -NCT04162340 -NCT04159844 -NCT04162353 -NCT04159857 -NCT04162379 -NCT04159870 -NCT04162405 -NCT04159896 -NCT04162535 -NCT04159974 -NCT04162587 -NCT04160052 -NCT04162665 -NCT04160065 -NCT04162704 -NCT04160130 -NCT04162717 -NCT04160143 -NCT04162821 -NCT04160156 -NCT04162834 -NCT04160182 -NCT04162860 -NCT04160195 -NCT04162873 -NCT04160416 -NCT04162925 -NCT04160442 -NCT04162938 -NCT04160494 -NCT04163042 -NCT04160546 -NCT04163094 -NCT04160559 -NCT04163107 -NCT04160585 -NCT04163133 -NCT04160598 -NCT04163146 -NCT04160650 -NCT04163159 -NCT04160715 -NCT04163237 -NCT04160975 -NCT04163289 -NCT04161014 -NCT04169022 -NCT04163315 -NCT04166032 -NCT04163354 -NCT04166006 -NCT04163380 -NCT04166058 -NCT04163432 -NCT04166097 -NCT04163536 -NCT04166214 -NCT04163575 -NCT04166240 -NCT04163653 -NCT04166253 -NCT04163692 -NCT04166279 -NCT04163718 -NCT04166318 -NCT04163861 -NCT04166344 -NCT04163887 -NCT04166383 -NCT04163900 -NCT04166409 -NCT04163952 -NCT04166435 -NCT04164017 -NCT04166461 -NCT04164056 -NCT04166487 -NCT04164069 -NCT04166565 -NCT04164082 -NCT04166604 -NCT04164095 -NCT04166721 -NCT04164147 -NCT04166734 -NCT04164186 -NCT04166799 -NCT04164238 -NCT04166812 -NCT04164251 -NCT04166838 -NCT04164290 -NCT04166877 -NCT04164368 -NCT04166929 -NCT04164615 -NCT04167007 -NCT04164732 -NCT04167085 -NCT04164745 -NCT04167137 -NCT04164797 -NCT04167163 -NCT04164836 -NCT04167293 -NCT04164862 -NCT04167436 -NCT04164875 -NCT04167566 -NCT04164888 -NCT04167618 -NCT04164901 -NCT04167631 -NCT04164979 -NCT04167657 -NCT04164992 -NCT04167696 -NCT04165031 -NCT04167774 -NCT04165070 -NCT04167917 -NCT04165083 -NCT04167969 -NCT04165096 -NCT04168138 -NCT04165109 -NCT04168242 -NCT04165174 -NCT04168281 -NCT04165187 -NCT04168320 -NCT04165200 -NCT04168346 -NCT04165278 -NCT04168359 -NCT04165317 -NCT04168411 -NCT04165330 -NCT04168502 -NCT04165395 -NCT04168528 -NCT04165460 -NCT04168541 -NCT04165512 -NCT04168788 -NCT04165590 -NCT04168801 -NCT04165603 -NCT04168866 -NCT04165772 -NCT04168892 -NCT04165785 -NCT04168931 -NCT04165941 -NCT04168944 -NCT04165967 -NCT04168957 -NCT04165993 -NCT04175184 -NCT04169035 -NCT04172454 -NCT04169074 -NCT04172402 -NCT04169113 -NCT04172506 -NCT04169152 -NCT04172532 -NCT04169178 -NCT04172571 -NCT04169321 -NCT04172597 -NCT04169334 -NCT04172649 -NCT04169347 -NCT04172675 -NCT04169399 -NCT04172701 -NCT04169529 -NCT04172714 -NCT04169555 -NCT04172753 -NCT04169672 -NCT04172805 -NCT04169698 -NCT04172818 -NCT04169711 -NCT04172844 -NCT04169737 -NCT04173013 -NCT04169763 -NCT04173052 -NCT04169932 -NCT04173234 -NCT04169984 -NCT04173247 -NCT04169997 -NCT04173286 -NCT04170062 -NCT04173325 -NCT04170075 -NCT04173338 -NCT04170101 -NCT04173455 -NCT04170153 -NCT04173507 -NCT04170179 -NCT04173533 -NCT04170244 -NCT04173546 -NCT04170257 -NCT04173559 -NCT04170309 -NCT04173585 -NCT04170465 -NCT04173624 -NCT04170478 -NCT04173676 -NCT04170504 -NCT04173689 -NCT04170530 -NCT04173780 -NCT04170556 -NCT04173897 -NCT04170595 -NCT04173923 -NCT04170803 -NCT04174079 -NCT04170920 -NCT04174157 -NCT04170946 -NCT04174183 -NCT04170959 -NCT04174196 -NCT04171102 -NCT04174248 -NCT04171141 -NCT04174326 -NCT04171219 -NCT04174339 -NCT04171284 -NCT04174352 -NCT04171505 -NCT04174391 -NCT04171609 -NCT04174430 -NCT04171622 -NCT04174482 -NCT04171700 -NCT04174521 -NCT04171726 -NCT04174599 -NCT04171791 -NCT04174612 -NCT04171843 -NCT04174716 -NCT04171908 -NCT04174729 -NCT04171934 -NCT04174781 -NCT04171986 -NCT04174911 -NCT04172025 -NCT04174950 -NCT04172220 -NCT04175145 -NCT04172259 -NCT04175158 -NCT04172272 -NCT04175171 -NCT04172350 -NCT04181450 -NCT04175197 -NCT04178044 -NCT04175210 -NCT04178005 -NCT04175301 -NCT04178057 -NCT04175431 -NCT04178174 -NCT04175444 -NCT04178226 -NCT04175470 -NCT04178252 -NCT04175587 -NCT04178265 -NCT04175639 -NCT04178330 -NCT04175678 -NCT04178343 -NCT04175691 -NCT04178460 -NCT04175730 -NCT04178642 -NCT04175769 -NCT04178759 -NCT04175847 -NCT04178772 -NCT04175899 -NCT04178798 -NCT04175912 -NCT04178811 -NCT04175964 -NCT04178902 -NCT04176016 -NCT04178915 -NCT04176029 -NCT04178928 -NCT04176081 -NCT04178954 -NCT04176211 -NCT04178980 -NCT04176237 -NCT04179032 -NCT04176250 -NCT04179045 -NCT04176302 -NCT04179084 -NCT04176354 -NCT04179110 -NCT04176380 -NCT04179162 -NCT04176393 -NCT04179370 -NCT04176497 -NCT04179396 -NCT04176549 -NCT04179409 -NCT04176575 -NCT04179461 -NCT04176614 -NCT04179578 -NCT04176692 -NCT04179656 -NCT04176718 -NCT04179864 -NCT04176757 -NCT04179890 -NCT04176809 -NCT04179929 -NCT04176848 -NCT04179942 -NCT04176861 -NCT04179968 -NCT04176900 -NCT04180007 -NCT04176913 -NCT04180033 -NCT04176952 -NCT04180072 -NCT04176978 -NCT04180176 -NCT04177004 -NCT04180215 -NCT04177056 -NCT04180241 -NCT04177108 -NCT04180371 -NCT04177290 -NCT04180384 -NCT04177368 -NCT04180475 -NCT04177407 -NCT04180501 -NCT04177420 -NCT04180579 -NCT04177602 -NCT04180592 -NCT04177615 -NCT04180748 -NCT04177628 -NCT04180761 -NCT04177797 -NCT04180774 -NCT04177810 -NCT04180995 -NCT04177823 -NCT04181060 -NCT04177875 -NCT04181203 -NCT04177940 -NCT04181372 -NCT04177953 -NCT04187495 -NCT04181463 -NCT04184726 -NCT04181489 -NCT04184713 -NCT04181645 -NCT04184817 -NCT04181684 -NCT04184869 -NCT04181788 -NCT04184882 -NCT04181827 -NCT04184921 -NCT04181866 -NCT04185038 -NCT04181905 -NCT04185116 -NCT04181918 -NCT04185220 -NCT04181931 -NCT04185272 -NCT04181944 -NCT04185311 -NCT04182009 -NCT04185337 -NCT04182152 -NCT04185350 -NCT04182204 -NCT04185389 -NCT04182347 -NCT04185428 -NCT04182516 -NCT04185454 -NCT04182555 -NCT04185467 -NCT04182568 -NCT04185545 -NCT04182581 -NCT04185610 -NCT04182594 -NCT04185649 -NCT04182659 -NCT04185701 -NCT04182685 -NCT04185766 -NCT04182698 -NCT04185831 -NCT04182724 -NCT04185870 -NCT04182789 -NCT04185883 -NCT04182867 -NCT04185922 -NCT04182893 -NCT04185974 -NCT04182906 -NCT04186013 -NCT04182945 -NCT04186052 -NCT04182984 -NCT04186078 -NCT04182997 -NCT04186104 -NCT04183036 -NCT04186117 -NCT04183049 -NCT04186143 -NCT04183062 -NCT04186156 -NCT04183088 -NCT04186234 -NCT04183101 -NCT04186286 -NCT04183166 -NCT04186520 -NCT04183192 -NCT04186559 -NCT04183361 -NCT04186585 -NCT04183478 -NCT04186637 -NCT04183491 -NCT04186754 -NCT04183673 -NCT04186780 -NCT04183699 -NCT04186806 -NCT04183712 -NCT04186819 -NCT04183764 -NCT04186832 -NCT04183777 -NCT04186845 -NCT04184011 -NCT04186923 -NCT04184050 -NCT04186988 -NCT04184154 -NCT04187066 -NCT04184232 -NCT04187079 -NCT04184414 -NCT04187105 -NCT04184518 -NCT04187287 -NCT04184531 -NCT04187352 -NCT04184557 -NCT04187404 -NCT04184622 -NCT04187456 -NCT04184661 -NCT04192929 -NCT04187547 -NCT04190381 -NCT04187703 -NCT04190342 -NCT04187716 -NCT04190407 -NCT04187755 -NCT04190433 -NCT04187781 -NCT04190446 -NCT04187833 -NCT04190472 -NCT04187872 -NCT04190550 -NCT04187898 -NCT04190589 -NCT04187937 -NCT04190628 -NCT04188119 -NCT04190641 -NCT04188145 -NCT04190745 -NCT04188158 -NCT04190758 -NCT04188184 -NCT04190823 -NCT04188392 -NCT04190849 -NCT04188405 -NCT04190992 -NCT04188418 -NCT04191018 -NCT04188522 -NCT04191031 -NCT04188535 -NCT04191057 -NCT04188548 -NCT04191096 -NCT04188574 -NCT04191135 -NCT04188587 -NCT04191187 -NCT04188600 -NCT04191317 -NCT04188639 -NCT04191343 -NCT04188665 -NCT04191369 -NCT04188678 -NCT04191382 -NCT04188847 -NCT04191421 -NCT04188860 -NCT04191460 -NCT04188951 -NCT04191499 -NCT04188990 -NCT04191603 -NCT04189055 -NCT04191616 -NCT04189094 -NCT04191759 -NCT04189107 -NCT04191837 -NCT04189133 -NCT04191889 -NCT04189198 -NCT04191928 -NCT04189211 -NCT04191941 -NCT04189237 -NCT04191967 -NCT04189263 -NCT04192071 -NCT04189419 -NCT04192253 -NCT04189445 -NCT04192279 -NCT04189471 -NCT04192331 -NCT04189484 -NCT04192344 -NCT04189497 -NCT04192396 -NCT04189601 -NCT04192474 -NCT04189614 -NCT04192487 -NCT04189705 -NCT04192500 -NCT04189757 -NCT04192539 -NCT04189783 -NCT04192565 -NCT04189822 -NCT04192643 -NCT04189874 -NCT04192682 -NCT04189900 -NCT04192695 -NCT04189926 -NCT04192708 -NCT04189952 -NCT04192773 -NCT04190043 -NCT04192812 -NCT04190056 -NCT04192890 -NCT04190121 -NCT04192903 -NCT04190316 -NCT04197856 -NCT04192981 -NCT04195399 -NCT04193007 -NCT04195373 -NCT04193059 -NCT04195412 -NCT04193085 -NCT04195438 -NCT04193098 -NCT04195503 -NCT04193150 -NCT04195555 -NCT04193202 -NCT04195633 -NCT04193280 -NCT04195646 -NCT04193293 -NCT04195685 -NCT04193319 -NCT04195724 -NCT04193358 -NCT04195750 -NCT04193475 -NCT04195828 -NCT04193553 -NCT04195945 -NCT04193579 -NCT04195971 -NCT04193592 -NCT04195984 -NCT04193644 -NCT04196010 -NCT04193696 -NCT04196062 -NCT04193722 -NCT04196075 -NCT04193813 -NCT04196088 -NCT04193878 -NCT04196101 -NCT04193891 -NCT04196153 -NCT04193904 -NCT04196205 -NCT04193956 -NCT04196244 -NCT04193969 -NCT04196257 -NCT04193995 -NCT04196283 -NCT04194008 -NCT04196387 -NCT04194034 -NCT04196413 -NCT04194073 -NCT04196465 -NCT04194086 -NCT04196491 -NCT04194112 -NCT04196504 -NCT04194125 -NCT04196530 -NCT04194164 -NCT04196803 -NCT04194203 -NCT04196933 -NCT04194242 -NCT04196972 -NCT04194268 -NCT04196985 -NCT04194333 -NCT04197011 -NCT04194359 -NCT04197089 -NCT04194372 -NCT04197141 -NCT04194385 -NCT04197219 -NCT04194463 -NCT04197245 -NCT04194528 -NCT04197284 -NCT04194541 -NCT04197297 -NCT04194554 -NCT04197310 -NCT04194632 -NCT04197336 -NCT04194658 -NCT04197349 -NCT04194684 -NCT04197492 -NCT04194723 -NCT04197674 -NCT04194775 -NCT04197687 -NCT04194801 -NCT04197713 -NCT04194840 -NCT04197726 -NCT04194931 -NCT04197739 -NCT04194944 -NCT04197778 -NCT04194957 -NCT04197791 -NCT04195100 -NCT04197817 -NCT04195139 -NCT04197843 -NCT04195217 -NCT04204577 -NCT04197882 -NCT04201431 -NCT04197908 -NCT04201249 -NCT04197934 -NCT04201444 -NCT04197947 -NCT04201457 -NCT04197960 -NCT04201561 -NCT04197986 -NCT04201626 -NCT04197999 -NCT04201717 -NCT04198051 -NCT04201730 -NCT04198064 -NCT04201743 -NCT04198090 -NCT04201756 -NCT04198103 -NCT04201873 -NCT04198246 -NCT04201925 -NCT04198259 -NCT04201990 -NCT04198324 -NCT04202003 -NCT04198454 -NCT04202016 -NCT04198727 -NCT04202094 -NCT04198753 -NCT04202159 -NCT04198766 -NCT04202185 -NCT04198818 -NCT04202484 -NCT04198922 -NCT04202523 -NCT04199026 -NCT04202601 -NCT04199104 -NCT04202627 -NCT04199195 -NCT04202640 -NCT04199260 -NCT04202705 -NCT04199338 -NCT04202744 -NCT04199390 -NCT04202796 -NCT04199468 -NCT04202835 -NCT04199520 -NCT04202874 -NCT04199546 -NCT04202965 -NCT04199559 -NCT04202978 -NCT04199637 -NCT04203160 -NCT04199754 -NCT04203199 -NCT04199988 -NCT04203316 -NCT04200014 -NCT04203342 -NCT04200040 -NCT04203394 -NCT04200066 -NCT04203472 -NCT04200079 -NCT04203485 -NCT04200105 -NCT04203511 -NCT04200287 -NCT04203524 -NCT04200378 -NCT04203589 -NCT04200404 -NCT04203641 -NCT04200417 -NCT04203719 -NCT04200443 -NCT04203875 -NCT04200482 -NCT04203901 -NCT04200495 -NCT04203940 -NCT04200534 -NCT04203953 -NCT04200586 -NCT04204044 -NCT04200729 -NCT04204057 -NCT04200768 -NCT04204083 -NCT04200781 -NCT04204096 -NCT04200963 -NCT04204161 -NCT04201002 -NCT04204226 -NCT04201132 -NCT04204421 -NCT04201145 -NCT04204473 -NCT04201210 -NCT04204512 -NCT04201223 -NCT04209842 -NCT04204668 -NCT04207190 -NCT04204720 -NCT04207112 -NCT04204733 -NCT04207242 -NCT04204837 -NCT04207255 -NCT04204850 -NCT04207268 -NCT04204876 -NCT04207359 -NCT04204928 -NCT04207437 -NCT04204941 -NCT04207463 -NCT04205071 -NCT04207554 -NCT04205097 -NCT04207593 -NCT04205175 -NCT04207632 -NCT04205188 -NCT04207645 -NCT04205227 -NCT04207736 -NCT04205240 -NCT04207827 -NCT04205266 -NCT04207918 -NCT04205279 -NCT04207944 -NCT04205331 -NCT04208061 -NCT04205357 -NCT04208074 -NCT04205396 -NCT04208178 -NCT04205409 -NCT04208243 -NCT04205474 -NCT04208334 -NCT04205578 -NCT04208347 -NCT04205630 -NCT04208360 -NCT04205747 -NCT04208464 -NCT04205786 -NCT04208490 -NCT04205799 -NCT04208529 -NCT04205812 -NCT04208568 -NCT04205838 -NCT04208620 -NCT04205851 -NCT04208633 -NCT04205864 -NCT04208685 -NCT04205903 -NCT04208724 -NCT04205955 -NCT04208932 -NCT04205968 -NCT04208958 -NCT04206007 -NCT04208997 -NCT04206020 -NCT04209023 -NCT04206072 -NCT04209036 -NCT04206098 -NCT04209088 -NCT04206137 -NCT04209114 -NCT04206176 -NCT04209127 -NCT04206228 -NCT04209166 -NCT04206254 -NCT04209179 -NCT04206280 -NCT04209192 -NCT04206319 -NCT04209218 -NCT04206332 -NCT04209244 -NCT04206345 -NCT04209335 -NCT04206358 -NCT04209465 -NCT04206410 -NCT04209595 -NCT04206423 -NCT04209621 -NCT04206605 -NCT04209634 -NCT04206722 -NCT04209660 -NCT04206787 -NCT04209686 -NCT04206826 -NCT04209712 -NCT04206943 -NCT04209725 -NCT04206969 -NCT04209738 -NCT04207021 -NCT04209790 -NCT04207086 -NCT04214990 -NCT04209855 -NCT04212637 -NCT04209868 -NCT04212624 -NCT04209933 -NCT04212702 -NCT04209946 -NCT04212715 -NCT04210037 -NCT04212780 -NCT04210063 -NCT04212793 -NCT04210089 -NCT04212858 -NCT04210115 -NCT04212962 -NCT04210141 -NCT04213092 -NCT04210219 -NCT04213105 -NCT04210297 -NCT04213118 -NCT04210336 -NCT04213170 -NCT04210492 -NCT04213183 -NCT04210518 -NCT04213209 -NCT04210596 -NCT04213235 -NCT04210674 -NCT04213287 -NCT04210726 -NCT04213352 -NCT04210778 -NCT04213365 -NCT04210791 -NCT04213404 -NCT04210882 -NCT04213443 -NCT04211012 -NCT04213469 -NCT04211051 -NCT04213534 -NCT04211090 -NCT04213729 -NCT04211142 -NCT04213794 -NCT04211168 -NCT04213898 -NCT04211207 -NCT04213937 -NCT04211233 -NCT04214067 -NCT04211259 -NCT04214080 -NCT04211272 -NCT04214093 -NCT04211337 -NCT04214119 -NCT04211454 -NCT04214197 -NCT04211571 -NCT04214210 -NCT04211649 -NCT04214249 -NCT04211675 -NCT04214262 -NCT04211701 -NCT04214288 -NCT04211740 -NCT04214340 -NCT04211766 -NCT04214353 -NCT04211805 -NCT04214366 -NCT04211896 -NCT04214392 -NCT04211922 -NCT04214418 -NCT04211948 -NCT04214444 -NCT04211974 -NCT04214509 -NCT04212013 -NCT04214522 -NCT04212026 -NCT04214561 -NCT04212052 -NCT04214626 -NCT04212195 -NCT04214639 -NCT04212221 -NCT04214665 -NCT04212273 -NCT04214691 -NCT04212286 -NCT04214717 -NCT04212377 -NCT04214730 -NCT04212403 -NCT04214756 -NCT04212455 -NCT04214782 -NCT04212507 -NCT04214860 -NCT04212546 -NCT04214886 -NCT04212572 -NCT04214912 -NCT04212598 -NCT04220866 -NCT04215003 -NCT04217941 -NCT04215029 -NCT04217902 -NCT04215146 -NCT04217954 -NCT04215159 -NCT04217967 -NCT04215354 -NCT04218019 -NCT04215367 -NCT04218045 -NCT04215380 -NCT04218110 -NCT04215458 -NCT04218149 -NCT04215471 -NCT04218175 -NCT04215497 -NCT04218253 -NCT04215510 -NCT04218305 -NCT04215601 -NCT04218409 -NCT04215731 -NCT04218526 -NCT04215744 -NCT04218539 -NCT04215757 -NCT04218617 -NCT04215783 -NCT04218682 -NCT04215809 -NCT04218721 -NCT04215978 -NCT04218825 -NCT04216134 -NCT04218877 -NCT04216251 -NCT04218942 -NCT04216290 -NCT04219007 -NCT04216316 -NCT04219046 -NCT04216329 -NCT04219163 -NCT04216355 -NCT04219202 -NCT04216472 -NCT04219254 -NCT04216524 -NCT04219267 -NCT04216563 -NCT04219306 -NCT04216576 -NCT04219319 -NCT04216641 -NCT04219332 -NCT04216758 -NCT04219423 -NCT04216953 -NCT04219488 -NCT04216979 -NCT04219644 -NCT04216992 -NCT04219748 -NCT04217057 -NCT04219813 -NCT04217096 -NCT04219826 -NCT04217109 -NCT04219904 -NCT04217135 -NCT04219969 -NCT04217187 -NCT04220008 -NCT04217200 -NCT04220086 -NCT04217239 -NCT04220138 -NCT04217278 -NCT04220216 -NCT04217317 -NCT04220229 -NCT04217356 -NCT04220268 -NCT04217447 -NCT04220307 -NCT04217460 -NCT04220398 -NCT04217473 -NCT04220476 -NCT04217577 -NCT04220489 -NCT04217590 -NCT04220528 -NCT04217603 -NCT04220541 -NCT04217655 -NCT04220684 -NCT04217694 -NCT04220697 -NCT04217720 -NCT04220749 -NCT04217733 -NCT04220775 -NCT04217746 -NCT04220827 -NCT04217798 -NCT04220840 -NCT04217850 -NCT04225910 -NCT04220892 -NCT04223401 -NCT04220944 -NCT04223388 -NCT04220983 -NCT04223492 -NCT04221035 -NCT04223570 -NCT04221061 -NCT04223583 -NCT04221074 -NCT04223596 -NCT04221126 -NCT04223648 -NCT04221139 -NCT04223661 -NCT04221165 -NCT04223765 -NCT04221204 -NCT04223856 -NCT04221282 -NCT04223908 -NCT04221438 -NCT04223999 -NCT04221464 -NCT04224038 -NCT04221503 -NCT04224064 -NCT04221516 -NCT04224168 -NCT04221529 -NCT04224194 -NCT04221542 -NCT04224272 -NCT04221555 -NCT04224285 -NCT04221607 -NCT04224298 -NCT04221620 -NCT04224337 -NCT04221711 -NCT04224363 -NCT04221828 -NCT04224402 -NCT04221854 -NCT04224415 -NCT04221893 -NCT04224441 -NCT04221945 -NCT04224454 -NCT04221971 -NCT04224467 -NCT04222062 -NCT04224480 -NCT04222075 -NCT04224493 -NCT04222088 -NCT04224506 -NCT04222114 -NCT04224571 -NCT04222257 -NCT04224584 -NCT04222296 -NCT04224636 -NCT04222309 -NCT04224662 -NCT04222322 -NCT04224740 -NCT04222335 -NCT04224779 -NCT04222413 -NCT04224792 -NCT04222426 -NCT04224909 -NCT04222452 -NCT04224922 -NCT04222530 -NCT04224948 -NCT04222543 -NCT04224974 -NCT04222595 -NCT04225000 -NCT04222634 -NCT04225039 -NCT04222777 -NCT04225117 -NCT04222790 -NCT04225286 -NCT04222803 -NCT04225299 -NCT04222816 -NCT04225312 -NCT04222881 -NCT04225364 -NCT04222933 -NCT04225507 -NCT04222972 -NCT04225546 -NCT04223024 -NCT04225572 -NCT04223050 -NCT04225676 -NCT04223063 -NCT04225741 -NCT04223102 -NCT04225767 -NCT04223141 -NCT04225793 -NCT04223154 -NCT04225858 -NCT04223349 -NCT04232059 -NCT04226040 -NCT04229615 -NCT04226066 -NCT04229589 -NCT04226118 -NCT04229849 -NCT04226170 -NCT04229862 -NCT04226209 -NCT04229901 -NCT04226235 -NCT04229914 -NCT04226313 -NCT04229927 -NCT04226508 -NCT04229940 -NCT04226586 -NCT04229979 -NCT04226768 -NCT04229992 -NCT04226911 -NCT04230031 -NCT04226976 -NCT04230109 -NCT04226989 -NCT04230174 -NCT04227015 -NCT04230187 -NCT04227028 -NCT04230252 -NCT04227041 -NCT04230265 -NCT04227067 -NCT04230291 -NCT04227197 -NCT04230304 -NCT04227275 -NCT04230330 -NCT04227314 -NCT04230408 -NCT04227327 -NCT04230447 -NCT04227353 -NCT04230460 -NCT04227379 -NCT04230473 -NCT04227509 -NCT04230499 -NCT04227522 -NCT04230603 -NCT04227548 -NCT04230642 -NCT04227795 -NCT04230759 -NCT04227808 -NCT04230772 -NCT04227847 -NCT04230863 -NCT04227925 -NCT04230902 -NCT04227951 -NCT04230941 -NCT04227977 -NCT04230954 -NCT04228029 -NCT04231006 -NCT04228042 -NCT04231058 -NCT04228055 -NCT04231175 -NCT04228081 -NCT04231279 -NCT04228393 -NCT04231318 -NCT04228406 -NCT04231370 -NCT04228432 -NCT04231396 -NCT04228484 -NCT04231448 -NCT04228536 -NCT04231461 -NCT04228601 -NCT04231487 -NCT04228835 -NCT04231526 -NCT04228991 -NCT04231552 -NCT04229004 -NCT04231669 -NCT04229030 -NCT04231734 -NCT04229238 -NCT04231747 -NCT04229277 -NCT04231760 -NCT04229342 -NCT04231851 -NCT04229355 -NCT04231864 -NCT04229381 -NCT04231877 -NCT04229407 -NCT04231929 -NCT04229433 -NCT04231981 -NCT04229459 -NCT04232020 -NCT04229524 -NCT04232033 -NCT04229537 -NCT04237935 -NCT04232085 -NCT04235166 -NCT04232241 -NCT04235140 -NCT04232319 -NCT04235179 -NCT04232371 -NCT04235244 -NCT04232384 -NCT04235283 -NCT04232553 -NCT04235556 -NCT04232618 -NCT04235660 -NCT04232709 -NCT04235712 -NCT04232722 -NCT04235725 -NCT04232735 -NCT04235777 -NCT04232748 -NCT04235803 -NCT04232813 -NCT04235829 -NCT04232826 -NCT04235933 -NCT04232865 -NCT04235946 -NCT04232917 -NCT04235998 -NCT04232982 -NCT04236011 -NCT04233021 -NCT04236037 -NCT04233060 -NCT04236089 -NCT04233099 -NCT04236102 -NCT04233125 -NCT04236141 -NCT04233151 -NCT04236154 -NCT04233294 -NCT04236232 -NCT04233346 -NCT04236310 -NCT04233359 -NCT04236349 -NCT04233385 -NCT04236362 -NCT04233476 -NCT04236375 -NCT04233567 -NCT04236388 -NCT04233632 -NCT04236544 -NCT04233697 -NCT04236557 -NCT04233749 -NCT04236596 -NCT04233762 -NCT04236622 -NCT04233827 -NCT04236661 -NCT04233840 -NCT04236687 -NCT04233866 -NCT04236752 -NCT04233892 -NCT04236843 -NCT04234035 -NCT04236856 -NCT04234048 -NCT04236895 -NCT04234061 -NCT04236934 -NCT04234113 -NCT04236960 -NCT04234126 -NCT04236999 -NCT04234165 -NCT04237090 -NCT04234217 -NCT04237181 -NCT04234230 -NCT04237220 -NCT04234269 -NCT04237376 -NCT04234321 -NCT04237428 -NCT04234386 -NCT04237506 -NCT04234399 -NCT04237584 -NCT04234568 -NCT04237636 -NCT04234594 -NCT04237649 -NCT04234607 -NCT04237740 -NCT04234646 -NCT04237766 -NCT04234789 -NCT04237779 -NCT04234867 -NCT04237805 -NCT04234945 -NCT04237857 -NCT04235101 -NCT04237883 -NCT04235114 -NCT04243915 -NCT04237961 -NCT04241315 -NCT04238065 -NCT04241276 -NCT04238117 -NCT04241341 -NCT04238169 -NCT04241367 -NCT04238208 -NCT04241393 -NCT04238247 -NCT04241432 -NCT04238377 -NCT04241484 -NCT04238416 -NCT04241523 -NCT04238611 -NCT04241536 -NCT04238624 -NCT04241549 -NCT04238637 -NCT04241588 -NCT04238715 -NCT04241679 -NCT04238819 -NCT04241731 -NCT04238871 -NCT04241796 -NCT04238884 -NCT04241809 -NCT04238897 -NCT04241822 -NCT04238988 -NCT04241835 -NCT04239001 -NCT04241848 -NCT04239014 -NCT04241887 -NCT04239040 -NCT04242017 -NCT04239092 -NCT04242108 -NCT04239157 -NCT04242147 -NCT04239170 -NCT04242173 -NCT04239196 -NCT04242199 -NCT04239365 -NCT04242225 -NCT04239378 -NCT04242238 -NCT04239430 -NCT04242251 -NCT04239443 -NCT04242264 -NCT04239521 -NCT04242277 -NCT04239573 -NCT04242290 -NCT04239599 -NCT04242329 -NCT04239716 -NCT04242355 -NCT04239742 -NCT04242394 -NCT04239794 -NCT04242459 -NCT04239833 -NCT04242589 -NCT04239846 -NCT04242602 -NCT04239963 -NCT04242667 -NCT04239976 -NCT04242732 -NCT04240002 -NCT04242784 -NCT04240054 -NCT04242823 -NCT04240106 -NCT04242836 -NCT04240132 -NCT04243005 -NCT04240314 -NCT04243083 -NCT04240470 -NCT04243109 -NCT04240483 -NCT04243122 -NCT04240522 -NCT04243265 -NCT04240548 -NCT04243382 -NCT04240600 -NCT04243421 -NCT04240639 -NCT04243434 -NCT04240652 -NCT04243499 -NCT04240704 -NCT04243512 -NCT04240808 -NCT04243616 -NCT04240860 -NCT04243668 -NCT04240873 -NCT04243785 -NCT04241042 -NCT04243837 -NCT04241185 -NCT04250064 -NCT04243941 -NCT04247490 -NCT04243954 -NCT04247425 -NCT04244123 -NCT04247633 -NCT04244383 -NCT04247763 -NCT04244448 -NCT04247906 -NCT04244474 -NCT04247984 -NCT04244526 -NCT04248153 -NCT04244552 -NCT04248166 -NCT04244604 -NCT04248179 -NCT04244630 -NCT04248218 -NCT04244656 -NCT04248244 -NCT04244669 -NCT04248257 -NCT04244877 -NCT04248270 -NCT04245098 -NCT04248335 -NCT04245150 -NCT04248361 -NCT04245176 -NCT04248387 -NCT04245384 -NCT04248426 -NCT04245397 -NCT04248439 -NCT04245475 -NCT04248452 -NCT04245514 -NCT04248543 -NCT04245540 -NCT04248569 -NCT04245670 -NCT04248582 -NCT04245709 -NCT04248595 -NCT04245722 -NCT04248621 -NCT04245839 -NCT04248647 -NCT04245865 -NCT04248699 -NCT04245943 -NCT04248738 -NCT04245956 -NCT04248816 -NCT04246021 -NCT04248829 -NCT04246047 -NCT04248881 -NCT04246086 -NCT04248959 -NCT04246099 -NCT04248998 -NCT04246151 -NCT04249115 -NCT04246177 -NCT04249141 -NCT04246359 -NCT04249154 -NCT04246372 -NCT04249167 -NCT04246398 -NCT04249258 -NCT04246450 -NCT04249271 -NCT04246489 -NCT04249297 -NCT04246502 -NCT04249310 -NCT04246606 -NCT04249362 -NCT04246619 -NCT04249427 -NCT04246671 -NCT04249440 -NCT04246684 -NCT04249479 -NCT04246697 -NCT04249570 -NCT04246879 -NCT04249622 -NCT04246970 -NCT04249700 -NCT04247035 -NCT04249739 -NCT04247074 -NCT04249843 -NCT04247100 -NCT04249856 -NCT04247126 -NCT04249882 -NCT04247152 -NCT04249921 -NCT04247165 -NCT04249947 -NCT04247204 -NCT04249973 -NCT04247256 -NCT04250051 -NCT04247282 -NCT04256278 -NCT04250155 -NCT04253249 -NCT04250194 -NCT04253145 -NCT04250246 -NCT04253262 -NCT04250272 -NCT04253275 -NCT04250311 -NCT04253366 -NCT04250324 -NCT04253405 -NCT04250545 -NCT04253444 -NCT04250597 -NCT04253483 -NCT04250766 -NCT04253561 -NCT04250779 -NCT04253691 -NCT04250792 -NCT04253808 -NCT04250805 -NCT04253821 -NCT04250922 -NCT04253873 -NCT04250948 -NCT04253899 -NCT04251052 -NCT04253964 -NCT04251065 -NCT04254107 -NCT04251078 -NCT04254172 -NCT04251091 -NCT04254224 -NCT04251117 -NCT04254263 -NCT04251169 -NCT04254276 -NCT04251182 -NCT04254419 -NCT04251208 -NCT04254458 -NCT04251286 -NCT04254471 -NCT04251299 -NCT04254510 -NCT04251312 -NCT04254588 -NCT04251403 -NCT04254640 -NCT04251416 -NCT04254692 -NCT04251481 -NCT04254822 -NCT04251507 -NCT04254861 -NCT04251533 -NCT04254926 -NCT04251559 -NCT04254939 -NCT04251598 -NCT04254978 -NCT04251663 -NCT04255030 -NCT04251715 -NCT04255056 -NCT04251754 -NCT04255095 -NCT04251949 -NCT04255173 -NCT04252001 -NCT04255225 -NCT04252053 -NCT04255264 -NCT04252144 -NCT04255316 -NCT04252209 -NCT04255381 -NCT04252248 -NCT04255420 -NCT04252339 -NCT04255576 -NCT04252365 -NCT04255693 -NCT04252456 -NCT04255758 -NCT04252508 -NCT04255836 -NCT04252521 -NCT04255849 -NCT04252612 -NCT04255953 -NCT04252625 -NCT04256005 -NCT04252729 -NCT04256018 -NCT04252768 -NCT04256057 -NCT04252846 -NCT04256096 -NCT04252859 -NCT04256135 -NCT04252963 -NCT04256200 -NCT04253054 -NCT04256213 -NCT04253080 -NCT04256265 -NCT04253106 -NCT04261595 -NCT04256304 -NCT04258852 -NCT04256317 -NCT04258813 -NCT04256421 -NCT04258930 -NCT04256434 -NCT04258943 -NCT04256486 -NCT04258956 -NCT04256512 -NCT04258969 -NCT04256525 -NCT04259021 -NCT04256668 -NCT04259034 -NCT04256707 -NCT04259099 -NCT04256733 -NCT04259177 -NCT04256941 -NCT04259359 -NCT04256980 -NCT04259398 -NCT04257058 -NCT04259411 -NCT04257097 -NCT04259450 -NCT04257110 -NCT04259593 -NCT04257123 -NCT04259619 -NCT04257136 -NCT04259658 -NCT04257162 -NCT04259697 -NCT04257175 -NCT04259736 -NCT04257396 -NCT04259762 -NCT04257422 -NCT04259905 -NCT04257448 -NCT04259931 -NCT04257461 -NCT04259944 -NCT04257487 -NCT04260009 -NCT04257500 -NCT04260022 -NCT04257526 -NCT04260126 -NCT04257578 -NCT04260191 -NCT04257604 -NCT04260204 -NCT04257617 -NCT04260217 -NCT04257643 -NCT04260230 -NCT04257682 -NCT04260256 -NCT04257786 -NCT04260360 -NCT04257968 -NCT04260477 -NCT04258020 -NCT04260529 -NCT04258033 -NCT04260568 -NCT04258046 -NCT04260737 -NCT04258072 -NCT04260802 -NCT04258111 -NCT04260932 -NCT04258137 -NCT04260945 -NCT04258150 -NCT04260971 -NCT04258163 -NCT04260984 -NCT04258189 -NCT04261010 -NCT04258215 -NCT04261075 -NCT04258280 -NCT04261153 -NCT04258423 -NCT04261179 -NCT04258449 -NCT04261218 -NCT04258462 -NCT04261244 -NCT04258527 -NCT04261283 -NCT04258566 -NCT04261296 -NCT04258592 -NCT04261309 -NCT04258618 -NCT04261413 -NCT04258631 -NCT04261439 -NCT04258644 -NCT04261465 -NCT04258657 -NCT04261478 -NCT04258683 -NCT04261504 -NCT04258735 -NCT04267302 -NCT04261777 -NCT04264949 -NCT04261790 -NCT04264936 -NCT04261803 -NCT04264962 -NCT04261855 -NCT04264975 -NCT04261894 -NCT04265209 -NCT04262089 -NCT04265222 -NCT04262115 -NCT04265274 -NCT04262128 -NCT04265339 -NCT04262141 -NCT04265430 -NCT04262154 -NCT04265521 -NCT04262180 -NCT04265534 -NCT04262219 -NCT04265547 -NCT04262336 -NCT04265638 -NCT04262375 -NCT04265651 -NCT04262388 -NCT04265703 -NCT04262414 -NCT04265742 -NCT04262427 -NCT04265781 -NCT04262466 -NCT04265820 -NCT04262518 -NCT04265833 -NCT04262557 -NCT04265872 -NCT04262570 -NCT04265963 -NCT04262635 -NCT04266015 -NCT04262687 -NCT04266041 -NCT04262713 -NCT04266080 -NCT04262739 -NCT04266158 -NCT04262752 -NCT04266223 -NCT04262804 -NCT04266249 -NCT04262843 -NCT04266262 -NCT04262856 -NCT04266275 -NCT04262869 -NCT04266301 -NCT04263025 -NCT04266327 -NCT04263051 -NCT04266392 -NCT04263090 -NCT04266418 -NCT04263298 -NCT04266431 -NCT04263376 -NCT04266457 -NCT04263467 -NCT04266470 -NCT04263480 -NCT04266509 -NCT04263584 -NCT04266522 -NCT04263779 -NCT04266548 -NCT04263870 -NCT04266561 -NCT04263948 -NCT04266587 -NCT04263974 -NCT04266665 -NCT04264039 -NCT04266730 -NCT04264078 -NCT04266756 -NCT04264091 -NCT04266782 -NCT04264143 -NCT04266795 -NCT04264169 -NCT04266847 -NCT04264195 -NCT04266886 -NCT04264208 -NCT04266912 -NCT04264260 -NCT04266977 -NCT04264325 -NCT04266990 -NCT04264377 -NCT04267081 -NCT04264455 -NCT04267120 -NCT04264481 -NCT04267146 -NCT04264676 -NCT04267237 -NCT04264806 -NCT04272944 -NCT04267315 -NCT04269694 -NCT04267341 -NCT04269629 -NCT04267445 -NCT04269837 -NCT04267549 -NCT04269902 -NCT04267562 -NCT04270110 -NCT04267575 -NCT04270136 -NCT04267627 -NCT04270149 -NCT04267796 -NCT04270175 -NCT04267835 -NCT04270266 -NCT04267848 -NCT04270409 -NCT04267874 -NCT04270461 -NCT04267887 -NCT04270500 -NCT04267900 -NCT04270591 -NCT04267913 -NCT04270617 -NCT04267939 -NCT04270864 -NCT04267965 -NCT04270877 -NCT04267978 -NCT04270890 -NCT04268017 -NCT04270929 -NCT04268121 -NCT04271020 -NCT04268134 -NCT04271033 -NCT04268186 -NCT04271085 -NCT04268199 -NCT04271163 -NCT04268251 -NCT04271176 -NCT04268277 -NCT04271254 -NCT04268290 -NCT04271384 -NCT04268303 -NCT04271410 -NCT04268329 -NCT04271436 -NCT04268420 -NCT04271527 -NCT04268433 -NCT04271579 -NCT04268485 -NCT04271605 -NCT04268498 -NCT04271644 -NCT04268524 -NCT04271800 -NCT04268550 -NCT04271813 -NCT04268589 -NCT04271826 -NCT04268602 -NCT04271878 -NCT04268641 -NCT04271891 -NCT04268706 -NCT04271930 -NCT04268732 -NCT04271956 -NCT04268758 -NCT04272034 -NCT04268810 -NCT04272060 -NCT04268836 -NCT04272125 -NCT04268862 -NCT04272151 -NCT04268888 -NCT04272190 -NCT04268940 -NCT04272203 -NCT04268979 -NCT04272294 -NCT04269018 -NCT04272333 -NCT04269083 -NCT04272346 -NCT04269148 -NCT04272398 -NCT04269174 -NCT04272424 -NCT04269200 -NCT04272619 -NCT04269213 -NCT04272645 -NCT04269291 -NCT04272775 -NCT04269330 -NCT04272801 -NCT04269369 -NCT04272879 -NCT04269499 -NCT04272931 -NCT04269512 -NCT04278690 -NCT04272957 -NCT04276142 -NCT04272970 -NCT04276090 -NCT04273061 -NCT04276194 -NCT04273100 -NCT04276207 -NCT04273139 -NCT04276220 -NCT04273282 -NCT04276324 -NCT04273373 -NCT04276337 -NCT04273464 -NCT04276376 -NCT04273490 -NCT04276415 -NCT04273542 -NCT04276454 -NCT04273555 -NCT04276493 -NCT04273620 -NCT04276532 -NCT04273724 -NCT04276597 -NCT04273802 -NCT04276610 -NCT04273815 -NCT04276636 -NCT04273828 -NCT04276649 -NCT04273854 -NCT04276753 -NCT04273893 -NCT04276779 -NCT04273971 -NCT04276857 -NCT04274023 -NCT04276883 -NCT04274179 -NCT04276909 -NCT04274426 -NCT04276974 -NCT04274465 -NCT04277000 -NCT04274556 -NCT04277039 -NCT04274569 -NCT04277052 -NCT04274634 -NCT04277078 -NCT04274738 -NCT04277130 -NCT04274790 -NCT04277221 -NCT04274816 -NCT04277273 -NCT04274842 -NCT04277338 -NCT04274868 -NCT04277364 -NCT04274894 -NCT04277403 -NCT04274907 -NCT04277442 -NCT04274920 -NCT04277572 -NCT04274933 -NCT04277663 -NCT04274946 -NCT04277689 -NCT04275050 -NCT04277728 -NCT04275076 -NCT04277741 -NCT04275102 -NCT04277845 -NCT04275219 -NCT04277858 -NCT04275414 -NCT04278014 -NCT04275453 -NCT04278092 -NCT04275505 -NCT04278118 -NCT04275518 -NCT04278144 -NCT04275544 -NCT04278183 -NCT04275583 -NCT04278222 -NCT04275661 -NCT04278261 -NCT04275713 -NCT04278287 -NCT04275765 -NCT04278326 -NCT04275791 -NCT04278469 -NCT04275869 -NCT04278495 -NCT04275882 -NCT04278534 -NCT04275921 -NCT04278599 -NCT04275960 -NCT04278638 -NCT04275986 -NCT04278651 -NCT04276038 -NCT04284696 -NCT04278729 -NCT04281875 -NCT04278768 -NCT04281784 -NCT04278781 -NCT04281888 -NCT04278859 -NCT04282018 -NCT04278963 -NCT04282031 -NCT04278989 -NCT04282044 -NCT04279288 -NCT04282070 -NCT04279327 -NCT04282109 -NCT04279379 -NCT04282148 -NCT04279405 -NCT04282174 -NCT04279457 -NCT04282187 -NCT04279509 -NCT04282278 -NCT04279535 -NCT04282317 -NCT04279561 -NCT04282343 -NCT04279600 -NCT04282356 -NCT04279678 -NCT04282408 -NCT04279717 -NCT04282434 -NCT04279782 -NCT04282538 -NCT04279795 -NCT04282642 -NCT04279808 -NCT04282668 -NCT04279821 -NCT04282707 -NCT04279847 -NCT04282720 -NCT04279912 -NCT04282824 -NCT04279938 -NCT04282863 -NCT04280081 -NCT04282902 -NCT04280094 -NCT04282954 -NCT04280133 -NCT04282967 -NCT04280146 -NCT04282980 -NCT04280185 -NCT04283019 -NCT04280315 -NCT04283032 -NCT04280328 -NCT04283175 -NCT04280341 -NCT04283266 -NCT04280367 -NCT04283292 -NCT04280393 -NCT04283370 -NCT04280406 -NCT04283409 -NCT04280497 -NCT04283435 -NCT04280523 -NCT04283461 -NCT04280536 -NCT04283643 -NCT04280757 -NCT04283669 -NCT04280822 -NCT04283682 -NCT04280848 -NCT04283773 -NCT04280952 -NCT04283890 -NCT04281043 -NCT04283929 -NCT04281199 -NCT04283994 -NCT04281251 -NCT04284020 -NCT04281290 -NCT04284228 -NCT04281316 -NCT04284241 -NCT04281355 -NCT04284267 -NCT04281420 -NCT04284423 -NCT04281446 -NCT04284436 -NCT04281498 -NCT04284488 -NCT04281576 -NCT04284501 -NCT04281641 -NCT04284540 -NCT04281667 -NCT04284605 -NCT04281732 -NCT04284618 -NCT04281771 -NCT04290793 -NCT04284748 -NCT04287881 -NCT04284761 -NCT04287868 -NCT04284774 -NCT04287894 -NCT04284787 -NCT04287920 -NCT04284826 -NCT04288089 -NCT04284852 -NCT04288206 -NCT04284943 -NCT04288323 -NCT04284969 -NCT04288336 -NCT04285008 -NCT04288375 -NCT04285021 -NCT04288505 -NCT04285086 -NCT04288518 -NCT04285177 -NCT04288661 -NCT04285190 -NCT04288674 -NCT04285229 -NCT04288687 -NCT04285268 -NCT04288700 -NCT04285437 -NCT04288726 -NCT04285450 -NCT04288739 -NCT04285476 -NCT04288765 -NCT04285528 -NCT04288804 -NCT04285567 -NCT04288921 -NCT04285606 -NCT04288999 -NCT04285671 -NCT04289168 -NCT04285684 -NCT04289220 -NCT04285697 -NCT04289246 -NCT04285736 -NCT04289285 -NCT04285749 -NCT04289311 -NCT04285775 -NCT04289441 -NCT04285827 -NCT04289506 -NCT04285996 -NCT04289532 -NCT04286113 -NCT04289558 -NCT04286152 -NCT04289571 -NCT04286217 -NCT04289688 -NCT04286243 -NCT04289701 -NCT04286269 -NCT04289766 -NCT04286308 -NCT04289779 -NCT04286451 -NCT04289792 -NCT04286464 -NCT04289805 -NCT04286698 -NCT04289831 -NCT04286711 -NCT04289935 -NCT04286828 -NCT04289961 -NCT04286958 -NCT04290013 -NCT04287010 -NCT04290039 -NCT04287088 -NCT04290078 -NCT04287127 -NCT04290091 -NCT04287140 -NCT04290247 -NCT04287218 -NCT04290273 -NCT04287231 -NCT04290325 -NCT04287257 -NCT04290442 -NCT04287478 -NCT04290455 -NCT04287569 -NCT04290507 -NCT04287582 -NCT04290546 -NCT04287660 -NCT04290585 -NCT04287686 -NCT04290663 -NCT04287764 -NCT04290689 -NCT04287829 -NCT04290767 -NCT04287855 -NCT04296162 -NCT04290858 -NCT04293562 -NCT04290897 -NCT04293523 -NCT04290962 -NCT04293679 -NCT04291079 -NCT04293692 -NCT04291092 -NCT04293796 -NCT04291105 -NCT04293835 -NCT04291209 -NCT04293861 -NCT04291248 -NCT04293874 -NCT04291261 -NCT04293887 -NCT04291287 -NCT04293939 -NCT04291300 -NCT04293965 -NCT04291313 -NCT04294056 -NCT04291365 -NCT04294095 -NCT04291378 -NCT04294160 -NCT04291430 -NCT04294186 -NCT04291547 -NCT04294212 -NCT04291664 -NCT04294225 -NCT04291742 -NCT04294264 -NCT04291768 -NCT04294277 -NCT04291859 -NCT04294316 -NCT04291885 -NCT04294381 -NCT04291898 -NCT04294498 -NCT04291976 -NCT04294511 -NCT04292119 -NCT04294524 -NCT04292353 -NCT04294576 -NCT04292366 -NCT04294628 -NCT04292496 -NCT04294784 -NCT04292574 -NCT04294810 -NCT04292587 -NCT04294836 -NCT04292613 -NCT04294875 -NCT04292626 -NCT04294927 -NCT04292665 -NCT04294953 -NCT04292678 -NCT04295018 -NCT04292704 -NCT04295109 -NCT04292743 -NCT04295122 -NCT04292756 -NCT04295187 -NCT04292769 -NCT04295213 -NCT04292795 -NCT04295317 -NCT04292821 -NCT04295330 -NCT04292847 -NCT04295408 -NCT04292873 -NCT04295447 -NCT04292886 -NCT04295473 -NCT04292990 -NCT04295642 -NCT04293055 -NCT04295655 -NCT04293094 -NCT04295681 -NCT04293172 -NCT04295759 -NCT04293224 -NCT04295785 -NCT04293276 -NCT04295811 -NCT04293289 -NCT04295824 -NCT04293315 -NCT04295863 -NCT04293380 -NCT04295889 -NCT04293393 -NCT04295980 -NCT04293419 -NCT04296019 -NCT04293458 -NCT04296084 -NCT04293484 -NCT04296149 -NCT04293497 -NCT04301336 -NCT04296175 -NCT04298541 -NCT04296240 -NCT04298489 -NCT04296266 -NCT04298554 -NCT04296279 -NCT04298606 -NCT04296305 -NCT04298632 -NCT04296357 -NCT04298827 -NCT04296370 -NCT04298840 -NCT04296383 -NCT04298879 -NCT04296409 -NCT04298892 -NCT04296422 -NCT04298918 -NCT04296448 -NCT04298957 -NCT04296461 -NCT04298983 -NCT04296513 -NCT04299048 -NCT04296539 -NCT04299087 -NCT04296578 -NCT04299100 -NCT04296630 -NCT04299113 -NCT04296721 -NCT04299191 -NCT04296747 -NCT04299334 -NCT04296786 -NCT04299399 -NCT04296799 -NCT04299425 -NCT04296890 -NCT04299451 -NCT04296903 -NCT04299542 -NCT04296929 -NCT04299568 -NCT04296942 -NCT04299581 -NCT04296994 -NCT04299620 -NCT04297007 -NCT04299646 -NCT04297033 -NCT04299724 -NCT04297124 -NCT04299750 -NCT04297202 -NCT04299971 -NCT04297254 -NCT04300062 -NCT04297267 -NCT04300101 -NCT04297280 -NCT04300114 -NCT04297293 -NCT04300140 -NCT04297332 -NCT04300166 -NCT04297384 -NCT04300244 -NCT04297410 -NCT04300283 -NCT04297423 -NCT04300335 -NCT04297540 -NCT04300465 -NCT04297553 -NCT04300478 -NCT04297605 -NCT04300530 -NCT04297618 -NCT04300556 -NCT04297657 -NCT04300634 -NCT04297683 -NCT04300647 -NCT04297748 -NCT04300673 -NCT04297839 -NCT04300686 -NCT04297995 -NCT04300699 -NCT04298008 -NCT04300790 -NCT04298021 -NCT04300829 -NCT04298086 -NCT04300855 -NCT04298229 -NCT04300959 -NCT04298242 -NCT04301011 -NCT04298255 -NCT04301050 -NCT04298294 -NCT04301063 -NCT04298320 -NCT04301076 -NCT04298333 -NCT04301284 -NCT04298398 -NCT04306666 -NCT04301375 -NCT04304183 -NCT04301414 -NCT04304170 -NCT04301453 -NCT04304196 -NCT04301557 -NCT04304209 -NCT04301726 -NCT04304248 -NCT04301739 -NCT04304339 -NCT04301765 -NCT04304352 -NCT04301778 -NCT04304404 -NCT04301843 -NCT04304495 -NCT04301882 -NCT04304508 -NCT04301986 -NCT04304560 -NCT04301999 -NCT04304573 -NCT04302025 -NCT04304781 -NCT04302272 -NCT04304820 -NCT04302324 -NCT04304898 -NCT04302350 -NCT04304924 -NCT04302389 -NCT04305028 -NCT04302402 -NCT04305041 -NCT04302441 -NCT04305054 -NCT04302454 -NCT04305067 -NCT04302649 -NCT04305145 -NCT04302701 -NCT04305184 -NCT04302714 -NCT04305236 -NCT04302792 -NCT04305249 -NCT04303013 -NCT04305275 -NCT04303026 -NCT04305379 -NCT04303052 -NCT04305444 -NCT04303091 -NCT04305470 -NCT04303117 -NCT04305496 -NCT04303130 -NCT04305509 -NCT04303169 -NCT04305535 -NCT04303208 -NCT04305548 -NCT04303221 -NCT04305639 -NCT04303247 -NCT04305652 -NCT04303351 -NCT04305691 -NCT04303364 -NCT04305730 -NCT04303403 -NCT04305769 -NCT04303429 -NCT04305795 -NCT04303442 -NCT04305834 -NCT04303559 -NCT04305860 -NCT04303572 -NCT04305925 -NCT04303715 -NCT04305964 -NCT04303741 -NCT04306003 -NCT04303780 -NCT04306224 -NCT04303858 -NCT04306263 -NCT04303884 -NCT04306367 -NCT04303936 -NCT04306419 -NCT04303988 -NCT04306432 -NCT04304001 -NCT04306458 -NCT04304014 -NCT04306523 -NCT04304040 -NCT04306562 -NCT04304066 -NCT04306575 -NCT04304079 -NCT04306614 -NCT04304092 -NCT04306627 -NCT04304131 -NCT04306653 -NCT04304144 -NCT04312204 -NCT04306692 -NCT04309552 -NCT04306783 -NCT04309500 -NCT04306874 -NCT04309578 -NCT04306887 -NCT04309695 -NCT04306900 -NCT04309747 -NCT04306926 -NCT04309812 -NCT04306952 -NCT04309942 -NCT04306991 -NCT04309955 -NCT04307004 -NCT04309968 -NCT04307056 -NCT04309981 -NCT04307147 -NCT04310007 -NCT04307173 -NCT04310020 -NCT04307212 -NCT04310046 -NCT04307277 -NCT04310111 -NCT04307329 -NCT04310176 -NCT04307407 -NCT04310345 -NCT04307433 -NCT04310397 -NCT04307472 -NCT04310410 -NCT04307537 -NCT04310449 -NCT04307576 -NCT04310462 -NCT04307784 -NCT04310540 -NCT04307823 -NCT04310553 -NCT04307914 -NCT04310579 -NCT04307979 -NCT04310592 -NCT04308122 -NCT04310618 -NCT04308135 -NCT04310696 -NCT04308174 -NCT04310709 -NCT04308226 -NCT04310774 -NCT04308252 -NCT04310826 -NCT04308265 -NCT04310852 -NCT04308278 -NCT04310943 -NCT04308330 -NCT04311034 -NCT04308395 -NCT04311047 -NCT04308421 -NCT04311060 -NCT04308486 -NCT04311099 -NCT04308499 -NCT04311242 -NCT04308590 -NCT04311268 -NCT04308629 -NCT04311385 -NCT04308759 -NCT04311502 -NCT04308785 -NCT04311528 -NCT04308824 -NCT04311567 -NCT04308837 -NCT04311580 -NCT04308850 -NCT04311606 -NCT04308863 -NCT04311645 -NCT04308876 -NCT04311710 -NCT04308954 -NCT04311762 -NCT04309032 -NCT04311840 -NCT04309084 -NCT04311866 -NCT04309097 -NCT04311970 -NCT04309136 -NCT04312087 -NCT04309188 -NCT04312139 -NCT04309227 -NCT04312152 -NCT04309240 -NCT04312165 -NCT04309253 -NCT04312178 -NCT04309409 -NCT04312191 -NCT04309474 -NCT04318067 -NCT04312243 -NCT04315597 -NCT04312282 -NCT04315584 -NCT04312347 -NCT04315623 -NCT04312360 -NCT04315701 -NCT04312607 -NCT04315714 -NCT04312776 -NCT04315753 -NCT04312815 -NCT04315779 -NCT04312841 -NCT04315792 -NCT04313062 -NCT04316013 -NCT04313088 -NCT04316026 -NCT04313101 -NCT04316039 -NCT04313114 -NCT04316078 -NCT04313140 -NCT04316091 -NCT04313192 -NCT04316117 -NCT04313205 -NCT04316156 -NCT04313296 -NCT04316169 -NCT04313374 -NCT04316182 -NCT04313465 -NCT04316208 -NCT04313478 -NCT04316273 -NCT04313504 -NCT04316286 -NCT04313530 -NCT04316364 -NCT04313608 -NCT04316429 -NCT04313660 -NCT04316494 -NCT04313764 -NCT04316507 -NCT04313868 -NCT04316520 -NCT04313881 -NCT04316546 -NCT04313907 -NCT04316559 -NCT04313946 -NCT04316624 -NCT04314089 -NCT04316637 -NCT04314219 -NCT04316689 -NCT04314245 -NCT04316728 -NCT04314284 -NCT04316780 -NCT04314297 -NCT04316793 -NCT04314479 -NCT04316871 -NCT04314518 -NCT04316962 -NCT04314609 -NCT04316975 -NCT04314674 -NCT04317066 -NCT04314700 -NCT04317105 -NCT04314778 -NCT04317118 -NCT04314843 -NCT04317222 -NCT04314856 -NCT04317248 -NCT04314895 -NCT04317261 -NCT04314999 -NCT04317274 -NCT04315012 -NCT04317391 -NCT04315051 -NCT04317417 -NCT04315064 -NCT04317456 -NCT04315142 -NCT04317521 -NCT04315155 -NCT04317625 -NCT04315194 -NCT04317677 -NCT04315207 -NCT04317690 -NCT04315233 -NCT04317742 -NCT04315246 -NCT04317781 -NCT04315324 -NCT04317885 -NCT04315337 -NCT04317937 -NCT04315350 -NCT04318028 -NCT04315467 -NCT04323722 -NCT04318080 -NCT04321135 -NCT04318184 -NCT04321109 -NCT04318223 -NCT04321161 -NCT04318327 -NCT04321174 -NCT04318340 -NCT04321278 -NCT04318392 -NCT04321330 -NCT04318535 -NCT04321356 -NCT04318561 -NCT04321369 -NCT04318574 -NCT04321486 -NCT04318678 -NCT04321538 -NCT04318717 -NCT04321629 -NCT04318730 -NCT04321668 -NCT04318795 -NCT04321707 -NCT04318808 -NCT04321811 -NCT04318834 -NCT04321837 -NCT04318886 -NCT04321902 -NCT04318925 -NCT04321954 -NCT04318938 -NCT04322006 -NCT04318964 -NCT04322045 -NCT04319042 -NCT04322071 -NCT04319107 -NCT04322136 -NCT04319146 -NCT04322149 -NCT04319198 -NCT04322175 -NCT04319224 -NCT04322227 -NCT04319263 -NCT04322240 -NCT04319276 -NCT04322292 -NCT04319289 -NCT04322318 -NCT04319354 -NCT04322357 -NCT04319432 -NCT04322383 -NCT04319471 -NCT04322422 -NCT04319484 -NCT04322435 -NCT04319510 -NCT04322487 -NCT04319601 -NCT04322539 -NCT04319757 -NCT04322552 -NCT04319783 -NCT04322565 -NCT04319861 -NCT04322578 -NCT04319874 -NCT04322617 -NCT04319991 -NCT04322643 -NCT04320030 -NCT04322695 -NCT04320108 -NCT04322786 -NCT04320147 -NCT04322890 -NCT04320277 -NCT04322929 -NCT04320316 -NCT04322955 -NCT04320329 -NCT04322981 -NCT04320342 -NCT04323046 -NCT04320407 -NCT04323098 -NCT04320420 -NCT04323137 -NCT04320485 -NCT04323202 -NCT04320498 -NCT04323306 -NCT04320550 -NCT04323436 -NCT04320654 -NCT04323566 -NCT04320875 -NCT04323605 -NCT04320888 -NCT04323618 -NCT04320901 -NCT04323631 -NCT04320979 -NCT04323657 -NCT04321096 -NCT04330430 -NCT04323735 -NCT04327011 -NCT04323774 -NCT04326972 -NCT04323904 -NCT04327037 -NCT04323956 -NCT04327050 -NCT04324112 -NCT04327063 -NCT04324125 -NCT04327206 -NCT04324294 -NCT04327336 -NCT04324307 -NCT04327375 -NCT04324372 -NCT04327583 -NCT04324385 -NCT04327622 -NCT04324437 -NCT04327700 -NCT04324450 -NCT04327752 -NCT04324463 -NCT04327869 -NCT04324476 -NCT04327882 -NCT04324580 -NCT04327908 -NCT04324632 -NCT04327986 -NCT04324671 -NCT04327999 -NCT04324814 -NCT04328181 -NCT04324840 -NCT04328194 -NCT04324879 -NCT04328480 -NCT04324905 -NCT04328506 -NCT04324931 -NCT04328597 -NCT04324970 -NCT04328610 -NCT04324983 -NCT04328675 -NCT04325243 -NCT04328714 -NCT04325282 -NCT04328740 -NCT04325425 -NCT04328818 -NCT04325438 -NCT04328844 -NCT04325490 -NCT04328948 -NCT04325711 -NCT04328961 -NCT04325763 -NCT04329000 -NCT04325776 -NCT04329013 -NCT04325828 -NCT04329065 -NCT04325841 -NCT04329130 -NCT04325854 -NCT04329143 -NCT04325867 -NCT04329169 -NCT04326049 -NCT04329208 -NCT04326153 -NCT04329221 -NCT04326257 -NCT04329325 -NCT04326296 -NCT04329351 -NCT04326374 -NCT04329403 -NCT04326387 -NCT04329429 -NCT04326439 -NCT04329481 -NCT04326517 -NCT04329494 -NCT04326530 -NCT04329689 -NCT04326569 -NCT04329715 -NCT04326582 -NCT04329923 -NCT04326595 -NCT04329949 -NCT04326660 -NCT04329962 -NCT04326712 -NCT04330040 -NCT04326725 -NCT04330092 -NCT04326764 -NCT04330118 -NCT04326790 -NCT04330183 -NCT04326829 -NCT04330209 -NCT04326842 -NCT04330339 -NCT04326894 -NCT04337112 -NCT04330456 -NCT04333875 -NCT04330664 -NCT04333836 -NCT04330716 -NCT04333914 -NCT04330781 -NCT04333927 -NCT04330820 -NCT04334005 -NCT04330833 -NCT04334096 -NCT04330885 -NCT04334135 -NCT04330963 -NCT04334174 -NCT04331015 -NCT04334330 -NCT04331041 -NCT04334369 -NCT04331067 -NCT04334460 -NCT04331093 -NCT04334590 -NCT04331119 -NCT04334759 -NCT04331184 -NCT04334772 -NCT04331262 -NCT04334785 -NCT04331301 -NCT04334850 -NCT04331327 -NCT04334863 -NCT04331405 -NCT04334941 -NCT04331431 -NCT04334993 -NCT04331457 -NCT04335006 -NCT04331483 -NCT04335058 -NCT04331535 -NCT04335253 -NCT04331548 -NCT04335292 -NCT04331561 -NCT04335357 -NCT04331626 -NCT04335409 -NCT04331691 -NCT04335474 -NCT04331717 -NCT04335578 -NCT04331743 -NCT04335604 -NCT04331938 -NCT04335630 -NCT04331990 -NCT04335669 -NCT04332055 -NCT04335682 -NCT04332198 -NCT04335864 -NCT04332367 -NCT04335890 -NCT04332484 -NCT04335994 -NCT04332549 -NCT04336046 -NCT04332588 -NCT04336098 -NCT04332627 -NCT04336111 -NCT04332653 -NCT04336124 -NCT04332744 -NCT04336163 -NCT04332770 -NCT04336202 -NCT04332796 -NCT04336241 -NCT04332822 -NCT04336280 -NCT04332874 -NCT04336397 -NCT04332900 -NCT04336436 -NCT04333004 -NCT04336501 -NCT04333108 -NCT04336683 -NCT04333160 -NCT04336696 -NCT04333173 -NCT04336826 -NCT04333212 -NCT04336852 -NCT04333342 -NCT04336878 -NCT04333524 -NCT04336891 -NCT04333537 -NCT04336917 -NCT04333602 -NCT04336943 -NCT04333693 -NCT04336982 -NCT04333706 -NCT04337060 -NCT04333823 -NCT04343079 -NCT04337151 -NCT04339920 -NCT04337177 -NCT04339829 -NCT04337203 -NCT04340089 -NCT04337333 -NCT04340141 -NCT04337372 -NCT04340154 -NCT04337463 -NCT04340167 -NCT04337580 -NCT04340180 -NCT04337593 -NCT04340193 -NCT04337606 -NCT04340258 -NCT04337632 -NCT04340401 -NCT04337658 -NCT04340440 -NCT04337736 -NCT04340531 -NCT04337749 -NCT04340583 -NCT04337827 -NCT04340765 -NCT04337840 -NCT04340843 -NCT04337853 -NCT04340882 -NCT04337879 -NCT04340934 -NCT04337918 -NCT04341025 -NCT04337931 -NCT04341064 -NCT04337970 -NCT04341129 -NCT04338100 -NCT04341181 -NCT04338191 -NCT04341194 -NCT04338230 -NCT04341207 -NCT04338269 -NCT04341259 -NCT04338282 -NCT04341298 -NCT04338399 -NCT04341311 -NCT04338438 -NCT04341324 -NCT04338529 -NCT04341441 -NCT04338620 -NCT04341545 -NCT04338646 -NCT04341558 -NCT04338659 -NCT04341571 -NCT04338685 -NCT04341675 -NCT04338724 -NCT04341740 -NCT04338763 -NCT04341857 -NCT04338828 -NCT04341870 -NCT04338854 -NCT04341883 -NCT04339036 -NCT04342026 -NCT04339062 -NCT04342052 -NCT04339101 -NCT04342234 -NCT04339127 -NCT04342377 -NCT04339140 -NCT04342403 -NCT04339192 -NCT04342429 -NCT04339205 -NCT04342520 -NCT04339218 -NCT04342546 -NCT04339231 -NCT04342559 -NCT04339270 -NCT04342572 -NCT04339322 -NCT04342637 -NCT04339335 -NCT04342663 -NCT04339400 -NCT04342676 -NCT04339504 -NCT04342728 -NCT04339517 -NCT04342871 -NCT04339660 -NCT04342910 -NCT04339686 -NCT04342936 -NCT04339738 -NCT04342962 -NCT04339751 -NCT04343027 -NCT04339764 -NCT04351009 -NCT04343157 -NCT04347590 -NCT04343170 -NCT04347434 -NCT04343183 -NCT04347616 -NCT04343313 -NCT04347681 -NCT04343573 -NCT04347915 -NCT04343586 -NCT04348006 -NCT04343742 -NCT04348032 -NCT04343781 -NCT04348045 -NCT04343807 -NCT04348123 -NCT04343859 -NCT04348136 -NCT04343885 -NCT04348149 -NCT04343911 -NCT04348175 -NCT04343950 -NCT04348188 -NCT04343963 -NCT04348253 -NCT04344132 -NCT04348292 -NCT04344158 -NCT04348422 -NCT04344223 -NCT04348565 -NCT04344353 -NCT04348643 -NCT04344392 -NCT04348747 -NCT04344444 -NCT04348799 -NCT04344561 -NCT04348877 -NCT04344626 -NCT04348916 -NCT04344652 -NCT04348955 -NCT04344730 -NCT04349111 -NCT04344795 -NCT04349241 -NCT04344860 -NCT04349267 -NCT04344925 -NCT04349280 -NCT04344977 -NCT04349293 -NCT04345003 -NCT04349306 -NCT04345068 -NCT04349358 -NCT04345146 -NCT04349436 -NCT04345224 -NCT04349501 -NCT04345471 -NCT04349527 -NCT04345770 -NCT04349605 -NCT04345783 -NCT04349761 -NCT04345913 -NCT04349891 -NCT04345939 -NCT04349904 -NCT04345952 -NCT04349969 -NCT04345978 -NCT04350164 -NCT04346043 -NCT04350190 -NCT04346173 -NCT04350229 -NCT04346225 -NCT04350346 -NCT04346368 -NCT04350372 -NCT04346381 -NCT04350398 -NCT04346498 -NCT04350411 -NCT04346511 -NCT04350450 -NCT04346550 -NCT04350463 -NCT04346823 -NCT04350619 -NCT04346888 -NCT04350671 -NCT04346914 -NCT04350684 -NCT04346927 -NCT04350762 -NCT04347122 -NCT04350788 -NCT04347148 -NCT04350905 -NCT04347161 -NCT04350957 -NCT04347226 -NCT04350996 -NCT04347330 -NCT04357912 -NCT04351022 -NCT04354454 -NCT04351074 -NCT04354324 -NCT04351113 -NCT04354649 -NCT04351165 -NCT04354662 -NCT04351204 -NCT04354675 -NCT04351230 -NCT04354805 -NCT04351282 -NCT04354818 -NCT04351308 -NCT04354857 -NCT04351321 -NCT04354961 -NCT04351334 -NCT04355039 -NCT04351373 -NCT04355104 -NCT04351425 -NCT04355156 -NCT04351529 -NCT04355247 -NCT04351555 -NCT04355260 -NCT04351841 -NCT04355312 -NCT04351854 -NCT04355455 -NCT04351867 -NCT04355520 -NCT04351880 -NCT04355572 -NCT04351893 -NCT04355676 -NCT04351984 -NCT04355858 -NCT04352023 -NCT04355871 -NCT04352062 -NCT04355897 -NCT04352153 -NCT04356001 -NCT04352205 -NCT04356040 -NCT04352218 -NCT04356079 -NCT04352257 -NCT04356118 -NCT04352348 -NCT04356131 -NCT04352413 -NCT04356170 -NCT04352439 -NCT04356196 -NCT04352491 -NCT04356209 -NCT04352530 -NCT04356222 -NCT04352634 -NCT04356235 -NCT04352712 -NCT04356378 -NCT04352777 -NCT04356404 -NCT04352855 -NCT04356430 -NCT04352894 -NCT04356456 -NCT04352920 -NCT04356664 -NCT04353050 -NCT04356690 -NCT04353063 -NCT04356729 -NCT04353180 -NCT04356781 -NCT04353271 -NCT04356846 -NCT04353375 -NCT04356872 -NCT04353479 -NCT04357080 -NCT04353596 -NCT04357119 -NCT04353622 -NCT04357132 -NCT04353687 -NCT04357158 -NCT04353700 -NCT04357171 -NCT04353973 -NCT04357184 -NCT04354012 -NCT04357483 -NCT04354025 -NCT04357509 -NCT04354038 -NCT04357561 -NCT04354155 -NCT04357587 -NCT04354233 -NCT04357665 -NCT04354246 -NCT04357756 -NCT04354285 -NCT04357873 -NCT04354298 -NCT04364256 -NCT04358185 -NCT04361409 -NCT04358237 -NCT04361396 -NCT04358276 -NCT04361526 -NCT04358328 -NCT04361552 -NCT04358341 -NCT04361656 -NCT04358354 -NCT04361708 -NCT04358367 -NCT04361825 -NCT04358393 -NCT04361851 -NCT04358445 -NCT04361929 -NCT04358458 -NCT04362007 -NCT04358523 -NCT04362046 -NCT04358562 -NCT04362072 -NCT04358575 -NCT04362202 -NCT04358601 -NCT04362436 -NCT04358614 -NCT04362449 -NCT04358666 -NCT04362462 -NCT04358718 -NCT04362618 -NCT04358731 -NCT04362657 -NCT04358913 -NCT04362670 -NCT04359004 -NCT04362722 -NCT04359069 -NCT04362748 -NCT04359147 -NCT04362761 -NCT04359316 -NCT04362774 -NCT04359381 -NCT04362787 -NCT04359420 -NCT04362826 -NCT04359472 -NCT04362839 -NCT04359550 -NCT04362956 -NCT04359589 -NCT04362969 -NCT04359615 -NCT04363099 -NCT04359732 -NCT04363125 -NCT04359758 -NCT04363164 -NCT04359784 -NCT04363177 -NCT04359823 -NCT04363190 -NCT04359888 -NCT04363242 -NCT04359901 -NCT04363255 -NCT04359979 -NCT04363294 -NCT04360044 -NCT04363385 -NCT04360096 -NCT04363489 -NCT04360252 -NCT04363528 -NCT04360317 -NCT04363541 -NCT04360330 -NCT04363593 -NCT04360382 -NCT04363723 -NCT04360577 -NCT04363762 -NCT04360629 -NCT04363801 -NCT04360668 -NCT04363892 -NCT04360798 -NCT04363957 -NCT04360824 -NCT04363970 -NCT04360915 -NCT04363983 -NCT04360941 -NCT04364048 -NCT04360980 -NCT04364074 -NCT04361058 -NCT04364087 -NCT04361162 -NCT04364113 -NCT04361279 -NCT04364139 -NCT04361292 -NCT04364191 -NCT04361331 -NCT04364230 -NCT04361370 -NCT04372004 -NCT04364373 -NCT04368702 -NCT04364451 -NCT04368611 -NCT04364672 -NCT04368806 -NCT04364711 -NCT04368845 -NCT04364724 -NCT04369066 -NCT04364737 -NCT04369118 -NCT04364893 -NCT04369131 -NCT04365036 -NCT04369209 -NCT04365179 -NCT04369222 -NCT04365205 -NCT04369313 -NCT04365231 -NCT04369339 -NCT04365374 -NCT04369430 -NCT04365413 -NCT04369560 -NCT04365478 -NCT04369638 -NCT04365491 -NCT04369729 -NCT04365530 -NCT04369872 -NCT04365569 -NCT04369885 -NCT04365660 -NCT04369911 -NCT04365751 -NCT04369937 -NCT04365868 -NCT04370093 -NCT04365946 -NCT04370236 -NCT04365998 -NCT04370275 -NCT04366102 -NCT04370405 -NCT04366128 -NCT04370418 -NCT04366557 -NCT04370457 -NCT04366648 -NCT04370483 -NCT04366661 -NCT04370496 -NCT04366674 -NCT04370509 -NCT04366713 -NCT04370574 -NCT04366726 -NCT04370587 -NCT04366778 -NCT04370652 -NCT04367025 -NCT04370691 -NCT04367090 -NCT04370704 -NCT04367194 -NCT04370782 -NCT04367207 -NCT04370795 -NCT04367311 -NCT04370834 -NCT04367350 -NCT04370899 -NCT04367376 -NCT04370925 -NCT04367480 -NCT04370990 -NCT04367493 -NCT04371146 -NCT04367571 -NCT04371198 -NCT04367727 -NCT04371224 -NCT04367909 -NCT04371276 -NCT04367948 -NCT04371289 -NCT04367961 -NCT04371328 -NCT04367987 -NCT04371406 -NCT04368078 -NCT04371536 -NCT04368130 -NCT04371562 -NCT04368182 -NCT04371588 -NCT04368195 -NCT04371679 -NCT04368273 -NCT04371796 -NCT04368286 -NCT04371822 -NCT04368390 -NCT04371887 -NCT04368468 -NCT04371900 -NCT04368481 -NCT04371913 -NCT04368507 -NCT04379167 -NCT04372173 -NCT04375332 -NCT04372212 -NCT04375267 -NCT04372433 -NCT04375358 -NCT04372459 -NCT04375384 -NCT04372498 -NCT04375410 -NCT04372563 -NCT04375527 -NCT04372628 -NCT04375605 -NCT04372641 -NCT04375631 -NCT04372706 -NCT04375683 -NCT04372719 -NCT04375709 -NCT04372797 -NCT04375813 -NCT04372862 -NCT04375891 -NCT04372914 -NCT04375904 -NCT04372927 -NCT04375917 -NCT04372992 -NCT04375930 -NCT04373031 -NCT04375956 -NCT04373044 -NCT04376008 -NCT04373070 -NCT04376073 -NCT04373083 -NCT04376125 -NCT04373239 -NCT04376203 -NCT04373265 -NCT04376502 -NCT04373317 -NCT04376632 -NCT04373369 -NCT04376671 -NCT04373395 -NCT04376684 -NCT04373447 -NCT04376749 -NCT04373616 -NCT04376762 -NCT04373642 -NCT04376866 -NCT04373720 -NCT04376931 -NCT04373785 -NCT04376957 -NCT04373928 -NCT04377048 -NCT04373941 -NCT04377061 -NCT04373980 -NCT04377087 -NCT04373993 -NCT04377178 -NCT04374019 -NCT04377217 -NCT04374240 -NCT04377360 -NCT04374292 -NCT04377425 -NCT04374305 -NCT04377477 -NCT04374422 -NCT04377685 -NCT04374435 -NCT04377724 -NCT04374448 -NCT04377828 -NCT04374461 -NCT04377867 -NCT04374591 -NCT04377932 -NCT04374604 -NCT04377971 -NCT04374630 -NCT04378036 -NCT04374695 -NCT04378062 -NCT04374721 -NCT04378101 -NCT04374747 -NCT04378335 -NCT04374760 -NCT04378647 -NCT04374773 -NCT04378751 -NCT04374799 -NCT04378829 -NCT04374825 -NCT04378868 -NCT04374877 -NCT04378959 -NCT04375124 -NCT04378998 -NCT04375163 -NCT04379024 -NCT04375228 -NCT04379050 -NCT04375241 -NCT04385368 -NCT04379362 -NCT04382365 -NCT04379414 -NCT04382352 -NCT04379479 -NCT04382391 -NCT04379505 -NCT04382469 -NCT04379518 -NCT04382521 -NCT04379570 -NCT04382573 -NCT04379596 -NCT04382612 -NCT04379635 -NCT04382625 -NCT04379713 -NCT04382638 -NCT04379739 -NCT04382664 -NCT04379804 -NCT04382807 -NCT04379817 -NCT04382898 -NCT04379830 -NCT04383067 -NCT04379895 -NCT04383093 -NCT04379999 -NCT04383119 -NCT04380012 -NCT04383158 -NCT04380038 -NCT04383210 -NCT04380103 -NCT04383249 -NCT04380142 -NCT04383275 -NCT04380220 -NCT04383457 -NCT04380298 -NCT04383522 -NCT04380337 -NCT04383717 -NCT04380389 -NCT04383743 -NCT04380480 -NCT04383847 -NCT04380493 -NCT04383938 -NCT04380506 -NCT04383977 -NCT04380545 -NCT04383990 -NCT04380584 -NCT04384055 -NCT04380610 -NCT04384146 -NCT04380623 -NCT04384185 -NCT04380636 -NCT04384198 -NCT04380662 -NCT04384263 -NCT04380753 -NCT04384354 -NCT04380805 -NCT04384380 -NCT04380974 -NCT04384484 -NCT04380987 -NCT04384536 -NCT04381130 -NCT04384588 -NCT04381169 -NCT04384601 -NCT04381208 -NCT04384627 -NCT04381325 -NCT04384640 -NCT04381416 -NCT04384757 -NCT04381468 -NCT04384809 -NCT04381624 -NCT04384848 -NCT04381650 -NCT04384913 -NCT04381741 -NCT04384978 -NCT04381806 -NCT04385056 -NCT04381832 -NCT04385069 -NCT04381858 -NCT04385121 -NCT04381897 -NCT04385147 -NCT04381910 -NCT04385173 -NCT04381988 -NCT04385225 -NCT04382001 -NCT04385277 -NCT04382014 -NCT04385290 -NCT04382131 -NCT04385303 -NCT04382144 -NCT04385316 -NCT04382300 -NCT04392102 -NCT04385420 -NCT04388475 -NCT04385433 -NCT04388436 -NCT04385459 -NCT04388501 -NCT04385485 -NCT04388566 -NCT04385550 -NCT04388826 -NCT04385563 -NCT04388839 -NCT04385589 -NCT04388852 -NCT04385628 -NCT04388995 -NCT04385641 -NCT04389073 -NCT04385654 -NCT04389086 -NCT04385732 -NCT04389112 -NCT04385979 -NCT04389151 -NCT04385992 -NCT04389177 -NCT04386005 -NCT04389216 -NCT04386057 -NCT04389229 -NCT04386343 -NCT04389281 -NCT04386473 -NCT04389502 -NCT04386525 -NCT04389632 -NCT04386564 -NCT04389918 -NCT04386642 -NCT04389970 -NCT04386746 -NCT04390126 -NCT04386772 -NCT04390191 -NCT04386837 -NCT04390243 -NCT04386876 -NCT04390269 -NCT04386902 -NCT04390308 -NCT04386941 -NCT04390321 -NCT04386967 -NCT04390399 -NCT04386980 -NCT04390542 -NCT04386993 -NCT04390737 -NCT04387071 -NCT04390763 -NCT04387084 -NCT04390802 -NCT04387227 -NCT04390828 -NCT04387344 -NCT04390867 -NCT04387370 -NCT04390880 -NCT04387396 -NCT04390945 -NCT04387461 -NCT04390958 -NCT04387474 -NCT04390984 -NCT04387500 -NCT04391049 -NCT04387526 -NCT04391062 -NCT04387539 -NCT04391114 -NCT04387591 -NCT04391283 -NCT04387630 -NCT04391296 -NCT04387682 -NCT04391348 -NCT04387695 -NCT04391504 -NCT04387734 -NCT04391543 -NCT04387773 -NCT04391556 -NCT04387799 -NCT04391595 -NCT04387864 -NCT04391673 -NCT04387916 -NCT04391790 -NCT04388033 -NCT04391816 -NCT04388085 -NCT04391842 -NCT04388254 -NCT04391894 -NCT04388267 -NCT04391933 -NCT04388280 -NCT04391946 -NCT04388384 -NCT04392037 -NCT04388397 -NCT04397783 -NCT04392128 -NCT04395118 -NCT04392167 -NCT04395092 -NCT04392193 -NCT04395196 -NCT04392232 -NCT04395209 -NCT04392414 -NCT04395222 -NCT04392466 -NCT04395339 -NCT04392479 -NCT04395417 -NCT04392505 -NCT04395469 -NCT04392518 -NCT04395495 -NCT04392583 -NCT04395547 -NCT04392596 -NCT04395612 -NCT04392648 -NCT04395677 -NCT04392661 -NCT04395820 -NCT04392687 -NCT04395989 -NCT04392700 -NCT04396041 -NCT04392804 -NCT04396067 -NCT04392882 -NCT04396145 -NCT04392960 -NCT04396171 -NCT04392986 -NCT04396184 -NCT04393025 -NCT04396223 -NCT04393038 -NCT04396236 -NCT04393051 -NCT04396262 -NCT04393155 -NCT04396327 -NCT04393285 -NCT04396340 -NCT04393298 -NCT04396379 -NCT04393337 -NCT04396431 -NCT04393350 -NCT04396457 -NCT04393376 -NCT04396535 -NCT04393454 -NCT04396626 -NCT04393467 -NCT04396639 -NCT04393480 -NCT04396665 -NCT04393506 -NCT04396717 -NCT04393532 -NCT04396808 -NCT04393558 -NCT04396821 -NCT04393584 -NCT04396860 -NCT04393753 -NCT04396886 -NCT04393779 -NCT04396912 -NCT04393831 -NCT04396977 -NCT04393883 -NCT04397003 -NCT04393909 -NCT04397016 -NCT04394221 -NCT04397029 -NCT04394325 -NCT04397055 -NCT04394338 -NCT04397185 -NCT04394507 -NCT04397224 -NCT04394559 -NCT04397276 -NCT04394585 -NCT04397341 -NCT04394598 -NCT04397380 -NCT04394624 -NCT04397419 -NCT04394650 -NCT04397445 -NCT04394676 -NCT04397484 -NCT04394689 -NCT04397601 -NCT04394858 -NCT04397640 -NCT04394871 -NCT04397679 -NCT04394975 -NCT04397744 -NCT04395027 -NCT04397770 -NCT04395079 -NCT04403815 -NCT04397887 -NCT04401293 -NCT04397926 -NCT04401241 -NCT04398030 -NCT04401397 -NCT04398056 -NCT04401410 -NCT04398095 -NCT04401501 -NCT04398108 -NCT04401579 -NCT04398199 -NCT04401670 -NCT04398212 -NCT04401709 -NCT04398316 -NCT04401722 -NCT04398368 -NCT04401748 -NCT04398446 -NCT04401774 -NCT04398485 -NCT04401787 -NCT04398524 -NCT04401800 -NCT04398628 -NCT04401813 -NCT04398667 -NCT04401969 -NCT04398680 -NCT04401995 -NCT04398732 -NCT04402008 -NCT04398745 -NCT04402034 -NCT04398862 -NCT04402047 -NCT04398875 -NCT04402073 -NCT04398914 -NCT04402125 -NCT04398927 -NCT04402138 -NCT04398940 -NCT04402151 -NCT04398953 -NCT04402203 -NCT04399018 -NCT04402281 -NCT04399239 -NCT04402307 -NCT04399395 -NCT04402398 -NCT04399486 -NCT04402411 -NCT04399525 -NCT04402502 -NCT04399785 -NCT04402541 -NCT04399824 -NCT04402567 -NCT04399863 -NCT04402580 -NCT04399876 -NCT04402593 -NCT04399889 -NCT04402606 -NCT04400019 -NCT04402671 -NCT04400045 -NCT04402723 -NCT04400071 -NCT04402762 -NCT04400136 -NCT04402788 -NCT04400188 -NCT04402905 -NCT04400253 -NCT04402918 -NCT04400292 -NCT04402931 -NCT04400357 -NCT04402957 -NCT04400383 -NCT04403022 -NCT04400474 -NCT04403100 -NCT04400513 -NCT04403152 -NCT04400539 -NCT04403191 -NCT04400552 -NCT04403308 -NCT04400578 -NCT04403386 -NCT04400682 -NCT04403464 -NCT04400695 -NCT04403477 -NCT04400851 -NCT04403529 -NCT04400968 -NCT04403568 -NCT04401007 -NCT04403620 -NCT04401020 -NCT04403659 -NCT04401046 -NCT04403672 -NCT04401059 -NCT04410354 -NCT04403893 -NCT04407247 -NCT04404023 -NCT04407234 -NCT04404036 -NCT04407312 -NCT04404088 -NCT04407377 -NCT04404140 -NCT04407416 -NCT04404166 -NCT04407442 -NCT04404244 -NCT04407585 -NCT04404283 -NCT04407611 -NCT04404491 -NCT04407663 -NCT04404543 -NCT04407676 -NCT04404569 -NCT04407741 -NCT04404595 -NCT04407806 -NCT04404647 -NCT04407897 -NCT04404660 -NCT04407988 -NCT04404738 -NCT04408040 -NCT04404790 -NCT04408053 -NCT04404881 -NCT04408079 -NCT04405011 -NCT04408092 -NCT04405154 -NCT04408118 -NCT04405167 -NCT04408170 -NCT04405297 -NCT04408300 -NCT04405349 -NCT04408391 -NCT04405375 -NCT04408508 -NCT04405388 -NCT04408560 -NCT04405401 -NCT04408599 -NCT04405466 -NCT04408612 -NCT04405479 -NCT04408625 -NCT04405505 -NCT04408638 -NCT04405531 -NCT04408872 -NCT04405622 -NCT04408898 -NCT04405674 -NCT04408924 -NCT04405687 -NCT04408950 -NCT04405713 -NCT04408963 -NCT04405778 -NCT04408976 -NCT04405921 -NCT04409002 -NCT04405960 -NCT04409054 -NCT04406155 -NCT04409184 -NCT04406194 -NCT04409223 -NCT04406272 -NCT04409236 -NCT04406285 -NCT04409288 -NCT04406337 -NCT04409301 -NCT04406376 -NCT04409522 -NCT04406402 -NCT04409561 -NCT04406493 -NCT04409639 -NCT04406506 -NCT04409782 -NCT04406519 -NCT04409860 -NCT04406532 -NCT04409886 -NCT04406597 -NCT04409990 -NCT04406610 -NCT04410042 -NCT04406623 -NCT04410107 -NCT04406714 -NCT04410133 -NCT04406857 -NCT04410185 -NCT04406961 -NCT04410224 -NCT04407000 -NCT04410237 -NCT04407013 -NCT04410276 -NCT04407182 -NCT04416685 -NCT04410367 -NCT04413643 -NCT04410445 -NCT04413448 -NCT04410484 -NCT04413656 -NCT04410536 -NCT04413734 -NCT04410549 -NCT04413760 -NCT04410562 -NCT04413890 -NCT04410601 -NCT04413968 -NCT04410653 -NCT04414033 -NCT04410796 -NCT04414059 -NCT04410809 -NCT04414124 -NCT04410848 -NCT04414163 -NCT04410874 -NCT04414254 -NCT04410887 -NCT04414306 -NCT04410900 -NCT04414358 -NCT04410939 -NCT04414384 -NCT04411069 -NCT04414475 -NCT04411134 -NCT04414514 -NCT04411147 -NCT04414540 -NCT04411251 -NCT04414566 -NCT04411433 -NCT04414631 -NCT04411485 -NCT04414644 -NCT04411524 -NCT04414722 -NCT04411537 -NCT04414748 -NCT04411563 -NCT04414787 -NCT04411589 -NCT04414800 -NCT04411706 -NCT04414904 -NCT04411810 -NCT04414956 -NCT04411849 -NCT04414969 -NCT04411888 -NCT04415008 -NCT04411901 -NCT04415034 -NCT04411966 -NCT04415086 -NCT04411992 -NCT04415138 -NCT04412018 -NCT04415255 -NCT04412174 -NCT04415281 -NCT04412213 -NCT04415294 -NCT04412408 -NCT04415307 -NCT04412564 -NCT04415320 -NCT04412616 -NCT04415385 -NCT04412629 -NCT04415463 -NCT04412642 -NCT04415476 -NCT04412798 -NCT04415502 -NCT04412863 -NCT04415619 -NCT04412889 -NCT04415710 -NCT04413058 -NCT04415736 -NCT04413084 -NCT04415853 -NCT04413123 -NCT04415944 -NCT04413149 -NCT04415983 -NCT04413175 -NCT04416035 -NCT04413214 -NCT04416087 -NCT04413227 -NCT04416113 -NCT04413292 -NCT04416165 -NCT04413331 -NCT04416451 -NCT04413357 -NCT04416516 -NCT04413383 -NCT04416568 -NCT04413409 -NCT04416633 -NCT04413435 -NCT04422639 -NCT04416750 -NCT04419402 -NCT04416802 -NCT04419389 -NCT04416828 -NCT04419519 -NCT04416854 -NCT04419532 -NCT04416984 -NCT04419545 -NCT04417023 -NCT04419558 -NCT04417062 -NCT04419623 -NCT04417088 -NCT04419649 -NCT04417166 -NCT04419753 -NCT04417192 -NCT04419792 -NCT04417231 -NCT04419857 -NCT04417361 -NCT04419909 -NCT04417400 -NCT04420026 -NCT04417465 -NCT04420130 -NCT04417530 -NCT04420208 -NCT04417556 -NCT04420234 -NCT04417569 -NCT04420260 -NCT04417608 -NCT04420273 -NCT04417621 -NCT04420533 -NCT04417647 -NCT04420598 -NCT04417660 -NCT04420637 -NCT04417673 -NCT04420663 -NCT04417686 -NCT04420689 -NCT04417699 -NCT04420702 -NCT04417764 -NCT04420754 -NCT04417777 -NCT04420884 -NCT04417790 -NCT04420949 -NCT04417803 -NCT04420975 -NCT04417829 -NCT04421027 -NCT04417933 -NCT04421053 -NCT04417985 -NCT04421131 -NCT04418089 -NCT04421157 -NCT04418141 -NCT04421183 -NCT04418154 -NCT04421222 -NCT04418167 -NCT04421352 -NCT04418180 -NCT04421378 -NCT04418219 -NCT04421469 -NCT04418401 -NCT04421482 -NCT04418414 -NCT04421547 -NCT04418635 -NCT04421560 -NCT04418648 -NCT04421820 -NCT04418661 -NCT04421859 -NCT04418700 -NCT04421963 -NCT04418713 -NCT04422132 -NCT04418739 -NCT04422184 -NCT04418804 -NCT04422210 -NCT04418843 -NCT04422223 -NCT04418856 -NCT04422249 -NCT04418895 -NCT04422288 -NCT04419025 -NCT04422314 -NCT04419038 -NCT04422366 -NCT04419077 -NCT04422392 -NCT04419168 -NCT04422431 -NCT04419181 -NCT04422457 -NCT04419272 -NCT04422600 -NCT04419324 -NCT04428905 -NCT04422691 -NCT04425655 -NCT04422912 -NCT04425642 -NCT04423029 -NCT04425681 -NCT04423055 -NCT04425824 -NCT04423146 -NCT04425863 -NCT04423172 -NCT04425876 -NCT04423185 -NCT04425915 -NCT04423211 -NCT04425967 -NCT04423354 -NCT04426006 -NCT04423380 -NCT04426019 -NCT04423406 -NCT04426123 -NCT04423419 -NCT04426344 -NCT04423679 -NCT04426435 -NCT04423718 -NCT04426578 -NCT04423835 -NCT04426669 -NCT04423848 -NCT04426721 -NCT04423913 -NCT04426825 -NCT04423926 -NCT04426877 -NCT04423965 -NCT04426955 -NCT04424004 -NCT04427072 -NCT04424043 -NCT04427111 -NCT04424121 -NCT04427215 -NCT04424134 -NCT04427228 -NCT04424147 -NCT04427293 -NCT04424407 -NCT04427306 -NCT04424472 -NCT04427449 -NCT04424485 -NCT04427501 -NCT04424576 -NCT04427527 -NCT04424602 -NCT04427553 -NCT04424641 -NCT04427631 -NCT04424654 -NCT04427670 -NCT04424680 -NCT04427709 -NCT04424719 -NCT04427774 -NCT04424732 -NCT04427787 -NCT04424758 -NCT04427800 -NCT04424901 -NCT04427813 -NCT04424914 -NCT04427826 -NCT04424940 -NCT04427891 -NCT04424966 -NCT04428047 -NCT04424979 -NCT04428073 -NCT04425018 -NCT04428086 -NCT04425070 -NCT04428138 -NCT04425083 -NCT04428151 -NCT04425122 -NCT04428203 -NCT04425135 -NCT04428333 -NCT04425148 -NCT04428398 -NCT04425226 -NCT04428411 -NCT04425239 -NCT04428463 -NCT04425252 -NCT04428554 -NCT04425265 -NCT04428567 -NCT04425291 -NCT04428619 -NCT04425421 -NCT04428671 -NCT04425447 -NCT04428749 -NCT04425512 -NCT04428788 -NCT04425577 -NCT04428879 -NCT04425616 -NCT04434989 -NCT04429061 -NCT04432337 -NCT04429087 -NCT04432233 -NCT04429139 -NCT04432376 -NCT04429191 -NCT04432402 -NCT04429204 -NCT04432454 -NCT04429321 -NCT04432506 -NCT04429438 -NCT04432597 -NCT04429451 -NCT04432649 -NCT04429490 -NCT04432714 -NCT04429503 -NCT04432727 -NCT04429542 -NCT04432753 -NCT04429581 -NCT04432818 -NCT04429633 -NCT04432857 -NCT04429698 -NCT04433013 -NCT04429880 -NCT04433039 -NCT04429893 -NCT04433143 -NCT04429906 -NCT04433156 -NCT04429919 -NCT04433169 -NCT04429945 -NCT04433182 -NCT04430023 -NCT04433221 -NCT04430036 -NCT04433494 -NCT04430166 -NCT04433507 -NCT04430192 -NCT04433546 -NCT04430335 -NCT04433611 -NCT04430348 -NCT04433650 -NCT04430361 -NCT04433754 -NCT04430452 -NCT04433793 -NCT04430530 -NCT04433819 -NCT04430569 -NCT04433871 -NCT04430595 -NCT04433923 -NCT04430699 -NCT04433936 -NCT04430738 -NCT04433949 -NCT04430842 -NCT04434040 -NCT04430855 -NCT04434053 -NCT04430881 -NCT04434144 -NCT04430894 -NCT04434196 -NCT04430933 -NCT04434222 -NCT04430946 -NCT04434274 -NCT04430985 -NCT04434326 -NCT04431024 -NCT04434378 -NCT04431089 -NCT04434404 -NCT04431193 -NCT04434443 -NCT04431206 -NCT04434469 -NCT04431258 -NCT04434482 -NCT04431271 -NCT04434508 -NCT04431414 -NCT04434521 -NCT04431518 -NCT04434547 -NCT04431609 -NCT04434560 -NCT04431622 -NCT04434612 -NCT04431635 -NCT04434651 -NCT04431648 -NCT04434677 -NCT04431674 -NCT04434768 -NCT04431726 -NCT04434898 -NCT04431830 -NCT04434937 -NCT04431895 -NCT04434976 -NCT04432207 -NCT04441203 -NCT04435197 -NCT04438538 -NCT04435210 -NCT04438525 -NCT04435444 -NCT04438564 -NCT04435652 -NCT04438577 -NCT04435665 -NCT04438655 -NCT04435691 -NCT04438824 -NCT04435704 -NCT04438902 -NCT04435860 -NCT04439006 -NCT04435938 -NCT04439071 -NCT04435951 -NCT04439084 -NCT04435977 -NCT04439110 -NCT04436029 -NCT04439123 -NCT04436042 -NCT04439136 -NCT04436081 -NCT04439149 -NCT04436107 -NCT04439162 -NCT04436133 -NCT04439175 -NCT04436159 -NCT04439188 -NCT04436341 -NCT04439201 -NCT04436367 -NCT04439214 -NCT04436406 -NCT04439227 -NCT04436601 -NCT04439240 -NCT04436692 -NCT04439253 -NCT04436705 -NCT04439266 -NCT04436744 -NCT04439279 -NCT04436796 -NCT04439292 -NCT04436809 -NCT04439305 -NCT04436835 -NCT04439318 -NCT04436965 -NCT04439331 -NCT04436991 -NCT04439344 -NCT04437030 -NCT04439357 -NCT04437043 -NCT04439565 -NCT04437108 -NCT04439721 -NCT04437134 -NCT04439799 -NCT04437147 -NCT04439890 -NCT04437160 -NCT04439955 -NCT04437212 -NCT04440150 -NCT04437277 -NCT04440189 -NCT04437290 -NCT04440267 -NCT04437329 -NCT04440358 -NCT04437381 -NCT04440436 -NCT04437407 -NCT04440579 -NCT04437563 -NCT04440605 -NCT04437602 -NCT04440644 -NCT04437784 -NCT04440683 -NCT04437810 -NCT04440735 -NCT04437953 -NCT04440865 -NCT04437979 -NCT04440917 -NCT04438005 -NCT04440930 -NCT04438044 -NCT04440943 -NCT04438057 -NCT04440956 -NCT04438083 -NCT04440982 -NCT04438239 -NCT04440995 -NCT04438304 -NCT04441099 -NCT04438382 -NCT04441138 -NCT04438447 -NCT04441164 -NCT04438486 -NCT04448002 -NCT04441216 -NCT04445025 -NCT04441242 -NCT04445012 -NCT04441281 -NCT04445064 -NCT04441411 -NCT04445415 -NCT04441450 -NCT04445675 -NCT04441489 -NCT04445701 -NCT04441541 -NCT04445792 -NCT04441580 -NCT04445844 -NCT04441606 -NCT04445896 -NCT04441645 -NCT04445974 -NCT04441762 -NCT04445987 -NCT04441827 -NCT04446052 -NCT04441840 -NCT04446091 -NCT04442022 -NCT04446117 -NCT04442035 -NCT04446130 -NCT04442048 -NCT04446260 -NCT04442126 -NCT04446325 -NCT04442321 -NCT04446338 -NCT04442412 -NCT04446351 -NCT04442490 -NCT04446377 -NCT04442555 -NCT04446416 -NCT04442581 -NCT04446429 -NCT04442646 -NCT04446494 -NCT04442672 -NCT04446559 -NCT04442724 -NCT04446624 -NCT04442841 -NCT04446663 -NCT04442984 -NCT04446728 -NCT04443010 -NCT04446949 -NCT04443036 -NCT04446962 -NCT04443049 -NCT04447027 -NCT04443062 -NCT04447066 -NCT04443088 -NCT04447079 -NCT04443296 -NCT04447092 -NCT04443309 -NCT04447105 -NCT04443322 -NCT04447118 -NCT04443348 -NCT04447144 -NCT04443413 -NCT04447183 -NCT04443452 -NCT04447235 -NCT04443543 -NCT04447274 -NCT04443686 -NCT04447313 -NCT04443751 -NCT04447326 -NCT04443829 -NCT04447352 -NCT04444024 -NCT04447391 -NCT04444141 -NCT04447482 -NCT04444167 -NCT04447547 -NCT04444193 -NCT04447573 -NCT04444219 -NCT04447612 -NCT04444232 -NCT04447664 -NCT04444297 -NCT04447677 -NCT04444427 -NCT04447703 -NCT04444531 -NCT04447716 -NCT04444609 -NCT04447755 -NCT04444622 -NCT04447768 -NCT04444869 -NCT04447872 -NCT04444921 -NCT04447989 -NCT04444986 -NCT04454125 -NCT04448145 -NCT04451473 -NCT04448184 -NCT04451369 -NCT04448249 -NCT04451616 -NCT04448301 -NCT04451629 -NCT04448340 -NCT04451707 -NCT04448379 -NCT04451928 -NCT04448522 -NCT04452019 -NCT04448574 -NCT04452032 -NCT04448600 -NCT04452084 -NCT04448613 -NCT04452162 -NCT04448678 -NCT04452214 -NCT04448691 -NCT04452227 -NCT04448834 -NCT04452253 -NCT04448873 -NCT04452292 -NCT04448886 -NCT04452305 -NCT04448964 -NCT04452357 -NCT04449133 -NCT04452370 -NCT04449146 -NCT04452396 -NCT04449237 -NCT04452409 -NCT04449289 -NCT04452422 -NCT04449419 -NCT04452461 -NCT04449445 -NCT04452526 -NCT04449458 -NCT04452578 -NCT04449510 -NCT04452591 -NCT04449523 -NCT04452604 -NCT04449549 -NCT04452734 -NCT04449614 -NCT04452760 -NCT04449666 -NCT04452799 -NCT04449679 -NCT04452812 -NCT04449809 -NCT04452825 -NCT04449822 -NCT04452864 -NCT04449848 -NCT04452877 -NCT04449861 -NCT04452890 -NCT04449874 -NCT04452929 -NCT04450043 -NCT04452955 -NCT04450069 -NCT04453020 -NCT04450082 -NCT04453046 -NCT04450160 -NCT04453072 -NCT04450173 -NCT04453241 -NCT04450264 -NCT04453306 -NCT04450290 -NCT04453345 -NCT04450316 -NCT04453384 -NCT04450407 -NCT04453423 -NCT04450498 -NCT04453501 -NCT04450524 -NCT04453527 -NCT04450563 -NCT04453813 -NCT04450628 -NCT04453826 -NCT04450654 -NCT04453839 -NCT04450706 -NCT04453878 -NCT04450732 -NCT04453904 -NCT04450836 -NCT04453930 -NCT04450901 -NCT04454047 -NCT04451200 -NCT04454060 -NCT04451252 -NCT04454086 -NCT04451265 -NCT04454099 -NCT04451330 -NCT04460274 -NCT04454164 -NCT04457297 -NCT04454177 -NCT04457284 -NCT04454268 -NCT04457349 -NCT04454320 -NCT04457362 -NCT04454437 -NCT04457401 -NCT04454450 -NCT04457440 -NCT04454476 -NCT04457492 -NCT04454489 -NCT04457518 -NCT04454502 -NCT04457596 -NCT04454528 -NCT04457674 -NCT04454541 -NCT04457700 -NCT04454697 -NCT04457778 -NCT04454723 -NCT04457830 -NCT04454762 -NCT04457843 -NCT04454866 -NCT04457869 -NCT04454892 -NCT04457882 -NCT04454905 -NCT04457895 -NCT04454970 -NCT04458168 -NCT04454983 -NCT04458194 -NCT04455139 -NCT04458207 -NCT04455425 -NCT04458259 -NCT04455438 -NCT04458272 -NCT04455503 -NCT04458311 -NCT04455555 -NCT04458376 -NCT04455568 -NCT04458389 -NCT04455594 -NCT04458402 -NCT04455620 -NCT04458532 -NCT04455698 -NCT04458597 -NCT04455750 -NCT04458610 -NCT04455802 -NCT04458636 -NCT04455828 -NCT04458662 -NCT04455932 -NCT04458688 -NCT04455958 -NCT04458753 -NCT04456023 -NCT04458792 -NCT04456140 -NCT04458909 -NCT04456192 -NCT04458922 -NCT04456205 -NCT04458974 -NCT04456218 -NCT04459065 -NCT04456322 -NCT04459078 -NCT04456387 -NCT04459169 -NCT04456426 -NCT04459273 -NCT04456517 -NCT04459286 -NCT04456582 -NCT04459416 -NCT04456699 -NCT04459611 -NCT04456894 -NCT04459663 -NCT04456920 -NCT04459702 -NCT04456972 -NCT04459715 -NCT04457011 -NCT04459754 -NCT04457024 -NCT04459897 -NCT04457076 -NCT04460014 -NCT04457089 -NCT04460040 -NCT04457128 -NCT04460053 -NCT04457180 -NCT04460066 -NCT04457232 -NCT04460235 -NCT04457245 -NCT04460248 -NCT04457258 -NCT04465734 -NCT04460300 -NCT04462913 -NCT04460326 -NCT04462848 -NCT04460352 -NCT04462926 -NCT04460391 -NCT04462965 -NCT04460404 -NCT04462991 -NCT04460430 -NCT04463056 -NCT04460456 -NCT04463069 -NCT04460495 -NCT04463082 -NCT04460508 -NCT04463095 -NCT04460599 -NCT04463121 -NCT04460625 -NCT04463186 -NCT04460729 -NCT04463316 -NCT04460807 -NCT04463368 -NCT04460872 -NCT04463420 -NCT04460937 -NCT04463459 -NCT04460963 -NCT04463524 -NCT04460989 -NCT04463537 -NCT04461171 -NCT04463719 -NCT04461275 -NCT04463732 -NCT04461327 -NCT04463758 -NCT04461340 -NCT04463771 -NCT04461418 -NCT04463927 -NCT04461457 -NCT04463992 -NCT04461509 -NCT04464174 -NCT04461561 -NCT04464200 -NCT04461574 -NCT04464226 -NCT04461587 -NCT04464382 -NCT04461600 -NCT04464512 -NCT04461626 -NCT04464551 -NCT04461639 -NCT04464603 -NCT04461652 -NCT04464759 -NCT04461678 -NCT04464798 -NCT04461730 -NCT04464811 -NCT04461808 -NCT04464837 -NCT04461821 -NCT04464876 -NCT04461886 -NCT04464889 -NCT04461938 -NCT04464915 -NCT04462003 -NCT04464967 -NCT04462042 -NCT04465045 -NCT04462068 -NCT04465084 -NCT04462081 -NCT04465097 -NCT04462185 -NCT04465123 -NCT04462198 -NCT04465162 -NCT04462276 -NCT04465253 -NCT04462302 -NCT04465331 -NCT04462328 -NCT04465396 -NCT04462354 -NCT04465435 -NCT04462367 -NCT04465487 -NCT04462406 -NCT04465500 -NCT04462445 -NCT04465513 -NCT04462471 -NCT04465539 -NCT04462601 -NCT04465591 -NCT04462666 -NCT04465604 -NCT04462705 -NCT04465643 -NCT04462770 -NCT04465682 -NCT04462809 -NCT04472910 -NCT04465760 -NCT04470076 -NCT04465786 -NCT04470024 -NCT04465968 -NCT04470141 -NCT04466020 -NCT04470323 -NCT04466072 -NCT04470336 -NCT04466241 -NCT04470479 -NCT04466254 -NCT04470518 -NCT04466475 -NCT04470531 -NCT04466592 -NCT04470583 -NCT04466774 -NCT04470674 -NCT04466826 -NCT04470726 -NCT04466891 -NCT04470843 -NCT04466917 -NCT04470856 -NCT04467021 -NCT04471064 -NCT04467190 -NCT04471155 -NCT04467203 -NCT04471194 -NCT04467242 -NCT04471220 -NCT04467281 -NCT04471233 -NCT04467515 -NCT04471259 -NCT04467541 -NCT04471272 -NCT04467554 -NCT04471285 -NCT04467593 -NCT04471298 -NCT04467684 -NCT04471415 -NCT04467710 -NCT04471428 -NCT04467736 -NCT04471480 -NCT04467853 -NCT04471597 -NCT04467983 -NCT04471675 -NCT04468061 -NCT04471727 -NCT04468165 -NCT04471740 -NCT04468191 -NCT04471805 -NCT04468243 -NCT04471818 -NCT04468516 -NCT04471831 -NCT04468542 -NCT04471844 -NCT04468607 -NCT04471961 -NCT04468841 -NCT04471974 -NCT04468867 -NCT04471987 -NCT04468919 -NCT04472026 -NCT04469075 -NCT04472039 -NCT04469127 -NCT04472052 -NCT04469140 -NCT04472130 -NCT04469153 -NCT04472169 -NCT04469179 -NCT04472312 -NCT04469205 -NCT04472364 -NCT04469244 -NCT04472377 -NCT04469296 -NCT04472429 -NCT04469309 -NCT04472468 -NCT04469426 -NCT04472546 -NCT04469478 -NCT04472572 -NCT04469504 -NCT04472650 -NCT04469517 -NCT04472702 -NCT04469530 -NCT04472767 -NCT04469556 -NCT04472806 -NCT04469699 -NCT04472832 -NCT04469725 -NCT04472845 -NCT04469764 -NCT04472858 -NCT04469946 -NCT04479241 -NCT04472923 -NCT04476420 -NCT04472949 -NCT04476394 -NCT04472988 -NCT04476459 -NCT04473040 -NCT04476485 -NCT04473066 -NCT04476511 -NCT04473170 -NCT04476537 -NCT04473339 -NCT04476563 -NCT04473430 -NCT04476641 -NCT04473443 -NCT04476654 -NCT04473716 -NCT04476719 -NCT04473742 -NCT04476745 -NCT04473768 -NCT04476797 -NCT04473781 -NCT04476875 -NCT04473833 -NCT04476888 -NCT04473859 -NCT04476927 -NCT04473872 -NCT04477005 -NCT04473911 -NCT04477057 -NCT04473937 -NCT04477096 -NCT04474119 -NCT04477135 -NCT04474184 -NCT04477200 -NCT04474353 -NCT04477291 -NCT04474405 -NCT04477343 -NCT04474470 -NCT04477486 -NCT04474613 -NCT04477512 -NCT04474626 -NCT04477616 -NCT04474678 -NCT04477746 -NCT04474808 -NCT04477759 -NCT04474821 -NCT04477772 -NCT04474847 -NCT04477785 -NCT04474912 -NCT04477837 -NCT04474925 -NCT04477850 -NCT04474951 -NCT04478110 -NCT04474964 -NCT04478123 -NCT04475016 -NCT04478162 -NCT04475029 -NCT04478175 -NCT04475133 -NCT04478227 -NCT04475159 -NCT04478266 -NCT04475198 -NCT04478279 -NCT04475523 -NCT04478292 -NCT04475640 -NCT04478318 -NCT04475705 -NCT04478344 -NCT04475731 -NCT04478409 -NCT04475796 -NCT04478461 -NCT04475809 -NCT04478487 -NCT04475874 -NCT04478513 -NCT04475939 -NCT04478526 -NCT04476004 -NCT04478578 -NCT04476030 -NCT04478669 -NCT04476095 -NCT04478695 -NCT04476121 -NCT04478851 -NCT04476199 -NCT04479085 -NCT04476251 -NCT04479098 -NCT04476264 -NCT04479111 -NCT04476303 -NCT04479163 -NCT04476329 -NCT04479202 -NCT04476342 -NCT04484532 -NCT04479267 -NCT04481633 -NCT04479280 -NCT04481620 -NCT04479306 -NCT04481659 -NCT04479319 -NCT04481672 -NCT04479423 -NCT04481763 -NCT04479436 -NCT04481802 -NCT04479449 -NCT04481841 -NCT04479501 -NCT04481867 -NCT04479514 -NCT04481893 -NCT04479527 -NCT04481932 -NCT04479579 -NCT04481958 -NCT04479592 -NCT04482036 -NCT04479657 -NCT04482075 -NCT04479696 -NCT04482114 -NCT04479761 -NCT04482127 -NCT04479787 -NCT04482244 -NCT04479826 -NCT04482257 -NCT04479904 -NCT04482309 -NCT04480008 -NCT04482595 -NCT04480034 -NCT04482686 -NCT04480060 -NCT04482699 -NCT04480099 -NCT04482712 -NCT04480125 -NCT04482738 -NCT04480164 -NCT04482829 -NCT04480190 -NCT04482855 -NCT04480203 -NCT04482894 -NCT04480216 -NCT04482907 -NCT04480229 -NCT04482933 -NCT04480268 -NCT04482946 -NCT04480307 -NCT04483076 -NCT04480372 -NCT04483154 -NCT04480398 -NCT04483206 -NCT04480437 -NCT04483219 -NCT04480502 -NCT04483284 -NCT04480541 -NCT04483362 -NCT04480619 -NCT04483414 -NCT04480645 -NCT04483505 -NCT04480723 -NCT04483544 -NCT04480788 -NCT04483557 -NCT04480853 -NCT04483726 -NCT04480866 -NCT04483739 -NCT04480983 -NCT04483778 -NCT04481009 -NCT04483830 -NCT04481022 -NCT04483947 -NCT04481035 -NCT04484012 -NCT04481048 -NCT04484038 -NCT04481061 -NCT04484064 -NCT04481100 -NCT04484077 -NCT04481113 -NCT04484103 -NCT04481204 -NCT04484142 -NCT04481230 -NCT04484415 -NCT04481256 -NCT04484467 -NCT04481321 -NCT04484480 -NCT04481360 -NCT04484493 -NCT04481464 -NCT04484506 -NCT04481607 -NCT04491565 -NCT04484545 -NCT04487704 -NCT04484597 -NCT04487639 -NCT04484623 -NCT04487756 -NCT04484636 -NCT04487847 -NCT04484649 -NCT04487912 -NCT04484701 -NCT04488003 -NCT04484714 -NCT04488016 -NCT04484818 -NCT04488068 -NCT04484909 -NCT04488107 -NCT04485013 -NCT04488120 -NCT04485026 -NCT04488159 -NCT04485039 -NCT04488224 -NCT04485052 -NCT04488354 -NCT04485065 -NCT04488614 -NCT04485247 -NCT04488679 -NCT04485286 -NCT04488705 -NCT04485312 -NCT04488783 -NCT04485403 -NCT04488822 -NCT04485416 -NCT04488965 -NCT04485559 -NCT04489134 -NCT04485637 -NCT04489173 -NCT04485650 -NCT04489212 -NCT04485767 -NCT04489420 -NCT04485923 -NCT04489693 -NCT04485949 -NCT04489706 -NCT04486105 -NCT04489745 -NCT04486131 -NCT04489758 -NCT04486183 -NCT04489771 -NCT04486287 -NCT04489862 -NCT04486326 -NCT04489888 -NCT04486352 -NCT04489940 -NCT04486378 -NCT04490161 -NCT04486391 -NCT04490239 -NCT04486573 -NCT04490252 -NCT04486651 -NCT04490421 -NCT04486716 -NCT04490512 -NCT04486742 -NCT04490551 -NCT04486755 -NCT04490590 -NCT04486781 -NCT04490603 -NCT04486833 -NCT04490694 -NCT04486846 -NCT04490707 -NCT04486872 -NCT04490733 -NCT04486911 -NCT04490746 -NCT04486937 -NCT04490824 -NCT04486976 -NCT04490889 -NCT04487002 -NCT04490954 -NCT04487067 -NCT04490967 -NCT04487080 -NCT04490993 -NCT04487093 -NCT04491006 -NCT04487106 -NCT04491084 -NCT04487223 -NCT04491110 -NCT04487236 -NCT04491162 -NCT04487327 -NCT04491370 -NCT04487340 -NCT04491435 -NCT04487561 -NCT04491513 -NCT04487587 -NCT04497688 -NCT04491591 -NCT04494945 -NCT04491643 -NCT04494763 -NCT04491734 -NCT04494958 -NCT04491747 -NCT04495010 -NCT04491799 -NCT04495088 -NCT04491851 -NCT04495127 -NCT04491916 -NCT04495153 -NCT04491942 -NCT04495179 -NCT04491955 -NCT04495218 -NCT04492007 -NCT04495257 -NCT04492033 -NCT04495296 -NCT04492046 -NCT04495309 -NCT04492150 -NCT04495348 -NCT04492163 -NCT04495387 -NCT04492176 -NCT04495439 -NCT04492215 -NCT04495556 -NCT04492293 -NCT04495569 -NCT04492397 -NCT04495621 -NCT04492410 -NCT04495660 -NCT04492488 -NCT04495699 -NCT04492553 -NCT04495764 -NCT04492566 -NCT04495777 -NCT04492592 -NCT04495894 -NCT04492865 -NCT04495920 -NCT04492904 -NCT04496011 -NCT04492995 -NCT04496089 -NCT04493034 -NCT04496219 -NCT04493060 -NCT04496310 -NCT04493099 -NCT04496349 -NCT04493125 -NCT04496440 -NCT04493138 -NCT04496479 -NCT04493164 -NCT04496492 -NCT04493177 -NCT04496609 -NCT04493203 -NCT04496635 -NCT04493307 -NCT04496674 -NCT04493333 -NCT04496726 -NCT04493411 -NCT04496739 -NCT04493489 -NCT04496778 -NCT04493593 -NCT04496791 -NCT04493619 -NCT04496960 -NCT04493658 -NCT04496973 -NCT04493853 -NCT04496986 -NCT04493892 -NCT04497012 -NCT04494009 -NCT04497038 -NCT04494022 -NCT04497116 -NCT04494061 -NCT04497142 -NCT04494113 -NCT04497194 -NCT04494204 -NCT04497285 -NCT04494295 -NCT04497298 -NCT04494334 -NCT04497311 -NCT04494373 -NCT04497337 -NCT04494425 -NCT04497428 -NCT04494503 -NCT04497454 -NCT04494529 -NCT04497493 -NCT04494542 -NCT04497584 -NCT04494620 -NCT04503473 -NCT04497701 -NCT04500704 -NCT04497714 -NCT04500587 -NCT04497831 -NCT04500717 -NCT04497844 -NCT04501029 -NCT04497961 -NCT04501055 -NCT04497987 -NCT04501081 -NCT04498052 -NCT04501094 -NCT04498117 -NCT04501120 -NCT04498130 -NCT04501159 -NCT04498221 -NCT04501250 -NCT04498325 -NCT04501263 -NCT04498520 -NCT04501276 -NCT04498533 -NCT04501419 -NCT04498546 -NCT04501445 -NCT04498572 -NCT04501484 -NCT04498611 -NCT04501510 -NCT04498650 -NCT04501523 -NCT04498689 -NCT04501614 -NCT04498702 -NCT04501705 -NCT04498767 -NCT04501718 -NCT04498793 -NCT04501744 -NCT04498936 -NCT04501770 -NCT04499053 -NCT04501874 -NCT04499118 -NCT04501926 -NCT04499157 -NCT04501939 -NCT04499339 -NCT04502030 -NCT04499352 -NCT04502082 -NCT04499365 -NCT04502095 -NCT04499378 -NCT04502186 -NCT04499430 -NCT04502199 -NCT04499469 -NCT04502264 -NCT04499521 -NCT04502394 -NCT04499573 -NCT04502407 -NCT04499586 -NCT04502446 -NCT04499677 -NCT04502459 -NCT04499833 -NCT04502524 -NCT04499924 -NCT04502550 -NCT04499950 -NCT04502602 -NCT04500041 -NCT04502641 -NCT04500067 -NCT04502680 -NCT04500080 -NCT04502706 -NCT04500106 -NCT04502719 -NCT04500145 -NCT04502745 -NCT04500171 -NCT04502797 -NCT04500223 -NCT04502888 -NCT04500262 -NCT04502927 -NCT04500288 -NCT04503044 -NCT04500301 -NCT04503070 -NCT04500314 -NCT04503096 -NCT04500353 -NCT04503148 -NCT04500392 -NCT04503200 -NCT04500405 -NCT04503265 -NCT04500418 -NCT04503278 -NCT04500431 -NCT04503330 -NCT04500548 -NCT04503460 -NCT04500561 -NCT04509323 -NCT04503538 -NCT04506671 -NCT04503564 -NCT04506658 -NCT04503668 -NCT04506684 -NCT04503681 -NCT04506775 -NCT04503694 -NCT04506840 -NCT04503733 -NCT04506853 -NCT04503772 -NCT04506879 -NCT04503785 -NCT04506983 -NCT04503850 -NCT04507009 -NCT04503902 -NCT04507035 -NCT04503941 -NCT04507048 -NCT04503967 -NCT04507217 -NCT04503980 -NCT04507347 -NCT04504032 -NCT04507373 -NCT04504071 -NCT04507477 -NCT04504110 -NCT04507555 -NCT04504227 -NCT04507568 -NCT04504331 -NCT04507698 -NCT04504461 -NCT04507789 -NCT04504487 -NCT04507828 -NCT04504526 -NCT04507841 -NCT04504565 -NCT04507893 -NCT04504604 -NCT04507932 -NCT04504669 -NCT04507984 -NCT04504708 -NCT04508023 -NCT04504825 -NCT04508088 -NCT04504838 -NCT04508140 -NCT04504916 -NCT04508179 -NCT04504942 -NCT04508205 -NCT04505150 -NCT04508257 -NCT04505215 -NCT04508283 -NCT04505254 -NCT04508309 -NCT04505267 -NCT04508348 -NCT04505293 -NCT04508361 -NCT04505475 -NCT04508387 -NCT04505553 -NCT04508400 -NCT04505592 -NCT04508426 -NCT04505683 -NCT04508452 -NCT04505696 -NCT04508491 -NCT04505735 -NCT04508647 -NCT04505813 -NCT04508660 -NCT04505826 -NCT04508686 -NCT04505839 -NCT04508725 -NCT04505956 -NCT04508764 -NCT04505995 -NCT04508790 -NCT04506008 -NCT04508816 -NCT04506086 -NCT04508829 -NCT04506138 -NCT04508842 -NCT04506242 -NCT04509063 -NCT04506281 -NCT04509154 -NCT04506359 -NCT04509167 -NCT04506411 -NCT04509180 -NCT04506476 -NCT04509271 -NCT04506528 -NCT04509284 -NCT04506554 -NCT04509310 -NCT04506567 -NCT04514419 -NCT04509349 -NCT04512144 -NCT04509362 -NCT04512105 -NCT04509466 -NCT04512170 -NCT04509492 -NCT04512196 -NCT04509557 -NCT04512209 -NCT04509570 -NCT04512235 -NCT04509596 -NCT04512261 -NCT04509609 -NCT04512352 -NCT04509622 -NCT04512417 -NCT04509635 -NCT04512430 -NCT04509648 -NCT04512495 -NCT04509661 -NCT04512508 -NCT04509726 -NCT04512534 -NCT04509765 -NCT04512547 -NCT04509921 -NCT04512599 -NCT04509960 -NCT04512716 -NCT04510051 -NCT04512820 -NCT04510064 -NCT04512885 -NCT04510077 -NCT04512911 -NCT04510103 -NCT04512937 -NCT04510246 -NCT04512963 -NCT04510259 -NCT04513002 -NCT04510285 -NCT04513028 -NCT04510311 -NCT04513054 -NCT04510402 -NCT04513067 -NCT04510415 -NCT04513093 -NCT04510428 -NCT04513171 -NCT04510454 -NCT04513197 -NCT04510584 -NCT04513223 -NCT04510597 -NCT04513288 -NCT04510610 -NCT04513301 -NCT04510636 -NCT04513366 -NCT04510714 -NCT04513405 -NCT04510727 -NCT04513418 -NCT04510818 -NCT04513431 -NCT04510896 -NCT04513444 -NCT04510935 -NCT04513522 -NCT04511013 -NCT04513639 -NCT04511026 -NCT04513665 -NCT04511039 -NCT04513678 -NCT04511052 -NCT04513704 -NCT04511078 -NCT04513717 -NCT04511130 -NCT04513808 -NCT04511351 -NCT04513821 -NCT04511455 -NCT04513860 -NCT04511533 -NCT04513925 -NCT04511689 -NCT04513951 -NCT04511702 -NCT04513977 -NCT04511793 -NCT04514029 -NCT04511832 -NCT04514042 -NCT04511845 -NCT04514081 -NCT04511871 -NCT04514159 -NCT04511936 -NCT04514250 -NCT04511975 -NCT04514328 -NCT04511988 -NCT04514393 -NCT04512092 -NCT04520412 -NCT04514445 -NCT04517539 -NCT04514484 -NCT04517526 -NCT04514497 -NCT04517630 -NCT04514510 -NCT04517643 -NCT04514614 -NCT04517708 -NCT04514692 -NCT04517747 -NCT04514718 -NCT04517955 -NCT04514796 -NCT04518046 -NCT04514809 -NCT04518085 -NCT04514822 -NCT04518098 -NCT04514835 -NCT04518124 -NCT04514887 -NCT04518137 -NCT04515004 -NCT04518280 -NCT04515043 -NCT04518345 -NCT04515238 -NCT04518410 -NCT04515394 -NCT04518436 -NCT04515420 -NCT04518475 -NCT04515459 -NCT04518488 -NCT04515498 -NCT04518514 -NCT04515550 -NCT04518527 -NCT04515576 -NCT04518540 -NCT04515602 -NCT04518579 -NCT04515615 -NCT04518709 -NCT04515693 -NCT04518774 -NCT04515810 -NCT04518800 -NCT04515836 -NCT04518852 -NCT04515966 -NCT04518917 -NCT04515979 -NCT04518969 -NCT04516005 -NCT04519021 -NCT04516070 -NCT04519086 -NCT04516135 -NCT04519125 -NCT04516174 -NCT04519138 -NCT04516200 -NCT04519151 -NCT04516330 -NCT04519346 -NCT04516382 -NCT04519398 -NCT04516447 -NCT04519463 -NCT04516473 -NCT04519476 -NCT04516551 -NCT04519502 -NCT04516616 -NCT04519515 -NCT04516655 -NCT04519593 -NCT04516681 -NCT04519879 -NCT04516733 -NCT04519905 -NCT04516759 -NCT04519983 -NCT04516915 -NCT04520022 -NCT04517019 -NCT04520061 -NCT04517058 -NCT04520074 -NCT04517162 -NCT04520126 -NCT04517214 -NCT04520139 -NCT04517227 -NCT04520230 -NCT04517240 -NCT04520256 -NCT04517266 -NCT04520269 -NCT04517292 -NCT04520295 -NCT04517357 -NCT04520334 -NCT04517370 -NCT04520347 -NCT04517422 -NCT04520386 -NCT04517435 -NCT04525859 -NCT04520464 -NCT04523402 -NCT04520516 -NCT04523350 -NCT04520529 -NCT04523428 -NCT04520646 -NCT04523441 -NCT04520711 -NCT04523454 -NCT04520737 -NCT04523467 -NCT04520828 -NCT04523480 -NCT04520906 -NCT04523493 -NCT04520932 -NCT04523571 -NCT04521075 -NCT04523597 -NCT04521153 -NCT04523623 -NCT04521179 -NCT04523662 -NCT04521218 -NCT04523688 -NCT04521231 -NCT04523818 -NCT04521335 -NCT04523857 -NCT04521348 -NCT04523883 -NCT04521361 -NCT04523896 -NCT04521387 -NCT04523987 -NCT04521400 -NCT04524000 -NCT04521452 -NCT04524117 -NCT04521478 -NCT04524156 -NCT04521491 -NCT04524195 -NCT04521621 -NCT04524208 -NCT04521686 -NCT04524260 -NCT04521764 -NCT04524273 -NCT04521790 -NCT04524299 -NCT04521803 -NCT04524338 -NCT04521881 -NCT04524442 -NCT04521894 -NCT04524455 -NCT04521946 -NCT04524468 -NCT04521972 -NCT04524481 -NCT04522050 -NCT04524507 -NCT04522076 -NCT04524624 -NCT04522180 -NCT04524676 -NCT04522232 -NCT04524689 -NCT04522284 -NCT04524702 -NCT04522323 -NCT04524728 -NCT04522336 -NCT04524832 -NCT04522375 -NCT04524871 -NCT04522414 -NCT04524884 -NCT04522479 -NCT04524897 -NCT04522544 -NCT04524910 -NCT04522557 -NCT04525014 -NCT04522570 -NCT04525027 -NCT04522648 -NCT04525066 -NCT04522700 -NCT04525131 -NCT04522804 -NCT04525144 -NCT04522895 -NCT04525183 -NCT04522908 -NCT04525222 -NCT04522960 -NCT04525248 -NCT04522999 -NCT04525326 -NCT04523025 -NCT04525339 -NCT04523116 -NCT04525612 -NCT04523207 -NCT04525638 -NCT04523272 -NCT04525833 -NCT04523285 -NCT04531618 -NCT04525885 -NCT04528563 -NCT04525924 -NCT04528472 -NCT04525989 -NCT04528615 -NCT04526028 -NCT04528628 -NCT04526080 -NCT04528680 -NCT04526106 -NCT04528784 -NCT04526275 -NCT04528836 -NCT04526288 -NCT04528875 -NCT04526405 -NCT04528914 -NCT04526418 -NCT04528927 -NCT04526470 -NCT04528953 -NCT04526483 -NCT04529044 -NCT04526509 -NCT04529135 -NCT04526561 -NCT04529174 -NCT04526613 -NCT04529343 -NCT04526691 -NCT04529356 -NCT04526704 -NCT04529369 -NCT04526730 -NCT04529577 -NCT04526782 -NCT04529603 -NCT04526795 -NCT04529707 -NCT04526808 -NCT04529772 -NCT04526834 -NCT04529850 -NCT04526847 -NCT04529941 -NCT04526886 -NCT04529954 -NCT04526899 -NCT04529980 -NCT04526912 -NCT04529993 -NCT04526925 -NCT04530006 -NCT04526964 -NCT04530149 -NCT04527029 -NCT04530201 -NCT04527068 -NCT04530227 -NCT04527211 -NCT04530253 -NCT04527263 -NCT04530370 -NCT04527367 -NCT04530487 -NCT04527419 -NCT04530513 -NCT04527536 -NCT04530552 -NCT04527549 -NCT04530565 -NCT04527575 -NCT04530578 -NCT04527588 -NCT04530695 -NCT04527679 -NCT04530708 -NCT04527783 -NCT04530721 -NCT04527796 -NCT04530812 -NCT04527861 -NCT04530890 -NCT04527900 -NCT04530981 -NCT04527939 -NCT04531046 -NCT04527991 -NCT04531072 -NCT04528082 -NCT04531150 -NCT04528121 -NCT04531163 -NCT04528199 -NCT04531176 -NCT04528225 -NCT04531189 -NCT04528238 -NCT04531228 -NCT04528277 -NCT04531267 -NCT04528316 -NCT04531280 -NCT04528342 -NCT04531293 -NCT04528381 -NCT04531319 -NCT04528394 -NCT04531579 -NCT04528420 -NCT04537312 -NCT04531644 -NCT04534543 -NCT04531683 -NCT04534465 -NCT04531696 -NCT04534634 -NCT04531917 -NCT04534660 -NCT04532073 -NCT04534725 -NCT04532177 -NCT04534738 -NCT04532203 -NCT04534842 -NCT04532229 -NCT04534855 -NCT04532268 -NCT04534868 -NCT04532281 -NCT04534881 -NCT04532320 -NCT04534894 -NCT04532372 -NCT04534998 -NCT04532398 -NCT04535024 -NCT04532463 -NCT04535063 -NCT04532515 -NCT04535102 -NCT04532606 -NCT04535167 -NCT04532645 -NCT04535271 -NCT04532710 -NCT04535323 -NCT04532775 -NCT04535349 -NCT04532931 -NCT04535401 -NCT04532970 -NCT04535414 -NCT04532983 -NCT04535492 -NCT04533048 -NCT04535609 -NCT04533165 -NCT04535674 -NCT04533178 -NCT04535687 -NCT04533217 -NCT04535713 -NCT04533243 -NCT04535739 -NCT04533269 -NCT04535765 -NCT04533321 -NCT04535804 -NCT04533347 -NCT04535843 -NCT04533373 -NCT04535869 -NCT04533412 -NCT04535895 -NCT04533425 -NCT04535908 -NCT04533438 -NCT04535921 -NCT04533451 -NCT04535986 -NCT04533490 -NCT04536077 -NCT04533555 -NCT04536142 -NCT04533581 -NCT04536207 -NCT04533620 -NCT04536298 -NCT04533672 -NCT04536454 -NCT04533750 -NCT04536545 -NCT04533763 -NCT04536558 -NCT04533854 -NCT04536584 -NCT04533958 -NCT04536649 -NCT04534010 -NCT04536675 -NCT04534023 -NCT04536805 -NCT04534036 -NCT04536857 -NCT04534062 -NCT04536922 -NCT04534075 -NCT04536948 -NCT04534127 -NCT04537078 -NCT04534179 -NCT04537104 -NCT04534205 -NCT04537156 -NCT04534218 -NCT04537195 -NCT04534283 -NCT04537247 -NCT04534309 -NCT04537286 -NCT04534387 -NCT04543110 -NCT04537377 -NCT04540692 -NCT04537390 -NCT04540588 -NCT04537442 -NCT04540705 -NCT04537572 -NCT04540757 -NCT04537650 -NCT04540796 -NCT04537702 -NCT04540900 -NCT04537715 -NCT04541017 -NCT04537936 -NCT04541030 -NCT04537949 -NCT04541056 -NCT04538027 -NCT04541069 -NCT04538209 -NCT04541082 -NCT04538313 -NCT04541095 -NCT04538352 -NCT04541108 -NCT04538378 -NCT04541134 -NCT04538430 -NCT04541160 -NCT04538456 -NCT04541173 -NCT04538482 -NCT04541225 -NCT04538495 -NCT04541238 -NCT04538547 -NCT04541251 -NCT04538625 -NCT04541277 -NCT04538664 -NCT04541290 -NCT04538703 -NCT04541316 -NCT04538742 -NCT04541342 -NCT04538833 -NCT04541355 -NCT04538950 -NCT04541368 -NCT04538976 -NCT04541381 -NCT04539015 -NCT04541407 -NCT04539119 -NCT04541433 -NCT04539223 -NCT04541537 -NCT04539236 -NCT04541563 -NCT04539366 -NCT04541615 -NCT04539392 -NCT04541706 -NCT04539444 -NCT04541784 -NCT04539496 -NCT04542005 -NCT04539522 -NCT04542057 -NCT04539535 -NCT04542135 -NCT04539574 -NCT04542187 -NCT04539600 -NCT04542278 -NCT04539613 -NCT04542291 -NCT04539678 -NCT04542343 -NCT04539769 -NCT04542356 -NCT04539808 -NCT04542369 -NCT04539938 -NCT04542447 -NCT04539977 -NCT04542512 -NCT04540042 -NCT04542551 -NCT04540081 -NCT04542590 -NCT04540107 -NCT04542603 -NCT04540120 -NCT04542629 -NCT04540133 -NCT04542655 -NCT04540198 -NCT04542798 -NCT04540211 -NCT04542811 -NCT04540237 -NCT04542824 -NCT04540341 -NCT04542837 -NCT04540406 -NCT04542863 -NCT04540471 -NCT04543071 -NCT04540549 -NCT04548934 -NCT04543149 -NCT04546256 -NCT04543188 -NCT04546191 -NCT04543201 -NCT04546282 -NCT04543253 -NCT04546321 -NCT04543305 -NCT04546399 -NCT04543318 -NCT04546425 -NCT04543383 -NCT04546607 -NCT04543617 -NCT04546620 -NCT04543630 -NCT04546633 -NCT04543643 -NCT04546646 -NCT04543695 -NCT04546659 -NCT04543760 -NCT04546802 -NCT04543851 -NCT04546828 -NCT04543890 -NCT04546958 -NCT04543903 -NCT04546984 -NCT04543916 -NCT04546997 -NCT04543955 -NCT04547049 -NCT04543981 -NCT04547062 -NCT04544007 -NCT04547088 -NCT04544046 -NCT04547101 -NCT04544059 -NCT04547153 -NCT04544098 -NCT04547166 -NCT04544111 -NCT04547205 -NCT04544189 -NCT04547309 -NCT04544215 -NCT04547361 -NCT04544241 -NCT04547491 -NCT04544501 -NCT04547504 -NCT04544592 -NCT04547556 -NCT04544644 -NCT04547621 -NCT04544657 -NCT04547634 -NCT04544722 -NCT04547725 -NCT04544735 -NCT04547738 -NCT04544748 -NCT04547764 -NCT04544852 -NCT04547777 -NCT04544904 -NCT04547829 -NCT04544917 -NCT04547842 -NCT04544995 -NCT04547855 -NCT04545034 -NCT04547881 -NCT04545177 -NCT04547907 -NCT04545398 -NCT04548063 -NCT04545424 -NCT04548102 -NCT04545450 -NCT04548193 -NCT04545515 -NCT04548206 -NCT04545567 -NCT04548232 -NCT04545606 -NCT04548271 -NCT04545671 -NCT04548297 -NCT04545697 -NCT04548349 -NCT04545710 -NCT04548440 -NCT04545762 -NCT04548531 -NCT04545814 -NCT04548648 -NCT04545944 -NCT04548700 -NCT04545957 -NCT04548752 -NCT04545983 -NCT04548765 -NCT04546009 -NCT04548791 -NCT04546074 -NCT04548830 -NCT04546165 -NCT04554459 -NCT04548947 -NCT04552223 -NCT04548960 -NCT04552158 -NCT04549025 -NCT04552249 -NCT04549129 -NCT04552288 -NCT04549207 -NCT04552327 -NCT04549246 -NCT04552418 -NCT04549363 -NCT04552496 -NCT04549402 -NCT04552509 -NCT04549571 -NCT04552587 -NCT04549584 -NCT04552613 -NCT04549597 -NCT04552704 -NCT04549649 -NCT04552743 -NCT04549675 -NCT04552756 -NCT04549688 -NCT04552769 -NCT04549857 -NCT04552847 -NCT04550104 -NCT04552886 -NCT04550156 -NCT04552912 -NCT04550169 -NCT04552977 -NCT04550260 -NCT04552990 -NCT04550390 -NCT04553068 -NCT04550416 -NCT04553094 -NCT04550442 -NCT04553133 -NCT04550468 -NCT04553172 -NCT04550481 -NCT04553211 -NCT04550494 -NCT04553224 -NCT04550624 -NCT04553276 -NCT04550663 -NCT04553302 -NCT04550689 -NCT04553315 -NCT04550819 -NCT04553341 -NCT04550845 -NCT04553354 -NCT04550897 -NCT04553393 -NCT04550949 -NCT04553406 -NCT04550988 -NCT04553471 -NCT04551001 -NCT04553510 -NCT04551014 -NCT04553562 -NCT04551079 -NCT04553575 -NCT04551105 -NCT04553601 -NCT04551131 -NCT04553653 -NCT04551170 -NCT04553692 -NCT04551339 -NCT04553770 -NCT04551352 -NCT04553809 -NCT04551417 -NCT04553874 -NCT04551430 -NCT04553887 -NCT04551495 -NCT04553913 -NCT04551521 -NCT04553939 -NCT04551599 -NCT04553991 -NCT04551612 -NCT04554056 -NCT04551664 -NCT04554082 -NCT04551833 -NCT04554147 -NCT04551885 -NCT04554160 -NCT04551898 -NCT04554290 -NCT04551924 -NCT04554316 -NCT04551950 -NCT04554342 -NCT04552028 -NCT04554355 -NCT04552054 -NCT04554381 -NCT04552093 -NCT04559854 -NCT04554472 -NCT04556994 -NCT04554485 -NCT04556981 -NCT04554524 -NCT04557020 -NCT04554615 -NCT04557046 -NCT04554667 -NCT04557059 -NCT04554680 -NCT04557085 -NCT04554719 -NCT04557150 -NCT04554771 -NCT04557215 -NCT04554823 -NCT04557306 -NCT04554836 -NCT04557371 -NCT04554914 -NCT04557384 -NCT04554927 -NCT04557410 -NCT04554940 -NCT04557423 -NCT04554953 -NCT04557436 -NCT04555057 -NCT04557449 -NCT04555135 -NCT04557501 -NCT04555161 -NCT04557540 -NCT04555226 -NCT04557553 -NCT04555239 -NCT04557579 -NCT04555265 -NCT04557618 -NCT04555278 -NCT04557644 -NCT04555291 -NCT04557774 -NCT04555304 -NCT04557826 -NCT04555317 -NCT04557865 -NCT04555343 -NCT04557943 -NCT04555356 -NCT04557956 -NCT04555369 -NCT04558021 -NCT04555382 -NCT04558125 -NCT04555421 -NCT04558216 -NCT04555499 -NCT04558242 -NCT04555525 -NCT04558268 -NCT04555538 -NCT04558372 -NCT04555551 -NCT04558398 -NCT04555564 -NCT04558567 -NCT04555577 -NCT04558619 -NCT04555772 -NCT04558645 -NCT04555785 -NCT04558684 -NCT04555811 -NCT04558697 -NCT04555837 -NCT04558736 -NCT04555902 -NCT04558853 -NCT04556045 -NCT04558866 -NCT04556071 -NCT04558931 -NCT04556084 -NCT04558996 -NCT04556214 -NCT04559009 -NCT04556253 -NCT04559087 -NCT04556266 -NCT04559139 -NCT04556292 -NCT04559217 -NCT04556344 -NCT04559230 -NCT04556409 -NCT04559269 -NCT04556461 -NCT04559308 -NCT04556539 -NCT04559503 -NCT04556617 -NCT04559607 -NCT04556669 -NCT04559620 -NCT04556773 -NCT04559685 -NCT04556916 -NCT04559724 -NCT04556929 -NCT04565665 -NCT04559919 -NCT04562636 -NCT04559945 -NCT04562558 -NCT04560036 -NCT04562701 -NCT04560127 -NCT04562727 -NCT04560166 -NCT04562792 -NCT04560205 -NCT04562818 -NCT04560244 -NCT04562831 -NCT04560257 -NCT04562987 -NCT04560270 -NCT04563013 -NCT04560322 -NCT04563091 -NCT04560426 -NCT04563130 -NCT04560439 -NCT04563208 -NCT04560673 -NCT04563221 -NCT04560686 -NCT04563234 -NCT04560712 -NCT04563338 -NCT04560725 -NCT04563468 -NCT04560842 -NCT04563507 -NCT04560894 -NCT04563520 -NCT04560907 -NCT04563767 -NCT04560933 -NCT04563806 -NCT04560972 -NCT04563871 -NCT04560985 -NCT04563936 -NCT04561063 -NCT04563975 -NCT04561089 -NCT04564040 -NCT04561102 -NCT04564144 -NCT04561206 -NCT04564157 -NCT04561219 -NCT04564235 -NCT04561297 -NCT04564313 -NCT04561323 -NCT04564417 -NCT04561336 -NCT04564430 -NCT04561362 -NCT04564456 -NCT04561401 -NCT04564469 -NCT04561414 -NCT04564482 -NCT04561492 -NCT04564521 -NCT04561505 -NCT04564703 -NCT04561583 -NCT04564729 -NCT04561661 -NCT04564768 -NCT04561765 -NCT04564846 -NCT04561791 -NCT04564898 -NCT04561804 -NCT04565054 -NCT04561817 -NCT04565093 -NCT04561830 -NCT04565106 -NCT04561869 -NCT04565210 -NCT04561882 -NCT04565236 -NCT04561921 -NCT04565275 -NCT04561960 -NCT04565314 -NCT04561999 -NCT04565327 -NCT04562129 -NCT04565353 -NCT04562233 -NCT04565392 -NCT04562298 -NCT04565431 -NCT04562311 -NCT04565457 -NCT04562337 -NCT04565483 -NCT04562350 -NCT04565496 -NCT04562428 -NCT04565509 -NCT04562441 -NCT04565548 -NCT04562480 -NCT04571541 -NCT04565847 -NCT04569136 -NCT04565873 -NCT04569110 -NCT04566068 -NCT04569149 -NCT04566133 -NCT04569279 -NCT04566315 -NCT04569292 -NCT04566328 -NCT04569331 -NCT04566367 -NCT04569370 -NCT04566380 -NCT04569422 -NCT04566419 -NCT04569461 -NCT04566458 -NCT04569591 -NCT04566718 -NCT04569682 -NCT04566887 -NCT04569708 -NCT04566952 -NCT04569721 -NCT04566978 -NCT04569747 -NCT04566991 -NCT04569786 -NCT04567069 -NCT04569799 -NCT04567147 -NCT04569825 -NCT04567225 -NCT04569838 -NCT04567277 -NCT04569916 -NCT04567355 -NCT04570046 -NCT04567368 -NCT04570176 -NCT04567420 -NCT04570215 -NCT04567433 -NCT04570254 -NCT04567459 -NCT04570332 -NCT04567511 -NCT04570397 -NCT04567615 -NCT04570410 -NCT04567758 -NCT04570423 -NCT04567771 -NCT04570540 -NCT04567797 -NCT04570553 -NCT04567914 -NCT04570566 -NCT04568005 -NCT04570592 -NCT04568031 -NCT04570631 -NCT04568044 -NCT04570683 -NCT04568148 -NCT04570696 -NCT04568161 -NCT04570709 -NCT04568174 -NCT04570722 -NCT04568200 -NCT04570761 -NCT04568226 -NCT04570839 -NCT04568252 -NCT04570852 -NCT04568278 -NCT04570943 -NCT04568291 -NCT04570956 -NCT04568304 -NCT04571008 -NCT04568330 -NCT04571034 -NCT04568356 -NCT04571060 -NCT04568460 -NCT04571138 -NCT04568499 -NCT04571255 -NCT04568512 -NCT04571294 -NCT04568564 -NCT04571307 -NCT04568616 -NCT04571333 -NCT04568759 -NCT04571372 -NCT04568811 -NCT04571411 -NCT04568902 -NCT04571437 -NCT04568941 -NCT04571450 -NCT04568954 -NCT04571476 -NCT04569006 -NCT04571489 -NCT04569032 -NCT04576936 -NCT04571632 -NCT04574635 -NCT04571645 -NCT04574609 -NCT04571710 -NCT04574700 -NCT04571762 -NCT04574765 -NCT04571788 -NCT04574817 -NCT04571801 -NCT04574856 -NCT04571840 -NCT04574947 -NCT04571892 -NCT04574960 -NCT04572022 -NCT04574999 -NCT04572074 -NCT04575025 -NCT04572100 -NCT04575077 -NCT04572152 -NCT04575090 -NCT04572282 -NCT04575129 -NCT04572295 -NCT04575194 -NCT04572308 -NCT04575337 -NCT04572451 -NCT04575363 -NCT04572503 -NCT04575376 -NCT04572542 -NCT04575389 -NCT04572555 -NCT04575415 -NCT04572568 -NCT04575493 -NCT04572633 -NCT04575610 -NCT04572672 -NCT04575636 -NCT04572763 -NCT04575649 -NCT04572776 -NCT04575714 -NCT04572802 -NCT04575766 -NCT04572815 -NCT04575831 -NCT04572867 -NCT04575844 -NCT04572984 -NCT04575857 -NCT04573049 -NCT04575883 -NCT04573062 -NCT04575909 -NCT04573088 -NCT04575922 -NCT04573140 -NCT04575935 -NCT04573192 -NCT04575948 -NCT04573231 -NCT04575961 -NCT04573257 -NCT04575974 -NCT04573309 -NCT04576039 -NCT04573504 -NCT04576078 -NCT04573582 -NCT04576091 -NCT04573621 -NCT04576104 -NCT04573686 -NCT04576117 -NCT04573738 -NCT04576143 -NCT04573777 -NCT04576182 -NCT04573881 -NCT04576208 -NCT04573907 -NCT04576221 -NCT04574050 -NCT04576247 -NCT04574063 -NCT04576273 -NCT04574102 -NCT04576286 -NCT04574115 -NCT04576299 -NCT04574284 -NCT04576403 -NCT04574297 -NCT04576416 -NCT04574323 -NCT04576429 -NCT04574336 -NCT04576455 -NCT04574375 -NCT04576676 -NCT04574401 -NCT04576793 -NCT04574518 -NCT04576871 -NCT04574583 -NCT04583124 -NCT04577014 -NCT04579965 -NCT04577040 -NCT04579952 -NCT04577053 -NCT04580069 -NCT04577105 -NCT04580121 -NCT04577170 -NCT04580199 -NCT04577222 -NCT04580225 -NCT04577248 -NCT04580238 -NCT04577274 -NCT04580264 -NCT04577300 -NCT04580329 -NCT04577326 -NCT04580381 -NCT04577378 -NCT04580407 -NCT04577482 -NCT04580433 -NCT04577521 -NCT04580446 -NCT04577599 -NCT04580485 -NCT04577625 -NCT04580498 -NCT04577638 -NCT04580511 -NCT04577703 -NCT04580563 -NCT04577729 -NCT04580628 -NCT04577755 -NCT04580641 -NCT04577807 -NCT04580771 -NCT04577833 -NCT04580784 -NCT04577937 -NCT04580823 -NCT04577950 -NCT04580836 -NCT04577963 -NCT04581005 -NCT04578080 -NCT04581109 -NCT04578106 -NCT04581148 -NCT04578301 -NCT04581239 -NCT04578457 -NCT04581265 -NCT04578600 -NCT04581291 -NCT04578613 -NCT04581343 -NCT04578639 -NCT04581382 -NCT04578691 -NCT04581408 -NCT04578769 -NCT04581421 -NCT04578847 -NCT04581473 -NCT04578860 -NCT04581512 -NCT04578977 -NCT04581824 -NCT04579029 -NCT04581837 -NCT04579107 -NCT04581876 -NCT04579133 -NCT04581941 -NCT04579146 -NCT04581980 -NCT04579224 -NCT04582292 -NCT04579237 -NCT04582383 -NCT04579250 -NCT04582487 -NCT04579315 -NCT04582500 -NCT04579367 -NCT04582539 -NCT04579380 -NCT04582565 -NCT04579445 -NCT04582656 -NCT04579497 -NCT04582721 -NCT04579523 -NCT04582825 -NCT04579588 -NCT04582864 -NCT04579614 -NCT04582955 -NCT04579666 -NCT04582968 -NCT04579731 -NCT04582981 -NCT04579757 -NCT04583020 -NCT04579848 -NCT04583046 -NCT04579913 -NCT04588545 -NCT04583189 -NCT04585958 -NCT04583215 -NCT04585932 -NCT04583228 -NCT04585997 -NCT04583254 -NCT04586075 -NCT04583280 -NCT04586088 -NCT04583384 -NCT04586127 -NCT04583488 -NCT04586179 -NCT04583527 -NCT04586231 -NCT04583618 -NCT04586244 -NCT04583683 -NCT04586270 -NCT04583735 -NCT04586283 -NCT04583761 -NCT04586335 -NCT04583826 -NCT04586400 -NCT04584008 -NCT04586426 -NCT04584034 -NCT04586452 -NCT04584060 -NCT04586465 -NCT04584073 -NCT04586478 -NCT04584086 -NCT04586491 -NCT04584112 -NCT04586517 -NCT04584138 -NCT04586543 -NCT04584203 -NCT04586660 -NCT04584255 -NCT04586686 -NCT04584307 -NCT04586751 -NCT04584333 -NCT04586816 -NCT04584437 -NCT04586959 -NCT04584489 -NCT04587050 -NCT04584515 -NCT04587128 -NCT04584528 -NCT04587206 -NCT04584580 -NCT04587440 -NCT04584775 -NCT04587479 -NCT04584801 -NCT04587544 -NCT04584840 -NCT04587635 -NCT04584853 -NCT04587648 -NCT04584866 -NCT04587674 -NCT04584957 -NCT04587687 -NCT04584970 -NCT04587726 -NCT04585035 -NCT04587739 -NCT04585061 -NCT04587830 -NCT04585100 -NCT04587856 -NCT04585113 -NCT04588025 -NCT04585152 -NCT04588038 -NCT04585243 -NCT04588051 -NCT04585256 -NCT04588064 -NCT04585269 -NCT04588077 -NCT04585373 -NCT04588090 -NCT04585438 -NCT04588168 -NCT04585477 -NCT04588207 -NCT04585490 -NCT04588233 -NCT04585542 -NCT04588246 -NCT04585594 -NCT04588272 -NCT04585724 -NCT04588298 -NCT04585750 -NCT04588324 -NCT04585815 -NCT04588337 -NCT04585828 -NCT04588376 -NCT04585841 -NCT04588454 -NCT04585919 -NCT04594512 -NCT04588558 -NCT04591652 -NCT04588636 -NCT04591613 -NCT04588688 -NCT04591782 -NCT04588857 -NCT04591860 -NCT04588935 -NCT04591951 -NCT04588974 -NCT04591977 -NCT04588987 -NCT04592029 -NCT04589234 -NCT04592094 -NCT04589273 -NCT04592133 -NCT04589286 -NCT04592211 -NCT04589299 -NCT04592237 -NCT04589312 -NCT04592289 -NCT04589403 -NCT04592302 -NCT04589468 -NCT04592393 -NCT04589481 -NCT04592471 -NCT04589598 -NCT04592484 -NCT04589624 -NCT04592549 -NCT04589650 -NCT04592601 -NCT04589741 -NCT04592627 -NCT04589754 -NCT04592653 -NCT04589819 -NCT04592666 -NCT04589832 -NCT04592692 -NCT04589845 -NCT04592822 -NCT04589858 -NCT04592861 -NCT04589910 -NCT04592887 -NCT04589949 -NCT04592913 -NCT04590066 -NCT04593004 -NCT04590079 -NCT04593134 -NCT04590105 -NCT04593173 -NCT04590235 -NCT04593186 -NCT04590248 -NCT04593277 -NCT04590326 -NCT04593303 -NCT04590391 -NCT04593381 -NCT04590456 -NCT04593407 -NCT04590560 -NCT04593446 -NCT04590599 -NCT04593485 -NCT04590625 -NCT04593563 -NCT04590638 -NCT04593589 -NCT04590664 -NCT04593615 -NCT04590716 -NCT04593758 -NCT04590755 -NCT04593771 -NCT04590781 -NCT04593862 -NCT04590807 -NCT04593914 -NCT04590820 -NCT04593966 -NCT04590885 -NCT04594005 -NCT04590963 -NCT04594057 -NCT04591002 -NCT04594096 -NCT04591028 -NCT04594135 -NCT04591054 -NCT04594148 -NCT04591093 -NCT04594187 -NCT04591132 -NCT04594252 -NCT04591275 -NCT04594304 -NCT04591301 -NCT04594369 -NCT04591379 -NCT04594473 -NCT04591405 -NCT04594486 -NCT04591431 -NCT04600674 -NCT04594590 -NCT04597138 -NCT04594642 -NCT04597125 -NCT04594720 -NCT04597151 -NCT04594772 -NCT04597203 -NCT04594798 -NCT04597294 -NCT04594811 -NCT04597359 -NCT04594954 -NCT04597411 -NCT04595006 -NCT04597437 -NCT04595019 -NCT04597476 -NCT04595032 -NCT04597541 -NCT04595045 -NCT04597554 -NCT04595058 -NCT04597671 -NCT04595149 -NCT04597801 -NCT04595162 -NCT04597970 -NCT04595227 -NCT04598009 -NCT04595240 -NCT04598087 -NCT04595266 -NCT04598126 -NCT04595331 -NCT04598152 -NCT04595344 -NCT04598295 -NCT04595396 -NCT04598321 -NCT04595422 -NCT04598334 -NCT04595474 -NCT04598425 -NCT04595513 -NCT04598490 -NCT04595526 -NCT04598568 -NCT04595565 -NCT04598646 -NCT04595604 -NCT04598789 -NCT04595747 -NCT04598815 -NCT04595760 -NCT04598841 -NCT04595786 -NCT04598971 -NCT04595851 -NCT04599062 -NCT04595864 -NCT04599140 -NCT04595929 -NCT04599153 -NCT04595942 -NCT04599179 -NCT04595955 -NCT04599205 -NCT04595981 -NCT04599218 -NCT04595994 -NCT04599283 -NCT04596007 -NCT04599374 -NCT04596020 -NCT04599426 -NCT04596033 -NCT04599452 -NCT04596085 -NCT04599543 -NCT04596150 -NCT04599556 -NCT04596241 -NCT04599621 -NCT04596319 -NCT04599634 -NCT04596384 -NCT04599777 -NCT04596527 -NCT04599790 -NCT04596540 -NCT04599803 -NCT04596670 -NCT04599829 -NCT04596683 -NCT04599855 -NCT04596787 -NCT04599920 -NCT04596800 -NCT04600011 -NCT04596826 -NCT04600063 -NCT04596917 -NCT04600154 -NCT04596930 -NCT04600336 -NCT04596969 -NCT04600349 -NCT04596982 -NCT04600479 -NCT04597086 -NCT04605614 -NCT04600739 -NCT04603105 -NCT04600752 -NCT04603040 -NCT04600817 -NCT04603118 -NCT04600869 -NCT04603157 -NCT04600895 -NCT04603183 -NCT04600947 -NCT04603248 -NCT04600973 -NCT04603287 -NCT04601051 -NCT04603339 -NCT04601077 -NCT04603365 -NCT04601116 -NCT04603469 -NCT04601233 -NCT04603508 -NCT04601285 -NCT04603560 -NCT04601298 -NCT04603612 -NCT04601324 -NCT04603703 -NCT04601402 -NCT04603716 -NCT04601428 -NCT04603807 -NCT04601441 -NCT04603833 -NCT04601467 -NCT04603846 -NCT04601558 -NCT04603872 -NCT04601584 -NCT04603911 -NCT04601766 -NCT04604015 -NCT04601792 -NCT04604028 -NCT04601831 -NCT04604041 -NCT04601857 -NCT04604067 -NCT04601883 -NCT04604132 -NCT04601909 -NCT04604158 -NCT04601935 -NCT04604223 -NCT04601948 -NCT04604353 -NCT04601961 -NCT04604366 -NCT04601987 -NCT04604405 -NCT04602013 -NCT04604444 -NCT04602026 -NCT04604509 -NCT04602065 -NCT04604522 -NCT04602078 -NCT04604535 -NCT04602117 -NCT04604548 -NCT04602130 -NCT04604587 -NCT04602195 -NCT04604600 -NCT04602234 -NCT04604691 -NCT04602286 -NCT04604730 -NCT04602299 -NCT04604873 -NCT04602377 -NCT04604951 -NCT04602390 -NCT04604977 -NCT04602442 -NCT04605042 -NCT04602533 -NCT04605107 -NCT04602572 -NCT04605146 -NCT04602611 -NCT04605159 -NCT04602663 -NCT04605185 -NCT04602676 -NCT04605198 -NCT04602689 -NCT04605211 -NCT04602754 -NCT04605263 -NCT04602780 -NCT04605302 -NCT04602793 -NCT04605419 -NCT04602819 -NCT04605510 -NCT04602858 -NCT04605562 -NCT04602910 -NCT04605575 -NCT04603001 -NCT04611139 -NCT04605627 -NCT04608409 -NCT04605666 -NCT04608357 -NCT04605705 -NCT04608435 -NCT04605731 -NCT04608474 -NCT04605770 -NCT04608487 -NCT04605796 -NCT04608500 -NCT04605848 -NCT04608604 -NCT04605861 -NCT04608773 -NCT04605913 -NCT04608786 -NCT04605978 -NCT04608812 -NCT04606004 -NCT04608851 -NCT04606108 -NCT04608864 -NCT04606147 -NCT04608955 -NCT04606238 -NCT04609020 -NCT04606316 -NCT04609046 -NCT04606355 -NCT04609176 -NCT04606433 -NCT04609215 -NCT04606446 -NCT04609241 -NCT04606472 -NCT04609280 -NCT04606550 -NCT04609319 -NCT04606693 -NCT04609410 -NCT04606771 -NCT04609436 -NCT04606849 -NCT04609540 -NCT04606914 -NCT04609566 -NCT04606992 -NCT04609579 -NCT04607057 -NCT04609592 -NCT04607109 -NCT04609709 -NCT04607135 -NCT04609735 -NCT04607200 -NCT04609787 -NCT04607265 -NCT04609826 -NCT04607291 -NCT04609839 -NCT04607330 -NCT04609852 -NCT04607356 -NCT04609982 -NCT04607369 -NCT04610125 -NCT04607408 -NCT04610138 -NCT04607421 -NCT04610229 -NCT04607473 -NCT04610372 -NCT04607525 -NCT04610385 -NCT04607564 -NCT04610424 -NCT04607603 -NCT04610437 -NCT04607642 -NCT04610450 -NCT04607668 -NCT04610528 -NCT04607694 -NCT04610606 -NCT04607772 -NCT04610632 -NCT04607824 -NCT04610658 -NCT04607850 -NCT04610671 -NCT04607863 -NCT04610684 -NCT04607954 -NCT04610736 -NCT04607967 -NCT04610814 -NCT04608045 -NCT04610918 -NCT04608071 -NCT04610957 -NCT04608084 -NCT04610970 -NCT04608136 -NCT04611100 -NCT04608162 -NCT04611113 -NCT04608175 -NCT04611126 -NCT04608318 -NCT04617054 -NCT04611165 -NCT04614246 -NCT04611321 -NCT04614194 -NCT04611373 -NCT04614324 -NCT04611464 -NCT04614337 -NCT04611477 -NCT04614363 -NCT04611516 -NCT04614402 -NCT04611568 -NCT04614480 -NCT04611594 -NCT04614493 -NCT04611672 -NCT04614519 -NCT04611685 -NCT04614545 -NCT04611711 -NCT04614610 -NCT04611724 -NCT04614636 -NCT04611776 -NCT04614662 -NCT04611828 -NCT04614740 -NCT04611867 -NCT04614766 -NCT04611958 -NCT04614779 -NCT04611971 -NCT04614896 -NCT04611997 -NCT04614909 -NCT04612036 -NCT04614935 -NCT04612218 -NCT04614974 -NCT04612283 -NCT04615013 -NCT04612413 -NCT04615065 -NCT04612439 -NCT04615078 -NCT04612478 -NCT04615143 -NCT04612504 -NCT04615312 -NCT04612530 -NCT04615468 -NCT04612556 -NCT04615624 -NCT04612634 -NCT04615663 -NCT04612660 -NCT04615702 -NCT04612673 -NCT04615728 -NCT04612712 -NCT04615767 -NCT04612751 -NCT04615780 -NCT04612803 -NCT04615806 -NCT04612894 -NCT04615845 -NCT04612907 -NCT04615884 -NCT04612946 -NCT04616066 -NCT04613089 -NCT04616183 -NCT04613206 -NCT04616196 -NCT04613232 -NCT04616209 -NCT04613284 -NCT04616248 -NCT04613323 -NCT04616326 -NCT04613440 -NCT04616339 -NCT04613492 -NCT04616352 -NCT04613557 -NCT04616443 -NCT04613570 -NCT04616508 -NCT04613596 -NCT04616534 -NCT04613674 -NCT04616547 -NCT04613791 -NCT04616560 -NCT04613830 -NCT04616625 -NCT04613869 -NCT04616651 -NCT04613973 -NCT04616729 -NCT04613986 -NCT04616768 -NCT04614051 -NCT04616846 -NCT04614103 -NCT04616924 -NCT04614129 -NCT04616989 -NCT04614142 -NCT04629157 -NCT04617067 -NCT04620161 -NCT04617145 -NCT04620096 -NCT04617223 -NCT04620174 -NCT04617236 -NCT04620187 -NCT04617314 -NCT04620200 -NCT04617327 -NCT04620239 -NCT04617418 -NCT04620330 -NCT04617457 -NCT04620369 -NCT04617522 -NCT04620473 -NCT04617600 -NCT04620538 -NCT04617678 -NCT04620603 -NCT04617704 -NCT04620629 -NCT04617756 -NCT04620655 -NCT04617808 -NCT04620681 -NCT04617821 -NCT04620837 -NCT04617847 -NCT04620915 -NCT04617925 -NCT04620954 -NCT04618081 -NCT04620980 -NCT04618120 -NCT04620993 -NCT04618224 -NCT04621032 -NCT04618237 -NCT04621045 -NCT04618367 -NCT04621110 -NCT04618393 -NCT04621136 -NCT04618510 -NCT04621188 -NCT04618627 -NCT04621240 -NCT04618666 -NCT04621331 -NCT04618679 -NCT04621370 -NCT04618692 -NCT04621435 -NCT04618809 -NCT04621461 -NCT04618822 -NCT04621500 -NCT04618874 -NCT04621539 -NCT04619004 -NCT04621565 -NCT04619030 -NCT04621604 -NCT04619056 -NCT04621721 -NCT04619069 -NCT04621799 -NCT04619095 -NCT04621825 -NCT04619199 -NCT04621916 -NCT04619290 -NCT04621942 -NCT04619316 -NCT04622007 -NCT04619329 -NCT04622072 -NCT04619342 -NCT04622098 -NCT04619433 -NCT04622228 -NCT04619472 -NCT04622319 -NCT04619485 -NCT04622410 -NCT04619524 -NCT04622449 -NCT04619537 -NCT04622566 -NCT04619563 -NCT04628650 -NCT04619589 -NCT04628585 -NCT04619628 -NCT04628767 -NCT04619680 -NCT04628780 -NCT04619719 -NCT04628871 -NCT04619797 -NCT04628884 -NCT04619810 -NCT04628975 -NCT04619849 -NCT04628988 -NCT04619862 -NCT04629014 -NCT04620057 -NCT04629040 -NCT04625517 -NCT04622579 -NCT04625530 -NCT04622670 -NCT04625543 -NCT04622761 -NCT04625647 -NCT04622774 -NCT04625699 -NCT04622891 -NCT04625803 -NCT04622956 -NCT04625816 -NCT04622969 -NCT04625881 -NCT04623008 -NCT04625894 -NCT04623073 -NCT04625907 -NCT04623086 -NCT04626024 -NCT04623190 -NCT04626063 -NCT04623203 -NCT04626219 -NCT04623216 -NCT04626349 -NCT04623333 -NCT04626479 -NCT04623502 -NCT04626518 -NCT04623541 -NCT04626544 -NCT04623554 -NCT04626635 -NCT04623580 -NCT04626674 -NCT04623749 -NCT04626726 -NCT04623775 -NCT04626739 -NCT04623801 -NCT04626752 -NCT04623840 -NCT04626765 -NCT04623866 -NCT04626791 -NCT04623892 -NCT04626817 -NCT04623931 -NCT04626830 -NCT04623944 -NCT04626843 -NCT04624087 -NCT04626895 -NCT04624113 -NCT04626986 -NCT04624178 -NCT04627064 -NCT04624204 -NCT04627142 -NCT04624217 -NCT04627168 -NCT04624230 -NCT04627246 -NCT04624256 -NCT04627363 -NCT04624308 -NCT04627376 -NCT04624334 -NCT04627714 -NCT04624399 -NCT04627727 -NCT04624412 -NCT04627740 -NCT04624425 -NCT04627753 -NCT04624477 -NCT04627766 -NCT04624568 -NCT04627818 -NCT04624633 -NCT04627896 -NCT04624711 -NCT04627909 -NCT04624789 -NCT04627961 -NCT04624828 -NCT04627987 -NCT04624906 -NCT04628000 -NCT04624958 -NCT04628026 -NCT04624971 -NCT04628182 -NCT04624984 -NCT04628312 -NCT04625205 -NCT04628338 -NCT04625270 -NCT04628416 -NCT04625322 -NCT04628429 -NCT04625361 -NCT04628455 -NCT04625374 -NCT04628468 -NCT04625413 -NCT04628494 -NCT04625439 -NCT04634097 -NCT04628572 -NCT04629183 -NCT04631614 -NCT04629209 -NCT04631601 -NCT04629235 -NCT04631640 -NCT04629300 -NCT04631692 -NCT04629326 -NCT04631718 -NCT04629339 -NCT04631731 -NCT04629378 -NCT04631744 -NCT04629430 -NCT04631757 -NCT04629443 -NCT04631770 -NCT04629482 -NCT04631796 -NCT04629508 -NCT04631809 -NCT04629599 -NCT04631835 -NCT04629612 -NCT04632108 -NCT04629651 -NCT04632173 -NCT04629664 -NCT04632199 -NCT04629677 -NCT04632225 -NCT04629729 -NCT04632251 -NCT04629781 -NCT04632303 -NCT04629846 -NCT04632316 -NCT04629859 -NCT04632342 -NCT04630028 -NCT04632381 -NCT04630067 -NCT04632394 -NCT04630080 -NCT04632433 -NCT04630145 -NCT04632459 -NCT04630210 -NCT04632485 -NCT04630275 -NCT04632628 -NCT04630301 -NCT04632654 -NCT04630353 -NCT04632758 -NCT04630379 -NCT04632836 -NCT04630431 -NCT04632888 -NCT04630444 -NCT04632901 -NCT04630522 -NCT04632914 -NCT04630574 -NCT04632992 -NCT04630678 -NCT04633057 -NCT04630730 -NCT04633122 -NCT04630743 -NCT04633148 -NCT04630769 -NCT04633213 -NCT04630886 -NCT04633239 -NCT04630951 -NCT04633252 -NCT04631003 -NCT04633278 -NCT04631016 -NCT04633330 -NCT04631029 -NCT04633356 -NCT04631068 -NCT04633382 -NCT04631094 -NCT04633447 -NCT04631107 -NCT04633473 -NCT04631211 -NCT04633486 -NCT04631224 -NCT04633512 -NCT04631237 -NCT04633668 -NCT04631250 -NCT04633772 -NCT04631341 -NCT04633785 -NCT04631354 -NCT04633902 -NCT04631445 -NCT04634032 -NCT04631471 -NCT04634045 -NCT04631484 -NCT04634058 -NCT04631536 -NCT04634071 -NCT04631575 -NCT04640220 -NCT04634110 -NCT04636918 -NCT04634227 -NCT04636892 -NCT04634240 -NCT04636957 -NCT04634305 -NCT04636996 -NCT04634344 -NCT04637009 -NCT04634357 -NCT04637022 -NCT04634383 -NCT04637035 -NCT04634409 -NCT04637165 -NCT04634435 -NCT04637217 -NCT04634448 -NCT04637269 -NCT04634539 -NCT04637373 -NCT04634747 -NCT04637464 -NCT04634773 -NCT04637503 -NCT04634825 -NCT04637516 -NCT04634877 -NCT04637594 -NCT04635007 -NCT04637672 -NCT04635059 -NCT04637698 -NCT04635098 -NCT04637763 -NCT04635137 -NCT04638010 -NCT04635176 -NCT04638036 -NCT04635189 -NCT04638049 -NCT04635228 -NCT04638153 -NCT04635423 -NCT04638270 -NCT04635436 -NCT04638309 -NCT04635488 -NCT04638335 -NCT04635514 -NCT04638491 -NCT04635527 -NCT04638517 -NCT04635566 -NCT04638569 -NCT04635631 -NCT04638582 -NCT04635683 -NCT04638660 -NCT04635735 -NCT04638699 -NCT04635761 -NCT04638712 -NCT04635826 -NCT04638790 -NCT04635852 -NCT04638816 -NCT04635865 -NCT04638868 -NCT04635891 -NCT04639024 -NCT04635930 -NCT04639076 -NCT04635943 -NCT04639180 -NCT04635956 -NCT04639219 -NCT04635969 -NCT04639245 -NCT04635995 -NCT04639258 -NCT04636008 -NCT04639271 -NCT04636034 -NCT04639284 -NCT04636164 -NCT04639323 -NCT04636229 -NCT04639362 -NCT04636255 -NCT04639518 -NCT04636320 -NCT04639531 -NCT04636515 -NCT04639609 -NCT04636593 -NCT04639674 -NCT04636619 -NCT04639739 -NCT04636632 -NCT04639843 -NCT04636684 -NCT04639869 -NCT04636710 -NCT04639986 -NCT04636762 -NCT04640077 -NCT04636788 -NCT04640116 -NCT04636840 -NCT04646291 -NCT04640246 -NCT04643275 -NCT04640480 -NCT04643262 -NCT04640545 -NCT04643327 -NCT04640558 -NCT04643366 -NCT04640623 -NCT04643379 -NCT04640701 -NCT04643392 -NCT04640714 -NCT04643405 -NCT04640727 -NCT04643418 -NCT04640779 -NCT04643470 -NCT04640805 -NCT04643574 -NCT04640870 -NCT04643613 -NCT04640909 -NCT04643639 -NCT04641013 -NCT04643730 -NCT04641078 -NCT04643756 -NCT04641182 -NCT04643821 -NCT04641195 -NCT04643847 -NCT04641247 -NCT04643873 -NCT04641325 -NCT04644016 -NCT04641364 -NCT04644068 -NCT04641377 -NCT04644211 -NCT04641403 -NCT04644224 -NCT04641455 -NCT04644237 -NCT04641507 -NCT04644250 -NCT04641598 -NCT04644289 -NCT04641611 -NCT04644315 -NCT04641637 -NCT04644393 -NCT04641676 -NCT04644406 -NCT04641728 -NCT04644432 -NCT04641754 -NCT04644471 -NCT04641767 -NCT04644575 -NCT04641780 -NCT04644705 -NCT04641819 -NCT04644770 -NCT04641871 -NCT04644822 -NCT04641923 -NCT04644835 -NCT04642027 -NCT04644848 -NCT04642105 -NCT04644965 -NCT04642183 -NCT04645030 -NCT04642287 -NCT04645069 -NCT04642313 -NCT04645160 -NCT04642326 -NCT04645173 -NCT04642352 -NCT04645238 -NCT04642365 -NCT04645264 -NCT04642443 -NCT04645459 -NCT04642469 -NCT04645563 -NCT04642508 -NCT04645680 -NCT04642547 -NCT04645732 -NCT04642573 -NCT04645797 -NCT04642664 -NCT04645810 -NCT04642924 -NCT04645862 -NCT04642937 -NCT04645966 -NCT04642963 -NCT04646005 -NCT04643002 -NCT04646018 -NCT04643041 -NCT04646083 -NCT04643054 -NCT04646213 -NCT04643158 -NCT04646252 -NCT04643223 -NCT04652037 -NCT04646304 -NCT04649112 -NCT04646330 -NCT04649073 -NCT04646356 -NCT04649242 -NCT04646395 -NCT04649255 -NCT04646434 -NCT04649268 -NCT04646447 -NCT04649294 -NCT04646486 -NCT04649359 -NCT04646564 -NCT04649372 -NCT04646577 -NCT04649385 -NCT04646759 -NCT04649424 -NCT04646772 -NCT04649476 -NCT04646811 -NCT04649528 -NCT04646824 -NCT04649593 -NCT04646837 -NCT04649619 -NCT04646863 -NCT04649671 -NCT04646954 -NCT04649684 -NCT04647045 -NCT04649775 -NCT04647097 -NCT04649827 -NCT04647110 -NCT04649931 -NCT04647227 -NCT04649983 -NCT04647305 -NCT04650035 -NCT04647344 -NCT04650113 -NCT04647357 -NCT04650204 -NCT04647383 -NCT04650347 -NCT04647448 -NCT04650425 -NCT04647487 -NCT04650451 -NCT04647513 -NCT04650464 -NCT04647526 -NCT04650490 -NCT04647578 -NCT04650581 -NCT04647721 -NCT04650594 -NCT04647825 -NCT04650633 -NCT04647838 -NCT04650711 -NCT04647851 -NCT04650724 -NCT04647877 -NCT04650919 -NCT04647916 -NCT04650971 -NCT04647981 -NCT04650984 -NCT04647994 -NCT04651127 -NCT04648033 -NCT04651140 -NCT04648085 -NCT04651218 -NCT04648189 -NCT04651244 -NCT04648202 -NCT04651257 -NCT04648254 -NCT04651335 -NCT04648319 -NCT04651452 -NCT04648332 -NCT04651504 -NCT04648397 -NCT04651608 -NCT04648475 -NCT04651634 -NCT04648527 -NCT04651712 -NCT04648631 -NCT04651738 -NCT04648683 -NCT04651764 -NCT04648696 -NCT04651855 -NCT04648722 -NCT04651894 -NCT04648826 -NCT04651946 -NCT04648904 -NCT04651959 -NCT04648917 -NCT04651998 -NCT04648969 -NCT04652024 -NCT04649060 -NCT04658316 -NCT04652076 -NCT04655365 -NCT04652141 -NCT04655313 -NCT04652167 -NCT04655391 -NCT04652180 -NCT04655404 -NCT04652206 -NCT04655443 -NCT04652219 -NCT04655508 -NCT04652414 -NCT04655547 -NCT04652440 -NCT04655599 -NCT04652492 -NCT04655677 -NCT04652609 -NCT04655755 -NCT04652713 -NCT04655820 -NCT04652765 -NCT04655885 -NCT04652843 -NCT04655976 -NCT04653038 -NCT04656002 -NCT04653129 -NCT04656028 -NCT04653142 -NCT04656041 -NCT04653155 -NCT04656067 -NCT04653181 -NCT04656171 -NCT04653220 -NCT04656184 -NCT04653246 -NCT04656236 -NCT04653337 -NCT04656249 -NCT04653389 -NCT04656262 -NCT04653428 -NCT04656275 -NCT04653480 -NCT04656353 -NCT04653493 -NCT04656392 -NCT04653623 -NCT04656431 -NCT04653649 -NCT04656457 -NCT04653662 -NCT04656496 -NCT04653714 -NCT04656535 -NCT04653740 -NCT04656652 -NCT04653753 -NCT04656678 -NCT04653818 -NCT04656730 -NCT04653870 -NCT04656886 -NCT04653896 -NCT04656951 -NCT04653909 -NCT04657068 -NCT04653935 -NCT04657081 -NCT04654026 -NCT04657094 -NCT04654182 -NCT04657120 -NCT04654247 -NCT04657224 -NCT04654338 -NCT04657276 -NCT04654377 -NCT04657302 -NCT04654403 -NCT04657315 -NCT04654429 -NCT04657406 -NCT04654520 -NCT04657562 -NCT04654559 -NCT04657679 -NCT04654637 -NCT04657822 -NCT04654689 -NCT04657848 -NCT04654832 -NCT04657861 -NCT04654845 -NCT04657874 -NCT04655014 -NCT04657887 -NCT04655118 -NCT04657913 -NCT04655131 -NCT04657952 -NCT04655144 -NCT04657991 -NCT04655157 -NCT04658004 -NCT04655183 -NCT04658147 -NCT04655300 -NCT04663490 -NCT04658342 -NCT04660929 -NCT04658381 -NCT04660864 -NCT04658524 -NCT04661007 -NCT04658589 -NCT04661020 -NCT04658641 -NCT04661046 -NCT04658667 -NCT04661098 -NCT04658706 -NCT04661111 -NCT04658797 -NCT04661137 -NCT04658836 -NCT04661150 -NCT04658849 -NCT04661176 -NCT04658862 -NCT04661189 -NCT04658888 -NCT04661202 -NCT04659005 -NCT04661241 -NCT04659044 -NCT04661267 -NCT04659096 -NCT04661306 -NCT04659109 -NCT04661319 -NCT04659200 -NCT04661371 -NCT04659265 -NCT04661384 -NCT04659330 -NCT04661475 -NCT04659369 -NCT04661605 -NCT04659382 -NCT04661670 -NCT04659421 -NCT04661696 -NCT04659434 -NCT04661722 -NCT04659499 -NCT04661748 -NCT04659525 -NCT04661800 -NCT04659551 -NCT04661826 -NCT04659564 -NCT04661852 -NCT04659603 -NCT04661943 -NCT04659616 -NCT04661969 -NCT04659629 -NCT04662099 -NCT04659733 -NCT04662112 -NCT04659785 -NCT04662255 -NCT04659798 -NCT04662294 -NCT04659811 -NCT04662346 -NCT04659889 -NCT04662398 -NCT04659980 -NCT04662437 -NCT04660006 -NCT04662515 -NCT04660019 -NCT04662528 -NCT04660045 -NCT04662554 -NCT04660123 -NCT04662580 -NCT04660188 -NCT04662645 -NCT04660201 -NCT04662710 -NCT04660214 -NCT04662879 -NCT04660292 -NCT04662944 -NCT04660344 -NCT04662996 -NCT04660357 -NCT04663035 -NCT04660370 -NCT04663100 -NCT04660461 -NCT04663113 -NCT04660500 -NCT04663126 -NCT04660591 -NCT04663165 -NCT04660630 -NCT04663178 -NCT04660643 -NCT04663230 -NCT04660760 -NCT04663334 -NCT04660799 -NCT04663347 -NCT04660812 -NCT04663412 -NCT04660825 -NCT04668833 -NCT04663516 -NCT04666090 -NCT04663568 -NCT04666038 -NCT04663659 -NCT04666103 -NCT04663685 -NCT04666129 -NCT04663698 -NCT04666168 -NCT04663763 -NCT04666259 -NCT04663789 -NCT04666272 -NCT04663997 -NCT04666480 -NCT04664075 -NCT04666558 -NCT04664179 -NCT04666623 -NCT04664231 -NCT04666649 -NCT04664244 -NCT04666688 -NCT04664478 -NCT04666740 -NCT04664504 -NCT04666805 -NCT04664543 -NCT04666909 -NCT04664582 -NCT04666948 -NCT04664647 -NCT04666961 -NCT04664725 -NCT04667065 -NCT04664764 -NCT04667195 -NCT04664816 -NCT04667221 -NCT04664829 -NCT04667325 -NCT04664894 -NCT04667338 -NCT04664972 -NCT04667351 -NCT04665011 -NCT04667403 -NCT04665063 -NCT04667429 -NCT04665076 -NCT04667481 -NCT04665115 -NCT04667520 -NCT04665128 -NCT04667585 -NCT04665154 -NCT04667650 -NCT04665206 -NCT04667663 -NCT04665245 -NCT04667689 -NCT04665258 -NCT04667715 -NCT04665284 -NCT04667741 -NCT04665362 -NCT04667793 -NCT04665414 -NCT04667845 -NCT04665531 -NCT04667884 -NCT04665544 -NCT04667910 -NCT04665596 -NCT04667936 -NCT04665609 -NCT04667975 -NCT04665635 -NCT04668001 -NCT04665661 -NCT04668014 -NCT04665674 -NCT04668053 -NCT04665700 -NCT04668300 -NCT04665713 -NCT04668365 -NCT04665739 -NCT04668404 -NCT04665752 -NCT04668495 -NCT04665765 -NCT04668508 -NCT04665843 -NCT04668547 -NCT04665856 -NCT04668599 -NCT04665869 -NCT04668625 -NCT04665882 -NCT04668690 -NCT04665908 -NCT04668716 -NCT04665921 -NCT04668768 -NCT04665947 -NCT04668781 -NCT04665973 -NCT04668794 -NCT04665986 -NCT04673708 -NCT04668885 -NCT04671329 -NCT04668924 -NCT04671303 -NCT04668950 -NCT04671368 -NCT04668976 -NCT04671420 -NCT04668989 -NCT04671446 -NCT04669002 -NCT04671459 -NCT04669015 -NCT04671472 -NCT04669028 -NCT04671485 -NCT04669067 -NCT04671511 -NCT04669119 -NCT04671524 -NCT04669145 -NCT04671667 -NCT04669171 -NCT04671693 -NCT04669197 -NCT04671719 -NCT04669210 -NCT04671823 -NCT04669223 -NCT04671849 -NCT04669275 -NCT04671862 -NCT04669288 -NCT04671901 -NCT04669301 -NCT04671979 -NCT04669327 -NCT04672005 -NCT04669496 -NCT04672031 -NCT04669574 -NCT04672174 -NCT04669587 -NCT04672187 -NCT04669613 -NCT04672265 -NCT04669704 -NCT04672304 -NCT04669730 -NCT04672317 -NCT04669808 -NCT04672330 -NCT04669847 -NCT04672356 -NCT04669873 -NCT04672369 -NCT04669899 -NCT04672408 -NCT04669938 -NCT04672421 -NCT04669951 -NCT04672434 -NCT04670016 -NCT04672460 -NCT04670029 -NCT04672473 -NCT04670055 -NCT04672551 -NCT04670068 -NCT04672603 -NCT04670107 -NCT04672642 -NCT04670120 -NCT04672681 -NCT04670146 -NCT04672837 -NCT04670250 -NCT04672876 -NCT04670289 -NCT04672928 -NCT04670393 -NCT04672980 -NCT04670445 -NCT04673019 -NCT04670484 -NCT04673123 -NCT04670549 -NCT04673136 -NCT04670562 -NCT04673175 -NCT04670679 -NCT04673201 -NCT04670718 -NCT04673266 -NCT04670809 -NCT04673396 -NCT04670887 -NCT04673448 -NCT04670952 -NCT04673526 -NCT04670991 -NCT04673591 -NCT04671095 -NCT04673604 -NCT04671147 -NCT04673617 -NCT04671251 -NCT04673682 -NCT04671264 -NCT04673695 -NCT04671290 -NCT04678167 -NCT04673864 -NCT04675983 -NCT04673903 -NCT04675944 -NCT04673942 -NCT04675996 -NCT04673955 -NCT04676009 -NCT04673968 -NCT04676035 -NCT04673981 -NCT04676048 -NCT04674072 -NCT04676087 -NCT04674137 -NCT04676113 -NCT04674150 -NCT04676243 -NCT04674202 -NCT04676269 -NCT04674241 -NCT04676334 -NCT04674267 -NCT04676360 -NCT04674293 -NCT04676399 -NCT04674306 -NCT04676412 -NCT04674345 -NCT04676477 -NCT04674423 -NCT04676516 -NCT04674488 -NCT04676594 -NCT04674514 -NCT04676607 -NCT04674527 -NCT04676633 -NCT04674579 -NCT04676646 -NCT04674605 -NCT04676659 -NCT04674683 -NCT04676685 -NCT04674696 -NCT04676776 -NCT04674709 -NCT04676789 -NCT04674722 -NCT04676828 -NCT04674735 -NCT04676867 -NCT04674748 -NCT04676997 -NCT04674813 -NCT04677049 -NCT04674852 -NCT04677088 -NCT04674956 -NCT04677140 -NCT04675008 -NCT04677192 -NCT04675021 -NCT04677244 -NCT04675034 -NCT04677296 -NCT04675060 -NCT04677348 -NCT04675164 -NCT04677361 -NCT04675177 -NCT04677413 -NCT04675190 -NCT04677439 -NCT04675216 -NCT04677465 -NCT04675294 -NCT04677504 -NCT04675333 -NCT04677517 -NCT04675385 -NCT04677543 -NCT04675398 -NCT04677569 -NCT04675450 -NCT04677595 -NCT04675463 -NCT04677621 -NCT04675476 -NCT04677634 -NCT04675515 -NCT04677673 -NCT04675528 -NCT04677777 -NCT04675541 -NCT04677803 -NCT04675697 -NCT04677816 -NCT04675710 -NCT04677842 -NCT04675723 -NCT04677855 -NCT04675775 -NCT04677972 -NCT04675827 -NCT04678050 -NCT04675866 -NCT04678089 -NCT04675892 -NCT04678102 -NCT04675918 -NCT04683952 -NCT04678336 -NCT04681560 -NCT04678349 -NCT04681469 -NCT04678362 -NCT04681573 -NCT04678401 -NCT04681599 -NCT04678427 -NCT04681612 -NCT04678440 -NCT04681625 -NCT04678453 -NCT04681677 -NCT04678492 -NCT04681768 -NCT04678544 -NCT04681820 -NCT04678583 -NCT04681833 -NCT04678648 -NCT04681911 -NCT04678791 -NCT04681963 -NCT04678804 -NCT04681989 -NCT04678830 -NCT04682093 -NCT04678895 -NCT04682119 -NCT04678908 -NCT04682158 -NCT04678921 -NCT04682171 -NCT04679012 -NCT04682210 -NCT04679038 -NCT04682249 -NCT04679064 -NCT04682340 -NCT04679090 -NCT04682405 -NCT04679116 -NCT04682431 -NCT04679129 -NCT04682457 -NCT04679194 -NCT04682548 -NCT04679233 -NCT04682808 -NCT04679324 -NCT04682834 -NCT04679389 -NCT04682860 -NCT04679454 -NCT04682873 -NCT04679480 -NCT04682964 -NCT04679519 -NCT04682977 -NCT04679662 -NCT04683003 -NCT04679675 -NCT04683068 -NCT04679727 -NCT04683107 -NCT04679883 -NCT04683120 -NCT04679935 -NCT04683172 -NCT04679987 -NCT04683185 -NCT04680013 -NCT04683198 -NCT04680052 -NCT04683250 -NCT04680182 -NCT04683263 -NCT04680260 -NCT04683315 -NCT04680442 -NCT04683354 -NCT04680468 -NCT04683367 -NCT04680598 -NCT04683406 -NCT04680702 -NCT04683419 -NCT04680715 -NCT04683497 -NCT04680806 -NCT04683549 -NCT04680832 -NCT04683575 -NCT04680923 -NCT04683653 -NCT04680936 -NCT04683679 -NCT04680988 -NCT04683731 -NCT04681066 -NCT04683796 -NCT04681105 -NCT04683887 -NCT04681131 -NCT04683913 -NCT04681183 -NCT04683926 -NCT04681287 -NCT04683939 -NCT04681417 -NCT04689295 -NCT04683965 -NCT04686799 -NCT04684017 -NCT04686682 -NCT04684095 -NCT04686851 -NCT04684108 -NCT04687020 -NCT04684147 -NCT04687033 -NCT04684199 -NCT04687098 -NCT04684290 -NCT04687124 -NCT04684355 -NCT04687163 -NCT04684368 -NCT04687176 -NCT04684381 -NCT04687189 -NCT04684459 -NCT04687215 -NCT04684472 -NCT04687241 -NCT04684563 -NCT04687254 -NCT04684628 -NCT04687371 -NCT04684641 -NCT04687384 -NCT04684654 -NCT04687410 -NCT04684667 -NCT04687423 -NCT04684862 -NCT04687631 -NCT04684927 -NCT04687657 -NCT04684940 -NCT04687761 -NCT04684979 -NCT04687878 -NCT04685005 -NCT04687943 -NCT04685070 -NCT04687956 -NCT04685109 -NCT04687995 -NCT04685135 -NCT04688021 -NCT04685200 -NCT04688034 -NCT04685213 -NCT04688112 -NCT04685226 -NCT04688125 -NCT04685343 -NCT04688151 -NCT04685434 -NCT04688190 -NCT04685460 -NCT04688333 -NCT04685473 -NCT04688385 -NCT04685499 -NCT04688398 -NCT04685525 -NCT04688437 -NCT04685551 -NCT04688463 -NCT04685577 -NCT04688476 -NCT04685616 -NCT04688528 -NCT04685694 -NCT04688658 -NCT04685759 -NCT04688697 -NCT04685772 -NCT04688788 -NCT04685785 -NCT04688801 -NCT04685798 -NCT04688853 -NCT04685811 -NCT04688905 -NCT04685863 -NCT04688931 -NCT04685915 -NCT04688983 -NCT04685928 -NCT04689009 -NCT04686006 -NCT04689048 -NCT04686071 -NCT04689087 -NCT04686305 -NCT04689100 -NCT04686318 -NCT04689165 -NCT04686357 -NCT04689178 -NCT04686383 -NCT04689191 -NCT04686435 -NCT04689204 -NCT04686500 -NCT04689230 -NCT04686617 -NCT04689243 -NCT04686630 -NCT04695171 -NCT04689347 -NCT04692090 -NCT04689529 -NCT04692051 -NCT04689594 -NCT04692103 -NCT04689607 -NCT04692155 -NCT04689659 -NCT04692233 -NCT04689815 -NCT04692337 -NCT04689828 -NCT04692454 -NCT04689893 -NCT04692597 -NCT04689906 -NCT04692675 -NCT04690075 -NCT04692740 -NCT04690166 -NCT04692805 -NCT04690192 -NCT04692818 -NCT04690205 -NCT04692831 -NCT04690283 -NCT04692844 -NCT04690322 -NCT04692948 -NCT04690348 -NCT04692987 -NCT04690374 -NCT04693104 -NCT04690439 -NCT04693156 -NCT04690491 -NCT04693169 -NCT04690543 -NCT04693234 -NCT04690595 -NCT04693247 -NCT04690634 -NCT04693299 -NCT04690686 -NCT04693312 -NCT04690699 -NCT04693338 -NCT04690803 -NCT04693377 -NCT04690816 -NCT04693468 -NCT04690855 -NCT04693624 -NCT04691011 -NCT04693676 -NCT04691063 -NCT04693689 -NCT04691089 -NCT04693702 -NCT04691128 -NCT04693832 -NCT04691141 -NCT04693871 -NCT04691258 -NCT04693910 -NCT04691284 -NCT04693936 -NCT04691297 -NCT04694040 -NCT04691310 -NCT04694053 -NCT04691349 -NCT04694066 -NCT04691375 -NCT04694079 -NCT04691388 -NCT04694092 -NCT04691414 -NCT04694183 -NCT04691440 -NCT04694313 -NCT04691453 -NCT04694508 -NCT04691544 -NCT04694521 -NCT04691583 -NCT04694534 -NCT04691648 -NCT04694560 -NCT04691687 -NCT04694586 -NCT04691713 -NCT04694612 -NCT04691752 -NCT04694677 -NCT04691765 -NCT04694729 -NCT04691791 -NCT04694781 -NCT04691804 -NCT04694820 -NCT04691817 -NCT04694846 -NCT04691830 -NCT04694859 -NCT04691947 -NCT04694885 -NCT04691960 -NCT04694989 -NCT04691999 -NCT04700163 -NCT04695184 -NCT04697940 -NCT04695223 -NCT04697875 -NCT04695275 -NCT04697992 -NCT04695327 -NCT04698083 -NCT04695379 -NCT04698187 -NCT04695418 -NCT04698213 -NCT04695431 -NCT04698239 -NCT04695470 -NCT04698252 -NCT04695483 -NCT04698265 -NCT04695600 -NCT04698304 -NCT04695626 -NCT04698421 -NCT04695782 -NCT04698460 -NCT04695795 -NCT04698499 -NCT04695847 -NCT04698525 -NCT04695860 -NCT04698551 -NCT04695912 -NCT04698564 -NCT04695925 -NCT04698668 -NCT04695964 -NCT04698759 -NCT04695977 -NCT04698772 -NCT04696029 -NCT04698785 -NCT04696055 -NCT04698915 -NCT04696133 -NCT04698928 -NCT04696263 -NCT04698941 -NCT04696276 -NCT04698967 -NCT04696289 -NCT04698993 -NCT04696341 -NCT04699045 -NCT04696432 -NCT04699071 -NCT04696497 -NCT04699123 -NCT04696510 -NCT04699136 -NCT04696575 -NCT04699175 -NCT04696640 -NCT04699188 -NCT04696666 -NCT04699279 -NCT04696692 -NCT04699292 -NCT04696705 -NCT04699344 -NCT04696731 -NCT04699357 -NCT04696757 -NCT04699461 -NCT04696770 -NCT04699487 -NCT04696848 -NCT04699513 -NCT04696874 -NCT04699578 -NCT04696939 -NCT04699591 -NCT04696952 -NCT04699630 -NCT04697043 -NCT04699643 -NCT04697069 -NCT04699656 -NCT04697186 -NCT04699721 -NCT04697264 -NCT04699760 -NCT04697290 -NCT04699773 -NCT04697368 -NCT04699786 -NCT04697498 -NCT04699838 -NCT04697524 -NCT04699929 -NCT04697563 -NCT04699968 -NCT04697576 -NCT04699994 -NCT04697628 -NCT04700059 -NCT04697641 -NCT04700072 -NCT04697693 -NCT04700111 -NCT04697784 -NCT04700124 -NCT04697797 -NCT04706169 -NCT04700176 -NCT04703322 -NCT04700280 -NCT04703231 -NCT04700319 -NCT04703426 -NCT04700332 -NCT04703439 -NCT04700410 -NCT04703543 -NCT04700436 -NCT04703569 -NCT04700475 -NCT04703595 -NCT04700488 -NCT04703608 -NCT04700501 -NCT04703647 -NCT04700514 -NCT04703686 -NCT04700540 -NCT04703699 -NCT04700579 -NCT04703803 -NCT04700592 -NCT04703920 -NCT04700748 -NCT04703959 -NCT04700761 -NCT04704076 -NCT04701021 -NCT04704141 -NCT04701034 -NCT04704154 -NCT04701060 -NCT04704193 -NCT04701086 -NCT04704219 -NCT04701229 -NCT04704245 -NCT04701242 -NCT04704258 -NCT04701281 -NCT04704284 -NCT04701307 -NCT04704297 -NCT04701476 -NCT04704336 -NCT04701554 -NCT04704349 -NCT04701645 -NCT04704401 -NCT04701736 -NCT04704414 -NCT04701853 -NCT04704453 -NCT04701879 -NCT04704466 -NCT04701918 -NCT04704505 -NCT04701944 -NCT04704531 -NCT04701957 -NCT04704661 -NCT04702009 -NCT04704856 -NCT04702022 -NCT04704934 -NCT04702061 -NCT04704947 -NCT04702139 -NCT04705025 -NCT04702152 -NCT04705038 -NCT04702204 -NCT04705090 -NCT04702217 -NCT04705129 -NCT04702373 -NCT04705337 -NCT04702425 -NCT04705350 -NCT04702503 -NCT04705363 -NCT04702581 -NCT04705389 -NCT04702620 -NCT04705467 -NCT04702737 -NCT04705519 -NCT04702750 -NCT04705558 -NCT04702776 -NCT04705571 -NCT04702841 -NCT04705597 -NCT04702854 -NCT04705649 -NCT04702880 -NCT04705727 -NCT04702893 -NCT04705753 -NCT04702932 -NCT04705818 -NCT04703062 -NCT04705883 -NCT04703101 -NCT04705909 -NCT04703192 -NCT04706104 -NCT04703218 -NCT04712448 -NCT04706338 -NCT04709146 -NCT04706364 -NCT04709133 -NCT04706416 -NCT04709276 -NCT04706455 -NCT04709302 -NCT04706520 -NCT04709380 -NCT04706533 -NCT04709393 -NCT04706559 -NCT04709445 -NCT04706598 -NCT04709458 -NCT04706676 -NCT04709601 -NCT04706689 -NCT04709653 -NCT04706715 -NCT04709731 -NCT04706819 -NCT04709744 -NCT04706910 -NCT04709770 -NCT04706936 -NCT04709822 -NCT04706949 -NCT04709965 -NCT04706962 -NCT04709978 -NCT04707001 -NCT04710043 -NCT04707079 -NCT04710160 -NCT04707092 -NCT04710186 -NCT04707118 -NCT04710238 -NCT04707196 -NCT04710290 -NCT04707209 -NCT04710407 -NCT04707248 -NCT04710459 -NCT04707274 -NCT04710472 -NCT04707287 -NCT04710498 -NCT04707300 -NCT04710628 -NCT04707365 -NCT04710641 -NCT04707521 -NCT04710654 -NCT04707547 -NCT04710745 -NCT04707560 -NCT04710758 -NCT04707573 -NCT04710797 -NCT04707664 -NCT04710862 -NCT04707820 -NCT04711109 -NCT04707885 -NCT04711122 -NCT04707937 -NCT04711135 -NCT04707963 -NCT04711148 -NCT04708041 -NCT04711161 -NCT04708054 -NCT04711252 -NCT04708067 -NCT04711356 -NCT04708093 -NCT04711421 -NCT04708158 -NCT04711447 -NCT04708210 -NCT04711473 -NCT04708249 -NCT04711551 -NCT04708288 -NCT04711642 -NCT04708314 -NCT04711655 -NCT04708327 -NCT04711720 -NCT04708418 -NCT04711824 -NCT04708444 -NCT04711863 -NCT04708470 -NCT04711876 -NCT04708483 -NCT04712032 -NCT04708639 -NCT04712097 -NCT04708743 -NCT04712149 -NCT04708860 -NCT04712201 -NCT04708925 -NCT04712214 -NCT04708951 -NCT04712396 -NCT04709055 -NCT04717583 -NCT04712539 -NCT04715100 -NCT04712552 -NCT04715087 -NCT04712643 -NCT04715113 -NCT04712721 -NCT04715126 -NCT04712760 -NCT04715139 -NCT04712799 -NCT04715191 -NCT04712825 -NCT04715217 -NCT04712851 -NCT04715256 -NCT04712864 -NCT04715438 -NCT04712903 -NCT04715542 -NCT04712942 -NCT04715568 -NCT04713007 -NCT04715581 -NCT04713046 -NCT04715620 -NCT04713085 -NCT04715633 -NCT04713098 -NCT04715685 -NCT04713150 -NCT04715724 -NCT04713189 -NCT04715867 -NCT04713202 -NCT04715932 -NCT04713241 -NCT04715945 -NCT04713293 -NCT04715958 -NCT04713332 -NCT04715971 -NCT04713345 -NCT04716010 -NCT04713371 -NCT04716049 -NCT04713423 -NCT04716075 -NCT04713449 -NCT04716114 -NCT04713475 -NCT04716127 -NCT04713514 -NCT04716153 -NCT04713527 -NCT04716166 -NCT04713579 -NCT04716244 -NCT04713761 -NCT04716309 -NCT04713852 -NCT04716322 -NCT04713891 -NCT04716374 -NCT04713917 -NCT04716452 -NCT04713930 -NCT04716543 -NCT04713956 -NCT04716582 -NCT04713969 -NCT04716634 -NCT04714021 -NCT04716686 -NCT04714086 -NCT04716699 -NCT04714099 -NCT04716712 -NCT04714190 -NCT04716725 -NCT04714203 -NCT04716738 -NCT04714372 -NCT04716751 -NCT04714398 -NCT04716868 -NCT04714424 -NCT04716920 -NCT04714567 -NCT04716933 -NCT04714593 -NCT04716946 -NCT04714619 -NCT04716985 -NCT04714658 -NCT04717050 -NCT04714697 -NCT04717154 -NCT04714736 -NCT04717206 -NCT04714827 -NCT04717219 -NCT04714840 -NCT04717271 -NCT04714931 -NCT04717362 -NCT04714983 -NCT04717375 -NCT04715061 -NCT04717531 -NCT04715074 -NCT04723173 -NCT04717609 -NCT04720209 -NCT04717622 -NCT04720170 -NCT04717661 -NCT04720235 -NCT04717674 -NCT04720339 -NCT04717687 -NCT04720417 -NCT04717700 -NCT04720469 -NCT04717765 -NCT04720521 -NCT04717804 -NCT04720651 -NCT04717999 -NCT04720664 -NCT04718038 -NCT04720690 -NCT04718103 -NCT04720716 -NCT04718233 -NCT04720729 -NCT04718246 -NCT04720768 -NCT04718285 -NCT04720794 -NCT04718298 -NCT04720807 -NCT04718324 -NCT04720950 -NCT04718337 -NCT04720976 -NCT04718376 -NCT04721002 -NCT04718389 -NCT04721015 -NCT04718402 -NCT04721028 -NCT04718415 -NCT04721041 -NCT04718545 -NCT04721106 -NCT04718558 -NCT04721132 -NCT04718584 -NCT04721223 -NCT04718597 -NCT04721301 -NCT04718610 -NCT04721470 -NCT04718649 -NCT04721756 -NCT04718662 -NCT04721795 -NCT04718675 -NCT04721886 -NCT04718701 -NCT04721977 -NCT04718740 -NCT04722120 -NCT04718766 -NCT04722133 -NCT04718831 -NCT04722146 -NCT04718883 -NCT04722172 -NCT04718909 -NCT04722237 -NCT04718948 -NCT04722341 -NCT04718987 -NCT04722393 -NCT04719065 -NCT04722432 -NCT04719104 -NCT04722458 -NCT04719156 -NCT04722523 -NCT04719273 -NCT04722575 -NCT04719416 -NCT04722588 -NCT04719455 -NCT04722601 -NCT04719468 -NCT04722614 -NCT04719572 -NCT04722692 -NCT04719624 -NCT04722718 -NCT04719715 -NCT04722796 -NCT04719754 -NCT04722848 -NCT04719819 -NCT04722952 -NCT04719832 -NCT04722965 -NCT04719910 -NCT04722978 -NCT04719962 -NCT04723004 -NCT04719988 -NCT04723030 -NCT04720092 -NCT04723121 -NCT04720131 -NCT04723147 -NCT04720157 -NCT04729608 -NCT04723342 -NCT04726397 -NCT04723394 -NCT04726345 -NCT04723524 -NCT04726501 -NCT04723589 -NCT04726748 -NCT04723719 -NCT04726787 -NCT04723745 -NCT04726878 -NCT04723758 -NCT04727008 -NCT04723810 -NCT04727034 -NCT04723862 -NCT04727112 -NCT04723875 -NCT04727151 -NCT04723901 -NCT04727164 -NCT04723914 -NCT04727177 -NCT04724018 -NCT04727242 -NCT04724135 -NCT04727307 -NCT04724226 -NCT04727424 -NCT04724239 -NCT04727541 -NCT04724291 -NCT04727554 -NCT04724330 -NCT04727593 -NCT04724356 -NCT04727606 -NCT04724369 -NCT04727632 -NCT04724460 -NCT04727710 -NCT04724499 -NCT04727736 -NCT04724512 -NCT04727853 -NCT04724577 -NCT04727866 -NCT04724590 -NCT04727892 -NCT04724876 -NCT04727918 -NCT04724928 -NCT04727996 -NCT04725032 -NCT04728035 -NCT04725045 -NCT04728113 -NCT04725123 -NCT04728139 -NCT04725175 -NCT04728191 -NCT04725188 -NCT04728217 -NCT04725214 -NCT04728230 -NCT04725305 -NCT04728269 -NCT04725331 -NCT04728321 -NCT04725396 -NCT04728334 -NCT04725448 -NCT04728386 -NCT04725474 -NCT04728399 -NCT04725565 -NCT04728412 -NCT04725734 -NCT04728425 -NCT04725786 -NCT04728438 -NCT04725812 -NCT04728568 -NCT04725903 -NCT04728633 -NCT04725929 -NCT04728685 -NCT04725994 -NCT04728724 -NCT04726020 -NCT04728841 -NCT04726033 -NCT04728880 -NCT04726046 -NCT04728893 -NCT04726059 -NCT04729114 -NCT04726085 -NCT04729205 -NCT04726150 -NCT04729218 -NCT04726215 -NCT04729322 -NCT04726241 -NCT04729348 -NCT04726306 -NCT04729387 -NCT04726319 -NCT04729543 -NCT04726332 -NCT04735068 -NCT04729621 -NCT04732572 -NCT04729634 -NCT04732546 -NCT04729647 -NCT04732598 -NCT04729725 -NCT04732650 -NCT04729842 -NCT04732663 -NCT04729933 -NCT04732728 -NCT04729959 -NCT04732793 -NCT04730076 -NCT04732845 -NCT04730154 -NCT04732897 -NCT04730219 -NCT04733027 -NCT04730232 -NCT04733040 -NCT04730245 -NCT04733079 -NCT04730258 -NCT04733092 -NCT04730349 -NCT04733118 -NCT04730505 -NCT04733170 -NCT04730544 -NCT04733183 -NCT04730583 -NCT04733248 -NCT04730713 -NCT04733274 -NCT04730752 -NCT04733326 -NCT04730765 -NCT04733417 -NCT04730843 -NCT04733469 -NCT04730869 -NCT04733495 -NCT04730973 -NCT04733521 -NCT04730986 -NCT04733534 -NCT04730999 -NCT04733573 -NCT04731038 -NCT04733755 -NCT04731129 -NCT04733768 -NCT04731233 -NCT04733781 -NCT04731246 -NCT04733794 -NCT04731376 -NCT04733820 -NCT04731428 -NCT04733924 -NCT04731441 -NCT04733937 -NCT04731467 -NCT04733950 -NCT04731493 -NCT04733963 -NCT04731558 -NCT04733976 -NCT04731610 -NCT04734080 -NCT04731636 -NCT04734093 -NCT04731675 -NCT04734119 -NCT04731727 -NCT04734184 -NCT04731740 -NCT04734236 -NCT04731805 -NCT04734249 -NCT04731818 -NCT04734262 -NCT04731844 -NCT04734444 -NCT04731909 -NCT04734457 -NCT04731974 -NCT04734522 -NCT04732026 -NCT04734561 -NCT04732052 -NCT04734665 -NCT04732065 -NCT04734691 -NCT04732156 -NCT04734704 -NCT04732260 -NCT04734730 -NCT04732286 -NCT04734795 -NCT04732442 -NCT04734821 -NCT04732455 -NCT04734925 -NCT04732494 -NCT04734990 -NCT04732520 -NCT04735055 -NCT04732533 -NCT04740307 -NCT04735094 -NCT04737681 -NCT04735107 -NCT04737642 -NCT04735133 -NCT04737837 -NCT04735198 -NCT04737889 -NCT04735302 -NCT04737954 -NCT04735432 -NCT04738058 -NCT04735445 -NCT04738162 -NCT04735458 -NCT04738188 -NCT04735471 -NCT04738201 -NCT04735484 -NCT04738240 -NCT04735575 -NCT04738292 -NCT04735614 -NCT04738305 -NCT04735627 -NCT04738409 -NCT04735705 -NCT04738422 -NCT04735783 -NCT04738487 -NCT04735796 -NCT04738630 -NCT04735861 -NCT04738643 -NCT04735874 -NCT04738786 -NCT04735900 -NCT04738812 -NCT04735978 -NCT04738851 -NCT04736030 -NCT04738864 -NCT04736056 -NCT04738890 -NCT04736095 -NCT04738955 -NCT04736108 -NCT04738968 -NCT04736121 -NCT04739033 -NCT04736173 -NCT04739046 -NCT04736186 -NCT04739085 -NCT04736199 -NCT04739111 -NCT04736264 -NCT04739202 -NCT04736394 -NCT04739293 -NCT04736472 -NCT04739319 -NCT04736485 -NCT04739345 -NCT04736537 -NCT04739358 -NCT04736563 -NCT04739423 -NCT04736576 -NCT04739436 -NCT04736589 -NCT04739527 -NCT04736602 -NCT04739553 -NCT04736706 -NCT04739566 -NCT04736758 -NCT04739592 -NCT04736810 -NCT04739618 -NCT04736823 -NCT04739644 -NCT04736836 -NCT04739670 -NCT04736914 -NCT04739696 -NCT04737031 -NCT04739722 -NCT04737070 -NCT04739761 -NCT04737109 -NCT04739800 -NCT04737187 -NCT04739813 -NCT04737213 -NCT04739839 -NCT04737265 -NCT04739891 -NCT04737278 -NCT04740021 -NCT04737330 -NCT04740034 -NCT04737343 -NCT04740164 -NCT04737382 -NCT04740190 -NCT04737395 -NCT04740203 -NCT04737538 -NCT04740255 -NCT04737577 -NCT04746469 -NCT04740320 -NCT04743310 -NCT04740333 -NCT04743232 -NCT04740346 -NCT04743323 -NCT04740359 -NCT04743349 -NCT04740398 -NCT04743362 -NCT04740424 -NCT04743505 -NCT04740554 -NCT04743583 -NCT04740697 -NCT04743596 -NCT04740749 -NCT04743609 -NCT04740788 -NCT04743661 -NCT04740866 -NCT04743804 -NCT04740918 -NCT04743921 -NCT04741126 -NCT04743934 -NCT04741139 -NCT04743999 -NCT04741165 -NCT04744064 -NCT04741204 -NCT04744116 -NCT04741256 -NCT04744168 -NCT04741295 -NCT04744285 -NCT04741308 -NCT04744506 -NCT04741334 -NCT04744532 -NCT04741438 -NCT04744636 -NCT04741477 -NCT04744649 -NCT04741490 -NCT04744675 -NCT04741503 -NCT04744701 -NCT04741620 -NCT04744753 -NCT04741737 -NCT04744766 -NCT04741763 -NCT04744818 -NCT04741802 -NCT04744831 -NCT04741880 -NCT04744935 -NCT04741932 -NCT04744974 -NCT04741945 -NCT04745039 -NCT04741958 -NCT04745156 -NCT04741971 -NCT04745195 -NCT04741984 -NCT04745234 -NCT04741997 -NCT04745247 -NCT04742075 -NCT04745299 -NCT04742088 -NCT04745390 -NCT04742101 -NCT04745403 -NCT04742114 -NCT04745559 -NCT04742127 -NCT04745676 -NCT04742153 -NCT04745689 -NCT04742205 -NCT04745754 -NCT04742231 -NCT04745832 -NCT04742361 -NCT04745858 -NCT04742465 -NCT04745871 -NCT04742543 -NCT04745897 -NCT04742556 -NCT04745910 -NCT04742595 -NCT04745949 -NCT04742608 -NCT04745975 -NCT04742634 -NCT04745988 -NCT04742959 -NCT04746066 -NCT04742972 -NCT04746092 -NCT04743089 -NCT04746131 -NCT04743102 -NCT04746209 -NCT04743115 -NCT04746235 -NCT04743167 -NCT04752215 -NCT04746599 -NCT04749875 -NCT04746612 -NCT04749810 -NCT04746638 -NCT04749914 -NCT04746742 -NCT04749992 -NCT04746768 -NCT04750044 -NCT04746859 -NCT04750083 -NCT04746924 -NCT04750122 -NCT04747002 -NCT04750226 -NCT04747054 -NCT04750239 -NCT04747093 -NCT04750252 -NCT04747145 -NCT04750317 -NCT04747236 -NCT04750369 -NCT04747249 -NCT04750382 -NCT04747262 -NCT04750421 -NCT04747275 -NCT04750460 -NCT04747353 -NCT04750473 -NCT04747444 -NCT04750590 -NCT04747470 -NCT04750772 -NCT04747483 -NCT04750824 -NCT04747561 -NCT04750850 -NCT04747652 -NCT04750928 -NCT04747717 -NCT04750941 -NCT04747808 -NCT04750954 -NCT04747912 -NCT04750993 -NCT04747925 -NCT04751006 -NCT04747951 -NCT04751019 -NCT04747964 -NCT04751058 -NCT04748042 -NCT04751123 -NCT04748237 -NCT04751136 -NCT04748263 -NCT04751149 -NCT04748302 -NCT04751201 -NCT04748380 -NCT04751214 -NCT04748393 -NCT04751305 -NCT04748406 -NCT04751370 -NCT04748419 -NCT04751383 -NCT04748523 -NCT04751409 -NCT04748640 -NCT04751435 -NCT04748731 -NCT04751552 -NCT04748796 -NCT04751656 -NCT04748848 -NCT04751734 -NCT04748978 -NCT04751747 -NCT04748991 -NCT04751773 -NCT04749017 -NCT04751786 -NCT04749056 -NCT04751799 -NCT04749108 -NCT04751877 -NCT04749303 -NCT04751929 -NCT04749355 -NCT04751942 -NCT04749381 -NCT04751955 -NCT04749394 -NCT04751994 -NCT04749472 -NCT04752007 -NCT04749485 -NCT04752059 -NCT04749563 -NCT04752137 -NCT04749589 -NCT04752150 -NCT04749602 -NCT04752163 -NCT04749641 -NCT04752202 -NCT04749693 -NCT04758897 -NCT04752267 -NCT04755517 -NCT04752280 -NCT04755465 -NCT04752332 -NCT04755543 -NCT04752358 -NCT04755647 -NCT04752371 -NCT04755738 -NCT04752384 -NCT04755868 -NCT04752410 -NCT04755881 -NCT04752449 -NCT04755920 -NCT04752475 -NCT04756050 -NCT04752527 -NCT04756141 -NCT04752553 -NCT04756193 -NCT04752592 -NCT04756271 -NCT04752696 -NCT04756362 -NCT04752722 -NCT04756401 -NCT04752813 -NCT04756440 -NCT04752826 -NCT04756505 -NCT04752930 -NCT04756557 -NCT04753034 -NCT04756596 -NCT04753190 -NCT04756648 -NCT04753203 -NCT04756713 -NCT04753216 -NCT04756726 -NCT04753255 -NCT04756739 -NCT04753307 -NCT04756765 -NCT04753359 -NCT04756778 -NCT04753879 -NCT04756921 -NCT04753918 -NCT04756934 -NCT04754035 -NCT04756986 -NCT04754100 -NCT04757064 -NCT04754126 -NCT04757090 -NCT04754152 -NCT04757116 -NCT04754178 -NCT04757155 -NCT04754191 -NCT04757337 -NCT04754243 -NCT04757363 -NCT04754321 -NCT04757376 -NCT04754347 -NCT04757441 -NCT04754399 -NCT04757545 -NCT04754412 -NCT04757571 -NCT04754425 -NCT04757597 -NCT04754503 -NCT04757662 -NCT04754516 -NCT04757688 -NCT04754529 -NCT04757779 -NCT04754594 -NCT04758000 -NCT04754607 -NCT04758117 -NCT04754633 -NCT04758338 -NCT04754672 -NCT04758351 -NCT04754815 -NCT04758455 -NCT04754880 -NCT04758481 -NCT04754945 -NCT04758507 -NCT04754997 -NCT04758533 -NCT04755010 -NCT04758624 -NCT04755023 -NCT04758650 -NCT04755101 -NCT04758767 -NCT04755114 -NCT04758780 -NCT04755179 -NCT04758871 -NCT04755244 -NCT04758884 -NCT04755452 -NCT04764513 -NCT04758923 -NCT04762277 -NCT04758949 -NCT04762225 -NCT04758962 -NCT04762446 -NCT04758975 -NCT04762459 -NCT04758988 -NCT04762485 -NCT04759131 -NCT04762498 -NCT04759144 -NCT04762563 -NCT04759183 -NCT04762615 -NCT04759248 -NCT04762641 -NCT04759261 -NCT04762667 -NCT04759352 -NCT04762745 -NCT04759378 -NCT04762810 -NCT04759430 -NCT04762823 -NCT04759534 -NCT04762875 -NCT04759586 -NCT04762888 -NCT04759833 -NCT04762901 -NCT04759846 -NCT04762940 -NCT04759859 -NCT04762953 -NCT04759911 -NCT04762979 -NCT04759937 -NCT04763031 -NCT04759989 -NCT04763057 -NCT04760080 -NCT04763083 -NCT04760145 -NCT04763109 -NCT04760210 -NCT04763122 -NCT04760288 -NCT04763135 -NCT04760327 -NCT04763174 -NCT04760340 -NCT04763187 -NCT04760366 -NCT04763395 -NCT04760379 -NCT04763538 -NCT04760405 -NCT04763616 -NCT04760431 -NCT04763629 -NCT04760483 -NCT04763642 -NCT04760548 -NCT04763694 -NCT04760561 -NCT04763824 -NCT04760821 -NCT04763876 -NCT04761003 -NCT04763902 -NCT04761042 -NCT04763915 -NCT04761146 -NCT04763928 -NCT04761172 -NCT04763941 -NCT04761185 -NCT04763967 -NCT04761198 -NCT04763980 -NCT04761250 -NCT04764006 -NCT04761289 -NCT04764084 -NCT04761419 -NCT04764097 -NCT04761549 -NCT04764110 -NCT04761562 -NCT04764136 -NCT04761601 -NCT04764188 -NCT04761614 -NCT04764227 -NCT04761744 -NCT04764253 -NCT04761757 -NCT04764292 -NCT04761770 -NCT04764344 -NCT04762030 -NCT04764370 -NCT04762069 -NCT04764396 -NCT04762108 -NCT04764461 -NCT04762160 -NCT04764487 -NCT04762199 -NCT04770688 -NCT04764552 -NCT04767659 -NCT04764578 -NCT04767620 -NCT04764643 -NCT04767698 -NCT04764682 -NCT04767802 -NCT04764695 -NCT04767906 -NCT04764760 -NCT04767919 -NCT04764903 -NCT04767945 -NCT04764942 -NCT04767984 -NCT04765020 -NCT04768010 -NCT04765059 -NCT04768062 -NCT04765072 -NCT04768075 -NCT04765098 -NCT04768088 -NCT04765111 -NCT04768257 -NCT04765228 -NCT04768296 -NCT04765241 -NCT04768400 -NCT04765293 -NCT04768426 -NCT04765423 -NCT04768439 -NCT04765514 -NCT04768465 -NCT04765527 -NCT04768491 -NCT04765618 -NCT04768517 -NCT04765644 -NCT04768608 -NCT04765709 -NCT04768647 -NCT04765722 -NCT04768660 -NCT04765930 -NCT04768686 -NCT04765943 -NCT04768699 -NCT04766190 -NCT04768803 -NCT04766216 -NCT04768868 -NCT04766229 -NCT04768881 -NCT04766242 -NCT04768894 -NCT04766268 -NCT04769050 -NCT04766307 -NCT04769076 -NCT04766320 -NCT04769180 -NCT04766359 -NCT04769323 -NCT04766489 -NCT04769375 -NCT04766502 -NCT04769388 -NCT04766593 -NCT04769401 -NCT04766632 -NCT04769414 -NCT04766645 -NCT04769479 -NCT04766723 -NCT04769531 -NCT04766827 -NCT04769661 -NCT04766840 -NCT04769713 -NCT04766853 -NCT04769895 -NCT04766931 -NCT04769908 -NCT04767048 -NCT04769973 -NCT04767074 -NCT04770090 -NCT04767152 -NCT04770142 -NCT04767165 -NCT04770207 -NCT04767295 -NCT04770220 -NCT04767308 -NCT04770246 -NCT04767412 -NCT04770272 -NCT04767425 -NCT04770337 -NCT04767464 -NCT04770441 -NCT04767503 -NCT04770454 -NCT04767516 -NCT04770467 -NCT04767542 -NCT04770623 -NCT04767568 -NCT04776525 -NCT04770701 -NCT04773535 -NCT04770714 -NCT04773522 -NCT04770727 -NCT04773613 -NCT04770740 -NCT04773626 -NCT04770792 -NCT04773639 -NCT04770896 -NCT04773652 -NCT04770909 -NCT04773769 -NCT04770935 -NCT04773782 -NCT04770948 -NCT04773821 -NCT04770961 -NCT04773899 -NCT04771065 -NCT04773951 -NCT04771130 -NCT04774029 -NCT04771221 -NCT04774068 -NCT04771390 -NCT04774133 -NCT04771481 -NCT04774172 -NCT04771507 -NCT04774367 -NCT04771520 -NCT04774380 -NCT04771533 -NCT04774393 -NCT04771559 -NCT04774419 -NCT04771572 -NCT04774445 -NCT04771663 -NCT04774497 -NCT04771741 -NCT04774536 -NCT04771871 -NCT04774679 -NCT04771897 -NCT04774718 -NCT04771910 -NCT04774744 -NCT04771936 -NCT04774757 -NCT04771975 -NCT04774796 -NCT04772001 -NCT04774952 -NCT04772053 -NCT04775069 -NCT04772105 -NCT04775108 -NCT04772118 -NCT04775121 -NCT04772183 -NCT04775290 -NCT04772196 -NCT04775381 -NCT04772235 -NCT04775394 -NCT04772287 -NCT04775485 -NCT04772378 -NCT04775498 -NCT04772456 -NCT04775550 -NCT04772573 -NCT04775602 -NCT04772677 -NCT04775680 -NCT04772690 -NCT04775745 -NCT04772755 -NCT04775758 -NCT04772846 -NCT04775810 -NCT04772937 -NCT04775836 -NCT04772963 -NCT04775862 -NCT04772989 -NCT04775901 -NCT04773028 -NCT04775940 -NCT04773093 -NCT04776018 -NCT04773184 -NCT04776057 -NCT04773197 -NCT04776083 -NCT04773249 -NCT04776109 -NCT04773275 -NCT04776148 -NCT04773327 -NCT04776291 -NCT04773353 -NCT04776330 -NCT04773366 -NCT04776395 -NCT04773470 -NCT04776447 -NCT04773509 -NCT04782791 -NCT04776590 -NCT04779788 -NCT04776616 -NCT04779749 -NCT04776655 -NCT04780165 -NCT04776668 -NCT04780217 -NCT04776681 -NCT04780230 -NCT04776876 -NCT04780347 -NCT04776889 -NCT04780399 -NCT04776941 -NCT04780464 -NCT04776980 -NCT04780477 -NCT04777071 -NCT04780529 -NCT04777084 -NCT04780568 -NCT04777162 -NCT04780750 -NCT04777188 -NCT04780802 -NCT04777396 -NCT04780828 -NCT04777409 -NCT04780893 -NCT04777474 -NCT04780906 -NCT04777526 -NCT04780945 -NCT04777682 -NCT04780958 -NCT04777708 -NCT04780997 -NCT04777734 -NCT04781062 -NCT04777786 -NCT04781088 -NCT04777851 -NCT04781192 -NCT04777903 -NCT04781270 -NCT04777942 -NCT04781374 -NCT04777981 -NCT04781387 -NCT04777994 -NCT04781413 -NCT04778176 -NCT04781426 -NCT04778254 -NCT04781452 -NCT04778306 -NCT04781582 -NCT04778345 -NCT04781686 -NCT04778358 -NCT04781712 -NCT04778384 -NCT04781725 -NCT04778397 -NCT04781738 -NCT04778579 -NCT04781842 -NCT04778670 -NCT04781855 -NCT04778683 -NCT04781894 -NCT04778748 -NCT04781959 -NCT04778800 -NCT04781985 -NCT04778826 -NCT04782037 -NCT04778839 -NCT04782063 -NCT04778865 -NCT04782076 -NCT04778956 -NCT04782089 -NCT04778982 -NCT04782167 -NCT04779047 -NCT04782193 -NCT04779125 -NCT04782206 -NCT04779151 -NCT04782349 -NCT04779190 -NCT04782440 -NCT04779255 -NCT04782479 -NCT04779359 -NCT04782557 -NCT04779450 -NCT04782596 -NCT04779489 -NCT04782609 -NCT04779515 -NCT04782687 -NCT04779554 -NCT04782713 -NCT04779567 -NCT04782726 -NCT04779593 -NCT04782752 -NCT04779645 -NCT04789668 -NCT04782804 -NCT04786353 -NCT04782856 -NCT04786262 -NCT04782895 -NCT04786457 -NCT04782986 -NCT04786522 -NCT04783038 -NCT04786535 -NCT04783129 -NCT04786587 -NCT04783168 -NCT04786600 -NCT04783259 -NCT04786743 -NCT04783337 -NCT04786795 -NCT04783363 -NCT04786847 -NCT04783402 -NCT04786873 -NCT04783415 -NCT04786886 -NCT04783441 -NCT04786951 -NCT04783467 -NCT04786964 -NCT04783532 -NCT04787003 -NCT04783636 -NCT04787029 -NCT04783714 -NCT04787042 -NCT04783727 -NCT04787263 -NCT04783805 -NCT04787289 -NCT04783922 -NCT04787328 -NCT04783974 -NCT04787341 -NCT04784052 -NCT04787354 -NCT04784065 -NCT04787744 -NCT04784104 -NCT04787757 -NCT04784182 -NCT04787939 -NCT04784208 -NCT04787991 -NCT04784221 -NCT04788043 -NCT04784234 -NCT04788095 -NCT04784247 -NCT04788147 -NCT04784312 -NCT04788264 -NCT04784351 -NCT04788407 -NCT04784507 -NCT04788420 -NCT04784520 -NCT04788433 -NCT04784546 -NCT04788459 -NCT04784585 -NCT04788472 -NCT04784715 -NCT04788745 -NCT04784780 -NCT04788758 -NCT04784988 -NCT04788771 -NCT04785014 -NCT04788914 -NCT04785040 -NCT04789057 -NCT04785196 -NCT04789083 -NCT04785235 -NCT04789096 -NCT04785248 -NCT04789109 -NCT04785287 -NCT04789135 -NCT04785365 -NCT04789187 -NCT04785534 -NCT04789200 -NCT04785599 -NCT04789317 -NCT04785612 -NCT04789408 -NCT04785768 -NCT04789421 -NCT04785820 -NCT04789434 -NCT04785833 -NCT04789447 -NCT04785924 -NCT04789486 -NCT04785950 -NCT04789538 -NCT04786028 -NCT04789629 -NCT04786041 -NCT04789655 -NCT04786093 -NCT04795466 -NCT04789681 -NCT04792385 -NCT04789694 -NCT04792255 -NCT04789720 -NCT04792450 -NCT04789733 -NCT04792489 -NCT04789824 -NCT04792502 -NCT04789902 -NCT04792515 -NCT04789941 -NCT04792749 -NCT04789993 -NCT04792892 -NCT04790006 -NCT04792931 -NCT04790019 -NCT04792944 -NCT04790045 -NCT04792957 -NCT04790058 -NCT04792970 -NCT04790097 -NCT04793035 -NCT04790110 -NCT04793256 -NCT04790253 -NCT04793321 -NCT04790305 -NCT04793399 -NCT04790370 -NCT04793412 -NCT04790409 -NCT04793646 -NCT04790435 -NCT04793724 -NCT04790448 -NCT04793737 -NCT04790474 -NCT04793763 -NCT04790487 -NCT04793776 -NCT04790500 -NCT04793789 -NCT04790513 -NCT04793815 -NCT04790539 -NCT04793919 -NCT04790578 -NCT04793932 -NCT04790591 -NCT04793958 -NCT04790669 -NCT04794023 -NCT04790682 -NCT04794049 -NCT04790695 -NCT04794075 -NCT04790708 -NCT04794088 -NCT04790799 -NCT04794127 -NCT04790903 -NCT04794140 -NCT04790968 -NCT04794244 -NCT04790994 -NCT04794595 -NCT04791033 -NCT04794634 -NCT04791059 -NCT04794660 -NCT04791111 -NCT04794673 -NCT04791176 -NCT04794699 -NCT04791202 -NCT04794777 -NCT04791228 -NCT04794803 -NCT04791241 -NCT04794842 -NCT04791384 -NCT04794881 -NCT04791397 -NCT04794972 -NCT04791410 -NCT04794985 -NCT04791462 -NCT04795063 -NCT04791475 -NCT04795089 -NCT04791579 -NCT04795128 -NCT04791683 -NCT04795180 -NCT04791735 -NCT04795245 -NCT04791839 -NCT04795271 -NCT04791930 -NCT04795310 -NCT04791956 -NCT04795349 -NCT04791982 -NCT04795427 -NCT04792073 -NCT04795440 -NCT04792164 -NCT04801082 -NCT04795557 -NCT04798053 -NCT04795570 -NCT04797936 -NCT04795596 -NCT04798079 -NCT04795609 -NCT04798248 -NCT04795661 -NCT04798313 -NCT04795713 -NCT04798326 -NCT04795869 -NCT04798339 -NCT04795882 -NCT04798365 -NCT04795934 -NCT04798378 -NCT04795947 -NCT04798469 -NCT04796012 -NCT04798547 -NCT04796025 -NCT04798586 -NCT04796051 -NCT04798612 -NCT04796090 -NCT04798625 -NCT04796129 -NCT04798690 -NCT04796155 -NCT04798703 -NCT04796194 -NCT04798768 -NCT04796220 -NCT04798781 -NCT04796246 -NCT04798820 -NCT04796324 -NCT04798859 -NCT04796350 -NCT04798898 -NCT04796363 -NCT04798911 -NCT04796441 -NCT04798963 -NCT04796454 -NCT04799002 -NCT04796467 -NCT04799015 -NCT04796532 -NCT04799054 -NCT04796597 -NCT04799132 -NCT04796623 -NCT04799223 -NCT04796675 -NCT04799249 -NCT04796688 -NCT04799275 -NCT04796740 -NCT04799314 -NCT04796753 -NCT04799392 -NCT04796818 -NCT04799405 -NCT04796857 -NCT04799418 -NCT04796922 -NCT04799431 -NCT04796935 -NCT04799548 -NCT04796948 -NCT04799561 -NCT04796987 -NCT04799639 -NCT04797000 -NCT04799834 -NCT04797013 -NCT04799847 -NCT04797078 -NCT04800185 -NCT04797182 -NCT04800393 -NCT04797468 -NCT04800406 -NCT04797494 -NCT04800419 -NCT04797507 -NCT04800445 -NCT04797520 -NCT04800458 -NCT04797572 -NCT04800510 -NCT04797611 -NCT04800562 -NCT04797702 -NCT04800627 -NCT04797715 -NCT04800783 -NCT04797728 -NCT04800822 -NCT04797767 -NCT04800887 -NCT04797780 -NCT04800939 -NCT04797806 -NCT04800978 -NCT04797884 -NCT04800991 -NCT04797923 -NCT04806139 -NCT04801095 -NCT04803604 -NCT04801121 -NCT04803539 -NCT04801147 -NCT04803630 -NCT04801160 -NCT04803643 -NCT04801212 -NCT04803760 -NCT04801238 -NCT04803773 -NCT04801251 -NCT04803825 -NCT04801264 -NCT04803851 -NCT04801342 -NCT04803877 -NCT04801355 -NCT04803916 -NCT04801459 -NCT04803929 -NCT04801472 -NCT04803994 -NCT04801511 -NCT04804007 -NCT04801550 -NCT04804020 -NCT04801719 -NCT04804111 -NCT04801732 -NCT04804163 -NCT04801771 -NCT04804254 -NCT04801797 -NCT04804267 -NCT04801862 -NCT04804280 -NCT04801875 -NCT04804293 -NCT04801953 -NCT04804371 -NCT04801966 -NCT04804410 -NCT04802018 -NCT04804592 -NCT04802031 -NCT04804618 -NCT04802044 -NCT04804644 -NCT04802070 -NCT04804683 -NCT04802161 -NCT04804696 -NCT04802174 -NCT04804709 -NCT04802291 -NCT04804787 -NCT04802356 -NCT04804800 -NCT04802486 -NCT04804839 -NCT04802551 -NCT04804943 -NCT04802590 -NCT04805021 -NCT04802603 -NCT04805060 -NCT04802668 -NCT04805112 -NCT04802720 -NCT04805138 -NCT04802759 -NCT04805177 -NCT04802837 -NCT04805190 -NCT04802850 -NCT04805203 -NCT04802876 -NCT04805229 -NCT04802954 -NCT04805268 -NCT04802980 -NCT04805307 -NCT04803019 -NCT04805320 -NCT04803032 -NCT04805333 -NCT04803110 -NCT04805515 -NCT04803123 -NCT04805528 -NCT04803136 -NCT04805580 -NCT04803188 -NCT04805710 -NCT04803201 -NCT04805723 -NCT04803266 -NCT04805736 -NCT04803305 -NCT04805775 -NCT04803318 -NCT04805788 -NCT04803331 -NCT04805801 -NCT04803474 -NCT04806035 -NCT04803487 -NCT04806100 -NCT04803526 -NCT04811027 -NCT04806178 -NCT04808648 -NCT04806243 -NCT04808609 -NCT04806269 -NCT04808674 -NCT04806282 -NCT04808687 -NCT04806334 -NCT04808726 -NCT04806373 -NCT04808752 -NCT04806399 -NCT04808765 -NCT04806412 -NCT04808778 -NCT04806464 -NCT04808791 -NCT04806646 -NCT04808817 -NCT04806659 -NCT04808843 -NCT04806698 -NCT04808856 -NCT04806711 -NCT04808869 -NCT04806724 -NCT04808921 -NCT04806763 -NCT04808999 -NCT04806789 -NCT04809012 -NCT04806815 -NCT04809025 -NCT04806828 -NCT04809103 -NCT04806854 -NCT04809142 -NCT04806867 -NCT04809181 -NCT04806906 -NCT04809324 -NCT04806945 -NCT04809376 -NCT04807010 -NCT04809389 -NCT04807023 -NCT04809441 -NCT04807140 -NCT04809467 -NCT04807166 -NCT04809714 -NCT04807192 -NCT04809727 -NCT04807244 -NCT04809740 -NCT04807335 -NCT04809766 -NCT04807361 -NCT04809779 -NCT04807426 -NCT04809792 -NCT04807465 -NCT04809805 -NCT04807569 -NCT04809883 -NCT04807673 -NCT04809909 -NCT04807777 -NCT04809935 -NCT04807803 -NCT04809974 -NCT04807816 -NCT04810052 -NCT04807881 -NCT04810078 -NCT04807894 -NCT04810091 -NCT04807972 -NCT04810104 -NCT04808037 -NCT04810156 -NCT04808115 -NCT04810208 -NCT04808232 -NCT04810299 -NCT04808245 -NCT04810325 -NCT04808323 -NCT04810351 -NCT04808349 -NCT04810429 -NCT04808362 -NCT04810442 -NCT04808375 -NCT04810585 -NCT04808427 -NCT04810611 -NCT04808453 -NCT04810832 -NCT04808466 -NCT04810871 -NCT04808518 -NCT04810910 -NCT04808531 -NCT04810936 -NCT04808570 -NCT04810949 -NCT04808583 -NCT04811001 -NCT04808596 -NCT04817241 -NCT04811079 -NCT04814108 -NCT04811118 -NCT04814095 -NCT04811196 -NCT04814147 -NCT04811248 -NCT04814173 -NCT04811365 -NCT04814186 -NCT04811378 -NCT04814212 -NCT04811495 -NCT04814251 -NCT04811534 -NCT04814303 -NCT04811560 -NCT04814368 -NCT04811586 -NCT04814420 -NCT04811703 -NCT04814485 -NCT04811846 -NCT04814524 -NCT04811898 -NCT04814563 -NCT04811950 -NCT04814615 -NCT04811963 -NCT04814875 -NCT04812002 -NCT04814940 -NCT04812054 -NCT04815083 -NCT04812093 -NCT04815213 -NCT04812119 -NCT04815226 -NCT04812132 -NCT04815291 -NCT04812197 -NCT04815317 -NCT04812327 -NCT04815330 -NCT04812340 -NCT04815356 -NCT04812366 -NCT04815369 -NCT04812418 -NCT04815408 -NCT04812470 -NCT04815421 -NCT04812509 -NCT04815551 -NCT04812535 -NCT04815577 -NCT04812652 -NCT04815694 -NCT04812691 -NCT04815707 -NCT04812704 -NCT04815720 -NCT04812730 -NCT04815811 -NCT04812743 -NCT04815889 -NCT04812756 -NCT04815928 -NCT04812808 -NCT04815954 -NCT04812860 -NCT04815980 -NCT04813055 -NCT04816006 -NCT04813107 -NCT04816045 -NCT04813172 -NCT04816136 -NCT04813380 -NCT04816214 -NCT04813406 -NCT04816370 -NCT04813471 -NCT04816409 -NCT04813523 -NCT04816448 -NCT04813575 -NCT04816461 -NCT04813614 -NCT04816513 -NCT04813640 -NCT04816526 -NCT04813653 -NCT04816630 -NCT04813705 -NCT04816786 -NCT04813887 -NCT04816838 -NCT04813900 -NCT04816851 -NCT04813965 -NCT04816864 -NCT04814004 -NCT04816877 -NCT04814030 -NCT04816916 -NCT04814043 -NCT04816981 -NCT04814056 -NCT04817033 -NCT04814069 -NCT04823351 -NCT04817254 -NCT04820621 -NCT04817293 -NCT04820569 -NCT04817462 -NCT04820764 -NCT04817514 -NCT04820829 -NCT04817540 -NCT04821141 -NCT04817566 -NCT04821167 -NCT04817592 -NCT04821219 -NCT04817631 -NCT04821232 -NCT04817683 -NCT04821245 -NCT04817735 -NCT04821258 -NCT04817761 -NCT04821284 -NCT04817826 -NCT04821297 -NCT04817865 -NCT04821349 -NCT04817956 -NCT04821375 -NCT04818021 -NCT04821466 -NCT04818112 -NCT04821505 -NCT04818125 -NCT04821583 -NCT04818138 -NCT04821609 -NCT04818203 -NCT04821622 -NCT04818268 -NCT04821726 -NCT04818307 -NCT04821765 -NCT04818333 -NCT04821778 -NCT04818359 -NCT04821830 -NCT04818372 -NCT04821843 -NCT04818411 -NCT04821869 -NCT04818437 -NCT04821882 -NCT04818502 -NCT04821908 -NCT04818632 -NCT04821960 -NCT04818853 -NCT04822077 -NCT04818931 -NCT04822090 -NCT04818996 -NCT04822272 -NCT04819009 -NCT04822298 -NCT04819100 -NCT04822337 -NCT04819139 -NCT04822363 -NCT04819178 -NCT04822389 -NCT04819243 -NCT04822402 -NCT04819269 -NCT04822506 -NCT04819373 -NCT04822519 -NCT04819399 -NCT04822584 -NCT04819451 -NCT04822597 -NCT04819477 -NCT04822675 -NCT04819516 -NCT04822701 -NCT04819646 -NCT04822753 -NCT04819685 -NCT04822766 -NCT04819763 -NCT04822805 -NCT04819854 -NCT04822831 -NCT04819958 -NCT04822844 -NCT04819971 -NCT04822909 -NCT04819997 -NCT04822935 -NCT04820010 -NCT04822974 -NCT04820023 -NCT04823052 -NCT04820036 -NCT04823065 -NCT04820049 -NCT04823091 -NCT04820114 -NCT04823195 -NCT04820179 -NCT04823221 -NCT04820413 -NCT04828733 -NCT04823377 -NCT04825769 -NCT04823403 -NCT04825639 -NCT04823416 -NCT04825808 -NCT04823468 -NCT04825912 -NCT04823494 -NCT04825925 -NCT04823520 -NCT04825938 -NCT04823559 -NCT04825977 -NCT04823624 -NCT04825990 -NCT04823637 -NCT04826003 -NCT04823741 -NCT04826016 -NCT04823767 -NCT04826029 -NCT04823780 -NCT04826042 -NCT04823832 -NCT04826107 -NCT04823845 -NCT04826185 -NCT04823858 -NCT04826198 -NCT04823871 -NCT04826211 -NCT04823897 -NCT04826237 -NCT04823923 -NCT04826315 -NCT04823936 -NCT04826341 -NCT04824014 -NCT04826367 -NCT04824027 -NCT04826393 -NCT04824053 -NCT04826406 -NCT04824079 -NCT04826432 -NCT04824092 -NCT04826458 -NCT04824183 -NCT04826575 -NCT04824339 -NCT04826614 -NCT04824365 -NCT04826679 -NCT04824391 -NCT04826835 -NCT04824417 -NCT04826887 -NCT04824443 -NCT04826952 -NCT04824599 -NCT04826978 -NCT04824625 -NCT04827004 -NCT04824742 -NCT04827069 -NCT04824794 -NCT04827238 -NCT04824833 -NCT04827446 -NCT04824859 -NCT04827459 -NCT04824911 -NCT04827485 -NCT04824924 -NCT04827524 -NCT04824937 -NCT04827576 -NCT04824950 -NCT04827602 -NCT04825002 -NCT04827641 -NCT04825067 -NCT04827719 -NCT04825080 -NCT04827732 -NCT04825119 -NCT04827745 -NCT04825223 -NCT04827810 -NCT04825275 -NCT04827862 -NCT04825288 -NCT04827875 -NCT04825314 -NCT04827953 -NCT04825392 -NCT04828161 -NCT04825418 -NCT04828174 -NCT04825457 -NCT04828395 -NCT04825470 -NCT04828486 -NCT04825483 -NCT04828616 -NCT04825496 -NCT04828655 -NCT04825574 -NCT04828707 -NCT04825626 -NCT04835129 -NCT04828798 -NCT04832399 -NCT04828850 -NCT04832204 -NCT04828889 -NCT04832438 -NCT04828928 -NCT04832490 -NCT04829032 -NCT04832529 -NCT04829097 -NCT04832542 -NCT04829136 -NCT04832555 -NCT04829214 -NCT04832594 -NCT04829383 -NCT04832763 -NCT04829461 -NCT04832776 -NCT04829539 -NCT04832854 -NCT04829565 -NCT04832880 -NCT04829604 -NCT04832906 -NCT04829643 -NCT04832919 -NCT04829708 -NCT04832958 -NCT04829734 -NCT04832997 -NCT04829890 -NCT04833023 -NCT04830085 -NCT04833036 -NCT04830124 -NCT04833075 -NCT04830137 -NCT04833114 -NCT04830267 -NCT04833192 -NCT04830332 -NCT04833205 -NCT04830488 -NCT04833257 -NCT04830501 -NCT04833335 -NCT04830579 -NCT04833387 -NCT04830592 -NCT04833426 -NCT04830748 -NCT04833439 -NCT04830787 -NCT04833491 -NCT04830813 -NCT04833582 -NCT04830852 -NCT04833608 -NCT04831034 -NCT04833621 -NCT04831047 -NCT04833790 -NCT04831099 -NCT04833894 -NCT04831125 -NCT04833946 -NCT04831138 -NCT04833959 -NCT04831190 -NCT04833985 -NCT04831307 -NCT04834024 -NCT04831320 -NCT04834089 -NCT04831437 -NCT04834154 -NCT04831450 -NCT04834167 -NCT04831476 -NCT04834206 -NCT04831528 -NCT04834349 -NCT04831541 -NCT04834362 -NCT04831567 -NCT04834479 -NCT04831580 -NCT04834531 -NCT04831593 -NCT04834544 -NCT04831645 -NCT04834622 -NCT04831658 -NCT04834635 -NCT04831671 -NCT04834674 -NCT04831710 -NCT04834778 -NCT04831788 -NCT04834791 -NCT04831814 -NCT04834843 -NCT04831827 -NCT04834973 -NCT04831905 -NCT04834986 -NCT04831957 -NCT04835064 -NCT04832113 -NCT04840303 -NCT04835142 -NCT04837716 -NCT04835155 -NCT04837677 -NCT04835246 -NCT04837742 -NCT04835298 -NCT04837794 -NCT04835389 -NCT04837820 -NCT04835402 -NCT04837833 -NCT04835415 -NCT04837859 -NCT04835428 -NCT04837885 -NCT04835519 -NCT04837950 -NCT04835558 -NCT04837963 -NCT04835571 -NCT04838002 -NCT04835584 -NCT04838015 -NCT04835610 -NCT04838028 -NCT04835623 -NCT04838041 -NCT04835649 -NCT04838080 -NCT04835662 -NCT04838210 -NCT04835688 -NCT04838249 -NCT04835714 -NCT04838301 -NCT04835766 -NCT04838353 -NCT04835792 -NCT04838496 -NCT04835805 -NCT04838548 -NCT04835857 -NCT04838613 -NCT04835870 -NCT04838626 -NCT04835896 -NCT04838652 -NCT04836013 -NCT04838678 -NCT04836091 -NCT04838756 -NCT04836156 -NCT04838782 -NCT04836195 -NCT04838873 -NCT04836221 -NCT04838886 -NCT04836286 -NCT04838899 -NCT04836390 -NCT04838964 -NCT04836429 -NCT04839003 -NCT04836507 -NCT04839029 -NCT04836520 -NCT04839055 -NCT04836598 -NCT04839081 -NCT04836663 -NCT04839120 -NCT04836676 -NCT04839367 -NCT04836728 -NCT04839419 -NCT04836741 -NCT04839445 -NCT04836832 -NCT04839471 -NCT04836871 -NCT04839497 -NCT04836884 -NCT04839510 -NCT04836897 -NCT04839614 -NCT04836949 -NCT04839731 -NCT04837027 -NCT04839835 -NCT04837040 -NCT04839848 -NCT04837066 -NCT04839900 -NCT04837079 -NCT04839952 -NCT04837118 -NCT04839991 -NCT04837196 -NCT04840004 -NCT04837209 -NCT04840017 -NCT04837248 -NCT04840069 -NCT04837326 -NCT04840186 -NCT04837378 -NCT04840264 -NCT04837508 -NCT04840290 -NCT04837547 -NCT04845932 -NCT04840394 -NCT04843033 -NCT04840433 -NCT04842994 -NCT04840472 -NCT04843098 -NCT04840511 -NCT04843176 -NCT04840576 -NCT04843215 -NCT04840589 -NCT04843267 -NCT04840602 -NCT04843293 -NCT04840615 -NCT04843306 -NCT04840693 -NCT04843319 -NCT04840719 -NCT04843332 -NCT04840758 -NCT04843345 -NCT04840771 -NCT04843358 -NCT04840784 -NCT04843397 -NCT04840875 -NCT04843423 -NCT04841057 -NCT04843579 -NCT04841135 -NCT04843709 -NCT04841148 -NCT04843787 -NCT04841174 -NCT04843800 -NCT04841187 -NCT04843865 -NCT04841213 -NCT04843891 -NCT04841239 -NCT04843904 -NCT04841265 -NCT04843943 -NCT04841356 -NCT04843956 -NCT04841421 -NCT04844073 -NCT04841434 -NCT04844086 -NCT04841460 -NCT04844112 -NCT04841538 -NCT04844164 -NCT04841590 -NCT04844177 -NCT04841616 -NCT04844190 -NCT04841629 -NCT04844385 -NCT04841733 -NCT04844424 -NCT04841811 -NCT04844437 -NCT04841928 -NCT04844489 -NCT04842006 -NCT04844528 -NCT04842019 -NCT04844645 -NCT04842071 -NCT04844736 -NCT04842162 -NCT04844749 -NCT04842318 -NCT04844801 -NCT04842370 -NCT04844814 -NCT04842474 -NCT04844866 -NCT04842487 -NCT04844970 -NCT04842513 -NCT04844983 -NCT04842526 -NCT04845009 -NCT04842552 -NCT04845022 -NCT04842565 -NCT04845035 -NCT04842604 -NCT04845139 -NCT04842617 -NCT04845165 -NCT04842630 -NCT04845347 -NCT04842656 -NCT04845490 -NCT04842669 -NCT04845503 -NCT04842799 -NCT04845555 -NCT04842812 -NCT04845633 -NCT04842877 -NCT04845776 -NCT04842890 -NCT04845828 -NCT04842942 -NCT04845919 -NCT04842968 -NCT04852497 -NCT04846010 -NCT04849273 -NCT04846140 -NCT04849260 -NCT04846179 -NCT04849351 -NCT04846231 -NCT04849364 -NCT04846296 -NCT04849377 -NCT04846309 -NCT04849416 -NCT04846413 -NCT04849572 -NCT04846439 -NCT04849650 -NCT04846452 -NCT04849676 -NCT04846465 -NCT04849715 -NCT04846478 -NCT04849858 -NCT04846634 -NCT04849871 -NCT04846803 -NCT04849910 -NCT04846829 -NCT04850001 -NCT04846842 -NCT04850040 -NCT04846855 -NCT04850053 -NCT04846894 -NCT04850157 -NCT04846920 -NCT04850170 -NCT04847050 -NCT04850235 -NCT04847063 -NCT04850300 -NCT04847089 -NCT04850430 -NCT04847141 -NCT04850495 -NCT04847167 -NCT04850547 -NCT04847284 -NCT04850599 -NCT04847414 -NCT04850664 -NCT04847453 -NCT04850742 -NCT04847466 -NCT04850755 -NCT04847505 -NCT04850846 -NCT04847544 -NCT04850885 -NCT04847661 -NCT04851067 -NCT04847700 -NCT04851119 -NCT04847726 -NCT04851132 -NCT04847752 -NCT04851145 -NCT04847908 -NCT04851184 -NCT04847934 -NCT04851275 -NCT04847999 -NCT04851444 -NCT04848051 -NCT04851483 -NCT04848064 -NCT04851496 -NCT04848116 -NCT04851613 -NCT04848181 -NCT04851639 -NCT04848311 -NCT04851717 -NCT04848337 -NCT04851730 -NCT04848389 -NCT04851769 -NCT04848415 -NCT04851834 -NCT04848454 -NCT04852081 -NCT04848480 -NCT04852172 -NCT04848519 -NCT04852185 -NCT04848532 -NCT04852198 -NCT04848545 -NCT04852211 -NCT04848597 -NCT04852237 -NCT04848753 -NCT04852328 -NCT04848870 -NCT04852367 -NCT04848909 -NCT04852406 -NCT04848974 -NCT04852419 -NCT04849078 -NCT04852471 -NCT04849234 -NCT04859088 -NCT04852510 -NCT04856150 -NCT04852588 -NCT04856137 -NCT04852679 -NCT04856176 -NCT04852731 -NCT04856189 -NCT04852887 -NCT04856215 -NCT04853017 -NCT04856228 -NCT04853043 -NCT04856254 -NCT04853056 -NCT04856267 -NCT04853095 -NCT04856280 -NCT04853199 -NCT04856306 -NCT04853277 -NCT04856371 -NCT04853303 -NCT04856475 -NCT04853316 -NCT04856514 -NCT04853329 -NCT04856566 -NCT04853342 -NCT04856631 -NCT04853498 -NCT04856644 -NCT04853589 -NCT04856696 -NCT04853680 -NCT04856735 -NCT04853693 -NCT04856774 -NCT04853745 -NCT04856787 -NCT04853784 -NCT04856852 -NCT04853901 -NCT04856865 -NCT04853914 -NCT04856969 -NCT04854018 -NCT04856995 -NCT04854044 -NCT04857008 -NCT04854122 -NCT04857021 -NCT04854213 -NCT04857138 -NCT04854434 -NCT04857164 -NCT04854447 -NCT04857372 -NCT04854499 -NCT04857489 -NCT04854668 -NCT04857502 -NCT04854681 -NCT04857645 -NCT04854746 -NCT04857684 -NCT04854967 -NCT04857697 -NCT04854993 -NCT04857749 -NCT04855110 -NCT04857905 -NCT04855136 -NCT04858009 -NCT04855214 -NCT04858074 -NCT04855253 -NCT04858256 -NCT04855266 -NCT04858269 -NCT04855331 -NCT04858282 -NCT04855370 -NCT04858334 -NCT04855435 -NCT04858386 -NCT04855448 -NCT04858464 -NCT04855487 -NCT04858516 -NCT04855552 -NCT04858529 -NCT04855656 -NCT04858581 -NCT04855695 -NCT04858763 -NCT04855812 -NCT04858841 -NCT04855838 -NCT04858867 -NCT04855929 -NCT04858880 -NCT04855955 -NCT04858919 -NCT04856020 -NCT04858958 -NCT04856072 -NCT04858997 -NCT04856085 -NCT04859075 -NCT04856111 -NCT04865159 -NCT04859127 -NCT04861480 -NCT04859205 -NCT04861467 -NCT04859218 -NCT04861506 -NCT04859335 -NCT04861558 -NCT04859361 -NCT04861571 -NCT04859400 -NCT04861584 -NCT04859465 -NCT04861649 -NCT04859504 -NCT04861701 -NCT04859517 -NCT04861753 -NCT04859530 -NCT04861779 -NCT04859543 -NCT04861805 -NCT04859569 -NCT04861896 -NCT04859582 -NCT04861922 -NCT04859608 -NCT04861948 -NCT04859621 -NCT04861987 -NCT04859712 -NCT04862000 -NCT04859725 -NCT04862039 -NCT04859751 -NCT04862078 -NCT04859777 -NCT04862091 -NCT04859829 -NCT04862143 -NCT04859959 -NCT04862195 -NCT04860037 -NCT04862208 -NCT04860063 -NCT04862260 -NCT04860154 -NCT04862273 -NCT04860180 -NCT04862325 -NCT04860232 -NCT04862429 -NCT04860245 -NCT04862455 -NCT04860310 -NCT04862533 -NCT04860362 -NCT04862585 -NCT04860375 -NCT04862650 -NCT04860453 -NCT04862663 -NCT04860466 -NCT04862676 -NCT04860622 -NCT04862767 -NCT04860674 -NCT04862780 -NCT04860700 -NCT04862793 -NCT04860726 -NCT04862806 -NCT04860752 -NCT04863079 -NCT04860804 -NCT04863092 -NCT04860817 -NCT04863157 -NCT04860856 -NCT04863248 -NCT04860934 -NCT04863339 -NCT04861038 -NCT04863430 -NCT04861077 -NCT04863456 -NCT04861090 -NCT04863885 -NCT04861129 -NCT04863950 -NCT04861155 -NCT04864054 -NCT04861181 -NCT04864067 -NCT04861194 -NCT04864379 -NCT04861207 -NCT04864405 -NCT04861220 -NCT04864418 -NCT04861246 -NCT04864431 -NCT04861259 -NCT04864522 -NCT04861298 -NCT04864717 -NCT04861337 -NCT04864782 -NCT04861415 -NCT04864821 -NCT04861454 -NCT04875585 -NCT04865289 -NCT04870762 -NCT04865471 -NCT04870697 -NCT04865549 -NCT04870788 -NCT04865705 -NCT04870840 -NCT04865731 -NCT04870866 -NCT04865887 -NCT04870879 -NCT04865939 -NCT04870905 -NCT04866017 -NCT04870944 -NCT04866056 -NCT04871139 -NCT04866108 -NCT04871204 -NCT04866134 -NCT04871282 -NCT04866381 -NCT04871334 -NCT04866394 -NCT04871347 -NCT04866485 -NCT04871399 -NCT04866641 -NCT04871412 -NCT04866654 -NCT04871490 -NCT04866680 -NCT04871516 -NCT04866810 -NCT04871529 -NCT04866836 -NCT04871594 -NCT04866862 -NCT04871607 -NCT04867096 -NCT04871854 -NCT04867122 -NCT04872023 -NCT04867330 -NCT04872166 -NCT04867590 -NCT04872413 -NCT04867850 -NCT04872478 -NCT04867928 -NCT04872517 -NCT04868045 -NCT04872543 -NCT04868097 -NCT04872556 -NCT04868149 -NCT04872582 -NCT04868162 -NCT04872595 -NCT04868227 -NCT04872608 -NCT04868344 -NCT04872634 -NCT04868604 -NCT04872790 -NCT04868708 -NCT04872985 -NCT04868747 -NCT04873284 -NCT04868773 -NCT04873362 -NCT04868812 -NCT04873375 -NCT04868877 -NCT04873440 -NCT04869137 -NCT04873661 -NCT04869267 -NCT04873895 -NCT04869371 -NCT04874025 -NCT04869449 -NCT04874038 -NCT04869475 -NCT04874194 -NCT04869488 -NCT04874207 -NCT04869618 -NCT04874246 -NCT04869683 -NCT04874259 -NCT04869943 -NCT04874311 -NCT04869956 -NCT04874480 -NCT04870034 -NCT04874506 -NCT04870112 -NCT04874831 -NCT04870177 -NCT04874844 -NCT04870190 -NCT04874883 -NCT04870320 -NCT04874935 -NCT04870515 -NCT04875195 -NCT04870580 -NCT04875325 -NCT04870645 -NCT04886986 -NCT04875611 -NCT04880811 -NCT04875728 -NCT04880798 -NCT04875793 -NCT04880837 -NCT04875806 -NCT04880863 -NCT04875871 -NCT04881032 -NCT04875975 -NCT04881045 -NCT04876092 -NCT04881240 -NCT04876248 -NCT04881487 -NCT04876313 -NCT04881604 -NCT04876456 -NCT04881669 -NCT04876560 -NCT04881838 -NCT04876599 -NCT04881929 -NCT04876651 -NCT04881981 -NCT04876755 -NCT04882033 -NCT04877080 -NCT04882111 -NCT04877275 -NCT04882163 -NCT04877340 -NCT04882241 -NCT04877522 -NCT04882306 -NCT04877587 -NCT04882345 -NCT04877613 -NCT04882423 -NCT04877717 -NCT04882462 -NCT04877821 -NCT04882618 -NCT04877860 -NCT04882917 -NCT04877925 -NCT04883125 -NCT04878016 -NCT04883242 -NCT04878029 -NCT04883281 -NCT04878094 -NCT04883437 -NCT04878107 -NCT04883645 -NCT04878185 -NCT04883671 -NCT04878250 -NCT04883749 -NCT04878484 -NCT04883775 -NCT04878692 -NCT04883814 -NCT04878952 -NCT04883970 -NCT04879004 -NCT04884009 -NCT04879017 -NCT04884035 -NCT04879043 -NCT04884282 -NCT04879121 -NCT04884360 -NCT04879264 -NCT04884906 -NCT04879329 -NCT04884984 -NCT04879368 -NCT04884997 -NCT04879563 -NCT04885127 -NCT04879589 -NCT04885270 -NCT04879654 -NCT04885309 -NCT04879849 -NCT04885413 -NCT04879888 -NCT04885439 -NCT04879927 -NCT04885998 -NCT04879940 -NCT04886193 -NCT04880044 -NCT04886206 -NCT04880148 -NCT04886271 -NCT04880369 -NCT04886531 -NCT04880382 -NCT04886622 -NCT04880434 -NCT04886700 -NCT04880603 -NCT04886765 -NCT04880681 -NCT04886804 -NCT04880746 -NCT04886921 -NCT04880772 -NCT04895358 -NCT04887012 -NCT04891068 -NCT04887025 -NCT04891016 -NCT04887194 -NCT04891185 -NCT04887259 -NCT04891198 -NCT04887298 -NCT04891289 -NCT04887311 -NCT04891536 -NCT04887506 -NCT04891653 -NCT04887805 -NCT04891744 -NCT04887831 -NCT04891757 -NCT04887857 -NCT04891809 -NCT04887870 -NCT04891874 -NCT04887935 -NCT04891900 -NCT04887961 -NCT04892017 -NCT04888312 -NCT04892043 -NCT04888403 -NCT04892160 -NCT04888429 -NCT04892173 -NCT04888442 -NCT04892264 -NCT04888468 -NCT04892277 -NCT04888481 -NCT04892303 -NCT04888546 -NCT04892329 -NCT04888611 -NCT04892342 -NCT04888663 -NCT04892446 -NCT04888741 -NCT04892472 -NCT04888806 -NCT04892498 -NCT04888975 -NCT04892524 -NCT04889066 -NCT04892667 -NCT04889118 -NCT04892693 -NCT04889144 -NCT04892875 -NCT04889352 -NCT04892914 -NCT04889456 -NCT04892953 -NCT04889651 -NCT04892966 -NCT04889716 -NCT04893018 -NCT04889742 -NCT04893109 -NCT04889755 -NCT04893252 -NCT04889768 -NCT04893421 -NCT04889820 -NCT04893434 -NCT04889859 -NCT04893551 -NCT04889924 -NCT04893564 -NCT04889989 -NCT04893759 -NCT04890015 -NCT04893785 -NCT04890028 -NCT04893889 -NCT04890054 -NCT04893915 -NCT04890093 -NCT04894123 -NCT04890132 -NCT04894149 -NCT04890171 -NCT04894188 -NCT04890184 -NCT04894370 -NCT04890197 -NCT04894565 -NCT04890236 -NCT04894643 -NCT04890327 -NCT04894825 -NCT04890392 -NCT04894955 -NCT04890522 -NCT04894994 -NCT04890587 -NCT04895020 -NCT04890613 -NCT04895046 -NCT04890795 -NCT04895137 -NCT04890834 -NCT04895345 -NCT04890912 -NCT04906096 -NCT04895397 -NCT04900792 -NCT04895410 -NCT04900766 -NCT04895436 -NCT04900818 -NCT04895579 -NCT04900935 -NCT04895592 -NCT04901234 -NCT04895709 -NCT04901299 -NCT04895722 -NCT04901416 -NCT04895735 -NCT04901702 -NCT04895748 -NCT04901741 -NCT04895761 -NCT04901754 -NCT04895839 -NCT04901806 -NCT04895917 -NCT04901936 -NCT04895930 -NCT04901988 -NCT04896073 -NCT04902027 -NCT04896112 -NCT04902040 -NCT04896320 -NCT04902144 -NCT04896580 -NCT04902261 -NCT04896658 -NCT04902313 -NCT04896697 -NCT04902352 -NCT04896801 -NCT04902443 -NCT04897022 -NCT04902586 -NCT04897139 -NCT04902872 -NCT04897321 -NCT04902885 -NCT04897477 -NCT04903080 -NCT04897542 -NCT04903119 -NCT04897568 -NCT04903197 -NCT04897763 -NCT04903249 -NCT04897854 -NCT04903561 -NCT04897880 -NCT04903652 -NCT04898374 -NCT04903795 -NCT04898426 -NCT04903873 -NCT04898504 -NCT04903899 -NCT04898543 -NCT04904042 -NCT04898634 -NCT04904120 -NCT04898647 -NCT04904185 -NCT04898790 -NCT04904211 -NCT04898842 -NCT04904237 -NCT04898855 -NCT04904302 -NCT04898894 -NCT04904588 -NCT04899128 -NCT04904653 -NCT04899180 -NCT04905030 -NCT04899349 -NCT04905069 -NCT04899414 -NCT04905082 -NCT04899427 -NCT04905134 -NCT04899453 -NCT04905147 -NCT04899492 -NCT04905316 -NCT04899570 -NCT04905407 -NCT04899739 -NCT04905550 -NCT04899882 -NCT04905576 -NCT04899908 -NCT04905667 -NCT04899921 -NCT04905810 -NCT04900311 -NCT04905914 -NCT04900350 -NCT04906031 -NCT04900363 -NCT04906044 -NCT04900519 -NCT04906070 -NCT04900623 -NCT04916613 -NCT04906187 -NCT04911907 -NCT04906200 -NCT04911894 -NCT04906343 -NCT04911959 -NCT04906382 -NCT04912063 -NCT04906395 -NCT04912258 -NCT04906434 -NCT04912427 -NCT04906473 -NCT04912466 -NCT04906746 -NCT04912687 -NCT04906876 -NCT04912765 -NCT04906902 -NCT04913025 -NCT04906954 -NCT04913064 -NCT04906993 -NCT04913077 -NCT04907227 -NCT04913103 -NCT04907344 -NCT04913155 -NCT04907370 -NCT04913220 -NCT04907539 -NCT04913259 -NCT04907591 -NCT04913285 -NCT04907643 -NCT04913337 -NCT04907864 -NCT04913415 -NCT04907968 -NCT04913454 -NCT04908046 -NCT04913480 -NCT04908111 -NCT04913532 -NCT04908176 -NCT04913571 -NCT04908228 -NCT04913662 -NCT04908254 -NCT04913922 -NCT04908566 -NCT04914000 -NCT04908709 -NCT04914117 -NCT04908787 -NCT04914143 -NCT04908813 -NCT04914195 -NCT04908956 -NCT04914286 -NCT04909073 -NCT04914338 -NCT04909125 -NCT04914351 -NCT04909294 -NCT04914390 -NCT04909515 -NCT04914663 -NCT04909684 -NCT04914676 -NCT04909775 -NCT04914741 -NCT04909866 -NCT04914780 -NCT04910022 -NCT04914845 -NCT04910126 -NCT04914897 -NCT04910308 -NCT04915144 -NCT04910347 -NCT04915183 -NCT04910386 -NCT04915248 -NCT04910425 -NCT04915274 -NCT04910568 -NCT04915404 -NCT04910594 -NCT04915417 -NCT04910685 -NCT04915495 -NCT04910789 -NCT04915508 -NCT04910802 -NCT04915612 -NCT04910854 -NCT04915755 -NCT04911114 -NCT04915833 -NCT04911166 -NCT04916002 -NCT04911517 -NCT04916223 -NCT04911621 -NCT04916236 -NCT04911647 -NCT04916249 -NCT04911816 -NCT04916509 -NCT04911881 -NCT04926753 -NCT04916860 -NCT04922658 -NCT04916990 -NCT04922567 -NCT04917042 -NCT04922697 -NCT04917224 -NCT04922723 -NCT04917250 -NCT04922853 -NCT04917289 -NCT04923048 -NCT04917484 -NCT04923126 -NCT04917770 -NCT04923412 -NCT04917809 -NCT04923529 -NCT04917900 -NCT04923542 -NCT04918186 -NCT04923620 -NCT04918381 -NCT04923646 -NCT04918511 -NCT04923672 -NCT04918589 -NCT04923776 -NCT04918628 -NCT04923893 -NCT04918810 -NCT04923906 -NCT04918940 -NCT04923919 -NCT04919226 -NCT04923932 -NCT04919369 -NCT04923945 -NCT04919382 -NCT04923997 -NCT04919460 -NCT04924010 -NCT04919512 -NCT04924062 -NCT04919616 -NCT04924075 -NCT04919629 -NCT04924101 -NCT04919642 -NCT04924179 -NCT04919811 -NCT04924192 -NCT04919824 -NCT04924218 -NCT04919993 -NCT04924374 -NCT04920019 -NCT04924413 -NCT04920032 -NCT04924608 -NCT04920084 -NCT04924647 -NCT04920149 -NCT04924699 -NCT04920162 -NCT04925063 -NCT04920344 -NCT04925141 -NCT04920383 -NCT04925193 -NCT04920500 -NCT04925284 -NCT04920617 -NCT04925479 -NCT04920708 -NCT04925544 -NCT04920929 -NCT04925583 -NCT04920968 -NCT04925609 -NCT04921137 -NCT04925648 -NCT04921358 -NCT04925700 -NCT04921488 -NCT04925713 -NCT04921527 -NCT04925817 -NCT04921722 -NCT04925856 -NCT04921878 -NCT04925947 -NCT04921904 -NCT04925986 -NCT04921917 -NCT04926155 -NCT04921995 -NCT04926181 -NCT04922008 -NCT04926194 -NCT04922047 -NCT04926324 -NCT04922112 -NCT04926376 -NCT04922138 -NCT04926467 -NCT04922307 -NCT04926532 -NCT04922450 -NCT04926545 -NCT04922515 -NCT04937309 -NCT04926766 -NCT04931576 -NCT04926831 -NCT04931420 -NCT04926948 -NCT04931615 -NCT04927013 -NCT04931654 -NCT04927260 -NCT04931823 -NCT04927416 -NCT04931979 -NCT04927481 -NCT04932187 -NCT04927494 -NCT04932460 -NCT04927663 -NCT04932525 -NCT04927780 -NCT04932720 -NCT04927884 -NCT04933175 -NCT04927910 -NCT04933227 -NCT04928105 -NCT04933266 -NCT04928222 -NCT04933357 -NCT04928261 -NCT04933422 -NCT04928365 -NCT04933435 -NCT04928508 -NCT04933526 -NCT04928612 -NCT04933539 -NCT04928625 -NCT04933617 -NCT04928677 -NCT04933669 -NCT04928807 -NCT04933695 -NCT04928820 -NCT04933903 -NCT04928846 -NCT04933942 -NCT04928950 -NCT04934098 -NCT04929015 -NCT04934293 -NCT04929028 -NCT04934475 -NCT04929041 -NCT04934514 -NCT04929080 -NCT04934579 -NCT04929197 -NCT04934618 -NCT04929223 -NCT04934722 -NCT04929353 -NCT04934774 -NCT04929392 -NCT04934865 -NCT04929535 -NCT04934930 -NCT04929548 -NCT04934982 -NCT04929652 -NCT04935229 -NCT04929769 -NCT04935359 -NCT04929899 -NCT04935528 -NCT04930133 -NCT04935580 -NCT04930159 -NCT04935684 -NCT04930315 -NCT04936139 -NCT04930341 -NCT04936178 -NCT04930354 -NCT04936230 -NCT04930432 -NCT04936243 -NCT04930536 -NCT04936295 -NCT04930653 -NCT04936334 -NCT04930692 -NCT04936451 -NCT04930783 -NCT04936529 -NCT04930991 -NCT04936568 -NCT04931017 -NCT04936841 -NCT04931069 -NCT04936932 -NCT04931251 -NCT04936997 -NCT04931342 -NCT04937153 -NCT04931368 -NCT04937166 -NCT04931381 -NCT04937244 -NCT04931394 -NCT04937283 -NCT04931407 -NCT04947189 -NCT04937413 -NCT04941937 -NCT04937673 -NCT04941885 -NCT04937738 -NCT04942054 -NCT04937842 -NCT04942067 -NCT04937972 -NCT04942080 -NCT04938115 -NCT04942275 -NCT04938180 -NCT04942301 -NCT04938232 -NCT04942626 -NCT04938297 -NCT04942665 -NCT04938583 -NCT04942730 -NCT04938609 -NCT04942756 -NCT04938804 -NCT04942899 -NCT04938817 -NCT04943029 -NCT04938869 -NCT04943198 -NCT04938973 -NCT04943211 -NCT04938986 -NCT04943224 -NCT04939051 -NCT04943302 -NCT04939090 -NCT04943445 -NCT04939142 -NCT04943536 -NCT04939194 -NCT04943627 -NCT04939246 -NCT04943653 -NCT04939272 -NCT04943718 -NCT04939324 -NCT04943757 -NCT04939480 -NCT04943848 -NCT04939597 -NCT04943900 -NCT04939610 -NCT04943913 -NCT04939662 -NCT04944030 -NCT04939701 -NCT04944069 -NCT04939831 -NCT04944173 -NCT04939844 -NCT04944563 -NCT04939883 -NCT04944875 -NCT04940000 -NCT04944888 -NCT04940026 -NCT04944914 -NCT04940052 -NCT04945148 -NCT04940221 -NCT04945187 -NCT04940286 -NCT04945317 -NCT04940299 -NCT04945330 -NCT04940325 -NCT04945421 -NCT04940442 -NCT04945512 -NCT04940468 -NCT04945642 -NCT04940507 -NCT04945720 -NCT04940546 -NCT04945733 -NCT04940637 -NCT04945928 -NCT04940754 -NCT04946019 -NCT04940936 -NCT04946214 -NCT04941040 -NCT04946227 -NCT04941274 -NCT04946279 -NCT04941287 -NCT04946357 -NCT04941300 -NCT04946370 -NCT04941339 -NCT04946864 -NCT04941365 -NCT04946890 -NCT04941378 -NCT04946968 -NCT04941417 -NCT04947033 -NCT04941430 -NCT04947059 -NCT04941716 -NCT04947150 -NCT04941872 -NCT04959604 -NCT04947241 -NCT04952961 -NCT04947254 -NCT04952766 -NCT04947280 -NCT04953104 -NCT04947319 -NCT04953312 -NCT04947371 -NCT04953351 -NCT04947501 -NCT04953377 -NCT04947709 -NCT04953780 -NCT04947826 -NCT04953871 -NCT04947917 -NCT04953897 -NCT04947969 -NCT04953910 -NCT04948034 -NCT04953962 -NCT04948060 -NCT04954001 -NCT04948125 -NCT04954326 -NCT04948333 -NCT04954339 -NCT04948619 -NCT04954456 -NCT04948697 -NCT04954599 -NCT04948788 -NCT04954625 -NCT04948840 -NCT04954781 -NCT04948983 -NCT04954794 -NCT04949113 -NCT04954820 -NCT04949256 -NCT04955119 -NCT04949464 -NCT04955236 -NCT04949646 -NCT04955262 -NCT04949776 -NCT04955340 -NCT04950010 -NCT04955743 -NCT04950075 -NCT04955886 -NCT04950166 -NCT04955938 -NCT04950322 -NCT04956042 -NCT04950400 -NCT04956068 -NCT04950452 -NCT04956133 -NCT04950608 -NCT04956146 -NCT04950777 -NCT04956302 -NCT04950907 -NCT04956601 -NCT04951063 -NCT04956640 -NCT04951115 -NCT04956666 -NCT04951141 -NCT04956692 -NCT04951245 -NCT04956926 -NCT04951323 -NCT04957030 -NCT04951492 -NCT04957186 -NCT04951583 -NCT04957212 -NCT04951635 -NCT04957290 -NCT04951648 -NCT04957615 -NCT04951778 -NCT04957693 -NCT04951804 -NCT04958044 -NCT04951817 -NCT04958239 -NCT04951921 -NCT04958434 -NCT04951947 -NCT04958473 -NCT04952116 -NCT04958785 -NCT04952272 -NCT04958811 -NCT04952480 -NCT04958967 -NCT04952493 -NCT04958993 -NCT04952571 -NCT04959175 -NCT04952584 -NCT04959474 -NCT04952597 -NCT04959500 -NCT04952688 -NCT04959539 -NCT04952753 -NCT04970368 -NCT04959630 -NCT04965714 -NCT04959981 -NCT04965701 -NCT04960072 -NCT04965753 -NCT04960332 -NCT04965766 -NCT04960579 -NCT04965818 -NCT04960618 -NCT04965831 -NCT04960709 -NCT04965909 -NCT04960735 -NCT04966143 -NCT04960748 -NCT04966156 -NCT04960761 -NCT04966195 -NCT04960787 -NCT04966377 -NCT04960839 -NCT04966481 -NCT04960943 -NCT04966520 -NCT04961138 -NCT04966663 -NCT04961320 -NCT04966676 -NCT04961515 -NCT04966715 -NCT04961619 -NCT04966819 -NCT04961632 -NCT04966949 -NCT04961788 -NCT04967001 -NCT04961801 -NCT04967027 -NCT04961827 -NCT04967079 -NCT04961918 -NCT04967183 -NCT04961970 -NCT04967196 -NCT04961996 -NCT04967248 -NCT04962126 -NCT04967391 -NCT04962425 -NCT04967417 -NCT04962672 -NCT04967482 -NCT04962867 -NCT04967495 -NCT04962958 -NCT04967521 -NCT04963088 -NCT04967625 -NCT04963153 -NCT04967690 -NCT04963283 -NCT04967833 -NCT04963413 -NCT04967976 -NCT04963517 -NCT04968002 -NCT04963595 -NCT04968015 -NCT04963946 -NCT04968106 -NCT04963972 -NCT04968119 -NCT04964284 -NCT04968145 -NCT04964297 -NCT04968366 -NCT04964375 -NCT04968730 -NCT04964479 -NCT04968964 -NCT04964505 -NCT04968990 -NCT04964934 -NCT04969029 -NCT04964960 -NCT04969315 -NCT04965064 -NCT04969601 -NCT04965077 -NCT04969731 -NCT04965090 -NCT04969835 -NCT04965129 -NCT04969861 -NCT04965155 -NCT04969887 -NCT04965220 -NCT04969952 -NCT04965311 -NCT04969965 -NCT04965428 -NCT04969978 -NCT04965454 -NCT04970043 -NCT04965493 -NCT04970121 -NCT04965597 -NCT04970290 -NCT04965688 -NCT04981899 -NCT04970693 -NCT04975620 -NCT04970901 -NCT04975555 -NCT04970914 -NCT04975698 -NCT04970992 -NCT04975919 -NCT04971187 -NCT04975958 -NCT04971226 -NCT04975997 -NCT04971369 -NCT04976218 -NCT04971473 -NCT04976257 -NCT04971499 -NCT04976634 -NCT04972097 -NCT04976647 -NCT04972110 -NCT04976660 -NCT04972253 -NCT04977024 -NCT04972422 -NCT04977128 -NCT04972630 -NCT04977167 -NCT04972682 -NCT04977180 -NCT04972942 -NCT04977193 -NCT04972981 -NCT04977271 -NCT04972994 -NCT04977375 -NCT04973007 -NCT04977401 -NCT04973020 -NCT04977453 -NCT04973098 -NCT04977882 -NCT04973163 -NCT04978012 -NCT04973293 -NCT04978519 -NCT04973306 -NCT04978584 -NCT04973319 -NCT04978675 -NCT04973436 -NCT04978727 -NCT04973475 -NCT04978740 -NCT04973527 -NCT04978753 -NCT04973605 -NCT04978779 -NCT04973618 -NCT04978805 -NCT04973683 -NCT04979169 -NCT04973904 -NCT04979390 -NCT04973930 -NCT04979442 -NCT04974008 -NCT04979585 -NCT04974047 -NCT04979611 -NCT04974125 -NCT04979663 -NCT04974216 -NCT04979715 -NCT04974281 -NCT04980118 -NCT04974346 -NCT04980222 -NCT04974398 -NCT04980404 -NCT04974632 -NCT04980443 -NCT04974671 -NCT04980521 -NCT04974827 -NCT04980690 -NCT04974866 -NCT04980716 -NCT04974879 -NCT04980729 -NCT04974944 -NCT04980859 -NCT04974957 -NCT04980885 -NCT04974996 -NCT04980950 -NCT04975152 -NCT04980989 -NCT04975204 -NCT04981223 -NCT04975217 -NCT04981509 -NCT04975256 -NCT04981665 -NCT04975308 -NCT04981691 -NCT04975399 -NCT04981821 -NCT04975451 -NCT04981834 -NCT04975516 -NCT04991129 -NCT04981912 -NCT04986930 -NCT04982146 -NCT04986865 -NCT04982237 -NCT04987086 -NCT04982276 -NCT04987112 -NCT04982354 -NCT04987203 -NCT04982536 -NCT04987281 -NCT04982653 -NCT04987359 -NCT04982900 -NCT04987463 -NCT04982926 -NCT04987788 -NCT04982939 -NCT04987931 -NCT04983095 -NCT04987996 -NCT04983121 -NCT04988074 -NCT04983134 -NCT04988165 -NCT04983238 -NCT04988191 -NCT04983342 -NCT04988295 -NCT04983407 -NCT04988555 -NCT04983550 -NCT04988607 -NCT04983706 -NCT04988750 -NCT04983745 -NCT04988841 -NCT04983810 -NCT04988945 -NCT04983862 -NCT04989010 -NCT04983901 -NCT04989140 -NCT04984018 -NCT04989192 -NCT04984330 -NCT04989218 -NCT04984343 -NCT04989283 -NCT04984356 -NCT04989322 -NCT04984369 -NCT04989335 -NCT04984434 -NCT04989387 -NCT04984551 -NCT04989504 -NCT04984668 -NCT04989556 -NCT04984733 -NCT04989621 -NCT04984811 -NCT04989647 -NCT04984837 -NCT04989725 -NCT04984980 -NCT04989803 -NCT04985084 -NCT04989816 -NCT04985110 -NCT04989829 -NCT04985136 -NCT04989855 -NCT04985201 -NCT04989946 -NCT04985266 -NCT04989959 -NCT04985409 -NCT04989985 -NCT04985552 -NCT04990037 -NCT04985565 -NCT04990063 -NCT04985604 -NCT04990102 -NCT04985721 -NCT04990271 -NCT04985734 -NCT04990479 -NCT04985825 -NCT04990609 -NCT04985851 -NCT04990739 -NCT04986189 -NCT04990778 -NCT04986293 -NCT04990856 -NCT04986423 -NCT04990895 -NCT04986566 -NCT04990921 -NCT04986579 -NCT04990960 -NCT04986657 -NCT04991025 -NCT04986670 -NCT04991090 -NCT04986696 -NCT04991103 -NCT04986852 -NCT05000892 -NCT04991428 -NCT04996758 -NCT04991480 -NCT04996745 -NCT04991506 -NCT04996771 -NCT04991740 -NCT04996823 -NCT04991870 -NCT04996836 -NCT04991948 -NCT04996875 -NCT04992013 -NCT04996914 -NCT04992026 -NCT04997018 -NCT04992143 -NCT04997096 -NCT04992507 -NCT04997252 -NCT04992559 -NCT04997317 -NCT04992715 -NCT04997382 -NCT04992780 -NCT04997798 -NCT04992949 -NCT04997837 -NCT04992988 -NCT04997850 -NCT04993014 -NCT04997902 -NCT04993040 -NCT04997941 -NCT04993131 -NCT04997993 -NCT04993261 -NCT04998318 -NCT04993313 -NCT04998422 -NCT04993391 -NCT04998474 -NCT04993430 -NCT04998552 -NCT04993508 -NCT04998669 -NCT04993625 -NCT04998682 -NCT04993677 -NCT04998747 -NCT04993690 -NCT04998760 -NCT04994132 -NCT04998786 -NCT04994236 -NCT04999007 -NCT04994587 -NCT04999085 -NCT04994626 -NCT04999176 -NCT04994639 -NCT04999202 -NCT04994717 -NCT04999306 -NCT04994808 -NCT04999332 -NCT04994977 -NCT04999384 -NCT04995003 -NCT04999540 -NCT04995016 -NCT04999605 -NCT04995042 -NCT04999618 -NCT04995094 -NCT04999696 -NCT04995120 -NCT04999761 -NCT04995185 -NCT04999800 -NCT04995198 -NCT04999878 -NCT04995419 -NCT04999917 -NCT04995523 -NCT04999943 -NCT04995536 -NCT04999969 -NCT04995848 -NCT05000294 -NCT04995978 -NCT05000359 -NCT04996004 -NCT05000372 -NCT04996017 -NCT05000450 -NCT04996030 -NCT05000502 -NCT04996121 -NCT05000554 -NCT04996160 -NCT05000684 -NCT04996446 -NCT05000697 -NCT04996498 -NCT05000710 -NCT04996602 -NCT05000801 -NCT04996641 -NCT05000827 -NCT04996693 -NCT05117372 -NCT05000905 -NCT05005728 -NCT05001009 -NCT05005715 -NCT05001113 -NCT05005845 -NCT05001204 -NCT05006040 -NCT05001282 -NCT05006092 -NCT05001347 -NCT05006326 -NCT05001360 -NCT05006469 -NCT05001412 -NCT05006482 -NCT05001451 -NCT05006664 -NCT05001516 -NCT05006716 -NCT05001724 -NCT05007015 -NCT05001763 -NCT05007093 -NCT05001828 -NCT05007106 -NCT05001880 -NCT05007132 -NCT05001971 -NCT05007145 -NCT05002127 -NCT05007418 -NCT05002140 -NCT05007444 -NCT05002270 -NCT05007548 -NCT05002569 -NCT05007587 -NCT05002608 -NCT05007613 -NCT05002686 -NCT05007652 -NCT05002816 -NCT05007769 -NCT05002842 -NCT05007782 -NCT05002868 -NCT05007873 -NCT05003037 -NCT05007938 -NCT05003141 -NCT05008055 -NCT05003349 -NCT05008224 -NCT05003427 -NCT05008237 -NCT05003622 -NCT05008445 -NCT05003635 -NCT05008471 -NCT05003700 -NCT05115344 -NCT05003752 -NCT05115422 -NCT05003856 -NCT05115500 -NCT05003895 -NCT05115630 -NCT05003973 -NCT05115760 -NCT05004025 -NCT05115799 -NCT05004064 -NCT05115825 -NCT05004116 -NCT05115916 -NCT05004142 -NCT05116072 -NCT05004285 -NCT05116085 -NCT05004350 -NCT05116137 -NCT05004376 -NCT05116189 -NCT05004441 -NCT05116202 -NCT05004623 -NCT05116254 -NCT05004792 -NCT05116462 -NCT05004831 -NCT05116475 -NCT05004974 -NCT05116683 -NCT05005091 -NCT05116709 -NCT05005117 -NCT05116800 -NCT05005182 -NCT05116878 -NCT05005195 -NCT05116891 -NCT05005273 -NCT05116917 -NCT05005299 -NCT05117008 -NCT05005403 -NCT05117138 -NCT05005429 -NCT05117177 -NCT05005468 -NCT05117242 -NCT05008510 -NCT05114798 -NCT05008536 -NCT05114837 -NCT05008575 -NCT05114915 -NCT05008783 -NCT05115279 -NCT05008809 -NCT05115292 -NCT05008848 -NCT05115331 -NCT05008861 -NCT05081492 -NCT05081531 -NCT05081609 -NCT05081674 -NCT05081687 -NCT05081908 -NCT05082025 -NCT05082259 -NCT05082441 -NCT05082493 -NCT05082519 -NCT05082545 -NCT05082597 -NCT05094336 -NCT05094466 -NCT05094544 -NCT05094804 -NCT05095207 -NCT05095376 -NCT05095441 -NCT05095467 -NCT05095519 -NCT05095558 -NCT05095636 -NCT05095714 -NCT05096234 -NCT05096286 -NCT05096390 -NCT05096468 -NCT05096481 -NCT05096663 -NCT05096715 -NCT05097209 -NCT05097248 -NCT05097378 -NCT05097417 -NCT05097443 -NCT05097599 -NCT05097781 -NCT05108012 -NCT05108077 -NCT05108090 -NCT05108298 -NCT05108428 -NCT05108623 -NCT05108779 -NCT05108805 -NCT05108870 -NCT05109052 -NCT05109182 -NCT05109208 -NCT05109442 -NCT05109494 -NCT05109728 -NCT05109819 -NCT05109832 -NCT05109884 -NCT05109910 -NCT05109975 -NCT05110118 -NCT05110131 -NCT05110170 -NCT05110196 -NCT05110495 -NCT05110781 -NCT05110807 -NCT05110924 -NCT05110950 -NCT05111197 -NCT05111314 -NCT05111353 -NCT05111366 -NCT05111444 -NCT05111509 -NCT05111561 -NCT05111574 -NCT05111626 -NCT05111860 -NCT05111964 -NCT05112458 -NCT05112536 -NCT05112601 -NCT05112965 -NCT05112991 -NCT05113069 -NCT05113134 -NCT05113186 -NCT05113199 -NCT05113251 -NCT05113264 -NCT05113290 -NCT05113342 -NCT05113355 -NCT05113368 -NCT05113459 -NCT05113485 -NCT05113537 -NCT05113927 -NCT05113966 -NCT05114005 -NCT05114109 -NCT05114148 -NCT05114213 -NCT05114421 -NCT05114525 -NCT05114603 -NCT05114668 -NCT05114707 -NCT05114720 -NCT05114746 -NCT05114759 -NCT05008900 -NCT05077072 -NCT05008913 -NCT05077098 -NCT05009069 -NCT05077111 -NCT05009082 -NCT05077137 -NCT05009290 -NCT05077215 -NCT05009329 -NCT05077280 -NCT05009394 -NCT05077358 -NCT05009446 -NCT05077371 -NCT05009550 -NCT05077384 -NCT05009693 -NCT05077449 -NCT05009719 -NCT05077527 -NCT05009836 -NCT05077709 -NCT05009849 -NCT05077735 -NCT05009927 -NCT05077800 -NCT05009953 -NCT05077839 -NCT05009966 -NCT05078047 -NCT05009979 -NCT05078151 -NCT05009992 -NCT05078398 -NCT05010005 -NCT05078528 -NCT05010031 -NCT05078593 -NCT05010096 -NCT05078671 -NCT05010109 -NCT05078775 -NCT05010122 -NCT05078918 -NCT05010200 -NCT05078931 -NCT05010239 -NCT05079022 -NCT05010343 -NCT05079230 -NCT05010356 -NCT05079282 -NCT05010369 -NCT05079334 -NCT05010434 -NCT05079360 -NCT05010525 -NCT05079438 -NCT05010564 -NCT05079503 -NCT05010629 -NCT05079698 -NCT05010668 -NCT05079828 -NCT05010681 -NCT05080010 -NCT05010694 -NCT05080166 -NCT05010759 -NCT05080556 -NCT05010772 -NCT05080621 -NCT05010850 -NCT05080673 -NCT05011019 -NCT05080790 -NCT05011058 -NCT05080829 -NCT05011097 -NCT05080842 -NCT05011188 -NCT05080920 -NCT05011227 -NCT05080946 -NCT05011279 -NCT05081180 -NCT05011383 -NCT05081193 -NCT05011461 -NCT05081479 -NCT05011487 -NCT05075577 -NCT05075603 -NCT05075655 -NCT05075759 -NCT05075889 -NCT05075980 -NCT05075993 -NCT05076097 -NCT05076279 -NCT05076396 -NCT05076513 -NCT05076552 -NCT05076591 -NCT05076682 -NCT05076695 -NCT05076760 -NCT05076786 -NCT05076851 -NCT05076916 -NCT05076942 -NCT05077033 -NCT05011500 -NCT05016518 -NCT05011721 -NCT05016349 -NCT05011799 -NCT05016544 -NCT05011890 -NCT05016570 -NCT05012007 -NCT05016622 -NCT05012098 -NCT05016778 -NCT05012124 -NCT05016869 -NCT05012176 -NCT05016947 -NCT05012254 -NCT05016973 -NCT05012371 -NCT05017012 -NCT05012397 -NCT05017025 -NCT05012618 -NCT05017103 -NCT05012644 -NCT05017246 -NCT05012813 -NCT05017597 -NCT05012904 -NCT05071053 -NCT05012917 -NCT05071105 -NCT05013086 -NCT05071183 -NCT05013099 -NCT05071209 -NCT05013125 -NCT05071482 -NCT05013216 -NCT05071560 -NCT05013255 -NCT05071703 -NCT05013268 -NCT05071846 -NCT05013372 -NCT05071937 -NCT05013437 -NCT05072041 -NCT05013450 -NCT05072106 -NCT05013515 -NCT05072197 -NCT05013554 -NCT05072314 -NCT05013697 -NCT05072327 -NCT05013892 -NCT05072522 -NCT05014035 -NCT05072561 -NCT05014100 -NCT05072600 -NCT05014139 -NCT05072639 -NCT05014295 -NCT05073172 -NCT05014360 -NCT05073198 -NCT05014412 -NCT05073250 -NCT05014464 -NCT05073432 -NCT05014646 -NCT05073484 -NCT05014698 -NCT05073653 -NCT05014776 -NCT05074264 -NCT05014815 -NCT05074290 -NCT05014828 -NCT05074355 -NCT05014841 -NCT05074472 -NCT05015010 -NCT05074550 -NCT05015179 -NCT05074589 -NCT05015309 -NCT05074810 -NCT05015426 -NCT05074914 -NCT05015543 -NCT05074940 -NCT05015608 -NCT05074966 -NCT05015621 -NCT05074992 -NCT05015790 -NCT05075122 -NCT05015816 -NCT05075356 -NCT05015907 -NCT05075395 -NCT05015972 -NCT05075460 -NCT05016063 -NCT05075512 -NCT05016245 -NCT05075538 -NCT05016310 -NCT05075564 -NCT05017610 -NCT05029999 -NCT05017623 -NCT05030077 -NCT05017662 -NCT05030090 -NCT05017883 -NCT05030207 -NCT05017922 -NCT05030246 -NCT05018000 -NCT05030298 -NCT05018078 -NCT05030363 -NCT05018156 -NCT05030454 -NCT05018182 -NCT05030506 -NCT05018195 -NCT05030519 -NCT05018273 -NCT05030597 -NCT05018325 -NCT05030675 -NCT05018442 -NCT05030792 -NCT05018520 -NCT05030870 -NCT05018676 -NCT05031325 -NCT05018702 -NCT05031494 -NCT05019144 -NCT05031533 -NCT05019534 -NCT05031897 -NCT05019677 -NCT05041478 -NCT05019690 -NCT05041504 -NCT05019703 -NCT05041751 -NCT05019716 -NCT05041842 -NCT05019794 -NCT05041920 -NCT05019846 -NCT05041946 -NCT05019976 -NCT05041972 -NCT05019989 -NCT05042128 -NCT05020015 -NCT05042336 -NCT05020067 -NCT05042375 -NCT05020119 -NCT05042479 -NCT05020236 -NCT05042531 -NCT05020392 -NCT05042687 -NCT05020444 -NCT05042791 -NCT05020457 -NCT05042908 -NCT05020522 -NCT05042934 -NCT05020561 -NCT05042999 -NCT05020574 -NCT05043012 -NCT05020613 -NCT05043090 -NCT05020665 -NCT05043298 -NCT05020678 -NCT05043402 -NCT05020769 -NCT05043532 -NCT05020860 -NCT05043571 -NCT05020912 -NCT05043649 -NCT05020925 -NCT05043688 -NCT05020964 -NCT05070039 -NCT05021120 -NCT05070156 -NCT05021133 -NCT05070208 -NCT05021172 -NCT05070221 -NCT05021185 -NCT05070247 -NCT05021237 -NCT05070299 -NCT05021250 -NCT05070403 -NCT05021263 -NCT05070598 -NCT05021328 -NCT05070637 -NCT05021367 -NCT05071001 -NCT05021393 -NCT05071014 -NCT05021770 -NCT05029882 -NCT05029960 -NCT05029973 -NCT05021900 -NCT05025423 -NCT05021952 -NCT05025358 -NCT05022030 -NCT05025488 -NCT05022160 -NCT05025527 -NCT05022342 -NCT05025631 -NCT05022394 -NCT05025735 -NCT05022511 -NCT05025748 -NCT05022576 -NCT05025800 -NCT05022602 -NCT05025813 -NCT05022628 -NCT05025826 -NCT05022641 -NCT05025930 -NCT05022654 -NCT05026229 -NCT05022667 -NCT05026268 -NCT05022719 -NCT05026593 -NCT05022797 -NCT05026606 -NCT05022823 -NCT05026736 -NCT05022849 -NCT05026983 -NCT05022901 -NCT05027009 -NCT05022927 -NCT05027100 -NCT05023018 -NCT05027139 -NCT05023109 -NCT05027204 -NCT05023265 -NCT05027321 -NCT05023486 -NCT05027386 -NCT05023551 -NCT05027412 -NCT05023655 -NCT05027425 -NCT05023707 -NCT05027477 -NCT05023772 -NCT05027490 -NCT05023785 -NCT05027594 -NCT05023889 -NCT05027633 -NCT05023928 -NCT05027711 -NCT05023967 -NCT05027737 -NCT05023980 -NCT05027776 -NCT05023993 -NCT05027867 -NCT05024019 -NCT05028218 -NCT05024045 -NCT05028296 -NCT05024097 -NCT05028348 -NCT05024162 -NCT05028374 -NCT05024214 -NCT05028400 -NCT05024253 -NCT05028439 -NCT05024266 -NCT05028452 -NCT05024318 -NCT05028478 -NCT05024357 -NCT05028504 -NCT05024383 -NCT05028556 -NCT05024513 -NCT05028725 -NCT05024552 -NCT05028751 -NCT05024734 -NCT05028933 -NCT05024773 -NCT05029024 -NCT05024812 -NCT05029063 -NCT05024877 -NCT05029102 -NCT05024968 -NCT05029141 -NCT05024994 -NCT05029154 -NCT05025020 -NCT05029453 -NCT05025033 -NCT05029531 -NCT05025059 -NCT05029596 -NCT05025085 -NCT05029791 -NCT05025098 -NCT05041335 -NCT05031910 -NCT05036681 -NCT05031949 -NCT05036577 -NCT05031975 -NCT05036798 -NCT05032014 -NCT05037019 -NCT05032027 -NCT05037149 -NCT05032040 -NCT05037279 -NCT05032079 -NCT05037461 -NCT05032092 -NCT05037500 -NCT05032183 -NCT05037669 -NCT05032404 -NCT05038007 -NCT05032599 -NCT05038098 -NCT05032716 -NCT05038124 -NCT05032794 -NCT05038137 -NCT05032820 -NCT05038150 -NCT05033067 -NCT05038254 -NCT05033132 -NCT05038332 -NCT05033158 -NCT05038397 -NCT05033301 -NCT05038592 -NCT05033392 -NCT05038644 -NCT05033522 -NCT05038657 -NCT05033587 -NCT05038696 -NCT05033691 -NCT05038735 -NCT05033756 -NCT05038800 -NCT05033769 -NCT05038813 -NCT05033795 -NCT05038839 -NCT05033925 -NCT05039060 -NCT05034055 -NCT05039073 -NCT05034133 -NCT05039177 -NCT05034146 -NCT05039281 -NCT05034354 -NCT05039606 -NCT05034497 -NCT05039632 -NCT05034536 -NCT05039658 -NCT05034562 -NCT05039736 -NCT05034614 -NCT05039762 -NCT05034627 -NCT05039801 -NCT05034692 -NCT05039892 -NCT05034783 -NCT05039905 -NCT05034887 -NCT05039931 -NCT05035147 -NCT05039944 -NCT05035173 -NCT05040152 -NCT05035381 -NCT05040360 -NCT05035407 -NCT05040425 -NCT05035706 -NCT05040438 -NCT05035732 -NCT05040555 -NCT05035745 -NCT05040568 -NCT05035836 -NCT05040685 -NCT05035914 -NCT05040815 -NCT05036005 -NCT05040867 -NCT05036083 -NCT05040932 -NCT05036096 -NCT05041062 -NCT05036109 -NCT05041075 -NCT05036226 -NCT05041101 -NCT05036291 -NCT05041127 -NCT05036408 -NCT05041153 -NCT05036434 -NCT05041257 -NCT05036564 -NCT05069935 -NCT05043701 -NCT05048498 -NCT05043714 -NCT05048459 -NCT05043857 -NCT05048524 -NCT05043922 -NCT05048537 -NCT05043987 -NCT05048615 -NCT05044039 -NCT05048641 -NCT05044065 -NCT05048732 -NCT05044117 -NCT05048797 -NCT05044312 -NCT05066022 -NCT05044468 -NCT05066139 -NCT05044624 -NCT05066165 -NCT05044728 -NCT05066412 -NCT05044819 -NCT05066607 -NCT05044871 -NCT05066646 -NCT05044897 -NCT05066802 -NCT05044975 -NCT05066958 -NCT05044988 -NCT05067023 -NCT05045027 -NCT05067101 -NCT05045040 -NCT05067140 -NCT05045066 -NCT05067153 -NCT05045287 -NCT05067257 -NCT05045404 -NCT05067283 -NCT05045443 -NCT05067413 -NCT05045664 -NCT05067530 -NCT05045911 -NCT05067556 -NCT05045950 -NCT05067660 -NCT05045976 -NCT05067738 -NCT05046028 -NCT05067777 -NCT05046067 -NCT05067972 -NCT05046171 -NCT05068024 -NCT05046262 -NCT05068076 -NCT05046314 -NCT05068102 -NCT05046665 -NCT05068141 -NCT05046756 -NCT05068180 -NCT05046782 -NCT05068193 -NCT05046808 -NCT05068206 -NCT05046847 -NCT05068232 -NCT05047042 -NCT05068401 -NCT05047094 -NCT05068427 -NCT05047250 -NCT05068440 -NCT05047276 -NCT05068453 -NCT05047510 -NCT05068687 -NCT05047536 -NCT05068739 -NCT05047575 -NCT05068752 -NCT05047848 -NCT05068856 -NCT05047913 -NCT05068869 -NCT05047926 -NCT05068921 -NCT05047965 -NCT05068973 -NCT05047991 -NCT05069038 -NCT05048017 -NCT05069051 -NCT05048082 -NCT05069220 -NCT05048160 -NCT05069467 -NCT05048212 -NCT05069519 -NCT05048316 -NCT05069584 -NCT05048368 -NCT05069766 -NCT05048407 -NCT05069857 -NCT05048810 -NCT05061628 -NCT05048901 -NCT05061654 -NCT05049031 -NCT05061823 -NCT05049083 -NCT05062005 -NCT05049148 -NCT05062096 -NCT05049265 -NCT05062174 -NCT05049317 -NCT05062278 -NCT05049473 -NCT05062317 -NCT05049681 -NCT05062720 -NCT05049707 -NCT05062837 -NCT05049746 -NCT05062889 -NCT05049785 -NCT05062980 -NCT05049811 -NCT05063019 -NCT05049863 -NCT05063058 -NCT05050006 -NCT05063123 -NCT05050084 -NCT05063136 -NCT05050097 -NCT05063292 -NCT05050162 -NCT05063318 -NCT05050305 -NCT05063357 -NCT05050370 -NCT05063396 -NCT05050461 -NCT05063552 -NCT05050539 -NCT05063565 -NCT05050630 -NCT05063591 -NCT05050760 -NCT05063604 -NCT05050864 -NCT05063682 -NCT05050929 -NCT05063760 -NCT05050942 -NCT05063786 -NCT05051046 -NCT05063916 -NCT05051059 -NCT05064046 -NCT05051241 -NCT05064059 -NCT05051345 -NCT05064085 -NCT05051384 -NCT05064280 -NCT05051475 -NCT05064358 -NCT05051631 -NCT05064410 -NCT05051670 -NCT05064618 -NCT05051696 -NCT05064670 -NCT05051735 -NCT05064787 -NCT05051800 -NCT05065021 -NCT05051865 -NCT05065047 -NCT05051891 -NCT05065268 -NCT05052086 -NCT05065346 -NCT05052099 -NCT05065398 -NCT05052255 -NCT05065411 -NCT05052268 -NCT05065554 -NCT05052372 -NCT05065710 -NCT05052437 -NCT05065736 -NCT05052528 -NCT05065801 -NCT05052567 -NCT05065866 -NCT05052723 -NCT05060237 -NCT05060263 -NCT05060276 -NCT05060432 -NCT05060471 -NCT05060627 -NCT05060653 -NCT05060796 -NCT05061017 -NCT05061134 -NCT05061147 -NCT05061251 -NCT05061316 -NCT05061420 -NCT05061537 -NCT05061550 -NCT05065957 -NCT05052801 -NCT05056051 -NCT05052931 -NCT05055908 -NCT05052957 -NCT05056064 -NCT05052970 -NCT05056077 -NCT05053113 -NCT05056116 -NCT05053152 -NCT05056337 -NCT05053191 -NCT05056350 -NCT05053230 -NCT05056389 -NCT05053295 -NCT05056402 -NCT05053308 -NCT05056688 -NCT05053386 -NCT05056805 -NCT05053425 -NCT05056831 -NCT05053555 -NCT05056844 -NCT05053607 -NCT05056896 -NCT05053659 -NCT05057013 -NCT05053737 -NCT05057052 -NCT05053750 -NCT05057078 -NCT05053802 -NCT05057130 -NCT05053841 -NCT05057143 -NCT05053854 -NCT05057195 -NCT05053867 -NCT05057234 -NCT05053880 -NCT05057247 -NCT05053971 -NCT05057494 -NCT05053997 -NCT05057598 -NCT05054062 -NCT05057702 -NCT05054231 -NCT05057715 -NCT05054257 -NCT05057845 -NCT05054296 -NCT05058183 -NCT05054335 -NCT05058196 -NCT05054348 -NCT05058352 -NCT05054374 -NCT05058404 -NCT05054400 -NCT05058495 -NCT05054426 -NCT05058508 -NCT05054439 -NCT05058560 -NCT05054465 -NCT05058651 -NCT05054478 -NCT05058755 -NCT05054569 -NCT05058937 -NCT05054725 -NCT05059015 -NCT05054751 -NCT05059132 -NCT05054959 -NCT05059236 -NCT05054998 -NCT05059262 -NCT05055050 -NCT05059327 -NCT05055063 -NCT05059379 -NCT05055167 -NCT05059522 -NCT05055206 -NCT05059678 -NCT05055232 -NCT05059717 -NCT05055323 -NCT05059756 -NCT05055518 -NCT05059782 -NCT05055583 -NCT05059821 -NCT05055609 -NCT05059847 -NCT05055635 -NCT05059912 -NCT05055648 -NCT05059990 -NCT05055726 -NCT05060003 -NCT05055739 -NCT05060016 -NCT05055791 -NCT05060068 -NCT05055843 -NCT05094310 -NCT05082610 -NCT05088252 -NCT05082675 -NCT05088070 -NCT05082948 -NCT05088330 -NCT05082961 -NCT05088356 -NCT05083169 -NCT05088395 -NCT05083208 -NCT05088733 -NCT05083247 -NCT05088785 -NCT05083416 -NCT05088889 -NCT05083481 -NCT05088967 -NCT05083754 -NCT05089266 -NCT05083780 -NCT05089370 -NCT05083936 -NCT05089461 -NCT05084027 -NCT05089643 -NCT05084092 -NCT05089734 -NCT05084430 -NCT05089825 -NCT05084456 -NCT05089903 -NCT05084586 -NCT05089916 -NCT05084625 -NCT05090215 -NCT05084677 -NCT05090358 -NCT05084833 -NCT05090566 -NCT05084859 -NCT05090956 -NCT05084872 -NCT05091151 -NCT05085002 -NCT05091190 -NCT05085028 -NCT05091346 -NCT05085054 -NCT05091372 -NCT05085496 -NCT05091424 -NCT05085548 -NCT05091528 -NCT05085626 -NCT05091541 -NCT05085678 -NCT05091567 -NCT05085977 -NCT05091866 -NCT05085990 -NCT05092022 -NCT05086250 -NCT05092217 -NCT05086315 -NCT05092360 -NCT05086354 -NCT05092373 -NCT05086497 -NCT05092412 -NCT05086614 -NCT05092451 -NCT05086627 -NCT05092477 -NCT05086666 -NCT05092750 -NCT05086692 -NCT05092763 -NCT05086705 -NCT05092802 -NCT05086731 -NCT05092815 -NCT05086770 -NCT05092880 -NCT05086783 -NCT05092958 -NCT05086822 -NCT05093140 -NCT05086848 -NCT05093192 -NCT05087095 -NCT05093231 -NCT05087134 -NCT05093322 -NCT05087251 -NCT05093335 -NCT05087264 -NCT05093387 -NCT05087485 -NCT05093608 -NCT05087602 -NCT05093907 -NCT05087706 -NCT05093920 -NCT05087745 -NCT05094102 -NCT05087875 -NCT05094167 -NCT05087992 -NCT05094206 -NCT05088057 -NCT05107856 -NCT05097911 -NCT05102292 -NCT05098002 -NCT05102214 -NCT05098119 -NCT05102721 -NCT05098132 -NCT05102747 -NCT05098171 -NCT05103007 -NCT05098184 -NCT05103020 -NCT05098197 -NCT05103046 -NCT05098210 -NCT05103345 -NCT05098327 -NCT05103358 -NCT05098405 -NCT05103488 -NCT05098613 -NCT05103501 -NCT05098847 -NCT05103605 -NCT05098951 -NCT05103631 -NCT05098990 -NCT05103644 -NCT05099003 -NCT05103683 -NCT05099068 -NCT05103722 -NCT05099172 -NCT05103826 -NCT05099211 -NCT05103891 -NCT05099237 -NCT05103904 -NCT05099471 -NCT05103917 -NCT05099536 -NCT05104099 -NCT05099549 -NCT05104281 -NCT05099562 -NCT05104515 -NCT05099666 -NCT05104567 -NCT05099679 -NCT05104736 -NCT05099848 -NCT05104788 -NCT05099952 -NCT05104801 -NCT05100069 -NCT05104866 -NCT05100095 -NCT05104905 -NCT05100121 -NCT05104983 -NCT05100251 -NCT05105087 -NCT05100303 -NCT05105152 -NCT05100316 -NCT05105412 -NCT05100329 -NCT05105464 -NCT05100446 -NCT05105672 -NCT05100472 -NCT05105815 -NCT05100498 -NCT05105841 -NCT05100628 -NCT05105867 -NCT05100641 -NCT05105945 -NCT05100862 -NCT05105971 -NCT05100914 -NCT05106023 -NCT05101070 -NCT05106127 -NCT05101096 -NCT05106179 -NCT05101109 -NCT05106192 -NCT05101148 -NCT05106244 -NCT05101213 -NCT05106296 -NCT05101265 -NCT05106608 -NCT05101356 -NCT05106699 -NCT05101551 -NCT05106777 -NCT05101564 -NCT05107011 -NCT05101616 -NCT05107219 -NCT05101629 -NCT05107388 -NCT05101759 -NCT05107427 -NCT05101798 -NCT05107674 -NCT05101824 -NCT05107739 -NCT05102006 -NCT05128903 -NCT05117476 -NCT05123209 -NCT05117658 -NCT05123131 -NCT05117814 -NCT05123300 -NCT05117931 -NCT05123365 -NCT05117957 -NCT05123391 -NCT05118334 -NCT05123404 -NCT05118347 -NCT05123456 -NCT05118451 -NCT05123482 -NCT05118464 -NCT05123534 -NCT05118724 -NCT05123625 -NCT05118776 -NCT05123807 -NCT05118789 -NCT05124002 -NCT05118841 -NCT05124106 -NCT05118854 -NCT05124236 -NCT05119010 -NCT05124405 -NCT05119036 -NCT05124431 -NCT05119049 -NCT05124704 -NCT05119296 -NCT05124795 -NCT05119335 -NCT05124912 -NCT05119582 -NCT05124951 -NCT05119907 -NCT05125016 -NCT05119933 -NCT05125055 -NCT05119998 -NCT05125380 -NCT05120167 -NCT05125393 -NCT05120180 -NCT05125432 -NCT05120271 -NCT05125523 -NCT05120284 -NCT05125666 -NCT05120349 -NCT05125991 -NCT05120375 -NCT05126342 -NCT05120570 -NCT05126433 -NCT05120596 -NCT05126472 -NCT05120622 -NCT05126719 -NCT05120947 -NCT05126797 -NCT05120960 -NCT05126823 -NCT05121038 -NCT05126875 -NCT05121051 -NCT05126927 -NCT05121103 -NCT05127135 -NCT05121207 -NCT05127174 -NCT05121233 -NCT05127590 -NCT05121259 -NCT05127668 -NCT05121350 -NCT05127759 -NCT05121363 -NCT05127798 -NCT05121545 -NCT05127811 -NCT05121571 -NCT05127824 -NCT05121805 -NCT05127850 -NCT05121948 -NCT05128032 -NCT05121987 -NCT05128201 -NCT05122091 -NCT05128318 -NCT05122221 -NCT05128487 -NCT05122377 -NCT05128539 -NCT05122494 -NCT05128708 -NCT05122546 -NCT05128734 -NCT05122572 -NCT05128773 -NCT05122585 -NCT05128825 -NCT05122806 -NCT05128838 -NCT05123001 -NCT05139082 -NCT05129059 -NCT05134532 -NCT05129280 -NCT05134519 -NCT05129774 -NCT05134558 -NCT05129787 -NCT05134636 -NCT05130021 -NCT05134740 -NCT05130060 -NCT05134948 -NCT05130138 -NCT05135052 -NCT05130177 -NCT05135104 -NCT05130255 -NCT05135260 -NCT05130515 -NCT05135351 -NCT05130580 -NCT05135364 -NCT05130606 -NCT05135520 -NCT05130684 -NCT05135650 -NCT05130801 -NCT05135715 -NCT05130827 -NCT05135832 -NCT05130840 -NCT05135845 -NCT05130866 -NCT05135858 -NCT05131022 -NCT05135975 -NCT05131113 -NCT05136079 -NCT05131243 -NCT05136092 -NCT05131386 -NCT05136144 -NCT05131490 -NCT05136196 -NCT05131581 -NCT05136300 -NCT05131607 -NCT05136326 -NCT05131698 -NCT05136378 -NCT05131711 -NCT05136677 -NCT05131763 -NCT05136768 -NCT05131776 -NCT05136846 -NCT05131815 -NCT05136898 -NCT05131841 -NCT05136937 -NCT05131919 -NCT05137054 -NCT05132075 -NCT05137067 -NCT05132101 -NCT05137171 -NCT05132114 -NCT05137262 -NCT05132205 -NCT05137275 -NCT05132244 -NCT05137561 -NCT05132283 -NCT05137639 -NCT05132296 -NCT05137782 -NCT05132413 -NCT05137860 -NCT05132478 -NCT05137886 -NCT05132504 -NCT05137899 -NCT05132582 -NCT05138042 -NCT05132738 -NCT05138094 -NCT05132777 -NCT05138146 -NCT05132790 -NCT05138159 -NCT05132803 -NCT05138328 -NCT05132985 -NCT05138458 -NCT05133154 -NCT05138627 -NCT05133310 -NCT05138848 -NCT05133349 -NCT05138900 -NCT05133427 -NCT05138991 -NCT05133440 -NCT05139004 -NCT05133544 -NCT05139017 -NCT05133674 -NCT05139043 -NCT05133882 -NCT05139056 -NCT05134194 -NCT05149339 -NCT05139095 -NCT05144061 -NCT05139199 -NCT05144009 -NCT05139225 -NCT05144100 -NCT05139277 -NCT05144243 -NCT05139368 -NCT05144334 -NCT05139641 -NCT05144347 -NCT05140252 -NCT05144516 -NCT05140382 -NCT05144529 -NCT05140512 -NCT05144542 -NCT05140655 -NCT05144698 -NCT05140746 -NCT05144841 -NCT05140785 -NCT05144854 -NCT05140811 -NCT05144867 -NCT05140902 -NCT05144997 -NCT05141149 -NCT05145218 -NCT05141253 -NCT05145400 -NCT05141357 -NCT05145569 -NCT05141383 -NCT05145647 -NCT05141474 -NCT05145660 -NCT05141513 -NCT05145816 -NCT05141539 -NCT05145829 -NCT05141617 -NCT05145907 -NCT05141630 -NCT05146219 -NCT05141643 -NCT05146297 -NCT05141682 -NCT05146440 -NCT05141708 -NCT05146635 -NCT05141721 -NCT05146739 -NCT05141747 -NCT05146778 -NCT05141760 -NCT05146843 -NCT05141786 -NCT05146973 -NCT05141825 -NCT05147272 -NCT05141877 -NCT05147311 -NCT05142189 -NCT05147350 -NCT05142202 -NCT05147467 -NCT05142241 -NCT05147493 -NCT05142345 -NCT05147545 -NCT05142358 -NCT05147558 -NCT05142371 -NCT05147727 -NCT05142423 -NCT05147844 -NCT05142475 -NCT05148078 -NCT05142605 -NCT05148195 -NCT05142631 -NCT05148234 -NCT05142696 -NCT05148325 -NCT05142787 -NCT05148442 -NCT05142865 -NCT05148494 -NCT05142982 -NCT05148533 -NCT05143099 -NCT05148546 -NCT05143112 -NCT05148728 -NCT05143125 -NCT05148767 -NCT05143151 -NCT05148910 -NCT05143229 -NCT05149027 -NCT05143775 -NCT05149170 -NCT05143788 -NCT05149196 -NCT05143840 -NCT05149248 -NCT05143970 -NCT05149326 -NCT05143996 -NCT05161143 -NCT05149378 -NCT05156060 -NCT05149391 -NCT05155839 -NCT05149807 -NCT05156203 -NCT05150210 -NCT05156229 -NCT05150236 -NCT05156268 -NCT05150353 -NCT05156372 -NCT05150405 -NCT05156424 -NCT05150457 -NCT05156450 -NCT05150522 -NCT05156463 -NCT05150535 -NCT05156515 -NCT05150652 -NCT05156554 -NCT05150691 -NCT05156606 -NCT05151341 -NCT05156788 -NCT05151419 -NCT05156866 -NCT05151549 -NCT05156892 -NCT05151588 -NCT05156905 -NCT05152147 -NCT05156970 -NCT05152212 -NCT05157451 -NCT05152407 -NCT05157542 -NCT05152459 -NCT05157659 -NCT05152472 -NCT05157763 -NCT05152498 -NCT05157776 -NCT05152797 -NCT05157971 -NCT05152927 -NCT05158062 -NCT05153096 -NCT05158374 -NCT05153226 -NCT05158491 -NCT05153239 -NCT05158530 -NCT05153304 -NCT05158608 -NCT05153330 -NCT05158907 -NCT05153343 -NCT05159050 -NCT05153408 -NCT05159193 -NCT05153447 -NCT05159245 -NCT05153733 -NCT05159323 -NCT05153746 -NCT05159388 -NCT05153772 -NCT05159440 -NCT05153785 -NCT05159518 -NCT05154162 -NCT05159700 -NCT05154305 -NCT05159778 -NCT05154344 -NCT05160051 -NCT05154396 -NCT05160168 -NCT05154487 -NCT05160285 -NCT05154630 -NCT05160324 -NCT05154812 -NCT05160480 -NCT05154994 -NCT05160545 -NCT05155033 -NCT05160597 -NCT05155046 -NCT05160714 -NCT05155124 -NCT05160727 -NCT05155189 -NCT05160740 -NCT05155215 -NCT05160753 -NCT05155254 -NCT05160818 -NCT05155332 -NCT05160857 -NCT05155501 -NCT05160896 -NCT05155605 -NCT05160922 -NCT05155618 -NCT05161013 -NCT05155709 -NCT05161026 -NCT05155722 -NCT05171374 -NCT05161195 -NCT05167149 -NCT05161260 -NCT05167071 -NCT05161312 -NCT05167175 -NCT05161390 -NCT05167370 -NCT05161533 -NCT05167409 -NCT05161572 -NCT05167448 -NCT05161585 -NCT05167500 -NCT05161728 -NCT05167643 -NCT05162118 -NCT05167669 -NCT05162196 -NCT05167851 -NCT05162235 -NCT05167916 -NCT05162352 -NCT05167994 -NCT05162404 -NCT05168163 -NCT05162469 -NCT05168202 -NCT05162573 -NCT05168423 -NCT05162755 -NCT05168527 -NCT05162807 -NCT05168566 -NCT05162846 -NCT05168618 -NCT05162872 -NCT05168696 -NCT05162898 -NCT05168748 -NCT05162976 -NCT05168839 -NCT05163028 -NCT05168904 -NCT05163041 -NCT05168930 -NCT05163080 -NCT05169112 -NCT05163106 -NCT05169203 -NCT05163223 -NCT05169437 -NCT05163249 -NCT05169489 -NCT05163483 -NCT05169515 -NCT05163509 -NCT05169528 -NCT05163665 -NCT05169567 -NCT05163873 -NCT05169658 -NCT05163977 -NCT05169684 -NCT05164042 -NCT05169697 -NCT05164315 -NCT05169801 -NCT05164354 -NCT05169944 -NCT05164445 -NCT05169957 -NCT05164458 -NCT05169970 -NCT05164510 -NCT05170035 -NCT05164666 -NCT05170204 -NCT05164770 -NCT05170230 -NCT05164848 -NCT05170256 -NCT05164874 -NCT05170334 -NCT05164952 -NCT05170399 -NCT05165160 -NCT05170438 -NCT05165225 -NCT05170503 -NCT05165355 -NCT05170555 -NCT05165407 -NCT05170581 -NCT05165433 -NCT05170594 -NCT05165849 -NCT05170789 -NCT05166070 -NCT05170828 -NCT05166148 -NCT05170958 -NCT05166239 -NCT05171062 -NCT05166577 -NCT05171166 -NCT05166616 -NCT05171309 -NCT05166694 -NCT05171335 -NCT05166772 -NCT05180695 -NCT05171387 -NCT05176665 -NCT05171439 -NCT05176509 -NCT05171530 -NCT05176691 -NCT05171647 -NCT05176743 -NCT05171660 -NCT05176756 -NCT05171777 -NCT05176834 -NCT05171790 -NCT05176860 -NCT05171816 -NCT05176873 -NCT05172245 -NCT05176925 -NCT05172258 -NCT05177042 -NCT05172310 -NCT05177068 -NCT05172518 -NCT05177133 -NCT05172596 -NCT05177185 -NCT05172739 -NCT05177211 -NCT05172856 -NCT05177237 -NCT05172986 -NCT05177276 -NCT05173142 -NCT05177380 -NCT05173246 -NCT05177432 -NCT05173272 -NCT05177484 -NCT05173337 -NCT05177536 -NCT05173415 -NCT05177770 -NCT05173467 -NCT05177796 -NCT05173545 -NCT05178043 -NCT05173610 -NCT05178082 -NCT05173623 -NCT05178095 -NCT05173792 -NCT05178186 -NCT05173805 -NCT05178342 -NCT05173961 -NCT05178472 -NCT05173987 -NCT05178511 -NCT05174026 -NCT05178524 -NCT05174117 -NCT05178576 -NCT05174156 -NCT05178628 -NCT05174169 -NCT05178693 -NCT05174286 -NCT05178888 -NCT05174325 -NCT05178927 -NCT05174455 -NCT05179122 -NCT05174585 -NCT05179161 -NCT05174637 -NCT05179213 -NCT05174650 -NCT05179239 -NCT05174832 -NCT05179304 -NCT05175092 -NCT05179317 -NCT05175235 -NCT05179408 -NCT05175404 -NCT05179447 -NCT05175469 -NCT05179603 -NCT05175508 -NCT05179694 -NCT05176002 -NCT05179720 -NCT05176067 -NCT05179733 -NCT05176080 -NCT05179837 -NCT05176119 -NCT05179889 -NCT05176145 -NCT05180006 -NCT05176223 -NCT05180097 -NCT05176275 -NCT05180422 -NCT05176288 -NCT05180474 -NCT05176405 -NCT05180565 -NCT05176470 -NCT05180656 -NCT05176483 -NCT05190952 -NCT05180734 -NCT05186116 -NCT05180799 -NCT05186064 -NCT05180825 -NCT05186493 -NCT05180851 -NCT05186506 -NCT05180864 -NCT05186545 -NCT05180942 -NCT05186558 -NCT05181033 -NCT05186753 -NCT05181228 -NCT05186974 -NCT05181462 -NCT05187091 -NCT05181488 -NCT05187130 -NCT05181501 -NCT05187182 -NCT05181540 -NCT05187208 -NCT05181592 -NCT05187338 -NCT05181605 -NCT05187481 -NCT05181722 -NCT05187624 -NCT05181735 -NCT05187832 -NCT05181865 -NCT05187858 -NCT05182073 -NCT05187884 -NCT05182112 -NCT05188118 -NCT05182164 -NCT05188170 -NCT05182229 -NCT05188209 -NCT05182866 -NCT05188313 -NCT05182905 -NCT05188326 -NCT05182931 -NCT05188508 -NCT05182944 -NCT05188573 -NCT05182957 -NCT05188586 -NCT05183035 -NCT05188664 -NCT05183048 -NCT05188729 -NCT05183074 -NCT05188755 -NCT05183126 -NCT05188859 -NCT05183139 -NCT05189028 -NCT05183204 -NCT05189067 -NCT05183243 -NCT05189093 -NCT05183295 -NCT05189184 -NCT05183776 -NCT05189197 -NCT05183828 -NCT05189366 -NCT05183854 -NCT05189457 -NCT05183958 -NCT05189483 -NCT05183984 -NCT05189535 -NCT05184088 -NCT05189717 -NCT05184140 -NCT05189730 -NCT05184582 -NCT05190042 -NCT05184595 -NCT05190068 -NCT05184712 -NCT05190094 -NCT05184725 -NCT05190172 -NCT05184803 -NCT05190185 -NCT05184816 -NCT05190315 -NCT05184842 -NCT05190445 -NCT05184946 -NCT05190471 -NCT05185245 -NCT05190549 -NCT05185505 -NCT05190575 -NCT05185531 -NCT05190627 -NCT05185739 -NCT05190653 -NCT05185752 -NCT05190705 -NCT05185869 -NCT05190770 -NCT05185947 -NCT05201118 -NCT05190978 -NCT05196854 -NCT05191004 -NCT05196386 -NCT05191017 -NCT05197192 -NCT05191225 -NCT05197257 -NCT05191472 -NCT05197322 -NCT05191498 -NCT05197348 -NCT05191667 -NCT05197426 -NCT05191680 -NCT05197881 -NCT05191784 -NCT05197894 -NCT05191797 -NCT05197933 -NCT05191849 -NCT05198089 -NCT05191914 -NCT05198349 -NCT05191940 -NCT05198479 -NCT05192018 -NCT05198505 -NCT05192031 -NCT05198531 -NCT05192044 -NCT05198609 -NCT05192122 -NCT05198622 -NCT05192174 -NCT05198752 -NCT05192278 -NCT05198804 -NCT05192447 -NCT05198817 -NCT05192460 -NCT05198830 -NCT05192486 -NCT05198843 -NCT05192512 -NCT05198856 -NCT05192525 -NCT05198934 -NCT05192681 -NCT05198960 -NCT05192694 -NCT05199051 -NCT05192798 -NCT05199168 -NCT05192837 -NCT05199272 -NCT05192889 -NCT05199285 -NCT05192980 -NCT05199311 -NCT05193149 -NCT05199337 -NCT05193188 -NCT05199363 -NCT05193214 -NCT05199376 -NCT05193240 -NCT05199519 -NCT05193292 -NCT05199584 -NCT05193357 -NCT05199649 -NCT05193604 -NCT05199753 -NCT05193617 -NCT05199961 -NCT05193721 -NCT05200013 -NCT05194072 -NCT05200143 -NCT05194293 -NCT05200260 -NCT05194397 -NCT05200273 -NCT05194709 -NCT05200299 -NCT05194735 -NCT05200312 -NCT05194878 -NCT05200325 -NCT05194982 -NCT05200364 -NCT05194995 -NCT05200442 -NCT05195281 -NCT05200481 -NCT05195294 -NCT05200559 -NCT05195385 -NCT05200572 -NCT05195619 -NCT05200650 -NCT05195632 -NCT05200897 -NCT05195710 -NCT05200988 -NCT05195970 -NCT05201001 -NCT05196269 -NCT05201066 -NCT05196360 -NCT05213195 -NCT05201183 -NCT05207475 -NCT05201248 -NCT05207371 -NCT05201326 -NCT05207514 -NCT05201352 -NCT05207670 -NCT05201404 -NCT05207709 -NCT05201430 -NCT05207722 -NCT05201547 -NCT05207735 -NCT05201612 -NCT05207787 -NCT05201781 -NCT05207904 -NCT05201859 -NCT05208047 -NCT05201963 -NCT05208177 -NCT05202236 -NCT05208307 -NCT05202249 -NCT05208606 -NCT05202275 -NCT05208762 -NCT05202314 -NCT05208775 -NCT05202561 -NCT05208853 -NCT05202782 -NCT05208944 -NCT05202860 -NCT05209074 -NCT05202899 -NCT05209152 -NCT05202925 -NCT05209243 -NCT05203029 -NCT05209256 -NCT05203120 -NCT05209295 -NCT05203172 -NCT05209308 -NCT05203276 -NCT05209360 -NCT05203328 -NCT05209529 -NCT05203445 -NCT05209620 -NCT05203497 -NCT05209750 -NCT05203601 -NCT05209880 -NCT05203614 -NCT05210049 -NCT05203627 -NCT05210270 -NCT05203913 -NCT05210374 -NCT05204147 -NCT05210413 -NCT05204160 -NCT05210790 -NCT05204173 -NCT05210907 -NCT05204290 -NCT05210946 -NCT05204524 -NCT05211232 -NCT05204628 -NCT05211323 -NCT05204758 -NCT05211336 -NCT05204862 -NCT05211388 -NCT05204927 -NCT05211427 -NCT05205109 -NCT05211557 -NCT05205161 -NCT05211570 -NCT05205200 -NCT05211778 -NCT05205330 -NCT05211895 -NCT05205408 -NCT05212012 -NCT05205421 -NCT05212025 -NCT05205512 -NCT05212246 -NCT05205850 -NCT05212454 -NCT05205902 -NCT05212584 -NCT05206071 -NCT05212701 -NCT05206331 -NCT05212857 -NCT05206357 -NCT05212896 -NCT05206526 -NCT05212922 -NCT05206656 -NCT05212987 -NCT05206812 -NCT05213078 -NCT05206942 -NCT05255133 -NCT05213221 -NCT05219721 -NCT05213312 -NCT05219695 -NCT05213637 -NCT05219981 -NCT05213741 -NCT05220020 -NCT05213767 -NCT05220033 -NCT05213884 -NCT05220046 -NCT05214183 -NCT05220098 -NCT05214339 -NCT05220124 -NCT05214482 -NCT05220267 -NCT05214820 -NCT05220345 -NCT05214937 -NCT05220501 -NCT05214976 -NCT05220722 -NCT05215015 -NCT05220748 -NCT05215067 -NCT05240937 -NCT05215106 -NCT05240950 -NCT05215340 -NCT05241028 -NCT05215379 -NCT05241093 -NCT05215470 -NCT05241106 -NCT05215496 -NCT05241119 -NCT05215535 -NCT05241132 -NCT05215574 -NCT05252078 -NCT05215665 -NCT05252091 -NCT05215769 -NCT05252364 -NCT05215860 -NCT05252390 -NCT05215925 -NCT05252403 -NCT05215951 -NCT05252416 -NCT05216029 -NCT05252546 -NCT05216120 -NCT05252572 -NCT05216237 -NCT05252585 -NCT05216302 -NCT05252780 -NCT05216380 -NCT05252884 -NCT05216432 -NCT05252975 -NCT05216653 -NCT05252988 -NCT05216835 -NCT05253053 -NCT05216900 -NCT05253066 -NCT05216965 -NCT05253118 -NCT05216978 -NCT05253131 -NCT05217069 -NCT05253144 -NCT05217303 -NCT05253170 -NCT05217446 -NCT05253313 -NCT05217693 -NCT05253495 -NCT05217940 -NCT05253651 -NCT05217966 -NCT05253716 -NCT05218044 -NCT05253807 -NCT05218148 -NCT05253846 -NCT05218408 -NCT05253872 -NCT05218499 -NCT05254171 -NCT05218759 -NCT05254184 -NCT05218811 -NCT05254327 -NCT05218876 -NCT05254665 -NCT05218889 -NCT05254678 -NCT05219318 -NCT05254743 -NCT05219435 -NCT05254795 -NCT05219500 -NCT05254847 -NCT05219513 -NCT05254899 -NCT05219578 -NCT05255003 -NCT05220800 -NCT05226455 -NCT05221320 -NCT05226169 -NCT05221385 -NCT05226468 -NCT05221606 -NCT05226494 -NCT05221645 -NCT05226507 -NCT05221658 -NCT05226598 -NCT05221736 -NCT05226663 -NCT05221775 -NCT05226728 -NCT05221840 -NCT05226871 -NCT05221957 -NCT05227027 -NCT05221970 -NCT05227131 -NCT05222087 -NCT05227144 -NCT05222165 -NCT05227326 -NCT05222204 -NCT05227378 -NCT05222269 -NCT05227482 -NCT05222308 -NCT05227534 -NCT05222438 -NCT05227651 -NCT05222464 -NCT05227664 -NCT05222555 -NCT05227807 -NCT05222620 -NCT05227898 -NCT05222802 -NCT05228015 -NCT05222932 -NCT05228093 -NCT05222971 -NCT05228119 -NCT05222984 -NCT05228249 -NCT05223036 -NCT05228431 -NCT05223088 -NCT05228470 -NCT05223231 -NCT05228496 -NCT05223322 -NCT05228600 -NCT05223413 -NCT05228743 -NCT05223491 -NCT05228951 -NCT05223582 -NCT05229003 -NCT05223595 -NCT05229029 -NCT05223608 -NCT05229081 -NCT05223647 -NCT05229315 -NCT05223673 -NCT05229341 -NCT05223686 -NCT05229497 -NCT05223699 -NCT05229575 -NCT05223803 -NCT05239325 -NCT05223816 -NCT05239533 -NCT05224024 -NCT05239546 -NCT05224141 -NCT05239624 -NCT05224310 -NCT05239650 -NCT05224518 -NCT05239663 -NCT05224869 -NCT05239676 -NCT05224934 -NCT05239689 -NCT05224999 -NCT05239728 -NCT05225038 -NCT05239741 -NCT05225090 -NCT05239910 -NCT05225116 -NCT05240131 -NCT05225363 -NCT05240209 -NCT05225428 -NCT05240235 -NCT05225584 -NCT05240404 -NCT05225844 -NCT05240625 -NCT05225870 -NCT05240690 -NCT05226078 -NCT05240898 -NCT05226117 -NCT05240911 -NCT05229601 -NCT05234606 -NCT05229614 -NCT05234502 -NCT05229679 -NCT05234658 -NCT05229783 -NCT05234684 -NCT05229809 -NCT05234853 -NCT05229874 -NCT05234905 -NCT05229900 -NCT05234996 -NCT05230004 -NCT05235074 -NCT05230251 -NCT05235100 -NCT05230290 -NCT05235165 -NCT05230381 -NCT05235269 -NCT05230563 -NCT05235516 -NCT05230654 -NCT05235542 -NCT05230680 -NCT05235594 -NCT05230758 -NCT05235607 -NCT05230771 -NCT05235737 -NCT05230810 -NCT05235750 -NCT05231044 -NCT05235906 -NCT05231070 -NCT05235932 -NCT05231122 -NCT05235997 -NCT05231278 -NCT05236036 -NCT05231382 -NCT05236049 -NCT05231629 -NCT05236296 -NCT05231733 -NCT05236608 -NCT05231746 -NCT05236621 -NCT05231850 -NCT05236647 -NCT05231915 -NCT05236686 -NCT05231993 -NCT05236699 -NCT05232006 -NCT05236764 -NCT05232084 -NCT05236790 -NCT05232136 -NCT05236894 -NCT05232357 -NCT05236946 -NCT05232409 -NCT05236972 -NCT05232552 -NCT05237258 -NCT05232578 -NCT05237310 -NCT05232851 -NCT05237349 -NCT05232916 -NCT05237453 -NCT05233033 -NCT05237713 -NCT05233059 -NCT05237921 -NCT05233163 -NCT05237947 -NCT05233215 -NCT05238064 -NCT05233293 -NCT05238363 -NCT05233332 -NCT05238376 -NCT05233358 -NCT05238558 -NCT05233397 -NCT05238584 -NCT05233436 -NCT05238688 -NCT05233618 -NCT05238792 -NCT05233683 -NCT05238818 -NCT05233696 -NCT05238831 -NCT05233787 -NCT05238883 -NCT05233800 -NCT05238922 -NCT05233904 -NCT05239000 -NCT05233982 -NCT05239143 -NCT05234112 -NCT05239169 -NCT05234307 -NCT05239182 -NCT05234437 -NCT05251948 -NCT05241210 -NCT05245812 -NCT05241249 -NCT05245786 -NCT05241340 -NCT05245877 -NCT05241392 -NCT05245968 -NCT05241405 -NCT05245994 -NCT05241561 -NCT05246111 -NCT05241574 -NCT05246384 -NCT05241613 -NCT05246462 -NCT05241717 -NCT05246475 -NCT05241834 -NCT05246514 -NCT05241860 -NCT05246670 -NCT05241873 -NCT05246735 -NCT05241899 -NCT05246982 -NCT05241925 -NCT05246995 -NCT05242146 -NCT05247164 -NCT05242562 -NCT05247268 -NCT05242757 -NCT05247346 -NCT05242770 -NCT05247476 -NCT05242783 -NCT05247515 -NCT05242822 -NCT05247619 -NCT05242926 -NCT05247684 -NCT05242965 -NCT05247749 -NCT05243056 -NCT05247905 -NCT05243082 -NCT05247996 -NCT05243212 -NCT05248009 -NCT05243342 -NCT05248022 -NCT05243355 -NCT05248048 -NCT05243524 -NCT05248074 -NCT05243550 -NCT05248256 -NCT05243641 -NCT05248425 -NCT05243693 -NCT05248685 -NCT05243797 -NCT05248789 -NCT05243862 -NCT05249101 -NCT05243888 -NCT05249114 -NCT05244070 -NCT05249127 -NCT05244174 -NCT05249426 -NCT05244213 -NCT05249569 -NCT05244239 -NCT05249712 -NCT05244382 -NCT05249959 -NCT05244434 -NCT05250362 -NCT05244551 -NCT05250518 -NCT05244577 -NCT05250648 -NCT05244642 -NCT05250687 -NCT05244798 -NCT05250791 -NCT05244811 -NCT05250843 -NCT05244915 -NCT05250895 -NCT05244993 -NCT05250973 -NCT05245006 -NCT05251038 -NCT05245058 -NCT05251233 -NCT05245071 -NCT05251389 -NCT05245435 -NCT05251662 -NCT05245474 -NCT05251714 -NCT05245500 -NCT05251766 -NCT05245656 -NCT05251805 -NCT05245682 -NCT05251896 -NCT05245760 -NCT05264896 -NCT05255159 -NCT05260203 -NCT05255302 -NCT05259839 -NCT05255406 -NCT05260385 -NCT05255471 -NCT05260528 -NCT05255484 -NCT05260619 -NCT05255523 -NCT05260671 -NCT05255601 -NCT05260723 -NCT05255653 -NCT05260957 -NCT05255666 -NCT05261269 -NCT05256225 -NCT05261399 -NCT05256238 -NCT05261490 -NCT05256277 -NCT05261750 -NCT05256290 -NCT05262010 -NCT05256381 -NCT05262101 -NCT05256472 -NCT05262166 -NCT05256537 -NCT05262192 -NCT05256576 -NCT05262335 -NCT05256641 -NCT05262400 -NCT05256745 -NCT05262413 -NCT05256888 -NCT05262452 -NCT05256966 -NCT05262465 -NCT05257018 -NCT05262491 -NCT05257083 -NCT05262530 -NCT05257122 -NCT05262556 -NCT05257135 -NCT05262582 -NCT05257382 -NCT05262608 -NCT05257395 -NCT05262621 -NCT05257408 -NCT05262673 -NCT05257512 -NCT05262842 -NCT05257590 -NCT05262855 -NCT05257707 -NCT05263050 -NCT05257785 -NCT05263141 -NCT05257850 -NCT05263180 -NCT05257876 -NCT05263219 -NCT05257967 -NCT05263245 -NCT05257993 -NCT05263271 -NCT05258136 -NCT05263284 -NCT05258266 -NCT05263336 -NCT05258279 -NCT05263453 -NCT05258461 -NCT05263466 -NCT05258526 -NCT05263479 -NCT05258539 -NCT05263492 -NCT05258747 -NCT05263583 -NCT05258799 -NCT05263609 -NCT05259072 -NCT05263648 -NCT05259267 -NCT05263700 -NCT05259319 -NCT05263817 -NCT05259384 -NCT05263869 -NCT05259397 -NCT05263882 -NCT05259410 -NCT05263947 -NCT05259540 -NCT05263960 -NCT05259553 -NCT05263986 -NCT05259657 -NCT05264038 -NCT05259696 -NCT05264532 -NCT05259709 -NCT05264883 -NCT05259813 -NCT05296746 -NCT05264974 -NCT05269550 -NCT05265013 -NCT05269485 -NCT05265052 -NCT05269693 -NCT05265091 -NCT05269914 -NCT05265169 -NCT05269940 -NCT05265208 -NCT05270044 -NCT05265650 -NCT05270057 -NCT05265663 -NCT05270200 -NCT05265715 -NCT05270213 -NCT05265754 -NCT05270395 -NCT05265793 -NCT05270564 -NCT05265819 -NCT05270577 -NCT05265897 -NCT05270642 -NCT05265962 -NCT05270655 -NCT05265975 -NCT05270720 -NCT05265988 -NCT05270824 -NCT05266105 -NCT05270889 -NCT05266157 -NCT05270928 -NCT05266196 -NCT05293041 -NCT05266274 -NCT05293158 -NCT05266313 -NCT05293197 -NCT05266378 -NCT05293496 -NCT05266534 -NCT05293912 -NCT05266612 -NCT05293964 -NCT05266768 -NCT05293990 -NCT05266820 -NCT05294016 -NCT05266846 -NCT05294055 -NCT05266898 -NCT05294120 -NCT05266937 -NCT05294172 -NCT05266950 -NCT05294302 -NCT05267041 -NCT05294367 -NCT05267054 -NCT05294640 -NCT05267106 -NCT05294731 -NCT05267171 -NCT05294900 -NCT05267353 -NCT05294991 -NCT05267392 -NCT05295043 -NCT05267470 -NCT05295212 -NCT05267496 -NCT05295589 -NCT05267587 -NCT05295927 -NCT05267626 -NCT05295992 -NCT05267899 -NCT05296005 -NCT05267912 -NCT05296070 -NCT05268003 -NCT05296096 -NCT05268263 -NCT05296109 -NCT05268315 -NCT05296122 -NCT05268510 -NCT05296278 -NCT05268614 -NCT05296304 -NCT05268666 -NCT05296317 -NCT05268692 -NCT05296369 -NCT05268952 -NCT05296421 -NCT05269160 -NCT05296512 -NCT05269186 -NCT05296525 -NCT05269316 -NCT05296564 -NCT05269342 -NCT05296577 -NCT05269355 -NCT05296603 -NCT05269381 -NCT05296681 -NCT05271110 -NCT05276726 -NCT05271240 -NCT05276609 -NCT05271279 -NCT05276791 -NCT05271292 -NCT05276973 -NCT05271318 -NCT05277051 -NCT05271344 -NCT05277168 -NCT05271604 -NCT05277402 -NCT05271682 -NCT05277454 -NCT05271916 -NCT05277675 -NCT05272293 -NCT05277688 -NCT05272371 -NCT05277701 -NCT05272384 -NCT05277753 -NCT05272462 -NCT05277766 -NCT05272553 -NCT05277844 -NCT05272696 -NCT05277909 -NCT05272709 -NCT05277935 -NCT05272813 -NCT05278039 -NCT05272826 -NCT05278052 -NCT05272865 -NCT05278078 -NCT05272917 -NCT05278208 -NCT05273255 -NCT05278351 -NCT05273307 -NCT05278364 -NCT05273541 -NCT05278546 -NCT05273554 -NCT05278598 -NCT05273593 -NCT05278715 -NCT05273814 -NCT05278728 -NCT05273931 -NCT05278741 -NCT05273944 -NCT05278806 -NCT05274048 -NCT05278832 -NCT05274139 -NCT05278871 -NCT05274191 -NCT05278975 -NCT05274438 -NCT05279027 -NCT05274451 -NCT05279300 -NCT05274763 -NCT05279521 -NCT05274893 -NCT05279677 -NCT05274945 -NCT05279690 -NCT05274997 -NCT05279859 -NCT05275062 -NCT05280067 -NCT05275361 -NCT05290935 -NCT05275374 -NCT05291052 -NCT05275426 -NCT05291156 -NCT05275439 -NCT05291182 -NCT05275478 -NCT05291390 -NCT05275530 -NCT05291403 -NCT05275543 -NCT05291494 -NCT05275569 -NCT05291507 -NCT05275673 -NCT05291780 -NCT05275777 -NCT05291910 -NCT05275868 -NCT05291988 -NCT05275881 -NCT05292027 -NCT05275946 -NCT05292417 -NCT05276167 -NCT05292521 -NCT05276284 -NCT05292664 -NCT05276310 -NCT05292742 -NCT05276492 -NCT05292898 -NCT05276505 -NCT05293028 -NCT05280210 -NCT05286294 -NCT05280275 -NCT05286229 -NCT05280288 -NCT05286320 -NCT05280314 -NCT05286437 -NCT05280444 -NCT05286619 -NCT05280457 -NCT05286684 -NCT05280470 -NCT05286749 -NCT05280483 -NCT05286788 -NCT05280626 -NCT05286801 -NCT05280873 -NCT05286814 -NCT05281003 -NCT05286827 -NCT05281159 -NCT05286840 -NCT05281211 -NCT05286957 -NCT05281237 -NCT05287113 -NCT05281250 -NCT05287165 -NCT05281276 -NCT05287295 -NCT05281354 -NCT05287308 -NCT05281380 -NCT05287386 -NCT05281471 -NCT05287399 -NCT05281731 -NCT05287451 -NCT05281783 -NCT05287568 -NCT05281809 -NCT05287750 -NCT05281926 -NCT05287854 -NCT05282433 -NCT05287945 -NCT05282459 -NCT05287984 -NCT05282719 -NCT05288036 -NCT05282784 -NCT05288062 -NCT05282901 -NCT05288127 -NCT05283044 -NCT05288166 -NCT05283109 -NCT05288205 -NCT05283226 -NCT05288244 -NCT05283330 -NCT05288439 -NCT05283421 -NCT05288595 -NCT05283460 -NCT05288647 -NCT05283564 -NCT05288686 -NCT05283577 -NCT05288777 -NCT05283720 -NCT05289076 -NCT05283837 -NCT05289193 -NCT05284032 -NCT05289258 -NCT05284214 -NCT05289336 -NCT05284539 -NCT05289492 -NCT05284552 -NCT05289648 -NCT05284643 -NCT05289687 -NCT05284825 -NCT05289726 -NCT05284864 -NCT05289830 -NCT05284942 -NCT05289856 -NCT05284968 -NCT05289908 -NCT05284994 -NCT05290090 -NCT05285319 -NCT05290116 -NCT05285332 -NCT05290155 -NCT05285358 -NCT05290194 -NCT05285813 -NCT05290220 -NCT05286034 -NCT05290337 -NCT05286060 -NCT05290480 -NCT05286086 -NCT05290597 -NCT05286164 -NCT05306132 -NCT05296772 -NCT05301842 -NCT05296798 -NCT05301764 -NCT05296811 -NCT05301881 -NCT05296941 -NCT05301998 -NCT05297123 -NCT05302011 -NCT05297162 -NCT05302037 -NCT05297552 -NCT05302284 -NCT05297565 -NCT05302336 -NCT05297617 -NCT05302375 -NCT05297643 -NCT05302466 -NCT05297734 -NCT05302557 -NCT05297773 -NCT05302570 -NCT05297864 -NCT05302583 -NCT05297890 -NCT05302648 -NCT05297903 -NCT05302817 -NCT05298020 -NCT05302843 -NCT05298176 -NCT05302921 -NCT05298293 -NCT05303038 -NCT05298423 -NCT05303090 -NCT05298592 -NCT05303129 -NCT05298605 -NCT05303298 -NCT05298683 -NCT05303467 -NCT05298696 -NCT05303480 -NCT05298722 -NCT05303493 -NCT05298930 -NCT05303519 -NCT05298969 -NCT05303532 -NCT05298995 -NCT05303675 -NCT05299021 -NCT05303714 -NCT05299047 -NCT05303727 -NCT05299125 -NCT05303792 -NCT05299164 -NCT05303818 -NCT05299203 -NCT05304169 -NCT05299385 -NCT05304208 -NCT05299411 -NCT05304234 -NCT05299424 -NCT05304377 -NCT05299437 -NCT05304390 -NCT05299476 -NCT05304468 -NCT05299580 -NCT05304481 -NCT05299606 -NCT05304546 -NCT05299671 -NCT05304585 -NCT05299840 -NCT05304663 -NCT05300048 -NCT05304754 -NCT05300269 -NCT05304793 -NCT05300282 -NCT05304936 -NCT05300438 -NCT05304962 -NCT05300464 -NCT05305131 -NCT05300945 -NCT05305365 -NCT05300958 -NCT05305378 -NCT05301010 -NCT05305820 -NCT05301101 -NCT05305859 -NCT05301114 -NCT05305885 -NCT05301283 -NCT05305924 -NCT05301296 -NCT05305937 -NCT05301530 -NCT05306028 -NCT05301556 -NCT05306041 -NCT05301595 -NCT05317403 -NCT05306301 -NCT05312801 -NCT05306340 -NCT05312710 -NCT05306444 -NCT05312840 -NCT05306509 -NCT05313009 -NCT05306652 -NCT05313074 -NCT05306808 -NCT05313191 -NCT05306847 -NCT05313243 -NCT05306912 -NCT05313282 -NCT05307198 -NCT05313724 -NCT05307289 -NCT05313737 -NCT05307367 -NCT05313815 -NCT05307705 -NCT05313906 -NCT05307835 -NCT05313958 -NCT05307874 -NCT05314023 -NCT05307939 -NCT05314101 -NCT05308225 -NCT05314114 -NCT05308407 -NCT05314179 -NCT05308446 -NCT05314400 -NCT05308654 -NCT05314803 -NCT05308732 -NCT05314907 -NCT05308771 -NCT05314946 -NCT05308875 -NCT05314998 -NCT05308901 -NCT05315011 -NCT05309187 -NCT05315128 -NCT05309213 -NCT05315154 -NCT05309265 -NCT05315167 -NCT05309421 -NCT05315180 -NCT05309512 -NCT05315258 -NCT05309629 -NCT05315570 -NCT05309655 -NCT05315687 -NCT05309668 -NCT05315700 -NCT05310331 -NCT05315713 -NCT05310344 -NCT05315830 -NCT05310383 -NCT05315908 -NCT05310448 -NCT05315999 -NCT05310565 -NCT05316103 -NCT05310591 -NCT05316116 -NCT05310643 -NCT05316129 -NCT05311176 -NCT05316155 -NCT05311189 -NCT05316181 -NCT05311319 -NCT05316246 -NCT05311397 -NCT05316324 -NCT05311527 -NCT05316376 -NCT05311566 -NCT05316467 -NCT05311579 -NCT05316480 -NCT05311618 -NCT05316688 -NCT05311709 -NCT05316701 -NCT05311774 -NCT05316818 -NCT05311943 -NCT05316831 -NCT05312216 -NCT05316935 -NCT05312255 -NCT05317000 -NCT05312372 -NCT05317026 -NCT05312398 -NCT05317078 -NCT05312411 -NCT05317325 -NCT05312476 -NCT05317351 -NCT05312671 -NCT05327621 -NCT05317416 -NCT05322408 -NCT05317819 -NCT05322356 -NCT05317858 -NCT05322460 -NCT05317936 -NCT05322499 -NCT05318027 -NCT05322512 -NCT05318131 -NCT05322577 -NCT05318274 -NCT05322590 -NCT05318339 -NCT05322720 -NCT05318404 -NCT05322733 -NCT05318443 -NCT05322850 -NCT05318469 -NCT05323045 -NCT05318495 -NCT05323201 -NCT05318573 -NCT05323253 -NCT05318612 -NCT05323409 -NCT05318625 -NCT05323656 -NCT05318794 -NCT05323734 -NCT05318807 -NCT05323890 -NCT05318833 -NCT05323929 -NCT05318963 -NCT05323955 -NCT05319015 -NCT05324020 -NCT05319028 -NCT05324098 -NCT05319145 -NCT05324202 -NCT05319249 -NCT05324332 -NCT05319314 -NCT05324501 -NCT05319431 -NCT05325151 -NCT05319457 -NCT05325164 -NCT05319574 -NCT05325216 -NCT05319587 -NCT05325229 -NCT05319639 -NCT05325281 -NCT05319730 -NCT05325528 -NCT05319873 -NCT05325632 -NCT05320029 -NCT05325801 -NCT05320081 -NCT05325866 -NCT05320380 -NCT05326035 -NCT05320406 -NCT05326165 -NCT05320458 -NCT05326243 -NCT05320497 -NCT05326282 -NCT05320588 -NCT05326360 -NCT05320640 -NCT05326425 -NCT05320692 -NCT05326464 -NCT05320757 -NCT05326516 -NCT05320809 -NCT05326984 -NCT05320874 -NCT05327010 -NCT05321134 -NCT05327023 -NCT05321147 -NCT05327153 -NCT05321316 -NCT05327231 -NCT05321329 -NCT05327270 -NCT05321615 -NCT05327309 -NCT05321784 -NCT05327452 -NCT05321823 -NCT05327465 -NCT05321862 -NCT05327517 -NCT05321940 -NCT05327530 -NCT05321992 -NCT05327543 -NCT05322135 -NCT05327582 -NCT05322187 -NCT05327608 -NCT05322330 -NCT05339581 -NCT05327647 -NCT05333809 -NCT05327686 -NCT05333705 -NCT05327725 -NCT05333874 -NCT05327738 -NCT05334238 -NCT05327751 -NCT05334277 -NCT05327894 -NCT05334329 -NCT05327946 -NCT05334641 -NCT05328102 -NCT05334693 -NCT05328167 -NCT05334732 -NCT05328258 -NCT05334810 -NCT05328336 -NCT05334823 -NCT05328388 -NCT05335018 -NCT05328440 -NCT05335226 -NCT05328505 -NCT05335369 -NCT05328739 -NCT05335460 -NCT05328908 -NCT05335473 -NCT05328973 -NCT05335668 -NCT05329025 -NCT05335928 -NCT05329103 -NCT05335941 -NCT05329298 -NCT05335967 -NCT05329402 -NCT05335993 -NCT05329532 -NCT05336266 -NCT05329545 -NCT05336279 -NCT05329623 -NCT05336318 -NCT05329688 -NCT05336383 -NCT05329792 -NCT05336409 -NCT05329974 -NCT05336643 -NCT05330364 -NCT05336721 -NCT05330377 -NCT05336786 -NCT05330429 -NCT05336812 -NCT05331105 -NCT05336916 -NCT05331131 -NCT05337137 -NCT05331326 -NCT05337280 -NCT05331391 -NCT05337657 -NCT05331521 -NCT05337735 -NCT05331625 -NCT05338047 -NCT05331638 -NCT05338125 -NCT05331807 -NCT05338281 -NCT05331911 -NCT05338307 -NCT05332002 -NCT05338346 -NCT05332171 -NCT05338541 -NCT05332340 -NCT05338580 -NCT05332483 -NCT05338619 -NCT05332561 -NCT05338658 -NCT05332574 -NCT05338723 -NCT05333016 -NCT05338775 -NCT05333250 -NCT05338905 -NCT05333276 -NCT05338931 -NCT05333302 -NCT05338957 -NCT05333328 -NCT05338970 -NCT05333367 -NCT05339022 -NCT05333432 -NCT05339113 -NCT05333458 -NCT05339204 -NCT05333523 -NCT05339230 -NCT05333588 -NCT05339321 -NCT05333601 -NCT05350943 -NCT05339685 -NCT05346198 -NCT05339763 -NCT05346146 -NCT05340231 -NCT05346224 -NCT05340270 -NCT05346276 -NCT05340309 -NCT05346328 -NCT05340322 -NCT05346367 -NCT05340374 -NCT05346380 -NCT05340413 -NCT05346484 -NCT05340491 -NCT05346510 -NCT05340569 -NCT05346536 -NCT05340621 -NCT05346692 -NCT05340673 -NCT05346757 -NCT05340829 -NCT05346796 -NCT05340881 -NCT05346809 -NCT05340985 -NCT05346848 -NCT05341141 -NCT05346861 -NCT05341193 -NCT05346874 -NCT05341206 -NCT05346952 -NCT05341349 -NCT05347134 -NCT05341492 -NCT05347212 -NCT05341557 -NCT05347485 -NCT05341570 -NCT05347628 -NCT05341583 -NCT05347641 -NCT05341622 -NCT05347745 -NCT05341739 -NCT05347797 -NCT05341947 -NCT05347979 -NCT05342194 -NCT05348161 -NCT05342389 -NCT05348174 -NCT05342506 -NCT05348187 -NCT05342571 -NCT05348213 -NCT05342584 -NCT05348356 -NCT05342636 -NCT05348486 -NCT05342675 -NCT05348577 -NCT05342792 -NCT05348668 -NCT05342805 -NCT05348811 -NCT05342883 -NCT05348876 -NCT05343013 -NCT05348889 -NCT05343260 -NCT05349227 -NCT05343325 -NCT05349266 -NCT05343377 -NCT05349331 -NCT05343689 -NCT05349409 -NCT05344339 -NCT05349487 -NCT05344625 -NCT05349643 -NCT05344729 -NCT05349890 -NCT05344742 -NCT05350059 -NCT05344820 -NCT05350137 -NCT05344833 -NCT05350163 -NCT05344924 -NCT05350475 -NCT05345002 -NCT05350501 -NCT05345158 -NCT05350527 -NCT05345444 -NCT05350631 -NCT05345587 -NCT05350722 -NCT05345613 -NCT05350826 -NCT05345860 -NCT05350891 -NCT05345938 -NCT05350917 -NCT05346107 -NCT05361057 -NCT05350956 -NCT05356897 -NCT05351021 -NCT05356741 -NCT05351268 -NCT05357027 -NCT05351294 -NCT05357196 -NCT05351320 -NCT05357417 -NCT05351346 -NCT05357508 -NCT05351424 -NCT05357573 -NCT05351502 -NCT05357651 -NCT05351593 -NCT05357794 -NCT05351762 -NCT05357820 -NCT05351788 -NCT05357846 -NCT05351931 -NCT05357898 -NCT05351983 -NCT05357911 -NCT05352178 -NCT05358158 -NCT05352321 -NCT05358249 -NCT05352542 -NCT05358340 -NCT05352646 -NCT05358379 -NCT05352672 -NCT05358548 -NCT05352685 -NCT05358639 -NCT05352750 -NCT05358691 -NCT05352802 -NCT05358704 -NCT05352828 -NCT05358808 -NCT05353257 -NCT05358938 -NCT05353361 -NCT05358951 -NCT05353374 -NCT05359016 -NCT05353387 -NCT05359042 -NCT05353439 -NCT05359211 -NCT05353530 -NCT05359354 -NCT05353582 -NCT05359393 -NCT05353894 -NCT05359406 -NCT05354076 -NCT05359419 -NCT05354102 -NCT05359445 -NCT05354323 -NCT05359497 -NCT05354362 -NCT05359692 -NCT05354557 -NCT05359783 -NCT05354570 -NCT05359861 -NCT05354596 -NCT05359874 -NCT05354700 -NCT05359913 -NCT05354765 -NCT05359939 -NCT05354817 -NCT05359952 -NCT05354843 -NCT05360160 -NCT05354856 -NCT05360238 -NCT05354882 -NCT05360264 -NCT05355051 -NCT05360277 -NCT05355155 -NCT05360290 -NCT05355298 -NCT05360368 -NCT05355363 -NCT05360381 -NCT05355558 -NCT05360407 -NCT05355701 -NCT05360420 -NCT05355727 -NCT05360498 -NCT05355753 -NCT05360680 -NCT05355987 -NCT05360732 -NCT05356117 -NCT05360745 -NCT05356156 -NCT05360979 -NCT05356169 -NCT05361018 -NCT05356520 -NCT05371301 -NCT05361083 -NCT05365243 -NCT05361161 -NCT05365230 -NCT05361174 -NCT05365256 -NCT05361356 -NCT05365581 -NCT05361395 -NCT05365659 -NCT05361538 -NCT05365893 -NCT05361564 -NCT05365997 -NCT05361668 -NCT05366062 -NCT05361720 -NCT05366166 -NCT05361798 -NCT05366179 -NCT05361811 -NCT05366218 -NCT05361902 -NCT05366413 -NCT05361915 -NCT05366478 -NCT05361954 -NCT05366699 -NCT05362032 -NCT05366816 -NCT05362318 -NCT05366829 -NCT05362331 -NCT05366842 -NCT05362409 -NCT05367076 -NCT05362539 -NCT05367180 -NCT05362617 -NCT05367206 -NCT05362669 -NCT05367232 -NCT05362708 -NCT05367401 -NCT05362760 -NCT05367440 -NCT05362773 -NCT05367635 -NCT05362942 -NCT05367687 -NCT05362955 -NCT05367778 -NCT05363007 -NCT05367830 -NCT05363111 -NCT05367856 -NCT05363267 -NCT05368116 -NCT05363280 -NCT05368207 -NCT05363605 -NCT05368428 -NCT05363631 -NCT05368506 -NCT05363644 -NCT05368805 -NCT05363709 -NCT05369000 -NCT05363722 -NCT05369117 -NCT05363800 -NCT05369221 -NCT05363826 -NCT05369234 -NCT05364008 -NCT05369286 -NCT05364073 -NCT05369312 -NCT05364177 -NCT05369429 -NCT05364229 -NCT05369650 -NCT05364255 -NCT05370001 -NCT05364372 -NCT05370079 -NCT05364411 -NCT05370144 -NCT05364424 -NCT05370430 -NCT05364450 -NCT05370469 -NCT05364489 -NCT05370547 -NCT05364645 -NCT05370755 -NCT05364762 -NCT05370807 -NCT05364879 -NCT05371054 -NCT05364918 -NCT05371093 -NCT05365035 -NCT05371132 -NCT05365100 -NCT05371158 -NCT05365178 -NCT05371197 -NCT05365191 -NCT05371223 -NCT05365204 -NCT05381909 -NCT05371847 -NCT05377008 -NCT05371860 -NCT05376878 -NCT05371899 -NCT05377034 -NCT05372016 -NCT05377047 -NCT05372120 -NCT05377528 -NCT05372198 -NCT05377632 -NCT05372354 -NCT05377658 -NCT05372367 -NCT05377736 -NCT05372484 -NCT05377749 -NCT05372536 -NCT05377827 -NCT05372614 -NCT05377905 -NCT05372640 -NCT05377996 -NCT05372692 -NCT05378087 -NCT05373069 -NCT05378152 -NCT05373147 -NCT05378178 -NCT05373251 -NCT05378204 -NCT05373316 -NCT05378256 -NCT05373381 -NCT05378334 -NCT05373628 -NCT05378425 -NCT05373823 -NCT05378464 -NCT05373901 -NCT05378542 -NCT05374122 -NCT05378633 -NCT05374161 -NCT05378737 -NCT05374226 -NCT05378763 -NCT05374252 -NCT05378854 -NCT05374304 -NCT05378867 -NCT05374512 -NCT05378919 -NCT05374538 -NCT05378971 -NCT05374603 -NCT05379153 -NCT05374876 -NCT05379166 -NCT05374915 -NCT05379205 -NCT05375084 -NCT05379569 -NCT05375162 -NCT05379595 -NCT05375253 -NCT05379647 -NCT05375370 -NCT05379790 -NCT05375461 -NCT05379803 -NCT05375526 -NCT05379946 -NCT05375539 -NCT05379972 -NCT05375604 -NCT05379985 -NCT05375643 -NCT05380024 -NCT05375708 -NCT05380271 -NCT05375734 -NCT05380349 -NCT05375825 -NCT05380414 -NCT05375903 -NCT05380635 -NCT05375994 -NCT05380713 -NCT05376111 -NCT05380882 -NCT05376202 -NCT05380986 -NCT05376293 -NCT05381038 -NCT05376345 -NCT05381077 -NCT05376423 -NCT05381103 -NCT05376553 -NCT05381181 -NCT05376631 -NCT05381506 -NCT05376644 -NCT05381597 -NCT05376709 -NCT05381636 -NCT05376800 -NCT05381662 -NCT05376852 -NCT05391867 -NCT05381935 -NCT05387226 -NCT05382286 -NCT05387109 -NCT05382299 -NCT05387265 -NCT05382325 -NCT05387603 -NCT05382338 -NCT05387616 -NCT05382364 -NCT05387681 -NCT05382377 -NCT05387863 -NCT05382390 -NCT05387876 -NCT05382442 -NCT05387915 -NCT05382559 -NCT05387928 -NCT05382728 -NCT05388006 -NCT05382741 -NCT05388058 -NCT05382936 -NCT05388123 -NCT05383079 -NCT05388136 -NCT05383092 -NCT05388149 -NCT05383170 -NCT05388162 -NCT05383196 -NCT05388214 -NCT05383352 -NCT05388279 -NCT05383482 -NCT05388305 -NCT05383703 -NCT05388435 -NCT05383716 -NCT05388487 -NCT05383872 -NCT05388500 -NCT05383898 -NCT05388669 -NCT05384015 -NCT05388695 -NCT05384119 -NCT05388734 -NCT05384366 -NCT05388773 -NCT05384444 -NCT05388838 -NCT05384496 -NCT05388851 -NCT05384535 -NCT05388877 -NCT05384587 -NCT05389085 -NCT05384626 -NCT05389202 -NCT05384691 -NCT05389293 -NCT05384769 -NCT05389306 -NCT05384821 -NCT05389332 -NCT05384873 -NCT05389423 -NCT05385068 -NCT05389462 -NCT05385081 -NCT05389527 -NCT05385146 -NCT05390021 -NCT05385185 -NCT05390398 -NCT05385250 -NCT05390476 -NCT05385263 -NCT05390528 -NCT05385406 -NCT05390645 -NCT05385549 -NCT05390710 -NCT05385692 -NCT05390723 -NCT05385705 -NCT05390749 -NCT05385900 -NCT05390814 -NCT05385926 -NCT05390944 -NCT05385965 -NCT05391022 -NCT05386056 -NCT05391048 -NCT05386108 -NCT05391126 -NCT05386355 -NCT05391243 -NCT05386524 -NCT05391321 -NCT05386550 -NCT05391477 -NCT05386576 -NCT05391490 -NCT05386628 -NCT05391750 -NCT05386719 -NCT05403333 -NCT05392205 -NCT05396885 -NCT05392608 -NCT05396872 -NCT05392634 -NCT05396937 -NCT05392647 -NCT05396950 -NCT05392686 -NCT05397093 -NCT05392699 -NCT05397171 -NCT05392946 -NCT05397262 -NCT05393063 -NCT05397457 -NCT05393258 -NCT05397496 -NCT05393297 -NCT05397522 -NCT05393427 -NCT05397769 -NCT05393440 -NCT05397860 -NCT05393466 -NCT05397873 -NCT05393492 -NCT05398094 -NCT05393635 -NCT05398224 -NCT05393713 -NCT05398302 -NCT05393791 -NCT05398380 -NCT05393804 -NCT05398484 -NCT05393869 -NCT05398497 -NCT05393947 -NCT05398614 -NCT05393986 -NCT05398861 -NCT05393999 -NCT05399394 -NCT05394103 -NCT05399524 -NCT05394168 -NCT05399654 -NCT05394233 -NCT05399953 -NCT05394246 -NCT05400070 -NCT05394259 -NCT05400109 -NCT05394285 -NCT05400122 -NCT05394337 -NCT05400226 -NCT05394350 -NCT05400265 -NCT05394415 -NCT05400408 -NCT05394558 -NCT05400577 -NCT05394675 -NCT05400603 -NCT05394714 -NCT05400876 -NCT05394740 -NCT05400902 -NCT05394818 -NCT05400915 -NCT05394831 -NCT05400941 -NCT05395052 -NCT05400993 -NCT05395260 -NCT05401045 -NCT05395533 -NCT05401097 -NCT05395741 -NCT05401110 -NCT05395780 -NCT05401162 -NCT05395871 -NCT05401175 -NCT05395910 -NCT05401279 -NCT05395936 -NCT05401370 -NCT05395962 -NCT05401643 -NCT05396118 -NCT05401786 -NCT05396222 -NCT05401942 -NCT05396300 -NCT05402046 -NCT05396326 -NCT05402124 -NCT05396339 -NCT05402592 -NCT05396391 -NCT05402722 -NCT05396807 -NCT05402930 -NCT05396833 -NCT05403190 -NCT05396846 -NCT05403242 -NCT05396859 -NCT05412758 -NCT05403385 -NCT05408195 -NCT05403450 -NCT05408169 -NCT05403554 -NCT05408221 -NCT05403580 -NCT05408260 -NCT05403671 -NCT05408507 -NCT05403723 -NCT05408676 -NCT05403736 -NCT05408845 -NCT05403801 -NCT05408871 -NCT05404022 -NCT05409066 -NCT05404048 -NCT05409248 -NCT05404139 -NCT05409352 -NCT05404230 -NCT05409417 -NCT05404282 -NCT05409638 -NCT05404308 -NCT05409664 -NCT05404516 -NCT05409872 -NCT05404685 -NCT05410002 -NCT05404906 -NCT05410041 -NCT05404945 -NCT05410197 -NCT05405166 -NCT05410301 -NCT05405179 -NCT05410418 -NCT05405192 -NCT05410444 -NCT05405309 -NCT05410509 -NCT05405387 -NCT05410535 -NCT05405413 -NCT05410574 -NCT05405439 -NCT05410717 -NCT05405530 -NCT05410743 -NCT05405595 -NCT05410821 -NCT05405621 -NCT05410847 -NCT05406063 -NCT05411081 -NCT05406206 -NCT05411094 -NCT05406401 -NCT05411107 -NCT05406466 -NCT05411133 -NCT05406531 -NCT05411224 -NCT05406635 -NCT05411237 -NCT05406674 -NCT05411380 -NCT05406687 -NCT05411432 -NCT05406700 -NCT05411497 -NCT05406713 -NCT05411666 -NCT05406765 -NCT05411679 -NCT05406817 -NCT05411705 -NCT05406856 -NCT05411718 -NCT05406999 -NCT05411757 -NCT05407038 -NCT05411783 -NCT05407155 -NCT05411848 -NCT05407168 -NCT05412082 -NCT05407311 -NCT05412225 -NCT05407441 -NCT05412290 -NCT05407519 -NCT05412329 -NCT05407584 -NCT05412420 -NCT05407649 -NCT05412446 -NCT05407675 -NCT05412576 -NCT05407714 -NCT05412589 -NCT05407844 -NCT05412628 -NCT05407909 -NCT05412680 -NCT05407987 -NCT05412706 -NCT05408026 -NCT05567185 -NCT05412875 -NCT05418309 -NCT05412953 -NCT05418088 -NCT05413018 -NCT05418387 -NCT05413304 -NCT05418543 -NCT05413356 -NCT05418842 -NCT05413421 -NCT05418972 -NCT05413473 -NCT05419076 -NCT05413798 -NCT05419089 -NCT05413811 -NCT05419362 -NCT05413850 -NCT05419375 -NCT05413915 -NCT05419388 -NCT05414032 -NCT05419479 -NCT05414045 -NCT05419518 -NCT05414136 -NCT05419817 -NCT05414188 -NCT05420064 -NCT05414357 -NCT05420220 -NCT05414396 -NCT05420259 -NCT05414448 -NCT05420324 -NCT05414461 -NCT05420454 -NCT05414500 -NCT05420467 -NCT05414630 -NCT05420480 -NCT05414812 -NCT05420493 -NCT05414929 -NCT05420519 -NCT05415007 -NCT05420545 -NCT05415072 -NCT05420584 -NCT05415098 -NCT05420597 -NCT05415215 -NCT05420636 -NCT05415475 -NCT05420727 -NCT05415527 -NCT05420779 -NCT05415696 -NCT05420870 -NCT05415709 -NCT05420948 -NCT05415800 -NCT05421312 -NCT05415917 -NCT05421650 -NCT05415943 -NCT05421663 -NCT05416073 -NCT05421702 -NCT05416164 -NCT05421884 -NCT05416359 -NCT05421897 -NCT05416424 -NCT05421988 -NCT05416554 -NCT05422027 -NCT05416567 -NCT05422183 -NCT05416749 -NCT05422521 -NCT05416775 -NCT05422690 -NCT05417139 -NCT05422781 -NCT05417165 -NCT05422794 -NCT05417230 -NCT05566054 -NCT05417308 -NCT05566093 -NCT05417321 -NCT05566223 -NCT05417386 -NCT05566405 -NCT05417438 -NCT05566457 -NCT05417451 -NCT05566574 -NCT05417516 -NCT05566743 -NCT05417529 -NCT05566795 -NCT05417581 -NCT05566834 -NCT05417750 -NCT05566899 -NCT05417789 -NCT05566951 -NCT05417932 -NCT05567055 -NCT05422911 -NCT05563207 -NCT05423197 -NCT05563220 -NCT05423210 -NCT05563272 -NCT05423262 -NCT05563467 -NCT05423704 -NCT05563480 -NCT05423730 -NCT05563545 -NCT05423886 -NCT05563558 -NCT05423964 -NCT05563766 -NCT05423977 -NCT05563844 -NCT05424016 -NCT05563870 -NCT05424055 -NCT05563922 -NCT05424068 -NCT05564052 -NCT05424159 -NCT05564234 -NCT05424328 -NCT05564286 -NCT05424380 -NCT05564338 -NCT05424432 -NCT05564377 -NCT05424666 -NCT05564390 -NCT05424692 -NCT05564403 -NCT05424783 -NCT05564416 -NCT05424822 -NCT05564468 -NCT05424835 -NCT05564624 -NCT05425004 -NCT05564650 -NCT05425043 -NCT05564806 -NCT05425472 -NCT05564858 -NCT05425550 -NCT05564897 -NCT05425576 -NCT05564949 -NCT05425602 -NCT05565040 -NCT05425654 -NCT05565105 -NCT05425862 -NCT05565118 -NCT05425940 -NCT05565378 -NCT05426005 -NCT05565417 -NCT05426148 -NCT05565521 -NCT05426213 -NCT05565534 -NCT05426317 -NCT05565638 -NCT05426486 -NCT05565794 -NCT05426642 -NCT05565807 -NCT05426798 -NCT05558722 -NCT05558904 -NCT05558917 -NCT05558956 -NCT05558982 -NCT05559008 -NCT05559164 -NCT05559177 -NCT05559450 -NCT05559541 -NCT05559645 -NCT05559775 -NCT05559879 -NCT05560035 -NCT05560308 -NCT05560334 -NCT05560360 -NCT05560399 -NCT05560412 -NCT05560659 -NCT05560685 -NCT05560776 -NCT05561023 -NCT05561036 -NCT05561374 -NCT05561387 -NCT05561413 -NCT05561491 -NCT05561595 -NCT05561634 -NCT05561699 -NCT05561751 -NCT05561894 -NCT05562024 -NCT05562193 -NCT05562297 -NCT05562375 -NCT05562440 -NCT05562518 -NCT05562570 -NCT05562778 -NCT05562791 -NCT05562830 -NCT05566041 -NCT05426811 -NCT05557578 -NCT05426824 -NCT05557591 -NCT05427058 -NCT05557604 -NCT05427071 -NCT05557708 -NCT05427214 -NCT05557838 -NCT05427240 -NCT05557851 -NCT05427344 -NCT05557877 -NCT05427383 -NCT05557903 -NCT05427396 -NCT05558007 -NCT05427461 -NCT05558124 -NCT05427487 -NCT05558241 -NCT05427669 -NCT05558280 -NCT05427812 -NCT05558319 -NCT05427825 -NCT05558384 -NCT05427864 -NCT05558397 -NCT05428007 -NCT05558644 -NCT05428098 -NCT05438329 -NCT05438342 -NCT05438368 -NCT05438394 -NCT05438420 -NCT05438459 -NCT05438563 -NCT05438667 -NCT05438706 -NCT05438771 -NCT05438784 -NCT05438797 -NCT05438810 -NCT05438927 -NCT05438940 -NCT05439005 -NCT05439278 -NCT05439499 -NCT05439993 -NCT05440006 -NCT05440045 -NCT05440149 -NCT05440227 -NCT05440240 -NCT05440552 -NCT05440565 -NCT05440708 -NCT05440760 -NCT05440786 -NCT05440864 -NCT05440916 -NCT05440942 -NCT05441046 -NCT05441163 -NCT05441254 -NCT05441384 -NCT05441475 -NCT05441501 -NCT05441514 -NCT05441722 -NCT05441761 -NCT05441943 -NCT05441956 -NCT05442060 -NCT05442151 -NCT05442216 -NCT05442333 -NCT05442515 -NCT05442554 -NCT05442580 -NCT05442749 -NCT05442866 -NCT05442957 -NCT05442996 -NCT05443087 -NCT05443126 -NCT05443165 -NCT05443425 -NCT05443646 -NCT05443737 -NCT05443854 -NCT05443971 -NCT05444088 -NCT05555212 -NCT05555251 -NCT05555316 -NCT05555329 -NCT05555342 -NCT05555550 -NCT05555706 -NCT05555732 -NCT05555862 -NCT05555888 -NCT05555901 -NCT05556200 -NCT05556239 -NCT05556473 -NCT05556525 -NCT05556616 -NCT05556720 -NCT05556772 -NCT05556798 -NCT05557045 -NCT05557110 -NCT05557240 -NCT05557292 -NCT05557552 -NCT05557565 -NCT05558696 -NCT05428111 -NCT05432375 -NCT05428176 -NCT05432297 -NCT05428358 -NCT05432401 -NCT05428553 -NCT05432414 -NCT05428670 -NCT05432492 -NCT05428709 -NCT05432518 -NCT05428735 -NCT05432635 -NCT05428852 -NCT05432687 -NCT05428969 -NCT05432791 -NCT05429008 -NCT05432804 -NCT05429099 -NCT05432934 -NCT05429203 -NCT05432947 -NCT05429216 -NCT05433116 -NCT05429268 -NCT05433142 -NCT05429294 -NCT05433155 -NCT05429320 -NCT05433402 -NCT05429398 -NCT05433467 -NCT05429463 -NCT05433480 -NCT05429502 -NCT05433532 -NCT05429515 -NCT05433597 -NCT05429632 -NCT05433636 -NCT05429684 -NCT05433701 -NCT05429697 -NCT05433805 -NCT05429762 -NCT05433974 -NCT05429814 -NCT05434208 -NCT05429866 -NCT05434234 -NCT05429905 -NCT05434299 -NCT05429970 -NCT05434312 -NCT05430009 -NCT05434598 -NCT05430035 -NCT05434689 -NCT05430347 -NCT05434871 -NCT05430360 -NCT05435014 -NCT05430373 -NCT05435053 -NCT05430386 -NCT05435248 -NCT05430399 -NCT05435274 -NCT05430555 -NCT05435313 -NCT05430698 -NCT05435339 -NCT05430737 -NCT05435846 -NCT05430802 -NCT05435859 -NCT05430841 -NCT05435885 -NCT05430906 -NCT05436093 -NCT05430945 -NCT05436223 -NCT05431179 -NCT05436327 -NCT05431244 -NCT05436808 -NCT05431257 -NCT05436990 -NCT05431270 -NCT05437315 -NCT05431504 -NCT05437341 -NCT05431569 -NCT05437380 -NCT05431582 -NCT05437692 -NCT05431608 -NCT05437718 -NCT05431738 -NCT05438043 -NCT05431764 -NCT05438108 -NCT05431907 -NCT05438147 -NCT05432193 -NCT05438212 -NCT05432219 -NCT05438290 -NCT05432232 -NCT05555199 -NCT05444101 -NCT05554211 -NCT05444231 -NCT05554276 -NCT05444270 -NCT05554302 -NCT05444322 -NCT05554328 -NCT05444348 -NCT05554341 -NCT05444374 -NCT05554354 -NCT05444478 -NCT05554367 -NCT05444530 -NCT05554380 -NCT05444634 -NCT05554393 -NCT05444673 -NCT05554406 -NCT05444686 -NCT05554419 -NCT05444712 -NCT05554575 -NCT05444725 -NCT05554666 -NCT05444998 -NCT05554744 -NCT05445011 -NCT05554900 -NCT05445050 -NCT05554939 -NCT05445154 -NCT05555017 -NCT05445271 -NCT05546021 -NCT05546255 -NCT05546268 -NCT05546372 -NCT05546411 -NCT05546476 -NCT05546580 -NCT05546619 -NCT05546723 -NCT05546736 -NCT05546827 -NCT05546853 -NCT05546866 -NCT05546879 -NCT05546892 -NCT05547061 -NCT05547282 -NCT05547321 -NCT05547386 -NCT05547516 -NCT05547529 -NCT05547594 -NCT05547828 -NCT05547906 -NCT05547919 -NCT05547932 -NCT05548088 -NCT05548127 -NCT05548296 -NCT05548348 -NCT05548504 -NCT05548634 -NCT05548686 -NCT05549024 -NCT05549037 -NCT05549167 -NCT05549284 -NCT05549297 -NCT05549414 -NCT05549466 -NCT05549479 -NCT05549505 -NCT05549557 -NCT05549661 -NCT05549687 -NCT05549778 -NCT05549804 -NCT05549921 -NCT05549960 -NCT05549973 -NCT05550025 -NCT05550415 -NCT05550558 -NCT05550831 -NCT05550948 -NCT05551117 -NCT05551208 -NCT05551247 -NCT05551286 -NCT05551299 -NCT05551507 -NCT05551767 -NCT05551832 -NCT05551936 -NCT05552001 -NCT05552066 -NCT05552222 -NCT05552651 -NCT05552664 -NCT05552729 -NCT05552781 -NCT05552807 -NCT05552846 -NCT05552937 -NCT05552976 -NCT05553041 -NCT05553327 -NCT05553522 -NCT05553639 -NCT05553782 -NCT05553795 -NCT05553808 -NCT05553834 -NCT05553899 -NCT05554003 -NCT05554159 -NCT05445310 -NCT05450562 -NCT05445401 -NCT05450484 -NCT05445609 -NCT05450692 -NCT05445648 -NCT05450744 -NCT05445765 -NCT05450835 -NCT05445778 -NCT05450965 -NCT05445791 -NCT05451004 -NCT05445843 -NCT05451043 -NCT05445882 -NCT05451056 -NCT05445908 -NCT05451160 -NCT05445973 -NCT05451173 -NCT05446129 -NCT05451290 -NCT05446298 -NCT05451407 -NCT05446324 -NCT05451576 -NCT05446441 -NCT05451602 -NCT05446467 -NCT05451680 -NCT05446558 -NCT05451719 -NCT05446688 -NCT05451771 -NCT05446870 -NCT05451784 -NCT05446883 -NCT05540899 -NCT05446935 -NCT05540951 -NCT05447195 -NCT05541016 -NCT05447234 -NCT05541146 -NCT05447663 -NCT05541211 -NCT05447702 -NCT05541445 -NCT05447715 -NCT05541783 -NCT05447910 -NCT05541822 -NCT05447923 -NCT05542030 -NCT05447949 -NCT05542342 -NCT05447988 -NCT05542407 -NCT05448183 -NCT05542433 -NCT05448196 -NCT05542680 -NCT05448209 -NCT05542706 -NCT05448404 -NCT05543070 -NCT05448547 -NCT05543317 -NCT05448560 -NCT05543512 -NCT05448599 -NCT05543629 -NCT05448638 -NCT05543954 -NCT05448677 -NCT05544019 -NCT05448781 -NCT05544084 -NCT05448820 -NCT05544136 -NCT05448846 -NCT05544227 -NCT05448885 -NCT05544240 -NCT05448963 -NCT05544253 -NCT05449184 -NCT05544526 -NCT05449340 -NCT05544552 -NCT05449366 -NCT05544929 -NCT05449483 -NCT05544968 -NCT05449691 -NCT05545007 -NCT05449860 -NCT05545124 -NCT05449873 -NCT05545150 -NCT05449886 -NCT05545202 -NCT05449899 -NCT05545436 -NCT05450029 -NCT05545787 -NCT05450055 -NCT05545852 -NCT05450419 -NCT05545969 -NCT05451810 -NCT05540340 -NCT05451849 -NCT05540392 -NCT05451862 -NCT05540483 -NCT05451979 -NCT05540847 -NCT05452005 -NCT05462873 -NCT05462951 -NCT05463055 -NCT05463224 -NCT05463263 -NCT05463328 -NCT05463432 -NCT05463601 -NCT05463640 -NCT05463848 -NCT05463913 -NCT05463952 -NCT05464030 -NCT05464082 -NCT05464173 -NCT05464329 -NCT05464433 -NCT05464576 -NCT05464667 -NCT05464706 -NCT05464719 -NCT05529667 -NCT05529862 -NCT05529940 -NCT05530057 -NCT05530200 -NCT05530343 -NCT05530421 -NCT05530603 -NCT05530655 -NCT05530785 -NCT05530876 -NCT05531123 -NCT05531331 -NCT05531422 -NCT05531695 -NCT05531708 -NCT05531864 -NCT05531890 -NCT05531916 -NCT05532059 -NCT05532319 -NCT05532384 -NCT05532397 -NCT05532527 -NCT05532696 -NCT05532722 -NCT05533203 -NCT05533242 -NCT05533320 -NCT05533424 -NCT05533463 -NCT05533697 -NCT05533775 -NCT05533892 -NCT05533983 -NCT05534087 -NCT05534113 -NCT05534282 -NCT05534321 -NCT05534386 -NCT05534438 -NCT05534594 -NCT05534620 -NCT05534646 -NCT05534672 -NCT05535023 -NCT05535166 -NCT05535192 -NCT05535218 -NCT05535244 -NCT05535413 -NCT05535569 -NCT05535647 -NCT05535855 -NCT05536037 -NCT05536102 -NCT05536128 -NCT05536141 -NCT05536154 -NCT05536349 -NCT05536362 -NCT05536427 -NCT05537129 -NCT05537350 -NCT05537402 -NCT05537740 -NCT05537766 -NCT05537870 -NCT05537987 -NCT05538000 -NCT05538091 -NCT05538130 -NCT05538169 -NCT05538195 -NCT05538533 -NCT05538572 -NCT05538624 -NCT05538663 -NCT05538689 -NCT05538897 -NCT05538988 -NCT05539118 -NCT05539144 -NCT05539157 -NCT05539183 -NCT05539300 -NCT05539339 -NCT05539365 -NCT05539430 -NCT05539768 -NCT05539794 -NCT05539833 -NCT05540054 -NCT05540275 -NCT05540873 -NCT05452200 -NCT05457244 -NCT05452213 -NCT05457153 -NCT05452408 -NCT05457257 -NCT05452499 -NCT05457478 -NCT05452668 -NCT05457517 -NCT05452681 -NCT05457556 -NCT05452824 -NCT05457595 -NCT05453006 -NCT05457699 -NCT05453292 -NCT05457829 -NCT05453318 -NCT05457842 -NCT05453383 -NCT05457959 -NCT05453396 -NCT05458180 -NCT05453435 -NCT05458219 -NCT05453500 -NCT05458284 -NCT05453552 -NCT05458297 -NCT05453591 -NCT05458388 -NCT05453604 -NCT05458544 -NCT05453630 -NCT05458674 -NCT05453669 -NCT05458726 -NCT05453682 -NCT05458856 -NCT05453721 -NCT05458960 -NCT05453773 -NCT05458986 -NCT05453799 -NCT05459129 -NCT05453825 -NCT05459168 -NCT05453851 -NCT05459415 -NCT05453903 -NCT05459441 -NCT05454098 -NCT05459454 -NCT05454280 -NCT05459571 -NCT05454358 -NCT05459844 -NCT05454371 -NCT05460000 -NCT05454488 -NCT05460195 -NCT05454553 -NCT05460273 -NCT05454865 -NCT05460481 -NCT05455086 -NCT05460507 -NCT05455268 -NCT05460533 -NCT05455294 -NCT05460650 -NCT05455320 -NCT05460767 -NCT05455385 -NCT05460780 -NCT05455424 -NCT05460819 -NCT05455606 -NCT05461209 -NCT05455619 -NCT05461248 -NCT05455658 -NCT05461261 -NCT05455697 -NCT05461287 -NCT05455840 -NCT05461313 -NCT05455918 -NCT05461534 -NCT05456022 -NCT05461625 -NCT05456100 -NCT05461690 -NCT05456165 -NCT05461768 -NCT05456191 -NCT05461794 -NCT05456256 -NCT05462236 -NCT05456269 -NCT05462379 -NCT05456373 -NCT05462392 -NCT05456685 -NCT05462496 -NCT05456698 -NCT05462613 -NCT05456841 -NCT05462717 -NCT05457010 -NCT05529615 -NCT05464810 -NCT05469893 -NCT05464823 -NCT05469750 -NCT05464836 -NCT05470010 -NCT05464992 -NCT05470036 -NCT05465031 -NCT05470140 -NCT05465161 -NCT05470283 -NCT05465174 -NCT05470348 -NCT05465343 -NCT05470374 -NCT05465408 -NCT05470452 -NCT05465577 -NCT05470595 -NCT05465590 -NCT05470699 -NCT05465876 -NCT05470777 -NCT05465941 -NCT05470920 -NCT05465954 -NCT05470933 -NCT05466019 -NCT05471271 -NCT05466149 -NCT05471323 -NCT05466318 -NCT05525767 -NCT05466357 -NCT05525806 -NCT05466474 -NCT05526040 -NCT05466799 -NCT05526079 -NCT05466812 -NCT05526248 -NCT05466916 -NCT05526313 -NCT05466994 -NCT05526339 -NCT05467111 -NCT05526417 -NCT05467137 -NCT05526638 -NCT05467202 -NCT05526755 -NCT05467254 -NCT05526846 -NCT05467319 -NCT05526872 -NCT05467397 -NCT05526924 -NCT05467540 -NCT05526989 -NCT05467670 -NCT05527184 -NCT05467748 -NCT05527275 -NCT05467891 -NCT05527340 -NCT05467943 -NCT05527392 -NCT05468034 -NCT05527470 -NCT05468138 -NCT05527782 -NCT05468177 -NCT05527808 -NCT05468190 -NCT05527821 -NCT05468242 -NCT05527912 -NCT05468294 -NCT05528055 -NCT05468307 -NCT05528120 -NCT05468359 -NCT05528133 -NCT05468489 -NCT05528237 -NCT05468554 -NCT05528263 -NCT05468671 -NCT05528341 -NCT05468697 -NCT05528367 -NCT05468827 -NCT05528406 -NCT05468892 -NCT05528458 -NCT05468944 -NCT05528887 -NCT05469022 -NCT05528939 -NCT05469061 -NCT05528952 -NCT05469178 -NCT05529069 -NCT05469269 -NCT05529251 -NCT05469425 -NCT05529303 -NCT05469490 -NCT05529316 -NCT05469737 -NCT05529355 -NCT05471401 -NCT05525338 -NCT05471414 -NCT05525455 -NCT05471648 -NCT05525481 -NCT05471674 -NCT05514990 -NCT05515029 -NCT05515185 -NCT05515289 -NCT05515315 -NCT05515406 -NCT05515575 -NCT05515692 -NCT05515783 -NCT05515796 -NCT05515978 -NCT05516329 -NCT05516485 -NCT05516589 -NCT05516628 -NCT05516641 -NCT05516914 -NCT05517083 -NCT05517213 -NCT05517239 -NCT05517330 -NCT05517343 -NCT05517408 -NCT05517590 -NCT05518032 -NCT05518045 -NCT05518071 -NCT05518110 -NCT05518201 -NCT05518253 -NCT05518292 -NCT05518318 -NCT05518357 -NCT05518383 -NCT05518526 -NCT05518591 -NCT05518799 -NCT05518812 -NCT05518903 -NCT05518929 -NCT05518942 -NCT05518994 -NCT05519059 -NCT05519085 -NCT05519202 -NCT05519241 -NCT05519293 -NCT05519319 -NCT05519384 -NCT05519410 -NCT05519449 -NCT05519488 -NCT05519527 -NCT05519579 -NCT05519670 -NCT05519865 -NCT05519878 -NCT05519956 -NCT05519982 -NCT05520255 -NCT05520281 -NCT05520372 -NCT05520515 -NCT05520567 -NCT05520619 -NCT05520723 -NCT05520814 -NCT05520840 -NCT05520866 -NCT05521048 -NCT05521087 -NCT05521204 -NCT05521412 -NCT05521698 -NCT05521789 -NCT05521802 -NCT05521984 -NCT05521997 -NCT05522114 -NCT05522192 -NCT05522231 -NCT05522257 -NCT05522309 -NCT05522491 -NCT05522582 -NCT05522660 -NCT05522738 -NCT05522868 -NCT05522894 -NCT05522985 -NCT05523154 -NCT05523271 -NCT05523323 -NCT05523440 -NCT05523609 -NCT05523700 -NCT05523778 -NCT05523947 -NCT05523960 -NCT05524064 -NCT05524155 -NCT05524168 -NCT05524194 -NCT05524389 -NCT05524428 -NCT05524454 -NCT05524480 -NCT05524545 -NCT05524584 -NCT05524610 -NCT05524857 -NCT05524935 -NCT05524974 -NCT05525247 -NCT05525260 -NCT05525273 -NCT05525286 -NCT05525559 -NCT05471700 -NCT05477615 -NCT05471843 -NCT05477589 -NCT05471856 -NCT05477667 -NCT05472220 -NCT05477680 -NCT05472259 -NCT05477784 -NCT05472311 -NCT05477823 -NCT05472350 -NCT05477836 -NCT05472467 -NCT05477849 -NCT05472506 -NCT05477927 -NCT05472532 -NCT05477992 -NCT05472558 -NCT05478239 -NCT05472610 -NCT05478343 -NCT05472623 -NCT05478473 -NCT05472714 -NCT05478486 -NCT05472753 -NCT05478512 -NCT05472792 -NCT05478785 -NCT05472857 -NCT05478837 -NCT05472896 -NCT05478876 -NCT05472948 -NCT05478993 -NCT05473026 -NCT05479045 -NCT05473052 -NCT05479123 -NCT05473156 -NCT05479136 -NCT05473221 -NCT05479409 -NCT05473624 -NCT05479487 -NCT05473845 -NCT05479578 -NCT05473910 -NCT05479812 -NCT05473923 -NCT05479994 -NCT05474170 -NCT05480280 -NCT05474573 -NCT05480306 -NCT05474690 -NCT05480384 -NCT05474794 -NCT05480449 -NCT05474846 -NCT05480501 -NCT05474859 -NCT05480735 -NCT05475106 -NCT05480865 -NCT05475171 -NCT05481151 -NCT05475184 -NCT05481372 -NCT05475210 -NCT05481463 -NCT05475366 -NCT05481476 -NCT05475522 -NCT05481502 -NCT05475613 -NCT05481645 -NCT05475678 -NCT05481658 -NCT05475847 -NCT05481775 -NCT05475925 -NCT05482074 -NCT05475938 -NCT05482516 -NCT05476341 -NCT05482568 -NCT05476380 -NCT05482893 -NCT05476432 -NCT05482971 -NCT05476770 -NCT05483010 -NCT05476796 -NCT05483023 -NCT05476939 -NCT05483075 -NCT05476965 -NCT05483166 -NCT05477251 -NCT05483283 -NCT05477264 -NCT05514496 -NCT05477316 -NCT05514717 -NCT05477446 -NCT05514769 -NCT05477576 -NCT05514912 -NCT05483400 -NCT05488821 -NCT05483439 -NCT05488717 -NCT05483491 -NCT05488860 -NCT05483530 -NCT05510388 -NCT05483543 -NCT05510427 -NCT05483712 -NCT05510544 -NCT05483868 -NCT05510596 -NCT05483933 -NCT05510609 -NCT05484011 -NCT05510635 -NCT05484024 -NCT05510674 -NCT05484180 -NCT05510700 -NCT05484219 -NCT05510830 -NCT05484245 -NCT05510895 -NCT05484375 -NCT05510973 -NCT05484583 -NCT05511051 -NCT05484622 -NCT05511324 -NCT05484687 -NCT05511428 -NCT05484908 -NCT05511623 -NCT05484973 -NCT05511740 -NCT05485038 -NCT05511844 -NCT05485350 -NCT05512182 -NCT05485753 -NCT05512195 -NCT05485766 -NCT05512208 -NCT05485792 -NCT05512260 -NCT05485883 -NCT05512286 -NCT05485896 -NCT05512351 -NCT05485909 -NCT05512364 -NCT05485948 -NCT05512377 -NCT05485974 -NCT05512390 -NCT05486182 -NCT05512403 -NCT05486260 -NCT05512416 -NCT05486273 -NCT05512468 -NCT05486481 -NCT05512481 -NCT05486520 -NCT05512520 -NCT05486572 -NCT05512663 -NCT05486871 -NCT05512767 -NCT05486975 -NCT05512780 -NCT05487170 -NCT05512793 -NCT05487235 -NCT05513027 -NCT05487248 -NCT05513131 -NCT05487391 -NCT05513261 -NCT05487443 -NCT05513365 -NCT05487495 -NCT05513443 -NCT05487651 -NCT05513469 -NCT05487846 -NCT05513573 -NCT05487859 -NCT05513612 -NCT05488132 -NCT05513703 -NCT05488145 -NCT05513742 -NCT05488184 -NCT05513859 -NCT05488314 -NCT05514054 -NCT05488353 -NCT05514158 -NCT05488366 -NCT05514275 -NCT05488444 -NCT05514301 -NCT05488522 -NCT05514314 -NCT05488548 -NCT05514327 -NCT05488626 -NCT05514444 -NCT05489211 -NCT05504707 -NCT05489237 -NCT05504720 -NCT05489276 -NCT05505006 -NCT05489289 -NCT05505045 -NCT05489354 -NCT05505357 -NCT05489380 -NCT05505370 -NCT05489419 -NCT05505461 -NCT05489679 -NCT05505643 -NCT05489731 -NCT05505812 -NCT05489848 -NCT05505864 -NCT05489887 -NCT05505877 -NCT05489926 -NCT05506332 -NCT05489978 -NCT05506566 -NCT05489991 -NCT05506683 -NCT05490043 -NCT05506696 -NCT05490121 -NCT05506878 -NCT05490147 -NCT05506943 -NCT05490264 -NCT05506956 -NCT05490381 -NCT05506982 -NCT05490407 -NCT05507112 -NCT05490433 -NCT05507398 -NCT05490446 -NCT05507411 -NCT05490472 -NCT05507541 -NCT05490485 -NCT05507606 -NCT05490524 -NCT05507632 -NCT05490641 -NCT05507658 -NCT05490719 -NCT05507736 -NCT05490771 -NCT05507775 -NCT05490849 -NCT05507827 -NCT05490953 -NCT05508100 -NCT05491044 -NCT05508347 -NCT05491083 -NCT05508373 -NCT05491213 -NCT05508412 -NCT05491226 -NCT05508464 -NCT05491239 -NCT05508555 -NCT05491317 -NCT05508620 -NCT05491395 -NCT05508659 -NCT05491512 -NCT05508737 -NCT05491616 -NCT05508867 -NCT05491694 -NCT05508906 -NCT05491811 -NCT05509374 -NCT05492045 -NCT05509439 -NCT05492123 -NCT05509478 -NCT05492136 -NCT05509530 -NCT05492682 -NCT05509699 -NCT05493033 -NCT05509751 -NCT05493215 -NCT05509790 -NCT05493228 -NCT05509829 -NCT05493319 -NCT05509985 -NCT05493332 -NCT05503108 -NCT05503134 -NCT05503251 -NCT05503667 -NCT05503797 -NCT05503888 -NCT05503914 -NCT05504148 -NCT05504213 -NCT05504252 -NCT05504265 -NCT05504278 -NCT05504603 -NCT05504642 -NCT05493501 -NCT05498220 -NCT05493566 -NCT05498155 -NCT05493618 -NCT05498259 -NCT05493683 -NCT05498272 -NCT05493800 -NCT05498311 -NCT05493956 -NCT05498389 -NCT05493995 -NCT05498402 -NCT05494021 -NCT05498428 -NCT05494060 -NCT05498480 -NCT05494086 -NCT05498519 -NCT05494190 -NCT05498545 -NCT05494281 -NCT05498597 -NCT05494502 -NCT05498636 -NCT05494580 -NCT05498792 -NCT05494658 -NCT05498805 -NCT05494697 -NCT05498896 -NCT05494762 -NCT05499013 -NCT05494866 -NCT05499065 -NCT05494918 -NCT05499390 -NCT05495035 -NCT05499663 -NCT05495048 -NCT05499715 -NCT05495100 -NCT05499936 -NCT05495152 -NCT05499975 -NCT05495165 -NCT05500092 -NCT05495295 -NCT05500248 -NCT05495399 -NCT05500391 -NCT05495425 -NCT05500508 -NCT05495464 -NCT05500846 -NCT05495672 -NCT05501054 -NCT05495724 -NCT05501158 -NCT05496036 -NCT05501171 -NCT05496101 -NCT05501262 -NCT05496166 -NCT05501548 -NCT05496192 -NCT05501665 -NCT05496231 -NCT05501704 -NCT05496491 -NCT05501769 -NCT05496556 -NCT05501821 -NCT05496569 -NCT05501886 -NCT05496595 -NCT05501899 -NCT05496686 -NCT05501912 -NCT05496777 -NCT05501990 -NCT05496829 -NCT05502224 -NCT05496959 -NCT05502237 -NCT05497102 -NCT05502250 -NCT05497310 -NCT05502276 -NCT05497336 -NCT05502315 -NCT05497453 -NCT05502354 -NCT05497531 -NCT05502367 -NCT05497544 -NCT05502393 -NCT05497726 -NCT05502458 -NCT05497739 -NCT05502523 -NCT05497778 -NCT05502666 -NCT05497804 -NCT05502900 -NCT05497843 -NCT05502913 -NCT05497973 -NCT05502991 -NCT05498051 -NCT05579184 -NCT05567341 -NCT05573815 -NCT05567588 -NCT05573802 -NCT05567601 -NCT05574101 -NCT05567679 -NCT05574114 -NCT05567770 -NCT05574504 -NCT05567835 -NCT05574608 -NCT05567887 -NCT05574647 -NCT05568017 -NCT05574686 -NCT05568095 -NCT05574712 -NCT05568212 -NCT05574816 -NCT05568316 -NCT05574881 -NCT05568472 -NCT05574907 -NCT05568537 -NCT05574920 -NCT05568550 -NCT05574998 -NCT05568667 -NCT05575323 -NCT05568680 -NCT05575635 -NCT05569057 -NCT05575804 -NCT05569200 -NCT05575973 -NCT05569291 -NCT05575986 -NCT05569434 -NCT05576077 -NCT05569512 -NCT05576272 -NCT05569629 -NCT05576389 -NCT05569707 -NCT05576480 -NCT05569811 -NCT05576532 -NCT05570188 -NCT05576545 -NCT05570227 -NCT05576766 -NCT05570253 -NCT05576831 -NCT05570422 -NCT05576896 -NCT05570604 -NCT05576909 -NCT05570825 -NCT05576961 -NCT05570851 -NCT05576974 -NCT05570942 -NCT05577000 -NCT05570994 -NCT05577052 -NCT05571098 -NCT05577091 -NCT05571293 -NCT05577364 -NCT05571540 -NCT05577416 -NCT05571644 -NCT05577442 -NCT05571787 -NCT05577611 -NCT05571839 -NCT05577702 -NCT05571956 -NCT05577715 -NCT05571969 -NCT05577819 -NCT05572216 -NCT05577923 -NCT05572229 -NCT05578092 -NCT05572463 -NCT05578274 -NCT05572476 -NCT05578287 -NCT05572515 -NCT05578326 -NCT05572684 -NCT05578378 -NCT05572801 -NCT05578430 -NCT05572983 -NCT05578664 -NCT05573022 -NCT05578677 -NCT05573035 -NCT05578820 -NCT05573126 -NCT05578872 -NCT05573373 -NCT05578898 -NCT05573503 -NCT05578976 -NCT05573555 -NCT05579132 -NCT05573776 -NCT05589844 -NCT05579275 -NCT05583916 -NCT05579340 -NCT05583851 -NCT05579366 -NCT05584111 -NCT05579769 -NCT05584137 -NCT05579782 -NCT05584163 -NCT05580107 -NCT05584267 -NCT05580224 -NCT05584332 -NCT05580328 -NCT05584449 -NCT05580341 -NCT05584540 -NCT05580354 -NCT05584592 -NCT05580445 -NCT05584670 -NCT05580562 -NCT05584709 -NCT05580588 -NCT05584761 -NCT05580601 -NCT05584787 -NCT05580770 -NCT05584800 -NCT05580796 -NCT05584826 -NCT05580835 -NCT05584930 -NCT05580861 -NCT05585034 -NCT05580991 -NCT05585281 -NCT05581004 -NCT05585320 -NCT05581030 -NCT05585476 -NCT05581121 -NCT05585554 -NCT05581342 -NCT05585580 -NCT05581550 -NCT05585788 -NCT05581589 -NCT05585814 -NCT05581719 -NCT05585840 -NCT05581784 -NCT05585996 -NCT05581875 -NCT05586061 -NCT05582018 -NCT05586074 -NCT05582031 -NCT05586100 -NCT05582122 -NCT05586321 -NCT05582265 -NCT05586360 -NCT05582278 -NCT05586516 -NCT05582499 -NCT05586841 -NCT05582538 -NCT05587088 -NCT05582551 -NCT05587192 -NCT05582590 -NCT05587296 -NCT05582759 -NCT05587374 -NCT05582772 -NCT05587543 -NCT05582850 -NCT05587972 -NCT05582876 -NCT05588141 -NCT05582889 -NCT05588206 -NCT05583071 -NCT05588219 -NCT05583097 -NCT05588297 -NCT05583110 -NCT05588388 -NCT05583149 -NCT05588414 -NCT05583175 -NCT05588453 -NCT05583188 -NCT05588609 -NCT05583201 -NCT05588648 -NCT05583383 -NCT05588700 -NCT05583409 -NCT05588973 -NCT05583422 -NCT05589558 -NCT05583552 -NCT05589597 -NCT05583617 -NCT05589675 -NCT05583708 -NCT05589818 -NCT05583734 -NCT05623267 -NCT05589857 -NCT05595499 -NCT05589896 -NCT05595473 -NCT05589961 -NCT05595577 -NCT05590091 -NCT05595590 -NCT05590117 -NCT05595603 -NCT05590221 -NCT05595889 -NCT05590273 -NCT05596097 -NCT05590377 -NCT05596266 -NCT05590559 -NCT05596409 -NCT05590572 -NCT05596565 -NCT05590624 -NCT05596630 -NCT05590650 -NCT05596760 -NCT05590689 -NCT05596890 -NCT05590793 -NCT05597228 -NCT05590962 -NCT05597306 -NCT05591053 -NCT05597345 -NCT05591131 -NCT05597384 -NCT05591456 -NCT05597527 -NCT05591534 -NCT05597683 -NCT05591547 -NCT05597839 -NCT05591560 -NCT05597852 -NCT05592015 -NCT05597878 -NCT05592132 -NCT05597917 -NCT05592171 -NCT05598060 -NCT05592197 -NCT05598151 -NCT05592262 -NCT05598229 -NCT05592626 -NCT05598268 -NCT05592639 -NCT05598515 -NCT05592665 -NCT05598593 -NCT05592886 -NCT05598827 -NCT05592938 -NCT05598853 -NCT05593016 -NCT05599048 -NCT05593094 -NCT05599139 -NCT05593107 -NCT05599360 -NCT05593146 -NCT05599698 -NCT05593328 -NCT05599737 -NCT05593458 -NCT05599789 -NCT05593497 -NCT05599984 -NCT05594043 -NCT05600127 -NCT05594069 -NCT05600153 -NCT05594095 -NCT05600309 -NCT05594290 -NCT05600322 -NCT05594381 -NCT05621902 -NCT05594459 -NCT05622071 -NCT05594498 -NCT05622136 -NCT05594576 -NCT05622162 -NCT05594784 -NCT05622227 -NCT05594797 -NCT05622240 -NCT05594875 -NCT05622344 -NCT05594914 -NCT05622357 -NCT05594927 -NCT05622474 -NCT05595109 -NCT05622591 -NCT05595122 -NCT05622760 -NCT05595135 -NCT05622825 -NCT05595330 -NCT05622890 -NCT05595447 -NCT05623020 -NCT05600400 -NCT05605899 -NCT05600491 -NCT05605808 -NCT05600556 -NCT05605964 -NCT05600582 -NCT05606081 -NCT05600608 -NCT05606133 -NCT05600660 -NCT05606263 -NCT05600686 -NCT05606380 -NCT05600894 -NCT05606549 -NCT05600998 -NCT05606588 -NCT05601037 -NCT05606692 -NCT05601206 -NCT05606848 -NCT05601219 -NCT05607004 -NCT05601232 -NCT05607017 -NCT05601323 -NCT05607095 -NCT05601401 -NCT05607108 -NCT05601440 -NCT05607199 -NCT05601505 -NCT05607329 -NCT05601700 -NCT05607342 -NCT05601726 -NCT05607407 -NCT05601752 -NCT05607420 -NCT05601973 -NCT05607498 -NCT05602051 -NCT05607550 -NCT05602168 -NCT05607563 -NCT05602194 -NCT05607693 -NCT05602259 -NCT05607849 -NCT05602363 -NCT05607953 -NCT05602415 -NCT05608044 -NCT05602597 -NCT05608148 -NCT05602792 -NCT05619913 -NCT05602935 -NCT05620004 -NCT05602974 -NCT05620017 -NCT05603013 -NCT05620134 -NCT05603039 -NCT05620199 -NCT05603065 -NCT05620290 -NCT05603078 -NCT05620342 -NCT05603299 -NCT05620472 -NCT05603351 -NCT05620498 -NCT05603559 -NCT05620628 -NCT05603572 -NCT05620654 -NCT05603884 -NCT05620680 -NCT05603910 -NCT05620693 -NCT05604170 -NCT05620706 -NCT05604235 -NCT05620732 -NCT05604365 -NCT05620758 -NCT05604417 -NCT05620771 -NCT05604560 -NCT05620862 -NCT05604820 -NCT05620914 -NCT05604963 -NCT05620979 -NCT05605119 -NCT05621096 -NCT05605171 -NCT05621291 -NCT05605197 -NCT05621434 -NCT05605496 -NCT05621486 -NCT05605509 -NCT05621499 -NCT05605522 -NCT05621525 -NCT05605535 -NCT05621668 -NCT05605613 -NCT05621707 -NCT05608200 -NCT05613738 -NCT05608213 -NCT05613699 -NCT05608252 -NCT05613842 -NCT05608291 -NCT05613881 -NCT05608369 -NCT05613894 -NCT05608395 -NCT05614102 -NCT05608694 -NCT05614258 -NCT05608746 -NCT05614453 -NCT05608759 -NCT05614466 -NCT05608785 -NCT05614518 -NCT05608876 -NCT05614700 -NCT05609019 -NCT05614739 -NCT05609058 -NCT05614843 -NCT05609227 -NCT05615142 -NCT05609331 -NCT05615285 -NCT05609370 -NCT05615376 -NCT05609396 -NCT05615623 -NCT05609435 -NCT05615636 -NCT05609448 -NCT05615753 -NCT05609578 -NCT05615818 -NCT05609656 -NCT05615857 -NCT05609968 -NCT05615883 -NCT05609994 -NCT05615974 -NCT05610163 -NCT05616039 -NCT05610202 -NCT05616390 -NCT05610332 -NCT05616468 -NCT05610579 -NCT05616494 -NCT05610735 -NCT05616572 -NCT05610826 -NCT05616624 -NCT05610852 -NCT05616650 -NCT05610891 -NCT05617040 -NCT05610982 -NCT05617313 -NCT05611034 -NCT05617430 -NCT05611086 -NCT05617625 -NCT05611151 -NCT05617716 -NCT05611359 -NCT05617742 -NCT05611450 -NCT05617755 -NCT05611463 -NCT05617872 -NCT05611632 -NCT05617885 -NCT05611645 -NCT05617963 -NCT05611853 -NCT05618028 -NCT05611931 -NCT05618041 -NCT05612048 -NCT05618158 -NCT05612204 -NCT05618327 -NCT05612347 -NCT05618366 -NCT05612477 -NCT05618613 -NCT05613023 -NCT05618821 -NCT05613036 -NCT05618912 -NCT05613088 -NCT05618925 -NCT05613270 -NCT05619016 -NCT05613348 -NCT05619172 -NCT05613413 -NCT05619471 -NCT05613452 -NCT05619731 -NCT05613465 -NCT05619744 -NCT05613478 -NCT05619861 -NCT05613504 -NCT05634564 -NCT05623488 -NCT05629494 -NCT05623774 -NCT05629429 -NCT05623787 -NCT05629507 -NCT05623878 -NCT05629546 -NCT05623891 -NCT05629585 -NCT05623982 -NCT05629611 -NCT05624099 -NCT05629689 -NCT05624463 -NCT05629702 -NCT05624554 -NCT05629845 -NCT05624827 -NCT05629949 -NCT05624918 -NCT05630183 -NCT05624996 -NCT05630209 -NCT05625087 -NCT05630794 -NCT05625217 -NCT05630937 -NCT05625360 -NCT05630950 -NCT05625399 -NCT05631028 -NCT05625412 -NCT05631041 -NCT05625594 -NCT05631080 -NCT05625659 -NCT05631249 -NCT05625698 -NCT05631262 -NCT05625737 -NCT05631327 -NCT05625893 -NCT05631574 -NCT05625919 -NCT05631587 -NCT05625932 -NCT05631678 -NCT05626101 -NCT05631795 -NCT05626309 -NCT05631873 -NCT05626322 -NCT05631886 -NCT05626400 -NCT05631899 -NCT05626569 -NCT05631912 -NCT05626829 -NCT05631964 -NCT05627063 -NCT05632328 -NCT05627115 -NCT05632380 -NCT05627180 -NCT05632562 -NCT05627232 -NCT05632744 -NCT05627245 -NCT05632809 -NCT05627323 -NCT05632848 -NCT05627414 -NCT05632874 -NCT05627427 -NCT05632913 -NCT05627635 -NCT05632939 -NCT05627752 -NCT05633134 -NCT05627778 -NCT05633160 -NCT05627856 -NCT05633381 -NCT05627960 -NCT05633589 -NCT05628038 -NCT05633602 -NCT05628246 -NCT05633615 -NCT05628363 -NCT05633654 -NCT05628454 -NCT05633667 -NCT05628545 -NCT05633836 -NCT05628610 -NCT05633914 -NCT05628623 -NCT05633979 -NCT05628857 -NCT05634252 -NCT05628870 -NCT05634369 -NCT05628883 -NCT05634395 -NCT05628922 -NCT05634499 -NCT05629065 -NCT05634525 -NCT05629234 -NCT05724563 -NCT05634577 -NCT05722977 -NCT05634590 -NCT05723055 -NCT05634681 -NCT05723107 -NCT05634707 -NCT05723237 -NCT05634720 -NCT05723250 -NCT05634785 -NCT05723432 -NCT05634889 -NCT05723471 -NCT05634915 -NCT05723562 -NCT05634954 -NCT05723640 -NCT05635162 -NCT05723835 -NCT05635344 -NCT05723991 -NCT05635487 -NCT05724004 -NCT05635591 -NCT05724030 -NCT05635630 -NCT05724108 -NCT05635643 -NCT05724264 -NCT05635708 -NCT05724329 -NCT05635734 -NCT05656235 -NCT05656248 -NCT05656573 -NCT05656612 -NCT05656651 -NCT05656716 -NCT05656794 -NCT05656937 -NCT05656976 -NCT05657249 -NCT05657418 -NCT05657639 -NCT05657652 -NCT05657743 -NCT05657873 -NCT05658003 -NCT05658172 -NCT05658263 -NCT05658341 -NCT05658562 -NCT05658640 -NCT05658731 -NCT05659056 -NCT05659186 -NCT05659251 -NCT05659290 -NCT05659381 -NCT05659433 -NCT05659524 -NCT05659563 -NCT05659628 -NCT05659732 -NCT05659797 -NCT05659914 -NCT05659992 -NCT05660083 -NCT05660213 -NCT05660343 -NCT05660369 -NCT05660395 -NCT05660408 -NCT05660421 -NCT05660473 -NCT05660590 -NCT05660616 -NCT05660694 -NCT05660915 -NCT05660954 -NCT05660967 -NCT05660993 -NCT05661188 -NCT05671900 -NCT05672082 -NCT05672095 -NCT05672108 -NCT05672147 -NCT05672173 -NCT05672251 -NCT05672316 -NCT05672342 -NCT05672355 -NCT05672394 -NCT05672420 -NCT05672459 -NCT05672485 -NCT05672524 -NCT05672537 -NCT05673018 -NCT05673057 -NCT05673109 -NCT05673148 -NCT05673200 -NCT05673304 -NCT05673434 -NCT05673447 -NCT05673460 -NCT05673538 -NCT05673551 -NCT05673577 -NCT05673590 -NCT05673629 -NCT05673694 -NCT05673772 -NCT05673785 -NCT05722418 -NCT05722795 -NCT05722886 -NCT05722925 -NCT05724355 -NCT05636111 -NCT05641961 -NCT05636150 -NCT05641935 -NCT05636215 -NCT05642195 -NCT05636267 -NCT05642455 -NCT05636384 -NCT05642572 -NCT05636514 -NCT05642611 -NCT05636540 -NCT05642780 -NCT05636566 -NCT05642884 -NCT05636618 -NCT05642897 -NCT05636696 -NCT05642949 -NCT05636774 -NCT05642962 -NCT05636787 -NCT05643027 -NCT05636943 -NCT05643235 -NCT05637034 -NCT05643248 -NCT05637268 -NCT05643391 -NCT05637307 -NCT05643417 -NCT05637346 -NCT05643469 -NCT05637567 -NCT05643677 -NCT05638048 -NCT05643742 -NCT05638152 -NCT05643755 -NCT05638256 -NCT05643807 -NCT05638295 -NCT05643859 -NCT05638334 -NCT05643937 -NCT05638451 -NCT05643989 -NCT05638594 -NCT05644041 -NCT05638698 -NCT05644080 -NCT05638763 -NCT05644197 -NCT05638828 -NCT05644249 -NCT05639062 -NCT05644379 -NCT05639153 -NCT05644509 -NCT05639179 -NCT05644626 -NCT05639413 -NCT05644821 -NCT05639686 -NCT05645107 -NCT05639751 -NCT05645146 -NCT05639829 -NCT05645198 -NCT05639972 -NCT05645276 -NCT05640115 -NCT05645315 -NCT05640193 -NCT05645328 -NCT05640609 -NCT05645380 -NCT05640726 -NCT05645471 -NCT05640765 -NCT05645523 -NCT05640778 -NCT05645536 -NCT05640791 -NCT05645653 -NCT05640804 -NCT05645692 -NCT05640830 -NCT05645718 -NCT05640843 -NCT05646030 -NCT05640999 -NCT05646043 -NCT05641233 -NCT05646082 -NCT05641259 -NCT05646316 -NCT05641324 -NCT05646355 -NCT05641428 -NCT05646485 -NCT05641493 -NCT05655715 -NCT05641506 -NCT05655949 -NCT05641545 -NCT05656079 -NCT05641896 -NCT05656131 -NCT05641922 -NCT05656144 -NCT05646511 -NCT05651178 -NCT05646537 -NCT05651100 -NCT05646550 -NCT05651191 -NCT05646576 -NCT05651269 -NCT05646680 -NCT05651282 -NCT05646758 -NCT05651594 -NCT05646797 -NCT05651672 -NCT05646836 -NCT05651802 -NCT05646862 -NCT05651828 -NCT05647122 -NCT05651867 -NCT05647265 -NCT05651932 -NCT05647330 -NCT05652192 -NCT05647447 -NCT05652283 -NCT05647512 -NCT05652335 -NCT05647564 -NCT05652361 -NCT05647590 -NCT05652530 -NCT05647954 -NCT05652673 -NCT05648006 -NCT05652686 -NCT05648019 -NCT05652764 -NCT05648071 -NCT05652855 -NCT05648253 -NCT05652868 -NCT05648318 -NCT05652894 -NCT05648461 -NCT05652920 -NCT05648487 -NCT05653180 -NCT05648604 -NCT05653271 -NCT05648682 -NCT05653284 -NCT05648955 -NCT05653427 -NCT05648994 -NCT05653453 -NCT05649046 -NCT05653531 -NCT05649072 -NCT05653596 -NCT05649345 -NCT05653622 -NCT05649371 -NCT05653635 -NCT05649618 -NCT05653661 -NCT05649683 -NCT05653752 -NCT05649761 -NCT05653817 -NCT05649943 -NCT05653856 -NCT05649956 -NCT05653869 -NCT05649969 -NCT05653882 -NCT05650021 -NCT05653934 -NCT05650034 -NCT05654038 -NCT05650151 -NCT05654077 -NCT05650203 -NCT05654155 -NCT05650216 -NCT05654194 -NCT05650242 -NCT05654454 -NCT05650385 -NCT05654532 -NCT05650580 -NCT05654623 -NCT05650632 -NCT05654779 -NCT05650710 -NCT05655078 -NCT05650723 -NCT05655260 -NCT05650749 -NCT05655312 -NCT05650814 -NCT05655494 -NCT05650827 -NCT05655546 -NCT05650879 -NCT05655598 -NCT05650918 -NCT05655663 -NCT05651022 -NCT05655676 -NCT05651087 -NCT05671861 -NCT05661201 -NCT05665738 -NCT05661240 -NCT05665725 -NCT05661357 -NCT05665790 -NCT05661370 -NCT05665868 -NCT05661461 -NCT05665920 -NCT05661578 -NCT05666193 -NCT05661591 -NCT05666349 -NCT05661643 -NCT05666583 -NCT05661656 -NCT05666635 -NCT05661955 -NCT05666700 -NCT05662397 -NCT05666908 -NCT05662527 -NCT05666947 -NCT05662540 -NCT05667155 -NCT05662553 -NCT05667181 -NCT05662644 -NCT05667194 -NCT05662670 -NCT05667298 -NCT05662683 -NCT05667402 -NCT05662813 -NCT05667415 -NCT05662839 -NCT05667506 -NCT05662904 -NCT05667636 -NCT05662956 -NCT05667766 -NCT05663021 -NCT05667857 -NCT05663112 -NCT05668351 -NCT05663125 -NCT05668585 -NCT05663203 -NCT05668650 -NCT05663242 -NCT05668767 -NCT05663294 -NCT05668858 -NCT05663710 -NCT05668884 -NCT05663723 -NCT05668949 -NCT05663775 -NCT05668962 -NCT05663788 -NCT05668988 -NCT05663801 -NCT05669287 -NCT05663866 -NCT05669326 -NCT05664009 -NCT05669339 -NCT05664139 -NCT05669352 -NCT05664178 -NCT05669430 -NCT05664217 -NCT05669443 -NCT05664243 -NCT05669482 -NCT05664464 -NCT05669586 -NCT05664607 -NCT05669664 -NCT05664867 -NCT05669768 -NCT05664893 -NCT05669807 -NCT05664906 -NCT05669820 -NCT05664971 -NCT05669846 -NCT05665023 -NCT05669872 -NCT05665062 -NCT05669989 -NCT05665140 -NCT05670054 -NCT05665257 -NCT05670106 -NCT05665322 -NCT05670561 -NCT05665348 -NCT05670574 -NCT05665361 -NCT05670925 -NCT05665439 -NCT05671094 -NCT05665530 -NCT05671458 -NCT05665543 -NCT05671510 -NCT05665595 -NCT05671822 -NCT05665660 -NCT05722405 -NCT05673811 -NCT05721300 -NCT05673928 -NCT05721326 -NCT05674123 -NCT05721443 -NCT05674175 -NCT05721651 -NCT05674305 -NCT05721755 -NCT05674396 -NCT05721846 -NCT05674526 -NCT05721872 -NCT05674539 -NCT05721885 -NCT05674578 -NCT05721976 -NCT05674825 -NCT05722015 -NCT05675033 -NCT05722171 -NCT05675059 -NCT05722223 -NCT05675085 -NCT05722288 -NCT05675319 -NCT05722327 -NCT05675358 -NCT05712694 -NCT05712889 -NCT05712902 -NCT05712941 -NCT05713006 -NCT05713110 -NCT05713760 -NCT05713838 -NCT05713903 -NCT05714033 -NCT05714202 -NCT05714306 -NCT05714345 -NCT05714553 -NCT05714592 -NCT05714644 -NCT05714657 -NCT05714748 -NCT05714774 -NCT05714826 -NCT05714839 -NCT05714878 -NCT05714891 -NCT05715047 -NCT05715216 -NCT05715229 -NCT05715255 -NCT05715281 -NCT05715398 -NCT05715502 -NCT05715606 -NCT05715632 -NCT05715684 -NCT05715840 -NCT05715931 -NCT05715996 -NCT05716009 -NCT05716087 -NCT05716113 -NCT05716217 -NCT05716295 -NCT05716516 -NCT05716542 -NCT05716815 -NCT05716893 -NCT05716919 -NCT05717140 -NCT05717153 -NCT05717166 -NCT05717348 -NCT05717400 -NCT05717582 -NCT05717621 -NCT05717660 -NCT05717699 -NCT05717712 -NCT05717764 -NCT05717790 -NCT05717803 -NCT05718128 -NCT05718167 -NCT05718219 -NCT05718232 -NCT05718284 -NCT05718466 -NCT05718492 -NCT05718557 -NCT05718778 -NCT05718869 -NCT05718882 -NCT05718895 -NCT05719558 -NCT05719701 -NCT05719779 -NCT05720026 -NCT05720039 -NCT05720052 -NCT05720078 -NCT05720117 -NCT05720130 -NCT05720260 -NCT05720338 -NCT05720533 -NCT05720559 -NCT05720598 -NCT05720624 -NCT05720767 -NCT05720832 -NCT05720858 -NCT05720910 -NCT05720988 -NCT05721222 -NCT05721248 -NCT05675410 -NCT05706129 -NCT05675449 -NCT05680116 -NCT05675462 -NCT05706207 -NCT05675579 -NCT05706610 -NCT05675605 -NCT05706766 -NCT05675709 -NCT05706779 -NCT05675787 -NCT05707078 -NCT05675813 -NCT05707182 -NCT05675982 -NCT05707273 -NCT05676190 -NCT05707325 -NCT05676203 -NCT05707338 -NCT05676255 -NCT05707468 -NCT05676450 -NCT05707572 -NCT05676463 -NCT05707676 -NCT05676489 -NCT05707767 -NCT05676710 -NCT05707910 -NCT05676749 -NCT05708144 -NCT05676788 -NCT05708235 -NCT05676866 -NCT05708326 -NCT05676931 -NCT05708352 -NCT05677022 -NCT05708391 -NCT05677048 -NCT05708599 -NCT05677113 -NCT05708664 -NCT05677373 -NCT05708716 -NCT05677490 -NCT05708872 -NCT05677737 -NCT05708924 -NCT05677802 -NCT05708950 -NCT05677919 -NCT05709171 -NCT05677958 -NCT05709197 -NCT05678010 -NCT05709249 -NCT05678205 -NCT05709314 -NCT05678257 -NCT05709496 -NCT05678270 -NCT05709574 -NCT05678283 -NCT05709821 -NCT05678322 -NCT05709886 -NCT05678348 -NCT05709899 -NCT05678608 -NCT05709912 -NCT05678673 -NCT05710133 -NCT05678933 -NCT05710328 -NCT05678998 -NCT05710380 -NCT05679050 -NCT05710406 -NCT05679193 -NCT05710666 -NCT05679258 -NCT05710679 -NCT05679349 -NCT05710809 -NCT05679388 -NCT05710848 -NCT05679427 -NCT05710861 -NCT05679518 -NCT05711030 -NCT05679557 -NCT05711602 -NCT05679583 -NCT05711615 -NCT05679674 -NCT05711628 -NCT05679687 -NCT05711667 -NCT05679817 -NCT05711823 -NCT05679856 -NCT05712083 -NCT05679895 -NCT05712174 -NCT05679921 -NCT05712278 -NCT05679960 -NCT05712356 -NCT05680311 -NCT05705687 -NCT05680389 -NCT05705700 -NCT05680558 -NCT05705791 -NCT05680662 -NCT05705921 -NCT05680675 -NCT05706025 -NCT05680922 -NCT05693649 -NCT05693766 -NCT05693844 -NCT05694013 -NCT05694208 -NCT05694312 -NCT05694364 -NCT05694416 -NCT05694559 -NCT05694715 -NCT05694819 -NCT05694871 -NCT05694936 -NCT05695313 -NCT05695508 -NCT05695898 -NCT05696275 -NCT05696288 -NCT05696314 -NCT05696457 -NCT05696548 -NCT05696626 -NCT05696782 -NCT05697224 -NCT05697237 -NCT05697406 -NCT05697510 -NCT05697913 -NCT05698082 -NCT05698147 -NCT05698186 -NCT05698199 -NCT05698238 -NCT05698264 -NCT05698303 -NCT05698459 -NCT05698524 -NCT05698576 -NCT05698667 -NCT05698706 -NCT05698888 -NCT05699603 -NCT05699655 -NCT05699746 -NCT05699811 -NCT05699902 -NCT05699915 -NCT05700019 -NCT05700071 -NCT05700084 -NCT05700227 -NCT05700370 -NCT05700396 -NCT05700448 -NCT05700461 -NCT05700656 -NCT05700669 -NCT05700721 -NCT05700747 -NCT05700799 -NCT05700903 -NCT05700955 -NCT05701176 -NCT05701215 -NCT05701241 -NCT05701306 -NCT05701332 -NCT05701384 -NCT05701436 -NCT05701488 -NCT05701709 -NCT05701735 -NCT05702229 -NCT05702385 -NCT05702398 -NCT05702424 -NCT05702723 -NCT05702749 -NCT05702853 -NCT05702944 -NCT05703126 -NCT05703178 -NCT05703204 -NCT05703269 -NCT05703542 -NCT05703555 -NCT05703854 -NCT05703971 -NCT05703997 -NCT05704010 -NCT05704049 -NCT05704231 -NCT05704244 -NCT05704283 -NCT05704530 -NCT05704621 -NCT05704634 -NCT05704647 -NCT05704790 -NCT05704829 -NCT05704842 -NCT05704855 -NCT05704894 -NCT05704920 -NCT05704933 -NCT05704985 -NCT05705219 -NCT05705401 -NCT05705466 -NCT05705492 -NCT05705505 -NCT05705570 -NCT05705635 -NCT05681000 -NCT05687357 -NCT05681026 -NCT05687266 -NCT05681039 -NCT05687513 -NCT05681195 -NCT05687617 -NCT05681234 -NCT05687682 -NCT05681260 -NCT05687721 -NCT05681390 -NCT05687747 -NCT05681403 -NCT05687838 -NCT05681416 -NCT05687851 -NCT05681650 -NCT05688020 -NCT05681728 -NCT05688033 -NCT05681780 -NCT05688215 -NCT05681949 -NCT05688241 -NCT05682131 -NCT05688280 -NCT05682170 -NCT05688384 -NCT05682443 -NCT05688475 -NCT05682742 -NCT05688488 -NCT05682755 -NCT05688605 -NCT05682885 -NCT05688904 -NCT05682950 -NCT05689021 -NCT05683041 -NCT05689359 -NCT05683171 -NCT05689619 -NCT05683197 -NCT05689671 -NCT05683418 -NCT05689853 -NCT05683652 -NCT05690035 -NCT05683691 -NCT05690230 -NCT05683704 -NCT05690295 -NCT05683808 -NCT05690425 -NCT05683886 -NCT05690581 -NCT05683964 -NCT05690828 -NCT05684211 -NCT05690906 -NCT05684276 -NCT05690945 -NCT05684367 -NCT05690984 -NCT05684458 -NCT05691010 -NCT05684692 -NCT05691153 -NCT05684731 -NCT05691465 -NCT05684874 -NCT05691478 -NCT05684965 -NCT05691491 -NCT05685004 -NCT05691504 -NCT05685160 -NCT05691517 -NCT05685173 -NCT05691608 -NCT05685472 -NCT05691855 -NCT05685602 -NCT05691881 -NCT05685680 -NCT05691894 -NCT05686122 -NCT05692024 -NCT05686226 -NCT05692037 -NCT05686499 -NCT05692284 -NCT05686538 -NCT05692323 -NCT05686590 -NCT05692622 -NCT05686720 -NCT05692635 -NCT05686798 -NCT05692661 -NCT05687032 -NCT05692674 -NCT05687084 -NCT05692999 -NCT05687110 -NCT05693090 -NCT05687123 -NCT05693363 -NCT05687136 -NCT05735171 -NCT05724602 -NCT05730777 -NCT05724732 -NCT05730712 -NCT05724849 -NCT05730816 -NCT05724875 -NCT05730972 -NCT05724992 -NCT05731219 -NCT05725070 -NCT05731271 -NCT05725200 -NCT05731453 -NCT05725265 -NCT05731518 -NCT05725291 -NCT05731661 -NCT05725343 -NCT05731726 -NCT05725421 -NCT05731752 -NCT05725473 -NCT05731791 -NCT05726097 -NCT05731934 -NCT05726110 -NCT05731947 -NCT05726136 -NCT05732051 -NCT05726175 -NCT05732064 -NCT05726292 -NCT05732103 -NCT05726370 -NCT05732129 -NCT05726383 -NCT05732181 -NCT05726604 -NCT05732389 -NCT05726643 -NCT05732428 -NCT05726786 -NCT05732441 -NCT05726864 -NCT05732493 -NCT05726929 -NCT05732558 -NCT05727007 -NCT05732662 -NCT05727098 -NCT05732688 -NCT05727163 -NCT05732805 -NCT05727176 -NCT05732831 -NCT05727410 -NCT05732857 -NCT05727605 -NCT05732896 -NCT05727683 -NCT05732922 -NCT05727735 -NCT05732948 -NCT05727787 -NCT05732961 -NCT05727813 -NCT05733000 -NCT05727839 -NCT05733156 -NCT05727904 -NCT05733312 -NCT05728112 -NCT05733351 -NCT05728268 -NCT05733416 -NCT05728372 -NCT05733572 -NCT05728515 -NCT05733598 -NCT05728541 -NCT05733611 -NCT05728606 -NCT05733689 -NCT05728619 -NCT05733715 -NCT05728632 -NCT05733910 -NCT05728879 -NCT05733949 -NCT05729139 -NCT05734066 -NCT05729399 -NCT05734105 -NCT05729646 -NCT05734300 -NCT05729867 -NCT05734495 -NCT05730036 -NCT05734560 -NCT05730192 -NCT05734820 -NCT05730361 -NCT05734898 -NCT05730439 -NCT05735028 -NCT05730595 -NCT05735080 -NCT05730608 -NCT05735145 -NCT05730673 -NCT05744375 -NCT05735184 -NCT05739942 -NCT05735223 -NCT05739838 -NCT05735275 -NCT05739968 -NCT05735366 -NCT05739981 -NCT05735392 -NCT05740033 -NCT05735496 -NCT05740111 -NCT05735717 -NCT05740137 -NCT05735795 -NCT05740189 -NCT05735834 -NCT05740202 -NCT05735912 -NCT05740215 -NCT05735977 -NCT05740267 -NCT05736094 -NCT05740449 -NCT05736224 -NCT05740475 -NCT05736315 -NCT05740488 -NCT05736367 -NCT05740566 -NCT05736406 -NCT05740774 -NCT05736588 -NCT05740839 -NCT05736705 -NCT05740891 -NCT05736731 -NCT05740917 -NCT05736952 -NCT05740943 -NCT05736978 -NCT05740956 -NCT05737199 -NCT05741008 -NCT05737212 -NCT05741021 -NCT05737303 -NCT05741164 -NCT05737368 -NCT05741242 -NCT05737563 -NCT05741255 -NCT05737602 -NCT05741294 -NCT05737615 -NCT05741359 -NCT05737628 -NCT05741944 -NCT05737706 -NCT05742178 -NCT05737732 -NCT05742334 -NCT05737745 -NCT05742425 -NCT05737797 -NCT05742438 -NCT05738005 -NCT05742568 -NCT05738057 -NCT05742607 -NCT05738161 -NCT05742711 -NCT05738187 -NCT05742750 -NCT05738317 -NCT05742945 -NCT05738434 -NCT05743023 -NCT05738447 -NCT05743036 -NCT05738603 -NCT05743270 -NCT05738616 -NCT05743491 -NCT05738694 -NCT05743504 -NCT05738980 -NCT05743517 -NCT05738993 -NCT05743595 -NCT05739006 -NCT05743621 -NCT05739045 -NCT05743686 -NCT05739071 -NCT05743725 -NCT05739175 -NCT05743777 -NCT05739188 -NCT05743842 -NCT05739227 -NCT05744037 -NCT05739409 -NCT05744089 -NCT05739565 -NCT05744115 -NCT05739630 -NCT05744128 -NCT05739695 -NCT05744219 -NCT05739812 -NCT05754684 -NCT05744427 -NCT05749432 -NCT05744440 -NCT05749302 -NCT05744557 -NCT05749549 -NCT05744687 -NCT05749575 -NCT05744739 -NCT05749588 -NCT05745038 -NCT05749627 -NCT05745181 -NCT05749887 -NCT05745246 -NCT05749900 -NCT05745285 -NCT05750030 -NCT05745350 -NCT05750290 -NCT05745363 -NCT05750329 -NCT05745454 -NCT05750693 -NCT05745558 -NCT05750953 -NCT05745623 -NCT05751018 -NCT05745714 -NCT05751044 -NCT05745740 -NCT05751265 -NCT05745844 -NCT05751343 -NCT05745857 -NCT05751356 -NCT05745909 -NCT05751434 -NCT05746104 -NCT05751486 -NCT05746156 -NCT05751512 -NCT05746195 -NCT05751629 -NCT05746208 -NCT05751668 -NCT05746325 -NCT05751733 -NCT05746429 -NCT05751798 -NCT05746481 -NCT05751837 -NCT05746728 -NCT05751850 -NCT05746754 -NCT05751928 -NCT05746806 -NCT05751941 -NCT05746897 -NCT05752136 -NCT05746962 -NCT05752149 -NCT05747157 -NCT05752448 -NCT05747313 -NCT05752552 -NCT05747326 -NCT05752877 -NCT05747339 -NCT05753007 -NCT05747443 -NCT05753046 -NCT05747482 -NCT05753163 -NCT05747521 -NCT05753306 -NCT05747625 -NCT05753384 -NCT05747716 -NCT05753501 -NCT05747729 -NCT05753566 -NCT05747794 -NCT05753618 -NCT05748093 -NCT05753657 -NCT05748145 -NCT05753722 -NCT05748171 -NCT05753748 -NCT05748197 -NCT05753826 -NCT05748704 -NCT05753839 -NCT05748834 -NCT05753865 -NCT05748938 -NCT05753995 -NCT05749016 -NCT05754203 -NCT05749042 -NCT05754216 -NCT05749120 -NCT05754229 -NCT05749133 -NCT05754346 -NCT05749211 -NCT05754528 -NCT05749276 -NCT05754580 -NCT05749289 -NCT05765851 -NCT05754736 -NCT05760391 -NCT05754749 -NCT05760378 -NCT05754801 -NCT05760430 -NCT05754840 -NCT05760599 -NCT05754853 -NCT05760612 -NCT05754892 -NCT05760690 -NCT05755009 -NCT05760755 -NCT05755048 -NCT05761054 -NCT05755087 -NCT05761132 -NCT05755113 -NCT05761171 -NCT05755295 -NCT05761223 -NCT05755490 -NCT05761314 -NCT05755581 -NCT05761366 -NCT05755594 -NCT05761470 -NCT05755607 -NCT05761561 -NCT05755646 -NCT05761717 -NCT05755659 -NCT05761951 -NCT05755685 -NCT05762042 -NCT05755828 -NCT05762172 -NCT05755984 -NCT05762198 -NCT05756153 -NCT05762250 -NCT05756166 -NCT05762419 -NCT05756192 -NCT05762536 -NCT05756556 -NCT05762757 -NCT05756569 -NCT05762900 -NCT05756725 -NCT05763004 -NCT05756777 -NCT05763199 -NCT05756907 -NCT05763355 -NCT05756972 -NCT05763563 -NCT05757219 -NCT05763615 -NCT05757336 -NCT05763667 -NCT05757427 -NCT05763797 -NCT05757466 -NCT05763836 -NCT05757492 -NCT05763927 -NCT05757700 -NCT05763992 -NCT05757817 -NCT05764005 -NCT05757882 -NCT05764044 -NCT05758025 -NCT05764330 -NCT05758116 -NCT05764395 -NCT05758389 -NCT05764447 -NCT05758493 -NCT05764486 -NCT05758571 -NCT05764551 -NCT05758636 -NCT05764720 -NCT05758688 -NCT05764915 -NCT05759195 -NCT05764928 -NCT05759234 -NCT05764954 -NCT05759312 -NCT05765032 -NCT05759546 -NCT05765084 -NCT05759572 -NCT05765214 -NCT05759728 -NCT05765357 -NCT05759741 -NCT05765500 -NCT05759793 -NCT05765643 -NCT05759923 -NCT05765734 -NCT05759949 -NCT05765812 -NCT05759975 -NCT05765825 -NCT05760222 -NCT05776667 -NCT05765877 -NCT05772208 -NCT05765916 -NCT05772130 -NCT05766046 -NCT05772273 -NCT05766163 -NCT05772377 -NCT05766371 -NCT05772390 -NCT05766410 -NCT05772455 -NCT05766514 -NCT05772546 -NCT05766527 -NCT05772728 -NCT05766605 -NCT05772741 -NCT05766748 -NCT05772767 -NCT05766800 -NCT05772923 -NCT05766891 -NCT05773040 -NCT05767060 -NCT05773079 -NCT05767359 -NCT05773092 -NCT05767684 -NCT05773105 -NCT05767879 -NCT05773144 -NCT05767892 -NCT05773274 -NCT05768087 -NCT05773326 -NCT05768139 -NCT05773391 -NCT05768178 -NCT05773664 -NCT05768256 -NCT05773703 -NCT05768282 -NCT05773820 -NCT05768321 -NCT05773859 -NCT05768347 -NCT05773937 -NCT05768464 -NCT05774028 -NCT05768490 -NCT05774197 -NCT05768503 -NCT05774275 -NCT05768529 -NCT05774483 -NCT05768711 -NCT05774561 -NCT05768880 -NCT05774600 -NCT05768919 -NCT05774678 -NCT05768932 -NCT05774873 -NCT05768984 -NCT05774886 -NCT05769010 -NCT05774899 -NCT05769062 -NCT05774951 -NCT05769075 -NCT05774964 -NCT05769205 -NCT05775094 -NCT05769660 -NCT05775146 -NCT05769725 -NCT05775159 -NCT05769959 -NCT05775289 -NCT05770037 -NCT05775406 -NCT05770063 -NCT05775419 -NCT05770102 -NCT05775471 -NCT05770310 -NCT05775575 -NCT05770531 -NCT05775666 -NCT05770544 -NCT05775705 -NCT05770635 -NCT05775796 -NCT05770869 -NCT05775822 -NCT05770882 -NCT05775874 -NCT05771025 -NCT05775900 -NCT05771181 -NCT05775939 -NCT05771207 -NCT05776355 -NCT05771480 -NCT05776381 -NCT05771584 -NCT05776407 -NCT05771883 -NCT05776524 -NCT05771896 -NCT05788939 -NCT05776680 -NCT05783622 -NCT05776706 -NCT05783609 -NCT05776758 -NCT05783882 -NCT05776875 -NCT05783908 -NCT05776979 -NCT05783921 -NCT05777278 -NCT05784012 -NCT05777369 -NCT05784142 -NCT05777499 -NCT05784311 -NCT05777603 -NCT05784428 -NCT05777707 -NCT05784441 -NCT05777824 -NCT05784597 -NCT05778097 -NCT05784688 -NCT05778136 -NCT05784766 -NCT05778149 -NCT05784870 -NCT05778708 -NCT05784974 -NCT05778825 -NCT05784987 -NCT05778851 -NCT05785039 -NCT05779163 -NCT05785208 -NCT05779423 -NCT05785234 -NCT05779605 -NCT05785325 -NCT05779631 -NCT05785494 -NCT05779917 -NCT05785728 -NCT05779930 -NCT05785741 -NCT05779943 -NCT05785754 -NCT05780294 -NCT05785767 -NCT05780307 -NCT05785780 -NCT05780372 -NCT05785845 -NCT05780567 -NCT05785975 -NCT05780684 -NCT05786014 -NCT05780814 -NCT05786040 -NCT05780879 -NCT05786430 -NCT05781048 -NCT05786456 -NCT05781074 -NCT05786482 -NCT05781217 -NCT05786716 -NCT05781308 -NCT05786742 -NCT05781321 -NCT05786924 -NCT05781360 -NCT05786989 -NCT05781386 -NCT05787145 -NCT05781555 -NCT05787249 -NCT05781633 -NCT05787496 -NCT05781672 -NCT05787535 -NCT05781919 -NCT05787561 -NCT05781958 -NCT05787587 -NCT05782127 -NCT05787639 -NCT05782361 -NCT05787834 -NCT05782504 -NCT05788029 -NCT05782608 -NCT05788081 -NCT05782686 -NCT05788107 -NCT05782764 -NCT05788289 -NCT05782959 -NCT05788445 -NCT05783076 -NCT05788484 -NCT05783089 -NCT05788679 -NCT05783310 -NCT05788744 -NCT05783323 -NCT05788835 -NCT05783570 -NCT05788926 -NCT05783596 -NCT05799469 -NCT05789043 -NCT05794971 -NCT05789069 -NCT05794958 -NCT05789082 -NCT05795101 -NCT05789303 -NCT05795244 -NCT05789316 -NCT05795296 -NCT05789394 -NCT05795595 -NCT05789433 -NCT05795725 -NCT05789485 -NCT05795920 -NCT05789589 -NCT05795959 -NCT05789602 -NCT05796089 -NCT05789862 -NCT05796102 -NCT05789901 -NCT05796219 -NCT05790096 -NCT05796271 -NCT05790200 -NCT05796375 -NCT05790213 -NCT05796518 -NCT05790226 -NCT05796570 -NCT05790447 -NCT05796895 -NCT05790460 -NCT05796973 -NCT05790590 -NCT05797077 -NCT05790850 -NCT05797168 -NCT05791097 -NCT05797233 -NCT05791136 -NCT05797246 -NCT05791149 -NCT05797454 -NCT05791409 -NCT05797467 -NCT05791448 -NCT05797545 -NCT05791474 -NCT05797662 -NCT05791942 -NCT05797727 -NCT05791955 -NCT05797805 -NCT05792007 -NCT05797831 -NCT05792228 -NCT05797870 -NCT05792254 -NCT05797883 -NCT05792410 -NCT05797948 -NCT05792475 -NCT05798026 -NCT05792566 -NCT05798156 -NCT05792722 -NCT05798273 -NCT05792735 -NCT05798312 -NCT05792995 -NCT05798455 -NCT05793021 -NCT05798507 -NCT05793034 -NCT05798533 -NCT05793151 -NCT05798546 -NCT05793320 -NCT05798611 -NCT05793489 -NCT05798663 -NCT05793593 -NCT05798780 -NCT05793710 -NCT05798793 -NCT05793749 -NCT05798819 -NCT05793788 -NCT05798845 -NCT05793801 -NCT05798884 -NCT05793957 -NCT05798897 -NCT05794035 -NCT05799027 -NCT05794048 -NCT05799079 -NCT05794477 -NCT05799144 -NCT05794607 -NCT05799183 -NCT05794659 -NCT05799248 -NCT05794750 -NCT05799274 -NCT05794880 -NCT05799443 -NCT05794906 -NCT05808608 -NCT05799612 -NCT05803915 -NCT05799820 -NCT05803746 -NCT05799976 -NCT05803928 -NCT05800015 -NCT05803941 -NCT05800054 -NCT05804032 -NCT05800080 -NCT05804045 -NCT05800106 -NCT05804227 -NCT05800132 -NCT05804318 -NCT05800210 -NCT05804370 -NCT05800223 -NCT05804435 -NCT05800236 -NCT05804864 -NCT05800249 -NCT05804916 -NCT05800275 -NCT05805098 -NCT05800340 -NCT05805319 -NCT05800366 -NCT05805358 -NCT05800405 -NCT05805371 -NCT05800418 -NCT05805436 -NCT05800483 -NCT05805501 -NCT05800574 -NCT05805605 -NCT05800587 -NCT05805631 -NCT05800665 -NCT05805722 -NCT05800756 -NCT05805943 -NCT05800834 -NCT05805956 -NCT05800964 -NCT05805982 -NCT05800977 -NCT05806047 -NCT05801029 -NCT05806060 -NCT05801094 -NCT05806073 -NCT05801107 -NCT05806099 -NCT05801133 -NCT05806138 -NCT05801237 -NCT05806307 -NCT05801666 -NCT05806333 -NCT05801783 -NCT05806385 -NCT05801835 -NCT05806515 -NCT05801887 -NCT05806580 -NCT05801913 -NCT05806671 -NCT05801939 -NCT05806814 -NCT05801965 -NCT05806853 -NCT05802056 -NCT05806931 -NCT05802121 -NCT05806983 -NCT05802186 -NCT05807022 -NCT05802225 -NCT05807035 -NCT05802290 -NCT05807048 -NCT05802342 -NCT05807074 -NCT05802381 -NCT05807126 -NCT05802394 -NCT05807295 -NCT05802407 -NCT05807308 -NCT05802420 -NCT05807347 -NCT05802485 -NCT05807542 -NCT05802654 -NCT05807646 -NCT05802693 -NCT05807776 -NCT05802992 -NCT05807880 -NCT05803018 -NCT05807893 -NCT05803057 -NCT05807932 -NCT05803096 -NCT05807984 -NCT05803382 -NCT05808582 -NCT05803629 -NCT05854394 -NCT05808634 -NCT05851625 -NCT05808790 -NCT05851924 -NCT05809024 -NCT05852002 -NCT05809167 -NCT05852041 -NCT05809180 -NCT05852223 -NCT05809336 -NCT05852665 -NCT05809557 -NCT05852691 -NCT05809752 -NCT05852717 -NCT05809830 -NCT05852990 -NCT05809869 -NCT05853094 -NCT05809895 -NCT05853172 -NCT05809999 -NCT05853198 -NCT05810025 -NCT05853367 -NCT05810103 -NCT05853458 -NCT05810246 -NCT05853549 -NCT05810324 -NCT05853575 -NCT05810350 -NCT05853848 -NCT05810402 -NCT05853887 -NCT05810454 -NCT05853965 -NCT05810532 -NCT05854277 -NCT05810571 -NCT05854368 -NCT05810623 -NCT05833763 -NCT05833815 -NCT05833841 -NCT05833867 -NCT05833893 -NCT05833919 -NCT05833971 -NCT05833984 -NCT05833997 -NCT05834231 -NCT05834244 -NCT05834270 -NCT05834413 -NCT05834543 -NCT05834569 -NCT05834582 -NCT05834712 -NCT05834751 -NCT05834764 -NCT05834933 -NCT05835011 -NCT05835154 -NCT05835245 -NCT05835609 -NCT05835687 -NCT05835804 -NCT05836064 -NCT05836077 -NCT05836324 -NCT05836337 -NCT05836571 -NCT05836584 -NCT05836623 -NCT05836688 -NCT05836870 -NCT05836896 -NCT05836948 -NCT05837052 -NCT05837169 -NCT05837299 -NCT05837429 -NCT05837455 -NCT05837533 -NCT05837598 -NCT05837741 -NCT05837767 -NCT05838001 -NCT05838066 -NCT05838131 -NCT05838391 -NCT05838417 -NCT05838521 -NCT05838599 -NCT05838638 -NCT05838716 -NCT05838729 -NCT05838768 -NCT05839106 -NCT05839119 -NCT05839197 -NCT05839210 -NCT05839275 -NCT05839470 -NCT05839600 -NCT05839626 -NCT05839912 -NCT05840016 -NCT05840068 -NCT05840094 -NCT05840107 -NCT05851365 -NCT05851378 -NCT05851456 -NCT05851521 -NCT05851534 -NCT05851547 -NCT05851560 -NCT05810701 -NCT05816785 -NCT05810714 -NCT05816746 -NCT05810740 -NCT05816980 -NCT05810792 -NCT05817058 -NCT05810870 -NCT05828511 -NCT05811195 -NCT05828589 -NCT05811793 -NCT05828927 -NCT05811936 -NCT05829057 -NCT05811975 -NCT05829070 -NCT05812040 -NCT05829213 -NCT05812274 -NCT05829226 -NCT05812326 -NCT05829291 -NCT05812430 -NCT05829434 -NCT05812521 -NCT05829616 -NCT05812534 -NCT05829629 -NCT05812677 -NCT05829707 -NCT05812807 -NCT05829824 -NCT05812924 -NCT05830019 -NCT05813015 -NCT05830045 -NCT05813028 -NCT05830058 -NCT05813132 -NCT05830084 -NCT05813145 -NCT05830097 -NCT05813327 -NCT05830123 -NCT05813509 -NCT05830240 -NCT05813522 -NCT05830292 -NCT05813626 -NCT05830461 -NCT05813665 -NCT05830500 -NCT05813808 -NCT05830539 -NCT05814224 -NCT05830838 -NCT05814354 -NCT05830890 -NCT05814536 -NCT05830929 -NCT05814601 -NCT05831033 -NCT05814666 -NCT05831293 -NCT05814744 -NCT05831358 -NCT05814835 -NCT05831540 -NCT05814848 -NCT05831579 -NCT05814900 -NCT05831878 -NCT05815082 -NCT05831891 -NCT05815160 -NCT05831917 -NCT05815173 -NCT05831930 -NCT05815186 -NCT05831995 -NCT05815290 -NCT05832008 -NCT05815303 -NCT05832086 -NCT05815316 -NCT05832112 -NCT05815394 -NCT05832138 -NCT05815472 -NCT05832320 -NCT05815862 -NCT05832398 -NCT05815927 -NCT05832736 -NCT05816187 -NCT05832827 -NCT05816252 -NCT05832892 -NCT05816369 -NCT05833126 -NCT05816460 -NCT05833321 -NCT05816538 -NCT05833334 -NCT05816642 -NCT05833438 -NCT05816655 -NCT05833672 -NCT05816668 -NCT05833724 -NCT05817201 -NCT05823623 -NCT05817214 -NCT05823571 -NCT05817903 -NCT05823701 -NCT05817955 -NCT05823714 -NCT05818072 -NCT05823740 -NCT05818267 -NCT05823987 -NCT05818449 -NCT05824273 -NCT05818683 -NCT05824299 -NCT05818865 -NCT05824325 -NCT05818917 -NCT05824455 -NCT05818982 -NCT05824468 -NCT05819060 -NCT05824481 -NCT05819346 -NCT05824494 -NCT05819684 -NCT05824559 -NCT05819892 -NCT05824585 -NCT05819996 -NCT05824663 -NCT05820087 -NCT05824975 -NCT05820113 -NCT05825001 -NCT05820126 -NCT05825066 -NCT05820191 -NCT05825365 -NCT05820373 -NCT05825482 -NCT05820633 -NCT05825547 -NCT05820711 -NCT05825625 -NCT05820724 -NCT05825664 -NCT05820763 -NCT05825768 -NCT05820841 -NCT05826015 -NCT05820906 -NCT05826158 -NCT05821023 -NCT05826275 -NCT05821088 -NCT05826288 -NCT05821192 -NCT05826470 -NCT05821231 -NCT05826483 -NCT05821244 -NCT05826509 -NCT05821361 -NCT05826535 -NCT05821556 -NCT05826600 -NCT05821595 -NCT05826743 -NCT05821686 -NCT05826964 -NCT05821738 -NCT05827016 -NCT05821751 -NCT05827055 -NCT05821777 -NCT05827081 -NCT05821933 -NCT05827289 -NCT05822037 -NCT05827523 -NCT05822453 -NCT05827549 -NCT05822518 -NCT05827614 -NCT05822557 -NCT05827770 -NCT05822726 -NCT05827796 -NCT05822752 -NCT05827835 -NCT05822817 -NCT05828004 -NCT05822934 -NCT05828069 -NCT05823194 -NCT05828082 -NCT05823246 -NCT05828238 -NCT05823272 -NCT05828277 -NCT05823285 -NCT05828303 -NCT05823311 -NCT05828381 -NCT05823402 -NCT05828446 -NCT05823467 -NCT05828459 -NCT05823480 -NCT05851235 -NCT05840211 -NCT05845450 -NCT05840224 -NCT05845307 -NCT05840341 -NCT05845476 -NCT05840445 -NCT05845502 -NCT05840510 -NCT05845671 -NCT05840549 -NCT05845814 -NCT05840770 -NCT05846165 -NCT05840835 -NCT05846295 -NCT05841134 -NCT05846516 -NCT05841186 -NCT05846594 -NCT05841355 -NCT05846646 -NCT05841381 -NCT05846724 -NCT05841420 -NCT05846737 -NCT05841472 -NCT05846750 -NCT05841550 -NCT05846789 -NCT05841563 -NCT05846867 -NCT05841706 -NCT05846880 -NCT05841771 -NCT05846971 -NCT05841849 -NCT05847166 -NCT05841966 -NCT05847179 -NCT05841992 -NCT05847348 -NCT05842018 -NCT05847569 -NCT05842044 -NCT05847673 -NCT05842057 -NCT05847686 -NCT05842174 -NCT05847764 -NCT05842187 -NCT05847868 -NCT05842317 -NCT05848011 -NCT05842421 -NCT05848050 -NCT05842525 -NCT05848141 -NCT05842603 -NCT05848466 -NCT05842707 -NCT05848557 -NCT05842746 -NCT05848687 -NCT05842785 -NCT05848739 -NCT05842902 -NCT05848765 -NCT05843032 -NCT05848843 -NCT05843058 -NCT05848947 -NCT05843188 -NCT05848999 -NCT05843253 -NCT05849129 -NCT05843292 -NCT05849142 -NCT05843305 -NCT05849246 -NCT05843448 -NCT05849298 -NCT05843877 -NCT05849480 -NCT05844046 -NCT05849610 -NCT05844150 -NCT05849662 -NCT05844306 -NCT05849792 -NCT05844371 -NCT05849857 -NCT05844605 -NCT05850130 -NCT05844670 -NCT05850182 -NCT05844683 -NCT05850234 -NCT05844761 -NCT05850286 -NCT05844813 -NCT05850637 -NCT05844865 -NCT05850663 -NCT05844956 -NCT05850702 -NCT05845138 -NCT05851014 -NCT05845268 -NCT05851092 -NCT05845294 -NCT05866432 -NCT05854498 -NCT05860621 -NCT05854589 -NCT05860582 -NCT05854823 -NCT05860868 -NCT05854849 -NCT05860881 -NCT05854966 -NCT05860907 -NCT05855122 -NCT05861050 -NCT05855200 -NCT05861245 -NCT05855265 -NCT05861271 -NCT05855278 -NCT05861336 -NCT05855291 -NCT05861362 -NCT05855694 -NCT05861505 -NCT05855811 -NCT05861557 -NCT05856292 -NCT05861635 -NCT05856305 -NCT05861778 -NCT05856370 -NCT05861830 -NCT05856500 -NCT05861895 -NCT05856630 -NCT05861947 -NCT05856643 -NCT05862012 -NCT05856656 -NCT05862051 -NCT05856695 -NCT05862064 -NCT05856773 -NCT05862168 -NCT05856864 -NCT05862285 -NCT05856981 -NCT05862324 -NCT05857332 -NCT05862337 -NCT05857631 -NCT05862610 -NCT05857982 -NCT05862740 -NCT05857995 -NCT05862831 -NCT05858164 -NCT05862844 -NCT05858177 -NCT05863013 -NCT05858229 -NCT05863195 -NCT05858359 -NCT05863234 -NCT05858398 -NCT05863325 -NCT05858424 -NCT05863351 -NCT05858567 -NCT05863845 -NCT05858593 -NCT05864105 -NCT05858710 -NCT05864131 -NCT05858736 -NCT05864144 -NCT05858814 -NCT05864196 -NCT05859074 -NCT05864274 -NCT05859100 -NCT05864534 -NCT05859217 -NCT05864573 -NCT05859334 -NCT05864742 -NCT05859373 -NCT05864755 -NCT05859464 -NCT05864794 -NCT05859477 -NCT05864924 -NCT05859581 -NCT05865002 -NCT05859711 -NCT05865028 -NCT05859750 -NCT05865132 -NCT05859971 -NCT05865548 -NCT05860036 -NCT05865730 -NCT05860075 -NCT05865743 -NCT05860296 -NCT05865756 -NCT05860335 -NCT05865925 -NCT05860374 -NCT05865990 -NCT05860465 -NCT05866172 -NCT05860530 -NCT05876754 -NCT05866510 -NCT05871333 -NCT05866653 -NCT05871320 -NCT05866679 -NCT05871437 -NCT05866692 -NCT05871684 -NCT05866757 -NCT05871892 -NCT05866887 -NCT05871918 -NCT05867030 -NCT05872126 -NCT05867095 -NCT05872204 -NCT05867121 -NCT05872295 -NCT05867251 -NCT05872334 -NCT05867303 -NCT05872347 -NCT05867420 -NCT05872412 -NCT05867563 -NCT05872451 -NCT05867576 -NCT05872685 -NCT05867615 -NCT05872724 -NCT05867667 -NCT05872841 -NCT05867771 -NCT05872854 -NCT05867953 -NCT05872867 -NCT05867966 -NCT05872893 -NCT05868057 -NCT05873036 -NCT05868083 -NCT05873192 -NCT05868174 -NCT05873205 -NCT05868187 -NCT05873244 -NCT05868226 -NCT05873296 -NCT05868265 -NCT05873439 -NCT05868317 -NCT05873608 -NCT05868395 -NCT05873621 -NCT05868486 -NCT05873686 -NCT05868707 -NCT05873712 -NCT05868876 -NCT05873829 -NCT05868915 -NCT05873972 -NCT05869123 -NCT05874063 -NCT05869162 -NCT05874193 -NCT05869227 -NCT05874297 -NCT05869240 -NCT05874401 -NCT05869279 -NCT05874414 -NCT05869474 -NCT05874492 -NCT05869539 -NCT05874778 -NCT05869604 -NCT05874934 -NCT05869682 -NCT05875129 -NCT05870176 -NCT05875168 -NCT05870319 -NCT05875402 -NCT05870423 -NCT05875428 -NCT05870449 -NCT05875558 -NCT05870475 -NCT05875753 -NCT05870579 -NCT05875805 -NCT05870748 -NCT05875870 -NCT05870761 -NCT05875935 -NCT05870800 -NCT05876052 -NCT05870917 -NCT05876065 -NCT05870995 -NCT05876091 -NCT05871008 -NCT05876130 -NCT05871021 -NCT05876325 -NCT05871099 -NCT05876338 -NCT05871125 -NCT05876715 -NCT05871307 -NCT05886751 -NCT05876806 -NCT05880706 -NCT05876832 -NCT05880667 -NCT05876923 -NCT05880927 -NCT05877001 -NCT05880992 -NCT05877144 -NCT05881070 -NCT05877352 -NCT05881265 -NCT05877430 -NCT05881525 -NCT05877521 -NCT05881746 -NCT05877573 -NCT05881902 -NCT05877599 -NCT05882019 -NCT05877651 -NCT05882058 -NCT05877664 -NCT05882253 -NCT05877820 -NCT05882292 -NCT05877872 -NCT05882305 -NCT05877911 -NCT05882370 -NCT05877924 -NCT05882396 -NCT05878028 -NCT05882513 -NCT05878106 -NCT05882578 -NCT05878184 -NCT05882630 -NCT05878288 -NCT05882734 -NCT05878405 -NCT05882890 -NCT05878678 -NCT05883007 -NCT05878691 -NCT05883085 -NCT05878782 -NCT05883176 -NCT05878977 -NCT05883449 -NCT05879055 -NCT05883644 -NCT05879068 -NCT05883800 -NCT05879120 -NCT05883852 -NCT05879133 -NCT05883956 -NCT05879146 -NCT05884047 -NCT05879172 -NCT05884099 -NCT05879185 -NCT05884255 -NCT05879211 -NCT05884320 -NCT05879250 -NCT05884333 -NCT05879354 -NCT05884398 -NCT05879367 -NCT05884463 -NCT05879458 -NCT05884632 -NCT05879471 -NCT05884723 -NCT05879484 -NCT05884801 -NCT05879497 -NCT05885386 -NCT05879510 -NCT05885399 -NCT05879627 -NCT05885464 -NCT05879653 -NCT05885776 -NCT05879744 -NCT05885880 -NCT05879783 -NCT05885984 -NCT05879822 -NCT05886036 -NCT05879913 -NCT05886049 -NCT05879926 -NCT05886075 -NCT05879978 -NCT05886140 -NCT05880043 -NCT05886257 -NCT05880082 -NCT05886374 -NCT05880160 -NCT05886439 -NCT05880394 -NCT05886465 -NCT05880446 -NCT05886491 -NCT05880472 -NCT05886634 -NCT05880485 -NCT05898789 -NCT05886764 -NCT05893056 -NCT05886868 -NCT05892718 -NCT05886920 -NCT05893381 -NCT05887102 -NCT05893472 -NCT05887154 -NCT05893654 -NCT05887167 -NCT05893693 -NCT05887297 -NCT05893810 -NCT05887401 -NCT05893888 -NCT05887492 -NCT05893940 -NCT05887505 -NCT05894018 -NCT05887531 -NCT05894083 -NCT05887609 -NCT05894239 -NCT05887661 -NCT05894421 -NCT05887687 -NCT05894447 -NCT05887726 -NCT05894486 -NCT05887882 -NCT05894694 -NCT05887921 -NCT05894824 -NCT05887986 -NCT05894837 -NCT05888402 -NCT05894889 -NCT05888493 -NCT05894915 -NCT05888532 -NCT05895201 -NCT05888584 -NCT05895279 -NCT05888675 -NCT05895344 -NCT05888831 -NCT05895370 -NCT05888844 -NCT05895825 -NCT05888857 -NCT05895864 -NCT05889091 -NCT05895994 -NCT05889221 -NCT05896046 -NCT05889247 -NCT05896059 -NCT05889390 -NCT05896163 -NCT05889728 -NCT05896189 -NCT05889780 -NCT05896228 -NCT05889871 -NCT05896371 -NCT05890287 -NCT05896449 -NCT05890339 -NCT05896566 -NCT05890352 -NCT05896774 -NCT05890677 -NCT05896787 -NCT05890781 -NCT05896813 -NCT05890859 -NCT05896839 -NCT05890872 -NCT05896865 -NCT05891028 -NCT05896904 -NCT05891080 -NCT05897138 -NCT05891093 -NCT05897268 -NCT05891171 -NCT05897658 -NCT05891340 -NCT05897749 -NCT05891431 -NCT05897983 -NCT05891470 -NCT05898009 -NCT05891561 -NCT05898074 -NCT05891821 -NCT05898256 -NCT05892068 -NCT05898373 -NCT05892146 -NCT05898399 -NCT05892237 -NCT05898451 -NCT05892289 -NCT05898594 -NCT05892354 -NCT05898646 -NCT05892393 -NCT05898763 -NCT05892653 -NCT05909423 -NCT05898828 -NCT05904340 -NCT05898854 -NCT05904236 -NCT05899049 -NCT05904379 -NCT05899270 -NCT05904457 -NCT05899361 -NCT05904496 -NCT05899465 -NCT05904522 -NCT05899608 -NCT05904665 -NCT05899647 -NCT05904704 -NCT05899985 -NCT05904730 -NCT05900089 -NCT05904886 -NCT05900206 -NCT05904964 -NCT05900219 -NCT05905250 -NCT05900258 -NCT05905276 -NCT05900648 -NCT05905315 -NCT05900765 -NCT05905341 -NCT05900882 -NCT05905354 -NCT05900895 -NCT05905614 -NCT05900908 -NCT05905887 -NCT05900921 -NCT05906277 -NCT05900973 -NCT05906329 -NCT05900986 -NCT05906524 -NCT05901142 -NCT05906537 -NCT05901194 -NCT05906615 -NCT05901285 -NCT05906862 -NCT05901324 -NCT05906914 -NCT05901428 -NCT05907057 -NCT05901519 -NCT05907122 -NCT05901545 -NCT05907187 -NCT05901779 -NCT05907265 -NCT05901844 -NCT05907304 -NCT05901935 -NCT05907512 -NCT05901974 -NCT05907603 -NCT05902169 -NCT05907642 -NCT05902247 -NCT05907759 -NCT05902260 -NCT05907941 -NCT05902377 -NCT05907954 -NCT05902390 -NCT05907980 -NCT05902520 -NCT05908396 -NCT05902533 -NCT05908409 -NCT05902585 -NCT05908435 -NCT05902637 -NCT05908643 -NCT05902728 -NCT05908734 -NCT05902845 -NCT05908747 -NCT05902988 -NCT05908773 -NCT05903092 -NCT05908786 -NCT05903131 -NCT05908838 -NCT05903456 -NCT05908916 -NCT05903703 -NCT05909059 -NCT05903807 -NCT05909098 -NCT05903833 -NCT05909111 -NCT05903885 -NCT05909202 -NCT05903937 -NCT05909241 -NCT05904015 -NCT05909293 -NCT05904080 -NCT05909332 -NCT05904106 -NCT05909397 -NCT05904119 -NCT05919147 -NCT05909436 -NCT05914142 -NCT05909527 -NCT05914116 -NCT05909618 -NCT05914168 -NCT05909813 -NCT05914376 -NCT05909826 -NCT05914389 -NCT05909904 -NCT05914402 -NCT05909995 -NCT05914415 -NCT05910034 -NCT05914545 -NCT05910177 -NCT05914597 -NCT05910190 -NCT05914610 -NCT05910229 -NCT05914662 -NCT05910398 -NCT05914753 -NCT05910541 -NCT05914766 -NCT05910697 -NCT05914831 -NCT05910801 -NCT05914935 -NCT05910827 -NCT05915221 -NCT05910970 -NCT05915325 -NCT05911217 -NCT05915351 -NCT05911230 -NCT05915442 -NCT05911243 -NCT05915481 -NCT05911295 -NCT05915572 -NCT05911308 -NCT05916001 -NCT05911321 -NCT05916196 -NCT05911373 -NCT05916248 -NCT05911425 -NCT05916261 -NCT05911464 -NCT05916313 -NCT05911633 -NCT05916690 -NCT05911672 -NCT05917145 -NCT05911789 -NCT05917158 -NCT05911867 -NCT05917171 -NCT05911958 -NCT05917301 -NCT05911984 -NCT05917405 -NCT05912075 -NCT05917431 -NCT05912166 -NCT05917470 -NCT05912205 -NCT05917860 -NCT05912231 -NCT05917964 -NCT05912244 -NCT05917990 -NCT05912257 -NCT05918055 -NCT05912465 -NCT05918094 -NCT05912569 -NCT05918198 -NCT05912816 -NCT05918224 -NCT05912881 -NCT05918250 -NCT05913037 -NCT05918263 -NCT05913089 -NCT05918276 -NCT05913115 -NCT05918302 -NCT05913245 -NCT05918328 -NCT05913388 -NCT05918419 -NCT05913414 -NCT05918445 -NCT05913427 -NCT05918640 -NCT05913570 -NCT05918692 -NCT05913661 -NCT05918770 -NCT05913674 -NCT05918783 -NCT05913713 -NCT05919030 -NCT05913804 -NCT05919095 -NCT05913895 -NCT05919108 -NCT05914077 -NCT05932212 -NCT05919212 -NCT05926102 -NCT05919238 -NCT05925530 -NCT05919264 -NCT05926128 -NCT05919290 -NCT05926180 -NCT05919329 -NCT05926206 -NCT05919381 -NCT05926336 -NCT05919524 -NCT05926427 -NCT05919537 -NCT05926492 -NCT05920135 -NCT05926700 -NCT05920343 -NCT05926726 -NCT05920356 -NCT05926765 -NCT05920798 -NCT05926960 -NCT05920850 -NCT05927142 -NCT05920863 -NCT05927571 -NCT05920876 -NCT05927610 -NCT05920928 -NCT05927779 -NCT05920980 -NCT05927818 -NCT05921149 -NCT05927844 -NCT05921253 -NCT05927857 -NCT05921331 -NCT05928156 -NCT05921552 -NCT05928312 -NCT05921760 -NCT05928325 -NCT05921786 -NCT05928429 -NCT05921812 -NCT05928780 -NCT05921916 -NCT05928806 -NCT05921942 -NCT05928897 -NCT05922345 -NCT05928962 -NCT05922358 -NCT05929222 -NCT05922384 -NCT05929235 -NCT05922423 -NCT05929300 -NCT05922501 -NCT05929456 -NCT05922553 -NCT05929495 -NCT05922566 -NCT05929612 -NCT05922904 -NCT05929664 -NCT05922930 -NCT05929690 -NCT05923008 -NCT05929716 -NCT05923177 -NCT05929768 -NCT05923190 -NCT05929820 -NCT05923242 -NCT05929885 -NCT05923255 -NCT05930119 -NCT05923268 -NCT05930288 -NCT05923684 -NCT05930457 -NCT05924074 -NCT05930483 -NCT05924100 -NCT05930496 -NCT05924256 -NCT05930665 -NCT05924672 -NCT05930938 -NCT05924750 -NCT05930951 -NCT05924776 -NCT05931263 -NCT05924841 -NCT05931302 -NCT05924880 -NCT05931328 -NCT05924906 -NCT05931393 -NCT05924997 -NCT05931445 -NCT05925257 -NCT05931874 -NCT05925361 -NCT05932173 -NCT05925413 -NCT05932199 -NCT05925491 -NCT05943795 -NCT05932264 -NCT05939180 -NCT05932511 -NCT05939063 -NCT05932667 -NCT05939310 -NCT05932680 -NCT05939414 -NCT05932758 -NCT05939440 -NCT05932810 -NCT05939661 -NCT05932862 -NCT05939687 -NCT05933070 -NCT05939791 -NCT05933122 -NCT05939830 -NCT05933239 -NCT05939856 -NCT05933265 -NCT05940051 -NCT05933395 -NCT05940064 -NCT05933577 -NCT05940116 -NCT05933668 -NCT05940181 -NCT05933811 -NCT05940259 -NCT05933980 -NCT05940298 -NCT05934084 -NCT05940493 -NCT05934097 -NCT05940532 -NCT05934331 -NCT05940571 -NCT05934448 -NCT05940740 -NCT05934513 -NCT05940844 -NCT05934539 -NCT05940896 -NCT05934838 -NCT05940961 -NCT05934851 -NCT05941156 -NCT05934929 -NCT05941169 -NCT05934981 -NCT05941234 -NCT05935098 -NCT05941299 -NCT05935150 -NCT05941325 -NCT05935579 -NCT05941338 -NCT05935748 -NCT05941481 -NCT05935774 -NCT05941507 -NCT05935995 -NCT05941520 -NCT05936034 -NCT05941585 -NCT05936229 -NCT05941741 -NCT05936359 -NCT05941858 -NCT05936658 -NCT05941897 -NCT05936736 -NCT05941936 -NCT05936853 -NCT05942001 -NCT05936931 -NCT05942300 -NCT05937269 -NCT05942378 -NCT05937295 -NCT05942508 -NCT05937399 -NCT05942560 -NCT05937425 -NCT05942573 -NCT05937438 -NCT05942794 -NCT05937620 -NCT05942885 -NCT05937906 -NCT05943041 -NCT05937919 -NCT05943067 -NCT05938127 -NCT05943106 -NCT05938270 -NCT05943119 -NCT05938296 -NCT05943210 -NCT05938322 -NCT05943262 -NCT05938374 -NCT05943301 -NCT05938387 -NCT05943314 -NCT05938504 -NCT05943444 -NCT05938686 -NCT05943496 -NCT05939037 -NCT05954117 -NCT05943990 -NCT05949541 -NCT05944185 -NCT05949424 -NCT05944224 -NCT05949606 -NCT05944237 -NCT05949619 -NCT05944276 -NCT05949632 -NCT05944562 -NCT05949684 -NCT05944783 -NCT05949762 -NCT05944809 -NCT05949775 -NCT05944900 -NCT05949931 -NCT05944913 -NCT05949944 -NCT05944978 -NCT05949983 -NCT05945082 -NCT05949996 -NCT05945368 -NCT05950113 -NCT05945407 -NCT05950165 -NCT05945524 -NCT05950204 -NCT05945797 -NCT05950334 -NCT05945823 -NCT05950399 -NCT05945849 -NCT05950464 -NCT05945875 -NCT05950594 -NCT05945901 -NCT05950737 -NCT05946070 -NCT05950802 -NCT05946161 -NCT05950815 -NCT05946213 -NCT05950867 -NCT05946226 -NCT05950945 -NCT05946460 -NCT05950997 -NCT05946603 -NCT05951127 -NCT05946759 -NCT05951179 -NCT05946824 -NCT05951231 -NCT05946993 -NCT05951608 -NCT05947045 -NCT05951816 -NCT05947136 -NCT05951842 -NCT05947188 -NCT05951855 -NCT05947357 -NCT05951959 -NCT05947383 -NCT05952024 -NCT05947474 -NCT05952037 -NCT05947487 -NCT05952128 -NCT05947500 -NCT05952141 -NCT05947513 -NCT05952310 -NCT05947695 -NCT05952375 -NCT05947825 -NCT05952453 -NCT05947838 -NCT05952492 -NCT05947851 -NCT05952557 -NCT05948033 -NCT05952687 -NCT05948072 -NCT05952804 -NCT05948449 -NCT05952934 -NCT05948462 -NCT05952947 -NCT05948475 -NCT05953168 -NCT05948618 -NCT05953181 -NCT05948657 -NCT05953337 -NCT05948813 -NCT05953350 -NCT05948826 -NCT05953662 -NCT05948865 -NCT05953883 -NCT05949021 -NCT05953961 -NCT05949099 -NCT05954078 -NCT05949125 -NCT05954091 -NCT05949333 -NCT05965479 -NCT05954143 -NCT05959473 -NCT05954312 -NCT05959395 -NCT05954429 -NCT05959564 -NCT05954442 -NCT05959694 -NCT05954676 -NCT05959811 -NCT05954702 -NCT05959889 -NCT05954858 -NCT05960149 -NCT05954871 -NCT05960188 -NCT05954897 -NCT05960201 -NCT05955105 -NCT05960578 -NCT05955157 -NCT05960630 -NCT05955170 -NCT05960669 -NCT05955209 -NCT05960773 -NCT05955222 -NCT05960955 -NCT05955248 -NCT05961111 -NCT05955261 -NCT05961124 -NCT05955391 -NCT05961215 -NCT05955508 -NCT05961410 -NCT05955521 -NCT05961423 -NCT05955677 -NCT05961514 -NCT05955833 -NCT05961696 -NCT05955924 -NCT05961709 -NCT05956041 -NCT05961761 -NCT05956093 -NCT05961839 -NCT05956457 -NCT05961982 -NCT05956587 -NCT05962021 -NCT05956639 -NCT05962242 -NCT05956782 -NCT05962450 -NCT05956821 -NCT05962502 -NCT05956977 -NCT05962541 -NCT05956990 -NCT05963035 -NCT05957016 -NCT05963074 -NCT05957042 -NCT05963087 -NCT05957068 -NCT05963217 -NCT05957081 -NCT05963334 -NCT05957250 -NCT05963347 -NCT05957289 -NCT05963386 -NCT05957367 -NCT05963412 -NCT05957471 -NCT05963490 -NCT05957510 -NCT05963724 -NCT05957536 -NCT05963867 -NCT05957640 -NCT05963971 -NCT05957653 -NCT05963984 -NCT05957679 -NCT05963997 -NCT05957757 -NCT05964101 -NCT05957822 -NCT05964153 -NCT05957939 -NCT05964270 -NCT05958082 -NCT05964361 -NCT05958121 -NCT05964530 -NCT05958199 -NCT05964543 -NCT05958316 -NCT05964569 -NCT05958719 -NCT05965102 -NCT05959226 -NCT05965141 -NCT05959265 -NCT05965154 -NCT05959291 -NCT05965466 -NCT05959356 -NCT05977998 -NCT05965505 -NCT05972135 -NCT05965531 -NCT05971862 -NCT05965817 -NCT05972460 -NCT05965856 -NCT05972577 -NCT05966233 -NCT05972655 -NCT05966246 -NCT05972720 -NCT05966584 -NCT05972941 -NCT05967104 -NCT05973149 -NCT05967182 -NCT05973162 -NCT05967286 -NCT05973227 -NCT05967416 -NCT05973266 -NCT05967533 -NCT05973487 -NCT05967689 -NCT05973656 -NCT05967884 -NCT05973773 -NCT05968144 -NCT05973864 -NCT05968157 -NCT05973903 -NCT05968170 -NCT05974059 -NCT05968326 -NCT05974085 -NCT05968677 -NCT05974449 -NCT05968690 -NCT05974774 -NCT05968768 -NCT05974995 -NCT05968846 -NCT05975073 -NCT05968898 -NCT05975151 -NCT05968963 -NCT05975190 -NCT05969041 -NCT05975307 -NCT05969171 -NCT05975333 -NCT05969184 -NCT05975463 -NCT05969314 -NCT05975619 -NCT05969470 -NCT05975645 -NCT05969496 -NCT05975736 -NCT05969691 -NCT05975749 -NCT05969704 -NCT05975944 -NCT05969847 -NCT05976282 -NCT05969860 -NCT05976334 -NCT05969899 -NCT05976412 -NCT05970016 -NCT05976490 -NCT05970107 -NCT05976555 -NCT05970133 -NCT05976568 -NCT05970198 -NCT05976763 -NCT05970250 -NCT05976815 -NCT05970302 -NCT05976828 -NCT05970497 -NCT05976893 -NCT05970627 -NCT05976906 -NCT05970666 -NCT05976997 -NCT05970705 -NCT05977036 -NCT05970757 -NCT05977062 -NCT05970822 -NCT05977322 -NCT05970900 -NCT05977478 -NCT05971056 -NCT05977504 -NCT05971069 -NCT05977673 -NCT05971108 -NCT05977738 -NCT05971199 -NCT05977764 -NCT05971251 -NCT05977777 -NCT05971576 -NCT05977803 -NCT05971589 -NCT05977907 -NCT05971628 -NCT05986851 -NCT05978050 -NCT05982301 -NCT05978102 -NCT05982275 -NCT05978128 -NCT05982379 -NCT05978193 -NCT05982418 -NCT05978232 -NCT05982496 -NCT05978284 -NCT05982522 -NCT05978349 -NCT05982626 -NCT05978401 -NCT05982678 -NCT05978492 -NCT05982756 -NCT05978570 -NCT05982834 -NCT05978609 -NCT05983094 -NCT05978648 -NCT05983107 -NCT05978661 -NCT05983133 -NCT05978739 -NCT05983146 -NCT05978882 -NCT05983198 -NCT05978960 -NCT05983237 -NCT05979064 -NCT05983276 -NCT05979155 -NCT05983367 -NCT05979220 -NCT05983380 -NCT05979298 -NCT05983406 -NCT05979363 -NCT05983432 -NCT05979610 -NCT05983523 -NCT05979740 -NCT05983783 -NCT05979792 -NCT05983835 -NCT05979818 -NCT05983965 -NCT05979857 -NCT05984147 -NCT05979883 -NCT05984199 -NCT05979909 -NCT05984277 -NCT05979961 -NCT05984342 -NCT05979987 -NCT05984485 -NCT05980000 -NCT05984511 -NCT05980169 -NCT05984589 -NCT05980182 -NCT05984602 -NCT05980325 -NCT05984680 -NCT05980416 -NCT05984797 -NCT05980481 -NCT05984810 -NCT05980507 -NCT05984888 -NCT05980598 -NCT05984914 -NCT05980624 -NCT05985109 -NCT05980689 -NCT05985161 -NCT05980702 -NCT05985187 -NCT05980715 -NCT05985252 -NCT05981001 -NCT05985278 -NCT05981014 -NCT05985655 -NCT05981066 -NCT05985681 -NCT05981157 -NCT05985707 -NCT05981209 -NCT05985798 -NCT05981235 -NCT05985824 -NCT05981326 -NCT05985954 -NCT05981703 -NCT05986071 -NCT05981924 -NCT05986227 -NCT05982080 -NCT05986240 -NCT05982093 -NCT05986266 -NCT05982184 -NCT05986318 -NCT05982197 -NCT05986331 -NCT05982223 -NCT05998135 -NCT05986981 -NCT05991583 -NCT05987098 -NCT05991544 -NCT05987176 -NCT05991752 -NCT05987241 -NCT05991908 -NCT05987332 -NCT05991973 -NCT05987345 -NCT05992220 -NCT05987358 -NCT05992363 -NCT05987514 -NCT05992584 -NCT05987644 -NCT05992597 -NCT05987709 -NCT05992610 -NCT05987826 -NCT05992740 -NCT05987930 -NCT05992870 -NCT05987956 -NCT05993273 -NCT05988060 -NCT05993299 -NCT05988372 -NCT05993559 -NCT05988645 -NCT05993858 -NCT05988736 -NCT05993949 -NCT05988814 -NCT05994001 -NCT05988892 -NCT05994131 -NCT05988918 -NCT05994157 -NCT05988970 -NCT05994170 -NCT05989022 -NCT05994235 -NCT05989204 -NCT05994300 -NCT05989347 -NCT05994339 -NCT05989425 -NCT05994456 -NCT05989542 -NCT05994521 -NCT05989724 -NCT05994690 -NCT05989776 -NCT05994859 -NCT05989789 -NCT05995028 -NCT05989828 -NCT05995041 -NCT05989854 -NCT05995483 -NCT05989893 -NCT05995808 -NCT05989997 -NCT05995860 -NCT05990127 -NCT05995990 -NCT05990192 -NCT05996107 -NCT05990231 -NCT05996185 -NCT05990244 -NCT05996367 -NCT05990257 -NCT05996432 -NCT05990270 -NCT05996445 -NCT05990426 -NCT05996484 -NCT05990452 -NCT05996523 -NCT05990465 -NCT05996653 -NCT05990543 -NCT05996783 -NCT05990556 -NCT05996796 -NCT05990621 -NCT05996952 -NCT05990634 -NCT05997017 -NCT05990738 -NCT05997056 -NCT05990751 -NCT05997329 -NCT05990803 -NCT05997342 -NCT05990920 -NCT05997459 -NCT05990946 -NCT05997524 -NCT05990985 -NCT05997589 -NCT05990998 -NCT05997602 -NCT05991102 -NCT05997615 -NCT05991349 -NCT05998122 -NCT05991388 -NCT06008275 -NCT05998278 -NCT06003998 -NCT05998447 -NCT06003673 -NCT05998460 -NCT06004011 -NCT05998642 -NCT06004141 -NCT05998655 -NCT06004167 -NCT05998928 -NCT06004245 -NCT05998941 -NCT06004336 -NCT05998993 -NCT06004661 -NCT05999149 -NCT06004765 -NCT05999214 -NCT06004921 -NCT05999227 -NCT06005025 -NCT05999292 -NCT06005116 -NCT05999357 -NCT06005259 -NCT05999396 -NCT06005324 -NCT05999630 -NCT06005337 -NCT05999812 -NCT06005493 -NCT05999968 -NCT06005649 -NCT05999994 -NCT06005740 -NCT06000033 -NCT06005818 -NCT06000046 -NCT06005870 -NCT06000358 -NCT06005974 -NCT06000553 -NCT06006013 -NCT06000683 -NCT06006026 -NCT06000787 -NCT06006104 -NCT06000917 -NCT06006117 -NCT06001086 -NCT06006169 -NCT06001151 -NCT06006273 -NCT06001255 -NCT06006286 -NCT06001268 -NCT06006299 -NCT06001281 -NCT06006338 -NCT06001372 -NCT06006390 -NCT06001385 -NCT06006403 -NCT06001476 -NCT06006650 -NCT06001567 -NCT06006741 -NCT06001580 -NCT06006793 -NCT06001619 -NCT06006806 -NCT06001658 -NCT06006923 -NCT06001671 -NCT06006949 -NCT06001684 -NCT06007001 -NCT06001723 -NCT06007092 -NCT06001749 -NCT06007118 -NCT06001762 -NCT06007482 -NCT06001788 -NCT06007586 -NCT06002022 -NCT06007690 -NCT06002126 -NCT06007729 -NCT06002269 -NCT06007794 -NCT06002425 -NCT06007846 -NCT06002659 -NCT06007911 -NCT06002789 -NCT06007924 -NCT06003075 -NCT06007937 -NCT06003179 -NCT06008054 -NCT06003218 -NCT06008093 -NCT06003231 -NCT06008106 -NCT06003335 -NCT06008119 -NCT06003556 -NCT06008158 -NCT06003621 -NCT06018363 -NCT06008288 -NCT06014372 -NCT06008301 -NCT06014255 -NCT06008366 -NCT06014398 -NCT06008379 -NCT06014450 -NCT06008405 -NCT06014502 -NCT06008483 -NCT06014528 -NCT06008522 -NCT06014658 -NCT06008574 -NCT06014762 -NCT06008730 -NCT06014827 -NCT06008925 -NCT06014853 -NCT06008977 -NCT06014905 -NCT06009029 -NCT06014944 -NCT06009107 -NCT06015048 -NCT06009224 -NCT06015100 -NCT06009627 -NCT06015113 -NCT06009848 -NCT06015126 -NCT06009861 -NCT06015269 -NCT06009926 -NCT06015295 -NCT06010017 -NCT06015321 -NCT06010095 -NCT06015360 -NCT06010160 -NCT06015503 -NCT06010212 -NCT06015542 -NCT06010277 -NCT06015568 -NCT06010303 -NCT06015659 -NCT06010329 -NCT06015724 -NCT06010342 -NCT06015854 -NCT06010355 -NCT06015880 -NCT06010381 -NCT06015932 -NCT06010680 -NCT06016062 -NCT06010862 -NCT06016075 -NCT06010875 -NCT06016270 -NCT06010888 -NCT06016335 -NCT06010901 -NCT06016387 -NCT06011109 -NCT06016400 -NCT06011278 -NCT06016413 -NCT06011291 -NCT06016452 -NCT06011304 -NCT06016504 -NCT06011473 -NCT06016569 -NCT06011499 -NCT06016725 -NCT06011772 -NCT06016738 -NCT06012435 -NCT06016855 -NCT06012695 -NCT06016920 -NCT06012708 -NCT06017063 -NCT06012734 -NCT06017141 -NCT06012929 -NCT06017258 -NCT06013111 -NCT06017284 -NCT06013176 -NCT06017297 -NCT06013423 -NCT06017323 -NCT06013527 -NCT06017557 -NCT06013618 -NCT06017583 -NCT06013774 -NCT06018116 -NCT06013904 -NCT06018129 -NCT06013943 -NCT06018246 -NCT06014073 -NCT06018311 -NCT06014086 -NCT06018337 -NCT06014190 -NCT06029998 -NCT06018506 -NCT06024343 -NCT06018688 -NCT06024187 -NCT06018714 -NCT06024603 -NCT06018883 -NCT06024772 -NCT06018896 -NCT06024824 -NCT06019013 -NCT06024941 -NCT06019130 -NCT06024954 -NCT06019312 -NCT06024980 -NCT06019325 -NCT06025747 -NCT06019468 -NCT06025799 -NCT06019702 -NCT06026046 -NCT06019988 -NCT06026111 -NCT06020066 -NCT06026189 -NCT06020352 -NCT06026254 -NCT06020430 -NCT06026319 -NCT06020443 -NCT06026371 -NCT06020573 -NCT06026384 -NCT06020651 -NCT06026410 -NCT06020755 -NCT06026501 -NCT06020833 -NCT06026605 -NCT06020885 -NCT06026631 -NCT06020989 -NCT06026657 -NCT06021015 -NCT06026774 -NCT06021496 -NCT06026800 -NCT06021600 -NCT06026878 -NCT06021626 -NCT06026943 -NCT06021678 -NCT06026995 -NCT06022003 -NCT06027086 -NCT06022029 -NCT06027242 -NCT06022159 -NCT06027268 -NCT06022250 -NCT06027346 -NCT06022276 -NCT06027515 -NCT06022289 -NCT06027567 -NCT06022341 -NCT06027619 -NCT06022692 -NCT06027632 -NCT06022757 -NCT06027892 -NCT06022770 -NCT06027957 -NCT06022822 -NCT06027983 -NCT06022861 -NCT06028022 -NCT06022887 -NCT06028048 -NCT06022900 -NCT06028152 -NCT06022939 -NCT06028373 -NCT06022965 -NCT06028633 -NCT06022978 -NCT06028672 -NCT06023147 -NCT06028737 -NCT06023212 -NCT06028932 -NCT06023277 -NCT06029036 -NCT06023368 -NCT06029127 -NCT06023420 -NCT06029218 -NCT06023576 -NCT06029270 -NCT06023641 -NCT06029309 -NCT06023758 -NCT06029517 -NCT06023862 -NCT06029621 -NCT06023875 -NCT06029816 -NCT06024031 -NCT06029829 -NCT06024174 -NCT06041490 -NCT06030011 -NCT06035679 -NCT06030037 -NCT06035614 -NCT06030089 -NCT06035731 -NCT06030180 -NCT06035744 -NCT06030258 -NCT06035757 -NCT06030427 -NCT06036121 -NCT06030440 -NCT06036355 -NCT06030622 -NCT06036407 -NCT06030804 -NCT06036706 -NCT06030817 -NCT06036745 -NCT06030895 -NCT06036810 -NCT06030934 -NCT06036836 -NCT06031129 -NCT06037018 -NCT06031181 -NCT06037239 -NCT06031246 -NCT06037317 -NCT06031285 -NCT06037382 -NCT06031441 -NCT06037655 -NCT06031480 -NCT06037733 -NCT06031493 -NCT06037863 -NCT06031558 -NCT06037902 -NCT06031584 -NCT06037941 -NCT06031597 -NCT06037954 -NCT06031688 -NCT06037980 -NCT06032052 -NCT06038032 -NCT06032104 -NCT06038396 -NCT06032338 -NCT06038461 -NCT06032390 -NCT06038526 -NCT06032663 -NCT06038539 -NCT06032728 -NCT06038578 -NCT06032845 -NCT06038604 -NCT06032910 -NCT06039111 -NCT06032936 -NCT06039202 -NCT06032962 -NCT06039280 -NCT06033092 -NCT06039306 -NCT06033118 -NCT06039371 -NCT06033183 -NCT06039384 -NCT06033586 -NCT06039488 -NCT06033729 -NCT06039631 -NCT06033794 -NCT06039644 -NCT06033820 -NCT06039709 -NCT06034002 -NCT06039891 -NCT06034015 -NCT06039956 -NCT06034197 -NCT06040099 -NCT06034275 -NCT06040125 -NCT06034431 -NCT06040177 -NCT06034470 -NCT06040320 -NCT06034561 -NCT06040541 -NCT06034860 -NCT06040762 -NCT06034977 -NCT06040801 -NCT06035133 -NCT06040970 -NCT06035211 -NCT06040983 -NCT06035224 -NCT06041035 -NCT06035263 -NCT06041061 -NCT06035497 -NCT06041425 -NCT06035510 -NCT06041477 -NCT06035549 -NCT06050954 -NCT06041503 -NCT06046664 -NCT06041516 -NCT06046586 -NCT06041607 -NCT06046742 -NCT06041698 -NCT06046755 -NCT06041724 -NCT06046794 -NCT06041776 -NCT06046846 -NCT06041802 -NCT06046963 -NCT06041945 -NCT06047015 -NCT06042023 -NCT06047080 -NCT06042400 -NCT06047184 -NCT06042569 -NCT06047197 -NCT06042725 -NCT06047301 -NCT06042816 -NCT06047379 -NCT06042894 -NCT06047431 -NCT06042998 -NCT06047509 -NCT06043323 -NCT06047535 -NCT06043427 -NCT06047626 -NCT06043466 -NCT06047808 -NCT06043674 -NCT06047860 -NCT06043713 -NCT06047886 -NCT06043765 -NCT06047990 -NCT06043817 -NCT06048094 -NCT06043973 -NCT06048133 -NCT06043999 -NCT06048146 -NCT06044025 -NCT06048250 -NCT06044142 -NCT06048315 -NCT06044220 -NCT06048367 -NCT06044311 -NCT06048484 -NCT06044441 -NCT06048601 -NCT06044506 -NCT06048705 -NCT06044623 -NCT06048718 -NCT06044857 -NCT06048822 -NCT06045052 -NCT06048913 -NCT06045091 -NCT06048926 -NCT06045195 -NCT06049030 -NCT06045247 -NCT06049134 -NCT06045260 -NCT06049212 -NCT06045286 -NCT06049290 -NCT06045572 -NCT06049355 -NCT06045585 -NCT06049576 -NCT06045689 -NCT06049667 -NCT06045767 -NCT06049693 -NCT06045806 -NCT06049836 -NCT06045910 -NCT06049901 -NCT06045975 -NCT06049966 -NCT06046014 -NCT06050122 -NCT06046040 -NCT06050200 -NCT06046066 -NCT06050239 -NCT06046131 -NCT06050252 -NCT06046274 -NCT06050317 -NCT06046287 -NCT06050395 -NCT06046313 -NCT06050512 -NCT06046469 -NCT06050694 -NCT06046482 -NCT06050707 -NCT06046495 -NCT06050941 -NCT06046573 -NCT06059560 -NCT06050980 -NCT06055621 -NCT06051136 -NCT06055543 -NCT06051162 -NCT06055738 -NCT06051214 -NCT06055790 -NCT06051240 -NCT06055803 -NCT06051331 -NCT06055816 -NCT06051695 -NCT06055894 -NCT06051747 -NCT06056024 -NCT06051760 -NCT06056115 -NCT06051851 -NCT06056128 -NCT06051942 -NCT06056310 -NCT06052033 -NCT06056323 -NCT06052085 -NCT06056336 -NCT06052098 -NCT06056362 -NCT06052202 -NCT06056414 -NCT06052306 -NCT06056505 -NCT06052332 -NCT06056752 -NCT06052423 -NCT06056791 -NCT06052449 -NCT06056804 -NCT06052488 -NCT06056830 -NCT06052618 -NCT06056843 -NCT06052683 -NCT06056895 -NCT06052696 -NCT06057038 -NCT06052826 -NCT06057168 -NCT06052839 -NCT06057298 -NCT06052852 -NCT06057350 -NCT06053086 -NCT06057402 -NCT06053099 -NCT06057571 -NCT06053268 -NCT06057610 -NCT06053658 -NCT06057636 -NCT06053996 -NCT06057675 -NCT06054048 -NCT06057766 -NCT06054113 -NCT06057831 -NCT06054178 -NCT06057922 -NCT06054191 -NCT06057935 -NCT06054308 -NCT06057948 -NCT06054477 -NCT06058312 -NCT06054555 -NCT06058377 -NCT06054776 -NCT06058572 -NCT06054789 -NCT06058650 -NCT06054841 -NCT06058663 -NCT06054867 -NCT06058793 -NCT06054906 -NCT06058936 -NCT06054932 -NCT06058988 -NCT06054984 -NCT06059001 -NCT06055075 -NCT06059014 -NCT06055088 -NCT06059118 -NCT06055153 -NCT06059170 -NCT06055166 -NCT06059261 -NCT06055231 -NCT06059300 -NCT06055296 -NCT06059391 -NCT06055348 -NCT06059469 -NCT06055387 -NCT06059495 -NCT06055439 -NCT06059508 -NCT06055465 -NCT06059547 -NCT06055517 -NCT06071052 -NCT06059690 -NCT06065371 -NCT06059859 -NCT06065358 -NCT06059885 -NCT06065423 -NCT06060080 -NCT06065449 -NCT06060405 -NCT06065462 -NCT06060431 -NCT06065592 -NCT06060587 -NCT06065748 -NCT06060613 -NCT06065813 -NCT06060704 -NCT06065891 -NCT06060782 -NCT06066138 -NCT06060847 -NCT06066203 -NCT06060899 -NCT06066216 -NCT06060938 -NCT06066242 -NCT06060964 -NCT06066333 -NCT06061094 -NCT06066346 -NCT06061146 -NCT06066359 -NCT06061172 -NCT06066424 -NCT06061276 -NCT06066437 -NCT06061302 -NCT06066931 -NCT06061328 -NCT06067048 -NCT06061432 -NCT06067061 -NCT06061445 -NCT06067269 -NCT06061666 -NCT06067321 -NCT06061705 -NCT06067438 -NCT06061809 -NCT06067503 -NCT06061835 -NCT06067581 -NCT06061874 -NCT06067620 -NCT06062225 -NCT06067776 -NCT06062355 -NCT06067841 -NCT06062420 -NCT06068075 -NCT06062485 -NCT06068153 -NCT06062498 -NCT06068387 -NCT06062563 -NCT06068400 -NCT06062602 -NCT06068621 -NCT06062641 -NCT06068868 -NCT06062745 -NCT06068881 -NCT06062810 -NCT06068985 -NCT06062823 -NCT06069297 -NCT06062901 -NCT06069453 -NCT06063018 -NCT06069570 -NCT06063070 -NCT06069648 -NCT06063317 -NCT06069726 -NCT06063343 -NCT06069778 -NCT06063486 -NCT06069830 -NCT06063551 -NCT06069947 -NCT06063603 -NCT06069960 -NCT06063681 -NCT06070012 -NCT06063941 -NCT06070155 -NCT06064019 -NCT06070324 -NCT06064097 -NCT06070363 -NCT06064149 -NCT06070376 -NCT06064344 -NCT06070636 -NCT06064812 -NCT06070740 -NCT06064877 -NCT06070870 -NCT06064903 -NCT06071013 -NCT06065059 -NCT06082570 -NCT06071234 -NCT06077877 -NCT06071286 -NCT06077760 -NCT06071624 -NCT06077981 -NCT06071650 -NCT06078306 -NCT06071845 -NCT06078384 -NCT06071871 -NCT06078657 -NCT06071897 -NCT06078670 -NCT06072027 -NCT06078709 -NCT06072131 -NCT06078787 -NCT06072586 -NCT06078800 -NCT06072612 -NCT06078813 -NCT06072781 -NCT06078982 -NCT06072807 -NCT06079112 -NCT06072833 -NCT06079164 -NCT06072911 -NCT06079333 -NCT06072989 -NCT06079346 -NCT06073067 -NCT06079671 -NCT06073184 -NCT06079697 -NCT06073223 -NCT06079879 -NCT06073353 -NCT06079970 -NCT06073483 -NCT06079983 -NCT06073496 -NCT06080009 -NCT06073626 -NCT06080061 -NCT06073717 -NCT06080113 -NCT06073730 -NCT06080165 -NCT06073821 -NCT06080191 -NCT06073951 -NCT06080204 -NCT06074029 -NCT06080503 -NCT06074107 -NCT06080620 -NCT06074484 -NCT06080711 -NCT06074497 -NCT06080776 -NCT06074510 -NCT06080841 -NCT06074536 -NCT06080854 -NCT06074588 -NCT06080984 -NCT06074666 -NCT06081127 -NCT06074692 -NCT06081244 -NCT06074705 -NCT06081322 -NCT06074757 -NCT06081400 -NCT06075043 -NCT06081478 -NCT06075238 -NCT06081582 -NCT06075264 -NCT06081595 -NCT06075498 -NCT06081647 -NCT06075810 -NCT06081673 -NCT06075849 -NCT06081686 -NCT06075953 -NCT06081829 -NCT06076135 -NCT06081907 -NCT06076252 -NCT06081920 -NCT06076291 -NCT06081959 -NCT06076616 -NCT06082102 -NCT06076837 -NCT06082128 -NCT06077071 -NCT06082167 -NCT06077110 -NCT06082180 -NCT06077123 -NCT06082492 -NCT06077487 -NCT06082505 -NCT06077500 -NCT06082557 -NCT06077591 -NCT06091696 -NCT06082596 -NCT06086522 -NCT06082635 -NCT06086457 -NCT06082648 -NCT06086704 -NCT06082804 -NCT06086925 -NCT06082882 -NCT06086990 -NCT06082934 -NCT06087068 -NCT06082947 -NCT06087237 -NCT06082960 -NCT06087263 -NCT06083207 -NCT06087289 -NCT06083454 -NCT06087341 -NCT06083662 -NCT06087393 -NCT06083701 -NCT06087419 -NCT06083844 -NCT06087432 -NCT06083857 -NCT06087614 -NCT06083870 -NCT06087653 -NCT06083883 -NCT06087718 -NCT06083896 -NCT06087770 -NCT06083922 -NCT06087783 -NCT06084195 -NCT06087861 -NCT06084208 -NCT06088004 -NCT06084234 -NCT06088030 -NCT06084286 -NCT06088056 -NCT06084299 -NCT06088290 -NCT06084338 -NCT06088381 -NCT06084416 -NCT06088459 -NCT06084481 -NCT06088472 -NCT06084689 -NCT06088654 -NCT06084767 -NCT06088771 -NCT06084780 -NCT06088888 -NCT06084806 -NCT06088940 -NCT06084819 -NCT06089330 -NCT06084845 -NCT06089369 -NCT06084884 -NCT06089382 -NCT06084897 -NCT06089408 -NCT06084936 -NCT06089421 -NCT06084962 -NCT06089954 -NCT06085274 -NCT06090162 -NCT06085313 -NCT06090214 -NCT06085365 -NCT06090266 -NCT06085404 -NCT06090318 -NCT06085495 -NCT06090539 -NCT06085560 -NCT06090630 -NCT06085638 -NCT06090643 -NCT06085664 -NCT06090656 -NCT06085716 -NCT06090747 -NCT06085729 -NCT06090864 -NCT06085742 -NCT06090903 -NCT06085755 -NCT06090916 -NCT06085781 -NCT06090994 -NCT06085833 -NCT06091072 -NCT06085976 -NCT06091124 -NCT06086002 -NCT06091254 -NCT06086054 -NCT06091267 -NCT06086197 -NCT06091423 -NCT06086288 -NCT06091683 -NCT06086327 -NCT06102330 -NCT06091748 -NCT06096974 -NCT06091865 -NCT06096870 -NCT06091930 -NCT06097364 -NCT06091943 -NCT06097416 -NCT06092086 -NCT06097455 -NCT06092112 -NCT06097468 -NCT06092242 -NCT06097728 -NCT06092255 -NCT06097793 -NCT06092268 -NCT06097962 -NCT06092580 -NCT06097975 -NCT06092606 -NCT06098118 -NCT06092645 -NCT06098248 -NCT06092892 -NCT06098313 -NCT06092944 -NCT06098326 -NCT06092957 -NCT06098547 -NCT06093061 -NCT06098599 -NCT06093165 -NCT06098651 -NCT06093334 -NCT06098898 -NCT06093425 -NCT06099093 -NCT06093438 -NCT06099119 -NCT06093503 -NCT06099366 -NCT06093672 -NCT06099418 -NCT06093698 -NCT06099431 -NCT06093841 -NCT06099743 -NCT06093854 -NCT06099769 -NCT06093945 -NCT06099782 -NCT06093971 -NCT06099821 -NCT06094101 -NCT06099951 -NCT06094140 -NCT06099977 -NCT06094296 -NCT06099990 -NCT06094322 -NCT06100068 -NCT06094426 -NCT06100081 -NCT06094556 -NCT06100237 -NCT06094777 -NCT06100263 -NCT06094842 -NCT06100367 -NCT06094868 -NCT06100497 -NCT06095089 -NCT06100653 -NCT06095141 -NCT06100705 -NCT06095154 -NCT06100874 -NCT06095167 -NCT06101043 -NCT06095323 -NCT06101069 -NCT06095362 -NCT06101082 -NCT06095375 -NCT06101134 -NCT06095505 -NCT06101277 -NCT06095583 -NCT06101290 -NCT06095674 -NCT06101381 -NCT06095726 -NCT06101394 -NCT06095882 -NCT06101758 -NCT06095934 -NCT06101836 -NCT06096038 -NCT06101849 -NCT06096220 -NCT06101927 -NCT06096272 -NCT06102057 -NCT06096545 -NCT06102161 -NCT06096623 -NCT06102213 -NCT06096779 -NCT06102252 -NCT06096844 -NCT06113016 -NCT06102395 -NCT06107673 -NCT06102447 -NCT06107608 -NCT06102525 -NCT06107686 -NCT06102707 -NCT06107738 -NCT06102824 -NCT06107790 -NCT06102863 -NCT06107868 -NCT06102902 -NCT06107894 -NCT06102928 -NCT06107920 -NCT06103214 -NCT06108024 -NCT06103279 -NCT06108050 -NCT06103318 -NCT06108206 -NCT06103526 -NCT06108232 -NCT06103617 -NCT06108375 -NCT06103669 -NCT06108479 -NCT06103682 -NCT06108492 -NCT06103838 -NCT06108596 -NCT06103864 -NCT06108726 -NCT06104085 -NCT06108739 -NCT06104215 -NCT06109064 -NCT06104241 -NCT06109207 -NCT06104267 -NCT06109272 -NCT06104449 -NCT06109402 -NCT06104488 -NCT06109467 -NCT06104553 -NCT06109558 -NCT06104566 -NCT06109779 -NCT06104592 -NCT06110195 -NCT06104618 -NCT06110208 -NCT06104774 -NCT06110312 -NCT06104930 -NCT06110572 -NCT06105008 -NCT06110598 -NCT06105021 -NCT06110650 -NCT06105203 -NCT06110663 -NCT06105359 -NCT06110702 -NCT06105515 -NCT06110793 -NCT06105554 -NCT06110832 -NCT06105619 -NCT06111235 -NCT06105632 -NCT06111274 -NCT06105658 -NCT06111313 -NCT06105684 -NCT06111326 -NCT06105749 -NCT06111625 -NCT06105801 -NCT06111781 -NCT06105918 -NCT06111872 -NCT06106152 -NCT06112002 -NCT06106165 -NCT06112041 -NCT06106308 -NCT06112314 -NCT06106477 -NCT06112379 -NCT06106529 -NCT06112509 -NCT06106633 -NCT06112522 -NCT06106750 -NCT06112535 -NCT06106802 -NCT06112613 -NCT06106841 -NCT06112704 -NCT06106945 -NCT06112808 -NCT06106997 -NCT06112847 -NCT06107114 -NCT06112977 -NCT06107374 -NCT06112990 -NCT06107413 -NCT06124157 -NCT06113289 -NCT06119581 -NCT06113302 -NCT06119438 -NCT06113627 -NCT06119633 -NCT06113705 -NCT06119685 -NCT06113809 -NCT06119724 -NCT06114004 -NCT06119789 -NCT06114082 -NCT06119867 -NCT06114108 -NCT06120036 -NCT06114173 -NCT06120075 -NCT06114225 -NCT06120127 -NCT06114511 -NCT06120140 -NCT06114940 -NCT06120166 -NCT06115135 -NCT06120283 -NCT06115174 -NCT06120439 -NCT06115330 -NCT06120491 -NCT06115395 -NCT06120504 -NCT06115408 -NCT06120595 -NCT06115486 -NCT06120712 -NCT06115499 -NCT06120764 -NCT06115629 -NCT06120803 -NCT06115642 -NCT06120972 -NCT06115733 -NCT06121089 -NCT06115850 -NCT06121102 -NCT06115902 -NCT06121180 -NCT06116084 -NCT06121258 -NCT06116136 -NCT06121271 -NCT06116240 -NCT06121401 -NCT06116253 -NCT06121453 -NCT06116461 -NCT06121505 -NCT06116578 -NCT06121557 -NCT06116682 -NCT06121570 -NCT06116734 -NCT06121700 -NCT06116786 -NCT06121752 -NCT06116812 -NCT06121843 -NCT06116864 -NCT06122064 -NCT06116903 -NCT06122480 -NCT06116929 -NCT06122493 -NCT06117059 -NCT06122584 -NCT06117241 -NCT06122610 -NCT06117371 -NCT06122896 -NCT06117540 -NCT06123117 -NCT06117566 -NCT06123156 -NCT06117709 -NCT06123286 -NCT06117774 -NCT06123338 -NCT06117878 -NCT06123455 -NCT06118047 -NCT06123468 -NCT06118060 -NCT06123494 -NCT06118086 -NCT06123637 -NCT06118333 -NCT06123676 -NCT06118645 -NCT06123754 -NCT06118658 -NCT06123884 -NCT06118710 -NCT06123988 -NCT06118762 -NCT06124001 -NCT06118788 -NCT06124118 -NCT06119217 -NCT06124131 -NCT06119425 -NCT06134284 -NCT06124378 -NCT06129734 -NCT06124508 -NCT06129604 -NCT06124963 -NCT06129747 -NCT06124976 -NCT06129760 -NCT06125028 -NCT06129851 -NCT06125041 -NCT06129864 -NCT06125080 -NCT06129903 -NCT06125106 -NCT06129955 -NCT06125145 -NCT06130007 -NCT06125171 -NCT06130254 -NCT06125197 -NCT06130280 -NCT06125353 -NCT06130332 -NCT06125522 -NCT06130436 -NCT06125652 -NCT06130579 -NCT06125769 -NCT06130722 -NCT06125834 -NCT06130787 -NCT06125886 -NCT06130826 -NCT06125964 -NCT06130995 -NCT06126159 -NCT06131216 -NCT06126172 -NCT06131398 -NCT06126237 -NCT06131632 -NCT06126276 -NCT06131775 -NCT06126406 -NCT06131840 -NCT06126419 -NCT06131853 -NCT06126432 -NCT06132087 -NCT06126510 -NCT06132113 -NCT06126588 -NCT06132165 -NCT06126640 -NCT06132217 -NCT06126666 -NCT06132295 -NCT06126705 -NCT06132438 -NCT06126731 -NCT06132503 -NCT06126744 -NCT06132607 -NCT06127238 -NCT06132685 -NCT06127303 -NCT06132698 -NCT06127329 -NCT06132711 -NCT06127407 -NCT06132737 -NCT06127654 -NCT06132828 -NCT06127784 -NCT06132932 -NCT06127836 -NCT06132945 -NCT06127940 -NCT06132958 -NCT06127979 -NCT06133062 -NCT06128044 -NCT06133088 -NCT06128070 -NCT06133218 -NCT06128148 -NCT06133348 -NCT06128252 -NCT06133426 -NCT06128304 -NCT06133439 -NCT06128460 -NCT06133517 -NCT06128525 -NCT06133543 -NCT06128551 -NCT06133556 -NCT06128694 -NCT06133699 -NCT06128785 -NCT06133816 -NCT06128798 -NCT06133959 -NCT06128837 -NCT06134193 -NCT06128863 -NCT06134232 -NCT06129422 -NCT06134271 -NCT06129487 -NCT06145750 -NCT06134375 -NCT06140576 -NCT06134388 -NCT06140524 -NCT06134440 -NCT06140628 -NCT06134531 -NCT06140732 -NCT06134687 -NCT06140836 -NCT06134700 -NCT06140875 -NCT06134765 -NCT06140927 -NCT06134960 -NCT06140966 -NCT06135545 -NCT06141005 -NCT06135714 -NCT06141031 -NCT06135896 -NCT06141070 -NCT06136065 -NCT06141226 -NCT06136312 -NCT06141265 -NCT06136351 -NCT06141304 -NCT06136364 -NCT06141369 -NCT06136377 -NCT06141772 -NCT06136559 -NCT06141785 -NCT06136598 -NCT06142318 -NCT06136611 -NCT06142344 -NCT06136624 -NCT06142396 -NCT06136650 -NCT06142500 -NCT06136702 -NCT06142617 -NCT06136884 -NCT06142760 -NCT06136897 -NCT06143007 -NCT06136910 -NCT06143020 -NCT06136923 -NCT06143189 -NCT06136988 -NCT06143553 -NCT06137118 -NCT06143579 -NCT06137144 -NCT06143631 -NCT06137248 -NCT06143722 -NCT06137274 -NCT06143735 -NCT06137378 -NCT06143748 -NCT06137651 -NCT06143774 -NCT06137833 -NCT06144099 -NCT06137950 -NCT06144164 -NCT06138028 -NCT06144346 -NCT06138067 -NCT06144385 -NCT06138145 -NCT06144606 -NCT06138223 -NCT06144671 -NCT06138275 -NCT06144723 -NCT06138496 -NCT06144736 -NCT06138587 -NCT06144762 -NCT06138769 -NCT06144827 -NCT06139107 -NCT06144944 -NCT06139211 -NCT06145048 -NCT06139367 -NCT06145074 -NCT06139406 -NCT06145243 -NCT06139419 -NCT06145295 -NCT06139458 -NCT06145308 -NCT06139536 -NCT06145321 -NCT06139575 -NCT06145399 -NCT06139627 -NCT06145412 -NCT06139783 -NCT06145464 -NCT06139926 -NCT06145581 -NCT06140160 -NCT06145633 -NCT06140407 -NCT06158516 -NCT06145763 -NCT06152471 -NCT06145802 -NCT06152419 -NCT06146231 -NCT06152523 -NCT06146257 -NCT06152575 -NCT06146777 -NCT06152731 -NCT06146920 -NCT06152757 -NCT06146946 -NCT06152809 -NCT06146985 -NCT06152822 -NCT06147037 -NCT06152978 -NCT06147362 -NCT06153238 -NCT06147492 -NCT06153251 -NCT06147505 -NCT06153368 -NCT06147570 -NCT06153797 -NCT06148038 -NCT06153836 -NCT06148077 -NCT06154109 -NCT06148129 -NCT06154291 -NCT06148155 -NCT06154343 -NCT06148220 -NCT06154538 -NCT06148402 -NCT06154967 -NCT06148636 -NCT06155084 -NCT06149130 -NCT06155188 -NCT06149169 -NCT06155279 -NCT06149247 -NCT06155331 -NCT06149286 -NCT06155383 -NCT06149312 -NCT06155396 -NCT06149481 -NCT06155994 -NCT06149533 -NCT06156020 -NCT06149546 -NCT06156267 -NCT06149598 -NCT06156332 -NCT06149611 -NCT06156397 -NCT06149637 -NCT06156410 -NCT06149689 -NCT06156514 -NCT06149741 -NCT06156579 -NCT06149767 -NCT06156761 -NCT06150027 -NCT06156878 -NCT06150040 -NCT06156891 -NCT06150131 -NCT06156943 -NCT06150144 -NCT06157099 -NCT06150157 -NCT06157151 -NCT06150183 -NCT06157216 -NCT06150365 -NCT06157359 -NCT06150417 -NCT06157541 -NCT06150664 -NCT06157814 -NCT06150885 -NCT06157827 -NCT06150898 -NCT06157892 -NCT06150976 -NCT06157957 -NCT06151080 -NCT06157996 -NCT06151106 -NCT06158100 -NCT06151236 -NCT06158139 -NCT06151249 -NCT06158269 -NCT06151262 -NCT06158347 -NCT06151574 -NCT06158386 -NCT06151743 -NCT06158399 -NCT06151847 -NCT06158412 -NCT06152276 -NCT06158477 -NCT06152367 -NCT06170489 -NCT06158828 -NCT06164275 -NCT06158841 -NCT06164119 -NCT06158919 -NCT06164327 -NCT06158958 -NCT06164392 -NCT06158971 -NCT06164691 -NCT06159166 -NCT06164769 -NCT06159335 -NCT06165302 -NCT06159478 -NCT06165380 -NCT06159491 -NCT06165419 -NCT06159504 -NCT06165614 -NCT06159621 -NCT06165653 -NCT06159634 -NCT06165809 -NCT06159790 -NCT06165822 -NCT06159842 -NCT06165874 -NCT06160206 -NCT06165900 -NCT06160323 -NCT06166420 -NCT06160362 -NCT06166472 -NCT06160570 -NCT06166576 -NCT06160609 -NCT06166589 -NCT06160752 -NCT06166758 -NCT06160843 -NCT06166836 -NCT06161025 -NCT06166888 -NCT06161181 -NCT06166953 -NCT06161207 -NCT06167057 -NCT06161233 -NCT06167096 -NCT06161272 -NCT06167109 -NCT06161441 -NCT06167291 -NCT06161493 -NCT06167317 -NCT06161519 -NCT06167421 -NCT06161532 -NCT06167486 -NCT06161545 -NCT06167694 -NCT06161558 -NCT06167785 -NCT06161610 -NCT06167967 -NCT06161779 -NCT06167993 -NCT06161792 -NCT06168032 -NCT06161818 -NCT06168084 -NCT06161909 -NCT06168292 -NCT06161974 -NCT06168435 -NCT06162221 -NCT06168487 -NCT06162351 -NCT06168552 -NCT06162377 -NCT06168786 -NCT06162468 -NCT06168812 -NCT06162559 -NCT06169072 -NCT06162572 -NCT06169124 -NCT06162650 -NCT06169215 -NCT06162663 -NCT06169267 -NCT06162767 -NCT06169280 -NCT06162988 -NCT06169371 -NCT06163261 -NCT06169410 -NCT06163391 -NCT06169449 -NCT06163430 -NCT06169579 -NCT06163664 -NCT06169605 -NCT06163729 -NCT06170190 -NCT06163820 -NCT06170294 -NCT06163898 -NCT06170385 -NCT06163963 -NCT06182332 -NCT06170697 -NCT06176261 -NCT06170710 -NCT06176066 -NCT06170788 -NCT06176274 -NCT06171139 -NCT06176339 -NCT06171152 -NCT06176534 -NCT06171178 -NCT06176690 -NCT06171269 -NCT06176729 -NCT06171282 -NCT06176885 -NCT06171321 -NCT06176989 -NCT06171581 -NCT06177015 -NCT06171607 -NCT06177041 -NCT06171685 -NCT06177067 -NCT06171750 -NCT06177093 -NCT06171789 -NCT06177171 -NCT06171854 -NCT06177236 -NCT06171945 -NCT06177288 -NCT06172036 -NCT06177301 -NCT06172088 -NCT06177522 -NCT06172127 -NCT06177561 -NCT06172205 -NCT06177795 -NCT06172283 -NCT06177925 -NCT06172296 -NCT06177964 -NCT06172309 -NCT06178159 -NCT06172322 -NCT06178198 -NCT06172478 -NCT06178211 -NCT06172595 -NCT06178237 -NCT06172634 -NCT06178354 -NCT06172894 -NCT06178445 -NCT06172907 -NCT06178549 -NCT06172959 -NCT06178588 -NCT06173011 -NCT06178601 -NCT06173037 -NCT06178614 -NCT06173219 -NCT06178848 -NCT06173310 -NCT06178861 -NCT06173349 -NCT06178926 -NCT06173362 -NCT06178939 -NCT06173375 -NCT06179069 -NCT06173401 -NCT06179160 -NCT06173466 -NCT06179303 -NCT06173505 -NCT06179524 -NCT06173518 -NCT06179732 -NCT06173726 -NCT06179888 -NCT06173986 -NCT06180174 -NCT06173999 -NCT06180356 -NCT06174259 -NCT06180460 -NCT06174363 -NCT06180733 -NCT06174532 -NCT06180863 -NCT06174987 -NCT06181266 -NCT06175000 -NCT06181331 -NCT06175208 -NCT06181344 -NCT06175221 -NCT06181643 -NCT06175273 -NCT06182046 -NCT06175390 -NCT06182072 -NCT06175780 -NCT06182163 -NCT06175845 -NCT06182241 -NCT06176027 -NCT06193239 -NCT06182410 -NCT06188286 -NCT06182579 -NCT06188208 -NCT06182592 -NCT06188455 -NCT06182644 -NCT06188468 -NCT06182696 -NCT06188520 -NCT06182735 -NCT06188559 -NCT06182761 -NCT06188624 -NCT06182774 -NCT06188650 -NCT06182800 -NCT06188676 -NCT06182865 -NCT06188702 -NCT06183164 -NCT06188741 -NCT06183268 -NCT06189183 -NCT06183437 -NCT06189209 -NCT06183489 -NCT06189391 -NCT06183736 -NCT06189482 -NCT06183905 -NCT06189833 -NCT06183931 -NCT06190067 -NCT06183983 -NCT06190197 -NCT06184009 -NCT06190249 -NCT06184035 -NCT06190275 -NCT06184256 -NCT06190301 -NCT06184321 -NCT06190600 -NCT06184516 -NCT06190639 -NCT06184594 -NCT06190665 -NCT06184698 -NCT06190730 -NCT06184750 -NCT06190782 -NCT06184841 -NCT06190886 -NCT06184867 -NCT06190899 -NCT06184880 -NCT06190951 -NCT06185205 -NCT06191120 -NCT06185374 -NCT06191133 -NCT06185400 -NCT06191185 -NCT06185478 -NCT06191250 -NCT06185556 -NCT06191263 -NCT06185738 -NCT06191666 -NCT06185751 -NCT06191679 -NCT06185777 -NCT06191744 -NCT06185972 -NCT06191796 -NCT06186011 -NCT06191887 -NCT06186076 -NCT06191900 -NCT06186401 -NCT06191939 -NCT06186414 -NCT06191978 -NCT06186427 -NCT06192186 -NCT06186440 -NCT06192680 -NCT06186609 -NCT06192758 -NCT06186700 -NCT06192771 -NCT06186726 -NCT06192784 -NCT06186778 -NCT06192797 -NCT06186986 -NCT06192849 -NCT06187103 -NCT06192862 -NCT06187402 -NCT06192888 -NCT06187441 -NCT06192979 -NCT06187506 -NCT06193070 -NCT06187597 -NCT06193174 -NCT06187740 -NCT06193200 -NCT06187961 -NCT06204159 -NCT06193356 -NCT06199115 -NCT06193369 -NCT06199050 -NCT06193486 -NCT06199232 -NCT06193525 -NCT06199271 -NCT06193538 -NCT06199453 -NCT06193707 -NCT06199466 -NCT06193733 -NCT06199557 -NCT06193759 -NCT06199570 -NCT06193902 -NCT06199752 -NCT06193993 -NCT06199882 -NCT06194448 -NCT06199895 -NCT06194565 -NCT06199908 -NCT06194630 -NCT06199947 -NCT06194656 -NCT06199973 -NCT06194734 -NCT06199986 -NCT06194786 -NCT06200103 -NCT06194825 -NCT06200155 -NCT06194877 -NCT06200233 -NCT06194929 -NCT06200259 -NCT06195189 -NCT06200363 -NCT06195228 -NCT06200831 -NCT06195293 -NCT06200948 -NCT06195306 -NCT06201039 -NCT06195384 -NCT06201065 -NCT06195618 -NCT06201078 -NCT06195670 -NCT06201234 -NCT06195683 -NCT06201247 -NCT06195709 -NCT06201507 -NCT06195865 -NCT06201585 -NCT06195891 -NCT06201741 -NCT06196008 -NCT06202001 -NCT06196255 -NCT06202014 -NCT06196294 -NCT06202066 -NCT06196658 -NCT06202105 -NCT06196671 -NCT06202118 -NCT06196697 -NCT06202183 -NCT06196736 -NCT06202222 -NCT06196762 -NCT06202248 -NCT06196775 -NCT06202261 -NCT06196788 -NCT06202313 -NCT06196918 -NCT06202339 -NCT06197139 -NCT06202690 -NCT06197178 -NCT06202716 -NCT06197425 -NCT06202820 -NCT06197438 -NCT06203145 -NCT06197581 -NCT06203197 -NCT06197672 -NCT06203210 -NCT06198010 -NCT06203301 -NCT06198296 -NCT06203574 -NCT06198387 -NCT06203587 -NCT06198426 -NCT06203600 -NCT06198465 -NCT06203613 -NCT06198556 -NCT06203821 -NCT06198751 -NCT06203912 -NCT06198842 -NCT06204094 -NCT06198907 -NCT06214793 -NCT06204315 -NCT06209294 -NCT06204341 -NCT06209229 -NCT06204484 -NCT06209385 -NCT06204497 -NCT06209567 -NCT06204510 -NCT06209580 -NCT06204614 -NCT06209606 -NCT06204835 -NCT06209619 -NCT06204991 -NCT06209671 -NCT06205082 -NCT06209970 -NCT06205173 -NCT06209996 -NCT06205251 -NCT06210243 -NCT06205290 -NCT06210334 -NCT06205316 -NCT06210360 -NCT06205472 -NCT06210438 -NCT06205485 -NCT06210490 -NCT06205706 -NCT06210529 -NCT06205836 -NCT06210750 -NCT06205849 -NCT06210815 -NCT06205927 -NCT06210971 -NCT06206096 -NCT06211023 -NCT06206174 -NCT06211036 -NCT06206278 -NCT06211114 -NCT06206642 -NCT06211257 -NCT06206707 -NCT06211335 -NCT06206733 -NCT06211452 -NCT06206837 -NCT06211647 -NCT06206863 -NCT06211751 -NCT06206876 -NCT06211764 -NCT06206902 -NCT06211790 -NCT06206993 -NCT06211881 -NCT06207006 -NCT06211933 -NCT06207123 -NCT06212076 -NCT06207292 -NCT06212388 -NCT06207305 -NCT06212414 -NCT06207435 -NCT06212440 -NCT06207474 -NCT06212570 -NCT06207656 -NCT06212583 -NCT06207734 -NCT06212596 -NCT06207747 -NCT06212700 -NCT06207786 -NCT06212752 -NCT06207799 -NCT06212817 -NCT06207864 -NCT06212908 -NCT06207981 -NCT06213298 -NCT06208033 -NCT06213311 -NCT06208124 -NCT06213519 -NCT06208150 -NCT06213532 -NCT06208371 -NCT06213571 -NCT06208410 -NCT06213636 -NCT06208462 -NCT06214143 -NCT06208657 -NCT06214156 -NCT06208735 -NCT06214195 -NCT06208748 -NCT06214533 -NCT06208826 -NCT06214572 -NCT06208917 -NCT06214598 -NCT06209099 -NCT06214611 -NCT06209190 -NCT06224673 -NCT06214988 -NCT06219941 -NCT06215027 -NCT06219746 -NCT06215118 -NCT06220032 -NCT06215326 -NCT06220045 -NCT06215365 -NCT06220058 -NCT06215469 -NCT06220097 -NCT06215495 -NCT06220123 -NCT06215612 -NCT06220162 -NCT06215677 -NCT06220188 -NCT06215846 -NCT06220214 -NCT06215950 -NCT06220318 -NCT06215976 -NCT06220435 -NCT06216002 -NCT06220487 -NCT06216158 -NCT06220552 -NCT06216171 -NCT06220656 -NCT06216249 -NCT06220838 -NCT06216301 -NCT06220864 -NCT06216405 -NCT06221072 -NCT06216496 -NCT06221462 -NCT06216561 -NCT06221475 -NCT06216574 -NCT06221553 -NCT06216743 -NCT06221670 -NCT06216938 -NCT06221683 -NCT06217003 -NCT06221748 -NCT06217016 -NCT06221774 -NCT06217042 -NCT06222125 -NCT06217094 -NCT06222138 -NCT06217185 -NCT06222242 -NCT06217250 -NCT06222255 -NCT06217458 -NCT06222489 -NCT06217536 -NCT06222580 -NCT06217666 -NCT06222593 -NCT06217757 -NCT06222606 -NCT06217822 -NCT06222684 -NCT06217848 -NCT06222788 -NCT06217991 -NCT06222879 -NCT06218069 -NCT06222944 -NCT06218303 -NCT06223022 -NCT06218420 -NCT06223230 -NCT06218433 -NCT06223256 -NCT06218511 -NCT06223295 -NCT06218524 -NCT06223308 -NCT06218602 -NCT06223516 -NCT06218615 -NCT06223542 -NCT06218628 -NCT06223568 -NCT06218667 -NCT06223646 -NCT06218771 -NCT06223659 -NCT06218810 -NCT06223698 -NCT06218823 -NCT06223711 -NCT06218888 -NCT06223841 -NCT06218914 -NCT06224049 -NCT06219096 -NCT06224244 -NCT06219174 -NCT06224257 -NCT06219356 -NCT06224387 -NCT06219434 -NCT06224504 -NCT06219499 -NCT06235099 -NCT06224738 -NCT06229496 -NCT06224842 -NCT06229483 -NCT06224855 -NCT06229912 -NCT06224894 -NCT06230055 -NCT06225011 -NCT06230068 -NCT06225284 -NCT06230159 -NCT06225310 -NCT06230224 -NCT06225414 -NCT06230445 -NCT06225427 -NCT06230471 -NCT06225505 -NCT06230549 -NCT06225596 -NCT06230666 -NCT06225609 -NCT06230679 -NCT06225622 -NCT06230965 -NCT06225804 -NCT06231017 -NCT06225843 -NCT06231186 -NCT06225856 -NCT06231537 -NCT06225921 -NCT06231550 -NCT06225999 -NCT06231576 -NCT06226129 -NCT06231680 -NCT06226350 -NCT06232044 -NCT06226363 -NCT06232083 -NCT06226571 -NCT06232096 -NCT06226688 -NCT06232122 -NCT06226766 -NCT06232408 -NCT06226857 -NCT06232434 -NCT06227026 -NCT06232564 -NCT06227039 -NCT06232577 -NCT06227065 -NCT06232655 -NCT06227117 -NCT06232694 -NCT06227156 -NCT06232707 -NCT06227325 -NCT06232759 -NCT06227338 -NCT06232863 -NCT06227377 -NCT06232902 -NCT06227416 -NCT06233253 -NCT06227546 -NCT06233292 -NCT06227897 -NCT06233526 -NCT06228053 -NCT06233864 -NCT06228066 -NCT06233877 -NCT06228079 -NCT06233903 -NCT06228209 -NCT06233942 -NCT06228326 -NCT06233981 -NCT06228404 -NCT06233994 -NCT06228482 -NCT06234007 -NCT06228599 -NCT06234072 -NCT06228768 -NCT06234098 -NCT06228846 -NCT06234137 -NCT06228963 -NCT06234150 -NCT06229041 -NCT06234267 -NCT06229067 -NCT06234397 -NCT06229080 -NCT06234423 -NCT06229197 -NCT06234605 -NCT06229275 -NCT06234735 -NCT06229327 -NCT06234748 -NCT06229340 -NCT06234904 -NCT06229366 -NCT06235034 -NCT06229392 -NCT06244836 -NCT06235125 -NCT06239272 -NCT06235151 -NCT06239220 -NCT06235203 -NCT06239298 -NCT06235216 -NCT06239467 -NCT06235229 -NCT06239532 -NCT06235242 -NCT06239584 -NCT06235281 -NCT06239623 -NCT06235398 -NCT06239727 -NCT06235437 -NCT06239870 -NCT06235541 -NCT06240143 -NCT06235671 -NCT06240377 -NCT06235697 -NCT06240390 -NCT06235723 -NCT06240546 -NCT06235801 -NCT06240598 -NCT06235814 -NCT06240689 -NCT06235918 -NCT06240728 -NCT06235931 -NCT06240741 -NCT06235983 -NCT06240767 -NCT06236022 -NCT06241105 -NCT06236139 -NCT06241235 -NCT06236269 -NCT06241352 -NCT06236321 -NCT06241391 -NCT06236360 -NCT06241456 -NCT06236386 -NCT06241469 -NCT06236425 -NCT06241599 -NCT06236438 -NCT06241612 -NCT06236516 -NCT06241703 -NCT06236568 -NCT06241755 -NCT06236633 -NCT06241768 -NCT06236724 -NCT06241807 -NCT06236997 -NCT06241846 -NCT06237179 -NCT06241898 -NCT06237192 -NCT06242067 -NCT06237257 -NCT06242197 -NCT06237400 -NCT06242249 -NCT06237413 -NCT06242418 -NCT06237491 -NCT06242470 -NCT06237582 -NCT06242587 -NCT06237816 -NCT06242691 -NCT06237881 -NCT06242834 -NCT06237920 -NCT06242912 -NCT06238167 -NCT06242964 -NCT06238401 -NCT06243003 -NCT06238479 -NCT06243107 -NCT06238596 -NCT06243185 -NCT06238635 -NCT06243393 -NCT06238648 -NCT06243510 -NCT06238661 -NCT06243796 -NCT06238687 -NCT06244004 -NCT06238713 -NCT06244225 -NCT06238752 -NCT06244251 -NCT06238843 -NCT06244264 -NCT06238882 -NCT06244368 -NCT06238921 -NCT06244485 -NCT06239155 -NCT06244771 -NCT06239194 -NCT06254326 -NCT06244992 -NCT06249984 -NCT06245018 -NCT06249854 -NCT06245122 -NCT06250036 -NCT06245330 -NCT06250075 -NCT06245343 -NCT06250166 -NCT06245356 -NCT06250244 -NCT06245603 -NCT06250335 -NCT06245746 -NCT06250686 -NCT06245824 -NCT06250751 -NCT06245889 -NCT06250777 -NCT06245915 -NCT06250894 -NCT06246071 -NCT06250959 -NCT06246084 -NCT06250972 -NCT06246110 -NCT06251050 -NCT06246149 -NCT06251076 -NCT06246162 -NCT06251115 -NCT06246409 -NCT06251180 -NCT06246448 -NCT06251297 -NCT06246630 -NCT06251310 -NCT06246643 -NCT06251388 -NCT06246786 -NCT06251401 -NCT06246916 -NCT06251492 -NCT06246955 -NCT06251544 -NCT06246968 -NCT06251947 -NCT06247189 -NCT06251973 -NCT06247215 -NCT06252012 -NCT06247449 -NCT06252129 -NCT06247501 -NCT06252233 -NCT06247540 -NCT06252545 -NCT06247605 -NCT06252584 -NCT06247657 -NCT06252649 -NCT06247787 -NCT06252662 -NCT06247826 -NCT06252675 -NCT06247917 -NCT06252727 -NCT06247956 -NCT06252870 -NCT06247995 -NCT06253091 -NCT06248086 -NCT06253130 -NCT06248216 -NCT06253182 -NCT06248411 -NCT06253195 -NCT06248450 -NCT06253234 -NCT06248515 -NCT06253338 -NCT06248528 -NCT06253494 -NCT06248554 -NCT06253520 -NCT06248606 -NCT06253598 -NCT06248697 -NCT06253611 -NCT06248749 -NCT06253637 -NCT06248840 -NCT06253650 -NCT06248918 -NCT06253663 -NCT06248996 -NCT06253845 -NCT06249048 -NCT06253871 -NCT06249191 -NCT06253949 -NCT06249256 -NCT06254066 -NCT06249282 -NCT06254196 -NCT06249321 -NCT06254248 -NCT06249750 -NCT06254300 -NCT06249841 -NCT06266143 -NCT06254495 -NCT06259513 -NCT06254521 -NCT06259448 -NCT06254547 -NCT06259552 -NCT06254599 -NCT06259721 -NCT06254690 -NCT06259929 -NCT06254781 -NCT06260033 -NCT06254846 -NCT06260111 -NCT06254911 -NCT06260150 -NCT06255210 -NCT06260293 -NCT06255223 -NCT06260332 -NCT06255262 -NCT06260514 -NCT06255379 -NCT06260683 -NCT06255392 -NCT06260774 -NCT06255665 -NCT06260943 -NCT06255704 -NCT06261008 -NCT06255795 -NCT06261125 -NCT06255847 -NCT06261359 -NCT06255912 -NCT06261814 -NCT06255951 -NCT06261879 -NCT06255964 -NCT06261892 -NCT06256055 -NCT06262113 -NCT06256185 -NCT06262386 -NCT06256224 -NCT06262438 -NCT06256237 -NCT06262516 -NCT06256263 -NCT06262542 -NCT06256315 -NCT06262555 -NCT06256328 -NCT06262581 -NCT06256354 -NCT06262633 -NCT06256484 -NCT06262789 -NCT06256588 -NCT06263062 -NCT06256627 -NCT06263088 -NCT06256705 -NCT06263153 -NCT06257017 -NCT06263205 -NCT06257121 -NCT06263231 -NCT06257264 -NCT06263283 -NCT06257394 -NCT06263491 -NCT06257498 -NCT06263543 -NCT06257680 -NCT06263582 -NCT06257693 -NCT06264167 -NCT06257758 -NCT06264180 -NCT06258018 -NCT06264388 -NCT06258096 -NCT06264778 -NCT06258304 -NCT06264921 -NCT06258330 -NCT06265025 -NCT06258408 -NCT06265077 -NCT06258486 -NCT06265207 -NCT06258525 -NCT06265285 -NCT06258642 -NCT06265350 -NCT06258811 -NCT06265428 -NCT06258954 -NCT06265545 -NCT06258993 -NCT06265558 -NCT06259058 -NCT06265584 -NCT06259123 -NCT06265688 -NCT06259136 -NCT06265727 -NCT06259162 -NCT06266026 -NCT06259279 -NCT06279585 -NCT06266299 -NCT06274684 -NCT06266312 -NCT06274515 -NCT06266338 -NCT06274762 -NCT06266832 -NCT06274788 -NCT06266871 -NCT06274814 -NCT06266923 -NCT06274879 -NCT06267001 -NCT06274892 -NCT06267014 -NCT06274905 -NCT06267729 -NCT06275087 -NCT06267807 -NCT06275126 -NCT06268015 -NCT06275165 -NCT06268106 -NCT06275321 -NCT06268210 -NCT06275360 -NCT06268327 -NCT06275425 -NCT06268405 -NCT06275737 -NCT06268574 -NCT06275919 -NCT06268600 -NCT06275958 -NCT06268613 -NCT06275997 -NCT06268652 -NCT06276283 -NCT06268665 -NCT06276465 -NCT06268938 -NCT06276491 -NCT06269198 -NCT06276530 -NCT06269211 -NCT06276686 -NCT06269445 -NCT06276868 -NCT06269536 -NCT06276933 -NCT06269744 -NCT06276946 -NCT06269978 -NCT06277011 -NCT06270017 -NCT06277050 -NCT06270082 -NCT06277141 -NCT06270355 -NCT06277154 -NCT06270394 -NCT06277180 -NCT06270628 -NCT06277219 -NCT06270667 -NCT06277674 -NCT06270706 -NCT06277791 -NCT06270888 -NCT06277804 -NCT06271044 -NCT06277947 -NCT06271057 -NCT06278454 -NCT06271252 -NCT06278493 -NCT06271356 -NCT06278506 -NCT06271421 -NCT06278545 -NCT06271551 -NCT06278558 -NCT06271603 -NCT06278701 -NCT06271616 -NCT06278857 -NCT06271837 -NCT06278870 -NCT06271941 -NCT06278883 -NCT06272162 -NCT06278896 -NCT06272461 -NCT06279013 -NCT06272617 -NCT06279026 -NCT06273501 -NCT06279130 -NCT06273553 -NCT06279299 -NCT06273800 -NCT06279338 -NCT06273852 -NCT06279351 -NCT06274034 -NCT06279364 -NCT06274047 -NCT06279403 -NCT06274190 -NCT06279494 -NCT06274437 -NCT06293157 -NCT06279754 -NCT06285149 -NCT06279767 -NCT06285136 -NCT06279832 -NCT06285370 -NCT06280105 -NCT06285422 -NCT06280196 -NCT06285890 -NCT06280300 -NCT06286150 -NCT06280495 -NCT06286332 -NCT06280508 -NCT06286462 -NCT06280612 -NCT06286592 -NCT06280690 -NCT06286956 -NCT06280781 -NCT06287229 -NCT06280885 -NCT06287398 -NCT06280924 -NCT06287463 -NCT06281080 -NCT06287528 -NCT06281145 -NCT06287541 -NCT06281210 -NCT06287593 -NCT06281379 -NCT06287775 -NCT06281405 -NCT06287918 -NCT06281678 -NCT06287944 -NCT06281769 -NCT06288113 -NCT06281847 -NCT06288191 -NCT06281860 -NCT06288360 -NCT06281886 -NCT06288373 -NCT06281925 -NCT06288620 -NCT06281964 -NCT06289023 -NCT06282185 -NCT06289049 -NCT06282224 -NCT06289062 -NCT06282445 -NCT06289517 -NCT06282471 -NCT06289673 -NCT06282497 -NCT06289751 -NCT06282536 -NCT06289803 -NCT06282562 -NCT06289894 -NCT06282575 -NCT06289959 -NCT06282588 -NCT06290193 -NCT06282809 -NCT06290388 -NCT06282874 -NCT06290427 -NCT06282978 -NCT06290466 -NCT06283121 -NCT06290505 -NCT06283134 -NCT06290622 -NCT06283251 -NCT06290687 -NCT06283303 -NCT06290765 -NCT06283719 -NCT06290817 -NCT06284031 -NCT06291064 -NCT06284122 -NCT06291220 -NCT06284226 -NCT06291610 -NCT06284304 -NCT06291662 -NCT06284317 -NCT06291688 -NCT06284330 -NCT06291896 -NCT06284408 -NCT06291987 -NCT06284460 -NCT06292286 -NCT06284486 -NCT06292689 -NCT06284564 -NCT06292845 -NCT06284590 -NCT06292858 -NCT06284746 -NCT06292975 -NCT06285019 -NCT06293014 -NCT06285097 -NCT06305299 -NCT06293508 -NCT06299839 -NCT06293586 -NCT06299761 -NCT06293625 -NCT06299852 -NCT06293651 -NCT06299891 -NCT06293690 -NCT06300099 -NCT06293833 -NCT06300177 -NCT06293898 -NCT06300411 -NCT06294418 -NCT06300424 -NCT06294548 -NCT06300463 -NCT06294561 -NCT06300489 -NCT06294574 -NCT06300502 -NCT06295094 -NCT06300515 -NCT06295159 -NCT06300528 -NCT06295367 -NCT06300879 -NCT06295432 -NCT06301165 -NCT06295497 -NCT06301295 -NCT06295549 -NCT06301308 -NCT06295731 -NCT06301386 -NCT06295744 -NCT06301399 -NCT06295809 -NCT06301425 -NCT06295926 -NCT06301789 -NCT06295952 -NCT06301828 -NCT06296056 -NCT06302062 -NCT06296121 -NCT06302140 -NCT06296147 -NCT06302361 -NCT06296368 -NCT06302400 -NCT06296563 -NCT06302426 -NCT06296641 -NCT06302465 -NCT06296680 -NCT06302569 -NCT06296706 -NCT06302595 -NCT06296745 -NCT06302621 -NCT06297226 -NCT06302751 -NCT06297265 -NCT06303154 -NCT06297369 -NCT06303167 -NCT06297473 -NCT06303193 -NCT06297512 -NCT06303505 -NCT06297525 -NCT06303583 -NCT06297642 -NCT06303622 -NCT06297811 -NCT06303687 -NCT06297902 -NCT06303713 -NCT06297941 -NCT06304103 -NCT06298058 -NCT06304350 -NCT06298084 -NCT06304441 -NCT06298149 -NCT06304545 -NCT06298266 -NCT06304571 -NCT06298357 -NCT06304597 -NCT06298734 -NCT06304610 -NCT06298877 -NCT06304636 -NCT06298916 -NCT06304766 -NCT06298968 -NCT06304805 -NCT06299124 -NCT06304857 -NCT06299163 -NCT06304974 -NCT06299202 -NCT06304987 -NCT06299371 -NCT06305117 -NCT06299462 -NCT06305247 -NCT06299722 -NCT06316856 -NCT06305312 -NCT06311357 -NCT06305364 -NCT06311279 -NCT06305598 -NCT06311396 -NCT06305715 -NCT06311578 -NCT06305741 -NCT06311721 -NCT06305754 -NCT06311851 -NCT06305767 -NCT06311916 -NCT06305832 -NCT06311929 -NCT06305884 -NCT06311942 -NCT06305910 -NCT06311955 -NCT06305962 -NCT06311968 -NCT06306456 -NCT06311981 -NCT06306560 -NCT06312137 -NCT06306612 -NCT06312150 -NCT06306638 -NCT06312176 -NCT06306755 -NCT06312670 -NCT06306846 -NCT06312826 -NCT06307015 -NCT06312917 -NCT06307054 -NCT06312969 -NCT06307080 -NCT06312982 -NCT06307093 -NCT06313073 -NCT06307249 -NCT06313086 -NCT06307418 -NCT06313190 -NCT06307431 -NCT06313203 -NCT06307470 -NCT06313437 -NCT06307496 -NCT06313450 -NCT06307548 -NCT06313463 -NCT06307600 -NCT06313554 -NCT06307704 -NCT06313567 -NCT06307795 -NCT06313593 -NCT06307925 -NCT06313775 -NCT06308029 -NCT06313801 -NCT06308120 -NCT06313853 -NCT06308263 -NCT06313957 -NCT06308406 -NCT06313970 -NCT06308419 -NCT06313983 -NCT06308575 -NCT06313996 -NCT06308588 -NCT06314022 -NCT06308796 -NCT06314087 -NCT06308822 -NCT06314334 -NCT06308913 -NCT06314373 -NCT06308939 -NCT06314672 -NCT06309225 -NCT06314698 -NCT06309290 -NCT06314711 -NCT06309485 -NCT06314828 -NCT06309732 -NCT06315010 -NCT06310330 -NCT06315257 -NCT06310369 -NCT06315296 -NCT06310382 -NCT06315309 -NCT06310473 -NCT06315491 -NCT06310564 -NCT06315686 -NCT06310590 -NCT06315855 -NCT06310655 -NCT06315881 -NCT06310993 -NCT06316427 -NCT06311214 -NCT06316531 -NCT06311227 -NCT06328387 -NCT06316882 -NCT06322888 -NCT06316908 -NCT06322745 -NCT06316960 -NCT06323044 -NCT06317181 -NCT06323148 -NCT06317246 -NCT06323239 -NCT06317272 -NCT06323291 -NCT06317298 -NCT06323369 -NCT06317311 -NCT06323421 -NCT06317389 -NCT06323460 -NCT06317649 -NCT06323473 -NCT06317662 -NCT06323525 -NCT06318182 -NCT06323707 -NCT06318221 -NCT06324058 -NCT06318273 -NCT06324110 -NCT06318286 -NCT06324240 -NCT06318338 -NCT06324266 -NCT06318559 -NCT06324357 -NCT06318702 -NCT06324409 -NCT06318871 -NCT06324721 -NCT06318884 -NCT06324877 -NCT06318897 -NCT06324994 -NCT06319027 -NCT06325046 -NCT06319157 -NCT06325683 -NCT06319196 -NCT06325748 -NCT06319313 -NCT06325774 -NCT06319456 -NCT06325787 -NCT06319794 -NCT06325995 -NCT06319820 -NCT06326008 -NCT06319950 -NCT06326190 -NCT06319963 -NCT06326268 -NCT06320067 -NCT06326294 -NCT06320080 -NCT06326346 -NCT06320301 -NCT06326411 -NCT06320353 -NCT06326437 -NCT06320405 -NCT06326463 -NCT06320990 -NCT06326502 -NCT06321016 -NCT06326567 -NCT06321068 -NCT06326697 -NCT06321081 -NCT06326736 -NCT06321250 -NCT06326957 -NCT06321289 -NCT06327048 -NCT06321484 -NCT06327074 -NCT06321666 -NCT06327139 -NCT06321692 -NCT06327438 -NCT06321744 -NCT06327451 -NCT06321874 -NCT06327477 -NCT06321913 -NCT06327490 -NCT06322095 -NCT06327685 -NCT06322108 -NCT06327698 -NCT06322316 -NCT06327932 -NCT06322329 -NCT06327997 -NCT06322563 -NCT06328036 -NCT06322576 -NCT06328049 -NCT06322602 -NCT06328179 -NCT06322615 -NCT06328361 -NCT06322693 -NCT06339424 -NCT06328439 -NCT06333392 -NCT06328465 -NCT06333314 -NCT06328491 -NCT06333509 -NCT06328673 -NCT06333678 -NCT06328686 -NCT06333769 -NCT06328699 -NCT06333821 -NCT06328738 -NCT06333899 -NCT06328751 -NCT06333951 -NCT06329206 -NCT06334380 -NCT06329479 -NCT06334432 -NCT06329570 -NCT06334458 -NCT06329830 -NCT06334757 -NCT06329869 -NCT06334783 -NCT06329895 -NCT06334965 -NCT06329908 -NCT06334991 -NCT06329947 -NCT06335069 -NCT06329973 -NCT06335147 -NCT06329999 -NCT06335355 -NCT06330012 -NCT06335420 -NCT06330038 -NCT06335550 -NCT06330064 -NCT06335667 -NCT06330298 -NCT06335693 -NCT06330337 -NCT06335745 -NCT06330441 -NCT06335914 -NCT06330805 -NCT06335927 -NCT06330870 -NCT06336070 -NCT06330909 -NCT06336148 -NCT06331013 -NCT06336291 -NCT06331117 -NCT06336395 -NCT06331169 -NCT06336538 -NCT06331299 -NCT06336707 -NCT06331403 -NCT06336902 -NCT06331455 -NCT06336941 -NCT06331468 -NCT06336954 -NCT06331559 -NCT06337084 -NCT06331585 -NCT06337162 -NCT06331598 -NCT06337214 -NCT06331650 -NCT06337318 -NCT06331793 -NCT06337331 -NCT06331845 -NCT06337552 -NCT06331962 -NCT06337630 -NCT06331975 -NCT06337695 -NCT06332079 -NCT06337942 -NCT06332092 -NCT06338020 -NCT06332170 -NCT06338215 -NCT06332274 -NCT06338436 -NCT06332287 -NCT06338475 -NCT06332300 -NCT06338592 -NCT06332430 -NCT06338657 -NCT06332508 -NCT06338683 -NCT06332573 -NCT06339060 -NCT06332664 -NCT06339216 -NCT06332716 -NCT06339242 -NCT06332755 -NCT06339281 -NCT06332950 -NCT06339372 -NCT06333262 -NCT06349148 -NCT06339619 -NCT06344130 -NCT06339775 -NCT06344052 -NCT06339827 -NCT06344156 -NCT06340204 -NCT06344351 -NCT06340230 -NCT06344715 -NCT06340503 -NCT06344923 -NCT06340516 -NCT06345001 -NCT06340568 -NCT06345027 -NCT06340620 -NCT06345079 -NCT06340646 -NCT06345287 -NCT06340711 -NCT06345300 -NCT06340737 -NCT06345365 -NCT06340815 -NCT06345482 -NCT06340906 -NCT06345534 -NCT06341114 -NCT06345599 -NCT06341257 -NCT06345729 -NCT06341270 -NCT06345924 -NCT06341296 -NCT06346041 -NCT06341309 -NCT06346054 -NCT06341322 -NCT06346067 -NCT06341335 -NCT06346080 -NCT06341400 -NCT06346093 -NCT06341478 -NCT06346197 -NCT06341530 -NCT06346366 -NCT06341556 -NCT06346392 -NCT06341595 -NCT06346418 -NCT06341621 -NCT06346470 -NCT06341647 -NCT06346782 -NCT06341660 -NCT06346808 -NCT06341712 -NCT06346912 -NCT06341764 -NCT06347068 -NCT06341842 -NCT06347185 -NCT06341855 -NCT06347198 -NCT06341894 -NCT06347354 -NCT06341907 -NCT06347393 -NCT06341998 -NCT06347458 -NCT06342037 -NCT06347653 -NCT06342167 -NCT06347705 -NCT06342297 -NCT06347731 -NCT06342336 -NCT06347757 -NCT06342453 -NCT06347926 -NCT06342466 -NCT06347965 -NCT06342908 -NCT06348030 -NCT06342986 -NCT06348108 -NCT06343038 -NCT06348134 -NCT06343064 -NCT06348147 -NCT06343077 -NCT06348199 -NCT06343090 -NCT06348264 -NCT06343116 -NCT06348290 -NCT06343272 -NCT06348719 -NCT06343311 -NCT06348797 -NCT06343376 -NCT06348888 -NCT06343402 -NCT06348927 -NCT06343935 -NCT06348940 -NCT06343948 -NCT06349044 -NCT06343987 -NCT06360211 -NCT06349278 -NCT06354738 -NCT06349317 -NCT06354595 -NCT06349408 -NCT06354959 -NCT06349512 -NCT06355024 -NCT06349590 -NCT06355037 -NCT06349668 -NCT06355076 -NCT06349811 -NCT06355401 -NCT06349837 -NCT06355427 -NCT06349889 -NCT06355440 -NCT06349967 -NCT06355518 -NCT06349980 -NCT06355583 -NCT06350006 -NCT06355609 -NCT06350097 -NCT06355622 -NCT06350162 -NCT06355700 -NCT06350318 -NCT06355739 -NCT06350370 -NCT06355843 -NCT06350500 -NCT06355908 -NCT06350786 -NCT06355921 -NCT06350825 -NCT06356129 -NCT06350838 -NCT06356155 -NCT06351020 -NCT06356311 -NCT06351046 -NCT06356571 -NCT06351085 -NCT06356584 -NCT06351306 -NCT06356597 -NCT06351332 -NCT06356688 -NCT06351371 -NCT06356701 -NCT06351475 -NCT06356714 -NCT06351631 -NCT06356779 -NCT06351644 -NCT06356883 -NCT06351904 -NCT06356922 -NCT06352073 -NCT06357182 -NCT06352242 -NCT06357377 -NCT06352359 -NCT06357416 -NCT06352866 -NCT06357533 -NCT06353022 -NCT06357585 -NCT06353061 -NCT06357598 -NCT06353126 -NCT06357676 -NCT06353152 -NCT06357858 -NCT06353178 -NCT06357975 -NCT06353360 -NCT06357988 -NCT06353386 -NCT06358053 -NCT06353581 -NCT06358430 -NCT06353646 -NCT06358469 -NCT06353685 -NCT06358573 -NCT06353698 -NCT06358677 -NCT06353906 -NCT06359054 -NCT06353997 -NCT06359275 -NCT06354036 -NCT06359379 -NCT06354049 -NCT06359431 -NCT06354114 -NCT06359509 -NCT06354140 -NCT06359821 -NCT06354218 -NCT06359847 -NCT06354231 -NCT06359860 -NCT06354387 -NCT06359964 -NCT06354478 -NCT06360042 -NCT06354530 -NCT06370416 -NCT06360354 -NCT06364696 -NCT06360575 -NCT06364631 -NCT06360588 -NCT06364787 -NCT06360627 -NCT06364800 -NCT06360653 -NCT06364826 -NCT06360718 -NCT06364904 -NCT06360809 -NCT06364917 -NCT06360822 -NCT06364956 -NCT06360978 -NCT06365008 -NCT06361030 -NCT06365450 -NCT06361056 -NCT06365619 -NCT06361121 -NCT06365788 -NCT06361264 -NCT06365840 -NCT06361316 -NCT06365853 -NCT06361329 -NCT06365866 -NCT06361641 -NCT06365918 -NCT06361758 -NCT06365970 -NCT06361810 -NCT06366347 -NCT06361862 -NCT06366451 -NCT06361888 -NCT06366490 -NCT06361927 -NCT06366516 -NCT06361940 -NCT06366685 -NCT06361979 -NCT06366789 -NCT06362070 -NCT06366945 -NCT06362096 -NCT06367075 -NCT06362252 -NCT06367088 -NCT06362291 -NCT06367114 -NCT06362304 -NCT06367257 -NCT06362317 -NCT06367270 -NCT06362369 -NCT06367374 -NCT06362395 -NCT06367556 -NCT06362616 -NCT06367751 -NCT06362694 -NCT06367959 -NCT06362902 -NCT06367972 -NCT06362980 -NCT06368063 -NCT06362993 -NCT06368141 -NCT06363006 -NCT06368167 -NCT06363162 -NCT06368310 -NCT06363201 -NCT06368414 -NCT06363266 -NCT06368817 -NCT06363552 -NCT06368921 -NCT06363591 -NCT06368934 -NCT06363708 -NCT06368947 -NCT06363734 -NCT06368960 -NCT06363773 -NCT06369155 -NCT06363825 -NCT06369246 -NCT06363994 -NCT06369259 -NCT06364007 -NCT06369285 -NCT06364033 -NCT06369597 -NCT06364046 -NCT06369610 -NCT06364267 -NCT06369831 -NCT06364384 -NCT06370000 -NCT06364410 -NCT06370026 -NCT06364423 -NCT06370065 -NCT06364501 -NCT06370234 -NCT06364553 -NCT06381570 -NCT06370663 -NCT06376578 -NCT06370754 -NCT06376565 -NCT06370871 -NCT06376604 -NCT06371118 -NCT06376669 -NCT06371157 -NCT06376682 -NCT06371274 -NCT06376721 -NCT06371469 -NCT06377033 -NCT06371508 -NCT06377059 -NCT06371534 -NCT06377111 -NCT06371586 -NCT06377124 -NCT06371625 -NCT06377267 -NCT06371716 -NCT06377371 -NCT06371768 -NCT06377501 -NCT06371807 -NCT06377540 -NCT06371911 -NCT06377566 -NCT06371989 -NCT06377683 -NCT06372223 -NCT06377696 -NCT06372236 -NCT06377722 -NCT06372301 -NCT06377735 -NCT06372574 -NCT06377852 -NCT06372626 -NCT06378047 -NCT06372717 -NCT06378177 -NCT06373133 -NCT06378190 -NCT06373380 -NCT06378242 -NCT06373406 -NCT06378346 -NCT06373471 -NCT06378437 -NCT06373497 -NCT06378593 -NCT06374160 -NCT06378658 -NCT06374173 -NCT06378749 -NCT06374251 -NCT06378866 -NCT06374459 -NCT06378892 -NCT06374485 -NCT06379087 -NCT06374602 -NCT06379113 -NCT06374888 -NCT06379191 -NCT06374901 -NCT06379217 -NCT06375044 -NCT06379282 -NCT06375109 -NCT06379360 -NCT06375187 -NCT06379399 -NCT06375317 -NCT06379451 -NCT06375486 -NCT06379698 -NCT06375564 -NCT06379880 -NCT06375642 -NCT06380101 -NCT06375707 -NCT06380309 -NCT06375733 -NCT06380348 -NCT06375915 -NCT06380361 -NCT06375928 -NCT06380387 -NCT06375954 -NCT06380660 -NCT06375967 -NCT06380751 -NCT06376136 -NCT06380816 -NCT06376162 -NCT06380881 -NCT06376188 -NCT06381024 -NCT06376253 -NCT06381050 -NCT06376292 -NCT06381141 -NCT06376344 -NCT06381154 -NCT06376357 -NCT06381557 -NCT06376526 -NCT06390956 -NCT06381726 -NCT06386198 -NCT06381817 -NCT06386146 -NCT06381830 -NCT06386302 -NCT06381960 -NCT06386315 -NCT06382116 -NCT06386432 -NCT06382129 -NCT06386653 -NCT06382142 -NCT06386705 -NCT06382168 -NCT06386861 -NCT06382818 -NCT06386887 -NCT06382948 -NCT06387017 -NCT06383052 -NCT06387056 -NCT06383338 -NCT06387069 -NCT06383507 -NCT06387121 -NCT06383520 -NCT06387134 -NCT06383533 -NCT06387238 -NCT06383559 -NCT06387342 -NCT06383598 -NCT06387368 -NCT06383663 -NCT06387420 -NCT06383728 -NCT06387485 -NCT06383767 -NCT06387628 -NCT06383780 -NCT06387810 -NCT06383884 -NCT06388018 -NCT06383988 -NCT06388031 -NCT06384053 -NCT06388135 -NCT06384222 -NCT06388252 -NCT06384235 -NCT06388304 -NCT06384248 -NCT06388369 -NCT06384261 -NCT06388720 -NCT06384300 -NCT06388733 -NCT06384352 -NCT06389006 -NCT06384417 -NCT06389123 -NCT06384482 -NCT06389201 -NCT06384560 -NCT06389292 -NCT06384677 -NCT06389305 -NCT06384807 -NCT06389357 -NCT06384820 -NCT06389422 -NCT06384950 -NCT06389448 -NCT06385080 -NCT06389500 -NCT06385262 -NCT06389526 -NCT06385288 -NCT06389591 -NCT06385418 -NCT06389682 -NCT06385483 -NCT06389695 -NCT06385496 -NCT06389760 -NCT06385522 -NCT06389786 -NCT06385548 -NCT06389799 -NCT06385652 -NCT06389981 -NCT06385665 -NCT06390059 -NCT06385678 -NCT06390111 -NCT06385691 -NCT06390241 -NCT06385730 -NCT06390319 -NCT06385808 -NCT06390774 -NCT06385847 -NCT06390826 -NCT06385873 -NCT06390839 -NCT06385925 -NCT06390852 -NCT06385990 -NCT06390865 -NCT06386107 -NCT06401824 -NCT06390982 -NCT06395935 -NCT06390995 -NCT06395896 -NCT06391008 -NCT06396065 -NCT06391034 -NCT06396091 -NCT06391099 -NCT06396481 -NCT06391190 -NCT06396598 -NCT06391242 -NCT06396611 -NCT06391385 -NCT06396637 -NCT06391775 -NCT06396806 -NCT06391814 -NCT06397001 -NCT06391892 -NCT06397027 -NCT06391905 -NCT06397040 -NCT06391918 -NCT06397222 -NCT06391944 -NCT06397235 -NCT06392009 -NCT06397430 -NCT06392295 -NCT06397560 -NCT06392399 -NCT06397573 -NCT06392477 -NCT06397651 -NCT06392737 -NCT06397703 -NCT06392789 -NCT06397963 -NCT06392841 -NCT06398028 -NCT06392971 -NCT06398067 -NCT06393166 -NCT06398314 -NCT06393335 -NCT06398405 -NCT06393361 -NCT06398418 -NCT06393374 -NCT06398444 -NCT06393400 -NCT06398457 -NCT06393712 -NCT06398470 -NCT06393738 -NCT06398587 -NCT06393751 -NCT06398613 -NCT06393816 -NCT06398639 -NCT06393985 -NCT06398795 -NCT06394011 -NCT06398899 -NCT06394128 -NCT06399029 -NCT06394258 -NCT06399276 -NCT06394297 -NCT06399315 -NCT06394414 -NCT06399393 -NCT06394492 -NCT06399419 -NCT06394570 -NCT06399640 -NCT06394622 -NCT06399757 -NCT06394661 -NCT06400160 -NCT06394674 -NCT06400225 -NCT06394713 -NCT06400238 -NCT06394791 -NCT06400251 -NCT06394804 -NCT06400264 -NCT06395064 -NCT06400472 -NCT06395090 -NCT06400485 -NCT06395103 -NCT06400563 -NCT06395337 -NCT06400849 -NCT06395402 -NCT06401005 -NCT06395441 -NCT06401174 -NCT06395506 -NCT06401330 -NCT06395519 -NCT06401356 -NCT06395753 -NCT06401447 -NCT06395844 -NCT06401603 -NCT06395870 -NCT06413680 -NCT06401980 -NCT06408194 -NCT06402188 -NCT06408168 -NCT06402201 -NCT06408220 -NCT06402331 -NCT06408298 -NCT06402357 -NCT06408428 -NCT06402383 -NCT06408597 -NCT06402435 -NCT06408623 -NCT06402552 -NCT06408688 -NCT06402708 -NCT06409065 -NCT06402864 -NCT06409195 -NCT06403111 -NCT06409390 -NCT06403436 -NCT06409403 -NCT06403709 -NCT06409429 -NCT06403735 -NCT06409637 -NCT06403878 -NCT06409767 -NCT06404281 -NCT06409910 -NCT06404463 -NCT06409936 -NCT06404528 -NCT06410092 -NCT06404671 -NCT06410131 -NCT06404697 -NCT06410209 -NCT06404736 -NCT06410248 -NCT06404840 -NCT06410534 -NCT06404905 -NCT06410625 -NCT06404983 -NCT06410651 -NCT06405061 -NCT06410703 -NCT06405113 -NCT06410716 -NCT06405139 -NCT06410833 -NCT06405217 -NCT06411171 -NCT06405230 -NCT06411301 -NCT06405425 -NCT06411457 -NCT06405490 -NCT06411600 -NCT06405568 -NCT06411678 -NCT06405685 -NCT06411691 -NCT06405776 -NCT06411756 -NCT06405828 -NCT06411795 -NCT06406127 -NCT06411821 -NCT06406166 -NCT06411834 -NCT06406244 -NCT06411938 -NCT06406322 -NCT06412068 -NCT06406426 -NCT06412107 -NCT06406465 -NCT06412120 -NCT06406556 -NCT06412133 -NCT06406608 -NCT06412198 -NCT06406634 -NCT06412341 -NCT06406660 -NCT06412458 -NCT06406673 -NCT06412510 -NCT06406803 -NCT06412575 -NCT06406816 -NCT06412692 -NCT06406829 -NCT06412952 -NCT06406868 -NCT06413017 -NCT06407037 -NCT06413095 -NCT06407310 -NCT06413342 -NCT06407401 -NCT06413498 -NCT06407947 -NCT06413615 -NCT06408038 -NCT06413628 -NCT06408116 -NCT06422858 -NCT06413706 -NCT06418594 -NCT06413745 -NCT06418516 -NCT06413888 -NCT06418659 -NCT06413953 -NCT06418724 -NCT06413992 -NCT06418750 -NCT06414122 -NCT06418776 -NCT06414148 -NCT06418789 -NCT06414317 -NCT06418945 -NCT06414421 -NCT06419023 -NCT06414434 -NCT06419140 -NCT06414460 -NCT06419179 -NCT06414577 -NCT06419244 -NCT06414590 -NCT06419348 -NCT06414733 -NCT06419361 -NCT06414902 -NCT06419621 -NCT06414915 -NCT06419634 -NCT06415032 -NCT06419673 -NCT06415162 -NCT06419946 -NCT06415266 -NCT06420063 -NCT06415318 -NCT06420076 -NCT06415396 -NCT06420089 -NCT06415487 -NCT06420115 -NCT06415500 -NCT06420193 -NCT06415656 -NCT06420206 -NCT06415669 -NCT06420258 -NCT06415708 -NCT06420349 -NCT06415851 -NCT06420440 -NCT06415903 -NCT06420609 -NCT06416007 -NCT06420726 -NCT06416085 -NCT06420908 -NCT06416150 -NCT06420973 -NCT06416319 -NCT06421142 -NCT06416358 -NCT06421155 -NCT06416410 -NCT06421220 -NCT06416436 -NCT06421285 -NCT06416696 -NCT06421298 -NCT06416748 -NCT06421324 -NCT06416774 -NCT06421376 -NCT06416852 -NCT06421532 -NCT06416930 -NCT06421610 -NCT06416943 -NCT06421649 -NCT06417008 -NCT06421675 -NCT06417190 -NCT06421935 -NCT06417281 -NCT06421948 -NCT06417294 -NCT06421974 -NCT06417476 -NCT06422143 -NCT06417554 -NCT06422156 -NCT06417606 -NCT06422312 -NCT06417658 -NCT06422403 -NCT06417736 -NCT06422455 -NCT06417814 -NCT06422520 -NCT06418061 -NCT06422533 -NCT06418087 -NCT06422637 -NCT06418113 -NCT06422702 -NCT06418126 -NCT06422806 -NCT06418477 -NCT06433609 -NCT06422936 -NCT06428331 -NCT06422949 -NCT06428045 -NCT06423170 -NCT06428396 -NCT06423326 -NCT06428409 -NCT06423690 -NCT06428422 -NCT06423885 -NCT06428487 -NCT06423911 -NCT06428500 -NCT06423937 -NCT06428682 -NCT06423963 -NCT06428708 -NCT06424054 -NCT06428721 -NCT06424067 -NCT06429046 -NCT06424080 -NCT06429098 -NCT06424197 -NCT06429150 -NCT06424301 -NCT06429189 -NCT06424340 -NCT06429449 -NCT06424522 -NCT06429514 -NCT06424626 -NCT06429696 -NCT06424665 -NCT06429761 -NCT06424717 -NCT06429813 -NCT06424821 -NCT06429839 -NCT06424873 -NCT06429865 -NCT06424899 -NCT06429878 -NCT06425133 -NCT06429891 -NCT06425146 -NCT06429904 -NCT06425224 -NCT06430112 -NCT06425276 -NCT06430177 -NCT06425302 -NCT06430346 -NCT06425926 -NCT06430372 -NCT06425991 -NCT06430437 -NCT06426056 -NCT06430502 -NCT06426511 -NCT06430515 -NCT06426654 -NCT06430541 -NCT06426680 -NCT06430658 -NCT06426745 -NCT06430736 -NCT06426797 -NCT06430749 -NCT06426810 -NCT06430827 -NCT06426927 -NCT06430840 -NCT06426992 -NCT06430866 -NCT06427044 -NCT06431243 -NCT06427057 -NCT06431490 -NCT06427213 -NCT06431529 -NCT06427226 -NCT06431594 -NCT06427239 -NCT06431633 -NCT06427252 -NCT06431685 -NCT06427291 -NCT06432036 -NCT06427330 -NCT06432075 -NCT06427369 -NCT06432426 -NCT06427447 -NCT06432478 -NCT06427460 -NCT06432556 -NCT06427473 -NCT06432972 -NCT06427798 -NCT06432998 -NCT06427811 -NCT06433063 -NCT06427824 -NCT06433219 -NCT06427941 -NCT06433258 -NCT06427954 -NCT06433362 -NCT06428019 -NCT06444412 -NCT06433726 -NCT06439225 -NCT06433947 -NCT06438939 -NCT06434064 -NCT06439420 -NCT06434077 -NCT06439433 -NCT06434090 -NCT06439485 -NCT06434103 -NCT06439550 -NCT06434350 -NCT06439589 -NCT06434376 -NCT06439693 -NCT06434402 -NCT06439706 -NCT06434467 -NCT06439771 -NCT06434480 -NCT06439784 -NCT06434493 -NCT06439836 -NCT06434597 -NCT06439888 -NCT06434610 -NCT06439914 -NCT06434649 -NCT06439979 -NCT06434662 -NCT06440005 -NCT06434740 -NCT06440057 -NCT06434753 -NCT06440135 -NCT06434896 -NCT06440187 -NCT06434909 -NCT06440616 -NCT06435104 -NCT06440811 -NCT06435117 -NCT06440850 -NCT06435260 -NCT06440902 -NCT06435351 -NCT06440954 -NCT06435429 -NCT06440993 -NCT06435455 -NCT06441019 -NCT06435546 -NCT06441045 -NCT06435559 -NCT06441084 -NCT06435741 -NCT06441097 -NCT06435871 -NCT06441110 -NCT06435910 -NCT06441292 -NCT06435975 -NCT06441331 -NCT06436144 -NCT06441344 -NCT06436157 -NCT06441487 -NCT06436300 -NCT06441513 -NCT06436612 -NCT06441565 -NCT06436651 -NCT06441747 -NCT06436885 -NCT06441773 -NCT06436976 -NCT06441851 -NCT06437288 -NCT06441890 -NCT06437353 -NCT06441994 -NCT06437496 -NCT06442475 -NCT06437509 -NCT06442605 -NCT06437522 -NCT06442709 -NCT06437574 -NCT06442748 -NCT06437678 -NCT06442891 -NCT06437977 -NCT06443047 -NCT06438055 -NCT06443203 -NCT06438250 -NCT06443359 -NCT06438367 -NCT06443489 -NCT06438588 -NCT06443632 -NCT06438614 -NCT06443671 -NCT06438627 -NCT06443710 -NCT06438783 -NCT06444009 -NCT06438796 -NCT06444269 -NCT06438822 -NCT06455735 -NCT06444815 -NCT06450548 -NCT06445062 -NCT06450314 -NCT06445114 -NCT06450574 -NCT06445140 -NCT06450821 -NCT06445166 -NCT06450873 -NCT06445192 -NCT06451003 -NCT06445257 -NCT06451211 -NCT06445400 -NCT06451263 -NCT06445517 -NCT06451302 -NCT06445738 -NCT06451445 -NCT06445803 -NCT06451497 -NCT06445881 -NCT06451536 -NCT06445907 -NCT06451614 -NCT06445972 -NCT06451861 -NCT06446050 -NCT06452004 -NCT06446115 -NCT06452160 -NCT06446128 -NCT06452277 -NCT06446154 -NCT06452394 -NCT06446206 -NCT06452433 -NCT06446388 -NCT06452602 -NCT06446557 -NCT06452706 -NCT06446570 -NCT06453044 -NCT06446648 -NCT06453486 -NCT06446661 -NCT06453590 -NCT06446713 -NCT06453642 -NCT06446726 -NCT06453655 -NCT06446882 -NCT06453785 -NCT06447090 -NCT06453889 -NCT06447103 -NCT06453902 -NCT06447376 -NCT06453993 -NCT06447623 -NCT06454071 -NCT06447636 -NCT06454097 -NCT06447662 -NCT06454175 -NCT06447987 -NCT06454201 -NCT06448013 -NCT06454266 -NCT06448286 -NCT06454383 -NCT06448312 -NCT06454409 -NCT06448351 -NCT06454435 -NCT06448364 -NCT06454448 -NCT06448572 -NCT06454578 -NCT06448754 -NCT06454864 -NCT06448910 -NCT06454890 -NCT06449027 -NCT06454968 -NCT06449209 -NCT06455046 -NCT06449222 -NCT06455072 -NCT06449313 -NCT06455124 -NCT06449417 -NCT06455189 -NCT06449482 -NCT06455254 -NCT06449586 -NCT06455358 -NCT06449664 -NCT06455371 -NCT06449781 -NCT06455410 -NCT06449937 -NCT06455592 -NCT06450041 -NCT06455605 -NCT06450080 -NCT06455657 -NCT06450106 -NCT06455722 -NCT06450171 -NL63555.031.17 -NCT06455761 -NL50519.042.14 -NCT06455904 -NL50400.031.14 -NCT06455917 -NL50577.031.14 -NCT06456125 -NL50610.031.14 -NCT06456138 -NL50842.031.15 -NCT06456203 -NL51422.031.14 -NCT06456229 -NL51468.031.14 -NCT06456346 -NL52028.031.14 -NCT06456359 -NL52341.100.15 -NCT06456463 -NL52499.031.15 -NCT06456515 -NL52708.018.15 -NCT06456528 -NL53062.031.15 -NCT06456723 -NL54248.018.15 -NCT06456892 -NL54421.031.15 -NCT06457269 -NL54778.031.15 -NCT06457503 -NL56083.031.16 -NCT06457789 -NL56181.031.15 -NCT06457906 -NL56647.031.16 -NCT06457919 -NL56664.029.16 -NCT06457997 -NL56780.058.16 -NCT06458036 -NL56864.031.16 -NCT06458049 -NL57251.031.16 -NCT06458062 -NL57267.031.16 -NCT06458413 -NL57447.056.16 -NCT06458439 -NL57471.031.16 -NCT06458517 -NL57770.031.16 -NL14635.031.06 -NL57794.031.16 -NL23017.031.08 -NL58037.031.16 -NL25610.058.08 -NL58048.031.16 -NL26128.048.08 -NL58084.031.16 -NL27175.031.09 -NL58095.031.16 -NL31685.031.10 -NL58480.031.16 -NL31855.031.11 -NL58483.031.16 -NL32518.041.10 -NL58831.028.16 -NL33144.031.10 -NL58915.031.16 -NL36413.091.11 -NL59703.091.16 -NL39647.048.12 -NL59706.078.17 -NL41285.031.12 -NL59750.031.16 -NL41664.031.12 -NL59891.031.17 -NL43041.031.13 -NL59976.029.16 -NL43553.031.13 -NL60004.031.17 -NL44192.031.13 -NL60113.031.16 -NL44278.031.13 -NL60114.031.16 -NL45030.018.13 -NL60262.031.16 -NL45282.041.13 -NL60716.029.18 -NL45524.031.13 -NL60800.018.17 -NL45948.031.13 -NL61089.018.17 -NL46486.018.13 -NL61408.041.17 -NL47685.031.14 -NL61964.058.17 -NL47888.041.14 -NL62035.078.17 -NL48096.031.14 -NL62243.078.17 -NL48298.031.14 -NL62269.031.17 -NL48425.031.14 -NL62294.031.17 -NL48824.031.14 -NL62920.056.17 -NL49002.031.14 -NL63233.031.17 -NL49315.031.14 -NCT00001471 -NL63786.041.17 -NCT00002414 -NL63971.031.17 -NCT00002466 -NL64116.042.17 -NCT00002711 -NL64289.031.17 -NCT00002930 -NL64568.031.18 -NCT00002897 -NL64588.031.18 -NCT00003023 -NL64627.031.18 -NCT00003562 -NL64722.031.18 -NCT00003674 -NL65067.031.18 -NCT00003859 -NL65081.031.18 -NCT00004330 -NL65481.091.18 -NCT00004771 -NL65483.031.18 -NCT00004833 -NL65512.078.18 -NCT00129233 -NL65724.031.18 -NCT00129467 -NL65808.031.18 -NCT00131716 -NL65937.031.18 -NCT00132535 -NL65953.031.18 -NCT00133965 -NL65956.078.18 -NCT00133328 -NL66650.041.18 -NCT00134160 -NL66662.031.18 -NCT00135278 -NL66822.031.19 -NCT00138801 -NL67171.031.18 -NCT00138346 -NL67583.031.18 -NCT00140894 -NL67613.031.18 -NCT00141583 -NL67737.031.18 -NCT00143195 -NL67818.078.18 -NCT00144716 -NL67847.031.18 -NCT00145366 -NL68433.056.19 -NCT00145951 -NL68440.029.18 -NCT00147030 -NL68511.031.19 -NCT00149227 -NL68667.028.19 -NCT00149643 -NL68710.031.19 -NCT00150124 -NL69028.031.19 -NCT00150137 -NL70045.031.19 -NCT00254826 -NL70112.031.19 -NCT00254930 -NL70221.031.19 -NCT00258024 -NL70299.031.19 -NCT00259259 -NL71722.042.19 -NCT00261105 -NL72232.000.19 -NCT00262470 -NL72306.056.20 -NCT00000369 -NL72581.000.20 -NCT00000499 -NL72840.031.20 -NCT00000492 -NL73014.031.20 -NCT00000506 -NL74496.031.20 -NCT00000556 -NL75165.031.20 -NCT00000566 -NL75583.031.20 -NCT00000726 -NL75910.031.20 -NCT00000665 -NL76627.031.21 -NCT00000673 -NL80205.031.22 -NCT00000932 -NL82622.041.22 -NCT00000981 -No ID Provided -NCT00263302 -NCT00001552 -NCT00001789 -NCT00001845 -NCT00001912 -NCT00002007 -NCT00002006 -NCT00002191 -NCT00002025 -NCT00002275 -NCT00002288 -NCT00002292 -NCT00005015 -NCT00005123 -NCT00005127 -NCT00005133 -NCT00005134 -NCT00005254 -NCT00005230 -NCT00005288 -NCT00005338 -NCT00005351 -NCT00005436 -NCT00005485 -NCT00005499 -NCT00005547 -NCT00005572 -NCT00005666 -NCT00005757 -NCT00006087 -NCT00006137 -NCT00006170 -NCT00006196 -NCT00006318 -NCT00006319 -NCT00006323 -NCT00008853 -NCT00010387 -NCT00010686 -NCT00010712 -NCT00011102 -NCT00012558 -NCT00012818 -NCT00013026 -NCT00013286 -NCT00015626 -NCT00020267 -NCT00021476 -NCT00021320 -NCT00023205 -NCT00026832 -NCT00027417 -NCT00027768 -NCT00026468 -NCT00029510 -NCT00031369 -NCT00034437 -NCT00032656 -NCT00035139 -NCT00035971 -NCT00036491 -NCT00036309 -NCT00038272 -NCT00040053 -NCT00039832 -NCT00040287 -NCT00041509 -NCT00040495 -NCT00042588 -NCT00043277 -NCT00043927 -NCT00043654 -NCT00044187 -NCT00044239 -NCT00045760 -NCT00046241 -NCT00046319 -NCT00047801 -NCT00047944 -NCT00053456 -NCT00053534 -NCT00056264 -NCT00058942 -NCT00059878 -NCT00061139 -NCT00061399 -NCT00062270 -NCT00063362 -NCT00065806 -NCT00069316 -NCT00071175 -NCT00071487 -NCT00071734 -NCT00074789 -NCT00075179 -NCT00077896 -NCT00077948 -NCT00082563 -NCT00083772 -NCT00084240 -NCT00084266 -NCT00086879 -NCT00088387 -NCT00088569 -NCT00089908 -NCT00092053 -NCT00092885 -NCT00095316 -NCT00095368 -NCT00095446 -NCT00097838 -NCT00096772 -NCT00100126 -NCT00102037 -NCT00104663 -NCT00106535 -NCT00107367 -NCT00108381 -NCT00108823 -NCT00108849 -NCT00114439 -NCT00115128 -NCT00116259 -NCT00117364 -NCT00116584 -NCT00118560 -NCT00118651 -NCT00118781 -NCT00118794 -NCT00120848 -NCT00123734 -NCT00122811 -NCT00124163 -NCT00124761 -NCT00124969 -NCT00125307 -NCT00126516 -NCT00128986 -NCT00152399 -NCT00151229 -NCT00153517 -NCT00153712 -NCT00154674 -NCT00154895 -NCT00156208 -NCT00156325 -NCT00157612 -NCT00158730 -NCT00159614 -NCT00159055 -NCT00161772 -NCT00161798 -NCT00161824 -NCT00161863 -NCT00161967 -NCT00162344 -NCT00162032 -NCT00162565 -NCT00162578 -NCT00163540 -NCT00163670 -NCT00163618 -NCT00163722 -NCT00163774 -NCT00164216 -NCT00164294 -NCT00164905 -NCT00165009 -NCT00164931 -NCT00166296 -NCT00166231 -NCT00166790 -NCT00167479 -NCT00169468 -NCT00170222 -NCT00170521 -NCT00171054 -NCT00171236 -NCT00172263 -NCT00171561 -NCT00172575 -NCT00173745 -NCT00173602 -NCT00174876 -NCT00174980 -NCT00175279 -NCT00178711 -NCT00177216 -NCT00178789 -NCT00179244 -NCT00180739 -NCT00181285 -NCT00182065 -NCT00181298 -NCT00182364 -NCT00182143 -NCT00182832 -NCT00182884 -NCT00183092 -NCT00185068 -NCT00185120 -NCT00187408 -NCT00188279 -NCT00188032 -NCT00188435 -NCT00188942 -NCT00189046 -NCT00190437 -NCT00193765 -NCT00190918 -NCT00190489 -NCT00192218 -NCT00194038 -NCT00193882 -NCT00194272 -NCT00196417 -NCT00202293 -NCT00203450 -NCT00203970 -NCT00202852 -NCT00202566 -NCT00205985 -NCT00207584 -NCT00207675 -NCT00208806 -NCT00211705 -NCT00214916 -NCT00215176 -NCT00214968 -NCT00215800 -NCT00219921 -NCT00221442 -NCT00222742 -NCT00224679 -NCT00223509 -NCT00224731 -NCT00225108 -NCT00225199 -NCT00225355 -NCT00225394 -NCT00226031 -NCT00226135 -NCT00226304 -NCT00226369 -NCT00227214 -NCT00228111 -NCT00230035 -NCT00231127 -NCT00231322 -NCT00231374 -NCT00232401 -NCT00233194 -NCT00233337 -NCT00235196 -NCT00236912 -NCT00237276 -NCT00238706 -NCT00237965 -NCT00239616 -NCT00241345 -NCT00245830 -NCT00251160 -NCT00251641 -NCT00253812 -NCT00263315 -NCT00263380 -NCT00264771 -NCT00264901 -NCT00266513 -NCT00267345 -NCT00267839 -NCT00269100 -NCT00271531 -NCT00271570 -NCT00272519 -NCT00273260 -NCT00274222 -NCT00275899 -NCT00275834 -NCT00276224 -NCT00277394 -NCT00277641 -NCT00280943 -NCT00282269 -NCT00282373 -NCT00282347 -NCT00288938 -NCT00290147 -NCT00291486 -NCT00292916 -NCT00289497 -NCT00290914 -NCT00294580 -NCT00296179 -NCT00296790 -NCT00299663 -NCT00297271 -NCT00297284 -NCT00300872 -NCT00301353 -NCT00302601 -NCT00302692 -NCT00303186 -NCT00303485 -NCT00304135 -NCT00303901 -NCT00304304 -NCT00305201 -NCT00304733 -NCT00305526 -NCT00305617 -NCT00306709 -NCT00308399 -NCT00309764 -NCT00310752 -NCT00311441 -NCT00311753 -NCT00311805 -NCT00311922 -NCT00312741 -NCT00313807 -NCT00314704 -NCT00315042 -NCT00315549 -NCT00316017 -NCT00316693 -NCT00318071 -NCT00318448 -NCT00320346 -NCT00319384 -NCT00319007 -NCT00321009 -NCT00321048 -NCT00322621 -NCT00324233 -NCT00325793 -NCT00327847 -NCT00327782 -NCT00328939 -NCT00329433 -NCT00332098 -NCT00334412 -NCT00336609 -NCT00337116 -NCT00338702 -NCT00338910 -NCT00339066 -NCT00339157 -NCT00340470 -NCT00340561 -NCT00341848 -NCT00342329 -NCT00344149 -NCT00344318 -NCT00344513 -NCT00344929 -NCT00346398 -NCT00347737 -NCT00348036 -NCT00348413 -NCT00348803 -NCT00350766 -NCT00355602 -NCT00356551 -NCT00356707 -NCT00358059 -NCT00358527 -NCT00358735 -NCT00360074 -NCT00360451 -NCT00361036 -NCT00361517 -NCT00361959 -NCT00364728 -NCT00365950 -NCT00367978 -NCT00368095 -NCT00368836 -NCT00368940 -NCT00371501 -NCT00373048 -NCT00373607 -NCT00373828 -NCT00374101 -NCT00374192 -NCT00374270 -NCT00374309 -NCT00375089 -NCT00376662 -NCT00377663 -NCT00378027 -NCT00379353 -NCT00380081 -NCT00381030 -NCT00382421 -NCT00382707 -NCT00382746 -NCT00384332 -NCT00385632 -NCT00386022 -NCT00386035 -NCT00388869 -NCT00390819 -NCT00391014 -NCT00391833 -NCT00392639 -NCT00392847 -NCT00393588 -NCT00393926 -NCT00393978 -NCT00394095 -NCT00394550 -NCT00396578 -NCT00397891 -NCT00398242 -NCT00398268 -NCT00399074 -NCT00399425 -NCT00400088 -NCT00400517 -NCT00402987 -NCT00407745 -NCT00408590 -NCT00410449 -NCT00412490 -NCT00411645 -NCT00413361 -NCT00413374 -NCT00413504 -NCT00413712 -NCT00414479 -NCT00415493 -NCT00416169 -NCT00417638 -NCT00418392 -NCT00420160 -NCT00420238 -NCT00421538 -NCT00421486 -NCT00422227 -NCT00422331 -NCT00423332 -NCT00424021 -NCT00425542 -NCT00426634 -NCT00428597 -NCT00430677 -NCT00431171 -NCT00432003 -NCT00432198 -NCT00432692 -NCT00432666 -NCT00432991 -NCT00433043 -NCT00435032 -NCT00437931 -NCT00439478 -NCT00439595 -NCT00440804 -NCT00440687 -NCT00440830 -NCT00441649 -NCT00441727 -NCT00442377 -NCT00442975 -NCT00444301 -NCT00448045 -NCT00449488 -NCT00450047 -NCT00451113 -NCT00451412 -NCT00454662 -NCT00455468 -NCT00456196 -NCT00458120 -NCT00459784 -NCT00460486 -NCT00461305 -NCT00462254 -NCT00464035 -NCT00464191 -NCT00464932 -NCT00465010 -NCT00466947 -NCT00469105 -NCT00469937 -NCT00470522 -NCT00471289 -NCT00471458 -NCT00472615 -NCT00473135 -NCT00473837 -NCT00474292 -NCT00476372 -NCT00476619 -NCT00476905 -NCT00477022 -NCT00479271 -NCT00479908 -NCT00480142 -NCT00481741 -NCT00482001 -NCT00483873 -NCT00485329 -NCT00485680 -NCT00485953 -NCT00486863 -NCT00486954 -NCT00488072 -NCT00490997 -NCT00491894 -NCT00492232 -NCT00493714 -NCT00494416 -NCT00494468 -NCT00495963 -NCT00497328 -NCT00497471 -NCT00497796 -NCT00498654 -NCT00501189 -NCT00501540 -NCT00503529 -NCT00504244 -NCT00509600 -NCT00511914 -NCT00512538 -NCT00512655 -NCT00514735 -NCT00513500 -NCT00514826 -NCT00515437 -NCT00516269 -NCT00518336 -NCT00519493 -NCT00519922 -NCT00520117 -NCT00520494 -NCT00521027 -NCT00521040 -NCT00521820 -NCT00521924 -NCT00522977 -NCT00523757 -NCT00525655 -NCT00526188 -NCT00528190 -NCT00530270 -NCT00530426 -NCT00533156 -NCT00534495 -NCT00534846 -NCT00535093 -NCT00536224 -NCT00538122 -NCT00539292 -NCT00539487 -NCT00681200 -NCT00681824 -NCT00683813 -NCT00684294 -NCT00684814 -NCT00685568 -NCT00686426 -NCT00687336 -NCT00689546 -NCT00691080 -NCT00692198 -NCT00694655 -NCT00697151 -NCT00699868 -NCT00700739 -NCT00701818 -NCT00702871 -NCT00703417 -NCT00703521 -NCT00704340 -NCT00704535 -NCT00707018 -NCT00709202 -NCT00827463 -NCT00827671 -NCT00827957 -NCT00827970 -NCT00827996 -NCT00830453 -NCT00832442 -NCT00834145 -NCT00832026 -NCT00832403 -NCT00836251 -NCT00838175 -NCT00838643 -NCT00839865 -NCT00840593 -NCT00840671 -NCT00840801 -NCT00841789 -NCT00842530 -NCT00843297 -NCT00843063 -NCT00843375 -NCT00844948 -NCT00844987 -NCT00845507 -NCT00845988 -NCT00846638 -NCT00846846 -NCT00848250 -NCT00849173 -NCT00851006 -NCT00852644 -NCT00854269 -NCT00854776 -NCT00854919 -NCT00855725 -NCT00856427 -NCT00856921 -NCT00860418 -NCT00860938 -NCT00860964 -NCT00861094 -NCT00861133 -NCT00861380 -NCT00861978 -NCT00862498 -NCT00865488 -NCT00866229 -NCT00866424 -NCT00867841 -NCT00873535 -NCT00873587 -NCT00878384 -NCT00881413 -NCT00881985 -NCT00883246 -NCT00883987 -NCT00887666 -NCT00888498 -NCT00891566 -NCT00893438 -NCT00894686 -NCT00539799 -NCT00540267 -NCT00544310 -NCT00545233 -NCT00545779 -NCT00545181 -NCT00547235 -NCT00549107 -NCT00551668 -NCT00552266 -NCT00549120 -NCT00552760 -NCT00556491 -NCT00557531 -NCT00557622 -NCT00563576 -NCT00563992 -NCT00564564 -NCT00564863 -NCT00565201 -NCT00565890 -NCT00568711 -NCT00569361 -NCT00569894 -NCT00572026 -NCT00572715 -NCT00573053 -NCT00573196 -NCT00574821 -NCT00575250 -NCT00577525 -NCT00578084 -NCT00578565 -NCT00578981 -NCT00579280 -NCT00579852 -NCT00581763 -NCT00581893 -NCT00582465 -NCT00582712 -NCT00583401 -NCT00584961 -NCT00586053 -NCT00586677 -NCT00588432 -NCT00589329 -NCT00591175 -NCT00591916 -NCT00592696 -NCT00594035 -NCT00597077 -NCT00597701 -NCT00597844 -NCT00598728 -NCT00599118 -NCT00601536 -NCT00601575 -NCT00602394 -NCT00602537 -NCT00603590 -NCT00604786 -NCT00605007 -NCT00607659 -NCT00608205 -NCT00608296 -NCT00609830 -NCT00610506 -NCT00611663 -NCT00611923 -NCT00612196 -NCT00613041 -NCT00617045 -NCT00617344 -NCT00618579 -NCT00619203 -NCT00619255 -NCT00621608 -NCT00623246 -NCT00623571 -NCT00624637 -NCT00624273 -NCT00626041 -NCT00626951 -NCT00627770 -NCT00628225 -NCT00629356 -NCT00628368 -NCT00629460 -NCT00630175 -NCT00631332 -NCT00632229 -NCT00633360 -NCT00633503 -NCT00634712 -NCT00633633 -NCT00637819 -NCT00641147 -NCT00641823 -NCT00641940 -NCT00641992 -NCT00643318 -NCT00643370 -NCT00643773 -NCT00646269 -NCT00647829 -NCT00653198 -NCT00655044 -NCT00656097 -NCT00658541 -NCT00660322 -NCT00662155 -NCT00662662 -NCT00663819 -NCT00663377 -NCT00664339 -NCT00665366 -NCT00667225 -NCT00667381 -NCT00672490 -NCT00673192 -NCT00674648 -NCT00674726 -NCT00674778 -NCT00679796 -NCT00679835 -NCT00680836 -NCT00712998 -NCT00714402 -NCT00716521 -NCT00718107 -NCT00719784 -NCT00720395 -NCT00720681 -NCT00720915 -NCT00721006 -NCT00722709 -NCT00721955 -NCT00724828 -NCT00725881 -NCT00726570 -NCT00726947 -NCT00727376 -NCT00727974 -NCT00730366 -NCT00731601 -NCT00732875 -NCT00733330 -NCT00734565 -NCT00735527 -NCT00736216 -NCT00736333 -NCT00736827 -NCT00738283 -NCT00739362 -NCT00739596 -NCT00740155 -NCT00740090 -NCT00740883 -NCT00741299 -NCT00741845 -NCT00742014 -NCT00743106 -NCT00743496 -NCT00745043 -NCT00745056 -NCT00747981 -NCT00748449 -NCT00749229 -NCT00750061 -NCT00751634 -NCT00752232 -NCT00753025 -NCT00754741 -NCT00755053 -NCT00756145 -NCT00756756 -NCT00759122 -NCT00759993 -NCT00760669 -NCT00760734 -NCT00762086 -NCT00762775 -NCT00764101 -NCT00766064 -NCT00766415 -NCT00767195 -NCT00767624 -NCT00768495 -NCT00769275 -NCT00769873 -NCT00770107 -NCT00770705 -NCT00770991 -NCT00771563 -NCT00772005 -NCT00774137 -NCT00774150 -NCT00774176 -NCT00774917 -NCT00775528 -NCT00776646 -NCT00778349 -NCT00778362 -NCT00779194 -NCT00779740 -NCT00780260 -NCT00781482 -NCT00781833 -NCT00781950 -NCT00782912 -NCT00783224 -NCT00785057 -NCT00786032 -NCT00787397 -NCT00787904 -NCT00788151 -NCT00788645 -NCT00789399 -NCT00789490 -NCT00789646 -NCT00791505 -NCT00791843 -NCT00792220 -NCT00793403 -NCT00794079 -NCT00797641 -NCT00796913 -NCT00797953 -NCT00798291 -NCT00804726 -NCT00806091 -NCT00806234 -NCT00807469 -NCT00807976 -NCT00808652 -NCT00809029 -NCT00809757 -NCT00810121 -NCT00810940 -NCT00811265 -NCT00812474 -NCT00814502 -NCT00816556 -NCT00816634 -NCT00816920 -NCT00817908 -NCT00819624 -NCT00820794 -NCT00823563 -NCT00823836 -NCT00822289 -NCT00821522 -NCT00895531 -NCT00897299 -NCT00897364 -NCT00897650 -NCT00898495 -NCT00900016 -NCT00902512 -NCT00905385 -NCT00905710 -NCT00906568 -NCT00906711 -NCT00907543 -NCT00907686 -NCT00908037 -NCT00908063 -NCT00908817 -NCT00911352 -NCT00912990 -NCT00913653 -NCT00915642 -NCT00915707 -NCT00915928 -NCT00916500 -NCT00918307 -NCT00918320 -NCT00920270 -NCT00921050 -NCT00923598 -NCT00923832 -NCT00925119 -NCT00925288 -NCT00926770 -NCT00926991 -NCT00928915 -NCT00928941 -NCT00929721 -NCT00929773 -NCT00930826 -NCT00931112 -NCT00932867 -NCT00933790 -NCT00934453 -NCT00934843 -NCT00934908 -NCT00936598 -NCT00937365 -NCT00938353 -NCT00938756 -NCT00939718 -NCT00942929 -NCT00944333 -NCT00944684 -NCT00946296 -NCT00946413 -NCT00946894 -NCT00948272 -NCT00948610 -NCT00950404 -NCT00950040 -NCT00950417 -NCT00951808 -NCT00951821 -NCT00952263 -NCT00952510 -NCT00954200 -NCT00954395 -NCT00955604 -NCT00956319 -NCT00957021 -NCT00957541 -NCT00959192 -NCT00963196 -NCT00963235 -NCT00963651 -NCT00964769 -NCT00965601 -NCT00965744 -NCT00965809 -NCT01099943 -NCT01098851 -NCT01101802 -NCT01102998 -NCT01103999 -NCT01107262 -NCT01108120 -NCT01109147 -NCT01110356 -NCT01110304 -NCT01110551 -NCT01112436 -NCT01113489 -NCT01113645 -NCT01113749 -NCT01113840 -NCT01115153 -NCT01115231 -NCT01115933 -NCT01117077 -NCT01117532 -NCT01117610 -NCT01117961 -NCT01118000 -NCT01118403 -NCT01121510 -NCT01123837 -NCT01125384 -NCT01125150 -NCT01125527 -NCT01128322 -NCT01128764 -NCT01128907 -NCT01128933 -NCT01131624 -NCT01133002 -NCT01133119 -NCT01134328 -NCT01134731 -NCT01135134 -NCT01137578 -NCT01138683 -NCT01138826 -NCT01138969 -NCT01139632 -NCT01141907 -NCT01141972 -NCT01142115 -NCT00966199 -NCT00967304 -NCT00967746 -NCT00970476 -NCT00970515 -NCT00970879 -NCT00971217 -NCT00971386 -NCT00971984 -NCT00974064 -NCT00974116 -NCT00974337 -NCT00974766 -NCT00977106 -NCT00978471 -NCT00979199 -NCT00979615 -NCT00981630 -NCT00982670 -NCT00982371 -NCT00984256 -NCT00984763 -NCT00985244 -NCT00986128 -NCT00990262 -NCT00990522 -NCT00992927 -NCT00992966 -NCT00993850 -NCT00996281 -NCT00996918 -NCT00997633 -NCT00997672 -NCT00997737 -NCT00997932 -NCT00998634 -NCT00999635 -NCT01001663 -NCT01002235 -NCT01004289 -NCT01004939 -NCT01005264 -NCT01006421 -NCT01006525 -NCT01007877 -NCT01010464 -NCT01012180 -NCT01013428 -NCT01013662 -NCT01017055 -NCT01017081 -NCT01018238 -NCT01019681 -NCT01019902 -NCT01021826 -NCT01022307 -NCT01022567 -NCT01023828 -NCT01024114 -NCT01024439 -NCT01025726 -NCT01027455 -NCT01028404 -NCT01028534 -NCT01029262 -NCT01031537 -NCT01031797 -NCT01032135 -NCT01032356 -NCT01034358 -NCT01036659 -NCT01039259 -NCT01040923 -NCT01041196 -NCT01041729 -NCT01041924 -NCT01043354 -NCT01044199 -NCT01044316 -NCT01047098 -NCT01047839 -NCT01049217 -NCT01050049 -NCT01050062 -NCT01050881 -NCT01052038 -NCT01055431 -NCT01055665 -NCT01056146 -NCT01060748 -NCT01062438 -NCT01062828 -NCT01062997 -NCT01063959 -NCT01064947 -NCT01070732 -NCT01070966 -NCT01071421 -NCT01072032 -NCT01074073 -NCT01074112 -NCT01075035 -NCT01075204 -NCT01076101 -NCT01076738 -NCT01076855 -NCT01077596 -NCT01078779 -NCT01080274 -NCT01080326 -NCT01080989 -NCT01081275 -NCT01083563 -NCT01084980 -NCT01086709 -NCT01087723 -NCT01086280 -NCT01088243 -NCT01090232 -NCT01091415 -NCT01091961 -NCT01093339 -NCT01093937 -NCT01094899 -NCT01095406 -NCT01097928 -NCT01142180 -NCT01143246 -NCT01144143 -NCT01145157 -NCT01145313 -NCT01147640 -NCT01148719 -NCT01149187 -NCT01152463 -NCT01155401 -NCT01156428 -NCT01158209 -NCT01159652 -NCT01159834 -NCT01161693 -NCT01161849 -NCT01162343 -NCT01162902 -NCT01163123 -NCT01163565 -NCT01165866 -NCT01166425 -NCT01167205 -NCT01169389 -NCT01170546 -NCT01171911 -NCT01172444 -NCT01172652 -NCT01173250 -NCT01173666 -NCT01173939 -NCT01175161 -NCT01175434 -NCT01175889 -NCT01176643 -NCT01176071 -NCT01177293 -NCT01177657 -NCT01178177 -NCT01180179 -NCT01181154 -NCT01181232 -NCT01181583 -NCT01182532 -NCT01182597 -NCT01182961 -NCT01183026 -NCT01184443 -NCT01184846 -NCT01186679 -NCT01186900 -NCT01187901 -NCT01187433 -NCT01188993 -NCT01191580 -NCT01192282 -NCT01192620 -NCT01192789 -NCT01194232 -NCT01196299 -NCT01198210 -NCT01199185 -NCT01199276 -NCT01200628 -NCT01201252 -NCT01202201 -NCT01203696 -NCT01204359 -NCT01204411 -NCT01205776 -NCT01206231 -NCT01206868 -NCT01207128 -NCT01207999 -NCT01210469 -NCT01208714 -NCT01211171 -NCT01211236 -NCT01212757 -NCT01212770 -NCT01213693 -NCT01214265 -NCT01214954 -NCT01217463 -NCT01218893 -NCT01219023 -NCT01219998 -NCT01220895 -NCT01221844 -NCT01222273 -NCT01226134 -NCT01226953 -NCT01227200 -NCT01227369 -NCT01228123 -NCT01228383 -NCT01229176 -NCT01230827 -NCT01230931 -NCT01231165 -NCT01231672 -NCT01232387 -NCT01232647 -NCT01233869 -NCT01235546 -NCT01236599 -NCT01236612 -NCT01237392 -NCT01238926 -NCT01238991 -NCT01240044 -NCT01241201 -NCT01242150 -NCT01243255 -NCT01244217 -NCT01244386 -NCT01245283 -NCT01245816 -NCT01247077 -NCT01247142 -NCT01248507 -NCT01249885 -NCT01250262 -NCT01250275 -NCT01251744 -NCT01251497 -NCT01253486 -NCT01253967 -NCT01253980 -NCT01254708 -NCT01255670 -NCT01255735 -NCT01256099 -NCT01257165 -NCT01258062 -NCT01258725 -NCT01258738 -NCT01259206 -NCT01259388 -NCT01260259 -NCT01262742 -NCT01263067 -NCT01263288 -NCT01265004 -NCT01269073 -NCT01269125 -NCT01273519 -NCT01274871 -NCT01276561 -NCT01279824 -NCT01279928 -NCT01281475 -NCT01281969 -NCT01282749 -NCT01284179 -NCT01284218 -NCT01285973 -NCT01286493 -NCT01288560 -NCT01289548 -NCT01289262 -NCT01290770 -NCT01291979 -NCT01292915 -NCT01293019 -NCT01293825 -NCT01293955 -NCT01294111 -NCT01294696 -NCT01295294 -NCT01296477 -NCT01296750 -NCT01296789 -NCT01297387 -NCT01297868 -NCT01298986 -NCT01298531 -NCT01300832 -NCT01301131 -NCT01301989 -NCT01302418 -NCT01304108 -NCT01305226 -NCT01306227 -NCT01306994 -NCT01307423 -NCT01307644 -NCT01308385 -NCT01309113 -NCT01310309 -NCT01310361 -NCT01312077 -NCT01313494 -NCT01314573 -NCT01315379 -NCT01315704 -NCT01315795 -NCT01316965 -NCT01317160 -NCT01318174 -NCT01318954 -NCT01319370 -NCT01319682 -NCT01319955 -NCT01320813 -NCT01321788 -NCT01322958 -NCT01326507 -NCT01322828 -NCT01329458 -NCT01331512 -NCT01330368 -NCT01332188 -NCT01334203 -NCT01334762 -NCT01334788 -NCT01335022 -NCT01335594 -NCT01336777 -NCT01337336 -NCT01338311 -NCT01339637 -NCT01339702 -NCT01340963 -NCT01341067 -NCT01342796 -NCT01344954 -NCT01345097 -NCT01345110 -NCT01345708 -NCT01349400 -NCT01350349 -NCT01353144 -NCT01353846 -NCT01355627 -NCT01356459 -NCT01356992 -NCT01359020 -NCT01360424 -NCT01362283 -NCT01362517 -NCT01363310 -NCT01365286 -NCT01368068 -NCT01369563 -NCT01369797 -NCT01370837 -NCT01373879 -NCT01371383 -NCT01375621 -NCT01376778 -NCT01377519 -NCT01379027 -NCT01379196 -NCT01379326 -NCT01380665 -NCT01381367 -NCT01381536 -NCT01382277 -NCT01385709 -NCT01387074 -NCT01387828 -NCT01388400 -NCT01390922 -NCT01392820 -NCT01394107 -NCT01395238 -NCT01395875 -NCT01395498 -NCT01396304 -NCT01396798 -NCT01396837 -NCT01397175 -NCT01397474 -NCT01399736 -NCT01397994 -NCT01402856 -NCT01403714 -NCT01405755 -NCT01404962 -NCT01405963 -NCT01406379 -NCT01407146 -NCT01408186 -NCT01408693 -NCT01411852 -NCT01412138 -NCT01412593 -NCT01412684 -NCT01413100 -NCT01413230 -NCT01414439 -NCT01416220 -NCT01422577 -NCT01421901 -NCT01422343 -NCT01422954 -NCT01425632 -NCT01426997 -NCT01427712 -NCT01428154 -NCT01428518 -NCT01428817 -NCT01429194 -NCT01430663 -NCT01431911 -NCT01431352 -NCT01432925 -NCT01436396 -NCT01438060 -NCT01440075 -NCT01440803 -NCT01440231 -NCT01442675 -NCT01443104 -NCT01443793 -NCT01444612 -NCT01444833 -NCT01446198 -NCT01448226 -NCT01449422 -NCT01451931 -NCT01452243 -NCT01452971 -NCT01453400 -NCT01454492 -NCT01458405 -NCT01459952 -NCT01463202 -NCT01463475 -NCT01463878 -NCT01464671 -NCT01465425 -NCT01466387 -NCT01467973 -NCT01468194 -NCT01469897 -NCT01471249 -NCT01471613 -NCT01474915 -NCT01475097 -NCT01475786 -NCT01477047 -NCT01477931 -NCT01478035 -NCT01479153 -NCT01480414 -NCT01481766 -NCT01481922 -NCT01482052 -NCT01482624 -NCT01484912 -NCT01485237 -NCT01489358 -NCT01491776 -NCT01492647 -NCT01494792 -NCT01494870 -NCT01498094 -NCT01496586 -NCT01498146 -NCT01501227 -NCT01501526 -NCT01502358 -NCT01503788 -NCT01505738 -NCT01506583 -NCT01506999 -NCT01507454 -NCT01510886 -NCT01511315 -NCT01512446 -NCT01512784 -NCT01514825 -NCT01518816 -NCT01519115 -NCT01519583 -NCT01520155 -NCT01520688 -NCT01521403 -NCT01521871 -NCT01522105 -NCT01525160 -NCT01526148 -NCT01526382 -NCT01528904 -NCT01529463 -NCT01531517 -NCT01532739 -NCT01533519 -NCT01534247 -NCT01535248 -NCT01539668 -NCT01540318 -NCT01540838 -NCT01542463 -NCT01542723 -NCT01542762 -NCT01544036 -NCT01546857 -NCT01546961 -NCT01550068 -NCT01550588 -NCT01551485 -NCT01551069 -NCT01553734 -NCT01554124 -NCT01554527 -NCT01554657 -NCT01555827 -NCT01556373 -NCT01557322 -NCT01557725 -NCT01557803 -NCT01558206 -NCT01558310 -NCT01559415 -NCT01559532 -NCT01559948 -NCT01560702 -NCT01561001 -NCT01561729 -NCT01561794 -NCT01562613 -NCT01563887 -NCT01564303 -NCT01565642 -NCT01565993 -NCT01566058 -NCT01566682 -NCT01566929 -NCT01567969 -NCT01569698 -NCT01572584 -NCT01574664 -NCT01574950 -NCT01576315 -NCT01576978 -NCT01577108 -NCT01577277 -NCT01577979 -NCT01578200 -NCT01579344 -NCT01580917 -NCT01583400 -NCT01583465 -NCT01583855 -NCT01584817 -NCT01586481 -NCT01586962 -NCT01588665 -NCT01588899 -NCT01592825 -NCT01594359 -NCT01594385 -NCT01595906 -NCT01596335 -NCT01597622 -NCT01600482 -NCT01599403 -NCT01603875 -NCT01601964 -NCT01604538 -NCT01605214 -NCT01605864 -NCT01607775 -NCT01608373 -NCT01609101 -NCT01611896 -NCT01613235 -NCT01617499 -NCT01618175 -NCT01620723 -NCT01624519 -NCT01624545 -NCT01625689 -NCT01625832 -NCT01627119 -NCT01627327 -NCT01630343 -NCT01631448 -NCT01631916 -NCT01632319 -NCT01632774 -NCT01632813 -NCT01633593 -NCT01633671 -NCT01635257 -NCT01636401 -NCT01636453 -NCT01637051 -NCT01637298 -NCT01641289 -NCT01641627 -NCT01646398 -NCT01646411 -NCT01646645 -NCT01647776 -NCT01647932 -NCT01649752 -NCT01649765 -NCT01653587 -NCT01654887 -NCT01656577 -NCT01657136 -NCT01657318 -NCT01660594 -NCT01658267 -NCT01661491 -NCT01661920 -NCT01662258 -NCT01663402 -NCT01663844 -NCT01665261 -NCT01666093 -NCT01669135 -NCT01670149 -NCT01671995 -NCT01672697 -NCT01677793 -NCT01680562 -NCT01682005 -NCT01682057 -NCT01682096 -NCT01682785 -NCT01683448 -NCT01683838 -NCT01684592 -NCT01689025 -NCT01689909 -NCT01691118 -NCT01691911 -NCT01692574 -NCT01692769 -NCT01692821 -NCT01693185 -NCT01694069 -NCT01696292 -NCT01698242 -NCT01698463 -NCT01698476 -NCT01698853 -NCT01700231 -NCT01700101 -NCT01701453 -NCT01704105 -NCT01704040 -NCT01704352 -NCT01705977 -NCT01706198 -NCT01708239 -NCT01710488 -NCT01712477 -NCT01712542 -NCT01713881 -NCT01715038 -NCT01715610 -NCT01716624 -NCT01716871 -NCT01717352 -NCT01719510 -NCT01719952 -NCT01720069 -NCT01721837 -NCT01723137 -NCT01723358 -NCT01724411 -NCT01724567 -NCT01725178 -NCT01725490 -NCT01728701 -NCT01729455 -NCT01730391 -NCT01730690 -NCT01731847 -NCT01733524 -NCT01736306 -NCT01736709 -NCT01737385 -NCT01737567 -NCT01738607 -NCT01739673 -NCT01741896 -NCT01742312 -NCT01743313 -NCT01743716 -NCT01744314 -NCT01744769 -NCT01745692 -NCT01745731 -NCT01746199 -NCT01747369 -NCT01748084 -NCT01748162 -NCT01749033 -NCT01752673 -NCT01753921 -NCT01756287 -NCT01757119 -NCT01761279 -NCT01762605 -NCT01762761 -NCT01762852 -NCT01763008 -NCT01763892 -NCT01764035 -NCT01767480 -NCT01767870 -NCT01770912 -NCT01771861 -NCT01772108 -NCT01773161 -NCT01774240 -NCT01775241 -NCT01776151 -NCT01779817 -NCT01780909 -NCT01781247 -NCT01782469 -NCT01783652 -NCT01784523 -NCT01784666 -NCT01785797 -NCT01787773 -NCT01789541 -NCT01790477 -NCT01792453 -NCT01794728 -NCT01793194 -NCT01795638 -NCT01796886 -NCT01798420 -NCT01799551 -NCT01799837 -NCT01801592 -NCT01800942 -NCT01801657 -NCT01802125 -NCT01802502 -NCT01803022 -NCT01807052 -NCT01807260 -NCT01808404 -NCT01807143 -NCT01810731 -NCT01815125 -NCT01818960 -NCT01818726 -NCT01819597 -NCT01820156 -NCT01821885 -NCT01822600 -NCT01827007 -NCT01827917 -NCT01827683 -NCT01828697 -NCT01828749 -NCT01829659 -NCT01830517 -NCT01833416 -NCT01834859 -NCT01835210 -NCT01836848 -NCT01838616 -NCT01838863 -NCT01839786 -NCT01840124 -NCT01840891 -NCT01845168 -NCT01847014 -NCT01849354 -NCT01849614 -NCT01851460 -NCT01851902 -NCT01852773 -NCT01854086 -NCT01853735 -NCT01855594 -NCT01855659 -NCT01855698 -NCT01856842 -NCT01858194 -NCT01860690 -NCT01861522 -NCT01862172 -NCT01862822 -NCT01862913 -NCT01862952 -NCT01863069 -NCT01864590 -NCT01866020 -NCT01867983 -NCT01868113 -NCT01868698 -NCT01869049 -NCT01869855 -NCT01869933 -NCT01870011 -NCT01870557 -NCT01870713 -NCT01871194 -NCT01872013 -NCT01874704 -NCT01878734 -NCT01881659 -NCT01885533 -NCT01887028 -NCT01887457 -NCT01888588 -NCT01890044 -NCT01891110 -NCT01892306 -NCT01893229 -NCT01895127 -NCT01896336 -NCT01896349 -NCT01901250 -NCT01902602 -NCT01902654 -NCT01903928 -NCT01904695 -NCT01906957 -NCT01910363 -NCT01912976 -NCT01913743 -NCT01917149 -NCT01917721 -NCT01918033 -NCT01918618 -NCT01920295 -NCT01921127 -NCT01921842 -NCT01922115 -NCT01923064 -NCT01923415 -NCT01923831 -NCT01923740 -NCT01925222 -NCT01928134 -NCT01928446 -NCT01930357 -NCT01933217 -NCT01934231 -NCT01934400 -NCT01935141 -NCT01936493 -NCT01936909 -NCT01938183 -NCT01941017 -NCT01942759 -NCT01943344 -NCT01944293 -NCT01944397 -NCT01945619 -NCT01947959 -NCT01948167 -NCT01949909 -NCT01950026 -NCT01950780 -NCT01951768 -NCT01951846 -NCT01953822 -NCT01954407 -NCT01954680 -NCT01957293 -NCT01959009 -NCT01959529 -NCT01960413 -NCT01960933 -NCT01960985 -NCT01966380 -NCT01970202 -NCT01970332 -NCT01971411 -NCT01973088 -NCT01973907 -NCT01977404 -NCT01978288 -NCT01983553 -NCT01984086 -NCT01985243 -NCT01988350 -NCT01986361 -NCT01990768 -NCT01991886 -NCT01992224 -NCT01993381 -NCT01994616 -NCT01998932 -NCT02001545 -NCT02002884 -NCT02003690 -NCT02003781 -NCT02004509 -NCT02005250 -NCT02005796 -NCT02006251 -NCT02006784 -NCT02007824 -NCT02008370 -NCT02008630 -NCT02009566 -NCT02010294 -NCT02011035 -NCT02011477 -NCT02011646 -NCT02011867 -NCT02012478 -NCT02012868 -NCT02013063 -NCT02013570 -NCT02014896 -NCT02016053 -NCT02017288 -NCT02017379 -NCT02017951 -NCT02018016 -NCT02018952 -NCT02019927 -NCT02020980 -NCT02021344 -NCT02021877 -NCT02023567 -NCT02024373 -NCT02025335 -NCT02026531 -NCT02027402 -NCT02028260 -NCT02029339 -NCT02029378 -NCT02032043 -NCT02032914 -NCT02033915 -NCT02034175 -NCT02036450 -NCT02035436 -NCT02038192 -NCT02037724 -NCT02039479 -NCT02043145 -NCT02043223 -NCT02047786 -NCT02046135 -NCT02048319 -NCT02049619 -NCT02050425 -NCT02051270 -NCT02051088 -NCT02052817 -NCT02053012 -NCT02055092 -NCT02056613 -NCT02058602 -NCT02059759 -NCT02062424 -NCT02063243 -NCT02063789 -NCT02064959 -NCT02065596 -NCT02066480 -NCT02067078 -NCT02066441 -NCT02068885 -NCT02069275 -NCT02070354 -NCT02071290 -NCT02071602 -NCT02072421 -NCT02072538 -NCT02072694 -NCT02073188 -NCT02074020 -NCT02074033 -NCT02074371 -NCT02077413 -NCT02078921 -NCT02079467 -NCT02080026 -NCT02080195 -NCT02081105 -NCT02081235 -NCT02081261 -NCT02081274 -NCT02081716 -NCT02081742 -NCT02082002 -NCT02083042 -NCT02084602 -NCT02085564 -NCT02086305 -NCT02086799 -NCT02086981 -NCT02087215 -NCT02088385 -NCT02088593 -NCT02090309 -NCT02090595 -NCT02092675 -NCT02092974 -NCT02094547 -NCT02096900 -NCT02097186 -NCT02098590 -NCT02099071 -NCT02099305 -NCT02100098 -NCT02101255 -NCT02102399 -NCT02102828 -NCT02103491 -NCT02105220 -NCT02105532 -NCT02107001 -NCT02107794 -NCT02109419 -NCT02110251 -NCT02112058 -NCT02113202 -NCT02113215 -NCT02114190 -NCT02115711 -NCT02116400 -NCT02117609 -NCT02118818 -NCT02119156 -NCT02119507 -NCT02119533 -NCT02120664 -NCT02123004 -NCT02127866 -NCT02129621 -NCT02129790 -NCT02131181 -NCT02132819 -NCT02133911 -NCT02136654 -NCT02136797 -NCT02136875 -NCT02137187 -NCT02137603 -NCT02139098 -NCT02139163 -NCT02139384 -NCT02140710 -NCT02141009 -NCT02144142 -NCT02144636 -NCT02147353 -NCT02147470 -NCT02148289 -NCT02149472 -NCT02149940 -NCT02152358 -NCT02152449 -NCT02156193 -NCT02156479 -NCT02158962 -NCT02162186 -NCT02163200 -NCT02163447 -NCT02163564 -NCT02164357 -NCT02164552 -NCT02166008 -NCT02287259 -NCT02289508 -NCT02289937 -NCT02290652 -NCT02294175 -NCT02297633 -NCT02297659 -NCT02300155 -NCT02302534 -NCT02302664 -NCT02304250 -NCT02304328 -NCT02305095 -NCT02306642 -NCT02307201 -NCT02308137 -NCT02168998 -NCT02169167 -NCT02169570 -NCT02172378 -NCT02172625 -NCT02173028 -NCT02174094 -NCT02175888 -NCT02175901 -NCT02176148 -NCT02177032 -NCT02177851 -NCT02180542 -NCT02181023 -NCT02182713 -NCT02181348 -NCT02184962 -NCT02182856 -NCT02185404 -NCT02185612 -NCT02187809 -NCT02188862 -NCT02189577 -NCT02190123 -NCT02192320 -NCT02194920 -NCT02195713 -NCT02196116 -NCT02196246 -NCT02196298 -NCT02197039 -NCT02198885 -NCT02199015 -NCT02199093 -NCT02200783 -NCT02201069 -NCT02203383 -NCT02203682 -NCT02203890 -NCT02203968 -NCT02204176 -NCT02204514 -NCT02206971 -NCT02208219 -NCT02209974 -NCT02210702 -NCT02211612 -NCT02212119 -NCT02212496 -NCT02213380 -NCT02213809 -NCT02214030 -NCT02216305 -NCT02217111 -NCT02217501 -NCT02217722 -NCT02220387 -NCT02221752 -NCT02222181 -NCT02222376 -NCT02222649 -NCT02222805 -NCT02225392 -NCT02226510 -NCT02227225 -NCT02227927 -NCT02229695 -NCT02230865 -NCT02231398 -NCT02232022 -NCT02232191 -NCT02232607 -NCT02233010 -NCT02234570 -NCT02234739 -NCT02235389 -NCT02235558 -NCT02235935 -NCT02236416 -NCT02237430 -NCT02237703 -NCT02238210 -NCT02238756 -NCT02239731 -NCT02241135 -NCT02241148 -NCT02241642 -NCT02244723 -NCT02245802 -NCT02247765 -NCT02248610 -NCT02249286 -NCT02251418 -NCT02254356 -NCT02255487 -NCT02258308 -NCT02258958 -NCT02260934 -NCT02261584 -NCT02261792 -NCT02263235 -NCT02264353 -NCT02264444 -NCT02264483 -NCT02264756 -NCT02264769 -NCT02264964 -NCT02266563 -NCT02267538 -NCT02269878 -NCT02270424 -NCT02271451 -NCT02271932 -NCT02272920 -NCT02273128 -NCT02273232 -NCT02275312 -NCT02273830 -NCT02276092 -NCT02276170 -NCT02280291 -NCT02281123 -NCT02282228 -NCT02282930 -NCT02284295 -NCT02284984 -NCT02309489 -NCT02310854 -NCT02316418 -NCT02316990 -NCT02317913 -NCT02319161 -NCT02318290 -NCT02323763 -NCT02323984 -NCT02328352 -NCT02328963 -NCT02329340 -NCT02331628 -NCT02333201 -NCT02329366 -NCT02333812 -NCT02334514 -NCT02336542 -NCT02339896 -NCT02340481 -NCT02340702 -NCT02341300 -NCT02342470 -NCT02344342 -NCT02345564 -NCT02345941 -NCT02347865 -NCT02348541 -NCT02349269 -NCT02352155 -NCT02353299 -NCT02353663 -NCT02353793 -NCT02355548 -NCT02356120 -NCT02356510 -NCT02357212 -NCT02358109 -NCT02359253 -NCT02360410 -NCT02361736 -NCT02362321 -NCT02366299 -NCT02369263 -NCT02370758 -NCT02371057 -NCT02372461 -NCT02373995 -NCT02374008 -NCT02374814 -NCT02375451 -NCT02375919 -NCT02376192 -NCT02507050 -NCT02507635 -NCT02507674 -NCT02508584 -NCT02509091 -NCT02509858 -NCT02511054 -NCT02511444 -NCT02511626 -NCT02512159 -NCT02513316 -NCT02513628 -NCT02513953 -NCT02516033 -NCT02516072 -NCT02516280 -NCT02516839 -NCT02517346 -NCT02518243 -NCT02518633 -NCT02518646 -NCT02519504 -NCT02519933 -NCT02521012 -NCT02521155 -NCT02521727 -NCT02525926 -NCT02526433 -NCT02527031 -NCT02527291 -NCT02378298 -NCT02378571 -NCT02379130 -NCT02380495 -NCT02380352 -NCT02381340 -NCT02383680 -NCT02386696 -NCT02389231 -NCT02389933 -NCT02390323 -NCT02390765 -NCT02391909 -NCT02392975 -NCT02393963 -NCT02394418 -NCT02397980 -NCT02399423 -NCT02399774 -NCT02400684 -NCT02402881 -NCT02404181 -NCT02405741 -NCT02405832 -NCT02406131 -NCT02406729 -NCT02406885 -NCT02407106 -NCT02408263 -NCT02409823 -NCT02410616 -NCT02415010 -NCT02415049 -NCT02416713 -NCT02417519 -NCT02418169 -NCT02419053 -NCT02420106 -NCT02422069 -NCT02426073 -NCT02424097 -NCT02426710 -NCT02427464 -NCT02427516 -NCT02427854 -NCT02427867 -NCT02428140 -NCT02428647 -NCT02429388 -NCT02430857 -NCT02431819 -NCT02432222 -NCT02433990 -NCT02436031 -NCT02436200 -NCT02438709 -NCT02439996 -NCT02440529 -NCT02440815 -NCT02441439 -NCT02441478 -NCT02441699 -NCT02441829 -NCT02443389 -NCT02444728 -NCT02445092 -NCT02445183 -NCT02446587 -NCT02447224 -NCT02447614 -NCT02449928 -NCT02451631 -NCT02453321 -NCT02455037 -NCT02455089 -NCT02456012 -NCT02457403 -NCT02457546 -NCT02458144 -NCT02458300 -NCT02458495 -NCT02458625 -NCT02458729 -NCT02459171 -NCT02459327 -NCT02461329 -NCT02463630 -NCT02464527 -NCT02465307 -NCT02467309 -NCT02470416 -NCT02471209 -NCT02472782 -NCT02473783 -NCT02474901 -NCT02475590 -NCT02475980 -NCT02476747 -NCT02477501 -NCT02478294 -NCT02480803 -NCT02481739 -NCT02482948 -NCT02483663 -NCT02484963 -NCT02485873 -NCT02487264 -NCT02489578 -NCT02489669 -NCT02490241 -NCT02491307 -NCT02491541 -NCT02492425 -NCT02492646 -NCT02494232 -NCT02494960 -NCT02495220 -NCT02495545 -NCT02495909 -NCT02496494 -NCT02498808 -NCT02501668 -NCT02502513 -NCT02505035 -NCT02505061 -NCT02505347 -NCT02527499 -NCT02527564 -NCT02528890 -NCT02530944 -NCT02532452 -NCT02532699 -NCT02534766 -NCT02535624 -NCT02535962 -NCT02536560 -NCT02538406 -NCT02542488 -NCT02544035 -NCT02544178 -NCT02546817 -NCT02547727 -NCT02549547 -NCT02549872 -NCT02551289 -NCT02551315 -NCT02553733 -NCT02554019 -NCT02556099 -NCT02557334 -NCT02557425 -NCT02557698 -NCT02558465 -NCT02556359 -NCT02558517 -NCT02558777 -NCT02559232 -NCT02562040 -NCT02563678 -NCT02564471 -NCT02564939 -NCT02568124 -NCT02569749 -NCT02570152 -NCT02571504 -NCT02575001 -NCT02577731 -NCT02579278 -NCT02583906 -NCT02583958 -NCT02584621 -NCT02584725 -NCT02584777 -NCT02585076 -NCT02585141 -NCT02586493 -NCT02586519 -NCT02587351 -NCT02588053 -NCT02591043 -NCT02590653 -NCT02591355 -NCT02591563 -NCT02591784 -NCT02594592 -NCT02594410 -NCT02596555 -NCT02598180 -NCT02599155 -NCT02600260 -NCT02601846 -NCT02603393 -NCT02603731 -NCT02604186 -NCT02604277 -NCT02604550 -NCT02604576 -NCT02605122 -NCT02606253 -NCT02607696 -NCT02608047 -NCT02609672 -NCT02609893 -NCT02610426 -NCT02610868 -NCT02612896 -NCT02613585 -NCT02614417 -NCT02614443 -NCT02615587 -NCT02615912 -NCT02616991 -NCT02618655 -NCT02619877 -NCT02620085 -NCT02620384 -NCT02621476 -NCT02623725 -NCT02624089 -NCT02624882 -NCT02625129 -NCT02626156 -NCT02626741 -NCT02627768 -NCT02627937 -NCT02630537 -NCT02631304 -NCT02632656 -NCT02633033 -NCT02633163 -NCT02633319 -NCT02633449 -NCT02633787 -NCT02634138 -NCT02634190 diff --git a/utils/Indexer/processed_ids.txt b/utils/Indexer/processed_ids.txt deleted file mode 100644 index c140105c..00000000 --- a/utils/Indexer/processed_ids.txt +++ /dev/null @@ -1,48637 +0,0 @@ -NCT00000102 -NCT00000105 -NCT00000108 -NCT00000110 -NCT00000113 -NCT00000114 -NCT00000115 -NCT00000117 -NCT00000119 -NCT00000120 -NCT00000121 -NCT00000123 -NCT00000124 -NCT00000125 -NCT00000126 -NCT00000127 -NCT00000129 -NCT00000133 -NCT00000137 -NCT00000144 -NCT00000150 -NCT00000151 -NCT00000152 -NCT00000153 -NCT00000154 -NCT00000155 -NCT00000156 -NCT00000158 -NCT00000159 -NCT00000160 -NCT00000161 -NCT00000167 -NCT00000171 -NCT00000173 -NCT00000176 -NCT00000179 -NCT00000292 -NCT00000359 -NCT00000361 -NCT00000362 -NCT00000377 -NCT00000390 -NCT00000396 -NCT00000402 -NCT00000403 -NCT00000406 -NCT00000408 -NCT00000409 -NCT00000410 -NCT00000411 -NCT00000413 -NCT00000419 -NCT00000424 -NCT00000425 -NCT00000427 -NCT00000430 -NCT00000432 -NCT00000437 -NCT00000461 -NCT00000468 -NCT00000469 -NCT00000479 -NCT00000487 -NCT00000501 -NCT00000502 -NCT00000513 -NCT00000515 -NCT00000518 -NCT00000519 -NCT00000520 -NCT00000521 -NCT00000522 -NCT00000524 -NCT00000525 -NCT00000526 -NCT00000528 -NCT00000531 -NCT00000539 -NCT00000548 -NCT00000555 -NCT00000559 -NCT00000560 -NCT00000562 -NCT00000567 -NCT00000568 -NCT00000570 -NCT00000572 -NCT00000574 -NCT00000575 -NCT00000576 -NCT00000580 -NCT00000582 -NCT00000583 -NCT00000585 -NCT00000586 -NCT00000588 -NCT00000592 -NCT00000598 -NCT00000599 -NCT00000602 -NCT00000606 -NCT00000619 -NCT00000620 -NCT00000621 -NCT00000633 -NCT00000636 -NCT00000638 -NCT00000641 -NCT00000642 -NCT00000644 -NCT00000653 -NCT00000654 -NCT00000672 -NCT00000678 -NCT00000682 -NCT00000706 -NCT00000707 -NCT00000714 -NCT00000715 -NCT00000717 -NCT00000722 -NCT00000724 -NCT00000727 -NCT00000730 -NCT00000732 -NCT00000734 -NCT00000739 -NCT00000740 -NCT00000748 -NCT00000749 -NCT00000755 -NCT00000768 -NCT00000769 -NCT00000771 -NCT00000773 -NCT00000776 -NCT00000778 -NCT00000785 -NCT00000790 -NCT00000794 -NCT00000796 -NCT00000801 -NCT00000802 -NCT00000811 -NCT00000816 -NCT00000832 -NCT00000854 -NCT00000855 -NCT00000860 -NCT00000862 -NCT00000863 -NCT00000873 -NCT00000879 -NCT00000910 -NCT00000937 -NCT00000938 -NCT00000941 -NCT00000955 -NCT00000959 -NCT00000961 -NCT00000963 -NCT00000964 -NCT00000970 -NCT00000975 -NCT00000980 -NCT00000987 -NCT00000998 -NCT00001001 -NCT00001013 -NCT00001014 -NCT00001015 -NCT00001025 -NCT00001028 -NCT00001030 -NCT00001033 -NCT00001038 -NCT00001077 -NCT00001081 -NCT00001092 -NCT00001100 -NCT00001101 -NCT00001103 -NCT00001109 -NCT00001115 -NCT00001119 -NCT00001126 -NCT00001127 -NCT00001128 -NCT00001143 -NCT00001144 -NCT00001145 -NCT00001148 -NCT00001149 -NCT00001152 -NCT00001153 -NCT00001155 -NCT00001156 -NCT00001159 -NCT00001160 -NCT00001161 -NCT00001165 -NCT00001166 -NCT00001167 -NCT00001173 -NCT00001177 -NCT00001180 -NCT00001181 -NCT00001184 -NCT00001188 -NCT00001189 -NCT00001190 -NCT00001193 -NCT00001196 -NCT00001197 -NCT00001202 -NCT00001203 -NCT00001204 -NCT00001205 -NCT00001208 -NCT00001216 -NCT00001220 -NCT00001221 -NCT00001224 -NCT00001225 -NCT00001228 -NCT00001230 -NCT00001237 -NCT00001241 -NCT00001242 -NCT00001246 -NCT00001249 -NCT00001250 -NCT00001252 -NCT00001253 -NCT00001254 -NCT00001256 -NCT00001259 -NCT00001261 -NCT00001262 -NCT00001265 -NCT00001266 -NCT00001267 -NCT00001269 -NCT00001270 -NCT00001276 -NCT00001277 -NCT00001278 -NCT00001280 -NCT00001282 -NCT00001284 -NCT00001287 -NCT00001288 -NCT00001291 -NCT00001292 -NCT00001296 -NCT00001301 -NCT00001302 -NCT00001303 -NCT00001304 -NCT00001305 -NCT00001307 -NCT00001308 -NCT00001313 -NCT00001314 -NCT00001318 -NCT00001322 -NCT00001323 -NCT00001325 -NCT00001332 -NCT00001335 -NCT00001337 -NCT00001338 -NCT00001339 -NCT00001342 -NCT00001343 -NCT00001344 -NCT00001347 -NCT00001349 -NCT00001350 -NCT00001356 -NCT00001359 -NCT00001364 -NCT00001365 -NCT00001366 -NCT00001367 -NCT00001368 -NCT00001371 -NCT00001378 -NCT00001379 -NCT00001381 -NCT00001383 -NCT00001384 -NCT00001386 -NCT00001393 -NCT00001394 -NCT00001398 -NCT00001399 -NCT00001400 -NCT00001402 -NCT00001403 -NCT00001405 -NCT00001407 -NCT00001408 -NCT00001412 -NCT00001413 -NCT00001415 -NCT00001417 -NCT00001420 -NCT00001421 -NCT00001431 -NCT00001436 -NCT00001437 -NCT00001442 -NCT00001444 -NCT00001445 -NCT00001446 -NCT00001452 -NCT00001453 -NCT00001454 -NCT00001455 -NCT00001456 -NCT00001457 -NCT00001458 -NCT00001460 -NCT00001462 -NCT00001466 -NCT00001469 -NCT00001473 -NCT00001476 -NCT00001478 -NCT00001480 -NCT00001481 -NCT00001482 -NCT00001483 -NCT00001487 -NCT00001489 -NCT00001493 -NCT00001496 -NCT00001498 -NCT00001502 -NCT00001505 -NCT00001520 -NCT00001521 -NCT00001522 -NCT00001523 -NCT00001524 -NCT00001527 -NCT00001528 -NCT00001529 -NCT00001530 -NCT00001532 -NCT00001533 -NCT00001534 -NCT00001536 -NCT00001538 -NCT00001539 -NCT00001541 -NCT00001542 -NCT00001543 -NCT00001544 -NCT00001546 -NCT00001549 -NCT00001550 -NCT00001551 -NCT00001553 -NCT00001554 -NCT00001560 -NCT00001561 -NCT00001565 -NCT00001568 -NCT00001573 -NCT00001574 -NCT00001579 -NCT00001586 -NCT00001589 -NCT00001596 -NCT00001598 -NCT00001599 -NCT00001600 -NCT00001605 -NCT00001606 -NCT00001610 -NCT00001611 -NCT00001615 -NCT00001621 -NCT00001622 -NCT00001625 -NCT00001628 -NCT00001629 -NCT00001631 -NCT00001633 -NCT00001637 -NCT00001638 -NCT00001639 -NCT00001640 -NCT00001641 -NCT00001643 -NCT00001645 -NCT00001646 -NCT00001649 -NCT00001656 -NCT00001657 -NCT00001658 -NCT00001659 -NCT00001661 -NCT00001662 -NCT00001663 -NCT00001664 -NCT00001665 -NCT00001666 -NCT00001668 -NCT00001669 -NCT00001672 -NCT00001676 -NCT00001685 -NCT00001688 -NCT00001693 -NCT00001696 -NCT00001699 -NCT00001713 -NCT00001716 -NCT00001718 -NCT00001719 -NCT00001720 -NCT00001721 -NCT00001722 -NCT00001723 -NCT00001724 -NCT00001725 -NCT00001728 -NCT00001729 -NCT00001730 -NCT00001731 -NCT00001735 -NCT00001737 -NCT00001742 -NCT00001748 -NCT00001750 -NCT00001752 -NCT00001754 -NCT00001756 -NCT00001759 -NCT00001760 -NCT00001761 -NCT00001763 -NCT00001764 -NCT00001765 -NCT00001770 -NCT00001774 -NCT00001776 -NCT00001777 -NCT00001780 -NCT00001781 -NCT00001783 -NCT00001784 -NCT00001790 -NCT00001814 -NCT00001830 -NCT00001836 -NCT00001839 -NCT00001840 -NCT00001848 -NCT00001849 -NCT00001851 -NCT00001852 -NCT00001853 -NCT00001854 -NCT00001859 -NCT00001860 -NCT00001861 -NCT00001862 -NCT00001864 -NCT00001865 -NCT00001866 -NCT00001870 -NCT00001871 -NCT00001876 -NCT00001877 -NCT00001878 -NCT00001881 -NCT00001884 -NCT00001885 -NCT00001886 -NCT00001887 -NCT00001888 -NCT00001889 -NCT00001890 -NCT00001891 -NCT00001893 -NCT00001894 -NCT00001895 -NCT00001899 -NCT00001901 -NCT00001903 -NCT00001905 -NCT00001906 -NCT00001908 -NCT00001909 -NCT00001910 -NCT00001911 -NCT00001915 -NCT00001916 -NCT00001918 -NCT00001921 -NCT00001922 -NCT00001923 -NCT00001925 -NCT00001926 -NCT00001927 -NCT00001928 -NCT00001929 -NCT00001930 -NCT00001931 -NCT00001932 -NCT00001933 -NCT00001934 -NCT00001936 -NCT00001940 -NCT00001946 -NCT00001950 -NCT00001951 -NCT00001952 -NCT00001953 -NCT00001954 -NCT00001955 -NCT00001957 -NCT00001960 -NCT00001961 -NCT00001963 -NCT00001965 -NCT00001966 -NCT00001968 -NCT00001969 -NCT00001971 -NCT00001972 -NCT00001973 -NCT00001975 -NCT00001976 -NCT00001977 -NCT00001981 -NCT00001982 -NCT00001985 -NCT00001986 -NCT00001987 -NCT00001990 -NCT00001991 -NCT00002032 -NCT00002047 -NCT00002055 -NCT00002056 -NCT00002062 -NCT00002063 -NCT00002068 -NCT00002082 -NCT00002085 -NCT00002088 -NCT00002101 -NCT00002102 -NCT00002103 -NCT00002104 -NCT00002116 -NCT00002120 -NCT00002121 -NCT00002136 -NCT00002137 -NCT00002138 -NCT00002140 -NCT00002144 -NCT00002177 -NCT00002181 -NCT00002182 -NCT00002219 -NCT00002248 -NCT00002252 -NCT00002253 -NCT00002258 -NCT00002273 -NCT00002274 -NCT00002297 -NCT00002317 -NCT00002331 -NCT00002340 -NCT00002342 -NCT00002343 -NCT00002404 -NCT00002408 -NCT00002426 -NCT00002434 -NCT00002444 -NCT00002459 -NCT00002471 -NCT00002478 -NCT00002490 -NCT00002492 -NCT00002493 -NCT00002495 -NCT00002496 -NCT00002502 -NCT00002511 -NCT00002523 -NCT00002528 -NCT00002529 -NCT00002536 -NCT00002537 -NCT00002542 -NCT00002548 -NCT00002550 -NCT00002555 -NCT00002562 -NCT00002564 -NCT00002569 -NCT00002575 -NCT00002580 -NCT00002581 -NCT00002593 -NCT00002602 -NCT00002608 -NCT00002615 -NCT00002616 -NCT00002619 -NCT00002620 -NCT00002622 -NCT00002623 -NCT00002628 -NCT00002630 -NCT00002633 -NCT00002639 -NCT00002641 -NCT00002646 -NCT00002651 -NCT00002653 -NCT00002654 -NCT00002659 -NCT00002663 -NCT00002670 -NCT00002676 -NCT00002680 -NCT00002682 -NCT00002687 -NCT00002689 -NCT00002706 -NCT00002708 -NCT00002725 -NCT00002735 -NCT00002742 -NCT00002749 -NCT00002755 -NCT00002759 -NCT00002762 -NCT00002764 -NCT00002772 -NCT00002774 -NCT00002777 -NCT00002783 -NCT00002784 -NCT00002791 -NCT00002804 -NCT00002806 -NCT00002810 -NCT00002813 -NCT00002814 -NCT00002827 -NCT00002839 -NCT00002849 -NCT00002850 -NCT00002864 -NCT00002872 -NCT00002873 -NCT00002875 -NCT00002878 -NCT00002879 -NCT00002882 -NCT00002908 -NCT00002916 -NCT00002917 -NCT00002919 -NCT00002920 -NCT00002934 -NCT00002946 -NCT00002967 -NCT00002971 -NCT00002974 -NCT00002985 -NCT00002990 -NCT00002996 -NCT00002999 -NCT00003000 -NCT00003002 -NCT00003012 -NCT00003013 -NCT00003017 -NCT00003018 -NCT00003022 -NCT00003025 -NCT00003031 -NCT00003039 -NCT00003041 -NCT00003049 -NCT00003052 -NCT00003055 -NCT00003056 -NCT00003057 -NCT00003058 -NCT00003065 -NCT00003067 -NCT00003072 -NCT00003075 -NCT00003078 -NCT00003082 -NCT00003088 -NCT00003093 -NCT00003094 -NCT00003098 -NCT00003099 -NCT00003105 -NCT00003115 -NCT00003117 -NCT00003118 -NCT00003124 -NCT00003126 -NCT00003128 -NCT00003129 -NCT00003132 -NCT00003133 -NCT00003137 -NCT00003139 -NCT00003153 -NCT00003157 -NCT00003162 -NCT00003172 -NCT00003176 -NCT00003199 -NCT00003209 -NCT00003210 -NCT00003213 -NCT00003217 -NCT00003232 -NCT00003234 -NCT00003237 -NCT00003253 -NCT00003257 -NCT00003266 -NCT00003267 -NCT00003276 -NCT00003279 -NCT00003280 -NCT00003292 -NCT00003296 -NCT00003298 -NCT00003315 -NCT00003325 -NCT00003328 -NCT00003331 -NCT00003337 -NCT00003338 -NCT00003342 -NCT00003346 -NCT00003353 -NCT00003364 -NCT00003368 -NCT00003369 -NCT00003372 -NCT00003375 -NCT00003376 -NCT00003377 -NCT00003379 -NCT00003381 -NCT00003384 -NCT00003387 -NCT00003391 -NCT00003396 -NCT00003409 -NCT00003410 -NCT00003416 -NCT00003418 -NCT00003434 -NCT00003440 -NCT00003443 -NCT00003445 -NCT00003449 -NCT00003453 -NCT00003463 -NCT00003465 -NCT00003466 -NCT00003468 -NCT00003470 -NCT00003471 -NCT00003476 -NCT00003489 -NCT00003494 -NCT00003509 -NCT00003511 -NCT00003519 -NCT00003520 -NCT00003524 -NCT00003537 -NCT00003549 -NCT00003557 -NCT00003564 -NCT00003571 -NCT00003576 -NCT00003590 -NCT00003591 -NCT00003593 -NCT00003595 -NCT00003598 -NCT00003621 -NCT00003623 -NCT00003640 -NCT00003642 -NCT00003645 -NCT00003654 -NCT00003658 -NCT00003667 -NCT00003669 -NCT00003675 -NCT00003677 -NCT00003684 -NCT00003685 -NCT00003686 -NCT00003700 -NCT00003701 -NCT00003702 -NCT00003703 -NCT00003714 -NCT00003719 -NCT00003742 -NCT00003754 -NCT00003759 -NCT00003760 -NCT00003761 -NCT00003771 -NCT00003775 -NCT00003778 -NCT00003779 -NCT00003780 -NCT00003781 -NCT00003782 -NCT00003798 -NCT00003805 -NCT00003809 -NCT00003814 -NCT00003817 -NCT00003820 -NCT00003824 -NCT00003825 -NCT00003829 -NCT00003830 -NCT00003831 -NCT00003838 -NCT00003842 -NCT00003851 -NCT00003853 -NCT00003856 -NCT00003857 -NCT00003862 -NCT00003863 -NCT00003876 -NCT00003887 -NCT00003896 -NCT00003899 -NCT00003906 -NCT00003908 -NCT00003909 -NCT00003923 -NCT00003930 -NCT00003934 -NCT00003936 -NCT00003937 -NCT00003938 -NCT00003941 -NCT00003945 -NCT00003953 -NCT00003954 -NCT00003957 -NCT00003966 -NCT00003977 -NCT00003984 -NCT00003985 -NCT00004010 -NCT00004017 -NCT00004028 -NCT00004033 -NCT00004048 -NCT00004050 -NCT00004054 -NCT00004062 -NCT00004063 -NCT00004068 -NCT00004074 -NCT00004080 -NCT00004088 -NCT00004089 -NCT00004091 -NCT00004094 -NCT00004099 -NCT00004113 -NCT00004122 -NCT00004125 -NCT00004139 -NCT00004143 -NCT00004146 -NCT00004148 -NCT00004154 -NCT00004157 -NCT00004161 -NCT00004164 -NCT00004165 -NCT00004177 -NCT00004192 -NCT00004194 -NCT00004197 -NCT00004202 -NCT00004203 -NCT00004204 -NCT00004205 -NCT00004211 -NCT00004216 -NCT00004218 -NCT00004219 -NCT00004223 -NCT00004226 -NCT00004227 -NCT00004232 -NCT00004235 -NCT00004236 -NCT00004246 -NCT00004248 -NCT00004250 -NCT00004254 -NCT00004259 -NCT00004260 -NCT00004266 -NCT00004268 -NCT00004274 -NCT00004275 -NCT00004276 -NCT00004287 -NCT00004296 -NCT00004297 -NCT00004313 -NCT00004317 -NCT00004326 -NCT00004332 -NCT00004334 -NCT00004335 -NCT00004338 -NCT00004339 -NCT00004341 -NCT00004343 -NCT00004351 -NCT00004357 -NCT00004359 -NCT00004364 -NCT00004365 -NCT00004381 -NCT00004387 -NCT00004392 -NCT00004399 -NCT00004401 -NCT00004402 -NCT00004403 -NCT00004404 -NCT00004407 -NCT00004408 -NCT00004410 -NCT00004414 -NCT00004416 -NCT00004418 -NCT00004428 -NCT00004429 -NCT00004431 -NCT00004438 -NCT00004441 -NCT00004444 -NCT00004451 -NCT00004465 -NCT00004466 -NCT00004467 -NCT00004475 -NCT00004478 -NCT00004480 -NCT00004485 -NCT00004487 -NCT00004492 -NCT00004493 -NCT00004494 -NCT00004496 -NCT00004497 -NCT00004533 -NCT00004553 -NCT00004554 -NCT00004557 -NCT00004562 -NCT00004563 -NCT00004566 -NCT00004567 -NCT00004571 -NCT00004572 -NCT00004576 -NCT00004635 -NCT00004637 -NCT00004645 -NCT00004648 -NCT00004649 -NCT00004654 -NCT00004669 -NCT00004670 -NCT00004682 -NCT00004685 -NCT00004686 -NCT00004689 -NCT00004694 -NCT00004696 -NCT00004727 -NCT00004728 -NCT00004729 -NCT00004731 -NCT00004732 -NCT00004733 -NCT00004734 -NCT00004736 -NCT00004738 -NCT00004740 -NCT00004748 -NCT00004751 -NCT00004755 -NCT00004760 -NCT00004762 -NCT00004763 -NCT00004769 -NCT00004770 -NCT00004776 -NCT00004784 -NCT00004785 -NCT00004787 -NCT00004788 -NCT00004793 -NCT00004796 -NCT00004797 -NCT00004805 -NCT00004806 -NCT00004808 -NCT00004809 -NCT00004810 -NCT00004812 -NCT00004817 -NCT00004825 -NCT00004826 -NCT00004829 -NCT00004838 -NCT00004842 -NCT00004843 -NCT00004844 -NCT00004848 -NCT00004850 -NCT00004851 -NCT00004856 -NCT00004857 -NCT00004865 -NCT00004866 -NCT00004868 -NCT00004883 -NCT00004890 -NCT00004895 -NCT00004900 -NCT00004901 -NCT00004911 -NCT00004912 -NCT00004925 -NCT00004928 -NCT00004929 -NCT00004937 -NCT00004982 -NCT00004983 -NCT00004984 -NCT00004991 -NCT00004992 -NCT00005001 -NCT00005003 -NCT00005004 -NCT00005005 -NCT00005007 -NCT00005009 -NCT00005011 -NCT00005013 -NCT00005016 -NCT00005033 -NCT00005035 -NCT00005039 -NCT00005047 -NCT00005053 -NCT00005066 -NCT00005070 -NCT00005072 -NCT00005075 -NCT00005079 -NCT00005081 -NCT00005086 -NCT00005090 -NCT00005100 -NCT00005101 -NCT00005102 -NCT00005103 -NCT00005105 -NCT00005108 -NCT00005111 -NCT00005112 -NCT00005113 -NCT00005117 -NCT00005129 -NCT00005176 -NCT00005271 -NCT00005289 -NCT00005299 -NCT00005313 -NCT00005381 -NCT00005479 -NCT00005567 -NCT00005570 -NCT00005571 -NCT00005574 -NCT00005575 -NCT00005576 -NCT00005579 -NCT00005589 -NCT00005595 -NCT00005599 -NCT00005607 -NCT00005610 -NCT00005624 -NCT00005625 -NCT00005628 -NCT00005629 -NCT00005630 -NCT00005631 -NCT00005632 -NCT00005635 -NCT00005636 -NCT00005637 -NCT00005640 -NCT00005647 -NCT00005652 -NCT00005654 -NCT00005655 -NCT00005657 -NCT00005660 -NCT00005663 -NCT00005664 -NCT00005665 -NCT00005669 -NCT00005674 -NCT00005736 -NCT00005739 -NCT00005760 -NCT00005761 -NCT00005765 -NCT00005766 -NCT00005768 -NCT00005771 -NCT00005772 -NCT00005773 -NCT00005774 -NCT00005775 -NCT00005776 -NCT00005777 -NCT00005778 -NCT00005781 -NCT00005782 -NCT00005783 -NCT00005784 -NCT00005785 -NCT00005786 -NCT00005788 -NCT00005791 -NCT00005805 -NCT00005808 -NCT00005810 -NCT00005812 -NCT00005814 -NCT00005826 -NCT00005829 -NCT00005832 -NCT00005834 -NCT00005837 -NCT00005842 -NCT00005847 -NCT00005848 -NCT00005849 -NCT00005850 -NCT00005856 -NCT00005862 -NCT00005866 -NCT00005869 -NCT00005871 -NCT00005874 -NCT00005880 -NCT00005883 -NCT00005888 -NCT00005889 -NCT00005891 -NCT00005892 -NCT00005893 -NCT00005902 -NCT00005903 -NCT00005905 -NCT00005907 -NCT00005910 -NCT00005919 -NCT00005921 -NCT00005924 -NCT00005925 -NCT00005926 -NCT00005927 -NCT00005933 -NCT00005937 -NCT00005938 -NCT00005941 -NCT00005947 -NCT00005949 -NCT00005950 -NCT00005951 -NCT00005957 -NCT00005958 -NCT00005965 -NCT00005969 -NCT00005970 -NCT00005974 -NCT00005975 -NCT00005985 -NCT00005991 -NCT00005997 -NCT00005999 -NCT00006002 -NCT00006014 -NCT00006021 -NCT00006024 -NCT00006026 -NCT00006032 -NCT00006034 -NCT00006038 -NCT00006044 -NCT00006051 -NCT00006054 -NCT00006055 -NCT00006056 -NCT00006058 -NCT00006059 -NCT00006062 -NCT00006068 -NCT00006070 -NCT00006071 -NCT00006072 -NCT00006077 -NCT00006078 -NCT00006079 -NCT00006080 -NCT00006081 -NCT00006083 -NCT00006088 -NCT00006096 -NCT00006097 -NCT00006101 -NCT00006105 -NCT00006110 -NCT00006111 -NCT00006112 -NCT00006118 -NCT00006124 -NCT00006128 -NCT00006131 -NCT00006132 -NCT00006135 -NCT00006146 -NCT00006148 -NCT00006150 -NCT00006156 -NCT00006157 -NCT00006158 -NCT00006159 -NCT00006160 -NCT00006164 -NCT00006168 -NCT00006173 -NCT00006174 -NCT00006175 -NCT00006180 -NCT00006184 -NCT00006188 -NCT00006193 -NCT00006198 -NCT00006202 -NCT00006213 -NCT00006214 -NCT00006224 -NCT00006226 -NCT00006242 -NCT00006251 -NCT00006252 -NCT00006259 -NCT00006263 -NCT00006269 -NCT00006270 -NCT00006271 -NCT00006272 -NCT00006278 -NCT00006279 -NCT00006289 -NCT00006292 -NCT00006299 -NCT00006305 -NCT00006329 -NCT00006331 -NCT00006333 -NCT00006334 -NCT00006335 -NCT00006336 -NCT00006337 -NCT00006341 -NCT00006345 -NCT00006348 -NCT00006351 -NCT00006352 -NCT00006355 -NCT00006360 -NCT00006376 -NCT00006386 -NCT00006388 -NCT00006395 -NCT00006398 -NCT00006400 -NCT00006401 -NCT00006411 -NCT00006413 -NCT00006414 -NCT00006417 -NCT00006421 -NCT00006422 -NCT00006424 -NCT00006425 -NCT00006426 -NCT00006428 -NCT00006429 -NCT00006430 -NCT00006432 -NCT00006436 -NCT00006438 -NCT00006444 -NCT00006445 -NCT00006447 -NCT00006450 -NCT00006451 -NCT00006455 -NCT00006460 -NCT00006472 -NCT00006474 -NCT00006476 -NCT00006478 -NCT00006481 -NCT00006482 -NCT00006488 -NCT00006501 -NCT00006505 -NCT00006516 -NCT00006518 -NCT00006656 -NCT00006669 -NCT00006695 -NCT00006721 -NCT00006890 -NCT00006916 -NCT00007020 -NCT00007150 -NCT00007163 -NCT00007189 -NCT00007280 -NCT00007319 -NCT00007345 -NCT00007475 -NCT00007501 -NCT00007670 -NCT00007800 -NCT00007982 -NCT00007995 -NCT00008112 -NCT00008216 -NCT00008229 -NCT00008307 -NCT00008424 -NCT00008463 -NCT00008476 -NCT00008515 -NCT00008736 -NCT00008749 -NCT00008814 -NCT00008827 -NCT00009035 -NCT00009048 -NCT00009204 -NCT00009243 -NCT00009529 -NCT00009542 -NCT00009555 -NCT00009568 -NCT00009581 -NCT00009620 -NCT00009633 -NCT00009646 -NCT00009659 -NCT00009672 -NCT00009698 -NCT00009763 -NCT00009789 -NCT00009841 -NCT00009945 -NCT00009958 -NCT00009984 -NCT00009997 -NCT00010439 -NCT00010465 -NCT00010517 -NCT00010764 -NCT00010816 -NCT00010933 -NCT00010946 -NCT00011063 -NCT00011258 -NCT00011323 -NCT00011336 -NCT00011570 -NCT00011648 -NCT00011752 -NCT00011765 -NCT00011960 -NCT00011973 -NCT00012857 -NCT00013156 -NCT00013377 -NCT00013390 -NCT00013416 -NCT00013468 -NCT00013546 -NCT00013559 -NCT00013650 -NCT00013689 -NCT00013741 -NCT00013793 -NCT00013832 -NCT00013845 -NCT00013923 -NCT00014508 -NCT00014612 -NCT00014638 -NCT00014794 -NCT00014950 -NCT00014976 -NCT00015431 -NCT00015470 -NCT00015613 -NCT00015782 -NCT00015795 -NCT00016081 -NCT00016107 -NCT00016419 -NCT00016432 -NCT00016471 -NCT00016497 -NCT00016653 -NCT00016679 -NCT00016848 -NCT00016952 -NCT00017329 -NCT00017550 -NCT00017810 -NCT00017862 -NCT00017914 -NCT00017927 -NCT00017940 -NCT00017979 -NCT00018070 -NCT00018109 -NCT00018174 -NCT00018408 -NCT00018447 -NCT00018486 -NCT00018525 -NCT00018564 -NCT00018889 -NCT00019110 -NCT00019643 -NCT00019812 -NCT00019825 -NCT00020527 -NCT00020605 -NCT00020618 -NCT00020670 -NCT00020709 -NCT00020761 -NCT00020865 -NCT00020943 -NCT00021151 -NCT00021255 -NCT00021372 -NCT00021528 -NCT00021567 -NCT00021580 -NCT00021645 -NCT00021671 -NCT00021723 -NCT00021827 -NCT00021866 -NCT00022581 -NCT00022607 -NCT00022672 -NCT00022841 -NCT00023010 -NCT00023036 -NCT00023049 -NCT00023062 -NCT00023101 -NCT00023192 -NCT00023296 -NCT00023374 -NCT00023439 -NCT00023452 -NCT00023491 -NCT00023569 -NCT00024440 -NCT00024479 -NCT00024570 -NCT00024791 -NCT00024908 -NCT00024986 -NCT00024999 -NCT00025532 -NCT00025662 -NCT00025701 -NCT00025805 -NCT00025870 -NCT00025883 -NCT00025909 -NCT00025935 -NCT00026052 -NCT00026065 -NCT00026104 -NCT00026286 -NCT00026533 -NCT00026598 -NCT00026637 -NCT00026702 -NCT00026728 -NCT00026741 -NCT00026793 -NCT00026923 -NCT00026962 -NCT00027170 -NCT00027209 -NCT00027235 -NCT00027274 -NCT00027287 -NCT00027300 -NCT00027391 -NCT00027638 -NCT00027794 -NCT00027937 -NCT00028028 -NCT00028080 -NCT00028158 -NCT00028184 -NCT00028210 -NCT00028275 -NCT00028340 -NCT00028379 -NCT00028496 -NCT00028795 -NCT00028886 -NCT00028938 -NCT00029107 -NCT00029120 -NCT00029146 -NCT00029159 -NCT00029198 -NCT00029211 -NCT00029315 -NCT00029380 -NCT00029666 -NCT00029731 -NCT00029770 -NCT00029809 -NCT00029822 -NCT00029861 -NCT00029939 -NCT00029952 -NCT00030004 -NCT00030134 -NCT00030160 -NCT00030199 -NCT00030212 -NCT00030238 -NCT00030277 -NCT00030290 -NCT00030394 -NCT00030498 -NCT00030589 -NCT00030602 -NCT00030797 -NCT00030940 -NCT00030966 -NCT00031005 -NCT00031096 -NCT00031239 -NCT00031720 -NCT00031837 -NCT00032006 -NCT00032097 -NCT00032240 -NCT00032331 -NCT00032383 -NCT00032448 -NCT00032461 -NCT00032513 -NCT00032643 -NCT00032682 -NCT00032877 -NCT00032890 -NCT00033189 -NCT00033280 -NCT00033332 -NCT00033462 -NCT00033553 -NCT00033774 -NCT00033813 -NCT00033891 -NCT00034021 -NCT00034060 -NCT00034242 -NCT00034424 -NCT00034450 -NCT00034736 -NCT00034762 -NCT00034788 -NCT00034905 -NCT00035269 -NCT00035373 -NCT00035386 -NCT00035451 -NCT00035477 -NCT00035633 -NCT00035789 -NCT00035815 -NCT00035828 -NCT00035854 -NCT00036335 -NCT00036595 -NCT00036608 -NCT00036647 -NCT00036764 -NCT00037050 -NCT00037154 -NCT00037479 -NCT00037557 -NCT00037817 -NCT00037843 -NCT00037921 -NCT00037973 -NCT00038064 -NCT00038077 -NCT00038090 -NCT00038116 -NCT00038142 -NCT00038233 -NCT00038350 -NCT00038415 -NCT00038623 -NCT00038792 -NCT00039130 -NCT00039182 -NCT00039312 -NCT00039338 -NCT00039364 -NCT00039416 -NCT00039676 -NCT00039702 -NCT00039858 -NCT00039962 -NCT00040027 -NCT00040131 -NCT00040196 -NCT00040248 -NCT00040326 -NCT00040339 -NCT00040352 -NCT00040378 -NCT00040443 -NCT00040456 -NCT00040560 -NCT00040690 -NCT00040742 -NCT00040755 -NCT00040794 -NCT00040885 -NCT00040937 -NCT00041119 -NCT00041587 -NCT00041600 -NCT00041665 -NCT00041899 -NCT00041938 -NCT00041977 -NCT00042042 -NCT00042120 -NCT00042159 -NCT00042172 -NCT00042211 -NCT00042276 -NCT00042549 -NCT00042562 -NCT00042575 -NCT00042705 -NCT00042770 -NCT00042835 -NCT00042848 -NCT00042952 -NCT00042991 -NCT00043186 -NCT00043303 -NCT00043316 -NCT00043628 -NCT00043680 -NCT00043719 -NCT00043784 -NCT00043836 -NCT00043849 -NCT00043940 -NCT00043992 -NCT00044057 -NCT00044122 -NCT00044174 -NCT00044226 -NCT00044252 -NCT00044304 -NCT00044369 -NCT00044473 -NCT00044629 -NCT00044798 -NCT00044811 -NCT00044824 -NCT00044876 -NCT00045136 -NCT00045708 -NCT00045812 -NCT00045838 -NCT00045877 -NCT00045955 -NCT00045981 -NCT00045994 -NCT00046072 -NCT00046124 -NCT00046189 -NCT00046254 -NCT00046397 -NCT00046410 -NCT00046436 -NCT00046527 -NCT00046748 -NCT00046774 -NCT00046995 -NCT00047125 -NCT00047164 -NCT00047281 -NCT00047333 -NCT00047554 -NCT00047723 -NCT00047879 -NCT00047918 -NCT00047957 -NCT00048061 -NCT00048347 -NCT00048360 -NCT00048399 -NCT00048490 -NCT00048542 -NCT00048685 -NCT00048815 -NCT00049036 -NCT00049296 -NCT00049374 -NCT00049543 -NCT00049556 -NCT00049673 -NCT00049764 -NCT00049803 -NCT00049816 -NCT00049829 -NCT00049920 -NCT00050024 -NCT00050167 -NCT00050193 -NCT00050219 -NCT00050245 -NCT00050310 -NCT00050362 -NCT00050479 -NCT00050609 -NCT00050752 -NCT00050778 -NCT00050817 -NCT00051337 -NCT00051363 -NCT00051402 -NCT00051597 -NCT00051623 -NCT00051636 -NCT00051792 -NCT00051961 -NCT00052221 -NCT00052286 -NCT00052624 -NCT00052897 -NCT00052910 -NCT00052962 -NCT00053053 -NCT00053469 -NCT00053482 -NCT00053625 -NCT00053742 -NCT00053846 -NCT00053898 -NCT00054054 -NCT00054067 -NCT00054158 -NCT00054301 -NCT00054457 -NCT00054704 -NCT00054730 -NCT00054756 -NCT00054925 -NCT00055029 -NCT00055042 -NCT00055055 -NCT00055120 -NCT00055198 -NCT00055302 -NCT00055380 -NCT00055445 -NCT00055484 -NCT00055549 -NCT00055588 -NCT00055692 -NCT00055848 -NCT00055991 -NCT00056160 -NCT00056199 -NCT00056225 -NCT00056329 -NCT00056355 -NCT00056433 -NCT00056576 -NCT00056602 -NCT00056628 -NCT00056654 -NCT00056719 -NCT00056771 -NCT00056784 -NCT00056862 -NCT00057018 -NCT00057122 -NCT00057161 -NCT00057434 -NCT00057694 -NCT00057746 -NCT00057798 -NCT00057811 -NCT00057993 -NCT00058240 -NCT00058461 -NCT00058526 -NCT00058604 -NCT00058656 -NCT00058760 -NCT00058812 -NCT00059410 -NCT00059423 -NCT00059449 -NCT00059501 -NCT00059592 -NCT00059748 -NCT00059826 -NCT00060138 -NCT00060242 -NCT00060346 -NCT00060372 -NCT00060398 -NCT00060463 -NCT00060515 -NCT00060528 -NCT00060580 -NCT00060593 -NCT00060606 -NCT00060697 -NCT00060749 -NCT00060970 -NCT00060996 -NCT00061022 -NCT00061048 -NCT00061269 -NCT00061373 -NCT00061633 -NCT00061789 -NCT00061893 -NCT00061906 -NCT00061932 -NCT00061958 -NCT00062231 -NCT00062348 -NCT00062439 -NCT00062465 -NCT00062504 -NCT00062569 -NCT00062582 -NCT00062595 -NCT00062621 -NCT00062764 -NCT00062881 -NCT00062985 -NCT00063024 -NCT00063076 -NCT00063115 -NCT00063180 -NCT00063232 -NCT00063765 -NCT00063817 -NCT00063856 -NCT00063882 -NCT00063895 -NCT00064337 -NCT00064363 -NCT00064467 -NCT00064649 -NCT00064766 -NCT00064961 -NCT00064987 -NCT00065013 -NCT00065052 -NCT00065078 -NCT00065169 -NCT00065182 -NCT00065221 -NCT00065234 -NCT00065273 -NCT00065286 -NCT00065299 -NCT00065364 -NCT00065585 -NCT00065858 -NCT00065949 -NCT00065975 -NCT00066079 -NCT00066144 -NCT00066183 -NCT00066248 -NCT00066573 -NCT00066690 -NCT00066807 -NCT00066846 -NCT00066911 -NCT00067145 -NCT00067327 -NCT00067431 -NCT00067444 -NCT00067496 -NCT00067509 -NCT00067691 -NCT00067821 -NCT00067925 -NCT00068029 -NCT00068042 -NCT00068055 -NCT00068146 -NCT00068159 -NCT00068263 -NCT00068315 -NCT00068510 -NCT00068575 -NCT00068614 -NCT00068822 -NCT00068861 -NCT00068887 -NCT00069056 -NCT00069186 -NCT00069199 -NCT00069303 -NCT00069329 -NCT00069550 -NCT00069589 -NCT00069680 -NCT00069823 -NCT00069914 -NCT00069966 -NCT00070200 -NCT00070317 -NCT00070564 -NCT00070577 -NCT00070655 -NCT00070694 -NCT00070707 -NCT00070733 -NCT00070902 -NCT00070993 -NCT00071227 -NCT00071305 -NCT00071396 -NCT00071435 -NCT00071526 -NCT00071786 -NCT00071838 -NCT00071942 -NCT00071994 -NCT00072020 -NCT00072293 -NCT00072462 -NCT00072475 -NCT00072501 -NCT00072592 -NCT00072605 -NCT00072683 -NCT00072709 -NCT00072800 -NCT00072826 -NCT00072904 -NCT00072969 -NCT00073073 -NCT00073190 -NCT00073463 -NCT00073723 -NCT00073775 -NCT00073788 -NCT00073801 -NCT00074282 -NCT00074373 -NCT00074633 -NCT00074685 -NCT00074711 -NCT00074880 -NCT00074932 -NCT00075023 -NCT00075114 -NCT00075166 -NCT00075205 -NCT00075244 -NCT00075335 -NCT00075387 -NCT00075439 -NCT00075465 -NCT00075608 -NCT00075621 -NCT00076024 -NCT00076271 -NCT00076336 -NCT00076414 -NCT00076440 -NCT00076505 -NCT00076557 -NCT00076674 -NCT00076726 -NCT00076752 -NCT00076960 -NCT00077012 -NCT00077038 -NCT00077064 -NCT00077103 -NCT00077194 -NCT00077207 -NCT00077311 -NCT00077545 -NCT00077805 -NCT00077818 -NCT00077909 -NCT00077922 -NCT00078026 -NCT00078078 -NCT00078091 -NCT00078104 -NCT00078195 -NCT00078208 -NCT00078338 -NCT00078351 -NCT00078364 -NCT00078403 -NCT00078533 -NCT00078663 -NCT00078715 -NCT00079001 -NCT00079053 -NCT00079118 -NCT00079235 -NCT00079313 -NCT00079417 -NCT00079521 -NCT00079599 -NCT00079768 -NCT00079820 -NCT00080054 -NCT00080067 -NCT00080210 -NCT00080275 -NCT00080288 -NCT00080366 -NCT00080392 -NCT00080405 -NCT00080444 -NCT00080483 -NCT00080535 -NCT00080574 -NCT00080600 -NCT00080613 -NCT00080860 -NCT00081263 -NCT00081341 -NCT00081432 -NCT00081575 -NCT00081640 -NCT00081731 -NCT00081744 -NCT00081835 -NCT00081913 -NCT00081991 -NCT00082017 -NCT00082043 -NCT00082069 -NCT00082108 -NCT00082251 -NCT00082446 -NCT00082667 -NCT00082862 -NCT00082927 -NCT00083330 -NCT00083356 -NCT00083382 -NCT00083408 -NCT00083499 -NCT00083551 -NCT00083564 -NCT00083577 -NCT00083681 -NCT00083798 -NCT00083902 -NCT00084097 -NCT00084123 -NCT00084201 -NCT00084279 -NCT00084305 -NCT00084435 -NCT00085098 -NCT00085293 -NCT00085475 -NCT00085657 -NCT00085683 -NCT00085917 -NCT00085930 -NCT00085995 -NCT00086073 -NCT00086190 -NCT00086359 -NCT00086619 -NCT00086658 -NCT00086671 -NCT00086723 -NCT00086840 -NCT00086983 -NCT00087139 -NCT00087178 -NCT00087256 -NCT00088153 -NCT00088309 -NCT00088348 -NCT00088374 -NCT00088426 -NCT00088582 -NCT00088608 -NCT00088699 -NCT00088829 -NCT00088907 -NCT00089167 -NCT00089310 -NCT00089401 -NCT00089414 -NCT00089427 -NCT00089531 -NCT00089557 -NCT00089609 -NCT00089739 -NCT00089765 -NCT00089791 -NCT00089830 -NCT00090103 -NCT00090207 -NCT00090337 -NCT00090402 -NCT00091026 -NCT00091130 -NCT00091169 -NCT00091247 -NCT00091494 -NCT00091611 -NCT00091702 -NCT00091884 -NCT00091897 -NCT00092144 -NCT00092287 -NCT00092482 -NCT00092521 -NCT00092599 -NCT00092612 -NCT00092625 -NCT00092755 -NCT00092937 -NCT00092976 -NCT00093054 -NCT00093158 -NCT00093353 -NCT00093366 -NCT00093613 -NCT00093795 -NCT00093860 -NCT00093938 -NCT00094016 -NCT00094055 -NCT00094068 -NCT00094094 -NCT00094120 -NCT00094172 -NCT00094354 -NCT00094406 -NCT00094536 -NCT00094562 -NCT00094627 -NCT00094731 -NCT00094887 -NCT00094900 -NCT00094913 -NCT00094939 -NCT00094952 -NCT00094978 -NCT00095082 -NCT00095095 -NCT00095459 -NCT00095472 -NCT00095654 -NCT00095693 -NCT00095836 -NCT00096018 -NCT00096161 -NCT00096213 -NCT00096278 -NCT00096291 -NCT00096369 -NCT00096408 -NCT00096473 -NCT00096551 -NCT00096694 -NCT00096798 -NCT00096902 -NCT00096954 -NCT00097162 -NCT00097331 -NCT00097396 -NCT00097422 -NCT00097448 -NCT00097513 -NCT00097526 -NCT00097552 -NCT00097734 -NCT00097760 -NCT00097981 -NCT00098046 -NCT00098072 -NCT00098202 -NCT00098280 -NCT00098384 -NCT00098423 -NCT00098475 -NCT00098488 -NCT00098527 -NCT00098670 -NCT00099359 -NCT00099424 -NCT00099463 -NCT00099502 -NCT00099593 -NCT00099762 -NCT00099996 -NCT00100009 -NCT00100061 -NCT00100217 -NCT00100282 -NCT00100321 -NCT00100360 -NCT00100698 -NCT00100802 -NCT00100828 -NCT00100880 -NCT00100919 -NCT00101036 -NCT00101114 -NCT00101374 -NCT00101621 -NCT00101712 -NCT00101725 -NCT00101790 -NCT00101829 -NCT00101933 -NCT00102089 -NCT00102102 -NCT00102154 -NCT00102258 -NCT00102401 -NCT00102453 -NCT00102492 -NCT00102557 -NCT00102570 -NCT00102596 -NCT00102661 -NCT00102739 -NCT00102765 -NCT00102791 -NCT00102817 -NCT00102882 -NCT00102908 -NCT00102934 -NCT00103155 -NCT00103181 -NCT00103194 -NCT00103272 -NCT00103285 -NCT00103298 -NCT00103324 -NCT00103415 -NCT00103506 -NCT00103558 -NCT00103740 -NCT00103792 -NCT00103818 -NCT00104000 -NCT00104065 -NCT00104299 -NCT00104468 -NCT00104520 -NCT00104572 -NCT00104611 -NCT00104962 -NCT00105066 -NCT00105105 -NCT00105131 -NCT00105222 -NCT00105326 -NCT00105378 -NCT00105404 -NCT00105417 -NCT00105430 -NCT00105482 -NCT00105508 -NCT00105547 -NCT00105703 -NCT00105742 -NCT00105950 -NCT00105963 -NCT00106119 -NCT00106132 -NCT00106184 -NCT00106366 -NCT00106496 -NCT00106665 -NCT00106717 -NCT00106743 -NCT00106756 -NCT00106769 -NCT00106795 -NCT00106821 -NCT00106886 -NCT00106938 -NCT00106977 -NCT00107081 -NCT00107172 -NCT00107198 -NCT00107211 -NCT00107458 -NCT00107562 -NCT00107601 -NCT00107614 -NCT00107744 -NCT00107783 -NCT00107796 -NCT00107991 -NCT00108134 -NCT00108394 -NCT00108420 -NCT00108433 -NCT00108446 -NCT00108485 -NCT00108628 -NCT00108667 -NCT00108680 -NCT00108758 -NCT00108992 -NCT00109148 -NCT00109200 -NCT00109395 -NCT00109525 -NCT00109564 -NCT00109616 -NCT00109707 -NCT00109811 -NCT00110006 -NCT00110058 -NCT00110214 -NCT00110253 -NCT00110318 -NCT00110500 -NCT00110617 -NCT00110669 -NCT00110695 -NCT00110851 -NCT00110864 -NCT00110890 -NCT00110916 -NCT00110929 -NCT00110968 -NCT00111072 -NCT00111215 -NCT00111241 -NCT00111254 -NCT00111267 -NCT00111293 -NCT00111306 -NCT00111319 -NCT00111384 -NCT00111592 -NCT00111644 -NCT00111657 -NCT00111735 -NCT00111852 -NCT00111917 -NCT00112151 -NCT00112203 -NCT00112333 -NCT00112385 -NCT00112437 -NCT00112515 -NCT00112723 -NCT00112736 -NCT00112827 -NCT00112879 -NCT00112957 -NCT00113022 -NCT00113061 -NCT00113074 -NCT00113152 -NCT00113347 -NCT00113386 -NCT00113425 -NCT00113503 -NCT00113542 -NCT00113568 -NCT00113633 -NCT00113971 -NCT00113997 -NCT00114088 -NCT00114101 -NCT00114114 -NCT00114140 -NCT00114205 -NCT00114309 -NCT00114322 -NCT00114426 -NCT00114543 -NCT00114972 -NCT00115076 -NCT00115336 -NCT00115401 -NCT00115440 -NCT00115570 -NCT00115622 -NCT00115661 -NCT00115895 -NCT00116168 -NCT00116311 -NCT00116337 -NCT00116571 -NCT00116753 -NCT00116779 -NCT00116818 -NCT00116961 -NCT00117000 -NCT00117052 -NCT00117117 -NCT00117182 -NCT00117195 -NCT00117221 -NCT00117260 -NCT00117377 -NCT00117403 -NCT00117533 -NCT00117572 -NCT00117884 -NCT00117962 -NCT00117988 -NCT00118170 -NCT00118482 -NCT00118586 -NCT00118729 -NCT00118820 -NCT00119041 -NCT00119158 -NCT00119197 -NCT00119483 -NCT00119509 -NCT00119626 -NCT00119678 -NCT00119704 -NCT00119730 -NCT00119821 -NCT00120003 -NCT00120094 -NCT00120120 -NCT00120133 -NCT00120159 -NCT00120263 -NCT00120289 -NCT00120432 -NCT00120484 -NCT00120497 -NCT00120562 -NCT00120614 -NCT00120666 -NCT00120744 -NCT00120887 -NCT00120900 -NCT00120978 -NCT00121095 -NCT00121173 -NCT00121381 -NCT00121433 -NCT00121563 -NCT00121797 -NCT00121875 -NCT00121901 -NCT00121953 -NCT00121992 -NCT00122278 -NCT00122616 -NCT00122681 -NCT00122694 -NCT00122954 -NCT00123006 -NCT00123435 -NCT00123630 -NCT00123656 -NCT00123799 -NCT00123864 -NCT00124020 -NCT00124033 -NCT00124384 -NCT00124410 -NCT00124579 -NCT00124722 -NCT00124813 -NCT00124930 -NCT00125164 -NCT00125190 -NCT00125281 -NCT00125437 -NCT00125476 -NCT00125489 -NCT00125658 -NCT00125671 -NCT00125788 -NCT00125918 -NCT00125957 -NCT00126035 -NCT00126048 -NCT00126139 -NCT00126191 -NCT00126243 -NCT00126386 -NCT00126399 -NCT00126464 -NCT00126581 -NCT00126698 -NCT00126763 -NCT00126841 -NCT00126867 -NCT00126945 -NCT00126958 -NCT00127205 -NCT00127257 -NCT00127322 -NCT00127335 -NCT00127374 -NCT00127439 -NCT00127465 -NCT00127517 -NCT00127608 -NCT00127634 -NCT00127686 -NCT00127842 -NCT00127985 -NCT00128011 -NCT00128141 -NCT00128154 -NCT00128193 -NCT00128232 -NCT00128271 -NCT00128310 -NCT00128336 -NCT00128362 -NCT00128492 -NCT00128557 -NCT00128661 -NCT00128687 -NCT00128726 -NCT00128739 -NCT00128895 -NCT00128921 -NCT00128973 -NCT00129376 -NCT00129428 -NCT00129506 -NCT00129532 -NCT00129701 -NCT00129753 -NCT00129831 -NCT00130000 -NCT00130039 -NCT00130078 -NCT00130182 -NCT00130247 -NCT00130325 -NCT00130351 -NCT00130364 -NCT00130468 -NCT00130494 -NCT00130507 -NCT00130533 -NCT00130572 -NCT00130611 -NCT00130741 -NCT00130949 -NCT00131014 -NCT00131157 -NCT00131183 -NCT00131274 -NCT00131482 -NCT00131495 -NCT00131508 -NCT00131586 -NCT00131911 -NCT00132015 -NCT00132080 -NCT00132171 -NCT00132236 -NCT00132327 -NCT00132340 -NCT00132366 -NCT00132405 -NCT00132444 -NCT00132496 -NCT00132548 -NCT00132561 -NCT00132613 -NCT00132951 -NCT00133276 -NCT00133406 -NCT00133419 -NCT00133432 -NCT00133510 -NCT00133562 -NCT00133575 -NCT00133588 -NCT00133679 -NCT00133783 -NCT00133809 -NCT00133835 -NCT00133991 -NCT00134043 -NCT00134173 -NCT00134199 -NCT00134238 -NCT00134420 -NCT00134485 -NCT00134511 -NCT00134537 -NCT00134550 -NCT00134732 -NCT00134745 -NCT00134784 -NCT00134823 -NCT00135122 -NCT00135148 -NCT00135200 -NCT00135551 -NCT00135603 -NCT00135707 -NCT00135733 -NCT00135915 -NCT00136032 -NCT00136058 -NCT00136110 -NCT00136305 -NCT00136552 -NCT00136643 -NCT00136669 -NCT00136695 -NCT00136708 -NCT00136721 -NCT00136747 -NCT00136773 -NCT00136786 -NCT00136838 -NCT00136877 -NCT00136942 -NCT00136981 -NCT00137319 -NCT00137462 -NCT00137722 -NCT00137995 -NCT00138099 -NCT00138125 -NCT00138138 -NCT00138164 -NCT00138385 -NCT00138476 -NCT00138684 -NCT00138918 -NCT00139113 -NCT00139178 -NCT00139282 -NCT00139425 -NCT00139685 -NCT00139776 -NCT00139828 -NCT00139880 -NCT00139893 -NCT00140010 -NCT00140088 -NCT00140101 -NCT00140140 -NCT00140153 -NCT00140205 -NCT00140231 -NCT00140309 -NCT00140413 -NCT00140439 -NCT00140491 -NCT00140517 -NCT00140556 -NCT00140569 -NCT00140647 -NCT00140699 -NCT00140738 -NCT00140868 -NCT00140998 -NCT00141089 -NCT00141843 -NCT00141869 -NCT00141882 -NCT00141960 -NCT00141986 -NCT00142038 -NCT00142077 -NCT00142090 -NCT00142272 -NCT00142363 -NCT00142402 -NCT00142558 -NCT00142584 -NCT00142610 -NCT00142792 -NCT00142805 -NCT00142987 -NCT00143026 -NCT00143039 -NCT00143052 -NCT00143078 -NCT00143221 -NCT00143416 -NCT00143546 -NCT00143598 -NCT00143611 -NCT00143715 -NCT00143741 -NCT00143754 -NCT00143793 -NCT00143949 -NCT00143988 -NCT00144196 -NCT00144235 -NCT00144313 -NCT00144339 -NCT00144391 -NCT00144404 -NCT00144417 -NCT00144456 -NCT00145080 -NCT00145288 -NCT00145405 -NCT00145483 -NCT00145691 -NCT00145886 -NCT00145938 -NCT00145977 -NCT00146042 -NCT00146055 -NCT00146146 -NCT00146185 -NCT00146211 -NCT00146354 -NCT00146367 -NCT00146536 -NCT00146679 -NCT00146731 -NCT00147069 -NCT00147082 -NCT00147095 -NCT00147147 -NCT00147186 -NCT00147251 -NCT00147277 -NCT00147290 -NCT00147316 -NCT00147342 -NCT00147368 -NCT00147420 -NCT00147433 -NCT00147823 -NCT00148044 -NCT00148122 -NCT00148200 -NCT00148213 -NCT00148343 -NCT00148512 -NCT00148668 -NCT00148681 -NCT00148733 -NCT00148772 -NCT00148837 -NCT00148863 -NCT00148915 -NCT00149045 -NCT00149084 -NCT00149136 -NCT00149188 -NCT00149305 -NCT00149318 -NCT00149461 -NCT00149565 -NCT00149656 -NCT00149721 -NCT00149838 -NCT00149851 -NCT00149877 -NCT00150033 -NCT00150111 -NCT00150397 -NCT00150644 -NCT00150774 -NCT00150969 -NCT00151125 -NCT00151385 -NCT00151437 -NCT00151723 -NCT00151736 -NCT00151801 -NCT00152243 -NCT00152282 -NCT00152321 -NCT00152451 -NCT00152503 -NCT00152581 -NCT00152620 -NCT00152685 -NCT00153062 -NCT00153114 -NCT00153751 -NCT00153777 -NCT00153816 -NCT00153933 -NCT00153972 -NCT00154076 -NCT00154479 -NCT00154505 -NCT00154570 -NCT00154583 -NCT00154596 -NCT00154622 -NCT00154635 -NCT00154830 -NCT00154843 -NCT00154869 -NCT00154934 -NCT00155025 -NCT00155051 -NCT00155077 -NCT00155168 -NCT00155194 -NCT00155311 -NCT00155363 -NCT00155545 -NCT00155740 -NCT00155753 -NCT00155766 -NCT00155792 -NCT00155805 -NCT00155857 -NCT00155870 -NCT00155922 -NCT00156442 -NCT00156520 -NCT00156533 -NCT00156546 -NCT00156559 -NCT00156650 -NCT00156728 -NCT00156767 -NCT00156819 -NCT00157105 -NCT00157482 -NCT00157534 -NCT00157586 -NCT00157690 -NCT00158301 -NCT00158366 -NCT00158522 -NCT00158613 -NCT00158665 -NCT00158743 -NCT00159250 -NCT00159289 -NCT00159302 -NCT00159341 -NCT00159354 -NCT00159367 -NCT00159406 -NCT00159419 -NCT00159861 -NCT00159913 -NCT00159991 -NCT00160082 -NCT00160264 -NCT00160303 -NCT00160316 -NCT00160433 -NCT00160446 -NCT00160550 -NCT00160693 -NCT00160719 -NCT00160771 -NCT00160797 -NCT00160940 -NCT00161005 -NCT00161031 -NCT00161083 -NCT00161200 -NCT00161226 -NCT00161291 -NCT00161304 -NCT00161330 -NCT00161421 -NCT00161447 -NCT00161473 -NCT00161486 -NCT00161902 -NCT00161915 -NCT00161980 -NCT00162539 -NCT00162773 -NCT00162825 -NCT00162851 -NCT00162864 -NCT00163007 -NCT00163059 -NCT00163111 -NCT00163189 -NCT00163215 -NCT00163293 -NCT00163306 -NCT00163410 -NCT00163553 -NCT00163566 -NCT00163683 -NCT00163709 -NCT00163943 -NCT00164060 -NCT00164073 -NCT00164125 -NCT00164281 -NCT00164723 -NCT00164957 -NCT00165191 -NCT00165490 -NCT00165555 -NCT00165620 -NCT00165646 -NCT00165672 -NCT00165698 -NCT00165828 -NCT00165919 -NCT00165932 -NCT00166205 -NCT00166218 -NCT00166387 -NCT00166400 -NCT00166413 -NCT00166491 -NCT00166543 -NCT00166569 -NCT00166751 -NCT00166777 -NCT00166868 -NCT00166894 -NCT00167310 -NCT00167375 -NCT00167596 -NCT00167713 -NCT00168051 -NCT00168090 -NCT00168220 -NCT00168350 -NCT00168532 -NCT00168636 -NCT00168714 -NCT00168974 -NCT00169169 -NCT00169273 -NCT00169325 -NCT00169702 -NCT00169754 -NCT00169767 -NCT00169897 -NCT00170001 -NCT00170261 -NCT00170339 -NCT00170547 -NCT00170781 -NCT00171093 -NCT00171327 -NCT00171457 -NCT00171652 -NCT00171665 -NCT00171730 -NCT00171886 -NCT00171925 -NCT00171951 -NCT00171964 -NCT00172068 -NCT00172081 -NCT00172107 -NCT00172120 -NCT00172172 -NCT00172341 -NCT00172354 -NCT00172419 -NCT00172445 -NCT00172523 -NCT00172549 -NCT00172588 -NCT00172601 -NCT00172653 -NCT00172666 -NCT00172822 -NCT00172835 -NCT00172952 -NCT00173043 -NCT00173134 -NCT00173186 -NCT00173199 -NCT00173212 -NCT00173264 -NCT00173459 -NCT00173498 -NCT00173628 -NCT00174005 -NCT00174018 -NCT00174174 -NCT00174187 -NCT00174252 -NCT00174278 -NCT00174304 -NCT00174330 -NCT00174369 -NCT00174408 -NCT00174421 -NCT00174460 -NCT00174655 -NCT00174941 -NCT00174954 -NCT00174967 -NCT00175006 -NCT00175019 -NCT00175032 -NCT00175045 -NCT00175071 -NCT00175110 -NCT00175149 -NCT00175175 -NCT00175188 -NCT00175214 -NCT00175240 -NCT00175253 -NCT00175266 -NCT00175448 -NCT00175565 -NCT00175617 -NCT00175747 -NCT00175825 -NCT00175929 -NCT00176098 -NCT00176150 -NCT00176176 -NCT00176410 -NCT00176462 -NCT00176579 -NCT00176631 -NCT00176696 -NCT00176722 -NCT00176761 -NCT00176956 -NCT00177034 -NCT00177047 -NCT00177320 -NCT00177346 -NCT00177372 -NCT00177385 -NCT00177411 -NCT00177775 -NCT00177892 -NCT00177970 -NCT00178165 -NCT00178204 -NCT00178373 -NCT00178451 -NCT00178490 -NCT00178516 -NCT00178542 -NCT00178607 -NCT00178672 -NCT00178724 -NCT00178763 -NCT00178997 -NCT00179127 -NCT00179400 -NCT00179413 -NCT00179517 -NCT00179647 -NCT00179790 -NCT00179907 -NCT00179933 -NCT00180128 -NCT00180362 -NCT00180518 -NCT00180531 -NCT00180635 -NCT00180661 -NCT00180765 -NCT00180882 -NCT00180895 -NCT00181272 -NCT00181623 -NCT00182078 -NCT00182091 -NCT00182208 -NCT00182260 -NCT00182299 -NCT00182481 -NCT00182611 -NCT00182650 -NCT00182871 -NCT00183040 -NCT00183066 -NCT00183352 -NCT00183430 -NCT00183456 -NCT00183482 -NCT00183677 -NCT00183911 -NCT00183950 -NCT00184197 -NCT00184236 -NCT00184431 -NCT00184483 -NCT00184548 -NCT00184691 -NCT00184717 -NCT00184756 -NCT00184808 -NCT00184873 -NCT00185458 -NCT00185575 -NCT00185718 -NCT00185744 -NCT00186017 -NCT00186407 -NCT00186628 -NCT00186719 -NCT00186784 -NCT00186888 -NCT00186940 -NCT00187161 -NCT00187187 -NCT00187291 -NCT00187499 -NCT00187824 -NCT00187863 -NCT00188201 -NCT00188240 -NCT00188344 -NCT00188396 -NCT00188474 -NCT00188500 -NCT00188682 -NCT00188890 -NCT00189163 -NCT00189228 -NCT00189280 -NCT00189436 -NCT00189722 -NCT00189787 -NCT00189930 -NCT00190060 -NCT00190398 -NCT00190502 -NCT00190554 -NCT00190658 -NCT00191074 -NCT00191113 -NCT00191321 -NCT00191425 -NCT00191529 -NCT00192205 -NCT00192348 -NCT00192413 -NCT00192556 -NCT00192569 -NCT00193141 -NCT00193648 -NCT00193661 -NCT00194155 -NCT00194259 -NCT00194285 -NCT00194324 -NCT00194402 -NCT00194480 -NCT00194571 -NCT00194584 -NCT00194597 -NCT00194610 -NCT00194636 -NCT00194675 -NCT00194701 -NCT00194714 -NCT00194870 -NCT00194922 -NCT00194961 -NCT00194974 -NCT00195052 -NCT00195091 -NCT00195143 -NCT00195286 -NCT00195351 -NCT00195637 -NCT00195741 -NCT00195793 -NCT00195806 -NCT00195923 -NCT00195936 -NCT00195975 -NCT00195988 -NCT00196001 -NCT00196313 -NCT00196365 -NCT00196729 -NCT00196898 -NCT00196937 -NCT00196963 -NCT00196989 -NCT00197418 -NCT00197496 -NCT00197613 -NCT00197652 -NCT00197678 -NCT00198029 -NCT00198718 -NCT00198757 -NCT00198796 -NCT00199082 -NCT00199108 -NCT00199212 -NCT00199355 -NCT00199394 -NCT00199407 -NCT00199420 -NCT00199498 -NCT00199550 -NCT00199810 -NCT00200005 -NCT00200044 -NCT00200057 -NCT00200174 -NCT00200252 -NCT00200304 -NCT00200486 -NCT00200577 -NCT00200655 -NCT00200681 -NCT00200876 -NCT00200902 -NCT00200967 -NCT00200993 -NCT00201058 -NCT00201253 -NCT00201292 -NCT00201318 -NCT00201370 -NCT00201383 -NCT00201422 -NCT00201617 -NCT00201721 -NCT00201773 -NCT00201994 -NCT00202111 -NCT00202137 -NCT00202150 -NCT00202163 -NCT00202176 -NCT00202189 -NCT00202228 -NCT00202371 -NCT00202384 -NCT00202397 -NCT00202436 -NCT00202462 -NCT00202670 -NCT00202709 -NCT00202904 -NCT00203034 -NCT00203060 -NCT00203255 -NCT00203268 -NCT00203333 -NCT00203554 -NCT00203593 -NCT00203697 -NCT00203931 -NCT00203996 -NCT00204074 -NCT00204165 -NCT00204204 -NCT00204230 -NCT00204269 -NCT00204399 -NCT00204464 -NCT00204503 -NCT00204672 -NCT00205010 -NCT00205361 -NCT00205647 -NCT00205660 -NCT00205855 -NCT00205868 -NCT00205881 -NCT00205907 -NCT00205920 -NCT00206024 -NCT00206206 -NCT00206258 -NCT00206297 -NCT00206375 -NCT00206401 -NCT00206544 -NCT00206570 -NCT00206830 -NCT00206843 -NCT00206921 -NCT00207233 -NCT00207376 -NCT00207519 -NCT00207727 -NCT00207909 -NCT00207935 -NCT00207974 -NCT00208000 -NCT00208221 -NCT00208325 -NCT00208689 -NCT00208819 -NCT00208871 -NCT00208936 -NCT00209027 -NCT00209118 -NCT00209131 -NCT00209144 -NCT00209235 -NCT00209274 -NCT00209326 -NCT00209339 -NCT00209456 -NCT00209872 -NCT00209898 -NCT00210002 -NCT00210015 -NCT00210119 -NCT00210340 -NCT00210444 -NCT00210483 -NCT00210535 -NCT00210600 -NCT00210886 -NCT00210990 -NCT00211016 -NCT00211081 -NCT00211224 -NCT00211263 -NCT00211276 -NCT00211354 -NCT00211510 -NCT00211536 -NCT00211614 -NCT00211627 -NCT00211692 -NCT00212043 -NCT00212134 -NCT00212160 -NCT00212225 -NCT00212303 -NCT00212355 -NCT00212368 -NCT00212459 -NCT00212550 -NCT00212576 -NCT00212602 -NCT00212719 -NCT00213005 -NCT00213044 -NCT00213135 -NCT00213252 -NCT00213356 -NCT00213447 -NCT00213590 -NCT00213603 -NCT00213824 -NCT00213941 -NCT00214149 -NCT00214305 -NCT00214448 -NCT00214487 -NCT00214552 -NCT00214708 -NCT00214734 -NCT00215059 -NCT00215215 -NCT00215384 -NCT00215436 -NCT00215449 -NCT00215514 -NCT00215592 -NCT00215618 -NCT00215748 -NCT00215787 -NCT00215865 -NCT00215930 -NCT00215943 -NCT00216125 -NCT00216242 -NCT00216320 -NCT00216398 -NCT00216450 -NCT00216489 -NCT00216502 -NCT00216515 -NCT00216567 -NCT00216593 -NCT00216658 -NCT00216736 -NCT00216775 -NCT00217100 -NCT00217178 -NCT00217295 -NCT00217321 -NCT00217347 -NCT00217464 -NCT00217503 -NCT00217542 -NCT00217581 -NCT00217724 -NCT00217737 -NCT00217854 -NCT00217945 -NCT00218855 -NCT00218868 -NCT00219284 -NCT00219427 -NCT00219466 -NCT00219479 -NCT00219492 -NCT00219518 -NCT00219570 -NCT00219778 -NCT00219882 -NCT00219999 -NCT00220012 -NCT00220181 -NCT00220272 -NCT00220298 -NCT00220311 -NCT00220350 -NCT00220506 -NCT00220532 -NCT00220545 -NCT00220584 -NCT00220753 -NCT00220935 -NCT00220961 -NCT00220987 -NCT00221013 -NCT00221091 -NCT00221195 -NCT00221325 -NCT00221351 -NCT00221832 -NCT00221845 -NCT00221897 -NCT00221910 -NCT00222079 -NCT00222092 -NCT00222131 -NCT00222183 -NCT00222300 -NCT00222352 -NCT00222417 -NCT00222521 -NCT00222651 -NCT00222768 -NCT00222781 -NCT00222872 -NCT00222950 -NCT00222963 -NCT00223275 -NCT00223548 -NCT00223665 -NCT00223743 -NCT00223756 -NCT00223860 -NCT00224042 -NCT00224055 -NCT00224081 -NCT00224107 -NCT00224120 -NCT00224198 -NCT00224211 -NCT00224536 -NCT00224640 -NCT00224939 -NCT00224991 -NCT00225004 -NCT00225069 -NCT00225160 -NCT00225225 -NCT00225446 -NCT00225537 -NCT00225797 -NCT00225979 -NCT00226083 -NCT00226174 -NCT00226421 -NCT00226577 -NCT00226616 -NCT00226798 -NCT00227253 -NCT00227331 -NCT00227448 -NCT00227539 -NCT00227617 -NCT00227630 -NCT00227877 -NCT00227929 -NCT00227955 -NCT00227968 -NCT00228150 -NCT00228215 -NCT00228228 -NCT00228267 -NCT00228670 -NCT00228878 -NCT00228891 -NCT00228904 -NCT00229021 -NCT00229294 -NCT00229424 -NCT00229502 -NCT00229580 -NCT00229762 -NCT00229918 -NCT00229944 -NCT00229996 -NCT00230087 -NCT00230165 -NCT00230178 -NCT00230282 -NCT00230360 -NCT00230594 -NCT00230620 -NCT00230685 -NCT00230750 -NCT00230802 -NCT00230815 -NCT00230854 -NCT00230971 -NCT00231010 -NCT00231023 -NCT00231231 -NCT00231270 -NCT00231387 -NCT00231556 -NCT00231569 -NCT00231686 -NCT00231881 -NCT00231907 -NCT00232219 -NCT00232297 -NCT00232375 -NCT00232453 -NCT00232466 -NCT00232557 -NCT00232570 -NCT00232583 -NCT00232934 -NCT00233025 -NCT00233038 -NCT00233233 -NCT00233363 -NCT00233454 -NCT00233519 -NCT00233545 -NCT00233610 -NCT00233727 -NCT00233922 -NCT00233935 -NCT00233974 -NCT00234065 -NCT00234156 -NCT00234195 -NCT00234247 -NCT00234403 -NCT00234494 -NCT00234533 -NCT00234572 -NCT00234949 -NCT00235131 -NCT00235248 -NCT00235521 -NCT00235599 -NCT00235677 -NCT00235703 -NCT00235716 -NCT00235937 -NCT00236002 -NCT00236080 -NCT00236158 -NCT00236184 -NCT00236197 -NCT00236327 -NCT00236366 -NCT00236392 -NCT00236496 -NCT00236509 -NCT00236561 -NCT00236730 -NCT00236769 -NCT00236782 -NCT00236795 -NCT00236847 -NCT00236860 -NCT00236873 -NCT00237016 -NCT00237055 -NCT00237133 -NCT00237302 -NCT00237354 -NCT00237367 -NCT00237380 -NCT00237497 -NCT00237523 -NCT00237601 -NCT00237692 -NCT00237705 -NCT00238043 -NCT00238368 -NCT00238537 -NCT00238641 -NCT00238745 -NCT00238927 -NCT00239161 -NCT00239252 -NCT00239395 -NCT00239538 -NCT00239564 -NCT00239590 -NCT00239629 -NCT00239707 -NCT00239759 -NCT00240136 -NCT00240162 -NCT00240461 -NCT00240734 -NCT00240760 -NCT00240773 -NCT00240786 -NCT00240799 -NCT00240838 -NCT00240929 -NCT00240981 -NCT00241319 -NCT00241358 -NCT00241436 -NCT00241527 -NCT00241553 -NCT00241631 -NCT00241813 -NCT00241904 -NCT00242060 -NCT00242138 -NCT00242177 -NCT00242242 -NCT00242268 -NCT00242281 -NCT00242333 -NCT00242502 -NCT00242541 -NCT00242723 -NCT00242944 -NCT00243139 -NCT00243152 -NCT00243282 -NCT00243360 -NCT00243386 -NCT00243620 -NCT00243659 -NCT00243685 -NCT00243789 -NCT00243880 -NCT00243906 -NCT00243945 -NCT00243984 -NCT00244023 -NCT00244153 -NCT00244517 -NCT00244543 -NCT00244582 -NCT00244959 -NCT00244972 -NCT00245245 -NCT00245375 -NCT00245453 -NCT00245518 -NCT00245622 -NCT00245661 -NCT00245700 -NCT00245791 -NCT00245856 -NCT00245921 -NCT00246038 -NCT00246064 -NCT00246324 -NCT00246389 -NCT00246467 -NCT00246506 -NCT00246558 -NCT00246571 -NCT00246805 -NCT00246896 -NCT00246922 -NCT00247052 -NCT00247169 -NCT00247273 -NCT00247377 -NCT00247533 -NCT00247546 -NCT00247585 -NCT00248105 -NCT00248144 -NCT00248443 -NCT00248495 -NCT00248690 -NCT00248859 -NCT00249080 -NCT00249093 -NCT00249743 -NCT00250055 -NCT00250159 -NCT00250250 -NCT00250484 -NCT00250497 -NCT00250536 -NCT00250861 -NCT00250978 -NCT00250991 -NCT00251056 -NCT00251108 -NCT00251121 -NCT00251147 -NCT00251212 -NCT00251251 -NCT00251264 -NCT00251277 -NCT00251316 -NCT00251329 -NCT00251745 -NCT00251758 -NCT00251836 -NCT00251914 -NCT00252018 -NCT00252070 -NCT00252148 -NCT00252239 -NCT00252317 -NCT00252421 -NCT00252603 -NCT00252941 -NCT00252993 -NCT00253084 -NCT00253188 -NCT00253201 -NCT00253214 -NCT00253227 -NCT00253253 -NCT00253305 -NCT00253487 -NCT00253734 -NCT00253786 -NCT00253981 -NCT00254111 -NCT00254150 -NCT00254371 -NCT00254384 -NCT00254449 -NCT00254553 -NCT00254566 -NCT00254592 -NCT00255073 -NCT00255086 -NCT00255177 -NCT00255242 -NCT00255294 -NCT00255307 -NCT00255372 -NCT00255385 -NCT00255398 -NCT00256165 -NCT00256178 -NCT00256217 -NCT00256308 -NCT00256503 -NCT00256529 -NCT00256581 -NCT00256685 -NCT00256776 -NCT00256802 -NCT00256841 -NCT00256984 -NCT00257010 -NCT00257049 -NCT00257309 -NCT00257348 -NCT00257374 -NCT00257582 -NCT00257634 -NCT00257777 -NCT00257842 -NCT00257855 -NCT00257933 -NCT00257985 -NCT00257998 -NCT00258089 -NCT00258102 -NCT00258154 -NCT00258245 -NCT00258284 -NCT00258466 -NCT00258518 -NCT00258544 -NCT00258570 -NCT00258661 -NCT00258973 -NCT00259610 -NCT00259649 -NCT00259688 -NCT00259779 -NCT00259857 -NCT00260000 -NCT00260039 -NCT00260091 -NCT00260104 -NCT00260143 -NCT00260182 -NCT00260572 -NCT00260585 -NCT00260624 -NCT00260663 -NCT00260702 -NCT00260897 -NCT00261001 -NCT00261014 -NCT00261248 -NCT00261300 -NCT00261339 -NCT00261391 -NCT00261482 -NCT00261495 -NCT00261508 -NCT00261768 -NCT00261807 -NCT00261898 -NCT00262080 -NCT00262132 -NCT00262197 -NCT00262210 -NCT00262249 -NCT00262340 -NCT00262626 -NCT00262652 -NCT00262743 -NCT00262808 -NCT00263094 -NCT00263185 -NCT00263198 -NCT00263237 -NCT00263250 -NCT00263289 -NCT00263341 -NCT00263445 -NCT00263536 -NCT00263562 -NCT00263744 -NCT00263952 -NCT00264017 -NCT00264121 -NCT00264407 -NCT00264732 -NCT00264810 -NCT00264888 -NCT00265096 -NCT00265148 -NCT00265226 -NCT00265304 -NCT00265447 -NCT00265525 -NCT00265590 -NCT00265707 -NCT00265759 -NCT00265915 -NCT00266097 -NCT00266214 -NCT00266266 -NCT00266318 -NCT00266357 -NCT00266370 -NCT00266383 -NCT00266487 -NCT00266578 -NCT00266604 -NCT00266656 -NCT00266721 -NCT00266734 -NCT00266864 -NCT00266877 -NCT00267033 -NCT00267085 -NCT00267176 -NCT00267293 -NCT00267618 -NCT00267826 -NCT00267982 -NCT00268060 -NCT00268086 -NCT00268203 -NCT00268372 -NCT00268489 -NCT00268580 -NCT00268697 -NCT00268762 -NCT00268814 -NCT00268866 -NCT00268879 -NCT00268931 -NCT00269048 -NCT00269113 -NCT00269165 -NCT00269282 -NCT00269347 -NCT00269399 -NCT00269412 -NCT00269529 -NCT00269568 -NCT00270010 -NCT00270270 -NCT00270309 -NCT00270348 -NCT00270374 -NCT00270478 -NCT00270504 -NCT00270608 -NCT00270686 -NCT00270920 -NCT00271076 -NCT00271115 -NCT00271128 -NCT00271206 -NCT00271310 -NCT00271427 -NCT00271518 -NCT00271583 -NCT00271973 -NCT00272090 -NCT00272116 -NCT00272285 -NCT00272363 -NCT00272376 -NCT00272389 -NCT00272545 -NCT00272610 -NCT00272714 -NCT00272818 -NCT00272883 -NCT00273130 -NCT00273195 -NCT00273208 -NCT00273377 -NCT00273559 -NCT00273572 -NCT00273676 -NCT00273741 -NCT00273962 -NCT00274027 -NCT00274131 -NCT00274170 -NCT00274196 -NCT00274261 -NCT00274287 -NCT00274352 -NCT00274378 -NCT00274391 -NCT00274690 -NCT00274781 -NCT00274820 -NCT00274885 -NCT00274937 -NCT00275041 -NCT00275145 -NCT00275392 -NCT00275561 -NCT00275691 -NCT00275743 -NCT00275938 -NCT00276068 -NCT00276146 -NCT00276328 -NCT00276393 -NCT00276406 -NCT00276510 -NCT00276640 -NCT00276783 -NCT00277147 -NCT00277238 -NCT00277277 -NCT00277368 -NCT00277433 -NCT00277472 -NCT00277550 -NCT00277654 -NCT00277680 -NCT00277784 -NCT00277875 -NCT00277966 -NCT00278083 -NCT00278148 -NCT00278408 -NCT00278486 -NCT00278512 -NCT00278551 -NCT00278564 -NCT00278629 -NCT00278798 -NCT00278824 -NCT00278863 -NCT00279032 -NCT00279123 -NCT00279136 -NCT00279149 -NCT00279279 -NCT00279344 -NCT00279370 -NCT00279500 -NCT00279526 -NCT00279552 -NCT00279578 -NCT00279643 -NCT00279708 -NCT00279747 -NCT00279825 -NCT00279890 -NCT00279903 -NCT00279916 -NCT00280202 -NCT00280254 -NCT00280267 -NCT00280371 -NCT00280410 -NCT00280423 -NCT00280436 -NCT00280514 -NCT00280592 -NCT00280605 -NCT00280657 -NCT00280683 -NCT00281034 -NCT00281138 -NCT00281333 -NCT00281346 -NCT00281398 -NCT00281502 -NCT00281645 -NCT00281684 -NCT00281840 -NCT00281918 -NCT00281931 -NCT00282035 -NCT00282061 -NCT00282074 -NCT00282100 -NCT00282152 -NCT00282191 -NCT00282412 -NCT00282438 -NCT00282607 -NCT00282776 -NCT00282815 -NCT00282854 -NCT00283088 -NCT00283101 -NCT00283153 -NCT00283166 -NCT00283218 -NCT00283283 -NCT00283309 -NCT00283335 -NCT00283361 -NCT00283712 -NCT00283881 -NCT00283894 -NCT00284063 -NCT00284128 -NCT00284245 -NCT00284310 -NCT00284440 -NCT00284557 -NCT00284583 -NCT00284622 -NCT00284661 -NCT00285168 -NCT00285194 -NCT00285207 -NCT00285350 -NCT00285467 -NCT00285584 -NCT00285649 -NCT00285779 -NCT00285870 -NCT00285961 -NCT00286052 -NCT00286065 -NCT00286208 -NCT00286312 -NCT00286364 -NCT00286429 -NCT00286442 -NCT00286468 -NCT00286507 -NCT00286520 -NCT00286650 -NCT00286663 -NCT00286689 -NCT00286767 -NCT00286884 -NCT00286962 -NCT00286988 -NCT00287001 -NCT00287144 -NCT00287248 -NCT00287339 -NCT00287378 -NCT00287391 -NCT00287456 -NCT00287508 -NCT00287586 -NCT00287625 -NCT00288080 -NCT00288171 -NCT00288470 -NCT00288600 -NCT00288652 -NCT00288691 -NCT00288704 -NCT00288821 -NCT00288912 -NCT00289120 -NCT00289159 -NCT00289224 -NCT00289484 -NCT00289536 -NCT00289549 -NCT00289666 -NCT00289718 -NCT00289744 -NCT00289770 -NCT00289796 -NCT00289900 -NCT00289926 -NCT00289978 -NCT00290030 -NCT00290134 -NCT00290251 -NCT00290329 -NCT00290498 -NCT00290589 -NCT00290602 -NCT00290732 -NCT00290745 -NCT00290810 -NCT00290862 -NCT00290940 -NCT00290992 -NCT00291148 -NCT00291161 -NCT00291265 -NCT00291395 -NCT00291421 -NCT00291642 -NCT00291733 -NCT00291980 -NCT00292032 -NCT00292344 -NCT00292448 -NCT00292552 -NCT00292695 -NCT00292825 -NCT00292838 -NCT00292903 -NCT00293059 -NCT00293072 -NCT00293150 -NCT00293371 -NCT00293436 -NCT00293631 -NCT00293657 -NCT00293735 -NCT00293748 -NCT00293852 -NCT00294047 -NCT00294125 -NCT00294229 -NCT00294398 -NCT00294463 -NCT00294593 -NCT00294619 -NCT00294632 -NCT00294658 -NCT00294684 -NCT00294697 -NCT00294775 -NCT00295022 -NCT00295087 -NCT00295178 -NCT00295204 -NCT00295308 -NCT00295464 -NCT00295490 -NCT00295516 -NCT00295581 -NCT00295711 -NCT00295724 -NCT00295828 -NCT00295867 -NCT00295919 -NCT00296010 -NCT00296244 -NCT00296296 -NCT00296491 -NCT00296621 -NCT00296699 -NCT00296764 -NCT00296868 -NCT00296907 -NCT00296933 -NCT00296959 -NCT00297037 -NCT00297154 -NCT00297349 -NCT00297401 -NCT00297492 -NCT00297908 -NCT00298038 -NCT00298116 -NCT00298233 -NCT00298246 -NCT00298337 -NCT00298389 -NCT00298402 -NCT00298454 -NCT00298818 -NCT00298870 -NCT00299039 -NCT00299182 -NCT00299195 -NCT00299312 -NCT00299949 -NCT00299975 -NCT00300326 -NCT00300378 -NCT00300417 -NCT00300625 -NCT00300768 -NCT00300807 -NCT00300833 -NCT00300898 -NCT00301119 -NCT00301171 -NCT00301184 -NCT00301249 -NCT00301392 -NCT00301405 -NCT00301418 -NCT00301509 -NCT00301587 -NCT00301639 -NCT00301652 -NCT00301730 -NCT00301808 -NCT00301886 -NCT00302068 -NCT00302107 -NCT00302211 -NCT00302224 -NCT00302263 -NCT00302315 -NCT00302328 -NCT00302341 -NCT00302367 -NCT00302380 -NCT00302393 -NCT00302406 -NCT00302432 -NCT00302588 -NCT00302874 -NCT00302900 -NCT00302926 -NCT00302991 -NCT00303004 -NCT00303108 -NCT00303355 -NCT00303459 -NCT00303511 -NCT00303784 -NCT00303823 -NCT00303849 -NCT00303940 -NCT00303966 -NCT00304070 -NCT00304213 -NCT00304265 -NCT00304278 -NCT00304291 -NCT00304330 -NCT00304356 -NCT00304369 -NCT00304408 -NCT00304642 -NCT00304668 -NCT00304863 -NCT00304876 -NCT00304889 -NCT00304954 -NCT00304967 -NCT00305032 -NCT00305071 -NCT00305110 -NCT00305149 -NCT00305214 -NCT00305227 -NCT00305344 -NCT00305539 -NCT00305552 -NCT00305604 -NCT00305695 -NCT00305760 -NCT00305799 -NCT00305812 -NCT00305825 -NCT00305890 -NCT00306033 -NCT00306046 -NCT00306124 -NCT00306189 -NCT00306449 -NCT00306501 -NCT00306748 -NCT00306774 -NCT00306813 -NCT00306839 -NCT00306917 -NCT00306995 -NCT00307125 -NCT00307164 -NCT00307190 -NCT00307281 -NCT00307307 -NCT00307346 -NCT00307450 -NCT00307476 -NCT00307593 -NCT00307632 -NCT00307645 -NCT00307658 -NCT00307801 -NCT00308074 -NCT00308113 -NCT00308412 -NCT00308490 -NCT00309088 -NCT00309101 -NCT00309114 -NCT00309166 -NCT00309205 -NCT00309257 -NCT00309322 -NCT00309439 -NCT00309712 -NCT00309790 -NCT00309881 -NCT00309985 -NCT00310037 -NCT00310128 -NCT00310245 -NCT00310258 -NCT00310310 -NCT00310323 -NCT00310349 -NCT00310388 -NCT00310414 -NCT00310531 -NCT00310765 -NCT00310869 -NCT00310882 -NCT00311129 -NCT00311207 -NCT00311246 -NCT00311571 -NCT00311649 -NCT00311675 -NCT00311714 -NCT00311831 -NCT00311883 -NCT00311935 -NCT00311987 -NCT00312026 -NCT00312169 -NCT00312247 -NCT00312286 -NCT00312390 -NCT00312598 -NCT00312689 -NCT00312832 -NCT00312910 -NCT00313066 -NCT00313092 -NCT00313209 -NCT00313365 -NCT00313404 -NCT00313521 -NCT00313573 -NCT00313703 -NCT00313742 -NCT00313963 -NCT00314002 -NCT00314301 -NCT00314405 -NCT00314431 -NCT00314548 -NCT00314652 -NCT00314691 -NCT00314743 -NCT00314795 -NCT00314899 -NCT00314951 -NCT00315081 -NCT00315120 -NCT00315133 -NCT00315159 -NCT00315315 -NCT00315354 -NCT00315380 -NCT00315393 -NCT00315406 -NCT00315432 -NCT00315458 -NCT00315497 -NCT00315523 -NCT00315575 -NCT00315627 -NCT00315666 -NCT00315679 -NCT00315770 -NCT00315822 -NCT00315952 -NCT00316108 -NCT00316134 -NCT00316160 -NCT00316342 -NCT00316485 -NCT00316524 -NCT00316576 -NCT00316589 -NCT00316602 -NCT00316732 -NCT00316849 -NCT00316953 -NCT00317057 -NCT00317083 -NCT00317122 -NCT00317252 -NCT00317265 -NCT00317421 -NCT00317447 -NCT00317486 -NCT00317551 -NCT00317564 -NCT00317629 -NCT00317733 -NCT00317811 -NCT00318097 -NCT00318500 -NCT00318591 -NCT00318708 -NCT00318773 -NCT00319124 -NCT00319137 -NCT00319202 -NCT00319241 -NCT00319358 -NCT00319449 -NCT00319670 -NCT00319839 -NCT00319865 -NCT00320424 -NCT00320476 -NCT00320580 -NCT00320619 -NCT00320632 -NCT00320840 -NCT00321061 -NCT00321074 -NCT00321087 -NCT00321295 -NCT00321347 -NCT00321360 -NCT00321477 -NCT00321503 -NCT00321555 -NCT00321620 -NCT00321724 -NCT00321750 -NCT00321828 -NCT00322231 -NCT00322751 -NCT00322881 -NCT00323427 -NCT00323479 -NCT00323570 -NCT00323609 -NCT00323635 -NCT00323674 -NCT00323752 -NCT00323804 -NCT00323830 -NCT00323856 -NCT00323960 -NCT00323973 -NCT00324090 -NCT00324259 -NCT00324285 -NCT00324389 -NCT00324402 -NCT00324428 -NCT00324714 -NCT00324896 -NCT00325078 -NCT00325195 -NCT00325273 -NCT00325416 -NCT00325507 -NCT00325546 -NCT00325572 -NCT00325598 -NCT00325624 -NCT00325650 -NCT00325819 -NCT00325845 -NCT00325897 -NCT00325936 -NCT00326027 -NCT00326183 -NCT00326443 -NCT00326521 -NCT00326560 -NCT00326703 -NCT00326742 -NCT00326820 -NCT00326950 -NCT00327080 -NCT00327132 -NCT00327366 -NCT00327548 -NCT00327678 -NCT00327873 -NCT00327951 -NCT00327990 -NCT00328198 -NCT00328250 -NCT00328380 -NCT00328484 -NCT00328549 -NCT00328835 -NCT00328848 -NCT00328926 -NCT00329017 -NCT00329056 -NCT00329069 -NCT00329277 -NCT00329524 -NCT00329602 -NCT00329706 -NCT00329797 -NCT00329901 -NCT00330122 -NCT00330434 -NCT00330447 -NCT00330707 -NCT00330850 -NCT00330876 -NCT00330993 -NCT00331006 -NCT00331188 -NCT00331474 -NCT00331487 -NCT00331708 -NCT00331747 -NCT00331812 -NCT00332150 -NCT00332254 -NCT00332449 -NCT00332631 -NCT00333307 -NCT00333333 -NCT00333684 -NCT00333749 -NCT00333957 -NCT00334100 -NCT00334139 -NCT00334152 -NCT00334204 -NCT00334542 -NCT00334568 -NCT00334672 -NCT00334685 -NCT00334815 -NCT00334828 -NCT00334932 -NCT00334945 -NCT00334971 -NCT00335023 -NCT00335049 -NCT00335075 -NCT00335348 -NCT00335361 -NCT00335491 -NCT00335543 -NCT00335569 -NCT00335738 -NCT00335803 -NCT00335920 -NCT00335933 -NCT00336076 -NCT00336570 -NCT00336648 -NCT00336895 -NCT00336921 -NCT00337064 -NCT00337259 -NCT00337402 -NCT00337558 -NCT00337597 -NCT00337766 -NCT00337909 -NCT00337974 -NCT00338104 -NCT00338182 -NCT00338208 -NCT00338221 -NCT00338312 -NCT00338520 -NCT00338624 -NCT00338715 -NCT00339105 -NCT00339430 -NCT00339560 -NCT00339742 -NCT00339846 -NCT00339989 -NCT00340106 -NCT00340158 -NCT00340171 -NCT00340184 -NCT00340275 -NCT00340288 -NCT00340301 -NCT00340509 -NCT00340652 -NCT00340665 -NCT00340678 -NCT00340808 -NCT00340834 -NCT00340899 -NCT00340964 -NCT00340990 -NCT00341003 -NCT00341120 -NCT00341159 -NCT00341250 -NCT00341276 -NCT00341328 -NCT00341367 -NCT00341432 -NCT00341497 -NCT00341549 -NCT00341601 -NCT00341744 -NCT00341822 -NCT00341874 -NCT00341965 -NCT00342043 -NCT00342069 -NCT00342082 -NCT00342121 -NCT00342173 -NCT00342199 -NCT00342290 -NCT00342433 -NCT00342446 -NCT00342511 -NCT00342524 -NCT00342537 -NCT00342589 -NCT00342706 -NCT00342771 -NCT00342862 -NCT00343005 -NCT00343083 -NCT00343148 -NCT00343187 -NCT00343213 -NCT00343252 -NCT00343304 -NCT00343655 -NCT00344097 -NCT00344123 -NCT00344266 -NCT00344383 -NCT00344448 -NCT00344487 -NCT00344643 -NCT00344721 -NCT00344851 -NCT00344877 -NCT00344994 -NCT00345111 -NCT00345267 -NCT00345345 -NCT00345514 -NCT00345553 -NCT00345579 -NCT00345748 -NCT00345774 -NCT00345839 -NCT00345917 -NCT00345969 -NCT00346060 -NCT00346372 -NCT00346775 -NCT00346853 -NCT00346905 -NCT00346983 -NCT00347061 -NCT00347139 -NCT00347152 -NCT00347308 -NCT00347451 -NCT00347464 -NCT00347490 -NCT00347516 -NCT00347529 -NCT00347815 -NCT00348075 -NCT00348140 -NCT00348166 -NCT00348218 -NCT00348270 -NCT00348309 -NCT00348478 -NCT00348647 -NCT00348660 -NCT00348686 -NCT00348777 -NCT00348816 -NCT00348946 -NCT00348985 -NCT00349037 -NCT00349050 -NCT00349063 -NCT00349453 -NCT00349622 -NCT00349635 -NCT00349674 -NCT00349791 -NCT00349843 -NCT00349856 -NCT00349882 -NCT00349895 -NCT00349921 -NCT00349999 -NCT00350194 -NCT00350298 -NCT00350337 -NCT00350831 -NCT00350896 -NCT00350987 -NCT00351065 -NCT00351208 -NCT00351221 -NCT00351273 -NCT00351403 -NCT00351520 -NCT00351819 -NCT00351858 -NCT00352170 -NCT00352313 -NCT00352391 -NCT00352430 -NCT00352443 -NCT00352482 -NCT00352495 -NCT00352625 -NCT00352651 -NCT00352664 -NCT00352846 -NCT00352872 -NCT00353093 -NCT00353158 -NCT00353171 -NCT00353340 -NCT00353379 -NCT00353405 -NCT00353431 -NCT00353444 -NCT00353470 -NCT00353548 -NCT00353600 -NCT00353665 -NCT00353717 -NCT00353730 -NCT00353743 -NCT00353782 -NCT00353951 -NCT00354068 -NCT00354081 -NCT00354159 -NCT00354302 -NCT00354354 -NCT00354575 -NCT00354653 -NCT00354757 -NCT00354809 -NCT00354835 -NCT00354887 -NCT00354939 -NCT00354978 -NCT00355030 -NCT00355108 -NCT00355134 -NCT00355160 -NCT00355394 -NCT00355459 -NCT00355576 -NCT00355667 -NCT00355706 -NCT00355823 -NCT00355836 -NCT00355914 -NCT00355927 -NCT00356265 -NCT00356369 -NCT00356382 -NCT00356512 -NCT00356603 -NCT00357006 -NCT00357019 -NCT00357201 -NCT00357292 -NCT00357331 -NCT00357383 -NCT00357435 -NCT00357539 -NCT00357591 -NCT00357656 -NCT00357851 -NCT00357864 -NCT00357981 -NCT00358020 -NCT00358189 -NCT00358241 -NCT00358371 -NCT00358501 -NCT00358618 -NCT00358631 -NCT00358761 -NCT00358774 -NCT00358813 -NCT00358839 -NCT00359073 -NCT00359177 -NCT00359203 -NCT00359229 -NCT00359268 -NCT00359320 -NCT00359333 -NCT00359411 -NCT00359515 -NCT00359645 -NCT00359710 -NCT00359723 -NCT00359840 -NCT00359853 -NCT00359931 -NCT00359970 -NCT00360373 -NCT00360399 -NCT00360425 -NCT00360607 -NCT00360633 -NCT00360789 -NCT00360828 -NCT00360906 -NCT00360932 -NCT00360945 -NCT00361127 -NCT00361179 -NCT00361192 -NCT00361205 -NCT00361218 -NCT00361296 -NCT00361387 -NCT00361439 -NCT00361465 -NCT00361504 -NCT00361582 -NCT00361777 -NCT00361816 -NCT00361920 -NCT00361933 -NCT00361972 -NCT00362063 -NCT00362297 -NCT00362518 -NCT00362570 -NCT00362739 -NCT00362752 -NCT00362843 -NCT00362869 -NCT00362908 -NCT00362986 -NCT00363220 -NCT00363233 -NCT00363662 -NCT00363727 -NCT00363740 -NCT00363857 -NCT00364065 -NCT00364286 -NCT00364481 -NCT00364689 -NCT00364949 -NCT00364988 -NCT00365092 -NCT00365131 -NCT00365144 -NCT00365274 -NCT00365365 -NCT00365456 -NCT00365586 -NCT00365625 -NCT00365651 -NCT00365716 -NCT00365846 -NCT00365859 -NCT00365976 -NCT00366132 -NCT00366158 -NCT00366236 -NCT00366392 -NCT00366405 -NCT00366418 -NCT00366496 -NCT00366587 -NCT00366730 -NCT00366782 -NCT00366847 -NCT00366964 -NCT00367003 -NCT00367185 -NCT00367198 -NCT00367315 -NCT00367367 -NCT00367432 -NCT00367588 -NCT00367627 -NCT00367796 -NCT00367848 -NCT00367913 -NCT00367952 -NCT00368004 -NCT00368043 -NCT00368173 -NCT00368225 -NCT00368277 -NCT00368303 -NCT00368381 -NCT00368394 -NCT00368446 -NCT00368459 -NCT00368628 -NCT00368693 -NCT00368758 -NCT00369057 -NCT00369096 -NCT00369304 -NCT00369590 -NCT00369668 -NCT00369707 -NCT00369967 -NCT00369980 -NCT00370019 -NCT00370071 -NCT00370084 -NCT00370214 -NCT00370344 -NCT00370604 -NCT00370695 -NCT00370799 -NCT00370877 -NCT00370968 -NCT00371033 -NCT00371124 -NCT00371150 -NCT00371163 -NCT00371293 -NCT00371449 -NCT00371462 -NCT00371527 -NCT00371631 -NCT00371657 -NCT00371670 -NCT00371683 -NCT00371943 -NCT00372008 -NCT00372021 -NCT00372177 -NCT00372203 -NCT00372333 -NCT00372424 -NCT00372450 -NCT00372580 -NCT00372710 -NCT00372801 -NCT00372918 -NCT00372931 -NCT00373139 -NCT00373334 -NCT00373555 -NCT00373594 -NCT00373867 -NCT00373997 -NCT00374036 -NCT00374114 -NCT00374530 -NCT00374543 -NCT00374608 -NCT00374751 -NCT00375050 -NCT00375076 -NCT00375115 -NCT00375141 -NCT00375180 -NCT00375206 -NCT00375271 -NCT00375323 -NCT00375336 -NCT00375375 -NCT00375388 -NCT00375622 -NCT00375700 -NCT00375778 -NCT00375921 -NCT00375947 -NCT00375973 -NCT00376064 -NCT00376090 -NCT00376181 -NCT00376194 -NCT00376311 -NCT00376441 -NCT00376506 -NCT00376766 -NCT00376870 -NCT00377208 -NCT00377247 -NCT00377260 -NCT00377312 -NCT00377364 -NCT00377754 -NCT00377949 -NCT00378196 -NCT00378235 -NCT00378456 -NCT00378469 -NCT00378534 -NCT00378573 -NCT00378638 -NCT00378664 -NCT00378677 -NCT00378690 -NCT00378755 -NCT00378846 -NCT00378898 -NCT00378937 -NCT00379184 -NCT00379223 -NCT00379275 -NCT00379288 -NCT00379821 -NCT00379951 -NCT00380055 -NCT00380068 -NCT00380185 -NCT00380250 -NCT00380289 -NCT00380315 -NCT00380419 -NCT00380614 -NCT00381004 -NCT00381108 -NCT00381134 -NCT00381147 -NCT00381251 -NCT00381433 -NCT00381563 -NCT00381641 -NCT00381680 -NCT00381888 -NCT00381914 -NCT00381966 -NCT00382057 -NCT00382070 -NCT00382343 -NCT00382447 -NCT00382629 -NCT00382681 -NCT00382915 -NCT00382928 -NCT00382941 -NCT00382967 -NCT00383084 -NCT00383097 -NCT00383110 -NCT00383227 -NCT00383357 -NCT00383409 -NCT00383591 -NCT00383643 -NCT00383669 -NCT00383708 -NCT00383799 -NCT00383916 -NCT00384046 -NCT00384267 -NCT00384527 -NCT00384618 -NCT00384761 -NCT00385281 -NCT00385346 -NCT00385385 -NCT00385749 -NCT00385788 -NCT00386113 -NCT00386178 -NCT00386282 -NCT00386308 -NCT00386360 -NCT00386620 -NCT00386633 -NCT00386672 -NCT00386737 -NCT00386776 -NCT00386880 -NCT00386906 -NCT00386958 -NCT00387179 -NCT00387192 -NCT00387244 -NCT00387283 -NCT00387374 -NCT00387582 -NCT00387842 -NCT00388141 -NCT00388258 -NCT00388297 -NCT00388401 -NCT00388479 -NCT00388505 -NCT00388531 -NCT00388609 -NCT00388661 -NCT00388921 -NCT00389038 -NCT00389090 -NCT00389142 -NCT00389272 -NCT00389376 -NCT00389467 -NCT00389649 -NCT00389714 -NCT00389818 -NCT00389935 -NCT00389948 -NCT00390039 -NCT00390065 -NCT00390091 -NCT00390104 -NCT00390143 -NCT00390221 -NCT00390299 -NCT00390390 -NCT00390455 -NCT00390663 -NCT00390741 -NCT00390793 -NCT00391066 -NCT00391157 -NCT00391300 -NCT00391417 -NCT00391664 -NCT00391690 -NCT00391703 -NCT00391781 -NCT00391794 -NCT00391976 -NCT00392067 -NCT00392080 -NCT00392093 -NCT00392171 -NCT00392327 -NCT00392457 -NCT00392496 -NCT00392652 -NCT00392756 -NCT00392808 -NCT00392834 -NCT00392873 -NCT00392912 -NCT00392938 -NCT00392951 -NCT00392990 -NCT00393159 -NCT00393172 -NCT00393250 -NCT00393263 -NCT00393380 -NCT00393874 -NCT00393900 -NCT00393913 -NCT00393939 -NCT00394043 -NCT00394147 -NCT00394225 -NCT00394251 -NCT00394290 -NCT00394316 -NCT00394329 -NCT00394407 -NCT00394472 -NCT00394524 -NCT00394537 -NCT00394784 -NCT00394888 -NCT00394901 -NCT00394940 -NCT00394966 -NCT00395135 -NCT00395161 -NCT00395226 -NCT00395291 -NCT00395304 -NCT00395330 -NCT00395369 -NCT00395408 -NCT00395538 -NCT00395590 -NCT00395616 -NCT00395629 -NCT00395694 -NCT00395967 -NCT00396084 -NCT00396097 -NCT00396188 -NCT00396305 -NCT00396370 -NCT00396396 -NCT00396435 -NCT00396474 -NCT00396513 -NCT00396604 -NCT00396643 -NCT00396773 -NCT00397215 -NCT00397267 -NCT00397345 -NCT00397358 -NCT00397423 -NCT00397462 -NCT00397475 -NCT00397501 -NCT00397657 -NCT00397670 -NCT00397683 -NCT00397787 -NCT00397813 -NCT00397839 -NCT00398034 -NCT00398112 -NCT00398151 -NCT00398333 -NCT00398489 -NCT00398541 -NCT00398580 -NCT00398775 -NCT00398866 -NCT00399048 -NCT00399165 -NCT00399269 -NCT00399373 -NCT00399399 -NCT00399516 -NCT00399529 -NCT00399542 -NCT00399646 -NCT00400140 -NCT00400465 -NCT00400530 -NCT00400816 -NCT00400998 -NCT00401011 -NCT00401193 -NCT00401219 -NCT00401245 -NCT00401271 -NCT00401297 -NCT00401518 -NCT00401934 -NCT00401999 -NCT00402077 -NCT00402545 -NCT00402623 -NCT00402688 -NCT00402727 -NCT00402896 -NCT00402974 -NCT00403039 -NCT00403104 -NCT00403273 -NCT00403338 -NCT00403390 -NCT00403507 -NCT00403520 -NCT00403572 -NCT00403598 -NCT00403819 -NCT00403884 -NCT00403897 -NCT00403949 -NCT00403975 -NCT00404079 -NCT00404118 -NCT00404222 -NCT00404586 -NCT00404625 -NCT00404664 -NCT00404859 -NCT00404937 -NCT00405119 -NCT00405145 -NCT00405236 -NCT00405340 -NCT00405509 -NCT00405613 -NCT00405639 -NCT00405756 -NCT00405782 -NCT00405847 -NCT00405860 -NCT00406198 -NCT00406770 -NCT00406874 -NCT00406926 -NCT00406978 -NCT00407329 -NCT00407355 -NCT00407381 -NCT00407446 -NCT00407472 -NCT00407537 -NCT00407576 -NCT00407602 -NCT00407680 -NCT00407706 -NCT00407797 -NCT00407888 -NCT00408005 -NCT00408031 -NCT00408057 -NCT00408109 -NCT00408148 -NCT00408226 -NCT00408447 -NCT00408473 -NCT00408954 -NCT00409032 -NCT00409149 -NCT00409214 -NCT00409331 -NCT00409357 -NCT00409383 -NCT00409435 -NCT00409500 -NCT00409630 -NCT00409721 -NCT00409747 -NCT00409864 -NCT00409968 -NCT00410059 -NCT00410189 -NCT00410228 -NCT00410293 -NCT00410306 -NCT00410540 -NCT00410579 -NCT00410592 -NCT00410605 -NCT00410618 -NCT00410761 -NCT00410774 -NCT00410852 -NCT00410995 -NCT00411034 -NCT00411112 -NCT00411216 -NCT00411255 -NCT00411281 -NCT00411307 -NCT00411346 -NCT00411372 -NCT00411567 -NCT00411619 -NCT00411632 -NCT00411671 -NCT00411684 -NCT00411801 -NCT00412100 -NCT00412152 -NCT00412386 -NCT00412412 -NCT00412542 -NCT00412607 -NCT00412815 -NCT00412867 -NCT00412880 -NCT00412906 -NCT00412971 -NCT00413088 -NCT00413244 -NCT00413309 -NCT00413348 -NCT00413387 -NCT00413465 -NCT00413595 -NCT00413621 -NCT00413751 -NCT00413855 -NCT00413920 -NCT00413959 -NCT00413998 -NCT00414024 -NCT00414128 -NCT00414271 -NCT00414336 -NCT00414375 -NCT00414531 -NCT00414557 -NCT00414583 -NCT00414830 -NCT00414843 -NCT00414960 -NCT00414973 -NCT00415077 -NCT00415233 -NCT00415350 -NCT00415376 -NCT00415545 -NCT00415584 -NCT00415610 -NCT00415714 -NCT00415909 -NCT00416143 -NCT00416234 -NCT00416325 -NCT00416364 -NCT00416442 -NCT00416468 -NCT00416585 -NCT00416702 -NCT00416728 -NCT00416897 -NCT00416949 -NCT00416962 -NCT00417313 -NCT00417352 -NCT00417404 -NCT00417456 -NCT00417547 -NCT00417573 -NCT00417612 -NCT00417768 -NCT00417781 -NCT00417872 -NCT00417898 -NCT00417911 -NCT00417937 -NCT00417963 -NCT00418002 -NCT00418028 -NCT00418054 -NCT00418275 -NCT00418301 -NCT00418340 -NCT00418470 -NCT00418639 -NCT00418678 -NCT00418782 -NCT00418925 -NCT00419094 -NCT00419133 -NCT00419172 -NCT00419185 -NCT00419263 -NCT00419276 -NCT00419549 -NCT00419562 -NCT00419627 -NCT00419692 -NCT00419731 -NCT00419796 -NCT00419874 -NCT00420147 -NCT00420199 -NCT00420251 -NCT00420394 -NCT00420459 -NCT00420641 -NCT00420654 -NCT00420810 -NCT00420875 -NCT00420992 -NCT00421096 -NCT00421239 -NCT00421369 -NCT00421421 -NCT00421434 -NCT00421460 -NCT00421967 -NCT00422188 -NCT00422201 -NCT00422487 -NCT00422630 -NCT00422643 -NCT00422695 -NCT00422708 -NCT00422760 -NCT00422812 -NCT00422851 -NCT00422994 -NCT00423072 -NCT00423085 -NCT00423215 -NCT00423267 -NCT00423319 -NCT00423579 -NCT00423839 -NCT00423878 -NCT00423917 -NCT00424008 -NCT00424099 -NCT00424346 -NCT00424398 -NCT00424489 -NCT00424580 -NCT00424606 -NCT00424619 -NCT00424658 -NCT00424671 -NCT00424736 -NCT00424827 -NCT00424905 -NCT00424996 -NCT00425061 -NCT00425113 -NCT00425165 -NCT00425321 -NCT00425347 -NCT00425607 -NCT00426127 -NCT00426244 -NCT00426283 -NCT00426374 -NCT00426413 -NCT00426465 -NCT00426478 -NCT00426491 -NCT00426517 -NCT00426595 -NCT00426621 -NCT00426647 -NCT00426686 -NCT00426725 -NCT00426777 -NCT00426842 -NCT00426933 -NCT00426959 -NCT00426985 -NCT00427024 -NCT00427219 -NCT00427323 -NCT00427427 -NCT00427700 -NCT00427726 -NCT00427830 -NCT00427947 -NCT00428012 -NCT00428025 -NCT00428038 -NCT00428090 -NCT00428103 -NCT00428142 -NCT00428168 -NCT00428220 -NCT00428753 -NCT00428831 -NCT00428935 -NCT00428987 -NCT00429117 -NCT00429156 -NCT00429182 -NCT00429260 -NCT00429325 -NCT00429364 -NCT00429533 -NCT00429689 -NCT00429754 -NCT00429832 -NCT00430014 -NCT00430105 -NCT00430287 -NCT00430495 -NCT00430521 -NCT00430599 -NCT00430664 -NCT00430755 -NCT00430794 -NCT00430807 -NCT00430859 -NCT00430872 -NCT00430911 -NCT00430937 -NCT00431080 -NCT00431197 -NCT00431366 -NCT00431457 -NCT00431496 -NCT00431561 -NCT00431600 -NCT00431626 -NCT00431717 -NCT00431756 -NCT00431925 -NCT00432068 -NCT00432146 -NCT00432276 -NCT00432393 -NCT00432458 -NCT00432484 -NCT00433056 -NCT00433108 -NCT00433160 -NCT00433173 -NCT00433199 -NCT00433329 -NCT00433368 -NCT00433628 -NCT00433654 -NCT00433680 -NCT00433732 -NCT00433862 -NCT00433901 -NCT00434096 -NCT00434122 -NCT00434473 -NCT00434551 -NCT00434564 -NCT00434824 -NCT00434876 -NCT00435123 -NCT00435214 -NCT00435526 -NCT00435552 -NCT00435591 -NCT00435604 -NCT00435708 -NCT00435773 -NCT00435942 -NCT00436137 -NCT00436488 -NCT00436527 -NCT00436579 -NCT00436618 -NCT00436683 -NCT00436787 -NCT00437021 -NCT00437060 -NCT00437086 -NCT00437346 -NCT00437658 -NCT00437684 -NCT00437762 -NCT00437827 -NCT00437840 -NCT00437983 -NCT00438048 -NCT00438061 -NCT00438178 -NCT00438191 -NCT00438243 -NCT00438308 -NCT00438321 -NCT00438334 -NCT00438451 -NCT00438464 -NCT00438568 -NCT00438633 -NCT00438672 -NCT00438763 -NCT00438841 -NCT00439127 -NCT00439231 -NCT00439244 -NCT00439270 -NCT00439387 -NCT00439543 -NCT00439621 -NCT00439647 -NCT00439660 -NCT00439699 -NCT00439803 -NCT00439816 -NCT00440180 -NCT00440362 -NCT00440440 -NCT00440583 -NCT00440635 -NCT00440661 -NCT00440986 -NCT00441090 -NCT00441103 -NCT00441168 -NCT00441194 -NCT00441415 -NCT00441480 -NCT00441701 -NCT00442000 -NCT00442013 -NCT00442078 -NCT00442117 -NCT00442130 -NCT00442182 -NCT00442195 -NCT00442351 -NCT00442364 -NCT00442390 -NCT00442468 -NCT00442481 -NCT00442767 -NCT00442936 -NCT00443144 -NCT00443170 -NCT00443222 -NCT00443287 -NCT00443313 -NCT00443482 -NCT00443768 -NCT00443781 -NCT00443820 -NCT00443872 -NCT00443898 -NCT00443963 -NCT00444041 -NCT00444119 -NCT00444210 -NCT00444236 -NCT00444275 -NCT00444288 -NCT00444353 -NCT00444392 -NCT00444405 -NCT00444561 -NCT00444639 -NCT00444691 -NCT00444769 -NCT00444873 -NCT00444899 -NCT00444912 -NCT00445003 -NCT00445055 -NCT00445224 -NCT00445393 -NCT00445432 -NCT00445575 -NCT00445627 -NCT00445900 -NCT00445913 -NCT00445965 -NCT00446082 -NCT00446134 -NCT00446316 -NCT00446329 -NCT00446355 -NCT00446433 -NCT00446563 -NCT00446823 -NCT00446940 -NCT00446979 -NCT00447018 -NCT00447304 -NCT00447356 -NCT00447395 -NCT00447499 -NCT00447681 -NCT00447915 -NCT00447928 -NCT00447980 -NCT00447993 -NCT00448019 -NCT00448071 -NCT00448292 -NCT00448422 -NCT00448474 -NCT00448682 -NCT00448851 -NCT00448955 -NCT00448981 -NCT00449072 -NCT00449124 -NCT00449462 -NCT00449514 -NCT00449540 -NCT00449670 -NCT00449748 -NCT00449787 -NCT00449865 -NCT00450164 -NCT00450203 -NCT00450281 -NCT00450294 -NCT00450437 -NCT00450463 -NCT00450541 -NCT00450619 -NCT00450697 -NCT00450853 -NCT00450996 -NCT00451061 -NCT00451074 -NCT00451204 -NCT00451321 -NCT00451373 -NCT00451490 -NCT00451503 -NCT00451529 -NCT00451568 -NCT00451620 -NCT00451789 -NCT00451841 -NCT00451893 -NCT00451919 -NCT00452036 -NCT00452062 -NCT00452101 -NCT00452140 -NCT00452322 -NCT00452335 -NCT00452348 -NCT00452374 -NCT00452530 -NCT00452543 -NCT00452582 -NCT00452699 -NCT00452712 -NCT00452725 -NCT00452855 -NCT00452894 -NCT00453102 -NCT00453128 -NCT00453245 -NCT00453453 -NCT00453635 -NCT00453765 -NCT00453791 -NCT00453830 -NCT00453843 -NCT00453908 -NCT00454051 -NCT00454142 -NCT00454194 -NCT00454207 -NCT00454220 -NCT00454259 -NCT00454285 -NCT00454441 -NCT00454571 -NCT00454623 -NCT00455078 -NCT00455091 -NCT00455156 -NCT00455234 -NCT00455247 -NCT00455286 -NCT00455312 -NCT00455325 -NCT00455403 -NCT00455429 -NCT00455455 -NCT00455507 -NCT00455598 -NCT00455728 -NCT00456118 -NCT00456157 -NCT00456222 -NCT00456300 -NCT00456313 -NCT00456378 -NCT00456404 -NCT00456508 -NCT00456664 -NCT00456846 -NCT00456885 -NCT00456924 -NCT00456963 -NCT00457002 -NCT00457015 -NCT00457067 -NCT00457132 -NCT00457145 -NCT00457184 -NCT00457236 -NCT00457275 -NCT00457288 -NCT00457340 -NCT00457366 -NCT00457509 -NCT00457613 -NCT00457717 -NCT00457951 -NCT00458263 -NCT00458276 -NCT00458406 -NCT00458419 -NCT00458458 -NCT00458471 -NCT00458562 -NCT00458575 -NCT00458627 -NCT00458705 -NCT00458731 -NCT00458770 -NCT00458796 -NCT00458822 -NCT00458926 -NCT00458991 -NCT00459056 -NCT00459329 -NCT00459368 -NCT00459433 -NCT00459459 -NCT00459498 -NCT00459537 -NCT00459914 -NCT00459979 -NCT00459992 -NCT00460174 -NCT00460408 -NCT00460538 -NCT00460928 -NCT00461149 -NCT00461162 -NCT00461188 -NCT00461240 -NCT00461370 -NCT00461396 -NCT00461448 -NCT00461526 -NCT00461578 -NCT00461591 -NCT00461669 -NCT00461747 -NCT00461760 -NCT00461864 -NCT00461916 -NCT00461968 -NCT00461994 -NCT00462020 -NCT00462046 -NCT00462098 -NCT00462137 -NCT00462241 -NCT00462267 -NCT00462397 -NCT00462449 -NCT00462475 -NCT00462605 -NCT00462644 -NCT00462670 -NCT00462683 -NCT00462735 -NCT00462813 -NCT00462865 -NCT00462891 -NCT00463112 -NCT00463125 -NCT00463242 -NCT00463294 -NCT00463450 -NCT00463580 -NCT00463762 -NCT00463814 -NCT00463853 -NCT00463879 -NCT00464074 -NCT00464295 -NCT00464308 -NCT00464555 -NCT00464581 -NCT00464594 -NCT00464711 -NCT00464919 -NCT00464984 -NCT00465101 -NCT00465361 -NCT00465387 -NCT00465426 -NCT00465452 -NCT00465517 -NCT00465699 -NCT00465790 -NCT00465907 -NCT00465933 -NCT00465972 -NCT00466167 -NCT00466193 -NCT00466271 -NCT00466336 -NCT00466349 -NCT00466375 -NCT00466518 -NCT00466635 -NCT00466713 -NCT00466739 -NCT00466817 -NCT00466869 -NCT00467246 -NCT00467350 -NCT00467363 -NCT00467376 -NCT00467597 -NCT00467636 -NCT00467675 -NCT00467701 -NCT00467792 -NCT00467818 -NCT00467831 -NCT00467844 -NCT00467870 -NCT00467896 -NCT00467922 -NCT00468013 -NCT00468026 -NCT00468052 -NCT00468065 -NCT00468078 -NCT00468208 -NCT00468299 -NCT00468325 -NCT00468338 -NCT00468403 -NCT00468624 -NCT00468832 -NCT00468858 -NCT00469079 -NCT00469118 -NCT00469196 -NCT00469456 -NCT00470119 -NCT00470171 -NCT00470197 -NCT00470353 -NCT00470392 -NCT00470652 -NCT00470782 -NCT00470977 -NCT00470990 -NCT00471237 -NCT00471250 -NCT00471315 -NCT00471523 -NCT00471536 -NCT00471627 -NCT00471692 -NCT00471731 -NCT00471796 -NCT00471809 -NCT00471835 -NCT00471861 -NCT00471900 -NCT00471952 -NCT00472030 -NCT00472069 -NCT00472186 -NCT00472303 -NCT00472355 -NCT00472485 -NCT00472550 -NCT00472628 -NCT00472680 -NCT00472823 -NCT00472849 -NCT00472901 -NCT00473083 -NCT00473161 -NCT00473291 -NCT00473356 -NCT00473369 -NCT00473408 -NCT00473460 -NCT00473655 -NCT00474162 -NCT00474175 -NCT00474396 -NCT00474409 -NCT00474474 -NCT00474721 -NCT00474773 -NCT00474838 -NCT00474942 -NCT00475046 -NCT00475176 -NCT00475306 -NCT00475436 -NCT00475462 -NCT00475501 -NCT00475514 -NCT00475592 -NCT00475683 -NCT00475761 -NCT00475943 -NCT00475982 -NCT00476138 -NCT00476203 -NCT00476255 -NCT00476333 -NCT00476398 -NCT00476450 -NCT00476489 -NCT00476736 -NCT00476775 -NCT00476814 -NCT00477256 -NCT00477399 -NCT00477477 -NCT00477516 -NCT00477620 -NCT00477724 -NCT00477750 -NCT00477789 -NCT00477841 -NCT00477971 -NCT00478296 -NCT00478491 -NCT00478504 -NCT00478712 -NCT00479011 -NCT00479037 -NCT00479063 -NCT00479154 -NCT00479193 -NCT00479336 -NCT00479479 -NCT00479518 -NCT00479531 -NCT00479739 -NCT00479830 -NCT00480038 -NCT00480272 -NCT00480311 -NCT00480519 -NCT00480545 -NCT00480662 -NCT00480870 -NCT00481208 -NCT00481260 -NCT00481403 -NCT00481416 -NCT00481429 -NCT00481598 -NCT00481676 -NCT00481689 -NCT00481754 -NCT00481780 -NCT00481845 -NCT00481949 -NCT00482053 -NCT00482066 -NCT00482105 -NCT00482209 -NCT00482248 -NCT00482378 -NCT00482612 -NCT00482677 -NCT00482885 -NCT00483067 -NCT00483119 -NCT00483145 -NCT00483184 -NCT00483236 -NCT00483288 -NCT00483379 -NCT00483418 -NCT00483457 -NCT00483600 -NCT00483704 -NCT00483834 -NCT00483886 -NCT00483912 -NCT00483925 -NCT00484042 -NCT00484068 -NCT00484081 -NCT00484263 -NCT00484458 -NCT00484484 -NCT00484679 -NCT00484705 -NCT00484718 -NCT00484783 -NCT00484848 -NCT00485069 -NCT00485277 -NCT00485290 -NCT00485303 -NCT00485316 -NCT00485368 -NCT00485446 -NCT00485576 -NCT00485836 -NCT00485940 -NCT00486109 -NCT00486148 -NCT00486239 -NCT00486278 -NCT00486486 -NCT00486642 -NCT00486759 -NCT00486876 -NCT00486941 -NCT00486980 -NCT00487162 -NCT00487201 -NCT00487279 -NCT00487370 -NCT00487396 -NCT00487422 -NCT00487578 -NCT00487643 -NCT00487695 -NCT00487760 -NCT00487825 -NCT00487838 -NCT00487916 -NCT00488007 -NCT00488033 -NCT00488124 -NCT00488137 -NCT00488267 -NCT00488306 -NCT00488332 -NCT00488410 -NCT00488514 -NCT00488527 -NCT00488540 -NCT00488644 -NCT00488826 -NCT00489281 -NCT00489307 -NCT00489333 -NCT00489346 -NCT00489385 -NCT00489437 -NCT00489463 -NCT00489476 -NCT00489502 -NCT00489918 -NCT00490022 -NCT00490100 -NCT00490165 -NCT00490243 -NCT00490386 -NCT00490555 -NCT00490750 -NCT00490906 -NCT00490932 -NCT00491218 -NCT00491283 -NCT00491335 -NCT00491400 -NCT00491478 -NCT00491582 -NCT00491881 -NCT00492011 -NCT00492154 -NCT00492219 -NCT00492388 -NCT00492531 -NCT00492622 -NCT00492726 -NCT00492973 -NCT00493103 -NCT00493116 -NCT00493129 -NCT00493389 -NCT00493571 -NCT00493870 -NCT00493935 -NCT00493948 -NCT00493961 -NCT00493974 -NCT00493987 -NCT00494065 -NCT00494169 -NCT00494208 -NCT00494260 -NCT00494364 -NCT00494507 -NCT00494585 -NCT00494624 -NCT00494689 -NCT00495157 -NCT00495235 -NCT00495365 -NCT00495586 -NCT00495638 -NCT00495690 -NCT00495781 -NCT00495846 -NCT00496106 -NCT00496834 -NCT00497094 -NCT00497146 -NCT00497263 -NCT00497276 -NCT00497484 -NCT00497523 -NCT00497549 -NCT00497575 -NCT00497653 -NCT00497666 -NCT00497705 -NCT00497835 -NCT00497861 -NCT00497913 -NCT00497939 -NCT00498082 -NCT00498095 -NCT00498147 -NCT00498238 -NCT00498394 -NCT00498433 -NCT00498446 -NCT00498485 -NCT00498511 -NCT00498537 -NCT00498667 -NCT00498719 -NCT00498875 -NCT00498901 -NCT00498992 -NCT00499005 -NCT00499070 -NCT00499122 -NCT00499174 -NCT00499330 -NCT00499837 -NCT00499967 -NCT00499993 -NCT00500175 -NCT00500331 -NCT00500344 -NCT00500435 -NCT00500474 -NCT00500526 -NCT00500552 -NCT00500617 -NCT00500734 -NCT00500747 -NCT00500799 -NCT00500994 -NCT00501059 -NCT00501215 -NCT00501358 -NCT00501371 -NCT00501462 -NCT00501748 -NCT00501826 -NCT00501943 -NCT00502047 -NCT00502073 -NCT00502177 -NCT00502320 -NCT00502450 -NCT00502554 -NCT00502593 -NCT00502632 -NCT00502658 -NCT00502684 -NCT00502697 -NCT00502840 -NCT00502957 -NCT00502970 -NCT00502983 -NCT00503100 -NCT00503152 -NCT00503165 -NCT00503256 -NCT00503347 -NCT00503399 -NCT00503750 -NCT00503854 -NCT00503919 -NCT00504010 -NCT00504101 -NCT00504387 -NCT00504556 -NCT00504634 -NCT00504660 -NCT00504738 -NCT00504764 -NCT00505011 -NCT00505297 -NCT00505414 -NCT00505609 -NCT00505648 -NCT00505752 -NCT00505791 -NCT00505804 -NCT00505882 -NCT00506103 -NCT00506116 -NCT00506194 -NCT00506324 -NCT00506376 -NCT00506532 -NCT00506597 -NCT00506636 -NCT00506831 -NCT00506870 -NCT00506883 -NCT00506922 -NCT00506961 -NCT00507117 -NCT00507195 -NCT00507338 -NCT00507377 -NCT00507416 -NCT00507455 -NCT00507611 -NCT00507728 -NCT00507780 -NCT00507806 -NCT00507832 -NCT00507858 -NCT00507871 -NCT00507962 -NCT00508027 -NCT00508066 -NCT00508209 -NCT00508287 -NCT00508326 -NCT00508677 -NCT00508924 -NCT00508989 -NCT00509041 -NCT00509080 -NCT00509145 -NCT00509197 -NCT00509275 -NCT00509483 -NCT00509535 -NCT00509652 -NCT00509678 -NCT00509782 -NCT00510042 -NCT00510172 -NCT00510406 -NCT00510536 -NCT00510549 -NCT00510575 -NCT00510757 -NCT00510783 -NCT00511316 -NCT00511654 -NCT00511693 -NCT00511771 -NCT00511797 -NCT00512070 -NCT00512096 -NCT00512304 -NCT00512343 -NCT00512499 -NCT00512564 -NCT00512694 -NCT00512707 -NCT00512746 -NCT00512837 -NCT00512850 -NCT00512941 -NCT00512954 -NCT00513071 -NCT00513123 -NCT00513370 -NCT00513396 -NCT00513422 -NCT00513461 -NCT00513617 -NCT00513656 -NCT00513903 -NCT00513929 -NCT00514020 -NCT00514150 -NCT00514462 -NCT00514540 -NCT00514592 -NCT00514787 -NCT00514865 -NCT00514982 -NCT00515008 -NCT00515021 -NCT00515034 -NCT00515450 -NCT00515476 -NCT00515619 -NCT00515632 -NCT00515710 -NCT00515775 -NCT00515866 -NCT00516035 -NCT00516048 -NCT00516074 -NCT00516191 -NCT00516399 -NCT00516581 -NCT00517023 -NCT00517062 -NCT00517231 -NCT00517257 -NCT00517361 -NCT00517491 -NCT00517751 -NCT00517842 -NCT00517881 -NCT00517933 -NCT00517946 -NCT00517959 -NCT00518050 -NCT00518154 -NCT00518310 -NCT00518414 -NCT00518427 -NCT00518466 -NCT00518479 -NCT00518531 -NCT00518570 -NCT00518609 -NCT00518635 -NCT00518817 -NCT00518895 -NCT00519051 -NCT00519077 -NCT00519155 -NCT00519298 -NCT00519311 -NCT00519597 -NCT00519857 -NCT00519935 -NCT00520104 -NCT00520156 -NCT00520182 -NCT00520481 -NCT00520520 -NCT00520611 -NCT00520689 -NCT00520741 -NCT00520884 -NCT00520988 -NCT00521118 -NCT00521222 -NCT00521300 -NCT00521638 -NCT00521729 -NCT00521846 -NCT00522002 -NCT00522093 -NCT00522158 -NCT00522288 -NCT00522353 -NCT00522392 -NCT00522431 -NCT00522665 -NCT00522743 -NCT00522847 -NCT00522860 -NCT00523068 -NCT00523107 -NCT00523549 -NCT00523588 -NCT00523666 -NCT00523718 -NCT00523796 -NCT00523835 -NCT00523848 -NCT00523874 -NCT00523926 -NCT00523939 -NCT00524056 -NCT00524134 -NCT00524147 -NCT00524225 -NCT00524238 -NCT00524251 -NCT00524342 -NCT00524381 -NCT00524719 -NCT00524862 -NCT00524888 -NCT00524914 -NCT00524992 -NCT00525044 -NCT00525265 -NCT00525551 -NCT00525668 -NCT00525785 -NCT00525967 -NCT00526032 -NCT00526097 -NCT00526110 -NCT00526214 -NCT00526357 -NCT00526370 -NCT00526604 -NCT00526630 -NCT00526812 -NCT00526864 -NCT00526903 -NCT00527228 -NCT00527293 -NCT00527306 -NCT00527371 -NCT00527397 -NCT00527488 -NCT00527514 -NCT00527527 -NCT00527540 -NCT00527605 -NCT00527709 -NCT00527878 -NCT00528008 -NCT00528112 -NCT00528138 -NCT00528216 -NCT00528307 -NCT00528476 -NCT00528528 -NCT00528541 -NCT00528762 -NCT00528801 -NCT00528853 -NCT00528866 -NCT00529061 -NCT00529464 -NCT00529529 -NCT00529737 -NCT00529854 -NCT00529997 -NCT00530049 -NCT00530075 -NCT00530179 -NCT00530894 -NCT00530907 -NCT00530946 -NCT00530972 -NCT00530998 -NCT00531024 -NCT00531089 -NCT00531141 -NCT00531219 -NCT00531310 -NCT00531453 -NCT00531505 -NCT00531713 -NCT00531765 -NCT00531791 -NCT00531804 -NCT00531895 -NCT00532077 -NCT00532116 -NCT00532207 -NCT00532259 -NCT00532272 -NCT00532285 -NCT00532337 -NCT00532545 -NCT00532740 -NCT00532779 -NCT00532883 -NCT00533000 -NCT00533234 -NCT00533364 -NCT00533390 -NCT00533455 -NCT00533611 -NCT00533637 -NCT00533650 -NCT00533676 -NCT00533702 -NCT00533871 -NCT00533910 -NCT00533975 -NCT00534066 -NCT00534157 -NCT00534443 -NCT00534508 -NCT00534534 -NCT00534638 -NCT00534677 -NCT00534703 -NCT00534859 -NCT00534937 -NCT00535054 -NCT00535158 -NCT00535561 -NCT00535600 -NCT00535717 -NCT00535899 -NCT00536016 -NCT00536081 -NCT00536146 -NCT00536237 -NCT00536328 -NCT00536367 -NCT00536471 -NCT00536601 -NCT00536718 -NCT00536796 -NCT00536965 -NCT00537095 -NCT00537108 -NCT00537173 -NCT00537316 -NCT00537420 -NCT00537524 -NCT00537589 -NCT00537628 -NCT00537654 -NCT00537849 -NCT00537901 -NCT00537940 -NCT00537953 -NCT00538018 -NCT00538694 -NCT00538733 -NCT00538759 -NCT00538811 -NCT00538824 -NCT00538876 -NCT00539149 -NCT00539240 -NCT00539409 -NCT00539448 -NCT00539643 -NCT00539656 -NCT00540033 -NCT00540072 -NCT00540189 -NCT00540410 -NCT00540475 -NCT00540527 -NCT00540891 -NCT00541086 -NCT00541164 -NCT00541177 -NCT00541216 -NCT00541255 -NCT00541554 -NCT00541658 -NCT00541671 -NCT00541723 -NCT00541736 -NCT00541931 -NCT00541957 -NCT00542022 -NCT00542035 -NCT00542100 -NCT00542152 -NCT00542178 -NCT00542191 -NCT00542230 -NCT00542256 -NCT00542412 -NCT00542425 -NCT00542451 -NCT00542503 -NCT00542646 -NCT00542763 -NCT00542867 -NCT00542984 -NCT00543023 -NCT00543218 -NCT00543257 -NCT00543829 -NCT00543959 -NCT00543998 -NCT00544089 -NCT00544219 -NCT00544232 -NCT00544245 -NCT00544544 -NCT00544869 -NCT00545025 -NCT00545064 -NCT00545311 -NCT00545454 -NCT00545597 -NCT00546026 -NCT00546117 -NCT00546234 -NCT00546286 -NCT00546377 -NCT00546468 -NCT00546494 -NCT00546507 -NCT00546520 -NCT00546585 -NCT00546715 -NCT00546728 -NCT00546754 -NCT00546832 -NCT00546949 -NCT00547001 -NCT00547053 -NCT00547131 -NCT00547391 -NCT00547456 -NCT00547469 -NCT00547625 -NCT00547638 -NCT00547768 -NCT00548041 -NCT00548054 -NCT00548301 -NCT00548483 -NCT00548522 -NCT00548821 -NCT00548977 -NCT00549172 -NCT00549445 -NCT00549549 -NCT00549679 -NCT00549926 -NCT00550173 -NCT00550368 -NCT00550459 -NCT00550511 -NCT00550784 -NCT00550862 -NCT00551161 -NCT00551187 -NCT00551304 -NCT00551369 -NCT00551499 -NCT00551941 -NCT00552045 -NCT00552071 -NCT00552084 -NCT00552097 -NCT00552162 -NCT00552253 -NCT00552487 -NCT00552981 -NCT00553410 -NCT00553423 -NCT00553449 -NCT00553462 -NCT00553514 -NCT00553605 -NCT00553917 -NCT00554008 -NCT00554281 -NCT00554476 -NCT00554645 -NCT00554788 -NCT00554814 -NCT00554996 -NCT00555087 -NCT00555139 -NCT00555321 -NCT00555347 -NCT00555529 -NCT00555555 -NCT00555607 -NCT00555620 -NCT00555672 -NCT00555880 -NCT00555919 -NCT00555971 -NCT00555997 -NCT00556114 -NCT00556335 -NCT00556400 -NCT00556439 -NCT00556647 -NCT00556686 -NCT00556777 -NCT00556842 -NCT00556907 -NCT00556933 -NCT00557115 -NCT00557141 -NCT00557219 -NCT00557310 -NCT00557336 -NCT00557427 -NCT00557492 -NCT00557544 -NCT00557817 -NCT00557908 -NCT00558012 -NCT00558038 -NCT00558129 -NCT00558220 -NCT00558480 -NCT00558558 -NCT00558636 -NCT00558896 -NCT00559299 -NCT00559312 -NCT00559390 -NCT00559416 -NCT00559949 -NCT00560053 -NCT00560352 -NCT00560521 -NCT00560586 -NCT00560625 -NCT00560833 -NCT00560859 -NCT00560989 -NCT00561106 -NCT00561262 -NCT00561431 -NCT00561574 -NCT00561652 -NCT00561808 -NCT00561821 -NCT00561834 -NCT00562276 -NCT00562354 -NCT00562705 -NCT00562731 -NCT00562796 -NCT00563264 -NCT00563290 -NCT00563329 -NCT00563394 -NCT00563433 -NCT00563615 -NCT00563758 -NCT00564005 -NCT00564018 -NCT00564096 -NCT00564135 -NCT00564252 -NCT00564395 -NCT00564460 -NCT00564512 -NCT00564525 -NCT00564629 -NCT00564759 -NCT00564850 -NCT00564889 -NCT00565214 -NCT00565266 -NCT00565513 -NCT00565526 -NCT00565539 -NCT00565552 -NCT00565604 -NCT00565669 -NCT00565760 -NCT00565864 -NCT00565955 -NCT00566020 -NCT00566033 -NCT00566046 -NCT00566098 -NCT00566137 -NCT00566215 -NCT00566267 -NCT00566280 -NCT00566358 -NCT00566384 -NCT00566579 -NCT00566657 -NCT00567151 -NCT00567333 -NCT00567476 -NCT00567606 -NCT00567645 -NCT00568035 -NCT00568126 -NCT00568243 -NCT00568269 -NCT00568295 -NCT00568321 -NCT00568347 -NCT00568386 -NCT00568789 -NCT00568802 -NCT00569023 -NCT00569049 -NCT00569062 -NCT00569192 -NCT00569244 -NCT00569504 -NCT00569582 -NCT00569751 -NCT00569972 -NCT00569998 -NCT00570154 -NCT00570180 -NCT00570544 -NCT00570661 -NCT00570739 -NCT00570804 -NCT00571025 -NCT00571051 -NCT00571090 -NCT00571246 -NCT00571337 -NCT00571415 -NCT00571792 -NCT00571818 -NCT00571844 -NCT00571948 -NCT00571987 -NCT00572000 -NCT00572065 -NCT00572156 -NCT00572299 -NCT00572481 -NCT00572858 -NCT00572936 -NCT00573573 -NCT00573586 -NCT00573599 -NCT00573755 -NCT00573807 -NCT00573924 -NCT00573937 -NCT00573989 -NCT00574041 -NCT00574184 -NCT00574301 -NCT00574392 -NCT00574535 -NCT00574717 -NCT00574795 -NCT00574808 -NCT00575159 -NCT00575276 -NCT00575341 -NCT00575367 -NCT00575588 -NCT00575822 -NCT00575887 -NCT00575913 -NCT00575939 -NCT00576069 -NCT00576082 -NCT00576407 -NCT00576485 -NCT00576498 -NCT00576693 -NCT00576810 -NCT00576927 -NCT00576992 -NCT00577018 -NCT00577226 -NCT00577330 -NCT00577343 -NCT00577369 -NCT00577499 -NCT00577590 -NCT00577668 -NCT00577772 -NCT00577798 -NCT00577876 -NCT00578071 -NCT00578240 -NCT00578344 -NCT00578461 -NCT00578474 -NCT00578578 -NCT00578669 -NCT00578773 -NCT00578877 -NCT00578942 -NCT00579189 -NCT00579371 -NCT00579410 -NCT00579488 -NCT00579527 -NCT00579540 -NCT00579709 -NCT00579787 -NCT00579865 -NCT00580138 -NCT00580177 -NCT00580281 -NCT00580307 -NCT00580333 -NCT00580346 -NCT00580372 -NCT00580502 -NCT00580723 -NCT00580749 -NCT00580892 -NCT00581061 -NCT00581087 -NCT00581126 -NCT00581230 -NCT00581308 -NCT00581321 -NCT00581490 -NCT00581529 -NCT00581568 -NCT00581737 -NCT00581867 -NCT00581906 -NCT00582049 -NCT00582309 -NCT00582569 -NCT00582647 -NCT00582660 -NCT00582868 -NCT00582920 -NCT00582946 -NCT00583024 -NCT00583180 -NCT00583284 -NCT00583453 -NCT00583518 -NCT00583570 -NCT00583648 -NCT00583778 -NCT00583895 -NCT00584168 -NCT00584246 -NCT00584259 -NCT00584311 -NCT00584376 -NCT00584389 -NCT00584441 -NCT00584571 -NCT00584610 -NCT00584623 -NCT00584636 -NCT00584727 -NCT00584870 -NCT00584948 -NCT00585039 -NCT00585104 -NCT00585494 -NCT00585650 -NCT00585702 -NCT00585715 -NCT00585741 -NCT00586014 -NCT00586092 -NCT00586131 -NCT00586209 -NCT00586313 -NCT00586365 -NCT00586391 -NCT00586404 -NCT00586443 -NCT00586521 -NCT00586794 -NCT00586924 -NCT00586963 -NCT00587054 -NCT00587119 -NCT00587132 -NCT00587171 -NCT00587197 -NCT00587275 -NCT00587314 -NCT00587470 -NCT00587535 -NCT00587691 -NCT00587795 -NCT00587847 -NCT00587873 -NCT00587899 -NCT00587925 -NCT00587938 -NCT00588029 -NCT00588146 -NCT00588224 -NCT00588354 -NCT00588367 -NCT00588536 -NCT00588627 -NCT00588822 -NCT00588926 -NCT00588939 -NCT00589368 -NCT00589498 -NCT00589888 -NCT00590005 -NCT00590044 -NCT00590096 -NCT00590135 -NCT00590200 -NCT00590226 -NCT00590252 -NCT00590304 -NCT00590369 -NCT00590408 -NCT00590421 -NCT00590512 -NCT00590525 -NCT00590603 -NCT00590629 -NCT00590655 -NCT00590811 -NCT00590915 -NCT00591019 -NCT00591227 -NCT00591240 -NCT00591344 -NCT00591357 -NCT00591461 -NCT00591643 -NCT00591669 -NCT00591838 -NCT00591903 -NCT00591942 -NCT00591968 -NCT00592072 -NCT00592540 -NCT00592553 -NCT00592566 -NCT00592618 -NCT00592943 -NCT00593047 -NCT00593138 -NCT00593320 -NCT00593346 -NCT00593528 -NCT00593567 -NCT00593593 -NCT00593710 -NCT00593723 -NCT00593736 -NCT00593853 -NCT00593892 -NCT00594022 -NCT00594061 -NCT00594074 -NCT00594100 -NCT00594126 -NCT00594139 -NCT00594217 -NCT00594425 -NCT00594685 -NCT00594763 -NCT00594867 -NCT00594997 -NCT00595101 -NCT00595114 -NCT00595127 -NCT00595140 -NCT00595153 -NCT00595205 -NCT00595387 -NCT00595439 -NCT00595491 -NCT00595530 -NCT00595660 -NCT00595725 -NCT00596011 -NCT00596063 -NCT00596115 -NCT00596336 -NCT00596362 -NCT00596596 -NCT00596687 -NCT00596752 -NCT00596908 -NCT00597012 -NCT00597051 -NCT00597064 -NCT00597194 -NCT00597376 -NCT00597415 -NCT00597623 -NCT00597909 -NCT00597948 -NCT00597987 -NCT00598078 -NCT00598234 -NCT00598338 -NCT00598364 -NCT00598403 -NCT00598494 -NCT00598598 -NCT00598754 -NCT00598832 -NCT00598923 -NCT00598949 -NCT00599092 -NCT00599209 -NCT00599248 -NCT00599365 -NCT00599482 -NCT00599521 -NCT00599560 -NCT00599716 -NCT00599729 -NCT00599989 -NCT00600028 -NCT00600106 -NCT00600353 -NCT00600431 -NCT00600665 -NCT00600808 -NCT00600886 -NCT00601289 -NCT00601341 -NCT00601393 -NCT00601432 -NCT00601471 -NCT00601692 -NCT00601705 -NCT00601900 -NCT00602056 -NCT00602108 -NCT00602147 -NCT00602264 -NCT00602316 -NCT00602355 -NCT00602433 -NCT00602459 -NCT00602511 -NCT00602589 -NCT00602602 -NCT00602641 -NCT00602680 -NCT00602784 -NCT00602901 -NCT00603109 -NCT00603187 -NCT00603278 -NCT00603304 -NCT00603382 -NCT00603434 -NCT00603447 -NCT00603655 -NCT00603681 -NCT00603707 -NCT00603746 -NCT00603902 -NCT00603967 -NCT00604305 -NCT00604318 -NCT00604370 -NCT00604448 -NCT00604474 -NCT00604539 -NCT00604578 -NCT00604864 -NCT00604916 -NCT00604942 -NCT00605163 -NCT00605319 -NCT00605657 -NCT00605878 -NCT00605891 -NCT00606008 -NCT00606060 -NCT00606684 -NCT00606697 -NCT00606749 -NCT00606840 -NCT00606918 -NCT00606931 -NCT00607087 -NCT00607204 -NCT00607451 -NCT00607685 -NCT00607763 -NCT00608101 -NCT00608140 -NCT00608361 -NCT00608400 -NCT00608452 -NCT00608556 -NCT00608764 -NCT00608777 -NCT00608790 -NCT00608842 -NCT00608894 -NCT00609063 -NCT00609128 -NCT00609141 -NCT00609609 -NCT00609726 -NCT00609869 -NCT00610025 -NCT00610077 -NCT00610103 -NCT00610363 -NCT00610402 -NCT00610558 -NCT00610597 -NCT00610662 -NCT00610818 -NCT00610909 -NCT00610935 -NCT00611104 -NCT00611182 -NCT00611624 -NCT00611650 -NCT00611715 -NCT00611754 -NCT00611767 -NCT00612001 -NCT00612014 -NCT00612066 -NCT00612183 -NCT00612248 -NCT00612352 -NCT00612417 -NCT00612456 -NCT00612573 -NCT00612729 -NCT00613093 -NCT00613444 -NCT00613548 -NCT00613600 -NCT00613717 -NCT00613743 -NCT00613886 -NCT00613912 -NCT00613977 -NCT00614042 -NCT00614198 -NCT00614211 -NCT00614354 -NCT00614406 -NCT00614653 -NCT00614666 -NCT00614744 -NCT00614809 -NCT00614822 -NCT00614887 -NCT00614900 -NCT00614926 -NCT00614952 -NCT00615004 -NCT00615017 -NCT00615147 -NCT00615381 -NCT00615498 -NCT00615537 -NCT00615589 -NCT00615602 -NCT00615628 -NCT00615641 -NCT00615836 -NCT00616005 -NCT00616187 -NCT00616278 -NCT00616343 -NCT00616408 -NCT00616512 -NCT00616642 -NCT00616902 -NCT00616928 -NCT00617058 -NCT00617110 -NCT00617227 -NCT00617240 -NCT00617292 -NCT00617513 -NCT00617578 -NCT00617695 -NCT00617721 -NCT00617760 -NCT00617825 -NCT00617903 -NCT00618150 -NCT00618293 -NCT00618553 -NCT00618566 -NCT00618644 -NCT00618657 -NCT00618813 -NCT00618904 -NCT00619125 -NCT00619190 -NCT00619463 -NCT00619671 -NCT00619684 -NCT00619775 -NCT00619957 -NCT00619970 -NCT00620087 -NCT00620113 -NCT00620165 -NCT00620191 -NCT00620412 -NCT00620477 -NCT00620698 -NCT00620737 -NCT00620828 -NCT00620906 -NCT00620919 -NCT00621205 -NCT00621218 -NCT00621387 -NCT00621439 -NCT00621517 -NCT00621530 -NCT00621673 -NCT00621790 -NCT00622089 -NCT00622115 -NCT00622544 -NCT00622765 -NCT00623129 -NCT00623220 -NCT00623350 -NCT00623454 -NCT00623480 -NCT00623714 -NCT00623727 -NCT00623740 -NCT00623896 -NCT00623961 -NCT00624000 -NCT00624078 -NCT00624169 -NCT00624416 -NCT00624481 -NCT00624676 -NCT00624884 -NCT00624936 -NCT00624949 -NCT00624975 -NCT00625001 -NCT00625027 -NCT00625040 -NCT00625053 -NCT00625079 -NCT00625118 -NCT00625196 -NCT00625274 -NCT00625404 -NCT00625469 -NCT00625495 -NCT00625534 -NCT00625573 -NCT00625690 -NCT00625742 -NCT00625846 -NCT00626080 -NCT00626223 -NCT00626418 -NCT00626587 -NCT00626769 -NCT00626938 -NCT00626990 -NCT00627016 -NCT00627211 -NCT00627289 -NCT00627497 -NCT00627523 -NCT00627640 -NCT00627796 -NCT00627965 -NCT00628056 -NCT00628082 -NCT00628108 -NCT00628329 -NCT00628342 -NCT00628355 -NCT00628498 -NCT00628511 -NCT00628537 -NCT00628602 -NCT00628615 -NCT00628719 -NCT00628745 -NCT00628784 -NCT00628823 -NCT00629005 -NCT00629135 -NCT00629239 -NCT00629265 -NCT00629486 -NCT00629538 -NCT00629564 -NCT00629642 -NCT00629668 -NCT00629837 -NCT00629902 -NCT00630006 -NCT00630032 -NCT00630071 -NCT00630084 -NCT00630214 -NCT00630448 -NCT00630461 -NCT00630513 -NCT00630591 -NCT00630604 -NCT00630838 -NCT00631137 -NCT00631241 -NCT00631267 -NCT00631501 -NCT00631644 -NCT00631657 -NCT00631670 -NCT00631735 -NCT00631813 -NCT00632190 -NCT00632242 -NCT00632359 -NCT00632593 -NCT00632606 -NCT00632736 -NCT00632801 -NCT00632814 -NCT00632866 -NCT00632892 -NCT00633022 -NCT00633035 -NCT00633191 -NCT00633217 -NCT00633386 -NCT00633464 -NCT00633776 -NCT00633828 -NCT00633841 -NCT00634010 -NCT00634140 -NCT00634296 -NCT00634426 -NCT00634478 -NCT00634517 -NCT00634569 -NCT00634777 -NCT00635024 -NCT00635063 -NCT00635115 -NCT00635141 -NCT00635271 -NCT00635297 -NCT00635310 -NCT00635349 -NCT00635375 -NCT00635414 -NCT00635583 -NCT00635609 -NCT00635622 -NCT00635804 -NCT00635817 -NCT00635843 -NCT00635934 -NCT00635960 -NCT00636103 -NCT00636155 -NCT00636181 -NCT00636298 -NCT00636402 -NCT00636415 -NCT00636597 -NCT00636662 -NCT00636857 -NCT00636935 -NCT00637078 -NCT00637182 -NCT00637195 -NCT00637221 -NCT00637260 -NCT00637572 -NCT00637676 -NCT00637715 -NCT00637793 -NCT00637845 -NCT00637858 -NCT00637962 -NCT00638092 -NCT00638131 -NCT00638144 -NCT00638170 -NCT00638378 -NCT00638443 -NCT00638521 -NCT00638534 -NCT00638677 -NCT00639041 -NCT00639054 -NCT00639067 -NCT00639080 -NCT00639223 -NCT00639392 -NCT00639431 -NCT00639470 -NCT00639808 -NCT00640120 -NCT00640172 -NCT00640237 -NCT00640289 -NCT00640315 -NCT00640328 -NCT00640549 -NCT00640744 -NCT00640757 -NCT00640926 -NCT00640939 -NCT00641030 -NCT00641108 -NCT00641251 -NCT00641277 -NCT00641602 -NCT00641667 -NCT00641914 -NCT00642148 -NCT00642161 -NCT00642187 -NCT00642200 -NCT00642421 -NCT00642473 -NCT00642564 -NCT00642616 -NCT00642720 -NCT00642772 -NCT00642863 -NCT00643071 -NCT00643110 -NCT00643149 -NCT00643487 -NCT00643552 -NCT00643591 -NCT00644046 -NCT00644059 -NCT00644319 -NCT00644527 -NCT00644605 -NCT00644657 -NCT00644774 -NCT00644839 -NCT00644891 -NCT00644943 -NCT00645112 -NCT00645125 -NCT00645203 -NCT00645424 -NCT00645489 -NCT00645541 -NCT00645619 -NCT00645749 -NCT00645996 -NCT00646204 -NCT00646282 -NCT00646295 -NCT00646308 -NCT00646347 -NCT00646451 -NCT00646490 -NCT00646958 -NCT00647088 -NCT00647283 -NCT00647374 -NCT00647790 -NCT00647855 -NCT00647868 -NCT00648245 -NCT00648258 -NCT00648323 -NCT00648700 -NCT00648739 -NCT00648882 -NCT00649025 -NCT00649142 -NCT00649337 -NCT00649415 -NCT00649766 -NCT00649961 -NCT00650403 -NCT00650689 -NCT00650728 -NCT00650806 -NCT00650858 -NCT00651040 -NCT00651079 -NCT00651235 -NCT00651313 -NCT00651326 -NCT00651352 -NCT00651378 -NCT00651469 -NCT00651768 -NCT00651807 -NCT00651937 -NCT00652093 -NCT00652184 -NCT00652366 -NCT00652379 -NCT00652964 -NCT00653185 -NCT00653393 -NCT00653471 -NCT00653614 -NCT00653627 -NCT00653874 -NCT00654056 -NCT00654108 -NCT00654121 -NCT00654212 -NCT00654264 -NCT00654407 -NCT00654472 -NCT00654485 -NCT00654498 -NCT00654563 -NCT00654615 -NCT00654628 -NCT00654745 -NCT00654784 -NCT00654927 -NCT00655057 -NCT00655109 -NCT00655278 -NCT00655369 -NCT00655616 -NCT00655915 -NCT00655967 -NCT00655993 -NCT00656058 -NCT00656227 -NCT00656279 -NCT00656318 -NCT00656370 -NCT00656747 -NCT00656786 -NCT00656877 -NCT00656981 -NCT00657046 -NCT00657072 -NCT00657085 -NCT00657111 -NCT00657228 -NCT00657410 -NCT00657449 -NCT00657618 -NCT00657670 -NCT00657774 -NCT00657826 -NCT00657917 -NCT00657969 -NCT00658060 -NCT00658086 -NCT00658099 -NCT00658151 -NCT00658164 -NCT00658190 -NCT00658593 -NCT00658619 -NCT00658736 -NCT00658749 -NCT00659087 -NCT00659542 -NCT00659646 -NCT00659672 -NCT00659906 -NCT00659958 -NCT00660010 -NCT00660166 -NCT00660244 -NCT00660660 -NCT00660829 -NCT00660894 -NCT00661440 -NCT00661466 -NCT00661557 -NCT00661817 -NCT00661882 -NCT00661999 -NCT00662012 -NCT00662064 -NCT00662129 -NCT00662194 -NCT00662259 -NCT00662298 -NCT00662350 -NCT00662363 -NCT00662454 -NCT00662506 -NCT00662610 -NCT00662675 -NCT00662753 -NCT00662896 -NCT00662961 -NCT00663026 -NCT00663143 -NCT00663169 -NCT00663182 -NCT00663208 -NCT00663247 -NCT00663338 -NCT00663481 -NCT00663507 -NCT00663546 -NCT00663624 -NCT00663858 -NCT00663897 -NCT00663910 -NCT00663988 -NCT00664066 -NCT00664131 -NCT00664209 -NCT00664430 -NCT00664508 -NCT00664742 -NCT00664859 -NCT00664937 -NCT00665015 -NCT00665171 -NCT00665184 -NCT00665210 -NCT00665236 -NCT00665548 -NCT00666276 -NCT00666328 -NCT00666471 -NCT00666562 -NCT00666640 -NCT00666653 -NCT00666887 -NCT00667329 -NCT00667407 -NCT00667420 -NCT00667498 -NCT00667524 -NCT00667602 -NCT00667667 -NCT00667810 -NCT00667836 -NCT00667901 -NCT00668109 -NCT00668122 -NCT00668200 -NCT00668330 -NCT00668343 -NCT00668369 -NCT00668408 -NCT00668434 -NCT00668980 -NCT00669019 -NCT00669032 -NCT00669188 -NCT00669305 -NCT00669409 -NCT00669461 -NCT00669604 -NCT00669786 -NCT00669877 -NCT00669968 -NCT00669994 -NCT00670059 -NCT00670202 -NCT00670280 -NCT00670306 -NCT00670501 -NCT00670800 -NCT00670865 -NCT00671021 -NCT00671138 -NCT00671203 -NCT00671450 -NCT00671528 -NCT00671580 -NCT00671619 -NCT00671658 -NCT00671736 -NCT00671892 -NCT00671931 -NCT00671983 -NCT00672308 -NCT00672360 -NCT00672529 -NCT00672607 -NCT00672789 -NCT00673283 -NCT00673374 -NCT00673595 -NCT00673816 -NCT00673972 -NCT00674154 -NCT00674245 -NCT00674336 -NCT00674401 -NCT00674479 -NCT00674557 -NCT00674622 -NCT00674843 -NCT00674895 -NCT00675090 -NCT00675103 -NCT00675155 -NCT00675298 -NCT00675337 -NCT00675623 -NCT00675727 -NCT00675753 -NCT00675818 -NCT00675883 -NCT00676026 -NCT00676052 -NCT00676247 -NCT00676533 -NCT00676715 -NCT00676975 -NCT00677157 -NCT00677261 -NCT00677339 -NCT00677417 -NCT00677469 -NCT00677495 -NCT00677508 -NCT00677755 -NCT00677963 -NCT00677976 -NCT00677989 -NCT00678028 -NCT00678366 -NCT00678574 -NCT00678639 -NCT00678782 -NCT00678821 -NCT00678873 -NCT00678899 -NCT00679146 -NCT00679211 -NCT00679315 -NCT00679549 -NCT00679679 -NCT00679692 -NCT00679718 -NCT00680030 -NCT00680160 -NCT00680199 -NCT00680264 -NCT00680680 -NCT00680797 -NCT00680979 -NCT00681291 -NCT00681382 -NCT00681434 -NCT00681616 -NCT00681629 -NCT00682084 -NCT00682188 -NCT00682214 -NCT00682435 -NCT00682552 -NCT00682565 -NCT00682591 -NCT00682630 -NCT00682955 -NCT00682994 -NCT00683124 -NCT00683254 -NCT00683449 -NCT00683722 -NCT00683761 -NCT00683904 -NCT00683917 -NCT00683943 -NCT00683969 -NCT00684021 -NCT00684112 -NCT00684125 -NCT00684164 -NCT00684528 -NCT00684593 -NCT00684879 -NCT00684905 -NCT00684957 -NCT00685009 -NCT00685074 -NCT00685230 -NCT00685360 -NCT00685464 -NCT00685503 -NCT00685607 -NCT00685633 -NCT00685698 -NCT00685789 -NCT00685880 -NCT00685971 -NCT00686010 -NCT00686348 -NCT00686439 -NCT00686530 -NCT00686699 -NCT00686751 -NCT00686777 -NCT00686920 -NCT00687115 -NCT00687180 -NCT00687219 -NCT00687258 -NCT00687375 -NCT00687388 -NCT00687479 -NCT00687531 -NCT00687544 -NCT00687947 -NCT00687999 -NCT00688064 -NCT00688077 -NCT00688129 -NCT00688168 -NCT00688220 -NCT00688467 -NCT00688740 -NCT00688987 -NCT00689169 -NCT00689182 -NCT00689273 -NCT00689377 -NCT00689429 -NCT00689533 -NCT00689715 -NCT00689741 -NCT00689793 -NCT00689845 -NCT00689936 -NCT00689988 -NCT00690105 -NCT00690118 -NCT00690261 -NCT00690326 -NCT00690378 -NCT00690469 -NCT00690508 -NCT00690885 -NCT00690898 -NCT00690911 -NCT00691132 -NCT00691184 -NCT00691210 -NCT00691223 -NCT00691600 -NCT00691678 -NCT00691704 -NCT00691782 -NCT00691808 -NCT00692068 -NCT00692224 -NCT00692276 -NCT00692328 -NCT00692367 -NCT00692484 -NCT00692497 -NCT00692848 -NCT00692913 -NCT00693082 -NCT00693225 -NCT00693264 -NCT00693303 -NCT00693329 -NCT00693407 -NCT00693589 -NCT00693784 -NCT00693940 -NCT00694018 -NCT00694122 -NCT00694265 -NCT00694486 -NCT00694525 -NCT00694551 -NCT00694564 -NCT00694577 -NCT00694733 -NCT00694759 -NCT00694785 -NCT00694850 -NCT00694941 -NCT00695071 -NCT00695097 -NCT00695110 -NCT00695136 -NCT00695227 -NCT00695422 -NCT00695500 -NCT00695526 -NCT00695552 -NCT00695669 -NCT00695695 -NCT00696111 -NCT00696475 -NCT00696527 -NCT00696540 -NCT00696644 -NCT00696683 -NCT00696917 -NCT00697177 -NCT00697216 -NCT00697346 -NCT00697385 -NCT00697411 -NCT00697463 -NCT00697749 -NCT00697762 -NCT00697775 -NCT00697814 -NCT00697957 -NCT00698009 -NCT00698022 -NCT00698035 -NCT00698165 -NCT00698178 -NCT00698191 -NCT00698347 -NCT00698412 -NCT00698425 -NCT00698581 -NCT00698815 -NCT00698867 -NCT00698984 -NCT00699140 -NCT00699166 -NCT00699231 -NCT00699283 -NCT00699452 -NCT00699933 -NCT00700128 -NCT00700505 -NCT00701012 -NCT00701194 -NCT00701259 -NCT00701311 -NCT00701363 -NCT00701506 -NCT00701584 -NCT00701779 -NCT00701883 -NCT00702195 -NCT00702403 -NCT00702455 -NCT00702481 -NCT00702507 -NCT00702533 -NCT00702585 -NCT00702650 -NCT00702832 -NCT00702897 -NCT00703079 -NCT00703092 -NCT00703196 -NCT00703209 -NCT00703339 -NCT00703443 -NCT00703716 -NCT00703846 -NCT00703911 -NCT00703937 -NCT00703989 -NCT00704015 -NCT00704028 -NCT00704080 -NCT00704197 -NCT00704262 -NCT00704522 -NCT00704626 -NCT00704717 -NCT00704743 -NCT00704899 -NCT00704912 -NCT00705055 -NCT00705120 -NCT00705198 -NCT00705250 -NCT00705341 -NCT00705406 -NCT00705601 -NCT00705666 -NCT00705796 -NCT00705952 -NCT00705965 -NCT00706056 -NCT00706160 -NCT00706238 -NCT00706355 -NCT00706433 -NCT00706446 -NCT00706576 -NCT00706602 -NCT00706641 -NCT00706667 -NCT00706719 -NCT00706771 -NCT00706784 -NCT00706914 -NCT00706953 -NCT00707122 -NCT00707148 -NCT00707187 -NCT00707213 -NCT00707473 -NCT00707486 -NCT00707564 -NCT00707590 -NCT00707642 -NCT00707746 -NCT00707772 -NCT00707811 -NCT00707850 -NCT00707941 -NCT00708227 -NCT00708448 -NCT00708617 -NCT00708630 -NCT00708786 -NCT00708799 -NCT00708877 -NCT00708981 -NCT00709124 -NCT00709150 -NCT00709228 -NCT00709410 -NCT00709423 -NCT00709488 -NCT00709501 -NCT00709514 -NCT00709566 -NCT00709631 -NCT00709839 -NCT00709878 -NCT00709891 -NCT00710047 -NCT00710138 -NCT00710151 -NCT00710177 -NCT00710255 -NCT00710307 -NCT00710346 -NCT00710450 -NCT00710606 -NCT00710619 -NCT00710840 -NCT00711087 -NCT00711204 -NCT00711347 -NCT00711399 -NCT00711516 -NCT00711698 -NCT00711711 -NCT00711750 -NCT00711776 -NCT00711815 -NCT00711984 -NCT00712166 -NCT00712296 -NCT00712387 -NCT00712621 -NCT00712647 -NCT00712712 -NCT00712738 -NCT00712972 -NCT00712985 -NCT00713050 -NCT00713115 -NCT00713128 -NCT00713193 -NCT00713219 -NCT00713258 -NCT00713414 -NCT00713492 -NCT00713609 -NCT00713635 -NCT00714012 -NCT00714064 -NCT00714103 -NCT00714116 -NCT00714181 -NCT00714220 -NCT00714350 -NCT00714558 -NCT00714597 -NCT00714701 -NCT00714714 -NCT00714753 -NCT00714805 -NCT00714870 -NCT00714935 -NCT00715273 -NCT00715533 -NCT00715572 -NCT00715611 -NCT00715715 -NCT00715819 -NCT00715845 -NCT00716027 -NCT00716066 -NCT00716131 -NCT00716378 -NCT00716729 -NCT00716781 -NCT00716872 -NCT00717106 -NCT00717210 -NCT00717431 -NCT00717626 -NCT00717691 -NCT00717860 -NCT00717886 -NCT00718172 -NCT00718315 -NCT00718341 -NCT00718458 -NCT00718497 -NCT00718549 -NCT00718601 -NCT00718809 -NCT00718874 -NCT00718913 -NCT00718939 -NCT00719043 -NCT00719082 -NCT00719108 -NCT00719186 -NCT00719290 -NCT00719303 -NCT00719342 -NCT00719563 -NCT00719719 -NCT00719849 -NCT00719862 -NCT00720070 -NCT00720083 -NCT00720109 -NCT00720135 -NCT00720239 -NCT00720317 -NCT00720356 -NCT00720434 -NCT00720564 -NCT00720577 -NCT00720616 -NCT00720642 -NCT00720902 -NCT00720954 -NCT00720980 -NCT00721032 -NCT00721201 -NCT00721396 -NCT00721487 -NCT00721617 -NCT00721643 -NCT00721721 -NCT00721760 -NCT00721916 -NCT00722189 -NCT00722254 -NCT00722683 -NCT00722735 -NCT00722748 -NCT00722761 -NCT00723242 -NCT00723294 -NCT00723502 -NCT00723567 -NCT00723762 -NCT00723788 -NCT00723801 -NCT00723827 -NCT00724178 -NCT00724217 -NCT00724282 -NCT00724347 -NCT00724555 -NCT00724646 -NCT00724659 -NCT00724815 -NCT00725023 -NCT00725114 -NCT00725205 -NCT00725686 -NCT00725712 -NCT00725764 -NCT00725842 -NCT00726310 -NCT00726375 -NCT00726492 -NCT00726544 -NCT00726830 -NCT00727168 -NCT00727194 -NCT00727259 -NCT00727324 -NCT00727337 -NCT00727844 -NCT00727909 -NCT00728026 -NCT00728104 -NCT00728195 -NCT00728208 -NCT00728533 -NCT00728871 -NCT00728910 -NCT00728975 -NCT00729040 -NCT00729157 -NCT00729183 -NCT00729313 -NCT00729339 -NCT00729456 -NCT00729625 -NCT00729859 -NCT00729911 -NCT00729937 -NCT00730015 -NCT00730028 -NCT00730067 -NCT00730106 -NCT00730132 -NCT00730184 -NCT00730210 -NCT00731081 -NCT00731198 -NCT00731289 -NCT00731302 -NCT00731419 -NCT00731575 -NCT00731757 -NCT00731809 -NCT00731822 -NCT00732108 -NCT00732147 -NCT00732160 -NCT00732238 -NCT00732394 -NCT00732407 -NCT00732524 -NCT00732732 -NCT00732797 -NCT00733265 -NCT00733382 -NCT00733538 -NCT00733590 -NCT00733629 -NCT00733655 -NCT00733746 -NCT00733759 -NCT00733980 -NCT00734123 -NCT00734201 -NCT00734227 -NCT00734279 -NCT00734526 -NCT00734656 -NCT00734682 -NCT00734812 -NCT00734825 -NCT00734838 -NCT00734864 -NCT00734942 -NCT00734955 -NCT00735020 -NCT00735033 -NCT00735189 -NCT00735215 -NCT00735254 -NCT00735319 -NCT00735423 -NCT00735462 -NCT00735566 -NCT00735787 -NCT00735917 -NCT00736086 -NCT00736112 -NCT00736203 -NCT00736281 -NCT00736567 -NCT00736671 -NCT00736723 -NCT00736801 -NCT00736853 -NCT00736996 -NCT00737048 -NCT00737191 -NCT00737334 -NCT00737412 -NCT00737451 -NCT00737607 -NCT00737698 -NCT00737802 -NCT00737854 -NCT00737971 -NCT00737997 -NCT00738036 -NCT00738127 -NCT00738205 -NCT00738244 -NCT00738621 -NCT00738673 -NCT00738751 -NCT00738972 -NCT00739479 -NCT00739492 -NCT00739674 -NCT00740129 -NCT00740142 -NCT00740623 -NCT00740844 -NCT00740948 -NCT00740987 -NCT00741013 -NCT00741052 -NCT00741091 -NCT00741312 -NCT00741533 -NCT00741637 -NCT00741676 -NCT00741741 -NCT00741767 -NCT00741780 -NCT00741832 -NCT00741910 -NCT00741936 -NCT00742092 -NCT00742235 -NCT00742365 -NCT00742404 -NCT00742469 -NCT00742664 -NCT00742677 -NCT00742820 -NCT00742872 -NCT00742976 -NCT00743184 -NCT00743626 -NCT00743730 -NCT00743990 -NCT00744172 -NCT00744185 -NCT00744393 -NCT00744445 -NCT00744523 -NCT00744731 -NCT00744887 -NCT00745030 -NCT00745069 -NCT00745251 -NCT00745407 -NCT00745420 -NCT00745537 -NCT00745563 -NCT00745732 -NCT00745901 -NCT00746564 -NCT00746668 -NCT00746772 -NCT00746902 -NCT00747071 -NCT00747162 -NCT00747227 -NCT00747435 -NCT00747500 -NCT00747539 -NCT00747591 -NCT00747682 -NCT00747760 -NCT00747864 -NCT00747929 -NCT00747994 -NCT00748007 -NCT00748072 -NCT00748098 -NCT00748501 -NCT00748540 -NCT00748579 -NCT00748592 -NCT00748605 -NCT00748631 -NCT00748644 -NCT00748657 -NCT00748696 -NCT00748852 -NCT00748904 -NCT00748969 -NCT00749086 -NCT00749294 -NCT00749359 -NCT00749411 -NCT00749645 -NCT00749788 -NCT00749814 -NCT00750139 -NCT00750152 -NCT00750256 -NCT00750269 -NCT00750451 -NCT00750477 -NCT00750594 -NCT00750724 -NCT00750789 -NCT00750828 -NCT00750867 -NCT00751036 -NCT00751140 -NCT00751296 -NCT00751426 -NCT00751660 -NCT00751699 -NCT00752076 -NCT00752102 -NCT00752193 -NCT00752245 -NCT00752609 -NCT00752674 -NCT00752765 -NCT00752778 -NCT00752869 -NCT00752921 -NCT00753064 -NCT00753090 -NCT00753103 -NCT00753142 -NCT00753168 -NCT00753233 -NCT00753571 -NCT00753597 -NCT00753714 -NCT00753870 -NCT00754013 -NCT00754065 -NCT00754481 -NCT00754585 -NCT00754611 -NCT00754676 -NCT00754806 -NCT00754832 -NCT00754923 -NCT00754975 -NCT00755027 -NCT00755430 -NCT00755482 -NCT00755495 -NCT00755508 -NCT00755573 -NCT00755599 -NCT00755781 -NCT00755950 -NCT00756002 -NCT00756366 -NCT00756379 -NCT00756522 -NCT00756561 -NCT00757003 -NCT00757120 -NCT00757289 -NCT00757302 -NCT00757315 -NCT00757393 -NCT00757484 -NCT00757757 -NCT00757848 -NCT00758108 -NCT00758316 -NCT00758368 -NCT00758459 -NCT00758498 -NCT00758706 -NCT00758927 -NCT00758992 -NCT00759044 -NCT00759109 -NCT00759174 -NCT00759525 -NCT00759603 -NCT00759655 -NCT00759707 -NCT00759733 -NCT00759772 -NCT00759798 -NCT00759863 -NCT00759876 -NCT00759928 -NCT00760006 -NCT00760097 -NCT00760149 -NCT00760240 -NCT00760344 -NCT00760513 -NCT00760786 -NCT00760825 -NCT00760864 -NCT00760903 -NCT00761085 -NCT00761280 -NCT00761332 -NCT00761358 -NCT00761397 -NCT00761501 -NCT00761527 -NCT00761956 -NCT00762034 -NCT00762307 -NCT00762541 -NCT00762619 -NCT00762723 -NCT00762749 -NCT00762788 -NCT00762866 -NCT00762905 -NCT00762970 -NCT00763113 -NCT00763399 -NCT00763594 -NCT00763633 -NCT00763867 -NCT00763880 -NCT00763893 -NCT00764309 -NCT00764322 -NCT00764673 -NCT00764699 -NCT00764751 -NCT00764764 -NCT00764816 -NCT00764985 -NCT00765193 -NCT00765297 -NCT00765323 -NCT00765388 -NCT00765401 -NCT00765505 -NCT00765635 -NCT00765648 -NCT00765700 -NCT00765713 -NCT00765726 -NCT00765882 -NCT00766090 -NCT00766168 -NCT00766220 -NCT00766298 -NCT00766649 -NCT00766870 -NCT00767013 -NCT00767091 -NCT00767117 -NCT00767130 -NCT00767234 -NCT00767299 -NCT00767403 -NCT00767429 -NCT00767546 -NCT00767559 -NCT00767793 -NCT00767897 -NCT00767988 -NCT00768157 -NCT00768170 -NCT00768313 -NCT00768365 -NCT00768599 -NCT00768612 -NCT00768742 -NCT00768781 -NCT00768807 -NCT00768820 -NCT00769002 -NCT00769197 -NCT00769262 -NCT00769353 -NCT00769379 -NCT00769483 -NCT00769522 -NCT00769535 -NCT00769587 -NCT00769626 -NCT00769730 -NCT00769756 -NCT00769834 -NCT00770094 -NCT00770198 -NCT00770276 -NCT00770432 -NCT00770510 -NCT00770640 -NCT00770653 -NCT00770887 -NCT00771043 -NCT00771095 -NCT00771290 -NCT00771316 -NCT00771342 -NCT00771355 -NCT00771498 -NCT00771589 -NCT00771602 -NCT00771615 -NCT00771706 -NCT00771758 -NCT00771771 -NCT00772057 -NCT00772122 -NCT00772278 -NCT00772408 -NCT00772447 -NCT00772486 -NCT00772525 -NCT00772629 -NCT00772694 -NCT00772850 -NCT00772876 -NCT00772915 -NCT00772954 -NCT00772967 -NCT00773136 -NCT00773175 -NCT00773227 -NCT00773266 -NCT00773279 -NCT00773682 -NCT00773890 -NCT00774020 -NCT00774449 -NCT00774462 -NCT00774566 -NCT00774631 -NCT00774657 -NCT00774930 -NCT00775138 -NCT00775151 -NCT00775190 -NCT00775242 -NCT00775463 -NCT00775489 -NCT00775619 -NCT00775723 -NCT00775749 -NCT00775905 -NCT00776087 -NCT00776113 -NCT00776295 -NCT00776607 -NCT00776789 -NCT00776919 -NCT00776997 -NCT00777088 -NCT00777569 -NCT00777777 -NCT00777894 -NCT00777998 -NCT00778011 -NCT00778037 -NCT00778609 -NCT00778765 -NCT00778843 -NCT00778999 -NCT00779584 -NCT00779688 -NCT00779857 -NCT00779922 -NCT00779961 -NCT00780117 -NCT00780247 -NCT00780351 -NCT00780780 -NCT00780988 -NCT00781170 -NCT00781261 -NCT00781378 -NCT00781469 -NCT00781495 -NCT00782158 -NCT00782236 -NCT00782327 -NCT00782639 -NCT00782652 -NCT00782782 -NCT00782795 -NCT00782860 -NCT00783016 -NCT00783315 -NCT00783393 -NCT00783419 -NCT00783523 -NCT00783575 -NCT00783627 -NCT00783926 -NCT00784043 -NCT00784082 -NCT00784134 -NCT00784173 -NCT00784394 -NCT00784485 -NCT00784511 -NCT00784563 -NCT00784615 -NCT00784706 -NCT00784758 -NCT00784810 -NCT00785135 -NCT00785187 -NCT00785291 -NCT00785304 -NCT00785343 -NCT00785824 -NCT00786084 -NCT00786188 -NCT00786279 -NCT00786500 -NCT00786604 -NCT00786929 -NCT00787163 -NCT00787189 -NCT00787319 -NCT00787358 -NCT00787540 -NCT00787644 -NCT00787657 -NCT00787670 -NCT00787696 -NCT00787722 -NCT00787761 -NCT00787878 -NCT00787943 -NCT00788073 -NCT00788164 -NCT00788307 -NCT00788528 -NCT00788554 -NCT00788866 -NCT00788918 -NCT00789061 -NCT00789087 -NCT00789126 -NCT00789243 -NCT00789451 -NCT00789529 -NCT00789581 -NCT00789685 -NCT00789802 -NCT00789919 -NCT00789945 -NCT00789997 -NCT00790075 -NCT00790101 -NCT00790179 -NCT00790231 -NCT00790283 -NCT00790530 -NCT00790582 -NCT00790647 -NCT00790777 -NCT00790790 -NCT00791193 -NCT00791297 -NCT00791492 -NCT00791960 -NCT00792077 -NCT00792090 -NCT00792103 -NCT00792142 -NCT00792194 -NCT00792337 -NCT00792597 -NCT00792727 -NCT00792740 -NCT00792766 -NCT00792948 -NCT00792961 -NCT00793065 -NCT00793143 -NCT00793208 -NCT00793247 -NCT00793286 -NCT00793338 -NCT00793715 -NCT00793845 -NCT00794040 -NCT00794053 -NCT00794105 -NCT00794118 -NCT00794235 -NCT00794274 -NCT00794313 -NCT00794352 -NCT00794430 -NCT00794677 -NCT00794820 -NCT00794924 -NCT00794976 -NCT00795015 -NCT00795028 -NCT00795158 -NCT00795184 -NCT00795483 -NCT00795496 -NCT00795639 -NCT00795782 -NCT00795899 -NCT00796042 -NCT00796133 -NCT00796185 -NCT00796679 -NCT00796692 -NCT00796783 -NCT00796887 -NCT00796926 -NCT00796952 -NCT00797069 -NCT00797121 -NCT00797186 -NCT00797277 -NCT00797316 -NCT00797407 -NCT00797420 -NCT00797433 -NCT00797615 -NCT00797693 -NCT00797810 -NCT00797836 -NCT00798057 -NCT00798226 -NCT00798369 -NCT00798382 -NCT00798512 -NCT00798603 -NCT00799136 -NCT00799214 -NCT00799266 -NCT00799565 -NCT00799617 -NCT00799760 -NCT00799773 -NCT00799916 -NCT00799955 -NCT00800033 -NCT00800098 -NCT00800358 -NCT00800579 -NCT00800943 -NCT00801021 -NCT00801307 -NCT00801385 -NCT00801619 -NCT00801788 -NCT00801853 -NCT00802009 -NCT00802139 -NCT00802191 -NCT00802230 -NCT00802308 -NCT00802425 -NCT00802438 -NCT00802529 -NCT00802581 -NCT00802646 -NCT00802672 -NCT00802698 -NCT00802815 -NCT00802867 -NCT00802932 -NCT00802997 -NCT00803426 -NCT00803504 -NCT00803647 -NCT00803842 -NCT00803972 -NCT00803985 -NCT00804089 -NCT00804128 -NCT00804193 -NCT00804336 -NCT00804349 -NCT00804466 -NCT00804557 -NCT00804830 -NCT00805142 -NCT00805181 -NCT00805207 -NCT00805311 -NCT00805324 -NCT00805428 -NCT00805493 -NCT00805649 -NCT00805844 -NCT00806065 -NCT00806117 -NCT00806299 -NCT00806637 -NCT00806871 -NCT00806962 -NCT00807040 -NCT00807183 -NCT00807326 -NCT00807560 -NCT00807599 -NCT00807651 -NCT00807664 -NCT00807729 -NCT00807820 -NCT00807872 -NCT00807885 -NCT00807963 -NCT00808106 -NCT00808158 -NCT00808197 -NCT00808613 -NCT00808938 -NCT00808990 -NCT00809003 -NCT00809094 -NCT00809354 -NCT00809562 -NCT00809601 -NCT00809640 -NCT00809861 -NCT00809913 -NCT00809952 -NCT00810095 -NCT00810485 -NCT00810550 -NCT00810563 -NCT00810797 -NCT00810849 -NCT00810888 -NCT00811330 -NCT00811486 -NCT00811538 -NCT00811681 -NCT00811785 -NCT00811967 -NCT00812045 -NCT00812149 -NCT00812162 -NCT00812188 -NCT00812370 -NCT00812383 -NCT00812409 -NCT00812422 -NCT00812617 -NCT00812630 -NCT00812708 -NCT00812838 -NCT00812851 -NCT00812968 -NCT00813007 -NCT00813033 -NCT00813241 -NCT00813475 -NCT00813527 -NCT00813683 -NCT00813761 -NCT00813826 -NCT00813917 -NCT00814073 -NCT00814138 -NCT00814177 -NCT00814307 -NCT00814346 -NCT00814385 -NCT00814580 -NCT00815126 -NCT00815191 -NCT00815282 -NCT00815308 -NCT00815425 -NCT00815438 -NCT00815490 -NCT00815503 -NCT00815529 -NCT00815698 -NCT00815711 -NCT00815724 -NCT00816127 -NCT00816179 -NCT00816218 -NCT00816244 -NCT00816257 -NCT00816335 -NCT00816387 -NCT00816504 -NCT00816530 -NCT00816660 -NCT00816829 -NCT00816998 -NCT00817180 -NCT00817232 -NCT00817661 -NCT00817726 -NCT00817765 -NCT00817843 -NCT00817882 -NCT00818311 -NCT00818389 -NCT00818870 -NCT00818896 -NCT00819208 -NCT00819299 -NCT00819585 -NCT00819676 -NCT00819832 -NCT00820040 -NCT00820079 -NCT00820235 -NCT00820287 -NCT00820352 -NCT00820378 -NCT00820638 -NCT00820664 -NCT00820742 -NCT00820781 -NCT00820807 -NCT00820820 -NCT00820846 -NCT00820924 -NCT00820989 -NCT00821132 -NCT00821236 -NCT00821470 -NCT00821509 -NCT00821626 -NCT00821821 -NCT00822198 -NCT00822276 -NCT00822432 -NCT00822523 -NCT00822575 -NCT00822627 -NCT00822653 -NCT00822679 -NCT00822757 -NCT00822861 -NCT00822900 -NCT00823004 -NCT00823394 -NCT00823511 -NCT00823537 -NCT00823550 -NCT00823901 -NCT00824122 -NCT00824135 -NCT00824252 -NCT00824408 -NCT00824473 -NCT00824668 -NCT00824863 -NCT00824941 -NCT00825019 -NCT00825071 -NCT00825175 -NCT00825344 -NCT00825396 -NCT00825435 -NCT00825591 -NCT00825617 -NCT00825916 -NCT00826007 -NCT00826020 -NCT00826306 -NCT00826423 -NCT00826449 -NCT00826462 -NCT00826527 -NCT00826579 -NCT00826605 -NCT00826709 -NCT00826774 -NCT00826813 -NCT00826904 -NCT00827034 -NCT00827398 -NCT00827502 -NCT00827658 -NCT00827814 -NCT00827892 -NCT00828048 -NCT00828100 -NCT00828347 -NCT00828568 -NCT00828685 -NCT00828750 -NCT00828763 -NCT00828828 -NCT00828919 -NCT00828945 -NCT00828971 -NCT00829049 -NCT00829101 -NCT00829114 -NCT00829153 -NCT00829361 -NCT00829387 -NCT00829543 -NCT00829673 -NCT00829712 -NCT00829829 -NCT00829855 -NCT00830089 -NCT00830141 -NCT00830232 -NCT00830284 -NCT00830297 -NCT00830323 -NCT00830388 -NCT00830583 -NCT00830596 -NCT00830726 -NCT00830739 -NCT00830830 -NCT00830934 -NCT00831103 -NCT00831194 -NCT00831441 -NCT00831675 -NCT00831740 -NCT00831844 -NCT00831974 -NCT00832065 -NCT00832234 -NCT00832312 -NCT00832377 -NCT00832416 -NCT00832429 -NCT00832520 -NCT00832585 -NCT00832611 -NCT00832767 -NCT00832806 -NCT00832871 -NCT00833144 -NCT00833222 -NCT00833274 -NCT00833534 -NCT00833625 -NCT00833690 -NCT00833794 -NCT00833846 -NCT00833911 -NCT00833989 -NCT00834210 -NCT00834236 -NCT00834366 -NCT00834678 -NCT00834886 -NCT00834899 -NCT00835198 -NCT00835211 -NCT00835302 -NCT00835445 -NCT00835510 -NCT00835770 -NCT00835861 -NCT00836043 -NCT00836160 -NCT00836316 -NCT00836368 -NCT00836771 -NCT00836797 -NCT00836810 -NCT00836823 -NCT00836953 -NCT00837044 -NCT00837395 -NCT00837486 -NCT00837616 -NCT00837785 -NCT00837850 -NCT00838032 -NCT00838513 -NCT00838526 -NCT00838552 -NCT00838591 -NCT00838682 -NCT00838851 -NCT00838864 -NCT00838942 -NCT00839124 -NCT00839137 -NCT00839189 -NCT00839202 -NCT00839228 -NCT00839306 -NCT00839319 -NCT00839488 -NCT00839787 -NCT00839969 -NCT00840047 -NCT00840086 -NCT00840190 -NCT00840294 -NCT00840463 -NCT00840528 -NCT00840944 -NCT00841113 -NCT00841152 -NCT00841555 -NCT00841919 -NCT00842140 -NCT00842205 -NCT00842218 -NCT00842244 -NCT00842426 -NCT00842621 -NCT00842751 -NCT00842777 -NCT00843024 -NCT00843167 -NCT00843310 -NCT00843401 -NCT00843505 -NCT00843518 -NCT00843570 -NCT00843726 -NCT00843817 -NCT00843986 -NCT00844038 -NCT00844194 -NCT00844259 -NCT00844311 -NCT00844428 -NCT00844441 -NCT00844532 -NCT00844545 -NCT00844597 -NCT00844649 -NCT00844662 -NCT00844844 -NCT00844870 -NCT00845117 -NCT00845156 -NCT00845299 -NCT00845351 -NCT00845520 -NCT00845559 -NCT00845572 -NCT00845676 -NCT00845754 -NCT00845832 -NCT00845936 -NCT00845962 -NCT00845975 -NCT00846040 -NCT00846248 -NCT00846534 -NCT00846898 -NCT00846924 -NCT00847002 -NCT00847236 -NCT00847340 -NCT00847379 -NCT00847431 -NCT00847457 -NCT00847522 -NCT00847847 -NCT00847899 -NCT00847990 -NCT00848172 -NCT00848263 -NCT00848289 -NCT00848315 -NCT00848406 -NCT00848666 -NCT00848731 -NCT00848744 -NCT00849095 -NCT00849342 -NCT00849394 -NCT00849524 -NCT00849615 -NCT00849745 -NCT00849849 -NCT00849888 -NCT00849927 -NCT00850018 -NCT00850031 -NCT00850057 -NCT00850408 -NCT00850577 -NCT00850993 -NCT00851162 -NCT00851188 -NCT00851331 -NCT00851461 -NCT00851487 -NCT00851747 -NCT00851799 -NCT00851838 -NCT00851942 -NCT00851981 -NCT00852020 -NCT00852072 -NCT00852098 -NCT00852124 -NCT00852150 -NCT00852202 -NCT00852228 -NCT00852293 -NCT00852345 -NCT00852631 -NCT00852748 -NCT00852839 -NCT00852917 -NCT00853138 -NCT00853489 -NCT00853502 -NCT00853515 -NCT00853541 -NCT00853697 -NCT00853723 -NCT00854139 -NCT00854204 -NCT00854373 -NCT00854412 -NCT00854672 -NCT00854815 -NCT00855192 -NCT00855296 -NCT00855374 -NCT00855426 -NCT00855530 -NCT00855595 -NCT00855712 -NCT00855764 -NCT00855829 -NCT00855920 -NCT00855972 -NCT00856232 -NCT00856297 -NCT00856388 -NCT00856544 -NCT00856596 -NCT00856609 -NCT00856648 -NCT00856973 -NCT00857051 -NCT00857194 -NCT00857363 -NCT00857376 -NCT00857389 -NCT00857454 -NCT00857532 -NCT00857662 -NCT00857701 -NCT00857766 -NCT00858117 -NCT00858143 -NCT00858169 -NCT00858351 -NCT00858494 -NCT00858520 -NCT00858611 -NCT00858624 -NCT00858650 -NCT00858689 -NCT00858793 -NCT00858819 -NCT00858845 -NCT00859053 -NCT00859105 -NCT00859274 -NCT00859287 -NCT00859339 -NCT00859690 -NCT00859794 -NCT00859872 -NCT00859911 -NCT00860067 -NCT00860145 -NCT00860184 -NCT00860327 -NCT00860366 -NCT00860457 -NCT00860535 -NCT00860587 -NCT00860678 -NCT00860691 -NCT00860743 -NCT00860808 -NCT00861029 -NCT00861159 -NCT00861523 -NCT00861588 -NCT00861705 -NCT00861731 -NCT00861861 -NCT00861887 -NCT00862004 -NCT00862095 -NCT00862277 -NCT00862433 -NCT00862628 -NCT00862758 -NCT00862810 -NCT00862940 -NCT00863278 -NCT00863343 -NCT00863356 -NCT00863616 -NCT00863642 -NCT00863785 -NCT00863941 -NCT00864058 -NCT00864136 -NCT00864175 -NCT00864305 -NCT00864383 -NCT00864422 -NCT00864461 -NCT00864552 -NCT00864760 -NCT00864929 -NCT00865046 -NCT00865098 -NCT00865111 -NCT00865358 -NCT00865371 -NCT00865410 -NCT00865449 -NCT00865462 -NCT00865631 -NCT00865644 -NCT00866008 -NCT00866099 -NCT00866294 -NCT00866346 -NCT00866437 -NCT00866476 -NCT00866554 -NCT00866645 -NCT00866775 -NCT00866840 -NCT00867243 -NCT00867698 -NCT00867763 -NCT00867828 -NCT00867867 -NCT00867919 -NCT00867932 -NCT00868075 -NCT00868153 -NCT00868166 -NCT00868218 -NCT00868478 -NCT00868530 -NCT00868738 -NCT00868985 -NCT00869037 -NCT00869063 -NCT00869206 -NCT00869336 -NCT00869544 -NCT00869674 -NCT00869739 -NCT00869804 -NCT00869934 -NCT00869960 -NCT00869986 -NCT00870220 -NCT00870246 -NCT00870272 -NCT00870519 -NCT00870753 -NCT00870766 -NCT00870896 -NCT00870922 -NCT00871130 -NCT00871299 -NCT00871377 -NCT00871494 -NCT00871572 -NCT00871611 -NCT00871650 -NCT00871780 -NCT00871962 -NCT00872001 -NCT00872092 -NCT00872157 -NCT00872209 -NCT00872274 -NCT00872287 -NCT00872365 -NCT00872495 -NCT00872612 -NCT00872664 -NCT00872755 -NCT00872781 -NCT00872924 -NCT00872937 -NCT00873145 -NCT00873262 -NCT00873314 -NCT00873405 -NCT00873457 -NCT00873522 -NCT00873600 -NCT00873678 -NCT00873769 -NCT00873782 -NCT00874029 -NCT00874172 -NCT00874653 -NCT00874900 -NCT00874926 -NCT00874978 -NCT00875121 -NCT00875251 -NCT00875355 -NCT00875433 -NCT00875446 -NCT00875537 -NCT00875576 -NCT00875875 -NCT00876161 -NCT00876291 -NCT00876356 -NCT00876499 -NCT00876655 -NCT00876694 -NCT00876759 -NCT00876772 -NCT00876798 -NCT00877097 -NCT00877110 -NCT00877292 -NCT00877383 -NCT00877409 -NCT00877448 -NCT00877604 -NCT00877682 -NCT00877708 -NCT00877838 -NCT00877968 -NCT00878059 -NCT00878098 -NCT00878176 -NCT00878228 -NCT00878475 -NCT00878514 -NCT00878553 -NCT00878592 -NCT00878826 -NCT00879034 -NCT00879060 -NCT00879125 -NCT00879216 -NCT00879359 -NCT00879437 -NCT00879502 -NCT00879515 -NCT00879541 -NCT00879658 -NCT00879710 -NCT00879775 -NCT00879814 -NCT00880022 -NCT00880048 -NCT00880087 -NCT00880282 -NCT00880347 -NCT00880386 -NCT00880399 -NCT00880412 -NCT00880425 -NCT00880451 -NCT00880477 -NCT00880490 -NCT00880594 -NCT00880763 -NCT00880802 -NCT00880906 -NCT00881283 -NCT00881322 -NCT00881361 -NCT00881595 -NCT00881660 -NCT00881920 -NCT00882089 -NCT00882193 -NCT00882440 -NCT00882726 -NCT00882999 -NCT00883129 -NCT00883220 -NCT00883272 -NCT00883350 -NCT00883402 -NCT00883493 -NCT00883519 -NCT00883571 -NCT00883584 -NCT00883701 -NCT00884000 -NCT00884221 -NCT00884260 -NCT00884273 -NCT00884403 -NCT00884416 -NCT00884494 -NCT00884507 -NCT00884624 -NCT00884936 -NCT00885001 -NCT00885365 -NCT00885469 -NCT00885560 -NCT00885703 -NCT00885924 -NCT00886080 -NCT00886197 -NCT00886210 -NCT00886327 -NCT00886496 -NCT00886522 -NCT00886652 -NCT00886769 -NCT00886834 -NCT00886847 -NCT00886925 -NCT00887081 -NCT00887172 -NCT00887185 -NCT00887224 -NCT00887250 -NCT00887276 -NCT00887315 -NCT00887328 -NCT00887354 -NCT00887484 -NCT00887510 -NCT00887705 -NCT00887744 -NCT00887835 -NCT00887939 -NCT00888017 -NCT00888225 -NCT00888342 -NCT00888563 -NCT00888589 -NCT00889018 -NCT00889031 -NCT00889174 -NCT00889187 -NCT00889200 -NCT00889226 -NCT00889434 -NCT00889512 -NCT00889707 -NCT00889837 -NCT00890058 -NCT00890071 -NCT00890162 -NCT00890201 -NCT00890552 -NCT00890747 -NCT00890812 -NCT00890877 -NCT00891124 -NCT00891189 -NCT00891228 -NCT00891267 -NCT00891319 -NCT00891722 -NCT00891813 -NCT00891852 -NCT00891904 -NCT00891917 -NCT00891969 -NCT00892073 -NCT00892268 -NCT00892346 -NCT00892359 -NCT00892619 -NCT00892697 -NCT00892723 -NCT00892879 -NCT00893009 -NCT00893217 -NCT00893347 -NCT00893373 -NCT00893425 -NCT00893633 -NCT00893646 -NCT00893789 -NCT00893880 -NCT00893932 -NCT00894075 -NCT00894192 -NCT00894205 -NCT00894608 -NCT00894764 -NCT00894803 -NCT00894907 -NCT00895089 -NCT00895544 -NCT00895752 -NCT00895817 -NCT00895960 -NCT00896077 -NCT00896272 -NCT00896285 -NCT00896402 -NCT00896441 -NCT00896753 -NCT00896766 -NCT00896818 -NCT00896831 -NCT00896857 -NCT00897039 -NCT00897091 -NCT00897143 -NCT00897208 -NCT00897247 -NCT00897442 -NCT00897455 -NCT00897806 -NCT00897923 -NCT00897975 -NCT00898014 -NCT00898144 -NCT00898274 -NCT00898326 -NCT00898365 -NCT00898443 -NCT00898508 -NCT00898677 -NCT00898937 -NCT00899041 -NCT00899080 -NCT00899132 -NCT00899379 -NCT00899431 -NCT00899613 -NCT00899873 -NCT00899964 -NCT00900081 -NCT00900094 -NCT00900211 -NCT00900432 -NCT00900575 -NCT00900601 -NCT00900874 -NCT00900965 -NCT00901004 -NCT00901459 -NCT00901524 -NCT00901615 -NCT00901940 -NCT00902031 -NCT00902057 -NCT00902109 -NCT00902135 -NCT00902174 -NCT00902226 -NCT00902564 -NCT00902629 -NCT00902837 -NCT00902902 -NCT00902954 -NCT00903071 -NCT00903136 -NCT00903201 -NCT00903214 -NCT00903227 -NCT00903422 -NCT00903721 -NCT00903877 -NCT00903903 -NCT00903994 -NCT00904098 -NCT00904137 -NCT00904202 -NCT00904540 -NCT00904696 -NCT00904709 -NCT00904748 -NCT00904826 -NCT00904865 -NCT00904956 -NCT00904969 -NCT00904982 -NCT00905320 -NCT00905632 -NCT00905736 -NCT00905970 -NCT00906243 -NCT00906399 -NCT00906412 -NCT00906438 -NCT00906971 -NCT00907257 -NCT00907348 -NCT00907452 -NCT00907517 -NCT00907595 -NCT00907660 -NCT00907751 -NCT00907790 -NCT00908076 -NCT00908089 -NCT00908427 -NCT00908531 -NCT00908804 -NCT00909103 -NCT00909116 -NCT00909220 -NCT00909259 -NCT00909350 -NCT00909389 -NCT00909766 -NCT00909857 -NCT00909909 -NCT00909961 -NCT00910065 -NCT00910208 -NCT00910325 -NCT00910533 -NCT00910598 -NCT00910637 -NCT00910715 -NCT00910897 -NCT00911131 -NCT00911300 -NCT00911586 -NCT00911625 -NCT00911742 -NCT00911859 -NCT00912015 -NCT00912132 -NCT00912158 -NCT00912184 -NCT00912197 -NCT00912444 -NCT00912665 -NCT00912717 -NCT00912782 -NCT00912808 -NCT00912977 -NCT00913042 -NCT00913055 -NCT00913081 -NCT00913146 -NCT00913172 -NCT00913263 -NCT00913380 -NCT00913445 -NCT00913497 -NCT00913978 -NCT00914056 -NCT00914095 -NCT00914134 -NCT00914147 -NCT00914173 -NCT00914407 -NCT00914433 -NCT00914459 -NCT00914524 -NCT00914602 -NCT00914823 -NCT00914862 -NCT00914966 -NCT00915330 -NCT00915343 -NCT00915681 -NCT00915798 -NCT00915954 -NCT00915980 -NCT00916032 -NCT00916058 -NCT00916240 -NCT00916292 -NCT00916305 -NCT00916383 -NCT00916396 -NCT00916643 -NCT00916747 -NCT00916903 -NCT00916916 -NCT00917007 -NCT00917124 -NCT00917241 -NCT00917410 -NCT00917618 -NCT00917683 -NCT00917709 -NCT00917943 -NCT00918255 -NCT00918333 -NCT00918411 -NCT00918437 -NCT00918450 -NCT00918476 -NCT00918528 -NCT00918723 -NCT00918736 -NCT00918892 -NCT00918931 -NCT00918983 -NCT00919074 -NCT00919165 -NCT00919204 -NCT00919217 -NCT00919243 -NCT00919334 -NCT00919360 -NCT00919373 -NCT00919412 -NCT00919516 -NCT00919633 -NCT00919672 -NCT00920075 -NCT00920127 -NCT00920179 -NCT00920413 -NCT00920478 -NCT00920621 -NCT00920725 -NCT00920985 -NCT00921024 -NCT00921206 -NCT00921427 -NCT00921492 -NCT00921518 -NCT00921544 -NCT00921609 -NCT00921648 -NCT00921856 -NCT00922155 -NCT00922194 -NCT00922233 -NCT00922597 -NCT00922805 -NCT00922870 -NCT00922883 -NCT00923013 -NCT00923052 -NCT00923195 -NCT00923247 -NCT00923429 -NCT00923559 -NCT00923780 -NCT00924040 -NCT00924183 -NCT00924196 -NCT00924261 -NCT00924287 -NCT00924326 -NCT00924508 -NCT00924612 -NCT00924638 -NCT00924755 -NCT00924768 -NCT00924872 -NCT00924950 -NCT00925041 -NCT00925067 -NCT00925145 -NCT00925158 -NCT00925210 -NCT00925236 -NCT00925522 -NCT00925652 -NCT00925691 -NCT00925847 -NCT00925977 -NCT00926120 -NCT00926237 -NCT00926380 -NCT00926419 -NCT00926471 -NCT00926601 -NCT00926835 -NCT00926913 -NCT00927030 -NCT00927056 -NCT00927069 -NCT00927108 -NCT00927186 -NCT00927212 -NCT00927303 -NCT00927901 -NCT00927953 -NCT00928044 -NCT00928161 -NCT00928564 -NCT00928629 -NCT00928759 -NCT00928837 -NCT00928993 -NCT00929006 -NCT00929188 -NCT00929305 -NCT00929318 -NCT00929591 -NCT00929643 -NCT00929903 -NCT00929981 -NCT00930007 -NCT00930124 -NCT00930202 -NCT00930228 -NCT00930332 -NCT00930423 -NCT00930709 -NCT00930852 -NCT00931099 -NCT00931164 -NCT00931190 -NCT00931528 -NCT00931593 -NCT00931619 -NCT00931788 -NCT00931866 -NCT00931970 -NCT00932022 -NCT00932256 -NCT00932425 -NCT00932555 -NCT00932698 -NCT00932737 -NCT00932763 -NCT00932841 -NCT00932854 -NCT00932880 -NCT00932919 -NCT00932971 -NCT00933036 -NCT00933140 -NCT00933244 -NCT00933296 -NCT00933322 -NCT00933361 -NCT00933465 -NCT00933478 -NCT00933543 -NCT00933608 -NCT00933660 -NCT00933686 -NCT00933829 -NCT00933894 -NCT00934102 -NCT00934258 -NCT00934271 -NCT00934388 -NCT00934479 -NCT00934596 -NCT00934713 -NCT00934752 -NCT00934830 -NCT00934960 -NCT00935129 -NCT00935311 -NCT00935584 -NCT00935649 -NCT00935779 -NCT00935792 -NCT00935896 -NCT00936273 -NCT00936312 -NCT00936325 -NCT00936338 -NCT00936429 -NCT00936585 -NCT00936728 -NCT00936741 -NCT00936767 -NCT00936793 -NCT00936806 -NCT00936845 -NCT00937092 -NCT00937131 -NCT00937144 -NCT00937274 -NCT00937287 -NCT00937547 -NCT00937638 -NCT00937690 -NCT00937898 -NCT00938184 -NCT00938301 -NCT00938483 -NCT00938535 -NCT00938626 -NCT00938860 -NCT00938925 -NCT00938977 -NCT00939107 -NCT00939120 -NCT00939211 -NCT00939419 -NCT00939523 -NCT00939536 -NCT00939549 -NCT00939640 -NCT00939653 -NCT00939679 -NCT00939692 -NCT00939770 -NCT00939822 -NCT00940082 -NCT00940238 -NCT00940342 -NCT00940433 -NCT00940654 -NCT00940810 -NCT00940836 -NCT00940927 -NCT00941070 -NCT00941174 -NCT00941343 -NCT00941369 -NCT00941551 -NCT00941616 -NCT00941681 -NCT00941746 -NCT00941928 -NCT00941941 -NCT00941993 -NCT00942006 -NCT00942019 -NCT00942227 -NCT00942409 -NCT00942591 -NCT00942630 -NCT00942812 -NCT00942851 -NCT00942955 -NCT00943033 -NCT00943059 -NCT00943267 -NCT00943280 -NCT00943358 -NCT00943514 -NCT00943527 -NCT00943631 -NCT00943644 -NCT00943657 -NCT00943722 -NCT00943748 -NCT00943774 -NCT00943865 -NCT00943878 -NCT00944216 -NCT00944567 -NCT00944671 -NCT00944879 -NCT00945009 -NCT00945022 -NCT00945061 -NCT00945334 -NCT00945373 -NCT00945412 -NCT00945581 -NCT00945685 -NCT00945750 -NCT00945880 -NCT00945919 -NCT00946010 -NCT00946023 -NCT00946101 -NCT00946114 -NCT00946192 -NCT00946400 -NCT00946816 -NCT00946842 -NCT00947037 -NCT00947193 -NCT00947219 -NCT00947271 -NCT00947453 -NCT00947479 -NCT00947505 -NCT00947765 -NCT00947882 -NCT00947960 -NCT00947986 -NCT00948012 -NCT00948142 -NCT00948220 -NCT00948259 -NCT00948376 -NCT00948402 -NCT00948506 -NCT00948766 -NCT00948779 -NCT00948922 -NCT00949169 -NCT00949208 -NCT00949416 -NCT00949598 -NCT00949637 -NCT00949741 -NCT00949975 -NCT00950170 -NCT00950183 -NCT00950261 -NCT00950326 -NCT00950482 -NCT00950625 -NCT00950651 -NCT00950677 -NCT00950690 -NCT00950768 -NCT00950781 -NCT00950989 -NCT00951119 -NCT00951145 -NCT00951223 -NCT00951405 -NCT00951431 -NCT00951522 -NCT00951730 -NCT00952146 -NCT00952185 -NCT00952354 -NCT00952692 -NCT00952731 -NCT00952744 -NCT00952770 -NCT00952965 -NCT00953043 -NCT00953316 -NCT00953394 -NCT00953420 -NCT00953511 -NCT00953667 -NCT00953771 -NCT00953914 -NCT00954005 -NCT00954031 -NCT00954070 -NCT00954174 -NCT00954226 -NCT00954291 -NCT00954356 -NCT00954382 -NCT00954421 -NCT00954434 -NCT00954629 -NCT00954707 -NCT00954798 -NCT00954850 -NCT00954889 -NCT00954928 -NCT00954993 -NCT00955019 -NCT00955045 -NCT00955149 -NCT00955370 -NCT00955422 -NCT00955500 -NCT00955669 -NCT00955838 -NCT00955981 -NCT00955994 -NCT00956033 -NCT00956150 -NCT00956215 -NCT00956306 -NCT00956358 -NCT00956397 -NCT00956501 -NCT00956696 -NCT00956748 -NCT00956839 -NCT00956982 -NCT00957086 -NCT00957281 -NCT00957359 -NCT00957645 -NCT00957788 -NCT00957840 -NCT00957866 -NCT00957879 -NCT00957892 -NCT00957918 -NCT00958113 -NCT00958139 -NCT00958204 -NCT00958256 -NCT00958360 -NCT00958438 -NCT00958542 -NCT00958737 -NCT00958750 -NCT00958763 -NCT00958776 -NCT00958802 -NCT00958919 -NCT00959049 -NCT00959283 -NCT00959491 -NCT00959621 -NCT00959751 -NCT00959764 -NCT00960011 -NCT00960167 -NCT00960245 -NCT00960635 -NCT00960661 -NCT00960934 -NCT00961012 -NCT00961467 -NCT00961558 -NCT00961623 -NCT00961701 -NCT00962039 -NCT00962065 -NCT00962169 -NCT00962221 -NCT00962299 -NCT00962338 -NCT00962390 -NCT00962637 -NCT00962936 -NCT00963001 -NCT00963027 -NCT00963040 -NCT00963157 -NCT00963339 -NCT00963417 -NCT00963690 -NCT00963729 -NCT00963755 -NCT00963937 -NCT00963950 -NCT00964210 -NCT00964223 -NCT00964535 -NCT00964821 -NCT00964951 -NCT00965276 -NCT00965289 -NCT00965315 -NCT00965341 -NCT00965354 -NCT00965575 -NCT00965627 -NCT00965679 -NCT00965770 -NCT00965835 -NCT00965848 -NCT00965913 -NCT00966004 -NCT00966017 -NCT00966264 -NCT00966342 -NCT00966381 -NCT00966459 -NCT00966498 -NCT00966576 -NCT00966589 -NCT00966693 -NCT00966719 -NCT00966901 -NCT00966940 -NCT00967070 -NCT00967174 -NCT00967317 -NCT00967473 -NCT00967499 -NCT00967759 -NCT00967811 -NCT00968214 -NCT00968240 -NCT00968357 -NCT00968370 -NCT00968396 -NCT00968500 -NCT00968695 -NCT00968747 -NCT00968760 -NCT00968786 -NCT00968890 -NCT00969020 -NCT00969072 -NCT00969085 -NCT00969124 -NCT00969280 -NCT00969319 -NCT00969462 -NCT00969501 -NCT00969579 -NCT00969969 -NCT00970047 -NCT00970086 -NCT00970190 -NCT00970502 -NCT00970541 -NCT00970567 -NCT00970658 -NCT00970697 -NCT00970801 -NCT00970866 -NCT00970983 -NCT00971035 -NCT00971074 -NCT00971165 -NCT00971334 -NCT00971438 -NCT00971555 -NCT00971737 -NCT00971750 -NCT00971763 -NCT00971776 -NCT00971958 -NCT00971971 -NCT00972101 -NCT00972218 -NCT00972231 -NCT00972296 -NCT00972309 -NCT00972530 -NCT00973063 -NCT00973154 -NCT00973219 -NCT00973336 -NCT00973362 -NCT00973661 -NCT00973674 -NCT00973895 -NCT00973908 -NCT00973999 -NCT00974363 -NCT00974480 -NCT00974532 -NCT00974558 -NCT00974636 -NCT00974727 -NCT00974831 -NCT00974883 -NCT00974935 -NCT00975013 -NCT00975078 -NCT00975130 -NCT00975143 -NCT00975156 -NCT00975208 -NCT00975403 -NCT00975442 -NCT00975546 -NCT00975585 -NCT00975650 -NCT00975728 -NCT00975741 -NCT00975793 -NCT00975819 -NCT00975884 -NCT00976040 -NCT00976313 -NCT00976443 -NCT00976547 -NCT00976560 -NCT00976573 -NCT00976586 -NCT00976599 -NCT00976625 -NCT00976677 -NCT00976781 -NCT00977054 -NCT00977080 -NCT00977093 -NCT00977236 -NCT00977353 -NCT00977366 -NCT00977392 -NCT00977470 -NCT00977730 -NCT00977821 -NCT00977847 -NCT00978042 -NCT00978159 -NCT00978237 -NCT00978354 -NCT00978419 -NCT00978458 -NCT00978549 -NCT00978627 -NCT00978679 -NCT00978861 -NCT00978939 -NCT00978991 -NCT00979043 -NCT00979108 -NCT00979160 -NCT00979212 -NCT00979589 -NCT00979602 -NCT00979628 -NCT00979719 -NCT00979758 -NCT00979836 -NCT00979914 -NCT00979979 -NCT00980161 -NCT00980174 -NCT00980187 -NCT00980785 -NCT00980798 -NCT00980954 -NCT00981032 -NCT00981045 -NCT00981071 -NCT00981136 -NCT00981201 -NCT00981305 -NCT00981370 -NCT00981461 -NCT00981552 -NCT00981604 -NCT00981656 -NCT00981695 -NCT00981708 -NCT00981734 -NCT00981851 -NCT00982007 -NCT00982124 -NCT00982228 -NCT00982332 -NCT00982540 -NCT00982579 -NCT00982605 -NCT00982787 -NCT00982800 -NCT00982839 -NCT00982852 -NCT00982891 -NCT00982904 -NCT00982969 -NCT00982995 -NCT00983437 -NCT00983489 -NCT00983502 -NCT00983554 -NCT00983697 -NCT00983749 -NCT00984100 -NCT00984191 -NCT00984243 -NCT00984334 -NCT00984659 -NCT00984828 -NCT00984893 -NCT00985010 -NCT00985088 -NCT00985309 -NCT00985413 -NCT00985504 -NCT00985803 -NCT00986180 -NCT00986765 -NCT00986882 -NCT00986973 -NCT00987012 -NCT00987077 -NCT00987116 -NCT00987194 -NCT00987350 -NCT00987389 -NCT00987805 -NCT00987831 -NCT00988065 -NCT00988078 -NCT00988143 -NCT00988260 -NCT00988351 -NCT00988442 -NCT00988468 -NCT00988559 -NCT00988572 -NCT00988741 -NCT00988949 -NCT00988975 -NCT00989196 -NCT00989222 -NCT00989443 -NCT00989508 -NCT00989547 -NCT00989612 -NCT00989625 -NCT00989651 -NCT00989677 -NCT00989716 -NCT00989794 -NCT00989859 -NCT00989898 -NCT00989976 -NCT00990132 -NCT00990223 -NCT00990379 -NCT00990652 -NCT00990808 -NCT00991146 -NCT00991159 -NCT00991406 -NCT00991601 -NCT00991731 -NCT00991874 -NCT00992017 -NCT00992277 -NCT00992433 -NCT00992693 -NCT00992836 -NCT00993252 -NCT00993265 -NCT00993356 -NCT00993408 -NCT00993447 -NCT00993551 -NCT00993707 -NCT00993902 -NCT00993915 -NCT00993928 -NCT00994045 -NCT00994175 -NCT00994214 -NCT00994552 -NCT00994656 -NCT00994851 -NCT00994929 -NCT00995007 -NCT00995020 -NCT00995059 -NCT00995098 -NCT00995150 -NCT00995163 -NCT00995215 -NCT00995306 -NCT00995527 -NCT00995722 -NCT00995774 -NCT00995813 -NCT00995826 -NCT00995891 -NCT00996112 -NCT00996424 -NCT00996632 -NCT00996697 -NCT00996710 -NCT00996801 -NCT00997100 -NCT00997269 -NCT00997412 -NCT00997425 -NCT00997490 -NCT00997516 -NCT00997581 -NCT00997828 -NCT00997854 -NCT00997867 -NCT00997958 -NCT00998244 -NCT00998322 -NCT00998335 -NCT00998465 -NCT00998621 -NCT00998725 -NCT00998868 -NCT00998920 -NCT00998985 -NCT00999050 -NCT00999219 -NCT00999284 -NCT00999310 -NCT00999427 -NCT00999518 -NCT00999557 -NCT01000090 -NCT01000116 -NCT01000181 -NCT01000272 -NCT01000701 -NCT01000779 -NCT01000857 -NCT01001390 -NCT01001598 -NCT01001793 -NCT01001858 -NCT01002066 -NCT01002417 -NCT01002443 -NCT01002664 -NCT01002755 -NCT01002781 -NCT01003002 -NCT01003054 -NCT01003106 -NCT01003145 -NCT01003223 -NCT01003249 -NCT01003262 -NCT01003379 -NCT01003509 -NCT01003548 -NCT01003639 -NCT01003886 -NCT01003951 -NCT01004081 -NCT01004484 -NCT01004510 -NCT01004835 -NCT01004874 -NCT01004887 -NCT01004965 -NCT01005017 -NCT01005095 -NCT01005147 -NCT01005303 -NCT01005381 -NCT01005433 -NCT01005563 -NCT01005589 -NCT01005849 -NCT01006265 -NCT01006330 -NCT01006343 -NCT01006408 -NCT01006447 -NCT01006941 -NCT01006993 -NCT01007162 -NCT01007266 -NCT01007318 -NCT01007331 -NCT01007474 -NCT01007565 -NCT01007656 -NCT01008007 -NCT01008163 -NCT01008397 -NCT01008462 -NCT01008488 -NCT01008501 -NCT01008696 -NCT01009099 -NCT01009255 -NCT01009294 -NCT01009437 -NCT01009450 -NCT01009463 -NCT01009723 -NCT01009840 -NCT01009970 -NCT01010061 -NCT01010074 -NCT01010113 -NCT01010126 -NCT01010152 -NCT01010165 -NCT01010321 -NCT01010451 -NCT01010711 -NCT01010802 -NCT01010841 -NCT01010854 -NCT01011010 -NCT01011257 -NCT01011270 -NCT01011322 -NCT01011426 -NCT01011517 -NCT01011543 -NCT01011647 -NCT01011777 -NCT01011803 -NCT01011816 -NCT01011894 -NCT01011933 -NCT01012037 -NCT01012271 -NCT01012349 -NCT01012739 -NCT01012804 -NCT01012882 -NCT01013207 -NCT01013337 -NCT01013480 -NCT01013493 -NCT01013597 -NCT01013636 -NCT01013714 -NCT01013792 -NCT01013883 -NCT01013909 -NCT01013948 -NCT01013961 -NCT01014013 -NCT01014026 -NCT01014156 -NCT01014169 -NCT01014221 -NCT01014312 -NCT01014390 -NCT01014520 -NCT01014559 -NCT01014624 -NCT01014715 -NCT01014767 -NCT01014819 -NCT01014871 -NCT01014897 -NCT01015378 -NCT01015417 -NCT01015430 -NCT01015625 -NCT01015677 -NCT01015690 -NCT01015755 -NCT01015820 -NCT01016093 -NCT01016106 -NCT01016353 -NCT01016366 -NCT01016418 -NCT01016600 -NCT01016652 -NCT01016678 -NCT01016691 -NCT01016743 -NCT01016782 -NCT01016964 -NCT01016977 -NCT01017120 -NCT01017146 -NCT01017354 -NCT01017510 -NCT01017952 -NCT01017965 -NCT01018160 -NCT01018173 -NCT01018381 -NCT01018485 -NCT01018511 -NCT01018680 -NCT01018706 -NCT01018836 -NCT01019070 -NCT01019083 -NCT01019109 -NCT01019122 -NCT01019213 -NCT01019226 -NCT01019239 -NCT01019343 -NCT01019486 -NCT01019499 -NCT01019616 -NCT01019889 -NCT01019928 -NCT01019980 -NCT01020071 -NCT01020136 -NCT01020279 -NCT01020331 -NCT01020370 -NCT01020513 -NCT01020682 -NCT01020721 -NCT01020916 -NCT01021137 -NCT01021267 -NCT01021280 -NCT01021579 -NCT01021852 -NCT01021891 -NCT01021982 -NCT01022099 -NCT01022268 -NCT01022385 -NCT01022398 -NCT01022476 -NCT01022619 -NCT01022632 -NCT01022645 -NCT01022827 -NCT01022905 -NCT01023113 -NCT01023191 -NCT01023217 -NCT01023308 -NCT01023347 -NCT01023490 -NCT01023516 -NCT01023867 -NCT01023880 -NCT01023971 -NCT01023984 -NCT01024010 -NCT01024088 -NCT01024270 -NCT01024959 -NCT01025076 -NCT01025128 -NCT01025505 -NCT01025518 -NCT01025583 -NCT01025622 -NCT01025635 -NCT01026012 -NCT01026181 -NCT01026207 -NCT01026220 -NCT01026493 -NCT01026532 -NCT01026571 -NCT01026584 -NCT01026675 -NCT01026870 -NCT01026935 -NCT01027039 -NCT01027156 -NCT01027182 -NCT01027195 -NCT01027286 -NCT01027325 -NCT01027429 -NCT01027494 -NCT01027559 -NCT01027663 -NCT01027793 -NCT01027819 -NCT01027884 -NCT01027975 -NCT01028040 -NCT01028235 -NCT01028287 -NCT01028352 -NCT01028365 -NCT01028378 -NCT01028456 -NCT01028469 -NCT01028651 -NCT01028677 -NCT01028989 -NCT01029093 -NCT01029275 -NCT01029301 -NCT01029340 -NCT01029392 -NCT01029444 -NCT01029561 -NCT01029587 -NCT01029626 -NCT01029639 -NCT01029652 -NCT01029691 -NCT01029704 -NCT01029834 -NCT01029860 -NCT01029873 -NCT01029912 -NCT01029990 -NCT01030081 -NCT01030107 -NCT01030211 -NCT01030380 -NCT01030393 -NCT01030445 -NCT01030614 -NCT01030653 -NCT01030861 -NCT01030900 -NCT01031043 -NCT01031121 -NCT01031238 -NCT01031342 -NCT01031407 -NCT01031576 -NCT01031589 -NCT01031641 -NCT01031654 -NCT01031680 -NCT01031732 -NCT01031875 -NCT01031992 -NCT01032252 -NCT01032434 -NCT01032590 -NCT01032603 -NCT01032694 -NCT01032928 -NCT01033175 -NCT01033227 -NCT01033266 -NCT01033643 -NCT01033773 -NCT01033903 -NCT01033916 -NCT01034046 -NCT01034280 -NCT01034306 -NCT01034371 -NCT01034384 -NCT01034397 -NCT01034631 -NCT01034657 -NCT01034995 -NCT01035099 -NCT01035177 -NCT01035268 -NCT01035567 -NCT01035983 -NCT01036230 -NCT01036841 -NCT01037309 -NCT01037335 -NCT01037400 -NCT01037452 -NCT01037530 -NCT01038219 -NCT01038245 -NCT01038427 -NCT01038518 -NCT01038609 -NCT01038869 -NCT01038960 -NCT01039103 -NCT01039545 -NCT01039675 -NCT01039688 -NCT01039909 -NCT01040026 -NCT01040039 -NCT01040052 -NCT01040065 -NCT01040286 -NCT01040299 -NCT01040338 -NCT01040377 -NCT01040416 -NCT01040455 -NCT01040481 -NCT01040533 -NCT01040598 -NCT01040611 -NCT01040650 -NCT01040663 -NCT01040845 -NCT01041001 -NCT01041040 -NCT01041079 -NCT01041105 -NCT01041222 -NCT01041261 -NCT01041430 -NCT01041625 -NCT01041755 -NCT01041950 -NCT01042171 -NCT01042548 -NCT01042613 -NCT01042860 -NCT01042912 -NCT01042951 -NCT01043198 -NCT01043367 -NCT01043588 -NCT01043601 -NCT01043627 -NCT01043822 -NCT01043848 -NCT01043978 -NCT01044043 -NCT01044173 -NCT01044264 -NCT01044628 -NCT01044797 -NCT01044953 -NCT01044992 -NCT01045109 -NCT01045499 -NCT01045525 -NCT01045551 -NCT01045616 -NCT01045655 -NCT01045668 -NCT01045681 -NCT01045694 -NCT01045759 -NCT01045824 -NCT01045876 -NCT01045902 -NCT01046006 -NCT01046032 -NCT01046123 -NCT01046279 -NCT01046331 -NCT01046552 -NCT01046591 -NCT01046643 -NCT01046656 -NCT01046734 -NCT01046812 -NCT01046825 -NCT01046838 -NCT01046877 -NCT01046981 -NCT01047059 -NCT01047085 -NCT01047111 -NCT01047163 -NCT01047332 -NCT01047358 -NCT01047397 -NCT01047462 -NCT01047501 -NCT01047553 -NCT01047683 -NCT01047709 -NCT01047761 -NCT01047787 -NCT01047800 -NCT01047826 -NCT01047878 -NCT01047930 -NCT01047956 -NCT01048021 -NCT01048112 -NCT01048177 -NCT01048385 -NCT01048450 -NCT01048502 -NCT01048541 -NCT01048580 -NCT01048632 -NCT01048697 -NCT01048749 -NCT01048788 -NCT01048827 -NCT01048892 -NCT01048931 -NCT01049074 -NCT01049191 -NCT01049412 -NCT01049464 -NCT01049750 -NCT01050088 -NCT01050114 -NCT01050361 -NCT01050465 -NCT01050478 -NCT01050530 -NCT01050582 -NCT01050998 -NCT01051076 -NCT01051297 -NCT01051310 -NCT01051427 -NCT01051544 -NCT01051570 -NCT01051726 -NCT01051869 -NCT01051895 -NCT01052207 -NCT01052272 -NCT01052285 -NCT01052311 -NCT01052428 -NCT01052532 -NCT01052597 -NCT01052623 -NCT01052636 -NCT01052792 -NCT01052870 -NCT01053026 -NCT01053065 -NCT01053156 -NCT01053182 -NCT01053286 -NCT01053312 -NCT01053364 -NCT01053416 -NCT01053442 -NCT01053481 -NCT01053533 -NCT01053572 -NCT01053598 -NCT01053754 -NCT01053923 -NCT01053949 -NCT01054105 -NCT01054131 -NCT01054157 -NCT01054196 -NCT01054274 -NCT01054378 -NCT01054417 -NCT01054443 -NCT01054599 -NCT01054690 -NCT01055041 -NCT01055249 -NCT01055301 -NCT01055405 -NCT01055548 -NCT01055821 -NCT01056003 -NCT01056055 -NCT01056107 -NCT01056172 -NCT01056198 -NCT01056315 -NCT01056367 -NCT01056406 -NCT01056419 -NCT01056445 -NCT01056692 -NCT01056718 -NCT01056913 -NCT01057173 -NCT01057199 -NCT01057225 -NCT01057641 -NCT01057732 -NCT01057771 -NCT01057836 -NCT01058070 -NCT01058161 -NCT01058434 -NCT01058629 -NCT01058681 -NCT01058733 -NCT01058824 -NCT01058863 -NCT01058876 -NCT01058941 -NCT01059123 -NCT01059227 -NCT01059279 -NCT01059396 -NCT01059422 -NCT01059526 -NCT01059643 -NCT01059682 -NCT01059708 -NCT01059968 -NCT01060046 -NCT01060215 -NCT01060228 -NCT01060293 -NCT01060436 -NCT01060722 -NCT01060956 -NCT01061268 -NCT01061281 -NCT01061294 -NCT01061476 -NCT01061918 -NCT01061957 -NCT01062087 -NCT01062126 -NCT01062230 -NCT01062256 -NCT01062308 -NCT01062373 -NCT01062451 -NCT01062568 -NCT01062659 -NCT01062789 -NCT01062893 -NCT01062945 -NCT01063179 -NCT01063205 -NCT01063387 -NCT01063530 -NCT01063556 -NCT01063569 -NCT01063673 -NCT01063790 -NCT01063868 -NCT01063907 -NCT01063920 -NCT01064011 -NCT01064128 -NCT01064245 -NCT01064284 -NCT01064401 -NCT01064661 -NCT01064726 -NCT01065090 -NCT01065233 -NCT01065454 -NCT01065649 -NCT01065675 -NCT01065753 -NCT01065831 -NCT01065935 -NCT01066013 -NCT01066052 -NCT01066091 -NCT01066169 -NCT01066208 -NCT01066221 -NCT01066338 -NCT01066507 -NCT01066572 -NCT01066676 -NCT01066871 -NCT01066936 -NCT01067014 -NCT01067352 -NCT01067365 -NCT01067456 -NCT01067469 -NCT01067508 -NCT01067755 -NCT01067768 -NCT01067937 -NCT01068054 -NCT01068184 -NCT01068236 -NCT01068288 -NCT01068314 -NCT01068366 -NCT01068405 -NCT01068444 -NCT01068938 -NCT01068964 -NCT01069055 -NCT01069172 -NCT01069289 -NCT01069536 -NCT01069887 -NCT01069900 -NCT01069991 -NCT01070056 -NCT01070160 -NCT01070173 -NCT01070277 -NCT01070628 -NCT01070875 -NCT01071161 -NCT01071200 -NCT01071447 -NCT01071655 -NCT01071694 -NCT01071733 -NCT01071928 -NCT01072084 -NCT01072149 -NCT01072409 -NCT01072526 -NCT01072630 -NCT01072682 -NCT01072929 -NCT01073241 -NCT01073319 -NCT01073527 -NCT01073605 -NCT01073709 -NCT01073722 -NCT01073982 -NCT01074008 -NCT01074203 -NCT01074216 -NCT01074307 -NCT01074359 -NCT01074476 -NCT01074502 -NCT01074554 -NCT01074645 -NCT01074658 -NCT01074671 -NCT01074736 -NCT01074775 -NCT01074801 -NCT01074827 -NCT01074853 -NCT01074957 -NCT01075087 -NCT01075269 -NCT01075282 -NCT01075295 -NCT01075321 -NCT01075334 -NCT01075438 -NCT01075672 -NCT01075711 -NCT01075815 -NCT01075841 -NCT01075880 -NCT01076179 -NCT01076426 -NCT01076439 -NCT01076699 -NCT01076712 -NCT01076842 -NCT01077076 -NCT01077115 -NCT01077154 -NCT01077193 -NCT01077245 -NCT01077336 -NCT01077401 -NCT01077583 -NCT01077856 -NCT01077895 -NCT01077921 -NCT01078103 -NCT01078246 -NCT01078298 -NCT01078324 -NCT01078389 -NCT01078467 -NCT01078545 -NCT01078636 -NCT01078649 -NCT01078857 -NCT01078883 -NCT01079000 -NCT01079078 -NCT01079130 -NCT01079143 -NCT01079494 -NCT01079520 -NCT01079546 -NCT01079559 -NCT01079572 -NCT01079650 -NCT01079845 -NCT01079871 -NCT01079949 -NCT01080131 -NCT01080196 -NCT01080404 -NCT01080456 -NCT01080469 -NCT01080482 -NCT01080534 -NCT01080560 -NCT01080586 -NCT01080690 -NCT01080703 -NCT01080781 -NCT01080807 -NCT01080924 -NCT01080950 -NCT01081015 -NCT01081093 -NCT01081262 -NCT01081704 -NCT01081756 -NCT01081782 -NCT01081912 -NCT01081964 -NCT01081977 -NCT01082029 -NCT01082094 -NCT01082107 -NCT01082211 -NCT01082354 -NCT01082419 -NCT01082627 -NCT01082770 -NCT01082900 -NCT01082913 -NCT01082926 -NCT01082965 -NCT01082978 -NCT01083316 -NCT01083485 -NCT01083550 -NCT01083602 -NCT01083667 -NCT01083693 -NCT01083745 -NCT01083888 -NCT01083979 -NCT01084239 -NCT01084343 -NCT01084369 -NCT01084525 -NCT01084837 -NCT01084941 -NCT01085110 -NCT01085201 -NCT01085253 -NCT01085318 -NCT01085409 -NCT01085448 -NCT01085474 -NCT01085487 -NCT01085500 -NCT01085513 -NCT01085591 -NCT01085604 -NCT01085721 -NCT01085799 -NCT01085825 -NCT01085864 -NCT01085903 -NCT01086007 -NCT01086046 -NCT01086384 -NCT01086540 -NCT01086605 -NCT01086748 -NCT01086878 -NCT01086982 -NCT01087034 -NCT01087203 -NCT01087320 -NCT01087333 -NCT01087619 -NCT01087892 -NCT01087957 -NCT01088061 -NCT01088230 -NCT01088308 -NCT01088373 -NCT01088412 -NCT01088438 -NCT01088763 -NCT01088971 -NCT01089140 -NCT01089218 -NCT01089335 -NCT01089374 -NCT01089387 -NCT01089491 -NCT01089686 -NCT01089816 -NCT01089881 -NCT01090050 -NCT01090193 -NCT01090219 -NCT01090284 -NCT01090375 -NCT01090466 -NCT01090596 -NCT01090674 -NCT01090882 -NCT01090921 -NCT01090934 -NCT01091051 -NCT01091064 -NCT01091077 -NCT01091142 -NCT01091493 -NCT01091558 -NCT01091597 -NCT01091662 -NCT01091714 -NCT01091805 -NCT01091883 -NCT01091987 -NCT01092182 -NCT01092247 -NCT01092351 -NCT01092546 -NCT01092585 -NCT01092624 -NCT01092780 -NCT01092897 -NCT01092910 -NCT01093027 -NCT01093066 -NCT01093196 -NCT01093222 -NCT01093365 -NCT01093378 -NCT01093521 -NCT01093573 -NCT01093768 -NCT01093859 -NCT01093950 -NCT01094288 -NCT01094301 -NCT01094379 -NCT01094431 -NCT01094470 -NCT01094561 -NCT01094704 -NCT01094808 -NCT01094912 -NCT01094964 -NCT01095133 -NCT01095198 -NCT01095328 -NCT01095458 -NCT01095471 -NCT01095627 -NCT01095744 -NCT01095822 -NCT01095913 -NCT01096134 -NCT01096238 -NCT01096290 -NCT01096316 -NCT01096342 -NCT01096446 -NCT01096472 -NCT01096524 -NCT01096615 -NCT01096719 -NCT01096927 -NCT01097109 -NCT01097265 -NCT01097330 -NCT01097356 -NCT01097369 -NCT01097525 -NCT01097616 -NCT01097629 -NCT01097707 -NCT01097798 -NCT01097811 -NCT01097993 -NCT01098162 -NCT01098201 -NCT01098240 -NCT01098331 -NCT01098383 -NCT01098656 -NCT01098708 -NCT01098747 -NCT01098890 -NCT01098942 -NCT01098981 -NCT01099033 -NCT01099046 -NCT01099085 -NCT01099163 -NCT01099241 -NCT01099423 -NCT01099592 -NCT01099618 -NCT01099657 -NCT01099696 -NCT01099709 -NCT01099761 -NCT01099852 -NCT01100021 -NCT01100073 -NCT01100086 -NCT01100320 -NCT01100398 -NCT01100424 -NCT01100489 -NCT01100528 -NCT01100632 -NCT01100645 -NCT01100684 -NCT01101035 -NCT01101048 -NCT01101087 -NCT01101113 -NCT01101165 -NCT01101204 -NCT01101282 -NCT01101308 -NCT01101321 -NCT01101438 -NCT01101451 -NCT01101503 -NCT01101581 -NCT01101646 -NCT01101659 -NCT01101724 -NCT01101841 -NCT01102023 -NCT01102179 -NCT01102192 -NCT01102205 -NCT01102309 -NCT01102361 -NCT01102426 -NCT01102621 -NCT01102907 -NCT01102985 -NCT01103024 -NCT01103037 -NCT01103206 -NCT01103232 -NCT01103284 -NCT01103375 -NCT01103557 -NCT01103635 -NCT01104051 -NCT01104389 -NCT01104428 -NCT01104610 -NCT01104649 -NCT01104727 -NCT01104805 -NCT01104987 -NCT01105013 -NCT01105039 -NCT01105052 -NCT01105065 -NCT01105156 -NCT01105221 -NCT01105312 -NCT01105390 -NCT01105520 -NCT01105546 -NCT01105676 -NCT01105858 -NCT01106313 -NCT01106443 -NCT01106521 -NCT01106859 -NCT01106885 -NCT01106924 -NCT01106976 -NCT01107067 -NCT01107093 -NCT01107119 -NCT01107197 -NCT01107522 -NCT01107743 -NCT01107769 -NCT01107860 -NCT01108029 -NCT01108068 -NCT01108185 -NCT01108211 -NCT01108341 -NCT01108380 -NCT01108406 -NCT01108588 -NCT01108783 -NCT01108835 -NCT01108991 -NCT01109004 -NCT01109121 -NCT01109199 -NCT01109212 -NCT01109277 -NCT01109329 -NCT01109420 -NCT01109446 -NCT01109472 -NCT01109537 -NCT01109576 -NCT01109602 -NCT01109667 -NCT01109771 -NCT01109849 -NCT01109901 -NCT01110135 -NCT01110200 -NCT01110265 -NCT01110330 -NCT01110421 -NCT01110447 -NCT01110694 -NCT01110733 -NCT01110837 -NCT01110850 -NCT01110876 -NCT01110928 -NCT01110941 -NCT01110993 -NCT01111019 -NCT01111253 -NCT01111526 -NCT01111656 -NCT01111812 -NCT01111929 -NCT01112007 -NCT01112098 -NCT01112215 -NCT01112228 -NCT01112345 -NCT01112540 -NCT01112592 -NCT01112618 -NCT01112631 -NCT01112657 -NCT01112683 -NCT01112891 -NCT01112982 -NCT01113034 -NCT01113255 -NCT01113268 -NCT01113320 -NCT01113333 -NCT01113385 -NCT01113710 -NCT01113905 -NCT01113918 -NCT01114113 -NCT01114139 -NCT01114165 -NCT01114243 -NCT01114269 -NCT01114282 -NCT01114360 -NCT01114373 -NCT01114386 -NCT01114581 -NCT01114633 -NCT01114698 -NCT01114711 -NCT01114815 -NCT01114828 -NCT01114867 -NCT01114932 -NCT01115244 -NCT01115270 -NCT01115283 -NCT01115335 -NCT01115361 -NCT01115452 -NCT01115686 -NCT01115751 -NCT01115985 -NCT01116037 -NCT01116063 -NCT01116102 -NCT01116115 -NCT01116167 -NCT01116206 -NCT01116245 -NCT01116323 -NCT01116336 -NCT01116362 -NCT01116414 -NCT01116466 -NCT01116687 -NCT01117012 -NCT01117025 -NCT01117142 -NCT01117337 -NCT01117506 -NCT01117558 -NCT01117818 -NCT01117831 -NCT01118065 -NCT01118221 -NCT01118338 -NCT01118507 -NCT01118585 -NCT01118624 -NCT01118988 -NCT01119105 -NCT01119443 -NCT01119482 -NCT01119521 -NCT01119547 -NCT01119599 -NCT01119664 -NCT01119742 -NCT01119833 -NCT01119898 -NCT01119976 -NCT01120197 -NCT01120236 -NCT01120249 -NCT01120340 -NCT01120574 -NCT01120600 -NCT01120626 -NCT01120795 -NCT01121107 -NCT01121263 -NCT01121432 -NCT01121484 -NCT01121497 -NCT01121731 -NCT01121900 -NCT01121926 -NCT01122147 -NCT01122160 -NCT01122303 -NCT01122342 -NCT01122381 -NCT01122459 -NCT01122472 -NCT01122485 -NCT01122524 -NCT01122732 -NCT01122797 -NCT01123005 -NCT01123044 -NCT01123096 -NCT01123109 -NCT01123161 -NCT01123369 -NCT01123486 -NCT01123512 -NCT01123603 -NCT01123928 -NCT01123941 -NCT01123954 -NCT01124136 -NCT01124357 -NCT01124591 -NCT01124656 -NCT01124669 -NCT01124682 -NCT01124994 -NCT01125124 -NCT01125176 -NCT01125215 -NCT01125241 -NCT01125267 -NCT01125345 -NCT01125488 -NCT01125683 -NCT01125709 -NCT01125774 -NCT01125813 -NCT01125930 -NCT01125969 -NCT01126177 -NCT01126281 -NCT01126307 -NCT01126671 -NCT01126684 -NCT01126905 -NCT01126931 -NCT01126944 -NCT01127061 -NCT01127464 -NCT01127659 -NCT01127698 -NCT01128010 -NCT01128101 -NCT01128192 -NCT01128257 -NCT01128517 -NCT01128556 -NCT01128608 -NCT01128660 -NCT01128712 -NCT01128881 -NCT01129063 -NCT01129128 -NCT01129167 -NCT01129180 -NCT01129375 -NCT01129453 -NCT01129492 -NCT01129518 -NCT01129544 -NCT01129726 -NCT01129765 -NCT01129934 -NCT01130012 -NCT01130038 -NCT01130181 -NCT01130194 -NCT01130311 -NCT01130402 -NCT01130597 -NCT01130701 -NCT01130857 -NCT01131052 -NCT01131104 -NCT01131117 -NCT01131169 -NCT01131234 -NCT01131312 -NCT01131403 -NCT01131468 -NCT01131494 -NCT01132092 -NCT01132105 -NCT01132144 -NCT01132170 -NCT01132378 -NCT01132534 -NCT01132677 -NCT01132703 -NCT01132846 -NCT01132859 -NCT01133132 -NCT01133158 -NCT01133327 -NCT01133509 -NCT01133522 -NCT01133535 -NCT01133548 -NCT01133795 -NCT01133834 -NCT01133873 -NCT01134198 -NCT01134237 -NCT01134432 -NCT01134484 -NCT01134536 -NCT01134627 -NCT01134692 -NCT01134796 -NCT01134848 -NCT01134991 -NCT01135004 -NCT01135030 -NCT01135069 -NCT01135199 -NCT01135329 -NCT01135342 -NCT01135368 -NCT01135615 -NCT01135628 -NCT01135836 -NCT01135849 -NCT01135979 -NCT01136291 -NCT01136304 -NCT01136369 -NCT01136421 -NCT01136460 -NCT01136577 -NCT01136980 -NCT01137097 -NCT01137149 -NCT01137162 -NCT01137591 -NCT01137682 -NCT01137929 -NCT01137955 -NCT01138007 -NCT01138241 -NCT01138423 -NCT01138449 -NCT01138501 -NCT01138566 -NCT01138592 -NCT01138644 -NCT01138761 -NCT01139294 -NCT01139437 -NCT01139580 -NCT01139710 -NCT01139736 -NCT01140074 -NCT01140217 -NCT01140373 -NCT01140516 -NCT01140581 -NCT01140685 -NCT01140789 -NCT01140841 -NCT01140867 -NCT01140906 -NCT01140945 -NCT01141023 -NCT01141244 -NCT01141465 -NCT01141751 -NCT01141881 -NCT01141946 -NCT01142011 -NCT01142089 -NCT01142219 -NCT01142232 -NCT01142245 -NCT01142336 -NCT01142466 -NCT01142505 -NCT01142531 -NCT01142973 -NCT01143012 -NCT01143142 -NCT01143363 -NCT01143389 -NCT01143428 -NCT01143441 -NCT01143480 -NCT01143493 -NCT01143558 -NCT01143818 -NCT01144039 -NCT01144052 -NCT01144078 -NCT01144351 -NCT01144377 -NCT01144650 -NCT01144702 -NCT01144910 -NCT01144936 -NCT01145040 -NCT01145066 -NCT01145209 -NCT01145274 -NCT01145300 -NCT01145482 -NCT01145508 -NCT01145612 -NCT01145716 -NCT01145781 -NCT01145833 -NCT01145924 -NCT01146002 -NCT01146132 -NCT01146483 -NCT01146535 -NCT01146587 -NCT01146613 -NCT01146678 -NCT01146704 -NCT01146782 -NCT01146977 -NCT01147042 -NCT01147107 -NCT01147263 -NCT01147328 -NCT01147432 -NCT01147445 -NCT01147458 -NCT01147562 -NCT01147926 -NCT01148121 -NCT01148199 -NCT01148420 -NCT01148433 -NCT01148472 -NCT01148654 -NCT01148888 -NCT01148979 -NCT01149161 -NCT01149356 -NCT01149395 -NCT01149421 -NCT01149434 -NCT01149447 -NCT01149577 -NCT01149629 -NCT01149694 -NCT01149707 -NCT01149733 -NCT01149746 -NCT01149811 -NCT01149876 -NCT01150006 -NCT01150045 -NCT01150071 -NCT01150084 -NCT01150149 -NCT01150162 -NCT01150175 -NCT01150266 -NCT01150292 -NCT01150305 -NCT01150318 -NCT01150539 -NCT01150591 -NCT01150721 -NCT01150786 -NCT01150916 -NCT01151111 -NCT01151124 -NCT01151150 -NCT01151163 -NCT01151202 -NCT01151280 -NCT01151566 -NCT01151605 -NCT01151631 -NCT01151709 -NCT01151787 -NCT01152073 -NCT01152398 -NCT01152476 -NCT01152580 -NCT01152606 -NCT01152853 -NCT01152892 -NCT01152970 -NCT01153204 -NCT01153243 -NCT01153256 -NCT01153373 -NCT01153386 -NCT01153425 -NCT01153568 -NCT01153685 -NCT01154166 -NCT01154361 -NCT01154413 -NCT01154452 -NCT01154517 -NCT01154712 -NCT01154764 -NCT01154790 -NCT01154842 -NCT01154998 -NCT01155115 -NCT01155180 -NCT01155232 -NCT01155245 -NCT01155271 -NCT01155323 -NCT01155492 -NCT01155518 -NCT01155557 -NCT01156311 -NCT01156441 -NCT01156454 -NCT01156519 -NCT01156558 -NCT01156584 -NCT01156610 -NCT01156623 -NCT01156636 -NCT01156675 -NCT01156688 -NCT01156818 -NCT01156844 -NCT01157156 -NCT01157325 -NCT01157338 -NCT01157390 -NCT01157572 -NCT01157728 -NCT01157819 -NCT01157832 -NCT01157923 -NCT01157975 -NCT01158053 -NCT01158092 -NCT01158157 -NCT01158248 -NCT01158274 -NCT01158313 -NCT01158326 -NCT01158352 -NCT01158378 -NCT01158456 -NCT01158495 -NCT01158508 -NCT01158573 -NCT01158625 -NCT01158742 -NCT01158794 -NCT01158807 -NCT01158885 -NCT01159093 -NCT01159119 -NCT01159431 -NCT01159470 -NCT01159587 -NCT01159613 -NCT01159678 -NCT01159808 -NCT01159860 -NCT01160146 -NCT01160263 -NCT01160328 -NCT01160341 -NCT01160536 -NCT01160627 -NCT01160822 -NCT01160848 -NCT01161108 -NCT01161641 -NCT01161823 -NCT01161966 -NCT01161979 -NCT01162057 -NCT01162304 -NCT01162447 -NCT01162460 -NCT01162863 -NCT01162915 -NCT01163019 -NCT01163032 -NCT01163214 -NCT01163240 -NCT01163253 -NCT01163357 -NCT01163435 -NCT01163617 -NCT01163760 -NCT01163773 -NCT01163851 -NCT01163955 -NCT01163994 -NCT01164163 -NCT01164176 -NCT01164189 -NCT01164241 -NCT01164384 -NCT01164553 -NCT01164683 -NCT01164748 -NCT01165008 -NCT01165268 -NCT01165281 -NCT01165307 -NCT01165476 -NCT01165489 -NCT01165528 -NCT01165619 -NCT01165697 -NCT01165749 -NCT01165827 -NCT01165983 -NCT01166152 -NCT01166178 -NCT01166412 -NCT01166451 -NCT01166854 -NCT01166906 -NCT01166932 -NCT01166958 -NCT01167101 -NCT01167218 -NCT01167270 -NCT01167361 -NCT01167426 -NCT01167465 -NCT01167491 -NCT01167673 -NCT01167686 -NCT01167829 -NCT01167894 -NCT01167907 -NCT01167933 -NCT01168050 -NCT01168154 -NCT01168180 -NCT01168388 -NCT01168401 -NCT01168544 -NCT01168674 -NCT01168713 -NCT01168895 -NCT01168908 -NCT01169038 -NCT01169077 -NCT01169103 -NCT01169129 -NCT01169155 -NCT01169181 -NCT01169597 -NCT01169714 -NCT01169740 -NCT01169961 -NCT01170039 -NCT01170169 -NCT01170182 -NCT01170234 -NCT01170364 -NCT01170390 -NCT01170429 -NCT01170494 -NCT01170559 -NCT01170780 -NCT01170884 -NCT01170962 -NCT01171196 -NCT01171222 -NCT01171378 -NCT01171430 -NCT01171638 -NCT01171846 -NCT01171976 -NCT01171989 -NCT01172184 -NCT01172223 -NCT01172249 -NCT01172379 -NCT01172509 -NCT01172535 -NCT01172587 -NCT01172600 -NCT01172925 -NCT01173003 -NCT01173068 -NCT01173198 -NCT01173224 -NCT01173289 -NCT01173432 -NCT01173575 -NCT01174056 -NCT01174186 -NCT01174381 -NCT01174446 -NCT01174550 -NCT01174836 -NCT01174901 -NCT01175005 -NCT01175031 -NCT01175174 -NCT01175239 -NCT01175382 -NCT01175395 -NCT01175538 -NCT01175655 -NCT01175798 -NCT01175876 -NCT01175993 -NCT01176240 -NCT01176435 -NCT01176513 -NCT01176565 -NCT01176708 -NCT01176747 -NCT01176760 -NCT01176773 -NCT01176994 -NCT01177163 -NCT01177371 -NCT01177436 -NCT01177683 -NCT01177800 -NCT01177891 -NCT01177969 -NCT01178008 -NCT01178086 -NCT01178294 -NCT01178372 -NCT01178463 -NCT01178736 -NCT01178788 -NCT01178853 -NCT01178892 -NCT01178918 -NCT01178957 -NCT01178996 -NCT01179139 -NCT01179152 -NCT01179217 -NCT01179334 -NCT01179464 -NCT01179672 -NCT01179685 -NCT01179893 -NCT01180660 -NCT01180686 -NCT01180725 -NCT01180790 -NCT01180803 -NCT01180816 -NCT01180855 -NCT01180946 -NCT01180959 -NCT01180998 -NCT01181128 -NCT01181323 -NCT01181336 -NCT01181440 -NCT01181453 -NCT01181479 -NCT01181570 -NCT01181596 -NCT01181804 -NCT01181830 -NCT01181869 -NCT01182051 -NCT01182129 -NCT01182272 -NCT01182298 -NCT01182584 -NCT01182688 -NCT01182805 -NCT01182844 -NCT01182974 -NCT01182987 -NCT01183299 -NCT01183533 -NCT01183611 -NCT01183624 -NCT01183650 -NCT01183663 -NCT01183741 -NCT01183767 -NCT01183806 -NCT01183858 -NCT01184027 -NCT01184144 -NCT01184196 -NCT01184209 -NCT01184248 -NCT01184378 -NCT01184417 -NCT01184456 -NCT01184651 -NCT01184703 -NCT01184989 -NCT01185028 -NCT01185054 -NCT01185444 -NCT01185509 -NCT01185665 -NCT01185704 -NCT01185730 -NCT01186068 -NCT01186185 -NCT01186237 -NCT01186406 -NCT01186822 -NCT01186835 -NCT01186913 -NCT01187043 -NCT01187524 -NCT01187550 -NCT01187784 -NCT01187927 -NCT01188096 -NCT01188161 -NCT01188473 -NCT01188733 -NCT01188837 -NCT01189123 -NCT01189240 -NCT01189331 -NCT01189344 -NCT01189643 -NCT01189734 -NCT01189786 -NCT01190007 -NCT01190098 -NCT01190150 -NCT01190280 -NCT01190332 -NCT01190657 -NCT01190904 -NCT01190930 -NCT01191034 -NCT01191190 -NCT01191229 -NCT01191294 -NCT01191502 -NCT01191528 -NCT01191671 -NCT01191749 -NCT01191853 -NCT01192048 -NCT01192100 -NCT01192113 -NCT01192204 -NCT01192269 -NCT01192373 -NCT01192399 -NCT01192958 -NCT01193270 -NCT01193348 -NCT01193361 -NCT01193439 -NCT01193478 -NCT01193673 -NCT01193803 -NCT01193998 -NCT01194089 -NCT01194362 -NCT01194661 -NCT01194687 -NCT01194869 -NCT01194973 -NCT01194986 -NCT01195064 -NCT01195090 -NCT01195142 -NCT01195181 -NCT01195220 -NCT01195285 -NCT01195428 -NCT01195454 -NCT01195532 -NCT01195545 -NCT01195610 -NCT01195701 -NCT01196117 -NCT01196156 -NCT01196221 -NCT01196273 -NCT01196416 -NCT01196507 -NCT01196572 -NCT01196585 -NCT01196650 -NCT01196663 -NCT01196845 -NCT01197040 -NCT01197183 -NCT01197196 -NCT01197287 -NCT01197794 -NCT01197885 -NCT01198509 -NCT01198587 -NCT01198626 -NCT01198782 -NCT01198834 -NCT01198899 -NCT01199250 -NCT01199406 -NCT01199614 -NCT01199640 -NCT01199666 -NCT01199718 -NCT01199757 -NCT01199835 -NCT01200017 -NCT01200069 -NCT01200082 -NCT01200147 -NCT01200277 -NCT01200537 -NCT01200576 -NCT01200589 -NCT01200706 -NCT01200732 -NCT01200823 -NCT01200862 -NCT01200940 -NCT01200966 -NCT01201213 -NCT01201343 -NCT01201551 -NCT01201603 -NCT01201616 -NCT01201629 -NCT01201642 -NCT01201733 -NCT01201863 -NCT01201941 -NCT01201993 -NCT01202227 -NCT01202448 -NCT01202487 -NCT01202513 -NCT01202630 -NCT01202643 -NCT01202721 -NCT01202760 -NCT01202864 -NCT01202981 -NCT01203046 -NCT01203410 -NCT01203423 -NCT01203436 -NCT01203449 -NCT01203462 -NCT01203566 -NCT01203579 -NCT01203618 -NCT01203722 -NCT01203839 -NCT01203930 -NCT01204060 -NCT01204151 -NCT01204164 -NCT01204255 -NCT01204437 -NCT01204593 -NCT01204736 -NCT01204775 -NCT01204788 -NCT01204931 -NCT01205256 -NCT01205308 -NCT01205490 -NCT01205880 -NCT01206010 -NCT01206062 -NCT01206270 -NCT01206296 -NCT01206335 -NCT01206413 -NCT01206491 -NCT01206556 -NCT01206621 -NCT01206686 -NCT01207050 -NCT01207193 -NCT01207258 -NCT01207440 -NCT01207609 -NCT01207661 -NCT01207739 -NCT01207765 -NCT01207778 -NCT01207908 -NCT01208025 -NCT01208038 -NCT01208077 -NCT01208220 -NCT01208259 -NCT01208272 -NCT01208519 -NCT01208792 -NCT01208818 -NCT01208922 -NCT01209000 -NCT01209273 -NCT01209364 -NCT01209507 -NCT01209572 -NCT01209585 -NCT01209988 -NCT01210014 -NCT01210066 -NCT01210144 -NCT01210235 -NCT01210248 -NCT01210326 -NCT01210365 -NCT01210430 -NCT01210534 -NCT01210599 -NCT01210742 -NCT01210937 -NCT01211054 -NCT01211145 -NCT01211158 -NCT01211379 -NCT01211392 -NCT01211613 -NCT01211977 -NCT01211990 -NCT01212016 -NCT01212068 -NCT01212380 -NCT01212484 -NCT01212549 -NCT01212614 -NCT01212809 -NCT01212900 -NCT01213017 -NCT01213056 -NCT01213147 -NCT01213277 -NCT01213290 -NCT01213446 -NCT01213459 -NCT01213875 -NCT01213888 -NCT01213927 -NCT01214070 -NCT01214109 -NCT01214200 -NCT01214330 -NCT01214408 -NCT01214707 -NCT01215123 -NCT01215136 -NCT01215162 -NCT01215266 -NCT01215292 -NCT01215344 -NCT01215383 -NCT01215422 -NCT01215448 -NCT01215617 -NCT01215890 -NCT01215981 -NCT01216111 -NCT01216163 -NCT01216215 -NCT01216514 -NCT01216631 -NCT01216644 -NCT01216683 -NCT01216956 -NCT01217060 -NCT01217437 -NCT01217567 -NCT01217658 -NCT01217749 -NCT01217801 -NCT01217957 -NCT01218048 -NCT01218087 -NCT01218139 -NCT01218178 -NCT01218217 -NCT01218386 -NCT01218542 -NCT01218568 -NCT01218581 -NCT01218607 -NCT01218646 -NCT01218672 -NCT01218737 -NCT01218789 -NCT01218919 -NCT01219543 -NCT01219699 -NCT01220024 -NCT01220050 -NCT01220141 -NCT01220167 -NCT01220336 -NCT01220349 -NCT01220362 -NCT01220505 -NCT01220635 -NCT01220739 -NCT01220973 -NCT01221181 -NCT01221233 -NCT01221441 -NCT01221467 -NCT01221753 -NCT01221883 -NCT01221935 -NCT01222026 -NCT01222065 -NCT01222130 -NCT01222195 -NCT01222221 -NCT01222338 -NCT01222650 -NCT01222689 -NCT01222702 -NCT01222884 -NCT01222897 -NCT01222910 -NCT01223092 -NCT01223144 -NCT01223261 -NCT01223287 -NCT01223300 -NCT01223313 -NCT01223560 -NCT01223638 -NCT01223716 -NCT01223807 -NCT01223885 -NCT01224041 -NCT01224145 -NCT01224301 -NCT01224418 -NCT01224483 -NCT01224496 -NCT01224678 -NCT01224691 -NCT01224704 -NCT01224795 -NCT01224808 -NCT01224912 -NCT01224990 -NCT01225029 -NCT01225211 -NCT01225237 -NCT01225263 -NCT01225289 -NCT01225354 -NCT01225445 -NCT01225640 -NCT01225679 -NCT01225822 -NCT01225913 -NCT01226186 -NCT01226342 -NCT01226368 -NCT01226381 -NCT01226498 -NCT01226524 -NCT01226537 -NCT01226654 -NCT01226693 -NCT01226758 -NCT01226797 -NCT01226992 -NCT01227083 -NCT01227109 -NCT01227135 -NCT01227187 -NCT01227317 -NCT01227499 -NCT01227863 -NCT01227980 -NCT01228071 -NCT01228240 -NCT01228331 -NCT01228929 -NCT01229007 -NCT01229111 -NCT01229566 -NCT01229683 -NCT01229774 -NCT01229995 -NCT01230177 -NCT01230424 -NCT01230554 -NCT01230593 -NCT01230619 -NCT01230658 -NCT01230879 -NCT01230905 -NCT01230918 -NCT01230957 -NCT01231074 -NCT01231113 -NCT01231230 -NCT01231724 -NCT01231737 -NCT01231919 -NCT01231945 -NCT01231971 -NCT01232075 -NCT01232140 -NCT01232504 -NCT01232582 -NCT01232595 -NCT01232634 -NCT01232738 -NCT01232829 -NCT01232842 -NCT01232868 -NCT01232959 -NCT01233258 -NCT01233362 -NCT01233427 -NCT01233713 -NCT01233778 -NCT01233895 -NCT01234545 -NCT01234753 -NCT01234883 -NCT01235091 -NCT01235182 -NCT01235741 -NCT01235832 -NCT01235845 -NCT01235910 -NCT01236027 -NCT01236040 -NCT01236365 -NCT01236508 -NCT01236534 -NCT01236560 -NCT01236742 -NCT01236755 -NCT01236768 -NCT01236833 -NCT01237041 -NCT01237054 -NCT01237106 -NCT01237262 -NCT01237470 -NCT01237756 -NCT01237860 -NCT01237912 -NCT01238003 -NCT01238081 -NCT01238354 -NCT01238419 -NCT01238471 -NCT01238536 -NCT01238731 -NCT01238835 -NCT01238900 -NCT01239004 -NCT01239147 -NCT01239251 -NCT01239368 -NCT01239407 -NCT01239550 -NCT01239810 -NCT01239823 -NCT01239966 -NCT01240070 -NCT01240083 -NCT01240356 -NCT01240434 -NCT01240499 -NCT01240590 -NCT01240616 -NCT01240694 -NCT01240707 -NCT01240811 -NCT01240876 -NCT01240902 -NCT01240954 -NCT01241019 -NCT01241110 -NCT01241149 -NCT01241227 -NCT01241305 -NCT01241448 -NCT01241552 -NCT01241604 -NCT01241708 -NCT01241799 -NCT01241825 -NCT01241968 -NCT01241994 -NCT01242007 -NCT01242033 -NCT01242046 -NCT01242267 -NCT01242397 -NCT01242540 -NCT01242553 -NCT01242878 -NCT01243060 -NCT01243125 -NCT01243333 -NCT01243515 -NCT01243645 -NCT01243853 -NCT01243892 -NCT01243996 -NCT01244152 -NCT01244230 -NCT01244243 -NCT01244347 -NCT01244503 -NCT01244516 -NCT01244529 -NCT01244711 -NCT01244724 -NCT01244945 -NCT01245023 -NCT01245036 -NCT01245179 -NCT01245296 -NCT01245608 -NCT01245712 -NCT01245751 -NCT01245985 -NCT01246128 -NCT01246141 -NCT01246219 -NCT01246336 -NCT01246544 -NCT01246739 -NCT01246947 -NCT01247194 -NCT01247415 -NCT01247779 -NCT01247857 -NCT01247961 -NCT01248208 -NCT01248247 -NCT01248416 -NCT01248455 -NCT01248819 -NCT01249040 -NCT01249222 -NCT01249235 -NCT01249300 -NCT01249391 -NCT01249443 -NCT01249482 -NCT01249651 -NCT01249677 -NCT01249859 -NCT01249911 -NCT01250067 -NCT01250288 -NCT01250314 -NCT01250340 -NCT01250405 -NCT01250509 -NCT01250535 -NCT01250574 -NCT01250613 -NCT01250756 -NCT01250912 -NCT01251120 -NCT01251172 -NCT01251263 -NCT01251328 -NCT01251354 -NCT01251432 -NCT01251484 -NCT01251822 -NCT01251861 -NCT01251900 -NCT01251965 -NCT01252108 -NCT01252199 -NCT01252225 -NCT01252329 -NCT01252472 -NCT01252602 -NCT01252719 -NCT01252732 -NCT01252745 -NCT01252771 -NCT01252823 -NCT01252875 -NCT01253018 -NCT01253135 -NCT01253278 -NCT01253356 -NCT01253408 -NCT01253460 -NCT01253512 -NCT01253590 -NCT01253629 -NCT01253668 -NCT01253733 -NCT01254019 -NCT01254032 -NCT01254045 -NCT01254071 -NCT01254162 -NCT01254175 -NCT01254201 -NCT01254578 -NCT01254669 -NCT01254682 -NCT01254851 -NCT01254929 -NCT01254994 -NCT01255163 -NCT01255228 -NCT01255397 -NCT01255410 -NCT01255514 -NCT01255761 -NCT01255852 -NCT01256112 -NCT01256177 -NCT01256229 -NCT01256281 -NCT01256554 -NCT01256619 -NCT01256944 -NCT01257048 -NCT01257126 -NCT01257152 -NCT01257178 -NCT01257191 -NCT01257243 -NCT01257269 -NCT01257295 -NCT01257308 -NCT01257438 -NCT01257451 -NCT01257503 -NCT01257542 -NCT01257607 -NCT01257763 -NCT01257828 -NCT01257867 -NCT01257880 -NCT01257945 -NCT01258101 -NCT01258114 -NCT01258257 -NCT01258322 -NCT01258413 -NCT01258543 -NCT01258829 -NCT01258933 -NCT01258985 -NCT01259037 -NCT01259141 -NCT01259167 -NCT01259180 -NCT01259219 -NCT01259245 -NCT01259336 -NCT01259440 -NCT01259531 -NCT01259674 -NCT01259765 -NCT01259856 -NCT01260064 -NCT01260077 -NCT01260116 -NCT01260129 -NCT01260389 -NCT01260532 -NCT01260623 -NCT01260727 -NCT01260740 -NCT01260805 -NCT01260883 -NCT01261000 -NCT01261026 -NCT01261039 -NCT01261234 -NCT01261260 -NCT01261325 -NCT01261377 -NCT01261442 -NCT01261546 -NCT01261754 -NCT01261884 -NCT01261936 -NCT01262209 -NCT01262612 -NCT01263119 -NCT01263132 -NCT01263301 -NCT01263314 -NCT01263340 -NCT01263366 -NCT01263392 -NCT01263613 -NCT01263626 -NCT01263639 -NCT01263665 -NCT01263691 -NCT01263704 -NCT01264003 -NCT01264055 -NCT01264120 -NCT01264172 -NCT01264315 -NCT01264406 -NCT01264419 -NCT01264510 -NCT01264926 -NCT01264991 -NCT01265082 -NCT01265160 -NCT01265186 -NCT01265264 -NCT01265290 -NCT01265342 -NCT01265355 -NCT01265381 -NCT01265459 -NCT01265550 -NCT01265628 -NCT01265966 -NCT01266148 -NCT01266317 -NCT01266369 -NCT01266525 -NCT01266642 -NCT01266694 -NCT01266759 -NCT01266824 -NCT01266902 -NCT01266915 -NCT01267383 -NCT01267396 -NCT01267448 -NCT01267461 -NCT01267513 -NCT01267539 -NCT01267643 -NCT01267669 -NCT01267864 -NCT01267903 -NCT01267994 -NCT01268007 -NCT01268072 -NCT01268280 -NCT01268410 -NCT01268501 -NCT01268709 -NCT01268735 -NCT01268748 -NCT01268774 -NCT01268891 -NCT01268969 -NCT01269008 -NCT01269047 -NCT01269138 -NCT01269320 -NCT01269437 -NCT01269528 -NCT01269554 -NCT01269697 -NCT01269749 -NCT01269775 -NCT01269788 -NCT01269879 -NCT01269892 -NCT01269931 -NCT01269996 -NCT01270139 -NCT01270191 -NCT01270204 -NCT01270425 -NCT01270516 -NCT01270581 -NCT01270750 -NCT01270841 -NCT01270919 -NCT01271088 -NCT01271296 -NCT01271335 -NCT01271439 -NCT01271530 -NCT01272011 -NCT01272037 -NCT01272310 -NCT01272388 -NCT01272414 -NCT01272505 -NCT01272674 -NCT01272713 -NCT01272778 -NCT01273025 -NCT01273064 -NCT01273090 -NCT01273103 -NCT01273129 -NCT01273207 -NCT01273272 -NCT01273350 -NCT01273584 -NCT01273688 -NCT01273818 -NCT01273883 -NCT01273948 -NCT01273974 -NCT01274000 -NCT01274013 -NCT01274104 -NCT01274260 -NCT01274312 -NCT01274338 -NCT01274364 -NCT01274507 -NCT01274637 -NCT01274676 -NCT01274793 -NCT01275118 -NCT01275235 -NCT01275274 -NCT01275287 -NCT01275339 -NCT01275677 -NCT01275690 -NCT01276041 -NCT01276093 -NCT01276106 -NCT01276171 -NCT01276249 -NCT01276392 -NCT01276600 -NCT01276639 -NCT01276678 -NCT01276717 -NCT01276730 -NCT01276782 -NCT01276886 -NCT01276964 -NCT01276977 -NCT01277107 -NCT01277159 -NCT01277198 -NCT01277315 -NCT01277380 -NCT01277510 -NCT01277731 -NCT01277744 -NCT01277796 -NCT01277861 -NCT01277939 -NCT01278017 -NCT01278056 -NCT01278212 -NCT01278329 -NCT01278342 -NCT01278394 -NCT01278420 -NCT01278446 -NCT01279122 -NCT01279369 -NCT01279421 -NCT01279473 -NCT01279590 -NCT01279616 -NCT01279668 -NCT01279733 -NCT01279811 -NCT01279863 -NCT01279876 -NCT01280292 -NCT01280461 -NCT01280474 -NCT01280500 -NCT01280695 -NCT01280864 -NCT01280877 -NCT01280981 -NCT01280994 -NCT01281033 -NCT01281059 -NCT01281189 -NCT01281358 -NCT01281709 -NCT01281722 -NCT01281748 -NCT01281826 -NCT01281943 -NCT01281956 -NCT01282164 -NCT01282268 -NCT01282398 -NCT01283009 -NCT01283061 -NCT01283152 -NCT01283269 -NCT01283321 -NCT01283334 -NCT01283646 -NCT01283698 -NCT01283763 -NCT01283815 -NCT01283958 -NCT01284426 -NCT01284504 -NCT01284556 -NCT01284647 -NCT01284673 -NCT01284855 -NCT01284894 -NCT01284933 -NCT01284946 -NCT01284985 -NCT01285063 -NCT01285089 -NCT01285193 -NCT01285245 -NCT01285310 -NCT01285349 -NCT01285427 -NCT01285440 -NCT01285557 -NCT01285583 -NCT01285674 -NCT01286012 -NCT01286181 -NCT01286194 -NCT01286272 -NCT01286324 -NCT01286389 -NCT01286480 -NCT01286610 -NCT01286727 -NCT01286753 -NCT01286883 -NCT01287052 -NCT01287078 -NCT01287130 -NCT01287143 -NCT01287286 -NCT01287351 -NCT01287429 -NCT01287663 -NCT01287702 -NCT01287728 -NCT01288053 -NCT01288287 -NCT01288352 -NCT01288443 -NCT01288534 -NCT01288612 -NCT01288651 -NCT01288742 -NCT01288768 -NCT01289015 -NCT01289093 -NCT01289314 -NCT01289327 -NCT01289470 -NCT01289574 -NCT01289613 -NCT01289652 -NCT01289808 -NCT01289834 -NCT01289860 -NCT01290250 -NCT01290341 -NCT01290588 -NCT01290640 -NCT01290757 -NCT01290822 -NCT01290887 -NCT01291225 -NCT01291238 -NCT01291680 -NCT01291849 -NCT01292031 -NCT01292057 -NCT01292135 -NCT01292161 -NCT01292187 -NCT01292213 -NCT01292863 -NCT01292889 -NCT01293006 -NCT01293032 -NCT01293045 -NCT01293084 -NCT01293110 -NCT01293162 -NCT01293279 -NCT01293292 -NCT01293318 -NCT01293552 -NCT01293721 -NCT01293968 -NCT01294046 -NCT01294150 -NCT01294306 -NCT01294319 -NCT01294787 -NCT01294800 -NCT01294852 -NCT01294865 -NCT01294917 -NCT01295047 -NCT01295060 -NCT01295138 -NCT01295229 -NCT01295385 -NCT01295593 -NCT01295645 -NCT01295801 -NCT01295905 -NCT01295918 -NCT01295957 -NCT01295970 -NCT01296022 -NCT01296087 -NCT01296529 -NCT01297023 -NCT01297270 -NCT01297647 -NCT01297725 -NCT01297777 -NCT01297790 -NCT01297881 -NCT01297946 -NCT01298336 -NCT01298375 -NCT01298765 -NCT01298882 -NCT01298921 -NCT01299012 -NCT01299090 -NCT01299220 -NCT01299493 -NCT01299714 -NCT01299948 -NCT01300182 -NCT01300221 -NCT01300546 -NCT01300585 -NCT01300637 -NCT01300923 -NCT01300949 -NCT01300975 -NCT01301144 -NCT01301183 -NCT01301235 -NCT01301248 -NCT01301417 -NCT01301469 -NCT01301495 -NCT01301677 -NCT01301690 -NCT01301703 -NCT01301755 -NCT01301781 -NCT01302353 -NCT01302535 -NCT01302561 -NCT01302756 -NCT01302769 -NCT01303159 -NCT01303211 -NCT01303224 -NCT01303380 -NCT01303705 -NCT01303757 -NCT01304017 -NCT01304459 -NCT01304524 -NCT01304758 -NCT01304875 -NCT01304927 -NCT01304940 -NCT01305148 -NCT01305460 -NCT01305681 -NCT01305759 -NCT01305772 -NCT01306019 -NCT01306084 -NCT01306266 -NCT01306331 -NCT01306370 -NCT01306383 -NCT01306448 -NCT01306500 -NCT01306591 -NCT01306604 -NCT01306656 -NCT01306721 -NCT01307007 -NCT01307020 -NCT01307449 -NCT01307462 -NCT01307540 -NCT01307722 -NCT01307904 -NCT01307930 -NCT01307982 -NCT01308112 -NCT01308346 -NCT01308463 -NCT01308580 -NCT01308827 -NCT01309048 -NCT01309399 -NCT01309425 -NCT01309477 -NCT01309516 -NCT01309529 -NCT01309568 -NCT01309672 -NCT01309737 -NCT01309750 -NCT01309919 -NCT01310140 -NCT01310166 -NCT01310322 -NCT01310491 -NCT01310530 -NCT01310556 -NCT01310673 -NCT01311089 -NCT01311102 -NCT01311219 -NCT01311232 -NCT01311271 -NCT01311323 -NCT01311375 -NCT01311440 -NCT01311648 -NCT01311752 -NCT01311895 -NCT01311960 -NCT01311973 -NCT01311986 -NCT01312012 -NCT01312025 -NCT01312038 -NCT01312090 -NCT01312246 -NCT01312285 -NCT01312506 -NCT01312662 -NCT01312675 -NCT01312922 -NCT01313208 -NCT01313247 -NCT01313312 -NCT01313390 -NCT01313429 -NCT01313442 -NCT01313455 -NCT01313546 -NCT01313624 -NCT01313637 -NCT01313650 -NCT01313676 -NCT01313689 -NCT01313962 -NCT01314014 -NCT01314053 -NCT01314183 -NCT01314261 -NCT01314274 -NCT01314300 -NCT01314313 -NCT01314339 -NCT01314352 -NCT01314508 -NCT01314586 -NCT01314638 -NCT01314716 -NCT01314807 -NCT01314820 -NCT01315223 -NCT01315366 -NCT01315470 -NCT01315548 -NCT01315561 -NCT01315639 -NCT01315678 -NCT01315743 -NCT01315769 -NCT01315938 -NCT01316029 -NCT01316042 -NCT01316211 -NCT01316276 -NCT01316471 -NCT01316614 -NCT01316796 -NCT01317004 -NCT01317173 -NCT01317433 -NCT01317589 -NCT01317745 -NCT01317758 -NCT01317888 -NCT01318070 -NCT01318083 -NCT01318109 -NCT01318369 -NCT01318434 -NCT01318564 -NCT01318590 -NCT01318616 -NCT01318707 -NCT01318733 -NCT01318980 -NCT01319123 -NCT01319266 -NCT01319448 -NCT01319461 -NCT01319552 -NCT01319851 -NCT01319929 -NCT01320007 -NCT01320033 -NCT01320046 -NCT01320176 -NCT01320189 -NCT01320384 -NCT01320488 -NCT01320527 -NCT01320670 -NCT01320904 -NCT01321034 -NCT01321242 -NCT01321281 -NCT01321424 -NCT01321619 -NCT01321684 -NCT01321697 -NCT01321736 -NCT01321827 -NCT01321879 -NCT01321970 -NCT01321996 -NCT01322022 -NCT01322126 -NCT01322165 -NCT01322191 -NCT01322243 -NCT01322269 -NCT01322334 -NCT01322386 -NCT01322672 -NCT01322763 -NCT01322789 -NCT01322867 -NCT01323010 -NCT01323140 -NCT01323218 -NCT01323231 -NCT01323335 -NCT01323361 -NCT01323543 -NCT01323608 -NCT01323660 -NCT01323673 -NCT01323712 -NCT01323855 -NCT01324037 -NCT01324570 -NCT01324583 -NCT01324635 -NCT01324739 -NCT01324791 -NCT01324921 -NCT01324986 -NCT01325155 -NCT01325233 -NCT01325259 -NCT01325454 -NCT01325480 -NCT01325571 -NCT01325584 -NCT01325740 -NCT01325753 -NCT01325818 -NCT01326065 -NCT01326195 -NCT01326260 -NCT01326637 -NCT01326663 -NCT01326676 -NCT01326728 -NCT01326741 -NCT01326936 -NCT01326949 -NCT01327066 -NCT01327222 -NCT01327300 -NCT01327599 -NCT01327742 -NCT01327768 -NCT01327807 -NCT01327976 -NCT01327989 -NCT01328028 -NCT01328197 -NCT01328418 -NCT01328444 -NCT01328457 -NCT01328483 -NCT01328613 -NCT01328769 -NCT01328782 -NCT01328860 -NCT01328990 -NCT01329250 -NCT01329289 -NCT01329484 -NCT01329562 -NCT01329653 -NCT01329692 -NCT01329731 -NCT01329770 -NCT01329926 -NCT01330173 -NCT01330381 -NCT01330459 -NCT01330511 -NCT01330550 -NCT01330667 -NCT01330732 -NCT01331187 -NCT01331200 -NCT01331213 -NCT01331239 -NCT01331603 -NCT01331616 -NCT01331642 -NCT01331746 -NCT01332006 -NCT01332032 -NCT01332110 -NCT01332331 -NCT01332344 -NCT01332357 -NCT01332526 -NCT01332539 -NCT01332552 -NCT01332578 -NCT01332695 -NCT01332760 -NCT01332825 -NCT01332864 -NCT01333189 -NCT01333254 -NCT01333267 -NCT01333293 -NCT01333384 -NCT01333462 -NCT01333527 -NCT01333605 -NCT01333800 -NCT01333826 -NCT01333995 -NCT01334021 -NCT01334138 -NCT01334242 -NCT01334476 -NCT01334502 -NCT01334697 -NCT01334723 -NCT01334801 -NCT01334814 -NCT01334983 -NCT01334996 -NCT01335386 -NCT01335490 -NCT01335503 -NCT01335646 -NCT01335763 -NCT01335802 -NCT01335997 -NCT01336010 -NCT01336140 -NCT01336283 -NCT01336647 -NCT01336660 -NCT01336699 -NCT01336764 -NCT01337076 -NCT01337115 -NCT01337297 -NCT01337479 -NCT01337778 -NCT01337804 -NCT01337999 -NCT01338077 -NCT01338298 -NCT01338402 -NCT01338519 -NCT01338584 -NCT01338649 -NCT01338688 -NCT01338766 -NCT01339143 -NCT01339156 -NCT01339325 -NCT01339338 -NCT01339442 -NCT01339611 -NCT01339845 -NCT01340326 -NCT01340417 -NCT01340482 -NCT01340755 -NCT01341080 -NCT01341314 -NCT01341405 -NCT01341483 -NCT01341496 -NCT01341756 -NCT01341847 -NCT01341886 -NCT01342068 -NCT01342120 -NCT01342146 -NCT01342315 -NCT01342510 -NCT01342627 -NCT01342705 -NCT01342965 -NCT01343004 -NCT01343303 -NCT01343368 -NCT01343940 -NCT01343966 -NCT01344005 -NCT01344031 -NCT01344096 -NCT01344317 -NCT01344408 -NCT01344421 -NCT01344798 -NCT01344993 -NCT01345006 -NCT01345188 -NCT01345266 -NCT01345383 -NCT01345448 -NCT01345643 -NCT01345838 -NCT01345929 -NCT01346020 -NCT01346059 -NCT01346085 -NCT01346150 -NCT01346475 -NCT01346527 -NCT01346618 -NCT01346670 -NCT01346852 -NCT01346904 -NCT01347060 -NCT01347229 -NCT01347307 -NCT01347567 -NCT01347736 -NCT01347905 -NCT01347918 -NCT01347970 -NCT01348113 -NCT01348451 -NCT01348477 -NCT01348620 -NCT01348633 -NCT01348646 -NCT01348672 -NCT01349205 -NCT01349283 -NCT01349322 -NCT01349413 -NCT01349543 -NCT01349556 -NCT01349634 -NCT01349738 -NCT01349972 -NCT01349998 -NCT01350089 -NCT01350232 -NCT01350336 -NCT01350505 -NCT01350557 -NCT01350648 -NCT01350674 -NCT01350830 -NCT01351389 -NCT01351831 -NCT01351883 -NCT01351896 -NCT01351909 -NCT01351987 -NCT01352091 -NCT01352390 -NCT01352520 -NCT01352572 -NCT01352676 -NCT01352819 -NCT01352949 -NCT01353222 -NCT01353235 -NCT01353352 -NCT01353430 -NCT01353482 -NCT01353820 -NCT01353976 -NCT01354119 -NCT01354145 -NCT01354249 -NCT01354262 -NCT01354314 -NCT01354379 -NCT01354392 -NCT01354613 -NCT01354639 -NCT01354860 -NCT01354912 -NCT01355107 -NCT01355159 -NCT01355172 -NCT01355458 -NCT01355471 -NCT01355679 -NCT01355744 -NCT01355796 -NCT01355913 -NCT01356017 -NCT01356043 -NCT01356056 -NCT01356121 -NCT01356212 -NCT01356316 -NCT01356342 -NCT01356433 -NCT01356485 -NCT01356602 -NCT01356641 -NCT01356693 -NCT01357018 -NCT01357239 -NCT01357278 -NCT01357317 -NCT01357330 -NCT01357343 -NCT01357382 -NCT01357447 -NCT01357473 -NCT01357512 -NCT01357525 -NCT01357564 -NCT01357837 -NCT01358032 -NCT01358136 -NCT01358149 -NCT01358240 -NCT01358474 -NCT01358500 -NCT01358526 -NCT01358708 -NCT01358799 -NCT01359046 -NCT01359098 -NCT01359124 -NCT01359397 -NCT01359436 -NCT01359592 -NCT01359644 -NCT01359670 -NCT01359839 -NCT01359891 -NCT01359917 -NCT01360086 -NCT01360099 -NCT01360268 -NCT01360450 -NCT01360515 -NCT01360619 -NCT01360684 -NCT01360697 -NCT01360892 -NCT01360905 -NCT01360918 -NCT01360944 -NCT01360957 -NCT01360970 -NCT01360996 -NCT01361087 -NCT01361139 -NCT01361178 -NCT01361581 -NCT01361711 -NCT01361724 -NCT01361880 -NCT01361932 -NCT01362010 -NCT01362101 -NCT01362348 -NCT01362413 -NCT01362530 -NCT01362569 -NCT01362608 -NCT01362660 -NCT01362777 -NCT01363193 -NCT01363388 -NCT01363570 -NCT01363596 -NCT01364077 -NCT01364090 -NCT01364324 -NCT01364337 -NCT01364389 -NCT01364636 -NCT01364909 -NCT01365260 -NCT01365351 -NCT01365442 -NCT01365559 -NCT01365585 -NCT01365611 -NCT01366014 -NCT01366027 -NCT01366677 -NCT01367015 -NCT01367106 -NCT01367353 -NCT01367366 -NCT01367782 -NCT01367834 -NCT01367886 -NCT01367990 -NCT01368133 -NCT01368263 -NCT01368276 -NCT01368341 -NCT01368575 -NCT01368614 -NCT01368731 -NCT01368835 -NCT01369303 -NCT01369368 -NCT01369407 -NCT01369576 -NCT01369641 -NCT01369966 -NCT01370057 -NCT01370083 -NCT01370096 -NCT01370161 -NCT01370369 -NCT01370512 -NCT01370525 -NCT01370538 -NCT01370642 -NCT01370954 -NCT01371071 -NCT01371149 -NCT01371240 -NCT01371305 -NCT01371513 -NCT01371526 -NCT01371552 -NCT01371565 -NCT01371591 -NCT01371630 -NCT01371643 -NCT01371656 -NCT01371773 -NCT01371825 -NCT01371838 -NCT01371877 -NCT01371981 -NCT01372202 -NCT01372319 -NCT01372332 -NCT01372423 -NCT01372436 -NCT01372475 -NCT01372540 -NCT01372566 -NCT01372618 -NCT01372813 -NCT01372904 -NCT01372943 -NCT01373034 -NCT01373125 -NCT01373372 -NCT01373411 -NCT01373450 -NCT01373528 -NCT01373580 -NCT01373723 -NCT01373970 -NCT01374152 -NCT01374165 -NCT01374204 -NCT01374269 -NCT01374334 -NCT01374412 -NCT01374477 -NCT01374659 -NCT01374776 -NCT01374880 -NCT01374906 -NCT01375062 -NCT01375075 -NCT01375114 -NCT01375322 -NCT01375543 -NCT01375608 -NCT01375660 -NCT01375803 -NCT01375920 -NCT01375959 -NCT01376024 -NCT01376076 -NCT01376115 -NCT01376193 -NCT01376232 -NCT01376414 -NCT01376466 -NCT01376700 -NCT01376817 -NCT01376830 -NCT01376856 -NCT01376934 -NCT01376960 -NCT01377103 -NCT01377181 -NCT01377194 -NCT01377350 -NCT01377415 -NCT01377467 -NCT01377584 -NCT01377701 -NCT01377753 -NCT01377766 -NCT01378026 -NCT01378039 -NCT01378117 -NCT01378169 -NCT01378182 -NCT01378195 -NCT01378299 -NCT01378520 -NCT01378676 -NCT01378819 -NCT01379170 -NCT01379183 -NCT01379690 -NCT01380015 -NCT01380067 -NCT01380119 -NCT01380171 -NCT01380223 -NCT01380301 -NCT01380314 -NCT01380730 -NCT01380769 -NCT01380899 -NCT01380964 -NCT01381094 -NCT01381263 -NCT01381354 -NCT01381510 -NCT01381549 -NCT01381757 -NCT01381978 -NCT01382095 -NCT01382134 -NCT01382212 -NCT01382225 -NCT01382407 -NCT01382420 -NCT01382537 -NCT01382615 -NCT01382641 -NCT01382667 -NCT01382862 -NCT01382953 -NCT01383044 -NCT01383109 -NCT01383226 -NCT01383460 -NCT01383564 -NCT01383772 -NCT01383902 -NCT01383941 -NCT01383954 -NCT01384201 -NCT01384253 -NCT01384266 -NCT01384331 -NCT01384357 -NCT01384370 -NCT01384396 -NCT01384409 -NCT01384565 -NCT01384669 -NCT01384721 -NCT01384799 -NCT01384851 -NCT01384877 -NCT01385007 -NCT01385020 -NCT01385098 -NCT01385137 -NCT01385176 -NCT01385215 -NCT01385319 -NCT01385410 -NCT01385436 -NCT01385501 -NCT01385579 -NCT01385605 -NCT01385683 -NCT01385774 -NCT01385826 -NCT01385852 -NCT01385917 -NCT01385930 -NCT01386372 -NCT01386411 -NCT01386437 -NCT01386515 -NCT01386567 -NCT01386606 -NCT01386619 -NCT01386710 -NCT01386853 -NCT01386905 -NCT01386957 -NCT01386983 -NCT01386996 -NCT01387230 -NCT01387256 -NCT01387425 -NCT01387503 -NCT01387750 -NCT01387906 -NCT01387919 -NCT01387971 -NCT01388192 -NCT01388348 -NCT01388413 -NCT01388595 -NCT01388647 -NCT01388660 -NCT01388712 -NCT01388764 -NCT01388777 -NCT01388933 -NCT01388985 -NCT01389349 -NCT01389726 -NCT01389765 -NCT01389869 -NCT01389999 -NCT01390012 -NCT01390181 -NCT01390207 -NCT01390324 -NCT01390454 -NCT01390532 -NCT01390584 -NCT01390935 -NCT01391052 -NCT01391078 -NCT01391091 -NCT01391117 -NCT01391182 -NCT01391208 -NCT01391325 -NCT01391455 -NCT01391702 -NCT01391715 -NCT01391767 -NCT01391806 -NCT01392053 -NCT01392209 -NCT01392339 -NCT01392365 -NCT01392456 -NCT01392612 -NCT01392768 -NCT01392859 -NCT01392885 -NCT01392898 -NCT01392911 -NCT01392963 -NCT01392989 -NCT01393743 -NCT01393808 -NCT01393821 -NCT01393847 -NCT01393886 -NCT01394133 -NCT01394146 -NCT01394172 -NCT01394263 -NCT01394393 -NCT01394471 -NCT01394510 -NCT01394536 -NCT01394575 -NCT01394614 -NCT01394926 -NCT01394965 -NCT01395134 -NCT01395251 -NCT01395407 -NCT01395550 -NCT01395563 -NCT01396005 -NCT01396161 -NCT01396226 -NCT01396252 -NCT01396317 -NCT01396369 -NCT01396525 -NCT01396642 -NCT01396785 -NCT01396811 -NCT01396954 -NCT01397084 -NCT01397149 -NCT01397162 -NCT01397201 -NCT01397253 -NCT01397409 -NCT01397552 -NCT01397565 -NCT01397604 -NCT01397643 -NCT01397695 -NCT01397721 -NCT01397916 -NCT01398085 -NCT01398371 -NCT01398423 -NCT01398579 -NCT01398618 -NCT01398644 -NCT01399008 -NCT01399216 -NCT01399788 -NCT01399892 -NCT01399905 -NCT01399983 -NCT01400113 -NCT01400334 -NCT01400464 -NCT01400477 -NCT01400542 -NCT01400646 -NCT01400698 -NCT01400828 -NCT01400893 -NCT01400906 -NCT01400945 -NCT01401010 -NCT01401023 -NCT01401257 -NCT01401413 -NCT01401439 -NCT01401582 -NCT01401647 -NCT01401660 -NCT01401946 -NCT01401959 -NCT01402011 -NCT01402115 -NCT01402219 -NCT01402453 -NCT01402531 -NCT01402570 -NCT01402583 -NCT01402752 -NCT01402804 -NCT01402843 -NCT01402895 -NCT01402934 -NCT01403116 -NCT01403181 -NCT01403259 -NCT01403324 -NCT01403402 -NCT01403415 -NCT01403532 -NCT01403571 -NCT01403740 -NCT01403870 -NCT01404091 -NCT01404247 -NCT01404260 -NCT01404312 -NCT01404533 -NCT01404611 -NCT01404754 -NCT01404832 -NCT01404884 -NCT01404897 -NCT01405222 -NCT01405313 -NCT01405391 -NCT01405417 -NCT01405469 -NCT01405560 -NCT01405768 -NCT01405781 -NCT01405807 -NCT01405820 -NCT01405937 -NCT01406106 -NCT01406210 -NCT01406275 -NCT01406288 -NCT01406314 -NCT01406353 -NCT01406509 -NCT01406548 -NCT01406613 -NCT01406639 -NCT01406951 -NCT01406990 -NCT01407120 -NCT01407263 -NCT01407432 -NCT01407692 -NCT01407796 -NCT01407848 -NCT01407978 -NCT01408030 -NCT01408043 -NCT01408108 -NCT01408121 -NCT01408472 -NCT01408498 -NCT01408615 -NCT01408732 -NCT01408784 -NCT01408836 -NCT01408966 -NCT01408992 -NCT01409031 -NCT01409122 -NCT01409148 -NCT01409356 -NCT01409382 -NCT01409460 -NCT01409551 -NCT01409746 -NCT01409811 -NCT01409837 -NCT01409902 -NCT01409915 -NCT01410045 -NCT01410097 -NCT01410227 -NCT01410409 -NCT01410526 -NCT01410565 -NCT01410578 -NCT01410734 -NCT01410825 -NCT01410916 -NCT01411072 -NCT01411176 -NCT01411202 -NCT01411306 -NCT01411319 -NCT01411358 -NCT01411527 -NCT01411657 -NCT01411722 -NCT01411826 -NCT01411878 -NCT01411995 -NCT01412047 -NCT01412177 -NCT01412242 -NCT01412294 -NCT01412424 -NCT01412918 -NCT01413074 -NCT01413152 -NCT01413256 -NCT01413555 -NCT01413581 -NCT01413607 -NCT01413633 -NCT01413646 -NCT01413698 -NCT01413711 -NCT01414062 -NCT01414205 -NCT01414244 -NCT01414257 -NCT01414322 -NCT01414387 -NCT01414530 -NCT01414556 -NCT01414673 -NCT01414686 -NCT01414803 -NCT01414868 -NCT01415050 -NCT01415115 -NCT01415193 -NCT01415427 -NCT01415648 -NCT01415700 -NCT01415830 -NCT01415856 -NCT01415869 -NCT01415882 -NCT01415908 -NCT01415921 -NCT01415947 -NCT01415986 -NCT01416181 -NCT01416246 -NCT01416480 -NCT01416493 -NCT01416571 -NCT01416597 -NCT01416844 -NCT01416922 -NCT01416961 -NCT01417130 -NCT01417208 -NCT01417377 -NCT01417442 -NCT01417520 -NCT01417533 -NCT01417598 -NCT01417923 -NCT01418079 -NCT01418131 -NCT01418157 -NCT01418235 -NCT01418287 -NCT01418534 -NCT01418547 -NCT01418924 -NCT01419015 -NCT01419028 -NCT01419119 -NCT01419184 -NCT01419236 -NCT01419249 -NCT01419535 -NCT01419561 -NCT01419574 -NCT01419704 -NCT01419821 -NCT01419860 -NCT01419886 -NCT01419938 -NCT01419977 -NCT01420003 -NCT01420055 -NCT01420133 -NCT01420146 -NCT01420354 -NCT01420367 -NCT01420419 -NCT01420523 -NCT01420744 -NCT01420874 -NCT01420887 -NCT01420913 -NCT01420939 -NCT01420965 -NCT01420991 -NCT01421160 -NCT01421355 -NCT01421368 -NCT01421693 -NCT01421797 -NCT01421810 -NCT01421888 -NCT01421927 -NCT01422057 -NCT01422226 -NCT01422239 -NCT01422616 -NCT01422668 -NCT01422707 -NCT01422746 -NCT01422759 -NCT01422798 -NCT01423071 -NCT01423266 -NCT01423331 -NCT01423344 -NCT01423396 -NCT01423591 -NCT01423604 -NCT01423734 -NCT01423890 -NCT01423942 -NCT01423994 -NCT01424046 -NCT01424176 -NCT01424241 -NCT01424254 -NCT01424306 -NCT01424423 -NCT01424475 -NCT01424514 -NCT01424527 -NCT01424631 -NCT01424748 -NCT01424761 -NCT01424904 -NCT01425034 -NCT01425177 -NCT01425463 -NCT01425528 -NCT01425541 -NCT01425606 -NCT01425619 -NCT01425775 -NCT01425788 -NCT01425827 -NCT01425892 -NCT01425957 -NCT01425970 -NCT01426087 -NCT01426269 -NCT01426672 -NCT01426724 -NCT01426932 -NCT01427114 -NCT01427179 -NCT01427192 -NCT01427244 -NCT01427270 -NCT01427283 -NCT01427491 -NCT01427556 -NCT01427595 -NCT01427608 -NCT01427673 -NCT01427842 -NCT01427855 -NCT01427894 -NCT01428089 -NCT01428167 -NCT01428193 -NCT01428245 -NCT01428336 -NCT01428531 -NCT01428544 -NCT01428648 -NCT01428713 -NCT01428726 -NCT01428908 -NCT01429090 -NCT01429155 -NCT01429168 -NCT01429207 -NCT01429259 -NCT01429298 -NCT01429376 -NCT01429389 -NCT01429402 -NCT01429480 -NCT01429597 -NCT01429844 -NCT01429909 -NCT01429935 -NCT01430000 -NCT01430091 -NCT01430286 -NCT01430403 -NCT01430442 -NCT01430520 -NCT01430689 -NCT01430754 -NCT01430793 -NCT01430845 -NCT01430897 -NCT01430988 -NCT01431222 -NCT01431313 -NCT01431326 -NCT01431586 -NCT01431638 -NCT01431651 -NCT01431755 -NCT01431794 -NCT01431924 -NCT01431963 -NCT01432093 -NCT01432392 -NCT01432470 -NCT01432613 -NCT01432626 -NCT01432769 -NCT01432782 -NCT01432821 -NCT01432847 -NCT01432873 -NCT01432938 -NCT01433003 -NCT01433107 -NCT01433263 -NCT01433354 -NCT01433601 -NCT01433744 -NCT01433809 -NCT01433848 -NCT01433874 -NCT01434108 -NCT01434121 -NCT01434251 -NCT01434355 -NCT01434368 -NCT01434446 -NCT01434602 -NCT01434758 -NCT01434810 -NCT01434862 -NCT01434992 -NCT01435070 -NCT01435551 -NCT01435603 -NCT01435616 -NCT01435629 -NCT01435733 -NCT01435902 -NCT01435941 -NCT01435954 -NCT01436071 -NCT01436110 -NCT01436253 -NCT01436266 -NCT01436318 -NCT01436370 -NCT01436747 -NCT01436877 -NCT01436890 -NCT01436955 -NCT01436994 -NCT01437098 -NCT01437345 -NCT01437410 -NCT01437436 -NCT01437735 -NCT01437956 -NCT01437969 -NCT01438034 -NCT01438073 -NCT01438203 -NCT01438398 -NCT01438567 -NCT01438593 -NCT01438710 -NCT01438762 -NCT01438853 -NCT01439100 -NCT01439256 -NCT01439269 -NCT01439360 -NCT01439516 -NCT01439581 -NCT01439672 -NCT01439711 -NCT01439815 -NCT01439854 -NCT01439971 -NCT01440036 -NCT01440140 -NCT01440205 -NCT01440361 -NCT01440439 -NCT01440491 -NCT01440517 -NCT01440582 -NCT01440764 -NCT01440777 -NCT01441024 -NCT01441037 -NCT01441089 -NCT01441102 -NCT01441141 -NCT01441154 -NCT01441284 -NCT01441375 -NCT01441466 -NCT01441479 -NCT01441635 -NCT01441648 -NCT01441882 -NCT01441895 -NCT01441934 -NCT01442181 -NCT01442220 -NCT01442233 -NCT01442259 -NCT01442350 -NCT01442441 -NCT01442454 -NCT01442623 -NCT01442649 -NCT01442701 -NCT01442779 -NCT01443065 -NCT01443494 -NCT01443624 -NCT01443832 -NCT01443845 -NCT01443923 -NCT01443936 -NCT01444001 -NCT01444014 -NCT01444066 -NCT01444209 -NCT01444365 -NCT01444521 -NCT01444534 -NCT01444625 -NCT01444768 -NCT01444846 -NCT01445041 -NCT01445080 -NCT01445119 -NCT01445171 -NCT01445301 -NCT01445418 -NCT01445613 -NCT01445821 -NCT01445977 -NCT01446042 -NCT01446211 -NCT01446237 -NCT01446276 -NCT01446315 -NCT01446393 -NCT01446471 -NCT01446549 -NCT01446666 -NCT01446848 -NCT01446887 -NCT01446900 -NCT01446939 -NCT01447069 -NCT01447199 -NCT01447329 -NCT01447381 -NCT01447693 -NCT01447745 -NCT01447823 -NCT01447888 -NCT01447927 -NCT01447979 -NCT01447992 -NCT01448005 -NCT01448044 -NCT01448161 -NCT01448395 -NCT01448434 -NCT01448473 -NCT01448733 -NCT01448772 -NCT01448850 -NCT01448980 -NCT01449019 -NCT01449084 -NCT01449110 -NCT01449162 -NCT01449253 -NCT01449266 -NCT01449292 -NCT01449305 -NCT01449409 -NCT01449513 -NCT01449539 -NCT01449591 -NCT01449916 -NCT01449994 -NCT01450137 -NCT01450150 -NCT01450202 -NCT01450501 -NCT01450566 -NCT01450748 -NCT01450930 -NCT01451086 -NCT01451281 -NCT01451372 -NCT01451411 -NCT01451437 -NCT01451593 -NCT01451619 -NCT01451749 -NCT01452061 -NCT01452165 -NCT01452477 -NCT01452490 -NCT01452516 -NCT01452659 -NCT01452815 -NCT01452893 -NCT01452932 -NCT01452945 -NCT01452997 -NCT01453062 -NCT01453075 -NCT01453101 -NCT01453114 -NCT01453244 -NCT01453283 -NCT01453335 -NCT01453452 -NCT01453738 -NCT01453777 -NCT01453985 -NCT01454284 -NCT01454349 -NCT01454375 -NCT01454505 -NCT01454635 -NCT01454661 -NCT01454739 -NCT01455077 -NCT01455090 -NCT01455298 -NCT01455376 -NCT01455402 -NCT01455454 -NCT01455753 -NCT01455805 -NCT01455935 -NCT01456377 -NCT01456416 -NCT01456481 -NCT01456637 -NCT01456650 -NCT01456845 -NCT01456858 -NCT01456975 -NCT01457014 -NCT01457053 -NCT01457092 -NCT01457313 -NCT01457443 -NCT01457573 -NCT01457625 -NCT01457703 -NCT01457924 -NCT01457950 -NCT01458106 -NCT01458301 -NCT01458418 -NCT01458613 -NCT01458704 -NCT01458808 -NCT01458860 -NCT01458886 -NCT01459016 -NCT01459081 -NCT01459237 -NCT01459393 -NCT01459627 -NCT01459640 -NCT01459770 -NCT01459783 -NCT01459913 -NCT01460017 -NCT01460043 -NCT01460082 -NCT01460108 -NCT01460121 -NCT01460199 -NCT01460368 -NCT01460758 -NCT01460797 -NCT01460810 -NCT01460966 -NCT01461005 -NCT01461174 -NCT01461200 -NCT01461330 -NCT01461369 -NCT01461408 -NCT01461473 -NCT01461525 -NCT01461616 -NCT01461954 -NCT01462006 -NCT01462292 -NCT01462526 -NCT01462877 -NCT01462903 -NCT01463007 -NCT01463085 -NCT01463098 -NCT01463189 -NCT01463280 -NCT01463358 -NCT01463462 -NCT01463488 -NCT01463540 -NCT01463592 -NCT01463644 -NCT01463761 -NCT01463787 -NCT01464021 -NCT01464203 -NCT01464762 -NCT01464775 -NCT01464788 -NCT01464879 -NCT01464905 -NCT01464944 -NCT01464983 -NCT01465022 -NCT01465295 -NCT01465334 -NCT01465399 -NCT01465516 -NCT01465568 -NCT01465594 -NCT01465633 -NCT01465646 -NCT01465672 -NCT01465841 -NCT01465867 -NCT01466036 -NCT01466114 -NCT01466348 -NCT01466504 -NCT01466686 -NCT01466712 -NCT01467037 -NCT01467102 -NCT01467297 -NCT01467479 -NCT01467505 -NCT01467635 -NCT01467700 -NCT01467869 -NCT01467882 -NCT01468025 -NCT01468038 -NCT01468220 -NCT01468311 -NCT01468441 -NCT01468493 -NCT01468532 -NCT01468636 -NCT01468831 -NCT01468844 -NCT01468909 -NCT01468948 -NCT01468987 -NCT01469000 -NCT01469117 -NCT01469221 -NCT01469364 -NCT01469533 -NCT01469546 -NCT01469663 -NCT01469676 -NCT01469702 -NCT01469715 -NCT01469819 -NCT01469832 -NCT01470040 -NCT01470534 -NCT01470638 -NCT01470729 -NCT01470807 -NCT01470820 -NCT01470885 -NCT01470937 -NCT01470989 -NCT01471054 -NCT01471119 -NCT01471184 -NCT01471288 -NCT01471314 -NCT01471379 -NCT01471405 -NCT01471522 -NCT01471600 -NCT01471639 -NCT01471652 -NCT01471678 -NCT01471899 -NCT01472029 -NCT01472133 -NCT01472432 -NCT01472523 -NCT01472692 -NCT01472874 -NCT01472913 -NCT01472978 -NCT01473290 -NCT01473303 -NCT01473472 -NCT01473524 -NCT01473849 -NCT01473979 -NCT01474369 -NCT01474447 -NCT01474499 -NCT01474564 -NCT01474746 -NCT01474811 -NCT01475019 -NCT01475214 -NCT01475227 -NCT01475240 -NCT01475292 -NCT01475318 -NCT01475344 -NCT01475370 -NCT01475708 -NCT01475890 -NCT01476150 -NCT01476423 -NCT01476501 -NCT01476527 -NCT01476605 -NCT01476644 -NCT01476683 -NCT01476930 -NCT01476956 -NCT01476995 -NCT01477073 -NCT01477138 -NCT01477333 -NCT01477346 -NCT01477437 -NCT01477476 -NCT01477827 -NCT01478009 -NCT01478204 -NCT01478347 -NCT01478438 -NCT01478620 -NCT01478724 -NCT01478802 -NCT01478932 -NCT01479075 -NCT01479426 -NCT01479569 -NCT01479686 -NCT01479855 -NCT01479920 -NCT01480167 -NCT01480349 -NCT01480427 -NCT01480596 -NCT01480778 -NCT01480843 -NCT01480908 -NCT01481168 -NCT01481324 -NCT01481376 -NCT01481701 -NCT01481779 -NCT01481792 -NCT01481909 -NCT01481948 -NCT01482130 -NCT01482143 -NCT01482208 -NCT01482286 -NCT01482299 -NCT01482312 -NCT01482338 -NCT01482481 -NCT01482494 -NCT01482520 -NCT01482559 -NCT01482767 -NCT01482858 -NCT01482897 -NCT01483118 -NCT01483287 -NCT01483365 -NCT01483560 -NCT01483573 -NCT01483625 -NCT01483716 -NCT01483742 -NCT01483768 -NCT01483911 -NCT01483989 -NCT01484106 -NCT01484405 -NCT01484483 -NCT01484574 -NCT01484678 -NCT01484925 -NCT01485055 -NCT01485094 -NCT01485172 -NCT01485198 -NCT01485224 -NCT01485263 -NCT01485276 -NCT01485471 -NCT01485692 -NCT01485913 -NCT01485978 -NCT01486225 -NCT01486381 -NCT01486394 -NCT01486667 -NCT01486745 -NCT01486849 -NCT01486927 -NCT01486979 -NCT01487239 -NCT01487252 -NCT01487486 -NCT01487525 -NCT01487538 -NCT01487590 -NCT01487694 -NCT01487837 -NCT01488136 -NCT01488175 -NCT01488500 -NCT01488591 -NCT01488773 -NCT01488981 -NCT01489215 -NCT01489241 -NCT01489254 -NCT01489397 -NCT01489436 -NCT01489527 -NCT01489592 -NCT01489839 -NCT01489969 -NCT01490164 -NCT01490190 -NCT01490203 -NCT01490320 -NCT01490502 -NCT01490892 -NCT01490905 -NCT01491048 -NCT01491100 -NCT01491165 -NCT01491360 -NCT01491490 -NCT01491516 -NCT01491542 -NCT01491555 -NCT01491568 -NCT01491763 -NCT01491828 -NCT01491971 -NCT01492062 -NCT01492179 -NCT01492270 -NCT01492296 -NCT01492374 -NCT01492387 -NCT01492413 -NCT01492517 -NCT01492790 -NCT01492855 -NCT01493050 -NCT01493089 -NCT01493128 -NCT01493284 -NCT01493349 -NCT01493531 -NCT01493687 -NCT01493791 -NCT01494025 -NCT01494168 -NCT01494181 -NCT01494285 -NCT01494337 -NCT01494467 -NCT01494532 -NCT01494571 -NCT01494610 -NCT01494636 -NCT01494649 -NCT01494714 -NCT01495000 -NCT01495026 -NCT01495065 -NCT01495325 -NCT01495455 -NCT01495585 -NCT01495676 -NCT01495806 -NCT01495897 -NCT01495923 -NCT01496066 -NCT01496079 -NCT01496248 -NCT01496326 -NCT01496404 -NCT01496482 -NCT01496599 -NCT01496612 -NCT01496651 -NCT01496872 -NCT01496885 -NCT01496963 -NCT01497158 -NCT01497197 -NCT01497262 -NCT01497392 -NCT01497548 -NCT01497691 -NCT01497977 -NCT01498068 -NCT01498081 -NCT01498211 -NCT01498289 -NCT01498406 -NCT01498419 -NCT01498432 -NCT01498471 -NCT01498653 -NCT01498666 -NCT01498679 -NCT01498705 -NCT01499056 -NCT01499134 -NCT01499446 -NCT01499485 -NCT01499628 -NCT01499667 -NCT01499784 -NCT01499823 -NCT01499888 -NCT01499901 -NCT01499914 -NCT01500057 -NCT01500122 -NCT01500148 -NCT01500200 -NCT01500304 -NCT01500356 -NCT01500447 -NCT01500512 -NCT01500525 -NCT01500616 -NCT01500629 -NCT01500733 -NCT01500889 -NCT01500915 -NCT01501162 -NCT01501279 -NCT01501409 -NCT01501487 -NCT01501500 -NCT01501578 -NCT01501643 -NCT01501942 -NCT01502059 -NCT01502124 -NCT01502137 -NCT01502176 -NCT01502189 -NCT01502241 -NCT01502410 -NCT01502514 -NCT01502527 -NCT01502748 -NCT01502982 -NCT01503099 -NCT01503125 -NCT01503164 -NCT01503294 -NCT01503307 -NCT01503346 -NCT01503476 -NCT01503749 -NCT01503775 -NCT01503905 -NCT01504009 -NCT01504048 -NCT01504126 -NCT01504399 -NCT01504464 -NCT01504555 -NCT01504802 -NCT01504880 -NCT01504945 -NCT01504958 -NCT01504997 -NCT01505010 -NCT01505400 -NCT01505426 -NCT01505517 -NCT01505582 -NCT01505595 -NCT01505686 -NCT01505751 -NCT01505842 -NCT01505868 -NCT01505946 -NCT01506037 -NCT01506050 -NCT01506128 -NCT01506479 -NCT01506518 -NCT01506557 -NCT01506661 -NCT01506700 -NCT01506791 -NCT01506908 -NCT01506947 -NCT01506960 -NCT01507207 -NCT01507285 -NCT01507428 -NCT01507480 -NCT01507610 -NCT01507662 -NCT01507792 -NCT01507974 -NCT01508520 -NCT01508702 -NCT01508741 -NCT01508767 -NCT01508819 -NCT01508884 -NCT01509014 -NCT01509066 -NCT01509079 -NCT01509183 -NCT01509482 -NCT01509534 -NCT01509599 -NCT01509612 -NCT01509924 -NCT01509963 -NCT01510002 -NCT01510041 -NCT01510158 -NCT01510392 -NCT01510418 -NCT01510457 -NCT01510769 -NCT01510847 -NCT01510912 -NCT01511042 -NCT01511081 -NCT01511211 -NCT01511302 -NCT01511419 -NCT01511458 -NCT01511575 -NCT01511588 -NCT01511601 -NCT01511939 -NCT01511952 -NCT01512056 -NCT01512277 -NCT01512342 -NCT01512472 -NCT01512537 -NCT01512589 -NCT01512654 -NCT01512719 -NCT01512927 -NCT01512940 -NCT01512992 -NCT01513161 -NCT01513239 -NCT01513408 -NCT01513421 -NCT01513447 -NCT01513616 -NCT01513655 -NCT01513707 -NCT01513928 -NCT01513980 -NCT01514071 -NCT01514110 -NCT01514201 -NCT01514253 -NCT01514279 -NCT01514630 -NCT01514643 -NCT01514734 -NCT01514760 -NCT01514890 -NCT01515137 -NCT01515150 -NCT01515176 -NCT01515215 -NCT01515254 -NCT01515293 -NCT01515566 -NCT01515683 -NCT01515696 -NCT01515865 -NCT01515995 -NCT01516008 -NCT01516203 -NCT01516229 -NCT01516320 -NCT01516528 -NCT01516840 -NCT01516931 -NCT01517048 -NCT01517126 -NCT01517165 -NCT01517191 -NCT01517217 -NCT01517529 -NCT01517646 -NCT01517659 -NCT01517698 -NCT01517828 -NCT01518036 -NCT01518049 -NCT01518062 -NCT01518075 -NCT01518192 -NCT01518218 -NCT01518231 -NCT01518322 -NCT01518374 -NCT01518686 -NCT01518920 -NCT01518946 -NCT01519050 -NCT01519076 -NCT01519141 -NCT01519193 -NCT01519271 -NCT01519349 -NCT01519388 -NCT01519414 -NCT01519752 -NCT01519778 -NCT01519882 -NCT01520038 -NCT01520051 -NCT01520181 -NCT01520194 -NCT01520272 -NCT01520454 -NCT01520467 -NCT01520584 -NCT01520675 -NCT01520740 -NCT01520909 -NCT01520948 -NCT01521013 -NCT01521117 -NCT01521221 -NCT01521351 -NCT01521468 -NCT01521481 -NCT01521546 -NCT01521754 -NCT01522170 -NCT01522183 -NCT01522196 -NCT01522326 -NCT01522521 -NCT01522534 -NCT01522547 -NCT01522573 -NCT01522794 -NCT01522859 -NCT01522950 -NCT01523002 -NCT01523015 -NCT01523197 -NCT01523561 -NCT01523964 -NCT01524081 -NCT01524159 -NCT01524198 -NCT01524432 -NCT01524458 -NCT01524471 -NCT01524536 -NCT01524562 -NCT01524640 -NCT01524705 -NCT01524731 -NCT01524757 -NCT01524926 -NCT01524991 -NCT01525004 -NCT01525043 -NCT01525121 -NCT01525134 -NCT01525173 -NCT01525563 -NCT01525732 -NCT01525875 -NCT01525966 -NCT01526161 -NCT01526174 -NCT01526278 -NCT01526304 -NCT01526356 -NCT01526408 -NCT01526486 -NCT01526590 -NCT01526707 -NCT01526772 -NCT01526811 -NCT01526889 -NCT01526902 -NCT01526915 -NCT01527669 -NCT01527812 -NCT01527955 -NCT01528176 -NCT01528345 -NCT01528462 -NCT01528488 -NCT01528540 -NCT01528566 -NCT01528722 -NCT01528735 -NCT01528748 -NCT01528930 -NCT01529073 -NCT01529099 -NCT01529177 -NCT01529242 -NCT01529333 -NCT01529359 -NCT01529385 -NCT01529437 -NCT01529645 -NCT01529788 -NCT01529827 -NCT01529996 -NCT01530035 -NCT01530061 -NCT01530178 -NCT01530217 -NCT01530256 -NCT01530568 -NCT01530724 -NCT01530880 -NCT01530971 -NCT01531023 -NCT01531218 -NCT01531374 -NCT01531439 -NCT01531478 -NCT01531504 -NCT01531673 -NCT01531699 -NCT01531712 -NCT01531829 -NCT01531868 -NCT01531998 -NCT01532089 -NCT01532401 -NCT01532765 -NCT01532830 -NCT01532856 -NCT01533012 -NCT01533129 -NCT01533246 -NCT01533285 -NCT01533571 -NCT01533636 -NCT01533649 -NCT01534065 -NCT01534117 -NCT01534130 -NCT01534182 -NCT01534208 -NCT01534273 -NCT01534286 -NCT01534351 -NCT01534377 -NCT01534429 -NCT01534507 -NCT01534650 -NCT01534754 -NCT01534793 -NCT01534806 -NCT01534819 -NCT01534832 -NCT01534897 -NCT01535001 -NCT01535027 -NCT01535053 -NCT01535131 -NCT01535352 -NCT01535560 -NCT01535599 -NCT01535612 -NCT01535664 -NCT01535846 -NCT01535950 -NCT01536067 -NCT01536080 -NCT01536262 -NCT01536288 -NCT01536301 -NCT01536678 -NCT01536717 -NCT01536795 -NCT01537081 -NCT01537211 -NCT01537666 -NCT01537770 -NCT01537900 -NCT01537926 -NCT01538017 -NCT01538238 -NCT01538329 -NCT01538355 -NCT01538381 -NCT01538407 -NCT01538420 -NCT01538459 -NCT01538745 -NCT01538849 -NCT01538862 -NCT01538966 -NCT01539044 -NCT01539161 -NCT01539187 -NCT01539356 -NCT01539395 -NCT01539447 -NCT01539512 -NCT01539525 -NCT01539681 -NCT01539772 -NCT01539824 -NCT01539980 -NCT01540396 -NCT01540617 -NCT01540708 -NCT01540747 -NCT01540799 -NCT01541020 -NCT01541111 -NCT01541124 -NCT01541241 -NCT01541306 -NCT01541423 -NCT01541618 -NCT01541722 -NCT01541813 -NCT01541878 -NCT01541943 -NCT01542138 -NCT01542177 -NCT01542437 -NCT01542515 -NCT01542606 -NCT01542632 -NCT01542892 -NCT01542957 -NCT01543022 -NCT01543048 -NCT01543204 -NCT01543334 -NCT01543347 -NCT01543399 -NCT01543438 -NCT01543594 -NCT01543607 -NCT01543659 -NCT01543997 -NCT01544101 -NCT01544205 -NCT01544478 -NCT01544647 -NCT01544738 -NCT01544920 -NCT01545011 -NCT01545037 -NCT01545193 -NCT01545518 -NCT01545674 -NCT01545830 -NCT01545869 -NCT01545986 -NCT01546012 -NCT01546116 -NCT01546207 -NCT01546298 -NCT01546363 -NCT01546454 -NCT01546675 -NCT01546701 -NCT01546740 -NCT01546766 -NCT01546844 -NCT01546922 -NCT01546987 -NCT01547078 -NCT01547169 -NCT01547208 -NCT01547364 -NCT01547442 -NCT01547481 -NCT01547494 -NCT01547715 -NCT01547793 -NCT01547845 -NCT01547871 -NCT01547949 -NCT01548105 -NCT01548118 -NCT01548170 -NCT01548222 -NCT01548313 -NCT01548339 -NCT01548352 -NCT01548482 -NCT01548573 -NCT01548651 -NCT01548690 -NCT01548950 -NCT01549015 -NCT01549184 -NCT01549210 -NCT01549756 -NCT01549847 -NCT01549873 -NCT01550094 -NCT01550276 -NCT01550484 -NCT01550497 -NCT01550627 -NCT01550783 -NCT01550913 -NCT01551030 -NCT01551407 -NCT01551446 -NCT01551498 -NCT01551511 -NCT01551654 -NCT01551706 -NCT01551719 -NCT01551966 -NCT01552005 -NCT01552031 -NCT01552083 -NCT01552161 -NCT01552421 -NCT01552681 -NCT01552694 -NCT01552811 -NCT01552824 -NCT01552993 -NCT01553071 -NCT01553227 -NCT01553240 -NCT01553253 -NCT01553318 -NCT01553396 -NCT01553487 -NCT01553643 -NCT01553747 -NCT01553838 -NCT01553890 -NCT01554020 -NCT01554163 -NCT01554384 -NCT01554514 -NCT01554553 -NCT01554579 -NCT01554592 -NCT01554683 -NCT01554774 -NCT01554852 -NCT01555021 -NCT01555047 -NCT01555138 -NCT01555216 -NCT01555333 -NCT01555346 -NCT01555437 -NCT01555463 -NCT01555515 -NCT01555580 -NCT01555606 -NCT01555840 -NCT01555892 -NCT01555905 -NCT01555957 -NCT01556230 -NCT01556243 -NCT01556360 -NCT01556581 -NCT01556646 -NCT01556711 -NCT01556841 -NCT01556958 -NCT01557075 -NCT01557140 -NCT01557361 -NCT01557400 -NCT01557439 -NCT01557465 -NCT01557556 -NCT01557595 -NCT01557738 -NCT01557842 -NCT01557855 -NCT01557868 -NCT01558050 -NCT01558115 -NCT01558141 -NCT01558245 -NCT01558479 -NCT01558869 -NCT01559025 -NCT01559116 -NCT01559181 -NCT01559220 -NCT01559545 -NCT01559636 -NCT01559714 -NCT01559740 -NCT01559987 -NCT01560260 -NCT01560559 -NCT01560663 -NCT01560676 -NCT01560741 -NCT01560832 -NCT01560845 -NCT01560962 -NCT01561040 -NCT01561118 -NCT01561248 -NCT01561326 -NCT01561430 -NCT01561664 -NCT01561755 -NCT01561885 -NCT01561924 -NCT01561989 -NCT01562093 -NCT01562184 -NCT01562301 -NCT01562418 -NCT01562457 -NCT01562496 -NCT01562509 -NCT01562535 -NCT01562548 -NCT01562678 -NCT01562717 -NCT01562756 -NCT01562782 -NCT01563055 -NCT01563094 -NCT01563133 -NCT01563172 -NCT01563289 -NCT01563536 -NCT01563627 -NCT01563757 -NCT01563796 -NCT01563822 -NCT01563900 -NCT01563926 -NCT01564004 -NCT01564121 -NCT01564264 -NCT01564290 -NCT01564602 -NCT01564849 -NCT01565109 -NCT01565135 -NCT01565200 -NCT01565239 -NCT01565486 -NCT01565512 -NCT01565616 -NCT01565889 -NCT01566071 -NCT01566292 -NCT01566383 -NCT01566409 -NCT01566448 -NCT01566500 -NCT01566604 -NCT01566734 -NCT01566799 -NCT01566812 -NCT01566838 -NCT01566890 -NCT01566903 -NCT01566968 -NCT01567072 -NCT01567137 -NCT01567501 -NCT01567709 -NCT01567735 -NCT01568034 -NCT01568138 -NCT01568307 -NCT01568359 -NCT01568450 -NCT01568476 -NCT01568580 -NCT01568658 -NCT01568684 -NCT01568697 -NCT01568710 -NCT01568853 -NCT01568879 -NCT01568918 -NCT01569074 -NCT01569425 -NCT01569633 -NCT01569763 -NCT01569815 -NCT01569958 -NCT01570023 -NCT01570192 -NCT01570231 -NCT01570257 -NCT01570309 -NCT01570361 -NCT01570621 -NCT01570634 -NCT01570647 -NCT01570816 -NCT01571141 -NCT01571180 -NCT01571271 -NCT01571362 -NCT01571453 -NCT01571596 -NCT01571622 -NCT01571739 -NCT01571934 -NCT01571960 -NCT01572012 -NCT01572051 -NCT01572064 -NCT01572090 -NCT01572103 -NCT01572116 -NCT01572233 -NCT01572428 -NCT01572545 -NCT01572571 -NCT01572623 -NCT01572818 -NCT01572857 -NCT01572935 -NCT01573169 -NCT01573260 -NCT01573286 -NCT01573416 -NCT01573442 -NCT01573546 -NCT01573611 -NCT01573793 -NCT01574001 -NCT01574066 -NCT01574209 -NCT01574339 -NCT01574365 -NCT01574456 -NCT01574495 -NCT01574781 -NCT01574859 -NCT01574989 -NCT01575249 -NCT01575444 -NCT01575535 -NCT01575548 -NCT01575678 -NCT01575821 -NCT01575834 -NCT01575873 -NCT01576055 -NCT01576354 -NCT01576393 -NCT01576419 -NCT01576458 -NCT01576549 -NCT01576562 -NCT01576588 -NCT01576705 -NCT01576718 -NCT01576900 -NCT01577017 -NCT01577316 -NCT01577355 -NCT01577407 -NCT01577459 -NCT01577602 -NCT01577771 -NCT01577862 -NCT01577914 -NCT01577953 -NCT01577966 -NCT01578031 -NCT01578252 -NCT01578265 -NCT01578317 -NCT01578577 -NCT01578642 -NCT01578681 -NCT01578694 -NCT01578733 -NCT01578811 -NCT01578824 -NCT01578889 -NCT01578967 -NCT01578980 -NCT01579058 -NCT01579084 -NCT01579110 -NCT01579227 -NCT01579435 -NCT01579487 -NCT01579539 -NCT01579747 -NCT01579929 -NCT01579942 -NCT01580033 -NCT01580085 -NCT01580137 -NCT01580293 -NCT01580345 -NCT01580462 -NCT01580501 -NCT01580787 -NCT01580878 -NCT01580891 -NCT01580982 -NCT01581008 -NCT01581034 -NCT01581125 -NCT01581281 -NCT01581294 -NCT01581463 -NCT01581580 -NCT01581645 -NCT01581775 -NCT01581801 -NCT01581944 -NCT01581996 -NCT01582035 -NCT01582061 -NCT01582100 -NCT01582139 -NCT01582529 -NCT01582659 -NCT01582724 -NCT01582984 -NCT01583205 -NCT01583296 -NCT01583309 -NCT01583348 -NCT01583426 -NCT01583478 -NCT01583517 -NCT01583621 -NCT01583660 -NCT01583699 -NCT01583712 -NCT01583881 -NCT01584011 -NCT01584076 -NCT01584141 -NCT01584271 -NCT01584440 -NCT01584674 -NCT01585012 -NCT01585051 -NCT01585311 -NCT01585454 -NCT01585532 -NCT01585597 -NCT01585662 -NCT01585831 -NCT01586000 -NCT01586104 -NCT01586169 -NCT01586234 -NCT01586260 -NCT01586299 -NCT01586520 -NCT01586728 -NCT01586858 -NCT01586884 -NCT01586910 -NCT01586988 -NCT01587014 -NCT01587313 -NCT01587443 -NCT01587586 -NCT01587677 -NCT01587807 -NCT01587846 -NCT01587859 -NCT01587885 -NCT01588015 -NCT01588132 -NCT01588236 -NCT01588249 -NCT01588301 -NCT01588340 -NCT01588379 -NCT01588418 -NCT01588483 -NCT01588509 -NCT01588873 -NCT01589003 -NCT01589016 -NCT01589172 -NCT01589289 -NCT01589380 -NCT01589497 -NCT01589601 -NCT01589627 -NCT01589796 -NCT01589848 -NCT01589926 -NCT01590095 -NCT01590316 -NCT01590745 -NCT01590758 -NCT01590784 -NCT01590862 -NCT01590940 -NCT01591005 -NCT01591018 -NCT01591031 -NCT01591096 -NCT01591174 -NCT01591226 -NCT01591317 -NCT01591395 -NCT01591473 -NCT01591486 -NCT01591499 -NCT01591681 -NCT01591863 -NCT01591902 -NCT01591967 -NCT01591980 -NCT01592019 -NCT01592240 -NCT01592396 -NCT01592500 -NCT01592578 -NCT01592669 -NCT01592708 -NCT01592734 -NCT01592747 -NCT01592929 -NCT01592981 -NCT01592994 -NCT01593007 -NCT01593111 -NCT01593124 -NCT01593189 -NCT01593280 -NCT01593449 -NCT01593514 -NCT01593527 -NCT01593644 -NCT01593761 -NCT01593852 -NCT01593943 -NCT01594112 -NCT01594229 -NCT01594346 -NCT01594372 -NCT01594567 -NCT01594658 -NCT01594762 -NCT01594996 -NCT01595178 -NCT01595438 -NCT01595451 -NCT01595503 -NCT01595529 -NCT01595542 -NCT01595607 -NCT01595646 -NCT01595672 -NCT01595763 -NCT01596049 -NCT01596101 -NCT01596153 -NCT01596166 -NCT01596244 -NCT01596257 -NCT01596829 -NCT01596907 -NCT01596972 -NCT01597063 -NCT01597076 -NCT01597232 -NCT01597336 -NCT01597349 -NCT01597375 -NCT01597401 -NCT01597505 -NCT01597518 -NCT01597687 -NCT01597778 -NCT01597791 -NCT01597817 -NCT01597830 -NCT01597973 -NCT01598090 -NCT01598311 -NCT01598415 -NCT01598649 -NCT01598857 -NCT01598935 -NCT01599026 -NCT01599039 -NCT01599156 -NCT01599195 -NCT01599208 -NCT01599273 -NCT01599416 -NCT01599533 -NCT01599546 -NCT01599780 -NCT01599806 -NCT01599884 -NCT01599897 -NCT01599910 -NCT01599923 -NCT01599936 -NCT01599975 -NCT01600105 -NCT01600417 -NCT01600521 -NCT01600638 -NCT01600833 -NCT01600859 -NCT01600898 -NCT01600963 -NCT01600976 -NCT01601015 -NCT01601041 -NCT01601197 -NCT01601262 -NCT01601275 -NCT01601288 -NCT01601327 -NCT01601340 -NCT01601366 -NCT01601379 -NCT01601444 -NCT01601678 -NCT01601977 -NCT01602042 -NCT01602055 -NCT01602068 -NCT01602406 -NCT01602471 -NCT01602601 -NCT01602809 -NCT01602926 -NCT01602939 -NCT01602965 -NCT01603017 -NCT01603095 -NCT01603134 -NCT01603160 -NCT01603173 -NCT01603186 -NCT01603407 -NCT01603459 -NCT01603576 -NCT01603693 -NCT01603745 -NCT01603888 -NCT01604031 -NCT01604070 -NCT01604148 -NCT01604161 -NCT01604174 -NCT01604239 -NCT01604356 -NCT01604382 -NCT01604395 -NCT01604408 -NCT01604460 -NCT01604655 -NCT01604759 -NCT01604772 -NCT01604785 -NCT01604811 -NCT01604980 -NCT01605240 -NCT01605331 -NCT01605513 -NCT01605669 -NCT01605929 -NCT01606072 -NCT01606085 -NCT01606228 -NCT01606384 -NCT01606397 -NCT01606449 -NCT01606631 -NCT01606774 -NCT01606878 -NCT01607047 -NCT01607151 -NCT01607216 -NCT01607294 -NCT01607658 -NCT01607684 -NCT01607996 -NCT01608360 -NCT01608399 -NCT01608529 -NCT01608620 -NCT01608971 -NCT01609010 -NCT01609062 -NCT01609140 -NCT01609257 -NCT01609309 -NCT01609504 -NCT01609582 -NCT01609608 -NCT01609894 -NCT01609933 -NCT01610193 -NCT01610219 -NCT01610440 -NCT01610648 -NCT01610843 -NCT01610908 -NCT01610934 -NCT01611025 -NCT01611090 -NCT01611532 -NCT01611571 -NCT01611597 -NCT01611649 -NCT01612091 -NCT01612182 -NCT01612338 -NCT01612351 -NCT01612416 -NCT01612624 -NCT01612793 -NCT01612871 -NCT01612910 -NCT01613131 -NCT01613222 -NCT01613248 -NCT01613300 -NCT01613313 -NCT01613443 -NCT01613534 -NCT01613573 -NCT01613586 -NCT01613599 -NCT01613638 -NCT01613729 -NCT01613807 -NCT01613833 -NCT01613885 -NCT01613924 -NCT01614184 -NCT01614379 -NCT01614392 -NCT01614522 -NCT01614561 -NCT01614652 -NCT01614717 -NCT01614743 -NCT01614847 -NCT01614886 -NCT01615224 -NCT01615367 -NCT01615380 -NCT01615510 -NCT01615562 -NCT01615653 -NCT01615666 -NCT01615705 -NCT01615783 -NCT01615913 -NCT01615926 -NCT01616056 -NCT01616134 -NCT01616160 -NCT01616381 -NCT01616537 -NCT01616589 -NCT01616602 -NCT01616641 -NCT01616862 -NCT01616875 -NCT01616901 -NCT01617031 -NCT01617057 -NCT01617603 -NCT01617616 -NCT01617642 -NCT01617733 -NCT01617915 -NCT01618149 -NCT01618227 -NCT01618422 -NCT01618448 -NCT01618487 -NCT01618513 -NCT01618591 -NCT01618617 -NCT01618721 -NCT01618760 -NCT01618890 -NCT01618929 -NCT01619033 -NCT01619046 -NCT01619098 -NCT01619150 -NCT01619163 -NCT01619228 -NCT01619293 -NCT01619358 -NCT01619475 -NCT01619514 -NCT01619553 -NCT01619605 -NCT01619631 -NCT01619683 -NCT01619761 -NCT01619839 -NCT01619943 -NCT01619969 -NCT01619995 -NCT01620138 -NCT01620164 -NCT01620281 -NCT01620398 -NCT01620411 -NCT01620515 -NCT01620580 -NCT01620645 -NCT01620684 -NCT01620801 -NCT01620996 -NCT01621061 -NCT01621256 -NCT01621282 -NCT01621308 -NCT01621451 -NCT01621529 -NCT01621685 -NCT01621789 -NCT01621971 -NCT01622114 -NCT01622218 -NCT01622257 -NCT01622322 -NCT01622361 -NCT01622582 -NCT01622621 -NCT01622699 -NCT01622712 -NCT01622751 -NCT01622894 -NCT01623037 -NCT01623115 -NCT01623141 -NCT01623154 -NCT01623206 -NCT01623336 -NCT01623440 -NCT01623596 -NCT01623739 -NCT01623765 -NCT01623804 -NCT01623817 -NCT01623869 -NCT01623921 -NCT01624090 -NCT01624155 -NCT01624220 -NCT01624272 -NCT01624610 -NCT01624753 -NCT01624805 -NCT01625013 -NCT01625338 -NCT01625390 -NCT01625442 -NCT01625520 -NCT01625533 -NCT01625546 -NCT01626079 -NCT01626105 -NCT01626235 -NCT01626391 -NCT01626417 -NCT01626820 -NCT01626833 -NCT01627028 -NCT01627522 -NCT01627717 -NCT01627951 -NCT01628263 -NCT01628315 -NCT01628484 -NCT01628497 -NCT01628510 -NCT01628549 -NCT01628653 -NCT01628900 -NCT01628978 -NCT01629095 -NCT01629147 -NCT01629160 -NCT01629251 -NCT01629303 -NCT01629329 -NCT01629381 -NCT01629563 -NCT01629667 -NCT01629797 -NCT01629823 -NCT01630096 -NCT01630265 -NCT01630291 -NCT01630408 -NCT01630421 -NCT01630525 -NCT01630590 -NCT01630603 -NCT01630655 -NCT01630746 -NCT01630772 -NCT01630798 -NCT01630889 -NCT01631214 -NCT01631305 -NCT01631409 -NCT01631422 -NCT01631435 -NCT01631474 -NCT01631513 -NCT01631591 -NCT01631708 -NCT01631760 -NCT01631890 -NCT01631903 -NCT01631968 -NCT01632137 -NCT01632241 -NCT01632332 -NCT01632787 -NCT01632800 -NCT01632956 -NCT01633008 -NCT01633021 -NCT01633437 -NCT01633463 -NCT01633476 -NCT01633762 -NCT01633918 -NCT01633931 -NCT01634009 -NCT01634113 -NCT01634269 -NCT01634282 -NCT01634620 -NCT01634750 -NCT01634984 -NCT01635088 -NCT01635244 -NCT01635374 -NCT01635504 -NCT01635530 -NCT01635647 -NCT01635699 -NCT01635868 -NCT01635946 -NCT01635959 -NCT01636219 -NCT01636245 -NCT01636427 -NCT01636492 -NCT01637129 -NCT01637220 -NCT01637376 -NCT01637402 -NCT01637558 -NCT01637584 -NCT01637623 -NCT01637649 -NCT01637701 -NCT01637714 -NCT01637857 -NCT01638039 -NCT01638091 -NCT01638156 -NCT01638390 -NCT01638611 -NCT01638923 -NCT01638962 -NCT01639118 -NCT01639170 -NCT01639274 -NCT01639287 -NCT01639365 -NCT01639391 -NCT01639430 -NCT01639443 -NCT01639508 -NCT01639677 -NCT01639846 -NCT01639924 -NCT01640015 -NCT01640119 -NCT01640353 -NCT01640678 -NCT01640717 -NCT01640782 -NCT01640886 -NCT01641029 -NCT01641107 -NCT01641406 -NCT01641419 -NCT01641653 -NCT01641679 -NCT01641705 -NCT01641718 -NCT01641757 -NCT01641835 -NCT01641952 -NCT01642251 -NCT01642511 -NCT01642615 -NCT01642797 -NCT01642849 -NCT01642888 -NCT01642914 -NCT01642953 -NCT01643005 -NCT01643109 -NCT01643239 -NCT01643499 -NCT01643577 -NCT01643707 -NCT01643759 -NCT01643811 -NCT01643837 -NCT01643902 -NCT01644305 -NCT01644448 -NCT01644565 -NCT01644682 -NCT01644708 -NCT01644864 -NCT01644916 -NCT01645046 -NCT01645098 -NCT01645111 -NCT01645176 -NCT01645306 -NCT01645332 -NCT01645371 -NCT01645384 -NCT01645449 -NCT01645696 -NCT01645709 -NCT01645774 -NCT01645826 -NCT01646086 -NCT01646268 -NCT01646346 -NCT01646541 -NCT01647620 -NCT01647646 -NCT01647737 -NCT01647750 -NCT01647958 -NCT01648140 -NCT01648218 -NCT01648348 -NCT01648452 -NCT01648530 -NCT01648608 -NCT01648803 -NCT01648972 -NCT01649180 -NCT01649700 -NCT01649804 -NCT01649843 -NCT01650207 -NCT01650389 -NCT01650402 -NCT01650597 -NCT01650688 -NCT01651078 -NCT01651312 -NCT01651377 -NCT01651468 -NCT01651494 -NCT01651520 -NCT01651663 -NCT01651767 -NCT01651793 -NCT01651871 -NCT01651975 -NCT01652027 -NCT01652066 -NCT01652157 -NCT01652170 -NCT01652183 -NCT01652222 -NCT01652521 -NCT01652547 -NCT01652573 -NCT01652625 -NCT01652651 -NCT01652859 -NCT01652898 -NCT01652911 -NCT01652963 -NCT01652989 -NCT01653002 -NCT01653054 -NCT01653145 -NCT01653171 -NCT01653249 -NCT01653418 -NCT01653522 -NCT01653639 -NCT01653873 -NCT01653886 -NCT01653899 -NCT01653964 -NCT01653990 -NCT01654068 -NCT01654120 -NCT01654159 -NCT01654198 -NCT01654224 -NCT01654289 -NCT01654445 -NCT01654588 -NCT01654666 -NCT01654809 -NCT01655043 -NCT01655056 -NCT01655121 -NCT01655212 -NCT01655238 -NCT01655251 -NCT01655264 -NCT01655329 -NCT01655446 -NCT01655472 -NCT01655537 -NCT01655550 -NCT01655589 -NCT01655719 -NCT01655797 -NCT01655966 -NCT01656278 -NCT01656629 -NCT01656668 -NCT01656772 -NCT01656863 -NCT01657123 -NCT01657175 -NCT01657188 -NCT01657370 -NCT01657409 -NCT01657448 -NCT01657461 -NCT01657487 -NCT01657656 -NCT01657695 -NCT01657786 -NCT01657981 -NCT01658020 -NCT01658124 -NCT01658228 -NCT01658280 -NCT01658319 -NCT01658345 -NCT01658423 -NCT01658436 -NCT01658670 -NCT01658800 -NCT01658930 -NCT01658943 -NCT01659008 -NCT01659021 -NCT01659112 -NCT01659411 -NCT01659463 -NCT01659476 -NCT01659541 -NCT01659567 -NCT01659606 -NCT01659632 -NCT01659788 -NCT01659853 -NCT01659879 -NCT01660009 -NCT01660048 -NCT01660347 -NCT01660542 -NCT01660672 -NCT01660711 -NCT01660997 -NCT01661010 -NCT01661127 -NCT01661322 -NCT01661387 -NCT01661439 -NCT01661465 -NCT01661595 -NCT01661621 -NCT01661686 -NCT01661712 -NCT01661777 -NCT01661842 -NCT01661959 -NCT01661998 -NCT01662128 -NCT01662427 -NCT01662453 -NCT01662531 -NCT01662596 -NCT01662609 -NCT01662739 -NCT01662843 -NCT01662921 -NCT01662947 -NCT01662960 -NCT01663103 -NCT01663155 -NCT01663207 -NCT01663350 -NCT01663493 -NCT01663545 -NCT01663584 -NCT01663597 -NCT01663623 -NCT01663675 -NCT01663701 -NCT01663909 -NCT01663935 -NCT01664026 -NCT01664195 -NCT01664221 -NCT01664546 -NCT01665118 -NCT01665495 -NCT01665521 -NCT01665547 -NCT01665599 -NCT01665768 -NCT01665781 -NCT01665820 -NCT01665859 -NCT01666509 -NCT01666548 -NCT01666873 -NCT01667042 -NCT01667068 -NCT01667081 -NCT01667172 -NCT01667211 -NCT01667250 -NCT01667367 -NCT01667627 -NCT01667718 -NCT01667744 -NCT01667770 -NCT01667848 -NCT01668251 -NCT01668290 -NCT01668381 -NCT01668472 -NCT01668498 -NCT01668654 -NCT01668862 -NCT01668875 -NCT01668953 -NCT01669161 -NCT01669174 -NCT01669304 -NCT01669317 -NCT01669655 -NCT01669928 -NCT01670006 -NCT01670097 -NCT01670292 -NCT01670422 -NCT01670435 -NCT01670474 -NCT01670617 -NCT01670643 -NCT01670786 -NCT01671150 -NCT01671267 -NCT01671319 -NCT01671371 -NCT01671384 -NCT01671397 -NCT01671423 -NCT01671436 -NCT01671462 -NCT01671774 -NCT01671826 -NCT01671878 -NCT01671943 -NCT01672151 -NCT01672216 -NCT01672242 -NCT01672268 -NCT01672307 -NCT01672411 -NCT01672658 -NCT01672749 -NCT01672918 -NCT01673152 -NCT01673282 -NCT01673347 -NCT01673373 -NCT01673490 -NCT01673568 -NCT01673633 -NCT01673646 -NCT01673698 -NCT01673789 -NCT01673919 -NCT01673932 -NCT01673945 -NCT01674049 -NCT01674101 -NCT01674140 -NCT01674205 -NCT01674530 -NCT01674608 -NCT01674621 -NCT01674725 -NCT01674998 -NCT01675037 -NCT01675141 -NCT01675310 -NCT01675323 -NCT01675362 -NCT01675401 -NCT01675440 -NCT01675466 -NCT01675635 -NCT01675713 -NCT01675778 -NCT01675856 -NCT01675921 -NCT01676090 -NCT01676363 -NCT01676493 -NCT01676753 -NCT01676909 -NCT01676948 -NCT01677091 -NCT01677234 -NCT01677260 -NCT01677416 -NCT01677455 -NCT01677481 -NCT01677559 -NCT01677572 -NCT01677624 -NCT01677637 -NCT01677689 -NCT01677715 -NCT01678053 -NCT01678131 -NCT01678144 -NCT01678157 -NCT01678261 -NCT01678274 -NCT01678365 -NCT01678391 -NCT01678443 -NCT01678690 -NCT01678729 -NCT01678859 -NCT01678963 -NCT01679041 -NCT01679158 -NCT01679210 -NCT01679431 -NCT01679548 -NCT01679574 -NCT01679717 -NCT01679925 -NCT01679951 -NCT01679977 -NCT01680029 -NCT01680198 -NCT01680211 -NCT01680380 -NCT01680432 -NCT01680523 -NCT01680640 -NCT01680822 -NCT01680874 -NCT01681004 -NCT01681303 -NCT01681472 -NCT01681615 -NCT01681641 -NCT01681667 -NCT01681836 -NCT01681875 -NCT01682122 -NCT01682187 -NCT01682200 -NCT01682317 -NCT01682460 -NCT01682720 -NCT01682733 -NCT01682772 -NCT01682798 -NCT01682837 -NCT01683019 -NCT01683162 -NCT01683435 -NCT01683487 -NCT01683565 -NCT01683708 -NCT01683786 -NCT01683799 -NCT01683812 -NCT01683825 -NCT01683864 -NCT01683968 -NCT01684072 -NCT01684384 -NCT01684397 -NCT01684605 -NCT01684670 -NCT01684839 -NCT01684943 -NCT01685021 -NCT01685047 -NCT01685190 -NCT01685333 -NCT01685359 -NCT01685385 -NCT01685515 -NCT01685567 -NCT01685749 -NCT01685827 -NCT01685996 -NCT01686282 -NCT01686568 -NCT01686594 -NCT01686672 -NCT01686698 -NCT01686776 -NCT01686828 -NCT01686971 -NCT01687101 -NCT01687192 -NCT01687205 -NCT01687244 -NCT01687257 -NCT01687283 -NCT01687543 -NCT01687608 -NCT01687647 -NCT01687790 -NCT01687842 -NCT01687959 -NCT01687972 -NCT01687998 -NCT01688076 -NCT01688128 -NCT01688349 -NCT01688388 -NCT01688453 -NCT01688466 -NCT01688531 -NCT01688609 -NCT01688934 -NCT01688973 -NCT01689064 -NCT01689350 -NCT01689402 -NCT01689467 -NCT01689532 -NCT01689558 -NCT01689610 -NCT01689623 -NCT01689883 -NCT01689896 -NCT01689948 -NCT01689961 -NCT01689974 -NCT01689987 -NCT01690013 -NCT01690182 -NCT01690559 -NCT01690767 -NCT01690936 -NCT01691040 -NCT01691196 -NCT01691248 -NCT01691339 -NCT01691352 -NCT01691508 -NCT01691521 -NCT01691547 -NCT01691781 -NCT01692015 -NCT01692106 -NCT01692132 -NCT01692223 -NCT01692379 -NCT01692626 -NCT01692834 -NCT01692964 -NCT01693237 -NCT01693432 -NCT01693510 -NCT01693575 -NCT01693783 -NCT01693939 -NCT01694043 -NCT01694056 -NCT01694238 -NCT01694251 -NCT01694654 -NCT01694771 -NCT01694875 -NCT01694953 -NCT01695031 -NCT01695187 -NCT01695265 -NCT01695330 -NCT01695369 -NCT01695434 -NCT01695525 -NCT01695577 -NCT01695850 -NCT01695902 -NCT01695915 -NCT01695993 -NCT01696123 -NCT01696136 -NCT01696227 -NCT01696266 -NCT01696552 -NCT01696734 -NCT01696799 -NCT01696864 -NCT01696955 -NCT01697059 -NCT01697150 -NCT01697228 -NCT01697267 -NCT01697332 -NCT01697345 -NCT01697358 -NCT01697540 -NCT01697891 -NCT01698047 -NCT01698073 -NCT01698086 -NCT01698099 -NCT01698203 -NCT01698268 -NCT01698398 -NCT01698411 -NCT01698424 -NCT01698489 -NCT01698697 -NCT01698840 -NCT01699009 -NCT01699022 -NCT01699074 -NCT01699139 -NCT01699542 -NCT01699555 -NCT01699607 -NCT01699906 -NCT01699919 -NCT01700049 -NCT01700244 -NCT01700309 -NCT01700426 -NCT01700439 -NCT01700517 -NCT01700530 -NCT01700634 -NCT01700686 -NCT01700738 -NCT01700829 -NCT01700881 -NCT01700959 -NCT01701076 -NCT01701089 -NCT01701245 -NCT01701258 -NCT01701388 -NCT01701427 -NCT01701622 -NCT01701687 -NCT01701804 -NCT01701843 -NCT01701869 -NCT01701947 -NCT01702012 -NCT01702246 -NCT01702337 -NCT01702376 -NCT01702519 -NCT01702610 -NCT01702636 -NCT01702740 -NCT01702844 -NCT01702870 -NCT01703065 -NCT01703091 -NCT01703403 -NCT01703494 -NCT01703559 -NCT01703676 -NCT01703728 -NCT01703780 -NCT01703806 -NCT01703845 -NCT01704157 -NCT01704313 -NCT01704339 -NCT01704430 -NCT01704495 -NCT01704664 -NCT01704729 -NCT01704742 -NCT01704807 -NCT01704872 -NCT01704976 -NCT01705054 -NCT01705366 -NCT01705379 -NCT01705444 -NCT01705496 -NCT01705587 -NCT01705600 -NCT01705795 -NCT01705834 -NCT01705847 -NCT01705886 -NCT01705899 -NCT01705964 -NCT01706068 -NCT01706081 -NCT01706094 -NCT01706237 -NCT01706250 -NCT01706263 -NCT01706445 -NCT01706458 -NCT01706562 -NCT01706900 -NCT01707121 -NCT01707173 -NCT01707212 -NCT01707225 -NCT01707238 -NCT01707251 -NCT01707290 -NCT01707472 -NCT01707524 -NCT01707563 -NCT01707615 -NCT01707771 -NCT01707966 -NCT01708005 -NCT01708109 -NCT01708174 -NCT01708265 -NCT01708317 -NCT01708564 -NCT01708941 -NCT01709058 -NCT01709071 -NCT01709110 -NCT01709149 -NCT01709214 -NCT01709227 -NCT01709292 -NCT01709331 -NCT01709435 -NCT01709513 -NCT01709812 -NCT01709864 -NCT01710072 -NCT01710254 -NCT01710501 -NCT01710618 -NCT01710683 -NCT01710696 -NCT01710722 -NCT01711099 -NCT01711229 -NCT01711528 -NCT01711541 -NCT01711580 -NCT01711606 -NCT01711749 -NCT01711879 -NCT01711918 -NCT01711983 -NCT01712178 -NCT01712204 -NCT01712230 -NCT01712243 -NCT01712269 -NCT01712360 -NCT01712438 -NCT01712646 -NCT01712841 -NCT01712893 -NCT01712984 -NCT01713023 -NCT01713361 -NCT01713452 -NCT01713582 -NCT01713699 -NCT01713842 -NCT01713972 -NCT01714089 -NCT01714102 -NCT01714167 -NCT01714505 -NCT01714557 -NCT01714635 -NCT01714648 -NCT01714661 -NCT01714791 -NCT01714843 -NCT01714934 -NCT01715025 -NCT01715077 -NCT01715207 -NCT01715220 -NCT01715376 -NCT01715415 -NCT01715727 -NCT01715948 -NCT01716000 -NCT01716104 -NCT01716156 -NCT01716416 -NCT01716520 -NCT01716611 -NCT01716754 -NCT01716767 -NCT01716897 -NCT01717079 -NCT01717118 -NCT01717196 -NCT01717326 -NCT01717404 -NCT01717430 -NCT01717599 -NCT01717664 -NCT01717703 -NCT01717716 -NCT01717768 -NCT01717794 -NCT01717911 -NCT01717924 -NCT01718067 -NCT01718119 -NCT01718171 -NCT01718275 -NCT01718366 -NCT01718379 -NCT01718444 -NCT01718496 -NCT01718561 -NCT01718639 -NCT01718886 -NCT01719068 -NCT01719081 -NCT01719107 -NCT01719120 -NCT01719211 -NCT01719237 -NCT01719393 -NCT01719445 -NCT01719471 -NCT01719484 -NCT01719575 -NCT01719679 -NCT01719783 -NCT01720004 -NCT01720342 -NCT01720433 -NCT01720459 -NCT01720745 -NCT01720771 -NCT01721018 -NCT01721083 -NCT01721265 -NCT01721291 -NCT01721369 -NCT01721577 -NCT01721668 -NCT01721694 -NCT01721850 -NCT01721902 -NCT01721967 -NCT01722084 -NCT01722201 -NCT01722214 -NCT01722240 -NCT01722305 -NCT01722318 -NCT01722578 -NCT01722617 -NCT01722773 -NCT01722812 -NCT01722942 -NCT01723124 -NCT01723150 -NCT01723202 -NCT01723488 -NCT01723553 -NCT01723644 -NCT01723748 -NCT01723839 -NCT01723904 -NCT01723943 -NCT01723956 -NCT01723995 -NCT01724034 -NCT01724086 -NCT01724112 -NCT01724229 -NCT01724463 -NCT01724580 -NCT01724619 -NCT01724658 -NCT01724671 -NCT01724840 -NCT01724905 -NCT01724996 -NCT01725048 -NCT01725152 -NCT01725217 -NCT01725438 -NCT01725451 -NCT01725477 -NCT01725529 -NCT01725568 -NCT01725581 -NCT01725815 -NCT01725828 -NCT01725893 -NCT01726036 -NCT01726049 -NCT01726062 -NCT01726465 -NCT01726556 -NCT01726725 -NCT01726751 -NCT01726803 -NCT01726842 -NCT01726920 -NCT01726985 -NCT01727193 -NCT01727349 -NCT01727583 -NCT01727674 -NCT01727687 -NCT01727752 -NCT01727817 -NCT01728090 -NCT01728454 -NCT01728662 -NCT01728896 -NCT01729039 -NCT01729104 -NCT01729481 -NCT01729533 -NCT01729559 -NCT01729624 -NCT01729715 -NCT01729806 -NCT01730053 -NCT01730144 -NCT01730404 -NCT01730560 -NCT01730612 -NCT01730651 -NCT01730664 -NCT01730716 -NCT01730781 -NCT01730833 -NCT01730911 -NCT01731028 -NCT01731054 -NCT01731145 -NCT01731223 -NCT01731262 -NCT01731288 -NCT01731301 -NCT01731340 -NCT01731444 -NCT01731561 -NCT01731665 -NCT01731678 -NCT01731795 -NCT01731821 -NCT01731886 -NCT01732107 -NCT01732497 -NCT01732627 -NCT01732770 -NCT01732796 -NCT01732835 -NCT01733069 -NCT01733095 -NCT01733290 -NCT01733472 -NCT01733511 -NCT01733823 -NCT01733979 -NCT01734044 -NCT01734096 -NCT01734122 -NCT01734161 -NCT01734174 -NCT01734187 -NCT01734369 -NCT01734447 -NCT01734473 -NCT01734486 -NCT01734525 -NCT01734655 -NCT01734707 -NCT01734720 -NCT01734837 -NCT01734967 -NCT01735006 -NCT01735032 -NCT01735045 -NCT01735136 -NCT01735201 -NCT01735760 -NCT01735799 -NCT01735812 -NCT01735851 -NCT01735877 -NCT01736033 -NCT01736059 -NCT01736111 -NCT01736267 -NCT01736345 -NCT01736410 -NCT01736423 -NCT01736475 -NCT01736670 -NCT01736774 -NCT01736917 -NCT01736956 -NCT01737008 -NCT01737138 -NCT01737164 -NCT01737723 -NCT01737801 -NCT01737840 -NCT01737983 -NCT01738087 -NCT01738113 -NCT01738139 -NCT01738243 -NCT01738347 -NCT01738412 -NCT01738776 -NCT01738802 -NCT01738945 -NCT01738984 -NCT01738997 -NCT01739244 -NCT01739283 -NCT01739335 -NCT01739634 -NCT01739972 -NCT01740063 -NCT01740388 -NCT01740492 -NCT01740583 -NCT01740726 -NCT01740999 -NCT01741428 -NCT01741519 -NCT01741623 -NCT01741805 -NCT01741948 -NCT01742026 -NCT01742117 -NCT01742156 -NCT01742338 -NCT01742377 -NCT01742494 -NCT01742598 -NCT01742741 -NCT01742819 -NCT01742897 -NCT01742936 -NCT01743001 -NCT01743040 -NCT01743066 -NCT01743235 -NCT01743469 -NCT01743521 -NCT01743729 -NCT01743768 -NCT01744015 -NCT01744028 -NCT01744041 -NCT01744106 -NCT01744847 -NCT01744873 -NCT01745237 -NCT01745354 -NCT01745406 -NCT01745601 -NCT01745796 -NCT01745822 -NCT01745861 -NCT01745939 -NCT01745952 -NCT01746420 -NCT01746498 -NCT01746511 -NCT01746589 -NCT01746602 -NCT01746628 -NCT01746693 -NCT01746771 -NCT01746823 -NCT01746862 -NCT01747005 -NCT01747018 -NCT01747070 -NCT01747135 -NCT01747148 -NCT01747174 -NCT01747187 -NCT01747213 -NCT01747226 -NCT01747304 -NCT01747577 -NCT01747603 -NCT01747629 -NCT01747772 -NCT01747811 -NCT01747824 -NCT01747993 -NCT01748136 -NCT01748357 -NCT01748370 -NCT01748578 -NCT01748656 -NCT01748682 -NCT01748721 -NCT01748734 -NCT01748812 -NCT01749384 -NCT01749527 -NCT01749592 -NCT01750099 -NCT01750151 -NCT01750398 -NCT01750515 -NCT01750632 -NCT01750658 -NCT01750697 -NCT01750957 -NCT01751191 -NCT01751451 -NCT01751516 -NCT01751555 -NCT01751568 -NCT01751776 -NCT01752309 -NCT01752387 -NCT01752621 -NCT01752647 -NCT01752920 -NCT01752998 -NCT01753076 -NCT01753128 -NCT01753154 -NCT01753219 -NCT01753414 -NCT01753479 -NCT01753856 -NCT01754038 -NCT01754441 -NCT01754493 -NCT01754519 -NCT01754792 -NCT01754935 -NCT01755364 -NCT01755429 -NCT01755598 -NCT01755832 -NCT01755897 -NCT01756105 -NCT01756196 -NCT01756209 -NCT01756222 -NCT01756339 -NCT01756391 -NCT01756547 -NCT01756690 -NCT01756742 -NCT01757145 -NCT01757158 -NCT01757223 -NCT01757314 -NCT01757327 -NCT01757405 -NCT01757418 -NCT01757431 -NCT01757444 -NCT01757769 -NCT01758094 -NCT01758211 -NCT01758497 -NCT01758549 -NCT01758614 -NCT01758692 -NCT01758718 -NCT01758874 -NCT01759095 -NCT01759108 -NCT01759134 -NCT01759186 -NCT01759225 -NCT01759472 -NCT01759615 -NCT01759654 -NCT01759758 -NCT01759849 -NCT01759914 -NCT01760226 -NCT01760421 -NCT01760642 -NCT01760655 -NCT01760668 -NCT01760798 -NCT01760915 -NCT01760980 -NCT01761201 -NCT01761305 -NCT01761331 -NCT01761435 -NCT01761539 -NCT01761604 -NCT01761630 -NCT01761825 -NCT01761838 -NCT01761864 -NCT01761955 -NCT01761981 -NCT01762189 -NCT01762215 -NCT01762540 -NCT01762722 -NCT01762982 -NCT01763034 -NCT01763047 -NCT01763164 -NCT01763320 -NCT01763489 -NCT01764061 -NCT01764074 -NCT01764139 -NCT01764412 -NCT01764503 -NCT01764815 -NCT01764867 -NCT01764919 -NCT01765088 -NCT01765179 -NCT01765192 -NCT01765348 -NCT01765387 -NCT01765439 -NCT01765465 -NCT01765764 -NCT01765894 -NCT01765920 -NCT01766037 -NCT01766115 -NCT01766141 -NCT01766180 -NCT01766206 -NCT01766284 -NCT01766297 -NCT01766700 -NCT01766713 -NCT01766739 -NCT01766830 -NCT01766856 -NCT01767220 -NCT01767233 -NCT01767610 -NCT01767701 -NCT01767818 -NCT01767909 -NCT01767922 -NCT01767961 -NCT01768247 -NCT01768351 -NCT01768403 -NCT01768468 -NCT01768494 -NCT01768520 -NCT01768546 -NCT01768598 -NCT01768715 -NCT01768793 -NCT01768806 -NCT01768832 -NCT01768962 -NCT01768975 -NCT01769040 -NCT01769092 -NCT01769105 -NCT01769157 -NCT01769222 -NCT01769352 -NCT01769729 -NCT01769820 -NCT01770080 -NCT01770106 -NCT01770197 -NCT01770210 -NCT01770223 -NCT01770249 -NCT01770275 -NCT01770366 -NCT01770405 -NCT01770483 -NCT01770509 -NCT01770886 -NCT01770951 -NCT01770964 -NCT01771133 -NCT01771159 -NCT01771172 -NCT01771276 -NCT01771328 -NCT01771952 -NCT01772043 -NCT01772095 -NCT01772121 -NCT01772134 -NCT01772147 -NCT01772199 -NCT01772316 -NCT01772368 -NCT01772459 -NCT01772758 -NCT01772862 -NCT01772888 -NCT01772979 -NCT01773031 -NCT01773330 -NCT01773447 -NCT01773486 -NCT01773538 -NCT01773616 -NCT01773772 -NCT01773837 -NCT01774045 -NCT01774162 -NCT01774253 -NCT01774279 -NCT01774318 -NCT01774357 -NCT01774448 -NCT01774526 -NCT01774903 -NCT01774916 -NCT01775098 -NCT01775215 -NCT01775293 -NCT01775371 -NCT01775488 -NCT01775501 -NCT01775592 -NCT01775618 -NCT01775709 -NCT01775813 -NCT01775865 -NCT01775917 -NCT01775995 -NCT01776021 -NCT01776060 -NCT01776125 -NCT01776255 -NCT01776372 -NCT01776749 -NCT01776931 -NCT01777243 -NCT01777334 -NCT01777347 -NCT01777373 -NCT01777711 -NCT01777815 -NCT01777828 -NCT01777867 -NCT01777971 -NCT01778023 -NCT01778270 -NCT01778348 -NCT01778673 -NCT01778738 -NCT01778959 -NCT01779050 -NCT01779063 -NCT01779115 -NCT01779167 -NCT01779323 -NCT01779583 -NCT01779596 -NCT01779609 -NCT01779635 -NCT01779921 -NCT01779947 -NCT01780025 -NCT01780285 -NCT01780298 -NCT01780311 -NCT01780350 -NCT01780610 -NCT01780649 -NCT01780831 -NCT01780857 -NCT01780870 -NCT01780961 -NCT01781039 -NCT01781182 -NCT01781325 -NCT01781468 -NCT01781507 -NCT01781546 -NCT01781663 -NCT01781689 -NCT01781715 -NCT01781793 -NCT01781975 -NCT01782040 -NCT01782105 -NCT01782339 -NCT01782378 -NCT01782443 -NCT01782495 -NCT01782521 -NCT01782560 -NCT01782625 -NCT01782651 -NCT01782677 -NCT01782690 -NCT01782703 -NCT01782768 -NCT01782820 -NCT01783054 -NCT01783171 -NCT01783522 -NCT01783535 -NCT01783574 -NCT01783600 -NCT01783639 -NCT01783730 -NCT01783808 -NCT01784055 -NCT01784185 -NCT01784237 -NCT01784302 -NCT01784328 -NCT01784393 -NCT01784848 -NCT01784874 -NCT01784939 -NCT01784952 -NCT01785173 -NCT01785186 -NCT01785368 -NCT01785394 -NCT01785420 -NCT01785459 -NCT01785511 -NCT01785550 -NCT01785563 -NCT01785589 -NCT01785602 -NCT01785641 -NCT01785680 -NCT01785706 -NCT01785719 -NCT01785758 -NCT01785940 -NCT01785979 -NCT01786018 -NCT01786109 -NCT01786135 -NCT01786174 -NCT01786200 -NCT01786252 -NCT01786278 -NCT01786473 -NCT01786512 -NCT01786590 -NCT01786603 -NCT01786720 -NCT01786746 -NCT01786837 -NCT01786902 -NCT01786928 -NCT01787084 -NCT01787097 -NCT01787175 -NCT01787188 -NCT01787500 -NCT01787552 -NCT01787591 -NCT01787604 -NCT01787760 -NCT01788020 -NCT01788085 -NCT01788098 -NCT01788111 -NCT01788176 -NCT01788215 -NCT01788579 -NCT01788735 -NCT01788748 -NCT01788813 -NCT01788878 -NCT01789008 -NCT01789255 -NCT01789268 -NCT01789567 -NCT01789658 -NCT01789775 -NCT01789788 -NCT01789840 -NCT01789866 -NCT01790022 -NCT01790074 -NCT01790087 -NCT01790269 -NCT01790282 -NCT01790685 -NCT01790776 -NCT01790919 -NCT01791153 -NCT01791335 -NCT01791452 -NCT01791478 -NCT01791608 -NCT01791634 -NCT01791660 -NCT01791816 -NCT01791842 -NCT01791933 -NCT01791946 -NCT01791985 -NCT01791998 -NCT01792245 -NCT01792336 -NCT01792362 -NCT01792427 -NCT01792466 -NCT01792739 -NCT01792778 -NCT01792791 -NCT01792817 -NCT01792830 -NCT01792947 -NCT01792973 -NCT01793064 -NCT01793168 -NCT01793272 -NCT01793493 -NCT01793519 -NCT01793532 -NCT01793649 -NCT01793883 -NCT01793922 -NCT01793948 -NCT01793987 -NCT01794026 -NCT01794117 -NCT01794585 -NCT01794624 -NCT01794819 -NCT01794845 -NCT01795014 -NCT01795131 -NCT01795443 -NCT01795456 -NCT01795573 -NCT01795794 -NCT01795898 -NCT01796041 -NCT01796184 -NCT01796301 -NCT01796314 -NCT01796353 -NCT01796444 -NCT01796548 -NCT01796652 -NCT01796665 -NCT01796808 -NCT01796860 -NCT01797016 -NCT01797055 -NCT01797068 -NCT01797289 -NCT01797484 -NCT01797575 -NCT01797627 -NCT01797718 -NCT01797848 -NCT01798173 -NCT01798212 -NCT01798277 -NCT01798316 -NCT01798368 -NCT01798628 -NCT01798641 -NCT01798706 -NCT01798823 -NCT01798875 -NCT01798914 -NCT01798953 -NCT01799018 -NCT01799070 -NCT01799109 -NCT01799213 -NCT01799317 -NCT01799408 -NCT01799902 -NCT01799915 -NCT01800149 -NCT01800162 -NCT01800188 -NCT01800305 -NCT01800487 -NCT01800500 -NCT01800526 -NCT01800552 -NCT01800565 -NCT01800591 -NCT01800604 -NCT01800617 -NCT01800799 -NCT01800981 -NCT01800994 -NCT01801449 -NCT01801475 -NCT01801553 -NCT01801670 -NCT01801735 -NCT01801761 -NCT01801826 -NCT01801839 -NCT01802060 -NCT01802190 -NCT01802398 -NCT01802463 -NCT01802723 -NCT01803113 -NCT01803256 -NCT01803334 -NCT01803386 -NCT01803607 -NCT01803646 -NCT01803685 -NCT01803906 -NCT01803919 -NCT01803997 -NCT01804036 -NCT01804140 -NCT01804231 -NCT01804309 -NCT01804426 -NCT01804478 -NCT01804517 -NCT01804543 -NCT01804634 -NCT01804647 -NCT01804751 -NCT01804790 -NCT01804946 -NCT01805557 -NCT01805596 -NCT01805817 -NCT01805882 -NCT01806025 -NCT01806207 -NCT01806272 -NCT01806324 -NCT01806506 -NCT01806792 -NCT01806857 -NCT01806961 -NCT01807065 -NCT01807286 -NCT01807325 -NCT01807429 -NCT01807533 -NCT01807559 -NCT01807598 -NCT01807637 -NCT01807832 -NCT01807936 -NCT01808131 -NCT01808183 -NCT01808248 -NCT01808417 -NCT01808508 -NCT01808638 -NCT01808742 -NCT01808755 -NCT01808885 -NCT01809132 -NCT01809262 -NCT01809301 -NCT01809496 -NCT01809730 -NCT01809808 -NCT01810068 -NCT01810081 -NCT01810237 -NCT01810302 -NCT01810432 -NCT01810666 -NCT01810692 -NCT01810705 -NCT01810809 -NCT01810835 -NCT01810848 -NCT01810939 -NCT01810952 -NCT01810965 -NCT01811069 -NCT01811147 -NCT01811212 -NCT01811264 -NCT01811459 -NCT01811537 -NCT01811563 -NCT01811654 -NCT01811706 -NCT01811771 -NCT01811823 -NCT01811992 -NCT01812070 -NCT01812109 -NCT01812161 -NCT01812278 -NCT01812304 -NCT01812395 -NCT01812447 -NCT01812460 -NCT01812551 -NCT01812694 -NCT01812876 -NCT01812928 -NCT01813006 -NCT01813058 -NCT01813071 -NCT01813084 -NCT01813097 -NCT01813162 -NCT01813396 -NCT01813409 -NCT01813630 -NCT01813825 -NCT01813916 -NCT01813929 -NCT01814033 -NCT01814046 -NCT01814111 -NCT01814228 -NCT01814345 -NCT01814631 -NCT01814982 -NCT01815021 -NCT01815086 -NCT01815112 -NCT01815190 -NCT01815281 -NCT01815424 -NCT01815476 -NCT01815645 -NCT01815697 -NCT01815710 -NCT01815775 -NCT01815827 -NCT01815905 -NCT01815918 -NCT01815970 -NCT01816295 -NCT01816334 -NCT01816490 -NCT01816516 -NCT01816555 -NCT01816711 -NCT01816815 -NCT01816919 -NCT01816932 -NCT01817296 -NCT01817322 -NCT01817400 -NCT01817686 -NCT01817738 -NCT01817764 -NCT01817868 -NCT01817894 -NCT01817907 -NCT01818050 -NCT01818089 -NCT01818180 -NCT01818206 -NCT01818336 -NCT01818349 -NCT01818479 -NCT01818505 -NCT01818557 -NCT01818739 -NCT01818804 -NCT01818999 -NCT01819077 -NCT01819220 -NCT01819272 -NCT01819363 -NCT01819376 -NCT01819389 -NCT01819441 -NCT01819519 -NCT01819701 -NCT01819714 -NCT01819844 -NCT01819987 -NCT01820117 -NCT01820416 -NCT01820546 -NCT01820793 -NCT01820871 -NCT01821001 -NCT01821040 -NCT01821196 -NCT01821586 -NCT01821638 -NCT01821768 -NCT01821911 -NCT01822106 -NCT01822119 -NCT01822158 -NCT01822275 -NCT01822301 -NCT01822379 -NCT01822522 -NCT01822561 -NCT01822665 -NCT01822795 -NCT01822808 -NCT01822860 -NCT01822873 -NCT01822899 -NCT01822977 -NCT01823224 -NCT01823250 -NCT01823393 -NCT01823432 -NCT01823783 -NCT01823848 -NCT01823939 -NCT01823952 -NCT01823965 -NCT01824108 -NCT01824186 -NCT01824368 -NCT01824420 -NCT01824459 -NCT01824537 -NCT01824654 -NCT01824875 -NCT01824901 -NCT01824940 -NCT01824966 -NCT01824992 -NCT01825187 -NCT01825239 -NCT01825330 -NCT01825408 -NCT01825421 -NCT01825434 -NCT01825538 -NCT01825642 -NCT01825785 -NCT01825863 -NCT01825967 -NCT01826071 -NCT01826201 -NCT01826266 -NCT01826279 -NCT01826474 -NCT01826487 -NCT01826513 -NCT01826617 -NCT01826682 -NCT01826708 -NCT01826851 -NCT01827046 -NCT01827150 -NCT01827371 -NCT01827436 -NCT01827462 -NCT01827592 -NCT01827904 -NCT01828073 -NCT01828125 -NCT01828138 -NCT01828177 -NCT01828216 -NCT01828255 -NCT01828294 -NCT01828333 -NCT01828645 -NCT01828684 -NCT01828723 -NCT01829074 -NCT01829139 -NCT01829191 -NCT01829386 -NCT01829399 -NCT01829737 -NCT01829906 -NCT01830283 -NCT01830387 -NCT01830452 -NCT01830751 -NCT01830894 -NCT01831011 -NCT01831037 -NCT01831115 -NCT01831180 -NCT01831297 -NCT01831388 -NCT01831739 -NCT01831882 -NCT01831960 -NCT01832233 -NCT01832246 -NCT01832259 -NCT01832311 -NCT01832402 -NCT01832623 -NCT01832636 -NCT01832753 -NCT01832766 -NCT01832805 -NCT01832935 -NCT01832961 -NCT01832987 -NCT01833026 -NCT01833065 -NCT01833091 -NCT01833325 -NCT01833390 -NCT01833533 -NCT01833676 -NCT01833858 -NCT01834001 -NCT01834027 -NCT01834079 -NCT01834300 -NCT01834898 -NCT01835054 -NCT01835067 -NCT01835145 -NCT01835158 -NCT01835379 -NCT01835483 -NCT01835496 -NCT01835522 -NCT01835561 -NCT01835756 -NCT01835860 -NCT01835873 -NCT01835964 -NCT01836055 -NCT01836107 -NCT01836172 -NCT01836211 -NCT01836354 -NCT01836393 -NCT01836679 -NCT01836822 -NCT01836926 -NCT01837017 -NCT01837160 -NCT01837199 -NCT01837290 -NCT01837303 -NCT01837316 -NCT01837342 -NCT01837407 -NCT01837459 -NCT01837524 -NCT01837745 -NCT01837784 -NCT01837862 -NCT01837927 -NCT01837979 -NCT01838057 -NCT01838122 -NCT01838252 -NCT01838343 -NCT01838356 -NCT01838447 -NCT01838460 -NCT01838551 -NCT01838642 -NCT01838655 -NCT01838668 -NCT01839110 -NCT01839175 -NCT01839188 -NCT01839331 -NCT01839370 -NCT01839383 -NCT01839448 -NCT01839461 -NCT01839682 -NCT01839851 -NCT01839942 -NCT01840111 -NCT01840189 -NCT01840306 -NCT01840449 -NCT01840618 -NCT01840670 -NCT01840852 -NCT01841372 -NCT01841515 -NCT01841528 -NCT01841541 -NCT01841554 -NCT01841723 -NCT01841736 -NCT01841775 -NCT01841814 -NCT01841827 -NCT01841840 -NCT01841957 -NCT01842035 -NCT01842048 -NCT01842113 -NCT01842139 -NCT01842230 -NCT01842256 -NCT01842308 -NCT01842347 -NCT01842373 -NCT01842399 -NCT01842425 -NCT01842490 -NCT01842542 -NCT01842581 -NCT01842633 -NCT01842724 -NCT01842737 -NCT01843439 -NCT01843478 -NCT01843582 -NCT01843660 -NCT01843803 -NCT01843816 -NCT01844180 -NCT01844271 -NCT01844440 -NCT01844609 -NCT01844622 -NCT01844856 -NCT01844934 -NCT01845025 -NCT01845090 -NCT01845285 -NCT01845376 -NCT01845441 -NCT01845454 -NCT01845493 -NCT01845506 -NCT01845532 -NCT01845662 -NCT01845727 -NCT01845805 -NCT01845831 -NCT01845883 -NCT01845922 -NCT01845935 -NCT01846130 -NCT01846182 -NCT01846221 -NCT01846234 -NCT01846286 -NCT01846442 -NCT01846468 -NCT01846507 -NCT01846533 -NCT01846676 -NCT01846689 -NCT01846793 -NCT01846806 -NCT01846819 -NCT01846832 -NCT01847027 -NCT01847157 -NCT01847235 -NCT01847300 -NCT01847352 -NCT01847378 -NCT01847573 -NCT01847651 -NCT01847690 -NCT01847937 -NCT01848015 -NCT01848041 -NCT01848171 -NCT01848197 -NCT01848353 -NCT01848600 -NCT01848782 -NCT01848925 -NCT01848990 -NCT01849016 -NCT01849055 -NCT01849159 -NCT01849250 -NCT01849302 -NCT01849406 -NCT01849445 -NCT01849484 -NCT01849536 -NCT01849627 -NCT01849770 -NCT01849796 -NCT01849952 -NCT01850030 -NCT01850095 -NCT01850108 -NCT01850498 -NCT01850628 -NCT01850693 -NCT01850745 -NCT01850758 -NCT01850771 -NCT01850797 -NCT01850836 -NCT01850979 -NCT01851044 -NCT01851226 -NCT01851252 -NCT01851278 -NCT01851499 -NCT01851577 -NCT01851681 -NCT01852006 -NCT01852045 -NCT01852266 -NCT01852448 -NCT01852578 -NCT01852591 -NCT01852708 -NCT01852786 -NCT01852799 -NCT01852968 -NCT01853098 -NCT01853293 -NCT01853579 -NCT01853631 -NCT01853644 -NCT01853748 -NCT01853787 -NCT01853800 -NCT01854047 -NCT01854268 -NCT01854294 -NCT01854372 -NCT01854385 -NCT01854515 -NCT01854528 -NCT01854580 -NCT01854723 -NCT01854970 -NCT01855126 -NCT01855165 -NCT01855178 -NCT01855243 -NCT01855308 -NCT01855334 -NCT01855360 -NCT01855503 -NCT01855516 -NCT01855568 -NCT01855672 -NCT01855841 -NCT01855880 -NCT01855932 -NCT01855958 -NCT01855971 -NCT01856036 -NCT01856101 -NCT01856114 -NCT01856140 -NCT01856192 -NCT01856205 -NCT01856270 -NCT01856361 -NCT01856426 -NCT01856621 -NCT01856686 -NCT01856699 -NCT01856751 -NCT01856777 -NCT01856868 -NCT01856920 -NCT01856972 -NCT01857102 -NCT01857310 -NCT01857401 -NCT01857440 -NCT01857505 -NCT01857570 -NCT01857661 -NCT01857713 -NCT01857778 -NCT01857947 -NCT01857999 -NCT01858129 -NCT01858168 -NCT01858558 -NCT01858766 -NCT01858935 -NCT01858961 -NCT01859130 -NCT01859182 -NCT01859234 -NCT01859286 -NCT01859312 -NCT01859507 -NCT01859663 -NCT01859819 -NCT01859949 -NCT01860027 -NCT01860222 -NCT01860482 -NCT01860534 -NCT01860612 -NCT01860833 -NCT01860963 -NCT01861067 -NCT01861431 -NCT01861639 -NCT01861652 -NCT01861704 -NCT01861717 -NCT01861977 -NCT01861990 -NCT01862068 -NCT01862159 -NCT01862237 -NCT01862341 -NCT01862380 -NCT01862510 -NCT01862536 -NCT01862640 -NCT01862744 -NCT01862770 -NCT01862809 -NCT01862900 -NCT01862978 -NCT01863017 -NCT01863095 -NCT01863173 -NCT01863264 -NCT01863381 -NCT01863628 -NCT01863758 -NCT01863914 -NCT01864070 -NCT01864135 -NCT01864382 -NCT01864408 -NCT01864434 -NCT01864473 -NCT01864486 -NCT01864525 -NCT01864564 -NCT01864655 -NCT01864733 -NCT01864876 -NCT01864941 -NCT01865084 -NCT01865227 -NCT01865279 -NCT01865292 -NCT01865305 -NCT01865448 -NCT01865500 -NCT01865539 -NCT01865656 -NCT01865903 -NCT01865929 -NCT01865955 -NCT01866111 -NCT01866527 -NCT01866774 -NCT01866995 -NCT01867008 -NCT01867294 -NCT01867346 -NCT01867359 -NCT01867424 -NCT01867437 -NCT01867502 -NCT01867515 -NCT01867554 -NCT01867645 -NCT01867749 -NCT01867931 -NCT01867944 -NCT01868009 -NCT01868204 -NCT01868230 -NCT01868334 -NCT01868373 -NCT01868438 -NCT01868542 -NCT01868581 -NCT01868880 -NCT01868932 -NCT01869192 -NCT01869478 -NCT01869491 -NCT01869699 -NCT01869751 -NCT01870050 -NCT01870310 -NCT01870492 -NCT01870661 -NCT01870700 -NCT01870830 -NCT01870895 -NCT01870960 -NCT01871038 -NCT01871779 -NCT01871896 -NCT01872078 -NCT01872273 -NCT01872351 -NCT01872481 -NCT01872572 -NCT01872585 -NCT01872884 -NCT01872897 -NCT01872949 -NCT01872975 -NCT01872988 -NCT01873014 -NCT01873066 -NCT01873287 -NCT01873417 -NCT01873664 -NCT01873690 -NCT01873872 -NCT01874028 -NCT01874067 -NCT01874132 -NCT01874223 -NCT01874275 -NCT01874288 -NCT01874301 -NCT01874418 -NCT01874483 -NCT01874535 -NCT01874548 -NCT01874561 -NCT01874808 -NCT01874860 -NCT01875042 -NCT01875133 -NCT01875198 -NCT01875341 -NCT01875458 -NCT01875510 -NCT01875523 -NCT01875640 -NCT01875744 -NCT01875926 -NCT01876004 -NCT01876121 -NCT01876147 -NCT01876290 -NCT01876342 -NCT01876420 -NCT01876511 -NCT01876550 -NCT01876706 -NCT01876784 -NCT01877083 -NCT01877122 -NCT01877174 -NCT01877278 -NCT01877317 -NCT01877590 -NCT01877616 -NCT01877681 -NCT01877694 -NCT01877707 -NCT01877863 -NCT01878019 -NCT01878032 -NCT01878136 -NCT01878175 -NCT01878370 -NCT01878604 -NCT01878799 -NCT01878955 -NCT01879241 -NCT01879293 -NCT01879397 -NCT01879410 -NCT01879475 -NCT01879501 -NCT01879592 -NCT01879618 -NCT01879787 -NCT01879969 -NCT01880086 -NCT01880151 -NCT01880281 -NCT01880320 -NCT01880463 -NCT01880515 -NCT01880580 -NCT01880632 -NCT01880645 -NCT01880710 -NCT01880892 -NCT01880970 -NCT01881126 -NCT01881295 -NCT01881399 -NCT01881542 -NCT01881607 -NCT01881789 -NCT01881867 -NCT01882088 -NCT01882153 -NCT01882205 -NCT01882283 -NCT01882478 -NCT01882712 -NCT01882855 -NCT01882894 -NCT01883024 -NCT01883115 -NCT01883245 -NCT01883271 -NCT01883349 -NCT01883375 -NCT01883427 -NCT01883609 -NCT01883726 -NCT01883778 -NCT01883869 -NCT01884168 -NCT01884467 -NCT01884571 -NCT01884649 -NCT01884844 -NCT01884870 -NCT01884922 -NCT01884935 -NCT01885000 -NCT01885104 -NCT01885156 -NCT01885182 -NCT01885273 -NCT01885650 -NCT01885689 -NCT01886027 -NCT01886131 -NCT01886222 -NCT01886248 -NCT01886313 -NCT01886391 -NCT01886508 -NCT01886521 -NCT01886573 -NCT01886846 -NCT01886859 -NCT01886872 -NCT01886898 -NCT01886937 -NCT01887002 -NCT01887067 -NCT01887119 -NCT01887132 -NCT01887301 -NCT01887327 -NCT01887418 -NCT01887431 -NCT01887678 -NCT01887912 -NCT01888120 -NCT01888133 -NCT01888562 -NCT01888614 -NCT01888705 -NCT01888822 -NCT01888835 -NCT01888900 -NCT01888939 -NCT01888991 -NCT01889056 -NCT01889186 -NCT01889199 -NCT01889264 -NCT01889368 -NCT01889641 -NCT01889719 -NCT01889849 -NCT01889888 -NCT01890161 -NCT01890200 -NCT01890525 -NCT01890538 -NCT01890616 -NCT01890694 -NCT01890759 -NCT01890837 -NCT01890954 -NCT01891084 -NCT01891149 -NCT01891305 -NCT01891487 -NCT01891630 -NCT01891682 -NCT01891773 -NCT01891838 -NCT01891851 -NCT01891890 -NCT01891903 -NCT01892007 -NCT01892111 -NCT01892176 -NCT01892215 -NCT01892241 -NCT01892254 -NCT01892488 -NCT01892501 -NCT01892553 -NCT01892579 -NCT01892644 -NCT01892709 -NCT01892904 -NCT01892930 -NCT01892982 -NCT01893047 -NCT01893216 -NCT01893281 -NCT01893476 -NCT01893554 -NCT01893606 -NCT01893775 -NCT01893918 -NCT01894269 -NCT01894282 -NCT01894308 -NCT01894321 -NCT01894763 -NCT01894958 -NCT01895192 -NCT01895361 -NCT01895400 -NCT01895478 -NCT01895647 -NCT01895725 -NCT01895790 -NCT01895803 -NCT01895816 -NCT01895959 -NCT01896076 -NCT01896167 -NCT01896245 -NCT01896271 -NCT01896414 -NCT01896557 -NCT01896973 -NCT01897181 -NCT01897259 -NCT01897402 -NCT01897441 -NCT01897571 -NCT01897623 -NCT01898351 -NCT01898572 -NCT01898637 -NCT01898936 -NCT01899105 -NCT01899183 -NCT01899209 -NCT01899222 -NCT01899300 -NCT01899339 -NCT01899508 -NCT01899573 -NCT01899599 -NCT01899703 -NCT01899742 -NCT01899833 -NCT01899950 -NCT01899976 -NCT01900132 -NCT01900327 -NCT01900392 -NCT01900470 -NCT01900548 -NCT01900626 -NCT01900665 -NCT01900847 -NCT01900860 -NCT01900925 -NCT01901029 -NCT01901094 -NCT01901146 -NCT01901224 -NCT01901666 -NCT01901861 -NCT01901874 -NCT01901991 -NCT01902017 -NCT01902030 -NCT01902264 -NCT01902407 -NCT01902420 -NCT01902511 -NCT01902914 -NCT01902940 -NCT01902953 -NCT01903135 -NCT01903148 -NCT01903239 -NCT01903278 -NCT01903317 -NCT01903564 -NCT01903746 -NCT01903811 -NCT01904006 -NCT01904162 -NCT01904188 -NCT01904396 -NCT01904474 -NCT01904604 -NCT01904734 -NCT01904786 -NCT01904864 -NCT01905007 -NCT01905072 -NCT01905085 -NCT01905202 -NCT01905228 -NCT01905254 -NCT01905358 -NCT01905410 -NCT01905488 -NCT01905709 -NCT01905748 -NCT01905800 -NCT01905839 -NCT01905852 -NCT01905865 -NCT01905956 -NCT01905995 -NCT01906099 -NCT01906190 -NCT01906372 -NCT01906411 -NCT01906554 -NCT01906567 -NCT01906658 -NCT01906775 -NCT01906944 -NCT01906996 -NCT01907269 -NCT01907321 -NCT01907334 -NCT01907425 -NCT01907438 -NCT01907464 -NCT01907737 -NCT01907880 -NCT01907893 -NCT01908335 -NCT01908400 -NCT01908543 -NCT01908868 -NCT01908933 -NCT01909245 -NCT01909284 -NCT01909336 -NCT01909505 -NCT01909531 -NCT01909609 -NCT01909648 -NCT01909791 -NCT01909804 -NCT01909960 -NCT01910038 -NCT01910064 -NCT01910129 -NCT01910233 -NCT01910584 -NCT01910792 -NCT01911260 -NCT01911351 -NCT01911455 -NCT01911689 -NCT01911702 -NCT01911806 -NCT01911819 -NCT01911975 -NCT01912001 -NCT01912066 -NCT01912209 -NCT01912261 -NCT01912313 -NCT01912326 -NCT01912339 -NCT01912430 -NCT01912560 -NCT01912677 -NCT01912690 -NCT01913054 -NCT01913132 -NCT01913223 -NCT01913262 -NCT01913275 -NCT01913366 -NCT01913405 -NCT01913561 -NCT01913574 -NCT01913613 -NCT01913782 -NCT01913860 -NCT01914016 -NCT01914029 -NCT01914172 -NCT01914718 -NCT01914757 -NCT01914770 -NCT01915004 -NCT01915173 -NCT01915303 -NCT01915368 -NCT01915381 -NCT01915420 -NCT01915511 -NCT01915745 -NCT01915940 -NCT01916005 -NCT01916018 -NCT01916070 -NCT01916109 -NCT01916304 -NCT01916356 -NCT01916421 -NCT01916655 -NCT01916772 -NCT01916824 -NCT01916850 -NCT01916967 -NCT01917019 -NCT01917084 -NCT01917110 -NCT01917331 -NCT01917474 -NCT01917500 -NCT01917539 -NCT01917708 -NCT01917773 -NCT01918098 -NCT01918280 -NCT01918332 -NCT01918384 -NCT01918410 -NCT01918631 -NCT01918917 -NCT01919151 -NCT01919164 -NCT01919294 -NCT01919359 -NCT01919476 -NCT01919489 -NCT01919736 -NCT01919762 -NCT01919788 -NCT01919801 -NCT01919840 -NCT01920087 -NCT01920139 -NCT01920204 -NCT01920269 -NCT01920321 -NCT01920373 -NCT01920451 -NCT01920477 -NCT01920529 -NCT01920633 -NCT01920698 -NCT01920750 -NCT01920815 -NCT01920880 -NCT01920906 -NCT01921023 -NCT01921218 -NCT01921244 -NCT01921452 -NCT01921504 -NCT01921517 -NCT01921569 -NCT01921686 -NCT01921816 -NCT01921855 -NCT01921972 -NCT01922011 -NCT01922089 -NCT01922180 -NCT01922258 -NCT01922596 -NCT01922674 -NCT01922700 -NCT01922882 -NCT01922895 -NCT01922986 -NCT01922999 -NCT01923051 -NCT01923077 -NCT01923103 -NCT01923129 -NCT01923168 -NCT01923194 -NCT01923376 -NCT01923571 -NCT01923675 -NCT01923701 -NCT01923753 -NCT01924000 -NCT01924091 -NCT01924104 -NCT01924117 -NCT01924208 -NCT01924312 -NCT01924390 -NCT01924455 -NCT01924572 -NCT01924806 -NCT01924884 -NCT01924988 -NCT01925001 -NCT01925014 -NCT01925053 -NCT01925092 -NCT01925131 -NCT01925261 -NCT01925287 -NCT01925378 -NCT01925391 -NCT01925482 -NCT01925495 -NCT01925547 -NCT01925638 -NCT01925703 -NCT01925742 -NCT01925833 -NCT01925872 -NCT01925976 -NCT01926249 -NCT01926327 -NCT01926600 -NCT01926808 -NCT01927094 -NCT01927133 -NCT01927146 -NCT01927198 -NCT01927432 -NCT01927445 -NCT01927458 -NCT01927471 -NCT01927536 -NCT01927653 -NCT01927692 -NCT01927757 -NCT01927809 -NCT01927835 -NCT01927861 -NCT01927939 -NCT01928368 -NCT01928381 -NCT01928433 -NCT01928472 -NCT01928589 -NCT01928641 -NCT01928719 -NCT01928758 -NCT01928784 -NCT01928888 -NCT01929057 -NCT01929239 -NCT01929395 -NCT01929538 -NCT01929850 -NCT01929954 -NCT01929993 -NCT01930032 -NCT01930396 -NCT01930513 -NCT01930643 -NCT01930708 -NCT01930747 -NCT01930799 -NCT01930916 -NCT01930929 -NCT01931046 -NCT01931319 -NCT01931449 -NCT01931540 -NCT01931605 -NCT01931644 -NCT01931696 -NCT01931826 -NCT01931956 -NCT01931969 -NCT01932047 -NCT01932164 -NCT01932190 -NCT01932450 -NCT01932463 -NCT01932554 -NCT01932580 -NCT01932671 -NCT01932723 -NCT01932736 -NCT01932788 -NCT01932931 -NCT01933022 -NCT01933373 -NCT01933464 -NCT01933516 -NCT01933555 -NCT01933607 -NCT01933841 -NCT01933984 -NCT01934023 -NCT01934270 -NCT01934283 -NCT01934322 -NCT01934504 -NCT01934660 -NCT01934673 -NCT01934829 -NCT01934959 -NCT01934998 -NCT01935050 -NCT01935063 -NCT01935232 -NCT01935258 -NCT01935401 -NCT01935427 -NCT01935752 -NCT01935765 -NCT01935817 -NCT01935843 -NCT01936077 -NCT01936129 -NCT01936155 -NCT01936207 -NCT01936298 -NCT01936350 -NCT01936571 -NCT01936584 -NCT01936818 -NCT01936922 -NCT01937455 -NCT01937468 -NCT01937624 -NCT01937663 -NCT01937676 -NCT01937728 -NCT01937910 -NCT01938196 -NCT01938430 -NCT01938781 -NCT01938820 -NCT01938924 -NCT01938950 -NCT01938989 -NCT01939184 -NCT01939236 -NCT01939327 -NCT01939431 -NCT01939496 -NCT01939561 -NCT01939834 -NCT01940081 -NCT01940094 -NCT01940120 -NCT01940328 -NCT01940393 -NCT01940406 -NCT01940510 -NCT01940666 -NCT01940718 -NCT01940744 -NCT01940809 -NCT01940835 -NCT01941108 -NCT01941459 -NCT01941537 -NCT01941784 -NCT01942018 -NCT01942122 -NCT01942265 -NCT01942395 -NCT01942434 -NCT01942447 -NCT01942486 -NCT01942564 -NCT01942577 -NCT01942733 -NCT01942746 -NCT01942941 -NCT01943162 -NCT01943279 -NCT01943318 -NCT01943448 -NCT01943513 -NCT01943526 -NCT01943617 -NCT01943721 -NCT01943799 -NCT01943929 -NCT01944020 -NCT01944176 -NCT01944228 -NCT01944306 -NCT01944384 -NCT01944475 -NCT01944501 -NCT01944696 -NCT01944787 -NCT01944878 -NCT01944904 -NCT01944969 -NCT01945008 -NCT01945034 -NCT01945060 -NCT01945125 -NCT01945164 -NCT01945177 -NCT01945528 -NCT01945567 -NCT01945593 -NCT01946126 -NCT01946165 -NCT01946438 -NCT01946724 -NCT01946750 -NCT01946776 -NCT01946828 -NCT01946880 -NCT01946984 -NCT01947023 -NCT01947140 -NCT01947556 -NCT01947582 -NCT01948076 -NCT01948141 -NCT01948388 -NCT01948453 -NCT01948518 -NCT01948544 -NCT01948778 -NCT01949051 -NCT01949090 -NCT01949168 -NCT01949233 -NCT01949246 -NCT01949337 -NCT01949467 -NCT01949493 -NCT01949532 -NCT01949675 -NCT01949727 -NCT01949987 -NCT01950039 -NCT01950065 -NCT01950169 -NCT01950260 -NCT01950286 -NCT01950338 -NCT01950377 -NCT01950429 -NCT01950624 -NCT01950741 -NCT01950806 -NCT01950871 -NCT01950936 -NCT01950975 -NCT01951040 -NCT01951066 -NCT01951079 -NCT01951105 -NCT01951287 -NCT01951378 -NCT01951391 -NCT01951859 -NCT01952054 -NCT01952080 -NCT01952275 -NCT01952327 -NCT01952379 -NCT01952431 -NCT01952470 -NCT01952613 -NCT01952678 -NCT01952834 -NCT01952886 -NCT01952912 -NCT01953172 -NCT01953198 -NCT01953289 -NCT01953458 -NCT01953588 -NCT01953679 -NCT01954082 -NCT01954121 -NCT01954199 -NCT01954225 -NCT01954303 -NCT01954446 -NCT01954524 -NCT01954550 -NCT01954615 -NCT01954628 -NCT01954667 -NCT01954875 -NCT01954940 -NCT01955005 -NCT01955018 -NCT01955057 -NCT01955174 -NCT01955317 -NCT01955369 -NCT01955382 -NCT01955460 -NCT01955486 -NCT01955499 -NCT01955681 -NCT01955707 -NCT01955746 -NCT01955811 -NCT01956266 -NCT01956500 -NCT01956669 -NCT01956877 -NCT01956955 -NCT01957020 -NCT01957059 -NCT01957150 -NCT01957163 -NCT01957319 -NCT01957345 -NCT01957501 -NCT01957527 -NCT01957618 -NCT01957761 -NCT01957774 -NCT01957813 -NCT01958073 -NCT01958125 -NCT01958268 -NCT01958281 -NCT01958294 -NCT01958463 -NCT01958476 -NCT01958736 -NCT01958749 -NCT01958931 -NCT01959048 -NCT01959139 -NCT01959152 -NCT01959204 -NCT01959256 -NCT01959412 -NCT01959464 -NCT01959581 -NCT01959698 -NCT01959841 -NCT01959919 -NCT01960101 -NCT01960452 -NCT01960478 -NCT01960530 -NCT01960777 -NCT01960803 -NCT01961115 -NCT01961154 -NCT01961219 -NCT01961258 -NCT01961271 -NCT01961284 -NCT01961466 -NCT01961557 -NCT01961570 -NCT01961726 -NCT01961804 -NCT01961908 -NCT01961973 -NCT01962129 -NCT01962246 -NCT01962441 -NCT01962467 -NCT01962480 -NCT01962532 -NCT01962610 -NCT01962779 -NCT01962883 -NCT01963039 -NCT01963312 -NCT01963390 -NCT01963481 -NCT01963611 -NCT01963793 -NCT01963845 -NCT01963910 -NCT01964040 -NCT01964144 -NCT01964339 -NCT01964430 -NCT01964742 -NCT01964885 -NCT01964924 -NCT01965171 -NCT01965587 -NCT01965756 -NCT01965873 -NCT01965886 -NCT01965964 -NCT01966081 -NCT01966341 -NCT01966393 -NCT01966406 -NCT01966419 -NCT01966549 -NCT01966614 -NCT01966640 -NCT01966653 -NCT01966848 -NCT01966991 -NCT01967030 -NCT01967173 -NCT01967251 -NCT01967290 -NCT01967342 -NCT01967433 -NCT01967459 -NCT01967498 -NCT01967550 -NCT01967628 -NCT01967745 -NCT01967927 -NCT01968083 -NCT01968226 -NCT01968291 -NCT01968408 -NCT01968434 -NCT01968603 -NCT01968655 -NCT01968733 -NCT01969006 -NCT01969071 -NCT01969123 -NCT01969136 -NCT01969201 -NCT01969214 -NCT01969396 -NCT01969409 -NCT01969734 -NCT01969799 -NCT01969916 -NCT01970163 -NCT01970306 -NCT01970319 -NCT01970488 -NCT01970501 -NCT01970631 -NCT01970670 -NCT01970722 -NCT01970735 -NCT01970748 -NCT01970800 -NCT01970813 -NCT01970891 -NCT01970969 -NCT01971099 -NCT01971255 -NCT01971294 -NCT01971645 -NCT01971658 -NCT01971697 -NCT01971944 -NCT01971957 -NCT01971983 -NCT01972347 -NCT01972477 -NCT01972594 -NCT01972620 -NCT01972802 -NCT01973179 -NCT01973387 -NCT01973465 -NCT01973647 -NCT01973751 -NCT01973855 -NCT01973985 -NCT01973998 -NCT01974011 -NCT01974024 -NCT01974089 -NCT01974102 -NCT01974167 -NCT01974180 -NCT01974284 -NCT01974297 -NCT01974466 -NCT01974726 -NCT01974791 -NCT01974908 -NCT01974947 -NCT01975038 -NCT01975090 -NCT01975194 -NCT01975259 -NCT01975376 -NCT01975389 -NCT01975545 -NCT01975571 -NCT01975727 -NCT01975909 -NCT01976091 -NCT01976117 -NCT01976273 -NCT01976351 -NCT01976364 -NCT01976416 -NCT01976429 -NCT01976741 -NCT01976936 -NCT01977001 -NCT01977196 -NCT01977313 -NCT01977417 -NCT01977456 -NCT01977833 -NCT01977898 -NCT01977937 -NCT01978080 -NCT01978119 -NCT01978145 -NCT01978158 -NCT01978262 -NCT01978444 -NCT01978470 -NCT01978834 -NCT01978899 -NCT01978938 -NCT01979042 -NCT01979250 -NCT01979328 -NCT01979419 -NCT01979471 -NCT01979588 -NCT01979718 -NCT01979861 -NCT01979952 -NCT01980199 -NCT01980238 -NCT01980303 -NCT01980407 -NCT01980433 -NCT01980498 -NCT01980680 -NCT01980693 -NCT01980745 -NCT01980797 -NCT01980888 -NCT01980940 -NCT01981135 -NCT01981265 -NCT01981369 -NCT01981525 -NCT01981590 -NCT01981655 -NCT01981733 -NCT01982136 -NCT01982149 -NCT01982214 -NCT01982292 -NCT01982331 -NCT01982422 -NCT01982448 -NCT01982604 -NCT01982695 -NCT01982747 -NCT01982760 -NCT01982929 -NCT01983072 -NCT01983397 -NCT01983514 -NCT01983683 -NCT01983943 -NCT01984593 -NCT01984619 -NCT01984710 -NCT01984775 -NCT01984866 -NCT01984996 -NCT01985126 -NCT01985256 -NCT01985633 -NCT01985646 -NCT01985867 -NCT01986205 -NCT01986322 -NCT01986465 -NCT01986660 -NCT01986686 -NCT01986972 -NCT01987063 -NCT01987076 -NCT01987128 -NCT01987245 -NCT01987609 -NCT01987622 -NCT01987635 -NCT01987804 -NCT01987869 -NCT01987895 -NCT01988090 -NCT01988181 -NCT01988194 -NCT01988376 -NCT01988402 -NCT01988428 -NCT01988623 -NCT01988753 -NCT01989221 -NCT01989299 -NCT01989325 -NCT01989507 -NCT01989533 -NCT01989585 -NCT01989624 -NCT01989689 -NCT01989923 -NCT01990274 -NCT01990287 -NCT01990313 -NCT01990339 -NCT01990365 -NCT01990404 -NCT01990612 -NCT01991041 -NCT01991197 -NCT01991223 -NCT01991314 -NCT01991392 -NCT01991405 -NCT01991457 -NCT01991548 -NCT01991925 -NCT01992016 -NCT01992146 -NCT01992159 -NCT01992198 -NCT01992328 -NCT01992380 -NCT01992536 -NCT01992562 -NCT01992575 -NCT01992627 -NCT01992666 -NCT01992718 -NCT01992783 -NCT01992796 -NCT01992809 -NCT01993290 -NCT01993342 -NCT01993394 -NCT01993498 -NCT01993654 -NCT01993693 -NCT01993719 -NCT01993836 -NCT01994044 -NCT01994187 -NCT01994200 -NCT01994330 -NCT01994343 -NCT01994382 -NCT01994395 -NCT01994434 -NCT01994460 -NCT01994538 -NCT01994564 -NCT01994577 -NCT01994642 -NCT01994889 -NCT01995019 -NCT01995071 -NCT01995266 -NCT01995370 -NCT01995500 -NCT01995591 -NCT01995695 -NCT01995734 -NCT01995812 -NCT01995851 -NCT01995929 -NCT01996007 -NCT01996124 -NCT01996267 -NCT01996345 -NCT01996449 -NCT01996527 -NCT01996683 -NCT01996930 -NCT01997047 -NCT01997229 -NCT01997255 -NCT01997476 -NCT01997489 -NCT01997554 -NCT01997580 -NCT01997658 -NCT01997866 -NCT01998334 -NCT01998633 -NCT01998724 -NCT01998737 -NCT01998841 -NCT01998880 -NCT01998893 -NCT01998958 -NCT01998971 -NCT01999075 -NCT01999166 -NCT01999231 -NCT01999270 -NCT01999335 -NCT01999387 -NCT01999556 -NCT01999595 -NCT01999803 -NCT01999907 -NCT02000414 -NCT02000427 -NCT02000635 -NCT02001051 -NCT02001324 -NCT02001415 -NCT02001441 -NCT02001454 -NCT02001688 -NCT02001701 -NCT02001948 -NCT02002000 -NCT02002065 -NCT02002143 -NCT02002234 -NCT02002260 -NCT02002286 -NCT02002299 -NCT02002468 -NCT02002572 -NCT02002663 -NCT02002793 -NCT02002871 -NCT02003209 -NCT02003521 -NCT02003586 -NCT02003651 -NCT02003742 -NCT02003963 -NCT02004275 -NCT02004366 -NCT02004431 -NCT02004470 -NCT02004535 -NCT02004561 -NCT02004925 -NCT02004964 -NCT02005029 -NCT02005042 -NCT02005068 -NCT02005172 -NCT02005380 -NCT02005562 -NCT02005666 -NCT02005705 -NCT02005822 -NCT02005874 -NCT02005900 -NCT02006056 -NCT02006290 -NCT02006303 -NCT02006342 -NCT02006368 -NCT02006420 -NCT02006615 -NCT02006940 -NCT02007083 -NCT02007226 -NCT02007291 -NCT02007330 -NCT02007473 -NCT02007564 -NCT02007850 -NCT02007967 -NCT02008045 -NCT02008084 -NCT02008214 -NCT02008305 -NCT02008344 -NCT02008617 -NCT02008721 -NCT02008799 -NCT02009319 -NCT02009345 -NCT02009462 -NCT02009722 -NCT02009787 -NCT02009969 -NCT02009982 -NCT02010047 -NCT02010125 -NCT02010138 -NCT02010164 -NCT02010177 -NCT02010268 -NCT02010385 -NCT02010398 -NCT02010671 -NCT02010697 -NCT02010710 -NCT02010814 -NCT02010840 -NCT02010853 -NCT02010918 -NCT02010970 -NCT02011048 -NCT02011126 -NCT02011191 -NCT02011204 -NCT02011243 -NCT02011308 -NCT02011360 -NCT02011464 -NCT02011542 -NCT02011620 -NCT02011698 -NCT02011776 -NCT02011789 -NCT02012023 -NCT02012049 -NCT02012088 -NCT02012101 -NCT02012127 -NCT02012231 -NCT02012413 -NCT02012426 -NCT02012465 -NCT02012491 -NCT02012582 -NCT02012634 -NCT02012647 -NCT02012673 -NCT02013076 -NCT02013479 -NCT02013700 -NCT02013999 -NCT02014025 -NCT02014246 -NCT02014311 -NCT02014389 -NCT02014467 -NCT02014571 -NCT02014597 -NCT02014649 -NCT02014688 -NCT02014831 -NCT02015091 -NCT02015195 -NCT02015468 -NCT02015572 -NCT02015858 -NCT02016118 -NCT02016170 -NCT02016222 -NCT02016248 -NCT02016560 -NCT02016586 -NCT02016716 -NCT02017275 -NCT02017327 -NCT02017574 -NCT02017587 -NCT02017782 -NCT02017795 -NCT02017808 -NCT02017912 -NCT02018003 -NCT02018068 -NCT02018172 -NCT02018432 -NCT02018497 -NCT02018653 -NCT02018705 -NCT02018835 -NCT02019017 -NCT02019355 -NCT02019446 -NCT02019641 -NCT02019680 -NCT02019706 -NCT02019784 -NCT02019888 -NCT02020018 -NCT02020096 -NCT02020174 -NCT02020278 -NCT02020369 -NCT02020499 -NCT02020642 -NCT02020655 -NCT02020681 -NCT02020785 -NCT02020889 -NCT02020941 -NCT02021019 -NCT02021032 -NCT02021097 -NCT02021253 -NCT02021474 -NCT02021617 -NCT02021643 -NCT02021656 -NCT02021695 -NCT02021721 -NCT02021747 -NCT02022137 -NCT02022384 -NCT02022566 -NCT02022644 -NCT02022670 -NCT02022826 -NCT02023203 -NCT02023229 -NCT02023424 -NCT02023476 -NCT02023489 -NCT02023554 -NCT02023671 -NCT02023762 -NCT02023801 -NCT02023931 -NCT02024113 -NCT02024217 -NCT02024256 -NCT02024269 -NCT02024282 -NCT02024347 -NCT02024360 -NCT02024386 -NCT02024399 -NCT02024425 -NCT02024451 -NCT02024529 -NCT02024555 -NCT02024568 -NCT02024685 -NCT02024789 -NCT02024906 -NCT02025049 -NCT02025088 -NCT02025179 -NCT02025270 -NCT02025465 -NCT02025504 -NCT02025543 -NCT02025699 -NCT02025751 -NCT02025777 -NCT02025790 -NCT02026115 -NCT02026154 -NCT02026258 -NCT02026310 -NCT02026349 -NCT02026427 -NCT02026479 -NCT02026596 -NCT02026609 -NCT02026726 -NCT02026869 -NCT02026908 -NCT02027077 -NCT02027207 -NCT02027220 -NCT02027298 -NCT02027350 -NCT02027610 -NCT02027623 -NCT02027779 -NCT02028013 -NCT02028052 -NCT02028065 -NCT02028286 -NCT02028351 -NCT02028429 -NCT02028468 -NCT02028572 -NCT02028637 -NCT02028858 -NCT02028910 -NCT02029053 -NCT02029144 -NCT02029183 -NCT02029352 -NCT02029443 -NCT02029456 -NCT02029690 -NCT02029781 -NCT02029859 -NCT02029911 -NCT02029937 -NCT02029950 -NCT02030223 -NCT02030249 -NCT02030314 -NCT02030392 -NCT02030418 -NCT02030457 -NCT02030756 -NCT02030951 -NCT02031029 -NCT02031120 -NCT02031172 -NCT02031263 -NCT02031328 -NCT02031393 -NCT02031484 -NCT02031523 -NCT02031588 -NCT02031614 -NCT02031640 -NCT02031653 -NCT02032251 -NCT02032277 -NCT02032576 -NCT02032693 -NCT02032745 -NCT02032888 -NCT02032979 -NCT02033096 -NCT02033200 -NCT02033408 -NCT02033473 -NCT02033642 -NCT02033720 -NCT02033811 -NCT02033876 -NCT02034279 -NCT02034344 -NCT02034435 -NCT02034487 -NCT02034513 -NCT02034903 -NCT02035033 -NCT02035293 -NCT02035319 -NCT02035332 -NCT02035345 -NCT02035423 -NCT02035514 -NCT02035670 -NCT02035774 -NCT02035904 -NCT02035930 -NCT02035982 -NCT02036086 -NCT02036177 -NCT02036203 -NCT02036463 -NCT02036528 -NCT02036580 -NCT02036710 -NCT02036866 -NCT02036944 -NCT02036957 -NCT02037035 -NCT02037048 -NCT02037217 -NCT02037347 -NCT02037438 -NCT02037451 -NCT02037516 -NCT02037776 -NCT02037893 -NCT02038049 -NCT02038205 -NCT02038322 -NCT02038374 -NCT02038400 -NCT02038478 -NCT02038634 -NCT02038699 -NCT02038712 -NCT02038751 -NCT02038868 -NCT02038972 -NCT02039011 -NCT02039219 -NCT02039232 -NCT02039323 -NCT02039375 -NCT02039388 -NCT02039778 -NCT02039869 -NCT02039999 -NCT02040142 -NCT02040181 -NCT02040194 -NCT02040233 -NCT02040493 -NCT02040545 -NCT02040766 -NCT02040779 -NCT02040831 -NCT02040922 -NCT02041169 -NCT02041195 -NCT02041858 -NCT02041910 -NCT02041923 -NCT02042092 -NCT02042170 -NCT02042196 -NCT02042261 -NCT02042404 -NCT02042443 -NCT02042638 -NCT02042755 -NCT02042820 -NCT02042846 -NCT02043054 -NCT02043444 -NCT02043470 -NCT02043587 -NCT02044198 -NCT02044341 -NCT02044419 -NCT02044510 -NCT02044523 -NCT02044536 -NCT02044640 -NCT02044965 -NCT02045004 -NCT02045017 -NCT02045121 -NCT02045199 -NCT02045238 -NCT02045264 -NCT02045342 -NCT02045420 -NCT02045550 -NCT02045641 -NCT02045771 -NCT02045784 -NCT02045901 -NCT02045940 -NCT02046057 -NCT02046395 -NCT02046603 -NCT02046863 -NCT02046941 -NCT02047136 -NCT02047162 -NCT02047175 -NCT02047279 -NCT02047370 -NCT02047552 -NCT02047825 -NCT02047851 -NCT02047864 -NCT02048163 -NCT02048267 -NCT02048553 -NCT02048670 -NCT02048748 -NCT02048813 -NCT02048904 -NCT02048956 -NCT02049073 -NCT02049086 -NCT02049190 -NCT02049203 -NCT02049268 -NCT02049606 -NCT02049892 -NCT02049918 -NCT02049957 -NCT02050022 -NCT02050048 -NCT02050282 -NCT02050347 -NCT02050529 -NCT02050685 -NCT02050763 -NCT02050815 -NCT02051101 -NCT02051205 -NCT02051244 -NCT02051413 -NCT02051530 -NCT02051608 -NCT02051855 -NCT02051894 -NCT02051907 -NCT02051972 -NCT02052089 -NCT02052271 -NCT02052479 -NCT02052661 -NCT02052752 -NCT02052934 -NCT02052947 -NCT02052999 -NCT02053181 -NCT02053350 -NCT02053402 -NCT02053467 -NCT02053480 -NCT02053493 -NCT02053597 -NCT02053610 -NCT02053623 -NCT02053636 -NCT02053753 -NCT02053961 -NCT02054013 -NCT02054052 -NCT02054104 -NCT02054117 -NCT02054221 -NCT02054286 -NCT02054455 -NCT02054624 -NCT02054780 -NCT02054923 -NCT02055053 -NCT02055157 -NCT02055248 -NCT02055495 -NCT02055534 -NCT02055573 -NCT02055729 -NCT02056054 -NCT02056067 -NCT02056223 -NCT02056288 -NCT02056457 -NCT02056522 -NCT02056678 -NCT02056730 -NCT02056756 -NCT02056847 -NCT02056886 -NCT02057003 -NCT02057055 -NCT02057198 -NCT02057328 -NCT02057393 -NCT02057471 -NCT02057484 -NCT02057523 -NCT02057627 -NCT02057809 -NCT02058069 -NCT02058082 -NCT02058303 -NCT02058459 -NCT02058628 -NCT02058823 -NCT02058953 -NCT02059018 -NCT02059122 -NCT02059135 -NCT02059317 -NCT02059473 -NCT02059538 -NCT02059993 -NCT02060058 -NCT02060071 -NCT02060136 -NCT02060149 -NCT02060253 -NCT02060331 -NCT02060383 -NCT02060474 -NCT02060487 -NCT02060539 -NCT02060552 -NCT02060695 -NCT02060799 -NCT02060929 -NCT02060994 -NCT02061033 -NCT02061072 -NCT02061228 -NCT02061332 -NCT02061384 -NCT02061514 -NCT02061592 -NCT02061995 -NCT02062229 -NCT02062242 -NCT02062307 -NCT02062372 -NCT02062554 -NCT02062606 -NCT02062632 -NCT02062775 -NCT02062840 -NCT02063048 -NCT02063087 -NCT02063126 -NCT02063282 -NCT02063568 -NCT02063633 -NCT02063724 -NCT02063971 -NCT02063997 -NCT02064127 -NCT02064166 -NCT02064244 -NCT02064309 -NCT02064361 -NCT02064686 -NCT02064881 -NCT02065219 -NCT02065479 -NCT02065492 -NCT02065804 -NCT02065921 -NCT02065999 -NCT02066012 -NCT02066116 -NCT02066129 -NCT02066233 -NCT02066298 -NCT02066493 -NCT02066506 -NCT02066519 -NCT02066532 -NCT02066545 -NCT02066649 -NCT02066896 -NCT02066922 -NCT02067026 -NCT02067052 -NCT02067130 -NCT02067247 -NCT02067260 -NCT02067286 -NCT02067299 -NCT02067312 -NCT02067325 -NCT02067377 -NCT02067468 -NCT02067520 -NCT02067546 -NCT02067598 -NCT02067624 -NCT02067663 -NCT02067702 -NCT02067806 -NCT02067897 -NCT02068053 -NCT02068079 -NCT02068157 -NCT02068677 -NCT02068872 -NCT02069106 -NCT02069197 -NCT02069366 -NCT02069626 -NCT02069678 -NCT02069756 -NCT02069873 -NCT02069912 -NCT02070016 -NCT02070224 -NCT02070640 -NCT02070679 -NCT02070952 -NCT02071004 -NCT02071056 -NCT02071225 -NCT02071355 -NCT02071394 -NCT02071472 -NCT02071511 -NCT02071589 -NCT02071654 -NCT02071693 -NCT02071849 -NCT02072057 -NCT02072070 -NCT02072473 -NCT02072590 -NCT02073006 -NCT02073071 -NCT02073201 -NCT02073305 -NCT02073396 -NCT02073448 -NCT02073461 -NCT02073487 -NCT02073591 -NCT02073773 -NCT02073890 -NCT02073968 -NCT02074007 -NCT02074111 -NCT02074150 -NCT02074202 -NCT02074553 -NCT02074644 -NCT02074709 -NCT02074787 -NCT02074839 -NCT02075021 -NCT02075177 -NCT02075229 -NCT02075320 -NCT02075372 -NCT02075437 -NCT02075489 -NCT02075567 -NCT02075606 -NCT02075632 -NCT02075671 -NCT02075775 -NCT02075879 -NCT02076074 -NCT02076243 -NCT02076308 -NCT02076438 -NCT02076581 -NCT02076620 -NCT02076672 -NCT02076776 -NCT02076867 -NCT02076906 -NCT02077023 -NCT02077036 -NCT02077101 -NCT02077348 -NCT02077439 -NCT02077530 -NCT02077673 -NCT02078076 -NCT02078102 -NCT02078154 -NCT02078167 -NCT02078219 -NCT02078245 -NCT02078258 -NCT02078323 -NCT02078531 -NCT02078661 -NCT02078687 -NCT02078739 -NCT02078765 -NCT02078791 -NCT02079103 -NCT02079363 -NCT02079389 -NCT02079428 -NCT02079558 -NCT02079636 -NCT02079688 -NCT02079714 -NCT02079727 -NCT02079753 -NCT02079948 -NCT02080247 -NCT02080299 -NCT02080312 -NCT02080455 -NCT02080598 -NCT02080624 -NCT02080663 -NCT02080806 -NCT02080962 -NCT02080988 -NCT02081040 -NCT02081066 -NCT02081079 -NCT02081196 -NCT02081222 -NCT02081300 -NCT02081339 -NCT02081365 -NCT02081404 -NCT02081456 -NCT02081508 -NCT02081625 -NCT02082197 -NCT02082275 -NCT02082340 -NCT02082353 -NCT02082379 -NCT02082431 -NCT02082691 -NCT02082730 -NCT02082925 -NCT02082951 -NCT02083016 -NCT02083029 -NCT02083185 -NCT02083510 -NCT02083848 -NCT02083861 -NCT02083887 -NCT02083926 -NCT02083939 -NCT02083965 -NCT02083978 -NCT02084095 -NCT02084134 -NCT02084160 -NCT02084199 -NCT02084238 -NCT02084264 -NCT02084342 -NCT02084407 -NCT02084459 -NCT02084472 -NCT02084745 -NCT02084888 -NCT02084914 -NCT02085018 -NCT02085187 -NCT02085304 -NCT02085408 -NCT02085499 -NCT02085603 -NCT02085655 -NCT02085928 -NCT02085941 -NCT02086136 -NCT02086292 -NCT02086448 -NCT02086825 -NCT02086838 -NCT02086890 -NCT02086916 -NCT02086994 -NCT02087007 -NCT02087046 -NCT02087059 -NCT02087150 -NCT02087397 -NCT02087488 -NCT02087631 -NCT02087748 -NCT02087852 -NCT02087917 -NCT02087956 -NCT02088086 -NCT02088281 -NCT02088372 -NCT02088827 -NCT02088866 -NCT02089048 -NCT02089087 -NCT02089217 -NCT02089243 -NCT02089555 -NCT02089711 -NCT02089750 -NCT02089854 -NCT02089932 -NCT02090348 -NCT02090374 -NCT02090400 -NCT02090413 -NCT02090816 -NCT02090907 -NCT02090933 -NCT02090998 -NCT02091024 -NCT02091167 -NCT02091362 -NCT02091492 -NCT02091596 -NCT02091674 -NCT02091778 -NCT02091791 -NCT02091869 -NCT02091947 -NCT02092064 -NCT02092129 -NCT02092155 -NCT02092337 -NCT02092571 -NCT02092584 -NCT02092662 -NCT02092714 -NCT02092740 -NCT02092831 -NCT02092935 -NCT02093013 -NCT02093065 -NCT02093247 -NCT02093299 -NCT02093767 -NCT02094053 -NCT02094079 -NCT02094144 -NCT02094235 -NCT02094274 -NCT02094313 -NCT02094339 -NCT02094443 -NCT02094482 -NCT02094729 -NCT02094742 -NCT02094950 -NCT02095041 -NCT02095093 -NCT02095132 -NCT02095158 -NCT02095301 -NCT02095561 -NCT02095587 -NCT02095600 -NCT02095834 -NCT02096068 -NCT02096094 -NCT02096237 -NCT02096406 -NCT02096445 -NCT02096458 -NCT02096510 -NCT02096562 -NCT02096835 -NCT02097095 -NCT02097212 -NCT02097225 -NCT02097368 -NCT02097420 -NCT02097615 -NCT02097719 -NCT02098044 -NCT02098109 -NCT02098239 -NCT02098252 -NCT02098265 -NCT02098369 -NCT02098499 -NCT02098616 -NCT02098642 -NCT02098681 -NCT02098707 -NCT02098759 -NCT02098772 -NCT02098863 -NCT02098889 -NCT02098902 -NCT02098915 -NCT02099006 -NCT02099045 -NCT02099214 -NCT02099240 -NCT02099487 -NCT02099578 -NCT02099604 -NCT02099721 -NCT02099734 -NCT02099773 -NCT02099916 -NCT02100150 -NCT02100189 -NCT02100202 -NCT02100332 -NCT02100358 -NCT02100488 -NCT02100670 -NCT02100722 -NCT02100969 -NCT02101034 -NCT02101177 -NCT02101203 -NCT02101242 -NCT02101281 -NCT02101294 -NCT02101385 -NCT02101606 -NCT02101931 -NCT02102009 -NCT02102035 -NCT02102061 -NCT02102100 -NCT02102165 -NCT02102269 -NCT02102542 -NCT02102568 -NCT02102620 -NCT02102724 -NCT02102880 -NCT02102906 -NCT02102958 -NCT02103075 -NCT02103192 -NCT02103218 -NCT02103335 -NCT02103348 -NCT02103426 -NCT02103504 -NCT02103582 -NCT02103608 -NCT02104050 -NCT02104180 -NCT02104440 -NCT02104492 -NCT02104505 -NCT02104583 -NCT02104609 -NCT02104817 -NCT02104921 -NCT02105090 -NCT02105103 -NCT02105441 -NCT02105480 -NCT02105519 -NCT02105714 -NCT02105766 -NCT02105909 -NCT02105948 -NCT02105961 -NCT02105974 -NCT02106182 -NCT02106442 -NCT02106455 -NCT02106520 -NCT02106572 -NCT02106676 -NCT02106741 -NCT02106819 -NCT02106897 -NCT02106910 -NCT02107196 -NCT02107495 -NCT02107521 -NCT02107638 -NCT02107898 -NCT02108132 -NCT02108340 -NCT02108392 -NCT02108431 -NCT02108509 -NCT02108522 -NCT02108613 -NCT02108782 -NCT02108821 -NCT02108860 -NCT02108912 -NCT02108925 -NCT02108990 -NCT02109016 -NCT02109159 -NCT02109198 -NCT02109237 -NCT02109263 -NCT02109289 -NCT02109302 -NCT02109354 -NCT02109614 -NCT02109640 -NCT02109770 -NCT02109887 -NCT02109939 -NCT02109952 -NCT02110004 -NCT02110069 -NCT02110186 -NCT02110225 -NCT02110355 -NCT02110433 -NCT02110485 -NCT02110706 -NCT02110745 -NCT02110810 -NCT02110914 -NCT02111005 -NCT02111044 -NCT02111057 -NCT02111304 -NCT02111356 -NCT02111369 -NCT02111538 -NCT02111668 -NCT02111785 -NCT02111837 -NCT02111850 -NCT02112019 -NCT02112045 -NCT02112175 -NCT02112279 -NCT02112409 -NCT02112422 -NCT02112578 -NCT02112604 -NCT02112617 -NCT02112643 -NCT02112721 -NCT02112799 -NCT02112812 -NCT02112864 -NCT02112890 -NCT02112903 -NCT02112929 -NCT02113163 -NCT02113241 -NCT02113332 -NCT02113436 -NCT02113514 -NCT02113527 -NCT02113618 -NCT02113709 -NCT02113774 -NCT02113787 -NCT02113865 -NCT02113891 -NCT02113904 -NCT02113917 -NCT02114034 -NCT02114099 -NCT02114112 -NCT02114203 -NCT02114216 -NCT02114411 -NCT02114476 -NCT02114489 -NCT02114528 -NCT02114684 -NCT02114710 -NCT02114762 -NCT02114775 -NCT02114944 -NCT02115009 -NCT02115100 -NCT02115126 -NCT02115178 -NCT02115230 -NCT02115269 -NCT02115282 -NCT02115334 -NCT02115490 -NCT02115802 -NCT02115867 -NCT02115906 -NCT02115919 -NCT02115997 -NCT02116101 -NCT02116127 -NCT02116140 -NCT02116244 -NCT02116361 -NCT02116439 -NCT02116647 -NCT02116673 -NCT02116738 -NCT02116764 -NCT02116829 -NCT02116907 -NCT02116920 -NCT02117063 -NCT02117284 -NCT02117336 -NCT02117375 -NCT02117401 -NCT02117427 -NCT02117453 -NCT02117635 -NCT02117661 -NCT02117960 -NCT02117973 -NCT02118233 -NCT02118532 -NCT02118558 -NCT02118675 -NCT02118727 -NCT02118766 -NCT02118792 -NCT02118805 -NCT02119091 -NCT02119286 -NCT02119338 -NCT02119429 -NCT02119494 -NCT02119559 -NCT02119611 -NCT02119624 -NCT02119637 -NCT02119754 -NCT02119780 -NCT02119871 -NCT02119884 -NCT02119923 -NCT02120027 -NCT02120053 -NCT02120638 -NCT02120651 -NCT02120833 -NCT02120924 -NCT02121028 -NCT02121080 -NCT02121171 -NCT02121301 -NCT02121353 -NCT02121457 -NCT02121496 -NCT02121561 -NCT02121587 -NCT02121613 -NCT02121756 -NCT02121938 -NCT02122159 -NCT02122211 -NCT02122419 -NCT02122432 -NCT02122445 -NCT02122601 -NCT02122614 -NCT02122640 -NCT02122653 -NCT02122783 -NCT02122900 -NCT02123043 -NCT02123056 -NCT02123147 -NCT02123407 -NCT02123498 -NCT02123537 -NCT02123641 -NCT02123680 -NCT02123953 -NCT02124031 -NCT02124044 -NCT02124070 -NCT02124096 -NCT02124109 -NCT02124356 -NCT02124551 -NCT02124577 -NCT02124850 -NCT02124889 -NCT02124928 -NCT02125318 -NCT02125344 -NCT02125591 -NCT02125604 -NCT02125682 -NCT02125747 -NCT02125760 -NCT02125825 -NCT02125929 -NCT02126098 -NCT02126137 -NCT02126176 -NCT02126254 -NCT02126501 -NCT02126631 -NCT02126644 -NCT02126670 -NCT02126683 -NCT02126709 -NCT02126722 -NCT02126774 -NCT02126891 -NCT02126982 -NCT02126995 -NCT02127073 -NCT02127333 -NCT02127398 -NCT02127515 -NCT02127554 -NCT02127645 -NCT02127814 -NCT02127827 -NCT02128061 -NCT02128126 -NCT02128152 -NCT02128165 -NCT02128217 -NCT02128438 -NCT02128490 -NCT02128529 -NCT02128542 -NCT02128646 -NCT02128659 -NCT02128685 -NCT02128698 -NCT02128763 -NCT02128776 -NCT02129088 -NCT02129309 -NCT02129335 -NCT02129348 -NCT02129413 -NCT02129439 -NCT02129452 -NCT02129608 -NCT02129634 -NCT02129764 -NCT02129855 -NCT02130180 -NCT02130193 -NCT02130245 -NCT02130258 -NCT02130271 -NCT02130284 -NCT02130323 -NCT02130505 -NCT02130570 -NCT02130687 -NCT02130765 -NCT02130843 -NCT02130882 -NCT02130973 -NCT02131064 -NCT02131207 -NCT02131259 -NCT02131324 -NCT02131350 -NCT02131467 -NCT02131545 -NCT02131636 -NCT02131701 -NCT02131714 -NCT02131766 -NCT02132052 -NCT02132078 -NCT02132117 -NCT02132130 -NCT02132208 -NCT02132260 -NCT02132364 -NCT02132507 -NCT02132533 -NCT02132585 -NCT02132637 -NCT02132728 -NCT02133014 -NCT02133027 -NCT02133222 -NCT02133300 -NCT02133417 -NCT02133651 -NCT02133768 -NCT02133781 -NCT02133794 -NCT02133820 -NCT02133885 -NCT02133898 -NCT02133924 -NCT02134223 -NCT02134327 -NCT02134392 -NCT02134444 -NCT02134457 -NCT02134470 -NCT02134522 -NCT02134535 -NCT02134652 -NCT02134704 -NCT02134717 -NCT02135094 -NCT02135133 -NCT02135276 -NCT02135380 -NCT02135445 -NCT02135601 -NCT02135692 -NCT02135731 -NCT02135900 -NCT02136043 -NCT02136095 -NCT02136368 -NCT02136394 -NCT02136459 -NCT02136602 -NCT02136719 -NCT02136758 -NCT02136823 -NCT02136836 -NCT02136849 -NCT02136953 -NCT02137044 -NCT02137135 -NCT02137200 -NCT02137213 -NCT02137252 -NCT02137265 -NCT02137278 -NCT02137291 -NCT02137304 -NCT02137317 -NCT02137408 -NCT02137460 -NCT02137538 -NCT02137577 -NCT02138214 -NCT02138331 -NCT02138422 -NCT02138539 -NCT02138630 -NCT02138643 -NCT02138786 -NCT02138890 -NCT02139046 -NCT02139644 -NCT02139813 -NCT02139852 -NCT02139930 -NCT02140021 -NCT02140073 -NCT02140164 -NCT02140203 -NCT02140320 -NCT02140567 -NCT02140632 -NCT02140892 -NCT02140905 -NCT02140983 -NCT02141035 -NCT02141061 -NCT02141451 -NCT02141464 -NCT02141490 -NCT02141555 -NCT02141698 -NCT02141802 -NCT02141854 -NCT02141932 -NCT02141971 -NCT02142257 -NCT02142439 -NCT02142491 -NCT02142543 -NCT02142660 -NCT02142751 -NCT02142829 -NCT02142894 -NCT02143154 -NCT02143414 -NCT02143609 -NCT02143700 -NCT02143726 -NCT02143830 -NCT02143908 -NCT02143986 -NCT02144103 -NCT02144181 -NCT02144441 -NCT02144493 -NCT02144545 -NCT02144584 -NCT02144753 -NCT02144857 -NCT02145169 -NCT02145208 -NCT02145234 -NCT02145247 -NCT02145338 -NCT02145442 -NCT02145611 -NCT02145650 -NCT02145663 -NCT02145728 -NCT02145754 -NCT02145819 -NCT02145858 -NCT02145949 -NCT02145975 -NCT02146040 -NCT02146053 -NCT02146105 -NCT02146144 -NCT02146222 -NCT02146248 -NCT02146274 -NCT02146287 -NCT02146521 -NCT02146586 -NCT02146755 -NCT02146911 -NCT02146989 -NCT02147054 -NCT02147158 -NCT02147171 -NCT02147197 -NCT02147210 -NCT02147249 -NCT02147366 -NCT02147509 -NCT02147574 -NCT02147639 -NCT02147691 -NCT02147808 -NCT02147821 -NCT02147964 -NCT02148250 -NCT02148276 -NCT02148549 -NCT02148601 -NCT02148874 -NCT02148900 -NCT02148926 -NCT02149121 -NCT02149199 -NCT02149264 -NCT02149485 -NCT02149550 -NCT02149654 -NCT02149914 -NCT02150031 -NCT02150083 -NCT02150486 -NCT02150590 -NCT02150616 -NCT02150629 -NCT02150863 -NCT02150941 -NCT02150967 -NCT02151006 -NCT02151487 -NCT02151552 -NCT02151591 -NCT02151825 -NCT02152072 -NCT02152124 -NCT02152163 -NCT02152202 -NCT02152488 -NCT02152553 -NCT02152592 -NCT02152644 -NCT02152696 -NCT02152709 -NCT02152735 -NCT02152800 -NCT02152995 -NCT02153008 -NCT02153021 -NCT02153034 -NCT02153073 -NCT02153086 -NCT02153398 -NCT02153567 -NCT02153580 -NCT02153619 -NCT02153645 -NCT02153658 -NCT02153671 -NCT02153840 -NCT02153983 -NCT02154009 -NCT02154061 -NCT02154087 -NCT02154100 -NCT02154152 -NCT02154165 -NCT02154334 -NCT02154386 -NCT02154464 -NCT02154490 -NCT02154568 -NCT02154620 -NCT02154724 -NCT02154880 -NCT02154958 -NCT02155153 -NCT02155244 -NCT02155257 -NCT02155283 -NCT02155374 -NCT02155790 -NCT02155894 -NCT02155933 -NCT02155985 -NCT02156050 -NCT02156063 -NCT02156102 -NCT02156232 -NCT02156271 -NCT02156310 -NCT02156375 -NCT02156570 -NCT02156648 -NCT02156726 -NCT02156843 -NCT02156947 -NCT02156999 -NCT02157155 -NCT02157194 -NCT02157207 -NCT02157259 -NCT02157441 -NCT02157506 -NCT02157545 -NCT02157558 -NCT02157584 -NCT02157766 -NCT02157857 -NCT02157896 -NCT02157935 -NCT02157948 -NCT02158000 -NCT02158013 -NCT02158026 -NCT02158052 -NCT02158182 -NCT02158195 -NCT02158208 -NCT02158338 -NCT02158351 -NCT02158416 -NCT02158572 -NCT02158585 -NCT02158780 -NCT02158975 -NCT02159079 -NCT02159287 -NCT02159339 -NCT02159469 -NCT02159508 -NCT02159573 -NCT02159612 -NCT02159625 -NCT02159638 -NCT02159755 -NCT02159794 -NCT02159924 -NCT02159963 -NCT02159989 -NCT02160015 -NCT02160080 -NCT02160132 -NCT02160288 -NCT02160301 -NCT02160535 -NCT02160678 -NCT02160717 -NCT02160730 -NCT02161354 -NCT02161367 -NCT02161380 -NCT02161952 -NCT02162134 -NCT02162160 -NCT02162316 -NCT02162342 -NCT02162381 -NCT02162420 -NCT02162524 -NCT02162589 -NCT02162862 -NCT02163031 -NCT02163044 -NCT02163096 -NCT02163252 -NCT02163291 -NCT02163304 -NCT02163577 -NCT02163668 -NCT02163759 -NCT02163863 -NCT02163954 -NCT02163993 -NCT02164149 -NCT02164383 -NCT02164513 -NCT02164643 -NCT02165176 -NCT02165267 -NCT02165293 -NCT02165384 -NCT02165436 -NCT02165462 -NCT02165514 -NCT02165527 -NCT02165566 -NCT02165761 -NCT02165826 -NCT02165865 -NCT02165917 -NCT02166320 -NCT02166333 -NCT02166372 -NCT02166463 -NCT02166476 -NCT02166619 -NCT02166697 -NCT02166723 -NCT02166788 -NCT02166801 -NCT02166814 -NCT02166892 -NCT02166944 -NCT02167009 -NCT02167204 -NCT02167217 -NCT02167256 -NCT02167412 -NCT02167568 -NCT02167581 -NCT02167594 -NCT02167646 -NCT02167698 -NCT02167737 -NCT02167906 -NCT02167919 -NCT02168036 -NCT02168088 -NCT02168101 -NCT02168114 -NCT02168153 -NCT02168179 -NCT02168205 -NCT02168296 -NCT02168387 -NCT02168660 -NCT02168673 -NCT02168842 -NCT02169219 -NCT02169323 -NCT02169531 -NCT02169765 -NCT02169830 -NCT02169856 -NCT02170025 -NCT02170064 -NCT02170077 -NCT02170142 -NCT02170220 -NCT02170402 -NCT02170441 -NCT02170727 -NCT02170740 -NCT02170831 -NCT02170844 -NCT02171130 -NCT02171312 -NCT02171403 -NCT02171429 -NCT02172027 -NCT02172105 -NCT02172300 -NCT02172326 -NCT02172339 -NCT02172651 -NCT02172833 -NCT02172911 -NCT02172950 -NCT02173145 -NCT02173470 -NCT02173522 -NCT02173587 -NCT02173678 -NCT02173691 -NCT02173704 -NCT02173808 -NCT02173925 -NCT02173951 -NCT02174458 -NCT02174471 -NCT02174562 -NCT02174731 -NCT02174770 -NCT02174783 -NCT02174874 -NCT02174887 -NCT02174978 -NCT02175316 -NCT02175498 -NCT02175511 -NCT02175641 -NCT02175758 -NCT02175966 -NCT02176031 -NCT02176070 -NCT02176304 -NCT02176408 -NCT02176460 -NCT02176525 -NCT02176564 -NCT02176655 -NCT02176707 -NCT02176785 -NCT02176863 -NCT02176941 -NCT02177136 -NCT02177162 -NCT02177188 -NCT02177214 -NCT02177331 -NCT02177396 -NCT02177461 -NCT02177513 -NCT02177552 -NCT02177643 -NCT02177669 -NCT02177838 -NCT02178098 -NCT02178150 -NCT02178241 -NCT02178319 -NCT02178345 -NCT02178449 -NCT02178514 -NCT02178579 -NCT02178761 -NCT02178774 -NCT02178800 -NCT02178891 -NCT02179034 -NCT02179073 -NCT02179125 -NCT02179177 -NCT02179294 -NCT02179333 -NCT02179359 -NCT02179658 -NCT02179788 -NCT02180126 -NCT02180204 -NCT02180217 -NCT02180269 -NCT02180282 -NCT02180412 -NCT02180555 -NCT02180568 -NCT02180789 -NCT02180919 -NCT02181257 -NCT02181335 -NCT02181478 -NCT02181686 -NCT02181751 -NCT02181933 -NCT02182089 -NCT02182102 -NCT02182232 -NCT02182440 -NCT02182830 -NCT02182973 -NCT02183116 -NCT02183129 -NCT02183155 -NCT02183168 -NCT02183259 -NCT02183311 -NCT02183519 -NCT02183688 -NCT02183753 -NCT02183766 -NCT02183831 -NCT02183948 -NCT02183961 -NCT02183974 -NCT02184156 -NCT02184299 -NCT02184559 -NCT02184715 -NCT02184767 -NCT02184975 -NCT02185092 -NCT02185105 -NCT02185170 -NCT02185313 -NCT02185456 -NCT02185807 -NCT02185963 -NCT02186028 -NCT02186106 -NCT02186119 -NCT02186145 -NCT02186171 -NCT02186405 -NCT02186470 -NCT02186639 -NCT02187003 -NCT02187029 -NCT02187133 -NCT02187276 -NCT02187341 -NCT02187393 -NCT02187549 -NCT02187601 -NCT02187627 -NCT02187640 -NCT02187822 -NCT02188147 -NCT02188329 -NCT02188589 -NCT02188628 -NCT02188784 -NCT02189005 -NCT02189148 -NCT02189291 -NCT02189434 -NCT02189551 -NCT02189603 -NCT02189629 -NCT02189668 -NCT02189694 -NCT02189707 -NCT02189798 -NCT02189902 -NCT02190006 -NCT02190097 -NCT02190110 -NCT02190149 -NCT02190214 -NCT02190227 -NCT02190266 -NCT02190279 -NCT02190448 -NCT02190604 -NCT02190669 -NCT02190747 -NCT02190786 -NCT02190812 -NCT02190916 -NCT02190929 -NCT02190942 -NCT02190981 -NCT02190994 -NCT02191267 -NCT02191475 -NCT02191839 -NCT02192125 -NCT02192138 -NCT02192190 -NCT02192229 -NCT02192242 -NCT02192411 -NCT02192450 -NCT02192606 -NCT02193061 -NCT02193321 -NCT02193451 -NCT02193464 -NCT02193490 -NCT02193581 -NCT02193685 -NCT02193815 -NCT02194127 -NCT02194140 -NCT02194205 -NCT02194348 -NCT02194361 -NCT02194647 -NCT02194816 -NCT02194829 -NCT02194842 -NCT02194894 -NCT02194972 -NCT02194998 -NCT02195063 -NCT02195076 -NCT02195115 -NCT02195375 -NCT02195596 -NCT02195635 -NCT02195752 -NCT02195791 -NCT02195960 -NCT02195986 -NCT02196012 -NCT02196025 -NCT02196064 -NCT02196077 -NCT02196129 -NCT02196207 -NCT02196220 -NCT02196311 -NCT02196337 -NCT02196467 -NCT02196493 -NCT02196662 -NCT02196727 -NCT02196987 -NCT02197026 -NCT02197208 -NCT02197299 -NCT02197351 -NCT02197585 -NCT02197611 -NCT02197702 -NCT02197780 -NCT02197832 -NCT02197871 -NCT02197923 -NCT02197936 -NCT02197962 -NCT02198001 -NCT02198040 -NCT02198183 -NCT02198235 -NCT02198248 -NCT02198339 -NCT02198469 -NCT02198651 -NCT02198677 -NCT02198742 -NCT02198755 -NCT02198820 -NCT02198833 -NCT02198911 -NCT02199119 -NCT02199262 -NCT02199314 -NCT02199418 -NCT02199483 -NCT02199496 -NCT02199587 -NCT02199717 -NCT02199795 -NCT02199990 -NCT02200107 -NCT02200263 -NCT02200276 -NCT02200302 -NCT02200328 -NCT02200367 -NCT02200484 -NCT02200796 -NCT02200887 -NCT02200991 -NCT02201355 -NCT02201719 -NCT02201732 -NCT02201862 -NCT02201966 -NCT02202109 -NCT02202382 -NCT02202395 -NCT02202408 -NCT02202512 -NCT02202538 -NCT02202759 -NCT02202902 -NCT02202980 -NCT02203045 -NCT02203058 -NCT02203162 -NCT02203188 -NCT02203227 -NCT02203240 -NCT02203305 -NCT02203318 -NCT02203357 -NCT02203721 -NCT02204150 -NCT02204163 -NCT02204189 -NCT02204254 -NCT02204306 -NCT02204371 -NCT02204423 -NCT02204462 -NCT02204553 -NCT02204579 -NCT02204618 -NCT02204735 -NCT02204748 -NCT02204774 -NCT02204826 -NCT02204969 -NCT02205008 -NCT02205125 -NCT02205281 -NCT02205346 -NCT02205463 -NCT02205541 -NCT02205554 -NCT02206061 -NCT02206100 -NCT02206191 -NCT02206243 -NCT02206256 -NCT02206321 -NCT02206360 -NCT02206373 -NCT02206503 -NCT02206685 -NCT02206919 -NCT02206984 -NCT02207114 -NCT02207231 -NCT02207400 -NCT02207491 -NCT02207595 -NCT02207647 -NCT02207842 -NCT02207894 -NCT02207907 -NCT02207946 -NCT02207998 -NCT02208037 -NCT02208050 -NCT02208154 -NCT02208323 -NCT02208375 -NCT02208895 -NCT02208947 -NCT02209259 -NCT02209324 -NCT02209519 -NCT02209636 -NCT02209688 -NCT02209935 -NCT02210000 -NCT02210039 -NCT02210117 -NCT02210637 -NCT02210689 -NCT02210715 -NCT02210741 -NCT02210884 -NCT02210923 -NCT02210975 -NCT02211027 -NCT02211053 -NCT02211105 -NCT02211313 -NCT02211404 -NCT02211898 -NCT02212028 -NCT02212054 -NCT02212548 -NCT02212652 -NCT02212678 -NCT02212717 -NCT02212886 -NCT02213094 -NCT02213120 -NCT02213341 -NCT02213354 -NCT02213484 -NCT02213653 -NCT02213692 -NCT02213757 -NCT02214147 -NCT02214186 -NCT02214212 -NCT02214238 -NCT02214277 -NCT02214290 -NCT02214368 -NCT02214745 -NCT02214771 -NCT02214914 -NCT02215161 -NCT02215395 -NCT02215551 -NCT02215707 -NCT02215967 -NCT02216071 -NCT02216084 -NCT02216123 -NCT02216279 -NCT02216292 -NCT02216344 -NCT02216422 -NCT02216435 -NCT02216513 -NCT02216552 -NCT02216799 -NCT02216994 -NCT02217202 -NCT02217228 -NCT02217358 -NCT02217423 -NCT02217540 -NCT02217631 -NCT02217852 -NCT02217943 -NCT02218099 -NCT02218164 -NCT02218268 -NCT02218372 -NCT02218398 -NCT02218554 -NCT02218580 -NCT02218762 -NCT02218827 -NCT02218879 -NCT02218931 -NCT02218957 -NCT02219074 -NCT02219113 -NCT02219126 -NCT02219204 -NCT02219360 -NCT02219503 -NCT02219529 -NCT02219555 -NCT02219698 -NCT02219763 -NCT02219815 -NCT02219828 -NCT02219854 -NCT02219997 -NCT02220270 -NCT02220374 -NCT02220517 -NCT02220543 -NCT02220699 -NCT02220842 -NCT02220972 -NCT02221141 -NCT02221245 -NCT02221427 -NCT02221648 -NCT02221713 -NCT02221908 -NCT02221921 -NCT02221947 -NCT02221973 -NCT02221999 -NCT02222155 -NCT02222246 -NCT02222311 -NCT02222545 -NCT02222558 -NCT02222623 -NCT02222688 -NCT02222714 -NCT02222740 -NCT02222948 -NCT02223039 -NCT02223221 -NCT02223286 -NCT02223299 -NCT02223325 -NCT02223364 -NCT02223377 -NCT02223546 -NCT02223572 -NCT02223676 -NCT02223715 -NCT02223754 -NCT02223832 -NCT02223936 -NCT02223975 -NCT02224014 -NCT02224209 -NCT02224586 -NCT02224664 -NCT02224677 -NCT02224781 -NCT02225119 -NCT02225132 -NCT02225444 -NCT02225483 -NCT02225795 -NCT02225834 -NCT02226471 -NCT02226484 -NCT02226692 -NCT02226731 -NCT02226939 -NCT02227537 -NCT02227732 -NCT02227784 -NCT02227823 -NCT02227888 -NCT02227940 -NCT02227953 -NCT02228057 -NCT02228174 -NCT02228239 -NCT02228265 -NCT02228343 -NCT02228395 -NCT02228837 -NCT02228889 -NCT02228902 -NCT02229370 -NCT02229500 -NCT02229539 -NCT02229747 -NCT02229799 -NCT02229812 -NCT02229890 -NCT02229955 -NCT02229994 -NCT02230020 -NCT02230397 -NCT02230475 -NCT02230631 -NCT02230722 -NCT02230813 -NCT02230943 -NCT02231047 -NCT02231229 -NCT02231294 -NCT02231320 -NCT02231424 -NCT02231593 -NCT02231606 -NCT02231619 -NCT02231658 -NCT02232178 -NCT02232386 -NCT02232737 -NCT02232893 -NCT02232906 -NCT02232945 -NCT02233231 -NCT02233257 -NCT02233322 -NCT02233335 -NCT02233543 -NCT02233569 -NCT02233868 -NCT02233985 -NCT02233998 -NCT02234154 -NCT02234206 -NCT02234219 -NCT02234284 -NCT02234310 -NCT02234388 -NCT02234596 -NCT02234661 -NCT02235025 -NCT02235129 -NCT02235142 -NCT02235207 -NCT02235233 -NCT02235311 -NCT02235402 -NCT02235428 -NCT02235493 -NCT02235506 -NCT02235519 -NCT02235571 -NCT02235623 -NCT02235662 -NCT02235818 -NCT02235974 -NCT02235987 -NCT02236078 -NCT02236273 -NCT02236299 -NCT02236442 -NCT02236572 -NCT02236611 -NCT02236689 -NCT02236871 -NCT02237092 -NCT02237196 -NCT02237209 -NCT02237248 -NCT02237261 -NCT02237391 -NCT02237547 -NCT02237625 -NCT02237729 -NCT02237755 -NCT02237846 -NCT02237859 -NCT02237937 -NCT02238184 -NCT02238223 -NCT02238288 -NCT02238418 -NCT02238587 -NCT02238626 -NCT02238704 -NCT02238912 -NCT02239016 -NCT02239185 -NCT02239224 -NCT02239289 -NCT02239666 -NCT02239705 -NCT02239991 -NCT02240251 -NCT02240407 -NCT02240472 -NCT02240498 -NCT02240550 -NCT02240563 -NCT02240966 -NCT02241044 -NCT02241109 -NCT02241122 -NCT02241161 -NCT02241278 -NCT02241356 -NCT02241434 -NCT02241499 -NCT02241681 -NCT02241707 -NCT02241928 -NCT02241954 -NCT02242058 -NCT02242084 -NCT02242123 -NCT02242175 -NCT02242227 -NCT02242266 -NCT02242292 -NCT02242305 -NCT02242448 -NCT02242526 -NCT02242617 -NCT02242708 -NCT02242747 -NCT02242812 -NCT02243007 -NCT02243228 -NCT02243280 -NCT02243293 -NCT02243488 -NCT02243501 -NCT02243540 -NCT02243605 -NCT02243657 -NCT02243917 -NCT02244060 -NCT02244125 -NCT02244138 -NCT02244242 -NCT02244255 -NCT02244268 -NCT02244281 -NCT02244294 -NCT02244320 -NCT02244463 -NCT02244749 -NCT02244957 -NCT02245139 -NCT02245295 -NCT02245490 -NCT02245529 -NCT02245555 -NCT02245737 -NCT02245828 -NCT02245854 -NCT02245919 -NCT02246270 -NCT02246400 -NCT02246439 -NCT02246673 -NCT02246699 -NCT02246894 -NCT02246946 -NCT02247011 -NCT02247076 -NCT02247180 -NCT02247375 -NCT02247401 -NCT02247635 -NCT02247726 -NCT02247843 -NCT02247973 -NCT02248194 -NCT02248233 -NCT02248688 -NCT02248753 -NCT02248831 -NCT02248909 -NCT02249052 -NCT02249065 -NCT02249104 -NCT02249156 -NCT02249182 -NCT02249195 -NCT02249273 -NCT02249312 -NCT02249494 -NCT02249546 -NCT02249624 -NCT02249637 -NCT02249767 -NCT02249858 -NCT02249988 -NCT02250209 -NCT02250222 -NCT02250313 -NCT02250352 -NCT02250430 -NCT02250456 -NCT02250521 -NCT02250716 -NCT02250781 -NCT02250794 -NCT02250859 -NCT02250885 -NCT02250950 -NCT02251210 -NCT02251327 -NCT02251379 -NCT02251392 -NCT02251548 -NCT02251574 -NCT02251600 -NCT02251639 -NCT02251665 -NCT02251756 -NCT02251795 -NCT02251912 -NCT02251938 -NCT02251951 -NCT02252367 -NCT02252640 -NCT02252666 -NCT02252679 -NCT02252874 -NCT02253095 -NCT02253134 -NCT02253290 -NCT02253485 -NCT02253524 -NCT02253537 -NCT02253550 -NCT02253576 -NCT02253719 -NCT02253901 -NCT02254265 -NCT02254382 -NCT02254473 -NCT02254811 -NCT02254850 -NCT02254863 -NCT02254889 -NCT02254967 -NCT02255071 -NCT02255084 -NCT02255305 -NCT02255331 -NCT02255396 -NCT02255474 -NCT02255578 -NCT02255617 -NCT02255721 -NCT02255734 -NCT02255747 -NCT02255825 -NCT02255903 -NCT02255929 -NCT02256046 -NCT02256111 -NCT02256163 -NCT02256319 -NCT02256397 -NCT02256501 -NCT02256631 -NCT02256696 -NCT02256774 -NCT02256813 -NCT02256917 -NCT02257307 -NCT02257385 -NCT02257398 -NCT02257606 -NCT02257723 -NCT02257814 -NCT02257892 -NCT02258100 -NCT02258152 -NCT02258204 -NCT02258217 -NCT02258269 -NCT02258295 -NCT02258347 -NCT02258360 -NCT02258490 -NCT02258763 -NCT02258802 -NCT02258841 -NCT02258932 -NCT02258945 -NCT02258997 -NCT02259101 -NCT02259192 -NCT02259283 -NCT02259361 -NCT02259387 -NCT02259465 -NCT02259595 -NCT02259920 -NCT02260128 -NCT02260206 -NCT02260362 -NCT02260453 -NCT02260635 -NCT02260648 -NCT02260674 -NCT02260817 -NCT02260908 -NCT02261246 -NCT02261467 -NCT02261506 -NCT02261610 -NCT02261662 -NCT02261727 -NCT02261753 -NCT02261987 -NCT02262143 -NCT02262156 -NCT02262299 -NCT02262715 -NCT02262728 -NCT02262806 -NCT02262845 -NCT02263027 -NCT02263118 -NCT02263638 -NCT02263703 -NCT02263898 -NCT02264002 -NCT02264314 -NCT02264392 -NCT02264574 -NCT02264652 -NCT02264730 -NCT02264925 -NCT02265003 -NCT02265107 -NCT02265185 -NCT02265237 -NCT02265328 -NCT02265341 -NCT02265380 -NCT02265614 -NCT02265952 -NCT02266095 -NCT02266160 -NCT02266199 -NCT02266238 -NCT02266329 -NCT02266433 -NCT02266667 -NCT02266823 -NCT02267278 -NCT02267655 -NCT02267772 -NCT02267941 -NCT02268058 -NCT02268305 -NCT02268383 -NCT02268578 -NCT02268617 -NCT02268630 -NCT02268877 -NCT02268890 -NCT02268903 -NCT02268955 -NCT02269046 -NCT02269098 -NCT02269124 -NCT02269306 -NCT02269592 -NCT02269644 -NCT02269722 -NCT02269735 -NCT02269761 -NCT02269826 -NCT02269865 -NCT02269891 -NCT02270216 -NCT02270255 -NCT02270476 -NCT02270593 -NCT02270697 -NCT02270827 -NCT02270840 -NCT02270866 -NCT02270996 -NCT02271126 -NCT02271178 -NCT02271217 -NCT02271243 -NCT02271282 -NCT02271308 -NCT02271399 -NCT02271568 -NCT02271594 -NCT02271620 -NCT02271724 -NCT02271737 -NCT02271750 -NCT02271984 -NCT02272075 -NCT02272153 -NCT02272218 -NCT02272608 -NCT02272998 -NCT02273596 -NCT02273882 -NCT02273973 -NCT02274155 -NCT02274168 -NCT02274272 -NCT02274311 -NCT02274363 -NCT02274402 -NCT02274493 -NCT02274532 -NCT02274597 -NCT02274636 -NCT02274740 -NCT02274753 -NCT02274831 -NCT02274987 -NCT02275169 -NCT02275221 -NCT02275390 -NCT02275533 -NCT02275546 -NCT02275611 -NCT02275793 -NCT02275910 -NCT02275936 -NCT02276053 -NCT02276547 -NCT02276573 -NCT02276690 -NCT02276716 -NCT02276768 -NCT02277028 -NCT02277106 -NCT02277119 -NCT02277184 -NCT02277197 -NCT02277210 -NCT02277275 -NCT02277327 -NCT02277366 -NCT02277444 -NCT02277587 -NCT02277730 -NCT02277834 -NCT02277860 -NCT02277886 -NCT02277964 -NCT02278341 -NCT02278536 -NCT02278718 -NCT02278744 -NCT02278874 -NCT02278913 -NCT02278965 -NCT02279017 -NCT02279199 -NCT02279264 -NCT02279277 -NCT02279368 -NCT02279472 -NCT02279511 -NCT02279550 -NCT02279641 -NCT02279745 -NCT02279875 -NCT02279901 -NCT02279940 -NCT02280005 -NCT02280083 -NCT02280174 -NCT02280239 -NCT02280265 -NCT02280343 -NCT02280707 -NCT02280772 -NCT02281006 -NCT02281097 -NCT02281162 -NCT02281318 -NCT02281513 -NCT02281669 -NCT02281812 -NCT02282033 -NCT02282111 -NCT02282150 -NCT02282202 -NCT02282410 -NCT02282436 -NCT02282488 -NCT02282514 -NCT02282540 -NCT02282995 -NCT02283008 -NCT02283151 -NCT02283203 -NCT02283268 -NCT02283411 -NCT02283424 -NCT02283632 -NCT02283684 -NCT02283853 -NCT02283892 -NCT02283957 -NCT02283970 -NCT02284074 -NCT02284334 -NCT02284464 -NCT02284724 -NCT02284789 -NCT02284841 -NCT02284867 -NCT02284958 -NCT02284997 -NCT02285231 -NCT02285244 -NCT02285400 -NCT02285439 -NCT02285634 -NCT02285920 -NCT02285998 -NCT02286076 -NCT02286245 -NCT02286817 -NCT02287311 -NCT02287337 -NCT02287402 -NCT02287506 -NCT02287558 -NCT02287675 -NCT02287818 -NCT02287844 -NCT02287883 -NCT02288052 -NCT02288156 -NCT02288351 -NCT02288455 -NCT02288572 -NCT02288702 -NCT02288858 -NCT02288910 -NCT02288949 -NCT02288988 -NCT02289092 -NCT02289183 -NCT02289352 -NCT02289560 -NCT02289924 -NCT02290002 -NCT02290210 -NCT02290288 -NCT02290340 -NCT02290405 -NCT02290431 -NCT02290444 -NCT02290587 -NCT02290613 -NCT02290730 -NCT02290808 -NCT02290886 -NCT02291016 -NCT02291029 -NCT02291107 -NCT02291224 -NCT02291237 -NCT02291354 -NCT02291757 -NCT02291796 -NCT02291913 -NCT02291991 -NCT02292095 -NCT02292238 -NCT02292316 -NCT02292394 -NCT02292420 -NCT02292459 -NCT02292940 -NCT02293447 -NCT02293772 -NCT02293863 -NCT02293993 -NCT02294136 -NCT02294253 -NCT02294279 -NCT02294500 -NCT02294708 -NCT02294734 -NCT02294773 -NCT02294981 -NCT02295007 -NCT02295033 -NCT02295176 -NCT02295189 -NCT02295254 -NCT02295280 -NCT02295397 -NCT02295748 -NCT02295761 -NCT02295917 -NCT02296047 -NCT02296216 -NCT02296307 -NCT02296411 -NCT02296437 -NCT02296528 -NCT02296541 -NCT02296710 -NCT02296944 -NCT02296970 -NCT02297048 -NCT02297061 -NCT02297178 -NCT02297217 -NCT02297282 -NCT02297451 -NCT02297542 -NCT02297698 -NCT02297711 -NCT02297841 -NCT02297919 -NCT02297945 -NCT02298257 -NCT02298491 -NCT02298569 -NCT02298595 -NCT02298621 -NCT02298634 -NCT02298647 -NCT02298673 -NCT02298686 -NCT02298699 -NCT02298712 -NCT02298764 -NCT02298933 -NCT02299089 -NCT02299115 -NCT02299128 -NCT02299206 -NCT02299245 -NCT02299323 -NCT02299375 -NCT02299388 -NCT02299414 -NCT02299570 -NCT02299583 -NCT02299713 -NCT02299778 -NCT02299973 -NCT02300103 -NCT02300129 -NCT02300272 -NCT02300506 -NCT02300519 -NCT02300792 -NCT02300883 -NCT02300909 -NCT02300948 -NCT02301000 -NCT02301052 -NCT02301221 -NCT02301325 -NCT02301338 -NCT02301390 -NCT02301481 -NCT02301741 -NCT02301845 -NCT02301897 -NCT02301962 -NCT02301975 -NCT02302092 -NCT02302118 -NCT02302196 -NCT02302300 -NCT02302365 -NCT02302417 -NCT02302794 -NCT02302898 -NCT02302937 -NCT02302963 -NCT02303080 -NCT02303093 -NCT02303145 -NCT02303288 -NCT02303301 -NCT02303340 -NCT02303392 -NCT02303574 -NCT02303600 -NCT02303730 -NCT02303808 -NCT02303873 -NCT02303925 -NCT02304302 -NCT02304471 -NCT02304510 -NCT02304848 -NCT02304874 -NCT02304887 -NCT02304926 -NCT02305043 -NCT02305199 -NCT02305342 -NCT02305914 -NCT02305953 -NCT02305992 -NCT02306070 -NCT02306187 -NCT02306317 -NCT02306473 -NCT02306499 -NCT02306512 -NCT02306564 -NCT02306590 -NCT02306694 -NCT02306707 -NCT02306759 -NCT02306993 -NCT02307006 -NCT02307162 -NCT02307253 -NCT02307526 -NCT02307565 -NCT02307617 -NCT02307721 -NCT02307916 -NCT02307981 -NCT02307994 -NCT02308124 -NCT02308202 -NCT02308254 -NCT02308280 -NCT02308449 -NCT02308514 -NCT02308540 -NCT02308735 -NCT02308748 -NCT02308891 -NCT02309047 -NCT02309099 -NCT02309307 -NCT02309476 -NCT02309515 -NCT02309554 -NCT02309814 -NCT02310061 -NCT02310074 -NCT02310191 -NCT02310230 -NCT02310425 -NCT02310607 -NCT02310737 -NCT02310763 -NCT02310828 -NCT02310880 -NCT02310906 -NCT02310919 -NCT02310945 -NCT02310958 -NCT02311075 -NCT02311283 -NCT02311309 -NCT02311322 -NCT02311361 -NCT02311478 -NCT02311530 -NCT02311608 -NCT02311673 -NCT02311829 -NCT02311881 -NCT02311894 -NCT02311933 -NCT02312102 -NCT02312115 -NCT02312206 -NCT02312297 -NCT02312453 -NCT02312505 -NCT02312570 -NCT02312609 -NCT02312778 -NCT02312804 -NCT02312908 -NCT02313103 -NCT02313233 -NCT02313454 -NCT02313467 -NCT02313480 -NCT02313506 -NCT02313636 -NCT02313675 -NCT02313805 -NCT02313870 -NCT02313909 -NCT02314039 -NCT02314325 -NCT02314377 -NCT02314676 -NCT02314715 -NCT02314741 -NCT02314936 -NCT02315105 -NCT02315131 -NCT02315235 -NCT02315430 -NCT02315443 -NCT02315521 -NCT02315560 -NCT02315586 -NCT02315664 -NCT02315781 -NCT02315833 -NCT02315859 -NCT02315885 -NCT02316171 -NCT02316197 -NCT02316249 -NCT02316366 -NCT02316444 -NCT02316587 -NCT02316743 -NCT02316899 -NCT02316912 -NCT02316925 -NCT02317042 -NCT02317120 -NCT02317211 -NCT02317315 -NCT02317328 -NCT02317549 -NCT02317653 -NCT02317887 -NCT02317926 -NCT02317965 -NCT02317978 -NCT02318082 -NCT02318147 -NCT02318160 -NCT02318225 -NCT02318407 -NCT02318420 -NCT02318511 -NCT02318550 -NCT02318875 -NCT02319070 -NCT02319083 -NCT02319109 -NCT02319122 -NCT02319200 -NCT02319395 -NCT02319421 -NCT02319486 -NCT02319538 -NCT02320006 -NCT02320071 -NCT02320149 -NCT02320214 -NCT02320227 -NCT02320253 -NCT02320318 -NCT02320383 -NCT02320552 -NCT02320565 -NCT02320617 -NCT02320760 -NCT02320851 -NCT02320968 -NCT02321124 -NCT02321267 -NCT02321280 -NCT02321384 -NCT02321449 -NCT02321514 -NCT02321527 -NCT02321540 -NCT02321670 -NCT02321696 -NCT02321800 -NCT02321826 -NCT02321930 -NCT02322021 -NCT02322112 -NCT02322138 -NCT02322203 -NCT02322333 -NCT02322411 -NCT02322671 -NCT02322866 -NCT02323087 -NCT02323204 -NCT02323269 -NCT02323451 -NCT02323646 -NCT02323724 -NCT02323932 -NCT02323997 -NCT02324023 -NCT02324036 -NCT02324049 -NCT02324192 -NCT02324517 -NCT02324907 -NCT02324920 -NCT02324985 -NCT02325024 -NCT02325063 -NCT02325089 -NCT02325128 -NCT02325154 -NCT02325375 -NCT02325440 -NCT02325453 -NCT02325492 -NCT02325973 -NCT02325999 -NCT02326324 -NCT02326454 -NCT02326597 -NCT02326623 -NCT02326805 -NCT02326857 -NCT02326909 -NCT02326922 -NCT02326974 -NCT02327091 -NCT02327247 -NCT02327377 -NCT02327390 -NCT02327481 -NCT02327494 -NCT02327520 -NCT02327650 -NCT02327793 -NCT02327871 -NCT02327884 -NCT02327897 -NCT02327936 -NCT02328040 -NCT02328196 -NCT02328274 -NCT02328339 -NCT02328404 -NCT02328469 -NCT02328625 -NCT02328664 -NCT02328872 -NCT02329054 -NCT02329171 -NCT02329210 -NCT02329236 -NCT02329275 -NCT02329301 -NCT02329327 -NCT02329379 -NCT02329470 -NCT02329509 -NCT02329522 -NCT02329548 -NCT02329730 -NCT02329873 -NCT02329938 -NCT02329977 -NCT02329990 -NCT02330094 -NCT02330107 -NCT02330302 -NCT02330315 -NCT02330328 -NCT02330471 -NCT02330510 -NCT02330770 -NCT02330796 -NCT02331017 -NCT02331147 -NCT02331550 -NCT02332031 -NCT02332096 -NCT02332122 -NCT02332187 -NCT02332369 -NCT02332447 -NCT02332486 -NCT02332538 -NCT02332590 -NCT02332707 -NCT02332772 -NCT02332785 -NCT02332980 -NCT02333292 -NCT02333617 -NCT02333708 -NCT02333721 -NCT02333851 -NCT02334111 -NCT02334163 -NCT02334189 -NCT02334202 -NCT02334254 -NCT02334475 -NCT02334657 -NCT02334774 -NCT02334826 -NCT02334852 -NCT02334891 -NCT02335034 -NCT02335099 -NCT02335164 -NCT02335190 -NCT02335216 -NCT02335255 -NCT02335359 -NCT02335567 -NCT02335580 -NCT02335710 -NCT02335749 -NCT02335853 -NCT02335879 -NCT02335957 -NCT02336009 -NCT02336139 -NCT02336165 -NCT02336256 -NCT02336425 -NCT02336438 -NCT02336464 -NCT02336490 -NCT02336516 -NCT02337049 -NCT02337088 -NCT02337179 -NCT02337244 -NCT02337673 -NCT02337738 -NCT02337764 -NCT02337829 -NCT02337868 -NCT02337907 -NCT02337933 -NCT02337972 -NCT02338050 -NCT02338076 -NCT02338167 -NCT02338297 -NCT02338609 -NCT02338713 -NCT02338882 -NCT02338895 -NCT02338973 -NCT02339090 -NCT02339142 -NCT02339272 -NCT02339337 -NCT02339376 -NCT02339402 -NCT02339506 -NCT02339831 -NCT02340013 -NCT02340273 -NCT02340377 -NCT02340390 -NCT02340429 -NCT02340507 -NCT02340520 -NCT02340533 -NCT02340845 -NCT02340871 -NCT02340923 -NCT02340936 -NCT02340962 -NCT02341040 -NCT02341196 -NCT02341287 -NCT02341339 -NCT02341365 -NCT02341547 -NCT02341664 -NCT02341690 -NCT02341846 -NCT02341989 -NCT02342067 -NCT02342093 -NCT02342132 -NCT02342197 -NCT02342223 -NCT02342262 -NCT02342301 -NCT02342457 -NCT02342483 -NCT02342639 -NCT02342704 -NCT02342808 -NCT02342886 -NCT02343237 -NCT02343276 -NCT02343315 -NCT02343354 -NCT02343562 -NCT02343575 -NCT02343627 -NCT02343692 -NCT02343822 -NCT02344004 -NCT02344108 -NCT02344199 -NCT02344264 -NCT02344277 -NCT02344316 -NCT02344329 -NCT02344407 -NCT02344446 -NCT02344485 -NCT02344537 -NCT02344563 -NCT02344654 -NCT02344862 -NCT02344992 -NCT02345031 -NCT02345161 -NCT02345421 -NCT02345473 -NCT02345616 -NCT02345629 -NCT02345876 -NCT02346032 -NCT02346071 -NCT02346214 -NCT02346227 -NCT02346331 -NCT02346409 -NCT02346448 -NCT02346500 -NCT02346604 -NCT02346656 -NCT02346825 -NCT02347059 -NCT02347111 -NCT02347215 -NCT02347241 -NCT02347267 -NCT02347280 -NCT02347449 -NCT02347462 -NCT02347501 -NCT02347618 -NCT02347722 -NCT02347787 -NCT02347969 -NCT02348021 -NCT02348099 -NCT02348203 -NCT02348229 -NCT02348294 -NCT02348372 -NCT02348385 -NCT02348398 -NCT02348437 -NCT02348502 -NCT02348684 -NCT02348983 -NCT02348996 -NCT02349048 -NCT02349061 -NCT02349295 -NCT02349386 -NCT02349399 -NCT02349451 -NCT02349464 -NCT02349568 -NCT02349841 -NCT02349854 -NCT02349893 -NCT02349919 -NCT02349945 -NCT02350153 -NCT02350179 -NCT02350283 -NCT02350309 -NCT02350387 -NCT02350400 -NCT02350556 -NCT02350660 -NCT02350881 -NCT02351128 -NCT02351141 -NCT02351180 -NCT02351297 -NCT02351349 -NCT02351375 -NCT02351401 -NCT02351453 -NCT02351492 -NCT02351596 -NCT02351700 -NCT02351791 -NCT02351882 -NCT02351960 -NCT02351986 -NCT02352181 -NCT02352220 -NCT02352324 -NCT02352519 -NCT02352532 -NCT02352545 -NCT02352636 -NCT02352727 -NCT02352766 -NCT02352818 -NCT02353039 -NCT02353091 -NCT02353143 -NCT02353338 -NCT02353364 -NCT02353390 -NCT02353481 -NCT02353572 -NCT02354079 -NCT02354118 -NCT02354352 -NCT02354365 -NCT02354469 -NCT02354508 -NCT02354534 -NCT02354677 -NCT02354781 -NCT02354924 -NCT02355067 -NCT02355223 -NCT02355418 -NCT02355483 -NCT02355496 -NCT02355756 -NCT02355925 -NCT02355938 -NCT02355990 -NCT02356068 -NCT02356159 -NCT02356172 -NCT02356250 -NCT02356276 -NCT02356302 -NCT02356419 -NCT02356445 -NCT02356562 -NCT02356575 -NCT02356666 -NCT02356679 -NCT02356913 -NCT02356926 -NCT02356965 -NCT02356978 -NCT02357134 -NCT02357225 -NCT02357407 -NCT02357420 -NCT02357485 -NCT02357498 -NCT02357524 -NCT02357550 -NCT02357667 -NCT02357758 -NCT02357862 -NCT02357914 -NCT02357992 -NCT02358213 -NCT02358239 -NCT02358330 -NCT02358434 -NCT02358590 -NCT02358642 -NCT02358681 -NCT02358850 -NCT02358876 -NCT02358954 -NCT02359097 -NCT02359266 -NCT02359643 -NCT02359682 -NCT02359812 -NCT02360046 -NCT02360072 -NCT02360241 -NCT02360254 -NCT02360384 -NCT02360540 -NCT02360618 -NCT02360787 -NCT02360826 -NCT02360852 -NCT02360865 -NCT02360969 -NCT02361008 -NCT02361112 -NCT02361125 -NCT02361164 -NCT02361281 -NCT02361359 -NCT02361372 -NCT02361385 -NCT02361411 -NCT02361424 -NCT02361437 -NCT02361450 -NCT02361541 -NCT02361580 -NCT02361593 -NCT02361606 -NCT02361749 -NCT02361788 -NCT02361827 -NCT02361996 -NCT02362243 -NCT02362295 -NCT02362425 -NCT02362438 -NCT02362659 -NCT02362737 -NCT02362932 -NCT02363010 -NCT02363049 -NCT02363075 -NCT02363153 -NCT02363179 -NCT02363192 -NCT02363244 -NCT02363309 -NCT02363335 -NCT02363413 -NCT02363465 -NCT02363569 -NCT02363595 -NCT02363634 -NCT02363686 -NCT02363790 -NCT02363816 -NCT02363985 -NCT02364037 -NCT02364089 -NCT02364128 -NCT02364180 -NCT02364336 -NCT02364427 -NCT02364518 -NCT02364778 -NCT02364960 -NCT02365142 -NCT02365168 -NCT02365376 -NCT02365415 -NCT02365454 -NCT02365506 -NCT02365532 -NCT02365610 -NCT02365675 -NCT02365701 -NCT02365714 -NCT02365740 -NCT02365779 -NCT02365935 -NCT02365974 -NCT02366182 -NCT02366208 -NCT02366221 -NCT02366507 -NCT02366650 -NCT02366975 -NCT02367027 -NCT02367066 -NCT02367157 -NCT02367222 -NCT02367573 -NCT02367703 -NCT02367729 -NCT02367976 -NCT02368002 -NCT02368054 -NCT02368340 -NCT02368496 -NCT02368639 -NCT02368730 -NCT02368795 -NCT02368912 -NCT02369042 -NCT02369081 -NCT02369471 -NCT02369718 -NCT02369861 -NCT02370108 -NCT02370121 -NCT02370134 -NCT02370381 -NCT02370420 -NCT02370511 -NCT02370524 -NCT02370602 -NCT02370628 -NCT02370667 -NCT02370771 -NCT02370797 -NCT02370823 -NCT02370849 -NCT02370953 -NCT02371018 -NCT02371044 -NCT02371070 -NCT02371200 -NCT02371252 -NCT02371330 -NCT02371408 -NCT02371473 -NCT02371499 -NCT02371564 -NCT02371590 -NCT02371642 -NCT02371681 -NCT02371798 -NCT02371824 -NCT02371863 -NCT02371902 -NCT02372058 -NCT02372071 -NCT02372123 -NCT02372487 -NCT02372513 -NCT02372747 -NCT02372760 -NCT02372838 -NCT02372968 -NCT02373007 -NCT02373072 -NCT02373267 -NCT02373488 -NCT02373553 -NCT02373618 -NCT02373631 -NCT02373644 -NCT02373891 -NCT02373930 -NCT02373969 -NCT02374593 -NCT02374684 -NCT02374957 -NCT02375087 -NCT02375113 -NCT02375425 -NCT02375529 -NCT02375620 -NCT02375724 -NCT02375789 -NCT02375828 -NCT02375945 -NCT02376075 -NCT02376114 -NCT02376166 -NCT02376634 -NCT02376725 -NCT02376790 -NCT02376816 -NCT02376868 -NCT02377128 -NCT02377141 -NCT02377180 -NCT02377206 -NCT02377284 -NCT02377362 -NCT02377570 -NCT02377817 -NCT02377869 -NCT02377947 -NCT02377973 -NCT02378038 -NCT02378233 -NCT02378285 -NCT02378311 -NCT02378350 -NCT02378415 -NCT02378493 -NCT02378779 -NCT02378805 -NCT02378844 -NCT02378883 -NCT02378935 -NCT02378961 -NCT02379169 -NCT02379182 -NCT02379221 -NCT02379364 -NCT02379507 -NCT02379585 -NCT02379728 -NCT02379754 -NCT02379819 -NCT02379871 -NCT02380053 -NCT02380118 -NCT02380131 -NCT02380170 -NCT02380209 -NCT02380222 -NCT02380235 -NCT02380378 -NCT02380560 -NCT02380651 -NCT02380729 -NCT02380755 -NCT02380898 -NCT02380911 -NCT02381002 -NCT02381028 -NCT02381184 -NCT02381288 -NCT02381327 -NCT02381366 -NCT02381457 -NCT02381470 -NCT02381587 -NCT02381665 -NCT02381678 -NCT02381834 -NCT02381925 -NCT02382068 -NCT02382107 -NCT02382250 -NCT02382458 -NCT02382471 -NCT02382523 -NCT02382640 -NCT02382653 -NCT02382770 -NCT02382809 -NCT02382991 -NCT02383277 -NCT02383316 -NCT02383407 -NCT02383641 -NCT02383797 -NCT02384200 -NCT02384252 -NCT02384343 -NCT02384408 -NCT02384421 -NCT02384616 -NCT02384668 -NCT02384876 -NCT02385188 -NCT02385240 -NCT02385266 -NCT02385292 -NCT02385461 -NCT02385487 -NCT02385604 -NCT02385812 -NCT02385929 -NCT02385994 -NCT02386007 -NCT02386228 -NCT02386332 -NCT02386397 -NCT02386436 -NCT02386527 -NCT02386631 -NCT02386657 -NCT02386722 -NCT02386735 -NCT02387138 -NCT02387242 -NCT02387281 -NCT02387359 -NCT02387853 -NCT02387879 -NCT02387892 -NCT02388126 -NCT02388152 -NCT02388204 -NCT02388269 -NCT02388321 -NCT02388516 -NCT02388750 -NCT02389023 -NCT02389088 -NCT02389114 -NCT02389153 -NCT02389192 -NCT02389205 -NCT02389244 -NCT02389270 -NCT02389309 -NCT02389335 -NCT02389413 -NCT02389582 -NCT02389634 -NCT02389647 -NCT02389660 -NCT02389673 -NCT02389686 -NCT02389777 -NCT02389803 -NCT02389998 -NCT02390089 -NCT02390115 -NCT02390284 -NCT02390388 -NCT02390596 -NCT02390739 -NCT02390752 -NCT02390843 -NCT02390856 -NCT02390882 -NCT02390934 -NCT02391012 -NCT02391220 -NCT02391350 -NCT02391415 -NCT02391896 -NCT02391987 -NCT02392156 -NCT02392299 -NCT02392403 -NCT02392611 -NCT02393001 -NCT02393170 -NCT02393183 -NCT02393248 -NCT02393365 -NCT02393430 -NCT02393560 -NCT02393690 -NCT02393755 -NCT02394184 -NCT02394197 -NCT02394236 -NCT02394314 -NCT02394327 -NCT02394340 -NCT02394392 -NCT02394431 -NCT02394470 -NCT02394548 -NCT02394613 -NCT02394626 -NCT02394678 -NCT02394782 -NCT02394899 -NCT02395107 -NCT02395120 -NCT02395276 -NCT02395471 -NCT02395484 -NCT02395510 -NCT02395549 -NCT02395601 -NCT02395770 -NCT02395848 -NCT02396147 -NCT02396212 -NCT02396251 -NCT02396420 -NCT02396446 -NCT02396537 -NCT02396589 -NCT02396706 -NCT02396732 -NCT02396745 -NCT02396810 -NCT02396823 -NCT02396849 -NCT02396862 -NCT02396927 -NCT02396940 -NCT02396953 -NCT02396966 -NCT02396992 -NCT02397005 -NCT02397018 -NCT02397057 -NCT02397135 -NCT02397148 -NCT02397200 -NCT02397252 -NCT02397304 -NCT02397343 -NCT02397499 -NCT02397525 -NCT02397785 -NCT02397993 -NCT02398019 -NCT02398032 -NCT02398188 -NCT02398201 -NCT02398214 -NCT02398253 -NCT02398344 -NCT02398396 -NCT02398656 -NCT02398721 -NCT02398734 -NCT02398773 -NCT02398786 -NCT02398864 -NCT02399150 -NCT02399176 -NCT02399215 -NCT02399254 -NCT02399345 -NCT02399449 -NCT02399475 -NCT02399670 -NCT02399683 -NCT02399800 -NCT02399839 -NCT02399969 -NCT02400073 -NCT02400216 -NCT02400229 -NCT02400359 -NCT02400580 -NCT02400697 -NCT02400775 -NCT02400970 -NCT02401321 -NCT02401347 -NCT02401568 -NCT02401581 -NCT02401789 -NCT02401919 -NCT02402439 -NCT02402543 -NCT02402569 -NCT02402803 -NCT02403011 -NCT02403414 -NCT02403492 -NCT02403687 -NCT02403700 -NCT02403726 -NCT02403752 -NCT02403830 -NCT02403843 -NCT02403908 -NCT02403921 -NCT02404064 -NCT02404103 -NCT02404285 -NCT02404493 -NCT02404623 -NCT02404753 -NCT02404857 -NCT02404870 -NCT02405104 -NCT02405143 -NCT02405312 -NCT02405533 -NCT02405572 -NCT02405780 -NCT02405793 -NCT02405897 -NCT02405949 -NCT02405962 -NCT02406287 -NCT02406326 -NCT02406365 -NCT02406391 -NCT02406586 -NCT02406820 -NCT02406859 -NCT02406963 -NCT02407002 -NCT02407067 -NCT02407080 -NCT02407119 -NCT02407561 -NCT02407587 -NCT02407613 -NCT02407704 -NCT02407938 -NCT02408003 -NCT02408016 -NCT02408068 -NCT02408120 -NCT02408159 -NCT02408328 -NCT02408445 -NCT02408523 -NCT02408627 -NCT02408679 -NCT02408692 -NCT02408887 -NCT02409043 -NCT02409160 -NCT02409238 -NCT02409251 -NCT02409264 -NCT02409290 -NCT02409381 -NCT02409407 -NCT02409797 -NCT02409914 -NCT02410018 -NCT02410135 -NCT02410226 -NCT02410304 -NCT02410382 -NCT02410486 -NCT02410629 -NCT02410772 -NCT02410785 -NCT02410889 -NCT02410993 -NCT02411019 -NCT02411175 -NCT02411266 -NCT02411396 -NCT02411461 -NCT02411513 -NCT02411578 -NCT02411643 -NCT02411682 -NCT02411734 -NCT02411825 -NCT02411890 -NCT02411916 -NCT02412020 -NCT02412046 -NCT02412137 -NCT02412176 -NCT02412254 -NCT02412332 -NCT02412527 -NCT02412592 -NCT02412631 -NCT02412683 -NCT02412735 -NCT02412826 -NCT02412839 -NCT02412956 -NCT02413138 -NCT02413268 -NCT02413359 -NCT02413450 -NCT02413580 -NCT02413671 -NCT02413697 -NCT02413788 -NCT02413853 -NCT02413944 -NCT02414152 -NCT02414165 -NCT02414191 -NCT02414217 -NCT02414269 -NCT02414295 -NCT02414438 -NCT02414529 -NCT02414659 -NCT02414672 -NCT02414789 -NCT02414893 -NCT02415062 -NCT02415140 -NCT02415179 -NCT02415270 -NCT02415361 -NCT02415465 -NCT02415608 -NCT02415725 -NCT02415933 -NCT02416063 -NCT02416154 -NCT02416167 -NCT02416206 -NCT02416219 -NCT02416440 -NCT02416752 -NCT02416960 -NCT02417181 -NCT02417298 -NCT02417337 -NCT02417480 -NCT02417506 -NCT02417701 -NCT02417740 -NCT02417896 -NCT02418039 -NCT02418182 -NCT02418195 -NCT02418325 -NCT02418390 -NCT02418429 -NCT02418507 -NCT02418533 -NCT02418767 -NCT02418832 -NCT02418858 -NCT02418897 -NCT02418949 -NCT02419027 -NCT02419092 -NCT02419105 -NCT02419209 -NCT02419261 -NCT02419339 -NCT02419443 -NCT02419456 -NCT02419534 -NCT02419547 -NCT02419664 -NCT02419768 -NCT02419924 -NCT02419950 -NCT02420002 -NCT02420067 -NCT02420093 -NCT02420184 -NCT02420457 -NCT02420548 -NCT02420561 -NCT02420665 -NCT02420691 -NCT02420769 -NCT02420912 -NCT02420925 -NCT02421276 -NCT02421354 -NCT02421406 -NCT02421523 -NCT02421705 -NCT02421757 -NCT02421770 -NCT02421822 -NCT02421848 -NCT02421887 -NCT02422017 -NCT02422030 -NCT02422082 -NCT02422095 -NCT02422108 -NCT02422147 -NCT02422160 -NCT02422199 -NCT02422394 -NCT02422433 -NCT02422459 -NCT02422511 -NCT02422524 -NCT02422576 -NCT02422680 -NCT02422784 -NCT02422797 -NCT02422953 -NCT02423083 -NCT02423395 -NCT02423564 -NCT02423811 -NCT02423967 -NCT02424123 -NCT02424240 -NCT02424396 -NCT02424461 -NCT02424474 -NCT02424539 -NCT02424708 -NCT02425033 -NCT02425150 -NCT02425228 -NCT02425280 -NCT02425449 -NCT02425475 -NCT02425553 -NCT02425631 -NCT02425722 -NCT02425930 -NCT02425982 -NCT02426034 -NCT02426112 -NCT02426385 -NCT02426424 -NCT02426515 -NCT02426658 -NCT02426814 -NCT02426905 -NCT02426931 -NCT02426944 -NCT02427009 -NCT02427113 -NCT02427269 -NCT02427295 -NCT02427321 -NCT02427399 -NCT02427620 -NCT02427646 -NCT02427828 -NCT02427958 -NCT02427984 -NCT02428010 -NCT02428062 -NCT02428218 -NCT02428478 -NCT02428530 -NCT02428582 -NCT02428842 -NCT02428881 -NCT02428920 -NCT02428959 -NCT02429050 -NCT02429232 -NCT02429349 -NCT02429362 -NCT02429505 -NCT02429518 -NCT02429544 -NCT02429609 -NCT02429765 -NCT02429830 -NCT02430181 -NCT02430194 -NCT02430285 -NCT02430428 -NCT02430532 -NCT02430688 -NCT02431052 -NCT02431117 -NCT02431390 -NCT02431416 -NCT02431442 -NCT02431494 -NCT02431507 -NCT02431520 -NCT02431533 -NCT02431624 -NCT02431754 -NCT02431806 -NCT02431884 -NCT02432196 -NCT02432209 -NCT02432274 -NCT02432521 -NCT02432547 -NCT02432625 -NCT02432729 -NCT02433002 -NCT02433483 -NCT02433535 -NCT02433639 -NCT02433730 -NCT02433769 -NCT02433808 -NCT02433847 -NCT02434432 -NCT02434536 -NCT02434562 -NCT02434575 -NCT02434731 -NCT02434822 -NCT02434939 -NCT02434991 -NCT02435147 -NCT02435264 -NCT02435303 -NCT02435329 -NCT02435342 -NCT02435381 -NCT02435524 -NCT02435745 -NCT02435810 -NCT02435888 -NCT02435940 -NCT02435966 -NCT02435979 -NCT02436070 -NCT02436213 -NCT02436252 -NCT02436343 -NCT02436499 -NCT02436590 -NCT02436681 -NCT02436707 -NCT02436720 -NCT02436850 -NCT02437019 -NCT02437162 -NCT02437201 -NCT02437292 -NCT02437383 -NCT02437500 -NCT02437669 -NCT02437760 -NCT02437799 -NCT02437942 -NCT02438189 -NCT02438202 -NCT02438579 -NCT02438917 -NCT02439112 -NCT02439125 -NCT02439216 -NCT02439242 -NCT02439281 -NCT02439307 -NCT02439528 -NCT02439554 -NCT02439567 -NCT02439645 -NCT02439905 -NCT02440139 -NCT02440347 -NCT02440438 -NCT02440516 -NCT02440646 -NCT02440841 -NCT02441049 -NCT02441166 -NCT02441270 -NCT02441335 -NCT02441413 -NCT02441491 -NCT02441530 -NCT02441816 -NCT02441868 -NCT02441933 -NCT02441946 -NCT02441985 -NCT02441998 -NCT02442102 -NCT02442271 -NCT02442284 -NCT02442297 -NCT02442440 -NCT02442661 -NCT02442674 -NCT02442713 -NCT02442765 -NCT02442778 -NCT02442882 -NCT02442999 -NCT02443090 -NCT02443142 -NCT02443181 -NCT02443246 -NCT02443259 -NCT02443298 -NCT02443311 -NCT02443415 -NCT02443597 -NCT02443623 -NCT02443636 -NCT02443649 -NCT02443740 -NCT02443896 -NCT02444026 -NCT02444715 -NCT02444884 -NCT02444910 -NCT02444936 -NCT02445014 -NCT02445027 -NCT02445118 -NCT02445261 -NCT02445391 -NCT02445430 -NCT02445469 -NCT02445573 -NCT02445664 -NCT02445716 -NCT02445755 -NCT02445911 -NCT02446132 -NCT02446184 -NCT02446301 -NCT02446626 -NCT02446665 -NCT02446678 -NCT02446769 -NCT02446821 -NCT02446951 -NCT02447055 -NCT02447120 -NCT02447159 -NCT02447172 -NCT02447237 -NCT02447250 -NCT02447276 -NCT02447588 -NCT02447692 -NCT02447731 -NCT02447991 -NCT02448069 -NCT02448121 -NCT02448251 -NCT02448485 -NCT02448654 -NCT02448862 -NCT02448927 -NCT02449083 -NCT02449161 -NCT02449304 -NCT02449668 -NCT02449850 -NCT02449863 -NCT02449902 -NCT02450058 -NCT02450097 -NCT02450188 -NCT02450474 -NCT02450630 -NCT02450825 -NCT02450942 -NCT02450955 -NCT02451384 -NCT02451423 -NCT02451462 -NCT02451657 -NCT02451709 -NCT02451761 -NCT02451787 -NCT02451800 -NCT02451826 -NCT02452073 -NCT02452112 -NCT02452164 -NCT02452437 -NCT02452502 -NCT02452567 -NCT02452671 -NCT02452762 -NCT02452944 -NCT02453126 -NCT02453243 -NCT02453269 -NCT02453295 -NCT02453360 -NCT02453373 -NCT02453412 -NCT02453438 -NCT02453503 -NCT02453529 -NCT02453620 -NCT02453685 -NCT02453737 -NCT02454127 -NCT02454153 -NCT02454166 -NCT02454192 -NCT02454283 -NCT02454335 -NCT02454374 -NCT02454426 -NCT02454439 -NCT02454595 -NCT02454751 -NCT02454907 -NCT02455011 -NCT02455076 -NCT02455297 -NCT02455323 -NCT02455362 -NCT02455427 -NCT02455544 -NCT02455622 -NCT02455648 -NCT02455804 -NCT02456025 -NCT02456051 -NCT02456155 -NCT02456272 -NCT02456662 -NCT02456701 -NCT02456779 -NCT02457104 -NCT02457338 -NCT02457390 -NCT02457468 -NCT02457637 -NCT02457728 -NCT02457897 -NCT02457910 -NCT02458118 -NCT02458326 -NCT02458404 -NCT02458417 -NCT02458612 -NCT02458703 -NCT02459041 -NCT02459392 -NCT02459431 -NCT02459600 -NCT02459652 -NCT02459717 -NCT02459951 -NCT02459964 -NCT02460055 -NCT02460133 -NCT02460159 -NCT02460237 -NCT02460315 -NCT02460380 -NCT02460445 -NCT02460458 -NCT02460653 -NCT02460679 -NCT02460783 -NCT02460809 -NCT02460913 -NCT02461069 -NCT02461095 -NCT02461147 -NCT02461173 -NCT02461303 -NCT02461407 -NCT02461628 -NCT02461719 -NCT02461784 -NCT02461862 -NCT02461940 -NCT02461966 -NCT02461992 -NCT02462018 -NCT02462213 -NCT02462226 -NCT02462278 -NCT02462291 -NCT02462369 -NCT02462408 -NCT02462486 -NCT02462811 -NCT02462954 -NCT02463019 -NCT02463045 -NCT02463331 -NCT02463435 -NCT02463461 -NCT02463539 -NCT02463578 -NCT02463656 -NCT02463799 -NCT02463825 -NCT02463851 -NCT02463942 -NCT02463968 -NCT02464124 -NCT02464176 -NCT02464215 -NCT02464241 -NCT02464319 -NCT02464371 -NCT02464553 -NCT02464592 -NCT02464644 -NCT02464683 -NCT02464748 -NCT02464774 -NCT02464826 -NCT02464839 -NCT02464891 -NCT02464982 -NCT02464995 -NCT02465060 -NCT02465190 -NCT02465229 -NCT02465359 -NCT02465385 -NCT02465528 -NCT02465580 -NCT02465632 -NCT02465645 -NCT02465749 -NCT02465775 -NCT02465788 -NCT02465814 -NCT02465840 -NCT02465931 -NCT02465970 -NCT02466204 -NCT02466269 -NCT02466308 -NCT02466360 -NCT02466464 -NCT02466477 -NCT02466529 -NCT02466633 -NCT02466698 -NCT02466776 -NCT02466789 -NCT02466802 -NCT02466828 -NCT02466906 -NCT02466932 -NCT02466971 -NCT02467088 -NCT02467114 -NCT02467127 -NCT02467140 -NCT02467192 -NCT02467244 -NCT02467257 -NCT02467270 -NCT02467517 -NCT02467751 -NCT02467881 -NCT02467959 -NCT02468037 -NCT02468193 -NCT02468258 -NCT02468271 -NCT02468284 -NCT02468453 -NCT02468596 -NCT02468635 -NCT02468648 -NCT02468765 -NCT02468778 -NCT02468817 -NCT02468830 -NCT02468921 -NCT02468973 -NCT02469012 -NCT02469298 -NCT02469571 -NCT02469662 -NCT02469675 -NCT02469779 -NCT02469805 -NCT02469844 -NCT02469935 -NCT02469948 -NCT02470117 -NCT02470169 -NCT02470273 -NCT02470364 -NCT02470390 -NCT02470494 -NCT02470507 -NCT02470663 -NCT02470702 -NCT02470884 -NCT02470962 -NCT02471014 -NCT02471118 -NCT02471261 -NCT02471352 -NCT02471482 -NCT02471573 -NCT02471599 -NCT02471989 -NCT02472145 -NCT02472223 -NCT02472288 -NCT02472340 -NCT02472418 -NCT02472431 -NCT02472509 -NCT02472548 -NCT02472574 -NCT02472665 -NCT02472808 -NCT02472899 -NCT02472912 -NCT02472938 -NCT02472990 -NCT02473029 -NCT02473042 -NCT02473341 -NCT02473393 -NCT02473406 -NCT02473614 -NCT02473653 -NCT02473952 -NCT02473965 -NCT02474004 -NCT02474056 -NCT02474108 -NCT02474251 -NCT02474602 -NCT02474615 -NCT02474680 -NCT02474706 -NCT02474719 -NCT02474732 -NCT02474745 -NCT02474823 -NCT02474888 -NCT02474940 -NCT02475005 -NCT02475057 -NCT02475122 -NCT02475226 -NCT02475291 -NCT02475317 -NCT02475668 -NCT02475733 -NCT02475993 -NCT02476006 -NCT02476019 -NCT02476097 -NCT02476175 -NCT02476240 -NCT02476279 -NCT02476292 -NCT02476357 -NCT02476383 -NCT02476396 -NCT02476409 -NCT02476513 -NCT02476617 -NCT02476721 -NCT02476864 -NCT02476942 -NCT02477007 -NCT02477059 -NCT02477176 -NCT02477228 -NCT02477254 -NCT02477358 -NCT02477436 -NCT02477488 -NCT02477631 -NCT02477644 -NCT02477839 -NCT02477969 -NCT02478190 -NCT02478242 -NCT02478398 -NCT02478411 -NCT02478450 -NCT02478580 -NCT02478710 -NCT02478892 -NCT02478905 -NCT02478957 -NCT02479048 -NCT02479074 -NCT02479087 -NCT02479243 -NCT02479295 -NCT02479438 -NCT02480283 -NCT02480595 -NCT02480634 -NCT02480881 -NCT02481037 -NCT02481076 -NCT02481128 -NCT02481258 -NCT02481414 -NCT02481947 -NCT02481973 -NCT02482025 -NCT02482233 -NCT02482324 -NCT02482337 -NCT02482350 -NCT02482467 -NCT02482818 -NCT02483156 -NCT02483208 -NCT02483429 -NCT02483637 -NCT02483689 -NCT02483728 -NCT02484092 -NCT02484118 -NCT02484300 -NCT02484404 -NCT02484417 -NCT02484508 -NCT02484560 -NCT02484638 -NCT02484716 -NCT02484755 -NCT02484846 -NCT02484937 -NCT02485145 -NCT02485275 -NCT02485340 -NCT02485418 -NCT02485574 -NCT02485665 -NCT02485704 -NCT02485717 -NCT02485743 -NCT02485808 -NCT02486016 -NCT02486042 -NCT02486081 -NCT02486276 -NCT02486302 -NCT02486380 -NCT02486614 -NCT02486653 -NCT02486666 -NCT02486731 -NCT02486757 -NCT02486783 -NCT02486809 -NCT02486835 -NCT02487134 -NCT02487277 -NCT02487394 -NCT02487407 -NCT02487472 -NCT02487602 -NCT02487615 -NCT02488122 -NCT02488135 -NCT02488187 -NCT02488200 -NCT02488434 -NCT02488772 -NCT02488889 -NCT02489110 -NCT02489370 -NCT02489500 -NCT02489617 -NCT02489630 -NCT02490007 -NCT02490046 -NCT02490059 -NCT02490202 -NCT02490358 -NCT02490527 -NCT02490878 -NCT02490930 -NCT02490943 -NCT02490982 -NCT02491060 -NCT02491125 -NCT02491255 -NCT02491281 -NCT02491320 -NCT02491554 -NCT02491567 -NCT02491632 -NCT02491814 -NCT02492087 -NCT02492126 -NCT02492295 -NCT02492347 -NCT02492373 -NCT02492945 -NCT02492984 -NCT02493036 -NCT02493049 -NCT02493127 -NCT02493296 -NCT02493374 -NCT02493452 -NCT02493517 -NCT02493543 -NCT02493673 -NCT02493855 -NCT02494011 -NCT02494076 -NCT02494206 -NCT02494297 -NCT02494323 -NCT02494440 -NCT02494466 -NCT02494635 -NCT02494674 -NCT02494687 -NCT02494882 -NCT02494973 -NCT02495090 -NCT02495168 -NCT02495311 -NCT02495610 -NCT02495844 -NCT02495883 -NCT02496013 -NCT02496078 -NCT02496104 -NCT02496221 -NCT02496299 -NCT02496338 -NCT02496429 -NCT02496546 -NCT02496572 -NCT02496585 -NCT02496689 -NCT02496715 -NCT02496741 -NCT02496767 -NCT02496780 -NCT02497066 -NCT02497079 -NCT02497183 -NCT02497261 -NCT02497417 -NCT02497443 -NCT02497534 -NCT02497547 -NCT02497638 -NCT02497677 -NCT02497781 -NCT02497846 -NCT02497872 -NCT02497898 -NCT02497976 -NCT02498275 -NCT02498301 -NCT02498340 -NCT02498418 -NCT02498535 -NCT02498587 -NCT02498613 -NCT02498639 -NCT02498886 -NCT02498964 -NCT02499120 -NCT02499419 -NCT02499484 -NCT02499497 -NCT02499575 -NCT02499601 -NCT02499835 -NCT02500030 -NCT02500056 -NCT02500147 -NCT02500238 -NCT02500264 -NCT02500277 -NCT02500329 -NCT02500407 -NCT02500420 -NCT02500459 -NCT02500641 -NCT02500693 -NCT02500732 -NCT02500901 -NCT02501070 -NCT02501135 -NCT02501148 -NCT02501213 -NCT02501239 -NCT02501291 -NCT02501304 -NCT02501369 -NCT02501395 -NCT02501486 -NCT02501876 -NCT02501902 -NCT02501941 -NCT02502097 -NCT02502149 -NCT02502331 -NCT02502422 -NCT02502487 -NCT02502669 -NCT02502682 -NCT02502734 -NCT02502747 -NCT02502890 -NCT02503072 -NCT02503098 -NCT02503111 -NCT02503163 -NCT02503176 -NCT02503189 -NCT02503501 -NCT02503709 -NCT02503761 -NCT02503891 -NCT02503904 -NCT02503917 -NCT02503943 -NCT02504021 -NCT02504034 -NCT02504073 -NCT02504112 -NCT02504203 -NCT02504359 -NCT02504541 -NCT02504554 -NCT02504671 -NCT02504749 -NCT02504762 -NCT02504814 -NCT02504840 -NCT02504853 -NCT02504931 -NCT02505152 -NCT02505282 -NCT02505763 -NCT02505919 -NCT02505932 -NCT02505945 -NCT02506023 -NCT02506036 -NCT02506088 -NCT02506140 -NCT02506166 -NCT02506244 -NCT02506257 -NCT02506387 -NCT02506465 -NCT02506478 -NCT02506634 -NCT02506959 -NCT02507024 -NCT02507180 -NCT02507297 -NCT02507492 -NCT02507661 -NCT02507713 -NCT02507765 -NCT02508142 -NCT02508207 -NCT02508298 -NCT02508467 -NCT02508623 -NCT02508909 -NCT02509026 -NCT02509065 -NCT02509364 -NCT02509468 -NCT02509702 -NCT02509780 -NCT02509975 -NCT02510001 -NCT02510066 -NCT02510118 -NCT02510326 -NCT02510443 -NCT02510482 -NCT02510495 -NCT02510638 -NCT02510898 -NCT02510989 -NCT02511067 -NCT02511197 -NCT02511327 -NCT02511431 -NCT02511496 -NCT02511522 -NCT02511847 -NCT02512146 -NCT02512250 -NCT02512263 -NCT02512276 -NCT02512341 -NCT02512354 -NCT02512575 -NCT02512913 -NCT02512965 -NCT02512978 -NCT02513082 -NCT02513173 -NCT02513277 -NCT02513472 -NCT02513485 -NCT02513524 -NCT02513589 -NCT02513615 -NCT02513914 -NCT02513992 -NCT02514005 -NCT02514070 -NCT02514083 -NCT02514200 -NCT02514252 -NCT02514265 -NCT02514343 -NCT02514499 -NCT02514629 -NCT02514837 -NCT02514889 -NCT02515058 -NCT02515110 -NCT02515162 -NCT02515357 -NCT02515474 -NCT02515539 -NCT02515669 -NCT02515903 -NCT02516020 -NCT02516059 -NCT02516085 -NCT02516137 -NCT02517151 -NCT02517359 -NCT02517385 -NCT02517489 -NCT02517528 -NCT02517749 -NCT02517762 -NCT02517931 -NCT02517944 -NCT02517970 -NCT02517983 -NCT02518035 -NCT02518087 -NCT02518100 -NCT02518113 -NCT02518347 -NCT02518412 -NCT02518451 -NCT02518464 -NCT02518542 -NCT02518685 -NCT02518854 -NCT02518945 -NCT02518997 -NCT02519231 -NCT02519244 -NCT02519361 -NCT02519387 -NCT02519491 -NCT02519556 -NCT02519582 -NCT02519621 -NCT02519764 -NCT02519816 -NCT02519868 -NCT02520258 -NCT02520518 -NCT02520609 -NCT02520648 -NCT02520817 -NCT02520856 -NCT02521142 -NCT02521181 -NCT02521298 -NCT02521324 -NCT02521493 -NCT02521558 -NCT02521818 -NCT02521922 -NCT02522000 -NCT02522013 -NCT02522091 -NCT02522195 -NCT02522273 -NCT02522299 -NCT02522351 -NCT02522364 -NCT02522403 -NCT02522455 -NCT02522611 -NCT02522819 -NCT02523066 -NCT02523235 -NCT02523521 -NCT02523586 -NCT02523625 -NCT02523703 -NCT02523781 -NCT02523807 -NCT02523833 -NCT02523885 -NCT02523950 -NCT02523963 -NCT02523976 -NCT02523989 -NCT02524041 -NCT02524080 -NCT02524106 -NCT02524236 -NCT02524262 -NCT02524405 -NCT02524470 -NCT02524665 -NCT02524782 -NCT02524990 -NCT02525055 -NCT02525172 -NCT02525224 -NCT02525276 -NCT02525497 -NCT02525549 -NCT02525562 -NCT02525640 -NCT02525666 -NCT02525692 -NCT02525757 -NCT02525822 -NCT02525991 -NCT02526160 -NCT02526498 -NCT02526628 -NCT02526654 -NCT02526680 -NCT02526693 -NCT02526719 -NCT02526771 -NCT02526836 -NCT02526849 -NCT02526927 -NCT02526979 -NCT02527187 -NCT02527213 -NCT02527278 -NCT02527486 -NCT02527707 -NCT02527759 -NCT02527954 -NCT02528123 -NCT02528188 -NCT02528279 -NCT02528370 -NCT02528760 -NCT02528955 -NCT02529306 -NCT02529345 -NCT02529540 -NCT02529553 -NCT02529735 -NCT02529748 -NCT02529826 -NCT02530151 -NCT02530229 -NCT02530281 -NCT02530294 -NCT02530346 -NCT02530476 -NCT02530515 -NCT02530580 -NCT02530593 -NCT02530736 -NCT02530762 -NCT02530931 -NCT02531217 -NCT02531503 -NCT02531542 -NCT02531568 -NCT02531581 -NCT02531594 -NCT02531633 -NCT02531685 -NCT02531802 -NCT02531906 -NCT02531971 -NCT02532075 -NCT02532114 -NCT02532140 -NCT02532322 -NCT02532361 -NCT02532426 -NCT02532543 -NCT02532608 -NCT02532660 -NCT02532816 -NCT02532894 -NCT02532907 -NCT02532920 -NCT02532972 -NCT02533011 -NCT02533089 -NCT02533154 -NCT02533271 -NCT02533687 -NCT02533739 -NCT02533778 -NCT02533817 -NCT02533869 -NCT02533947 -NCT02533999 -NCT02534051 -NCT02534194 -NCT02534220 -NCT02534428 -NCT02534493 -NCT02534519 -NCT02534571 -NCT02534714 -NCT02534727 -NCT02534779 -NCT02535026 -NCT02535091 -NCT02535260 -NCT02535273 -NCT02535286 -NCT02535650 -NCT02535858 -NCT02535871 -NCT02535949 -NCT02536027 -NCT02536079 -NCT02536144 -NCT02536274 -NCT02536287 -NCT02536378 -NCT02536638 -NCT02536677 -NCT02537171 -NCT02537353 -NCT02537431 -NCT02537483 -NCT02537548 -NCT02537613 -NCT02537626 -NCT02537834 -NCT02537847 -NCT02537860 -NCT02538042 -NCT02538120 -NCT02538133 -NCT02538276 -NCT02538289 -NCT02538328 -NCT02538523 -NCT02538575 -NCT02538731 -NCT02538770 -NCT02538783 -NCT02538822 -NCT02538861 -NCT02538926 -NCT02539121 -NCT02539134 -NCT02539160 -NCT02539290 -NCT02539472 -NCT02539680 -NCT02539706 -NCT02539784 -NCT02539810 -NCT02539836 -NCT02540031 -NCT02540096 -NCT02540148 -NCT02540187 -NCT02540382 -NCT02540421 -NCT02540512 -NCT02540538 -NCT02540668 -NCT02540694 -NCT02540876 -NCT02541058 -NCT02541253 -NCT02541292 -NCT02541331 -NCT02541383 -NCT02541409 -NCT02541487 -NCT02541617 -NCT02541864 -NCT02541877 -NCT02541942 -NCT02542046 -NCT02542098 -NCT02542254 -NCT02542735 -NCT02542878 -NCT02542891 -NCT02543385 -NCT02543476 -NCT02543606 -NCT02543658 -NCT02543697 -NCT02543775 -NCT02543801 -NCT02543892 -NCT02543905 -NCT02544100 -NCT02544165 -NCT02544191 -NCT02544217 -NCT02544230 -NCT02544282 -NCT02544529 -NCT02544659 -NCT02544672 -NCT02544880 -NCT02544958 -NCT02544984 -NCT02545036 -NCT02545114 -NCT02545270 -NCT02545322 -NCT02545387 -NCT02545686 -NCT02545777 -NCT02545868 -NCT02545907 -NCT02546193 -NCT02546323 -NCT02546388 -NCT02546414 -NCT02546466 -NCT02546518 -NCT02546622 -NCT02546843 -NCT02546856 -NCT02546921 -NCT02547090 -NCT02547103 -NCT02547246 -NCT02547298 -NCT02547324 -NCT02547441 -NCT02547636 -NCT02547753 -NCT02547792 -NCT02547857 -NCT02547896 -NCT02548117 -NCT02548143 -NCT02548221 -NCT02548234 -NCT02548481 -NCT02548494 -NCT02548585 -NCT02548637 -NCT02548715 -NCT02548767 -NCT02548793 -NCT02548806 -NCT02548832 -NCT02548975 -NCT02549196 -NCT02549274 -NCT02549300 -NCT02549495 -NCT02549612 -NCT02549664 -NCT02549677 -NCT02549768 -NCT02549859 -NCT02550041 -NCT02550119 -NCT02550184 -NCT02550236 -NCT02550288 -NCT02550314 -NCT02550366 -NCT02550457 -NCT02550496 -NCT02550665 -NCT02550756 -NCT02551068 -NCT02551081 -NCT02551120 -NCT02551367 -NCT02551588 -NCT02551744 -NCT02551757 -NCT02551783 -NCT02551822 -NCT02551848 -NCT02552225 -NCT02552251 -NCT02552290 -NCT02552420 -NCT02552433 -NCT02552459 -NCT02552485 -NCT02552576 -NCT02552615 -NCT02552628 -NCT02552641 -NCT02552771 -NCT02552875 -NCT02552966 -NCT02553005 -NCT02553083 -NCT02553096 -NCT02553174 -NCT02553200 -NCT02553265 -NCT02553304 -NCT02553343 -NCT02553525 -NCT02553590 -NCT02553746 -NCT02553798 -NCT02553889 -NCT02553954 -NCT02554097 -NCT02554188 -NCT02554201 -NCT02554240 -NCT02554331 -NCT02554422 -NCT02554526 -NCT02554552 -NCT02554565 -NCT02554773 -NCT02554838 -NCT02554851 -NCT02554890 -NCT02555033 -NCT02555137 -NCT02555215 -NCT02555280 -NCT02555332 -NCT02555345 -NCT02555384 -NCT02555462 -NCT02555514 -NCT02555683 -NCT02555735 -NCT02555943 -NCT02555969 -NCT02555982 -NCT02556034 -NCT02556047 -NCT02556086 -NCT02556216 -NCT02556411 -NCT02556437 -NCT02556515 -NCT02556554 -NCT02556658 -NCT02556710 -NCT02556749 -NCT02556827 -NCT02556866 -NCT02556918 -NCT02556944 -NCT02557126 -NCT02557243 -NCT02557399 -NCT02557412 -NCT02557464 -NCT02557737 -NCT02557776 -NCT02557828 -NCT02557841 -NCT02557932 -NCT02558374 -NCT02558400 -NCT02558478 -NCT02558712 -NCT02558842 -NCT02558855 -NCT02558933 -NCT02558972 -NCT02559011 -NCT02559063 -NCT02559115 -NCT02559128 -NCT02559206 -NCT02559219 -NCT02559310 -NCT02559362 -NCT02559427 -NCT02559479 -NCT02559518 -NCT02559570 -NCT02559765 -NCT02559817 -NCT02560129 -NCT02560259 -NCT02560350 -NCT02560467 -NCT02560480 -NCT02560493 -NCT02560883 -NCT02561026 -NCT02561039 -NCT02561091 -NCT02561117 -NCT02561182 -NCT02561208 -NCT02561312 -NCT02561533 -NCT02561611 -NCT02561663 -NCT02561728 -NCT02561793 -NCT02561819 -NCT02561845 -NCT02561910 -NCT02561923 -NCT02561936 -NCT02561988 -NCT02562118 -NCT02562638 -NCT02562716 -NCT02562729 -NCT02562911 -NCT02563067 -NCT02563080 -NCT02563093 -NCT02563184 -NCT02563379 -NCT02563626 -NCT02563873 -NCT02563886 -NCT02563977 -NCT02564016 -NCT02564237 -NCT02564497 -NCT02564848 -NCT02564874 -NCT02564952 -NCT02564978 -NCT02565082 -NCT02565095 -NCT02565160 -NCT02565303 -NCT02565342 -NCT02565368 -NCT02565407 -NCT02565446 -NCT02565524 -NCT02565563 -NCT02565576 -NCT02565628 -NCT02565654 -NCT02565836 -NCT02565849 -NCT02565940 -NCT02566447 -NCT02566551 -NCT02566655 -NCT02566876 -NCT02566889 -NCT02566902 -NCT02567084 -NCT02567162 -NCT02567448 -NCT02567461 -NCT02567500 -NCT02567708 -NCT02567877 -NCT02568319 -NCT02568488 -NCT02568657 -NCT02568826 -NCT02568891 -NCT02568982 -NCT02569164 -NCT02569307 -NCT02569398 -NCT02569450 -NCT02569658 -NCT02569697 -NCT02569827 -NCT02569918 -NCT02569970 -NCT02570165 -NCT02570386 -NCT02570477 -NCT02570529 -NCT02570568 -NCT02570581 -NCT02570698 -NCT02570776 -NCT02570828 -NCT02570867 -NCT02570958 -NCT02571088 -NCT02571439 -NCT02571478 -NCT02571543 -NCT02571569 -NCT02571582 -NCT02571660 -NCT02571686 -NCT02571868 -NCT02571998 -NCT02572193 -NCT02572232 -NCT02572336 -NCT02572479 -NCT02572544 -NCT02572583 -NCT02572713 -NCT02572869 -NCT02573012 -NCT02573051 -NCT02573194 -NCT02573233 -NCT02573272 -NCT02573389 -NCT02573428 -NCT02573571 -NCT02573740 -NCT02573870 -NCT02574039 -NCT02574195 -NCT02574273 -NCT02574364 -NCT02574403 -NCT02574546 -NCT02574559 -NCT02574676 -NCT02574793 -NCT02574819 -NCT02574910 -NCT02574975 -NCT02575157 -NCT02575287 -NCT02575365 -NCT02575508 -NCT02575729 -NCT02575742 -NCT02576106 -NCT02576470 -NCT02576535 -NCT02576626 -NCT02576652 -NCT02576756 -NCT02576795 -NCT02576808 -NCT02576821 -NCT02576847 -NCT02576860 -NCT02576873 -NCT02576925 -NCT02577055 -NCT02577120 -NCT02577133 -NCT02577159 -NCT02577367 -NCT02577419 -NCT02577536 -NCT02577861 -NCT02578108 -NCT02578134 -NCT02578186 -NCT02578368 -NCT02578394 -NCT02578524 -NCT02578797 -NCT02579083 -NCT02579096 -NCT02579148 -NCT02579200 -NCT02579226 -NCT02579252 -NCT02579473 -NCT02579551 -NCT02579681 -NCT02579694 -NCT02579720 -NCT02579954 -NCT02579967 -NCT02580006 -NCT02580032 -NCT02580084 -NCT02580175 -NCT02580344 -NCT02580422 -NCT02580474 -NCT02580487 -NCT02580669 -NCT02580799 -NCT02581085 -NCT02581241 -NCT02581358 -NCT02581397 -NCT02581462 -NCT02581514 -NCT02581527 -NCT02581748 -NCT02581761 -NCT02581813 -NCT02582021 -NCT02582060 -NCT02582151 -NCT02582164 -NCT02582177 -NCT02582307 -NCT02582320 -NCT02582411 -NCT02582424 -NCT02582450 -NCT02582541 -NCT02582723 -NCT02582762 -NCT02582996 -NCT02583100 -NCT02583152 -NCT02583282 -NCT02583360 -NCT02583451 -NCT02583646 -NCT02583737 -NCT02583763 -NCT02583893 -NCT02584413 -NCT02584426 -NCT02584478 -NCT02584517 -NCT02584582 -NCT02584595 -NCT02584738 -NCT02585089 -NCT02585219 -NCT02585271 -NCT02585323 -NCT02585492 -NCT02585518 -NCT02585583 -NCT02585674 -NCT02585739 -NCT02585765 -NCT02585778 -NCT02585791 -NCT02585817 -NCT02585843 -NCT02586012 -NCT02586129 -NCT02586142 -NCT02586337 -NCT02586402 -NCT02586506 -NCT02586623 -NCT02586961 -NCT02587000 -NCT02587078 -NCT02587494 -NCT02587559 -NCT02587624 -NCT02587715 -NCT02587806 -NCT02587923 -NCT02588469 -NCT02588495 -NCT02588560 -NCT02588612 -NCT02588638 -NCT02588677 -NCT02589041 -NCT02589249 -NCT02589431 -NCT02589600 -NCT02589847 -NCT02589860 -NCT02589925 -NCT02589964 -NCT02589977 -NCT02590380 -NCT02590393 -NCT02590432 -NCT02590484 -NCT02590666 -NCT02590809 -NCT02590978 -NCT02591134 -NCT02591381 -NCT02591394 -NCT02591407 -NCT02591446 -NCT02591550 -NCT02591641 -NCT02591654 -NCT02591667 -NCT02591836 -NCT02591888 -NCT02591901 -NCT02592369 -NCT02592408 -NCT02592434 -NCT02592473 -NCT02592629 -NCT02592642 -NCT02592681 -NCT02592759 -NCT02592811 -NCT02592837 -NCT02592863 -NCT02593279 -NCT02593331 -NCT02593487 -NCT02593643 -NCT02593799 -NCT02593968 -NCT02593981 -NCT02594189 -NCT02594475 -NCT02594631 -NCT02594683 -NCT02594709 -NCT02594774 -NCT02594787 -NCT02594904 -NCT02594943 -NCT02595034 -NCT02595073 -NCT02595099 -NCT02595255 -NCT02595307 -NCT02595489 -NCT02595515 -NCT02595567 -NCT02595723 -NCT02595827 -NCT02596100 -NCT02596243 -NCT02596308 -NCT02596659 -NCT02596776 -NCT02596997 -NCT02597101 -NCT02597166 -NCT02597309 -NCT02597374 -NCT02597426 -NCT02597478 -NCT02597621 -NCT02597634 -NCT02597712 -NCT02597777 -NCT02597881 -NCT02598414 -NCT02598453 -NCT02598531 -NCT02598674 -NCT02598713 -NCT02598895 -NCT02598973 -NCT02599090 -NCT02599246 -NCT02599376 -NCT02599701 -NCT02600000 -NCT02600013 -NCT02600039 -NCT02600065 -NCT02600234 -NCT02600312 -NCT02600364 -NCT02600390 -NCT02600533 -NCT02600598 -NCT02600611 -NCT02600650 -NCT02600806 -NCT02600871 -NCT02601053 -NCT02601144 -NCT02601183 -NCT02601339 -NCT02601404 -NCT02601573 -NCT02601651 -NCT02601703 -NCT02601807 -NCT02601937 -NCT02602080 -NCT02602119 -NCT02602262 -NCT02602405 -NCT02602431 -NCT02602470 -NCT02602717 -NCT02602808 -NCT02602977 -NCT02603042 -NCT02603068 -NCT02603081 -NCT02603146 -NCT02603172 -NCT02603640 -NCT02603653 -NCT02603783 -NCT02603861 -NCT02603900 -NCT02603926 -NCT02603939 -NCT02603952 -NCT02604082 -NCT02604251 -NCT02604368 -NCT02604394 -NCT02604498 -NCT02604732 -NCT02604745 -NCT02604953 -NCT02605070 -NCT02605161 -NCT02605213 -NCT02605304 -NCT02605408 -NCT02605564 -NCT02605720 -NCT02606006 -NCT02606045 -NCT02606097 -NCT02606357 -NCT02606383 -NCT02606396 -NCT02606578 -NCT02606851 -NCT02607046 -NCT02607085 -NCT02607098 -NCT02607176 -NCT02607462 -NCT02607488 -NCT02607527 -NCT02607579 -NCT02607618 -NCT02607904 -NCT02607956 -NCT02608125 -NCT02608177 -NCT02608255 -NCT02608489 -NCT02608554 -NCT02608580 -NCT02608814 -NCT02609009 -NCT02609022 -NCT02609100 -NCT02609204 -NCT02609295 -NCT02609529 -NCT02609581 -NCT02609594 -NCT02609659 -NCT02609685 -NCT02609919 -NCT02610127 -NCT02610335 -NCT02610621 -NCT02610660 -NCT02610699 -NCT02610855 -NCT02610920 -NCT02611050 -NCT02611128 -NCT02611167 -NCT02611206 -NCT02611258 -NCT02611453 -NCT02611466 -NCT02611583 -NCT02611921 -NCT02612051 -NCT02612207 -NCT02612376 -NCT02612558 -NCT02612571 -NCT02612636 -NCT02612649 -NCT02612714 -NCT02612727 -NCT02613065 -NCT02613078 -NCT02613234 -NCT02613299 -NCT02613312 -NCT02613338 -NCT02613364 -NCT02613455 -NCT02613520 -NCT02613611 -NCT02613676 -NCT02613858 -NCT02613871 -NCT02614118 -NCT02614144 -NCT02614183 -NCT02614235 -NCT02614248 -NCT02614274 -NCT02614365 -NCT02614482 -NCT02614599 -NCT02614651 -NCT02614703 -NCT02614729 -NCT02614898 -NCT02614989 -NCT02615041 -NCT02615132 -NCT02615158 -NCT02615691 -NCT02615730 -NCT02615808 -NCT02615834 -NCT02615964 -NCT02616172 -NCT02616250 -NCT02616263 -NCT02616302 -NCT02616406 -NCT02616497 -NCT02616562 -NCT02616575 -NCT02616614 -NCT02616653 -NCT02616705 -NCT02616731 -NCT02616757 -NCT02616796 -NCT02616900 -NCT02616952 -NCT02616978 -NCT02617173 -NCT02617199 -NCT02617407 -NCT02617537 -NCT02617615 -NCT02617706 -NCT02617771 -NCT02617784 -NCT02617810 -NCT02617888 -NCT02617966 -NCT02618044 -NCT02618083 -NCT02618278 -NCT02618317 -NCT02618343 -NCT02618369 -NCT02618421 -NCT02618681 -NCT02619084 -NCT02619149 -NCT02619240 -NCT02619357 -NCT02619396 -NCT02619461 -NCT02619474 -NCT02619734 -NCT02619747 -NCT02619812 -NCT02619838 -NCT02619903 -NCT02619955 -NCT02620202 -NCT02620254 -NCT02620280 -NCT02620397 -NCT02620488 -NCT02620605 -NCT02620631 -NCT02620644 -NCT02620670 -NCT02620735 -NCT02620748 -NCT02620774 -NCT02620787 -NCT02620839 -NCT02621021 -NCT02621372 -NCT02621541 -NCT02621567 -NCT02621710 -NCT02621996 -NCT02622009 -NCT02622178 -NCT02622321 -NCT02622373 -NCT02622490 -NCT02622516 -NCT02622594 -NCT02622607 -NCT02622620 -NCT02622646 -NCT02622776 -NCT02623062 -NCT02623166 -NCT02623413 -NCT02623556 -NCT02623647 -NCT02624024 -NCT02624102 -NCT02624362 -NCT02624531 -NCT02624687 -NCT02624934 -NCT02625038 -NCT02625077 -NCT02625090 -NCT02625272 -NCT02625454 -NCT02625662 -NCT02625688 -NCT02625831 -NCT02625909 -NCT02625987 -NCT02626052 -NCT02626117 -NCT02626208 -NCT02626533 -NCT02626598 -NCT02626637 -NCT02626663 -NCT02626806 -NCT02626845 -NCT02626897 -NCT02626923 -NCT02627027 -NCT02627209 -NCT02627274 -NCT02627339 -NCT02627352 -NCT02627391 -NCT02627456 -NCT02627469 -NCT02627664 -NCT02627781 -NCT02627872 -NCT02628015 -NCT02628041 -NCT02628119 -NCT02628171 -NCT02628691 -NCT02628808 -NCT02628886 -NCT02628899 -NCT02628951 -NCT02629029 -NCT02629081 -NCT02629133 -NCT02629185 -NCT02629406 -NCT02629523 -NCT02629549 -NCT02629614 -NCT02629874 -NCT02629913 -NCT02630394 -NCT02630433 -NCT02630446 -NCT02630485 -NCT02630589 -NCT02630823 -NCT02630927 -NCT02631135 -NCT02631187 -NCT02631226 -NCT02631538 -NCT02631616 -NCT02631668 -NCT02631928 -NCT02632136 -NCT02632253 -NCT02632266 -NCT02632461 -NCT02632565 -NCT02632760 -NCT02632786 -NCT02632851 -NCT02632903 -NCT02632955 -NCT02633189 -NCT02633280 -NCT02633462 -NCT02633475 -NCT02633579 -NCT02633592 -NCT02633644 -NCT02633696 -NCT02633735 -NCT02633813 -NCT02633917 -NCT02633943 -NCT02633969 -NCT02634216 -NCT02634307 -NCT02634411 -NCT02634619 -NCT02634723 -NCT02634827 -NCT02634905 -NCT02634918 -NCT02635022 -NCT02635217 -NCT02635425 -NCT02635724 -NCT02635750 -NCT02635763 -NCT02635906 -NCT02635997 -NCT02636192 -NCT02636205 -NCT02636465 -NCT02636543 -NCT02636569 -NCT02636647 -NCT02636894 -NCT02637115 -NCT02637141 -NCT02637284 -NCT02637557 -NCT02637661 -NCT02637739 -NCT02637921 -NCT02637947 -NCT02637986 -NCT02638012 -NCT02638025 -NCT02638038 -NCT02638285 -NCT02638311 -NCT02638350 -NCT02638389 -NCT02638415 -NCT02638467 -NCT02638506 -NCT02638519 -NCT02638649 -NCT02638714 -NCT02638740 -NCT02638831 -NCT02638922 -NCT02638935 -NCT02639104 -NCT02639156 -NCT02639247 -NCT02639273 -NCT02639325 -NCT02639390 -NCT02639403 -NCT02639819 -NCT02639897 -NCT02640092 -NCT02640105 -NCT02640118 -NCT02640313 -NCT02640352 -NCT02640378 -NCT02640495 -NCT02640573 -NCT02640599 -NCT02640664 -NCT02640768 -NCT02640976 -NCT02641015 -NCT02641054 -NCT02641145 -NCT02641327 -NCT02641353 -NCT02641366 -NCT02641379 -NCT02641431 -NCT02641483 -NCT02641600 -NCT02641652 -NCT02641769 -NCT02641912 -NCT02642419 -NCT02642432 -NCT02642653 -NCT02642744 -NCT02642926 -NCT02642991 -NCT02643160 -NCT02643212 -NCT02643238 -NCT02643290 -NCT02643342 -NCT02643355 -NCT02643849 -NCT02643875 -NCT02644018 -NCT02644070 -NCT02644135 -NCT02644187 -NCT02644200 -NCT02644213 -NCT02644304 -NCT02644707 -NCT02644772 -NCT02645045 -NCT02645123 -NCT02645292 -NCT02645461 -NCT02645604 -NCT02645760 -NCT02645786 -NCT02645877 -NCT02645968 -NCT02646423 -NCT02646553 -NCT02646566 -NCT02646943 -NCT02647281 -NCT02647502 -NCT02647528 -NCT02647593 -NCT02647671 -NCT02647749 -NCT02647788 -NCT02647827 -NCT02647853 -NCT02647944 -NCT02647957 -NCT02648009 -NCT02648074 -NCT02648308 -NCT02648399 -NCT02648490 -NCT02648555 -NCT02648763 -NCT02648815 -NCT02648854 -NCT02648984 -NCT02649062 -NCT02649153 -NCT02649166 -NCT02649335 -NCT02649439 -NCT02649452 -NCT02649621 -NCT02649894 -NCT02649946 -NCT02649985 -NCT02650011 -NCT02650258 -NCT02650271 -NCT02650349 -NCT02650453 -NCT02650505 -NCT02650622 -NCT02650765 -NCT02650830 -NCT02650843 -NCT02650960 -NCT02651116 -NCT02651129 -NCT02651142 -NCT02651155 -NCT02651207 -NCT02651220 -NCT02651493 -NCT02651818 -NCT02651844 -NCT02651883 -NCT02651909 -NCT02652195 -NCT02652299 -NCT02652364 -NCT02652572 -NCT02652767 -NCT02652780 -NCT02653183 -NCT02653443 -NCT02653625 -NCT02653664 -NCT02653911 -NCT02653937 -NCT02654054 -NCT02654158 -NCT02654262 -NCT02654405 -NCT02654431 -NCT02654561 -NCT02654665 -NCT02654951 -NCT02655055 -NCT02655068 -NCT02655094 -NCT02655224 -NCT02655341 -NCT02655367 -NCT02655575 -NCT02655653 -NCT02655809 -NCT02656082 -NCT02656121 -NCT02656368 -NCT02656381 -NCT02656654 -NCT02656953 -NCT02657031 -NCT02657070 -NCT02657083 -NCT02657135 -NCT02657187 -NCT02657213 -NCT02657317 -NCT02657356 -NCT02657369 -NCT02657408 -NCT02657538 -NCT02657551 -NCT02657603 -NCT02657681 -NCT02657694 -NCT02657707 -NCT02657824 -NCT02657876 -NCT02657993 -NCT02658149 -NCT02658162 -NCT02658201 -NCT02658396 -NCT02658500 -NCT02658552 -NCT02658669 -NCT02658695 -NCT02658721 -NCT02659189 -NCT02659241 -NCT02659722 -NCT02659813 -NCT02659839 -NCT02659943 -NCT02659995 -NCT02660060 -NCT02660125 -NCT02660138 -NCT02660190 -NCT02660255 -NCT02660320 -NCT02660359 -NCT02660372 -NCT02660437 -NCT02660489 -NCT02660515 -NCT02660528 -NCT02660697 -NCT02660736 -NCT02660801 -NCT02660853 -NCT02660905 -NCT02660918 -NCT02660970 -NCT02661191 -NCT02661256 -NCT02661360 -NCT02661386 -NCT02661425 -NCT02661451 -NCT02661672 -NCT02661789 -NCT02661971 -NCT02662075 -NCT02662114 -NCT02662192 -NCT02662218 -NCT02662426 -NCT02662491 -NCT02662712 -NCT02662894 -NCT02662907 -NCT02663011 -NCT02663206 -NCT02663479 -NCT02663531 -NCT02663544 -NCT02663570 -NCT02663609 -NCT02663895 -NCT02664077 -NCT02664220 -NCT02664298 -NCT02664428 -NCT02664467 -NCT02664493 -NCT02664688 -NCT02664805 -NCT02664896 -NCT02665104 -NCT02665117 -NCT02665182 -NCT02665195 -NCT02665325 -NCT02665442 -NCT02665546 -NCT02665559 -NCT02665572 -NCT02665585 -NCT02665728 -NCT02665871 -NCT02665923 -NCT02666040 -NCT02666118 -NCT02666209 -NCT02666222 -NCT02666261 -NCT02666326 -NCT02666534 -NCT02666742 -NCT02666807 -NCT02667145 -NCT02667249 -NCT02667288 -NCT02667301 -NCT02667392 -NCT02667418 -NCT02667483 -NCT02667496 -NCT02667548 -NCT02667561 -NCT02667925 -NCT02667977 -NCT02668029 -NCT02668081 -NCT02668146 -NCT02668172 -NCT02668185 -NCT02668276 -NCT02668289 -NCT02668471 -NCT02668497 -NCT02668523 -NCT02668575 -NCT02668601 -NCT02668783 -NCT02668822 -NCT02668835 -NCT02669004 -NCT02669056 -NCT02669108 -NCT02669251 -NCT02669420 -NCT02669459 -NCT02669485 -NCT02669823 -NCT02669849 -NCT02669888 -NCT02669966 -NCT02670031 -NCT02670044 -NCT02670057 -NCT02670083 -NCT02670317 -NCT02670343 -NCT02670356 -NCT02670382 -NCT02670486 -NCT02670577 -NCT02670642 -NCT02670980 -NCT02671032 -NCT02671071 -NCT02671188 -NCT02671292 -NCT02671760 -NCT02671877 -NCT02671903 -NCT02671942 -NCT02672553 -NCT02672969 -NCT02672995 -NCT02673528 -NCT02673632 -NCT02673879 -NCT02674178 -NCT02674191 -NCT02674243 -NCT02674256 -NCT02674269 -NCT02674282 -NCT02674412 -NCT02674659 -NCT02674672 -NCT02674750 -NCT02674776 -NCT02674971 -NCT02674997 -NCT02675114 -NCT02675244 -NCT02675491 -NCT02675660 -NCT02675764 -NCT02675985 -NCT02675998 -NCT02676388 -NCT02676479 -NCT02676544 -NCT02676557 -NCT02676570 -NCT02676674 -NCT02676882 -NCT02676895 -NCT02676908 -NCT02676973 -NCT02677090 -NCT02677207 -NCT02677220 -NCT02677233 -NCT02677259 -NCT02677467 -NCT02677506 -NCT02677558 -NCT02677610 -NCT02677636 -NCT02677649 -NCT02677779 -NCT02677818 -NCT02677883 -NCT02677961 -NCT02678104 -NCT02678143 -NCT02678169 -NCT02678182 -NCT02678429 -NCT02678481 -NCT02678520 -NCT02678780 -NCT02678832 -NCT02678936 -NCT02678949 -NCT02679066 -NCT02679118 -NCT02679261 -NCT02679339 -NCT02679482 -NCT02679547 -NCT02679573 -NCT02679794 -NCT02679937 -NCT02679963 -NCT02680093 -NCT02680301 -NCT02680379 -NCT02680405 -NCT02680470 -NCT02680483 -NCT02680639 -NCT02680717 -NCT02680847 -NCT02680873 -NCT02680925 -NCT02680977 -NCT02681068 -NCT02681172 -NCT02681198 -NCT02681211 -NCT02681250 -NCT02681263 -NCT02681315 -NCT02681445 -NCT02681458 -NCT02681471 -NCT02681588 -NCT02681640 -NCT02681718 -NCT02681770 -NCT02682082 -NCT02682251 -NCT02682355 -NCT02682368 -NCT02682563 -NCT02682589 -NCT02682693 -NCT02682745 -NCT02682862 -NCT02683109 -NCT02683174 -NCT02683239 -NCT02683304 -NCT02683343 -NCT02683382 -NCT02683486 -NCT02683694 -NCT02683772 -NCT02683785 -NCT02683954 -NCT02684097 -NCT02684136 -NCT02684344 -NCT02684409 -NCT02684422 -NCT02684448 -NCT02684591 -NCT02684799 -NCT02684812 -NCT02684851 -NCT02685137 -NCT02685150 -NCT02685202 -NCT02685280 -NCT02685319 -NCT02685332 -NCT02685527 -NCT02685709 -NCT02685774 -NCT02685826 -NCT02685865 -NCT02685904 -NCT02685995 -NCT02686294 -NCT02686385 -NCT02686528 -NCT02686645 -NCT02686788 -NCT02686840 -NCT02686879 -NCT02686931 -NCT02686996 -NCT02687165 -NCT02687217 -NCT02687308 -NCT02687464 -NCT02687620 -NCT02687685 -NCT02687711 -NCT02687815 -NCT02687841 -NCT02687880 -NCT02687919 -NCT02688114 -NCT02688153 -NCT02688205 -NCT02688218 -NCT02688244 -NCT02688348 -NCT02688543 -NCT02688569 -NCT02688608 -NCT02688621 -NCT02688699 -NCT02688816 -NCT02688920 -NCT02688972 -NCT02689050 -NCT02689349 -NCT02689375 -NCT02689427 -NCT02689440 -NCT02689466 -NCT02689726 -NCT02689752 -NCT02689765 -NCT02689817 -NCT02689830 -NCT02689960 -NCT02689986 -NCT02689999 -NCT02690038 -NCT02690233 -NCT02690246 -NCT02690285 -NCT02690337 -NCT02690376 -NCT02690480 -NCT02690545 -NCT02690610 -NCT02690636 -NCT02690922 -NCT02690987 -NCT02691143 -NCT02691312 -NCT02691325 -NCT02691338 -NCT02691494 -NCT02691533 -NCT02691689 -NCT02691845 -NCT02691936 -NCT02692183 -NCT02692508 -NCT02692521 -NCT02692534 -NCT02692573 -NCT02692638 -NCT02692872 -NCT02693119 -NCT02693132 -NCT02693379 -NCT02693457 -NCT02693509 -NCT02693535 -NCT02693548 -NCT02693704 -NCT02693847 -NCT02693977 -NCT02694172 -NCT02694198 -NCT02694302 -NCT02694315 -NCT02694393 -NCT02694419 -NCT02694445 -NCT02694770 -NCT02694926 -NCT02695173 -NCT02695602 -NCT02695719 -NCT02695732 -NCT02695940 -NCT02696044 -NCT02696083 -NCT02696122 -NCT02696239 -NCT02696304 -NCT02696330 -NCT02696486 -NCT02696668 -NCT02696837 -NCT02697162 -NCT02697188 -NCT02697201 -NCT02697214 -NCT02697240 -NCT02697331 -NCT02697370 -NCT02697383 -NCT02697396 -NCT02697435 -NCT02697539 -NCT02697734 -NCT02697838 -NCT02698046 -NCT02698150 -NCT02698176 -NCT02698215 -NCT02698332 -NCT02698423 -NCT02698761 -NCT02698995 -NCT02699125 -NCT02699138 -NCT02699320 -NCT02699385 -NCT02699463 -NCT02700022 -NCT02700074 -NCT02700087 -NCT02700139 -NCT02700360 -NCT02700451 -NCT02700477 -NCT02700503 -NCT02700529 -NCT02700555 -NCT02700776 -NCT02700789 -NCT02700906 -NCT02701101 -NCT02701205 -NCT02701244 -NCT02701283 -NCT02701309 -NCT02701439 -NCT02701491 -NCT02701504 -NCT02701595 -NCT02701608 -NCT02701751 -NCT02701803 -NCT02701920 -NCT02701946 -NCT02701985 -NCT02702232 -NCT02702349 -NCT02702388 -NCT02702596 -NCT02702648 -NCT02702752 -NCT02702765 -NCT02702778 -NCT02702882 -NCT02702947 -NCT02703064 -NCT02703129 -NCT02703207 -NCT02703246 -NCT02703285 -NCT02703311 -NCT02703402 -NCT02703467 -NCT02703493 -NCT02703545 -NCT02703623 -NCT02703701 -NCT02703818 -NCT02703844 -NCT02703922 -NCT02704078 -NCT02704091 -NCT02704247 -NCT02704338 -NCT02704637 -NCT02704689 -NCT02704741 -NCT02704754 -NCT02704793 -NCT02704819 -NCT02704845 -NCT02705014 -NCT02705144 -NCT02705157 -NCT02705183 -NCT02705352 -NCT02705443 -NCT02705573 -NCT02705599 -NCT02705664 -NCT02705768 -NCT02705781 -NCT02705937 -NCT02706132 -NCT02706158 -NCT02706210 -NCT02706262 -NCT02706431 -NCT02706691 -NCT02706938 -NCT02707042 -NCT02707198 -NCT02707588 -NCT02707601 -NCT02707653 -NCT02707952 -NCT02708095 -NCT02708186 -NCT02708355 -NCT02708368 -NCT02708953 -NCT02708966 -NCT02709408 -NCT02709460 -NCT02709681 -NCT02709850 -NCT02709967 -NCT02710045 -NCT02710110 -NCT02710162 -NCT02710175 -NCT02710214 -NCT02710461 -NCT02710474 -NCT02710487 -NCT02710526 -NCT02710591 -NCT02710669 -NCT02710682 -NCT02710786 -NCT02710799 -NCT02710838 -NCT02710942 -NCT02710968 -NCT02710981 -NCT02711397 -NCT02711449 -NCT02711514 -NCT02711540 -NCT02711683 -NCT02711735 -NCT02711800 -NCT02711826 -NCT02711995 -NCT02712060 -NCT02712138 -NCT02712216 -NCT02712242 -NCT02712281 -NCT02712346 -NCT02712437 -NCT02712515 -NCT02712671 -NCT02712762 -NCT02712814 -NCT02712827 -NCT02712840 -NCT02712892 -NCT02712957 -NCT02712983 -NCT02713035 -NCT02713178 -NCT02713256 -NCT02713412 -NCT02713464 -NCT02713555 -NCT02713737 -NCT02713932 -NCT02713945 -NCT02714023 -NCT02714127 -NCT02714439 -NCT02714582 -NCT02714946 -NCT02714972 -NCT02714985 -NCT02715024 -NCT02715102 -NCT02715154 -NCT02715193 -NCT02715323 -NCT02715713 -NCT02715765 -NCT02715791 -NCT02715999 -NCT02716012 -NCT02716025 -NCT02716103 -NCT02716194 -NCT02716285 -NCT02716376 -NCT02716415 -NCT02716428 -NCT02716571 -NCT02716662 -NCT02716688 -NCT02716714 -NCT02716779 -NCT02717000 -NCT02717455 -NCT02717689 -NCT02717793 -NCT02717832 -NCT02717975 -NCT02718001 -NCT02718027 -NCT02718066 -NCT02718092 -NCT02718495 -NCT02718534 -NCT02718560 -NCT02718586 -NCT02718677 -NCT02718703 -NCT02718846 -NCT02718963 -NCT02718976 -NCT02719028 -NCT02719093 -NCT02719119 -NCT02719145 -NCT02719158 -NCT02719197 -NCT02719249 -NCT02719340 -NCT02719418 -NCT02719509 -NCT02719600 -NCT02719717 -NCT02719769 -NCT02719821 -NCT02719912 -NCT02720055 -NCT02720081 -NCT02720211 -NCT02720302 -NCT02720315 -NCT02720341 -NCT02720458 -NCT02720640 -NCT02720679 -NCT02720822 -NCT02720861 -NCT02720952 -NCT02721069 -NCT02721173 -NCT02721186 -NCT02721251 -NCT02721277 -NCT02721355 -NCT02721394 -NCT02721732 -NCT02721745 -NCT02721771 -NCT02721862 -NCT02722278 -NCT02722330 -NCT02722343 -NCT02722551 -NCT02722668 -NCT02722681 -NCT02722720 -NCT02722772 -NCT02722811 -NCT02722980 -NCT02722993 -NCT02723032 -NCT02723305 -NCT02723474 -NCT02723500 -NCT02723539 -NCT02723552 -NCT02723617 -NCT02723721 -NCT02723864 -NCT02723877 -NCT02723890 -NCT02724059 -NCT02724176 -NCT02724228 -NCT02724254 -NCT02724306 -NCT02724410 -NCT02724462 -NCT02724696 -NCT02724722 -NCT02724761 -NCT02724774 -NCT02724865 -NCT02725047 -NCT02725411 -NCT02725463 -NCT02725502 -NCT02725632 -NCT02725671 -NCT02725879 -NCT02726048 -NCT02726087 -NCT02726113 -NCT02726139 -NCT02726152 -NCT02726295 -NCT02726451 -NCT02726919 -NCT02726984 -NCT02727010 -NCT02727114 -NCT02727231 -NCT02727244 -NCT02727361 -NCT02727465 -NCT02727530 -NCT02727569 -NCT02727582 -NCT02727647 -NCT02727686 -NCT02727959 -NCT02728102 -NCT02728375 -NCT02728427 -NCT02728440 -NCT02728544 -NCT02728765 -NCT02728882 -NCT02729012 -NCT02729051 -NCT02729220 -NCT02729350 -NCT02729454 -NCT02729545 -NCT02729636 -NCT02729649 -NCT02729740 -NCT02729909 -NCT02729948 -NCT02729961 -NCT02730052 -NCT02730065 -NCT02730169 -NCT02730338 -NCT02730351 -NCT02730390 -NCT02730442 -NCT02730585 -NCT02730598 -NCT02730728 -NCT02730793 -NCT02730988 -NCT02731014 -NCT02731118 -NCT02731170 -NCT02731300 -NCT02731313 -NCT02731417 -NCT02731469 -NCT02731586 -NCT02731872 -NCT02731924 -NCT02731989 -NCT02732145 -NCT02732314 -NCT02732392 -NCT02732431 -NCT02732587 -NCT02732600 -NCT02732613 -NCT02732691 -NCT02732743 -NCT02732795 -NCT02732912 -NCT02732925 -NCT02733133 -NCT02733172 -NCT02733276 -NCT02733328 -NCT02733367 -NCT02733510 -NCT02733549 -NCT02733666 -NCT02733744 -NCT02733809 -NCT02733861 -NCT02734082 -NCT02734160 -NCT02734173 -NCT02734186 -NCT02734199 -NCT02734251 -NCT02734342 -NCT02734368 -NCT02734446 -NCT02734459 -NCT02735018 -NCT02735109 -NCT02735343 -NCT02735421 -NCT02735447 -NCT02735681 -NCT02735694 -NCT02735707 -NCT02735837 -NCT02735863 -NCT02736240 -NCT02736370 -NCT02736461 -NCT02736591 -NCT02736734 -NCT02736968 -NCT02736981 -NCT02737085 -NCT02737189 -NCT02737228 -NCT02737267 -NCT02737436 -NCT02737449 -NCT02737527 -NCT02737592 -NCT02737631 -NCT02737761 -NCT02737852 -NCT02737930 -NCT02738138 -NCT02738177 -NCT02738294 -NCT02738450 -NCT02738671 -NCT02738853 -NCT02739555 -NCT02739672 -NCT02739737 -NCT02740088 -NCT02740153 -NCT02740166 -NCT02740322 -NCT02740413 -NCT02740543 -NCT02740673 -NCT02740686 -NCT02740738 -NCT02740790 -NCT02740972 -NCT02741024 -NCT02741245 -NCT02741440 -NCT02741453 -NCT02741492 -NCT02741531 -NCT02741544 -NCT02741609 -NCT02741674 -NCT02741687 -NCT02741778 -NCT02742051 -NCT02742116 -NCT02742129 -NCT02742155 -NCT02742272 -NCT02742298 -NCT02742311 -NCT02742376 -NCT02742402 -NCT02742558 -NCT02742844 -NCT02743234 -NCT02743338 -NCT02743364 -NCT02743455 -NCT02743598 -NCT02743650 -NCT02743845 -NCT02743949 -NCT02744053 -NCT02744131 -NCT02744157 -NCT02744170 -NCT02744352 -NCT02744469 -NCT02744495 -NCT02744508 -NCT02744521 -NCT02744703 -NCT02744729 -NCT02745054 -NCT02745093 -NCT02745171 -NCT02745301 -NCT02745392 -NCT02745717 -NCT02745808 -NCT02746029 -NCT02746367 -NCT02746432 -NCT02746536 -NCT02746562 -NCT02746588 -NCT02746614 -NCT02746770 -NCT02746783 -NCT02746809 -NCT02746887 -NCT02747056 -NCT02747394 -NCT02747485 -NCT02747511 -NCT02747654 -NCT02747810 -NCT02747849 -NCT02748005 -NCT02748018 -NCT02748135 -NCT02748174 -NCT02748291 -NCT02748343 -NCT02748356 -NCT02748395 -NCT02748434 -NCT02748525 -NCT02748616 -NCT02748681 -NCT02748798 -NCT02748902 -NCT02748941 -NCT02749071 -NCT02749110 -NCT02749123 -NCT02749201 -NCT02749214 -NCT02749227 -NCT02749292 -NCT02749344 -NCT02749474 -NCT02749565 -NCT02749682 -NCT02749786 -NCT02749929 -NCT02750046 -NCT02750085 -NCT02750228 -NCT02750319 -NCT02750371 -NCT02750423 -NCT02750618 -NCT02750644 -NCT02750761 -NCT02750826 -NCT02750839 -NCT02751008 -NCT02751190 -NCT02751307 -NCT02751502 -NCT02751736 -NCT02751944 -NCT02751996 -NCT02752009 -NCT02752113 -NCT02752256 -NCT02752373 -NCT02752399 -NCT02752542 -NCT02752620 -NCT02752711 -NCT02752841 -NCT02752906 -NCT02752971 -NCT02753023 -NCT02753270 -NCT02753283 -NCT02753361 -NCT02753621 -NCT02753634 -NCT02753764 -NCT02753777 -NCT02753920 -NCT02753972 -NCT02754128 -NCT02754232 -NCT02754245 -NCT02754258 -NCT02754453 -NCT02754765 -NCT02754999 -NCT02755168 -NCT02755272 -NCT02755285 -NCT02755363 -NCT02755519 -NCT02755727 -NCT02755753 -NCT02755766 -NCT02755961 -NCT02755987 -NCT02756104 -NCT02756299 -NCT02756325 -NCT02756468 -NCT02756650 -NCT02756910 -NCT02757040 -NCT02757066 -NCT02757079 -NCT02757105 -NCT02757170 -NCT02757495 -NCT02757534 -NCT02757547 -NCT02757573 -NCT02757586 -NCT02757612 -NCT02757768 -NCT02757885 -NCT02757963 -NCT02758015 -NCT02758106 -NCT02758158 -NCT02758236 -NCT02758275 -NCT02758327 -NCT02758431 -NCT02758483 -NCT02758548 -NCT02758704 -NCT02758717 -NCT02758860 -NCT02758912 -NCT02758977 -NCT02759016 -NCT02759094 -NCT02759302 -NCT02759380 -NCT02759393 -NCT02759536 -NCT02759562 -NCT02759653 -NCT02759757 -NCT02760108 -NCT02760264 -NCT02760420 -NCT02760602 -NCT02760745 -NCT02760862 -NCT02760914 -NCT02760940 -NCT02761057 -NCT02761070 -NCT02761174 -NCT02761239 -NCT02761252 -NCT02761265 -NCT02761291 -NCT02761473 -NCT02761499 -NCT02761707 -NCT02761902 -NCT02761928 -NCT02761980 -NCT02762188 -NCT02762318 -NCT02762487 -NCT02762682 -NCT02762760 -NCT02763111 -NCT02763176 -NCT02763215 -NCT02763423 -NCT02763722 -NCT02763761 -NCT02763826 -NCT02763865 -NCT02764177 -NCT02764242 -NCT02764372 -NCT02764541 -NCT02764645 -NCT02764723 -NCT02765035 -NCT02765048 -NCT02765113 -NCT02765217 -NCT02765256 -NCT02765269 -NCT02765308 -NCT02765490 -NCT02765581 -NCT02765620 -NCT02765750 -NCT02765776 -NCT02765789 -NCT02765802 -NCT02765984 -NCT02766114 -NCT02766465 -NCT02766491 -NCT02766517 -NCT02766621 -NCT02766764 -NCT02766933 -NCT02767115 -NCT02767128 -NCT02767193 -NCT02767271 -NCT02767297 -NCT02767453 -NCT02767635 -NCT02767726 -NCT02767921 -NCT02767973 -NCT02768181 -NCT02768233 -NCT02768259 -NCT02768402 -NCT02768454 -NCT02768545 -NCT02768753 -NCT02768870 -NCT02768896 -NCT02769000 -NCT02769039 -NCT02769286 -NCT02769442 -NCT02769494 -NCT02769650 -NCT02769858 -NCT02769884 -NCT02769949 -NCT02769962 -NCT02769988 -NCT02770040 -NCT02770157 -NCT02770326 -NCT02770443 -NCT02770534 -NCT02770703 -NCT02770820 -NCT02770833 -NCT02770846 -NCT02770859 -NCT02771145 -NCT02771184 -NCT02771236 -NCT02771262 -NCT02771275 -NCT02771418 -NCT02771483 -NCT02771496 -NCT02771561 -NCT02771587 -NCT02771600 -NCT02771743 -NCT02771769 -NCT02771860 -NCT02771873 -NCT02772003 -NCT02772042 -NCT02772380 -NCT02772432 -NCT02772510 -NCT02772549 -NCT02772627 -NCT02772692 -NCT02772757 -NCT02772848 -NCT02772900 -NCT02772913 -NCT02773264 -NCT02773290 -NCT02773316 -NCT02773407 -NCT02773446 -NCT02773498 -NCT02773537 -NCT02773563 -NCT02773589 -NCT02773654 -NCT02773719 -NCT02773784 -NCT02773992 -NCT02774109 -NCT02774148 -NCT02774239 -NCT02774304 -NCT02774434 -NCT02774460 -NCT02774538 -NCT02774590 -NCT02774668 -NCT02774707 -NCT02774733 -NCT02774746 -NCT02774928 -NCT02774993 -NCT02775318 -NCT02775396 -NCT02775461 -NCT02775578 -NCT02775630 -NCT02775799 -NCT02775851 -NCT02775916 -NCT02775968 -NCT02776072 -NCT02776137 -NCT02776150 -NCT02776176 -NCT02776202 -NCT02776215 -NCT02776228 -NCT02776345 -NCT02776397 -NCT02776462 -NCT02776540 -NCT02776709 -NCT02776748 -NCT02776787 -NCT02776826 -NCT02776891 -NCT02776930 -NCT02776943 -NCT02776969 -NCT02777073 -NCT02777099 -NCT02777164 -NCT02777203 -NCT02777242 -NCT02777320 -NCT02777398 -NCT02777606 -NCT02777684 -NCT02777762 -NCT02777827 -NCT02777866 -NCT02778087 -NCT02778204 -NCT02778217 -NCT02778295 -NCT02778386 -NCT02778399 -NCT02778425 -NCT02778906 -NCT02779023 -NCT02779062 -NCT02779153 -NCT02779166 -NCT02779348 -NCT02779426 -NCT02779478 -NCT02779543 -NCT02779621 -NCT02779816 -NCT02779959 -NCT02780180 -NCT02780349 -NCT02780388 -NCT02780479 -NCT02780492 -NCT02780531 -NCT02780570 -NCT02780583 -NCT02780596 -NCT02780687 -NCT02780882 -NCT02780895 -NCT02780947 -NCT02780960 -NCT02780999 -NCT02781012 -NCT02781181 -NCT02781207 -NCT02781298 -NCT02781363 -NCT02781402 -NCT02781415 -NCT02781454 -NCT02781571 -NCT02781701 -NCT02781714 -NCT02781766 -NCT02781870 -NCT02782013 -NCT02782052 -NCT02782065 -NCT02782195 -NCT02782247 -NCT02782325 -NCT02782351 -NCT02782533 -NCT02782689 -NCT02782832 -NCT02782858 -NCT02782884 -NCT02782949 -NCT02783118 -NCT02783183 -NCT02783326 -NCT02783404 -NCT02783508 -NCT02783573 -NCT02783794 -NCT02783820 -NCT02783898 -NCT02783989 -NCT02784093 -NCT02784184 -NCT02784613 -NCT02784678 -NCT02784977 -NCT02785029 -NCT02785042 -NCT02785120 -NCT02785419 -NCT02785510 -NCT02785679 -NCT02786017 -NCT02786082 -NCT02786238 -NCT02786290 -NCT02786316 -NCT02786368 -NCT02786433 -NCT02786927 -NCT02786940 -NCT02787486 -NCT02787603 -NCT02787616 -NCT02787811 -NCT02787863 -NCT02787980 -NCT02788019 -NCT02788136 -NCT02788149 -NCT02788188 -NCT02788214 -NCT02788513 -NCT02788643 -NCT02788890 -NCT02788942 -NCT02789020 -NCT02789163 -NCT02789306 -NCT02789332 -NCT02789436 -NCT02789488 -NCT02789566 -NCT02789579 -NCT02789592 -NCT02789605 -NCT02789735 -NCT02789826 -NCT02789852 -NCT02789865 -NCT02789891 -NCT02789917 -NCT02790112 -NCT02790138 -NCT02790463 -NCT02790489 -NCT02790827 -NCT02790918 -NCT02791191 -NCT02791373 -NCT02791516 -NCT02791607 -NCT02791698 -NCT02791724 -NCT02791776 -NCT02791828 -NCT02791880 -NCT02791893 -NCT02792205 -NCT02792257 -NCT02792426 -NCT02792452 -NCT02792530 -NCT02792738 -NCT02792894 -NCT02793206 -NCT02793232 -NCT02793375 -NCT02793479 -NCT02793739 -NCT02793791 -NCT02793869 -NCT02793908 -NCT02793934 -NCT02794012 -NCT02794103 -NCT02794129 -NCT02794194 -NCT02794454 -NCT02794467 -NCT02794532 -NCT02794675 -NCT02794766 -NCT02794844 -NCT02794857 -NCT02794870 -NCT02794909 -NCT02794948 -NCT02794974 -NCT02795234 -NCT02795442 -NCT02795767 -NCT02796209 -NCT02796261 -NCT02796391 -NCT02796443 -NCT02796846 -NCT02797119 -NCT02797158 -NCT02797171 -NCT02797275 -NCT02797314 -NCT02797366 -NCT02797574 -NCT02797587 -NCT02797600 -NCT02797639 -NCT02797665 -NCT02797678 -NCT02797704 -NCT02797834 -NCT02797977 -NCT02798172 -NCT02798536 -NCT02798653 -NCT02798666 -NCT02798744 -NCT02798965 -NCT02798978 -NCT02799030 -NCT02799277 -NCT02799472 -NCT02799589 -NCT02799615 -NCT02799693 -NCT02799823 -NCT02799836 -NCT02799953 -NCT02800135 -NCT02800174 -NCT02800460 -NCT02800486 -NCT02800525 -NCT02800629 -NCT02800759 -NCT02800785 -NCT02801032 -NCT02801383 -NCT02801565 -NCT02801656 -NCT02801955 -NCT02801994 -NCT02802072 -NCT02802319 -NCT02802332 -NCT02802358 -NCT02802384 -NCT02802449 -NCT02802566 -NCT02802657 -NCT02802774 -NCT02802800 -NCT02802865 -NCT02802878 -NCT02803190 -NCT02803320 -NCT02803346 -NCT02803658 -NCT02803697 -NCT02803788 -NCT02803801 -NCT02803892 -NCT02803957 -NCT02804178 -NCT02804230 -NCT02804750 -NCT02804789 -NCT02805296 -NCT02805647 -NCT02805816 -NCT02805920 -NCT02805998 -NCT02806115 -NCT02806167 -NCT02806297 -NCT02806310 -NCT02806414 -NCT02806479 -NCT02806492 -NCT02806609 -NCT02806648 -NCT02806661 -NCT02806882 -NCT02806999 -NCT02807025 -NCT02807077 -NCT02807103 -NCT02807233 -NCT02807246 -NCT02807545 -NCT02807623 -NCT02807649 -NCT02807740 -NCT02807753 -NCT02807844 -NCT02808000 -NCT02808013 -NCT02808247 -NCT02808299 -NCT02808377 -NCT02808494 -NCT02808793 -NCT02808897 -NCT02809040 -NCT02809118 -NCT02809235 -NCT02809352 -NCT02809560 -NCT02809599 -NCT02809651 -NCT02809807 -NCT02809833 -NCT02809859 -NCT02809872 -NCT02809911 -NCT02810015 -NCT02810028 -NCT02810236 -NCT02810288 -NCT02810418 -NCT02810483 -NCT02810847 -NCT02810860 -NCT02810912 -NCT02811120 -NCT02811146 -NCT02811172 -NCT02811367 -NCT02811549 -NCT02811614 -NCT02811809 -NCT02811887 -NCT02811900 -NCT02811926 -NCT02811978 -NCT02812056 -NCT02812069 -NCT02812173 -NCT02812225 -NCT02812316 -NCT02812394 -NCT02812511 -NCT02812615 -NCT02812719 -NCT02812836 -NCT02812914 -NCT02812992 -NCT02813044 -NCT02813057 -NCT02813122 -NCT02813603 -NCT02813616 -NCT02813655 -NCT02813694 -NCT02813746 -NCT02813876 -NCT02813967 -NCT02813993 -NCT02814006 -NCT02814019 -NCT02814032 -NCT02814045 -NCT02814175 -NCT02814201 -NCT02814227 -NCT02814318 -NCT02814396 -NCT02814448 -NCT02814656 -NCT02814695 -NCT02814799 -NCT02814916 -NCT02814929 -NCT02815072 -NCT02815267 -NCT02815280 -NCT02815397 -NCT02815488 -NCT02815566 -NCT02815709 -NCT02815761 -NCT02816099 -NCT02816125 -NCT02816281 -NCT02816294 -NCT02816333 -NCT02816645 -NCT02816658 -NCT02816762 -NCT02817347 -NCT02817464 -NCT02817490 -NCT02817581 -NCT02817633 -NCT02817893 -NCT02817997 -NCT02818660 -NCT02818777 -NCT02818829 -NCT02818946 -NCT02819245 -NCT02819479 -NCT02819856 -NCT02819960 -NCT02820012 -NCT02820077 -NCT02820142 -NCT02820155 -NCT02820415 -NCT02820688 -NCT02820714 -NCT02820740 -NCT02820844 -NCT02820896 -NCT02820974 -NCT02821026 -NCT02821169 -NCT02821234 -NCT02821468 -NCT02821546 -NCT02821637 -NCT02821650 -NCT02821741 -NCT02821832 -NCT02821884 -NCT02821923 -NCT02821988 -NCT02822014 -NCT02822287 -NCT02822378 -NCT02822456 -NCT02822508 -NCT02822794 -NCT02822807 -NCT02822846 -NCT02822924 -NCT02822963 -NCT02823223 -NCT02823626 -NCT02823704 -NCT02823795 -NCT02823899 -NCT02823912 -NCT02824172 -NCT02824523 -NCT02824575 -NCT02824718 -NCT02824926 -NCT02825043 -NCT02825095 -NCT02825108 -NCT02825199 -NCT02825212 -NCT02825238 -NCT02825290 -NCT02825550 -NCT02826005 -NCT02826031 -NCT02826304 -NCT02826343 -NCT02826408 -NCT02826655 -NCT02826720 -NCT02826850 -NCT02827006 -NCT02827019 -NCT02827175 -NCT02827318 -NCT02827630 -NCT02827734 -NCT02827851 -NCT02827955 -NCT02827994 -NCT02828020 -NCT02828085 -NCT02828098 -NCT02828163 -NCT02828241 -NCT02828410 -NCT02828514 -NCT02828527 -NCT02828670 -NCT02828774 -NCT02829047 -NCT02829060 -NCT02829450 -NCT02829619 -NCT02829684 -NCT02829749 -NCT02829853 -NCT02830048 -NCT02830204 -NCT02830321 -NCT02830347 -NCT02830360 -NCT02830399 -NCT02830412 -NCT02830425 -NCT02830477 -NCT02830568 -NCT02830607 -NCT02830984 -NCT02831049 -NCT02831088 -NCT02831179 -NCT02831244 -NCT02831296 -NCT02831374 -NCT02831387 -NCT02831530 -NCT02831569 -NCT02831699 -NCT02831712 -NCT02831855 -NCT02831894 -NCT02831985 -NCT02832011 -NCT02832063 -NCT02832401 -NCT02832414 -NCT02832492 -NCT02832648 -NCT02832713 -NCT02832765 -NCT02832947 -NCT02832960 -NCT02833090 -NCT02833103 -NCT02833168 -NCT02833233 -NCT02833480 -NCT02833493 -NCT02833610 -NCT02833636 -NCT02833662 -NCT02833714 -NCT02833870 -NCT02833896 -NCT02833909 -NCT02833974 -NCT02834013 -NCT02834052 -NCT02834286 -NCT02834429 -NCT02834455 -NCT02835157 -NCT02835443 -NCT02835521 -NCT02835599 -NCT02835807 -NCT02835820 -NCT02836405 -NCT02836496 -NCT02836509 -NCT02836665 -NCT02836717 -NCT02836743 -NCT02836860 -NCT02836899 -NCT02837146 -NCT02837172 -NCT02837237 -NCT02837367 -NCT02837523 -NCT02837783 -NCT02837900 -NCT02837926 -NCT02837965 -NCT02838095 -NCT02838277 -NCT02838368 -NCT02838576 -NCT02838628 -NCT02838641 -NCT02838654 -NCT02838680 -NCT02838758 -NCT02838849 -NCT02839031 -NCT02839096 -NCT02839109 -NCT02839356 -NCT02839434 -NCT02839564 -NCT02839577 -NCT02839694 -NCT02839759 -NCT02839785 -NCT02840201 -NCT02840214 -NCT02840266 -NCT02840292 -NCT02840461 -NCT02840487 -NCT02840929 -NCT02840981 -NCT02841137 -NCT02841163 -NCT02841215 -NCT02841254 -NCT02841553 -NCT02841605 -NCT02842008 -NCT02842021 -NCT02842268 -NCT02842346 -NCT02842359 -NCT02842541 -NCT02842736 -NCT02842814 -NCT02842892 -NCT02842905 -NCT02843347 -NCT02843516 -NCT02843529 -NCT02843633 -NCT02844023 -NCT02844101 -NCT02844192 -NCT02844465 -NCT02844478 -NCT02844517 -NCT02844569 -NCT02844751 -NCT02844829 -NCT02844868 -NCT02845024 -NCT02845115 -NCT02845427 -NCT02845466 -NCT02845596 -NCT02845752 -NCT02845843 -NCT02845986 -NCT02846454 -NCT02846766 -NCT02846974 -NCT02847065 -NCT02847078 -NCT02847247 -NCT02847403 -NCT02847637 -NCT02847689 -NCT02847806 -NCT02847832 -NCT02847845 -NCT02847871 -NCT02847897 -NCT02847923 -NCT02847975 -NCT02848027 -NCT02848235 -NCT02848495 -NCT02848573 -NCT02848664 -NCT02848716 -NCT02848755 -NCT02848781 -NCT02848820 -NCT02849093 -NCT02849145 -NCT02849418 -NCT02849444 -NCT02849496 -NCT02849548 -NCT02849678 -NCT02849743 -NCT02849977 -NCT02850042 -NCT02850068 -NCT02850081 -NCT02850497 -NCT02850588 -NCT02850796 -NCT02850848 -NCT02850978 -NCT02851121 -NCT02851251 -NCT02851290 -NCT02851407 -NCT02851537 -NCT02851563 -NCT02851693 -NCT02851797 -NCT02851927 -NCT02851953 -NCT02851966 -NCT02852005 -NCT02852096 -NCT02852109 -NCT02852343 -NCT02852408 -NCT02852460 -NCT02852525 -NCT02852824 -NCT02853123 -NCT02853149 -NCT02853292 -NCT02853357 -NCT02853487 -NCT02853539 -NCT02853578 -NCT02853708 -NCT02853968 -NCT02854033 -NCT02854059 -NCT02854098 -NCT02854176 -NCT02854280 -NCT02854514 -NCT02854592 -NCT02854826 -NCT02854930 -NCT02854956 -NCT02855138 -NCT02855281 -NCT02855437 -NCT02855645 -NCT02855814 -NCT02855840 -NCT02855892 -NCT02856022 -NCT02856113 -NCT02856217 -NCT02856269 -NCT02856373 -NCT02856516 -NCT02856633 -NCT02856789 -NCT02856802 -NCT02856815 -NCT02856919 -NCT02857192 -NCT02857205 -NCT02857283 -NCT02857439 -NCT02857556 -NCT02857582 -NCT02857686 -NCT02857712 -NCT02857842 -NCT02857972 -NCT02858102 -NCT02858297 -NCT02858336 -NCT02858362 -NCT02858414 -NCT02858583 -NCT02858661 -NCT02858687 -NCT02858986 -NCT02859129 -NCT02859142 -NCT02859207 -NCT02859350 -NCT02859389 -NCT02859519 -NCT02859532 -NCT02859584 -NCT02859844 -NCT02860039 -NCT02860052 -NCT02860182 -NCT02860247 -NCT02860377 -NCT02860494 -NCT02860572 -NCT02860663 -NCT02860702 -NCT02860975 -NCT02861014 -NCT02861105 -NCT02861183 -NCT02861274 -NCT02861430 -NCT02861443 -NCT02861456 -NCT02861508 -NCT02861521 -NCT02861885 -NCT02861911 -NCT02861937 -NCT02862067 -NCT02862132 -NCT02862249 -NCT02862340 -NCT02862353 -NCT02862405 -NCT02862470 -NCT02862483 -NCT02862600 -NCT02862808 -NCT02862847 -NCT02862925 -NCT02863120 -NCT02863133 -NCT02863159 -NCT02863211 -NCT02863250 -NCT02863289 -NCT02863406 -NCT02863562 -NCT02863692 -NCT02863770 -NCT02863822 -NCT02863835 -NCT02863848 -NCT02864108 -NCT02864342 -NCT02864420 -NCT02864433 -NCT02865096 -NCT02865161 -NCT02865187 -NCT02865252 -NCT02865304 -NCT02865577 -NCT02865616 -NCT02865902 -NCT02865915 -NCT02866006 -NCT02866045 -NCT02866084 -NCT02866162 -NCT02866240 -NCT02866851 -NCT02866864 -NCT02866877 -NCT02866942 -NCT02866994 -NCT02867072 -NCT02867111 -NCT02867319 -NCT02867358 -NCT02867371 -NCT02867410 -NCT02867592 -NCT02867709 -NCT02867761 -NCT02868034 -NCT02868216 -NCT02868359 -NCT02868411 -NCT02868476 -NCT02868567 -NCT02868580 -NCT02868593 -NCT02868606 -NCT02868632 -NCT02868684 -NCT02868762 -NCT02868827 -NCT02868983 -NCT02869035 -NCT02869074 -NCT02869360 -NCT02869425 -NCT02869490 -NCT02869529 -NCT02869555 -NCT02869620 -NCT02869698 -NCT02869763 -NCT02869945 -NCT02869958 -NCT02869971 -NCT02870023 -NCT02870114 -NCT02870478 -NCT02870673 -NCT02870686 -NCT02870751 -NCT02870985 -NCT02871011 -NCT02871024 -NCT02871076 -NCT02871089 -NCT02871180 -NCT02871427 -NCT02871570 -NCT02871648 -NCT02871661 -NCT02871791 -NCT02871817 -NCT02871908 -NCT02872064 -NCT02872077 -NCT02872090 -NCT02872376 -NCT02872428 -NCT02872467 -NCT02872532 -NCT02872831 -NCT02872948 -NCT02873000 -NCT02873195 -NCT02873273 -NCT02873286 -NCT02873377 -NCT02873559 -NCT02873689 -NCT02873741 -NCT02873793 -NCT02873845 -NCT02874066 -NCT02874287 -NCT02874352 -NCT02874612 -NCT02874846 -NCT02874937 -NCT02875119 -NCT02875678 -NCT02875691 -NCT02875756 -NCT02875782 -NCT02876289 -NCT02876380 -NCT02876393 -NCT02876419 -NCT02876497 -NCT02876575 -NCT02876601 -NCT02876770 -NCT02876874 -NCT02877329 -NCT02877394 -NCT02877537 -NCT02878148 -NCT02878252 -NCT02878265 -NCT02878330 -NCT02878395 -NCT02878694 -NCT02878785 -NCT02878863 -NCT02878915 -NCT02878941 -NCT02879045 -NCT02879071 -NCT02879344 -NCT02879409 -NCT02879461 -NCT02879721 -NCT02879747 -NCT02879773 -NCT02879799 -NCT02879825 -NCT02879903 -NCT02880072 -NCT02880293 -NCT02880332 -NCT02880709 -NCT02880878 -NCT02880904 -NCT02880930 -NCT02880956 -NCT02881073 -NCT02881099 -NCT02881229 -NCT02881255 -NCT02881333 -NCT02881515 -NCT02881554 -NCT02881567 -NCT02881814 -NCT02881996 -NCT02882139 -NCT02882152 -NCT02882165 -NCT02882191 -NCT02882217 -NCT02882269 -NCT02882295 -NCT02882334 -NCT02882438 -NCT02882503 -NCT02882555 -NCT02882698 -NCT02882776 -NCT02882893 -NCT02882945 -NCT02882971 -NCT02883049 -NCT02883738 -NCT02884102 -NCT02884141 -NCT02884154 -NCT02884492 -NCT02884505 -NCT02884570 -NCT02884791 -NCT02884830 -NCT02884882 -NCT02884960 -NCT02885116 -NCT02885207 -NCT02885259 -NCT02885467 -NCT02885636 -NCT02885688 -NCT02885935 -NCT02886052 -NCT02886143 -NCT02886247 -NCT02886273 -NCT02886390 -NCT02886559 -NCT02886741 -NCT02886819 -NCT02886949 -NCT02887092 -NCT02887105 -NCT02887196 -NCT02887365 -NCT02887443 -NCT02887547 -NCT02887703 -NCT02887716 -NCT02887742 -NCT02887846 -NCT02887911 -NCT02888015 -NCT02888106 -NCT02888132 -NCT02888171 -NCT02888223 -NCT02888392 -NCT02888496 -NCT02889068 -NCT02889224 -NCT02889380 -NCT02889471 -NCT02889510 -NCT02889536 -NCT02889627 -NCT02889653 -NCT02889705 -NCT02889796 -NCT02889809 -NCT02889822 -NCT02889913 -NCT02889926 -NCT02890004 -NCT02890017 -NCT02890342 -NCT02890420 -NCT02890485 -NCT02890524 -NCT02890654 -NCT02890862 -NCT02890901 -NCT02890966 -NCT02891161 -NCT02891434 -NCT02891460 -NCT02891538 -NCT02891642 -NCT02891668 -NCT02891863 -NCT02892058 -NCT02892071 -NCT02892188 -NCT02892266 -NCT02892383 -NCT02892396 -NCT02892474 -NCT02892656 -NCT02892760 -NCT02892877 -NCT02892942 -NCT02893124 -NCT02893163 -NCT02893176 -NCT02893241 -NCT02893267 -NCT02893306 -NCT02893358 -NCT02893501 -NCT02893683 -NCT02893709 -NCT02893813 -NCT02893930 -NCT02893969 -NCT02894151 -NCT02894411 -NCT02894567 -NCT02894658 -NCT02894671 -NCT02894723 -NCT02894762 -NCT02894775 -NCT02894866 -NCT02895256 -NCT02895425 -NCT02895594 -NCT02895763 -NCT02895802 -NCT02895919 -NCT02895932 -NCT02895945 -NCT02896192 -NCT02896244 -NCT02896309 -NCT02896361 -NCT02896387 -NCT02896465 -NCT02896530 -NCT02896751 -NCT02896816 -NCT02896946 -NCT02897388 -NCT02897596 -NCT02897622 -NCT02897661 -NCT02897700 -NCT02898064 -NCT02898363 -NCT02898519 -NCT02898766 -NCT02898844 -NCT02898896 -NCT02898922 -NCT02899026 -NCT02899039 -NCT02899091 -NCT02899325 -NCT02899598 -NCT02899611 -NCT02899624 -NCT02899702 -NCT02899923 -NCT02900105 -NCT02900248 -NCT02900352 -NCT02900495 -NCT02900521 -NCT02900755 -NCT02900820 -NCT02900898 -NCT02900911 -NCT02900963 -NCT02901106 -NCT02901288 -NCT02901392 -NCT02901938 -NCT02902185 -NCT02902302 -NCT02902432 -NCT02902510 -NCT02902536 -NCT02902575 -NCT02902588 -NCT02902601 -NCT02902731 -NCT02902809 -NCT02902822 -NCT02903017 -NCT02903160 -NCT02903290 -NCT02903355 -NCT02903446 -NCT02903537 -NCT02903615 -NCT02903680 -NCT02904447 -NCT02904564 -NCT02904629 -NCT02904707 -NCT02904746 -NCT02904759 -NCT02904798 -NCT02904837 -NCT02904863 -NCT02905019 -NCT02905175 -NCT02905305 -NCT02905669 -NCT02905786 -NCT02905877 -NCT02905903 -NCT02905981 -NCT02906046 -NCT02906098 -NCT02906293 -NCT02906540 -NCT02906566 -NCT02906722 -NCT02906904 -NCT02906917 -NCT02907359 -NCT02907411 -NCT02907788 -NCT02907866 -NCT02907918 -NCT02908048 -NCT02908217 -NCT02908256 -NCT02908269 -NCT02908451 -NCT02908607 -NCT02908685 -NCT02908698 -NCT02908958 -NCT02908971 -NCT02909036 -NCT02909127 -NCT02909257 -NCT02909465 -NCT02909569 -NCT02909647 -NCT02909842 -NCT02909855 -NCT02909907 -NCT02909985 -NCT02910037 -NCT02910180 -NCT02910271 -NCT02910323 -NCT02910336 -NCT02910349 -NCT02910388 -NCT02910596 -NCT02910791 -NCT02910869 -NCT02911025 -NCT02911103 -NCT02911129 -NCT02911233 -NCT02911610 -NCT02911662 -NCT02911688 -NCT02911740 -NCT02911831 -NCT02911844 -NCT02911948 -NCT02912013 -NCT02912065 -NCT02912143 -NCT02912195 -NCT02912403 -NCT02912559 -NCT02912611 -NCT02912624 -NCT02912754 -NCT02912832 -NCT02912845 -NCT02912923 -NCT02912936 -NCT02912988 -NCT02913521 -NCT02913664 -NCT02913742 -NCT02913794 -NCT02914106 -NCT02914132 -NCT02914145 -NCT02914353 -NCT02914496 -NCT02914704 -NCT02914782 -NCT02914808 -NCT02914821 -NCT02914886 -NCT02914925 -NCT02914964 -NCT02915016 -NCT02915120 -NCT02915172 -NCT02915263 -NCT02915393 -NCT02915432 -NCT02915562 -NCT02915835 -NCT02915848 -NCT02915965 -NCT02916134 -NCT02916212 -NCT02916342 -NCT02916433 -NCT02916550 -NCT02916602 -NCT02916680 -NCT02916914 -NCT02917135 -NCT02917291 -NCT02917356 -NCT02917408 -NCT02917460 -NCT02917525 -NCT02917551 -NCT02917863 -NCT02917928 -NCT02917954 -NCT02917980 -NCT02918045 -NCT02918071 -NCT02918162 -NCT02918188 -NCT02918201 -NCT02918214 -NCT02918422 -NCT02918474 -NCT02918656 -NCT02918682 -NCT02918773 -NCT02918786 -NCT02919033 -NCT02919215 -NCT02919293 -NCT02919345 -NCT02919436 -NCT02919618 -NCT02919800 -NCT02920177 -NCT02920229 -NCT02920268 -NCT02920307 -NCT02920385 -NCT02920515 -NCT02920645 -NCT02920658 -NCT02921204 -NCT02921490 -NCT02921542 -NCT02921893 -NCT02921945 -NCT02921958 -NCT02921997 -NCT02922049 -NCT02922127 -NCT02922179 -NCT02922257 -NCT02922322 -NCT02922348 -NCT02922478 -NCT02922647 -NCT02922738 -NCT02922855 -NCT02922998 -NCT02923011 -NCT02923232 -NCT02923297 -NCT02923310 -NCT02923323 -NCT02923609 -NCT02923700 -NCT02923830 -NCT02923895 -NCT02924025 -NCT02924116 -NCT02924363 -NCT02924402 -NCT02924441 -NCT02924623 -NCT02924818 -NCT02925026 -NCT02925260 -NCT02925390 -NCT02925455 -NCT02925507 -NCT02925533 -NCT02925650 -NCT02925819 -NCT02925884 -NCT02926014 -NCT02926079 -NCT02926131 -NCT02926196 -NCT02926261 -NCT02926534 -NCT02926625 -NCT02926703 -NCT02926716 -NCT02926729 -NCT02926872 -NCT02926911 -NCT02926963 -NCT02927093 -NCT02927145 -NCT02927366 -NCT02927431 -NCT02927691 -NCT02927743 -NCT02927977 -NCT02928055 -NCT02928107 -NCT02928146 -NCT02928172 -NCT02928341 -NCT02928367 -NCT02928406 -NCT02928731 -NCT02929160 -NCT02929225 -NCT02929316 -NCT02929355 -NCT02929420 -NCT02929524 -NCT02929589 -NCT02929758 -NCT02929875 -NCT02929966 -NCT02930044 -NCT02930122 -NCT02930213 -NCT02930278 -NCT02930291 -NCT02930304 -NCT02930317 -NCT02930460 -NCT02930512 -NCT02930538 -NCT02930889 -NCT02930915 -NCT02930928 -NCT02930941 -NCT02931032 -NCT02931097 -NCT02931188 -NCT02931292 -NCT02931318 -NCT02931331 -NCT02931448 -NCT02931461 -NCT02931591 -NCT02931695 -NCT02931721 -NCT02931760 -NCT02932033 -NCT02932046 -NCT02932137 -NCT02932189 -NCT02932267 -NCT02932475 -NCT02932501 -NCT02932527 -NCT02932540 -NCT02932618 -NCT02932761 -NCT02932826 -NCT02932865 -NCT02932904 -NCT02932982 -NCT02933060 -NCT02933190 -NCT02933216 -NCT02933411 -NCT02933476 -NCT02933580 -NCT02933892 -NCT02933957 -NCT02934152 -NCT02934399 -NCT02934451 -NCT02934490 -NCT02934620 -NCT02934854 -NCT02934932 -NCT02934945 -NCT02935036 -NCT02935374 -NCT02935452 -NCT02935491 -NCT02935699 -NCT02935868 -NCT02935881 -NCT02935946 -NCT02935985 -NCT02936024 -NCT02936167 -NCT02936206 -NCT02936375 -NCT02936492 -NCT02936531 -NCT02936596 -NCT02936739 -NCT02936765 -NCT02936817 -NCT02936986 -NCT02937155 -NCT02937233 -NCT02937311 -NCT02937428 -NCT02937493 -NCT02937727 -NCT02937740 -NCT02938000 -NCT02938182 -NCT02938585 -NCT02938689 -NCT02938767 -NCT02938988 -NCT02939079 -NCT02939118 -NCT02939326 -NCT02939404 -NCT02939443 -NCT02939573 -NCT02939586 -NCT02939664 -NCT02939755 -NCT02940119 -NCT02940496 -NCT02940613 -NCT02940704 -NCT02940782 -NCT02940860 -NCT02941185 -NCT02941211 -NCT02941263 -NCT02941328 -NCT02941471 -NCT02941497 -NCT02941627 -NCT02941640 -NCT02941718 -NCT02941770 -NCT02941783 -NCT02941887 -NCT02941965 -NCT02942043 -NCT02942251 -NCT02942264 -NCT02942277 -NCT02942433 -NCT02942498 -NCT02942628 -NCT02942641 -NCT02942797 -NCT02943070 -NCT02943083 -NCT02943109 -NCT02943252 -NCT02943278 -NCT02943304 -NCT02943447 -NCT02943486 -NCT02943655 -NCT02943746 -NCT02943837 -NCT02943850 -NCT02944032 -NCT02944188 -NCT02944435 -NCT02944513 -NCT02944539 -NCT02944643 -NCT02944747 -NCT02944799 -NCT02944825 -NCT02945085 -NCT02945098 -NCT02945189 -NCT02945371 -NCT02945579 -NCT02945605 -NCT02945761 -NCT02945826 -NCT02945891 -NCT02945969 -NCT02945995 -NCT02946528 -NCT02946606 -NCT02946710 -NCT02946775 -NCT02946840 -NCT02946866 -NCT02946918 -NCT02947022 -NCT02947035 -NCT02947048 -NCT02947243 -NCT02947256 -NCT02947360 -NCT02947841 -NCT02947945 -NCT02947958 -NCT02948023 -NCT02948062 -NCT02948088 -NCT02948166 -NCT02948179 -NCT02948218 -NCT02948244 -NCT02948283 -NCT02948491 -NCT02948738 -NCT02948842 -NCT02948907 -NCT02949128 -NCT02949336 -NCT02949622 -NCT02950051 -NCT02950077 -NCT02950090 -NCT02950129 -NCT02950155 -NCT02950402 -NCT02950428 -NCT02950480 -NCT02950545 -NCT02950662 -NCT02950727 -NCT02950753 -NCT02951195 -NCT02951234 -NCT02951481 -NCT02951585 -NCT02951702 -NCT02951715 -NCT02951832 -NCT02952209 -NCT02952456 -NCT02952612 -NCT02952677 -NCT02952781 -NCT02952820 -NCT02952885 -NCT02952924 -NCT02953158 -NCT02953223 -NCT02953249 -NCT02953431 -NCT02953704 -NCT02953834 -NCT02953860 -NCT02953912 -NCT02954107 -NCT02954289 -NCT02954354 -NCT02954432 -NCT02954471 -NCT02954510 -NCT02954575 -NCT02954601 -NCT02954640 -NCT02954666 -NCT02954705 -NCT02954718 -NCT02954757 -NCT02954809 -NCT02954874 -NCT02955147 -NCT02955199 -NCT02955225 -NCT02955290 -NCT02955329 -NCT02955368 -NCT02955381 -NCT02955537 -NCT02955680 -NCT02955797 -NCT02955901 -NCT02955927 -NCT02956213 -NCT02956512 -NCT02956525 -NCT02956668 -NCT02956720 -NCT02956772 -NCT02956915 -NCT02956980 -NCT02957136 -NCT02957227 -NCT02957474 -NCT02957513 -NCT02957708 -NCT02957747 -NCT02957968 -NCT02958059 -NCT02958150 -NCT02958267 -NCT02958319 -NCT02958345 -NCT02958436 -NCT02958579 -NCT02958605 -NCT02958813 -NCT02958826 -NCT02958878 -NCT02958930 -NCT02959047 -NCT02959125 -NCT02959177 -NCT02959294 -NCT02959320 -NCT02959359 -NCT02959450 -NCT02959502 -NCT02959671 -NCT02959788 -NCT02959853 -NCT02959918 -NCT02959931 -NCT02959957 -NCT02959983 -NCT02960048 -NCT02960178 -NCT02960191 -NCT02960230 -NCT02960243 -NCT02960295 -NCT02960399 -NCT02960477 -NCT02960503 -NCT02960672 -NCT02960828 -NCT02960984 -NCT02960997 -NCT02961114 -NCT02961127 -NCT02961218 -NCT02961335 -NCT02961426 -NCT02961647 -NCT02961790 -NCT02961907 -NCT02961959 -NCT02962154 -NCT02962180 -NCT02962427 -NCT02962557 -NCT02962895 -NCT02962908 -NCT02963129 -NCT02963337 -NCT02963428 -NCT02963454 -NCT02963584 -NCT02963597 -NCT02963662 -NCT02963974 -NCT02964130 -NCT02964169 -NCT02964195 -NCT02964273 -NCT02964364 -NCT02964377 -NCT02964494 -NCT02964702 -NCT02964754 -NCT02964858 -NCT02964871 -NCT02964884 -NCT02964910 -NCT02965027 -NCT02965248 -NCT02965352 -NCT02965365 -NCT02965495 -NCT02965534 -NCT02965573 -NCT02966041 -NCT02966249 -NCT02966366 -NCT02966431 -NCT02966561 -NCT02966587 -NCT02966756 -NCT02967029 -NCT02967042 -NCT02967250 -NCT02967445 -NCT02967536 -NCT02967770 -NCT02967822 -NCT02967926 -NCT02968004 -NCT02968043 -NCT02968147 -NCT02968160 -NCT02968329 -NCT02968355 -NCT02968394 -NCT02968511 -NCT02968615 -NCT02968641 -NCT02968758 -NCT02968849 -NCT02968966 -NCT02969590 -NCT02969772 -NCT02970097 -NCT02970266 -NCT02970396 -NCT02970695 -NCT02970877 -NCT02970890 -NCT02971059 -NCT02971124 -NCT02971163 -NCT02971189 -NCT02971254 -NCT02971293 -NCT02971306 -NCT02971436 -NCT02971475 -NCT02971657 -NCT02971683 -NCT02971878 -NCT02972047 -NCT02972073 -NCT02972138 -NCT02972229 -NCT02972242 -NCT02972268 -NCT02972346 -NCT02972580 -NCT02972671 -NCT02972749 -NCT02972801 -NCT02973009 -NCT02973061 -NCT02973087 -NCT02973139 -NCT02973191 -NCT02973230 -NCT02973282 -NCT02973438 -NCT02973503 -NCT02973555 -NCT02973737 -NCT02973776 -NCT02973841 -NCT02973971 -NCT02973997 -NCT02974218 -NCT02974335 -NCT02974426 -NCT02974595 -NCT02974751 -NCT02974764 -NCT02974790 -NCT02974907 -NCT02975141 -NCT02975284 -NCT02975297 -NCT02975401 -NCT02975505 -NCT02975570 -NCT02975661 -NCT02975804 -NCT02975843 -NCT02975921 -NCT02976064 -NCT02976142 -NCT02976181 -NCT02976246 -NCT02976259 -NCT02976493 -NCT02976675 -NCT02976818 -NCT02976870 -NCT02976922 -NCT02977013 -NCT02977065 -NCT02977091 -NCT02977169 -NCT02977182 -NCT02977403 -NCT02977468 -NCT02977507 -NCT02977572 -NCT02977637 -NCT02977832 -NCT02977858 -NCT02977897 -NCT02978105 -NCT02978144 -NCT02978170 -NCT02978209 -NCT02978508 -NCT02978625 -NCT02978742 -NCT02978781 -NCT02978794 -NCT02978820 -NCT02979093 -NCT02979119 -NCT02979288 -NCT02979431 -NCT02979509 -NCT02979730 -NCT02980211 -NCT02980263 -NCT02980302 -NCT02980406 -NCT02980445 -NCT02980523 -NCT02980640 -NCT02980666 -NCT02980731 -NCT02980770 -NCT02980783 -NCT02980926 -NCT02980965 -NCT02981056 -NCT02981069 -NCT02981121 -NCT02981147 -NCT02981199 -NCT02981303 -NCT02981433 -NCT02981459 -NCT02981875 -NCT02982096 -NCT02982148 -NCT02982161 -NCT02982213 -NCT02982304 -NCT02982382 -NCT02982473 -NCT02982512 -NCT02982811 -NCT02983032 -NCT02983253 -NCT02983305 -NCT02983760 -NCT02984254 -NCT02984384 -NCT02984501 -NCT02984540 -NCT02984618 -NCT02984631 -NCT02984930 -NCT02984943 -NCT02984969 -NCT02985008 -NCT02985151 -NCT02985268 -NCT02985385 -NCT02985424 -NCT02985528 -NCT02985541 -NCT02985723 -NCT02985840 -NCT02986334 -NCT02986347 -NCT02986373 -NCT02986646 -NCT02986685 -NCT02986828 -NCT02986854 -NCT02986932 -NCT02987257 -NCT02987478 -NCT02987738 -NCT02987751 -NCT02987764 -NCT02987790 -NCT02987985 -NCT02988063 -NCT02988518 -NCT02988596 -NCT02988869 -NCT02988934 -NCT02988999 -NCT02989012 -NCT02989090 -NCT02989142 -NCT02989259 -NCT02989337 -NCT02989376 -NCT02989428 -NCT02989480 -NCT02989493 -NCT02989519 -NCT02989701 -NCT02990130 -NCT02990494 -NCT02990585 -NCT02990676 -NCT02990936 -NCT02991339 -NCT02991352 -NCT02991456 -NCT02991482 -NCT02991547 -NCT02991560 -NCT02991612 -NCT02991638 -NCT02991833 -NCT02992015 -NCT02992067 -NCT02992132 -NCT02992145 -NCT02992236 -NCT02992262 -NCT02992301 -NCT02992327 -NCT02992379 -NCT02992665 -NCT02992678 -NCT02992808 -NCT02992821 -NCT02992925 -NCT02992951 -NCT02993042 -NCT02993159 -NCT02993198 -NCT02993211 -NCT02993250 -NCT02993562 -NCT02993731 -NCT02993744 -NCT02993783 -NCT02993796 -NCT02993822 -NCT02994030 -NCT02994186 -NCT02994342 -NCT02994420 -NCT02994446 -NCT02994459 -NCT02994472 -NCT02994485 -NCT02994511 -NCT02994602 -NCT02994706 -NCT02994797 -NCT02994823 -NCT02994849 -NCT02994927 -NCT02995304 -NCT02995330 -NCT02995356 -NCT02995525 -NCT02995538 -NCT02995668 -NCT02995733 -NCT02995798 -NCT02995915 -NCT02996266 -NCT02996461 -NCT02996487 -NCT02996552 -NCT02996565 -NCT02996877 -NCT02996955 -NCT02997150 -NCT02997254 -NCT02997527 -NCT02997787 -NCT02997839 -NCT02997943 -NCT02997969 -NCT02997982 -NCT02998151 -NCT02998359 -NCT02998450 -NCT02998619 -NCT02998658 -NCT02998671 -NCT02998788 -NCT02998996 -NCT02999048 -NCT02999165 -NCT02999295 -NCT02999308 -NCT02999386 -NCT02999412 -NCT02999451 -NCT02999594 -NCT02999646 -NCT02999698 -NCT02999711 -NCT02999958 -NCT02999997 -NCT03000049 -NCT03000127 -NCT03000231 -NCT03000517 -NCT03000660 -NCT03000712 -NCT03000790 -NCT03000933 -NCT03001050 -NCT03001167 -NCT03001323 -NCT03001362 -NCT03001401 -NCT03001453 -NCT03001466 -NCT03001583 -NCT03001739 -NCT03001791 -NCT03001843 -NCT03002012 -NCT03002051 -NCT03002298 -NCT03002324 -NCT03002623 -NCT03002818 -NCT03002922 -NCT03002974 -NCT03003208 -NCT03003234 -NCT03003273 -NCT03003507 -NCT03003533 -NCT03003572 -NCT03003663 -NCT03004118 -NCT03004573 -NCT03004586 -NCT03004599 -NCT03004677 -NCT03004768 -NCT03004924 -NCT03004976 -NCT03005093 -NCT03005145 -NCT03005275 -NCT03005379 -NCT03005444 -NCT03005522 -NCT03005561 -NCT03005587 -NCT03005600 -NCT03005717 -NCT03005834 -NCT03005912 -NCT03006224 -NCT03006263 -NCT03006276 -NCT03006354 -NCT03006445 -NCT03006679 -NCT03006718 -NCT03006796 -NCT03006978 -NCT03007004 -NCT03007095 -NCT03007147 -NCT03007173 -NCT03007251 -NCT03007277 -NCT03007316 -NCT03007381 -NCT03007420 -NCT03007433 -NCT03007550 -NCT03007563 -NCT03007589 -NCT03007732 -NCT03007797 -NCT03007849 -NCT03008005 -NCT03008044 -NCT03008161 -NCT03008252 -NCT03008291 -NCT03008369 -NCT03008447 -NCT03008551 -NCT03008655 -NCT03008668 -NCT03008707 -NCT03008733 -NCT03008824 -NCT03009019 -NCT03009331 -NCT03009565 -NCT03009591 -NCT03009643 -NCT03009760 -NCT03010059 -NCT03010358 -NCT03010449 -NCT03010540 -NCT03010553 -NCT03010631 -NCT03010709 -NCT03010735 -NCT03011294 -NCT03011307 -NCT03011463 -NCT03011476 -NCT03011489 -NCT03011736 -NCT03011775 -NCT03011840 -NCT03012178 -NCT03012256 -NCT03012334 -NCT03012529 -NCT03012555 -NCT03012594 -NCT03012776 -NCT03012841 -NCT03012932 -NCT03013010 -NCT03013166 -NCT03013179 -NCT03013348 -NCT03013608 -NCT03013686 -NCT03013985 -NCT03014024 -NCT03014037 -NCT03014076 -NCT03014154 -NCT03014258 -NCT03014687 -NCT03014726 -NCT03014804 -NCT03014843 -NCT03014921 -NCT03014986 -NCT03015220 -NCT03015233 -NCT03015311 -NCT03015363 -NCT03015415 -NCT03015493 -NCT03015532 -NCT03015701 -NCT03015753 -NCT03015779 -NCT03015948 -NCT03015987 -NCT03016000 -NCT03016026 -NCT03016195 -NCT03016286 -NCT03016299 -NCT03016312 -NCT03016377 -NCT03016715 -NCT03016910 -NCT03016949 -NCT03017248 -NCT03017274 -NCT03017339 -NCT03017391 -NCT03017443 -NCT03017482 -NCT03017612 -NCT03017716 -NCT03017768 -NCT03018132 -NCT03018288 -NCT03018431 -NCT03018613 -NCT03018652 -NCT03018808 -NCT03018821 -NCT03018912 -NCT03019029 -NCT03019055 -NCT03019172 -NCT03019237 -NCT03019328 -NCT03019380 -NCT03019393 -NCT03019510 -NCT03019536 -NCT03019575 -NCT03019679 -NCT03019757 -NCT03019991 -NCT03020004 -NCT03020147 -NCT03020160 -NCT03020212 -NCT03020238 -NCT03020303 -NCT03020498 -NCT03020511 -NCT03020550 -NCT03020797 -NCT03020862 -NCT03020888 -NCT03020966 -NCT03021122 -NCT03021395 -NCT03021408 -NCT03021603 -NCT03021629 -NCT03021681 -NCT03021785 -NCT03021889 -NCT03022110 -NCT03022162 -NCT03022500 -NCT03022513 -NCT03022552 -NCT03022578 -NCT03022656 -NCT03022786 -NCT03022864 -NCT03022968 -NCT03022994 -NCT03023046 -NCT03023098 -NCT03023111 -NCT03023137 -NCT03023189 -NCT03023397 -NCT03023462 -NCT03023592 -NCT03023683 -NCT03023774 -NCT03024151 -NCT03024190 -NCT03024242 -NCT03024333 -NCT03024359 -NCT03024658 -NCT03024749 -NCT03025152 -NCT03025269 -NCT03025464 -NCT03025516 -NCT03025529 -NCT03025646 -NCT03025672 -NCT03025750 -NCT03025776 -NCT03025841 -NCT03025906 -NCT03025932 -NCT03025971 -NCT03025984 -NCT03026088 -NCT03026101 -NCT03026439 -NCT03026478 -NCT03026491 -NCT03026504 -NCT03026556 -NCT03026686 -NCT03026712 -NCT03026933 -NCT03026972 -NCT03027037 -NCT03027076 -NCT03027089 -NCT03027115 -NCT03027154 -NCT03027258 -NCT03027310 -NCT03027349 -NCT03027401 -NCT03027427 -NCT03027492 -NCT03027609 -NCT03027648 -NCT03027752 -NCT03027973 -NCT03028077 -NCT03028142 -NCT03028181 -NCT03028272 -NCT03028285 -NCT03028298 -NCT03028467 -NCT03028493 -NCT03028506 -NCT03028623 -NCT03028701 -NCT03028753 -NCT03028779 -NCT03028818 -NCT03028883 -NCT03028974 -NCT03029039 -NCT03029156 -NCT03029299 -NCT03029429 -NCT03029468 -NCT03029806 -NCT03029832 -NCT03029897 -NCT03029949 -NCT03030248 -NCT03030274 -NCT03030365 -NCT03030573 -NCT03030586 -NCT03030664 -NCT03030794 -NCT03031093 -NCT03031132 -NCT03031145 -NCT03031158 -NCT03031236 -NCT03031301 -NCT03031418 -NCT03031535 -NCT03031639 -NCT03031730 -NCT03031873 -NCT03031977 -NCT03032003 -NCT03032029 -NCT03032055 -NCT03032107 -NCT03032172 -NCT03032211 -NCT03032224 -NCT03032315 -NCT03032380 -NCT03032510 -NCT03032536 -NCT03032848 -NCT03033082 -NCT03033121 -NCT03033160 -NCT03033381 -NCT03033485 -NCT03033758 -NCT03033771 -NCT03033914 -NCT03033940 -NCT03034044 -NCT03034148 -NCT03034330 -NCT03034525 -NCT03034564 -NCT03034733 -NCT03034850 -NCT03034915 -NCT03034941 -NCT03034967 -NCT03035201 -NCT03035292 -NCT03035357 -NCT03035396 -NCT03035487 -NCT03035656 -NCT03035708 -NCT03035760 -NCT03035929 -NCT03035955 -NCT03036020 -NCT03036033 -NCT03036254 -NCT03036267 -NCT03036475 -NCT03036553 -NCT03036761 -NCT03036995 -NCT03037021 -NCT03037073 -NCT03037112 -NCT03037190 -NCT03037359 -NCT03037385 -NCT03037554 -NCT03037762 -NCT03037944 -NCT03038191 -NCT03038204 -NCT03038282 -NCT03038386 -NCT03038425 -NCT03038529 -NCT03038581 -NCT03038620 -NCT03038633 -NCT03038672 -NCT03038763 -NCT03038828 -NCT03038893 -NCT03038958 -NCT03039205 -NCT03039270 -NCT03039296 -NCT03039439 -NCT03039673 -NCT03039777 -NCT03039855 -NCT03040089 -NCT03040310 -NCT03040375 -NCT03040401 -NCT03040414 -NCT03040531 -NCT03040583 -NCT03040778 -NCT03040882 -NCT03040986 -NCT03041038 -NCT03041051 -NCT03041064 -NCT03041077 -NCT03041142 -NCT03041168 -NCT03041246 -NCT03041402 -NCT03041454 -NCT03041506 -NCT03041519 -NCT03041701 -NCT03041714 -NCT03041766 -NCT03041935 -NCT03042026 -NCT03042065 -NCT03042182 -NCT03042247 -NCT03042624 -NCT03043118 -NCT03043131 -NCT03043170 -NCT03043209 -NCT03043222 -NCT03043326 -NCT03043469 -NCT03043495 -NCT03043521 -NCT03043586 -NCT03043794 -NCT03043885 -NCT03043898 -NCT03044028 -NCT03044223 -NCT03044353 -NCT03044704 -NCT03044782 -NCT03045094 -NCT03045107 -NCT03045172 -NCT03045211 -NCT03045679 -NCT03045705 -NCT03045757 -NCT03046082 -NCT03046394 -NCT03046433 -NCT03046485 -NCT03046563 -NCT03046693 -NCT03046745 -NCT03047096 -NCT03047122 -NCT03047187 -NCT03047239 -NCT03047694 -NCT03047941 -NCT03048032 -NCT03048058 -NCT03048097 -NCT03048175 -NCT03048383 -NCT03048461 -NCT03048656 -NCT03048669 -NCT03048682 -NCT03048708 -NCT03048916 -NCT03048955 -NCT03048994 -NCT03049033 -NCT03049111 -NCT03049202 -NCT03049345 -NCT03049449 -NCT03049475 -NCT03049488 -NCT03049735 -NCT03049800 -NCT03049956 -NCT03049995 -NCT03050034 -NCT03050177 -NCT03050268 -NCT03050476 -NCT03050489 -NCT03050515 -NCT03050528 -NCT03050723 -NCT03050749 -NCT03050762 -NCT03050879 -NCT03050931 -NCT03050957 -NCT03050996 -NCT03051048 -NCT03051178 -NCT03051243 -NCT03051256 -NCT03051334 -NCT03051360 -NCT03051451 -NCT03051555 -NCT03051581 -NCT03051646 -NCT03051737 -NCT03051789 -NCT03051815 -NCT03051880 -NCT03052049 -NCT03052179 -NCT03052231 -NCT03052361 -NCT03052374 -NCT03052400 -NCT03052556 -NCT03052751 -NCT03052920 -NCT03052998 -NCT03053115 -NCT03053154 -NCT03053271 -NCT03053492 -NCT03053804 -NCT03053830 -NCT03054194 -NCT03054259 -NCT03054285 -NCT03054389 -NCT03054454 -NCT03054506 -NCT03054558 -NCT03054597 -NCT03054649 -NCT03054701 -NCT03054753 -NCT03054805 -NCT03054896 -NCT03054961 -NCT03055013 -NCT03055481 -NCT03055598 -NCT03055624 -NCT03055637 -NCT03055650 -NCT03055728 -NCT03055754 -NCT03056027 -NCT03056131 -NCT03056144 -NCT03056352 -NCT03056547 -NCT03056573 -NCT03056924 -NCT03057015 -NCT03057171 -NCT03057340 -NCT03057392 -NCT03057470 -NCT03057496 -NCT03057509 -NCT03057743 -NCT03057821 -NCT03057860 -NCT03057873 -NCT03058094 -NCT03058380 -NCT03058419 -NCT03058549 -NCT03058575 -NCT03058627 -NCT03058640 -NCT03058822 -NCT03058874 -NCT03058900 -NCT03059043 -NCT03059251 -NCT03059329 -NCT03059342 -NCT03059381 -NCT03059420 -NCT03059888 -NCT03059914 -NCT03060057 -NCT03060200 -NCT03060304 -NCT03060421 -NCT03060499 -NCT03060512 -NCT03060863 -NCT03060876 -NCT03061110 -NCT03061201 -NCT03061344 -NCT03061435 -NCT03061669 -NCT03061682 -NCT03061929 -NCT03062072 -NCT03062111 -NCT03062124 -NCT03062137 -NCT03062319 -NCT03062332 -NCT03062462 -NCT03062631 -NCT03062644 -NCT03062683 -NCT03062696 -NCT03063125 -NCT03063151 -NCT03063398 -NCT03063684 -NCT03063723 -NCT03063827 -NCT03064022 -NCT03064035 -NCT03064087 -NCT03064308 -NCT03064464 -NCT03064659 -NCT03064945 -NCT03065166 -NCT03065205 -NCT03065231 -NCT03065270 -NCT03065335 -NCT03065348 -NCT03065374 -NCT03065387 -NCT03065543 -NCT03065556 -NCT03065582 -NCT03065608 -NCT03065647 -NCT03065686 -NCT03065816 -NCT03065855 -NCT03065907 -NCT03065920 -NCT03066050 -NCT03066115 -NCT03066128 -NCT03066167 -NCT03066336 -NCT03066388 -NCT03066414 -NCT03066440 -NCT03066817 -NCT03066882 -NCT03066999 -NCT03067090 -NCT03067181 -NCT03067298 -NCT03067558 -NCT03067623 -NCT03067688 -NCT03067701 -NCT03067831 -NCT03068221 -NCT03068260 -NCT03068468 -NCT03068572 -NCT03068910 -NCT03068949 -NCT03069079 -NCT03069365 -NCT03069534 -NCT03069729 -NCT03069963 -NCT03070067 -NCT03070184 -NCT03070496 -NCT03070769 -NCT03070808 -NCT03070860 -NCT03070899 -NCT03070951 -NCT03071081 -NCT03071185 -NCT03071354 -NCT03071445 -NCT03071471 -NCT03071549 -NCT03071861 -NCT03071965 -NCT03072017 -NCT03072030 -NCT03072160 -NCT03072225 -NCT03072303 -NCT03072368 -NCT03072550 -NCT03072576 -NCT03072602 -NCT03072771 -NCT03072940 -NCT03074045 -NCT03074084 -NCT03074279 -NCT03074292 -NCT03074344 -NCT03074474 -NCT03074500 -NCT03074513 -NCT03074552 -NCT03074669 -NCT03074916 -NCT03074942 -NCT03075163 -NCT03075228 -NCT03075449 -NCT03075605 -NCT03075618 -NCT03075631 -NCT03075852 -NCT03075891 -NCT03076034 -NCT03076099 -NCT03076177 -NCT03076281 -NCT03076307 -NCT03076411 -NCT03076515 -NCT03076541 -NCT03076554 -NCT03076619 -NCT03076632 -NCT03076645 -NCT03076671 -NCT03076697 -NCT03076749 -NCT03076840 -NCT03076853 -NCT03076879 -NCT03077243 -NCT03077308 -NCT03077542 -NCT03077555 -NCT03077633 -NCT03077659 -NCT03077711 -NCT03077776 -NCT03078036 -NCT03078166 -NCT03078335 -NCT03078387 -NCT03078530 -NCT03078595 -NCT03078608 -NCT03078712 -NCT03078816 -NCT03078829 -NCT03078920 -NCT03078972 -NCT03078998 -NCT03079102 -NCT03079115 -NCT03079128 -NCT03079193 -NCT03079232 -NCT03079414 -NCT03079453 -NCT03079466 -NCT03079700 -NCT03079843 -NCT03079960 -NCT03080129 -NCT03080181 -NCT03080337 -NCT03080389 -NCT03080428 -NCT03080454 -NCT03080519 -NCT03080688 -NCT03080714 -NCT03080779 -NCT03080805 -NCT03080831 -NCT03080909 -NCT03080961 -NCT03081104 -NCT03081130 -NCT03081221 -NCT03081338 -NCT03081468 -NCT03081507 -NCT03081533 -NCT03081546 -NCT03081663 -NCT03081793 -NCT03081806 -NCT03081871 -NCT03082066 -NCT03082092 -NCT03082105 -NCT03082157 -NCT03082404 -NCT03082417 -NCT03082508 -NCT03082547 -NCT03082573 -NCT03082586 -NCT03082599 -NCT03082716 -NCT03082781 -NCT03082794 -NCT03082807 -NCT03083197 -NCT03083223 -NCT03083236 -NCT03083262 -NCT03083288 -NCT03083405 -NCT03083522 -NCT03083548 -NCT03083704 -NCT03083834 -NCT03083847 -NCT03083886 -NCT03083899 -NCT03083964 -NCT03084016 -NCT03084055 -NCT03084120 -NCT03084159 -NCT03084211 -NCT03084341 -NCT03084445 -NCT03084497 -NCT03084510 -NCT03084666 -NCT03084705 -NCT03084744 -NCT03085004 -NCT03085121 -NCT03085212 -NCT03085368 -NCT03085407 -NCT03085472 -NCT03085537 -NCT03085784 -NCT03085810 -NCT03086018 -NCT03086044 -NCT03086161 -NCT03086226 -NCT03086278 -NCT03087123 -NCT03087149 -NCT03087357 -NCT03087370 -NCT03087422 -NCT03087448 -NCT03087500 -NCT03087526 -NCT03087552 -NCT03087565 -NCT03087591 -NCT03087643 -NCT03087747 -NCT03087851 -NCT03088007 -NCT03088046 -NCT03088059 -NCT03088098 -NCT03088397 -NCT03088488 -NCT03088501 -NCT03088605 -NCT03088748 -NCT03088774 -NCT03088839 -NCT03088917 -NCT03089060 -NCT03089125 -NCT03089164 -NCT03089190 -NCT03089398 -NCT03089411 -NCT03089424 -NCT03089528 -NCT03089619 -NCT03089723 -NCT03089762 -NCT03089853 -NCT03089892 -NCT03089944 -NCT03090035 -NCT03090295 -NCT03090516 -NCT03091023 -NCT03091049 -NCT03091140 -NCT03091283 -NCT03091296 -NCT03091348 -NCT03091647 -NCT03091660 -NCT03091816 -NCT03092011 -NCT03092167 -NCT03092180 -NCT03092492 -NCT03092518 -NCT03092622 -NCT03092648 -NCT03092661 -NCT03092700 -NCT03092817 -NCT03093194 -NCT03093285 -NCT03093324 -NCT03093363 -NCT03093454 -NCT03093480 -NCT03093675 -NCT03093714 -NCT03093844 -NCT03093909 -NCT03093935 -NCT03093961 -NCT03094143 -NCT03094156 -NCT03094299 -NCT03094325 -NCT03094364 -NCT03094403 -NCT03094416 -NCT03094806 -NCT03094832 -NCT03094949 -NCT03095001 -NCT03095066 -NCT03095118 -NCT03095781 -NCT03095963 -NCT03096444 -NCT03096457 -NCT03096613 -NCT03096652 -NCT03096665 -NCT03096704 -NCT03096782 -NCT03097107 -NCT03097211 -NCT03097224 -NCT03097237 -NCT03097718 -NCT03097809 -NCT03097952 -NCT03097965 -NCT03097991 -NCT03098056 -NCT03098082 -NCT03098147 -NCT03098160 -NCT03098199 -NCT03098355 -NCT03098381 -NCT03098771 -NCT03099070 -NCT03099317 -NCT03099421 -NCT03099564 -NCT03099902 -NCT03099954 -NCT03099993 -NCT03100149 -NCT03100188 -NCT03100266 -NCT03100292 -NCT03100513 -NCT03100604 -NCT03100851 -NCT03100877 -NCT03100916 -NCT03100942 -NCT03101020 -NCT03101033 -NCT03101059 -NCT03101098 -NCT03101241 -NCT03101397 -NCT03101527 -NCT03101670 -NCT03101683 -NCT03101748 -NCT03101800 -NCT03101995 -NCT03102177 -NCT03102203 -NCT03102281 -NCT03102411 -NCT03102489 -NCT03102554 -NCT03102658 -NCT03102684 -NCT03102801 -NCT03102840 -NCT03103087 -NCT03103100 -NCT03103256 -NCT03103347 -NCT03103464 -NCT03103607 -NCT03103776 -NCT03103815 -NCT03103854 -NCT03103906 -NCT03103971 -NCT03104309 -NCT03104465 -NCT03104660 -NCT03104725 -NCT03104881 -NCT03104907 -NCT03104998 -NCT03105050 -NCT03105141 -NCT03105206 -NCT03105297 -NCT03105362 -NCT03105596 -NCT03105700 -NCT03105843 -NCT03105856 -NCT03105947 -NCT03106207 -NCT03106298 -NCT03106389 -NCT03106467 -NCT03106584 -NCT03106701 -NCT03106766 -NCT03106857 -NCT03106883 -NCT03106935 -NCT03107208 -NCT03107234 -NCT03107455 -NCT03107468 -NCT03107533 -NCT03107611 -NCT03107871 -NCT03107884 -NCT03107897 -NCT03108079 -NCT03108131 -NCT03108222 -NCT03108430 -NCT03108443 -NCT03108547 -NCT03108573 -NCT03108612 -NCT03108729 -NCT03108807 -NCT03108846 -NCT03108898 -NCT03108963 -NCT03109106 -NCT03109301 -NCT03109522 -NCT03109756 -NCT03109795 -NCT03109808 -NCT03109834 -NCT03109873 -NCT03109925 -NCT03110263 -NCT03110523 -NCT03110614 -NCT03110679 -NCT03110783 -NCT03110822 -NCT03110887 -NCT03110900 -NCT03110965 -NCT03110978 -NCT03111056 -NCT03111108 -NCT03111199 -NCT03111407 -NCT03111446 -NCT03111563 -NCT03111732 -NCT03111771 -NCT03112200 -NCT03112538 -NCT03112642 -NCT03112850 -NCT03112954 -NCT03113006 -NCT03113110 -NCT03113149 -NCT03113357 -NCT03113448 -NCT03113630 -NCT03113682 -NCT03113942 -NCT03113994 -NCT03114150 -NCT03114215 -NCT03114267 -NCT03114345 -NCT03114501 -NCT03114514 -NCT03114527 -NCT03114657 -NCT03114839 -NCT03114930 -NCT03115125 -NCT03115177 -NCT03115450 -NCT03115463 -NCT03115515 -NCT03115762 -NCT03115814 -NCT03115853 -NCT03115879 -NCT03115944 -NCT03115983 -NCT03116009 -NCT03116256 -NCT03116360 -NCT03116386 -NCT03116568 -NCT03116607 -NCT03116763 -NCT03117010 -NCT03117075 -NCT03117179 -NCT03117283 -NCT03117400 -NCT03117426 -NCT03117543 -NCT03117582 -NCT03117764 -NCT03117829 -NCT03117855 -NCT03117972 -NCT03117998 -NCT03118180 -NCT03118258 -NCT03118271 -NCT03118479 -NCT03118830 -NCT03118882 -NCT03118895 -NCT03118973 -NCT03119051 -NCT03119181 -NCT03119376 -NCT03119571 -NCT03119584 -NCT03119714 -NCT03119961 -NCT03120013 -NCT03120078 -NCT03120585 -NCT03120728 -NCT03120754 -NCT03120884 -NCT03120988 -NCT03121001 -NCT03121170 -NCT03121209 -NCT03121534 -NCT03121547 -NCT03121807 -NCT03121859 -NCT03122145 -NCT03122223 -NCT03122275 -NCT03122496 -NCT03122678 -NCT03122873 -NCT03122951 -NCT03123003 -NCT03123081 -NCT03123185 -NCT03123224 -NCT03123562 -NCT03123601 -NCT03123653 -NCT03123796 -NCT03123822 -NCT03123952 -NCT03124004 -NCT03124017 -NCT03124030 -NCT03124108 -NCT03124160 -NCT03124199 -NCT03124407 -NCT03124524 -NCT03125031 -NCT03125083 -NCT03125525 -NCT03125564 -NCT03125590 -NCT03125616 -NCT03125642 -NCT03125733 -NCT03125759 -NCT03125811 -NCT03125941 -NCT03125967 -NCT03126175 -NCT03126240 -NCT03126383 -NCT03126396 -NCT03126474 -NCT03126604 -NCT03126734 -NCT03126760 -NCT03126955 -NCT03127046 -NCT03127241 -NCT03127267 -NCT03127293 -NCT03127384 -NCT03127410 -NCT03127514 -NCT03127969 -NCT03128190 -NCT03128216 -NCT03128229 -NCT03128359 -NCT03128619 -NCT03128736 -NCT03128762 -NCT03128827 -NCT03128905 -NCT03128944 -NCT03128983 -NCT03128996 -NCT03129204 -NCT03129243 -NCT03129295 -NCT03129321 -NCT03129451 -NCT03129477 -NCT03129737 -NCT03129789 -NCT03129971 -NCT03130049 -NCT03130062 -NCT03130101 -NCT03130179 -NCT03130335 -NCT03130517 -NCT03130543 -NCT03130595 -NCT03130738 -NCT03130790 -NCT03130946 -NCT03130972 -NCT03131219 -NCT03131323 -NCT03131349 -NCT03131362 -NCT03131427 -NCT03131453 -NCT03131609 -NCT03131726 -NCT03131869 -NCT03132142 -NCT03132246 -NCT03132324 -NCT03132558 -NCT03132883 -NCT03132909 -NCT03132961 -NCT03133221 -NCT03133351 -NCT03133533 -NCT03133637 -NCT03133650 -NCT03133663 -NCT03133780 -NCT03133884 -NCT03133897 -NCT03134118 -NCT03134339 -NCT03134352 -NCT03134378 -NCT03134404 -NCT03134586 -NCT03134690 -NCT03134742 -NCT03134755 -NCT03134924 -NCT03134963 -NCT03135015 -NCT03135236 -NCT03135275 -NCT03135496 -NCT03135522 -NCT03135769 -NCT03135808 -NCT03135821 -NCT03135860 -NCT03135912 -NCT03135938 -NCT03135964 -NCT03136003 -NCT03136172 -NCT03136198 -NCT03136341 -NCT03136354 -NCT03136562 -NCT03136991 -NCT03137069 -NCT03137147 -NCT03137173 -NCT03137823 -NCT03138005 -NCT03138239 -NCT03138655 -NCT03139032 -NCT03139058 -NCT03139071 -NCT03139084 -NCT03139201 -NCT03139305 -NCT03139383 -NCT03139487 -NCT03139669 -NCT03139890 -NCT03139916 -NCT03139955 -NCT03140085 -NCT03140111 -NCT03140228 -NCT03140280 -NCT03140358 -NCT03140449 -NCT03140735 -NCT03140761 -NCT03140787 -NCT03140813 -NCT03140865 -NCT03140982 -NCT03141060 -NCT03141086 -NCT03141216 -NCT03141268 -NCT03141320 -NCT03141359 -NCT03141372 -NCT03141697 -NCT03141775 -NCT03141814 -NCT03141853 -NCT03141944 -NCT03142035 -NCT03142152 -NCT03142178 -NCT03142217 -NCT03142295 -NCT03142451 -NCT03142867 -NCT03142984 -NCT03142997 -NCT03143036 -NCT03143062 -NCT03143088 -NCT03143413 -NCT03143465 -NCT03143478 -NCT03143517 -NCT03143569 -NCT03143608 -NCT03143699 -NCT03143868 -NCT03143920 -NCT03144037 -NCT03144063 -NCT03144362 -NCT03144440 -NCT03144791 -NCT03144804 -NCT03144817 -NCT03145051 -NCT03145064 -NCT03145285 -NCT03145467 -NCT03145480 -NCT03145831 -NCT03145883 -NCT03145922 -NCT03145935 -NCT03146000 -NCT03146065 -NCT03146091 -NCT03146156 -NCT03146260 -NCT03146299 -NCT03146312 -NCT03146351 -NCT03146741 -NCT03146884 -NCT03147027 -NCT03147105 -NCT03147118 -NCT03147443 -NCT03147495 -NCT03148002 -NCT03148015 -NCT03148041 -NCT03148158 -NCT03148262 -NCT03148691 -NCT03149042 -NCT03149250 -NCT03149289 -NCT03149302 -NCT03149380 -NCT03149393 -NCT03149692 -NCT03149965 -NCT03150108 -NCT03150212 -NCT03150225 -NCT03150433 -NCT03150446 -NCT03150524 -NCT03150745 -NCT03150927 -NCT03150992 -NCT03151200 -NCT03151356 -NCT03151967 -NCT03152019 -NCT03152136 -NCT03152188 -NCT03152305 -NCT03152383 -NCT03152474 -NCT03152487 -NCT03152578 -NCT03152656 -NCT03152851 -NCT03152877 -NCT03153267 -NCT03153293 -NCT03153371 -NCT03153449 -NCT03153501 -NCT03153514 -NCT03153527 -NCT03153553 -NCT03153670 -NCT03153813 -NCT03153826 -NCT03153852 -NCT03154034 -NCT03154099 -NCT03154164 -NCT03154255 -NCT03154268 -NCT03154307 -NCT03154437 -NCT03154489 -NCT03154515 -NCT03154593 -NCT03154606 -NCT03154619 -NCT03154762 -NCT03154814 -NCT03155217 -NCT03155282 -NCT03155373 -NCT03155529 -NCT03155620 -NCT03155737 -NCT03155750 -NCT03155867 -NCT03155958 -NCT03155984 -NCT03156062 -NCT03156465 -NCT03156517 -NCT03156673 -NCT03156777 -NCT03156829 -NCT03156842 -NCT03156946 -NCT03156959 -NCT03156998 -NCT03157011 -NCT03157050 -NCT03157271 -NCT03157518 -NCT03157544 -NCT03157596 -NCT03157726 -NCT03157739 -NCT03157752 -NCT03157882 -NCT03157986 -NCT03158090 -NCT03158116 -NCT03158207 -NCT03158246 -NCT03158259 -NCT03158441 -NCT03158467 -NCT03158493 -NCT03158571 -NCT03158727 -NCT03158805 -NCT03158818 -NCT03158831 -NCT03158857 -NCT03159091 -NCT03159104 -NCT03159351 -NCT03159377 -NCT03159702 -NCT03159754 -NCT03159767 -NCT03160313 -NCT03160443 -NCT03160469 -NCT03160612 -NCT03160638 -NCT03160716 -NCT03160807 -NCT03160833 -NCT03160898 -NCT03161080 -NCT03161106 -NCT03161314 -NCT03161327 -NCT03161353 -NCT03161470 -NCT03161587 -NCT03161782 -NCT03161834 -NCT03161964 -NCT03162068 -NCT03162094 -NCT03162172 -NCT03162263 -NCT03162328 -NCT03162341 -NCT03162458 -NCT03162536 -NCT03162731 -NCT03163095 -NCT03163134 -NCT03163290 -NCT03163329 -NCT03163342 -NCT03163355 -NCT03163394 -NCT03163719 -NCT03163758 -NCT03163797 -NCT03163849 -NCT03163875 -NCT03163888 -NCT03163901 -NCT03163979 -NCT03164044 -NCT03164070 -NCT03164083 -NCT03164122 -NCT03164291 -NCT03164382 -NCT03164720 -NCT03164928 -NCT03165214 -NCT03165253 -NCT03165266 -NCT03165370 -NCT03165604 -NCT03165812 -NCT03166046 -NCT03166072 -NCT03166202 -NCT03166215 -NCT03166254 -NCT03166280 -NCT03166345 -NCT03166410 -NCT03166449 -NCT03166670 -NCT03166735 -NCT03167008 -NCT03167047 -NCT03167112 -NCT03167151 -NCT03167255 -NCT03167320 -NCT03167463 -NCT03167476 -NCT03167567 -NCT03167593 -NCT03167632 -NCT03167671 -NCT03167710 -NCT03167749 -NCT03167918 -NCT03167970 -NCT03167983 -NCT03168178 -NCT03168321 -NCT03168334 -NCT03168386 -NCT03168529 -NCT03168620 -NCT03168646 -NCT03168854 -NCT03168997 -NCT03169114 -NCT03169257 -NCT03169309 -NCT03169322 -NCT03169361 -NCT03169621 -NCT03169634 -NCT03169699 -NCT03169751 -NCT03169829 -NCT03169855 -NCT03169907 -NCT03170076 -NCT03170388 -NCT03170557 -NCT03170622 -NCT03170687 -NCT03170752 -NCT03170765 -NCT03170804 -NCT03171012 -NCT03171168 -NCT03171272 -NCT03171285 -NCT03171324 -NCT03171467 -NCT03171610 -NCT03171857 -NCT03171870 -NCT03171987 -NCT03172052 -NCT03172117 -NCT03172130 -NCT03172195 -NCT03172208 -NCT03172312 -NCT03172390 -NCT03172507 -NCT03172585 -NCT03172663 -NCT03172767 -NCT03172988 -NCT03173118 -NCT03173144 -NCT03173222 -NCT03173235 -NCT03173378 -NCT03173560 -NCT03173638 -NCT03173690 -NCT03173742 -NCT03173989 -NCT03174028 -NCT03174080 -NCT03174145 -NCT03174171 -NCT03174509 -NCT03174626 -NCT03174743 -NCT03174782 -NCT03174795 -NCT03174834 -NCT03174873 -NCT03174938 -NCT03175055 -NCT03175107 -NCT03175211 -NCT03175367 -NCT03175393 -NCT03175562 -NCT03175731 -NCT03175874 -NCT03176121 -NCT03176199 -NCT03176589 -NCT03176602 -NCT03176732 -NCT03176927 -NCT03176992 -NCT03177122 -NCT03177213 -NCT03177278 -NCT03177434 -NCT03177447 -NCT03177642 -NCT03177902 -NCT03177967 -NCT03178071 -NCT03178136 -NCT03178162 -NCT03178214 -NCT03178682 -NCT03178760 -NCT03178799 -NCT03179072 -NCT03179111 -NCT03179124 -NCT03179150 -NCT03179228 -NCT03179267 -NCT03179280 -NCT03179306 -NCT03179332 -NCT03179735 -NCT03179891 -NCT03180034 -NCT03180138 -NCT03180164 -NCT03180190 -NCT03180203 -NCT03180268 -NCT03180424 -NCT03180463 -NCT03180515 -NCT03180554 -NCT03180671 -NCT03180684 -NCT03180801 -NCT03180892 -NCT03181100 -NCT03181204 -NCT03181230 -NCT03181243 -NCT03181282 -NCT03181464 -NCT03181503 -NCT03181893 -NCT03181932 -NCT03182036 -NCT03182049 -NCT03182127 -NCT03182296 -NCT03182309 -NCT03182439 -NCT03182452 -NCT03182686 -NCT03182699 -NCT03182907 -NCT03182920 -NCT03182933 -NCT03183063 -NCT03183089 -NCT03183141 -NCT03183167 -NCT03183414 -NCT03183479 -NCT03183518 -NCT03183531 -NCT03183687 -NCT03183752 -NCT03183778 -NCT03183986 -NCT03184233 -NCT03184259 -NCT03184324 -NCT03184337 -NCT03184389 -NCT03184415 -NCT03184688 -NCT03184714 -NCT03184727 -NCT03184740 -NCT03184818 -NCT03184948 -NCT03185013 -NCT03185130 -NCT03185208 -NCT03185325 -NCT03185364 -NCT03185390 -NCT03185533 -NCT03185637 -NCT03185702 -NCT03185806 -NCT03185884 -NCT03185897 -NCT03185988 -NCT03186014 -NCT03186079 -NCT03186105 -NCT03186222 -NCT03186248 -NCT03186313 -NCT03186586 -NCT03186664 -NCT03186729 -NCT03186742 -NCT03186976 -NCT03187080 -NCT03187119 -NCT03187132 -NCT03187236 -NCT03187340 -NCT03187561 -NCT03187600 -NCT03187626 -NCT03187652 -NCT03187743 -NCT03187795 -NCT03187847 -NCT03187925 -NCT03188107 -NCT03188276 -NCT03188380 -NCT03188393 -NCT03188406 -NCT03188588 -NCT03188627 -NCT03188666 -NCT03188692 -NCT03188757 -NCT03188900 -NCT03189004 -NCT03189108 -NCT03189160 -NCT03189316 -NCT03189459 -NCT03190148 -NCT03190421 -NCT03190525 -NCT03190551 -NCT03190577 -NCT03190642 -NCT03190759 -NCT03190980 -NCT03191006 -NCT03191097 -NCT03191201 -NCT03191448 -NCT03191552 -NCT03191604 -NCT03191734 -NCT03191799 -NCT03191864 -NCT03191903 -NCT03191942 -NCT03191955 -NCT03192072 -NCT03192098 -NCT03192358 -NCT03192527 -NCT03192540 -NCT03192683 -NCT03192709 -NCT03192722 -NCT03192813 -NCT03192891 -NCT03192969 -NCT03193047 -NCT03193073 -NCT03193541 -NCT03193658 -NCT03193892 -NCT03193918 -NCT03193944 -NCT03193996 -NCT03194568 -NCT03194737 -NCT03194750 -NCT03194802 -NCT03195166 -NCT03195179 -NCT03195218 -NCT03195322 -NCT03195413 -NCT03195517 -NCT03195673 -NCT03195725 -NCT03195751 -NCT03195855 -NCT03195907 -NCT03195959 -NCT03196011 -NCT03196115 -NCT03196180 -NCT03196453 -NCT03196492 -NCT03196661 -NCT03197025 -NCT03197194 -NCT03197259 -NCT03197272 -NCT03197766 -NCT03197831 -NCT03197883 -NCT03197909 -NCT03197922 -NCT03198026 -NCT03198065 -NCT03198104 -NCT03198156 -NCT03198260 -NCT03198351 -NCT03198390 -NCT03198403 -NCT03198598 -NCT03198611 -NCT03198650 -NCT03198676 -NCT03198728 -NCT03198793 -NCT03198897 -NCT03198962 -NCT03199027 -NCT03199053 -NCT03199352 -NCT03199495 -NCT03199716 -NCT03199768 -NCT03199833 -NCT03199898 -NCT03199911 -NCT03200002 -NCT03200093 -NCT03200171 -NCT03200262 -NCT03200496 -NCT03200600 -NCT03200769 -NCT03200834 -NCT03200977 -NCT03200990 -NCT03201042 -NCT03201159 -NCT03201302 -NCT03201367 -NCT03201458 -NCT03201471 -NCT03201588 -NCT03201614 -NCT03201666 -NCT03201679 -NCT03201835 -NCT03202212 -NCT03202251 -NCT03202316 -NCT03202407 -NCT03202537 -NCT03202771 -NCT03202875 -NCT03202966 -NCT03203070 -NCT03203356 -NCT03203382 -NCT03203421 -NCT03203460 -NCT03203564 -NCT03203655 -NCT03203681 -NCT03203694 -NCT03203759 -NCT03203850 -NCT03203863 -NCT03204292 -NCT03204409 -NCT03204500 -NCT03204539 -NCT03204747 -NCT03204760 -NCT03204799 -NCT03205163 -NCT03205202 -NCT03205228 -NCT03205306 -NCT03205579 -NCT03205995 -NCT03206125 -NCT03206281 -NCT03206346 -NCT03206359 -NCT03206489 -NCT03206554 -NCT03206567 -NCT03206658 -NCT03206671 -NCT03206827 -NCT03206905 -NCT03207100 -NCT03207139 -NCT03207230 -NCT03207763 -NCT03207828 -NCT03207997 -NCT03208309 -NCT03208361 -NCT03208582 -NCT03208842 -NCT03208894 -NCT03208933 -NCT03209050 -NCT03209063 -NCT03209089 -NCT03209141 -NCT03209258 -NCT03209375 -NCT03209453 -NCT03209466 -NCT03209583 -NCT03209700 -NCT03209752 -NCT03209895 -NCT03210038 -NCT03210168 -NCT03210207 -NCT03210545 -NCT03210558 -NCT03210714 -NCT03210987 -NCT03211026 -NCT03211091 -NCT03211351 -NCT03211403 -NCT03211416 -NCT03211507 -NCT03211572 -NCT03211585 -NCT03211624 -NCT03211858 -NCT03211897 -NCT03212014 -NCT03212079 -NCT03212248 -NCT03212261 -NCT03212521 -NCT03212547 -NCT03212560 -NCT03212573 -NCT03212872 -NCT03212950 -NCT03213132 -NCT03213262 -NCT03213535 -NCT03213626 -NCT03213678 -NCT03213717 -NCT03213769 -NCT03213834 -NCT03214185 -NCT03214263 -NCT03214393 -NCT03214419 -NCT03214666 -NCT03214692 -NCT03214809 -NCT03214926 -NCT03215056 -NCT03215147 -NCT03215186 -NCT03215407 -NCT03215901 -NCT03215914 -NCT03216031 -NCT03216057 -NCT03216174 -NCT03216239 -NCT03216330 -NCT03216369 -NCT03216395 -NCT03216772 -NCT03216889 -NCT03216941 -NCT03217032 -NCT03217227 -NCT03217409 -NCT03217513 -NCT03217617 -NCT03217656 -NCT03217799 -NCT03217812 -NCT03217851 -NCT03217890 -NCT03217903 -NCT03217968 -NCT03218007 -NCT03218059 -NCT03218384 -NCT03218410 -NCT03218618 -NCT03218696 -NCT03218709 -NCT03218787 -NCT03218826 -NCT03218839 -NCT03218917 -NCT03218982 -NCT03218995 -NCT03219021 -NCT03219359 -NCT03219476 -NCT03219515 -NCT03219684 -NCT03219736 -NCT03220022 -NCT03220113 -NCT03220256 -NCT03220282 -NCT03220321 -NCT03220451 -NCT03220958 -NCT03221088 -NCT03221205 -NCT03221322 -NCT03221335 -NCT03221387 -NCT03221790 -NCT03221803 -NCT03221907 -NCT03221933 -NCT03222011 -NCT03222193 -NCT03222297 -NCT03222323 -NCT03222414 -NCT03222635 -NCT03222648 -NCT03222713 -NCT03222739 -NCT03222817 -NCT03222830 -NCT03222882 -NCT03222895 -NCT03222947 -NCT03223025 -NCT03223116 -NCT03223181 -NCT03223441 -NCT03223454 -NCT03223467 -NCT03223519 -NCT03223558 -NCT03223610 -NCT03223649 -NCT03223688 -NCT03223805 -NCT03223870 -NCT03223935 -NCT03224000 -NCT03224039 -NCT03224104 -NCT03224143 -NCT03224416 -NCT03224598 -NCT03224806 -NCT03224949 -NCT03224988 -NCT03225040 -NCT03225053 -NCT03225131 -NCT03225157 -NCT03225625 -NCT03225885 -NCT03225911 -NCT03226054 -NCT03226145 -NCT03226171 -NCT03226301 -NCT03226444 -NCT03226522 -NCT03226535 -NCT03226691 -NCT03226717 -NCT03226860 -NCT03227120 -NCT03227211 -NCT03227263 -NCT03227497 -NCT03227848 -NCT03227939 -NCT03228056 -NCT03228225 -NCT03228407 -NCT03228459 -NCT03228485 -NCT03228641 -NCT03228680 -NCT03228719 -NCT03228758 -NCT03228862 -NCT03228992 -NCT03229057 -NCT03229174 -NCT03229395 -NCT03229408 -NCT03229421 -NCT03229460 -NCT03229512 -NCT03229603 -NCT03229668 -NCT03229798 -NCT03229850 -NCT03229993 -NCT03230331 -NCT03230396 -NCT03230474 -NCT03230500 -NCT03230513 -NCT03230539 -NCT03230825 -NCT03230994 -NCT03231072 -NCT03231137 -NCT03231163 -NCT03231176 -NCT03231423 -NCT03231644 -NCT03231657 -NCT03231683 -NCT03231865 -NCT03231878 -NCT03232177 -NCT03232515 -NCT03232567 -NCT03232684 -NCT03232710 -NCT03232775 -NCT03232801 -NCT03233009 -NCT03233035 -NCT03233048 -NCT03233126 -NCT03233204 -NCT03233295 -NCT03233321 -NCT03233386 -NCT03233399 -NCT03233854 -NCT03234049 -NCT03234114 -NCT03234218 -NCT03234296 -NCT03234309 -NCT03234361 -NCT03234556 -NCT03234569 -NCT03234621 -NCT03234634 -NCT03234764 -NCT03234855 -NCT03234946 -NCT03235076 -NCT03235141 -NCT03235245 -NCT03235271 -NCT03235349 -NCT03235466 -NCT03235570 -NCT03235596 -NCT03235713 -NCT03235908 -NCT03235947 -NCT03236103 -NCT03236155 -NCT03236181 -NCT03236311 -NCT03236467 -NCT03236571 -NCT03236662 -NCT03236792 -NCT03236831 -NCT03236909 -NCT03236961 -NCT03236974 -NCT03236987 -NCT03237156 -NCT03237182 -NCT03237208 -NCT03237221 -NCT03237299 -NCT03237312 -NCT03237533 -NCT03237611 -NCT03237663 -NCT03237702 -NCT03237715 -NCT03237780 -NCT03237962 -NCT03238014 -NCT03238053 -NCT03238092 -NCT03238105 -NCT03238235 -NCT03238274 -NCT03238339 -NCT03238365 -NCT03238391 -NCT03238443 -NCT03238495 -NCT03238534 -NCT03238638 -NCT03238742 -NCT03238807 -NCT03238989 -NCT03239041 -NCT03239262 -NCT03239535 -NCT03239613 -NCT03239626 -NCT03239652 -NCT03239730 -NCT03239782 -NCT03239925 -NCT03239951 -NCT03240146 -NCT03240224 -NCT03240640 -NCT03240731 -NCT03240900 -NCT03240926 -NCT03241420 -NCT03241680 -NCT03241823 -NCT03241940 -NCT03242226 -NCT03242421 -NCT03242499 -NCT03242525 -NCT03242629 -NCT03242642 -NCT03243097 -NCT03243188 -NCT03243240 -NCT03243305 -NCT03243565 -NCT03243695 -NCT03243721 -NCT03243773 -NCT03243825 -NCT03243955 -NCT03244137 -NCT03244280 -NCT03244345 -NCT03244553 -NCT03244670 -NCT03244696 -NCT03244709 -NCT03244735 -NCT03244969 -NCT03245073 -NCT03245294 -NCT03245385 -NCT03245463 -NCT03245476 -NCT03245554 -NCT03245645 -NCT03245827 -NCT03245944 -NCT03245957 -NCT03246009 -NCT03246230 -NCT03246412 -NCT03246464 -NCT03246542 -NCT03246711 -NCT03246802 -NCT03246841 -NCT03246945 -NCT03246958 -NCT03247231 -NCT03247413 -NCT03247478 -NCT03247686 -NCT03247738 -NCT03247764 -NCT03247829 -NCT03247933 -NCT03247946 -NCT03247998 -NCT03248219 -NCT03248713 -NCT03248765 -NCT03248973 -NCT03249480 -NCT03249766 -NCT03249844 -NCT03250065 -NCT03250091 -NCT03250338 -NCT03250689 -NCT03250702 -NCT03250884 -NCT03250910 -NCT03251066 -NCT03251183 -NCT03251469 -NCT03251495 -NCT03251547 -NCT03251560 -NCT03251586 -NCT03251638 -NCT03251677 -NCT03252028 -NCT03252067 -NCT03252106 -NCT03252353 -NCT03252392 -NCT03252509 -NCT03252548 -NCT03252561 -NCT03252600 -NCT03252899 -NCT03252912 -NCT03252925 -NCT03253172 -NCT03253211 -NCT03253276 -NCT03253367 -NCT03253653 -NCT03253705 -NCT03253744 -NCT03253861 -NCT03253965 -NCT03253991 -NCT03254160 -NCT03254212 -NCT03254407 -NCT03254615 -NCT03254940 -NCT03255018 -NCT03255031 -NCT03255057 -NCT03255161 -NCT03255369 -NCT03255421 -NCT03255460 -NCT03255473 -NCT03255603 -NCT03255642 -NCT03255720 -NCT03255733 -NCT03255915 -NCT03256292 -NCT03256305 -NCT03256383 -NCT03256396 -NCT03256604 -NCT03256708 -NCT03256825 -NCT03256877 -NCT03257111 -NCT03257137 -NCT03257319 -NCT03257410 -NCT03257462 -NCT03257553 -NCT03257566 -NCT03257644 -NCT03257657 -NCT03257696 -NCT03257735 -NCT03257761 -NCT03257800 -NCT03257930 -NCT03258008 -NCT03258229 -NCT03258658 -NCT03258684 -NCT03258710 -NCT03258736 -NCT03258944 -NCT03259022 -NCT03259048 -NCT03259061 -NCT03259087 -NCT03259152 -NCT03259165 -NCT03259178 -NCT03259282 -NCT03259438 -NCT03259607 -NCT03259880 -NCT03260062 -NCT03260088 -NCT03260140 -NCT03260231 -NCT03260673 -NCT03260868 -NCT03260881 -NCT03261245 -NCT03261297 -NCT03261648 -NCT03261713 -NCT03261778 -NCT03262207 -NCT03262246 -NCT03262259 -NCT03262610 -NCT03262623 -NCT03262753 -NCT03262792 -NCT03262805 -NCT03263130 -NCT03263195 -NCT03263273 -NCT03263299 -NCT03263351 -NCT03263403 -NCT03263585 -NCT03263611 -NCT03263715 -NCT03263923 -NCT03264040 -NCT03264131 -NCT03264170 -NCT03264352 -NCT03264482 -NCT03264599 -NCT03264612 -NCT03264781 -NCT03264885 -NCT03264989 -NCT03265080 -NCT03265132 -NCT03265301 -NCT03265392 -NCT03265652 -NCT03265730 -NCT03265860 -NCT03265925 -NCT03266003 -NCT03266068 -NCT03266419 -NCT03266432 -NCT03266471 -NCT03266731 -NCT03266770 -NCT03266913 -NCT03267017 -NCT03267069 -NCT03267082 -NCT03267108 -NCT03267147 -NCT03267251 -NCT03267303 -NCT03267329 -NCT03267381 -NCT03267433 -NCT03267602 -NCT03267628 -NCT03267680 -NCT03267888 -NCT03268200 -NCT03268317 -NCT03268343 -NCT03268603 -NCT03268629 -NCT03268681 -NCT03268785 -NCT03268824 -NCT03269149 -NCT03269201 -NCT03269292 -NCT03269318 -NCT03269435 -NCT03269604 -NCT03269630 -NCT03269812 -NCT03269877 -NCT03269903 -NCT03269981 -NCT03270059 -NCT03270085 -NCT03270137 -NCT03270215 -NCT03270241 -NCT03270384 -NCT03270488 -NCT03270553 -NCT03270657 -NCT03270722 -NCT03270982 -NCT03271021 -NCT03271138 -NCT03271203 -NCT03271294 -NCT03271385 -NCT03271476 -NCT03271489 -NCT03271567 -NCT03271606 -NCT03271671 -NCT03271723 -NCT03271762 -NCT03271814 -NCT03271892 -NCT03271905 -NCT03271918 -NCT03271957 -NCT03271970 -NCT03272087 -NCT03272217 -NCT03272334 -NCT03272373 -NCT03272386 -NCT03272399 -NCT03272503 -NCT03272568 -NCT03272932 -NCT03272997 -NCT03273348 -NCT03273465 -NCT03273621 -NCT03273634 -NCT03273998 -NCT03274063 -NCT03274232 -NCT03274349 -NCT03274388 -NCT03274544 -NCT03274726 -NCT03274830 -NCT03274960 -NCT03274973 -NCT03275090 -NCT03275181 -NCT03275272 -NCT03275519 -NCT03275792 -NCT03275844 -NCT03276195 -NCT03276234 -NCT03276247 -NCT03276507 -NCT03276585 -NCT03276624 -NCT03276650 -NCT03276715 -NCT03276728 -NCT03276845 -NCT03276871 -NCT03276923 -NCT03276962 -NCT03276975 -NCT03277066 -NCT03277170 -NCT03277261 -NCT03277287 -NCT03277690 -NCT03277859 -NCT03277963 -NCT03278158 -NCT03278210 -NCT03278561 -NCT03278574 -NCT03278652 -NCT03278808 -NCT03279120 -NCT03279367 -NCT03279432 -NCT03279588 -NCT03279770 -NCT03279939 -NCT03279952 -NCT03279991 -NCT03280056 -NCT03280121 -NCT03280147 -NCT03280355 -NCT03280368 -NCT03280381 -NCT03280420 -NCT03280433 -NCT03280446 -NCT03280511 -NCT03280693 -NCT03280784 -NCT03280849 -NCT03280862 -NCT03281018 -NCT03281031 -NCT03281070 -NCT03281109 -NCT03281122 -NCT03281187 -NCT03281421 -NCT03281551 -NCT03281837 -NCT03281902 -NCT03281915 -NCT03281954 -NCT03282006 -NCT03282058 -NCT03282084 -NCT03282149 -NCT03282474 -NCT03282487 -NCT03282682 -NCT03283007 -NCT03283059 -NCT03283176 -NCT03283306 -NCT03283319 -NCT03283371 -NCT03283813 -NCT03283852 -NCT03284489 -NCT03284554 -NCT03284658 -NCT03284710 -NCT03284775 -NCT03284866 -NCT03285620 -NCT03285724 -NCT03285919 -NCT03285945 -NCT03286088 -NCT03286153 -NCT03286166 -NCT03286517 -NCT03286634 -NCT03286842 -NCT03286855 -NCT03287024 -NCT03287141 -NCT03287193 -NCT03287206 -NCT03287557 -NCT03287635 -NCT03287648 -NCT03287778 -NCT03287791 -NCT03287817 -NCT03287921 -NCT03287999 -NCT03288012 -NCT03288103 -NCT03288116 -NCT03288259 -NCT03288337 -NCT03288454 -NCT03288545 -NCT03288636 -NCT03288714 -NCT03288831 -NCT03288922 -NCT03289039 -NCT03289117 -NCT03289195 -NCT03289221 -NCT03289351 -NCT03289390 -NCT03289416 -NCT03289585 -NCT03289702 -NCT03289832 -NCT03290027 -NCT03290066 -NCT03290183 -NCT03290209 -NCT03290235 -NCT03290313 -NCT03290456 -NCT03290586 -NCT03290703 -NCT03290755 -NCT03290807 -NCT03291015 -NCT03291028 -NCT03291210 -NCT03291327 -NCT03291522 -NCT03291535 -NCT03291600 -NCT03291652 -NCT03291678 -NCT03291912 -NCT03291925 -NCT03291938 -NCT03291964 -NCT03291977 -NCT03292055 -NCT03292146 -NCT03292211 -NCT03292237 -NCT03292302 -NCT03292497 -NCT03292588 -NCT03292640 -NCT03292835 -NCT03292978 -NCT03293108 -NCT03293173 -NCT03293186 -NCT03293212 -NCT03293238 -NCT03293251 -NCT03293368 -NCT03293394 -NCT03293524 -NCT03293615 -NCT03293628 -NCT03293667 -NCT03293693 -NCT03293992 -NCT03294044 -NCT03294148 -NCT03294187 -NCT03294239 -NCT03294252 -NCT03294317 -NCT03294408 -NCT03294421 -NCT03294460 -NCT03294525 -NCT03294538 -NCT03294603 -NCT03294733 -NCT03294902 -NCT03295162 -NCT03295175 -NCT03295279 -NCT03295383 -NCT03295526 -NCT03295643 -NCT03295721 -NCT03295747 -NCT03296098 -NCT03296241 -NCT03296267 -NCT03296319 -NCT03296358 -NCT03296501 -NCT03296514 -NCT03296527 -NCT03296579 -NCT03296709 -NCT03296787 -NCT03296878 -NCT03296930 -NCT03296982 -NCT03297177 -NCT03297307 -NCT03297632 -NCT03297671 -NCT03297892 -NCT03297957 -NCT03298373 -NCT03298399 -NCT03298594 -NCT03298607 -NCT03298685 -NCT03298867 -NCT03299036 -NCT03299114 -NCT03299283 -NCT03299322 -NCT03299335 -NCT03299439 -NCT03299673 -NCT03299829 -NCT03299894 -NCT03299985 -NCT03299998 -NCT03300193 -NCT03300284 -NCT03300362 -NCT03300375 -NCT03300674 -NCT03300687 -NCT03300908 -NCT03301155 -NCT03301168 -NCT03301233 -NCT03301272 -NCT03301350 -NCT03301675 -NCT03301701 -NCT03301753 -NCT03302104 -NCT03302403 -NCT03302442 -NCT03302468 -NCT03302559 -NCT03302598 -NCT03302676 -NCT03302910 -NCT03302962 -NCT03303053 -NCT03303157 -NCT03303183 -NCT03303287 -NCT03303313 -NCT03303352 -NCT03303430 -NCT03303482 -NCT03303521 -NCT03303586 -NCT03303937 -NCT03303963 -NCT03304054 -NCT03304184 -NCT03304314 -NCT03304366 -NCT03304379 -NCT03304405 -NCT03304730 -NCT03304795 -NCT03304847 -NCT03304925 -NCT03305185 -NCT03305276 -NCT03305549 -NCT03305588 -NCT03305653 -NCT03305705 -NCT03305783 -NCT03305809 -NCT03306004 -NCT03306030 -NCT03306290 -NCT03306329 -NCT03306381 -NCT03306485 -NCT03306498 -NCT03306641 -NCT03306771 -NCT03306784 -NCT03306823 -NCT03306849 -NCT03307005 -NCT03307070 -NCT03307096 -NCT03307122 -NCT03307265 -NCT03307317 -NCT03307330 -NCT03307382 -NCT03307512 -NCT03307876 -NCT03307993 -NCT03308006 -NCT03308084 -NCT03308149 -NCT03308266 -NCT03308370 -NCT03308435 -NCT03308487 -NCT03308526 -NCT03309293 -NCT03309319 -NCT03309358 -NCT03309410 -NCT03309488 -NCT03309501 -NCT03309852 -NCT03309891 -NCT03310021 -NCT03310164 -NCT03310424 -NCT03310463 -NCT03310645 -NCT03310671 -NCT03311035 -NCT03311204 -NCT03311334 -NCT03311685 -NCT03311932 -NCT03312062 -NCT03312153 -NCT03312244 -NCT03312257 -NCT03312309 -NCT03312478 -NCT03312530 -NCT03312543 -NCT03312634 -NCT03312686 -NCT03312777 -NCT03312907 -NCT03313011 -NCT03313089 -NCT03313102 -NCT03313128 -NCT03313154 -NCT03313271 -NCT03313284 -NCT03313362 -NCT03313531 -NCT03313635 -NCT03313700 -NCT03313856 -NCT03314025 -NCT03314090 -NCT03314116 -NCT03314259 -NCT03314415 -NCT03314441 -NCT03314480 -NCT03314584 -NCT03314792 -NCT03314844 -NCT03314987 -NCT03315026 -NCT03315078 -NCT03315130 -NCT03315286 -NCT03315403 -NCT03315455 -NCT03315481 -NCT03315533 -NCT03315871 -NCT03315975 -NCT03316053 -NCT03316469 -NCT03316521 -NCT03316547 -NCT03316742 -NCT03316898 -NCT03317158 -NCT03317210 -NCT03317262 -NCT03317327 -NCT03317366 -NCT03317405 -NCT03317574 -NCT03317795 -NCT03317808 -NCT03317977 -NCT03318029 -NCT03318198 -NCT03318237 -NCT03318315 -NCT03318328 -NCT03318341 -NCT03318510 -NCT03318523 -NCT03318614 -NCT03318783 -NCT03318952 -NCT03318991 -NCT03319030 -NCT03319043 -NCT03319121 -NCT03319186 -NCT03319251 -NCT03319420 -NCT03319472 -NCT03319602 -NCT03319810 -NCT03319823 -NCT03319862 -NCT03319901 -NCT03319966 -NCT03319992 -NCT03320083 -NCT03320213 -NCT03320460 -NCT03320486 -NCT03320538 -NCT03320577 -NCT03320590 -NCT03320733 -NCT03320798 -NCT03320811 -NCT03320928 -NCT03320941 -NCT03321019 -NCT03321097 -NCT03321240 -NCT03321487 -NCT03321513 -NCT03321526 -NCT03321734 -NCT03321825 -NCT03321903 -NCT03322215 -NCT03322345 -NCT03322514 -NCT03322644 -NCT03322670 -NCT03322696 -NCT03322761 -NCT03322800 -NCT03322865 -NCT03322904 -NCT03322930 -NCT03323047 -NCT03323060 -NCT03323151 -NCT03323229 -NCT03323346 -NCT03323476 -NCT03323528 -NCT03323658 -NCT03323775 -NCT03323788 -NCT03323801 -NCT03323827 -NCT03324009 -NCT03324061 -NCT03324074 -NCT03324165 -NCT03324295 -NCT03324308 -NCT03324373 -NCT03324503 -NCT03324542 -NCT03324737 -NCT03324880 -NCT03325023 -NCT03325088 -NCT03325192 -NCT03325205 -NCT03325244 -NCT03325296 -NCT03325309 -NCT03325348 -NCT03325374 -NCT03325387 -NCT03325647 -NCT03325790 -NCT03325803 -NCT03325829 -NCT03325868 -NCT03325933 -NCT03326024 -NCT03326154 -NCT03326232 -NCT03326258 -NCT03326583 -NCT03326622 -NCT03326843 -NCT03326895 -NCT03327233 -NCT03327428 -NCT03327636 -NCT03327688 -NCT03327701 -NCT03327740 -NCT03327779 -NCT03327857 -NCT03327974 -NCT03327987 -NCT03328000 -NCT03328065 -NCT03328325 -NCT03328338 -NCT03328403 -NCT03328429 -NCT03328676 -NCT03328936 -NCT03328975 -NCT03329027 -NCT03329040 -NCT03329235 -NCT03329261 -NCT03329274 -NCT03329300 -NCT03329365 -NCT03329885 -NCT03329963 -NCT03330015 -NCT03330158 -NCT03330275 -NCT03330288 -NCT03330353 -NCT03330379 -NCT03330457 -NCT03330522 -NCT03330600 -NCT03331042 -NCT03331276 -NCT03331315 -NCT03331445 -NCT03331510 -NCT03331627 -NCT03332303 -NCT03332355 -NCT03332368 -NCT03332472 -NCT03332745 -NCT03332927 -NCT03332992 -NCT03333070 -NCT03333109 -NCT03333330 -NCT03333837 -NCT03333863 -NCT03334188 -NCT03334227 -NCT03334292 -NCT03334539 -NCT03334682 -NCT03334695 -NCT03334708 -NCT03334864 -NCT03334955 -NCT03335033 -NCT03335098 -NCT03335124 -NCT03335202 -NCT03335254 -NCT03335319 -NCT03335332 -NCT03335384 -NCT03335527 -NCT03335839 -NCT03335865 -NCT03335878 -NCT03335904 -NCT03335969 -NCT03336021 -NCT03336034 -NCT03336047 -NCT03336203 -NCT03336476 -NCT03336528 -NCT03337035 -NCT03337048 -NCT03337061 -NCT03337139 -NCT03337165 -NCT03337256 -NCT03337360 -NCT03337607 -NCT03337789 -NCT03337932 -NCT03338218 -NCT03338348 -NCT03338400 -NCT03338426 -NCT03338465 -NCT03338530 -NCT03338621 -NCT03338764 -NCT03338868 -NCT03338920 -NCT03339076 -NCT03339102 -NCT03339115 -NCT03339128 -NCT03339362 -NCT03339544 -NCT03339635 -NCT03339726 -NCT03339908 -NCT03339973 -NCT03340012 -NCT03340116 -NCT03340155 -NCT03340259 -NCT03340298 -NCT03340415 -NCT03340584 -NCT03340740 -NCT03340896 -NCT03340948 -NCT03340961 -NCT03340974 -NCT03341039 -NCT03341104 -NCT03341143 -NCT03341208 -NCT03341221 -NCT03341338 -NCT03341468 -NCT03341533 -NCT03341546 -NCT03341650 -NCT03341689 -NCT03341754 -NCT03341871 -NCT03341910 -NCT03341936 -NCT03341988 -NCT03342001 -NCT03342235 -NCT03342261 -NCT03342274 -NCT03342365 -NCT03342430 -NCT03342664 -NCT03342716 -NCT03342755 -NCT03342794 -NCT03342859 -NCT03343002 -NCT03343327 -NCT03343405 -NCT03343470 -NCT03343925 -NCT03344029 -NCT03344276 -NCT03344406 -NCT03344497 -NCT03344588 -NCT03344744 -NCT03344835 -NCT03344913 -NCT03344965 -NCT03344991 -NCT03345108 -NCT03345134 -NCT03345186 -NCT03345251 -NCT03345277 -NCT03345407 -NCT03345420 -NCT03345472 -NCT03345498 -NCT03345641 -NCT03345654 -NCT03345693 -NCT03345784 -NCT03345875 -NCT03345940 -NCT03346057 -NCT03346135 -NCT03346421 -NCT03346603 -NCT03346733 -NCT03346759 -NCT03346954 -NCT03346967 -NCT03347149 -NCT03347253 -NCT03347344 -NCT03347461 -NCT03347513 -NCT03347591 -NCT03347630 -NCT03347656 -NCT03347721 -NCT03347799 -NCT03347838 -NCT03347903 -NCT03347929 -NCT03348007 -NCT03348046 -NCT03348059 -NCT03348124 -NCT03348189 -NCT03348215 -NCT03348280 -NCT03348761 -NCT03348917 -NCT03349008 -NCT03349021 -NCT03349034 -NCT03349060 -NCT03349177 -NCT03349320 -NCT03349411 -NCT03349437 -NCT03349840 -NCT03349879 -NCT03349892 -NCT03350048 -NCT03350087 -NCT03350139 -NCT03350217 -NCT03350243 -NCT03350425 -NCT03350503 -NCT03350529 -NCT03350594 -NCT03350620 -NCT03350646 -NCT03350659 -NCT03350685 -NCT03350906 -NCT03350919 -NCT03351127 -NCT03351335 -NCT03351517 -NCT03351725 -NCT03351855 -NCT03351907 -NCT03352089 -NCT03352115 -NCT03352154 -NCT03352271 -NCT03352323 -NCT03352349 -NCT03352362 -NCT03352375 -NCT03352739 -NCT03352804 -NCT03352895 -NCT03352908 -NCT03352921 -NCT03353064 -NCT03353129 -NCT03353194 -NCT03353233 -NCT03353246 -NCT03353506 -NCT03353558 -NCT03353571 -NCT03353610 -NCT03353948 -NCT03354000 -NCT03354026 -NCT03354039 -NCT03354065 -NCT03354169 -NCT03354299 -NCT03354351 -NCT03354455 -NCT03354533 -NCT03354572 -NCT03354598 -NCT03354611 -NCT03354689 -NCT03354832 -NCT03355014 -NCT03355196 -NCT03355248 -NCT03355261 -NCT03355339 -NCT03355378 -NCT03355612 -NCT03355742 -NCT03355937 -NCT03356301 -NCT03356405 -NCT03356522 -NCT03356548 -NCT03356665 -NCT03356769 -NCT03356795 -NCT03356925 -NCT03356938 -NCT03357029 -NCT03357042 -NCT03357237 -NCT03357419 -NCT03357484 -NCT03357614 -NCT03357679 -NCT03357770 -NCT03357809 -NCT03358017 -NCT03358199 -NCT03358407 -NCT03358576 -NCT03358732 -NCT03358862 -NCT03358979 -NCT03359070 -NCT03359083 -NCT03359161 -NCT03359252 -NCT03359265 -NCT03359278 -NCT03359434 -NCT03359447 -NCT03359525 -NCT03359603 -NCT03359668 -NCT03359941 -NCT03360110 -NCT03360149 -NCT03360162 -NCT03360227 -NCT03360292 -NCT03360318 -NCT03360331 -NCT03360344 -NCT03360383 -NCT03360500 -NCT03360591 -NCT03360890 -NCT03360916 -NCT03360929 -NCT03361111 -NCT03361137 -NCT03361345 -NCT03361423 -NCT03361709 -NCT03361982 -NCT03362060 -NCT03362138 -NCT03362255 -NCT03362268 -NCT03362281 -NCT03362437 -NCT03362619 -NCT03362632 -NCT03362762 -NCT03362827 -NCT03362970 -NCT03363126 -NCT03363191 -NCT03363451 -NCT03363490 -NCT03363529 -NCT03363620 -NCT03363633 -NCT03363698 -NCT03364166 -NCT03364270 -NCT03364803 -NCT03364881 -NCT03364998 -NCT03365336 -NCT03365414 -NCT03365687 -NCT03365778 -NCT03366012 -NCT03366077 -NCT03366103 -NCT03366142 -NCT03366181 -NCT03366207 -NCT03366454 -NCT03366493 -NCT03366558 -NCT03366649 -NCT03366740 -NCT03366779 -NCT03366805 -NCT03367091 -NCT03367156 -NCT03367338 -NCT03367429 -NCT03367572 -NCT03367715 -NCT03367728 -NCT03367793 -NCT03367845 -NCT03368066 -NCT03368079 -NCT03368534 -NCT03368664 -NCT03368729 -NCT03368742 -NCT03368898 -NCT03368924 -NCT03368963 -NCT03368976 -NCT03369119 -NCT03369132 -NCT03369353 -NCT03369509 -NCT03369522 -NCT03369587 -NCT03369600 -NCT03369652 -NCT03369730 -NCT03369782 -NCT03369847 -NCT03370055 -NCT03370172 -NCT03370185 -NCT03370406 -NCT03370718 -NCT03370744 -NCT03370835 -NCT03370913 -NCT03370926 -NCT03370965 -NCT03371277 -NCT03371407 -NCT03371433 -NCT03371446 -NCT03371563 -NCT03371589 -NCT03372096 -NCT03372122 -NCT03372148 -NCT03372200 -NCT03372421 -NCT03372499 -NCT03372551 -NCT03372642 -NCT03372655 -NCT03372772 -NCT03373019 -NCT03373110 -NCT03373123 -NCT03373266 -NCT03373383 -NCT03373422 -NCT03373552 -NCT03373708 -NCT03373760 -NCT03373773 -NCT03373942 -NCT03374059 -NCT03374319 -NCT03374475 -NCT03374501 -NCT03374683 -NCT03374865 -NCT03374982 -NCT03375112 -NCT03375164 -NCT03375320 -NCT03375359 -NCT03375502 -NCT03375593 -NCT03375632 -NCT03375814 -NCT03376087 -NCT03376412 -NCT03376451 -NCT03376568 -NCT03376594 -NCT03376919 -NCT03376945 -NCT03377062 -NCT03377166 -NCT03377192 -NCT03377218 -NCT03377296 -NCT03377309 -NCT03377426 -NCT03377439 -NCT03377465 -NCT03377530 -NCT03377569 -NCT03377660 -NCT03377764 -NCT03377894 -NCT03378167 -NCT03378193 -NCT03378258 -NCT03378362 -NCT03378375 -NCT03378466 -NCT03378479 -NCT03378648 -NCT03378934 -NCT03379012 -NCT03379025 -NCT03379168 -NCT03379194 -NCT03379363 -NCT03379415 -NCT03379493 -NCT03379571 -NCT03379597 -NCT03379675 -NCT03379792 -NCT03379805 -NCT03379935 -NCT03379948 -NCT03379961 -NCT03379974 -NCT03380052 -NCT03380182 -NCT03380299 -NCT03380364 -NCT03380572 -NCT03380793 -NCT03380845 -NCT03380897 -NCT03381092 -NCT03381287 -NCT03381300 -NCT03381339 -NCT03381534 -NCT03381560 -NCT03381573 -NCT03381612 -NCT03381677 -NCT03381755 -NCT03381820 -NCT03381846 -NCT03382106 -NCT03382145 -NCT03382249 -NCT03382392 -NCT03382418 -NCT03382574 -NCT03382964 -NCT03383016 -NCT03383614 -NCT03383705 -NCT03383757 -NCT03384043 -NCT03384056 -NCT03384082 -NCT03384095 -NCT03384251 -NCT03384407 -NCT03384628 -NCT03384784 -NCT03385070 -NCT03385096 -NCT03385187 -NCT03385343 -NCT03385408 -NCT03385551 -NCT03385616 -NCT03385668 -NCT03385798 -NCT03385889 -NCT03385915 -NCT03385941 -NCT03386292 -NCT03386409 -NCT03386552 -NCT03386578 -NCT03386643 -NCT03386773 -NCT03387046 -NCT03387085 -NCT03387228 -NCT03387241 -NCT03387280 -NCT03387306 -NCT03387501 -NCT03387670 -NCT03387774 -NCT03387969 -NCT03388021 -NCT03388073 -NCT03388125 -NCT03388268 -NCT03388385 -NCT03388606 -NCT03388632 -NCT03388645 -NCT03388671 -NCT03388905 -NCT03388970 -NCT03389061 -NCT03389204 -NCT03389347 -NCT03389464 -NCT03389516 -NCT03389542 -NCT03389568 -NCT03389776 -NCT03390166 -NCT03390231 -NCT03390348 -NCT03390608 -NCT03390634 -NCT03390894 -NCT03390972 -NCT03391011 -NCT03391154 -NCT03391271 -NCT03391310 -NCT03391427 -NCT03391466 -NCT03391531 -NCT03391557 -NCT03391895 -NCT03391934 -NCT03391947 -NCT03392064 -NCT03392129 -NCT03392220 -NCT03392363 -NCT03392402 -NCT03392519 -NCT03392571 -NCT03392935 -NCT03392974 -NCT03393065 -NCT03393078 -NCT03393091 -NCT03393208 -NCT03393286 -NCT03393546 -NCT03393715 -NCT03393754 -NCT03393975 -NCT03394014 -NCT03394027 -NCT03394040 -NCT03394157 -NCT03394300 -NCT03394313 -NCT03394443 -NCT03394547 -NCT03394651 -NCT03394664 -NCT03394703 -NCT03394807 -NCT03394898 -NCT03394924 -NCT03394963 -NCT03394989 -NCT03395028 -NCT03395067 -NCT03395119 -NCT03395132 -NCT03395249 -NCT03395340 -NCT03395444 -NCT03395457 -NCT03395496 -NCT03395522 -NCT03395626 -NCT03395704 -NCT03395717 -NCT03395756 -NCT03396042 -NCT03396107 -NCT03396289 -NCT03396341 -NCT03396562 -NCT03396666 -NCT03396757 -NCT03396770 -NCT03396822 -NCT03396913 -NCT03396991 -NCT03397017 -NCT03397056 -NCT03397160 -NCT03397472 -NCT03397511 -NCT03397693 -NCT03397758 -NCT03397784 -NCT03397849 -NCT03398070 -NCT03398252 -NCT03398538 -NCT03398603 -NCT03398629 -NCT03398668 -NCT03398798 -NCT03398811 -NCT03398915 -NCT03398993 -NCT03399214 -NCT03399331 -NCT03399383 -NCT03399396 -NCT03399474 -NCT03399955 -NCT03400124 -NCT03400202 -NCT03400280 -NCT03400631 -NCT03400644 -NCT03400826 -NCT03400904 -NCT03400930 -NCT03400956 -NCT03401008 -NCT03401047 -NCT03401060 -NCT03401125 -NCT03401177 -NCT03401229 -NCT03401281 -NCT03401593 -NCT03401671 -NCT03401710 -NCT03401879 -NCT03401918 -NCT03402100 -NCT03402269 -NCT03402412 -NCT03402594 -NCT03402620 -NCT03402633 -NCT03402828 -NCT03402854 -NCT03402893 -NCT03403062 -NCT03403101 -NCT03403205 -NCT03403322 -NCT03403387 -NCT03403400 -NCT03403413 -NCT03403530 -NCT03403855 -NCT03403920 -NCT03404128 -NCT03404297 -NCT03404310 -NCT03404336 -NCT03404414 -NCT03404804 -NCT03404843 -NCT03404934 -NCT03405025 -NCT03405090 -NCT03405155 -NCT03405285 -NCT03405337 -NCT03405363 -NCT03405597 -NCT03405649 -NCT03405701 -NCT03405922 -NCT03406130 -NCT03406195 -NCT03406260 -NCT03406325 -NCT03406416 -NCT03407053 -NCT03407066 -NCT03407430 -NCT03407534 -NCT03407612 -NCT03407651 -NCT03407716 -NCT03407807 -NCT03407859 -NCT03407989 -NCT03408080 -NCT03408093 -NCT03408119 -NCT03408158 -NCT03408184 -NCT03408197 -NCT03408223 -NCT03408236 -NCT03408613 -NCT03408639 -NCT03408808 -NCT03408938 -NCT03409042 -NCT03409055 -NCT03409120 -NCT03409146 -NCT03409380 -NCT03409406 -NCT03409471 -NCT03409510 -NCT03409679 -NCT03409705 -NCT03409822 -NCT03409861 -NCT03409874 -NCT03409913 -NCT03410004 -NCT03410069 -NCT03410095 -NCT03410134 -NCT03410160 -NCT03410290 -NCT03410407 -NCT03410498 -NCT03410628 -NCT03410745 -NCT03410862 -NCT03410888 -NCT03411226 -NCT03411252 -NCT03411278 -NCT03411538 -NCT03411577 -NCT03411629 -NCT03411642 -NCT03411811 -NCT03411850 -NCT03411863 -NCT03411928 -NCT03412019 -NCT03412045 -NCT03412201 -NCT03412292 -NCT03412357 -NCT03412474 -NCT03412591 -NCT03412643 -NCT03412669 -NCT03412708 -NCT03412929 -NCT03413085 -NCT03413202 -NCT03413254 -NCT03413462 -NCT03413514 -NCT03413553 -NCT03413631 -NCT03413683 -NCT03413826 -NCT03413839 -NCT03413891 -NCT03414021 -NCT03414411 -NCT03414424 -NCT03414593 -NCT03414697 -NCT03414710 -NCT03414749 -NCT03414853 -NCT03414905 -NCT03414957 -NCT03415165 -NCT03415204 -NCT03415269 -NCT03415321 -NCT03415334 -NCT03415347 -NCT03415477 -NCT03415776 -NCT03415880 -NCT03415945 -NCT03416010 -NCT03416062 -NCT03416101 -NCT03416205 -NCT03416283 -NCT03416309 -NCT03416452 -NCT03416647 -NCT03416686 -NCT03416725 -NCT03416738 -NCT03416751 -NCT03416842 -NCT03416998 -NCT03417063 -NCT03417102 -NCT03417284 -NCT03417297 -NCT03417414 -NCT03417596 -NCT03417648 -NCT03417817 -NCT03417869 -NCT03417973 -NCT03418116 -NCT03418337 -NCT03418441 -NCT03418584 -NCT03418610 -NCT03418805 -NCT03418857 -NCT03418883 -NCT03418935 -NCT03418961 -NCT03418987 -NCT03419000 -NCT03419130 -NCT03419234 -NCT03419338 -NCT03419364 -NCT03419650 -NCT03419754 -NCT03419767 -NCT03419858 -NCT03420144 -NCT03420157 -NCT03420274 -NCT03420300 -NCT03420339 -NCT03420482 -NCT03420651 -NCT03420885 -NCT03420911 -NCT03420963 -NCT03421028 -NCT03421288 -NCT03421340 -NCT03421834 -NCT03421899 -NCT03421925 -NCT03421951 -NCT03422211 -NCT03422315 -NCT03422380 -NCT03422796 -NCT03422809 -NCT03423082 -NCT03423277 -NCT03423303 -NCT03423472 -NCT03423498 -NCT03423511 -NCT03423537 -NCT03423550 -NCT03423771 -NCT03423784 -NCT03423836 -NCT03423966 -NCT03423979 -NCT03424018 -NCT03424044 -NCT03424278 -NCT03424499 -NCT03424733 -NCT03424772 -NCT03424980 -NCT03425214 -NCT03425383 -NCT03425578 -NCT03425617 -NCT03425851 -NCT03425864 -NCT03426189 -NCT03426241 -NCT03426319 -NCT03426332 -NCT03426384 -NCT03426475 -NCT03426800 -NCT03426839 -NCT03426904 -NCT03426943 -NCT03426982 -NCT03426995 -NCT03427099 -NCT03427125 -NCT03427216 -NCT03427229 -NCT03427411 -NCT03427710 -NCT03427853 -NCT03427944 -NCT03427957 -NCT03427970 -NCT03427983 -NCT03428048 -NCT03428113 -NCT03428347 -NCT03428672 -NCT03428841 -NCT03428854 -NCT03428919 -NCT03429062 -NCT03429127 -NCT03429400 -NCT03429426 -NCT03429478 -NCT03429517 -NCT03429582 -NCT03429764 -NCT03429777 -NCT03429894 -NCT03430011 -NCT03430648 -NCT03430804 -NCT03430856 -NCT03430869 -NCT03431103 -NCT03431272 -NCT03431285 -NCT03431415 -NCT03431584 -NCT03431727 -NCT03432026 -NCT03432052 -NCT03432143 -NCT03432221 -NCT03432299 -NCT03432416 -NCT03432507 -NCT03432520 -NCT03432533 -NCT03432559 -NCT03432611 -NCT03432741 -NCT03432806 -NCT03432962 -NCT03433196 -NCT03433274 -NCT03433287 -NCT03433313 -NCT03433404 -NCT03433417 -NCT03433430 -NCT03433716 -NCT03433807 -NCT03433950 -NCT03434067 -NCT03434080 -NCT03434093 -NCT03434262 -NCT03434470 -NCT03434730 -NCT03434951 -NCT03435016 -NCT03435159 -NCT03435224 -NCT03435237 -NCT03435315 -NCT03435367 -NCT03435432 -NCT03435653 -NCT03435692 -NCT03435731 -NCT03435913 -NCT03435926 -NCT03435939 -NCT03435952 -NCT03436069 -NCT03436082 -NCT03436108 -NCT03436147 -NCT03436186 -NCT03436225 -NCT03436251 -NCT03436420 -NCT03436550 -NCT03436576 -NCT03436654 -NCT03436732 -NCT03436758 -NCT03436836 -NCT03436914 -NCT03436953 -NCT03437135 -NCT03437239 -NCT03437252 -NCT03437486 -NCT03437733 -NCT03437837 -NCT03438266 -NCT03438734 -NCT03438760 -NCT03438786 -NCT03439137 -NCT03439163 -NCT03439202 -NCT03439254 -NCT03439449 -NCT03439592 -NCT03439670 -NCT03439709 -NCT03439787 -NCT03439982 -NCT03440034 -NCT03440164 -NCT03440346 -NCT03440359 -NCT03440411 -NCT03440489 -NCT03440515 -NCT03440632 -NCT03440697 -NCT03440827 -NCT03440957 -NCT03441191 -NCT03441347 -NCT03441373 -NCT03441516 -NCT03442049 -NCT03442062 -NCT03442296 -NCT03442400 -NCT03442764 -NCT03442777 -NCT03443011 -NCT03443115 -NCT03443414 -NCT03443505 -NCT03443544 -NCT03443596 -NCT03443765 -NCT03443843 -NCT03443973 -NCT03444181 -NCT03444259 -NCT03444272 -NCT03444298 -NCT03444324 -NCT03444376 -NCT03444428 -NCT03444545 -NCT03444584 -NCT03444623 -NCT03444688 -NCT03444831 -NCT03444870 -NCT03444883 -NCT03445013 -NCT03445195 -NCT03445403 -NCT03445481 -NCT03445611 -NCT03445624 -NCT03445962 -NCT03446001 -NCT03446118 -NCT03446261 -NCT03446339 -NCT03446352 -NCT03446534 -NCT03446612 -NCT03446625 -NCT03446768 -NCT03446807 -NCT03446989 -NCT03447015 -NCT03447093 -NCT03447340 -NCT03447639 -NCT03447782 -NCT03448029 -NCT03448055 -NCT03448276 -NCT03448341 -NCT03448471 -NCT03448484 -NCT03448510 -NCT03448536 -NCT03448640 -NCT03448770 -NCT03448939 -NCT03448952 -NCT03449082 -NCT03449095 -NCT03449134 -NCT03449147 -NCT03449225 -NCT03449316 -NCT03449368 -NCT03449433 -NCT03449459 -NCT03449498 -NCT03449511 -NCT03449524 -NCT03449628 -NCT03449641 -NCT03449979 -NCT03450135 -NCT03450213 -NCT03450252 -NCT03450369 -NCT03450473 -NCT03450538 -NCT03450564 -NCT03450603 -NCT03450616 -NCT03450642 -NCT03450668 -NCT03450681 -NCT03450811 -NCT03450824 -NCT03450850 -NCT03450889 -NCT03451045 -NCT03451266 -NCT03451292 -NCT03451435 -NCT03451513 -NCT03451734 -NCT03451773 -NCT03451942 -NCT03451968 -NCT03452111 -NCT03452267 -NCT03452280 -NCT03452384 -NCT03452462 -NCT03452696 -NCT03452735 -NCT03452774 -NCT03452787 -NCT03453216 -NCT03453255 -NCT03453307 -NCT03453346 -NCT03453580 -NCT03453593 -NCT03453632 -NCT03453645 -NCT03453697 -NCT03453853 -NCT03453918 -NCT03453931 -NCT03453944 -NCT03453970 -NCT03454009 -NCT03454035 -NCT03454087 -NCT03454165 -NCT03454360 -NCT03454464 -NCT03454477 -NCT03454516 -NCT03454542 -NCT03455036 -NCT03455153 -NCT03455205 -NCT03455712 -NCT03455790 -NCT03455907 -NCT03455998 -NCT03456024 -NCT03456349 -NCT03456479 -NCT03456531 -NCT03456544 -NCT03456557 -NCT03456622 -NCT03456752 -NCT03456882 -NCT03456895 -NCT03456934 -NCT03457025 -NCT03457116 -NCT03457168 -NCT03457233 -NCT03457246 -NCT03457363 -NCT03457571 -NCT03457610 -NCT03457753 -NCT03457805 -NCT03457818 -NCT03457857 -NCT03457909 -NCT03457961 -NCT03458000 -NCT03458026 -NCT03458247 -NCT03458559 -NCT03458598 -NCT03458702 -NCT03458780 -NCT03458806 -NCT03458871 -NCT03459248 -NCT03459261 -NCT03459326 -NCT03459443 -NCT03459482 -NCT03459547 -NCT03459599 -NCT03459651 -NCT03460080 -NCT03460171 -NCT03460236 -NCT03460470 -NCT03460613 -NCT03460743 -NCT03460795 -NCT03460873 -NCT03460912 -NCT03461068 -NCT03461159 -NCT03461237 -NCT03461250 -NCT03461393 -NCT03461458 -NCT03461536 -NCT03461601 -NCT03461640 -NCT03461835 -NCT03462056 -NCT03462160 -NCT03462329 -NCT03462459 -NCT03462589 -NCT03462602 -NCT03462641 -NCT03462810 -NCT03463200 -NCT03463213 -NCT03463226 -NCT03463694 -NCT03463720 -NCT03463759 -NCT03463811 -NCT03463824 -NCT03463850 -NCT03463889 -NCT03464253 -NCT03464279 -NCT03464487 -NCT03464578 -NCT03464656 -NCT03464682 -NCT03464695 -NCT03464851 -NCT03465020 -NCT03465111 -NCT03465150 -NCT03465176 -NCT03465267 -NCT03465293 -NCT03465423 -NCT03465748 -NCT03465761 -NCT03465826 -NCT03466099 -NCT03466398 -NCT03466450 -NCT03466502 -NCT03466684 -NCT03466710 -NCT03466736 -NCT03466918 -NCT03467165 -NCT03467191 -NCT03467347 -NCT03467438 -NCT03467477 -NCT03467685 -NCT03467828 -NCT03467880 -NCT03468205 -NCT03468387 -NCT03468452 -NCT03468465 -NCT03468491 -NCT03468660 -NCT03468725 -NCT03468933 -NCT03468959 -NCT03468985 -NCT03469011 -NCT03469024 -NCT03469037 -NCT03469050 -NCT03469219 -NCT03469544 -NCT03469583 -NCT03469609 -NCT03469895 -NCT03470090 -NCT03470155 -NCT03470220 -NCT03470246 -NCT03470259 -NCT03470298 -NCT03470545 -NCT03470662 -NCT03470740 -NCT03470766 -NCT03471065 -NCT03471156 -NCT03471312 -NCT03471364 -NCT03471455 -NCT03471494 -NCT03471650 -NCT03471728 -NCT03471767 -NCT03471832 -NCT03471936 -NCT03472014 -NCT03472092 -NCT03472183 -NCT03472196 -NCT03472235 -NCT03472378 -NCT03472599 -NCT03472625 -NCT03472677 -NCT03472716 -NCT03472807 -NCT03472859 -NCT03472872 -NCT03472924 -NCT03473119 -NCT03473236 -NCT03473938 -NCT03474016 -NCT03474068 -NCT03474081 -NCT03474159 -NCT03474198 -NCT03474237 -NCT03474263 -NCT03474367 -NCT03474406 -NCT03474575 -NCT03474601 -NCT03474744 -NCT03475199 -NCT03475355 -NCT03475368 -NCT03475524 -NCT03475589 -NCT03475823 -NCT03475888 -NCT03476044 -NCT03476083 -NCT03476135 -NCT03476187 -NCT03476317 -NCT03476447 -NCT03476486 -NCT03476564 -NCT03476616 -NCT03476941 -NCT03477188 -NCT03477201 -NCT03477240 -NCT03477253 -NCT03477396 -NCT03477422 -NCT03477500 -NCT03477552 -NCT03477760 -NCT03477890 -NCT03477929 -NCT03477942 -NCT03478033 -NCT03478072 -NCT03478163 -NCT03478176 -NCT03478189 -NCT03478371 -NCT03478397 -NCT03478423 -NCT03478826 -NCT03478852 -NCT03478865 -NCT03478878 -NCT03478891 -NCT03478982 -NCT03479008 -NCT03479190 -NCT03479268 -NCT03479437 -NCT03479463 -NCT03479476 -NCT03479528 -NCT03479554 -NCT03479567 -NCT03479749 -NCT03479788 -NCT03479827 -NCT03479905 -NCT03479983 -NCT03480022 -NCT03480243 -NCT03480490 -NCT03480503 -NCT03480841 -NCT03480893 -NCT03480997 -NCT03481010 -NCT03481491 -NCT03481504 -NCT03481517 -NCT03481829 -NCT03481946 -NCT03482050 -NCT03482128 -NCT03482180 -NCT03482310 -NCT03482375 -NCT03482479 -NCT03482570 -NCT03482609 -NCT03482713 -NCT03482895 -NCT03482921 -NCT03482960 -NCT03483090 -NCT03483194 -NCT03483298 -NCT03483337 -NCT03483519 -NCT03483844 -NCT03484026 -NCT03484039 -NCT03484078 -NCT03484130 -NCT03484143 -NCT03484611 -NCT03484702 -NCT03484832 -NCT03485079 -NCT03485118 -NCT03485170 -NCT03485183 -NCT03485495 -NCT03485625 -NCT03485768 -NCT03485911 -NCT03486262 -NCT03486366 -NCT03486587 -NCT03486626 -NCT03486730 -NCT03486899 -NCT03486912 -NCT03487120 -NCT03487237 -NCT03487250 -NCT03487276 -NCT03487705 -NCT03487731 -NCT03487757 -NCT03487809 -NCT03487965 -NCT03488134 -NCT03488147 -NCT03488212 -NCT03488485 -NCT03488589 -NCT03488628 -NCT03488797 -NCT03489031 -NCT03489044 -NCT03489265 -NCT03489278 -NCT03489317 -NCT03489356 -NCT03489681 -NCT03489824 -NCT03489876 -NCT03489993 -NCT03490045 -NCT03490071 -NCT03490084 -NCT03490123 -NCT03490214 -NCT03490279 -NCT03490370 -NCT03490409 -NCT03490448 -NCT03490474 -NCT03490487 -NCT03490500 -NCT03490513 -NCT03490539 -NCT03490578 -NCT03490773 -NCT03490799 -NCT03491111 -NCT03491280 -NCT03491410 -NCT03491436 -NCT03491462 -NCT03491657 -NCT03491696 -NCT03491904 -NCT03492450 -NCT03492463 -NCT03492515 -NCT03492762 -NCT03492853 -NCT03493204 -NCT03493360 -NCT03493438 -NCT03493477 -NCT03493529 -NCT03493542 -NCT03493594 -NCT03493633 -NCT03493802 -NCT03493880 -NCT03493945 -NCT03493971 -NCT03494023 -NCT03494283 -NCT03494452 -NCT03494517 -NCT03494621 -NCT03494673 -NCT03494751 -NCT03494764 -NCT03494881 -NCT03495050 -NCT03495219 -NCT03495258 -NCT03495271 -NCT03495388 -NCT03495440 -NCT03495479 -NCT03495492 -NCT03495570 -NCT03495661 -NCT03495830 -NCT03496220 -NCT03496233 -NCT03496545 -NCT03496558 -NCT03496753 -NCT03496792 -NCT03496805 -NCT03496818 -NCT03496831 -NCT03496961 -NCT03497039 -NCT03497117 -NCT03497208 -NCT03497442 -NCT03497455 -NCT03497468 -NCT03497520 -NCT03497663 -NCT03497728 -NCT03497806 -NCT03497845 -NCT03497871 -NCT03497897 -NCT03498001 -NCT03498053 -NCT03498417 -NCT03498664 -NCT03498742 -NCT03498794 -NCT03498976 -NCT03499119 -NCT03499210 -NCT03499301 -NCT03499353 -NCT03499418 -NCT03499496 -NCT03499522 -NCT03499561 -NCT03499613 -NCT03499665 -NCT03499756 -NCT03499795 -NCT03499964 -NCT03499990 -NCT03500016 -NCT03500263 -NCT03500328 -NCT03500367 -NCT03500588 -NCT03500666 -NCT03500692 -NCT03500770 -NCT03500861 -NCT03501407 -NCT03501420 -NCT03501680 -NCT03501758 -NCT03501771 -NCT03501901 -NCT03501966 -NCT03502135 -NCT03502213 -NCT03502265 -NCT03502330 -NCT03502421 -NCT03502473 -NCT03502655 -NCT03502720 -NCT03502746 -NCT03502993 -NCT03503032 -NCT03503123 -NCT03503175 -NCT03503240 -NCT03503305 -NCT03503344 -NCT03503474 -NCT03503487 -NCT03503500 -NCT03503513 -NCT03503539 -NCT03503617 -NCT03503721 -NCT03503734 -NCT03503955 -NCT03503994 -NCT03504046 -NCT03504150 -NCT03504202 -NCT03504280 -NCT03504293 -NCT03504345 -NCT03504475 -NCT03504618 -NCT03504787 -NCT03504878 -NCT03505021 -NCT03505151 -NCT03505203 -NCT03505216 -NCT03505411 -NCT03505606 -NCT03505645 -NCT03505775 -NCT03505827 -NCT03505879 -NCT03505983 -NCT03506009 -NCT03506048 -NCT03506217 -NCT03506230 -NCT03506256 -NCT03506295 -NCT03506321 -NCT03506334 -NCT03506425 -NCT03506438 -NCT03506607 -NCT03506906 -NCT03506919 -NCT03507218 -NCT03507257 -NCT03507322 -NCT03507374 -NCT03507400 -NCT03507452 -NCT03507530 -NCT03507569 -NCT03507673 -NCT03507699 -NCT03507829 -NCT03507959 -NCT03508024 -NCT03508037 -NCT03508076 -NCT03508115 -NCT03508232 -NCT03508284 -NCT03508440 -NCT03508479 -NCT03508518 -NCT03508622 -NCT03508817 -NCT03508869 -NCT03508947 -NCT03508986 -NCT03509103 -NCT03509350 -NCT03509532 -NCT03509662 -NCT03509675 -NCT03509805 -NCT03509974 -NCT03510156 -NCT03510312 -NCT03510351 -NCT03510442 -NCT03510455 -NCT03510507 -NCT03510546 -NCT03510559 -NCT03510923 -NCT03510936 -NCT03511053 -NCT03511326 -NCT03511417 -NCT03511625 -NCT03511716 -NCT03511846 -NCT03512106 -NCT03512158 -NCT03512171 -NCT03512262 -NCT03512275 -NCT03512288 -NCT03512340 -NCT03512366 -NCT03512951 -NCT03513055 -NCT03513094 -NCT03513120 -NCT03513354 -NCT03513367 -NCT03513458 -NCT03513471 -NCT03513484 -NCT03513549 -NCT03513679 -NCT03513731 -NCT03513744 -NCT03513861 -NCT03513887 -NCT03513900 -NCT03514017 -NCT03514069 -NCT03514082 -NCT03514108 -NCT03514173 -NCT03514277 -NCT03514459 -NCT03514667 -NCT03514979 -NCT03515044 -NCT03515070 -NCT03515187 -NCT03515278 -NCT03515603 -NCT03515746 -NCT03515759 -NCT03515772 -NCT03515863 -NCT03516149 -NCT03516188 -NCT03516240 -NCT03516487 -NCT03516526 -NCT03516747 -NCT03516773 -NCT03516929 -NCT03517072 -NCT03517111 -NCT03517150 -NCT03517319 -NCT03517371 -NCT03517423 -NCT03517514 -NCT03517579 -NCT03517670 -NCT03517722 -NCT03517982 -NCT03518034 -NCT03518099 -NCT03518203 -NCT03518281 -NCT03518294 -NCT03518424 -NCT03518775 -NCT03518918 -NCT03519360 -NCT03519425 -NCT03519464 -NCT03519490 -NCT03519516 -NCT03519581 -NCT03519607 -NCT03519646 -NCT03519737 -NCT03520140 -NCT03520166 -NCT03520322 -NCT03520348 -NCT03520439 -NCT03520517 -NCT03520530 -NCT03520647 -NCT03520660 -NCT03520673 -NCT03520712 -NCT03520790 -NCT03520855 -NCT03520998 -NCT03521011 -NCT03521167 -NCT03521271 -NCT03521479 -NCT03521518 -NCT03521557 -NCT03521583 -NCT03521648 -NCT03521739 -NCT03521817 -NCT03521869 -NCT03521921 -NCT03522207 -NCT03522233 -NCT03522441 -NCT03522493 -NCT03522506 -NCT03522766 -NCT03522831 -NCT03522909 -NCT03523065 -NCT03523104 -NCT03523247 -NCT03523273 -NCT03523286 -NCT03523520 -NCT03523728 -NCT03523741 -NCT03523845 -NCT03523897 -NCT03524001 -NCT03524040 -NCT03524066 -NCT03524118 -NCT03524222 -NCT03524235 -NCT03524287 -NCT03524300 -NCT03524378 -NCT03524573 -NCT03524677 -NCT03524755 -NCT03524781 -NCT03524807 -NCT03524872 -NCT03525392 -NCT03525431 -NCT03525522 -NCT03525535 -NCT03525691 -NCT03525717 -NCT03525808 -NCT03525925 -NCT03526016 -NCT03526211 -NCT03526250 -NCT03526536 -NCT03526588 -NCT03526731 -NCT03526874 -NCT03526913 -NCT03527277 -NCT03527498 -NCT03527563 -NCT03527589 -NCT03527706 -NCT03527810 -NCT03527836 -NCT03527966 -NCT03527992 -NCT03528070 -NCT03528161 -NCT03528226 -NCT03528265 -NCT03528304 -NCT03528343 -NCT03528369 -NCT03528382 -NCT03528538 -NCT03528616 -NCT03528642 -NCT03528746 -NCT03528785 -NCT03528824 -NCT03529071 -NCT03529188 -NCT03529318 -NCT03529370 -NCT03529461 -NCT03529474 -NCT03529513 -NCT03529565 -NCT03529591 -NCT03529630 -NCT03529708 -NCT03529747 -NCT03529786 -NCT03529955 -NCT03530033 -NCT03530124 -NCT03530241 -NCT03530423 -NCT03530514 -NCT03530553 -NCT03530592 -NCT03530787 -NCT03530917 -NCT03531008 -NCT03531034 -NCT03531138 -NCT03531372 -NCT03531502 -NCT03531619 -NCT03531645 -NCT03531775 -NCT03532074 -NCT03532165 -NCT03532230 -NCT03532269 -NCT03532282 -NCT03532347 -NCT03532451 -NCT03532516 -NCT03532620 -NCT03532750 -NCT03532802 -NCT03532932 -NCT03533010 -NCT03533257 -NCT03533270 -NCT03533322 -NCT03533504 -NCT03533569 -NCT03533582 -NCT03533647 -NCT03533686 -NCT03533699 -NCT03533764 -NCT03533985 -NCT03534024 -NCT03534245 -NCT03534323 -NCT03534505 -NCT03534557 -NCT03534739 -NCT03534804 -NCT03534934 -NCT03534986 -NCT03534999 -NCT03535129 -NCT03535272 -NCT03535415 -NCT03535636 -NCT03535675 -NCT03535688 -NCT03535909 -NCT03536078 -NCT03536104 -NCT03536533 -NCT03536572 -NCT03536936 -NCT03536962 -NCT03537001 -NCT03537092 -NCT03537378 -NCT03537443 -NCT03537495 -NCT03537534 -NCT03537573 -NCT03537625 -NCT03537768 -NCT03537807 -NCT03537989 -NCT03538041 -NCT03538327 -NCT03538574 -NCT03538587 -NCT03538834 -NCT03539094 -NCT03539302 -NCT03539471 -NCT03539588 -NCT03539614 -NCT03539627 -NCT03539861 -NCT03539952 -NCT03540160 -NCT03540368 -NCT03540706 -NCT03540823 -NCT03540862 -NCT03540953 -NCT03541278 -NCT03541304 -NCT03541330 -NCT03541395 -NCT03541421 -NCT03541538 -NCT03541551 -NCT03541629 -NCT03541733 -NCT03541902 -NCT03541941 -NCT03541967 -NCT03541980 -NCT03542240 -NCT03542318 -NCT03542370 -NCT03542474 -NCT03542539 -NCT03542838 -NCT03542877 -NCT03542916 -NCT03543046 -NCT03543085 -NCT03543345 -NCT03543410 -NCT03543436 -NCT03543501 -NCT03544086 -NCT03544216 -NCT03544502 -NCT03544671 -NCT03544840 -NCT03544918 -NCT03545048 -NCT03545113 -NCT03545204 -NCT03545230 -NCT03545529 -NCT03545815 -NCT03545945 -NCT03546660 -NCT03546686 -NCT03546816 -NCT03546842 -NCT03546959 -NCT03547011 -NCT03547024 -NCT03547050 -NCT03547206 -NCT03547232 -NCT03547323 -NCT03547336 -NCT03547453 -NCT03547492 -NCT03547596 -NCT03547661 -NCT03547687 -NCT03547895 -NCT03547960 -NCT03548103 -NCT03548168 -NCT03548181 -NCT03548246 -NCT03548285 -NCT03548415 -NCT03548688 -NCT03548740 -NCT03548753 -NCT03548831 -NCT03548896 -NCT03549052 -NCT03549117 -NCT03549130 -NCT03549273 -NCT03549286 -NCT03549377 -NCT03549390 -NCT03549559 -NCT03549689 -NCT03549715 -NCT03549728 -NCT03549949 -NCT03550014 -NCT03550027 -NCT03550040 -NCT03550157 -NCT03550183 -NCT03550287 -NCT03550313 -NCT03550365 -NCT03550586 -NCT03550690 -NCT03550716 -NCT03551015 -NCT03551379 -NCT03551600 -NCT03551717 -NCT03551821 -NCT03551847 -NCT03551977 -NCT03551990 -NCT03552016 -NCT03552055 -NCT03552068 -NCT03552081 -NCT03552120 -NCT03552861 -NCT03552874 -NCT03552887 -NCT03553381 -NCT03553576 -NCT03553654 -NCT03553693 -NCT03553706 -NCT03553849 -NCT03553862 -NCT03553888 -NCT03553966 -NCT03554018 -NCT03554200 -NCT03554265 -NCT03554447 -NCT03554785 -NCT03554954 -NCT03555188 -NCT03555396 -NCT03555474 -NCT03555500 -NCT03555734 -NCT03555877 -NCT03556020 -NCT03556475 -NCT03556527 -NCT03556657 -NCT03556709 -NCT03556917 -NCT03557216 -NCT03557268 -NCT03557463 -NCT03557528 -NCT03557788 -NCT03557840 -NCT03557879 -NCT03557905 -NCT03558165 -NCT03558204 -NCT03558230 -NCT03558542 -NCT03558841 -NCT03558919 -NCT03559023 -NCT03559244 -NCT03559348 -NCT03559374 -NCT03559439 -NCT03559478 -NCT03559556 -NCT03559894 -NCT03560050 -NCT03560089 -NCT03560102 -NCT03560154 -NCT03560167 -NCT03560180 -NCT03560349 -NCT03560622 -NCT03560635 -NCT03560648 -NCT03560661 -NCT03560869 -NCT03561051 -NCT03561090 -NCT03561168 -NCT03561181 -NCT03561207 -NCT03561428 -NCT03561441 -NCT03561623 -NCT03561688 -NCT03561727 -NCT03561753 -NCT03561779 -NCT03561805 -NCT03561844 -NCT03561883 -NCT03562039 -NCT03562143 -NCT03562182 -NCT03562195 -NCT03562403 -NCT03562429 -NCT03562663 -NCT03562715 -NCT03562741 -NCT03562975 -NCT03563001 -NCT03563066 -NCT03563196 -NCT03563261 -NCT03563300 -NCT03563313 -NCT03563365 -NCT03563599 -NCT03563625 -NCT03563677 -NCT03563690 -NCT03563703 -NCT03563898 -NCT03564119 -NCT03564379 -NCT03564418 -NCT03564535 -NCT03564730 -NCT03564808 -NCT03565068 -NCT03565146 -NCT03565198 -NCT03565341 -NCT03565354 -NCT03565393 -NCT03565471 -NCT03565536 -NCT03565822 -NCT03565835 -NCT03565926 -NCT03565965 -NCT03566316 -NCT03566433 -NCT03566563 -NCT03566745 -NCT03566784 -NCT03566862 -NCT03567265 -NCT03567343 -NCT03567369 -NCT03567395 -NCT03567460 -NCT03567499 -NCT03567785 -NCT03567837 -NCT03568019 -NCT03568032 -NCT03568123 -NCT03568370 -NCT03568682 -NCT03568747 -NCT03568773 -NCT03568825 -NCT03568851 -NCT03568942 -NCT03568968 -NCT03568994 -NCT03569007 -NCT03569046 -NCT03569228 -NCT03569254 -NCT03569306 -NCT03569384 -NCT03569397 -NCT03569527 -NCT03569540 -NCT03569631 -NCT03569787 -NCT03569800 -NCT03569826 -NCT03569943 -NCT03569969 -NCT03570021 -NCT03570138 -NCT03570177 -NCT03570190 -NCT03570307 -NCT03570359 -NCT03570398 -NCT03570775 -NCT03570905 -NCT03571139 -NCT03571191 -NCT03571737 -NCT03571828 -NCT03571867 -NCT03571997 -NCT03572088 -NCT03572296 -NCT03572348 -NCT03572452 -NCT03572504 -NCT03572556 -NCT03572569 -NCT03572634 -NCT03572647 -NCT03572712 -NCT03572738 -NCT03572803 -NCT03572855 -NCT03572959 -NCT03572998 -NCT03573141 -NCT03573271 -NCT03573284 -NCT03573362 -NCT03573531 -NCT03573635 -NCT03573765 -NCT03573921 -NCT03573947 -NCT03574038 -NCT03574051 -NCT03574207 -NCT03574298 -NCT03574610 -NCT03574636 -NCT03574792 -NCT03574805 -NCT03574831 -NCT03574922 -NCT03575104 -NCT03575143 -NCT03575195 -NCT03575221 -NCT03575247 -NCT03575312 -NCT03575351 -NCT03575377 -NCT03575390 -NCT03575507 -NCT03575871 -NCT03576183 -NCT03576430 -NCT03576456 -NCT03576534 -NCT03576755 -NCT03576768 -NCT03576794 -NCT03576820 -NCT03576833 -NCT03577184 -NCT03577236 -NCT03577262 -NCT03577613 -NCT03577795 -NCT03577873 -NCT03577925 -NCT03578042 -NCT03578263 -NCT03578289 -NCT03578445 -NCT03578679 -NCT03578705 -NCT03578952 -NCT03578991 -NCT03579147 -NCT03579303 -NCT03579368 -NCT03579485 -NCT03579550 -NCT03579576 -NCT03579654 -NCT03579966 -NCT03580044 -NCT03580135 -NCT03580252 -NCT03580434 -NCT03580525 -NCT03580577 -NCT03580655 -NCT03580681 -NCT03580928 -NCT03580941 -NCT03580967 -NCT03581201 -NCT03581253 -NCT03581279 -NCT03581292 -NCT03581344 -NCT03581370 -NCT03581422 -NCT03581435 -NCT03581565 -NCT03581591 -NCT03581630 -NCT03581682 -NCT03581695 -NCT03581838 -NCT03582059 -NCT03582111 -NCT03582176 -NCT03582319 -NCT03582462 -NCT03582566 -NCT03582670 -NCT03582683 -NCT03582722 -NCT03582891 -NCT03582969 -NCT03583164 -NCT03583242 -NCT03583294 -NCT03583320 -NCT03583489 -NCT03583541 -NCT03583567 -NCT03583606 -NCT03583697 -NCT03583879 -NCT03583905 -NCT03583931 -NCT03583957 -NCT03584048 -NCT03584269 -NCT03584360 -NCT03584425 -NCT03584438 -NCT03584776 -NCT03584802 -NCT03584815 -NCT03584919 -NCT03585114 -NCT03585257 -NCT03585426 -NCT03585569 -NCT03585673 -NCT03585712 -NCT03585933 -NCT03585972 -NCT03586089 -NCT03586167 -NCT03586206 -NCT03586427 -NCT03586544 -NCT03586687 -NCT03586700 -NCT03586778 -NCT03586804 -NCT03586908 -NCT03586986 -NCT03587012 -NCT03587116 -NCT03587168 -NCT03587233 -NCT03587246 -NCT03587402 -NCT03587714 -NCT03587740 -NCT03588065 -NCT03588182 -NCT03588208 -NCT03588234 -NCT03588247 -NCT03588286 -NCT03588299 -NCT03588325 -NCT03588364 -NCT03588533 -NCT03588676 -NCT03588689 -NCT03588832 -NCT03588845 -NCT03588949 -NCT03589014 -NCT03589053 -NCT03589196 -NCT03589300 -NCT03589430 -NCT03589443 -NCT03589573 -NCT03589612 -NCT03589716 -NCT03589768 -NCT03589820 -NCT03589833 -NCT03590080 -NCT03590145 -NCT03590197 -NCT03590249 -NCT03590353 -NCT03590366 -NCT03590418 -NCT03590457 -NCT03590509 -NCT03590626 -NCT03590665 -NCT03590743 -NCT03590899 -NCT03590912 -NCT03591263 -NCT03591380 -NCT03591419 -NCT03591497 -NCT03591523 -NCT03591562 -NCT03591575 -NCT03591952 -NCT03591978 -NCT03592043 -NCT03592082 -NCT03592212 -NCT03592316 -NCT03592342 -NCT03592381 -NCT03592719 -NCT03592810 -NCT03592849 -NCT03593057 -NCT03593447 -NCT03593512 -NCT03593551 -NCT03593798 -NCT03593902 -NCT03593993 -NCT03594058 -NCT03594292 -NCT03594383 -NCT03594409 -NCT03594487 -NCT03594669 -NCT03594799 -NCT03594916 -NCT03595150 -NCT03595189 -NCT03595436 -NCT03595462 -NCT03595553 -NCT03595566 -NCT03595579 -NCT03595618 -NCT03595735 -NCT03595813 -NCT03595852 -NCT03595982 -NCT03596320 -NCT03596372 -NCT03596411 -NCT03596437 -NCT03596476 -NCT03596541 -NCT03596554 -NCT03596567 -NCT03596619 -NCT03596684 -NCT03596736 -NCT03596814 -NCT03596827 -NCT03597022 -NCT03597061 -NCT03597100 -NCT03597347 -NCT03597360 -NCT03597373 -NCT03597451 -NCT03597620 -NCT03597737 -NCT03597763 -NCT03597802 -NCT03598010 -NCT03598088 -NCT03598270 -NCT03598387 -NCT03598491 -NCT03598647 -NCT03598842 -NCT03599011 -NCT03599180 -NCT03599193 -NCT03599258 -NCT03599323 -NCT03599453 -NCT03599648 -NCT03599700 -NCT03599804 -NCT03599921 -NCT03600051 -NCT03600064 -NCT03600207 -NCT03600324 -NCT03600363 -NCT03600454 -NCT03600597 -NCT03600701 -NCT03600714 -NCT03600766 -NCT03600805 -NCT03600818 -NCT03600974 -NCT03601039 -NCT03601208 -NCT03601247 -NCT03601260 -NCT03601273 -NCT03601325 -NCT03601533 -NCT03601832 -NCT03602027 -NCT03602079 -NCT03602313 -NCT03602326 -NCT03602534 -NCT03602612 -NCT03602729 -NCT03602976 -NCT03603015 -NCT03603067 -NCT03603171 -NCT03603197 -NCT03603275 -NCT03603314 -NCT03603327 -NCT03603405 -NCT03603418 -NCT03603444 -NCT03603483 -NCT03603522 -NCT03603587 -NCT03603691 -NCT03603821 -NCT03603899 -NCT03604042 -NCT03604094 -NCT03604198 -NCT03604250 -NCT03604276 -NCT03604289 -NCT03604315 -NCT03604497 -NCT03604692 -NCT03604848 -NCT03604978 -NCT03605069 -NCT03605173 -NCT03605329 -NCT03605355 -NCT03605368 -NCT03605459 -NCT03605511 -NCT03605563 -NCT03605745 -NCT03605979 -NCT03606031 -NCT03606057 -NCT03606135 -NCT03606330 -NCT03606395 -NCT03606408 -NCT03606486 -NCT03606642 -NCT03607162 -NCT03607292 -NCT03607357 -NCT03607396 -NCT03607474 -NCT03607487 -NCT03607929 -NCT03608215 -NCT03608228 -NCT03608293 -NCT03608423 -NCT03608527 -NCT03608566 -NCT03608670 -NCT03608748 -NCT03608761 -NCT03608787 -NCT03608943 -NCT03609073 -NCT03609099 -NCT03609255 -NCT03609476 -NCT03609541 -NCT03609554 -NCT03609580 -NCT03609593 -NCT03609684 -NCT03609931 -NCT03609944 -NCT03610100 -NCT03610178 -NCT03610243 -NCT03610256 -NCT03610308 -NCT03610386 -NCT03610412 -NCT03610646 -NCT03610776 -NCT03610997 -NCT03611127 -NCT03611244 -NCT03611296 -NCT03611777 -NCT03611855 -NCT03611920 -NCT03611972 -NCT03612011 -NCT03612089 -NCT03612323 -NCT03612440 -NCT03612531 -NCT03612648 -NCT03612830 -NCT03612973 -NCT03612986 -NCT03613025 -NCT03613116 -NCT03613129 -NCT03613207 -NCT03613493 -NCT03613519 -NCT03613545 -NCT03613584 -NCT03613623 -NCT03613779 -NCT03613974 -NCT03614000 -NCT03614169 -NCT03614221 -NCT03614299 -NCT03614364 -NCT03614468 -NCT03614481 -NCT03614663 -NCT03614754 -NCT03614767 -NCT03614793 -NCT03614806 -NCT03614975 -NCT03614988 -NCT03615352 -NCT03615547 -NCT03615599 -NCT03615859 -NCT03615976 -NCT03616223 -NCT03616262 -NCT03616600 -NCT03616626 -NCT03616678 -NCT03616847 -NCT03617016 -NCT03617029 -NCT03617133 -NCT03617172 -NCT03617354 -NCT03617393 -NCT03617497 -NCT03617614 -NCT03617640 -NCT03617835 -NCT03617900 -NCT03617965 -NCT03618082 -NCT03618095 -NCT03618277 -NCT03618329 -NCT03618407 -NCT03618433 -NCT03618576 -NCT03618680 -NCT03618797 -NCT03619161 -NCT03619200 -NCT03619317 -NCT03619369 -NCT03619408 -NCT03619486 -NCT03619512 -NCT03619551 -NCT03619642 -NCT03619733 -NCT03619746 -NCT03619811 -NCT03620084 -NCT03620123 -NCT03620253 -NCT03620422 -NCT03620500 -NCT03620526 -NCT03620877 -NCT03620942 -NCT03620955 -NCT03620994 -NCT03621020 -NCT03621046 -NCT03621072 -NCT03621085 -NCT03621137 -NCT03621150 -NCT03621215 -NCT03621280 -NCT03621449 -NCT03621462 -NCT03621527 -NCT03621553 -NCT03621579 -NCT03621696 -NCT03621735 -NCT03621995 -NCT03622008 -NCT03622060 -NCT03622216 -NCT03622541 -NCT03622554 -NCT03622723 -NCT03622892 -NCT03623074 -NCT03623191 -NCT03623230 -NCT03623295 -NCT03623516 -NCT03623620 -NCT03623672 -NCT03623789 -NCT03623802 -NCT03623867 -NCT03623893 -NCT03623945 -NCT03624075 -NCT03624088 -NCT03624114 -NCT03624179 -NCT03624374 -NCT03624517 -NCT03624556 -NCT03624608 -NCT03624920 -NCT03625089 -NCT03625102 -NCT03625167 -NCT03625375 -NCT03625401 -NCT03625570 -NCT03625622 -NCT03625752 -NCT03625817 -NCT03625882 -NCT03625973 -NCT03626090 -NCT03626168 -NCT03626246 -NCT03626298 -NCT03626311 -NCT03626324 -NCT03626428 -NCT03626519 -NCT03626558 -NCT03626675 -NCT03626753 -NCT03626766 -NCT03626779 -NCT03626805 -NCT03626896 -NCT03626974 -NCT03627234 -NCT03627364 -NCT03627507 -NCT03627611 -NCT03627702 -NCT03627962 -NCT03628066 -NCT03628313 -NCT03628456 -NCT03628508 -NCT03628534 -NCT03628885 -NCT03629275 -NCT03629288 -NCT03629522 -NCT03629587 -NCT03629613 -NCT03629743 -NCT03629808 -NCT03629899 -NCT03629977 -NCT03630081 -NCT03630120 -NCT03630419 -NCT03630653 -NCT03630900 -NCT03630926 -NCT03630939 -NCT03631108 -NCT03631290 -NCT03631420 -NCT03631446 -NCT03631472 -NCT03631615 -NCT03631771 -NCT03631992 -NCT03632187 -NCT03632200 -NCT03632486 -NCT03632512 -NCT03632525 -NCT03632551 -NCT03632577 -NCT03632629 -NCT03632642 -NCT03632772 -NCT03632811 -NCT03632876 -NCT03632928 -NCT03633149 -NCT03633227 -NCT03633279 -NCT03633305 -NCT03633344 -NCT03633383 -NCT03633500 -NCT03633552 -NCT03633565 -NCT03633695 -NCT03633708 -NCT03633721 -NCT03633799 -NCT03633812 -NCT03633877 -NCT03634098 -NCT03634371 -NCT03634384 -NCT03634397 -NCT03634748 -NCT03634891 -NCT03634930 -NCT03635008 -NCT03635034 -NCT03635060 -NCT03635164 -NCT03635294 -NCT03635359 -NCT03635372 -NCT03635385 -NCT03635424 -NCT03635450 -NCT03635528 -NCT03635580 -NCT03635632 -NCT03635710 -NCT03635749 -NCT03635918 -NCT03636373 -NCT03636568 -NCT03636659 -NCT03636711 -NCT03636737 -NCT03636841 -NCT03636958 -NCT03637023 -NCT03637348 -NCT03637400 -NCT03637413 -NCT03637595 -NCT03637673 -NCT03637777 -NCT03637985 -NCT03638063 -NCT03638479 -NCT03638531 -NCT03638752 -NCT03638830 -NCT03638921 -NCT03639051 -NCT03639103 -NCT03639207 -NCT03639272 -NCT03639298 -NCT03639376 -NCT03639415 -NCT03639428 -NCT03639454 -NCT03639545 -NCT03639571 -NCT03639688 -NCT03639727 -NCT03639805 -NCT03640078 -NCT03640260 -NCT03640273 -NCT03640351 -NCT03640429 -NCT03640533 -NCT03640819 -NCT03640832 -NCT03640871 -NCT03640897 -NCT03640962 -NCT03640975 -NCT03641040 -NCT03641157 -NCT03641261 -NCT03641274 -NCT03641339 -NCT03641430 -NCT03641443 -NCT03641482 -NCT03641573 -NCT03641599 -NCT03641638 -NCT03641742 -NCT03641872 -NCT03642210 -NCT03642418 -NCT03642522 -NCT03642613 -NCT03642626 -NCT03642678 -NCT03642769 -NCT03642782 -NCT03642938 -NCT03642964 -NCT03643016 -NCT03643055 -NCT03643146 -NCT03643172 -NCT03643237 -NCT03643263 -NCT03643471 -NCT03643692 -NCT03643783 -NCT03643835 -NCT03643861 -NCT03643900 -NCT03643978 -NCT03644108 -NCT03644186 -NCT03644212 -NCT03644368 -NCT03644550 -NCT03644602 -NCT03644615 -NCT03644797 -NCT03644810 -NCT03644849 -NCT03644966 -NCT03645031 -NCT03645057 -NCT03645239 -NCT03645291 -NCT03645434 -NCT03645447 -NCT03645785 -NCT03645889 -NCT03645993 -NCT03646019 -NCT03646669 -NCT03646955 -NCT03647007 -NCT03647046 -NCT03647072 -NCT03647241 -NCT03647293 -NCT03647358 -NCT03647397 -NCT03647462 -NCT03647540 -NCT03647631 -NCT03647904 -NCT03647917 -NCT03647995 -NCT03648190 -NCT03648502 -NCT03648528 -NCT03648827 -NCT03648879 -NCT03648944 -NCT03648996 -NCT03649256 -NCT03649295 -NCT03649399 -NCT03649516 -NCT03649542 -NCT03649906 -NCT03649919 -NCT03649932 -NCT03649958 -NCT03649971 -NCT03650023 -NCT03650062 -NCT03650075 -NCT03650140 -NCT03650283 -NCT03650296 -NCT03650361 -NCT03650387 -NCT03650439 -NCT03650543 -NCT03650673 -NCT03650712 -NCT03650738 -NCT03650920 -NCT03650933 -NCT03651167 -NCT03651349 -NCT03651362 -NCT03651388 -NCT03651492 -NCT03651570 -NCT03651739 -NCT03651765 -NCT03651947 -NCT03651999 -NCT03652246 -NCT03652285 -NCT03652415 -NCT03652480 -NCT03652571 -NCT03652688 -NCT03652714 -NCT03653039 -NCT03653104 -NCT03653117 -NCT03653143 -NCT03653156 -NCT03653221 -NCT03653299 -NCT03653338 -NCT03653364 -NCT03653585 -NCT03653741 -NCT03653780 -NCT03654053 -NCT03654144 -NCT03654300 -NCT03654326 -NCT03654456 -NCT03654469 -NCT03654521 -NCT03654664 -NCT03654794 -NCT03654872 -NCT03654911 -NCT03654950 -NCT03655093 -NCT03655171 -NCT03655197 -NCT03655236 -NCT03655340 -NCT03655366 -NCT03655392 -NCT03655496 -NCT03655522 -NCT03655665 -NCT03655873 -NCT03655938 -NCT03656003 -NCT03656055 -NCT03656159 -NCT03656172 -NCT03656185 -NCT03656211 -NCT03656237 -NCT03656575 -NCT03656627 -NCT03657056 -NCT03657303 -NCT03657316 -NCT03657329 -NCT03657667 -NCT03657732 -NCT03657745 -NCT03657849 -NCT03657888 -NCT03657914 -NCT03658031 -NCT03658096 -NCT03658356 -NCT03658369 -NCT03658447 -NCT03658668 -NCT03658759 -NCT03658863 -NCT03658889 -NCT03658915 -NCT03659032 -NCT03659227 -NCT03659331 -NCT03659487 -NCT03659617 -NCT03659695 -NCT03659864 -NCT03659981 -NCT03660098 -NCT03660111 -NCT03660163 -NCT03660176 -NCT03660189 -NCT03660293 -NCT03660592 -NCT03660605 -NCT03660631 -NCT03660761 -NCT03660852 -NCT03660917 -NCT03661021 -NCT03661086 -NCT03661307 -NCT03661398 -NCT03661541 -NCT03661684 -NCT03661697 -NCT03661762 -NCT03661801 -NCT03661892 -NCT03662048 -NCT03662269 -NCT03662438 -NCT03662516 -NCT03662555 -NCT03662789 -NCT03662802 -NCT03662893 -NCT03662906 -NCT03663062 -NCT03663088 -NCT03663153 -NCT03663842 -NCT03663855 -NCT03663959 -NCT03664063 -NCT03664167 -NCT03664206 -NCT03664531 -NCT03664609 -NCT03664674 -NCT03664726 -NCT03664739 -NCT03664752 -NCT03664830 -NCT03664934 -NCT03665142 -NCT03665194 -NCT03665441 -NCT03665454 -NCT03665493 -NCT03665519 -NCT03665584 -NCT03665779 -NCT03665844 -NCT03665974 -NCT03666052 -NCT03666117 -NCT03666260 -NCT03666351 -NCT03666429 -NCT03666520 -NCT03666572 -NCT03666624 -NCT03666676 -NCT03666962 -NCT03667027 -NCT03667222 -NCT03667469 -NCT03667534 -NCT03667664 -NCT03667677 -NCT03667742 -NCT03667820 -NCT03667833 -NCT03667950 -NCT03668028 -NCT03668067 -NCT03668457 -NCT03668522 -NCT03668574 -NCT03668808 -NCT03668821 -NCT03668977 -NCT03669146 -NCT03669237 -NCT03669432 -NCT03669549 -NCT03669562 -NCT03669614 -NCT03669666 -NCT03669705 -NCT03669770 -NCT03669900 -NCT03669939 -NCT03669952 -NCT03669978 -NCT03670056 -NCT03670134 -NCT03670160 -NCT03670173 -NCT03670251 -NCT03670355 -NCT03670394 -NCT03670459 -NCT03670563 -NCT03670576 -NCT03670693 -NCT03670706 -NCT03670719 -NCT03670862 -NCT03670927 -NCT03670966 -NCT03671083 -NCT03671343 -NCT03671395 -NCT03671798 -NCT03671915 -NCT03671928 -NCT03672032 -NCT03672149 -NCT03672266 -NCT03672318 -NCT03672422 -NCT03672500 -NCT03672617 -NCT03672799 -NCT03672851 -NCT03672877 -NCT03672955 -NCT03672968 -NCT03672994 -NCT03673072 -NCT03673085 -NCT03673202 -NCT03673319 -NCT03673410 -NCT03673618 -NCT03673813 -NCT03673826 -NCT03673865 -NCT03673904 -NCT03674047 -NCT03674086 -NCT03674281 -NCT03674411 -NCT03674593 -NCT03674632 -NCT03675035 -NCT03675152 -NCT03675256 -NCT03675269 -NCT03675282 -NCT03675425 -NCT03675581 -NCT03675646 -NCT03675841 -NCT03675958 -NCT03675984 -NCT03676023 -NCT03676036 -NCT03676049 -NCT03676257 -NCT03676309 -NCT03676426 -NCT03676530 -NCT03676556 -NCT03676686 -NCT03676712 -NCT03676777 -NCT03676790 -NCT03676868 -NCT03676933 -NCT03676972 -NCT03677154 -NCT03677206 -NCT03677245 -NCT03677349 -NCT03677362 -NCT03677401 -NCT03677544 -NCT03677648 -NCT03677661 -NCT03677713 -NCT03678025 -NCT03678090 -NCT03678233 -NCT03678259 -NCT03678272 -NCT03678389 -NCT03678519 -NCT03678922 -NCT03678935 -NCT03678948 -NCT03679091 -NCT03679169 -NCT03679208 -NCT03679286 -NCT03679312 -NCT03679377 -NCT03679507 -NCT03679520 -NCT03679663 -NCT03679819 -NCT03679910 -NCT03679975 -NCT03680365 -NCT03680495 -NCT03680612 -NCT03680651 -NCT03680872 -NCT03680989 -NCT03681015 -NCT03681197 -NCT03681392 -NCT03681418 -NCT03681470 -NCT03681665 -NCT03681951 -NCT03681964 -NCT03682094 -NCT03682211 -NCT03682380 -NCT03682458 -NCT03682549 -NCT03682614 -NCT03682666 -NCT03682939 -NCT03683043 -NCT03683069 -NCT03683121 -NCT03683134 -NCT03683212 -NCT03683342 -NCT03683615 -NCT03683849 -NCT03683875 -NCT03684083 -NCT03684148 -NCT03684161 -NCT03684265 -NCT03684278 -NCT03684330 -NCT03684408 -NCT03684499 -NCT03684512 -NCT03684629 -NCT03684772 -NCT03684837 -NCT03684850 -NCT03684928 -NCT03685461 -NCT03685526 -NCT03685591 -NCT03685617 -NCT03685721 -NCT03685929 -NCT03686072 -NCT03686371 -NCT03686384 -NCT03686397 -NCT03686436 -NCT03686475 -NCT03686514 -NCT03686527 -NCT03686592 -NCT03686618 -NCT03686644 -NCT03686787 -NCT03686852 -NCT03686891 -NCT03687190 -NCT03687216 -NCT03687229 -NCT03687424 -NCT03687502 -NCT03687606 -NCT03687710 -NCT03687762 -NCT03687814 -NCT03687866 -NCT03687944 -NCT03688269 -NCT03688295 -NCT03688321 -NCT03688386 -NCT03688685 -NCT03688971 -NCT03688984 -NCT03689049 -NCT03689335 -NCT03689361 -NCT03689439 -NCT03689517 -NCT03689699 -NCT03689972 -NCT03690024 -NCT03690115 -NCT03690245 -NCT03690349 -NCT03690414 -NCT03690544 -NCT03691077 -NCT03691181 -NCT03691272 -NCT03691311 -NCT03691337 -NCT03691857 -NCT03691870 -NCT03691883 -NCT03691896 -NCT03691974 -NCT03692013 -NCT03692039 -NCT03692221 -NCT03692403 -NCT03692793 -NCT03692832 -NCT03692845 -NCT03692858 -NCT03693261 -NCT03693365 -NCT03693469 -NCT03693586 -NCT03693807 -NCT03693820 -NCT03693833 -NCT03693898 -NCT03693950 -NCT03694158 -NCT03694197 -NCT03694535 -NCT03694626 -NCT03694990 -NCT03695029 -NCT03695042 -NCT03695120 -NCT03695250 -NCT03695276 -NCT03695315 -NCT03695705 -NCT03695731 -NCT03695848 -NCT03695965 -NCT03695978 -NCT03696030 -NCT03696108 -NCT03696121 -NCT03696394 -NCT03696524 -NCT03696602 -NCT03696784 -NCT03696940 -NCT03696979 -NCT03697096 -NCT03697109 -NCT03697161 -NCT03697226 -NCT03697395 -NCT03697512 -NCT03697655 -NCT03697863 -NCT03697876 -NCT03697889 -NCT03697993 -NCT03698071 -NCT03698266 -NCT03698461 -NCT03698487 -NCT03698539 -NCT03698630 -NCT03698721 -NCT03698903 -NCT03698994 -NCT03699098 -NCT03699124 -NCT03699176 -NCT03699202 -NCT03699280 -NCT03699293 -NCT03699514 -NCT03699722 -NCT03699735 -NCT03699800 -NCT03700229 -NCT03700281 -NCT03700450 -NCT03700502 -NCT03700710 -NCT03700814 -NCT03700983 -NCT03701061 -NCT03701282 -NCT03701477 -NCT03701490 -NCT03701737 -NCT03701776 -NCT03702010 -NCT03702023 -NCT03702101 -NCT03702218 -NCT03702244 -NCT03702296 -NCT03702309 -NCT03702478 -NCT03702582 -NCT03702647 -NCT03702829 -NCT03702998 -NCT03703011 -NCT03703024 -NCT03703115 -NCT03703323 -NCT03703479 -NCT03703570 -NCT03703830 -NCT03703882 -NCT03703986 -NCT03703999 -NCT03704051 -NCT03704233 -NCT03704259 -NCT03704298 -NCT03704311 -NCT03704584 -NCT03704610 -NCT03704649 -NCT03704922 -NCT03704987 -NCT03705078 -NCT03705117 -NCT03705130 -NCT03705325 -NCT03705377 -NCT03705390 -NCT03705403 -NCT03705416 -NCT03705507 -NCT03705533 -NCT03705650 -NCT03705832 -NCT03706079 -NCT03706131 -NCT03706183 -NCT03706586 -NCT03706599 -NCT03706768 -NCT03706820 -NCT03706833 -NCT03707353 -NCT03707431 -NCT03707444 -NCT03707496 -NCT03707600 -NCT03708003 -NCT03708120 -NCT03708237 -NCT03708263 -NCT03708302 -NCT03708341 -NCT03708354 -NCT03708471 -NCT03708497 -NCT03708679 -NCT03708692 -NCT03708744 -NCT03708783 -NCT03708796 -NCT03708874 -NCT03708900 -NCT03708965 -NCT03708978 -NCT03709030 -NCT03709069 -NCT03709121 -NCT03709134 -NCT03709238 -NCT03709290 -NCT03709329 -NCT03709381 -NCT03709758 -NCT03709810 -NCT03709849 -NCT03709888 -NCT03710148 -NCT03710187 -NCT03710226 -NCT03710278 -NCT03710356 -NCT03710369 -NCT03710499 -NCT03710525 -NCT03710577 -NCT03710772 -NCT03710798 -NCT03710889 -NCT03710902 -NCT03710928 -NCT03710954 -NCT03710993 -NCT03711214 -NCT03711448 -NCT03711461 -NCT03711695 -NCT03712020 -NCT03712085 -NCT03712098 -NCT03712345 -NCT03712683 -NCT03712722 -NCT03712800 -NCT03712865 -NCT03712891 -NCT03712982 -NCT03712995 -NCT03713047 -NCT03713060 -NCT03713203 -NCT03713229 -NCT03713411 -NCT03713528 -NCT03713671 -NCT03713879 -NCT03714165 -NCT03714282 -NCT03714412 -NCT03714607 -NCT03714659 -NCT03714763 -NCT03715140 -NCT03715231 -NCT03715322 -NCT03715374 -NCT03715413 -NCT03715478 -NCT03715569 -NCT03715673 -NCT03715764 -NCT03715881 -NCT03715933 -NCT03716128 -NCT03716180 -NCT03716232 -NCT03716245 -NCT03716258 -NCT03716284 -NCT03716635 -NCT03716661 -NCT03716739 -NCT03716843 -NCT03717051 -NCT03717207 -NCT03717428 -NCT03717506 -NCT03717532 -NCT03717584 -NCT03717714 -NCT03717844 -NCT03717857 -NCT03717883 -NCT03717896 -NCT03718000 -NCT03718013 -NCT03718104 -NCT03718234 -NCT03718325 -NCT03718442 -NCT03718559 -NCT03718637 -NCT03718728 -NCT03718767 -NCT03718910 -NCT03718949 -NCT03719196 -NCT03719248 -NCT03719274 -NCT03719547 -NCT03719560 -NCT03719742 -NCT03719807 -NCT03719846 -NCT03719859 -NCT03719885 -NCT03719950 -NCT03720132 -NCT03720197 -NCT03720392 -NCT03720470 -NCT03720574 -NCT03720626 -NCT03720639 -NCT03720886 -NCT03721146 -NCT03721159 -NCT03721497 -NCT03721523 -NCT03721601 -NCT03721627 -NCT03721770 -NCT03721848 -NCT03721952 -NCT03721978 -NCT03721991 -NCT03722251 -NCT03722277 -NCT03722290 -NCT03722329 -NCT03722394 -NCT03722472 -NCT03722537 -NCT03722602 -NCT03722628 -NCT03722771 -NCT03722810 -NCT03722888 -NCT03722914 -NCT03723044 -NCT03723330 -NCT03723564 -NCT03723824 -NCT03723902 -NCT03724461 -NCT03724617 -NCT03724773 -NCT03724825 -NCT03724851 -NCT03724877 -NCT03724903 -NCT03725007 -NCT03725059 -NCT03725202 -NCT03725306 -NCT03725384 -NCT03725553 -NCT03725696 -NCT03726385 -NCT03726398 -NCT03726424 -NCT03726658 -NCT03726697 -NCT03726749 -NCT03726801 -NCT03726879 -NCT03726983 -NCT03727308 -NCT03727360 -NCT03727373 -NCT03727412 -NCT03727516 -NCT03727646 -NCT03727672 -NCT03727685 -NCT03727841 -NCT03727919 -NCT03728036 -NCT03728062 -NCT03728114 -NCT03728140 -NCT03728179 -NCT03728218 -NCT03728231 -NCT03728296 -NCT03728387 -NCT03728426 -NCT03728491 -NCT03728595 -NCT03728660 -NCT03728712 -NCT03728777 -NCT03728803 -NCT03728907 -NCT03729271 -NCT03729323 -NCT03729375 -NCT03729479 -NCT03729544 -NCT03729817 -NCT03729882 -NCT03729921 -NCT03729947 -NCT03730181 -NCT03730233 -NCT03730311 -NCT03730519 -NCT03730662 -NCT03730714 -NCT03730727 -NCT03730974 -NCT03731078 -NCT03731247 -NCT03731260 -NCT03731351 -NCT03731624 -NCT03731663 -NCT03731858 -NCT03731988 -NCT03732118 -NCT03732261 -NCT03732365 -NCT03732391 -NCT03732469 -NCT03732664 -NCT03732703 -NCT03732859 -NCT03732872 -NCT03732937 -NCT03733067 -NCT03733171 -NCT03733210 -NCT03733249 -NCT03733821 -NCT03733886 -NCT03734120 -NCT03734146 -NCT03734224 -NCT03734237 -NCT03734263 -NCT03734302 -NCT03734354 -NCT03734523 -NCT03734562 -NCT03734588 -NCT03734900 -NCT03735030 -NCT03735186 -NCT03735199 -NCT03735277 -NCT03735303 -NCT03735316 -NCT03735355 -NCT03735511 -NCT03735654 -NCT03735693 -NCT03735849 -NCT03735862 -NCT03735979 -NCT03736057 -NCT03736083 -NCT03736109 -NCT03736122 -NCT03736174 -NCT03736265 -NCT03736330 -NCT03736369 -NCT03736382 -NCT03736811 -NCT03736824 -NCT03736902 -NCT03736941 -NCT03737175 -NCT03737344 -NCT03737448 -NCT03737526 -NCT03737630 -NCT03737708 -NCT03737721 -NCT03737786 -NCT03737851 -NCT03737890 -NCT03737903 -NCT03738072 -NCT03738358 -NCT03738540 -NCT03738618 -NCT03738761 -NCT03738813 -NCT03738865 -NCT03738969 -NCT03738982 -NCT03739047 -NCT03739190 -NCT03739398 -NCT03739502 -NCT03739554 -NCT03739567 -NCT03739606 -NCT03739736 -NCT03739775 -NCT03739814 -NCT03739840 -NCT03739957 -NCT03740685 -NCT03740737 -NCT03740750 -NCT03740789 -NCT03740893 -NCT03740906 -NCT03740958 -NCT03741283 -NCT03741322 -NCT03741803 -NCT03741972 -NCT03742024 -NCT03742128 -NCT03742336 -NCT03742362 -NCT03742427 -NCT03742479 -NCT03742635 -NCT03742843 -NCT03742869 -NCT03743038 -NCT03743467 -NCT03743649 -NCT03743688 -NCT03743740 -NCT03743792 -NCT03743844 -NCT03744234 -NCT03744338 -NCT03744585 -NCT03744650 -NCT03744676 -NCT03744728 -NCT03744793 -NCT03744975 -NCT03744988 -NCT03745014 -NCT03745027 -NCT03745105 -NCT03745157 -NCT03745183 -NCT03745196 -NCT03745287 -NCT03745365 -NCT03745586 -NCT03745690 -NCT03745937 -NCT03746184 -NCT03746665 -NCT03746847 -NCT03747029 -NCT03747042 -NCT03747185 -NCT03747198 -NCT03747289 -NCT03747510 -NCT03747614 -NCT03747679 -NCT03747796 -NCT03747874 -NCT03748017 -NCT03748563 -NCT03748589 -NCT03748966 -NCT03749096 -NCT03749109 -NCT03749252 -NCT03749447 -NCT03749499 -NCT03749564 -NCT03749707 -NCT03749720 -NCT03750032 -NCT03750149 -NCT03750370 -NCT03750396 -NCT03750656 -NCT03750760 -NCT03750773 -NCT03750968 -NCT03751241 -NCT03751462 -NCT03751644 -NCT03751800 -NCT03751878 -NCT03751930 -NCT03751956 -NCT03751969 -NCT03752047 -NCT03752060 -NCT03752164 -NCT03752190 -NCT03752567 -NCT03752619 -NCT03752645 -NCT03752697 -NCT03752710 -NCT03752827 -NCT03752983 -NCT03753035 -NCT03753100 -NCT03753178 -NCT03753373 -NCT03753438 -NCT03753542 -NCT03753633 -NCT03753672 -NCT03753724 -NCT03753802 -NCT03753841 -NCT03753854 -NCT03753893 -NCT03754075 -NCT03754335 -NCT03754361 -NCT03754387 -NCT03754465 -NCT03754491 -NCT03754517 -NCT03754608 -NCT03754621 -NCT03754725 -NCT03754751 -NCT03754777 -NCT03754959 -NCT03754985 -NCT03754998 -NCT03755037 -NCT03755193 -NCT03755219 -NCT03755388 -NCT03755505 -NCT03755544 -NCT03755726 -NCT03755752 -NCT03755765 -NCT03755869 -NCT03755973 -NCT03756116 -NCT03756155 -NCT03756168 -NCT03756454 -NCT03756467 -NCT03756480 -NCT03756493 -NCT03756519 -NCT03756818 -NCT03756896 -NCT03756909 -NCT03757078 -NCT03757143 -NCT03757169 -NCT03757364 -NCT03757442 -NCT03757572 -NCT03757611 -NCT03758183 -NCT03758222 -NCT03758326 -NCT03758508 -NCT03758534 -NCT03758781 -NCT03758807 -NCT03758820 -NCT03759184 -NCT03759301 -NCT03759366 -NCT03759470 -NCT03759483 -NCT03759613 -NCT03759691 -NCT03759730 -NCT03759756 -NCT03759821 -NCT03759951 -NCT03760094 -NCT03760120 -NCT03760380 -NCT03760406 -NCT03760627 -NCT03760666 -NCT03760835 -NCT03760861 -NCT03760887 -NCT03761238 -NCT03761498 -NCT03761667 -NCT03762122 -NCT03762174 -NCT03762382 -NCT03762473 -NCT03762525 -NCT03762785 -NCT03762902 -NCT03762967 -NCT03762980 -NCT03763019 -NCT03763175 -NCT03763383 -NCT03763513 -NCT03763552 -NCT03763565 -NCT03763604 -NCT03763617 -NCT03763734 -NCT03763799 -NCT03763955 -NCT03764020 -NCT03764072 -NCT03764085 -NCT03764163 -NCT03764306 -NCT03764735 -NCT03764761 -NCT03764865 -NCT03764995 -NCT03765021 -NCT03765073 -NCT03765268 -NCT03765346 -NCT03765424 -NCT03765593 -NCT03765632 -NCT03765684 -NCT03765762 -NCT03765775 -NCT03765788 -NCT03765801 -NCT03765892 -NCT03766061 -NCT03766074 -NCT03766100 -NCT03766243 -NCT03766373 -NCT03766386 -NCT03766412 -NCT03766854 -NCT03766984 -NCT03767179 -NCT03767257 -NCT03767790 -NCT03767881 -NCT03767959 -NCT03767998 -NCT03768115 -NCT03768661 -NCT03768765 -NCT03768830 -NCT03768882 -NCT03769090 -NCT03769116 -NCT03769246 -NCT03769376 -NCT03769688 -NCT03769961 -NCT03769987 -NCT03770026 -NCT03770234 -NCT03770273 -NCT03770442 -NCT03770546 -NCT03770585 -NCT03770611 -NCT03770715 -NCT03770754 -NCT03770884 -NCT03770897 -NCT03770962 -NCT03771027 -NCT03771222 -NCT03771287 -NCT03771378 -NCT03771456 -NCT03771469 -NCT03771768 -NCT03771794 -NCT03771989 -NCT03772158 -NCT03772561 -NCT03772587 -NCT03772626 -NCT03772912 -NCT03773107 -NCT03773224 -NCT03773263 -NCT03773302 -NCT03773666 -NCT03773718 -NCT03773809 -NCT03773991 -NCT03774017 -NCT03774121 -NCT03774199 -NCT03774277 -NCT03774355 -NCT03774446 -NCT03774563 -NCT03774784 -NCT03774810 -NCT03774862 -NCT03774888 -NCT03774966 -NCT03774992 -NCT03775096 -NCT03775148 -NCT03775161 -NCT03775239 -NCT03775291 -NCT03775629 -NCT03775733 -NCT03775811 -NCT03776006 -NCT03776110 -NCT03776175 -NCT03776318 -NCT03776383 -NCT03776669 -NCT03776851 -NCT03776955 -NCT03777046 -NCT03777319 -NCT03777488 -NCT03777722 -NCT03777774 -NCT03777969 -NCT03778021 -NCT03778060 -NCT03778086 -NCT03778125 -NCT03778138 -NCT03778151 -NCT03778359 -NCT03778411 -NCT03778593 -NCT03778658 -NCT03778879 -NCT03779152 -NCT03779165 -NCT03779477 -NCT03779503 -NCT03779529 -NCT03779568 -NCT03779581 -NCT03779594 -NCT03779620 -NCT03779646 -NCT03779659 -NCT03779737 -NCT03779750 -NCT03779815 -NCT03780153 -NCT03780296 -NCT03780309 -NCT03780387 -NCT03780426 -NCT03780569 -NCT03780712 -NCT03780972 -NCT03781011 -NCT03781050 -NCT03781089 -NCT03781739 -NCT03781895 -NCT03781908 -NCT03782051 -NCT03782480 -NCT03782701 -NCT03782714 -NCT03782727 -NCT03782870 -NCT03783143 -NCT03783182 -NCT03783273 -NCT03783312 -NCT03783572 -NCT03783585 -NCT03783728 -NCT03783780 -NCT03783897 -NCT03784027 -NCT03784157 -NCT03784183 -NCT03784339 -NCT03784430 -NCT03784456 -NCT03784547 -NCT03784703 -NCT03784729 -NCT03784742 -NCT03784794 -NCT03785015 -NCT03785210 -NCT03785262 -NCT03785366 -NCT03785418 -NCT03785457 -NCT03785678 -NCT03785756 -NCT03785795 -NCT03785886 -NCT03786289 -NCT03786367 -NCT03786406 -NCT03786666 -NCT03786744 -NCT03786770 -NCT03786861 -NCT03786913 -NCT03787017 -NCT03787043 -NCT03787056 -NCT03787303 -NCT03787511 -NCT03787589 -NCT03787914 -NCT03787940 -NCT03787953 -NCT03787979 -NCT03788031 -NCT03788057 -NCT03788109 -NCT03788122 -NCT03788161 -NCT03788174 -NCT03788434 -NCT03788460 -NCT03788512 -NCT03788590 -NCT03788733 -NCT03788772 -NCT03788850 -NCT03788889 -NCT03788954 -NCT03788967 -NCT03789357 -NCT03789422 -NCT03789552 -NCT03789656 -NCT03789838 -NCT03790072 -NCT03790098 -NCT03790215 -NCT03790241 -NCT03790592 -NCT03790631 -NCT03790748 -NCT03790826 -NCT03790852 -NCT03791060 -NCT03791164 -NCT03791229 -NCT03791242 -NCT03791515 -NCT03791528 -NCT03791658 -NCT03791814 -NCT03792165 -NCT03792191 -NCT03792230 -NCT03792321 -NCT03792425 -NCT03792438 -NCT03792477 -NCT03792490 -NCT03792503 -NCT03792529 -NCT03792555 -NCT03792620 -NCT03792659 -NCT03792789 -NCT03792802 -NCT03792919 -NCT03792971 -NCT03793049 -NCT03793114 -NCT03793140 -NCT03793192 -NCT03793348 -NCT03793491 -NCT03793595 -NCT03793686 -NCT03794102 -NCT03794219 -NCT03794284 -NCT03794557 -NCT03794596 -NCT03794609 -NCT03794661 -NCT03794713 -NCT03794726 -NCT03794752 -NCT03794791 -NCT03794830 -NCT03794843 -NCT03794895 -NCT03794999 -NCT03795012 -NCT03795194 -NCT03795233 -NCT03795285 -NCT03795350 -NCT03795584 -NCT03795597 -NCT03795662 -NCT03795675 -NCT03795714 -NCT03795935 -NCT03795987 -NCT03796026 -NCT03796052 -NCT03796091 -NCT03796143 -NCT03796247 -NCT03796416 -NCT03796455 -NCT03796481 -NCT03796520 -NCT03796598 -NCT03796637 -NCT03796650 -NCT03796767 -NCT03796988 -NCT03797131 -NCT03797157 -NCT03797235 -NCT03797326 -NCT03797469 -NCT03797508 -NCT03797547 -NCT03797833 -NCT03797846 -NCT03797989 -NCT03798002 -NCT03798015 -NCT03798080 -NCT03798119 -NCT03798158 -NCT03798444 -NCT03798457 -NCT03798561 -NCT03798704 -NCT03798769 -NCT03798860 -NCT03798899 -NCT03799406 -NCT03799445 -NCT03799484 -NCT03799510 -NCT03799575 -NCT03799614 -NCT03799705 -NCT03799887 -NCT03799926 -NCT03799952 -NCT03799991 -NCT03800290 -NCT03800446 -NCT03800498 -NCT03800524 -NCT03800615 -NCT03800654 -NCT03800927 -NCT03801213 -NCT03801356 -NCT03801395 -NCT03801499 -NCT03801863 -NCT03802019 -NCT03802045 -NCT03802188 -NCT03802448 -NCT03802474 -NCT03802487 -NCT03802734 -NCT03802799 -NCT03802851 -NCT03802903 -NCT03802994 -NCT03803007 -NCT03803033 -NCT03803046 -NCT03803215 -NCT03803293 -NCT03803319 -NCT03803410 -NCT03803943 -NCT03803969 -NCT03804502 -NCT03804580 -NCT03804671 -NCT03804710 -NCT03804736 -NCT03804775 -NCT03804983 -NCT03805165 -NCT03805282 -NCT03805334 -NCT03805477 -NCT03805581 -NCT03805607 -NCT03805711 -NCT03805750 -NCT03805776 -NCT03805828 -NCT03805906 -NCT03805932 -NCT03806036 -NCT03806062 -NCT03806088 -NCT03806153 -NCT03806205 -NCT03806322 -NCT03806543 -NCT03806595 -NCT03806647 -NCT03806894 -NCT03806985 -NCT03807024 -NCT03807050 -NCT03807076 -NCT03807414 -NCT03807570 -NCT03807830 -NCT03807856 -NCT03808012 -NCT03808038 -NCT03808168 -NCT03808311 -NCT03808415 -NCT03808428 -NCT03808675 -NCT03808779 -NCT03808831 -NCT03808883 -NCT03808935 -NCT03809026 -NCT03809065 -NCT03809104 -NCT03809117 -NCT03809221 -NCT03809338 -NCT03809585 -NCT03809832 -NCT03810196 -NCT03810261 -NCT03810287 -NCT03810326 -NCT03810443 -NCT03810482 -NCT03810716 -NCT03810781 -NCT03810846 -NCT03811002 -NCT03811106 -NCT03811145 -NCT03811288 -NCT03811405 -NCT03811431 -NCT03811535 -NCT03811743 -NCT03811769 -NCT03811782 -NCT03811951 -NCT03811964 -NCT03812016 -NCT03812068 -NCT03812198 -NCT03812211 -NCT03812263 -NCT03812302 -NCT03812341 -NCT03812367 -NCT03812393 -NCT03812432 -NCT03812692 -NCT03812744 -NCT03812913 -NCT03813056 -NCT03813173 -NCT03813498 -NCT03813524 -NCT03813576 -NCT03813706 -NCT03813732 -NCT03813810 -NCT03814161 -NCT03814239 -NCT03814317 -NCT03814343 -NCT03814408 -NCT03814577 -NCT03814668 -NCT03814694 -NCT03814720 -NCT03814837 -NCT03815149 -NCT03815175 -NCT03815214 -NCT03815279 -NCT03815318 -NCT03815331 -NCT03815357 -NCT03815370 -NCT03815448 -NCT03815526 -NCT03815747 -NCT03815812 -NCT03815838 -NCT03815968 -NCT03816098 -NCT03816462 -NCT03816540 -NCT03817216 -NCT03817242 -NCT03817385 -NCT03817645 -NCT03817762 -NCT03817840 -NCT03817996 -NCT03818529 -NCT03818555 -NCT03818568 -NCT03818646 -NCT03818763 -NCT03818802 -NCT03818815 -NCT03818880 -NCT03818919 -NCT03819062 -NCT03819140 -NCT03819166 -NCT03819257 -NCT03819348 -NCT03819478 -NCT03819504 -NCT03819569 -NCT03819777 -NCT03819907 -NCT03820011 -NCT03820089 -NCT03820115 -NCT03820206 -NCT03820414 -NCT03820427 -NCT03820453 -NCT03820518 -NCT03820570 -NCT03820674 -NCT03820791 -NCT03820830 -NCT03820843 -NCT03820856 -NCT03820999 -NCT03821038 -NCT03821051 -NCT03821116 -NCT03821194 -NCT03821207 -NCT03821285 -NCT03821675 -NCT03821870 -NCT03822156 -NCT03822195 -NCT03822494 -NCT03822520 -NCT03822533 -NCT03822650 -NCT03822780 -NCT03822871 -NCT03823027 -NCT03823040 -NCT03823053 -NCT03823404 -NCT03823560 -NCT03823742 -NCT03823846 -NCT03823859 -NCT03824002 -NCT03824223 -NCT03824379 -NCT03824431 -NCT03824457 -NCT03824587 -NCT03824665 -NCT03824717 -NCT03824834 -NCT03824886 -NCT03824912 -NCT03824977 -NCT03824990 -NCT03825042 -NCT03825055 -NCT03825159 -NCT03825237 -NCT03825289 -NCT03825302 -NCT03825445 -NCT03825484 -NCT03825757 -NCT03825770 -NCT03825783 -NCT03825835 -NCT03825848 -NCT03825926 -NCT03825991 -NCT03826030 -NCT03826056 -NCT03826095 -NCT03826446 -NCT03826524 -NCT03827018 -NCT03827070 -NCT03827317 -NCT03827395 -NCT03827447 -NCT03827668 -NCT03827837 -NCT03827850 -NCT03828071 -NCT03828123 -NCT03828136 -NCT03828201 -NCT03828279 -NCT03828422 -NCT03828630 -NCT03828864 -NCT03828903 -NCT03828929 -NCT03829059 -NCT03829098 -NCT03829111 -NCT03829475 -NCT03829631 -NCT03829683 -NCT03829904 -NCT03829917 -NCT03829930 -NCT03829943 -NCT03830060 -NCT03830073 -NCT03830190 -NCT03830242 -NCT03830281 -NCT03830398 -NCT03830437 -NCT03830502 -NCT03830580 -NCT03830658 -NCT03830671 -NCT03830697 -NCT03830775 -NCT03830905 -NCT03830957 -NCT03831035 -NCT03831256 -NCT03831269 -NCT03831334 -NCT03831373 -NCT03831386 -NCT03831464 -NCT03831477 -NCT03831516 -NCT03831581 -NCT03831724 -NCT03831893 -NCT03831906 -NCT03831958 -NCT03831971 -NCT03832010 -NCT03832049 -NCT03832283 -NCT03832647 -NCT03832712 -NCT03832907 -NCT03832959 -NCT03832972 -NCT03832998 -NCT03833011 -NCT03833206 -NCT03833232 -NCT03833388 -NCT03833414 -NCT03833648 -NCT03833687 -NCT03833752 -NCT03833869 -NCT03833973 -NCT03834012 -NCT03834038 -NCT03834077 -NCT03834194 -NCT03834246 -NCT03834311 -NCT03834350 -NCT03834402 -NCT03834454 -NCT03834480 -NCT03834727 -NCT03834779 -NCT03834805 -NCT03834961 -NCT03835000 -NCT03835065 -NCT03835299 -NCT03835325 -NCT03835351 -NCT03835624 -NCT03835741 -NCT03835910 -NCT03836040 -NCT03836053 -NCT03836274 -NCT03836287 -NCT03836300 -NCT03836430 -NCT03836495 -NCT03836521 -NCT03836534 -NCT03836586 -NCT03836807 -NCT03836872 -NCT03836885 -NCT03836937 -NCT03837028 -NCT03837301 -NCT03837444 -NCT03837574 -NCT03837652 -NCT03837691 -NCT03837717 -NCT03837769 -NCT03837834 -NCT03837938 -NCT03837951 -NCT03838120 -NCT03838237 -NCT03838484 -NCT03838575 -NCT03838653 -NCT03838913 -NCT03838952 -NCT03838991 -NCT03839160 -NCT03839173 -NCT03839420 -NCT03839433 -NCT03839459 -NCT03839576 -NCT03839615 -NCT03839836 -NCT03839901 -NCT03839992 -NCT03840005 -NCT03840148 -NCT03840265 -NCT03840317 -NCT03840538 -NCT03840564 -NCT03840603 -NCT03840980 -NCT03841006 -NCT03841032 -NCT03841045 -NCT03841162 -NCT03841240 -NCT03841266 -NCT03841318 -NCT03841383 -NCT03841422 -NCT03841461 -NCT03841526 -NCT03841617 -NCT03841721 -NCT03841734 -NCT03842007 -NCT03842059 -NCT03842215 -NCT03842254 -NCT03842358 -NCT03842566 -NCT03842605 -NCT03842826 -NCT03842852 -NCT03843073 -NCT03843151 -NCT03843177 -NCT03843346 -NCT03843437 -NCT03843554 -NCT03843645 -NCT03843710 -NCT03843814 -NCT03843931 -NCT03844100 -NCT03844490 -NCT03844568 -NCT03844711 -NCT03844776 -NCT03845231 -NCT03845608 -NCT03845647 -NCT03845764 -NCT03846024 -NCT03846323 -NCT03846336 -NCT03846349 -NCT03846401 -NCT03846427 -NCT03846492 -NCT03846570 -NCT03846674 -NCT03846700 -NCT03846804 -NCT03846817 -NCT03846869 -NCT03846908 -NCT03846934 -NCT03847064 -NCT03847103 -NCT03847194 -NCT03847506 -NCT03847558 -NCT03847571 -NCT03847688 -NCT03847753 -NCT03847896 -NCT03848013 -NCT03848039 -NCT03848117 -NCT03848195 -NCT03848260 -NCT03848455 -NCT03848494 -NCT03848507 -NCT03848702 -NCT03848845 -NCT03849053 -NCT03849066 -NCT03849365 -NCT03849482 -NCT03849534 -NCT03849625 -NCT03849794 -NCT03850080 -NCT03850119 -NCT03850197 -NCT03850327 -NCT03850353 -NCT03850587 -NCT03850717 -NCT03850730 -NCT03850964 -NCT03851003 -NCT03851042 -NCT03851328 -NCT03851367 -NCT03851406 -NCT03851497 -NCT03851562 -NCT03851601 -NCT03851614 -NCT03851627 -NCT03851861 -NCT03851952 -NCT03851991 -NCT03852173 -NCT03852433 -NCT03852472 -NCT03852563 -NCT03852576 -NCT03852836 -NCT03852901 -NCT03852966 -NCT03853070 -NCT03853135 -NCT03853486 -NCT03853538 -NCT03853551 -NCT03853603 -NCT03853915 -NCT03853928 -NCT03853954 -NCT03854032 -NCT03854058 -NCT03854084 -NCT03854136 -NCT03854175 -NCT03854396 -NCT03854448 -NCT03854474 -NCT03854500 -NCT03854526 -NCT03854786 -NCT03854929 -NCT03854981 -NCT03855007 -NCT03855072 -NCT03855514 -NCT03855644 -NCT03855670 -NCT03855709 -NCT03855813 -NCT03855904 -NCT03856125 -NCT03856138 -NCT03856164 -NCT03856229 -NCT03856268 -NCT03856294 -NCT03856476 -NCT03856528 -NCT03856684 -NCT03856710 -NCT03856801 -NCT03856983 -NCT03857048 -NCT03857061 -NCT03857191 -NCT03857230 -NCT03857451 -NCT03857464 -NCT03857529 -NCT03857607 -NCT03857633 -NCT03857646 -NCT03857672 -NCT03857698 -NCT03857737 -NCT03857828 -NCT03857867 -NCT03857880 -NCT03857919 -NCT03857997 -NCT03858010 -NCT03858036 -NCT03858049 -NCT03858127 -NCT03858192 -NCT03858244 -NCT03858374 -NCT03858595 -NCT03858608 -NCT03858660 -NCT03858738 -NCT03858855 -NCT03858920 -NCT03859011 -NCT03859154 -NCT03859193 -NCT03859206 -NCT03859362 -NCT03859596 -NCT03859648 -NCT03859687 -NCT03859830 -NCT03859895 -NCT03859921 -NCT03860155 -NCT03860233 -NCT03860285 -NCT03860519 -NCT03860831 -NCT03861039 -NCT03861052 -NCT03861130 -NCT03861195 -NCT03861260 -NCT03861286 -NCT03861390 -NCT03861468 -NCT03861520 -NCT03861611 -NCT03861637 -NCT03861897 -NCT03862092 -NCT03862274 -NCT03862417 -NCT03862625 -NCT03862729 -NCT03862742 -NCT03862755 -NCT03862950 -NCT03862976 -NCT03862989 -NCT03863080 -NCT03863093 -NCT03863132 -NCT03863210 -NCT03863340 -NCT03863418 -NCT03863496 -NCT03863626 -NCT03863717 -NCT03863730 -NCT03863743 -NCT03863769 -NCT03863847 -NCT03863873 -NCT03863977 -NCT03864172 -NCT03864198 -NCT03864328 -NCT03864406 -NCT03864419 -NCT03864523 -NCT03864562 -NCT03864614 -NCT03865030 -NCT03865056 -NCT03865121 -NCT03865589 -NCT03865641 -NCT03865797 -NCT03865888 -NCT03865966 -NCT03865992 -NCT03866161 -NCT03866187 -NCT03866200 -NCT03866213 -NCT03866291 -NCT03866382 -NCT03866447 -NCT03866590 -NCT03866603 -NCT03866694 -NCT03867214 -NCT03867240 -NCT03867331 -NCT03867396 -NCT03867435 -NCT03867487 -NCT03867526 -NCT03867591 -NCT03867630 -NCT03867708 -NCT03867747 -NCT03867786 -NCT03868267 -NCT03868293 -NCT03868332 -NCT03868358 -NCT03868397 -NCT03868449 -NCT03868462 -NCT03868475 -NCT03868553 -NCT03868579 -NCT03868657 -NCT03868683 -NCT03868852 -NCT03868891 -NCT03869268 -NCT03869437 -NCT03869515 -NCT03869632 -NCT03869788 -NCT03869944 -NCT03870035 -NCT03870308 -NCT03870321 -NCT03870347 -NCT03870438 -NCT03870620 -NCT03870763 -NCT03870789 -NCT03870828 -NCT03870854 -NCT03870867 -NCT03870945 -NCT03871127 -NCT03871192 -NCT03871322 -NCT03871335 -NCT03871426 -NCT03871699 -NCT03871725 -NCT03871842 -NCT03871868 -NCT03871933 -NCT03872102 -NCT03872115 -NCT03872375 -NCT03872531 -NCT03872583 -NCT03872778 -NCT03872856 -NCT03872908 -NCT03873116 -NCT03873168 -NCT03873285 -NCT03873571 -NCT03873584 -NCT03873649 -NCT03873662 -NCT03873792 -NCT03873974 -NCT03874013 -NCT03874182 -NCT03874364 -NCT03874416 -NCT03874442 -NCT03874624 -NCT03874676 -NCT03874936 -NCT03874962 -NCT03874975 -NCT03875027 -NCT03875040 -NCT03875105 -NCT03875300 -NCT03875326 -NCT03875339 -NCT03875365 -NCT03875404 -NCT03875495 -NCT03875534 -NCT03875560 -NCT03875638 -NCT03875833 -NCT03875924 -NCT03876093 -NCT03876145 -NCT03876210 -NCT03876236 -NCT03876249 -NCT03876301 -NCT03876327 -NCT03876509 -NCT03876522 -NCT03876613 -NCT03876652 -NCT03876678 -NCT03876847 -NCT03876951 -NCT03876977 -NCT03877068 -NCT03877211 -NCT03877302 -NCT03877315 -NCT03877614 -NCT03877718 -NCT03877731 -NCT03877939 -NCT03878108 -NCT03878251 -NCT03878316 -NCT03878446 -NCT03878459 -NCT03878524 -NCT03878732 -NCT03878771 -NCT03878875 -NCT03878940 -NCT03878979 -NCT03879044 -NCT03879135 -NCT03879213 -NCT03879369 -NCT03879460 -NCT03879551 -NCT03879577 -NCT03880097 -NCT03880240 -NCT03880279 -NCT03880292 -NCT03880305 -NCT03880370 -NCT03880409 -NCT03880513 -NCT03880539 -NCT03880565 -NCT03880708 -NCT03880903 -NCT03881046 -NCT03881059 -NCT03881124 -NCT03881189 -NCT03881228 -NCT03881254 -NCT03881267 -NCT03881319 -NCT03881345 -NCT03881514 -NCT03881657 -NCT03881787 -NCT03881839 -NCT03882034 -NCT03882060 -NCT03882307 -NCT03882385 -NCT03882411 -NCT03882528 -NCT03882606 -NCT03882801 -NCT03882853 -NCT03882970 -NCT03883048 -NCT03883152 -NCT03883217 -NCT03883243 -NCT03883269 -NCT03883464 -NCT03883490 -NCT03883568 -NCT03883698 -NCT03883750 -NCT03883815 -NCT03883945 -NCT03883958 -NCT03884010 -NCT03884127 -NCT03884140 -NCT03884348 -NCT03884426 -NCT03884582 -NCT03884777 -NCT03884816 -NCT03884985 -NCT03884998 -NCT03885076 -NCT03885154 -NCT03885232 -NCT03885297 -NCT03885557 -NCT03885570 -NCT03885726 -NCT03885791 -NCT03885817 -NCT03885908 -NCT03886220 -NCT03886532 -NCT03886740 -NCT03886844 -NCT03886896 -NCT03887013 -NCT03887195 -NCT03887364 -NCT03887455 -NCT03887663 -NCT03887754 -NCT03887910 -NCT03887936 -NCT03887962 -NCT03887975 -NCT03888274 -NCT03888287 -NCT03888495 -NCT03888664 -NCT03888846 -NCT03889002 -NCT03889106 -NCT03889158 -NCT03889223 -NCT03889249 -NCT03889743 -NCT03889769 -NCT03889821 -NCT03889990 -NCT03890042 -NCT03890211 -NCT03890224 -NCT03890237 -NCT03890367 -NCT03890679 -NCT03890757 -NCT03890939 -NCT03891069 -NCT03891108 -NCT03891147 -NCT03891394 -NCT03891433 -NCT03891667 -NCT03891719 -NCT03891732 -NCT03891784 -NCT03891823 -NCT03891836 -NCT03891901 -NCT03892044 -NCT03892187 -NCT03892213 -NCT03892265 -NCT03892538 -NCT03892655 -NCT03892668 -NCT03892681 -NCT03892785 -NCT03892798 -NCT03892980 -NCT03893058 -NCT03893136 -NCT03893162 -NCT03893292 -NCT03893370 -NCT03893396 -NCT03893643 -NCT03893929 -NCT03893981 -NCT03894267 -NCT03894293 -NCT03894709 -NCT03894865 -NCT03894982 -NCT03895281 -NCT03895294 -NCT03895450 -NCT03895593 -NCT03895710 -NCT03895905 -NCT03895996 -NCT03896035 -NCT03896204 -NCT03896230 -NCT03896373 -NCT03896516 -NCT03896542 -NCT03896568 -NCT03896659 -NCT03896672 -NCT03896685 -NCT03896737 -NCT03896750 -NCT03896867 -NCT03896997 -NCT03897049 -NCT03897218 -NCT03897244 -NCT03897257 -NCT03897439 -NCT03897504 -NCT03897595 -NCT03897634 -NCT03897647 -NCT03897686 -NCT03897829 -NCT03897959 -NCT03898167 -NCT03898245 -NCT03898284 -NCT03898388 -NCT03898583 -NCT03898622 -NCT03898648 -NCT03898661 -NCT03898726 -NCT03898856 -NCT03898973 -NCT03899129 -NCT03899246 -NCT03899272 -NCT03899298 -NCT03899337 -NCT03899428 -NCT03899506 -NCT03899766 -NCT03899792 -NCT03900312 -NCT03900325 -NCT03900468 -NCT03900520 -NCT03900585 -NCT03900624 -NCT03900650 -NCT03900676 -NCT03900819 -NCT03900845 -NCT03900871 -NCT03900936 -NCT03900975 -NCT03901183 -NCT03901261 -NCT03901365 -NCT03901417 -NCT03901495 -NCT03901664 -NCT03901703 -NCT03901755 -NCT03901781 -NCT03902080 -NCT03902223 -NCT03902262 -NCT03902340 -NCT03902379 -NCT03902496 -NCT03902678 -NCT03902730 -NCT03902886 -NCT03903029 -NCT03903146 -NCT03903393 -NCT03903471 -NCT03903562 -NCT03903614 -NCT03903666 -NCT03903744 -NCT03903770 -NCT03903783 -NCT03903952 -NCT03904004 -NCT03904095 -NCT03904199 -NCT03904355 -NCT03904368 -NCT03904485 -NCT03904511 -NCT03904589 -NCT03904602 -NCT03904810 -NCT03904888 -NCT03904966 -NCT03905135 -NCT03905161 -NCT03905369 -NCT03905434 -NCT03905460 -NCT03905473 -NCT03905512 -NCT03905525 -NCT03905603 -NCT03905681 -NCT03905694 -NCT03905824 -NCT03905941 -NCT03905954 -NCT03906006 -NCT03906045 -NCT03906201 -NCT03906214 -NCT03906227 -NCT03906292 -NCT03906448 -NCT03906539 -NCT03906682 -NCT03906708 -NCT03906812 -NCT03907007 -NCT03907098 -NCT03907358 -NCT03907384 -NCT03907488 -NCT03907514 -NCT03907566 -NCT03907670 -NCT03907748 -NCT03907787 -NCT03907852 -NCT03907865 -NCT03908099 -NCT03908164 -NCT03908177 -NCT03908255 -NCT03908320 -NCT03908372 -NCT03908424 -NCT03908632 -NCT03908697 -NCT03908827 -NCT03908944 -NCT03908983 -NCT03909204 -NCT03909282 -NCT03909321 -NCT03909438 -NCT03909477 -NCT03909529 -NCT03909607 -NCT03909802 -NCT03909880 -NCT03910101 -NCT03910231 -NCT03910244 -NCT03910257 -NCT03910335 -NCT03910374 -NCT03910413 -NCT03910426 -NCT03910452 -NCT03910543 -NCT03910582 -NCT03910621 -NCT03910647 -NCT03910738 -NCT03910764 -NCT03910894 -NCT03910985 -NCT03911037 -NCT03911115 -NCT03911271 -NCT03911336 -NCT03911531 -NCT03911557 -NCT03911791 -NCT03911817 -NCT03912142 -NCT03912311 -NCT03912454 -NCT03912480 -NCT03912519 -NCT03912558 -NCT03912571 -NCT03912623 -NCT03912636 -NCT03912818 -NCT03912935 -NCT03912948 -NCT03913117 -NCT03913286 -NCT03913416 -NCT03913429 -NCT03913559 -NCT03914014 -NCT03914066 -NCT03914092 -NCT03914209 -NCT03914248 -NCT03914300 -NCT03914378 -NCT03914586 -NCT03914625 -NCT03914638 -NCT03914716 -NCT03914846 -NCT03915054 -NCT03915106 -NCT03915249 -NCT03915418 -NCT03915457 -NCT03915626 -NCT03915652 -NCT03915704 -NCT03915730 -NCT03915873 -NCT03915912 -NCT03916029 -NCT03916289 -NCT03916302 -NCT03916354 -NCT03916458 -NCT03916536 -NCT03916601 -NCT03916705 -NCT03916718 -NCT03916744 -NCT03916770 -NCT03916978 -NCT03917082 -NCT03917173 -NCT03917654 -NCT03917693 -NCT03917719 -NCT03917992 -NCT03918005 -NCT03918109 -NCT03918135 -NCT03918174 -NCT03918226 -NCT03918330 -NCT03918356 -NCT03918668 -NCT03918772 -NCT03918915 -NCT03919136 -NCT03919162 -NCT03919188 -NCT03919474 -NCT03919630 -NCT03919734 -NCT03919773 -NCT03920072 -NCT03920150 -NCT03920189 -NCT03920202 -NCT03920293 -NCT03920397 -NCT03920449 -NCT03920514 -NCT03920527 -NCT03920657 -NCT03920683 -NCT03920800 -NCT03920826 -NCT03921034 -NCT03921294 -NCT03921372 -NCT03921554 -NCT03921710 -NCT03921749 -NCT03921801 -NCT03921814 -NCT03921827 -NCT03921931 -NCT03921983 -NCT03922165 -NCT03922295 -NCT03922308 -NCT03922321 -NCT03922438 -NCT03922490 -NCT03922841 -NCT03922867 -NCT03923062 -NCT03923153 -NCT03923218 -NCT03923322 -NCT03923374 -NCT03923569 -NCT03923673 -NCT03923686 -NCT03923803 -NCT03924037 -NCT03924089 -NCT03924206 -NCT03924232 -NCT03924258 -NCT03924271 -NCT03924414 -NCT03924583 -NCT03924843 -NCT03924895 -NCT03924947 -NCT03924999 -NCT03925012 -NCT03925168 -NCT03925233 -NCT03925298 -NCT03925454 -NCT03925467 -NCT03925610 -NCT03925636 -NCT03925688 -NCT03925727 -NCT03925909 -NCT03926286 -NCT03926299 -NCT03926351 -NCT03926468 -NCT03926520 -NCT03926559 -NCT03926832 -NCT03926845 -NCT03926923 -NCT03927040 -NCT03927339 -NCT03927664 -NCT03927885 -NCT03928158 -NCT03928379 -NCT03928470 -NCT03928483 -NCT03928730 -NCT03928951 -NCT03929029 -NCT03929042 -NCT03929120 -NCT03929159 -NCT03929198 -NCT03929263 -NCT03929302 -NCT03929341 -NCT03929354 -NCT03929432 -NCT03929510 -NCT03929757 -NCT03929809 -NCT03930004 -NCT03930277 -NCT03930433 -NCT03930446 -NCT03930576 -NCT03930745 -NCT03931018 -NCT03931083 -NCT03931161 -NCT03931200 -NCT03931395 -NCT03931408 -NCT03931538 -NCT03931551 -NCT03931577 -NCT03931642 -NCT03931941 -NCT03932201 -NCT03932214 -NCT03932331 -NCT03932461 -NCT03932656 -NCT03932877 -NCT03932942 -NCT03932968 -NCT03932981 -NCT03933007 -NCT03933124 -NCT03933150 -NCT03933241 -NCT03933358 -NCT03933384 -NCT03933397 -NCT03933423 -NCT03933605 -NCT03933618 -NCT03933683 -NCT03933969 -NCT03934047 -NCT03934073 -NCT03934203 -NCT03934502 -NCT03934736 -NCT03934775 -NCT03934788 -NCT03934866 -NCT03935048 -NCT03935100 -NCT03935178 -NCT03935217 -NCT03935295 -NCT03935477 -NCT03935503 -NCT03935516 -NCT03935581 -NCT03935633 -NCT03935646 -NCT03935880 -NCT03935906 -NCT03935984 -NCT03936101 -NCT03936244 -NCT03936283 -NCT03936517 -NCT03936543 -NCT03936660 -NCT03936699 -NCT03936751 -NCT03936790 -NCT03936829 -NCT03937102 -NCT03937193 -NCT03937232 -NCT03937323 -NCT03937479 -NCT03937518 -NCT03937635 -NCT03937700 -NCT03937739 -NCT03937791 -NCT03937817 -NCT03937895 -NCT03937947 -NCT03937960 -NCT03937999 -NCT03938064 -NCT03938168 -NCT03938194 -NCT03938220 -NCT03938545 -NCT03938792 -NCT03938896 -NCT03939000 -NCT03939013 -NCT03939169 -NCT03939247 -NCT03939351 -NCT03939598 -NCT03939650 -NCT03940027 -NCT03940040 -NCT03940066 -NCT03940105 -NCT03940209 -NCT03940248 -NCT03940287 -NCT03940313 -NCT03940365 -NCT03940482 -NCT03940495 -NCT03940625 -NCT03940807 -NCT03941184 -NCT03941301 -NCT03941379 -NCT03941405 -NCT03941613 -NCT03941730 -NCT03941860 -NCT03941925 -NCT03942263 -NCT03942315 -NCT03942523 -NCT03942562 -NCT03942692 -NCT03942718 -NCT03942757 -NCT03942861 -NCT03942887 -NCT03942965 -NCT03943069 -NCT03943134 -NCT03943173 -NCT03943251 -NCT03943277 -NCT03943303 -NCT03943394 -NCT03943420 -NCT03943680 -NCT03943992 -NCT03944005 -NCT03944096 -NCT03944122 -NCT03944148 -NCT03944226 -NCT03944278 -NCT03944382 -NCT03944551 -NCT03944720 -NCT03944876 -NCT03944928 -NCT03945110 -NCT03945266 -NCT03945461 -NCT03945474 -NCT03945487 -NCT03945526 -NCT03945552 -NCT03945851 -NCT03946072 -NCT03946553 -NCT03946618 -NCT03946683 -NCT03946709 -NCT03946722 -NCT03946826 -NCT03947112 -NCT03947138 -NCT03947242 -NCT03947320 -NCT03947372 -NCT03947567 -NCT03947723 -NCT03947736 -NCT03947866 -NCT03948074 -NCT03948113 -NCT03948295 -NCT03948386 -NCT03948399 -NCT03948438 -NCT03948620 -NCT03948646 -NCT03948659 -NCT03948802 -NCT03948906 -NCT03948997 -NCT03949101 -NCT03949166 -NCT03949179 -NCT03949374 -NCT03949647 -NCT03949660 -NCT03949777 -NCT03949933 -NCT03950531 -NCT03950583 -NCT03950609 -NCT03950648 -NCT03950908 -NCT03951129 -NCT03951298 -NCT03951324 -NCT03951467 -NCT03951584 -NCT03951649 -NCT03952117 -NCT03952130 -NCT03952286 -NCT03952442 -NCT03952650 -NCT03952741 -NCT03952845 -NCT03953053 -NCT03953118 -NCT03953183 -NCT03953261 -NCT03953469 -NCT03953625 -NCT03953703 -NCT03953755 -NCT03953794 -NCT03954145 -NCT03954210 -NCT03954327 -NCT03954444 -NCT03954522 -NCT03954561 -NCT03954782 -NCT03954821 -NCT03955055 -NCT03955081 -NCT03955120 -NCT03955146 -NCT03955458 -NCT03955484 -NCT03955588 -NCT03955653 -NCT03955887 -NCT03955913 -NCT03956069 -NCT03956160 -NCT03956212 -NCT03956238 -NCT03956303 -NCT03956316 -NCT03956368 -NCT03956446 -NCT03956485 -NCT03956550 -NCT03956810 -NCT03956823 -NCT03956888 -NCT03956979 -NCT03957200 -NCT03957408 -NCT03957421 -NCT03957577 -NCT03957642 -NCT03957668 -NCT03957720 -NCT03957759 -NCT03957811 -NCT03957837 -NCT03957863 -NCT03957967 -NCT03958006 -NCT03958058 -NCT03958175 -NCT03958227 -NCT03958305 -NCT03958383 -NCT03958435 -NCT03958487 -NCT03958656 -NCT03958773 -NCT03958877 -NCT03959020 -NCT03959059 -NCT03959085 -NCT03959137 -NCT03959150 -NCT03959319 -NCT03959358 -NCT03959410 -NCT03959553 -NCT03959605 -NCT03959631 -NCT03959644 -NCT03959748 -NCT03959852 -NCT03959917 -NCT03959956 -NCT03959982 -NCT03960099 -NCT03960320 -NCT03960333 -NCT03960450 -NCT03960554 -NCT03960853 -NCT03960892 -NCT03961152 -NCT03961178 -NCT03961282 -NCT03961555 -NCT03961659 -NCT03961750 -NCT03961763 -NCT03962023 -NCT03962634 -NCT03962686 -NCT03962829 -NCT03963115 -NCT03963128 -NCT03963375 -NCT03963453 -NCT03963466 -NCT03963635 -NCT03963648 -NCT03963752 -NCT03963765 -NCT03963804 -NCT03963999 -NCT03964285 -NCT03964324 -NCT03964441 -NCT03964688 -NCT03964714 -NCT03964779 -NCT03964818 -NCT03964844 -NCT03965091 -NCT03965273 -NCT03965286 -NCT03965637 -NCT03965676 -NCT03965767 -NCT03965819 -NCT03966014 -NCT03966066 -NCT03966248 -NCT03966482 -NCT03967041 -NCT03967145 -NCT03967613 -NCT03967743 -NCT03967886 -NCT03967925 -NCT03967990 -NCT03968146 -NCT03968276 -NCT03968328 -NCT03968367 -NCT03968601 -NCT03968614 -NCT03968692 -NCT03968796 -NCT03968913 -NCT03968978 -NCT03969095 -NCT03969277 -NCT03969316 -NCT03969459 -NCT03969511 -NCT03969732 -NCT03969979 -NCT03970018 -NCT03970200 -NCT03970551 -NCT03970564 -NCT03970668 -NCT03970694 -NCT03970733 -NCT03970967 -NCT03970993 -NCT03971006 -NCT03971032 -NCT03971292 -NCT03971422 -NCT03971448 -NCT03971500 -NCT03971526 -NCT03971539 -NCT03971643 -NCT03971786 -NCT03971981 -NCT03972033 -NCT03972059 -NCT03972098 -NCT03972241 -NCT03972254 -NCT03972332 -NCT03972358 -NCT03972605 -NCT03972683 -NCT03972813 -NCT03972917 -NCT03973086 -NCT03973138 -NCT03973255 -NCT03973268 -NCT03973450 -NCT03973463 -NCT03973528 -NCT03973619 -NCT03973658 -NCT03973697 -NCT03973788 -NCT03973905 -NCT03973918 -NCT03973931 -NCT03973957 -NCT03974009 -NCT03974087 -NCT03974100 -NCT03974191 -NCT03974412 -NCT03974451 -NCT03974464 -NCT03974789 -NCT03974841 -NCT03974867 -NCT03975101 -NCT03975231 -NCT03975309 -NCT03975413 -NCT03975465 -NCT03975478 -NCT03975608 -NCT03975660 -NCT03975725 -NCT03975790 -NCT03975842 -NCT03975855 -NCT03975998 -NCT03976349 -NCT03976609 -NCT03976739 -NCT03976843 -NCT03976856 -NCT03977025 -NCT03977155 -NCT03977207 -NCT03977220 -NCT03977389 -NCT03977415 -NCT03977532 -NCT03977662 -NCT03977792 -NCT03977948 -NCT03978195 -NCT03978273 -NCT03978546 -NCT03978897 -NCT03978923 -NCT03979157 -NCT03979274 -NCT03979313 -NCT03979326 -NCT03979456 -NCT03979508 -NCT03979521 -NCT03979638 -NCT03979664 -NCT03979677 -NCT03979924 -NCT03979937 -NCT03980002 -NCT03980015 -NCT03980080 -NCT03980145 -NCT03980327 -NCT03980340 -NCT03980457 -NCT03980717 -NCT03980743 -NCT03980964 -NCT03981159 -NCT03981276 -NCT03981315 -NCT03981328 -NCT03981406 -NCT03981432 -NCT03981536 -NCT03981562 -NCT03981614 -NCT03981705 -NCT03981744 -NCT03981874 -NCT03981978 -NCT03982017 -NCT03982420 -NCT03982446 -NCT03982472 -NCT03982511 -NCT03982628 -NCT03983109 -NCT03983122 -NCT03983161 -NCT03983174 -NCT03983434 -NCT03983538 -NCT03983564 -NCT03983629 -NCT03983746 -NCT03984006 -NCT03984045 -NCT03984149 -NCT03984253 -NCT03984370 -NCT03984448 -NCT03984604 -NCT03984643 -NCT03984695 -NCT03984721 -NCT03984825 -NCT03984890 -NCT03984903 -NCT03984955 -NCT03985033 -NCT03985475 -NCT03985657 -NCT03985748 -NCT03985774 -NCT03985787 -NCT03985891 -NCT03986021 -NCT03986216 -NCT03986255 -NCT03986281 -NCT03986554 -NCT03986580 -NCT03986684 -NCT03986775 -NCT03987022 -NCT03987126 -NCT03987152 -NCT03987165 -NCT03987269 -NCT03987399 -NCT03987438 -NCT03987503 -NCT03987737 -NCT03987854 -NCT03987880 -NCT03987893 -NCT03987971 -NCT03987984 -NCT03988023 -NCT03988088 -NCT03988296 -NCT03988374 -NCT03988504 -NCT03988517 -NCT03988660 -NCT03988712 -NCT03988764 -NCT03988803 -NCT03988816 -NCT03988855 -NCT03988868 -NCT03989193 -NCT03989544 -NCT03989622 -NCT03989752 -NCT03989869 -NCT03989947 -NCT03989973 -NCT03989999 -NCT03990090 -NCT03990181 -NCT03990220 -NCT03990402 -NCT03990506 -NCT03991065 -NCT03991169 -NCT03991247 -NCT03991286 -NCT03991429 -NCT03991520 -NCT03991598 -NCT03991663 -NCT03991702 -NCT03991793 -NCT03991845 -NCT03991897 -NCT03991910 -NCT03992144 -NCT03992170 -NCT03992209 -NCT03992521 -NCT03992573 -NCT03992625 -NCT03992664 -NCT03992677 -NCT03993015 -NCT03993223 -NCT03993301 -NCT03993314 -NCT03993613 -NCT03993691 -NCT03993821 -NCT03993860 -NCT03993899 -NCT03993925 -NCT03994068 -NCT03994094 -NCT03994133 -NCT03994172 -NCT03994185 -NCT03994263 -NCT03994315 -NCT03994367 -NCT03994406 -NCT03994588 -NCT03994848 -NCT03995017 -NCT03995147 -NCT03995511 -NCT03995602 -NCT03995641 -NCT03995823 -NCT03995836 -NCT03995953 -NCT03996057 -NCT03996148 -NCT03996161 -NCT03996291 -NCT03996356 -NCT03996395 -NCT03996460 -NCT03996486 -NCT03996590 -NCT03996668 -NCT03996928 -NCT03996954 -NCT03997201 -NCT03997214 -NCT03997396 -NCT03997513 -NCT03997669 -NCT03997682 -NCT03997760 -NCT03997786 -NCT03997890 -NCT03997903 -NCT03997942 -NCT03997994 -NCT03998020 -NCT03998098 -NCT03998150 -NCT03998254 -NCT03998293 -NCT03998358 -NCT03998514 -NCT03998553 -NCT03998566 -NCT03998722 -NCT03998761 -NCT03998891 -NCT03998930 -NCT03998969 -NCT03999008 -NCT03999034 -NCT03999164 -NCT03999190 -NCT03999203 -NCT03999333 -NCT03999437 -NCT03999502 -NCT03999671 -NCT03999775 -NCT03999840 -NCT04000165 -NCT04000204 -NCT04000269 -NCT04000373 -NCT04000386 -NCT04000412 -NCT04000451 -NCT04000464 -NCT04000477 -NCT04000490 -NCT04000503 -NCT04000555 -NCT04000711 -NCT04000763 -NCT04001400 -NCT04001582 -NCT04001842 -NCT04001933 -NCT04002024 -NCT04002089 -NCT04002219 -NCT04002271 -NCT04002362 -NCT04002596 -NCT04002661 -NCT04002674 -NCT04002817 -NCT04002947 -NCT04003077 -NCT04003233 -NCT04003363 -NCT04003415 -NCT04003558 -NCT04003597 -NCT04003623 -NCT04003649 -NCT04003662 -NCT04003701 -NCT04003818 -NCT04003844 -NCT04003935 -NCT04004026 -NCT04004104 -NCT04004117 -NCT04004273 -NCT04004338 -NCT04004416 -NCT04004468 -NCT04004507 -NCT04004702 -NCT04004767 -NCT04004897 -NCT04004962 -NCT04004975 -NCT04005040 -NCT04005209 -NCT04005222 -NCT04005235 -NCT04005625 -NCT04005638 -NCT04005651 -NCT04006067 -NCT04006132 -NCT04006223 -NCT04006249 -NCT04006314 -NCT04006405 -NCT04006795 -NCT04006834 -NCT04006990 -NCT04007055 -NCT04007276 -NCT04007432 -NCT04007471 -NCT04007497 -NCT04007614 -NCT04007757 -NCT04007809 -NCT04007874 -NCT04008017 -NCT04008069 -NCT04008134 -NCT04008264 -NCT04008277 -NCT04008368 -NCT04008381 -NCT04008706 -NCT04008732 -NCT04008940 -NCT04008966 -NCT04009005 -NCT04009070 -NCT04009096 -NCT04009213 -NCT04009226 -NCT04009421 -NCT04009434 -NCT04009538 -NCT04009837 -NCT04009967 -NCT04010006 -NCT04010097 -NCT04010214 -NCT04010227 -NCT04010305 -NCT04010383 -NCT04010409 -NCT04010461 -NCT04010487 -NCT04010500 -NCT04010799 -NCT04010825 -NCT04010955 -NCT04010994 -NCT04011059 -NCT04011319 -NCT04011332 -NCT04011592 -NCT04011605 -NCT04011631 -NCT04011696 -NCT04011878 -NCT04011930 -NCT04011982 -NCT04012138 -NCT04012294 -NCT04012346 -NCT04012502 -NCT04012528 -NCT04012554 -NCT04012658 -NCT04012671 -NCT04012723 -NCT04012801 -NCT04012905 -NCT04012918 -NCT04012970 -NCT04013126 -NCT04013139 -NCT04013256 -NCT04013542 -NCT04013750 -NCT04013802 -NCT04013984 -NCT04014179 -NCT04014244 -NCT04014985 -NCT04015037 -NCT04015063 -NCT04015206 -NCT04015336 -NCT04015375 -NCT04015388 -NCT04015492 -NCT04015544 -NCT04015791 -NCT04015856 -NCT04015986 -NCT04015999 -NCT04016129 -NCT04016168 -NCT04016181 -NCT04016350 -NCT04016389 -NCT04016571 -NCT04016584 -NCT04016623 -NCT04016779 -NCT04016974 -NCT04017286 -NCT04017650 -NCT04017754 -NCT04017936 -NCT04018118 -NCT04018131 -NCT04018287 -NCT04018547 -NCT04018625 -NCT04018859 -NCT04018898 -NCT04018963 -NCT04019054 -NCT04019197 -NCT04019223 -NCT04019379 -NCT04019535 -NCT04019652 -NCT04019678 -NCT04019730 -NCT04019912 -NCT04019964 -NCT04019990 -NCT04020133 -NCT04020172 -NCT04020198 -NCT04020276 -NCT04020380 -NCT04020406 -NCT04020744 -NCT04020835 -NCT04020848 -NCT04020913 -NCT04021160 -NCT04021186 -NCT04021212 -NCT04021316 -NCT04021498 -NCT04021524 -NCT04021537 -NCT04021576 -NCT04021589 -NCT04021615 -NCT04021654 -NCT04021706 -NCT04021784 -NCT04021914 -NCT04021927 -NCT04022057 -NCT04022187 -NCT04022226 -NCT04022330 -NCT04022460 -NCT04022551 -NCT04022733 -NCT04022798 -NCT04022837 -NCT04023019 -NCT04023084 -NCT04023149 -NCT04023201 -NCT04023279 -NCT04023409 -NCT04023422 -NCT04023448 -NCT04023617 -NCT04023825 -NCT04023864 -NCT04023890 -NCT04024072 -NCT04024085 -NCT04024202 -NCT04024215 -NCT04024228 -NCT04024319 -NCT04024332 -NCT04024449 -NCT04024462 -NCT04024566 -NCT04024735 -NCT04024774 -NCT04024826 -NCT04024839 -NCT04024930 -NCT04025021 -NCT04025164 -NCT04025242 -NCT04025281 -NCT04025320 -NCT04025372 -NCT04025567 -NCT04025580 -NCT04025645 -NCT04025710 -NCT04025801 -NCT04025840 -NCT04025918 -NCT04025944 -NCT04026035 -NCT04026113 -NCT04026191 -NCT04026204 -NCT04026360 -NCT04026516 -NCT04026529 -NCT04026542 -NCT04026620 -NCT04026763 -NCT04026789 -NCT04026958 -NCT04026984 -NCT04027049 -NCT04027101 -NCT04027322 -NCT04027348 -NCT04027777 -NCT04027803 -NCT04027894 -NCT04027946 -NCT04027985 -NCT04028011 -NCT04028115 -NCT04028180 -NCT04028375 -NCT04028453 -NCT04028466 -NCT04028479 -NCT04028518 -NCT04028531 -NCT04028596 -NCT04029077 -NCT04029272 -NCT04029337 -NCT04029363 -NCT04029441 -NCT04029727 -NCT04029766 -NCT04029792 -NCT04030052 -NCT04030338 -NCT04030468 -NCT04030741 -NCT04030819 -NCT04030884 -NCT04030975 -NCT04031092 -NCT04031235 -NCT04031261 -NCT04031287 -NCT04031339 -NCT04031521 -NCT04031560 -NCT04031638 -NCT04031729 -NCT04031781 -NCT04031885 -NCT04032067 -NCT04032080 -NCT04032132 -NCT04032158 -NCT04032236 -NCT04032262 -NCT04032470 -NCT04032691 -NCT04032769 -NCT04032847 -NCT04032860 -NCT04032951 -NCT04032990 -NCT04033029 -NCT04033094 -NCT04033120 -NCT04033146 -NCT04033172 -NCT04033198 -NCT04033406 -NCT04033549 -NCT04033744 -NCT04033822 -NCT04033874 -NCT04033887 -NCT04034004 -NCT04034043 -NCT04034199 -NCT04034238 -NCT04034251 -NCT04034264 -NCT04034394 -NCT04034472 -NCT04034550 -NCT04034641 -NCT04034940 -NCT04035096 -NCT04035148 -NCT04035213 -NCT04035252 -NCT04035265 -NCT04035291 -NCT04035421 -NCT04035460 -NCT04035616 -NCT04035707 -NCT04035811 -NCT04035837 -NCT04035954 -NCT04035967 -NCT04035980 -NCT04036149 -NCT04036409 -NCT04036565 -NCT04036604 -NCT04036656 -NCT04036721 -NCT04036760 -NCT04036929 -NCT04037267 -NCT04037384 -NCT04037423 -NCT04037488 -NCT04037553 -NCT04037579 -NCT04037618 -NCT04037748 -NCT04037800 -NCT04037813 -NCT04037891 -NCT04037995 -NCT04038138 -NCT04038229 -NCT04038307 -NCT04038346 -NCT04038372 -NCT04038450 -NCT04038463 -NCT04038554 -NCT04038801 -NCT04038879 -NCT04039022 -NCT04039126 -NCT04039152 -NCT04039191 -NCT04039399 -NCT04039451 -NCT04039750 -NCT04039828 -NCT04039893 -NCT04040036 -NCT04040166 -NCT04040179 -NCT04040218 -NCT04040426 -NCT04040634 -NCT04040673 -NCT04040790 -NCT04040855 -NCT04040894 -NCT04041505 -NCT04041674 -NCT04041700 -NCT04041726 -NCT04041882 -NCT04041895 -NCT04042090 -NCT04042259 -NCT04042467 -NCT04042519 -NCT04042532 -NCT04042753 -NCT04042870 -NCT04042922 -NCT04042948 -NCT04043117 -NCT04043169 -NCT04043260 -NCT04043312 -NCT04043390 -NCT04043416 -NCT04043520 -NCT04043715 -NCT04043832 -NCT04043923 -NCT04044131 -NCT04044248 -NCT04044352 -NCT04044430 -NCT04044547 -NCT04044573 -NCT04044651 -NCT04044716 -NCT04044742 -NCT04044755 -NCT04044833 -NCT04044885 -NCT04045015 -NCT04045067 -NCT04045080 -NCT04045119 -NCT04045158 -NCT04045314 -NCT04045444 -NCT04045652 -NCT04045678 -NCT04045821 -NCT04045860 -NCT04045951 -NCT04046003 -NCT04046055 -NCT04046159 -NCT04046172 -NCT04046328 -NCT04046601 -NCT04046614 -NCT04046848 -NCT04047004 -NCT04047095 -NCT04047134 -NCT04047225 -NCT04047303 -NCT04047316 -NCT04047628 -NCT04047680 -NCT04047706 -NCT04047732 -NCT04047758 -NCT04047784 -NCT04047966 -NCT04047979 -NCT04048031 -NCT04048083 -NCT04048148 -NCT04048187 -NCT04048291 -NCT04048343 -NCT04048538 -NCT04048785 -NCT04048889 -NCT04048941 -NCT04048954 -NCT04049058 -NCT04049253 -NCT04049331 -NCT04049370 -NCT04049448 -NCT04049604 -NCT04050111 -NCT04050176 -NCT04050215 -NCT04050514 -NCT04050553 -NCT04050579 -NCT04050774 -NCT04050787 -NCT04050852 -NCT04050930 -NCT04051060 -NCT04051112 -NCT04051125 -NCT04051203 -NCT04051411 -NCT04051658 -NCT04051697 -NCT04051736 -NCT04051931 -NCT04052074 -NCT04052113 -NCT04052308 -NCT04052321 -NCT04052555 -NCT04052607 -NCT04052698 -NCT04052737 -NCT04053010 -NCT04053062 -NCT04053088 -NCT04053166 -NCT04053192 -NCT04053309 -NCT04053426 -NCT04053699 -NCT04053816 -NCT04053868 -NCT04054037 -NCT04054063 -NCT04054206 -NCT04054219 -NCT04054349 -NCT04054453 -NCT04054505 -NCT04054609 -NCT04054687 -NCT04054726 -NCT04054882 -NCT04054960 -NCT04055012 -NCT04055220 -NCT04055441 -NCT04055467 -NCT04055480 -NCT04055584 -NCT04055597 -NCT04055610 -NCT04055675 -NCT04055714 -NCT04055766 -NCT04055818 -NCT04055831 -NCT04056078 -NCT04056117 -NCT04056130 -NCT04056221 -NCT04056247 -NCT04056442 -NCT04056832 -NCT04056845 -NCT04056858 -NCT04057066 -NCT04057183 -NCT04057222 -NCT04057313 -NCT04057638 -NCT04057664 -NCT04057794 -NCT04057807 -NCT04057846 -NCT04057924 -NCT04058015 -NCT04058028 -NCT04058132 -NCT04058158 -NCT04058171 -NCT04058197 -NCT04058223 -NCT04058327 -NCT04058353 -NCT04058366 -NCT04058379 -NCT04058509 -NCT04058522 -NCT04058561 -NCT04059159 -NCT04059172 -NCT04059601 -NCT04059679 -NCT04059822 -NCT04059900 -NCT04060043 -NCT04060121 -NCT04060160 -NCT04060238 -NCT04060251 -NCT04060264 -NCT04060303 -NCT04060368 -NCT04060472 -NCT04060550 -NCT04060589 -NCT04060732 -NCT04060836 -NCT04060888 -NCT04061109 -NCT04061135 -NCT04061161 -NCT04061187 -NCT04061213 -NCT04061226 -NCT04061291 -NCT04061343 -NCT04061395 -NCT04061707 -NCT04061733 -NCT04061772 -NCT04061785 -NCT04061811 -NCT04061824 -NCT04061980 -NCT04062006 -NCT04062110 -NCT04062201 -NCT04062279 -NCT04062331 -NCT04062344 -NCT04062526 -NCT04062617 -NCT04062747 -NCT04062877 -NCT04062929 -NCT04063020 -NCT04063631 -NCT04063722 -NCT04063839 -NCT04063852 -NCT04063865 -NCT04063891 -NCT04063956 -NCT04063982 -NCT04063995 -NCT04064021 -NCT04064047 -NCT04064281 -NCT04064294 -NCT04064307 -NCT04064411 -NCT04064437 -NCT04064567 -NCT04064736 -NCT04064788 -NCT04064840 -NCT04064957 -NCT04064983 -NCT04065022 -NCT04065321 -NCT04065516 -NCT04065802 -NCT04065893 -NCT04066023 -NCT04066166 -NCT04066205 -NCT04066530 -NCT04066569 -NCT04066621 -NCT04066634 -NCT04066647 -NCT04066777 -NCT04066868 -NCT04067180 -NCT04067427 -NCT04067453 -NCT04067492 -NCT04067596 -NCT04067609 -NCT04067622 -NCT04067635 -NCT04067648 -NCT04067973 -NCT04068220 -NCT04068246 -NCT04068376 -NCT04068415 -NCT04068480 -NCT04068506 -NCT04068740 -NCT04068961 -NCT04069052 -NCT04069234 -NCT04069286 -NCT04069325 -NCT04069572 -NCT04069793 -NCT04069819 -NCT04069884 -NCT04069897 -NCT04069975 -NCT04070001 -NCT04070222 -NCT04070300 -NCT04070352 -NCT04070534 -NCT04070781 -NCT04070898 -NCT04071106 -NCT04071223 -NCT04071314 -NCT04071340 -NCT04071353 -NCT04071379 -NCT04071574 -NCT04071626 -NCT04071665 -NCT04071691 -NCT04071847 -NCT04071899 -NCT04071925 -NCT04072146 -NCT04072289 -NCT04072302 -NCT04072367 -NCT04072380 -NCT04072458 -NCT04072640 -NCT04072653 -NCT04072783 -NCT04072796 -NCT04072822 -NCT04072835 -NCT04072874 -NCT04073043 -NCT04073173 -NCT04073212 -NCT04073251 -NCT04073290 -NCT04073329 -NCT04073342 -NCT04073511 -NCT04073706 -NCT04073888 -NCT04073927 -NCT04073940 -NCT04073953 -NCT04074031 -NCT04074239 -NCT04074330 -NCT04074408 -NCT04074421 -NCT04074473 -NCT04074486 -NCT04074512 -NCT04074525 -NCT04074772 -NCT04074824 -NCT04074902 -NCT04074941 -NCT04075097 -NCT04075149 -NCT04075188 -NCT04075253 -NCT04075266 -NCT04075422 -NCT04075539 -NCT04075851 -NCT04075903 -NCT04076111 -NCT04076189 -NCT04076280 -NCT04076332 -NCT04076345 -NCT04076397 -NCT04076462 -NCT04076501 -NCT04076514 -NCT04076605 -NCT04076618 -NCT04076683 -NCT04076696 -NCT04077060 -NCT04077073 -NCT04077086 -NCT04077112 -NCT04077489 -NCT04077749 -NCT04077840 -NCT04077996 -NCT04078139 -NCT04078217 -NCT04078230 -NCT04078386 -NCT04078425 -NCT04078451 -NCT04078542 -NCT04078737 -NCT04078763 -NCT04078841 -NCT04078867 -NCT04078945 -NCT04079179 -NCT04079361 -NCT04079439 -NCT04079504 -NCT04079712 -NCT04079777 -NCT04079868 -NCT04079881 -NCT04079894 -NCT04079959 -NCT04079985 -NCT04080128 -NCT04080141 -NCT04080232 -NCT04080245 -NCT04080258 -NCT04080362 -NCT04080427 -NCT04080570 -NCT04080583 -NCT04080674 -NCT04080687 -NCT04080726 -NCT04080830 -NCT04080921 -NCT04080934 -NCT04080999 -NCT04081103 -NCT04081116 -NCT04081220 -NCT04081402 -NCT04081415 -NCT04081571 -NCT04081701 -NCT04081870 -NCT04082065 -NCT04082143 -NCT04082260 -NCT04082338 -NCT04082676 -NCT04082689 -NCT04082780 -NCT04082832 -NCT04082897 -NCT04083027 -NCT04083092 -NCT04083118 -NCT04083131 -NCT04083274 -NCT04083313 -NCT04083443 -NCT04083495 -NCT04083586 -NCT04083729 -NCT04083768 -NCT04083976 -NCT04084015 -NCT04084067 -NCT04084119 -NCT04084236 -NCT04084665 -NCT04084704 -NCT04084730 -NCT04084912 -NCT04084938 -NCT04085042 -NCT04085055 -NCT04085367 -NCT04085419 -NCT04085471 -NCT04085497 -NCT04085523 -NCT04085705 -NCT04085796 -NCT04085861 -NCT04085952 -NCT04086134 -NCT04086173 -NCT04086199 -NCT04086212 -NCT04086303 -NCT04086316 -NCT04086472 -NCT04086524 -NCT04086589 -NCT04086628 -NCT04086667 -NCT04086732 -NCT04086784 -NCT04087083 -NCT04087096 -NCT04087239 -NCT04087278 -NCT04087330 -NCT04087408 -NCT04087447 -NCT04087564 -NCT04087577 -NCT04087629 -NCT04087642 -NCT04087694 -NCT04087759 -NCT04087785 -NCT04088006 -NCT04088045 -NCT04088058 -NCT04088370 -NCT04088396 -NCT04088409 -NCT04088474 -NCT04088643 -NCT04088838 -NCT04088890 -NCT04088942 -NCT04089007 -NCT04089046 -NCT04089280 -NCT04089475 -NCT04089501 -NCT04089579 -NCT04089631 -NCT04089761 -NCT04089787 -NCT04089982 -NCT04089995 -NCT04090047 -NCT04090125 -NCT04090164 -NCT04090203 -NCT04090346 -NCT04090632 -NCT04090671 -NCT04090710 -NCT04090931 -NCT04091087 -NCT04091243 -NCT04091282 -NCT04091321 -NCT04091334 -NCT04091386 -NCT04091399 -NCT04091516 -NCT04091568 -NCT04091698 -NCT04091763 -NCT04091776 -NCT04091789 -NCT04091867 -NCT04091919 -NCT04091971 -NCT04092010 -NCT04092127 -NCT04092192 -NCT04092231 -NCT04092335 -NCT04092400 -NCT04092556 -NCT04092595 -NCT04092816 -NCT04092959 -NCT04092985 -NCT04093024 -NCT04093102 -NCT04093128 -NCT04093154 -NCT04093206 -NCT04093271 -NCT04093388 -NCT04093414 -NCT04093492 -NCT04093778 -NCT04093791 -NCT04093947 -NCT04094025 -NCT04094116 -NCT04094129 -NCT04094402 -NCT04094480 -NCT04094779 -NCT04094818 -NCT04094896 -NCT04094961 -NCT04095026 -NCT04095169 -NCT04095312 -NCT04095351 -NCT04095416 -NCT04095585 -NCT04095715 -NCT04095780 -NCT04095884 -NCT04096183 -NCT04096560 -NCT04096703 -NCT04096794 -NCT04096807 -NCT04096820 -NCT04096833 -NCT04096898 -NCT04096924 -NCT04097002 -NCT04097158 -NCT04097171 -NCT04097197 -NCT04097223 -NCT04097249 -NCT04097262 -NCT04097613 -NCT04097639 -NCT04097886 -NCT04098055 -NCT04098094 -NCT04098185 -NCT04098250 -NCT04098406 -NCT04098666 -NCT04098705 -NCT04098718 -NCT04099017 -NCT04099134 -NCT04099147 -NCT04099225 -NCT04099342 -NCT04099381 -NCT04099420 -NCT04099563 -NCT04099602 -NCT04099615 -NCT04099784 -NCT04099862 -NCT04099914 -NCT04100057 -NCT04100109 -NCT04100291 -NCT04100577 -NCT04100655 -NCT04100707 -NCT04100733 -NCT04100759 -NCT04100811 -NCT04100967 -NCT04101435 -NCT04101513 -NCT04101539 -NCT04101578 -NCT04101656 -NCT04101851 -NCT04101890 -NCT04101981 -NCT04102046 -NCT04102228 -NCT04102254 -NCT04102358 -NCT04102371 -NCT04102397 -NCT04102423 -NCT04102605 -NCT04102657 -NCT04102930 -NCT04103099 -NCT04103112 -NCT04103450 -NCT04103463 -NCT04103502 -NCT04103515 -NCT04103528 -NCT04103554 -NCT04103619 -NCT04103684 -NCT04103762 -NCT04104347 -NCT04104373 -NCT04104386 -NCT04104412 -NCT04104464 -NCT04104542 -NCT04104685 -NCT04104789 -NCT04104815 -NCT04104893 -NCT04104984 -NCT04104997 -NCT04105075 -NCT04105348 -NCT04105374 -NCT04105413 -NCT04105465 -NCT04105478 -NCT04105543 -NCT04105569 -NCT04105894 -NCT04105985 -NCT04106232 -NCT04106284 -NCT04106323 -NCT04106375 -NCT04106505 -NCT04106518 -NCT04106661 -NCT04106700 -NCT04106726 -NCT04106778 -NCT04106817 -NCT04106973 -NCT04106986 -NCT04107155 -NCT04107207 -NCT04107233 -NCT04107350 -NCT04107454 -NCT04107480 -NCT04107649 -NCT04107896 -NCT04108117 -NCT04108182 -NCT04108260 -NCT04108377 -NCT04108481 -NCT04108559 -NCT04108572 -NCT04108598 -NCT04108754 -NCT04108780 -NCT04108819 -NCT04108832 -NCT04108897 -NCT04108988 -NCT04109027 -NCT04109040 -NCT04109079 -NCT04109378 -NCT04109521 -NCT04109547 -NCT04109612 -NCT04109664 -NCT04109677 -NCT04109703 -NCT04109781 -NCT04109807 -NCT04109885 -NCT04110015 -NCT04110041 -NCT04110054 -NCT04110145 -NCT04110184 -NCT04110210 -NCT04110275 -NCT04110405 -NCT04110782 -NCT04110834 -NCT04110847 -NCT04110860 -NCT04110912 -NCT04111081 -NCT04111250 -NCT04111302 -NCT04111315 -NCT04111341 -NCT04111497 -NCT04111588 -NCT04111783 -NCT04111822 -NCT04112238 -NCT04112381 -NCT04112511 -NCT04112667 -NCT04112771 -NCT04112901 -NCT04112940 -NCT04113070 -NCT04113096 -NCT04113187 -NCT04113265 -NCT04113369 -NCT04113499 -NCT04113525 -NCT04113785 -NCT04113837 -NCT04113902 -NCT04113967 -NCT04114123 -NCT04114305 -NCT04114448 -NCT04114604 -NCT04114617 -NCT04114630 -NCT04114851 -NCT04115059 -NCT04115111 -NCT04115527 -NCT04115735 -NCT04115826 -NCT04115878 -NCT04115956 -NCT04116203 -NCT04116645 -NCT04116671 -NCT04116723 -NCT04116827 -NCT04116905 -NCT04117061 -NCT04117321 -NCT04117555 -NCT04117594 -NCT04117607 -NCT04117620 -NCT04117698 -NCT04117841 -NCT04118218 -NCT04118244 -NCT04118361 -NCT04118426 -NCT04118582 -NCT04118595 -NCT04118634 -NCT04118647 -NCT04118725 -NCT04118881 -NCT04118920 -NCT04118998 -NCT04119011 -NCT04119115 -NCT04119141 -NCT04119206 -NCT04119284 -NCT04119297 -NCT04119349 -NCT04119635 -NCT04120025 -NCT04120103 -NCT04120116 -NCT04120129 -NCT04120168 -NCT04120324 -NCT04120363 -NCT04120584 -NCT04120649 -NCT04120974 -NCT04121052 -NCT04121117 -NCT04121130 -NCT04121169 -NCT04121325 -NCT04121338 -NCT04121390 -NCT04121572 -NCT04121624 -NCT04121637 -NCT04121897 -NCT04121936 -NCT04121988 -NCT04122105 -NCT04122170 -NCT04122183 -NCT04122352 -NCT04122404 -NCT04122443 -NCT04122716 -NCT04122807 -NCT04122820 -NCT04123145 -NCT04123301 -NCT04123483 -NCT04123509 -NCT04123626 -NCT04123990 -NCT04124094 -NCT04124172 -NCT04124237 -NCT04124510 -NCT04124549 -NCT04124588 -NCT04124640 -NCT04124679 -NCT04124692 -NCT04124705 -NCT04124874 -NCT04125004 -NCT04125043 -NCT04125134 -NCT04125316 -NCT04125342 -NCT04125446 -NCT04125459 -NCT04125498 -NCT04125563 -NCT04125628 -NCT04125641 -NCT04125836 -NCT04125875 -NCT04126005 -NCT04126018 -NCT04126057 -NCT04126213 -NCT04126304 -NCT04126408 -NCT04126473 -NCT04126551 -NCT04126616 -NCT04126720 -NCT04126824 -NCT04126902 -NCT04127149 -NCT04127214 -NCT04127279 -NCT04127617 -NCT04127838 -NCT04127929 -NCT04127994 -NCT04128033 -NCT04128163 -NCT04128358 -NCT04128618 -NCT04128631 -NCT04128696 -NCT04128709 -NCT04129125 -NCT04129294 -NCT04129320 -NCT04129385 -NCT04129411 -NCT04129424 -NCT04129437 -NCT04129450 -NCT04129502 -NCT04129554 -NCT04129645 -NCT04129697 -NCT04129775 -NCT04129788 -NCT04129853 -NCT04129931 -NCT04130074 -NCT04130152 -NCT04130204 -NCT04130243 -NCT04130425 -NCT04130776 -NCT04130828 -NCT04130867 -NCT04130919 -NCT04131036 -NCT04131166 -NCT04131205 -NCT04131270 -NCT04131491 -NCT04131660 -NCT04131764 -NCT04131920 -NCT04131933 -NCT04131985 -NCT04131998 -NCT04132063 -NCT04132154 -NCT04132167 -NCT04132193 -NCT04132323 -NCT04132349 -NCT04132362 -NCT04132375 -NCT04132661 -NCT04132739 -NCT04132778 -NCT04133142 -NCT04133220 -NCT04133324 -NCT04133441 -NCT04133662 -NCT04133766 -NCT04133870 -NCT04133883 -NCT04134065 -NCT04134117 -NCT04134221 -NCT04134247 -NCT04134455 -NCT04134715 -NCT04134741 -NCT04134819 -NCT04135118 -NCT04135456 -NCT04135508 -NCT04135573 -NCT04135755 -NCT04135768 -NCT04135807 -NCT04135820 -NCT04135833 -NCT04135872 -NCT04136093 -NCT04136249 -NCT04136418 -NCT04136431 -NCT04136548 -NCT04136587 -NCT04136717 -NCT04136847 -NCT04136860 -NCT04137068 -NCT04137237 -NCT04137302 -NCT04137406 -NCT04137510 -NCT04137809 -NCT04137926 -NCT04138069 -NCT04138186 -NCT04138316 -NCT04138329 -NCT04138368 -NCT04138602 -NCT04138615 -NCT04138706 -NCT04138784 -NCT04138901 -NCT04139018 -NCT04139096 -NCT04139122 -NCT04139148 -NCT04139187 -NCT04139226 -NCT04139330 -NCT04139395 -NCT04139460 -NCT04139551 -NCT04139564 -NCT04139577 -NCT04139941 -NCT04139980 -NCT04140019 -NCT04140097 -NCT04140214 -NCT04140591 -NCT04140617 -NCT04140825 -NCT04140890 -NCT04140916 -NCT04141150 -NCT04141163 -NCT04141176 -NCT04141215 -NCT04141254 -NCT04141488 -NCT04141696 -NCT04141774 -NCT04141787 -NCT04141891 -NCT04141917 -NCT04141969 -NCT04142099 -NCT04142151 -NCT04142177 -NCT04142229 -NCT04142424 -NCT04142515 -NCT04142632 -NCT04142645 -NCT04142814 -NCT04142957 -NCT04143230 -NCT04143295 -NCT04143360 -NCT04143386 -NCT04143399 -NCT04143477 -NCT04143659 -NCT04143724 -NCT04143750 -NCT04143776 -NCT04143802 -NCT04143893 -NCT04143932 -NCT04144179 -NCT04144231 -NCT04144283 -NCT04144296 -NCT04144374 -NCT04144491 -NCT04144530 -NCT04144686 -NCT04144699 -NCT04144725 -NCT04145011 -NCT04145024 -NCT04145427 -NCT04145440 -NCT04145518 -NCT04145622 -NCT04145635 -NCT04145661 -NCT04145752 -NCT04145804 -NCT04145843 -NCT04145895 -NCT04146012 -NCT04146051 -NCT04146103 -NCT04146194 -NCT04146272 -NCT04146376 -NCT04146597 -NCT04146649 -NCT04146961 -NCT04147117 -NCT04147182 -NCT04147299 -NCT04147429 -NCT04147442 -NCT04147507 -NCT04147637 -NCT04147676 -NCT04147741 -NCT04147793 -NCT04147884 -NCT04148144 -NCT04148196 -NCT04148222 -NCT04148248 -NCT04148534 -NCT04148612 -NCT04148625 -NCT04148651 -NCT04148768 -NCT04148781 -NCT04148807 -NCT04148963 -NCT04149054 -NCT04149093 -NCT04149197 -NCT04149223 -NCT04149314 -NCT04149431 -NCT04149496 -NCT04149535 -NCT04149600 -NCT04149626 -NCT04149652 -NCT04149834 -NCT04149847 -NCT04150198 -NCT04150211 -NCT04150250 -NCT04150289 -NCT04150315 -NCT04150445 -NCT04150562 -NCT04150679 -NCT04150757 -NCT04150822 -NCT04150861 -NCT04150991 -NCT04151030 -NCT04151147 -NCT04151173 -NCT04151212 -NCT04151342 -NCT04151355 -NCT04151446 -NCT04151550 -NCT04151732 -NCT04151836 -NCT04152044 -NCT04152096 -NCT04152226 -NCT04152655 -NCT04152720 -NCT04152759 -NCT04152798 -NCT04152902 -NCT04153058 -NCT04153110 -NCT04153175 -NCT04153214 -NCT04153409 -NCT04153513 -NCT04153552 -NCT04153578 -NCT04153669 -NCT04153682 -NCT04153708 -NCT04154098 -NCT04154137 -NCT04154306 -NCT04154319 -NCT04154371 -NCT04154410 -NCT04154436 -NCT04154475 -NCT04154579 -NCT04154644 -NCT04154722 -NCT04154839 -NCT04154891 -NCT04155099 -NCT04155203 -NCT04155294 -NCT04155307 -NCT04155359 -NCT04155398 -NCT04155411 -NCT04155645 -NCT04155749 -NCT04155801 -NCT04155814 -NCT04155840 -NCT04155853 -NCT04155918 -NCT04155944 -NCT04155970 -NCT04156295 -NCT04156347 -NCT04156399 -NCT04156464 -NCT04156555 -NCT04156633 -NCT04156711 -NCT04156984 -NCT04156997 -NCT04157283 -NCT04157309 -NCT04157530 -NCT04157621 -NCT04157660 -NCT04157712 -NCT04157738 -NCT04157764 -NCT04157842 -NCT04157855 -NCT04157920 -NCT04157946 -NCT04158297 -NCT04158505 -NCT04158518 -NCT04158531 -NCT04158557 -NCT04158648 -NCT04158661 -NCT04158830 -NCT04158986 -NCT04159077 -NCT04159571 -NCT04159649 -NCT04159792 -NCT04159805 -NCT04159831 -NCT04159844 -NCT04159857 -NCT04159870 -NCT04160130 -NCT04160143 -NCT04160156 -NCT04160195 -NCT04160585 -NCT04160598 -NCT04160715 -NCT04160975 -NCT04161014 -NCT04161079 -NCT04161183 -NCT04161196 -NCT04161222 -NCT04161339 -NCT04161365 -NCT04161482 -NCT04161495 -NCT04161521 -NCT04161742 -NCT04161833 -NCT04161872 -NCT04162067 -NCT04162171 -NCT04162223 -NCT04162379 -NCT04162405 -NCT04162587 -NCT04162665 -NCT04162704 -NCT04162821 -NCT04162938 -NCT04163094 -NCT04163133 -NCT04163146 -NCT04163159 -NCT04163354 -NCT04163380 -NCT04163536 -NCT04163653 -NCT04163861 -NCT04164056 -NCT04164095 -NCT04164147 -NCT04164186 -NCT04164290 -NCT04164732 -NCT04164836 -NCT04164862 -NCT04164875 -NCT04164888 -NCT04165109 -NCT04165187 -NCT04165200 -NCT04165278 -NCT04165395 -NCT04165785 -NCT04166032 -NCT04166058 -NCT04166097 -NCT04166344 -NCT04166383 -NCT04166461 -NCT04166812 -NCT04166877 -NCT04167085 -NCT04167163 -NCT04167566 -NCT04168281 -NCT04168359 -NCT04168411 -NCT04168541 -NCT04168801 -NCT04168866 -NCT04168892 -NCT04168931 -NCT04169035 -NCT04169113 -NCT04169152 -NCT04169334 -NCT04169529 -NCT04169555 -NCT04169672 -NCT04169698 -NCT04169984 -NCT04170062 -NCT04170101 -NCT04170244 -NCT04170309 -NCT04170504 -NCT04170803 -NCT04171102 -NCT04171505 -NCT04171726 -NCT04171908 -NCT04171934 -NCT04172025 -NCT04172506 -NCT04172597 -NCT04172701 -NCT04173013 -NCT04173052 -NCT04173234 -NCT04173286 -NCT04173546 -NCT04173559 -NCT04173624 -NCT04173689 -NCT04173780 -NCT04173923 -NCT04174157 -NCT04174183 -NCT04174326 -NCT04174430 -NCT04174482 -NCT04174521 -NCT04174729 -NCT04174911 -NCT04175145 -NCT04175158 -NCT04175184 -NCT04175197 -NCT04175444 -NCT04175639 -NCT04175678 -NCT04175691 -NCT04175964 -NCT04176029 -NCT04176211 -NCT04176250 -NCT04176302 -NCT04176549 -NCT04176614 -NCT04176692 -NCT04176718 -NCT04176861 -NCT04176978 -NCT04177368 -NCT04177420 -NCT04177615 -NCT04177940 -NCT04178005 -NCT04178044 -NCT04178226 -NCT04178252 -NCT04178265 -NCT04178759 -NCT04178772 -NCT04178798 -NCT04178811 -NCT04178915 -NCT04178928 -NCT04178954 -NCT04178980 -NCT04179032 -NCT04179045 -NCT04179370 -NCT04179409 -NCT04179461 -NCT04179578 -NCT04179942 -NCT04180241 -NCT04180475 -NCT04180748 -NCT04181450 -NCT04181866 -NCT04181905 -NCT04181918 -NCT04181944 -NCT04182009 -NCT04182347 -NCT04182555 -NCT04182594 -NCT04182659 -NCT04182685 -NCT04182867 -NCT04182893 -NCT04182906 -NCT04182945 -NCT04182984 -NCT04182997 -NCT04183036 -NCT04183049 -NCT04183101 -NCT04183192 -NCT04183361 -NCT04183491 -NCT04183673 -NCT04183777 -NCT04184011 -NCT04184154 -NCT04184414 -NCT04184531 -NCT04184622 -NCT04184661 -NCT04184726 -NCT04184817 -NCT04184882 -NCT04185116 -NCT04185220 -NCT04185311 -NCT04185389 -NCT04185545 -NCT04185701 -NCT04185766 -NCT04185870 -NCT04186078 -NCT04186104 -NCT04186143 -NCT04186286 -NCT04186520 -NCT04186559 -NCT04186780 -NCT04186806 -NCT04187066 -NCT04187079 -NCT04187287 -NCT04187547 -NCT04187716 -NCT04187781 -NCT04188184 -NCT04188392 -NCT04188418 -NCT04188522 -NCT04188574 -NCT04188600 -NCT04188639 -NCT04189133 -NCT04189198 -NCT04189237 -NCT04189419 -NCT04189471 -NCT04189484 -NCT04189497 -NCT04189601 -NCT04189705 -NCT04189822 -NCT04189874 -NCT04189900 -NCT04189926 -NCT04189952 -NCT04190043 -NCT04190316 -NCT04190407 -NCT04190472 -NCT04190758 -NCT04190849 -NCT04191018 -NCT04191031 -NCT04191317 -NCT04191369 -NCT04191759 -NCT04191837 -NCT04192279 -NCT04192396 -NCT04192474 -NCT04192487 -NCT04192500 -NCT04192708 -NCT04192773 -NCT04193059 -NCT04193085 -NCT04193150 -NCT04193202 -NCT04193280 -NCT04193319 -NCT04193358 -NCT04193475 -NCT04193553 -NCT04193579 -NCT04193592 -NCT04193813 -NCT04193878 -NCT04193891 -NCT04193969 -NCT04193995 -NCT04194008 -NCT04194073 -NCT04194164 -NCT04194242 -NCT04194333 -NCT04194372 -NCT04194385 -NCT04194541 -NCT04194632 -NCT04194658 -NCT04194723 -NCT04195100 -NCT04195412 -NCT04195685 -NCT04195724 -NCT04195984 -NCT04196010 -NCT04196088 -NCT04196101 -NCT04196153 -NCT04196244 -NCT04196387 -NCT04196504 -NCT04196933 -NCT04197011 -NCT04197245 -NCT04197284 -NCT04197336 -NCT04197349 -NCT04197674 -NCT04197726 -NCT04197739 -NCT04197778 -NCT04197791 -NCT04197817 -NCT04197843 -NCT04197908 -NCT04197934 -NCT04197947 -NCT04198064 -NCT04198103 -NCT04198246 -NCT04198259 -NCT04198324 -NCT04198454 -NCT04198753 -NCT04199195 -NCT04199260 -NCT04199338 -NCT04199390 -NCT04199468 -NCT04199546 -NCT04199988 -NCT04200014 -NCT04200079 -NCT04200105 -NCT04200378 -NCT04200495 -NCT04200586 -NCT04200729 -NCT04200781 -NCT04201002 -NCT04201132 -NCT04201210 -NCT04201249 -NCT04201431 -NCT04201444 -NCT04201743 -NCT04201925 -NCT04202016 -NCT04202159 -NCT04202185 -NCT04202627 -NCT04202744 -NCT04202796 -NCT04202965 -NCT04203199 -NCT04203342 -NCT04203394 -NCT04203472 -NCT04203589 -NCT04203875 -NCT04203940 -NCT04203953 -NCT04204044 -NCT04204057 -NCT04204083 -NCT04204096 -NCT04204226 -NCT04204421 -NCT04204512 -NCT04204720 -NCT04204733 -NCT04204876 -NCT04204928 -NCT04205175 -NCT04205188 -NCT04205266 -NCT04205279 -NCT04205331 -NCT04205396 -NCT04205474 -NCT04205578 -NCT04205747 -NCT04205851 -NCT04206007 -NCT04206020 -NCT04206098 -NCT04206137 -NCT04206176 -NCT04206228 -NCT04206319 -NCT04206332 -NCT04206345 -NCT04206410 -NCT04206423 -NCT04206605 -NCT04206722 -NCT04206826 -NCT04206969 -NCT04207021 -NCT04207112 -NCT04207242 -NCT04207268 -NCT04207554 -NCT04207593 -NCT04207632 -NCT04207645 -NCT04207736 -NCT04207827 -NCT04208061 -NCT04208360 -NCT04208464 -NCT04208529 -NCT04208568 -NCT04208620 -NCT04208633 -NCT04208685 -NCT04208932 -NCT04208997 -NCT04209036 -NCT04209088 -NCT04209127 -NCT04209166 -NCT04209179 -NCT04209192 -NCT04209218 -NCT04209335 -NCT04209621 -NCT04209634 -NCT04209738 -NCT04209842 -NCT04209946 -NCT04210063 -NCT04210089 -NCT04210141 -NCT04210297 -NCT04210336 -NCT04210518 -NCT04210596 -NCT04210674 -NCT04210791 -NCT04210882 -NCT04211142 -NCT04211168 -NCT04211207 -NCT04211233 -NCT04211272 -NCT04211454 -NCT04211571 -NCT04211649 -NCT04211701 -NCT04211740 -NCT04211766 -NCT04211805 -NCT04211974 -NCT04212013 -NCT04212195 -NCT04212403 -NCT04212455 -NCT04212507 -NCT04212546 -NCT04212572 -NCT04212624 -NCT04212637 -NCT04212780 -NCT04212793 -NCT04212962 -NCT04213092 -NCT04213105 -NCT04213183 -NCT04213287 -NCT04213352 -NCT04213443 -NCT04213534 -NCT04213729 -NCT04213898 -NCT04214080 -NCT04214119 -NCT04214197 -NCT04214210 -NCT04214262 -NCT04214340 -NCT04214509 -NCT04214522 -NCT04214561 -NCT04214639 -NCT04214665 -NCT04214691 -NCT04214756 -NCT04214990 -NCT04215354 -NCT04215380 -NCT04215458 -NCT04215497 -NCT04215601 -NCT04215757 -NCT04215783 -NCT04215809 -NCT04216251 -NCT04216563 -NCT04216979 -NCT04216992 -NCT04217135 -NCT04217187 -NCT04217200 -NCT04217447 -NCT04217460 -NCT04217577 -NCT04217590 -NCT04217603 -NCT04217733 -NCT04217746 -NCT04217850 -NCT04217902 -NCT04217941 -NCT04217954 -NCT04218045 -NCT04218110 -NCT04218175 -NCT04218305 -NCT04218409 -NCT04218526 -NCT04218539 -NCT04218721 -NCT04218877 -NCT04218942 -NCT04219007 -NCT04219163 -NCT04219306 -NCT04219332 -NCT04219423 -NCT04219488 -NCT04219644 -NCT04219748 -NCT04219813 -NCT04219826 -NCT04220086 -NCT04220138 -NCT04220229 -NCT04220268 -NCT04220476 -NCT04220489 -NCT04220541 -NCT04220697 -NCT04220840 -NCT04221074 -NCT04221126 -NCT04221139 -NCT04221282 -NCT04221529 -NCT04221711 -NCT04221893 -NCT04222075 -NCT04222088 -NCT04222257 -NCT04222296 -NCT04222322 -NCT04222452 -NCT04222543 -NCT04222595 -NCT04222777 -NCT04222803 -NCT04222816 -NCT04222881 -NCT04222933 -NCT04222972 -NCT04223050 -NCT04223154 -NCT04223349 -NCT04223388 -NCT04223570 -NCT04223765 -NCT04223908 -NCT04223999 -NCT04224038 -NCT04224168 -NCT04224285 -NCT04224298 -NCT04224337 -NCT04224454 -NCT04224506 -NCT04224584 -NCT04224662 -NCT04224909 -NCT04224948 -NCT04225000 -NCT04225117 -NCT04225286 -NCT04225312 -NCT04225507 -NCT04225546 -NCT04225793 -NCT04225858 -NCT04226040 -NCT04226118 -NCT04226170 -NCT04226209 -NCT04226235 -NCT04226586 -NCT04226911 -NCT04226976 -NCT04227067 -NCT04227197 -NCT04227314 -NCT04227379 -NCT04227548 -NCT04227925 -NCT04227977 -NCT04228029 -NCT04228081 -NCT04228484 -NCT04228536 -NCT04228835 -NCT04229004 -NCT04229030 -NCT04229238 -NCT04229342 -NCT04229407 -NCT04229433 -NCT04229589 -NCT04229901 -NCT04229914 -NCT04229927 -NCT04229940 -NCT04230109 -NCT04230174 -NCT04230252 -NCT04230291 -NCT04230447 -NCT04230460 -NCT04230902 -NCT04231058 -NCT04231279 -NCT04231318 -NCT04231396 -NCT04231448 -NCT04231461 -NCT04231487 -NCT04231669 -NCT04231760 -NCT04232020 -NCT04232033 -NCT04232085 -NCT04232371 -NCT04232553 -NCT04232618 -NCT04232748 -NCT04232813 -NCT04232826 -NCT04232865 -NCT04232917 -NCT04232982 -NCT04233099 -NCT04233125 -NCT04233359 -NCT04233567 -NCT04233632 -NCT04233749 -NCT04233762 -NCT04233827 -NCT04233892 -NCT04234035 -NCT04234048 -NCT04234126 -NCT04234165 -NCT04234217 -NCT04234230 -NCT04234269 -NCT04234321 -NCT04234399 -NCT04234594 -NCT04234789 -NCT04234867 -NCT04234945 -NCT04235140 -NCT04235166 -NCT04235244 -NCT04235283 -NCT04235556 -NCT04235712 -NCT04235725 -NCT04235777 -NCT04235829 -NCT04235933 -NCT04235998 -NCT04236037 -NCT04236089 -NCT04236232 -NCT04236349 -NCT04236375 -NCT04236388 -NCT04236544 -NCT04236557 -NCT04236596 -NCT04236622 -NCT04236661 -NCT04236687 -NCT04236843 -NCT04236856 -NCT04236895 -NCT04236934 -NCT04236960 -NCT04236999 -NCT04237181 -NCT04237220 -NCT04237376 -NCT04237506 -NCT04237636 -NCT04237766 -NCT04237779 -NCT04237857 -NCT04237883 -NCT04237935 -NCT04237961 -NCT04238065 -NCT04238117 -NCT04238208 -NCT04238247 -NCT04238416 -NCT04238611 -NCT04238871 -NCT04238884 -NCT04238897 -NCT04239196 -NCT04239378 -NCT04239430 -NCT04239521 -NCT04239846 -NCT04239963 -NCT04240054 -NCT04240132 -NCT04240314 -NCT04240470 -NCT04240483 -NCT04240522 -NCT04240548 -NCT04240639 -NCT04240652 -NCT04240860 -NCT04240873 -NCT04241042 -NCT04241367 -NCT04241393 -NCT04241432 -NCT04241484 -NCT04241536 -NCT04241588 -NCT04241679 -NCT04241809 -NCT04241822 -NCT04241848 -NCT04242108 -NCT04242225 -NCT04242264 -NCT04242277 -NCT04242290 -NCT04242355 -NCT04242394 -NCT04242589 -NCT04242602 -NCT04242732 -NCT04242784 -NCT04242836 -NCT04243083 -NCT04243265 -NCT04243382 -NCT04243421 -NCT04243434 -NCT04243616 -NCT04243668 -NCT04243915 -NCT04244123 -NCT04244383 -NCT04244448 -NCT04244474 -NCT04244526 -NCT04244604 -NCT04244630 -NCT04244656 -NCT04244669 -NCT04244877 -NCT04245150 -NCT04245176 -NCT04245384 -NCT04245475 -NCT04245540 -NCT04245709 -NCT04245956 -NCT04246099 -NCT04246151 -NCT04246372 -NCT04246398 -NCT04246450 -NCT04246606 -NCT04246619 -NCT04246697 -NCT04247035 -NCT04247074 -NCT04247100 -NCT04247152 -NCT04247204 -NCT04247282 -NCT04247490 -NCT04247906 -NCT04248166 -NCT04248270 -NCT04248335 -NCT04248361 -NCT04248426 -NCT04248439 -NCT04248699 -NCT04248738 -NCT04249141 -NCT04249154 -NCT04249258 -NCT04249271 -NCT04249297 -NCT04249310 -NCT04249427 -NCT04249440 -NCT04249479 -NCT04249570 -NCT04249700 -NCT04249856 -NCT04249882 -NCT04249921 -NCT04249973 -NCT04250194 -NCT04250311 -NCT04250597 -NCT04250779 -NCT04250792 -NCT04251052 -NCT04251091 -NCT04251182 -NCT04251208 -NCT04251286 -NCT04251299 -NCT04251403 -NCT04251559 -NCT04251663 -NCT04252001 -NCT04252053 -NCT04252144 -NCT04252209 -NCT04252508 -NCT04252521 -NCT04252729 -NCT04252846 -NCT04252859 -NCT04252963 -NCT04253054 -NCT04253106 -NCT04253249 -NCT04253275 -NCT04253405 -NCT04253444 -NCT04253691 -NCT04253821 -NCT04253899 -NCT04253964 -NCT04254107 -NCT04254172 -NCT04254224 -NCT04254276 -NCT04254419 -NCT04254458 -NCT04254510 -NCT04254588 -NCT04254692 -NCT04254822 -NCT04254861 -NCT04255095 -NCT04255173 -NCT04255264 -NCT04255316 -NCT04255381 -NCT04255420 -NCT04255576 -NCT04255693 -NCT04255758 -NCT04255953 -NCT04256005 -NCT04256057 -NCT04256096 -NCT04256135 -NCT04256200 -NCT04256265 -NCT04256278 -NCT04256304 -NCT04256434 -NCT04256486 -NCT04256512 -NCT04256668 -NCT04256733 -NCT04257097 -NCT04257123 -NCT04257136 -NCT04257422 -NCT04257487 -NCT04257500 -NCT04257604 -NCT04257682 -NCT04258020 -NCT04258046 -NCT04258189 -NCT04258215 -NCT04258423 -NCT04258449 -NCT04258618 -NCT04258657 -NCT04258813 -NCT04258852 -NCT04258930 -NCT04259021 -NCT04259034 -NCT04259099 -NCT04259177 -NCT04259359 -NCT04259411 -NCT04259619 -NCT04259697 -NCT04259736 -NCT04259931 -NCT04259944 -NCT04260204 -NCT04260477 -NCT04260568 -NCT04260802 -NCT04260971 -NCT04260984 -NCT04261010 -NCT04261283 -NCT04261296 -NCT04261309 -NCT04261439 -NCT04261478 -NCT04261504 -NCT04261595 -NCT04261790 -NCT04261803 -NCT04261894 -NCT04262115 -NCT04262128 -NCT04262141 -NCT04262336 -NCT04262388 -NCT04262414 -NCT04262557 -NCT04262570 -NCT04262713 -NCT04262752 -NCT04263298 -NCT04263376 -NCT04263779 -NCT04263870 -NCT04263974 -NCT04264091 -NCT04264169 -NCT04264195 -NCT04264325 -NCT04264377 -NCT04264455 -NCT04264481 -NCT04264949 -NCT04265209 -NCT04265222 -NCT04265339 -NCT04265521 -NCT04265651 -NCT04265703 -NCT04265742 -NCT04265781 -NCT04265820 -NCT04265833 -NCT04266158 -NCT04266249 -NCT04266275 -NCT04266418 -NCT04266457 -NCT04266509 -NCT04266561 -NCT04266587 -NCT04266756 -NCT04266782 -NCT04266847 -NCT04266977 -NCT04266990 -NCT04267081 -NCT04267302 -NCT04267341 -NCT04267445 -NCT04267562 -NCT04267627 -NCT04267835 -NCT04267965 -NCT04268017 -NCT04268186 -NCT04268251 -NCT04268277 -NCT04268303 -NCT04268420 -NCT04268433 -NCT04268485 -NCT04268524 -NCT04268589 -NCT04268602 -NCT04268641 -NCT04268732 -NCT04268758 -NCT04268810 -NCT04268836 -NCT04268862 -NCT04268940 -NCT04269083 -NCT04269148 -NCT04269174 -NCT04269291 -NCT04269330 -NCT04269629 -NCT04269694 -NCT04269837 -NCT04270110 -NCT04270617 -NCT04270877 -NCT04271020 -NCT04271033 -NCT04271085 -NCT04271163 -NCT04271176 -NCT04271605 -NCT04271826 -NCT04271878 -NCT04271891 -NCT04271956 -NCT04272060 -NCT04272190 -NCT04272398 -NCT04272424 -NCT04272879 -NCT04272970 -NCT04273100 -NCT04273139 -NCT04273282 -NCT04273373 -NCT04273490 -NCT04273620 -NCT04273828 -NCT04273854 -NCT04273893 -NCT04273971 -NCT04274179 -NCT04274465 -NCT04274556 -NCT04274569 -NCT04274634 -NCT04274790 -NCT04274842 -NCT04274868 -NCT04274894 -NCT04274920 -NCT04275076 -NCT04275219 -NCT04275414 -NCT04275453 -NCT04275505 -NCT04275544 -NCT04275765 -NCT04275791 -NCT04275869 -NCT04275882 -NCT04276038 -NCT04276142 -NCT04276207 -NCT04276324 -NCT04276337 -NCT04276493 -NCT04276610 -NCT04276636 -NCT04276649 -NCT04276753 -NCT04276779 -NCT04276883 -NCT04276974 -NCT04277000 -NCT04277039 -NCT04277052 -NCT04277078 -NCT04277130 -NCT04277364 -NCT04277572 -NCT04277689 -NCT04277728 -NCT04277741 -NCT04278014 -NCT04278183 -NCT04278326 -NCT04278469 -NCT04278495 -NCT04278599 -NCT04278651 -NCT04278690 -NCT04278729 -NCT04278963 -NCT04279288 -NCT04279327 -NCT04279457 -NCT04279600 -NCT04279678 -NCT04279717 -NCT04279782 -NCT04279795 -NCT04279808 -NCT04279821 -NCT04279912 -NCT04280081 -NCT04280094 -NCT04280146 -NCT04280315 -NCT04280367 -NCT04280406 -NCT04280497 -NCT04280523 -NCT04280757 -NCT04281043 -NCT04281251 -NCT04281316 -NCT04281446 -NCT04281732 -NCT04281771 -NCT04281784 -NCT04281888 -NCT04282031 -NCT04282109 -NCT04282148 -NCT04282174 -NCT04282317 -NCT04282408 -NCT04282434 -NCT04282538 -NCT04282642 -NCT04282720 -NCT04282902 -NCT04282954 -NCT04283019 -NCT04283032 -NCT04283175 -NCT04283266 -NCT04283292 -NCT04283370 -NCT04283409 -NCT04283435 -NCT04283461 -NCT04283643 -NCT04283682 -NCT04283773 -NCT04283929 -NCT04283994 -NCT04284241 -NCT04284267 -NCT04284423 -NCT04284436 -NCT04284501 -NCT04284605 -NCT04284618 -NCT04284696 -NCT04284748 -NCT04284774 -NCT04284826 -NCT04284969 -NCT04285021 -NCT04285177 -NCT04285190 -NCT04285229 -NCT04285268 -NCT04285437 -NCT04285450 -NCT04285528 -NCT04285606 -NCT04285684 -NCT04285697 -NCT04285736 -NCT04285775 -NCT04285827 -NCT04286113 -NCT04286152 -NCT04286217 -NCT04286243 -NCT04286269 -NCT04286308 -NCT04286451 -NCT04286464 -NCT04286698 -NCT04286828 -NCT04287010 -NCT04287127 -NCT04287140 -NCT04287231 -NCT04287257 -NCT04287478 -NCT04287569 -NCT04287582 -NCT04287686 -NCT04287764 -NCT04287868 -NCT04287881 -NCT04287920 -NCT04288206 -NCT04288674 -NCT04288726 -NCT04288739 -NCT04288804 -NCT04288921 -NCT04289168 -NCT04289246 -NCT04289285 -NCT04289311 -NCT04289441 -NCT04289506 -NCT04289558 -NCT04289571 -NCT04289688 -NCT04289701 -NCT04289766 -NCT04289779 -NCT04289961 -NCT04290013 -NCT04290039 -NCT04290078 -NCT04290091 -NCT04290247 -NCT04290273 -NCT04290442 -NCT04290455 -NCT04290507 -NCT04290546 -NCT04290663 -NCT04290689 -NCT04290767 -NCT04290793 -NCT04290858 -NCT04291209 -NCT04291261 -NCT04291287 -NCT04291313 -NCT04291365 -NCT04291430 -NCT04291547 -NCT04291768 -NCT04291859 -NCT04291898 -NCT04292353 -NCT04292574 -NCT04292587 -NCT04292613 -NCT04292665 -NCT04292704 -NCT04292756 -NCT04292795 -NCT04292821 -NCT04292873 -NCT04292886 -NCT04293055 -NCT04293172 -NCT04293224 -NCT04293380 -NCT04293484 -NCT04293523 -NCT04293562 -NCT04293692 -NCT04293796 -NCT04293835 -NCT04293861 -NCT04293887 -NCT04293939 -NCT04293965 -NCT04294056 -NCT04294095 -NCT04294186 -NCT04294212 -NCT04294316 -NCT04294381 -NCT04294524 -NCT04295122 -NCT04295187 -NCT04295213 -NCT04295408 -NCT04295473 -NCT04295642 -NCT04295655 -NCT04295681 -NCT04295785 -NCT04295824 -NCT04295889 -NCT04295980 -NCT04296084 -NCT04296279 -NCT04296357 -NCT04296383 -NCT04296409 -NCT04296422 -NCT04296448 -NCT04296513 -NCT04296539 -NCT04296721 -NCT04296799 -NCT04296903 -NCT04296942 -NCT04297033 -NCT04297124 -NCT04297202 -NCT04297280 -NCT04297293 -NCT04297410 -NCT04297540 -NCT04297553 -NCT04297618 -NCT04297683 -NCT04297839 -NCT04297995 -NCT04298086 -NCT04298229 -NCT04298255 -NCT04298294 -NCT04298489 -NCT04298632 -NCT04298840 -NCT04298892 -NCT04298957 -NCT04299087 -NCT04299100 -NCT04299334 -NCT04299399 -NCT04299568 -NCT04299724 -NCT04299750 -NCT04299971 -NCT04300101 -NCT04300166 -NCT04300244 -NCT04300465 -NCT04300478 -NCT04300530 -NCT04300634 -NCT04300686 -NCT04301063 -NCT04301076 -NCT04301284 -NCT04301336 -NCT04301453 -NCT04301726 -NCT04301765 -NCT04301882 -NCT04302272 -NCT04302389 -NCT04302402 -NCT04302649 -NCT04302701 -NCT04303026 -NCT04303052 -NCT04303117 -NCT04303208 -NCT04303351 -NCT04303364 -NCT04303442 -NCT04303559 -NCT04303572 -NCT04303715 -NCT04303936 -NCT04304014 -NCT04304092 -NCT04304170 -NCT04304183 -NCT04304339 -NCT04304495 -NCT04304508 -NCT04304560 -NCT04304573 -NCT04304820 -NCT04304898 -NCT04305028 -NCT04305184 -NCT04305236 -NCT04305275 -NCT04305509 -NCT04305535 -NCT04305639 -NCT04305652 -NCT04305769 -NCT04305860 -NCT04305964 -NCT04306263 -NCT04306419 -NCT04306432 -NCT04306523 -NCT04306575 -NCT04306614 -NCT04306627 -NCT04306653 -NCT04306666 -NCT04306692 -NCT04306952 -NCT04306991 -NCT04307004 -NCT04307173 -NCT04307212 -NCT04307433 -NCT04307472 -NCT04307537 -NCT04307784 -NCT04307823 -NCT04307979 -NCT04308122 -NCT04308135 -NCT04308252 -NCT04308265 -NCT04308278 -NCT04308421 -NCT04308486 -NCT04308499 -NCT04308590 -NCT04308629 -NCT04308850 -NCT04308863 -NCT04308876 -NCT04308954 -NCT04309032 -NCT04309097 -NCT04309188 -NCT04309227 -NCT04309253 -NCT04309474 -NCT04309500 -NCT04309695 -NCT04309812 -NCT04309942 -NCT04310046 -NCT04310176 -NCT04310397 -NCT04310449 -NCT04310462 -NCT04310579 -NCT04310592 -NCT04310618 -NCT04310696 -NCT04310852 -NCT04311242 -NCT04311268 -NCT04311385 -NCT04311502 -NCT04311528 -NCT04311567 -NCT04311606 -NCT04311645 -NCT04311840 -NCT04311866 -NCT04311970 -NCT04312087 -NCT04312139 -NCT04312152 -NCT04312165 -NCT04312178 -NCT04312243 -NCT04312360 -NCT04312776 -NCT04312815 -NCT04313062 -NCT04313088 -NCT04313101 -NCT04313192 -NCT04313205 -NCT04313296 -NCT04313465 -NCT04313478 -NCT04313530 -NCT04313907 -NCT04313946 -NCT04314245 -NCT04314518 -NCT04314609 -NCT04314843 -NCT04314856 -NCT04314999 -NCT04315051 -NCT04315142 -NCT04315194 -NCT04315337 -NCT04315350 -NCT04315597 -NCT04315623 -NCT04315701 -NCT04315714 -NCT04315753 -NCT04315779 -NCT04315792 -NCT04316026 -NCT04316208 -NCT04316273 -NCT04316286 -NCT04316429 -NCT04316494 -NCT04316546 -NCT04316559 -NCT04316637 -NCT04316728 -NCT04316780 -NCT04316793 -NCT04317105 -NCT04317118 -NCT04317222 -NCT04317391 -NCT04317456 -NCT04317521 -NCT04317625 -NCT04317677 -NCT04317690 -NCT04317937 -NCT04318067 -NCT04318184 -NCT04318392 -NCT04318535 -NCT04318795 -NCT04318925 -NCT04319042 -NCT04319107 -NCT04319289 -NCT04319432 -NCT04319757 -NCT04319861 -NCT04319991 -NCT04320277 -NCT04320316 -NCT04320329 -NCT04320342 -NCT04320407 -NCT04320485 -NCT04320498 -NCT04320550 -NCT04320654 -NCT04320875 -NCT04321096 -NCT04321109 -NCT04321174 -NCT04321278 -NCT04321356 -NCT04321369 -NCT04321486 -NCT04321538 -NCT04321629 -NCT04321668 -NCT04321811 -NCT04321837 -NCT04321902 -NCT04322071 -NCT04322136 -NCT04322149 -NCT04322175 -NCT04322227 -NCT04322240 -NCT04322357 -NCT04322422 -NCT04322435 -NCT04322487 -NCT04322565 -NCT04322786 -NCT04322929 -NCT04322955 -NCT04322981 -NCT04323098 -NCT04323137 -NCT04323306 -NCT04323566 -NCT04323631 -NCT04323735 -NCT04323904 -NCT04324125 -NCT04324385 -NCT04324463 -NCT04324580 -NCT04324632 -NCT04324671 -NCT04324905 -NCT04324931 -NCT04325243 -NCT04325282 -NCT04325438 -NCT04325490 -NCT04325854 -NCT04325867 -NCT04326049 -NCT04326374 -NCT04326387 -NCT04326517 -NCT04326530 -NCT04326569 -NCT04326582 -NCT04326595 -NCT04326712 -NCT04326725 -NCT04326790 -NCT04326842 -NCT04326894 -NCT04326972 -NCT04327050 -NCT04327206 -NCT04327336 -NCT04327375 -NCT04327622 -NCT04327752 -NCT04327869 -NCT04327882 -NCT04327908 -NCT04327986 -NCT04327999 -NCT04328181 -NCT04328480 -NCT04328597 -NCT04328675 -NCT04328818 -NCT04328961 -NCT04329013 -NCT04329143 -NCT04329169 -NCT04329208 -NCT04329221 -NCT04329351 -NCT04329403 -NCT04329481 -NCT04329494 -NCT04329689 -NCT04329715 -NCT04329923 -NCT04330092 -NCT04330118 -NCT04330183 -NCT04330209 -NCT04330885 -NCT04330963 -NCT04331015 -NCT04331262 -NCT04331301 -NCT04331327 -NCT04331405 -NCT04331457 -NCT04331535 -NCT04331548 -NCT04331561 -NCT04331691 -NCT04331938 -NCT04331990 -NCT04332055 -NCT04332198 -NCT04332484 -NCT04332627 -NCT04332770 -NCT04332796 -NCT04332900 -NCT04333108 -NCT04333160 -NCT04333173 -NCT04333342 -NCT04333524 -NCT04333602 -NCT04333693 -NCT04333823 -NCT04333836 -NCT04333875 -NCT04334005 -NCT04334135 -NCT04334369 -NCT04334460 -NCT04334590 -NCT04334772 -NCT04334785 -NCT04334850 -NCT04335058 -NCT04335292 -NCT04335474 -NCT04335578 -NCT04335630 -NCT04335864 -NCT04335994 -NCT04336046 -NCT04336111 -NCT04336280 -NCT04336436 -NCT04336696 -NCT04336826 -NCT04336852 -NCT04336878 -NCT04336891 -NCT04337112 -NCT04337151 -NCT04337372 -NCT04337658 -NCT04337749 -NCT04337840 -NCT04337918 -NCT04338100 -NCT04338230 -NCT04338529 -NCT04338646 -NCT04338685 -NCT04338724 -NCT04338828 -NCT04338854 -NCT04339127 -NCT04339140 -NCT04339192 -NCT04339205 -NCT04339231 -NCT04339270 -NCT04339322 -NCT04339335 -NCT04339504 -NCT04339660 -NCT04339686 -NCT04339751 -NCT04339764 -NCT04339920 -NCT04340089 -NCT04340141 -NCT04340583 -NCT04340934 -NCT04341025 -NCT04341194 -NCT04341298 -NCT04341324 -NCT04341441 -NCT04341545 -NCT04341558 -NCT04341571 -NCT04341675 -NCT04341870 -NCT04342026 -NCT04342052 -NCT04342234 -NCT04342403 -NCT04342520 -NCT04342559 -NCT04342637 -NCT04342663 -NCT04342728 -NCT04343027 -NCT04343079 -NCT04343170 -NCT04343183 -NCT04343313 -NCT04343586 -NCT04343742 -NCT04343781 -NCT04343911 -NCT04343963 -NCT04344223 -NCT04344353 -NCT04344392 -NCT04344444 -NCT04344561 -NCT04344626 -NCT04344730 -NCT04344860 -NCT04344925 -NCT04344977 -NCT04345224 -NCT04345471 -NCT04345939 -NCT04346043 -NCT04346173 -NCT04346368 -NCT04346498 -NCT04346511 -NCT04346550 -NCT04346823 -NCT04346888 -NCT04346927 -NCT04347148 -NCT04347330 -NCT04347434 -NCT04347590 -NCT04347681 -NCT04347915 -NCT04348136 -NCT04348175 -NCT04348253 -NCT04348422 -NCT04348565 -NCT04348799 -NCT04348877 -NCT04348955 -NCT04349241 -NCT04349527 -NCT04349605 -NCT04349761 -NCT04349891 -NCT04349904 -NCT04350164 -NCT04350346 -NCT04350372 -NCT04350450 -NCT04350619 -NCT04350671 -NCT04350684 -NCT04350762 -NCT04350905 -NCT04350996 -NCT04351009 -NCT04351074 -NCT04351113 -NCT04351321 -NCT04351425 -NCT04351529 -NCT04351841 -NCT04351854 -NCT04351867 -NCT04351893 -NCT04351984 -NCT04352062 -NCT04352153 -NCT04352205 -NCT04352218 -NCT04352257 -NCT04352348 -NCT04352491 -NCT04352634 -NCT04352712 -NCT04352855 -NCT04352920 -NCT04353180 -NCT04353271 -NCT04353596 -NCT04353622 -NCT04353687 -NCT04353700 -NCT04354012 -NCT04354038 -NCT04354155 -NCT04354285 -NCT04354298 -NCT04354649 -NCT04354805 -NCT04354818 -NCT04354857 -NCT04355104 -NCT04355247 -NCT04355260 -NCT04355312 -NCT04355455 -NCT04355572 -NCT04355676 -NCT04355871 -NCT04355897 -NCT04356001 -NCT04356040 -NCT04356079 -NCT04356131 -NCT04356196 -NCT04356235 -NCT04356378 -NCT04356404 -NCT04356456 -NCT04356664 -NCT04356690 -NCT04356781 -NCT04357080 -NCT04357119 -NCT04357132 -NCT04357184 -NCT04357561 -NCT04357665 -NCT04357912 -NCT04358367 -NCT04358445 -NCT04358523 -NCT04358562 -NCT04358575 -NCT04358601 -NCT04358614 -NCT04358731 -NCT04359004 -NCT04359069 -NCT04359147 -NCT04359316 -NCT04359381 -NCT04359472 -NCT04359589 -NCT04359615 -NCT04359758 -NCT04359823 -NCT04359888 -NCT04359901 -NCT04359979 -NCT04360044 -NCT04360096 -NCT04360252 -NCT04360382 -NCT04360668 -NCT04360798 -NCT04360824 -NCT04360941 -NCT04360980 -NCT04361279 -NCT04361292 -NCT04361396 -NCT04361526 -NCT04361656 -NCT04361929 -NCT04362202 -NCT04362462 -NCT04362618 -NCT04362657 -NCT04362670 -NCT04362761 -NCT04362774 -NCT04362787 -NCT04362956 -NCT04362969 -NCT04363099 -NCT04363125 -NCT04363177 -NCT04363190 -NCT04363294 -NCT04363385 -NCT04363489 -NCT04363528 -NCT04363541 -NCT04363593 -NCT04363723 -NCT04363762 -NCT04363892 -NCT04363970 -NCT04364074 -NCT04364087 -NCT04364113 -NCT04364139 -NCT04364191 -NCT04364256 -NCT04364451 -NCT04364711 -NCT04364724 -NCT04364737 -NCT04364893 -NCT04365205 -NCT04365231 -NCT04365478 -NCT04365491 -NCT04365530 -NCT04365868 -NCT04365946 -NCT04365998 -NCT04366102 -NCT04366557 -NCT04366674 -NCT04366726 -NCT04366778 -NCT04367194 -NCT04367207 -NCT04367350 -NCT04367376 -NCT04367480 -NCT04367571 -NCT04367727 -NCT04367961 -NCT04367987 -NCT04368195 -NCT04368286 -NCT04368390 -NCT04368468 -NCT04368481 -NCT04368611 -NCT04368806 -NCT04368845 -NCT04369066 -NCT04369131 -NCT04369209 -NCT04369222 -NCT04369313 -NCT04369339 -NCT04369430 -NCT04369638 -NCT04369729 -NCT04369885 -NCT04369911 -NCT04370093 -NCT04370236 -NCT04370275 -NCT04370574 -NCT04370652 -NCT04370691 -NCT04370782 -NCT04370795 -NCT04370899 -NCT04370990 -NCT04371146 -NCT04371276 -NCT04371289 -NCT04371328 -NCT04371406 -NCT04371536 -NCT04371562 -NCT04371588 -NCT04371679 -NCT04371822 -NCT04371900 -NCT04372004 -NCT04372173 -NCT04372212 -NCT04372498 -NCT04372563 -NCT04372628 -NCT04372719 -NCT04372797 -NCT04372927 -NCT04373044 -NCT04373070 -NCT04373239 -NCT04373317 -NCT04373447 -NCT04373616 -NCT04373941 -NCT04373980 -NCT04373993 -NCT04374019 -NCT04374292 -NCT04374422 -NCT04374435 -NCT04374461 -NCT04374591 -NCT04374604 -NCT04374630 -NCT04374695 -NCT04374721 -NCT04374773 -NCT04374799 -NCT04375124 -NCT04375163 -NCT04375241 -NCT04375332 -NCT04375358 -NCT04375410 -NCT04375605 -NCT04375709 -NCT04375904 -NCT04375917 -NCT04376008 -NCT04376125 -NCT04376203 -NCT04376632 -NCT04376671 -NCT04376684 -NCT04376749 -NCT04377061 -NCT04377178 -NCT04377217 -NCT04377425 -NCT04377477 -NCT04377685 -NCT04377724 -NCT04377828 -NCT04378036 -NCT04378101 -NCT04378335 -NCT04378829 -NCT04378868 -NCT04378959 -NCT04378998 -NCT04379050 -NCT04379479 -NCT04379596 -NCT04379713 -NCT04379804 -NCT04379895 -NCT04380038 -NCT04380142 -NCT04380220 -NCT04380389 -NCT04380493 -NCT04380545 -NCT04380584 -NCT04380610 -NCT04380662 -NCT04380974 -NCT04380987 -NCT04381169 -NCT04381208 -NCT04381416 -NCT04381468 -NCT04381624 -NCT04381858 -NCT04381897 -NCT04381988 -NCT04382001 -NCT04382014 -NCT04382131 -NCT04382144 -NCT04382365 -NCT04382391 -NCT04382469 -NCT04382521 -NCT04382573 -NCT04382612 -NCT04382625 -NCT04382638 -NCT04382807 -NCT04383093 -NCT04383158 -NCT04383249 -NCT04383457 -NCT04383522 -NCT04383717 -NCT04383847 -NCT04383990 -NCT04384055 -NCT04384185 -NCT04384198 -NCT04384263 -NCT04384354 -NCT04384380 -NCT04384536 -NCT04384588 -NCT04384640 -NCT04384757 -NCT04384809 -NCT04384913 -NCT04384978 -NCT04385056 -NCT04385069 -NCT04385121 -NCT04385147 -NCT04385225 -NCT04385303 -NCT04385316 -NCT04385420 -NCT04385459 -NCT04385485 -NCT04385589 -NCT04385628 -NCT04385979 -NCT04386005 -NCT04386473 -NCT04386525 -NCT04386564 -NCT04386837 -NCT04386876 -NCT04386902 -NCT04386941 -NCT04386980 -NCT04387344 -NCT04387370 -NCT04387396 -NCT04387474 -NCT04387526 -NCT04387539 -NCT04387591 -NCT04387734 -NCT04387773 -NCT04387799 -NCT04387864 -NCT04388085 -NCT04388254 -NCT04388267 -NCT04388280 -NCT04388397 -NCT04388436 -NCT04388501 -NCT04388566 -NCT04388826 -NCT04388995 -NCT04389970 -NCT04390126 -NCT04390191 -NCT04390243 -NCT04390269 -NCT04390308 -NCT04390321 -NCT04390802 -NCT04390828 -NCT04390867 -NCT04391114 -NCT04391504 -NCT04391673 -NCT04391816 -NCT04391842 -NCT04391894 -NCT04391933 -NCT04391946 -NCT04392167 -NCT04392193 -NCT04392232 -NCT04392414 -NCT04392466 -NCT04392518 -NCT04392583 -NCT04392596 -NCT04392661 -NCT04392687 -NCT04392804 -NCT04392882 -NCT04392986 -NCT04393025 -NCT04393038 -NCT04393051 -NCT04393155 -NCT04393337 -NCT04393376 -NCT04393467 -NCT04393480 -NCT04393532 -NCT04393558 -NCT04393584 -NCT04393779 -NCT04393883 -NCT04393909 -NCT04394221 -NCT04394338 -NCT04394507 -NCT04394559 -NCT04394689 -NCT04394871 -NCT04395027 -NCT04395196 -NCT04395209 -NCT04395417 -NCT04395495 -NCT04395547 -NCT04395820 -NCT04396041 -NCT04396067 -NCT04396145 -NCT04396171 -NCT04396223 -NCT04396236 -NCT04396262 -NCT04396327 -NCT04396379 -NCT04396535 -NCT04396626 -NCT04396639 -NCT04396912 -NCT04396977 -NCT04397055 -NCT04397224 -NCT04397380 -NCT04397445 -NCT04397484 -NCT04397640 -NCT04397887 -NCT04398030 -NCT04398212 -NCT04398316 -NCT04398628 -NCT04398667 -NCT04398732 -NCT04398862 -NCT04399018 -NCT04399239 -NCT04399395 -NCT04399486 -NCT04399525 -NCT04399889 -NCT04400019 -NCT04400253 -NCT04400513 -NCT04400682 -NCT04400968 -NCT04401007 -NCT04401241 -NCT04401293 -NCT04401397 -NCT04401410 -NCT04401501 -NCT04401579 -NCT04401670 -NCT04401748 -NCT04401969 -NCT04402034 -NCT04402047 -NCT04402125 -NCT04402203 -NCT04402281 -NCT04402307 -NCT04402398 -NCT04402502 -NCT04402567 -NCT04402580 -NCT04402671 -NCT04402762 -NCT04402905 -NCT04402918 -NCT04402931 -NCT04402957 -NCT04403100 -NCT04403152 -NCT04403191 -NCT04403386 -NCT04403464 -NCT04403477 -NCT04403659 -NCT04403672 -NCT04403815 -NCT04403893 -NCT04404023 -NCT04404036 -NCT04404166 -NCT04404244 -NCT04404738 -NCT04404790 -NCT04404881 -NCT04405011 -NCT04405297 -NCT04405388 -NCT04405466 -NCT04405479 -NCT04405687 -NCT04405713 -NCT04405921 -NCT04405960 -NCT04406155 -NCT04406194 -NCT04406337 -NCT04406376 -NCT04406402 -NCT04406493 -NCT04406506 -NCT04406519 -NCT04406532 -NCT04406961 -NCT04407000 -NCT04407182 -NCT04407234 -NCT04407312 -NCT04407377 -NCT04407585 -NCT04407663 -NCT04407806 -NCT04408040 -NCT04408053 -NCT04408170 -NCT04408300 -NCT04408391 -NCT04408508 -NCT04408612 -NCT04408625 -NCT04408872 -NCT04408950 -NCT04408963 -NCT04408976 -NCT04409054 -NCT04409184 -NCT04409522 -NCT04409561 -NCT04409886 -NCT04410107 -NCT04410237 -NCT04410276 -NCT04410354 -NCT04410484 -NCT04410536 -NCT04410549 -NCT04410562 -NCT04410601 -NCT04410809 -NCT04410848 -NCT04410939 -NCT04411069 -NCT04411134 -NCT04411147 -NCT04411433 -NCT04411485 -NCT04411563 -NCT04411849 -NCT04411888 -NCT04411901 -NCT04411992 -NCT04412018 -NCT04412213 -NCT04412629 -NCT04412642 -NCT04412798 -NCT04412863 -NCT04413058 -NCT04413084 -NCT04413149 -NCT04413175 -NCT04413292 -NCT04413331 -NCT04413357 -NCT04413435 -NCT04413448 -NCT04413643 -NCT04413760 -NCT04413968 -NCT04414059 -NCT04414124 -NCT04414254 -NCT04414358 -NCT04414384 -NCT04414514 -NCT04414631 -NCT04414644 -NCT04414722 -NCT04414748 -NCT04414787 -NCT04414800 -NCT04414904 -NCT04414956 -NCT04415034 -NCT04415086 -NCT04415138 -NCT04415255 -NCT04415281 -NCT04415294 -NCT04415307 -NCT04415463 -NCT04415476 -NCT04415502 -NCT04415619 -NCT04415710 -NCT04415736 -NCT04415983 -NCT04416113 -NCT04416451 -NCT04416750 -NCT04416802 -NCT04416828 -NCT04417023 -NCT04417231 -NCT04417361 -NCT04417400 -NCT04417556 -NCT04417569 -NCT04417608 -NCT04417647 -NCT04417673 -NCT04417686 -NCT04417777 -NCT04417790 -NCT04417803 -NCT04417829 -NCT04418180 -NCT04418414 -NCT04418635 -NCT04418700 -NCT04418713 -NCT04418804 -NCT04419025 -NCT04419038 -NCT04419077 -NCT04419168 -NCT04419272 -NCT04419545 -NCT04419558 -NCT04419753 -NCT04419792 -NCT04419857 -NCT04420208 -NCT04420234 -NCT04420260 -NCT04420533 -NCT04420637 -NCT04420663 -NCT04420754 -NCT04420949 -NCT04420975 -NCT04421027 -NCT04421053 -NCT04421157 -NCT04421183 -NCT04421482 -NCT04421859 -NCT04422184 -NCT04422223 -NCT04422288 -NCT04422314 -NCT04422431 -NCT04422600 -NCT04422691 -NCT04422912 -NCT04423029 -NCT04423055 -NCT04423146 -NCT04423172 -NCT04423406 -NCT04423419 -NCT04423679 -NCT04423718 -NCT04423835 -NCT04424004 -NCT04424121 -NCT04424134 -NCT04424147 -NCT04424407 -NCT04424485 -NCT04424576 -NCT04424602 -NCT04424680 -NCT04424901 -NCT04424940 -NCT04424979 -NCT04425018 -NCT04425083 -NCT04425122 -NCT04425148 -NCT04425252 -NCT04425421 -NCT04425447 -NCT04425577 -NCT04425863 -NCT04425915 -NCT04425967 -NCT04426006 -NCT04426019 -NCT04426123 -NCT04426344 -NCT04426435 -NCT04426578 -NCT04426721 -NCT04426877 -NCT04427111 -NCT04427501 -NCT04427553 -NCT04427631 -NCT04427670 -NCT04427709 -NCT04427800 -NCT04427813 -NCT04427826 -NCT04427891 -NCT04428047 -NCT04428073 -NCT04428138 -NCT04428398 -NCT04428411 -NCT04428463 -NCT04428567 -NCT04428619 -NCT04428749 -NCT04429061 -NCT04429204 -NCT04429503 -NCT04429581 -NCT04429698 -NCT04429880 -NCT04429906 -NCT04429919 -NCT04429945 -NCT04430023 -NCT04430530 -NCT04430569 -NCT04430595 -NCT04430738 -NCT04430842 -NCT04430855 -NCT04430881 -NCT04430946 -NCT04431024 -NCT04431193 -NCT04431206 -NCT04431271 -NCT04431414 -NCT04431518 -NCT04431609 -NCT04431622 -NCT04431726 -NCT04431895 -NCT04432233 -NCT04432337 -NCT04432376 -NCT04432597 -NCT04432714 -NCT04433013 -NCT04433039 -NCT04433143 -NCT04433156 -NCT04433507 -NCT04433546 -NCT04433611 -NCT04433754 -NCT04433819 -NCT04433871 -NCT04433923 -NCT04433936 -NCT04433949 -NCT04434053 -NCT04434144 -NCT04434222 -NCT04434274 -NCT04434378 -NCT04434443 -NCT04434521 -NCT04434547 -NCT04434612 -NCT04434768 -NCT04434898 -NCT04434976 -NCT04435210 -NCT04435704 -NCT04435860 -NCT04435951 -NCT04436042 -NCT04436081 -NCT04436159 -NCT04436341 -NCT04436367 -NCT04436601 -NCT04436692 -NCT04436796 -NCT04436809 -NCT04436991 -NCT04437043 -NCT04437108 -NCT04437134 -NCT04437147 -NCT04437160 -NCT04437277 -NCT04437290 -NCT04437381 -NCT04437407 -NCT04437784 -NCT04437810 -NCT04437953 -NCT04437979 -NCT04438057 -NCT04438239 -NCT04438447 -NCT04438486 -NCT04438525 -NCT04438538 -NCT04438564 -NCT04438577 -NCT04438655 -NCT04439071 -NCT04439084 -NCT04439162 -NCT04439214 -NCT04439565 -NCT04439799 -NCT04439955 -NCT04440150 -NCT04440189 -NCT04440579 -NCT04440605 -NCT04440644 -NCT04440683 -NCT04440930 -NCT04441164 -NCT04441203 -NCT04441216 -NCT04441281 -NCT04441411 -NCT04441450 -NCT04441489 -NCT04441541 -NCT04441606 -NCT04441645 -NCT04441762 -NCT04441840 -NCT04442321 -NCT04442490 -NCT04442555 -NCT04442581 -NCT04442646 -NCT04442672 -NCT04442724 -NCT04442841 -NCT04442984 -NCT04443309 -NCT04443452 -NCT04444024 -NCT04444219 -NCT04444297 -NCT04444531 -NCT04444609 -NCT04444986 -NCT04445012 -NCT04445025 -NCT04445415 -NCT04445675 -NCT04445792 -NCT04445896 -NCT04445974 -NCT04445987 -NCT04446325 -NCT04446338 -NCT04446377 -NCT04446559 -NCT04446949 -NCT04447066 -NCT04447079 -NCT04447105 -NCT04447144 -NCT04447183 -NCT04447313 -NCT04447352 -NCT04447391 -NCT04447664 -NCT04447677 -NCT04447872 -NCT04447989 -NCT04448002 -NCT04448145 -NCT04448249 -NCT04448340 -NCT04448574 -NCT04448600 -NCT04448613 -NCT04448691 -NCT04448873 -NCT04448964 -NCT04449133 -NCT04449146 -NCT04449237 -NCT04449419 -NCT04449458 -NCT04449510 -NCT04449523 -NCT04449614 -NCT04449666 -NCT04449848 -NCT04450069 -NCT04450082 -NCT04450290 -NCT04450316 -NCT04450407 -NCT04450498 -NCT04450524 -NCT04450563 -NCT04450628 -NCT04450654 -NCT04450706 -NCT04451252 -NCT04451265 -NCT04451330 -NCT04451616 -NCT04451629 -NCT04451707 -NCT04451928 -NCT04452019 -NCT04452227 -NCT04452253 -NCT04452305 -NCT04452409 -NCT04452422 -NCT04452578 -NCT04452604 -NCT04452734 -NCT04452760 -NCT04452799 -NCT04452812 -NCT04452864 -NCT04452890 -NCT04452929 -NCT04453020 -NCT04453046 -NCT04453072 -NCT04453306 -NCT04453345 -NCT04453384 -NCT04453501 -NCT04453527 -NCT04453839 -NCT04453878 -NCT04454047 -NCT04454060 -NCT04454099 -NCT04454125 -NCT04454164 -NCT04454177 -NCT04454320 -NCT04454476 -NCT04454502 -NCT04454541 -NCT04454866 -NCT04454892 -NCT04454970 -NCT04454983 -NCT04455425 -NCT04455555 -NCT04455568 -NCT04455750 -NCT04455802 -NCT04455828 -NCT04455958 -NCT04456192 -NCT04456205 -NCT04456218 -NCT04456387 -NCT04456426 -NCT04456517 -NCT04456894 -NCT04457011 -NCT04457024 -NCT04457076 -NCT04457232 -NCT04457349 -NCT04457362 -NCT04457401 -NCT04457440 -NCT04457492 -NCT04457518 -NCT04457596 -NCT04457674 -NCT04457700 -NCT04457843 -NCT04458194 -NCT04458207 -NCT04458376 -NCT04458636 -NCT04458662 -NCT04458688 -NCT04458753 -NCT04458974 -NCT04459169 -NCT04459286 -NCT04459702 -NCT04459897 -NCT04460014 -NCT04460040 -NCT04460274 -NCT04460300 -NCT04460326 -NCT04460391 -NCT04460404 -NCT04460599 -NCT04460625 -NCT04460872 -NCT04460937 -NCT04460989 -NCT04461327 -NCT04461340 -NCT04461418 -NCT04461587 -NCT04461626 -NCT04461639 -NCT04461678 -NCT04461730 -NCT04461821 -NCT04462068 -NCT04462081 -NCT04462185 -NCT04462198 -NCT04462367 -NCT04462471 -NCT04462601 -NCT04462666 -NCT04462705 -NCT04462770 -NCT04462848 -NCT04462913 -NCT04462991 -NCT04463056 -NCT04463069 -NCT04463082 -NCT04463095 -NCT04463121 -NCT04463186 -NCT04463316 -NCT04463420 -NCT04463524 -NCT04463537 -NCT04463732 -NCT04463758 -NCT04463927 -NCT04464200 -NCT04464382 -NCT04464512 -NCT04464811 -NCT04464876 -NCT04464915 -NCT04465045 -NCT04465084 -NCT04465123 -NCT04465331 -NCT04465396 -NCT04465435 -NCT04465513 -NCT04465539 -NCT04465591 -NCT04465604 -NCT04465682 -NCT04465786 -NCT04465968 -NCT04466020 -NCT04466072 -NCT04466241 -NCT04466774 -NCT04466826 -NCT04467021 -NCT04467190 -NCT04467203 -NCT04467242 -NCT04467541 -NCT04467554 -NCT04467684 -NCT04467710 -NCT04467736 -NCT04467983 -NCT04468165 -NCT04468191 -NCT04468516 -NCT04468542 -NCT04468867 -NCT04469140 -NCT04469153 -NCT04469179 -NCT04469244 -NCT04469309 -NCT04469517 -NCT04469946 -NCT04470076 -NCT04470323 -NCT04470336 -NCT04470479 -NCT04470518 -NCT04470531 -NCT04470583 -NCT04470856 -NCT04471155 -NCT04471220 -NCT04471233 -NCT04471259 -NCT04471285 -NCT04471298 -NCT04471597 -NCT04471740 -NCT04471805 -NCT04471818 -NCT04471831 -NCT04471987 -NCT04472039 -NCT04472052 -NCT04472130 -NCT04472169 -NCT04472312 -NCT04472364 -NCT04472377 -NCT04472468 -NCT04472546 -NCT04472572 -NCT04472702 -NCT04472832 -NCT04472910 -NCT04472923 -NCT04472988 -NCT04473040 -NCT04473066 -NCT04473170 -NCT04473430 -NCT04473443 -NCT04473742 -NCT04473768 -NCT04473859 -NCT04473872 -NCT04474405 -NCT04474626 -NCT04474808 -NCT04474847 -NCT04474912 -NCT04475133 -NCT04475198 -NCT04475796 -NCT04475809 -NCT04475874 -NCT04476030 -NCT04476095 -NCT04476121 -NCT04476251 -NCT04476264 -NCT04476303 -NCT04476342 -NCT04476394 -NCT04476420 -NCT04476485 -NCT04476511 -NCT04476563 -NCT04476719 -NCT04476745 -NCT04476875 -NCT04476888 -NCT04476927 -NCT04477005 -NCT04477096 -NCT04477135 -NCT04477746 -NCT04477759 -NCT04477785 -NCT04477837 -NCT04478162 -NCT04478227 -NCT04478344 -NCT04478409 -NCT04478487 -NCT04478513 -NCT04478526 -NCT04478578 -NCT04478669 -NCT04479085 -NCT04479163 -NCT04479202 -NCT04479280 -NCT04479319 -NCT04479423 -NCT04479449 -NCT04479501 -NCT04479592 -NCT04479657 -NCT04479761 -NCT04479787 -NCT04479826 -NCT04480034 -NCT04480060 -NCT04480164 -NCT04480203 -NCT04480216 -NCT04480307 -NCT04480398 -NCT04480437 -NCT04480541 -NCT04480723 -NCT04480853 -NCT04480983 -NCT04481022 -NCT04481061 -NCT04481113 -NCT04481321 -NCT04481360 -NCT04481464 -NCT04481620 -NCT04481633 -NCT04481841 -NCT04481867 -NCT04481958 -NCT04482036 -NCT04482075 -NCT04482127 -NCT04482309 -NCT04482595 -NCT04482686 -NCT04482699 -NCT04482712 -NCT04482738 -NCT04482907 -NCT04482946 -NCT04483154 -NCT04483505 -NCT04483830 -NCT04483947 -NCT04484077 -NCT04484103 -NCT04484467 -NCT04484480 -NCT04484493 -NCT04484545 -NCT04484597 -NCT04484649 -NCT04484701 -NCT04484714 -NCT04485039 -NCT04485247 -NCT04485312 -NCT04485403 -NCT04485637 -NCT04485650 -NCT04485923 -NCT04486105 -NCT04486131 -NCT04486183 -NCT04486326 -NCT04486716 -NCT04486742 -NCT04486976 -NCT04487223 -NCT04487327 -NCT04487340 -NCT04487561 -NCT04487639 -NCT04488120 -NCT04488614 -NCT04488679 -NCT04488705 -NCT04488965 -NCT04489134 -NCT04489693 -NCT04489758 -NCT04490161 -NCT04490239 -NCT04490252 -NCT04490512 -NCT04490590 -NCT04490603 -NCT04490746 -NCT04490824 -NCT04490889 -NCT04490967 -NCT04491006 -NCT04491110 -NCT04491162 -NCT04491370 -NCT04491513 -NCT04491565 -NCT04491734 -NCT04491747 -NCT04491799 -NCT04491916 -NCT04491955 -NCT04492046 -NCT04492150 -NCT04492176 -NCT04492397 -NCT04492553 -NCT04492566 -NCT04492592 -NCT04492865 -NCT04492904 -NCT04493177 -NCT04493307 -NCT04493593 -NCT04493619 -NCT04493658 -NCT04494061 -NCT04494204 -NCT04494295 -NCT04494334 -NCT04494529 -NCT04494542 -NCT04494763 -NCT04495127 -NCT04495218 -NCT04495257 -NCT04495348 -NCT04495387 -NCT04495439 -NCT04495556 -NCT04495569 -NCT04495660 -NCT04495699 -NCT04495764 -NCT04495777 -NCT04495920 -NCT04496310 -NCT04496440 -NCT04496479 -NCT04496609 -NCT04496726 -NCT04496778 -NCT04496791 -NCT04496960 -NCT04496973 -NCT04496986 -NCT04497012 -NCT04497194 -NCT04497285 -NCT04497298 -NCT04497311 -NCT04497337 -NCT04497428 -NCT04497454 -NCT04497493 -NCT04497714 -NCT04497831 -NCT04497987 -NCT04498325 -NCT04498533 -NCT04498546 -NCT04498572 -NCT04498611 -NCT04498650 -NCT04498936 -NCT04499157 -NCT04499378 -NCT04499430 -NCT04499469 -NCT04499677 -NCT04500041 -NCT04500067 -NCT04500106 -NCT04500223 -NCT04500262 -NCT04500288 -NCT04500314 -NCT04500353 -NCT04500405 -NCT04500418 -NCT04501029 -NCT04501081 -NCT04501094 -NCT04501159 -NCT04501250 -NCT04501263 -NCT04501445 -NCT04501484 -NCT04501510 -NCT04501770 -NCT04501874 -NCT04501926 -NCT04502186 -NCT04502199 -NCT04502264 -NCT04502459 -NCT04502550 -NCT04502680 -NCT04502719 -NCT04502745 -NCT04502927 -NCT04503044 -NCT04503070 -NCT04503096 -NCT04503200 -NCT04503330 -NCT04503460 -NCT04503473 -NCT04503564 -NCT04503668 -NCT04503733 -NCT04503785 -NCT04503850 -NCT04503941 -NCT04504032 -NCT04504227 -NCT04504461 -NCT04504487 -NCT04504565 -NCT04504825 -NCT04504838 -NCT04504916 -NCT04505150 -NCT04505215 -NCT04505293 -NCT04505475 -NCT04505592 -NCT04505683 -NCT04505735 -NCT04505956 -NCT04506411 -NCT04506528 -NCT04506658 -NCT04506671 -NCT04506684 -NCT04506775 -NCT04506853 -NCT04506879 -NCT04507009 -NCT04507035 -NCT04507347 -NCT04507373 -NCT04507555 -NCT04507893 -NCT04507932 -NCT04507984 -NCT04508023 -NCT04508088 -NCT04508205 -NCT04508257 -NCT04508283 -NCT04508348 -NCT04508361 -NCT04508426 -NCT04508491 -NCT04508660 -NCT04509154 -NCT04509180 -NCT04509271 -NCT04509310 -NCT04509323 -NCT04509349 -NCT04509362 -NCT04509492 -NCT04509557 -NCT04509570 -NCT04509609 -NCT04509661 -NCT04509921 -NCT04509960 -NCT04510064 -NCT04510077 -NCT04510246 -NCT04510259 -NCT04510402 -NCT04510428 -NCT04511052 -NCT04511689 -NCT04511702 -NCT04511936 -NCT04512092 -NCT04512144 -NCT04512170 -NCT04512196 -NCT04512352 -NCT04512508 -NCT04512547 -NCT04512599 -NCT04512820 -NCT04512885 -NCT04512911 -NCT04513054 -NCT04513093 -NCT04513171 -NCT04513197 -NCT04513288 -NCT04513366 -NCT04513405 -NCT04513665 -NCT04513704 -NCT04513821 -NCT04513860 -NCT04514042 -NCT04514250 -NCT04514328 -NCT04514445 -NCT04514497 -NCT04514510 -NCT04514614 -NCT04514718 -NCT04514796 -NCT04514809 -NCT04514887 -NCT04515420 -NCT04515498 -NCT04515550 -NCT04515576 -NCT04515615 -NCT04515693 -NCT04515810 -NCT04515966 -NCT04516005 -NCT04516200 -NCT04516382 -NCT04516473 -NCT04516655 -NCT04516759 -NCT04516915 -NCT04517058 -NCT04517162 -NCT04517240 -NCT04517422 -NCT04517630 -NCT04517955 -NCT04518410 -NCT04518436 -NCT04518475 -NCT04518514 -NCT04518527 -NCT04518540 -NCT04518709 -NCT04518852 -NCT04518917 -NCT04518969 -NCT04519021 -NCT04519086 -NCT04519125 -NCT04519346 -NCT04519398 -NCT04519463 -NCT04519502 -NCT04519515 -NCT04520022 -NCT04520126 -NCT04520230 -NCT04520256 -NCT04520295 -NCT04520334 -NCT04520347 -NCT04520412 -NCT04520464 -NCT04520516 -NCT04520646 -NCT04520828 -NCT04521218 -NCT04521348 -NCT04521387 -NCT04521400 -NCT04521452 -NCT04521478 -NCT04521790 -NCT04521803 -NCT04521881 -NCT04521894 -NCT04521972 -NCT04522076 -NCT04522180 -NCT04522232 -NCT04522414 -NCT04522479 -NCT04522570 -NCT04522700 -NCT04522960 -NCT04522999 -NCT04523025 -NCT04523116 -NCT04523428 -NCT04523441 -NCT04523454 -NCT04523480 -NCT04523571 -NCT04523597 -NCT04524117 -NCT04524156 -NCT04524260 -NCT04524273 -NCT04524338 -NCT04524468 -NCT04524481 -NCT04524507 -NCT04524624 -NCT04524832 -NCT04524897 -NCT04524910 -NCT04525027 -NCT04525144 -NCT04525248 -NCT04525326 -NCT04525339 -NCT04525833 -NCT04525885 -NCT04526275 -NCT04526405 -NCT04526418 -NCT04526613 -NCT04526808 -NCT04526847 -NCT04526912 -NCT04526925 -NCT04526964 -NCT04527029 -NCT04527211 -NCT04527263 -NCT04527367 -NCT04527536 -NCT04527575 -NCT04527588 -NCT04527783 -NCT04527796 -NCT04528082 -NCT04528121 -NCT04528225 -NCT04528277 -NCT04528342 -NCT04528381 -NCT04528472 -NCT04528563 -NCT04528628 -NCT04528784 -NCT04528875 -NCT04528914 -NCT04528927 -NCT04528953 -NCT04529044 -NCT04529174 -NCT04529343 -NCT04529356 -NCT04529369 -NCT04529577 -NCT04529707 -NCT04529941 -NCT04529954 -NCT04529980 -NCT04529993 -NCT04530149 -NCT04530201 -NCT04530253 -NCT04530370 -NCT04530565 -NCT04530578 -NCT04530721 -NCT04530812 -NCT04531072 -NCT04531150 -NCT04531163 -NCT04531176 -NCT04531189 -NCT04531267 -NCT04531280 -NCT04531293 -NCT04531319 -NCT04531579 -NCT04531618 -NCT04531644 -NCT04531683 -NCT04532073 -NCT04532320 -NCT04532398 -NCT04532463 -NCT04532645 -NCT04532710 -NCT04532775 -NCT04532931 -NCT04532970 -NCT04532983 -NCT04533048 -NCT04533178 -NCT04533269 -NCT04533347 -NCT04533412 -NCT04533425 -NCT04533438 -NCT04533854 -NCT04534023 -NCT04534036 -NCT04534062 -NCT04534075 -NCT04534179 -NCT04534309 -NCT04534387 -NCT04534465 -NCT04534660 -NCT04534842 -NCT04534881 -NCT04534894 -NCT04535063 -NCT04535167 -NCT04535349 -NCT04535401 -NCT04535414 -NCT04535609 -NCT04535674 -NCT04535765 -NCT04535804 -NCT04535843 -NCT04535869 -NCT04535921 -NCT04535986 -NCT04536142 -NCT04536298 -NCT04536545 -NCT04536857 -NCT04536948 -NCT04537078 -NCT04537104 -NCT04537377 -NCT04537390 -NCT04537572 -NCT04537650 -NCT04537949 -NCT04538027 -NCT04538209 -NCT04538352 -NCT04538430 -NCT04538456 -NCT04538495 -NCT04538703 -NCT04538950 -NCT04538976 -NCT04539015 -NCT04539223 -NCT04539392 -NCT04539522 -NCT04539535 -NCT04539613 -NCT04539678 -NCT04540042 -NCT04540120 -NCT04540133 -NCT04540198 -NCT04540237 -NCT04540341 -NCT04540406 -NCT04540549 -NCT04540757 -NCT04540796 -NCT04540900 -NCT04541030 -NCT04541069 -NCT04541082 -NCT04541095 -NCT04541134 -NCT04541160 -NCT04541173 -NCT04541238 -NCT04541316 -NCT04541342 -NCT04541355 -NCT04541563 -NCT04541615 -NCT04542005 -NCT04542057 -NCT04542187 -NCT04542278 -NCT04542343 -NCT04542447 -NCT04542512 -NCT04542551 -NCT04542590 -NCT04542629 -NCT04542655 -NCT04542798 -NCT04542811 -NCT04542837 -NCT04543110 -NCT04543149 -NCT04543253 -NCT04543318 -NCT04543383 -NCT04543630 -NCT04543643 -NCT04543760 -NCT04543955 -NCT04543981 -NCT04544215 -NCT04544657 -NCT04544722 -NCT04544904 -NCT04545034 -NCT04545398 -NCT04545424 -NCT04545450 -NCT04545515 -NCT04545567 -NCT04545606 -NCT04545671 -NCT04545762 -NCT04545944 -NCT04545983 -NCT04546165 -NCT04546191 -NCT04546256 -NCT04546321 -NCT04546399 -NCT04546425 -NCT04546633 -NCT04546646 -NCT04546659 -NCT04546802 -NCT04546958 -NCT04546984 -NCT04546997 -NCT04547153 -NCT04547166 -NCT04547361 -NCT04547556 -NCT04547738 -NCT04547764 -NCT04547842 -NCT04547881 -NCT04547907 -NCT04548102 -NCT04548206 -NCT04548232 -NCT04548297 -NCT04548349 -NCT04548791 -NCT04548934 -NCT04549129 -NCT04549246 -NCT04549402 -NCT04549584 -NCT04549597 -NCT04549649 -NCT04549857 -NCT04550169 -NCT04550390 -NCT04550468 -NCT04550689 -NCT04550819 -NCT04550988 -NCT04551079 -NCT04551170 -NCT04551339 -NCT04551417 -NCT04551495 -NCT04551521 -NCT04551599 -NCT04551612 -NCT04551664 -NCT04551833 -NCT04551898 -NCT04551924 -NCT04552028 -NCT04552158 -NCT04552249 -NCT04552418 -NCT04552496 -NCT04552743 -NCT04552769 -NCT04553068 -NCT04553094 -NCT04553172 -NCT04553211 -NCT04553224 -NCT04553276 -NCT04553302 -NCT04553315 -NCT04553354 -NCT04553406 -NCT04553562 -NCT04553575 -NCT04553653 -NCT04553874 -NCT04553913 -NCT04553991 -NCT04554082 -NCT04554147 -NCT04554160 -NCT04554290 -NCT04554342 -NCT04554355 -NCT04554459 -NCT04554472 -NCT04554485 -NCT04554615 -NCT04554940 -NCT04554953 -NCT04555161 -NCT04555239 -NCT04555278 -NCT04555291 -NCT04555343 -NCT04555356 -NCT04555382 -NCT04555421 -NCT04555499 -NCT04555525 -NCT04555538 -NCT04555772 -NCT04555785 -NCT04556071 -NCT04556409 -NCT04556461 -NCT04556981 -NCT04556994 -NCT04557046 -NCT04557085 -NCT04557150 -NCT04557215 -NCT04557371 -NCT04557410 -NCT04557449 -NCT04557553 -NCT04557579 -NCT04557618 -NCT04557644 -NCT04557774 -NCT04557826 -NCT04557865 -NCT04557943 -NCT04558021 -NCT04558125 -NCT04558216 -NCT04558242 -NCT04558268 -NCT04558372 -NCT04558567 -NCT04558619 -NCT04558645 -NCT04558697 -NCT04558736 -NCT04558996 -NCT04559009 -NCT04559269 -NCT04559503 -NCT04559620 -NCT04559919 -NCT04559945 -NCT04560205 -NCT04560257 -NCT04560842 -NCT04560907 -NCT04560933 -NCT04560985 -NCT04561063 -NCT04561089 -NCT04561102 -NCT04561219 -NCT04561323 -NCT04561401 -NCT04561414 -NCT04561505 -NCT04561583 -NCT04561661 -NCT04561791 -NCT04561804 -NCT04561869 -NCT04561882 -NCT04561921 -NCT04561960 -NCT04561999 -NCT04562129 -NCT04562350 -NCT04562701 -NCT04562831 -NCT04563091 -NCT04563208 -NCT04563221 -NCT04563468 -NCT04563507 -NCT04563520 -NCT04563767 -NCT04563806 -NCT04564144 -NCT04564235 -NCT04564430 -NCT04564456 -NCT04564469 -NCT04564729 -NCT04564846 -NCT04565093 -NCT04565106 -NCT04565210 -NCT04565236 -NCT04565314 -NCT04565353 -NCT04565392 -NCT04565431 -NCT04565483 -NCT04565509 -NCT04565548 -NCT04565847 -NCT04565873 -NCT04566315 -NCT04566458 -NCT04566718 -NCT04566952 -NCT04566991 -NCT04567147 -NCT04567225 -NCT04567277 -NCT04567355 -NCT04567368 -NCT04567420 -NCT04567433 -NCT04567511 -NCT04567758 -NCT04567797 -NCT04567914 -NCT04568005 -NCT04568031 -NCT04568044 -NCT04568148 -NCT04568174 -NCT04568252 -NCT04568356 -NCT04568460 -NCT04568499 -NCT04568616 -NCT04568759 -NCT04568811 -NCT04568941 -NCT04568954 -NCT04569006 -NCT04569110 -NCT04569136 -NCT04569149 -NCT04569279 -NCT04569292 -NCT04569370 -NCT04569422 -NCT04569591 -NCT04569682 -NCT04569708 -NCT04569721 -NCT04569747 -NCT04569786 -NCT04569825 -NCT04570046 -NCT04570215 -NCT04570254 -NCT04570397 -NCT04570540 -NCT04570566 -NCT04570592 -NCT04570696 -NCT04570722 -NCT04570761 -NCT04570852 -NCT04571008 -NCT04571034 -NCT04571060 -NCT04571255 -NCT04571333 -NCT04571372 -NCT04571411 -NCT04571450 -NCT04571476 -NCT04571489 -NCT04571541 -NCT04571710 -NCT04571788 -NCT04571801 -NCT04572022 -NCT04572503 -NCT04572555 -NCT04572568 -NCT04572672 -NCT04572802 -NCT04572867 -NCT04572984 -NCT04573049 -NCT04573062 -NCT04573231 -NCT04573257 -NCT04573309 -NCT04573504 -NCT04573582 -NCT04573777 -NCT04573907 -NCT04574102 -NCT04574115 -NCT04574297 -NCT04574336 -NCT04574375 -NCT04574583 -NCT04574635 -NCT04574700 -NCT04574765 -NCT04574999 -NCT04575077 -NCT04575090 -NCT04575129 -NCT04575194 -NCT04575337 -NCT04575376 -NCT04575389 -NCT04575493 -NCT04575610 -NCT04575636 -NCT04575649 -NCT04575714 -NCT04575844 -NCT04575857 -NCT04575909 -NCT04575948 -NCT04575974 -NCT04576078 -NCT04576182 -NCT04576221 -NCT04576247 -NCT04576273 -NCT04576299 -NCT04576403 -NCT04576676 -NCT04576793 -NCT04576936 -NCT04577040 -NCT04577053 -NCT04577105 -NCT04577170 -NCT04577248 -NCT04577274 -NCT04577300 -NCT04577378 -NCT04577482 -NCT04577521 -NCT04577625 -NCT04577950 -NCT04578080 -NCT04578106 -NCT04578301 -NCT04578457 -NCT04578639 -NCT04578769 -NCT04578847 -NCT04578860 -NCT04578977 -NCT04579146 -NCT04579237 -NCT04579250 -NCT04579315 -NCT04579367 -NCT04579445 -NCT04579497 -NCT04579588 -NCT04579614 -NCT04579666 -NCT04579731 -NCT04579848 -NCT04579913 -NCT04579952 -NCT04579965 -NCT04580069 -NCT04580199 -NCT04580225 -NCT04580238 -NCT04580264 -NCT04580329 -NCT04580381 -NCT04580407 -NCT04580433 -NCT04580511 -NCT04580563 -NCT04580628 -NCT04580641 -NCT04580823 -NCT04581148 -NCT04581239 -NCT04581291 -NCT04581408 -NCT04581421 -NCT04581837 -NCT04581941 -NCT04581980 -NCT04582292 -NCT04582383 -NCT04582500 -NCT04582721 -NCT04582825 -NCT04583189 -NCT04583215 -NCT04583228 -NCT04583280 -NCT04583527 -NCT04583618 -NCT04583683 -NCT04583735 -NCT04583761 -NCT04583826 -NCT04584034 -NCT04584060 -NCT04584073 -NCT04584112 -NCT04584138 -NCT04584203 -NCT04584437 -NCT04584489 -NCT04584528 -NCT04584580 -NCT04584801 -NCT04584840 -NCT04584866 -NCT04584970 -NCT04585061 -NCT04585100 -NCT04585113 -NCT04585152 -NCT04585243 -NCT04585256 -NCT04585373 -NCT04585438 -NCT04585542 -NCT04585594 -NCT04585750 -NCT04585828 -NCT04585997 -NCT04586075 -NCT04586179 -NCT04586283 -NCT04586400 -NCT04586452 -NCT04586816 -NCT04587050 -NCT04587206 -NCT04587440 -NCT04587544 -NCT04587635 -NCT04587648 -NCT04587674 -NCT04587726 -NCT04588077 -NCT04588207 -NCT04588233 -NCT04588272 -NCT04588337 -NCT04588376 -NCT04588558 -NCT04588636 -NCT04588688 -NCT04588857 -NCT04588974 -NCT04589273 -NCT04589299 -NCT04589312 -NCT04589481 -NCT04589598 -NCT04589624 -NCT04589819 -NCT04589858 -NCT04589949 -NCT04590066 -NCT04590079 -NCT04590391 -NCT04590456 -NCT04590638 -NCT04590716 -NCT04590755 -NCT04590807 -NCT04591054 -NCT04591093 -NCT04591132 -NCT04591275 -NCT04591301 -NCT04591405 -NCT04591613 -NCT04591782 -NCT04591860 -NCT04591951 -NCT04591977 -NCT04592094 -NCT04592133 -NCT04592302 -NCT04592471 -NCT04592549 -NCT04592601 -NCT04592627 -NCT04592692 -NCT04592822 -NCT04593004 -NCT04593173 -NCT04593303 -NCT04593407 -NCT04593563 -NCT04593771 -NCT04593966 -NCT04594057 -NCT04594148 -NCT04594252 -NCT04594304 -NCT04594369 -NCT04594486 -NCT04594512 -NCT04594590 -NCT04594720 -NCT04594954 -NCT04595006 -NCT04595032 -NCT04595045 -NCT04595058 -NCT04595227 -NCT04595240 -NCT04595331 -NCT04595344 -NCT04595474 -NCT04595513 -NCT04595526 -NCT04595747 -NCT04595760 -NCT04595942 -NCT04596007 -NCT04596020 -NCT04596085 -NCT04596150 -NCT04596241 -NCT04596319 -NCT04596527 -NCT04596540 -NCT04596787 -NCT04596826 -NCT04596969 -NCT04596982 -NCT04597138 -NCT04597203 -NCT04597437 -NCT04597554 -NCT04598126 -NCT04598152 -NCT04598295 -NCT04598334 -NCT04598425 -NCT04598490 -NCT04598568 -NCT04598789 -NCT04598815 -NCT04598841 -NCT04598971 -NCT04599153 -NCT04599179 -NCT04599205 -NCT04599218 -NCT04599283 -NCT04599374 -NCT04599621 -NCT04599803 -NCT04599829 -NCT04599855 -NCT04600011 -NCT04600063 -NCT04600349 -NCT04600479 -NCT04600674 -NCT04600739 -NCT04600752 -NCT04600895 -NCT04600973 -NCT04601077 -NCT04601233 -NCT04601298 -NCT04601324 -NCT04601467 -NCT04601558 -NCT04601792 -NCT04601883 -NCT04601909 -NCT04601987 -NCT04602117 -NCT04602130 -NCT04602195 -NCT04602234 -NCT04602286 -NCT04602299 -NCT04602390 -NCT04602442 -NCT04602572 -NCT04602663 -NCT04602676 -NCT04602754 -NCT04602780 -NCT04602793 -NCT04602819 -NCT04602858 -NCT04603040 -NCT04603105 -NCT04603157 -NCT04603248 -NCT04603469 -NCT04603508 -NCT04603560 -NCT04603703 -NCT04603716 -NCT04604015 -NCT04604041 -NCT04604067 -NCT04604132 -NCT04604223 -NCT04604353 -NCT04604366 -NCT04604405 -NCT04604444 -NCT04604522 -NCT04604535 -NCT04604548 -NCT04604600 -NCT04604691 -NCT04604730 -NCT04604951 -NCT04604977 -NCT04605107 -NCT04605159 -NCT04605198 -NCT04605263 -NCT04605302 -NCT04605419 -NCT04605510 -NCT04605575 -NCT04605627 -NCT04605705 -NCT04605861 -NCT04605978 -NCT04606004 -NCT04606355 -NCT04606693 -NCT04606849 -NCT04606992 -NCT04607109 -NCT04607265 -NCT04607356 -NCT04607369 -NCT04607408 -NCT04607473 -NCT04607564 -NCT04607603 -NCT04607772 -NCT04607824 -NCT04607850 -NCT04607863 -NCT04607967 -NCT04608071 -NCT04608084 -NCT04608136 -NCT04608162 -NCT04608357 -NCT04608435 -NCT04608474 -NCT04608487 -NCT04608500 -NCT04608604 -NCT04608773 -NCT04608851 -NCT04608864 -NCT04608955 -NCT04609020 -NCT04609436 -NCT04609709 -NCT04609735 -NCT04609787 -NCT04609839 -NCT04609852 -NCT04609982 -NCT04610138 -NCT04610372 -NCT04610385 -NCT04610424 -NCT04610437 -NCT04610450 -NCT04610632 -NCT04610814 -NCT04610918 -NCT04610957 -NCT04611464 -NCT04611477 -NCT04611516 -NCT04611594 -NCT04611672 -NCT04611685 -NCT04611828 -NCT04611958 -NCT04611971 -NCT04611997 -NCT04612036 -NCT04612218 -NCT04612283 -NCT04612413 -NCT04612478 -NCT04612556 -NCT04612634 -NCT04612660 -NCT04612803 -NCT04613089 -NCT04613206 -NCT04613323 -NCT04613791 -NCT04613973 -NCT04613986 -NCT04614142 -NCT04614246 -NCT04614324 -NCT04614337 -NCT04614402 -NCT04614519 -NCT04614545 -NCT04614610 -NCT04614779 -NCT04614935 -NCT04614974 -NCT04615065 -NCT04615078 -NCT04615624 -NCT04615663 -NCT04615702 -NCT04615728 -NCT04615767 -NCT04616066 -NCT04616326 -NCT04616339 -NCT04616352 -NCT04616508 -NCT04616547 -NCT04616625 -NCT04616924 -NCT04616989 -NCT04617054 -NCT04617223 -NCT04617418 -NCT04617600 -NCT04617808 -NCT04617847 -NCT04618081 -NCT04618120 -NCT04618224 -NCT04618237 -NCT04618510 -NCT04618627 -NCT04618666 -NCT04618679 -NCT04618822 -NCT04619095 -NCT04619199 -NCT04619290 -NCT04619524 -NCT04619589 -NCT04619628 -NCT04619680 -NCT04619719 -NCT04619862 -NCT04620057 -NCT04620096 -NCT04620161 -NCT04620174 -NCT04620538 -NCT04620629 -NCT04620980 -NCT04620993 -NCT04621032 -NCT04621045 -NCT04621136 -NCT04621240 -NCT04621331 -NCT04621461 -NCT04621539 -NCT04621799 -NCT04621825 -NCT04621916 -NCT04622098 -NCT04622410 -NCT04622449 -NCT04622891 -NCT04622969 -NCT04623008 -NCT04623073 -NCT04623086 -NCT04623203 -NCT04623216 -NCT04623580 -NCT04623749 -NCT04623801 -NCT04623840 -NCT04623866 -NCT04624087 -NCT04624230 -NCT04624334 -NCT04624399 -NCT04624412 -NCT04624425 -NCT04624477 -NCT04624568 -NCT04624789 -NCT04624971 -NCT04625322 -NCT04625361 -NCT04625374 -NCT04625816 -NCT04625881 -NCT04626063 -NCT04626219 -NCT04626544 -NCT04626674 -NCT04626817 -NCT04626843 -NCT04626986 -NCT04627168 -NCT04627727 -NCT04627766 -NCT04627818 -NCT04627909 -NCT04627987 -NCT04628000 -NCT04628182 -NCT04628312 -NCT04628429 -NCT04628455 -NCT04628468 -NCT04628572 -NCT04628585 -NCT04628650 -NCT04628871 -NCT04628884 -NCT04628975 -NCT04629014 -NCT04629040 -NCT04629157 -NCT04629183 -NCT04629235 -NCT04629378 -NCT04629482 -NCT04629599 -NCT04629664 -NCT04629677 -NCT04629859 -NCT04630028 -NCT04630067 -NCT04630145 -NCT04630275 -NCT04630301 -NCT04630353 -NCT04630444 -NCT04630574 -NCT04630678 -NCT04630951 -NCT04631003 -NCT04631016 -NCT04631068 -NCT04631094 -NCT04631107 -NCT04631211 -NCT04631224 -NCT04631237 -NCT04631250 -NCT04631341 -NCT04631354 -NCT04631471 -NCT04631484 -NCT04631536 -NCT04631575 -NCT04631614 -NCT04631640 -NCT04631718 -NCT04631796 -NCT04631809 -NCT04632173 -NCT04632225 -NCT04632381 -NCT04632394 -NCT04632485 -NCT04632628 -NCT04632836 -NCT04632888 -NCT04632901 -NCT04632914 -NCT04633057 -NCT04633213 -NCT04633252 -NCT04633330 -NCT04633356 -NCT04633447 -NCT04633473 -NCT04633486 -NCT04633668 -NCT04633772 -NCT04633785 -NCT04634032 -NCT04634045 -NCT04634097 -NCT04634240 -NCT04634305 -NCT04634383 -NCT04634409 -NCT04634448 -NCT04634773 -NCT04635007 -NCT04635059 -NCT04635098 -NCT04635176 -NCT04635228 -NCT04635436 -NCT04635488 -NCT04635514 -NCT04635826 -NCT04635891 -NCT04635930 -NCT04635943 -NCT04635969 -NCT04636034 -NCT04636164 -NCT04636229 -NCT04636320 -NCT04636710 -NCT04636840 -NCT04636892 -NCT04636957 -NCT04636996 -NCT04637022 -NCT04637165 -NCT04637217 -NCT04637373 -NCT04637516 -NCT04637672 -NCT04638153 -NCT04638335 -NCT04638491 -NCT04638517 -NCT04638660 -NCT04638816 -NCT04639076 -NCT04639258 -NCT04639284 -NCT04639323 -NCT04639518 -NCT04639531 -NCT04639674 -NCT04639869 -NCT04640077 -NCT04640116 -NCT04640558 -NCT04640701 -NCT04640727 -NCT04640805 -NCT04641013 -NCT04641182 -NCT04641195 -NCT04641325 -NCT04641364 -NCT04641403 -NCT04641507 -NCT04641598 -NCT04641611 -NCT04641767 -NCT04641780 -NCT04642105 -NCT04642183 -NCT04642287 -NCT04642313 -NCT04642326 -NCT04642352 -NCT04642443 -NCT04642508 -NCT04642573 -NCT04642963 -NCT04643054 -NCT04643158 -NCT04643223 -NCT04643262 -NCT04643275 -NCT04643327 -NCT04643392 -NCT04643470 -NCT04643574 -NCT04643639 -NCT04643730 -NCT04643756 -NCT04643821 -NCT04643873 -NCT04644016 -NCT04644393 -NCT04644471 -NCT04644575 -NCT04644705 -NCT04644965 -NCT04645030 -NCT04645173 -NCT04645238 -NCT04645264 -NCT04645459 -NCT04645563 -NCT04645732 -NCT04645862 -NCT04645966 -NCT04646018 -NCT04646083 -NCT04646252 -NCT04646291 -NCT04646356 -NCT04646447 -NCT04646486 -NCT04646577 -NCT04646772 -NCT04646811 -NCT04646863 -NCT04647045 -NCT04647097 -NCT04647227 -NCT04647305 -NCT04647383 -NCT04647448 -NCT04647487 -NCT04647513 -NCT04647526 -NCT04647578 -NCT04647721 -NCT04647825 -NCT04647851 -NCT04647877 -NCT04647981 -NCT04647994 -NCT04648085 -NCT04648332 -NCT04648397 -NCT04648527 -NCT04648631 -NCT04648683 -NCT04648696 -NCT04648722 -NCT04649060 -NCT04649073 -NCT04649242 -NCT04649255 -NCT04649268 -NCT04649294 -NCT04649424 -NCT04649528 -NCT04649593 -NCT04649619 -NCT04649684 -NCT04649775 -NCT04649827 -NCT04649931 -NCT04650035 -NCT04650113 -NCT04650347 -NCT04650425 -NCT04650464 -NCT04650971 -NCT04651140 -NCT04651218 -NCT04651244 -NCT04651257 -NCT04651335 -NCT04651712 -NCT04651855 -NCT04651894 -NCT04651959 -NCT04651998 -NCT04652024 -NCT04652037 -NCT04652141 -NCT04652167 -NCT04652414 -NCT04652713 -NCT04652765 -NCT04652843 -NCT04653129 -NCT04653155 -NCT04653220 -NCT04653337 -NCT04653428 -NCT04653623 -NCT04653662 -NCT04653714 -NCT04653753 -NCT04653870 -NCT04653896 -NCT04653909 -NCT04653935 -NCT04654026 -NCT04654182 -NCT04654338 -NCT04654377 -NCT04654429 -NCT04654559 -NCT04654689 -NCT04654832 -NCT04654845 -NCT04655014 -NCT04655131 -NCT04655300 -NCT04655313 -NCT04655391 -NCT04655443 -NCT04655508 -NCT04655547 -NCT04655599 -NCT04655820 -NCT04656002 -NCT04656028 -NCT04656067 -NCT04656184 -NCT04656236 -NCT04656275 -NCT04656730 -NCT04656886 -NCT04657224 -NCT04657276 -NCT04657406 -NCT04657562 -NCT04657822 -NCT04657848 -NCT04657874 -NCT04657887 -NCT04657913 -NCT04657952 -NCT04658316 -NCT04658342 -NCT04658381 -NCT04658524 -NCT04658641 -NCT04658667 -NCT04658797 -NCT04659109 -NCT04659200 -NCT04659265 -NCT04659330 -NCT04659525 -NCT04659616 -NCT04659798 -NCT04659889 -NCT04660006 -NCT04660019 -NCT04660045 -NCT04660201 -NCT04660214 -NCT04660292 -NCT04660357 -NCT04660370 -NCT04660461 -NCT04660500 -NCT04660630 -NCT04660643 -NCT04660825 -NCT04660864 -NCT04661098 -NCT04661111 -NCT04661176 -NCT04661189 -NCT04661202 -NCT04661241 -NCT04661267 -NCT04661319 -NCT04661371 -NCT04661475 -NCT04661605 -NCT04661670 -NCT04661722 -NCT04661748 -NCT04661969 -NCT04662398 -NCT04662437 -NCT04662515 -NCT04662528 -NCT04662944 -NCT04663113 -NCT04663165 -NCT04663178 -NCT04663230 -NCT04663334 -NCT04663490 -NCT04663568 -NCT04663659 -NCT04663685 -NCT04663698 -NCT04664075 -NCT04664231 -NCT04664478 -NCT04664647 -NCT04664764 -NCT04664894 -NCT04665011 -NCT04665128 -NCT04665154 -NCT04665245 -NCT04665258 -NCT04665284 -NCT04665414 -NCT04665596 -NCT04665661 -NCT04665674 -NCT04665700 -NCT04665713 -NCT04665752 -NCT04665869 -NCT04665908 -NCT04666103 -NCT04666480 -NCT04666805 -NCT04666909 -NCT04666948 -NCT04666961 -NCT04667195 -NCT04667221 -NCT04667325 -NCT04667338 -NCT04667403 -NCT04667429 -NCT04667520 -NCT04667650 -NCT04667663 -NCT04667741 -NCT04667845 -NCT04667884 -NCT04667910 -NCT04667936 -NCT04668001 -NCT04668014 -NCT04668053 -NCT04668365 -NCT04668404 -NCT04668495 -NCT04668547 -NCT04668599 -NCT04668625 -NCT04668690 -NCT04668716 -NCT04668794 -NCT04668924 -NCT04668950 -NCT04668989 -NCT04669015 -NCT04669028 -NCT04669145 -NCT04669223 -NCT04669275 -NCT04669288 -NCT04669327 -NCT04669574 -NCT04669704 -NCT04669847 -NCT04669938 -NCT04670016 -NCT04670120 -NCT04670250 -NCT04670289 -NCT04670393 -NCT04670484 -NCT04670549 -NCT04670562 -NCT04670809 -NCT04670952 -NCT04671095 -NCT04671147 -NCT04671264 -NCT04671290 -NCT04671446 -NCT04671472 -NCT04671511 -NCT04671524 -NCT04671693 -NCT04671719 -NCT04671823 -NCT04671901 -NCT04671979 -NCT04672031 -NCT04672174 -NCT04672187 -NCT04672304 -NCT04672408 -NCT04672421 -NCT04672551 -NCT04672642 -NCT04672681 -NCT04672837 -NCT04672980 -NCT04673123 -NCT04673201 -NCT04673266 -NCT04673448 -NCT04673591 -NCT04673604 -NCT04673682 -NCT04673695 -NCT04673708 -NCT04673864 -NCT04673903 -NCT04674072 -NCT04674137 -NCT04674202 -NCT04674241 -NCT04674293 -NCT04674423 -NCT04674579 -NCT04674605 -NCT04674709 -NCT04674735 -NCT04674813 -NCT04675034 -NCT04675164 -NCT04675177 -NCT04675190 -NCT04675216 -NCT04675385 -NCT04675398 -NCT04675463 -NCT04675541 -NCT04675723 -NCT04675775 -NCT04675892 -NCT04675944 -NCT04676048 -NCT04676113 -NCT04676269 -NCT04676399 -NCT04676594 -NCT04676646 -NCT04676659 -NCT04676685 -NCT04676776 -NCT04676867 -NCT04677140 -NCT04677296 -NCT04677348 -NCT04677413 -NCT04677465 -NCT04677517 -NCT04677543 -NCT04677569 -NCT04677621 -NCT04677634 -NCT04677777 -NCT04677803 -NCT04677842 -NCT04677972 -NCT04678050 -NCT04678089 -NCT04678167 -NCT04678453 -NCT04678804 -NCT04678830 -NCT04678895 -NCT04679012 -NCT04679116 -NCT04679129 -NCT04679233 -NCT04679324 -NCT04679389 -NCT04679519 -NCT04679662 -NCT04679675 -NCT04679727 -NCT04679883 -NCT04679935 -NCT04679987 -NCT04680013 -NCT04680598 -NCT04680702 -NCT04680806 -NCT04680832 -NCT04680923 -NCT04680936 -NCT04681066 -NCT04681105 -NCT04681183 -NCT04681560 -NCT04681573 -NCT04681599 -NCT04681612 -NCT04681625 -NCT04681833 -NCT04681963 -NCT04682093 -NCT04682119 -NCT04682158 -NCT04682171 -NCT04682340 -NCT04682457 -NCT04682548 -NCT04682834 -NCT04682860 -NCT04682873 -NCT04682964 -NCT04682977 -NCT04683003 -NCT04683107 -NCT04683172 -NCT04683185 -NCT04683263 -NCT04683354 -NCT04683367 -NCT04683406 -NCT04683419 -NCT04683549 -NCT04683796 -NCT04683887 -NCT04683913 -NCT04683926 -NCT04683952 -NCT04684199 -NCT04684290 -NCT04684381 -NCT04684641 -NCT04684654 -NCT04684927 -NCT04684940 -NCT04685005 -NCT04685109 -NCT04685200 -NCT04685213 -NCT04685343 -NCT04685434 -NCT04685577 -NCT04685694 -NCT04685772 -NCT04685785 -NCT04685863 -NCT04686006 -NCT04686071 -NCT04686318 -NCT04686357 -NCT04686435 -NCT04686500 -NCT04686617 -NCT04686630 -NCT04686799 -NCT04687020 -NCT04687033 -NCT04687124 -NCT04687189 -NCT04687215 -NCT04687254 -NCT04687371 -NCT04687878 -NCT04687943 -NCT04687995 -NCT04688034 -NCT04688112 -NCT04688125 -NCT04688190 -NCT04688398 -NCT04688437 -NCT04688463 -NCT04688476 -NCT04688528 -NCT04688788 -NCT04688905 -NCT04689009 -NCT04689165 -NCT04689191 -NCT04689230 -NCT04689243 -NCT04689295 -NCT04689607 -NCT04689906 -NCT04690075 -NCT04690166 -NCT04690192 -NCT04690322 -NCT04690374 -NCT04690491 -NCT04690543 -NCT04690634 -NCT04690803 -NCT04690816 -NCT04691011 -NCT04691089 -NCT04691258 -NCT04691414 -NCT04691440 -NCT04691453 -NCT04691544 -NCT04691583 -NCT04691687 -NCT04691752 -NCT04691791 -NCT04691830 -NCT04691947 -NCT04691960 -NCT04692597 -NCT04692805 -NCT04692844 -NCT04693104 -NCT04693156 -NCT04693247 -NCT04693299 -NCT04693312 -NCT04693624 -NCT04693689 -NCT04693702 -NCT04693871 -NCT04693936 -NCT04694040 -NCT04694053 -NCT04694079 -NCT04694092 -NCT04694313 -NCT04694534 -NCT04694586 -NCT04694612 -NCT04694729 -NCT04694859 -NCT04694989 -NCT04695171 -NCT04695275 -NCT04695379 -NCT04695418 -NCT04695431 -NCT04695483 -NCT04695600 -NCT04695626 -NCT04695795 -NCT04695860 -NCT04695912 -NCT04696133 -NCT04696289 -NCT04696341 -NCT04696497 -NCT04696510 -NCT04696640 -NCT04696666 -NCT04696770 -NCT04696874 -NCT04696952 -NCT04697043 -NCT04697069 -NCT04697368 -NCT04697498 -NCT04697563 -NCT04697641 -NCT04697693 -NCT04697784 -NCT04697797 -NCT04697875 -NCT04697992 -NCT04698083 -NCT04698239 -NCT04698265 -NCT04698304 -NCT04698421 -NCT04698460 -NCT04698499 -NCT04698525 -NCT04698551 -NCT04698668 -NCT04698759 -NCT04698772 -NCT04698915 -NCT04698928 -NCT04698967 -NCT04698993 -NCT04699045 -NCT04699136 -NCT04699175 -NCT04699279 -NCT04699344 -NCT04699357 -NCT04699513 -NCT04699578 -NCT04699591 -NCT04699656 -NCT04699786 -NCT04700059 -NCT04700111 -NCT04700163 -NCT04700280 -NCT04700319 -NCT04700332 -NCT04700436 -NCT04700501 -NCT04700540 -NCT04700579 -NCT04700761 -NCT04701034 -NCT04701086 -NCT04701242 -NCT04701879 -NCT04701944 -NCT04701957 -NCT04702022 -NCT04702139 -NCT04702152 -NCT04702204 -NCT04702217 -NCT04702373 -NCT04702620 -NCT04702750 -NCT04702776 -NCT04702893 -NCT04702932 -NCT04703062 -NCT04703192 -NCT04703218 -NCT04703231 -NCT04703439 -NCT04703569 -NCT04703595 -NCT04703608 -NCT04703647 -NCT04703699 -NCT04703959 -NCT04704076 -NCT04704141 -NCT04704154 -NCT04704193 -NCT04704245 -NCT04704258 -NCT04704284 -NCT04704297 -NCT04704336 -NCT04704401 -NCT04704466 -NCT04704531 -NCT04704661 -NCT04704947 -NCT04705337 -NCT04705350 -NCT04705558 -NCT04705571 -NCT04705597 -NCT04705727 -NCT04705753 -NCT04706104 -NCT04706169 -NCT04706364 -NCT04706416 -NCT04706455 -NCT04706520 -NCT04706533 -NCT04706559 -NCT04706689 -NCT04706715 -NCT04706819 -NCT04706910 -NCT04707001 -NCT04707092 -NCT04707274 -NCT04707287 -NCT04707521 -NCT04707573 -NCT04707664 -NCT04707820 -NCT04707885 -NCT04707963 -NCT04708041 -NCT04708158 -NCT04708249 -NCT04708288 -NCT04708314 -NCT04708327 -NCT04708483 -NCT04708743 -NCT04708925 -NCT04709133 -NCT04709146 -NCT04709276 -NCT04709302 -NCT04709393 -NCT04709601 -NCT04709744 -NCT04709822 -NCT04709965 -NCT04709978 -NCT04710160 -NCT04710186 -NCT04710238 -NCT04710407 -NCT04710654 -NCT04710745 -NCT04710758 -NCT04710862 -NCT04711122 -NCT04711148 -NCT04711356 -NCT04711447 -NCT04711551 -NCT04711642 -NCT04711655 -NCT04711720 -NCT04711863 -NCT04711876 -NCT04712448 -NCT04712552 -NCT04712760 -NCT04712799 -NCT04712825 -NCT04713085 -NCT04713098 -NCT04713150 -NCT04713293 -NCT04713345 -NCT04713423 -NCT04713475 -NCT04713527 -NCT04713579 -NCT04713852 -NCT04713930 -NCT04713969 -NCT04714021 -NCT04714086 -NCT04714099 -NCT04714203 -NCT04714398 -NCT04714424 -NCT04714567 -NCT04714658 -NCT04714736 -NCT04715087 -NCT04715100 -NCT04715113 -NCT04715126 -NCT04715139 -NCT04715256 -NCT04715542 -NCT04715568 -NCT04715685 -NCT04715724 -NCT04715867 -NCT04715932 -NCT04715945 -NCT04715971 -NCT04716049 -NCT04716127 -NCT04716244 -NCT04716309 -NCT04716322 -NCT04716374 -NCT04716543 -NCT04716582 -NCT04716712 -NCT04716738 -NCT04716868 -NCT04716985 -NCT04717206 -NCT04717219 -NCT04717271 -NCT04717362 -NCT04717583 -NCT04717609 -NCT04717622 -NCT04717661 -NCT04718103 -NCT04718233 -NCT04718246 -NCT04718285 -NCT04718298 -NCT04718337 -NCT04718389 -NCT04718545 -NCT04718558 -NCT04718597 -NCT04718649 -NCT04718662 -NCT04718766 -NCT04718831 -NCT04718948 -NCT04719104 -NCT04719468 -NCT04719572 -NCT04719624 -NCT04719715 -NCT04719754 -NCT04719819 -NCT04719832 -NCT04719910 -NCT04719962 -NCT04720092 -NCT04720170 -NCT04720235 -NCT04720469 -NCT04720651 -NCT04720690 -NCT04720794 -NCT04720950 -NCT04721028 -NCT04721041 -NCT04721795 -NCT04722172 -NCT04722458 -NCT04722523 -NCT04722588 -NCT04722601 -NCT04722614 -NCT04722796 -NCT04722965 -NCT04723147 -NCT04723173 -NCT04723394 -NCT04723524 -NCT04723589 -NCT04723719 -NCT04723745 -NCT04723862 -NCT04724135 -NCT04724291 -NCT04724330 -NCT04724512 -NCT04724876 -NCT04725045 -NCT04725123 -NCT04725175 -NCT04725305 -NCT04725734 -NCT04725786 -NCT04725812 -NCT04725929 -NCT04726046 -NCT04726059 -NCT04726085 -NCT04726150 -NCT04726306 -NCT04726345 -NCT04726748 -NCT04727112 -NCT04727177 -NCT04727424 -NCT04727606 -NCT04727866 -NCT04727892 -NCT04728191 -NCT04728217 -NCT04728269 -NCT04728386 -NCT04728399 -NCT04728412 -NCT04728425 -NCT04728438 -NCT04728685 -NCT04728841 -NCT04728880 -NCT04729218 -NCT04729621 -NCT04729842 -NCT04729933 -NCT04729959 -NCT04730076 -NCT04730154 -NCT04730245 -NCT04730713 -NCT04730752 -NCT04730765 -NCT04730973 -NCT04730986 -NCT04731129 -NCT04731233 -NCT04731246 -NCT04731428 -NCT04731493 -NCT04731636 -NCT04731727 -NCT04731740 -NCT04731818 -NCT04731974 -NCT04732026 -NCT04732052 -NCT04732260 -NCT04732533 -NCT04732546 -NCT04732572 -NCT04732650 -NCT04732663 -NCT04732728 -NCT04732793 -NCT04732897 -NCT04733040 -NCT04733079 -NCT04733092 -NCT04733170 -NCT04733248 -NCT04733274 -NCT04733326 -NCT04733573 -NCT04733755 -NCT04733781 -NCT04733924 -NCT04733937 -NCT04733950 -NCT04733976 -NCT04734080 -NCT04734093 -NCT04734119 -NCT04734236 -NCT04734457 -NCT04734522 -NCT04734561 -NCT04734795 -NCT04734925 -NCT04735055 -NCT04735302 -NCT04735432 -NCT04735458 -NCT04735484 -NCT04735627 -NCT04735705 -NCT04735783 -NCT04735874 -NCT04736030 -NCT04736095 -NCT04736264 -NCT04736537 -NCT04736563 -NCT04736602 -NCT04736758 -NCT04736836 -NCT04737031 -NCT04737070 -NCT04737278 -NCT04737330 -NCT04737343 -NCT04737395 -NCT04737538 -NCT04737642 -NCT04737681 -NCT04737837 -NCT04737954 -NCT04738058 -NCT04738201 -NCT04738409 -NCT04738422 -NCT04738812 -NCT04738851 -NCT04738864 -NCT04738890 -NCT04738968 -NCT04739033 -NCT04739085 -NCT04739202 -NCT04739319 -NCT04739345 -NCT04739423 -NCT04739436 -NCT04739553 -NCT04739566 -NCT04739592 -NCT04739644 -NCT04739813 -NCT04739839 -NCT04739891 -NCT04740255 -NCT04740320 -NCT04740333 -NCT04740359 -NCT04740554 -NCT04740788 -NCT04741126 -NCT04741139 -NCT04741295 -NCT04741334 -NCT04741477 -NCT04741620 -NCT04741737 -NCT04741763 -NCT04741880 -NCT04741932 -NCT04741971 -NCT04742088 -NCT04742114 -NCT04742127 -NCT04742205 -NCT04742465 -NCT04742543 -NCT04742608 -NCT04743089 -NCT04743102 -NCT04743167 -NCT04743232 -NCT04743323 -NCT04743349 -NCT04743362 -NCT04743583 -NCT04743596 -NCT04743609 -NCT04743804 -NCT04743921 -NCT04743934 -NCT04744064 -NCT04744168 -NCT04744532 -NCT04744636 -NCT04744675 -NCT04744701 -NCT04744753 -NCT04744766 -NCT04745039 -NCT04745156 -NCT04745195 -NCT04745299 -NCT04745858 -NCT04745897 -NCT04746066 -NCT04746092 -NCT04746599 -NCT04746742 -NCT04747262 -NCT04747275 -NCT04747353 -NCT04747444 -NCT04747483 -NCT04747652 -NCT04747808 -NCT04747925 -NCT04747964 -NCT04748237 -NCT04748263 -NCT04748302 -NCT04748393 -NCT04748406 -NCT04748640 -NCT04748731 -NCT04748796 -NCT04748991 -NCT04749017 -NCT04749472 -NCT04749563 -NCT04749589 -NCT04749602 -NCT04749693 -NCT04749810 -NCT04749875 -NCT04749914 -NCT04749992 -NCT04750044 -NCT04750226 -NCT04750252 -NCT04750317 -NCT04750369 -NCT04750421 -NCT04750460 -NCT04750850 -NCT04750941 -NCT04750993 -NCT04751006 -NCT04751019 -NCT04751058 -NCT04751123 -NCT04751136 -NCT04751149 -NCT04751214 -NCT04751435 -NCT04751656 -NCT04751734 -NCT04751929 -NCT04751942 -NCT04751994 -NCT04752007 -NCT04752202 -NCT04752371 -NCT04752384 -NCT04752410 -NCT04752449 -NCT04752475 -NCT04752553 -NCT04752592 -NCT04752826 -NCT04752930 -NCT04753034 -NCT04753190 -NCT04753216 -NCT04753255 -NCT04753307 -NCT04754126 -NCT04754152 -NCT04754178 -NCT04754243 -NCT04754503 -NCT04754516 -NCT04754594 -NCT04754607 -NCT04754633 -NCT04754880 -NCT04754997 -NCT04755010 -NCT04755101 -NCT04755114 -NCT04755179 -NCT04755452 -NCT04755647 -NCT04755881 -NCT04756141 -NCT04756193 -NCT04756271 -NCT04756362 -NCT04756557 -NCT04756596 -NCT04756739 -NCT04756778 -NCT04756921 -NCT04756986 -NCT04757116 -NCT04757376 -NCT04757441 -NCT04757571 -NCT04757662 -NCT04757688 -NCT04757779 -NCT04758117 -NCT04758351 -NCT04758624 -NCT04758871 -NCT04758884 -NCT04758923 -NCT04758962 -NCT04759131 -NCT04759144 -NCT04759378 -NCT04759430 -NCT04759534 -NCT04759586 -NCT04759833 -NCT04759859 -NCT04759911 -NCT04759937 -NCT04759989 -NCT04760080 -NCT04760145 -NCT04760210 -NCT04760288 -NCT04760340 -NCT04760366 -NCT04760379 -NCT04760483 -NCT04760548 -NCT04760561 -NCT04760821 -NCT04761003 -NCT04761250 -NCT04761289 -NCT04761419 -NCT04761549 -NCT04761562 -NCT04761757 -NCT04762108 -NCT04762277 -NCT04762446 -NCT04762498 -NCT04762563 -NCT04762615 -NCT04762667 -NCT04762810 -NCT04762823 -NCT04762940 -NCT04763057 -NCT04763122 -NCT04763135 -NCT04763187 -NCT04763395 -NCT04763538 -NCT04763629 -NCT04763694 -NCT04763876 -NCT04763941 -NCT04763967 -NCT04764097 -NCT04764110 -NCT04764136 -NCT04764253 -NCT04764344 -NCT04764370 -NCT04764461 -NCT04764552 -NCT04764578 -NCT04764682 -NCT04764760 -NCT04764903 -NCT04765293 -NCT04765527 -NCT04765618 -NCT04765644 -NCT04765722 -NCT04765930 -NCT04765943 -NCT04766216 -NCT04766242 -NCT04766268 -NCT04766307 -NCT04766645 -NCT04766723 -NCT04766853 -NCT04766931 -NCT04767074 -NCT04767412 -NCT04767516 -NCT04767542 -NCT04767620 -NCT04767698 -NCT04767919 -NCT04767945 -NCT04768010 -NCT04768062 -NCT04768088 -NCT04768257 -NCT04768400 -NCT04768439 -NCT04768465 -NCT04768517 -NCT04768608 -NCT04768647 -NCT04768699 -NCT04768803 -NCT04769180 -NCT04769323 -NCT04769375 -NCT04769401 -NCT04769531 -NCT04769661 -NCT04769895 -NCT04769973 -NCT04770142 -NCT04770220 -NCT04770337 -NCT04770441 -NCT04770454 -NCT04770467 -NCT04770701 -NCT04770727 -NCT04770740 -NCT04770792 -NCT04770909 -NCT04770935 -NCT04770948 -NCT04770961 -NCT04771065 -NCT04771221 -NCT04771481 -NCT04771520 -NCT04771533 -NCT04771663 -NCT04771741 -NCT04771910 -NCT04771936 -NCT04772105 -NCT04772183 -NCT04772196 -NCT04772378 -NCT04772456 -NCT04772573 -NCT04772677 -NCT04772755 -NCT04772937 -NCT04772963 -NCT04773028 -NCT04773184 -NCT04773249 -NCT04773353 -NCT04773470 -NCT04773509 -NCT04773535 -NCT04773613 -NCT04773626 -NCT04773652 -NCT04773899 -NCT04774029 -NCT04774172 -NCT04774367 -NCT04774536 -NCT04774796 -NCT04775069 -NCT04775108 -NCT04775381 -NCT04775394 -NCT04775498 -NCT04775758 -NCT04775810 -NCT04775836 -NCT04775940 -NCT04776057 -NCT04776109 -NCT04776616 -NCT04776668 -NCT04776681 -NCT04776889 -NCT04777188 -NCT04777396 -NCT04777409 -NCT04777526 -NCT04777682 -NCT04777708 -NCT04777734 -NCT04777903 -NCT04777981 -NCT04778176 -NCT04778358 -NCT04778384 -NCT04778683 -NCT04778748 -NCT04778865 -NCT04779047 -NCT04779151 -NCT04779190 -NCT04779359 -NCT04779489 -NCT04779515 -NCT04779593 -NCT04779645 -NCT04779749 -NCT04780165 -NCT04780230 -NCT04780399 -NCT04780477 -NCT04780828 -NCT04780893 -NCT04780906 -NCT04780958 -NCT04780997 -NCT04781387 -NCT04781426 -NCT04781452 -NCT04781582 -NCT04781738 -NCT04781842 -NCT04781894 -NCT04781985 -NCT04782037 -NCT04782063 -NCT04782076 -NCT04782167 -NCT04782349 -NCT04782440 -NCT04782479 -NCT04782596 -NCT04782856 -NCT04782986 -NCT04783038 -NCT04783129 -NCT04783259 -NCT04783337 -NCT04783441 -NCT04783532 -NCT04783714 -NCT04783727 -NCT04783805 -NCT04783922 -NCT04783974 -NCT04784065 -NCT04784104 -NCT04784208 -NCT04784234 -NCT04784312 -NCT04784351 -NCT04784546 -NCT04784585 -NCT04784780 -NCT04784988 -NCT04785014 -NCT04785040 -NCT04785235 -NCT04785248 -NCT04785612 -NCT04785924 -NCT04785950 -NCT04786041 -NCT04786262 -NCT04786353 -NCT04786457 -NCT04786522 -NCT04786535 -NCT04786587 -NCT04786743 -NCT04786795 -NCT04786873 -NCT04786886 -NCT04786951 -NCT04787757 -NCT04788407 -NCT04788433 -NCT04788459 -NCT04788745 -NCT04788771 -NCT04788914 -NCT04789057 -NCT04789083 -NCT04789096 -NCT04789135 -NCT04789317 -NCT04789434 -NCT04789447 -NCT04789538 -NCT04789629 -NCT04789733 -NCT04789824 -NCT04789902 -NCT04789941 -NCT04789993 -NCT04790006 -NCT04790019 -NCT04790045 -NCT04790058 -NCT04790110 -NCT04790305 -NCT04790370 -NCT04790435 -NCT04790487 -NCT04790500 -NCT04790513 -NCT04790591 -NCT04790669 -NCT04790799 -NCT04790994 -NCT04791033 -NCT04791059 -NCT04791111 -NCT04791202 -NCT04791228 -NCT04791241 -NCT04791397 -NCT04791410 -NCT04791462 -NCT04791475 -NCT04791579 -NCT04791683 -NCT04791930 -NCT04791956 -NCT04792164 -NCT04792255 -NCT04792385 -NCT04792450 -NCT04792892 -NCT04792931 -NCT04792944 -NCT04792957 -NCT04792970 -NCT04793035 -NCT04793256 -NCT04793321 -NCT04793412 -NCT04793646 -NCT04793724 -NCT04793763 -NCT04793776 -NCT04793789 -NCT04794023 -NCT04794049 -NCT04794088 -NCT04794244 -NCT04794595 -NCT04794634 -NCT04794660 -NCT04794673 -NCT04794803 -NCT04794842 -NCT04794881 -NCT04794985 -NCT04795063 -NCT04795089 -NCT04795271 -NCT04795310 -NCT04795440 -NCT04795466 -NCT04795557 -NCT04795570 -NCT04795934 -NCT04795947 -NCT04796051 -NCT04796090 -NCT04796129 -NCT04796155 -NCT04796246 -NCT04796350 -NCT04796532 -NCT04796597 -NCT04796740 -NCT04796753 -NCT04796987 -NCT04797013 -NCT04797494 -NCT04797520 -NCT04797572 -NCT04797611 -NCT04797715 -NCT04797936 -NCT04798053 -NCT04798079 -NCT04798248 -NCT04798313 -NCT04798326 -NCT04798365 -NCT04798378 -NCT04798469 -NCT04798547 -NCT04798625 -NCT04798690 -NCT04798768 -NCT04798911 -NCT04799015 -NCT04799132 -NCT04799223 -NCT04799275 -NCT04799392 -NCT04799405 -NCT04799418 -NCT04799834 -NCT04800185 -NCT04800406 -NCT04800445 -NCT04800562 -NCT04800783 -NCT04800887 -NCT04800939 -NCT04801121 -NCT04801212 -NCT04801238 -NCT04801251 -NCT04801550 -NCT04801732 -NCT04801771 -NCT04801862 -NCT04801875 -NCT04802018 -NCT04802044 -NCT04802291 -NCT04802551 -NCT04802668 -NCT04802837 -NCT04802850 -NCT04803110 -NCT04803136 -NCT04803305 -NCT04803474 -NCT04803487 -NCT04803526 -NCT04803643 -NCT04803760 -NCT04803825 -NCT04803916 -NCT04804020 -NCT04804111 -NCT04804267 -NCT04804280 -NCT04804293 -NCT04804592 -NCT04804618 -NCT04804683 -NCT04804787 -NCT04804800 -NCT04804943 -NCT04805021 -NCT04805112 -NCT04805138 -NCT04805177 -NCT04805190 -NCT04805229 -NCT04805268 -NCT04805320 -NCT04805515 -NCT04805580 -NCT04805710 -NCT04805723 -NCT04805736 -NCT04805801 -NCT04806269 -NCT04806282 -NCT04806373 -NCT04806412 -NCT04806698 -NCT04806711 -NCT04806763 -NCT04806789 -NCT04806815 -NCT04806828 -NCT04806854 -NCT04806867 -NCT04807010 -NCT04807023 -NCT04807140 -NCT04807244 -NCT04807335 -NCT04807361 -NCT04807426 -NCT04807465 -NCT04807569 -NCT04807803 -NCT04807881 -NCT04807894 -NCT04808232 -NCT04808349 -NCT04808375 -NCT04808518 -NCT04808531 -NCT04808583 -NCT04808596 -NCT04808609 -NCT04808648 -NCT04808726 -NCT04808752 -NCT04808778 -NCT04808791 -NCT04808843 -NCT04808856 -NCT04808869 -NCT04808921 -NCT04808999 -NCT04809025 -NCT04809376 -NCT04809389 -NCT04809441 -NCT04809714 -NCT04809883 -NCT04809909 -NCT04809974 -NCT04810104 -NCT04810156 -NCT04810325 -NCT04810351 -NCT04810429 -NCT04810442 -NCT04810832 -NCT04810949 -NCT04811079 -NCT04811196 -NCT04811248 -NCT04811365 -NCT04811495 -NCT04811534 -NCT04811586 -NCT04811846 -NCT04811950 -NCT04811963 -NCT04812054 -NCT04812093 -NCT04812119 -NCT04812132 -NCT04812197 -NCT04812327 -NCT04812340 -NCT04812418 -NCT04812509 -NCT04812730 -NCT04812756 -NCT04812808 -NCT04812860 -NCT04813055 -NCT04813380 -NCT04813471 -NCT04813575 -NCT04813614 -NCT04813640 -NCT04813887 -NCT04813900 -NCT04814147 -NCT04814173 -NCT04814212 -NCT04814251 -NCT04814303 -NCT04814368 -NCT04814420 -NCT04814563 -NCT04814940 -NCT04815213 -NCT04815226 -NCT04815317 -NCT04815330 -NCT04815369 -NCT04815421 -NCT04815551 -NCT04815577 -NCT04815707 -NCT04815720 -NCT04815811 -NCT04815889 -NCT04815928 -NCT04815954 -NCT04815980 -NCT04816136 -NCT04816370 -NCT04816409 -NCT04816448 -NCT04816461 -NCT04816513 -NCT04816630 -NCT04816786 -NCT04816851 -NCT04816864 -NCT04816877 -NCT04816916 -NCT04817033 -NCT04817293 -NCT04817462 -NCT04817514 -NCT04817592 -NCT04817631 -NCT04817683 -NCT04817735 -NCT04817865 -NCT04818021 -NCT04818112 -NCT04818138 -NCT04818203 -NCT04818268 -NCT04818307 -NCT04818411 -NCT04818437 -NCT04818502 -NCT04818853 -NCT04819009 -NCT04819139 -NCT04819178 -NCT04819269 -NCT04819399 -NCT04819451 -NCT04819646 -NCT04819763 -NCT04819958 -NCT04819971 -NCT04820010 -NCT04820036 -NCT04820049 -NCT04820114 -NCT04820413 -NCT04820569 -NCT04820621 -NCT04820764 -NCT04820829 -NCT04821167 -NCT04821219 -NCT04821232 -NCT04821245 -NCT04821297 -NCT04821349 -NCT04821505 -NCT04821583 -NCT04821726 -NCT04821830 -NCT04821869 -NCT04821882 -NCT04821908 -NCT04821960 -NCT04822090 -NCT04822337 -NCT04822363 -NCT04822402 -NCT04822506 -NCT04822519 -NCT04822584 -NCT04822675 -NCT04822701 -NCT04822753 -NCT04822831 -NCT04822844 -NCT04822909 -NCT04822935 -NCT04823052 -NCT04823195 -NCT04823221 -NCT04823351 -NCT04823494 -NCT04823520 -NCT04823637 -NCT04823741 -NCT04823767 -NCT04823780 -NCT04823845 -NCT04823858 -NCT04823936 -NCT04824365 -NCT04824391 -NCT04824417 -NCT04824625 -NCT04824911 -NCT04825067 -NCT04825080 -NCT04825119 -NCT04825223 -NCT04825314 -NCT04825418 -NCT04825470 -NCT04825483 -NCT04825626 -NCT04825639 -NCT04825769 -NCT04825808 -NCT04825977 -NCT04826042 -NCT04826185 -NCT04826237 -NCT04826614 -NCT04826887 -NCT04826952 -NCT04826978 -NCT04827238 -NCT04827459 -NCT04827524 -NCT04827602 -NCT04827641 -NCT04827875 -NCT04828161 -NCT04828486 -NCT04828616 -NCT04828655 -NCT04828707 -NCT04828733 -NCT04828798 -NCT04828850 -NCT04828889 -NCT04829032 -NCT04829214 -NCT04829461 -NCT04829565 -NCT04829734 -NCT04829890 -NCT04830085 -NCT04830137 -NCT04830579 -NCT04830748 -NCT04830787 -NCT04830852 -NCT04831034 -NCT04831047 -NCT04831099 -NCT04831125 -NCT04831476 -NCT04831580 -NCT04831593 -NCT04831645 -NCT04831671 -NCT04831710 -NCT04831788 -NCT04831957 -NCT04832399 -NCT04832490 -NCT04832529 -NCT04832542 -NCT04832880 -NCT04832919 -NCT04833023 -NCT04833192 -NCT04833426 -NCT04833491 -NCT04833608 -NCT04833621 -NCT04833790 -NCT04833894 -NCT04833946 -NCT04833985 -NCT04834089 -NCT04834167 -NCT04834362 -NCT04834479 -NCT04834531 -NCT04834622 -NCT04834635 -NCT04834791 -NCT04834843 -NCT04835155 -NCT04835298 -NCT04835389 -NCT04835415 -NCT04835428 -NCT04835558 -NCT04835571 -NCT04835610 -NCT04835623 -NCT04835649 -NCT04835662 -NCT04835688 -NCT04835766 -NCT04835792 -NCT04835857 -NCT04836013 -NCT04836091 -NCT04836286 -NCT04836598 -NCT04836884 -NCT04836897 -NCT04837027 -NCT04837040 -NCT04837066 -NCT04837079 -NCT04837196 -NCT04837326 -NCT04837378 -NCT04837794 -NCT04837963 -NCT04838002 -NCT04838015 -NCT04838028 -NCT04838080 -NCT04838210 -NCT04838249 -NCT04838301 -NCT04838353 -NCT04838678 -NCT04838886 -NCT04839003 -NCT04839081 -NCT04839419 -NCT04839497 -NCT04839614 -NCT04839731 -NCT04839848 -NCT04839900 -NCT04840017 -NCT04840303 -NCT04840433 -NCT04840472 -NCT04840576 -NCT04840615 -NCT04840693 -NCT04840719 -NCT04840771 -NCT04841057 -NCT04841135 -NCT04841174 -NCT04841187 -NCT04841213 -NCT04841239 -NCT04841265 -NCT04841356 -NCT04841460 -NCT04841590 -NCT04841629 -NCT04841733 -NCT04842019 -NCT04842474 -NCT04842552 -NCT04842656 -NCT04842669 -NCT04842942 -NCT04843293 -NCT04843345 -NCT04843397 -NCT04843423 -NCT04843787 -NCT04843800 -NCT04843904 -NCT04844086 -NCT04844164 -NCT04844190 -NCT04844424 -NCT04844437 -NCT04844645 -NCT04844801 -NCT04844814 -NCT04844866 -NCT04845009 -NCT04845022 -NCT04845165 -NCT04845347 -NCT04845555 -NCT04845633 -NCT04845776 -NCT04845932 -NCT04846010 -NCT04846140 -NCT04846179 -NCT04846231 -NCT04846296 -NCT04846413 -NCT04846465 -NCT04846803 -NCT04846829 -NCT04847089 -NCT04847141 -NCT04847414 -NCT04847544 -NCT04847661 -NCT04847700 -NCT04847752 -NCT04847934 -NCT04847999 -NCT04848181 -NCT04848415 -NCT04848480 -NCT04848532 -NCT04848545 -NCT04848870 -NCT04849078 -NCT04849234 -NCT04849572 -NCT04849650 -NCT04849676 -NCT04849871 -NCT04850001 -NCT04850053 -NCT04850300 -NCT04850495 -NCT04850547 -NCT04850664 -NCT04850885 -NCT04851067 -NCT04851145 -NCT04851184 -NCT04851275 -NCT04851444 -NCT04851483 -NCT04851496 -NCT04851639 -NCT04851730 -NCT04851769 -NCT04852172 -NCT04852185 -NCT04852198 -NCT04852237 -NCT04852328 -NCT04852406 -NCT04852497 -NCT04852510 -NCT04852731 -NCT04853017 -NCT04853056 -NCT04853199 -NCT04853316 -NCT04853589 -NCT04853680 -NCT04853693 -NCT04853745 -NCT04853784 -NCT04853901 -NCT04853914 -NCT04854044 -NCT04854122 -NCT04854447 -NCT04854681 -NCT04854746 -NCT04854967 -NCT04855110 -NCT04855214 -NCT04855266 -NCT04855370 -NCT04855812 -NCT04855838 -NCT04855955 -NCT04856020 -NCT04856072 -NCT04856085 -NCT04856111 -NCT04856228 -NCT04856254 -NCT04856267 -NCT04856280 -NCT04856306 -NCT04856566 -NCT04856644 -NCT04856696 -NCT04856735 -NCT04856865 -NCT04856969 -NCT04856995 -NCT04857021 -NCT04857489 -NCT04857749 -NCT04858074 -NCT04858386 -NCT04858464 -NCT04858581 -NCT04858763 -NCT04858841 -NCT04858919 -NCT04859075 -NCT04859088 -NCT04859127 -NCT04859205 -NCT04859504 -NCT04859517 -NCT04859569 -NCT04859608 -NCT04859621 -NCT04859712 -NCT04859829 -NCT04859959 -NCT04860037 -NCT04860063 -NCT04860180 -NCT04860232 -NCT04860245 -NCT04860310 -NCT04860375 -NCT04860622 -NCT04860700 -NCT04860726 -NCT04860752 -NCT04860804 -NCT04860856 -NCT04861038 -NCT04861090 -NCT04861129 -NCT04861155 -NCT04861246 -NCT04861259 -NCT04861298 -NCT04861337 -NCT04861454 -NCT04861506 -NCT04861571 -NCT04861649 -NCT04861701 -NCT04861753 -NCT04861779 -NCT04861805 -NCT04861922 -NCT04862000 -NCT04862039 -NCT04862208 -NCT04862273 diff --git a/utils/Preprocessor/utils.py b/utils/Preprocessor/utils.py index 0db22da9..18aec18f 100644 --- a/utils/Preprocessor/utils.py +++ b/utils/Preprocessor/utils.py @@ -175,9 +175,9 @@ def extract_study_info(nct_id): # Extract primary end date primary_end_date = root.find(".//primary_completion_date") - if end_date is not None: - end_date_text = end_date.text.strip() - f.write(f"Primary End Date:\n{end_date_text}\n\n") + if primary_end_date is not None: + primary_end_date_text = primary_end_date.text.strip() + f.write(f"Primary End Date:\n{primary_end_date_text}\n\n") # Extract overall status overall_status = root.find(".//overall_status") @@ -475,14 +475,12 @@ def resolve_ner_overlaps(ner1_results, ner2_results): for entity1 in ner1_results: entity1_start = entity1["start"] entity1_end = entity1["end"] - entity1_label = entity1["entity_group"] # Check if the entity from the first model overlaps with any entity from the second model overlaps = False for entity2 in ner2_results: entity2_start = entity2["start"] entity2_end = entity2["end"] - entity2_label = entity2["entity_group"] if entity1_start < entity2_end and entity1_end > entity2_start: overlaps = True @@ -496,13 +494,11 @@ def resolve_ner_overlaps(ner1_results, ner2_results): for entity2 in ner2_results: entity2_start = entity2["start"] entity2_end = entity2["end"] - entity2_label = entity2["entity_group"] overlaps = False for entity1 in resolved_results: entity1_start = entity1["start"] entity1_end = entity1["end"] - entity1_label = entity1["entity_group"] if entity2_start < entity1_end and entity2_end > entity1_start: overlaps = True diff --git a/utils/finetuning/finetune_instruct/evaluate_gemma2.py b/utils/finetuning/finetune_instruct/evaluate_gemma2.py index 8fa9871a..a38227b0 100644 --- a/utils/finetuning/finetune_instruct/evaluate_gemma2.py +++ b/utils/finetuning/finetune_instruct/evaluate_gemma2.py @@ -1,13 +1,14 @@ +import json import os -import torch -import unicodedata import re -from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig +import unicodedata from multiprocessing import get_context + +import torch +from peft import PeftModel from sklearn.metrics import accuracy_score, precision_recall_fscore_support from tqdm import tqdm -from peft import PeftModel -import json +from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig # Set CUDA devices os.environ["CUDA_VISIBLE_DEVICES"] = "1" @@ -190,12 +191,10 @@ def evaluate(self, dataset, save_path="incorrect_predictions.jsonl"): for entry, pred in zip(dataset, predictions) if pred["prediction"] != entry["output"] ] - - # Optionally, save incorrect examples. - # with open(save_path, "w", encoding="utf-8") as f: - # for example in incorrect_examples: - # json.dump(example, f) - # f.write("\n") + with open(save_path, "w", encoding="utf-8") as f: + for example in incorrect_examples: + json.dump(example, f) + f.write("\n") references = [entry["output"] for entry in dataset] predictions_only = [pred["prediction"] for pred in predictions] diff --git a/uv.lock b/uv.lock index 21c6ebdf..dcd20486 100644 --- a/uv.lock +++ b/uv.lock @@ -1,15 +1,13 @@ version = 1 revision = 3 -requires-python = ">=3.10, <3.12" +requires-python = "==3.11.*" resolution-markers = [ - "python_full_version >= '3.11' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version >= '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", + "sys_platform == 'darwin'", + "platform_machine == 'x86_64' and sys_platform == 'linux'", +] +supported-markers = [ + "sys_platform == 'darwin'", + "platform_machine == 'x86_64' and sys_platform == 'linux'", ] [[package]] @@ -17,13 +15,14 @@ name = "accelerate" version = "1.8.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "psutil" }, - { name = "pyyaml" }, - { name = "safetensors" }, - { name = "torch" }, + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "psutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "safetensors", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/bd/c2/b9e33ad13232606dded4c546e654fb06a15f1dbcbd95d81c9f9dd3ccc771/accelerate-1.8.1.tar.gz", hash = "sha256:f60df931671bc4e75077b852990469d4991ce8bd3a58e72375c3c95132034db9", size = 380872, upload-time = "2025-06-20T15:36:14.618Z" } wheels = [ @@ -44,54 +43,22 @@ name = "aiohttp" version = "3.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohappyeyeballs" }, - { name = "aiosignal" }, - { name = "async-timeout", marker = "python_full_version < '3.11'" }, - { name = "attrs" }, - { name = "frozenlist" }, - { name = "multidict" }, - { name = "propcache" }, - { name = "typing-extensions" }, - { name = "yarl" }, + { name = "aiohappyeyeballs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "aiosignal", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "attrs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "frozenlist", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "multidict", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "propcache", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "yarl", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794, upload-time = "2026-06-07T21:09:35.529Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/67/58ded4b3f2e10f94972d8928050c85330e249a31dd45a0e5f3c0e9c3fa05/aiohttp-3.14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8f6bb621e5863cfe8fe5ff5468002d200ec31f30f1280b259dc505b02595099e", size = 766140, upload-time = "2026-06-07T21:05:37.471Z" }, - { url = "https://files.pythonhosted.org/packages/18/68/4ae5b4e08943f316594bb68da89957d3baf5760588fa09509594bd777e4b/aiohttp-3.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f7215cb3933784f79ed20e5f050e15984f390424339b22375d5a53c933a0491", size = 519430, upload-time = "2026-06-07T21:05:40.751Z" }, - { url = "https://files.pythonhosted.org/packages/cb/c1/316c8f3549dbe5245f92bfd523ec6f32dd4d98cafe21df3f6a19b1184c75/aiohttp-3.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9d4e294455b23a68c9b8f042d0e8e377a265bcb15332753695f6e5b6819e0ce", size = 514406, upload-time = "2026-06-07T21:05:42.111Z" }, - { url = "https://files.pythonhosted.org/packages/5a/ee/fb0ac28684e8d753b83c8a4eebc19a5846912aa0a4daaabb6a9936363840/aiohttp-3.14.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b238af795833d5731d049d82bc84b768ae6f8f97f0495963b3ed9935c5901cc3", size = 1703649, upload-time = "2026-06-07T21:05:43.427Z" }, - { url = "https://files.pythonhosted.org/packages/3b/57/aa2beab673331f111885db8a7b69dfe3ab0e53e446a0ace18ca694b4dc58/aiohttp-3.14.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e4e5e0ae56914ecdbf446493addefc0159053dd53962cef37d7839f37f73d505", size = 1675126, upload-time = "2026-06-07T21:05:44.897Z" }, - { url = "https://files.pythonhosted.org/packages/47/ea/dad128abe365e79be03b16ed464198ac73e0d257e8260c6f7d6f31cbef26/aiohttp-3.14.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:092e4ce3619a7c6dee52a6bdabda973d9b34b66781f840ce93c7e0cec30cf521", size = 1771558, upload-time = "2026-06-07T21:05:46.405Z" }, - { url = "https://files.pythonhosted.org/packages/63/f3/b5b4e10327cb85d34d24232c6b71b64602f190b3ccb238a043ac6b187dac/aiohttp-3.14.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bb33777ea21e8b7ecde0e6fc84f598be0a1192eab1a63bc746d75aa75d38e7bd", size = 1856631, upload-time = "2026-06-07T21:05:47.844Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9d/93294c3045775c708ac8310eb3d3622a11d2951345ad590d532d62a1faa4/aiohttp-3.14.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23119f8fd4f5d16902ed459b63b100bcd269628075162bddac56cc7b5273b3fb", size = 1714139, upload-time = "2026-06-07T21:05:49.982Z" }, - { url = "https://files.pythonhosted.org/packages/29/c4/93067c85a0373492ce8e577435203c5947c454af074ac48ed4f3a1b9dd4a/aiohttp-3.14.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:57fc6745a4b7d0f5a9eb4f40a69718be6c0bc1b8368cc9fe89e90118719f4f42", size = 1588321, upload-time = "2026-06-07T21:05:51.431Z" }, - { url = "https://files.pythonhosted.org/packages/c4/39/9ff91aaf02af8b7b8222a987466da539f154c3e01732c22b5f5a20a8ee66/aiohttp-3.14.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6fd35beba67c4183b09375c5fff9accb47524191a244a99f95fd4472f5402c2b", size = 1670375, upload-time = "2026-06-07T21:05:53.109Z" }, - { url = "https://files.pythonhosted.org/packages/aa/e4/77452a3676b8d99ac1375f77691d6bf65ea6e9f4b201b82ef77c916dc767/aiohttp-3.14.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:672b9d65f42eb877f5c3f234a4547e4e1a226ca8c2eed879bb34670a0ce51192", size = 1690933, upload-time = "2026-06-07T21:05:54.902Z" }, - { url = "https://files.pythonhosted.org/packages/7d/84/b0059a7c7fc05ea23f3bc1596ba91c12f79588b9450564a24cac37536d0a/aiohttp-3.14.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:24ba13339fed9251d9b1a1bec8c7ab84c0d1675d79d33501e11f94f8b9a84e05", size = 1740798, upload-time = "2026-06-07T21:05:56.458Z" }, - { url = "https://files.pythonhosted.org/packages/8f/3a/e2a513ecbfc362591caa51a7f7e011b3bfc8938b388ae44cd95560d36999/aiohttp-3.14.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:94da27378da0610e341c4d30de29a191672683cc82b8f9556e8f7c7212a020fe", size = 1576412, upload-time = "2026-06-07T21:05:57.953Z" }, - { url = "https://files.pythonhosted.org/packages/a1/10/08f1654f538f93d36dcac66310a06eefce4641cdafca83f9f0a5317be254/aiohttp-3.14.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:52cdac9432d8b4a719f35094a818d95adcae0f0b4fe9b9b921909e0c87de9e7d", size = 1750199, upload-time = "2026-06-07T21:05:59.488Z" }, - { url = "https://files.pythonhosted.org/packages/99/e4/d91b70c57d8b8e9611e4a2e52238ca3698d3dc1c2efe25b7a9bf594ac584/aiohttp-3.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:672ac254412a24d0d0cf00a9e6c238877e4be5e5fa2d188832c1244f45f31966", size = 1699356, upload-time = "2026-06-07T21:06:01.131Z" }, - { url = "https://files.pythonhosted.org/packages/3d/f1/15340176f35ff61b95dbe34020bcf43f9e624a2d7bbac934715ff97d2033/aiohttp-3.14.1-cp310-cp310-win32.whl", hash = "sha256:2fe3607e71acc6ebb0ec8e492a247bf7a291226192dc0084236dfc12478916f6", size = 458939, upload-time = "2026-06-07T21:06:02.86Z" }, - { url = "https://files.pythonhosted.org/packages/c3/c2/a2f1ec5b37f903109e43ae2862268cfe4a67a60c1b2cf43169fcdff5995f/aiohttp-3.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:30099eda75a53c32efb0920e9c33c195314d2cc1c680fbfd30894932ac5f27df", size = 482583, upload-time = "2026-06-07T21:06:04.666Z" }, - { url = "https://files.pythonhosted.org/packages/d0/7a/7b56f6732ef79530afaa72aa335d41b67c8d79b946995f0b11ad72985435/aiohttp-3.14.1-cp310-cp310-win_arm64.whl", hash = "sha256:5a837f49d901f9e368651b676912bff1104ed8c1a83b280bcd7b29adccef5c9c", size = 453470, upload-time = "2026-06-07T21:06:06.322Z" }, { url = "https://files.pythonhosted.org/packages/26/dd/bf526e6f0a1120dd6f2df2e97bacfe4d358f13d17a0ff5847301a1375a51/aiohttp-3.14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:aa00140699487bd435fde4342d85c94cb256b7cd3a5b9c3396c67f19922afda2", size = 765225, upload-time = "2026-06-07T21:06:07.957Z" }, { url = "https://files.pythonhosted.org/packages/8f/e1/a2872aa55495a70f61310d411541c6ee23812d9a884e000c716e1bc3edbf/aiohttp-3.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c1af67559445498b502030c35c59db59966f47041ca9de5b4e707f86bd10b5f", size = 518743, upload-time = "2026-06-07T21:06:09.749Z" }, { url = "https://files.pythonhosted.org/packages/5b/e7/c60c7b209e509cc787de3cea0550a518538cfc08003e1c1e14c1c63fff71/aiohttp-3.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d44ec478e713ee7f29b439f7eb8dc2b9d4079e11ae114d2c2ac3d5daf30516c8", size = 514139, upload-time = "2026-06-07T21:06:11.26Z" }, - { url = "https://files.pythonhosted.org/packages/5b/8d/614ace2f579702c9840ab1e1447fd8509e35b0b904f7196418fa2f57b25d/aiohttp-3.14.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d3b1a184a9a8f548a6b73f1e26b96b052193e4b3175ed7342aaf1151a1f00a04", size = 1784088, upload-time = "2026-06-07T21:06:12.887Z" }, - { url = "https://files.pythonhosted.org/packages/49/e0/726e90f99542bf292f81a96a12cc4847deb86f3ccf62c6f4014a201f4d33/aiohttp-3.14.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5f2504bc0322437c9a1ff6d3333ca56c7477b727c995f036b976ae17b98372c8", size = 1737835, upload-time = "2026-06-07T21:06:14.564Z" }, - { url = "https://files.pythonhosted.org/packages/0b/4b/d176d5c4db9d33dacf0543102ea59503bc1d528af4cfd0b719949ca49389/aiohttp-3.14.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73f05ea02013e02512c3bf42714f1208c57168c779cc6fe23516e4543089d0a6", size = 1842801, upload-time = "2026-06-07T21:06:16.228Z" }, - { url = "https://files.pythonhosted.org/packages/dc/d6/5a99b563690ea0cbed912ae94a2ce33993a5709a651a3a4fe761e7dd973a/aiohttp-3.14.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:797457503c2d426bee06eef808d07b31ede30b65e054444e7de64cad0061b7af", size = 1929992, upload-time = "2026-06-07T21:06:17.947Z" }, { url = "https://files.pythonhosted.org/packages/76/7f/a987b14a3859094b3cea3f4825219c3e5536242564af6e3f9c2f6c994eb2/aiohttp-3.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b821a1f7dedf7e37450654e620038ac3b2e81e8fa6ea269337e97101978ec730", size = 1786989, upload-time = "2026-06-07T21:06:19.677Z" }, - { url = "https://files.pythonhosted.org/packages/f1/1a/420e5c85a3e73349372ed22ce0b6af86bfa6ce16a4b20a64a2e94608c781/aiohttp-3.14.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4cd96b5ba05d67ed0cf00b5b405c8cd99586d8e3481e8ee0a831057591af7621", size = 1640129, upload-time = "2026-06-07T21:06:22.558Z" }, - { url = "https://files.pythonhosted.org/packages/a7/80/18a592ed3be0a402cc03670bd72ee1f8563ddbe1d8d5542dbf868f274136/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d459b98a932296c6f0e94f87511a0b1b90a8a02c30a50e60a297619cd5a58ee", size = 1756576, upload-time = "2026-06-07T21:06:24.8Z" }, - { url = "https://files.pythonhosted.org/packages/ec/0b/8b3d5713373858ff71a617daf6e3b0e81ad63e79d09a3cf2f6b6b983939c/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:764457a7be60825fb770a644852ff717bcbb5042f189f2bd16df61a81b3f6573", size = 1754668, upload-time = "2026-06-07T21:06:26.528Z" }, - { url = "https://files.pythonhosted.org/packages/9f/49/fd564575cf225821d7ba5a117cb8bc27213d8a7e1811162afb43ae077039/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f7a16ef45b081454ef844502d87a848876c490c4cb5c650c230f6ec79ed2c1e7", size = 1817019, upload-time = "2026-06-07T21:06:28.297Z" }, - { url = "https://files.pythonhosted.org/packages/ed/1b/e850c9ae6fc91356552ae668bb6c51e93fa29c8aef13398a10b56678557f/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2fbc3ed048b3475b9f0cbcb9978e9d2d3511acd91ead203af26ed9f0056004cf", size = 1631638, upload-time = "2026-06-07T21:06:30.242Z" }, - { url = "https://files.pythonhosted.org/packages/eb/94/3c337ba72451a89806ace6f75bddc92bafc5b8d53d90115a512858024b63/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bedb0cd073cc2dc035e30aeb99444389d3cd2113afe4ef9fcd23d439f5bade85", size = 1835660, upload-time = "2026-06-07T21:06:31.943Z" }, { url = "https://files.pythonhosted.org/packages/2b/9c/9c18cf367a0498212d9ba7daf990b504a5e8ae064cda4b504e2647c89c03/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b6feea921016eb3d4e04d65fc4e9ca402d1a3801f562aef94989f54694917af3", size = 1775698, upload-time = "2026-06-07T21:06:33.72Z" }, - { url = "https://files.pythonhosted.org/packages/b5/63/a251a9d2a6cb45065b2ddc0bde2b3dd10108740a9a42f632c66405a761a2/aiohttp-3.14.1-cp311-cp311-win32.whl", hash = "sha256:313701e488100074ce99850404ee36e741abf6330179fec908a1944ecf570126", size = 458386, upload-time = "2026-06-07T21:06:35.279Z" }, - { url = "https://files.pythonhosted.org/packages/17/ca/69274c51dcd6e8947d77b2806cf47a4a15f2c846e2cbeb1882547d3da283/aiohttp-3.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:03ab4530fdcb3a543a122ba4b65ac9919da9fe9f78a03d328a6e38ff962f7aa5", size = 483406, upload-time = "2026-06-07T21:06:36.824Z" }, - { url = "https://files.pythonhosted.org/packages/2c/8a/c25904f77690c3688ec140f87591ef11a0cfe36bf3d5c0f1f38056fb62b3/aiohttp-3.14.1-cp311-cp311-win_arm64.whl", hash = "sha256:486f7d16ed54c39c2cbd7ca71fd8ba2b8bb7860df65bd7b6ed640bab96a38a8b", size = 452987, upload-time = "2026-06-07T21:06:38.371Z" }, ] [[package]] @@ -99,8 +66,8 @@ name = "aiosignal" version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "frozenlist" }, - { name = "typing-extensions" }, + { name = "frozenlist", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } wheels = [ @@ -125,14 +92,32 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, ] +[[package]] +name = "anthropic" +version = "0.111.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "distro", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "docstring-parser", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jiter", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "sniffio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/8a/9afc7305a2ce4b52b30e137f83cd2a6a90b918b3997073db11bb5a1de55a/anthropic-0.111.0.tar.gz", hash = "sha256:39cbda0ac17a6d423e5bf609811bd69b26eddf6299d7a468126e05bc711ce826", size = 934001, upload-time = "2026-06-18T17:31:44.733Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/bb/09e82a81885d787f350fb55ca9df865b63140dd28b3b5b3104c4ae261657/anthropic-0.111.0-py3-none-any.whl", hash = "sha256:c14edb36ed80da9099acbd26b5cec810d76606c31f32a0d56a4cf9d4fa9e25ae", size = 929774, upload-time = "2026-06-18T17:31:43.116Z" }, +] + [[package]] name = "anyio" version = "4.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "idna" }, - { name = "typing-extensions" }, + { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1c/b5/001890774a9552aff22502b8da382593109ce0c95314abaebbb116567545/anyio-4.14.0.tar.gz", hash = "sha256:b47c1f9ccf73e67021df785332508f99379c68fa7d0684e8e3492cb1d4b23f89", size = 253586, upload-time = "2026-06-15T22:00:49.021Z" } wheels = [ @@ -140,21 +125,27 @@ wheels = [ ] [[package]] -name = "astor" -version = "0.8.1" +name = "apache-tvm-ffi" +version = "0.1.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/21/75b771132fee241dfe601d39ade629548a9626d1d39f333fde31bc46febe/astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e", size = 35090, upload-time = "2019-12-10T01:50:35.51Z" } +dependencies = [ + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/60/1e787a0b5ebf318483235be2a689ee367173983067e441b8379564f667c0/apache_tvm_ffi-0.1.9.tar.gz", hash = "sha256:d2d402587e8906de0a07f4746aa78f3d452c7efe3625d4bb39ac2ad693bce530", size = 2513731, upload-time = "2026-02-27T19:28:06.602Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/88/97eef84f48fa04fbd6750e62dcceafba6c63c81b7ac1420856c8dcc0a3f9/astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5", size = 27488, upload-time = "2019-12-10T01:50:33.628Z" }, + { url = "https://files.pythonhosted.org/packages/55/43/63faedea83494e99122466a993bcdccd31cf93c7e8a0d56731120e82e2b9/apache_tvm_ffi-0.1.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6f16d73a82a9e68a439b7d233d48b1b929be17fe92df4bbf1ee2274e573144a3", size = 2323130, upload-time = "2026-02-27T19:27:17.259Z" }, + { url = "https://files.pythonhosted.org/packages/e4/3b/6cfc82a3ab5d9e501bbcee5df36eebe09da1c384461d7a55e2a17776d117/apache_tvm_ffi-0.1.9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21365abd2a2a1a6d3b4e6e4f048309651125becfa795440c3607f3cc27d30ac7", size = 2307140, upload-time = "2026-02-27T19:27:20.222Z" }, + { url = "https://files.pythonhosted.org/packages/c6/dd/2bab4c6cd86257dbf99e93452a1af833113f8dc3e25a25579f6e4e4c8a94/apache_tvm_ffi-0.1.9-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28241371934ea8af10d5067087ba1229ebddded7b2c02d33a258ec2a96df8c46", size = 2299704, upload-time = "2026-02-27T19:27:27.477Z" }, + { url = "https://files.pythonhosted.org/packages/70/ef/5402da5d37f5270fd88ea0348acca78dba9be8bdbf6c2bcae0935eb03ef1/apache_tvm_ffi-0.1.9-cp312-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f45eb43499acac45ff6c93564f0ff2d3ca27b69656d540fd56ce59d51c0b4c65", size = 2278991, upload-time = "2026-02-27T19:27:30.729Z" }, ] [[package]] -name = "async-timeout" -version = "4.0.3" +name = "astor" +version = "0.8.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/87/d6/21b30a550dafea84b1b8eee21b5e23fa16d010ae006011221f33dcd8d7f8/async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", size = 8345, upload-time = "2023-08-10T16:35:56.907Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/21/75b771132fee241dfe601d39ade629548a9626d1d39f333fde31bc46febe/astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e", size = 35090, upload-time = "2019-12-10T01:50:35.51Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/fa/e01228c2938de91d47b307831c62ab9e4001e747789d0b05baf779a6488c/async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028", size = 5721, upload-time = "2023-08-10T16:35:55.203Z" }, + { url = "https://files.pythonhosted.org/packages/c3/88/97eef84f48fa04fbd6750e62dcceafba6c63c81b7ac1420856c8dcc0a3f9/astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5", size = 27488, upload-time = "2019-12-10T01:50:33.628Z" }, ] [[package]] @@ -166,18 +157,74 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, ] +[[package]] +name = "backports-zstd" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/b5/5a873da082bd08acd6a497f7aae224e94a7c27fa8f24488089cc50a16c84/backports_zstd-1.6.0.tar.gz", hash = "sha256:80a7859ffe70bf239d7a2ce15293bdeb5b4280ff7dc326ffab312b0e254dbb24", size = 1000009, upload-time = "2026-06-14T10:50:58.555Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/90/428dd82228b1b6d62d5a1bf312c29e6c125af6a182fcfd82768ca179dcc7/backports_zstd-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c4fc41b2df5529cad5ceb230319e82728096d4b353ce8d4df68a2ec37e291bb8", size = 437067, upload-time = "2026-06-14T10:49:28.335Z" }, + { url = "https://files.pythonhosted.org/packages/ef/48/768edf21fe33bae8d874470b1be136681d4d32eb820a32e1c98262ebe39b/backports_zstd-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:83391ef5935cc0f329b1abca414ae20ffe40d335fc21a4b5e664f08a74317d5f", size = 363454, upload-time = "2026-06-14T10:49:29.784Z" }, + { url = "https://files.pythonhosted.org/packages/4d/25/a9e37dd035027565fa0b7e367da50e88a6ab26e7fd413269aa118e25258b/backports_zstd-1.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7293fefe15f0e5852bdb4ad1e0e26f3cbd4d3e61c19f751ecc4ff34bc1eb237d", size = 492486, upload-time = "2026-06-14T10:49:36.06Z" }, + { url = "https://files.pythonhosted.org/packages/81/a4/1692fbb88af8aaf900a53619fcc95c9e45d9ff162223a47fd672a9893c8d/backports_zstd-1.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dd085eafa2aac6f883afd28210a3231f717f25409a1e44a39bb7b04c8c5b5646", size = 496496, upload-time = "2026-06-14T10:49:45.118Z" }, + { url = "https://files.pythonhosted.org/packages/e8/09/898fe2f8196fa7ab825f5fed786c68581fdac7d23a8e20baa0cc01cb2f0b/backports_zstd-1.6.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:aeef8563b82ed4af328f98e5041c1b4800d86f68f857ffd1577d4d47dc9aa6cd", size = 411023, upload-time = "2026-06-14T10:50:50.286Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ad/6ad9af1596ab5f284bb53954be41396e13d23c81cdfe3d945402e8ee0215/backports_zstd-1.6.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9cb75e33131946fabd6319061df3b8b1d588fe0963183280e9b5f49f7772fc09", size = 340554, upload-time = "2026-06-14T10:50:51.523Z" }, + { url = "https://files.pythonhosted.org/packages/53/a1/484e0f9ec994bd2285d6747e7c8028350f1a177e9210bc57637898042d3b/backports_zstd-1.6.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:17efb3d11137de5166dd51eedab9c36ad633402acba386eee8d715213ea47e49", size = 415201, upload-time = "2026-06-14T10:50:55.854Z" }, +] + +[[package]] +name = "bert-score" +version = "0.3.13" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pandas", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/93/2c97a85cbb66a8a256a13176e11c9c4508074e2341299fe75ee955c81eff/bert_score-0.3.13.tar.gz", hash = "sha256:8ffe5838eac8cdd988b8b1a896af7f49071188c8c011a1ed160d71a9899a2ba4", size = 48621, upload-time = "2023-02-20T21:07:29.477Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/8c/bc5457de4c004b1a623b31f7bc8d0375fb699b7d67df11879098b4b7b7c8/bert_score-0.3.13-py3-none-any.whl", hash = "sha256:bbbb4c7fcdaa46d7681aff49f37f96faa09ed74e1b150e659bdc6b58a66989b9", size = 61135, upload-time = "2023-02-20T21:07:27.226Z" }, +] + +[[package]] +name = "bioregistry" +version = "0.13.62" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "curies", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "more-click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", extra = ["email"], marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pystow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "python-multipart", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sssom-pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "urllib3", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/a3/aaf3fbeae7df7967a8203f919dc85f276a91e128035c42d2ae0d3969f9a0/bioregistry-0.13.62.tar.gz", hash = "sha256:d5cb226eb287be202e6ce33b7c2800cc7ed9f497dc4675e6945f40abfe0e2033", size = 6073578, upload-time = "2026-06-13T05:14:17.521Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/f3/779624aec98ac5ef06e03335b050ee8008267f08043e466f9f2b65d1177c/bioregistry-0.13.62-py3-none-any.whl", hash = "sha256:1c95f5ebe426e88c8c5f4453c98804679fcc0cb3a6995d3410c8dca32909f2c2", size = 6166032, upload-time = "2026-06-13T05:14:15.034Z" }, +] + [[package]] name = "bitsandbytes" -version = "0.46.1" +version = "0.49.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, - { name = "torch" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "packaging", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/b2/9dadb4f8dca3948e35c1ebfee75ca82353e41468b41ff785430595f8e6f0/bitsandbytes-0.46.1-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:21b349f776d04c6c1380405961081de29c84f49640b79d3d199b6d719818da84", size = 30713241, upload-time = "2025-07-02T19:44:21.857Z" }, - { url = "https://files.pythonhosted.org/packages/6b/1e/c26dbcb46cebb49fa6b17ff888966e6d8f306078b095a5df801a583549d0/bitsandbytes-0.46.1-py3-none-manylinux_2_24_x86_64.whl", hash = "sha256:b0ee4a204fb926d4eae02bc2f5468ae3c11c011cfa849a4c771d4c6b201f57ae", size = 72865511, upload-time = "2025-07-02T19:44:25.192Z" }, - { url = "https://files.pythonhosted.org/packages/85/7d/06da01fac23a5032632dd7874b31c1d9b7b9af2314b2b07e5f99641950da/bitsandbytes-0.46.1-py3-none-win_amd64.whl", hash = "sha256:9f6f61376bd0e9780c5dc4ddee7d1f52cb10fe8034a1ea588611f4e8b87eb6a7", size = 72197544, upload-time = "2025-07-02T19:44:29.483Z" }, + { url = "https://files.pythonhosted.org/packages/19/57/3443d6f183436fbdaf5000aac332c4d5ddb056665d459244a5608e98ae92/bitsandbytes-0.49.2-py3-none-manylinux_2_24_x86_64.whl", hash = "sha256:54b771f06e1a3c73af5c7f16ccf0fc23a846052813d4b008d10cb6e017dd1c8c", size = 60651714, upload-time = "2026-02-16T21:26:11.579Z" }, ] [[package]] @@ -185,34 +232,12 @@ name = "blake3" version = "1.0.8" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/75/aa/abcd75e9600987a0bc6cfe9b6b2ff3f0e2cb08c170addc6e76035b5c4cb3/blake3-1.0.8.tar.gz", hash = "sha256:513cc7f0f5a7c035812604c2c852a0c1468311345573de647e310aca4ab165ba", size = 117308, upload-time = "2025-10-14T06:47:48.83Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/a0/fbe66cf17f72cab1600246b90db6cb39b52a88335b9bd2821688379d8dde/blake3-1.0.8-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:8956bb9aec47b6c37ccce935a943588f1f5e6e2e85d43bb7cb76a574238f8a9b", size = 350634, upload-time = "2025-10-14T06:45:09.621Z" }, - { url = "https://files.pythonhosted.org/packages/20/bc/f4b88873054aa87b8c36398775713bf674807e7449a9c7fefe35d3cf1dc5/blake3-1.0.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7adbbee5dd0c302218eb8acdfd82b7006930eb5798f56f79f9cca89f6f192662", size = 328382, upload-time = "2025-10-14T06:45:11.137Z" }, - { url = "https://files.pythonhosted.org/packages/b9/e5/4c37ced9358cece71f2f380a57f77a449f6e87cc6d9f450613237b7a3078/blake3-1.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:859cd57bac097a2cd63cb36d64c2f6f16c9edece5590f929e70157478e46dc9e", size = 371337, upload-time = "2025-10-14T06:45:12.296Z" }, - { url = "https://files.pythonhosted.org/packages/d1/df/0825da1cde7ca63a8bcdc785ca7f8647b025e9497eef18c75bb9754dbd26/blake3-1.0.8-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e1d70bf76c02846d0868a3d413eb6c430b76a315e12f1b2e59b5cf56c1f62a3", size = 374945, upload-time = "2025-10-14T06:45:13.99Z" }, - { url = "https://files.pythonhosted.org/packages/b7/a3/43f10c623179dce789ca9e3b8f4064fb6312e99f05c1aae360d07ad95bb0/blake3-1.0.8-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3fe26f145fcb82931d1820b55c0279f72f8f8e49450dd9d74efbfd409b28423", size = 448766, upload-time = "2025-10-14T06:45:15.471Z" }, - { url = "https://files.pythonhosted.org/packages/db/8f/9431bf5fe0eedeb2aadb4fe81fb18945cf8d49adad98e7988fb3cdac76c2/blake3-1.0.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97c076d58ee37eb5b2d8d91bb9db59c5a008fd59c71845dc57fe438aeeabaf10", size = 507107, upload-time = "2025-10-14T06:45:17.055Z" }, - { url = "https://files.pythonhosted.org/packages/ac/55/3712cdaebaefa8d5acec46f8df7861ba1832e1e188bc1333dd5acd31f760/blake3-1.0.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78731ce7fca46f776ae45fb5271a2a76c4a92c9687dd4337e84b2ae9a174b28f", size = 393955, upload-time = "2025-10-14T06:45:18.718Z" }, - { url = "https://files.pythonhosted.org/packages/1f/d0/add0441e7aaa6b358cac0ddc9246f0799b60d25f06bd542b554afe19fd85/blake3-1.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65e373c8b47174b969ee61a89ee56922f722972eb650192845c8546df8d9db9", size = 387577, upload-time = "2025-10-14T06:45:20.332Z" }, - { url = "https://files.pythonhosted.org/packages/b2/9a/e4a61f5c0cad4d51a886e8f4367e590caaead8a4809892292bf724c4421d/blake3-1.0.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db54946792d2b8c6fa4be73e6e334519f13c1b52e7ff346b3e2ec8ad3eb59401", size = 550515, upload-time = "2025-10-14T06:45:21.867Z" }, - { url = "https://files.pythonhosted.org/packages/28/c7/90c01091465628acff96534e82d4b3bc16ca22c515f69916d2715273c0e3/blake3-1.0.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:67d9c42c42eb1c7aedcf901591c743266009fcf48babf6d6f8450f567cb94a84", size = 554650, upload-time = "2025-10-14T06:45:23.047Z" }, - { url = "https://files.pythonhosted.org/packages/d5/11/812d7125c6e99e5e0e841a9af2c4161ac811c027e08886353df76eae7b96/blake3-1.0.8-cp310-cp310-win32.whl", hash = "sha256:444215a1e5201f8fa4e5c7352e938a7070cd33d66aeb1dd9b1103a64b6920f9e", size = 228695, upload-time = "2025-10-14T06:45:24.255Z" }, - { url = "https://files.pythonhosted.org/packages/3c/7e/ab9b5c4b650ff397d347451bfb1ad7e6e53dc06c945e2fd091f27a76422e/blake3-1.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:725c52c4d393c7bd1a10682df322d480734002a1389b320366c660568708846b", size = 215660, upload-time = "2025-10-14T06:45:25.381Z" }, - { url = "https://files.pythonhosted.org/packages/7d/e1/1df74c915fde3c48940247ad64984f40f5968191d7b5230bcc7b31402e7c/blake3-1.0.8-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9a8946cb6b1d2b2096daaaa89856f39887bce2b78503fa31b78173e3a86fa281", size = 350481, upload-time = "2025-10-14T06:45:26.625Z" }, - { url = "https://files.pythonhosted.org/packages/bb/0d/7c47ae1f5f8d60783ce6234a8b31db351fc62be243006a6276284ca3d40d/blake3-1.0.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:adccc3a139207e02bb7d7bb0715fe0b87069685aad5f3afff820b2f829467904", size = 328039, upload-time = "2025-10-14T06:45:32.844Z" }, - { url = "https://files.pythonhosted.org/packages/f4/0a/515209b0c282c360e249b89cd85350d97cfd55fadbb4df736c67b77b27a1/blake3-1.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fcfe81b3ae3fb5d2e88be0d3259603ff95f0d5ed69f655c28fdaef31e49a470", size = 371092, upload-time = "2025-10-14T06:45:34.062Z" }, - { url = "https://files.pythonhosted.org/packages/a0/33/9d342a2bf5817f006bbe947335e5d387327541ea47590854947befd01251/blake3-1.0.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:58ce8d45a5bb5326482de72ea1969a378634236186a970fef63058a5b7b8b435", size = 374859, upload-time = "2025-10-14T06:45:35.262Z" }, - { url = "https://files.pythonhosted.org/packages/5b/fc/ea4bef850a7ec9fbb383503fd3c56056dd9fa44e10c3bc61050ab7b2bac0/blake3-1.0.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83605dbf43f581d8b7175b7f3bfe5388bad5a7c6ac175c9c11d669da31133f4b", size = 448585, upload-time = "2025-10-14T06:45:36.542Z" }, - { url = "https://files.pythonhosted.org/packages/a5/67/167a65a4c431715407d07b1b8b1367698a3ad88e7260edb85f0c5293f08a/blake3-1.0.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b5573b052777142b2cecc453d022c3f21aa4aba75011258410bb98f41c1a727", size = 507519, upload-time = "2025-10-14T06:45:37.814Z" }, - { url = "https://files.pythonhosted.org/packages/32/e2/0886e192d634b264c613b0fbf380745b39992b424a0effc00ef08783644e/blake3-1.0.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe1b02ab49bfd969ef50b9f17482a2011c77536654af21807ba5c2674e0bb2a0", size = 393645, upload-time = "2025-10-14T06:45:39.146Z" }, { url = "https://files.pythonhosted.org/packages/fc/3b/7fb2fe615448caaa5f6632b2c7551117b38ccac747a3a5769181e9751641/blake3-1.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7780666dc6be809b49442d6d5ce06fdbe33024a87560b58471103ec17644682", size = 387640, upload-time = "2025-10-14T06:45:40.546Z" }, - { url = "https://files.pythonhosted.org/packages/bc/8c/2bfc942c6c97cb3d20f341859343bb86ee20af723fedfc886373e606079b/blake3-1.0.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af394b50c6aa0b1b957a99453d1ee440ef67cd2d1b5669c731647dc723de8a3a", size = 550316, upload-time = "2025-10-14T06:45:42.003Z" }, { url = "https://files.pythonhosted.org/packages/7e/75/0252be37620699b79dbaa799c9b402d63142a131d16731df4ef09d135dd7/blake3-1.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c63ece266a43014cf29e772a82857cd8e90315ae3ed53e3c5204851596edd5f2", size = 554463, upload-time = "2025-10-14T06:45:43.22Z" }, - { url = "https://files.pythonhosted.org/packages/8c/6d/d698ae2d5ddd25976fd2c11b079ca071334aecbba6414da8c9cc8e19d833/blake3-1.0.8-cp311-cp311-win32.whl", hash = "sha256:44c2815d4616fad7e2d757d121c0a11780f70ffc817547b3059b5c7e224031a7", size = 228375, upload-time = "2025-10-14T06:45:44.425Z" }, - { url = "https://files.pythonhosted.org/packages/34/d7/33b01e27dc3542dc9ec44132684506f880cd0257b04da0bf7f4b2afa41c8/blake3-1.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:8f2ef8527a7a8afd99b16997d015851ccc0fe2a409082cebb980af2554e5c74c", size = 215733, upload-time = "2025-10-14T06:45:46.049Z" }, ] [[package]] @@ -220,20 +245,41 @@ name = "blis" version = "0.7.11" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/51/8c/60c85350f2e1c9647df580083a0f6acc686ef32d1a91f4ab0c624b3ff867/blis-0.7.11.tar.gz", hash = "sha256:cec6d48f75f7ac328ae1b6fbb372dde8c8a57c89559172277f66e01ff08d4d42", size = 2897107, upload-time = "2023-09-22T06:28:25.103Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/8b/b61978aa36de134d1056c55c2efe818042df68aff211b91fa5b1b9ae3f85/blis-0.7.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd5fba34c5775e4c440d80e4dea8acb40e2d3855b546e07c4e21fad8f972404c", size = 6127109, upload-time = "2023-09-22T06:27:17.716Z" }, - { url = "https://files.pythonhosted.org/packages/3d/95/f23fbbf3010bf057302ebbb8ad697fb9a0f8624e833025c4a58bfb8d3389/blis-0.7.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:31273d9086cab9c56986d478e3ed6da6752fa4cdd0f7b5e8e5db30827912d90d", size = 1110252, upload-time = "2023-09-22T06:27:20.187Z" }, - { url = "https://files.pythonhosted.org/packages/fd/82/8d9576904833a8575ae6758dd8c1a2152fdec1705dd3ae65a10e99d8896a/blis-0.7.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d06883f83d4c8de8264154f7c4a420b4af323050ed07398c1ff201c34c25c0d2", size = 1711161, upload-time = "2023-09-22T06:27:22.215Z" }, - { url = "https://files.pythonhosted.org/packages/9b/81/55092e1c016fe05ef7a57623920209012f05e8b897acbad355c9bf854181/blis-0.7.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee493683e3043650d4413d531e79e580d28a3c7bdd184f1b9cfa565497bda1e7", size = 10171589, upload-time = "2023-09-22T06:27:23.894Z" }, - { url = "https://files.pythonhosted.org/packages/ad/65/d9fd07e11499e0a3162c6d61ae430172125e5c340c89c40504189d5299b9/blis-0.7.11-cp310-cp310-win_amd64.whl", hash = "sha256:a73945a9d635eea528bccfdfcaa59dd35bd5f82a4a40d5ca31f08f507f3a6f81", size = 6620069, upload-time = "2023-09-22T06:27:26.707Z" }, { url = "https://files.pythonhosted.org/packages/c7/59/c8010f380a16709e6d3ef5534845d1ca1e689079914ec67ab60f57edfc37/blis-0.7.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1b68df4d01d62f9adaef3dad6f96418787265a6878891fc4e0fabafd6d02afba", size = 6123547, upload-time = "2023-09-22T06:27:28.47Z" }, { url = "https://files.pythonhosted.org/packages/a8/73/0a9d4e7f6e78ef270e3a4532b17e060a02087590cf615ba9943fd1a283e9/blis-0.7.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:162e60d941a8151418d558a94ee5547cb1bbeed9f26b3b6f89ec9243f111a201", size = 1106895, upload-time = "2023-09-22T06:27:30.964Z" }, - { url = "https://files.pythonhosted.org/packages/51/f7/a5d9a0be0729f4172248dbae74d7e02b139b3a32cc29650d3ade7ab91fea/blis-0.7.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:686a7d0111d5ba727cd62f374748952fd6eb74701b18177f525b16209a253c01", size = 1707389, upload-time = "2023-09-22T06:27:32.321Z" }, { url = "https://files.pythonhosted.org/packages/dc/23/eb01450dc284a7ea8ebc0e5296f1f8fdbe5299169f4c318f836b4284a119/blis-0.7.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0421d6e44cda202b113a34761f9a062b53f8c2ae8e4ec8325a76e709fca93b6e", size = 10172888, upload-time = "2023-09-22T06:27:34.529Z" }, - { url = "https://files.pythonhosted.org/packages/2f/09/da0592c74560cc33396504698122f7a56747c82a5e072ca7d2c3397898e1/blis-0.7.11-cp311-cp311-win_amd64.whl", hash = "sha256:0dc9dcb3843045b6b8b00432409fd5ee96b8344a324e031bfec7303838c41a1a", size = 6602835, upload-time = "2023-09-22T06:27:37.46Z" }, +] + +[[package]] +name = "boolean-py" +version = "5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/cf/85379f13b76f3a69bca86b60237978af17d6aa0bc5998978c3b8cf05abb2/boolean_py-5.0.tar.gz", hash = "sha256:60cbc4bad079753721d32649545505362c754e121570ada4658b852a3a318d95", size = 37047, upload-time = "2025-04-03T10:39:49.734Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.0-py3-none-any.whl", hash = "sha256:ef28a70bd43115208441b53a045d1549e2f0ec6e3d08a9d142cbc41c1938e8d9", size = 26577, upload-time = "2025-04-03T10:39:48.449Z" }, +] + +[[package]] +name = "cachecontrol" +version = "0.14.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "msgpack", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2d/f6/c972b32d80760fb79d6b9eeb0b3010a46b89c0b23cf6329417ff7886cd22/cachecontrol-0.14.4.tar.gz", hash = "sha256:e6220afafa4c22a47dd0badb319f84475d79108100d04e26e8542ef7d3ab05a1", size = 16150, upload-time = "2025-11-14T04:32:13.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/79/c45f2d53efe6ada1110cf6f9fca095e4ff47a0454444aefdde6ac4789179/cachecontrol-0.14.4-py3-none-any.whl", hash = "sha256:b7ac014ff72ee199b5f8af1de29d60239954f223e948196fa3d84adaffc71d2b", size = 22247, upload-time = "2025-11-14T04:32:11.733Z" }, +] + +[package.optional-dependencies] +filecache = [ + { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] [[package]] @@ -260,22 +306,8 @@ version = "6.1.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/75/af/473c241e41c142ea06ebef8d1f660fa6ff928fb97210e7bec8ee5974f8cd/cbor2-6.1.2.tar.gz", hash = "sha256:6b43037a66947dee5af0abb1a4c3a13b3abac5a4a3f32f9771efbbcd030fd909", size = 86760, upload-time = "2026-06-02T19:01:29.333Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/3f/37771defcae022510d640df8e420b7968c01804c084ff8cd2b9021c8873b/cbor2-6.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ffda338fe434d8d37e92e0d2e8f66432f0aa983f769dd2417f1eb6dfce634d3", size = 412096, upload-time = "2026-06-02T19:00:21.183Z" }, - { url = "https://files.pythonhosted.org/packages/13/ab/a10563c43a937a5fc0c5c52ee14f8380c7ba66634294759cc3dd3697d521/cbor2-6.1.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:715112c1087bc65f26d50ed4ffaaa214cbd398fbfb0d1a45f7edf555e77c7ca6", size = 457955, upload-time = "2026-06-02T19:00:22.989Z" }, - { url = "https://files.pythonhosted.org/packages/c7/a9/443cb3f0b086cbb78e3df098bce6f8fb6cabc39b9ea5b46bca27b7adf4ad/cbor2-6.1.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:86b030a6accec1b4a58387e27edb656921c4b6d5d36d60f05d19915526233402", size = 468656, upload-time = "2026-06-02T19:00:24.549Z" }, - { url = "https://files.pythonhosted.org/packages/6b/ed/2b2446767225078c023fd32523f84dceecb2a94e7ac7259b27d1527a5eac/cbor2-6.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fe007e47f6edb828cc97af256ce3452f57431cb8841302c3c28543efc7c9e037", size = 523323, upload-time = "2026-06-02T19:00:25.851Z" }, - { url = "https://files.pythonhosted.org/packages/b2/71/cfe388abc06d59e8393a1a5fa260d5412b5a68963de0ef0e79f6395a3cb7/cbor2-6.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:95e3d99160f105b8b6bccb1033c9c14e8ca7c450d8999363882d87357313b78e", size = 534929, upload-time = "2026-06-02T19:00:27.61Z" }, - { url = "https://files.pythonhosted.org/packages/a0/e8/8b454b8d405d9a66935b47bf5d9b045147bcf86f7747161598a32e5169ad/cbor2-6.1.2-cp310-cp310-win32.whl", hash = "sha256:464abc44b6863f888c9e263078e52395bddc03f20a3bd59f58fff581788fea51", size = 284490, upload-time = "2026-06-02T19:00:29.347Z" }, - { url = "https://files.pythonhosted.org/packages/d2/3e/ecce89144cd820ba6f528debedff4948b6022996d3fcc4715e69f6acb483/cbor2-6.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:a3d1699de84d8aec4e9c6c3fdd450d86fac183a542733f0cac36a4317db2375a", size = 301090, upload-time = "2026-06-02T19:00:30.619Z" }, - { url = "https://files.pythonhosted.org/packages/cb/cd/92f77e8bdfef427c6617cd4b02898e9d88861db8dcc973cc8b2c29a51582/cbor2-6.1.2-cp310-cp310-win_arm64.whl", hash = "sha256:925ebc6d26a0d3aa81377bdcfd8d44d166f4f6a5ee77467a9d6f3ed1487fc499", size = 292330, upload-time = "2026-06-02T19:00:31.946Z" }, - { url = "https://files.pythonhosted.org/packages/c0/1e/687d7a712755c84a4b823ca79622dceef7ddfb0a3387b6ac1cad10835e07/cbor2-6.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ce8f6d9e234bdf36b5300bf3da98fafc198b253f8dfe77747327806bdb37d97", size = 411738, upload-time = "2026-06-02T19:00:33.396Z" }, - { url = "https://files.pythonhosted.org/packages/3f/d3/a96162ac244e074f9c188ffd29c086c51466e71c7c360189f6204900db3d/cbor2-6.1.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9f81ab0e74671b0ff9b7e30386e2ab8d40ee1049d13c1680b57ab1b1cd95c81a", size = 457945, upload-time = "2026-06-02T19:00:34.729Z" }, { url = "https://files.pythonhosted.org/packages/3a/f3/7fed7cee8456932d38e7b11d5034470ee9e91378d16f762c552e78df34fa/cbor2-6.1.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:5a429fc61db768c3b4739eb8532556eed86913ad64fe6ebbc1f3a646fb9a4f22", size = 468758, upload-time = "2026-06-02T19:00:35.882Z" }, - { url = "https://files.pythonhosted.org/packages/a1/e9/bb31f04c5afa53eb55927da1399cc596d7e84e7053de7abf2c3aba0ea3a9/cbor2-6.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:511999bf3310c6641d3d15ee3853daa7ebd6ef3130bb0d63b9a7e2fd720a3714", size = 523169, upload-time = "2026-06-02T19:00:37.422Z" }, { url = "https://files.pythonhosted.org/packages/fe/7f/90faf18c280abb49428ed2e78f672ef0c7f6eb1b9b685bc4fe810f2e5e95/cbor2-6.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3099e678283efd2d3cabd6ddcb770da6e2102c0d265f98bca38aa4e720e247cf", size = 534885, upload-time = "2026-06-02T19:00:38.972Z" }, - { url = "https://files.pythonhosted.org/packages/b8/8a/447aea5da80847bb17ca4718cd4909a2dc8dfe6f68ede4fe29f94b4ca12c/cbor2-6.1.2-cp311-cp311-win32.whl", hash = "sha256:0ef832ac8152ca76a69c184fe401329629b7dfd5fdddd713121bf1ff6d21660f", size = 284601, upload-time = "2026-06-02T19:00:40.426Z" }, - { url = "https://files.pythonhosted.org/packages/55/95/6239187639a875eb83b924c16f4938d3d735c9c45474008c8b962bd55da2/cbor2-6.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:08cdc03d65e965aafd04c3bf9cb54b8cba55041756bd39d0ba6cd62bd060f959", size = 301284, upload-time = "2026-06-02T19:00:41.693Z" }, - { url = "https://files.pythonhosted.org/packages/76/cb/e5f92271747a0331ca9151fac4098f8e245f1b09623ddff1258967a35b01/cbor2-6.1.2-cp311-cp311-win_arm64.whl", hash = "sha256:0e2cfd25a395d454990d67148103107293c6506c3b0b15952a6e97f53d23deda", size = 292228, upload-time = "2026-06-02T19:00:43.27Z" }, ] [[package]] @@ -292,35 +324,12 @@ name = "cffi" version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pycparser", marker = "implementation_name != 'PyPy'" }, + { name = "pycparser", marker = "implementation_name != 'PyPy' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, - { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, - { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, - { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, - { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, - { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, - { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, - { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, - { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, - { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, - { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, - { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, - { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, - { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, - { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, - { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, - { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, - { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, - { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, - { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, - { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, ] [[package]] @@ -329,38 +338,9 @@ version = "3.4.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182, upload-time = "2026-04-02T09:25:40.673Z" }, - { url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", size = 209329, upload-time = "2026-04-02T09:25:42.354Z" }, - { url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", size = 231230, upload-time = "2026-04-02T09:25:44.281Z" }, - { url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", size = 225890, upload-time = "2026-04-02T09:25:45.475Z" }, - { url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", size = 216930, upload-time = "2026-04-02T09:25:46.58Z" }, - { url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", size = 202109, upload-time = "2026-04-02T09:25:48.031Z" }, - { url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", size = 214684, upload-time = "2026-04-02T09:25:49.245Z" }, - { url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", size = 212785, upload-time = "2026-04-02T09:25:50.671Z" }, - { url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", size = 203055, upload-time = "2026-04-02T09:25:51.802Z" }, - { url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", size = 232502, upload-time = "2026-04-02T09:25:53.388Z" }, - { url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", size = 214295, upload-time = "2026-04-02T09:25:54.765Z" }, - { url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", size = 227145, upload-time = "2026-04-02T09:25:55.904Z" }, - { url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", size = 218884, upload-time = "2026-04-02T09:25:57.074Z" }, - { url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", size = 148343, upload-time = "2026-04-02T09:25:58.199Z" }, - { url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", size = 159174, upload-time = "2026-04-02T09:25:59.322Z" }, - { url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", size = 147805, upload-time = "2026-04-02T09:26:00.756Z" }, { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705, upload-time = "2026-04-02T09:26:02.191Z" }, - { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419, upload-time = "2026-04-02T09:26:03.583Z" }, - { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901, upload-time = "2026-04-02T09:26:04.738Z" }, - { url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", size = 222742, upload-time = "2026-04-02T09:26:06.36Z" }, { url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", size = 214061, upload-time = "2026-04-02T09:26:08.347Z" }, - { url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", size = 199239, upload-time = "2026-04-02T09:26:09.823Z" }, - { url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", size = 210173, upload-time = "2026-04-02T09:26:10.953Z" }, - { url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", size = 209841, upload-time = "2026-04-02T09:26:12.142Z" }, - { url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", size = 200304, upload-time = "2026-04-02T09:26:13.711Z" }, - { url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", size = 229455, upload-time = "2026-04-02T09:26:14.941Z" }, - { url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", size = 210036, upload-time = "2026-04-02T09:26:16.478Z" }, - { url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", size = 224739, upload-time = "2026-04-02T09:26:17.751Z" }, { url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", size = 216277, upload-time = "2026-04-02T09:26:18.981Z" }, - { url = "https://files.pythonhosted.org/packages/06/6d/3be70e827977f20db77c12a97e6a9f973631a45b8d186c084527e53e77a4/charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad", size = 147819, upload-time = "2026-04-02T09:26:20.295Z" }, - { url = "https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00", size = 159281, upload-time = "2026-04-02T09:26:21.74Z" }, - { url = "https://files.pythonhosted.org/packages/ca/83/6413f36c5a34afead88ce6f66684d943d91f233d76dd083798f9602b75ae/charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1", size = 147843, upload-time = "2026-04-02T09:26:22.901Z" }, { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, ] @@ -368,9 +348,6 @@ wheels = [ name = "click" version = "8.4.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" }, @@ -380,9 +357,6 @@ wheels = [ name = "cloudpathlib" version = "0.24.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/06/19/58bc6b5d7d0f81c7209b05445af477e147c486552f96665a5912211839b9/cloudpathlib-0.24.0.tar.gz", hash = "sha256:c521a984e77b47e656fe78e20a7e3e260e0ab45fc69e33ac01094227c979e34a", size = 53600, upload-time = "2026-04-30T00:54:43.265Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c2/5b/ba933f896d9b0b07608d575a8501e2b4e32166b60d84c430a4a7285ebe64/cloudpathlib-0.24.0-py3-none-any.whl", hash = "sha256:b1c51e2d2ec7dc4fed6538991f4aea849d6cf11a7e6b9069f86e461aa1f9b5b4", size = 63214, upload-time = "2026-04-30T00:54:42.06Z" }, @@ -397,27 +371,19 @@ 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 = "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 = "compressed-tensors" -version = "0.10.2" +version = "0.17.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pydantic" }, - { name = "torch" }, - { name = "transformers" }, + { name = "loguru", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "transformers", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/86/d43d369abc81ec63ec7b8f6f27fc8b113ea0fd18a4116ae12063387b8b34/compressed_tensors-0.10.2.tar.gz", hash = "sha256:6de13ac535d7ffdd8890fad3d229444c33076170acaa8fab6bab8ecfa96c1d8f", size = 173459, upload-time = "2025-06-23T13:19:06.135Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/9e/d7f18bd9a0354088abc11a0c1f2c7698f7c49e5a709faedf6a46e388f693/compressed_tensors-0.17.0.tar.gz", hash = "sha256:15c20d06bdbcf35b51fc99fd125e7b9be1e1855567c33b7a46dfac26ad6fb126", size = 257091, upload-time = "2026-06-03T16:49:17.208Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/43/ac/56bb4b6b3150783119479e2f05e32ebfc39ca6ff8e6fcd45eb178743b39e/compressed_tensors-0.10.2-py3-none-any.whl", hash = "sha256:e1b4d9bc2006e3fd3a938e59085f318fdb280c5af64688a4792bf1bc263e579d", size = 169030, upload-time = "2025-06-23T13:19:03.487Z" }, + { url = "https://files.pythonhosted.org/packages/35/63/6edf0415b072fff0bf8b546074dea3f0f9b148e49b601ac98bdc60a76c68/compressed_tensors-0.17.0-py3-none-any.whl", hash = "sha256:4a1b89b508f7efb8ffb4eee8a6e69e0452d9b080cae130146025c64fbe9fa9aa", size = 211714, upload-time = "2026-06-03T16:49:15.672Z" }, ] [[package]] @@ -425,8 +391,8 @@ name = "confection" version = "0.1.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pydantic" }, - { name = "srsly" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "srsly", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/51/d3/57c6631159a1b48d273b40865c315cf51f89df7a9d1101094ef12e3a37c2/confection-0.1.5.tar.gz", hash = "sha256:8e72dd3ca6bd4f48913cd220f10b8275978e740411654b6e8ca6d7008c590f0e", size = 38924, upload-time = "2024-05-31T16:17:01.559Z" } wheels = [ @@ -434,20 +400,187 @@ wheels = [ ] [[package]] -name = "cupy-cuda12x" -version = "13.6.0" +name = "contourpy" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, +] +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/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/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/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/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" }, +] + +[[package]] +name = "cryptography" +version = "49.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/8b/43011f7ebe515a8aa20d61f290a326cd890c2e738e16e59eaff8d9c3a412/cryptography-49.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e959b578856a3924bc0cbb710fc12c387b9412a951389f3ca61704a9e25f325", size = 4716422, upload-time = "2026-06-12T20:01:48.566Z" }, + { url = "https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6", size = 4749683, upload-time = "2026-06-12T20:02:03.335Z" }, + { url = "https://files.pythonhosted.org/packages/a9/3c/f3ad17eecc1a57b0ba236dc01f90e783c51f4a2f35f64777cc4f47a184b2/cryptography-49.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:cbc77da8c523d5abd028635ba850a6966fcee2c82e2bf65a41d1d8afe0f98be9", size = 4749290, upload-time = "2026-06-12T20:01:30.848Z" }, + { url = "https://files.pythonhosted.org/packages/71/fd/577302e213a1be9468f92d1afef66fcf1ef83d516819d9992ca547f592bd/cryptography-49.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66ec79c3904820572d7e987abdf304281f141d37ad9a489b8e97066e7b9b6459", size = 4980804, upload-time = "2026-06-12T20:01:42.853Z" }, + { url = "https://files.pythonhosted.org/packages/2c/99/2d13299eb3dd27b02dcfaafcc91d6b5cb3329f7cbd6d8f51921acd566c1a/cryptography-49.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:35b151772baff2c74cba7fa290ceaff4c3b11c0c881eb93eb5dbc05a7cfbba18", size = 4700968, upload-time = "2026-06-12T20:02:45.383Z" }, + { url = "https://files.pythonhosted.org/packages/b8/7b/62cbbab75d0659865bf0273790031544a0b16c8072d258f9428dcd8190dc/cryptography-49.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6f2debedf9ca60cf1d5bd466475638af5130f89965605cd818484d19987d3a21", size = 4735983, upload-time = "2026-06-12T20:01:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/a0/84/84fe36f19caf857d61cb7fc9c63035a47ffabd84ea12d1d393148efa3615/cryptography-49.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2400ef9c9e2299a25614eb1dea3db54a69b1349efd043bfac9c67630d136df36", size = 4735650, upload-time = "2026-06-12T20:02:41.389Z" }, + { url = "https://files.pythonhosted.org/packages/93/77/8df9eb486495979bccecd1062e2eaf435250e84437040295b57d09048b0b/cryptography-49.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:42b0684e0e40cf26122427802486f6d93aea593612603a94fbf260c7eb1e9c1b", size = 4967968, upload-time = "2026-06-12T20:02:12.524Z" }, + { url = "https://files.pythonhosted.org/packages/d7/70/2ba3769dd0ae167e2f33dfa9592d45db6ff9a61d62ca1a5b3d1bdd09068f/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b39efa323140595abd3ecca8529d321ae50f55f3aa3ba9cc81ea56a6011953d5", size = 4715584, upload-time = "2026-06-12T20:01:27.495Z" }, + { url = "https://files.pythonhosted.org/packages/ab/f8/614dc7e051418cfe53d55173c1e24c6b0085e89996fe90508c2fdf769aef/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:084ef1af862eb07ec46d25f68689f2102a9fc0e05ce7b80f14f5fe51e4eef0f6", size = 4715449, upload-time = "2026-06-12T20:02:05.469Z" }, +] + +[[package]] +name = "cuda-bindings" +version = "13.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-pathfinder", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/7a/c5e3c34a409b148f5c0f5a4ea374158f95d488862c1dffedf9aa5c639df9/cuda_bindings-13.3.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04436a9364059c84b8f9636f359eccda1cf814341f5b670c71d80d2f79dbc708", size = 6674166, upload-time = "2026-05-29T23:11:45.478Z" }, +] + +[[package]] +name = "cuda-core" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-pathfinder", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/55/bb3e701f4af504e5e39e837135dc80022ec4c84858b2886ad577fe696a77/cuda_core-1.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1934517ff8a9dcd21b3f4a28e15e12643164b7d3ec187a4ee7560e22fd2dfc17", size = 5059041, upload-time = "2026-05-12T20:11:26.045Z" }, +] + +[[package]] +name = "cuda-pathfinder" +version = "1.5.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/c8/26f2e4aae92f11522a96043892ba39a90eac610d5242523aa863212bc1c7/cuda_pathfinder-1.5.5-py3-none-any.whl", hash = "sha256:0228c023f95d1480f143ef5c8922d27a2ab052087a942e81dc289c9eb8f91689", size = 51671, upload-time = "2026-05-27T01:21:25.413Z" }, +] + +[[package]] +name = "cuda-python" +version = "13.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "fastrlock", marker = "sys_platform != 'darwin'" }, - { name = "numpy", marker = "sys_platform != 'darwin'" }, + { name = "cuda-bindings", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cuda-core", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cuda-pathfinder", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/2e/db22c5148884e4e384f6ebbc7971fa3710f3ba67ca492798890a0fdebc45/cupy_cuda12x-13.6.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:9e37f60f27ff9625dfdccc4688a09852707ec613e32ea9404f425dd22a386d14", size = 126341714, upload-time = "2025-08-18T08:24:08.335Z" }, - { url = "https://files.pythonhosted.org/packages/53/2b/8064d94a6ab6b5c4e643d8535ab6af6cabe5455765540931f0ef60a0bc3b/cupy_cuda12x-13.6.0-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:e78409ea72f5ac7d6b6f3d33d99426a94005254fa57e10617f430f9fd7c3a0a1", size = 112238589, upload-time = "2025-08-18T08:24:15.541Z" }, - { url = "https://files.pythonhosted.org/packages/de/7b/bac3ca73e164d2b51c6298620261637c7286e06d373f597b036fc45f5563/cupy_cuda12x-13.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f33c9c975782ef7a42c79b6b4fb3d5b043498f9b947126d792592372b432d393", size = 89874119, upload-time = "2025-08-18T08:24:20.628Z" }, - { url = "https://files.pythonhosted.org/packages/54/64/71c6e08f76c06639e5112f69ee3bc1129be00054ad5f906d7fd3138af579/cupy_cuda12x-13.6.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:c790d012fd4d86872b9c89af9f5f15d91c30b8e3a4aa4dd04c2610f45f06ac44", size = 128016458, upload-time = "2025-08-18T08:24:26.394Z" }, - { url = "https://files.pythonhosted.org/packages/fc/d9/5c5077243cd92368c3eccecdbf91d76db15db338169042ffd1647533c6b1/cupy_cuda12x-13.6.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:77ba6745a130d880c962e687e4e146ebbb9014f290b0a80dbc4e4634eb5c3b48", size = 113039337, upload-time = "2025-08-18T08:24:31.814Z" }, - { url = "https://files.pythonhosted.org/packages/88/f5/02bea5cdf108e2a66f98e7d107b4c9a6709e5dbfedf663340e5c11719d83/cupy_cuda12x-13.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:a20b7acdc583643a623c8d8e3efbe0db616fbcf5916e9c99eedf73859b6133af", size = 89885526, upload-time = "2025-08-18T08:24:37.258Z" }, + { url = "https://files.pythonhosted.org/packages/38/31/7ff3f7768eded7535c621abc2fecb9d181a34ea4cae3afe682feb796f242/cuda_python-13.3.1-py3-none-any.whl", hash = "sha256:280b014139ab447b6dd70a377db1596f310d6e887d9d342e6651b919ec145fb3", size = 8295, upload-time = "2026-05-29T23:28:47.012Z" }, +] + +[[package]] +name = "cuda-tile" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/2d/8b416239413bf11d17d42ccee43258f3787da13bcea7b2e42e8bbf04b3da/cuda_tile-1.3.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:2888d6b89fae053a53ca7bb703c508a5cf90671d266934573c5b6c25978022c4", size = 246706, upload-time = "2026-04-20T15:51:03.467Z" }, +] + +[package.optional-dependencies] +tileiras = [ + { name = "nvidia-cuda-nvcc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-tileiras", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvvm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] + +[[package]] +name = "cuda-toolkit" +version = "13.0.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/b2/453099f5f3b698d7d0eab38916aac44c7f76229f451709e2eb9db6615dcd/cuda_toolkit-13.0.2-py2.py3-none-any.whl", hash = "sha256:b198824cf2f54003f50d64ada3a0f184b42ca0846c1c94192fa269ecd97a66eb", size = 2364, upload-time = "2025-12-19T23:24:07.328Z" }, +] + +[package.optional-dependencies] +cublas = [ + { name = "nvidia-cublas", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +cudart = [ + { name = "nvidia-cuda-runtime", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +cufft = [ + { name = "nvidia-cufft", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +cufile = [ + { name = "nvidia-cufile", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +cupti = [ + { name = "nvidia-cuda-cupti", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +curand = [ + { name = "nvidia-curand", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +cusolver = [ + { name = "nvidia-cusolver", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +cusparse = [ + { name = "nvidia-cusparse", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +nvjitlink = [ + { name = "nvidia-nvjitlink", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +nvrtc = [ + { name = "nvidia-cuda-nvrtc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +nvtx = [ + { name = "nvidia-nvtx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] + +[[package]] +name = "curies" +version = "0.13.13" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pystow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/80/66/20c0babb17c401dd9ddb57413eb9a11192528f11f856378587ba97d2e7b5/curies-0.13.13.tar.gz", hash = "sha256:aac8b3175680315566395ac754f6fa0878112d0fa6e8997cb65d9af91c66b778", size = 72376, upload-time = "2026-06-12T10:27:52.517Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/97/db70517204cd8aec8cb0773036333407405f6552bf928234d68531b0acd2/curies-0.13.13-py3-none-any.whl", hash = "sha256:43051140cd1f089a832f139633b14d473c09fa48a2f36e1b9b94c1270812267e", size = 82043, upload-time = "2026-06-12T10:27:51.334Z" }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, +] + +[[package]] +name = "cyclonedx-python-lib" +version = "11.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "license-expression", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packageurl-python", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "py-serializable", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sortedcontainers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/75/c9/5d0ccdd19bc7d8ab803b90695c1706aa2ea8529685d18e682dc2524d2630/cyclonedx_python_lib-11.11.0.tar.gz", hash = "sha256:4b3194db72b613717f2912447e67ab618c75ff7dcac6c4af3c0e9e1ac617c102", size = 1442983, upload-time = "2026-06-17T11:57:49.055Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/f3/56ccb2884aaa3db5622368e5191a3384b15f35392aa93df8b2f508c660d2/cyclonedx_python_lib-11.11.0-py3-none-any.whl", hash = "sha256:3049fc83e06a059b5c5907a527625a8ed5073caab10607ed4c9e5503b590fd44", size = 528689, upload-time = "2026-06-17T11:57:47.358Z" }, ] [[package]] @@ -456,22 +589,10 @@ version = "2.0.13" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/2f0fbb32535c3731b7c2974c569fb9325e0a38ed5565a08e1139a3b71e82/cymem-2.0.13.tar.gz", hash = "sha256:1c91a92ae8c7104275ac26bd4d29b08ccd3e7faff5893d3858cb6fadf1bc1588", size = 12320, upload-time = "2025-11-14T14:58:36.902Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/14/462018dd384ee1848ac9c1951534a813a325abbfc161a74e2cbcb38d2469/cymem-2.0.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8efc4f308169237aade0e82877a65a563833dec32eb7ab2326120253e0e9e918", size = 43747, upload-time = "2025-11-14T14:57:11.287Z" }, - { url = "https://files.pythonhosted.org/packages/4b/9b/c123ba65dddcd8a2bc0b3c9046766c15abe0e257c315b3040eed22cce1e2/cymem-2.0.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e03bb575a96c59bc210d7d59862747f0012696b0dac3427ce8af33c7afb3d4a2", size = 43328, upload-time = "2025-11-14T14:57:12.578Z" }, - { url = "https://files.pythonhosted.org/packages/bd/be/7b7a4cf9cd2d37e674612a86fc90b3d59bff12177f83430e62b25afaf7fc/cymem-2.0.13-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1775d3fd34cf099929b79c3e48469283642463f977af6801231f3c0e5d9c9369", size = 231539, upload-time = "2025-11-14T14:57:14.441Z" }, - { url = "https://files.pythonhosted.org/packages/79/6d/d165c38cd4caaaf60942e2cec9998b667008f2384047ccfe0b4b5f7a1ffe/cymem-2.0.13-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:84e2976e38cd663f758e40b5497fa5cd183d7c5fb0d04ce81a4b42a1ba124ff0", size = 229674, upload-time = "2025-11-14T14:57:15.685Z" }, - { url = "https://files.pythonhosted.org/packages/95/c1/af83c03a93f890ca81149561b18a4a67a9aa36a1109f15e291dd2703ab12/cymem-2.0.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed9de1b9b042f76fe5c312e4359eab58bf52ac7dfdf6887368a760410d809440", size = 229805, upload-time = "2025-11-14T14:57:17.289Z" }, - { url = "https://files.pythonhosted.org/packages/03/2d/12900758b80345d9aed5892a9d61e8a5f6abbbe5837e4def373a53cd0da2/cymem-2.0.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1366c7437a209230f4b797fae10227a8206d4021d37c9f9c0d31fd97ea4feb35", size = 234018, upload-time = "2025-11-14T14:57:18.512Z" }, - { url = "https://files.pythonhosted.org/packages/a6/8b/5fcf5430fc81098aef58cc20340e51f37b49b9d8c15766e0d5d63e7288a3/cymem-2.0.13-cp310-cp310-win_amd64.whl", hash = "sha256:7700b116524b087e0169f10f267539223b48240ef2734c3a727a9e6b4db9a671", size = 40102, upload-time = "2025-11-14T14:57:19.972Z" }, - { url = "https://files.pythonhosted.org/packages/0d/d3/cb6c83758fe399443b858faafb7096b72535621a7af7dd9a54ff0989fa14/cymem-2.0.13-cp310-cp310-win_arm64.whl", hash = "sha256:c8dbfddfe5c604974e17c6f373cedd4d25cd67f84812ede7dea12128fa0c2015", size = 36282, upload-time = "2025-11-14T14:57:21.398Z" }, { url = "https://files.pythonhosted.org/packages/10/64/1db41f7576a6b69f70367e3c15e968fd775ba7419e12059c9966ceb826f8/cymem-2.0.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:673183466b0ff2e060d97ec5116711d44200b8f7be524323e080d215ee2d44a5", size = 43587, upload-time = "2025-11-14T14:57:22.39Z" }, { url = "https://files.pythonhosted.org/packages/81/13/57f936fc08551323aab3f92ff6b7f4d4b89d5b4e495c870a67cb8d279757/cymem-2.0.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bee2791b3f6fc034ce41268851462bf662ff87e8947e35fb6dd0115b4644a61f", size = 43139, upload-time = "2025-11-14T14:57:23.363Z" }, - { url = "https://files.pythonhosted.org/packages/32/a6/9345754be51e0479aa387b7b6cffc289d0fd3201aaeb8dade4623abd1e02/cymem-2.0.13-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f3aee3adf16272bca81c5826eed55ba3c938add6d8c9e273f01c6b829ecfde22", size = 245063, upload-time = "2025-11-14T14:57:24.839Z" }, { url = "https://files.pythonhosted.org/packages/d6/01/6bc654101526fa86e82bf6b05d99b2cd47c30a333cfe8622c26c0592beb2/cymem-2.0.13-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:30c4e75a3a1d809e89106b0b21803eb78e839881aa1f5b9bd27b454bc73afde3", size = 244496, upload-time = "2025-11-14T14:57:26.42Z" }, - { url = "https://files.pythonhosted.org/packages/c4/fb/853b7b021e701a1f41687f3704d5f469aeb2a4f898c3fbb8076806885955/cymem-2.0.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec99efa03cf8ec11c8906aa4d4cc0c47df393bc9095c9dd64b89b9b43e220b04", size = 243287, upload-time = "2025-11-14T14:57:27.542Z" }, { url = "https://files.pythonhosted.org/packages/d4/2b/0e4664cafc581de2896d75000651fd2ce7094d33263f466185c28ffc96e4/cymem-2.0.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c90a6ecba994a15b17a3f45d7ec74d34081df2f73bd1b090e2adc0317e4e01b6", size = 248287, upload-time = "2025-11-14T14:57:29.055Z" }, - { url = "https://files.pythonhosted.org/packages/21/0f/f94c6950edbfc2aafb81194fc40b6cacc8e994e9359d3cb4328c5705b9b5/cymem-2.0.13-cp311-cp311-win_amd64.whl", hash = "sha256:ce821e6ba59148ed17c4567113b8683a6a0be9c9ac86f14e969919121efb61a5", size = 40116, upload-time = "2025-11-14T14:57:30.592Z" }, - { url = "https://files.pythonhosted.org/packages/00/df/2455eff6ac0381ff165db6883b311f7016e222e3dd62185517f8e8187ed0/cymem-2.0.13-cp311-cp311-win_arm64.whl", hash = "sha256:0dca715e708e545fd1d97693542378a00394b20a37779c1ae2c8bdbb43acef79", size = 36349, upload-time = "2025-11-14T14:57:31.573Z" }, ] [[package]] @@ -480,75 +601,59 @@ version = "3.0.11" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/84/4d/b720d6000f4ca77f030bd70f12550820f0766b568e43f11af7f7ad9061aa/cython-3.0.11.tar.gz", hash = "sha256:7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff", size = 2755544, upload-time = "2024-08-05T15:03:02.254Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/7f/ab5796a0951328d7818b771c36fe7e1a2077cffa28c917d9fa4a642728c3/Cython-3.0.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:44292aae17524abb4b70a25111fe7dec1a0ad718711d47e3786a211d5408fdaa", size = 3100879, upload-time = "2024-08-05T15:03:18.806Z" }, - { url = "https://files.pythonhosted.org/packages/d8/3b/67480e609537e9fc899864847910ded481b82d033fea1b7fcf85893a2fc4/Cython-3.0.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75d45fbc20651c1b72e4111149fed3b33d270b0a4fb78328c54d965f28d55e1", size = 3461957, upload-time = "2024-08-05T15:03:22.856Z" }, - { url = "https://files.pythonhosted.org/packages/f0/89/b1ae45689abecca777f95462781a76e67ff46b55495a481ec5a73a739994/Cython-3.0.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d89a82937ce4037f092e9848a7bbcc65bc8e9fc9aef2bb74f5c15e7d21a73080", size = 3627062, upload-time = "2024-08-05T15:03:26.222Z" }, - { url = "https://files.pythonhosted.org/packages/44/77/a651da74d5d41c6045bbe0b6990b1515bf4850cd7a8d8580333c90dfce2e/Cython-3.0.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8ea2e7e2d3bc0d8630dafe6c4a5a89485598ff8a61885b74f8ed882597efd5", size = 3680431, upload-time = "2024-08-05T15:03:29.408Z" }, - { url = "https://files.pythonhosted.org/packages/59/45/60e7e8db93c3eb8b2af8c64020c1fa502e355f4b762886a24d46e433f395/Cython-3.0.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cee29846471ce60226b18e931d8c1c66a158db94853e3e79bc2da9bd22345008", size = 3497314, upload-time = "2024-08-05T15:03:38.891Z" }, - { url = "https://files.pythonhosted.org/packages/f8/0b/6919025958926625319f83523ee7f45e7e7ae516b8054dcff6eb710daf32/Cython-3.0.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eeb6860b0f4bfa402de8929833fe5370fa34069c7ebacb2d543cb017f21fb891", size = 3709091, upload-time = "2024-08-05T15:03:42.761Z" }, - { url = "https://files.pythonhosted.org/packages/52/3c/c21b9b9271dfaa46fa2938de730f62fc94b9c2ec25ec400585e372f35dcd/Cython-3.0.11-cp310-cp310-win32.whl", hash = "sha256:3699391125ab344d8d25438074d1097d9ba0fb674d0320599316cfe7cf5f002a", size = 2576110, upload-time = "2024-08-05T15:03:45.584Z" }, - { url = "https://files.pythonhosted.org/packages/f9/de/19fdd1c7a52e0534bf5f544e0346c15d71d20338dbd013117f763b94613f/Cython-3.0.11-cp310-cp310-win_amd64.whl", hash = "sha256:d02f4ebe15aac7cdacce1a628e556c1983f26d140fd2e0ac5e0a090e605a2d38", size = 2776386, upload-time = "2024-08-05T15:03:48.982Z" }, { url = "https://files.pythonhosted.org/packages/f8/73/e55be864199cd674cb3426a052726c205589b1ac66fb0090e7fe793b60b3/Cython-3.0.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75ba1c70b6deeaffbac123856b8d35f253da13552207aa969078611c197377e4", size = 3113599, upload-time = "2024-08-05T15:03:52.416Z" }, - { url = "https://files.pythonhosted.org/packages/09/c9/537108d0980beffff55336baaf8b34162ad0f3f33ededcb5db07069bc8ef/Cython-3.0.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af91497dc098718e634d6ec8f91b182aea6bb3690f333fc9a7777bc70abe8810", size = 3441131, upload-time = "2024-08-05T15:03:56.138Z" }, { url = "https://files.pythonhosted.org/packages/93/03/e330b241ad8aa12bb9d98b58fb76d4eb7dcbe747479aab5c29fce937b9e7/Cython-3.0.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3999fb52d3328a6a5e8c63122b0a8bd110dfcdb98dda585a3def1426b991cba7", size = 3595065, upload-time = "2024-08-05T15:03:59.174Z" }, - { url = "https://files.pythonhosted.org/packages/4a/84/a3c40f2c0439d425daa5aa4e3a6fdbbb41341a14a6fd97f94906f528d9a4/Cython-3.0.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d566a4e09b8979be8ab9f843bac0dd216c81f5e5f45661a9b25cd162ed80508c", size = 3641667, upload-time = "2024-08-05T15:04:02.719Z" }, - { url = "https://files.pythonhosted.org/packages/6d/93/bdb61e0254ed8f1d21a14088a473584ecb1963d68dba5682158aa45c70ef/Cython-3.0.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:46aec30f217bdf096175a1a639203d44ac73a36fe7fa3dd06bd012e8f39eca0f", size = 3503650, upload-time = "2024-08-05T15:04:07.434Z" }, { url = "https://files.pythonhosted.org/packages/f8/62/0da548144c71176155ff5355c4cc40fb28b9effe22e830b55cec8072bdf2/Cython-3.0.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ddd1fe25af330f4e003421636746a546474e4ccd8f239f55d2898d80983d20ed", size = 3709662, upload-time = "2024-08-05T15:04:10.99Z" }, - { url = "https://files.pythonhosted.org/packages/56/d3/d9c9eaf3611a9fe5256266d07b6a5f9069aa84d20d9f6aa5824289513315/Cython-3.0.11-cp311-cp311-win32.whl", hash = "sha256:221de0b48bf387f209003508e602ce839a80463522fc6f583ad3c8d5c890d2c1", size = 2577870, upload-time = "2024-08-05T15:04:14.693Z" }, - { url = "https://files.pythonhosted.org/packages/fd/10/236fcc0306f85a2db1b8bc147aea714b66a2f27bac4d9e09e5b2c5d5dcca/Cython-3.0.11-cp311-cp311-win_amd64.whl", hash = "sha256:3ff8ac1f0ecd4f505db4ab051e58e4531f5d098b6ac03b91c3b902e8d10c67b3", size = 2785053, upload-time = "2024-08-05T15:04:18.058Z" }, { url = "https://files.pythonhosted.org/packages/43/39/bdbec9142bc46605b54d674bf158a78b191c2b75be527c6dcf3e6dfe90b8/Cython-3.0.11-py2.py3-none-any.whl", hash = "sha256:0e25f6425ad4a700d7f77cd468da9161e63658837d1bc34861a9861a4ef6346d", size = 1171267, upload-time = "2024-08-05T15:02:57.729Z" }, ] [[package]] -name = "dataclasses-json" -version = "0.6.7" +name = "datasets" +version = "2.19.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "marshmallow" }, - { name = "typing-inspect" }, + { name = "aiohttp", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "dill", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "fsspec", extra = ["http"], marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "multiprocess", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pandas", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyarrow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyarrow-hotfix", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "xxhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/64/a4/f71d9cf3a5ac257c993b5ca3f93df5f7fb395c725e7f1e6479d2514173c3/dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0", size = 32227, upload-time = "2024-06-09T16:20:19.103Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/ad/b177295f7bcf2c9d5e3fde29041c00378d50561e43de6fb7e4526e6861f3/datasets-2.19.0.tar.gz", hash = "sha256:0b47e08cc7af2c6800a42cadc4657b22a0afc7197786c8986d703c08d90886a6", size = 2215040, upload-time = "2024-04-19T08:44:29.992Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a", size = 28686, upload-time = "2024-06-09T16:20:16.715Z" }, + { url = "https://files.pythonhosted.org/packages/89/a9/8e097f79d2941a2f96e33f57032957429a79f66c8252ac7fcce586a43406/datasets-2.19.0-py3-none-any.whl", hash = "sha256:f57c5316e123d4721b970c68c1cb856505f289cda58f5557ffe745b49c011a8e", size = 542018, upload-time = "2024-04-19T08:43:05.722Z" }, ] [[package]] -name = "datasets" -version = "2.19.0" +name = "defusedxml" +version = "0.7.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohttp" }, - { name = "dill" }, - { name = "filelock" }, - { name = "fsspec", extra = ["http"] }, - { name = "huggingface-hub" }, - { name = "multiprocess" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pandas" }, - { name = "pyarrow" }, - { name = "pyarrow-hotfix" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "tqdm" }, - { name = "xxhash" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d3/ad/b177295f7bcf2c9d5e3fde29041c00378d50561e43de6fb7e4526e6861f3/datasets-2.19.0.tar.gz", hash = "sha256:0b47e08cc7af2c6800a42cadc4657b22a0afc7197786c8986d703c08d90886a6", size = 2215040, upload-time = "2024-04-19T08:44:29.992Z" } +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/89/a9/8e097f79d2941a2f96e33f57032957429a79f66c8252ac7fcce586a43406/datasets-2.19.0-py3-none-any.whl", hash = "sha256:f57c5316e123d4721b970c68c1cb856505f289cda58f5557ffe745b49c011a8e", size = 542018, upload-time = "2024-04-19T08:43:05.722Z" }, + { 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 = "depyf" -version = "0.19.0" +version = "0.20.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "astor" }, - { name = "dill" }, + { name = "astor", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "dill", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/38/69157d711be575f1b9cf3177b64ef4ade44373fc02839f183fdd98ec2dd6/depyf-0.19.0.tar.gz", hash = "sha256:afed0916b32d141cc90fa6220df01885eda442ca43b297d5050eeb90b4a5cb44", size = 6171405, upload-time = "2025-04-20T08:07:41.224Z" } +sdist = { url = "https://files.pythonhosted.org/packages/88/35/83fb0178212279aa0af031031905804c6de5618435d229f41ed21bb9ad2c/depyf-0.20.0.tar.gz", hash = "sha256:fb7683bd72c44f67b56029df2c47721e9a02ffa4d7b19095f1c54c4ebf797a98", size = 6168761, upload-time = "2025-10-13T12:33:38.589Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/28/4d/1192acbcdc5e843f5e5d51f6e8788f2b60a9fe0b578ac385ded67a0b0b26/depyf-0.19.0-py3-none-any.whl", hash = "sha256:040b35fc0997d49df024b7d094f2a7836f91e9ed02f49982dd37e70aa3285ad5", size = 39034, upload-time = "2025-04-20T08:07:37.036Z" }, + { url = "https://files.pythonhosted.org/packages/cf/65/4df6936130b56e1429114e663e7c1576cf845f3aef1b2dd200c0a5d19dba/depyf-0.20.0-py3-none-any.whl", hash = "sha256:d31effad4261cebecb58955d832e448ace88f432328f95f82fd99c30fd9308d4", size = 39381, upload-time = "2025-10-13T12:33:33.647Z" }, ] [[package]] @@ -596,6 +701,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, ] +[[package]] +name = "docstring-parser" +version = "0.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/4d/f332313098c1de1b2d2ff91cf2674415cc7cddab2ca1b01ae29774bd5fdf/docstring_parser-0.18.0.tar.gz", hash = "sha256:292510982205c12b1248696f44959db3cdd1740237a968ea1e2e7a900eeb2015", size = 29341, upload-time = "2026-04-14T04:09:19.867Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-py3-none-any.whl", hash = "sha256:b3fcbed555c47d8479be0796ef7e19c2670d428d72e96da63f3a40122860374b", size = 22484, upload-time = "2026-04-14T04:09:18.638Z" }, +] + [[package]] name = "einops" version = "0.8.0" @@ -610,8 +724,8 @@ name = "elastic-transport" version = "8.17.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi" }, - { name = "urllib3" }, + { name = "certifi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "urllib3", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6a/54/d498a766ac8fa475f931da85a154666cc81a70f8eb4a780bc8e4e934e9ac/elastic_transport-8.17.1.tar.gz", hash = "sha256:5edef32ac864dca8e2f0a613ef63491ee8d6b8cfb52881fa7313ba9290cac6d2", size = 73425, upload-time = "2025-03-13T07:28:30.776Z" } wheels = [ @@ -623,7 +737,7 @@ name = "elasticsearch" version = "8.17.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "elastic-transport" }, + { name = "elastic-transport", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5b/3d/f563e58f45d23565c0d0316a565638ce312f536b882a3281b8047fb4a58f/elasticsearch-8.17.2.tar.gz", hash = "sha256:ff7f1db8aeefd87ceba4edce3aa4070994582e6cf029d2e67b74e66d634509db", size = 602691, upload-time = "2025-03-04T12:14:27.382Z" } wheels = [ @@ -635,74 +749,56 @@ name = "email-validator" version = "2.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "dnspython" }, - { name = "idna" }, + { name = "dnspython", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, ] -[[package]] -name = "exceptiongroup" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, -] - [[package]] name = "faiss-cpu" version = "1.9.0.post1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, - { name = "packaging" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/62/85/ee4bafafa70bc99904a61f06e7f5e36d06ab6b37335e687085786f9a248d/faiss_cpu-1.9.0.post1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:e18602465f5a96c3c973ab440f9263a0881034fb54810be20bc8cdb8b069456d", size = 7672124, upload-time = "2024-11-20T02:20:02.33Z" }, - { url = "https://files.pythonhosted.org/packages/c3/99/50496057d52241a77f0d2a021a73b97f25f6500c6f02a584a7b3d43c3e3f/faiss_cpu-1.9.0.post1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5dddeecdb68fb95b4a3343a6ff89498fd7c222726706538f360132bfe3d8aebe", size = 3225595, upload-time = "2024-11-20T02:20:04.341Z" }, - { url = "https://files.pythonhosted.org/packages/67/40/df08ba3d25f4c0b1625d811cfc82fe33e64f8b918b45aedd5ca17eea23e7/faiss_cpu-1.9.0.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15d2d7e522e6d55dbf14e57fcac1d38d62c95479b847562004f9e7c97c139ee8", size = 3641904, upload-time = "2024-11-20T02:20:06.603Z" }, - { url = "https://files.pythonhosted.org/packages/32/1c/f5a7eba839063100df3187fc5c24467f7ab2bee3c21c91e67bab3cf123c5/faiss_cpu-1.9.0.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86ffbbb1ec9ae503df1fcdfd5c3a8594d8b76fb4b8ebf0a697c1492f1f9cec1a", size = 27475012, upload-time = "2024-11-20T02:20:08.657Z" }, - { url = "https://files.pythonhosted.org/packages/b5/02/0b9d131198b916a94d277689d60da0d20a414578ac83c0ddca336b6cf7c6/faiss_cpu-1.9.0.post1-cp310-cp310-win_amd64.whl", hash = "sha256:29cae0dfa6c286c043d45572a39288f5a56ffb694a20a90c6946018241002d90", size = 13843859, upload-time = "2024-11-20T02:20:11.299Z" }, { url = "https://files.pythonhosted.org/packages/b8/4f/cf04c3e3d9af3a3a6c9537b3e878246516f85333e578118fc460acb205a3/faiss_cpu-1.9.0.post1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:7ef0c81a798a64fc932e15d560ddc01021df9ed70b678367aec6e01f39d075c1", size = 7672129, upload-time = "2024-11-20T02:20:14.872Z" }, { url = "https://files.pythonhosted.org/packages/a6/9d/eaba10de74cd7fad91174a49481327eaf61fe80a2ad1e4ad16594256bf9d/faiss_cpu-1.9.0.post1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:783f545c3999909164a975b97d99749b244b62651ce976ee76b8a171c62e827d", size = 3225597, upload-time = "2024-11-20T02:20:16.54Z" }, - { url = "https://files.pythonhosted.org/packages/d1/9c/b74d115031b9ab664c47e58ac7853667d90f73c1987dea739669a49d95b9/faiss_cpu-1.9.0.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c0408261ed85d0bd8e30716a3fd441d0c51a5563cf3a795a488eab9c492ea33", size = 3641862, upload-time = "2024-11-20T02:20:18.121Z" }, { url = "https://files.pythonhosted.org/packages/e4/9c/aed8b7c6c490c777c404131b3f6a68e4924fbc149620dc6d6a3563435371/faiss_cpu-1.9.0.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7068e14e8f557659c68bdf4d511571630721e1502efa87a70fe44023f3741645", size = 27474906, upload-time = "2024-11-20T02:20:21.174Z" }, - { url = "https://files.pythonhosted.org/packages/23/f6/b4d024a4afc006ff85a5fd19785e0da55e470a040692a83ea6a1fb51ac16/faiss_cpu-1.9.0.post1-cp311-cp311-win_amd64.whl", hash = "sha256:274a66868a498687641faf964f6eddbe70ccb5bee56239862ee0aa079415779e", size = 13843611, upload-time = "2024-11-20T02:20:24.593Z" }, ] [[package]] name = "fastapi" -version = "0.137.2" +version = "0.136.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-doc" }, - { name = "pydantic" }, - { name = "starlette" }, - { name = "typing-extensions" }, - { name = "typing-inspection" }, + { name = "annotated-doc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "starlette", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-inspection", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e2/29/cc5819dc24d3daa80cdaa1aec023bf8652a70dd7fd1c96b0b225c99a7690/fastapi-0.137.2.tar.gz", hash = "sha256:b9d893bebc97dcfbdcb1917e88a292d062844ea19445a5fa4f7eb28c4baea9e3", size = 410332, upload-time = "2026-06-18T06:58:24.434Z" } +sdist = { url = "https://files.pythonhosted.org/packages/81/2d/ff8d91d7b564d464629a0fd50a4489c97fcb836ac230bf3a7269232a9b1f/fastapi-0.136.3.tar.gz", hash = "sha256:e487fae93ad408e6f47641ee4dfe389864fd7bec92e547ea8498fc13f43e83ab", size = 396410, upload-time = "2026-05-23T18:53:15.192Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/ed/0c6b644e99fb5697d8bdcd36cdb47c52e77a63fc7a1514b1f03a6ecab955/fastapi-0.137.2-py3-none-any.whl", hash = "sha256:791d36261e916a98b25ac85ee591bc3db159394070f6d3d096d94fb378f60ce2", size = 122252, upload-time = "2026-06-18T06:58:26.074Z" }, + { url = "https://files.pythonhosted.org/packages/e0/82/45359b62a067409bd929ae8a56b8ed13e5a8c8a61194b3c236920999ab83/fastapi-0.136.3-py3-none-any.whl", hash = "sha256:3d2a69bdf04b7e9f3afa292c3bc7a98816bbfafa10bc9b45f3f3700d2f761620", size = 117481, upload-time = "2026-05-23T18:53:16.924Z" }, ] [package.optional-dependencies] standard = [ - { name = "email-validator" }, - { name = "fastapi-cli", extra = ["standard"] }, - { name = "fastar" }, - { name = "httpx" }, - { name = "jinja2" }, - { name = "pydantic-extra-types" }, - { name = "pydantic-settings" }, - { name = "python-multipart" }, - { name = "uvicorn", extra = ["standard"] }, + { name = "email-validator", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "fastapi-cli", extra = ["standard"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "fastar", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jinja2", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic-extra-types", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic-settings", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "python-multipart", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "uvicorn", extra = ["standard"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] @@ -710,10 +806,9 @@ name = "fastapi-cli" version = "0.0.27" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "rich-toolkit" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, - { name = "typer" }, - { name = "uvicorn", extra = ["standard"] }, + { name = "rich-toolkit", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typer", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "uvicorn", extra = ["standard"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/37/d0/ee5678346811967b8d096d5d5604e71b50d6bf5a2abfbdb331157e2bbaa9/fastapi_cli-0.0.27.tar.gz", hash = "sha256:1dffb1e40c0c88f2e0171a8a252a2b615c1e63ff8c05626649e4badd6a84336a", size = 23630, upload-time = "2026-06-18T14:48:43.421Z" } wheels = [ @@ -722,8 +817,8 @@ wheels = [ [package.optional-dependencies] standard = [ - { name = "fastapi-cloud-cli" }, - { name = "uvicorn", extra = ["standard"] }, + { name = "fastapi-cloud-cli", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "uvicorn", extra = ["standard"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] @@ -731,15 +826,15 @@ name = "fastapi-cloud-cli" version = "0.20.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "detect-installer" }, - { name = "fastar" }, - { name = "httpx" }, - { name = "pydantic", extra = ["email"] }, - { name = "rich-toolkit" }, - { name = "rignore" }, - { name = "sentry-sdk" }, - { name = "typer" }, - { name = "uvicorn", extra = ["standard"] }, + { name = "detect-installer", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "fastar", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", extra = ["email"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "rich-toolkit", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "rignore", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "sentry-sdk", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typer", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "uvicorn", extra = ["standard"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ad/bf/97d19633c6ec6fb0ef59df474b9705ea992f7b4f879208d0007ac6d25ab6/fastapi_cloud_cli-0.20.0.tar.gz", hash = "sha256:9681c46adcd299024d0775658bd5d88992fd35c4ad42b1f045c6df913390ba37", size = 85904, upload-time = "2026-06-11T17:41:02.814Z" } wheels = [ @@ -752,72 +847,22 @@ version = "0.11.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/03/0f/0aeb3fc50046617702acc0078b277b58367fd62eb727b9ec733ae0e8bbcc/fastar-0.11.0.tar.gz", hash = "sha256:aa7f100f7313c03fdb20f1385927ba95671071ba308ad0c1763fef295e1895ce", size = 70238, upload-time = "2026-04-13T17:11:17.143Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/4a/0d79fe52243a4130aa41d0a3a9eea22e00427db761e1a6782ee817c50222/fastar-0.11.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:e7c906ad371ca365591ebcb7630009923f3eceb20956814494d15591a78e9e46", size = 709786, upload-time = "2026-04-13T17:09:53.974Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e4/77c94eaafc035e39f5ce5176e32743da4e3fe890f28790e708e53d8f75cd/fastar-0.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6919497b35fa5bd978d2c26ee117cf1771b90ee5073f7518e44b9bc364b57715", size = 632127, upload-time = "2026-04-13T17:09:39.023Z" }, - { url = "https://files.pythonhosted.org/packages/3c/f6/97658dd992f4e45747d35adb24c0b100f6b6d451490685ae3fe8a3a2ee1b/fastar-0.11.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:56b50206aeedd99e22b83289e6fb3ff8f7d7da4407d2419902e4716b4f90585a", size = 869608, upload-time = "2026-04-13T17:09:08.268Z" }, - { url = "https://files.pythonhosted.org/packages/e9/fc/81c1ec4d8146a437399e7b95631b51be312f323a9ce64569f932db6c3914/fastar-0.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a1811a69ae81d469720df0c8af3f84f834a93b5e4f8be0e0e8bde6a52fa11f2", size = 762925, upload-time = "2026-04-13T17:07:52.788Z" }, - { url = "https://files.pythonhosted.org/packages/b9/35/49baf480ecb197aea7ce2515c503a2f25061958dd3b4c98e98a3a11cdcc7/fastar-0.11.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:10486238c55589a3947c38f9cfb88a67d8a608eb8dddc722038237d0278a41d7", size = 759913, upload-time = "2026-04-13T17:08:07.324Z" }, - { url = "https://files.pythonhosted.org/packages/94/eb/946f1980267f2824efb7d7c518d47a49b89c0e9cd7c449301f5a7531558a/fastar-0.11.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1555ef9992d368a6ec39092276990cef8d329c39a1d86ebd847eaa3b10efd472", size = 926054, upload-time = "2026-04-13T17:08:22.196Z" }, - { url = "https://files.pythonhosted.org/packages/0c/19/d5eb611085ce054382570d8d4e24a5e2ff23cd6d2404528a6643841d6059/fastar-0.11.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1f4aca0a9620b76988bbf6225cdea6678a392902444ca18bb8a51495b165a89", size = 818594, upload-time = "2026-04-13T17:08:52.366Z" }, - { url = "https://files.pythonhosted.org/packages/4a/52/18e8d55c0d3d917713f381cb2d0cb793da00c209c802e011d8dc72018cd5/fastar-0.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75beeecac7d11a666a6c4a0b7f7e80842ae5cf523f2f890b99c78fc82b403545", size = 823005, upload-time = "2026-04-13T17:09:23.051Z" }, - { url = "https://files.pythonhosted.org/packages/2c/b4/0fecdcf33e5aaffe777b96a1c10a3204fe0b05bf18e971033a0bfedafc1c/fastar-0.11.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a08cdf5d16daa401c65c9c7493a18db7dc515c52155a17071ec7098bb07da9d3", size = 887115, upload-time = "2026-04-13T17:08:37.385Z" }, - { url = "https://files.pythonhosted.org/packages/08/f8/2a6ad1c2523eb72a4595a9331162fc67ce0f0aee3348728598026c516986/fastar-0.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6e210375e5a7ba53586cbd6017aa417d2d2ceacbe8671682470281bd0a15e8ef", size = 973595, upload-time = "2026-04-13T17:10:09.258Z" }, - { url = "https://files.pythonhosted.org/packages/5c/a6/2aa48843228673feacc2b80876b8924e63ea9c5f5f607bd7a72416b86bae/fastar-0.11.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a2988eb2604b8e15670f355425e8c800e4dcd4edfbcbfe194397f8f17b7eb19e", size = 1036988, upload-time = "2026-04-13T17:10:26.133Z" }, - { url = "https://files.pythonhosted.org/packages/92/ac/3dd14b21c323e8484f47c910110d1d93139ba44621ac2c4c597dbe9fcdb7/fastar-0.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34abc857b46068fdf91d157bd0203bfd6791dc7a432d1ed180f5af6c2f5bcce9", size = 1078267, upload-time = "2026-04-13T17:10:43.645Z" }, - { url = "https://files.pythonhosted.org/packages/de/a1/3f89e58d6fa99160c9e7e17220c8ab5040b5cc017c4fac2356c6ed18453d/fastar-0.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0d884be84e37a01053776395441fc960031974e0265801ce574efc3d05e0cdaf", size = 1032551, upload-time = "2026-04-13T17:11:00.667Z" }, - { url = "https://files.pythonhosted.org/packages/f6/ea/24dd3cfc2096933d7d2a80c926e79602cff1fa481124ed2165b60c1dd9ef/fastar-0.11.0-cp310-cp310-win32.whl", hash = "sha256:c721c1ad758e3e4c2c1fd9e96911a0fa58c0a6be5668f1bcfd0b741e72c7cb63", size = 456022, upload-time = "2026-04-13T17:11:41.859Z" }, - { url = "https://files.pythonhosted.org/packages/82/ef/6eb39ee9cdd59822d1c7337c4d28fdc948885bdf455af9e70efa9879e06f/fastar-0.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:ba4180b7c3080f55f9035fdd7d8c39fe0e1485087a68ff615bb4784a10b8106b", size = 488392, upload-time = "2026-04-13T17:11:27.486Z" }, - { url = "https://files.pythonhosted.org/packages/11/7a/fb367bdaf4efa2c7952a45aeab2e87a564293ecffe150af673ec8edfda46/fastar-0.11.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b82fd6f996e65a86f67a6bd64dd22ef3e8ae2dcaed0ae3b550e71f7e1bbb1df5", size = 709869, upload-time = "2026-04-13T17:09:55.62Z" }, - { url = "https://files.pythonhosted.org/packages/80/ff/b87efb0dcfd081c62c7c7601d7681dabe63103cd51fc16f8d57a1ab45961/fastar-0.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27eed386fd0558e6daa29211111bbd7b740f7c7e881197f8a00ac7c0f3cdb1d7", size = 631668, upload-time = "2026-04-13T17:09:40.537Z" }, - { url = "https://files.pythonhosted.org/packages/24/7c/0ed6dd38b9adc04b3a8ec3b7045908e7c2170ba0ff6e6d2c51bc9fc770f3/fastar-0.11.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a6931bebc1d8e95ddeef55732c195449e6b44ef33aa31b325505097ed3b4d6aa", size = 869663, upload-time = "2026-04-13T17:09:09.78Z" }, - { url = "https://files.pythonhosted.org/packages/58/ce/8b7fb3f23855accebaaf2d2637eac7f261a7a5d936f861a172079f1ef511/fastar-0.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:891f72ce42a5e28a74fbd4d5fbf1a3ac1a1163d13cbc200cbd005fb0fabc54bd", size = 762938, upload-time = "2026-04-13T17:07:54.51Z" }, - { url = "https://files.pythonhosted.org/packages/07/cc/5491e2b677bb841f768e3aba052d0344338a5c78aa5d4c18b443831a8e8d/fastar-0.11.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5b83c1f61f7017d6e1498568038f8745440cfc16ca2f697ec81bac83050108f6", size = 759232, upload-time = "2026-04-13T17:08:08.864Z" }, - { url = "https://files.pythonhosted.org/packages/4e/b7/643630bdbd179e41e9fae31c03b4cf6061dbf4d6fbbae8425d16eb12545d/fastar-0.11.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db73a9b765a516e73983b25341e7b5e0189733878279e278b2295131b0e3a21e", size = 926271, upload-time = "2026-04-13T17:08:23.68Z" }, - { url = "https://files.pythonhosted.org/packages/09/5d/37ade50003b4540e0a53ef100f6692d7ab2ac1122d5acf39920cc09a3e8b/fastar-0.11.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:625827d52eb4e8fec942e0233f125ff8010fcf6a67c0a974a8e5f4666b771e3c", size = 818634, upload-time = "2026-04-13T17:08:54.268Z" }, { url = "https://files.pythonhosted.org/packages/c3/ff/135d177de32cc1e837c99019e4643e6e79352bde49544d4ece5b5eebf56b/fastar-0.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7f5fd8fa21ec0a88296a38dc5d7fc35efd3b26d46a17b8b7c73c5563925ca15", size = 822755, upload-time = "2026-04-13T17:09:25.01Z" }, - { url = "https://files.pythonhosted.org/packages/27/cb/b835dbe76ceac7fa6105851468c259ffd06830eb9c029402e499d0ec153b/fastar-0.11.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8c15af91b8cd87ddf23ea55355ae513c1de3ab67178f26dad017c9e9c0af6096", size = 887101, upload-time = "2026-04-13T17:08:39.248Z" }, - { url = "https://files.pythonhosted.org/packages/9e/54/aa8289eb57fc550535470397cb051f5a58a7c89ca4de31d5502b916dd894/fastar-0.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:03a112395a8b0bff251423bd1564c012f0cc058ad8b6bd8fba96f3d7fc117e44", size = 973606, upload-time = "2026-04-13T17:10:10.98Z" }, - { url = "https://files.pythonhosted.org/packages/1f/fd/776d50a0897c01dc6bfd0926772ee913436fdae91b9affaf0a0cbd09f0a1/fastar-0.11.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f2994bb8f5f8c11eb12beae1e6e77a907173c9819236b8a4c8f0573652ceccce", size = 1036696, upload-time = "2026-04-13T17:10:28.502Z" }, - { url = "https://files.pythonhosted.org/packages/c8/f1/cf0f9b499fb37ac065c8a01ec642f96a3c5eb849c38ae983b59f3b3245e0/fastar-0.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dcf99e4b5973d842c7f19c776c3a83cdc0977d505edce6206438505c0456b517", size = 1078182, upload-time = "2026-04-13T17:10:45.318Z" }, { url = "https://files.pythonhosted.org/packages/f8/9e/21e4701aec4a1123d4dc4d31578dc18875582b5710e4725f7ceb752a248b/fastar-0.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29c9c386dc0d5dda78845a8e6b1480d26ab861c1e0b68f42ae5735cb70ca07f1", size = 1032336, upload-time = "2026-04-13T17:11:02.364Z" }, - { url = "https://files.pythonhosted.org/packages/ce/e2/5872b28c72c27ec1a00760eace6ff35f714f41ebbd5208cf016b12e29250/fastar-0.11.0-cp311-cp311-win32.whl", hash = "sha256:030b2580fc394f2c9b7890b6735810404e9b9ed5e0344db150b945965b5482b7", size = 457368, upload-time = "2026-04-13T17:11:43.528Z" }, - { url = "https://files.pythonhosted.org/packages/fd/6e/ce6832a16193eb4466f4108be8809c249b51cb1f89dd7894545700d079d5/fastar-0.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:83ab57ae067969cd0b483ac3b6dccc4b595fc77f5c820760998648d4c42822b5", size = 488605, upload-time = "2026-04-13T17:11:29.161Z" }, - { url = "https://files.pythonhosted.org/packages/15/5a/9cfb80661cf38fd7b0889224beb7d2746784d4ade2a931ed9775a18d8602/fastar-0.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:27b1a4cee2298b704de8151d310462ee7335ed036011ca9aa6e784b30b6c73a9", size = 464580, upload-time = "2026-04-13T17:11:18.583Z" }, - { url = "https://files.pythonhosted.org/packages/cc/5c/9bbeffbf1905391446dd98aa520422ce7affde5c9a7c22d757cc5d7c1397/fastar-0.11.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1266d6a004f427b0d61bd6c7b544d84cc964691b2232c2f4d635a1b75f2f6d5e", size = 711644, upload-time = "2026-04-13T17:10:07.663Z" }, - { url = "https://files.pythonhosted.org/packages/7e/af/ae5cf39d4fb82d0c592705f5ec6db1b065be5265c151b108f86126ee8773/fastar-0.11.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:298a827ec04ade43733f6ca960d0faec38706aa1494175869ea7ea17f5bad5d3", size = 634371, upload-time = "2026-04-13T17:09:52.083Z" }, - { url = "https://files.pythonhosted.org/packages/7e/36/8d4569e26473c72ccb02d1c5df3ed710073f1c06eca09c26d52ea79fd815/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8800e2387e463a0e5799416a1cbe72dd0fde7270a20e4bde684145e7878f6516", size = 870850, upload-time = "2026-04-13T17:09:21.439Z" }, - { url = "https://files.pythonhosted.org/packages/bf/46/724dc796e1756d3977970f820d30d59bb8cab8e3671b285f1d82ab513aec/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7496def0a2befd82d429cb004ef7ca831585cc887947bd6b9abb68a5ef852b0b", size = 764469, upload-time = "2026-04-13T17:08:05.638Z" }, - { url = "https://files.pythonhosted.org/packages/99/e3/74d6859e632e8fb9339a14f652fb9f800c2bd6aa53071e311c0be3fbab8b/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:878eaf15463eb572e3538af7ca3a8534e5e279cf8196db902d24e5725c4af86e", size = 761375, upload-time = "2026-04-13T17:08:20.669Z" }, - { url = "https://files.pythonhosted.org/packages/a3/e7/cc70e2be5ef8731a7525552b1c35c1448cf9eae6a62cb3a56f12c1bf27ea/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0324ed1d1ef0186e1bbd843b17807d6d837d0906899d4c99378b02c5d86bdd9c", size = 928189, upload-time = "2026-04-13T17:08:35.663Z" }, - { url = "https://files.pythonhosted.org/packages/3c/33/c9a969e78dca323547276a6fee5f4f9588f7cd5ab45acec3778c67399589/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bdf9bd863205590beaf8ef6e66f315310196632180dceaf674985d01a876cac3", size = 820864, upload-time = "2026-04-13T17:09:06.366Z" }, { url = "https://files.pythonhosted.org/packages/84/bd/6b9434b541fe55c125b5f2e017a565596a2d215aa09207e4555e4585064f/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59af8dbb683b24b90fb5b506de080faeab0a17a908e6c2a5d93a97260ed75d7b", size = 824060, upload-time = "2026-04-13T17:09:37.377Z" }, - { url = "https://files.pythonhosted.org/packages/24/8d/871d5f8cf4c6f13987119fb0a9ae8be131e34f2756c2524e9974adf33824/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:9f3df73a3c4292cfe15696cdf59cdb6c309ab59d30b34c733be13c6e32d9a264", size = 889217, upload-time = "2026-04-13T17:08:50.884Z" }, - { url = "https://files.pythonhosted.org/packages/d0/26/cca0fd2704f3ed20165e5613ed911549aef3aaf3b0b5b02fee0e8e23e6cc/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:aa3762cbb16e41a76b61f4a6914937a71aab3a7b6c2d82ca233bc686ebaf756b", size = 975418, upload-time = "2026-04-13T17:10:24.307Z" }, - { url = "https://files.pythonhosted.org/packages/99/94/8bbb0b13f5b6cbe2492f0b7cbba5103e6163976a3331466d010e781fa189/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:a8c7bc8ac74cb359bb546b199288c83236372d094b402e557c197e85527495cd", size = 1038492, upload-time = "2026-04-13T17:10:41.939Z" }, - { url = "https://files.pythonhosted.org/packages/ed/d3/5b7df222a30eac2822ffd00f82fd4c2ce84fba4b369d1e1a03732fd177fc/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:587cbd060a2699c5f66281081395bb4657b2b1e0eef5c206b1aabf740019d670", size = 1080210, upload-time = "2026-04-13T17:10:58.462Z" }, { url = "https://files.pythonhosted.org/packages/ec/6d/56ef943ea524784598c035ccbd42e564e937da0438ae3f55f0e76cb95571/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6a1c56957ac82408be37a3f63594bc83e0919e8760492a4475e542f9f1828778", size = 1034886, upload-time = "2026-04-13T17:11:15.617Z" }, ] [[package]] -name = "fastrlock" -version = "0.8.3" +name = "fastsafetensors" +version = "0.3.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/73/b1/1c3d635d955f2b4bf34d45abf8f35492e04dbd7804e94ce65d9f928ef3ec/fastrlock-0.8.3.tar.gz", hash = "sha256:4af6734d92eaa3ab4373e6c9a1dd0d5ad1304e172b1521733c6c3b3d73c8fa5d", size = 79327, upload-time = "2024-12-17T11:03:39.638Z" } +dependencies = [ + { name = "typer", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c8/33/c97b2bcbe06e0f011eedee0f41d4060f6344901a53c2703acc3dd7429713/fastsafetensors-0.3.2.tar.gz", hash = "sha256:9e358fce238684613a5c3ebb7800c52c5b3270c0bb5e4ed2191ee8f3d0431de1", size = 70409, upload-time = "2026-05-22T05:39:34.787Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/be/b4/aae7ed94b8122c325d89eb91336084596cebc505dc629b795fcc9629606d/fastrlock-0.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7a77ebb0a24535ef4f167da2c5ee35d9be1e96ae192137e9dc3ff75b8dfc08a5", size = 48220, upload-time = "2024-12-17T11:01:51.071Z" }, - { url = "https://files.pythonhosted.org/packages/96/87/9807af47617fdd65c68b0fcd1e714542c1d4d3a1f1381f591f1aa7383a53/fastrlock-0.8.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:d51f7fb0db8dab341b7f03a39a3031678cf4a98b18533b176c533c122bfce47d", size = 49551, upload-time = "2024-12-17T11:01:52.316Z" }, - { url = "https://files.pythonhosted.org/packages/9d/12/e201634810ac9aee59f93e3953cb39f98157d17c3fc9d44900f1209054e9/fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:767ec79b7f6ed9b9a00eb9ff62f2a51f56fdb221c5092ab2dadec34a9ccbfc6e", size = 49398, upload-time = "2024-12-17T11:01:53.514Z" }, - { url = "https://files.pythonhosted.org/packages/15/a1/439962ed439ff6f00b7dce14927e7830e02618f26f4653424220a646cd1c/fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d6a77b3f396f7d41094ef09606f65ae57feeb713f4285e8e417f4021617ca62", size = 53334, upload-time = "2024-12-17T11:01:55.518Z" }, - { url = "https://files.pythonhosted.org/packages/b5/9e/1ae90829dd40559ab104e97ebe74217d9da794c4bb43016da8367ca7a596/fastrlock-0.8.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:92577ff82ef4a94c5667d6d2841f017820932bc59f31ffd83e4a2c56c1738f90", size = 52495, upload-time = "2024-12-17T11:01:57.76Z" }, - { url = "https://files.pythonhosted.org/packages/e5/8c/5e746ee6f3d7afbfbb0d794c16c71bfd5259a4e3fb1dda48baf31e46956c/fastrlock-0.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3df8514086e16bb7c66169156a8066dc152f3be892c7817e85bf09a27fa2ada2", size = 51972, upload-time = "2024-12-17T11:02:01.384Z" }, - { url = "https://files.pythonhosted.org/packages/76/a7/8b91068f00400931da950f143fa0f9018bd447f8ed4e34bed3fe65ed55d2/fastrlock-0.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:001fd86bcac78c79658bac496e8a17472d64d558cd2227fdc768aa77f877fe40", size = 30946, upload-time = "2024-12-17T11:02:03.491Z" }, - { url = "https://files.pythonhosted.org/packages/be/91/5f3afba7d14b8b7d60ac651375f50fff9220d6ccc3bef233d2bd74b73ec7/fastrlock-0.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:55d42f6286b9d867370af4c27bc70d04ce2d342fe450c4a4fcce14440514e695", size = 48911, upload-time = "2024-12-17T11:02:06.173Z" }, - { url = "https://files.pythonhosted.org/packages/d5/7a/e37bd72d7d70a8a551b3b4610d028bd73ff5d6253201d5d3cf6296468bee/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:bbc3bf96dcbd68392366c477f78c9d5c47e5d9290cb115feea19f20a43ef6d05", size = 50357, upload-time = "2024-12-17T11:02:07.418Z" }, - { url = "https://files.pythonhosted.org/packages/0d/ef/a13b8bab8266840bf38831d7bf5970518c02603d00a548a678763322d5bf/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:77ab8a98417a1f467dafcd2226718f7ca0cf18d4b64732f838b8c2b3e4b55cb5", size = 50222, upload-time = "2024-12-17T11:02:08.745Z" }, - { url = "https://files.pythonhosted.org/packages/01/e2/5e5515562b2e9a56d84659377176aef7345da2c3c22909a1897fe27e14dd/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04bb5eef8f460d13b8c0084ea5a9d3aab2c0573991c880c0a34a56bb14951d30", size = 54553, upload-time = "2024-12-17T11:02:10.925Z" }, - { url = "https://files.pythonhosted.org/packages/c0/8f/65907405a8cdb2fc8beaf7d09a9a07bb58deff478ff391ca95be4f130b70/fastrlock-0.8.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c9d459ce344c21ff03268212a1845aa37feab634d242131bc16c2a2355d5f65", size = 53362, upload-time = "2024-12-17T11:02:12.476Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b9/ae6511e52738ba4e3a6adb7c6a20158573fbc98aab448992ece25abb0b07/fastrlock-0.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33e6fa4af4f3af3e9c747ec72d1eadc0b7ba2035456c2afb51c24d9e8a56f8fd", size = 52836, upload-time = "2024-12-17T11:02:13.74Z" }, - { url = "https://files.pythonhosted.org/packages/88/3e/c26f8192c93e8e43b426787cec04bb46ac36e72b1033b7fe5a9267155fdf/fastrlock-0.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:5e5f1665d8e70f4c5b4a67f2db202f354abc80a321ce5a26ac1493f055e3ae2c", size = 31046, upload-time = "2024-12-17T11:02:15.033Z" }, + { url = "https://files.pythonhosted.org/packages/23/8f/ade9adae5853eb7bb674bfd97f340ab7bfea7afaade508fd791ffb06c3b7/fastsafetensors-0.3.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b8780ff0291ff4c9a440c7b25cb8a8b963d8600ab86b89b2a8aebea26d58366", size = 1881819, upload-time = "2026-05-22T05:39:28.399Z" }, ] [[package]] @@ -829,6 +874,39 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/13/37/a065dc3bd6e49423a6532c642ca7378d3f467b1ef44c2800c937af7f9739/filelock-3.29.4-py3-none-any.whl", hash = "sha256:dac1648087d5115554850d113e7dd8c83ab2d38e3435dde2d4f163847e57b767", size = 42757, upload-time = "2026-06-13T16:11:59.582Z" }, ] +[[package]] +name = "flashinfer-cubin" +version = "0.6.12" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/c6/63b1bb7b1a7ae612ecf53c0e568312c3d004f9f7558b0ab5edcf7900c360/flashinfer_cubin-0.6.12-py3-none-any.whl", hash = "sha256:01de132c493bb21d5df42ebe6890966cf83b40aa970dae06b2a3c0bed85f13ec", size = 447533460, upload-time = "2026-05-29T23:45:27.579Z" }, +] + +[[package]] +name = "flashinfer-python" +version = "0.6.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "apache-tvm-ffi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "click", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cuda-tile", extra = ["tileiras"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "einops", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "ninja", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cudnn-frontend", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cutlass-dsl", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-ml-py", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "packaging", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "requests", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tabulate", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tqdm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/d0/114a64319f5a804def2f307d5ed8f95e6d94a2acdacac4ed5f57525cbf46/flashinfer_python-0.6.12.tar.gz", hash = "sha256:bed67f9c46d81dd22611dfef2787998fc412b2fe2648d9e7d336861dda912694", size = 9453326, upload-time = "2026-05-29T23:45:16.466Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/26/3ca33edbf64906603633cb91904798e427c0ac1c55a13707f8081708f3ae/flashinfer_python-0.6.12-py3-none-any.whl", hash = "sha256:0c7a01e586b4796810d974cbf13a9c0eb2ade6a94d12e3220cf7782a1c09b8d3", size = 13985243, upload-time = "2026-05-29T23:45:13.477Z" }, +] + [[package]] name = "flatbuffers" version = "25.12.19" @@ -837,44 +915,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl", hash = "sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4", size = 26661, upload-time = "2025-12-19T23:16:13.622Z" }, ] +[[package]] +name = "fonttools" +version = "4.63.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/84/69/c97f2c18e0db87d2c7b15da1974dace76ae938f1cfa22e2727a648b7ed43/fonttools-4.63.0.tar.gz", hash = "sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0", size = 3597189, upload-time = "2026-05-14T12:04:30.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/2b/a7f1545bdf5da69c4bda0cea2a5781f0ad2a6623e0277267672db43c5fe6/fonttools-4.63.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b8ae05d9eacf6081414d759c0a352769ac28ce31280d6bb8e77b03f9e3c449f", size = 2881793, upload-time = "2026-05-14T12:02:56.645Z" }, + { url = "https://files.pythonhosted.org/packages/49/50/965308c703f085f225db2886813b27e015b8b3438c350b22dd65b52c2a2c/fonttools-4.63.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79cdc9f567aec74a72918fd060283911406750cbc9fd28c1316023deb6ce31a9", size = 2428130, upload-time = "2026-05-14T12:02:58.891Z" }, + { url = "https://files.pythonhosted.org/packages/0b/43/a81f20050a3115b57d62c8e781446949512eac36690dc384ccea65ff4cc1/fonttools-4.63.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d76ac49f929aecaf82d83250b8347e099d7aecba0f4726c1d9b6df3b8bb5fe18", size = 5082308, upload-time = "2026-05-14T12:03:03.211Z" }, + { url = "https://files.pythonhosted.org/packages/f5/f1/0aa0dbea778c75adbef223c42019fd47d22262b905974d62d829545d485f/fonttools-4.63.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7dd683fef0663e9f0f45cf541d788d24caa3ec9db50796b588e1757d8b3bc007", size = 5213271, upload-time = "2026-05-14T12:03:07.238Z" }, + { url = "https://files.pythonhosted.org/packages/2c/47/c99d5268f354002ce80f8d029cd9d7d872969da1de8b93d32de4dc56d6f4/fonttools-4.63.0-py3-none-any.whl", hash = "sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d", size = 1164562, upload-time = "2026-05-14T12:04:29.092Z" }, +] + [[package]] name = "frozenlist" version = "1.8.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/4a/557715d5047da48d54e659203b9335be7bfaafda2c3f627b7c47e0b3aaf3/frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011", size = 86230, upload-time = "2025-10-06T05:35:23.699Z" }, - { url = "https://files.pythonhosted.org/packages/a2/fb/c85f9fed3ea8fe8740e5b46a59cc141c23b842eca617da8876cfce5f760e/frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565", size = 49621, upload-time = "2025-10-06T05:35:25.341Z" }, - { url = "https://files.pythonhosted.org/packages/63/70/26ca3f06aace16f2352796b08704338d74b6d1a24ca38f2771afbb7ed915/frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad", size = 49889, upload-time = "2025-10-06T05:35:26.797Z" }, - { url = "https://files.pythonhosted.org/packages/5d/ed/c7895fd2fde7f3ee70d248175f9b6cdf792fb741ab92dc59cd9ef3bd241b/frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2", size = 219464, upload-time = "2025-10-06T05:35:28.254Z" }, - { url = "https://files.pythonhosted.org/packages/6b/83/4d587dccbfca74cb8b810472392ad62bfa100bf8108c7223eb4c4fa2f7b3/frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186", size = 221649, upload-time = "2025-10-06T05:35:29.454Z" }, - { url = "https://files.pythonhosted.org/packages/6a/c6/fd3b9cd046ec5fff9dab66831083bc2077006a874a2d3d9247dea93ddf7e/frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e", size = 219188, upload-time = "2025-10-06T05:35:30.951Z" }, - { url = "https://files.pythonhosted.org/packages/ce/80/6693f55eb2e085fc8afb28cf611448fb5b90e98e068fa1d1b8d8e66e5c7d/frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450", size = 231748, upload-time = "2025-10-06T05:35:32.101Z" }, - { url = "https://files.pythonhosted.org/packages/97/d6/e9459f7c5183854abd989ba384fe0cc1a0fb795a83c033f0571ec5933ca4/frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef", size = 236351, upload-time = "2025-10-06T05:35:33.834Z" }, - { url = "https://files.pythonhosted.org/packages/97/92/24e97474b65c0262e9ecd076e826bfd1d3074adcc165a256e42e7b8a7249/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4", size = 218767, upload-time = "2025-10-06T05:35:35.205Z" }, - { url = "https://files.pythonhosted.org/packages/ee/bf/dc394a097508f15abff383c5108cb8ad880d1f64a725ed3b90d5c2fbf0bb/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff", size = 235887, upload-time = "2025-10-06T05:35:36.354Z" }, - { url = "https://files.pythonhosted.org/packages/40/90/25b201b9c015dbc999a5baf475a257010471a1fa8c200c843fd4abbee725/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c", size = 228785, upload-time = "2025-10-06T05:35:37.949Z" }, - { url = "https://files.pythonhosted.org/packages/84/f4/b5bc148df03082f05d2dd30c089e269acdbe251ac9a9cf4e727b2dbb8a3d/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f", size = 230312, upload-time = "2025-10-06T05:35:39.178Z" }, - { url = "https://files.pythonhosted.org/packages/db/4b/87e95b5d15097c302430e647136b7d7ab2398a702390cf4c8601975709e7/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7", size = 217650, upload-time = "2025-10-06T05:35:40.377Z" }, - { url = "https://files.pythonhosted.org/packages/e5/70/78a0315d1fea97120591a83e0acd644da638c872f142fd72a6cebee825f3/frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a", size = 39659, upload-time = "2025-10-06T05:35:41.863Z" }, - { url = "https://files.pythonhosted.org/packages/66/aa/3f04523fb189a00e147e60c5b2205126118f216b0aa908035c45336e27e4/frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6", size = 43837, upload-time = "2025-10-06T05:35:43.205Z" }, - { url = "https://files.pythonhosted.org/packages/39/75/1135feecdd7c336938bd55b4dc3b0dfc46d85b9be12ef2628574b28de776/frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e", size = 39989, upload-time = "2025-10-06T05:35:44.596Z" }, { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, - { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, - { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, - { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, - { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, - { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, - { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, - { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, - { url = "https://files.pythonhosted.org/packages/95/a3/c8fb25aac55bf5e12dae5c5aa6a98f85d436c1dc658f21c3ac73f9fa95e5/frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25", size = 39647, upload-time = "2025-10-06T05:36:03.409Z" }, - { url = "https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b", size = 44064, upload-time = "2025-10-06T05:36:04.368Z" }, - { url = "https://files.pythonhosted.org/packages/5d/16/c2c9ab44e181f043a86f9a8f84d5124b62dbcb3a02c0977ec72b9ac1d3e0/frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a", size = 39937, upload-time = "2025-10-06T05:36:05.669Z" }, { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, ] @@ -889,7 +953,7 @@ wheels = [ [package.optional-dependencies] http = [ - { name = "aiohttp" }, + { name = "aiohttp", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] [[package]] @@ -897,10 +961,10 @@ name = "gguf" version = "0.19.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "tqdm" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyyaml", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "requests", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tqdm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/48/ae/17f1308ae45cd7b08ebb521747d5b23f4efc4d172038a4e228dd5106c3ff/gguf-0.19.0.tar.gz", hash = "sha256:dbadcd6cc7ccd44256f2229fe7c2dff5e8aa5cf0612ab987fd2b1a57e428923f", size = 111220, upload-time = "2026-05-06T13:04:03.667Z" } wheels = [ @@ -912,40 +976,52 @@ name = "gliner" version = "0.2.27" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "huggingface-hub" }, - { name = "onnxruntime", version = "1.24.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "onnxruntime", version = "1.27.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "sentencepiece" }, - { name = "torch" }, - { name = "tqdm" }, - { name = "transformers" }, + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "onnxruntime", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sentencepiece", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/69/37/c456f6be21a95ed2c635d00bd6049d99a3b31490129a2b19965b0a60ec58/gliner-0.2.27.tar.gz", hash = "sha256:071de0819d83c34468ede02f75a38f618bc0c69262582127dccf3bb787db4c0c", size = 225241, upload-time = "2026-06-15T14:38:38.422Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/73/48/9b6dc122f53d5493d280a797e7781143b5a86a2625b8550d6b082eb7fb46/gliner-0.2.27-py3-none-any.whl", hash = "sha256:90373a3f6166977d4ca807c5daf6e3ea1fa21a5c40d862f3e63764cba442abae", size = 207786, upload-time = "2026-06-15T14:38:36.08Z" }, ] +[[package]] +name = "googleapis-common-protos" +version = "1.75.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/c8/f439cffde755cffa462bfbb156278fa6f9d09119719af9814b858fd4f81f/googleapis_common_protos-1.75.0.tar.gz", hash = "sha256:53a062ff3c32552fbd62c11fe23768b78e4ddf0494d5e5fd97d3f4689c75fbbd", size = 151035, upload-time = "2026-05-07T08:04:49.423Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/c8/e2645aa8ed02fd4c7a2f59d68783b65b1f3cbdfe39a6308e156509d1fee8/googleapis_common_protos-1.75.0-py3-none-any.whl", hash = "sha256:961ed60399c457ceb0ee8f285a84c870aabc9c6a832b9d37bb281b5bebde43ed", size = 300631, upload-time = "2026-05-07T08:03:30.345Z" }, +] + [[package]] name = "greenlet" version = "3.5.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/dd/8b/befc3cb36965f397d87e86fb3b00e3ec0dc67c1ecb0986d7f54ee528f018/greenlet-3.5.2.tar.gz", hash = "sha256:c1b906220d83c140361cdd12eef970fb5881a168b98ee58a43786426173da14c", size = 199243, upload-time = "2026-06-17T20:19:01.317Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2b/3a/cd99db55dc908568f6b91845747b98b3b17a06052fa1803d091dc91da27d/greenlet-3.5.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9df9daae96848508450011d0d86ed7c95f8829a354ce438284a77b24896fd1f8", size = 285626, upload-time = "2026-06-17T17:33:33.231Z" }, - { url = "https://files.pythonhosted.org/packages/ce/09/fd997a19cbb97641233c7d5f8fc89314c132be2c8867c4f14beff979996f/greenlet-3.5.2-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:01e32e9d2b1714a2b06184cb3071ff2a2fd9bc7d065e39198ab21f7253dad421", size = 601821, upload-time = "2026-06-17T18:07:16.756Z" }, - { url = "https://files.pythonhosted.org/packages/7d/b0/62abd204addd913ad9856e091f5d8baaedc7c85df151f22f093b8a207c20/greenlet-3.5.2-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0488ca77c94da5e09d1d9958f98b58cebba1b8fd9664c24898499133de927574", size = 615044, upload-time = "2026-06-17T18:29:39.344Z" }, - { url = "https://files.pythonhosted.org/packages/34/67/ceaab731b51611a8238b0af2d4abb4fd727ec09b16cd499fca5295603f46/greenlet-3.5.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6d9e19257794e28821c9ebd5e23f86d7c267cd9d390089374f068d2049f949e3", size = 615176, upload-time = "2026-06-17T17:39:25.134Z" }, - { url = "https://files.pythonhosted.org/packages/1c/40/51a0ee73b72a7e4a65b54433316bbd7b3b7902a585310cd4e3051d411ee3/greenlet-3.5.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bf493b3c1c0a2324c49b0472e2280ba4665f3510d8115f6f807759a6163b15f7", size = 1574580, upload-time = "2026-06-17T18:22:09.082Z" }, - { url = "https://files.pythonhosted.org/packages/41/d3/a3a2163b1fe73042d3e72cfcb9920f2481d5188a1df2645587a9b83a903f/greenlet-3.5.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:561dd919c02236a613fbf226791cbd77ee5002cbd5cb7e838869aa3ac7a71e16", size = 1641192, upload-time = "2026-06-17T17:40:04.234Z" }, - { url = "https://files.pythonhosted.org/packages/95/a3/b4d83fb451e2f7266cb45ccef23857f8a800e0a5d9a73263fafdf7ba7904/greenlet-3.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:049827baab63dda8ab8ec5a6d07fc6eb0f418319cfc757fc8737a605e99ca1ad", size = 238247, upload-time = "2026-06-17T17:34:54.794Z" }, { url = "https://files.pythonhosted.org/packages/21/68/371ee6dad168be3386c46030bedaa8e3e7e3cf3d203621d4529e78ff36ef/greenlet-3.5.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:d7792398872f89466c6671d5d193537eff163ecf7fac78d82e6ddc25017fb4f5", size = 286925, upload-time = "2026-06-17T17:33:17.928Z" }, - { url = "https://files.pythonhosted.org/packages/26/16/ed5706c26b4d26f3fabceb79abca992654eac8b0fa435def2ac6dbd92122/greenlet-3.5.2-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:711028c953cd6ce5dc01bbb5a1747e3ad6bd8b2f7ded73778bb936e8dab9e3b6", size = 606036, upload-time = "2026-06-17T18:07:18.538Z" }, - { url = "https://files.pythonhosted.org/packages/8e/32/f9c77093af9f5f96615922b7e3fe3690a9faff02adb89f1d74e21578b147/greenlet-3.5.2-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5eba55076d79e8a5176e6925295cfb901ebc95dae493342ede22230f75d8bee2", size = 617821, upload-time = "2026-06-17T18:29:41.317Z" }, { url = "https://files.pythonhosted.org/packages/bd/d4/642833e778c17d32b5cabb793e14ce7364c55952462fc506fecdee55d485/greenlet-3.5.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1c1e5ad80f1f38ea479b83b39dccb20874cfe9ad5e52f87225fa294ba4d39a1", size = 616877, upload-time = "2026-06-17T17:39:26.564Z" }, - { url = "https://files.pythonhosted.org/packages/d3/cc/7120f83e78b8be3cf7acbe2306b3b7bd2cbf99f5ad12e85e2f05d7b31961/greenlet-3.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9e194b996aa1b89d933cfe136e5eb39b22a8b72ba59d376ef39a55bca4dbf47f", size = 1577274, upload-time = "2026-06-17T18:22:10.692Z" }, { url = "https://files.pythonhosted.org/packages/fa/d8/05a0074ee485dd51c320fd706fd7ed48006b9cad3443092d7df1a655f0d2/greenlet-3.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e554809538bd4867f24421b43abde170f9c9b8192149b30df5e164bcac6124f", size = 1643566, upload-time = "2026-06-17T17:40:05.452Z" }, - { url = "https://files.pythonhosted.org/packages/35/fe/9fe2060bdeece682e38d381184ae66045b48ed183c107ab3f88b9886a630/greenlet-3.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:e063263ce9047878480d7e536012fc8b7c8e1922989eb5f03b9ab998a2ee7b7e", size = 238643, upload-time = "2026-06-17T17:37:03.039Z" }, - { url = "https://files.pythonhosted.org/packages/41/13/a9db72f5b6b700977ebd371d6a1f2984a08838357de924fcd5571607b1bf/greenlet-3.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:a3f76a94e2d6e1fee8f302265679d8cc47d71a203936dd03c6e2ace0f9cfd46d", size = 237135, upload-time = "2026-06-17T17:34:34.14Z" }, +] + +[[package]] +name = "grpcio" +version = "1.81.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b0/b5/1ff353970a87eda4c98251e34d2dfd214abd4982dc89119c9252a2a482d2/grpcio-1.81.1.tar.gz", hash = "sha256:6fa10a767143a5e82e8eaab53918af0cd8909a57a27f8cb2288b80a613ac671b", size = 13026582, upload-time = "2026-06-11T12:46:51.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/d6/abeda5c2b896a0b341584fe5ac411bbf72e197a9a374c355fb90965e08d2/grpcio-1.81.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a37165cc80b1a368384b383e63a4c38116a10467ae44c904d2d7468c4470ec2", size = 6842229, upload-time = "2026-06-11T12:45:04.76Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b2/524847365122ee509ca17bcc4e092198b700e94af7bfd5bb5e6dd9f3ee66/grpcio-1.81.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1b22c80559854b789a01fd89e8929b3798a156c0829b5282a8939f33ad4115ad", size = 7873989, upload-time = "2026-06-11T12:45:13.102Z" }, ] [[package]] @@ -966,11 +1042,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7a/d8/5e54cf37434759d1f4f2ba9b66077ff9d4c4e1f37b6bd7975da5c40d94ab/hf_xet-1.5.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6abd35c3221eff63836618ddfb954dcf84798603f71d8e33e3ed7b04acfdbe6e", size = 4077794, upload-time = "2026-06-08T23:02:40.656Z" }, { url = "https://files.pythonhosted.org/packages/35/94/4b2ecfbad8f8b04701a23aefb62f540b9137d058b7e1dbef16a32676f0e9/hf_xet-1.5.1-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:94e761bbd266bf4c03cee73753916062665ce8365aa40ed321f45afcb934b41e", size = 3845354, upload-time = "2026-06-08T23:02:42.702Z" }, { url = "https://files.pythonhosted.org/packages/de/cc/f99f4bc7295023d7bd9ebbfd51f75cc530ca262c1227666268b8208f4b77/hf_xet-1.5.1-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:892e3a3a3aecc12aded8b93cf4f9cd059282c7de0732f7d55026f3abdf474350", size = 4514864, upload-time = "2026-06-08T23:02:44.497Z" }, - { url = "https://files.pythonhosted.org/packages/cd/6e/21f7e5a2381278bd3b7b7a5a4d90038518bb6308a0c1daf5d9f8268bb178/hf_xet-1.5.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a93df2039190502835b1db8cd7e178b0b7b889fe9ab51299d5ced26e0dd879a4", size = 4303784, upload-time = "2026-06-08T23:02:46.203Z" }, - { url = "https://files.pythonhosted.org/packages/35/0e/f992bb6927ac1cb30ef74e62268f551f338bc32b2191f7c96a44c6f7283e/hf_xet-1.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0c97106032ef70467b4f6bc2d0ccc266d7613ee076afc56516c502f87ce1c4a6", size = 4500703, upload-time = "2026-06-08T23:02:47.628Z" }, { url = "https://files.pythonhosted.org/packages/fb/d1/90a498d05447980b977b1669246eeeeae4cfb0ea3e7a286eaba627f91bf9/hf_xet-1.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6208adb15d192b90e4c2ad2a27ed864359b2cb0f2494eb6d7c7f3699ac02e2bf", size = 4719498, upload-time = "2026-06-08T23:02:49.268Z" }, - { url = "https://files.pythonhosted.org/packages/6d/b6/20f99cfe97cc663a711f7b33cc21d4793e51968e9a26125b4afcd77315ba/hf_xet-1.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:f7b3002f95d1c13e24bcb4537baa8f0eb3838957067c91bb4959bc004a6435f5", size = 4026419, upload-time = "2026-06-08T23:02:50.829Z" }, - { url = "https://files.pythonhosted.org/packages/f9/fa/77453694888f03e5a8c8852d1514a0894d8e81c622d39edbaf308ea0dcf4/hf_xet-1.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:93d090b57b211133f6c0dab0205ef5cb6d89162979ba75a74845045cc3063b8e", size = 3855178, upload-time = "2026-06-08T23:02:52.452Z" }, ] [[package]] @@ -978,8 +1050,8 @@ name = "httpcore" version = "1.0.9" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi" }, - { name = "h11" }, + { name = "certifi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "h11", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } wheels = [ @@ -992,20 +1064,8 @@ version = "0.8.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/43/e5/d471fcb0e14523fe1c3f4ba58ca52480e7bd70ad7109a3846bc75892f7fb/httptools-0.8.0.tar.gz", hash = "sha256:6b2a32f18d97e16e90827d7a819ffa8dbd8cc245fc4e1fa9d1095b54ef4bd999", size = 271342, upload-time = "2026-05-25T22:17:48.841Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/b9/be66eb0decd730d89b9c94f930e4b8d87787b05724bb84af98bfd825f72c/httptools-0.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bf3b6f807c8541503cecfbb8a8dffb385640d0d96102f3d112aa8740f9b7c826", size = 208805, upload-time = "2026-05-25T22:16:50.434Z" }, - { url = "https://files.pythonhosted.org/packages/9d/f7/b4d41eaae2869d31356bc4bbf546f44fae83ff298af0a043ca0625b06773/httptools-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da684f2e1aa2ee9bdcb083f3f3a68c5956750b375bc5df864d3a5f0c42a40b77", size = 113527, upload-time = "2026-05-25T22:16:51.672Z" }, - { url = "https://files.pythonhosted.org/packages/e6/e4/77487e14fc7be47180fd0eb4267c7486d0cc59b74031839a3daf8650136b/httptools-0.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6f21e2a3b0067bbe7f67e34cfd16276af556e5e52f4c7503be0cb5f90e905e4", size = 450035, upload-time = "2026-05-25T22:16:53.313Z" }, - { url = "https://files.pythonhosted.org/packages/da/72/5a8f787e323f56fbd86c32a4be92a86776e4cfe8b4317db999f452028362/httptools-0.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea897f0c729581ebf72131a438a7932d9b14efef72d75ada966700cac3caaeb", size = 451101, upload-time = "2026-05-25T22:16:54.696Z" }, - { url = "https://files.pythonhosted.org/packages/ed/41/b44a25560955197674b6744cb903664300e239235a5eaa69df0890d87054/httptools-0.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c0d726cc107fceb7d45f978483b4b70dd8caa836f5914d3434bb18628eb73813", size = 436140, upload-time = "2026-05-25T22:16:56.239Z" }, - { url = "https://files.pythonhosted.org/packages/74/b0/054aac84c03d7e097bf4c605fb7e74eec3d65c0276adf64ee97f3a103ff5/httptools-0.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9878eb2785ba5eb70631ad269b37976f73d647955e26c91d490eb8a4edfda4ba", size = 437041, upload-time = "2026-05-25T22:16:57.716Z" }, - { url = "https://files.pythonhosted.org/packages/bb/e8/86b85bbc0ac7892232f1a99ab96a9aa71936984fa06adfc0afc83ca7789e/httptools-0.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:b205e5f5523fa039679da0dfe5a10132b2a4abeae6a86fdd1ddc035f7f836557", size = 90454, upload-time = "2026-05-25T22:16:58.871Z" }, - { url = "https://files.pythonhosted.org/packages/f8/d2/c3eedaef57de65c3cc5f8dc244cf12d09c84ad258a479055aad6db23206c/httptools-0.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed377e64805bdba4943c82717333f8f8603a13b09aff9cead2717c6c817fb168", size = 208428, upload-time = "2026-05-25T22:16:59.717Z" }, - { url = "https://files.pythonhosted.org/packages/f1/94/dfe435d90d0ef61ec0f2cc3d480eef78c59727c6c2ce039f433882f6131a/httptools-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9518c406d7b310f05adb1a37f80acabac40504a575d7c0da6d3e365c695ac20d", size = 113366, upload-time = "2026-05-25T22:17:00.795Z" }, { url = "https://files.pythonhosted.org/packages/cc/d4/13025f1a56e615dcb331e0bbe2d9a1143212b58c263385fc5d2e558f5bac/httptools-0.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:57278e6fa0424c42a8a3e454828ab4f0aff27b40cddf9679579b98c6dce6a376", size = 464676, upload-time = "2026-05-25T22:17:02.014Z" }, - { url = "https://files.pythonhosted.org/packages/bf/95/4c1c26c0b985f8a3331682d802598f14e32dc41bf7509266eb2c04ad4801/httptools-0.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bbb8caadb2b742d293169d2b458b5c001ef70e3158704aa3d3ef9597624c5d1d", size = 464235, upload-time = "2026-05-25T22:17:03.109Z" }, - { url = "https://files.pythonhosted.org/packages/a2/82/6735be2b0ca527718c431cdb8e5f70c3862c0844a687df0f572c51e11497/httptools-0.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:52dd695b865fe96d9d2b16b64a895f3f57bf3cb064e8383cd3b5713a069e8085", size = 449809, upload-time = "2026-05-25T22:17:04.443Z" }, { url = "https://files.pythonhosted.org/packages/b5/f9/5811c74f37a758c8a4aa3dc430375119d335947e883efc4664d8f3559a41/httptools-0.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:20b4aac66ff65f7db06a375808b78f42a94970aa22e826b3cb2b43eb09174124", size = 452174, upload-time = "2026-05-25T22:17:05.476Z" }, - { url = "https://files.pythonhosted.org/packages/cc/94/97b75870dea07b71e3ec535cebe525b08d723152e4c7d13fa887e51f4de2/httptools-0.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a1b4c8e7a489a0d750d91894e9a8cdc295838f1924c0ca903ae993456fddec07", size = 90991, upload-time = "2026-05-25T22:17:06.75Z" }, ] [[package]] @@ -1013,10 +1073,10 @@ name = "httpx" version = "0.28.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio" }, - { name = "certifi" }, - { name = "httpcore" }, - { name = "idna" }, + { name = "anyio", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "certifi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "httpcore", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } wheels = [ @@ -1034,21 +1094,52 @@ wheels = [ [[package]] name = "huggingface-hub" -version = "0.34.4" +version = "1.20.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "filelock" }, - { name = "fsspec" }, - { name = "hf-xet", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "tqdm" }, - { name = "typing-extensions" }, + { name = "click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "fsspec", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "hf-xet", marker = "(platform_machine == 'AMD64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'darwin') or (platform_machine == 'amd64' and sys_platform == 'darwin') or (platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'x86_64' and sys_platform == 'darwin') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "httpx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typer", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/45/c9/bdbe19339f76d12985bc03572f330a01a93c04dffecaaea3061bdd7fb892/huggingface_hub-0.34.4.tar.gz", hash = "sha256:a4228daa6fb001be3f4f4bdaf9a0db00e1739235702848df00885c9b5742c85c", size = 459768, upload-time = "2025-08-08T09:14:52.365Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e6/7e/fad82ad491b226e832d2da90a1a59f36acd4526cda8c726f639834754aa4/huggingface_hub-1.20.1.tar.gz", hash = "sha256:9f6d63bfbeab2d2a8357200a9bc4f18cd2c8bfac9579f792f5922e77bf6471d0", size = 859910, upload-time = "2026-06-18T22:06:53.348Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/7b/bb06b061991107cd8783f300adff3e7b7f284e330fd82f507f2a1417b11d/huggingface_hub-0.34.4-py3-none-any.whl", hash = "sha256:9b365d781739c93ff90c359844221beef048403f1bc1f1c123c191257c3c890a", size = 561452, upload-time = "2025-08-08T09:14:50.159Z" }, + { url = "https://files.pythonhosted.org/packages/8e/b5/ff8516e74b459da3dce9567540c39f2d305ee7a2655109f6802873ff1588/huggingface_hub-1.20.1-py3-none-any.whl", hash = "sha256:274448a45c1ba6f112fe2fb168ead05574c654faa156904157a84085cfae14bd", size = 719837, upload-time = "2026-06-18T22:06:51.486Z" }, +] + +[[package]] +name = "humming-kernels" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-bindings", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jinja2", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-ml-py", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyelftools", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "safetensors", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tabulate", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tqdm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/f6/05e95b66cca48def9db0d6c40374fe285c7d9c913fe126030bcfb7cb3088/humming_kernels-0.1.4.tar.gz", hash = "sha256:fdaf4f23cc6b03bb1be3fd24aa11dc7798881e5448826e2404b4f12d8096f0d0", size = 117555, upload-time = "2026-06-04T03:24:03.504Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/16/d9318061a560305034e14cb7bf6483ffc8735eff6b30f260907dbbd4e85d/humming_kernels-0.1.4-py3-none-any.whl", hash = "sha256:c85094cd7cf8cdd959c5e2f7f239a7d72a7640ec1f948787434bc06e24e9ed00", size = 161312, upload-time = "2026-06-04T03:24:01.897Z" }, +] + +[package.optional-dependencies] +cu13 = [ + { name = "nvidia-cuda-cccl", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-nvcc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-nvrtc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-runtime", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] @@ -1060,6 +1151,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, ] +[[package]] +name = "ijson" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f4/57/60d1a6a512f2f0508d0bc8b4f1cc5616fd3196619b66bd6a01f9155a1292/ijson-3.5.0.tar.gz", hash = "sha256:94688760720e3f5212731b3cb8d30267f9a045fb38fb3870254e7b9504246f31", size = 68658, upload-time = "2026-02-24T03:58:30.974Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/b5/955a83b031102c7a602e2c06d03aff0a0e584212f09edb94ccc754d203ac/ijson-3.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e74aff8c681c24002b61b1822f9511d4c384f324f7dbc08c78538e01fdc9fcb", size = 135093, upload-time = "2026-02-24T03:56:59.267Z" }, + { url = "https://files.pythonhosted.org/packages/14/eb/80d6f8a748dead4034cea0939494a67d10ccf88d6413bf6e860393139676/ijson-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6ca0d1b6b5f8166a6248f4309497585fb8553b04bc8179a0260fad636cfdb798", size = 135588, upload-time = "2026-02-24T03:57:03.131Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0a/e34c729a87ff67dc6540f6bcc896626158e691d433ab57db0086d73decd2/ijson-3.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04f0fc740311388ee745ba55a12292b722d6f52000b11acbb913982ba5fbdf87", size = 68618, upload-time = "2026-02-24T03:58:28.918Z" }, +] + [[package]] name = "iniconfig" version = "2.3.0" @@ -1083,7 +1185,7 @@ name = "jinja2" version = "3.1.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markupsafe" }, + { name = "markupsafe", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] 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 = [ @@ -1096,46 +1198,31 @@ version = "0.15.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/66/b5/55f06bb281d92fb3cc86d14e1def2bd908bb77693183e7cb1f5a3c388b0c/jiter-0.15.0.tar.gz", hash = "sha256:4251acc80e2b7c9b7b8823456ea0fceeb0734dac2df7636d3c711b38476b5a76", size = 166640, upload-time = "2026-05-19T10:09:48.361Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/da/76a2c7e510ba15fe323d9509c223ab272da79ea59f54488f4a78da6426db/jiter-0.15.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:edebcf7d1f601199084bb6e844d7dc67e03e04f6ac786b0332d616635c4ff7a4", size = 310849, upload-time = "2026-05-19T10:06:51.944Z" }, - { url = "https://files.pythonhosted.org/packages/5d/8e/827be942883a4dc0862c48626ff41af3320b1902d136a0bf4b9041f2c567/jiter-0.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f924585cdacf631cd382b657966847bb537bf9ed0a6f9b991da5f05a631480f", size = 314991, upload-time = "2026-05-19T10:06:53.522Z" }, - { url = "https://files.pythonhosted.org/packages/6d/38/be2832be361ba1b9517c76f46d30b64e985be1dd43c974f4c3a4b1844436/jiter-0.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abbf258599526ad0326fe51e252e24f2bd6f24f1852681b4b78feda3808f1d18", size = 340843, upload-time = "2026-05-19T10:06:55.071Z" }, - { url = "https://files.pythonhosted.org/packages/6d/d8/90f01fb83c0c7ba509303ec93e32a308fbfa167d264860b01c0fd0dbbd06/jiter-0.15.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c468136b8bd6bb18c8786e4236a1fa27362f24cb23450ba0cb204ab379b8e6f", size = 365116, upload-time = "2026-05-19T10:06:56.893Z" }, - { url = "https://files.pythonhosted.org/packages/91/38/94593d34f8c67a0b6f6cbc027f016ffa9780b3a858a7a86f6fd7a15bcc1e/jiter-0.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05906b93d72f03339e6bb7cf8dc10ebda64a0266126eed6beba79e20abcf5fd4", size = 457970, upload-time = "2026-05-19T10:06:58.707Z" }, - { url = "https://files.pythonhosted.org/packages/df/04/d79962dd49d00c97e2a9b4cacea1947904d02135936960351f9a96d4c1a6/jiter-0.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30ce785d2adb8e32c3f7741442370a74834ec4c01f3c48f0750227a0b4ef27d6", size = 375744, upload-time = "2026-05-19T10:07:00.471Z" }, - { url = "https://files.pythonhosted.org/packages/c3/2e/5d37abe2be0e819c21e2338bebd410e481763ce526a9138c8c3652fa0123/jiter-0.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fd73e3da91a0a722d67165e849ce2cdc10de0e0d48738c142be8c6c5f310f4c", size = 349609, upload-time = "2026-05-19T10:07:01.829Z" }, - { url = "https://files.pythonhosted.org/packages/7a/90/98768ad2ed90c1fda15d64157de2dfbf73c1c074d4b1bfaca915480bc7cf/jiter-0.15.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:ceb8fc27d38793f9c97149be8302720c5b22e5c195a37bf2c45dc36c4600a512", size = 354366, upload-time = "2026-05-19T10:07:03.587Z" }, - { url = "https://files.pythonhosted.org/packages/d6/c4/fbfb806209f1fe4b7dccdfb07bc62bb044300734a945b06fd64db446ef6a/jiter-0.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d726e3ceeb337191324b49de298142f27c3ad10886341555d1d5315b5f252c6a", size = 393519, upload-time = "2026-05-19T10:07:05.08Z" }, - { url = "https://files.pythonhosted.org/packages/37/1c/b9c257cd70cb453b6d10f3ebf0402cdb11669ab455389096f09839670290/jiter-0.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2c8aea7781d2a372227871de4e1a1332aa96f5a89fd76c5e835dafdbad102887", size = 519952, upload-time = "2026-05-19T10:07:06.589Z" }, - { url = "https://files.pythonhosted.org/packages/a9/1a/aa85027db7ab15829c12feebbc33b404f53fc399bd559d85fd0d6365ff0d/jiter-0.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cf4bd113a69c0a740e27cb962ce10630c36d2b8f59d759a651b955ee9d18a823", size = 550770, upload-time = "2026-05-19T10:07:08.228Z" }, - { url = "https://files.pythonhosted.org/packages/d4/54/8c3f65c8a5687925e84708f19d63f7f37d28e2b86a48d951702ad94424d8/jiter-0.15.0-cp310-cp310-win32.whl", hash = "sha256:d92a5cd21fdb083931d546c207aa29633787c5dc5b02daab2d32b843f88a2c53", size = 209303, upload-time = "2026-05-19T10:07:10.006Z" }, - { url = "https://files.pythonhosted.org/packages/d5/72/0528a1eb9f42dd2d8228a0711458628f35924d131f623eaebc35fd23d3d4/jiter-0.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:e58585a58209d72691ce2d62a9147445f5a87beb0bde97fde284c96ae392a3d1", size = 200404, upload-time = "2026-05-19T10:07:11.426Z" }, { url = "https://files.pythonhosted.org/packages/e4/13/daa722f5765c393576f466378f9dfd29d77c9bed939e0688f96afa3601ea/jiter-0.15.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0f862193b8696249d22ec433e85fd2ab0ad9596bc3e45e6c0bc55e8aeba97be2", size = 310899, upload-time = "2026-05-19T10:07:12.89Z" }, { url = "https://files.pythonhosted.org/packages/7f/82/2d2551829b082f4b6d82b9f939b031fb808a10aab1ec0664f82e150bb9a2/jiter-0.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1303d4d68a9b051ea90502402063ecf3807da00ad2affa19ca1ae3b90b3c5f67", size = 314963, upload-time = "2026-05-19T10:07:14.539Z" }, - { url = "https://files.pythonhosted.org/packages/2a/0a/8b1a51466f7fe9f31dbe4bc7e0ca848674f9825e0f737b929b97e8c60aa7/jiter-0.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:392b8ab019e5502d08aff85c6272209c24bc2cbe706ea82a56368f524236614a", size = 341730, upload-time = "2026-05-19T10:07:15.869Z" }, - { url = "https://files.pythonhosted.org/packages/f6/2a/e71dea19822e2e404e83992a08c1d6b9b617bb944f28c9c2fbd85d02c91e/jiter-0.15.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:773b6eb282ce11ee19f05f6b2d4404fa308e5bbd353b0b80a0262caad6db2cd7", size = 366214, upload-time = "2026-05-19T10:07:17.259Z" }, - { url = "https://files.pythonhosted.org/packages/c4/59/97e1fa539d124a509a00ab7f669289d1c1d236ecabf12948a18f16c91082/jiter-0.15.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2c0c44d569ce0f2850f5c926f8caeb5f245fbc84475aeb36efccc2103e6dbd", size = 459527, upload-time = "2026-05-19T10:07:18.741Z" }, - { url = "https://files.pythonhosted.org/packages/d1/7a/4a68d331aef8cf2e2393c14a3aacb635c62aa86071b0229899fb5baaa907/jiter-0.15.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:032396229564bca02440396bd327710719f724f5e7b7e9f7a8eb3faa4a2c2281", size = 375451, upload-time = "2026-05-19T10:07:20.208Z" }, { url = "https://files.pythonhosted.org/packages/7b/7e/1c445c2b6f0e30a274dc8082e0c3c7825411cce80d726bccd697c98cc8d3/jiter-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3d37768fce7f88dd2a8c6091f2325dea27d30d30d5c6e7a1c0f0af77723b708", size = 349428, upload-time = "2026-05-19T10:07:22.372Z" }, - { url = "https://files.pythonhosted.org/packages/00/94/e20d38984fc17a636371bffd2ae0f698124fdc8e75ef969cd2da6ba7cea7/jiter-0.15.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:2c9cb907439d20bd0c7d7565ca01ee52234203208433749bae5b516907526928", size = 355405, upload-time = "2026-05-19T10:07:23.916Z" }, - { url = "https://files.pythonhosted.org/packages/94/fa/4d09f814779d0ea80a28ed8e4c6662ec9a4a8ecef0ac52190ebac6262d14/jiter-0.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9100ddbec09741cc66feb0fc6773f8bdbd0e3c345689368f260082ff85dcc0cd", size = 393688, upload-time = "2026-05-19T10:07:25.854Z" }, - { url = "https://files.pythonhosted.org/packages/54/9d/8eb5d4fb8bf7e93a75964a5da71a75c67c864baf7fa3f98598187b3c7e57/jiter-0.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ae1b0d82ac2d987f9ea512b1c9adfcc71a28de3dea3a6039b54d76cffda9901e", size = 520853, upload-time = "2026-05-19T10:07:27.303Z" }, { url = "https://files.pythonhosted.org/packages/e7/2c/5e07874e59e623a943a0acf1552a80d05b70f31b402287a8fc6d7ec634c7/jiter-0.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8020c99ec13a7db2b6f96cbe82ef4721c88b426a4892f27478044af0284615ef", size = 551016, upload-time = "2026-05-19T10:07:28.846Z" }, - { url = "https://files.pythonhosted.org/packages/22/ed/d2d34422143474cadc15b60d482b1c35683dbc5c63c24346ddd0df09bcaf/jiter-0.15.0-cp311-cp311-win32.whl", hash = "sha256:42bfb257930800cf43e7c62c832402c704ab60797c992faf88d20e903eac8f32", size = 209518, upload-time = "2026-05-19T10:07:30.431Z" }, - { url = "https://files.pythonhosted.org/packages/1d/7d/52778b930e5cc3e52a37d950b1c10494244308b4329b25a0ff0d88303a81/jiter-0.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:860a74063284a2ae9bfedd694f299cc2c68e2696c5f3d440cc9d18bb81b9dd04", size = 200565, upload-time = "2026-05-19T10:07:32.125Z" }, - { url = "https://files.pythonhosted.org/packages/3b/4f/d9b4067feb69b3fa6eb0488e1b59e2ad5b463fe39f59e527eab2aca00bb0/jiter-0.15.0-cp311-cp311-win_arm64.whl", hash = "sha256:37a10c377ce3a4a85f4a67f28b7afe093154cde77eaf248a72e856aa08b4d865", size = 195488, upload-time = "2026-05-19T10:07:33.846Z" }, { url = "https://files.pythonhosted.org/packages/65/43/1fc62172aa98b50a7de9a25554060db510f85c89cfbed0dfe13e1907a139/jiter-0.15.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:411fa4dfa5a7ae3d11491027ffb9beadec3996010a986862db70d91abba1c750", size = 305585, upload-time = "2026-05-19T10:09:35.995Z" }, { url = "https://files.pythonhosted.org/packages/e8/c4/dd58fcd9e2df83666e5c1c1347bef58ce919cd8efc3ffa38aeea62ce493b/jiter-0.15.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:2b0074e2f56eb2dacca1689760fd2852a068f85a0547a157b82cb4cafeb6768b", size = 306936, upload-time = "2026-05-19T10:09:37.435Z" }, - { url = "https://files.pythonhosted.org/packages/39/86/b695e16f1180c07f43ea98e73ecd21cf63fa2e1b0c1103739013784d11ae/jiter-0.15.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:913d02d29c9606643418d9ccfc3b72492ab25a6bf7889934e09a3490f8d3438b", size = 342453, upload-time = "2026-05-19T10:09:39.294Z" }, { url = "https://files.pythonhosted.org/packages/34/56/55d76614af37fe3f22a3347d1e410d2a15da581997cb2da499a625000bb5/jiter-0.15.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b15d3ec9b0449c40e85319bdb4caa8b77ab526e74f5532ed94bec15e2f66822c", size = 345606, upload-time = "2026-05-19T10:09:40.727Z" }, ] +[[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.5.3" +version = "1.4.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/f2/d34e8b3a08a9cc79a50b2208a93dce981fe615b64d5a4d4abee421d898df/joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3", size = 331603, upload-time = "2025-12-15T08:41:46.427Z" } +sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621, upload-time = "2024-05-02T12:15:05.765Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713", size = 309071, upload-time = "2025-12-15T08:41:44.973Z" }, + { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817, upload-time = "2024-05-02T12:15:00.765Z" }, ] [[package]] @@ -1143,7 +1230,7 @@ name = "jsonpatch" version = "1.33" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jsonpointer" }, + { name = "jsonpointer", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/42/78/18813351fe5d63acad16aec57f94ec2b70a09e53ca98145589e185423873/jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c", size = 21699, upload-time = "2023-06-26T12:07:29.144Z" } wheels = [ @@ -1164,11 +1251,10 @@ name = "jsonschema" version = "4.26.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "attrs" }, - { name = "jsonschema-specifications" }, - { name = "referencing" }, - { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "attrs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "jsonschema-specifications", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "referencing", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "rpds-py", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } wheels = [ @@ -1180,100 +1266,140 @@ name = "jsonschema-specifications" version = "2025.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "referencing" }, + { name = "referencing", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, ] +[[package]] +name = "kiwisolver" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/67/9c61eccb13f0bdca9307614e782fec49ffdde0f7a2314935d489fa93cd9c/kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a", size = 103482, upload-time = "2026-03-09T13:15:53.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/dd/a495a9c104be1c476f0386e714252caf2b7eca883915422a64c50b88c6f5/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9eed0f7edbb274413b6ee781cca50541c8c0facd3d6fd289779e494340a2b85c", size = 122798, upload-time = "2026-03-09T13:12:58.963Z" }, + { url = "https://files.pythonhosted.org/packages/11/60/37b4047a2af0cf5ef6d8b4b26e91829ae6fc6a2d1f74524bcb0e7cd28a32/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb", size = 66216, upload-time = "2026-03-09T13:13:00.155Z" }, + { url = "https://files.pythonhosted.org/packages/0a/aa/510dc933d87767584abfe03efa445889996c70c2990f6f87c3ebaa0a18c5/kiwisolver-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac", size = 63911, upload-time = "2026-03-09T13:13:01.671Z" }, + { url = "https://files.pythonhosted.org/packages/80/46/bddc13df6c2a40741e0cc7865bb1c9ed4796b6760bd04ce5fae3928ef917/kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27", size = 1438209, upload-time = "2026-03-09T13:13:03.385Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e1/65584da5356ed6cb12c63791a10b208860ac40a83de165cb6a6751a686e3/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8c63c91f95173f9c2a67c7c526b2cea976828a0e7fced9cdcead2802dc10f8a4", size = 2270718, upload-time = "2026-03-09T13:13:19.421Z" }, + { url = "https://files.pythonhosted.org/packages/e9/eb/5fcbbbf9a0e2c3a35effb88831a483345326bbc3a030a3b5b69aee647f84/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ec4c85dc4b687c7f7f15f553ff26a98bfe8c58f5f7f0ac8905f0ba4c7be60232", size = 59532, upload-time = "2026-03-09T13:15:47.047Z" }, + { url = "https://files.pythonhosted.org/packages/c3/9b/e17104555bb4db148fd52327feea1e96be4b88e8e008b029002c281a21ab/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:12e91c215a96e39f57989c8912ae761286ac5a9584d04030ceb3368a357f017a", size = 57420, upload-time = "2026-03-09T13:15:48.199Z" }, + { url = "https://files.pythonhosted.org/packages/48/44/2b5b95b7aa39fb2d8d9d956e0f3d5d45aef2ae1d942d4c3ffac2f9cfed1a/kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be4a51a55833dc29ab5d7503e7bcb3b3af3402d266018137127450005cdfe737", size = 79892, upload-time = "2026-03-09T13:15:49.694Z" }, +] + [[package]] name = "langchain" -version = "0.3.18" +version = "1.3.10" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohttp" }, - { name = "async-timeout", marker = "python_full_version < '3.11'" }, - { name = "langchain-core" }, - { name = "langchain-text-splitters" }, - { name = "langsmith" }, - { name = "numpy" }, - { name = "pydantic" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "sqlalchemy" }, - { name = "tenacity" }, + { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langgraph", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/87/23/612d99c74889f672fe349f43a458a42e449650ebd57073b9e96e0b6b2253/langchain-0.3.18.tar.gz", hash = "sha256:311ac227a995545ff7c3f74c7767930c5349edef0b39f19d3105b86d39316b69", size = 10223807, upload-time = "2025-02-07T18:43:39.882Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/f6/e351d85c7828b9b90c5729de66170457c882c754efef0712904cfcd3192d/langchain-1.3.10.tar.gz", hash = "sha256:fd6ac9da86c479e4ff376e772d9e17a9232bd3113e9f2ddcb70cdc4bf7afc119", size = 632522, upload-time = "2026-06-18T19:43:00.86Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/93/83/a4b41a1cf8b22fd708104d50edf98b720aa28647d3083d83b8348927a786/langchain-0.3.18-py3-none-any.whl", hash = "sha256:1a6e629f02a25962aa5b16932e8f073248104a66804ed5af1f78618ad7c1d38d", size = 1010321, upload-time = "2025-02-07T18:43:37.341Z" }, + { url = "https://files.pythonhosted.org/packages/59/f6/a682e68d004a2e23cae6c5c42e3c0d071bc0e7768167bd12277992f096f9/langchain-1.3.10-py3-none-any.whl", hash = "sha256:5da67f21aa56119744ad51b3e46ffac570c88f4fae0876e3b1c6a1c4bc0e344e", size = 133038, upload-time = "2026-06-18T19:42:58.918Z" }, +] + +[[package]] +name = "langchain-classic" +version = "1.0.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langchain-text-splitters", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langsmith", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sqlalchemy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8d/65/6b5e8a7ff2f2968652c88a67dcecb925b9d8f0a0ce9458c76cd5a0dbd138/langchain_classic-1.0.8.tar.gz", hash = "sha256:ada0cc341a8a5b80fb24d73bdfaaeb849056ee2d8a41cc468355163fd3667484", size = 10557071, upload-time = "2026-06-10T21:27:54.866Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/9a/b8f5cb7490fdbf233088031fc69c9c747439d4097f67f196c1eb4869916d/langchain_classic-1.0.8-py3-none-any.whl", hash = "sha256:1a11ea7fbe630c4f2af2f3873d27718ceac9488cf32d0821030be7cf039a6213", size = 1041536, upload-time = "2026-06-10T21:27:52.767Z" }, ] [[package]] name = "langchain-community" -version = "0.3.17" +version = "0.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohttp" }, - { name = "dataclasses-json" }, - { name = "httpx-sse" }, - { name = "langchain" }, - { name = "langchain-core" }, - { name = "langsmith" }, - { name = "numpy" }, - { name = "pydantic-settings" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "sqlalchemy" }, - { name = "tenacity" }, + { name = "aiohttp", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "httpx-sse", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langchain-classic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langsmith", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "pydantic-settings", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sqlalchemy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tenacity", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0a/e6/03df441525516f351a56aa2f156c8636daa4849f479032706680d8121e86/langchain_community-0.3.17.tar.gz", hash = "sha256:d8547a3d4f8307950be88ca638cd6ab1abe2440d0012e401a172ba4a39aa8044", size = 33213782, upload-time = "2025-02-07T19:45:41.263Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/0c/e3aca1f2b1c5b95f8b87cb2b6e81a6f20d538c07a128419dc01cef0617b6/langchain_community-0.4.2.tar.gz", hash = "sha256:a99308160d53d7e9b5965ee665e5173709914338210089fd5788ad724432c21e", size = 33268708, upload-time = "2026-05-22T19:42:59.374Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/31/39c30cab465774835e2c18d3746587e6fd0c9f7265b1c6b1fcd2e1684dd2/langchain_community-0.3.17-py3-none-any.whl", hash = "sha256:13bbd87d681b0df67bafa294321613b13ac524f173c92f11048d40c74e585f0b", size = 2516904, upload-time = "2025-02-07T19:45:36.848Z" }, + { url = "https://files.pythonhosted.org/packages/8f/39/5d97e42a3e95dc2a6d71b2f902a3fae71786131e11d01bddb604accb0ebe/langchain_community-0.4.2-py3-none-any.whl", hash = "sha256:84dd8c5122532394d5b6849a5fc9995ef28e4f77227daeb09f24b3d942e9e466", size = 2364406, upload-time = "2026-05-22T19:42:57.103Z" }, ] [[package]] name = "langchain-core" -version = "0.3.35" +version = "1.4.8" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jsonpatch" }, - { name = "langsmith" }, - { name = "packaging" }, - { name = "pydantic" }, - { name = "pyyaml" }, - { name = "tenacity" }, - { name = "typing-extensions" }, + { name = "jsonpatch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langchain-protocol", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langsmith", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tenacity", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "uuid-utils", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/56/5c/5ed0aa88d0ffc52634b97dcd971d675cfc55072b28f7723bba2ef9432bad/langchain_core-0.3.35.tar.gz", hash = "sha256:328688228ece259da734417d477994a69cf8202dea9ed4271f2d792e3575c6fc", size = 525736, upload-time = "2025-02-12T18:16:19.116Z" } +sdist = { url = "https://files.pythonhosted.org/packages/12/e3/bea6d0080acf183332f24dcd74c208aee5857cf8f783c3fb0bd86027d8fb/langchain_core-1.4.8.tar.gz", hash = "sha256:5bf1f8411077c904182ad8f975943d36adcbf579c4e017b3a118b719229ebf9a", size = 957974, upload-time = "2026-06-18T19:39:23.636Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/63/be67b8ab4f4cf07b8da65a67ff72ea870ec8cf9f2e95e3a5b837a5604d1b/langchain_core-0.3.35-py3-none-any.whl", hash = "sha256:81a4097226e180fa6c64e2d2ab38dcacbbc23b64fc109fb15622910fe8951670", size = 413151, upload-time = "2025-02-12T18:16:16.729Z" }, + { url = "https://files.pythonhosted.org/packages/13/d6/bdf6f0481cc57ef300d6b1eb48cf1400c0409be715d6eb3cabadd1142a09/langchain_core-1.4.8-py3-none-any.whl", hash = "sha256:d84c28b05e3ba8d4271d0827aad5b592ccdaaf986e76768c23503f0a2045e8aa", size = 557416, upload-time = "2026-06-18T19:39:21.902Z" }, ] [[package]] name = "langchain-openai" -version = "0.3.5" +version = "1.3.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "langchain-core" }, - { name = "openai" }, - { name = "tiktoken" }, + { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "openai", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tiktoken", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fe/18/c7829a2ce2977d22db582d19b311d7dc3d100a51c32f5766517ee3474c26/langchain_openai-0.3.5.tar.gz", hash = "sha256:40cd5649b93b1af20a20e1cbee5a47628a77e15114a11f9b3f2ab08c7d1302bf", size = 255643, upload-time = "2025-02-11T19:25:22.581Z" } +sdist = { url = "https://files.pythonhosted.org/packages/93/4c/cf3c5a03f1d2e2e4367c1527231162a99d0f1c94113e1203c00469c860e4/langchain_openai-1.3.2.tar.gz", hash = "sha256:240917ae88d754b389a6f2ae06fa262c50c094eb4f576c27d560dff6b86c2f62", size = 3236213, upload-time = "2026-06-13T05:42:12.5Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/4a/18e98bb61e00f0553383fd14997a8d778999f5cf80109a74eb746a1f5919/langchain_openai-0.3.5-py3-none-any.whl", hash = "sha256:137a7514f11afeab26e5fc1eda3c2b96fbbb18a96d963ba256faecceb189ea71", size = 54982, upload-time = "2025-02-11T19:25:20.619Z" }, + { url = "https://files.pythonhosted.org/packages/03/21/cbf6c3786de881b214c8c6c9f61fe44c9c47608428676a5cd5c5b2b0cda5/langchain_openai-1.3.2-py3-none-any.whl", hash = "sha256:3d247f43bba9f85d32a374b1bdf3932a0d1e3c60913ebeadf68630de52add67e", size = 119775, upload-time = "2026-06-13T05:42:11.088Z" }, +] + +[[package]] +name = "langchain-protocol" +version = "0.0.18" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d2/59/b5959aea96faa9146e2e49a7a22882b3528c62efafe9a6a95beab30c2305/langchain_protocol-0.0.18.tar.gz", hash = "sha256:ec3e11782f1ed0c9db38e5a9ed01b0e7a0d3fba406faa8aef6594b73c56a63e6", size = 6150, upload-time = "2026-06-18T17:08:26.959Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/2e/d82db9eec13ad0f72e7aaad5c4bc730ab111934fdc83c85523206eb9b0a0/langchain_protocol-0.0.18-py3-none-any.whl", hash = "sha256:70b53a86fbf9cedc863555effe44da192ab02d556ddbf2cf95b8873adcf41b5a", size = 7221, upload-time = "2026-06-18T17:08:25.996Z" }, ] [[package]] name = "langchain-text-splitters" -version = "0.3.6" +version = "1.1.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "langchain-core" }, + { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0d/33/89912a07c63e4e818f9b0c8d52e4f9d600c97beca8a91db8c9dae6a1b28f/langchain_text_splitters-0.3.6.tar.gz", hash = "sha256:c537972f4b7c07451df431353a538019ad9dadff7a1073ea363946cea97e1bee", size = 40545, upload-time = "2025-02-06T21:19:16.21Z" } +sdist = { url = "https://files.pythonhosted.org/packages/26/9f/6c545900fefb7b00ddfa3f16b80d61338a0ec68c31c5451eeeab99082760/langchain_text_splitters-1.1.2.tar.gz", hash = "sha256:782a723db0a4746ac91e251c7c1d57fd23636e4f38ed733074e28d7a86f41627", size = 293580, upload-time = "2026-04-16T14:20:39.162Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/f8/6b82af988e65af9697f6a2f25373fb173fd32d48b62772a8773c5184c870/langchain_text_splitters-0.3.6-py3-none-any.whl", hash = "sha256:e5d7b850f6c14259ea930be4a964a65fa95d9df7e1dbdd8bad8416db72292f4e", size = 31197, upload-time = "2025-02-06T21:19:15.046Z" }, + { url = "https://files.pythonhosted.org/packages/d3/26/1ef06f56198d631296d646a6223de35bcc6cf9795ceb2442816bc963b84c/langchain_text_splitters-1.1.2-py3-none-any.whl", hash = "sha256:a2de0d799ff31886429fd6e2e0032df275b60ec817c19059a7b46181cc1c2f10", size = 35903, upload-time = "2026-04-16T14:20:38.243Z" }, ] [[package]] @@ -1285,20 +1411,84 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dd/c1/d10b371bcba7abce05e2b33910e39c33cfa496a53f13640b7b8e10bb4d2b/langcodes-3.5.1-py3-none-any.whl", hash = "sha256:b6a9c25c603804e2d169165091d0cdb23934610524a21d226e4f463e8e958a72", size = 183050, upload-time = "2025-12-02T16:21:59.954Z" }, ] +[[package]] +name = "langgraph" +version = "1.2.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langgraph-checkpoint", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langgraph-prebuilt", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langgraph-sdk", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "xxhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/7a/ea09b05bb0cbddfa43bd34fc581357e87fc3f21a751cc0d419688c3106da/langgraph-1.2.6.tar.gz", hash = "sha256:f9b45a34f13930c94d96cdb76277447ad2cc70ec2d18cd2764d7fdadb36cdc1b", size = 714400, upload-time = "2026-06-18T20:58:21.514Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/32/772db1b00a9fe42f50320d1aa20caefb76e621eff1f7218b9918093d631d/langgraph-1.2.6-py3-none-any.whl", hash = "sha256:1cf94d3ca124f84f77ce408fa1b06c3dee680a8aafffe364a8fd5d7d03eb8695", size = 246132, upload-time = "2026-06-18T20:58:20.335Z" }, +] + +[[package]] +name = "langgraph-checkpoint" +version = "4.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "ormsgpack", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/47/886af6f886f0bff2273164a45f008694e48a96ff3cd25ff0228f2aa9480e/langgraph_checkpoint-4.1.1.tar.gz", hash = "sha256:6c2bdb530c91f91d7d9c1bd100925d0fc4f498d418c17f3587d1526279482a25", size = 184020, upload-time = "2026-05-22T16:57:38.503Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/b4/71425e3e38be92611300b9cc5e46a5bf98ab23f5ea8a75b73d02a2f1413c/langgraph_checkpoint-4.1.1-py3-none-any.whl", hash = "sha256:25d29144b082827218e7bc3f1e9b0566a4bb007895cd6cc26f66a8428739f56e", size = 56212, upload-time = "2026-05-22T16:57:37.203Z" }, +] + +[[package]] +name = "langgraph-prebuilt" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langgraph-checkpoint", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/29/66/ed9b93f56bc17ef22d551892f0ac2b225a97fe0fcf23a511b857f70d590b/langgraph_prebuilt-1.1.0.tar.gz", hash = "sha256:3c579cf6eed2d17f9c157c2d0fcaddcd8688524e7022d3b22b37a3bf4589d528", size = 178833, upload-time = "2026-05-12T03:37:49.332Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/43/3fe1a700b8490ed02679cdbbc8c915eb23a092faf496c9c1118abcd10be3/langgraph_prebuilt-1.1.0-py3-none-any.whl", hash = "sha256:51e311747d755b751d5c6b39b0c1446124d3a7643d2515017e6714b323508fc9", size = 41043, upload-time = "2026-05-12T03:37:48.007Z" }, +] + +[[package]] +name = "langgraph-sdk" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langchain-protocol", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "orjson", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "websockets", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b4/2b/bd8ac26d4e97f6df88ef05ce5b6a38945a3903e1025d926f4752aa88aa97/langgraph_sdk-0.4.2.tar.gz", hash = "sha256:b88f0f5f6328ac0680d6790614a905b2bcfa257f2276dba4e38f0e86db0aa738", size = 348327, upload-time = "2026-06-01T17:51:19.856Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/05/aac507337cceae773c2cc9ab91eb6301963af7aeeb55b4217a00e15aff17/langgraph_sdk-0.4.2-py3-none-any.whl", hash = "sha256:75fa5096c1177ce39c847096a8fe3745ffd480ddb412995f836e9f5f884c43dd", size = 160521, upload-time = "2026-06-01T17:51:18.849Z" }, +] + [[package]] name = "langsmith" -version = "0.2.11" +version = "0.8.17" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "httpx" }, - { name = "orjson", marker = "platform_python_implementation != 'PyPy'" }, - { name = "pydantic" }, - { name = "requests" }, - { name = "requests-toolbelt" }, + { name = "httpx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "orjson", marker = "(platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux') or (platform_python_implementation != 'PyPy' and sys_platform == 'darwin')" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests-toolbelt", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "uuid-utils", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "websockets", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "xxhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "zstandard", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ae/03/dd26e203a6cc4df053b3f2a3d40bd17cce7b495f5fab2c05ff8005303b68/langsmith-0.2.11.tar.gz", hash = "sha256:edf070349dbfc63dc4fc30e22533a11d77768e99ef269399b221c48fee25c737", size = 314724, upload-time = "2025-01-17T00:25:37.495Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ad/aa/30295e5b27b86a607aaa21390cb1e10c84203916fdcf953ba0ff94a1dfaa/langsmith-0.8.17.tar.gz", hash = "sha256:dfedd6a2558cf8e420fdf8b9ee735537f02d97c329197c9499a5c7ecbe0f18fb", size = 4525665, upload-time = "2026-06-18T20:56:20.102Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/5b/b17c0c3dea1a76d75a386fde192221de8fccf3110f200a08aefd6666cfd7/langsmith-0.2.11-py3-none-any.whl", hash = "sha256:084cf66a7f093c25e6b30fb4005008ec5fa9843110e2f0b265ce133c6a0225e6", size = 326892, upload-time = "2025-01-17T00:25:33.456Z" }, + { url = "https://files.pythonhosted.org/packages/09/04/3dddd1e331e000f942b174a7bf3382422dc2a8414ef8786efb2e9f9f5d6d/langsmith-0.8.17-py3-none-any.whl", hash = "sha256:62796120a46781a8c717b3d2e846e94343334b57bd504cc10b61a5d2e4739c5a", size = 507791, upload-time = "2026-06-18T20:56:17.959Z" }, ] [[package]] @@ -1310,50 +1500,58 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036, upload-time = "2024-08-13T19:48:58.603Z" }, ] +[[package]] +name = "license-expression" +version = "30.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "boolean-py", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/71/d89bb0e71b1415453980fd32315f2a037aad9f7f70f695c7cec7035feb13/license_expression-30.4.4.tar.gz", hash = "sha256:73448f0aacd8d0808895bdc4b2c8e01a8d67646e4188f887375398c761f340fd", size = 186402, upload-time = "2025-07-22T11:13:32.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-py3-none-any.whl", hash = "sha256:421788fdcadb41f049d2dc934ce666626265aeccefddd25e162a26f23bcbf8a4", size = 120615, upload-time = "2025-07-22T11:13:31.217Z" }, +] + [[package]] name = "llguidance" -version = "0.7.30" +version = "1.7.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bf/38/d1ef3ae08d8d857e5e0690c5b1e07bf7eb4a1cae5881d87215826dc6cadb/llguidance-0.7.30.tar.gz", hash = "sha256:e93bf75f2b6e48afb86a5cee23038746975e1654672bf5ba0ae75f7d4d4a2248", size = 1055528, upload-time = "2025-06-23T00:23:49.247Z" } +sdist = { url = "https://files.pythonhosted.org/packages/da/91/6bc8bb503dc259e46d253b5424385a54fe06c38a4c7a12befe69a3c2455a/llguidance-1.7.6.tar.gz", hash = "sha256:db7febbe412ed2015501904646750071d7e00e6df7f85c4b956ad4f206fd2df7", size = 1156574, upload-time = "2026-06-03T20:13:25.316Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/e1/694c89986fcae7777184fc8b22baa0976eba15a6847221763f6ad211fc1f/llguidance-0.7.30-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c80af02c118d2b0526bcecaab389af2ed094537a069b0fc724cd2a2f2ba3990f", size = 3327974, upload-time = "2025-06-23T00:23:47.556Z" }, - { url = "https://files.pythonhosted.org/packages/fd/77/ab7a548ae189dc23900fdd37803c115c2339b1223af9e8eb1f4329b5935a/llguidance-0.7.30-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:00a256d532911d2cf5ba4ef63e182944e767dd2402f38d63002016bc37755958", size = 3210709, upload-time = "2025-06-23T00:23:45.872Z" }, - { url = "https://files.pythonhosted.org/packages/9c/5b/6a166564b14f9f805f0ea01ec233a84f55789cb7eeffe1d6224ccd0e6cdd/llguidance-0.7.30-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af8741c867e4bc7e42f7cdc68350c076b4edd0ca10ecefbde75f15a9f6bc25d0", size = 14867038, upload-time = "2025-06-23T00:23:39.571Z" }, - { url = "https://files.pythonhosted.org/packages/af/80/5a40b9689f17612434b820854cba9b8cabd5142072c491b5280fe5f7a35e/llguidance-0.7.30-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9edc409b9decd6cffba5f5bf3b4fbd7541f95daa8cbc9510cbf96c6ab1ffc153", size = 15004926, upload-time = "2025-06-23T00:23:43.965Z" }, - { url = "https://files.pythonhosted.org/packages/99/47/58e49a118b514855b245f8a962c6aaf9a5cc95a0f61eac7e230e691c7b7e/llguidance-0.7.30-cp39-abi3-win_amd64.whl", hash = "sha256:05234ecceea7c9c6ff13b9739112043173a3bcb88cae860249b20335a07b3075", size = 2796878, upload-time = "2025-06-23T00:23:51Z" }, + { url = "https://files.pythonhosted.org/packages/1a/64/d74336f22242ef94356a456057d4ff1be7c1bc9c7dbc867171c6982a5512/llguidance-1.7.6-cp39-abi3-manylinux_2_31_x86_64.whl", hash = "sha256:ceec951d29a74309984e3be0fe7f5f56c1362434cd937abd517b259a60908b1e", size = 3074809, upload-time = "2026-06-03T20:13:15.498Z" }, ] [[package]] name = "llvmlite" -version = "0.44.0" +version = "0.47.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/89/6a/95a3d3610d5c75293d5dbbb2a76480d5d4eeba641557b69fe90af6c5b84e/llvmlite-0.44.0.tar.gz", hash = "sha256:07667d66a5d150abed9157ab6c0b9393c9356f229784a4385c02f99e94fc94d4", size = 171880, upload-time = "2025-01-20T11:14:41.342Z" } +sdist = { url = "https://files.pythonhosted.org/packages/01/88/a8952b6d5c21e74cbf158515b779666f692846502623e9e3c39d8e8ba25f/llvmlite-0.47.0.tar.gz", hash = "sha256:62031ce968ec74e95092184d4b0e857e444f8fdff0b8f9213707699570c33ccc", size = 193614, upload-time = "2026-03-31T18:29:53.497Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/75/d4863ddfd8ab5f6e70f4504cf8cc37f4e986ec6910f4ef8502bb7d3c1c71/llvmlite-0.44.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:9fbadbfba8422123bab5535b293da1cf72f9f478a65645ecd73e781f962ca614", size = 28132306, upload-time = "2025-01-20T11:12:18.634Z" }, - { url = "https://files.pythonhosted.org/packages/37/d9/6e8943e1515d2f1003e8278819ec03e4e653e2eeb71e4d00de6cfe59424e/llvmlite-0.44.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cccf8eb28f24840f2689fb1a45f9c0f7e582dd24e088dcf96e424834af11f791", size = 26201096, upload-time = "2025-01-20T11:12:24.544Z" }, - { url = "https://files.pythonhosted.org/packages/aa/46/8ffbc114def88cc698906bf5acab54ca9fdf9214fe04aed0e71731fb3688/llvmlite-0.44.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7202b678cdf904823c764ee0fe2dfe38a76981f4c1e51715b4cb5abb6cf1d9e8", size = 42361859, upload-time = "2025-01-20T11:12:31.839Z" }, - { url = "https://files.pythonhosted.org/packages/30/1c/9366b29ab050a726af13ebaae8d0dff00c3c58562261c79c635ad4f5eb71/llvmlite-0.44.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40526fb5e313d7b96bda4cbb2c85cd5374e04d80732dd36a282d72a560bb6408", size = 41184199, upload-time = "2025-01-20T11:12:40.049Z" }, - { url = "https://files.pythonhosted.org/packages/69/07/35e7c594b021ecb1938540f5bce543ddd8713cff97f71d81f021221edc1b/llvmlite-0.44.0-cp310-cp310-win_amd64.whl", hash = "sha256:41e3839150db4330e1b2716c0be3b5c4672525b4c9005e17c7597f835f351ce2", size = 30332381, upload-time = "2025-01-20T11:12:47.054Z" }, - { url = "https://files.pythonhosted.org/packages/b5/e2/86b245397052386595ad726f9742e5223d7aea999b18c518a50e96c3aca4/llvmlite-0.44.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:eed7d5f29136bda63b6d7804c279e2b72e08c952b7c5df61f45db408e0ee52f3", size = 28132305, upload-time = "2025-01-20T11:12:53.936Z" }, - { url = "https://files.pythonhosted.org/packages/ff/ec/506902dc6870249fbe2466d9cf66d531265d0f3a1157213c8f986250c033/llvmlite-0.44.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ace564d9fa44bb91eb6e6d8e7754977783c68e90a471ea7ce913bff30bd62427", size = 26201090, upload-time = "2025-01-20T11:12:59.847Z" }, - { url = "https://files.pythonhosted.org/packages/99/fe/d030f1849ebb1f394bb3f7adad5e729b634fb100515594aca25c354ffc62/llvmlite-0.44.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5d22c3bfc842668168a786af4205ec8e3ad29fb1bc03fd11fd48460d0df64c1", size = 42361858, upload-time = "2025-01-20T11:13:07.623Z" }, - { url = "https://files.pythonhosted.org/packages/d7/7a/ce6174664b9077fc673d172e4c888cb0b128e707e306bc33fff8c2035f0d/llvmlite-0.44.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f01a394e9c9b7b1d4e63c327b096d10f6f0ed149ef53d38a09b3749dcf8c9610", size = 41184200, upload-time = "2025-01-20T11:13:20.058Z" }, - { url = "https://files.pythonhosted.org/packages/5f/c6/258801143975a6d09a373f2641237992496e15567b907a4d401839d671b8/llvmlite-0.44.0-cp311-cp311-win_amd64.whl", hash = "sha256:d8489634d43c20cd0ad71330dde1d5bc7b9966937a263ff1ec1cebb90dc50955", size = 30331193, upload-time = "2025-01-20T11:13:26.976Z" }, + { url = "https://files.pythonhosted.org/packages/46/27/5799b020e4cdfb25a7c951c06a96397c135efcdc21b78d853bbd9c814c7d/llvmlite-0.47.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ca14f02e29134e837982497959a8e2193d6035235de1cb41a9cb2bd6da4eedbb", size = 56275177, upload-time = "2026-03-31T18:28:31.01Z" }, ] [[package]] name = "lm-format-enforcer" -version = "0.10.12" +version = "0.11.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "interegular" }, - { name = "packaging" }, - { name = "pydantic" }, - { name = "pyyaml" }, + { name = "interegular", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "packaging", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyyaml", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/e0/bdbfad8f5d319de5d05cc2b70d579b49eb8ce3a09989cd0999b8c138c068/lm_format_enforcer-0.10.12.tar.gz", hash = "sha256:130bd7ce8a6b224f25b6314ba9ae78ee4b48594db1767c74391c9182e2902a6c", size = 39481, upload-time = "2025-08-04T21:13:45.727Z" } +sdist = { url = "https://files.pythonhosted.org/packages/84/d5/41cd417ba7dfdbbcfe46cebf81fb3dfd7c591b89897560ad05bb410a465d/lm_format_enforcer-0.11.3.tar.gz", hash = "sha256:e68081c108719cce284a9bcc889709b26ffb085a1945b5eba3a12cfa96d528da", size = 40258, upload-time = "2025-08-24T19:37:47.527Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/57/1c/7bb80fe2dff9a9c38b180571ca867f518eb9110f79d4b670ea124e153680/lm_format_enforcer-0.10.12-py3-none-any.whl", hash = "sha256:267c2b421c77f7cd51ac2e0e3af8db278a373704d834b49ff55f18a2c05e9800", size = 44327, upload-time = "2025-08-04T21:13:44.492Z" }, + { url = "https://files.pythonhosted.org/packages/a0/ef/11292bb0b85cf4c93447cab5a29f64576ed14d3ab4280e35ddd23486594a/lm_format_enforcer-0.11.3-py3-none-any.whl", hash = "sha256:cf586350875def1ae7a8fba84fcbbfc8371424b6c9d05c1fcba70aa233fbf06f", size = 45418, upload-time = "2025-08-24T19:37:46.325Z" }, +] + +[[package]] +name = "loguru" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, ] [[package]] @@ -1361,7 +1559,7 @@ name = "markdown-it-py" version = "4.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mdurl" }, + { name = "mdurl", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } wheels = [ @@ -1374,40 +1572,61 @@ 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/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, - { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, - { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, - { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, - { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, - { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, - { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, - { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, - { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, - { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, - { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, { 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" }, ] [[package]] -name = "marshmallow" -version = "3.26.2" +name = "matplotlib" +version = "3.11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "packaging" }, + { name = "contourpy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "cycler", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "fonttools", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "kiwisolver", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pillow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyparsing", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "python-dateutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/79/de6c16cc902f4fc372236926b0ce2ab7845268dcc30fb2fbb7f71b418631/marshmallow-3.26.2.tar.gz", hash = "sha256:bbe2adb5a03e6e3571b573f42527c6fe926e17467833660bebd11593ab8dfd57", size = 222095, upload-time = "2025-12-22T06:53:53.309Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/24/080c99d223d158d3a8902769269ab6da5b50f7a0e6e072513907e02b7a6c/matplotlib-3.11.0.tar.gz", hash = "sha256:68c0c7be01b30dcca3638934f7f591df73401235cbdbf0d1ab1c71e7db7f8b57", size = 33251176, upload-time = "2026-06-12T02:29:15.508Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/be/2f/5108cb3ee4ba6501748c4908b908e55f42a5b66245b4cfe0c99326e1ef6e/marshmallow-3.26.2-py3-none-any.whl", hash = "sha256:013fa8a3c4c276c24d26d84ce934dc964e2aa794345a0f8c7e5a7191482c8a73", size = 50964, upload-time = "2025-12-22T06:53:51.801Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a2/78f662f1b18968531f67d3fcde1b7ea8496920bacd4f16ddb5b79d112e46/matplotlib-3.11.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f857524b442f0f36e641868ce2171aafa88cb0bc0644f4e1d8a5df9b32649fef", size = 9436261, upload-time = "2026-06-12T02:27:34.161Z" }, + { url = "https://files.pythonhosted.org/packages/5e/92/044f1de43901310202f4c79acf4f141be53b2ca8d8380e2fcefb3d523a75/matplotlib-3.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:57baa92fdc82948ed716eae6d2579d4d6f40965cd8d2f416755b4a72580a3233", size = 9264669, upload-time = "2026-06-12T02:27:37.413Z" }, + { url = "https://files.pythonhosted.org/packages/53/f4/f0b4f9ba7ec14a7af8151f3ad71ecfe3561e6ba38cfab1db3681ba4ca112/matplotlib-3.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:630eee0e67d35cce2019a0e670719f4816e3b86aff0fa72729f6c69786fceb45", size = 10021076, upload-time = "2026-06-12T02:27:39.926Z" }, + { url = "https://files.pythonhosted.org/packages/07/74/0a3683802037d8cd013144d77c247219b47f2aabace6fdde74faa12bacf7/matplotlib-3.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4d7aea652b58e686444079be3376ef546bffa1eee9b9bb9c472b9fcf6cf410d3", size = 10913103, upload-time = "2026-06-12T02:27:44.827Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c2/f5da6cd37ed6871f5c9b3c0507ddb69f14d6c36fac4541e4e0c60cb8cdfc/matplotlib-3.11.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:81ae77077a1e16d37a5b61096ccb07c8d90a99b518fa8256b8f21578932f2f62", size = 9434094, upload-time = "2026-06-12T02:29:09.135Z" }, + { url = "https://files.pythonhosted.org/packages/f8/07/56f66906e0f87a0c6d0d0acbd34dbc9432b1931d8f26ef618bd6f92932a9/matplotlib-3.11.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ddef37840695f5eef65f9f070fe2d2f510f584c2156203f9f622a5b0584efffd", size = 9262183, upload-time = "2026-06-12T02:29:11.283Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d8/c4ecab06b7ea36a570c4f3bd2d48d1799fd5d9174470e45c2194199431e7/matplotlib-3.11.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cf662e5ac5707658cb931e19972c4bd99f7b4f8b7bf79d3c821d239fa6b71e64", size = 10015653, upload-time = "2026-06-12T02:29:13.251Z" }, +] + +[[package]] +name = "mcp" +version = "1.28.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx-sse", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jsonschema", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic-settings", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyjwt", extra = ["crypto"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "python-multipart", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "sse-starlette", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "starlette", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-inspection", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "uvicorn", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c1/ee/94c6c50ffc5b5cf4737052275d11b57367f32d1a8516e31dcd60591b3916/mcp-1.28.0.tar.gz", hash = "sha256:559d3f9943674cafbe5744c5d3794f3237e8b47f9bbc58e20c0fad680d8487c2", size = 636040, upload-time = "2026-06-16T21:37:17.996Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/e1/4c1dc1fbb688641a712d34650c3d58bbbdcb314ddb75bc5817bbf33515a4/mcp-1.28.0-py3-none-any.whl", hash = "sha256:9c1e7cf3a9125557e418ecd4fed8e9adddce81b0dfdae4d6601d700f5beb71a4", size = 221959, upload-time = "2026-06-16T21:37:16.579Z" }, ] [[package]] @@ -1424,11 +1643,11 @@ name = "medspacy" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jsonschema" }, - { name = "medspacy-quickumls" }, - { name = "pyrush" }, - { name = "pysbd" }, - { name = "spacy" }, + { name = "jsonschema", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "medspacy-quickumls", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyrush", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pysbd", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "spacy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/91/82/822c73438eac61351361f3de7278e381c42df81740d2dca363adc736e74d/medspacy-1.3.1.tar.gz", hash = "sha256:976599d9446e98018b311951cfa926be5a59d0c140967b828fe98bc4bada40fe", size = 244637, upload-time = "2024-11-21T22:19:07.592Z" } @@ -1437,14 +1656,15 @@ name = "medspacy-quickumls" version = "3.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "medspacy-unqlite" }, - { name = "nltk" }, - { name = "numpy" }, - { name = "pysimstring" }, - { name = "pytest" }, - { name = "six" }, - { name = "spacy" }, - { name = "unidecode" }, + { name = "medspacy-unqlite", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "nltk", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "pysimstring", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pytest", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "six", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "spacy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "unidecode", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/91/a6/2fbf9b7dd475a4797f636f6bec2af0077f1c6ae4c27ca667858cb6fd5ad5/medspacy_quickumls-3.2.tar.gz", hash = "sha256:eeea4c94f4e46529470b9de894bac3384fe883f843d321cd578a62f880439165", size = 69852, upload-time = "2024-05-14T15:17:43.182Z" } @@ -1454,18 +1674,10 @@ version = "0.9.8" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/9a/e2/a618321ed44add90c7777f7e894a0dce8fe1336b15032ba32f04d100a174/medspacy_unqlite-0.9.8.tar.gz", hash = "sha256:8bcd311b7038346d8803a1d9c50823ef3c99713ffb0a18f22d17ba6c9563a2eb", size = 636272, upload-time = "2025-05-16T08:07:18.957Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/20/aa225f105a6de9d5fbc1e4a5ead7ec8b85489cc17bdf5bb6cf2658d238dc/medspacy_unqlite-0.9.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39a5bda42ea1930e5153458739db545b61a0517487fc949f4855b0bff2f8168a", size = 349653, upload-time = "2025-05-16T09:17:18.852Z" }, - { url = "https://files.pythonhosted.org/packages/42/07/03024cf0ae1462121171c99a23a614749ddf7f58288a8907e4a31fedec88/medspacy_unqlite-0.9.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:96424f7accbe217b00ab484dd49f234ad45d835f2dea529004c8c9523a9ae511", size = 328738, upload-time = "2025-05-16T09:17:19.825Z" }, - { url = "https://files.pythonhosted.org/packages/c0/cc/8acbd4ad7a35b5db16769a5f597c51a0cc62571d21b1f95afa59c50ebc74/medspacy_unqlite-0.9.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:552799aebf8f29bbb7735214fc9990c9ab2d2bc08f189c6e2500abb3491c438c", size = 418121, upload-time = "2025-05-16T09:17:21.296Z" }, - { url = "https://files.pythonhosted.org/packages/05/6b/ec5dd155e8c92e5c84a44c327054c04488be1e398330ed7c933f1845b249/medspacy_unqlite-0.9.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:91bc3281c23ed31a1a691b4f26002ea7d42c1e9d8fa9dbeee19a57324be83205", size = 426041, upload-time = "2025-05-16T09:17:22.312Z" }, - { url = "https://files.pythonhosted.org/packages/d0/84/ae672840c4f88922867158d78bc1aa3ccfde75dd463ad517bb5dce3e19fc/medspacy_unqlite-0.9.8-cp310-cp310-win32.whl", hash = "sha256:13f8b55b4f5150dcd765779abd54b3c8a6f38ef57494cecf1eaf19ac546c902b", size = 248420, upload-time = "2025-05-16T09:17:23.696Z" }, - { url = "https://files.pythonhosted.org/packages/ed/c8/0b81ab6cb3b71ea17da5dbe5b0f2b0d5dfe5de66216374b89fc9c8aa4f5b/medspacy_unqlite-0.9.8-cp310-cp310-win_amd64.whl", hash = "sha256:41c69c542d15ec650e219e1cb6033deb5f466160b95b6ff6b66feefab77069f0", size = 314572, upload-time = "2025-05-16T09:17:24.951Z" }, { url = "https://files.pythonhosted.org/packages/6e/96/0b40d77d0994e5f7ffda86911f19d769c65fad840804932226a8c624f08f/medspacy_unqlite-0.9.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3dbb26ca6219dcb57dfe518395009c1ce75d43202e3cbd725bfa9c5c071b8857", size = 349435, upload-time = "2025-05-16T09:17:26.331Z" }, { url = "https://files.pythonhosted.org/packages/ed/c3/7f25aa5185a0c534ab1638184fb5defbe45edefce72d2de138121bfbcfa7/medspacy_unqlite-0.9.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db392053fcf3ce76beb89982eac078837dd486247770e350b2dd759b986ff45e", size = 327939, upload-time = "2025-05-16T09:17:27.308Z" }, { url = "https://files.pythonhosted.org/packages/71/e2/c77a817c18ac1b2d584e46068ae481855b03307a93c88769833ab8b0877a/medspacy_unqlite-0.9.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f814537abd391fe5d057738c96192dd0dbe4cc61135db939112251ed92bdb8ed", size = 415399, upload-time = "2025-05-16T05:26:17.439Z" }, { url = "https://files.pythonhosted.org/packages/cf/8b/16b95bc395d14edec734530be1992934df92636bfa659c84d8d6064c802e/medspacy_unqlite-0.9.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5d5564246ebe17ad16a4432b2e8bb8fa562fee481d8bed291e205d18e870ba7d", size = 423744, upload-time = "2025-05-16T09:17:28.302Z" }, - { url = "https://files.pythonhosted.org/packages/da/06/85dcf7479f5ebe0669e03ae402dce9a5c812e1244183727b4326b6811a3f/medspacy_unqlite-0.9.8-cp311-cp311-win32.whl", hash = "sha256:d79203c19c8ac92bd7c15d2aef56d112f590b88be2357ceb97f27a648828e712", size = 248637, upload-time = "2025-05-16T09:17:29.636Z" }, - { url = "https://files.pythonhosted.org/packages/84/85/a9a3c297adbcd561934c4782991116a24b0d0ebdb7fb463081f916a4cc56/medspacy_unqlite-0.9.8-cp311-cp311-win_amd64.whl", hash = "sha256:9223885a6dd32e5861a5c2be87639d58b2b94724c8d11b387e90ac51db093355", size = 316423, upload-time = "2025-05-16T09:17:30.868Z" }, ] [[package]] @@ -1473,14 +1685,14 @@ name = "mistral-common" version = "1.11.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jsonschema" }, - { name = "numpy" }, - { name = "pillow" }, - { name = "pydantic" }, - { name = "pydantic-extra-types", extra = ["pycountry"] }, - { name = "requests" }, - { name = "tiktoken" }, - { name = "typing-extensions" }, + { name = "jsonschema", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pillow", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic-extra-types", extra = ["pycountry"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "requests", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tiktoken", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2e/03/3c5d4c9430da406f8444f9a7b058a6aa89c525fb068a57fe2ab8b04a6d08/mistral_common-1.11.3.tar.gz", hash = "sha256:6437e128fc8a307318440839ca14ddf2e8060056b062233ec0db10352651374c", size = 6360629, upload-time = "2026-06-04T09:01:11.131Z" } wheels = [ @@ -1488,56 +1700,50 @@ wheels = [ ] [package.optional-dependencies] -audio = [ - { name = "soundfile" }, - { name = "soxr" }, -] image = [ - { name = "opencv-python-headless" }, + { name = "opencv-python-headless", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] -name = "mlx" -version = "0.31.2" +name = "ml-dtypes" +version = "0.5.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mlx-metal", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/0e/4a/c27b42ed9b1c7d13d9ba8b6905dece787d6259152f2309338aed29b2447b/ml_dtypes-0.5.4.tar.gz", hash = "sha256:8ab06a50fb9bf9666dd0fe5dfb4676fa2b0ac0f31ecff72a6c3af8e22c063453", size = 692314, upload-time = "2025-11-17T22:32:31.031Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/7c/c16d52494a1ba6d90443f31fa26bc810bf878d532dfa9a7a13f49ef9542d/mlx-0.31.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b29cf940f34205f09bb552ac60465ae833c4ae640b52777c6d725ddbad8461ca", size = 586942, upload-time = "2026-04-22T03:14:21.97Z" }, - { url = "https://files.pythonhosted.org/packages/74/da/1c7f3dc39b7bda65b0cafbaf1e58a35eea118622c6f4506c9a4294c9806e/mlx-0.31.2-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:ebdc47b87b4b0216ceab3b5961716804bba3107c16454b65ae51d0e0c059f298", size = 586942, upload-time = "2026-04-22T03:14:23.527Z" }, - { url = "https://files.pythonhosted.org/packages/4c/e9/a8559389706d39f613620a8b6b42ed03cf3155a516b0762d355c5116fdab/mlx-0.31.2-cp310-cp310-macosx_26_0_arm64.whl", hash = "sha256:2a64db61b2840f28bae08354e6f999698e30381af201cc12354290673c96213b", size = 586804, upload-time = "2026-04-22T03:14:24.882Z" }, - { url = "https://files.pythonhosted.org/packages/94/89/1e77ec3ff380e8fb9e7258047374d31452a0f9828a0e370f127b07dd8288/mlx-0.31.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4a3f181b367d404e44a6bd68ef5eb573930809ac60cacd51d0c851c629b1b651", size = 586911, upload-time = "2026-04-22T03:14:29.675Z" }, - { url = "https://files.pythonhosted.org/packages/6a/41/c1907f05f8a3fc54025fb78ad68d3c4a4b931664d03c0a24f7f431cc4087/mlx-0.31.2-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:70297cbef7479429f69c966bfed10da20a6f0c2aa997eec2b4f6ba1a07caf2ef", size = 586915, upload-time = "2026-04-22T03:14:31.403Z" }, - { url = "https://files.pythonhosted.org/packages/97/b0/61ac2c14773c786fecbda28067b0207a0c654cb4d10c548808c51284d700/mlx-0.31.2-cp311-cp311-macosx_26_0_arm64.whl", hash = "sha256:c0ff158b7ac93a4b5659adbc70053498b30a5964fc45f78596398e056a96c36a", size = 587030, upload-time = "2026-04-22T03:14:32.961Z" }, + { url = "https://files.pythonhosted.org/packages/a9/80/19189ea605017473660e43762dc853d2797984b3c7bf30ce656099add30c/ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19b9a53598f21e453ea2fbda8aa783c20faff8e1eeb0d7ab899309a0053f1483", size = 5034975, upload-time = "2025-11-17T22:31:42.758Z" }, ] [[package]] -name = "mlx-lm" -version = "0.29.1" +name = "model-hosting-container-standards" +version = "0.1.16" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jinja2", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "mlx", marker = "sys_platform == 'darwin'" }, - { name = "numpy", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "protobuf", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "pyyaml", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "sentencepiece", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "transformers", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, + { name = "fastapi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jmespath", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "setuptools", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "starlette", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "supervisor", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e3/62/f46e1355256a114808517947f8e83ad6be310c7288c551db0fa678f47923/mlx_lm-0.29.1.tar.gz", hash = "sha256:b99180d8f33d33a077b814e550bfb2d8a59ae003d668fd1f4b3fff62a381d34b", size = 232302, upload-time = "2025-12-16T16:58:27.959Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/5f/bc0d0fce1bd0a35378696aa13b21feffa18d9cda837f4e1be124e45ee090/model_hosting_container_standards-0.1.16.tar.gz", hash = "sha256:d34589633900e53c3ee5f7c78280a7cf7e4f6532c35e763341a262fc85cbe84a", size = 94130, upload-time = "2026-06-15T21:29:34.771Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/53/913099c91d384e115ea078325efd9a0bc1ea3eb3458c694b4596cbd267f2/mlx_lm-0.29.1-py3-none-any.whl", hash = "sha256:440941b3054c2a2216e97615de584cc90fa1ea874782e20699b9895721fad8dc", size = 324884, upload-time = "2025-12-16T16:58:26.36Z" }, + { url = "https://files.pythonhosted.org/packages/07/ef/6eabeb251d2a0598cb5f9a274159e05ae07a1e3fe6a1473bf6035793252a/model_hosting_container_standards-0.1.16-py3-none-any.whl", hash = "sha256:47f4f65713120bc3a69feb022981a38db9e557aedf88dbd72077f20588caa12b", size = 125666, upload-time = "2026-06-15T21:29:33.415Z" }, ] [[package]] -name = "mlx-metal" -version = "0.31.2" +name = "more-click" +version = "0.1.3" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/52/dc524f10307c472f3ee83ceef5cc3c3c1d987f9554c90cf34616bdcb2ca9/more_click-0.1.3.tar.gz", hash = "sha256:c170987d37334278169fe3b9b388f1fcd9fc96439579354fd7c537537a182128", size = 11793, upload-time = "2025-10-21T15:28:23.531Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/69/fe3b783ebe999f3118234e1e940feb622518bfb1dea6ac5d13b1d36a8449/mlx_metal-0.31.2-py3-none-macosx_14_0_arm64.whl", hash = "sha256:b25385bcee18fc194092255b8b53b9a3d8489eb650e59160f1b57aadd07aa2dc", size = 40055588, upload-time = "2026-04-22T03:14:14.43Z" }, - { url = "https://files.pythonhosted.org/packages/4f/5d/4c690d5b93c30ba002656c37363159d978705bf8eb801b8481840fb942c2/mlx_metal-0.31.2-py3-none-macosx_15_0_arm64.whl", hash = "sha256:e9d4e5fce6ca10a87a0e388597f99519ad594d09e674708b5312bd8bd4f5997d", size = 40053220, upload-time = "2026-04-22T03:14:18.048Z" }, - { url = "https://files.pythonhosted.org/packages/99/82/11fd62a8d7a3e96e5c43220b17de0151e3f10101f8bb3b865f5bd9cdd074/mlx_metal-0.31.2-py3-none-macosx_26_0_arm64.whl", hash = "sha256:84ffb60ee503f03eb684f5fb168d5cff31e2a16b7f27c1731eaf7662bd6e9b46", size = 55792151, upload-time = "2026-04-22T03:14:22.059Z" }, + { url = "https://files.pythonhosted.org/packages/21/c8/62a253fdb3f66529ed0d7f0e4703fdb44cc8745610f199e173550d8f85eb/more_click-0.1.3-py3-none-any.whl", hash = "sha256:12f0f3da94c84d39daaaec08e9503df8877f493812f8ebc3f0713081da48d282", size = 12052, upload-time = "2025-10-21T15:28:22.456Z" }, ] [[package]] @@ -1555,27 +1761,10 @@ version = "1.2.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/31/f9/c0a1c127f9049db9155afc316952ea571720dd01833ff5e4d7e8e6352dbb/msgpack-1.2.1.tar.gz", hash = "sha256:04c721c2c7448767e9e3f2520a475663d8ee0f09c31890f6d2bd70fd636a9647", size = 183960, upload-time = "2026-06-18T16:13:52.594Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/16/f70100614b69feb3ade7285f08c9c52d6cda0a5c03f3f5e2facd63acb211/msgpack-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c7b398c56ff125feae96c2737abfec5595f1fa0aa186df60c56040b8accb95c", size = 82926, upload-time = "2026-06-18T16:12:31.531Z" }, - { url = "https://files.pythonhosted.org/packages/e4/3c/08ecd5cdfe4e2de43aec79062028ad0f7b2d9b1fea5430068c198ba570da/msgpack-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1548006a91aa93c5da81f3bdcebc1a0d10cea2d25969754fbe848da622b2b895", size = 82730, upload-time = "2026-06-18T16:12:32.894Z" }, - { url = "https://files.pythonhosted.org/packages/19/9f/a70c9cb1a04ecc134005149367dcfe35d167284e8f65035a1e4156ad17b5/msgpack-1.2.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1dabedcd0f23559f3596428c6589c1cd8c6eaed3a0d720795b07b0225d769203", size = 400729, upload-time = "2026-06-18T16:12:34.052Z" }, - { url = "https://files.pythonhosted.org/packages/fa/7f/5ce020168cf0439041526e95aa068c722c016aee21624e331aeabeee2e8e/msgpack-1.2.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:83efa1c898e0fc5380fc0cabbf75164c52e3b5cbb45973710d75821928380c73", size = 407625, upload-time = "2026-06-18T16:12:35.239Z" }, - { url = "https://files.pythonhosted.org/packages/79/70/fb7668ce0386819303047057aef6fc1da73b584291d9cff82b821744e2ef/msgpack-1.2.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:01e2dd6c9b19d333a00282330cc8a73d38d8dabc306dc5b42cd668c3ac82e833", size = 377891, upload-time = "2026-06-18T16:12:36.684Z" }, - { url = "https://files.pythonhosted.org/packages/3d/dc/9ebe654a73c3aed2e40aa6b52e3c2a02b5f53ef0085fa235a45d5b367f87/msgpack-1.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:350cb813d0af6e65d2f7ef0d729f7ff5be5a8bce03665892f43e5883d4ecc1b8", size = 391987, upload-time = "2026-06-18T16:12:37.839Z" }, - { url = "https://files.pythonhosted.org/packages/42/eb/b67cf64218a2fa25e1c671fe1d3dbb06cbeb973e71bc4b822da079862d0b/msgpack-1.2.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:ee1d9ed27d0497b848923746cf762ed2e7db24f4be7eec8e5cbe8c766aa707b7", size = 374603, upload-time = "2026-06-18T16:12:39.221Z" }, - { url = "https://files.pythonhosted.org/packages/a2/2e/9ee200cde32fd1a0101b4006202fde554c1860adfb9bf7bff31ea4c08df8/msgpack-1.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:633727297ed063441fd1cda2288865487f33ad14eeb8831afb5f0c396a62cfce", size = 405121, upload-time = "2026-06-18T16:12:40.524Z" }, - { url = "https://files.pythonhosted.org/packages/43/b6/f10117be7ca7a51e8feed699a907b8e663a8cd66e115ae6b4fb30cc7945c/msgpack-1.2.1-cp310-cp310-win32.whl", hash = "sha256:298872ecf9e61950f1c6af4ca969b859ee91783bb920ef6e6172697d0c8aad74", size = 64088, upload-time = "2026-06-18T16:12:41.762Z" }, - { url = "https://files.pythonhosted.org/packages/ba/93/89976c696fb0224662239d952c47b4d1661b34d79a332ef5584facaa8579/msgpack-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:2ff164c1b0bcb740b073b99e945234d0212852fa378e44a208c425379140dbeb", size = 70113, upload-time = "2026-06-18T16:12:42.78Z" }, { url = "https://files.pythonhosted.org/packages/f4/6b/e9b1cdc042c4458801d2545ed782a95f3d6ba8e270cce8745b8603c7f748/msgpack-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:29a3f6e9667868429d8240dfd063ea5ffdc1321c13d783aa23827a38de0dcb22", size = 82812, upload-time = "2026-06-18T16:12:45.022Z" }, { url = "https://files.pythonhosted.org/packages/0c/3a/dd518a1bf78ed1e9ad8afe57307c079a00eafe4b3068932a27ca1ea56b4f/msgpack-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aded5bdf32609dc7987a49bbbd15a8ef096193f96dd8bbeb791de729e650acf5", size = 82739, upload-time = "2026-06-18T16:12:46.025Z" }, - { url = "https://files.pythonhosted.org/packages/70/e0/7ba9e1542bf0771a27b8b37c1316e3f95ae9d748fd765284655c476ad4ef/msgpack-1.2.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:146ee4e9ce80b365c6d4c47073da9da7bcec473e58194ceee5dd7620ace77e06", size = 414233, upload-time = "2026-06-18T16:12:47.029Z" }, { url = "https://files.pythonhosted.org/packages/03/8d/671d81534ea0e2b0e8a121be100020da09eb78861fe3aa8f3ef7dcd3bed1/msgpack-1.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a28d076ca7c82b9c8728ad90b7147489449557038bed50e4241eb832395169b4", size = 423843, upload-time = "2026-06-18T16:12:48.19Z" }, - { url = "https://files.pythonhosted.org/packages/d2/b6/e5c737515ed1f166664b87601b532f58cbb73d8aa6a90b99f7c2c5037e8e/msgpack-1.2.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7d31c0ac0c640f877804c67cb2bc9f4e23dc2db97e96c2e67fa27d38283b41f8", size = 390772, upload-time = "2026-06-18T16:12:49.624Z" }, - { url = "https://files.pythonhosted.org/packages/a8/46/62ed8c2e87d7021eab19921594d961ef3aa3794eec76c716dc30f3bfd433/msgpack-1.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8ff92d7feeaf5bc26c51495b69e2f99ed97ab79346fb6555f44be7dd2ac6503b", size = 409559, upload-time = "2026-06-18T16:12:50.936Z" }, - { url = "https://files.pythonhosted.org/packages/70/ff/59aa3887b860bbf43532835e192b1c388a17590d6068ae4f8b2bc74c906e/msgpack-1.2.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:779197a6513bab3c3632265e3d0f7cb3227e62510841a6f34f1eaa37efbb345e", size = 387838, upload-time = "2026-06-18T16:12:52.161Z" }, { url = "https://files.pythonhosted.org/packages/09/11/f8563e471093420cf6478cb3271a0175d8402b82d879783d4035d2d03360/msgpack-1.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:67f6dd22fa72a93752643f07889796d62739a13415ee630169a8ce764f86cf9f", size = 421732, upload-time = "2026-06-18T16:12:53.556Z" }, - { url = "https://files.pythonhosted.org/packages/57/cf/e673683c4c6c90c1022b24c65af4b03eda72b182a1176ef6449069d66acc/msgpack-1.2.1-cp311-cp311-win32.whl", hash = "sha256:91054a783328e0ea7954b8771095705c8d2243b814743fbaadf14552c9c52c5d", size = 64091, upload-time = "2026-06-18T16:12:54.821Z" }, - { url = "https://files.pythonhosted.org/packages/3f/07/ca212739d179f9083bff2c7c08c24101c3555a334fadc2b876b18768a3ae/msgpack-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2eda0b7ebb1283a98d3e4492ac933c8af6aff59fd3df1c3ed024f536af4b1dc8", size = 70462, upload-time = "2026-06-18T16:12:55.898Z" }, - { url = "https://files.pythonhosted.org/packages/6d/be/6798347b425e26f35db82e69dd83c09716c856a3714e7bffc4c0860fd830/msgpack-1.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:6ee967f7c7e1df2890c671ff2ee51a28ded0efc95da3e507176dee881ce36c66", size = 65059, upload-time = "2026-06-18T16:12:57.053Z" }, ] [[package]] @@ -1584,69 +1773,21 @@ version = "0.21.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e3/60/f79b9b013a16fa3a58350c9295ddc6789f2e335f36ea61ed10a21b215364/msgspec-0.21.1.tar.gz", hash = "sha256:2313508e394b0d208f8f56892ca9b2799e2561329de9763b19619595a6c0f72c", size = 319193, upload-time = "2026-04-12T21:44:50.394Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/38/d591d9f66d43d897ecbd249f2833665823d19c8b043f16619bc8343e23df/msgspec-0.21.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72d9cd03241b8b2edb2e12dcc66c500fa480d8cbd71a8bac105809d468882064", size = 195172, upload-time = "2026-04-12T21:43:45.062Z" }, - { url = "https://files.pythonhosted.org/packages/69/1a/6899188b5982ec1324e0c629b7801eed2db987f6634fab58abd9fc82d317/msgspec-0.21.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed2ab278200e743a1d2610a4e0c8fc74f6cecb8548544cdec43f927bd9265238", size = 188316, upload-time = "2026-04-12T21:43:46.641Z" }, - { url = "https://files.pythonhosted.org/packages/9e/95/7e591b4fa11fdbbf9891164473c23420a8c781ef553295abe416bf335f42/msgspec-0.21.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd677e3001fdfed9186de72eab434da2976303cd5eb9550921d3d0c3e3e168ce", size = 216565, upload-time = "2026-04-12T21:43:48.081Z" }, - { url = "https://files.pythonhosted.org/packages/19/86/714feeaf3b84cf2027235681725593840153dedd2868578f9f2715e296bb/msgspec-0.21.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f667b90b37fad734a91671abd68e0d7f4d066862771b87e91c53996dcb7a9027", size = 222689, upload-time = "2026-04-12T21:43:49.385Z" }, - { url = "https://files.pythonhosted.org/packages/7d/b9/4384243e814f2579e5205e17d170b9c1a30121afd1393298d904817a7fa7/msgspec-0.21.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:49880fd20fdbcfe1b793f07dd83f12572bab679c9800352c8b2240289aa46a06", size = 222343, upload-time = "2026-04-12T21:43:50.612Z" }, - { url = "https://files.pythonhosted.org/packages/04/01/4b227d9c4057346271043632bad41979cf8c3dca372e41bb1f7d546395b2/msgspec-0.21.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae0162e22849a5e91eaad907766525107523b0daea3df267a9fcb5ba4e0936ae", size = 225607, upload-time = "2026-04-12T21:43:52.129Z" }, - { url = "https://files.pythonhosted.org/packages/c1/ce/27021d1c3e5da837743092a7b7a5e8818397e1f4c05ee8b068bd7d1fd78a/msgspec-0.21.1-cp310-cp310-win_amd64.whl", hash = "sha256:f041a2279f31e3a53319005e4d60ba77c085cfcbe394cdc7ce803c2d01fe9449", size = 188392, upload-time = "2026-04-12T21:43:53.384Z" }, - { url = "https://files.pythonhosted.org/packages/80/2b/daf7a8d6d7cf00e0dcd0439178b284ade701234abdcadf3385601da04fbd/msgspec-0.21.1-cp310-cp310-win_arm64.whl", hash = "sha256:1bf17cbd7b28a5dffc7e764c654eed8ccde5e0f1de7970628608304640d4ce4e", size = 174191, upload-time = "2026-04-12T21:43:54.6Z" }, - { url = "https://files.pythonhosted.org/packages/ba/7f/bbc4e74cd33d316b75541149e4d35b163b63bce066530ae185a2ec3b5bfc/msgspec-0.21.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b504b6e7f7a22a24b27232b73034421692147865162daaec9f3bf62439007c87", size = 193131, upload-time = "2026-04-12T21:43:56.094Z" }, - { url = "https://files.pythonhosted.org/packages/c1/60/504886af1aaf854112663b842d5eea9a15d9588f9bf7d0d2df736424b84d/msgspec-0.21.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4692b7c1609155708c4418f88e92f63c13fdf08aa095c84bae82bad75b53389b", size = 186597, upload-time = "2026-04-12T21:43:57.242Z" }, - { url = "https://files.pythonhosted.org/packages/fa/54/d24ddeaa65b5278c9e67f48ce3c17a9831e8f3722f3c8322ee120aca22ef/msgspec-0.21.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d3124010b3815451494c85ff345e693cb9fe5889cfcbbef39ed8622e0e72319c", size = 215158, upload-time = "2026-04-12T21:43:58.442Z" }, { url = "https://files.pythonhosted.org/packages/9f/75/bb79c8b89a93ae23cd33c0d802373f16feaf9633f05d8af77091350dda0a/msgspec-0.21.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6badc03b9725352219cca017bfe71c61f2fbd0fb5982b410ac17c97c213deb30", size = 219856, upload-time = "2026-04-12T21:44:00.015Z" }, - { url = "https://files.pythonhosted.org/packages/b4/9c/c5ca26b46f0ebbd3a6683695ef89396712cb9e4199fd1f0bc1dd968216b1/msgspec-0.21.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5d2d4116ebe3035a78d9ec76e99a9d64e5fa6d44fe61a9c5de7fd1acf54bcc69", size = 220314, upload-time = "2026-04-12T21:44:01.548Z" }, { url = "https://files.pythonhosted.org/packages/c8/31/645a351c4285dce40ed6755c3dcc0aa648e26dacb20a98018fe2cce5e87b/msgspec-0.21.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0d1009f6715f5bff3b54d4ff5c7428ad96197e0534e1645b8e9b955890c84664", size = 223215, upload-time = "2026-04-12T21:44:02.884Z" }, - { url = "https://files.pythonhosted.org/packages/09/af/8bf15736a6dd3cb4f90c5467f6dc39197d2daaf10754490cdc0aa17b7312/msgspec-0.21.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6faffe5bb644ec884052679af4dfd776d4b5ca90e4a7ec7e7e319e4e6b93a6e", size = 188554, upload-time = "2026-04-12T21:44:04.151Z" }, - { url = "https://files.pythonhosted.org/packages/ef/29/cc7db3a165b62d16e64a83f82eccb79655055cb5bc1f60459a6f9d7c82f2/msgspec-0.21.1-cp311-cp311-win_arm64.whl", hash = "sha256:ee9e3f11fa94603f7d673bf795cfa31b549c4a2c723bc39b45beb1e7f5a3fb99", size = 174517, upload-time = "2026-04-12T21:44:05.66Z" }, ] [[package]] name = "multidict" version = "6.7.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/0b/19348d4c98980c4851d2f943f8ebafdece2ae7ef737adcfa5994ce8e5f10/multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5", size = 77176, upload-time = "2026-01-26T02:42:59.784Z" }, - { url = "https://files.pythonhosted.org/packages/ef/04/9de3f8077852e3d438215c81e9b691244532d2e05b4270e89ce67b7d103c/multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8", size = 44996, upload-time = "2026-01-26T02:43:01.674Z" }, - { url = "https://files.pythonhosted.org/packages/31/5c/08c7f7fe311f32e83f7621cd3f99d805f45519cd06fafb247628b861da7d/multidict-6.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdea2e7b2456cfb6694fb113066fd0ec7ea4d67e3a35e1f4cbeea0b448bf5872", size = 44631, upload-time = "2026-01-26T02:43:03.169Z" }, - { url = "https://files.pythonhosted.org/packages/b7/7f/0e3b1390ae772f27501199996b94b52ceeb64fe6f9120a32c6c3f6b781be/multidict-6.7.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17207077e29342fdc2c9a82e4b306f1127bf1ea91f8b71e02d4798a70bb99991", size = 242561, upload-time = "2026-01-26T02:43:04.733Z" }, - { url = "https://files.pythonhosted.org/packages/dd/f4/8719f4f167586af317b69dd3e90f913416c91ca610cac79a45c53f590312/multidict-6.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4f49cb5661344764e4c7c7973e92a47a59b8fc19b6523649ec9dc4960e58a03", size = 242223, upload-time = "2026-01-26T02:43:06.695Z" }, - { url = "https://files.pythonhosted.org/packages/47/ab/7c36164cce64a6ad19c6d9a85377b7178ecf3b89f8fd589c73381a5eedfd/multidict-6.7.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a9fc4caa29e2e6ae408d1c450ac8bf19892c5fca83ee634ecd88a53332c59981", size = 222322, upload-time = "2026-01-26T02:43:08.472Z" }, - { url = "https://files.pythonhosted.org/packages/f5/79/a25add6fb38035b5337bc5734f296d9afc99163403bbcf56d4170f97eb62/multidict-6.7.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c5f0c21549ab432b57dcc82130f388d84ad8179824cc3f223d5e7cfbfd4143f6", size = 254005, upload-time = "2026-01-26T02:43:10.127Z" }, - { url = "https://files.pythonhosted.org/packages/4a/7b/64a87cf98e12f756fc8bd444b001232ffff2be37288f018ad0d3f0aae931/multidict-6.7.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7dfb78d966b2c906ae1d28ccf6e6712a3cd04407ee5088cd276fe8cb42186190", size = 251173, upload-time = "2026-01-26T02:43:11.731Z" }, - { url = "https://files.pythonhosted.org/packages/4b/ac/b605473de2bb404e742f2cc3583d12aedb2352a70e49ae8fce455b50c5aa/multidict-6.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b0d9b91d1aa44db9c1f1ecd0d9d2ae610b2f4f856448664e01a3b35899f3f92", size = 243273, upload-time = "2026-01-26T02:43:13.063Z" }, - { url = "https://files.pythonhosted.org/packages/03/65/11492d6a0e259783720f3bc1d9ea55579a76f1407e31ed44045c99542004/multidict-6.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dd96c01a9dcd4889dcfcf9eb5544ca0c77603f239e3ffab0524ec17aea9a93ee", size = 238956, upload-time = "2026-01-26T02:43:14.843Z" }, - { url = "https://files.pythonhosted.org/packages/5f/a7/7ee591302af64e7c196fb63fe856c788993c1372df765102bd0448e7e165/multidict-6.7.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:067343c68cd6612d375710f895337b3a98a033c94f14b9a99eff902f205424e2", size = 233477, upload-time = "2026-01-26T02:43:16.025Z" }, - { url = "https://files.pythonhosted.org/packages/9c/99/c109962d58756c35fd9992fed7f2355303846ea2ff054bb5f5e9d6b888de/multidict-6.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5884a04f4ff56c6120f6ccf703bdeb8b5079d808ba604d4d53aec0d55dc33568", size = 243615, upload-time = "2026-01-26T02:43:17.84Z" }, - { url = "https://files.pythonhosted.org/packages/d5/5f/1973e7c771c86e93dcfe1c9cc55a5481b610f6614acfc28c0d326fe6bfad/multidict-6.7.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8affcf1c98b82bc901702eb73b6947a1bfa170823c153fe8a47b5f5f02e48e40", size = 249930, upload-time = "2026-01-26T02:43:19.06Z" }, - { url = "https://files.pythonhosted.org/packages/5d/a5/f170fc2268c3243853580203378cd522446b2df632061e0a5409817854c7/multidict-6.7.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0d17522c37d03e85c8098ec8431636309b2682cf12e58f4dbc76121fb50e4962", size = 243807, upload-time = "2026-01-26T02:43:20.286Z" }, - { url = "https://files.pythonhosted.org/packages/de/01/73856fab6d125e5bc652c3986b90e8699a95e84b48d72f39ade6c0e74a8c/multidict-6.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24c0cf81544ca5e17cfcb6e482e7a82cd475925242b308b890c9452a074d4505", size = 239103, upload-time = "2026-01-26T02:43:21.508Z" }, - { url = "https://files.pythonhosted.org/packages/e7/46/f1220bd9944d8aa40d8ccff100eeeee19b505b857b6f603d6078cb5315b0/multidict-6.7.1-cp310-cp310-win32.whl", hash = "sha256:d82dd730a95e6643802f4454b8fdecdf08667881a9c5670db85bc5a56693f122", size = 41416, upload-time = "2026-01-26T02:43:22.703Z" }, - { url = "https://files.pythonhosted.org/packages/68/00/9b38e272a770303692fc406c36e1a4c740f401522d5787691eb38a8925a8/multidict-6.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cf37cbe5ced48d417ba045aca1b21bafca67489452debcde94778a576666a1df", size = 46022, upload-time = "2026-01-26T02:43:23.77Z" }, - { url = "https://files.pythonhosted.org/packages/64/65/d8d42490c02ee07b6bbe00f7190d70bb4738b3cce7629aaf9f213ef730dd/multidict-6.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:59bc83d3f66b41dac1e7460aac1d196edc70c9ba3094965c467715a70ecb46db", size = 43238, upload-time = "2026-01-26T02:43:24.882Z" }, { url = "https://files.pythonhosted.org/packages/ce/f1/a90635c4f88fb913fbf4ce660b83b7445b7a02615bda034b2f8eb38fd597/multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d", size = 76626, upload-time = "2026-01-26T02:43:26.485Z" }, { url = "https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e", size = 44706, upload-time = "2026-01-26T02:43:27.607Z" }, { url = "https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855", size = 44356, upload-time = "2026-01-26T02:43:28.661Z" }, - { url = "https://files.pythonhosted.org/packages/fd/d2/0a36c8473f0cbaeadd5db6c8b72d15bbceeec275807772bfcd059bef487d/multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3", size = 244355, upload-time = "2026-01-26T02:43:31.165Z" }, - { url = "https://files.pythonhosted.org/packages/5d/16/8c65be997fd7dd311b7d39c7b6e71a0cb449bad093761481eccbbe4b42a2/multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e", size = 246433, upload-time = "2026-01-26T02:43:32.581Z" }, - { url = "https://files.pythonhosted.org/packages/01/fb/4dbd7e848d2799c6a026ec88ad39cf2b8416aa167fcc903baa55ecaa045c/multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a", size = 225376, upload-time = "2026-01-26T02:43:34.417Z" }, - { url = "https://files.pythonhosted.org/packages/b6/8a/4a3a6341eac3830f6053062f8fbc9a9e54407c80755b3f05bc427295c2d0/multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8", size = 257365, upload-time = "2026-01-26T02:43:35.741Z" }, - { url = "https://files.pythonhosted.org/packages/f7/a2/dd575a69c1aa206e12d27d0770cdf9b92434b48a9ef0cd0d1afdecaa93c4/multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0", size = 254747, upload-time = "2026-01-26T02:43:36.976Z" }, { url = "https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144", size = 246293, upload-time = "2026-01-26T02:43:38.258Z" }, - { url = "https://files.pythonhosted.org/packages/5a/a4/23466059dc3854763423d0ad6c0f3683a379d97673b1b89ec33826e46728/multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49", size = 242962, upload-time = "2026-01-26T02:43:40.034Z" }, - { url = "https://files.pythonhosted.org/packages/1f/67/51dd754a3524d685958001e8fa20a0f5f90a6a856e0a9dcabff69be3dbb7/multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71", size = 237360, upload-time = "2026-01-26T02:43:41.752Z" }, - { url = "https://files.pythonhosted.org/packages/64/3f/036dfc8c174934d4b55d86ff4f978e558b0e585cef70cfc1ad01adc6bf18/multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3", size = 245940, upload-time = "2026-01-26T02:43:43.042Z" }, - { url = "https://files.pythonhosted.org/packages/3d/20/6214d3c105928ebc353a1c644a6ef1408bc5794fcb4f170bb524a3c16311/multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c", size = 253502, upload-time = "2026-01-26T02:43:44.371Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e2/c653bc4ae1be70a0f836b82172d643fcf1dade042ba2676ab08ec08bff0f/multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0", size = 247065, upload-time = "2026-01-26T02:43:45.745Z" }, { url = "https://files.pythonhosted.org/packages/c8/11/a854b4154cd3bd8b1fd375e8a8ca9d73be37610c361543d56f764109509b/multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa", size = 241870, upload-time = "2026-01-26T02:43:47.054Z" }, - { url = "https://files.pythonhosted.org/packages/13/bf/9676c0392309b5fdae322333d22a829715b570edb9baa8016a517b55b558/multidict-6.7.1-cp311-cp311-win32.whl", hash = "sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a", size = 41302, upload-time = "2026-01-26T02:43:48.753Z" }, - { url = "https://files.pythonhosted.org/packages/c9/68/f16a3a8ba6f7b6dc92a1f19669c0810bd2c43fc5a02da13b1cbf8e253845/multidict-6.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b", size = 45981, upload-time = "2026-01-26T02:43:49.921Z" }, - { url = "https://files.pythonhosted.org/packages/ac/ad/9dd5305253fa00cd3c7555dbef69d5bf4133debc53b87ab8d6a44d411665/multidict-6.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6", size = 43159, upload-time = "2026-01-26T02:43:51.635Z" }, { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, ] @@ -1655,12 +1796,10 @@ name = "multiprocess" version = "0.70.16" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "dill" }, + { name = "dill", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b5/ae/04f39c5d0d0def03247c2893d6f2b83c136bf3320a2154d7b8858f2ba72d/multiprocess-0.70.16.tar.gz", hash = "sha256:161af703d4652a0e1410be6abccecde4a7ddffd19341be0a7011b94aeb171ac1", size = 1772603, upload-time = "2024-01-28T18:52:34.85Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/76/6e712a2623d146d314f17598df5de7224c85c0060ef63fd95cc15a25b3fa/multiprocess-0.70.16-pp310-pypy310_pp73-macosx_10_13_x86_64.whl", hash = "sha256:476887be10e2f59ff183c006af746cb6f1fd0eadcfd4ef49e605cbe2659920ee", size = 134980, upload-time = "2024-01-28T18:52:15.731Z" }, - { url = "https://files.pythonhosted.org/packages/0f/ab/1e6e8009e380e22254ff539ebe117861e5bdb3bff1fc977920972237c6c7/multiprocess-0.70.16-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d951bed82c8f73929ac82c61f01a7b5ce8f3e5ef40f5b52553b4f547ce2b08ec", size = 134982, upload-time = "2024-01-28T18:52:17.783Z" }, { url = "https://files.pythonhosted.org/packages/bc/f7/7ec7fddc92e50714ea3745631f79bd9c96424cb2702632521028e57d3a36/multiprocess-0.70.16-py310-none-any.whl", hash = "sha256:c4a9944c67bd49f823687463660a2d6daae94c289adff97e0f9d696ba6371d02", size = 134824, upload-time = "2024-01-28T18:52:26.062Z" }, { url = "https://files.pythonhosted.org/packages/50/15/b56e50e8debaf439f44befec5b2af11db85f6e0f344c3113ae0be0593a91/multiprocess-0.70.16-py311-none-any.whl", hash = "sha256:af4cabb0dac72abfb1e794fa7855c325fd2b55a10a44628a3c1ad3311c04127a", size = 143519, upload-time = "2024-01-28T18:52:28.115Z" }, { url = "https://files.pythonhosted.org/packages/ea/89/38df130f2c799090c978b366cfdf5b96d08de5b29a4a293df7f7429fa50b/multiprocess-0.70.16-py38-none-any.whl", hash = "sha256:a71d82033454891091a226dfc319d0cfa8019a4e888ef9ca910372a446de4435", size = 132628, upload-time = "2024-01-28T18:52:30.853Z" }, @@ -1673,58 +1812,16 @@ version = "1.0.15" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/23/2e/88c147931ea9725d634840d538622e94122bceaf346233349b7b5c62964b/murmurhash-1.0.15.tar.gz", hash = "sha256:58e2b27b7847f9e2a6edf10b47a8c8dd70a4705f45dccb7bf76aeadacf56ba01", size = 13291, upload-time = "2025-11-14T09:51:15.272Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/09/3c/5e59e29fe971365d27f191a5cbf8a5fb492746e458604fe5d39810da4668/murmurhash-1.0.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4989c16053a9a83b02c520dd00a31f0877d5fd2ab8a9b6b75ed9eba0e25c489", size = 27463, upload-time = "2025-11-14T09:49:53.158Z" }, - { url = "https://files.pythonhosted.org/packages/38/3d/ace00a9b82beaa99a8a7a52e98171cfbf13c0066d2f820e84a5d572e3bd0/murmurhash-1.0.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:899068ba3d7c371e7edd093852c634cce802fefd9aaddfcc0d2fda1d7433c7f9", size = 27714, upload-time = "2025-11-14T09:49:54.855Z" }, - { url = "https://files.pythonhosted.org/packages/10/0f/34f1c4f97424ea1bc72b1e3bdf61ac34f4c5555ec9163721f1e4cafe5b1d/murmurhash-1.0.15-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fe883982114de576c793fd1cf55945c8ee6453ad4c4785ac1a48f84e74fdc650", size = 122570, upload-time = "2025-11-14T09:49:55.977Z" }, - { url = "https://files.pythonhosted.org/packages/b9/75/0019717a16ce5a7b088fc50a3ecb513035e4196c5e569bf4a2e16bcc0414/murmurhash-1.0.15-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:342277d8d7f712d136507fb3ccdba26c076a34ca0f8d1b96f65f0daa556da2e9", size = 123194, upload-time = "2025-11-14T09:49:57.462Z" }, - { url = "https://files.pythonhosted.org/packages/7b/a4/c1c95ce60b816c2255098164e424752779269c93f5d6dceaa213346789a2/murmurhash-1.0.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bc54facccb32fe1e97d6231edd4f3e2937467c35658b26aa35bbd6a87ebb7cb0", size = 122461, upload-time = "2025-11-14T09:49:58.686Z" }, - { url = "https://files.pythonhosted.org/packages/63/28/e1f79369a6e8d1a5901346ed2fd3a5c56e647d0b849044870c071cb64e1c/murmurhash-1.0.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e525bbd8e26e6b9ab1b56758a59b16c2fffd73bad2f7b8bf361c16f70ff1d980", size = 121676, upload-time = "2025-11-14T09:49:59.888Z" }, - { url = "https://files.pythonhosted.org/packages/1d/7c/e2be1f5387e5898f6551cf81c4220975858b9dbda4d471b133750945599a/murmurhash-1.0.15-cp310-cp310-win_amd64.whl", hash = "sha256:2224f30f7729717644745a6f513ea7662517dfe7b1867cf1588177f64c61df3c", size = 25156, upload-time = "2025-11-14T09:50:01.016Z" }, - { url = "https://files.pythonhosted.org/packages/74/07/0df6e1a753de68368662cbbb8f88558e2c877d3886ac12b30953fb8ed335/murmurhash-1.0.15-cp310-cp310-win_arm64.whl", hash = "sha256:8a181494b5f03ba831f9a13f2de3aab9ef591e508e57239043d65c5c592f5837", size = 23270, upload-time = "2025-11-14T09:50:01.99Z" }, { url = "https://files.pythonhosted.org/packages/6b/ca/77d3e69924a8eb4508bb4f0ad34e46adbeedeb93616a71080e61e53dad71/murmurhash-1.0.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f32307fb9347680bb4fe1cbef6362fb39bd994f1b59abd8c09ca174e44199081", size = 27397, upload-time = "2025-11-14T09:50:03.077Z" }, { url = "https://files.pythonhosted.org/packages/e6/53/a936f577d35b245d47b310f29e5e9f09fcac776c8c992f1ab51a9fb0cee2/murmurhash-1.0.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:539d8405885d1d19c005f3a2313b47e8e54b0ee89915eb8dfbb430b194328e6c", size = 27692, upload-time = "2025-11-14T09:50:04.144Z" }, { url = "https://files.pythonhosted.org/packages/4d/64/5f8cfd1fd9cbeb43fcff96672f5bd9e7e1598d1c970f808ecd915490dc20/murmurhash-1.0.15-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c4cd739a00f5a4602201b74568ddabae46ec304719d9be752fd8f534a9464b5e", size = 128396, upload-time = "2025-11-14T09:50:05.268Z" }, - { url = "https://files.pythonhosted.org/packages/ac/10/d9ce29d559a75db0d8a3f13ea12c7f541ec9de2afca38dc70418b890eedb/murmurhash-1.0.15-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:44d211bcc3ec203c47dac06f48ee871093fcbdffa6652a6cc5ea7180306680a8", size = 128687, upload-time = "2025-11-14T09:50:06.527Z" }, - { url = "https://files.pythonhosted.org/packages/48/cd/dc97ab7e68cdfa1537a56e36dbc846c5a66701cc39ecee2d4399fe61996c/murmurhash-1.0.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f9bf47101354fb1dc4b2e313192566f04ba295c28a37e2f71c692759acc1ba3c", size = 128198, upload-time = "2025-11-14T09:50:08.062Z" }, { url = "https://files.pythonhosted.org/packages/53/73/32f2aaa22c1e4afae337106baf0c938abf36a6cc879cfee83a00461bbbf7/murmurhash-1.0.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c69b4d3bcd6233782a78907fe10b9b7a796bdc5d28060cf097d067bec280a5d", size = 127214, upload-time = "2025-11-14T09:50:09.265Z" }, - { url = "https://files.pythonhosted.org/packages/82/ed/812103a7f353eba2d83655b08205e13a38c93b4db0692f94756e1eb44516/murmurhash-1.0.15-cp311-cp311-win_amd64.whl", hash = "sha256:e43a69496342ce530bdd670264cb7c8f45490b296e4764c837ce577e3c7ebd53", size = 25241, upload-time = "2025-11-14T09:50:10.373Z" }, - { url = "https://files.pythonhosted.org/packages/eb/5f/2c511bdd28f7c24da37a00116ffd0432b65669d098f0d0260c66ac0ffdc2/murmurhash-1.0.15-cp311-cp311-win_arm64.whl", hash = "sha256:f3e99a6ee36ef5372df5f138e3d9c801420776d3641a34a49e5c2555f44edba7", size = 23216, upload-time = "2025-11-14T09:50:11.651Z" }, -] - -[[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 = "networkx" -version = "3.4.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] -sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368, upload-time = "2024-10-21T12:39:38.695Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263, upload-time = "2024-10-21T12:39:36.247Z" }, ] [[package]] name = "networkx" version = "3.6.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.11' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version >= '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, @@ -1736,24 +1833,8 @@ version = "1.13.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/74/d02409ed2aa865e051b7edda22ad416a39d81a84980f544f8de717cab133/ninja-1.13.0-py3-none-macosx_10_9_universal2.whl", hash = "sha256:fa2a8bfc62e31b08f83127d1613d10821775a0eb334197154c4d6067b7068ff1", size = 310125, upload-time = "2025-08-11T15:09:50.971Z" }, - { url = "https://files.pythonhosted.org/packages/8e/de/6e1cd6b84b412ac1ef327b76f0641aeb5dcc01e9d3f9eee0286d0c34fd93/ninja-1.13.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3d00c692fb717fd511abeb44b8c5d00340c36938c12d6538ba989fe764e79630", size = 177467, upload-time = "2025-08-11T15:09:52.767Z" }, - { url = "https://files.pythonhosted.org/packages/c8/83/49320fb6e58ae3c079381e333575fdbcf1cca3506ee160a2dcce775046fa/ninja-1.13.0-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:be7f478ff9f96a128b599a964fc60a6a87b9fa332ee1bd44fa243ac88d50291c", size = 187834, upload-time = "2025-08-11T15:09:54.115Z" }, - { url = "https://files.pythonhosted.org/packages/56/c7/ba22748fb59f7f896b609cd3e568d28a0a367a6d953c24c461fe04fc4433/ninja-1.13.0-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:60056592cf495e9a6a4bea3cd178903056ecb0943e4de45a2ea825edb6dc8d3e", size = 202736, upload-time = "2025-08-11T15:09:55.745Z" }, - { url = "https://files.pythonhosted.org/packages/79/22/d1de07632b78ac8e6b785f41fa9aad7a978ec8c0a1bf15772def36d77aac/ninja-1.13.0-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1c97223cdda0417f414bf864cfb73b72d8777e57ebb279c5f6de368de0062988", size = 179034, upload-time = "2025-08-11T15:09:57.394Z" }, { url = "https://files.pythonhosted.org/packages/ed/de/0e6edf44d6a04dabd0318a519125ed0415ce437ad5a1ec9b9be03d9048cf/ninja-1.13.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa", size = 180716, upload-time = "2025-08-11T15:09:58.696Z" }, - { url = "https://files.pythonhosted.org/packages/54/28/938b562f9057aaa4d6bfbeaa05e81899a47aebb3ba6751e36c027a7f5ff7/ninja-1.13.0-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4be9c1b082d244b1ad7ef41eb8ab088aae8c109a9f3f0b3e56a252d3e00f42c1", size = 146843, upload-time = "2025-08-11T15:10:00.046Z" }, - { url = "https://files.pythonhosted.org/packages/2a/fb/d06a3838de4f8ab866e44ee52a797b5491df823901c54943b2adb0389fbb/ninja-1.13.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:6739d3352073341ad284246f81339a384eec091d9851a886dfa5b00a6d48b3e2", size = 154402, upload-time = "2025-08-11T15:10:01.657Z" }, - { url = "https://files.pythonhosted.org/packages/31/bf/0d7808af695ceddc763cf251b84a9892cd7f51622dc8b4c89d5012779f06/ninja-1.13.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:11be2d22027bde06f14c343f01d31446747dbb51e72d00decca2eb99be911e2f", size = 552388, upload-time = "2025-08-11T15:10:03.349Z" }, - { url = "https://files.pythonhosted.org/packages/9d/70/c99d0c2c809f992752453cce312848abb3b1607e56d4cd1b6cded317351a/ninja-1.13.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:aa45b4037b313c2f698bc13306239b8b93b4680eb47e287773156ac9e9304714", size = 472501, upload-time = "2025-08-11T15:10:04.735Z" }, - { url = "https://files.pythonhosted.org/packages/9f/43/c217b1153f0e499652f5e0766da8523ce3480f0a951039c7af115e224d55/ninja-1.13.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f8e1e8a1a30835eeb51db05cf5a67151ad37542f5a4af2a438e9490915e5b72", size = 638280, upload-time = "2025-08-11T15:10:06.512Z" }, - { url = "https://files.pythonhosted.org/packages/8c/45/9151bba2c8d0ae2b6260f71696330590de5850e5574b7b5694dce6023e20/ninja-1.13.0-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:3d7d7779d12cb20c6d054c61b702139fd23a7a964ec8f2c823f1ab1b084150db", size = 642420, upload-time = "2025-08-11T15:10:08.35Z" }, - { url = "https://files.pythonhosted.org/packages/3c/fb/95752eb635bb8ad27d101d71bef15bc63049de23f299e312878fc21cb2da/ninja-1.13.0-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:d741a5e6754e0bda767e3274a0f0deeef4807f1fec6c0d7921a0244018926ae5", size = 585106, upload-time = "2025-08-11T15:10:09.818Z" }, - { url = "https://files.pythonhosted.org/packages/c1/31/aa56a1a286703800c0cbe39fb4e82811c277772dc8cd084f442dd8e2938a/ninja-1.13.0-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:e8bad11f8a00b64137e9b315b137d8bb6cbf3086fbdc43bf1f90fd33324d2e96", size = 707138, upload-time = "2025-08-11T15:10:11.366Z" }, { url = "https://files.pythonhosted.org/packages/34/6f/5f5a54a1041af945130abdb2b8529cbef0cdcbbf9bcf3f4195378319d29a/ninja-1.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200", size = 581758, upload-time = "2025-08-11T15:10:13.295Z" }, - { url = "https://files.pythonhosted.org/packages/95/97/51359c77527d45943fe7a94d00a3843b81162e6c4244b3579fe8fc54cb9c/ninja-1.13.0-py3-none-win32.whl", hash = "sha256:8cfbb80b4a53456ae8a39f90ae3d7a2129f45ea164f43fadfa15dc38c4aef1c9", size = 267201, upload-time = "2025-08-11T15:10:15.158Z" }, - { url = "https://files.pythonhosted.org/packages/29/45/c0adfbfb0b5895aa18cec400c535b4f7ff3e52536e0403602fc1a23f7de9/ninja-1.13.0-py3-none-win_amd64.whl", hash = "sha256:fb8ee8719f8af47fed145cced4a85f0755dd55d45b2bddaf7431fa89803c5f3e", size = 309975, upload-time = "2025-08-11T15:10:16.697Z" }, - { url = "https://files.pythonhosted.org/packages/df/93/a7b983643d1253bb223234b5b226e69de6cda02b76cdca7770f684b795f5/ninja-1.13.0-py3-none-win_arm64.whl", hash = "sha256:3c0b40b1f0bba764644385319028650087b4c1b18cdfa6f45cb39a3669b81aa9", size = 290806, upload-time = "2025-08-11T15:10:18.018Z" }, ] [[package]] @@ -1761,10 +1842,10 @@ name = "nltk" version = "3.9.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click" }, - { name = "joblib" }, - { name = "regex" }, - { name = "tqdm" }, + { name = "click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "joblib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "regex", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/74/a1/b3b4adf15585a5bc4c357adde150c01ebeeb642173ded4d871e89468767c/nltk-3.9.4.tar.gz", hash = "sha256:ed03bc098a40481310320808b2db712d95d13ca65b27372f8a403949c8b523d0", size = 2946864, upload-time = "2026-03-24T06:13:40.641Z" } wheels = [ @@ -1773,340 +1854,518 @@ wheels = [ [[package]] name = "numba" -version = "0.61.2" +version = "0.65.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "llvmlite" }, - { name = "numpy" }, + { name = "llvmlite", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1c/a0/e21f57604304aa03ebb8e098429222722ad99176a4f979d34af1d1ee80da/numba-0.61.2.tar.gz", hash = "sha256:8750ee147940a6637b80ecf7f95062185ad8726c8c28a2295b8ec1160a196f7d", size = 2820615, upload-time = "2025-04-09T02:58:07.659Z" } +sdist = { url = "https://files.pythonhosted.org/packages/49/61/7299643b9c18d669e04be7c5bcb64d985070d07553274817b45b049e7bfe/numba-0.65.0.tar.gz", hash = "sha256:edad0d9f6682e93624c00125a471ae4df186175d71fd604c983c377cdc03e68b", size = 2764131, upload-time = "2026-04-01T03:52:01.946Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/ca/f470be59552ccbf9531d2d383b67ae0b9b524d435fb4a0d229fef135116e/numba-0.61.2-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:cf9f9fc00d6eca0c23fc840817ce9f439b9f03c8f03d6246c0e7f0cb15b7162a", size = 2775663, upload-time = "2025-04-09T02:57:34.143Z" }, - { url = "https://files.pythonhosted.org/packages/f5/13/3bdf52609c80d460a3b4acfb9fdb3817e392875c0d6270cf3fd9546f138b/numba-0.61.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ea0247617edcb5dd61f6106a56255baab031acc4257bddaeddb3a1003b4ca3fd", size = 2778344, upload-time = "2025-04-09T02:57:36.609Z" }, - { url = "https://files.pythonhosted.org/packages/e2/7d/bfb2805bcfbd479f04f835241ecf28519f6e3609912e3a985aed45e21370/numba-0.61.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ae8c7a522c26215d5f62ebec436e3d341f7f590079245a2f1008dfd498cc1642", size = 3824054, upload-time = "2025-04-09T02:57:38.162Z" }, - { url = "https://files.pythonhosted.org/packages/e3/27/797b2004745c92955470c73c82f0e300cf033c791f45bdecb4b33b12bdea/numba-0.61.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd1e74609855aa43661edffca37346e4e8462f6903889917e9f41db40907daa2", size = 3518531, upload-time = "2025-04-09T02:57:39.709Z" }, - { url = "https://files.pythonhosted.org/packages/b1/c6/c2fb11e50482cb310afae87a997707f6c7d8a48967b9696271347441f650/numba-0.61.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae45830b129c6137294093b269ef0a22998ccc27bf7cf096ab8dcf7bca8946f9", size = 2831612, upload-time = "2025-04-09T02:57:41.559Z" }, - { url = "https://files.pythonhosted.org/packages/3f/97/c99d1056aed767503c228f7099dc11c402906b42a4757fec2819329abb98/numba-0.61.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:efd3db391df53aaa5cfbee189b6c910a5b471488749fd6606c3f33fc984c2ae2", size = 2775825, upload-time = "2025-04-09T02:57:43.442Z" }, - { url = "https://files.pythonhosted.org/packages/95/9e/63c549f37136e892f006260c3e2613d09d5120672378191f2dc387ba65a2/numba-0.61.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:49c980e4171948ffebf6b9a2520ea81feed113c1f4890747ba7f59e74be84b1b", size = 2778695, upload-time = "2025-04-09T02:57:44.968Z" }, - { url = "https://files.pythonhosted.org/packages/97/c8/8740616c8436c86c1b9a62e72cb891177d2c34c2d24ddcde4c390371bf4c/numba-0.61.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3945615cd73c2c7eba2a85ccc9c1730c21cd3958bfcf5a44302abae0fb07bb60", size = 3829227, upload-time = "2025-04-09T02:57:46.63Z" }, - { url = "https://files.pythonhosted.org/packages/fc/06/66e99ae06507c31d15ff3ecd1f108f2f59e18b6e08662cd5f8a5853fbd18/numba-0.61.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbfdf4eca202cebade0b7d43896978e146f39398909a42941c9303f82f403a18", size = 3523422, upload-time = "2025-04-09T02:57:48.222Z" }, - { url = "https://files.pythonhosted.org/packages/0f/a4/2b309a6a9f6d4d8cfba583401c7c2f9ff887adb5d54d8e2e130274c0973f/numba-0.61.2-cp311-cp311-win_amd64.whl", hash = "sha256:76bcec9f46259cedf888041b9886e257ae101c6268261b19fda8cfbc52bec9d1", size = 2831505, upload-time = "2025-04-09T02:57:50.108Z" }, + { url = "https://files.pythonhosted.org/packages/c1/a7/11e2b24251d57cf41fc9ad83f378d890d61a890e3f8eb6338b39833f67a4/numba-0.65.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:032b0b8e879512cd424d79eed6d772a1399c6387ded184c2cf3cc22c08d750a6", size = 3744674, upload-time = "2026-04-01T03:51:27.311Z" }, ] [[package]] name = "numpy" -version = "1.26.4" +version = "2.3.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", size = 15786129, upload-time = "2024-02-06T00:26:44.495Z" } +resolution-markers = [ + "platform_machine == 'x86_64' and sys_platform == 'linux'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/94/ace0fdea5241a27d13543ee117cbc65868e82213fb31a8eb7fe9ff23f313/numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0", size = 20631468, upload-time = "2024-02-05T23:48:01.194Z" }, - { url = "https://files.pythonhosted.org/packages/20/f7/b24208eba89f9d1b58c1668bc6c8c4fd472b20c45573cb767f59d49fb0f6/numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a", size = 13966411, upload-time = "2024-02-05T23:48:29.038Z" }, - { url = "https://files.pythonhosted.org/packages/fc/a5/4beee6488160798683eed5bdb7eead455892c3b4e1f78d79d8d3f3b084ac/numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4", size = 14219016, upload-time = "2024-02-05T23:48:54.098Z" }, - { url = "https://files.pythonhosted.org/packages/4b/d7/ecf66c1cd12dc28b4040b15ab4d17b773b87fa9d29ca16125de01adb36cd/numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f", size = 18240889, upload-time = "2024-02-05T23:49:25.361Z" }, - { url = "https://files.pythonhosted.org/packages/24/03/6f229fe3187546435c4f6f89f6d26c129d4f5bed40552899fcf1f0bf9e50/numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a", size = 13876746, upload-time = "2024-02-05T23:49:51.983Z" }, - { url = "https://files.pythonhosted.org/packages/39/fe/39ada9b094f01f5a35486577c848fe274e374bbf8d8f472e1423a0bbd26d/numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2", size = 18078620, upload-time = "2024-02-05T23:50:22.515Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ef/6ad11d51197aad206a9ad2286dc1aac6a378059e06e8cf22cd08ed4f20dc/numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07", size = 5972659, upload-time = "2024-02-05T23:50:35.834Z" }, - { url = "https://files.pythonhosted.org/packages/19/77/538f202862b9183f54108557bfda67e17603fc560c384559e769321c9d92/numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5", size = 15808905, upload-time = "2024-02-05T23:51:03.701Z" }, - { url = "https://files.pythonhosted.org/packages/11/57/baae43d14fe163fa0e4c47f307b6b2511ab8d7d30177c491960504252053/numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", size = 20630554, upload-time = "2024-02-05T23:51:50.149Z" }, - { url = "https://files.pythonhosted.org/packages/1a/2e/151484f49fd03944c4a3ad9c418ed193cfd02724e138ac8a9505d056c582/numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", size = 13997127, upload-time = "2024-02-05T23:52:15.314Z" }, - { url = "https://files.pythonhosted.org/packages/79/ae/7e5b85136806f9dadf4878bf73cf223fe5c2636818ba3ab1c585d0403164/numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", size = 14222994, upload-time = "2024-02-05T23:52:47.569Z" }, - { url = "https://files.pythonhosted.org/packages/3a/d0/edc009c27b406c4f9cbc79274d6e46d634d139075492ad055e3d68445925/numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", size = 18252005, upload-time = "2024-02-05T23:53:15.637Z" }, - { url = "https://files.pythonhosted.org/packages/09/bf/2b1aaf8f525f2923ff6cfcf134ae5e750e279ac65ebf386c75a0cf6da06a/numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", size = 13885297, upload-time = "2024-02-05T23:53:42.16Z" }, - { url = "https://files.pythonhosted.org/packages/df/a0/4e0f14d847cfc2a633a1c8621d00724f3206cfeddeb66d35698c4e2cf3d2/numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", size = 18093567, upload-time = "2024-02-05T23:54:11.696Z" }, - { url = "https://files.pythonhosted.org/packages/d2/b7/a734c733286e10a7f1a8ad1ae8c90f2d33bf604a96548e0a4a3a6739b468/numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", size = 5968812, upload-time = "2024-02-05T23:54:26.453Z" }, - { url = "https://files.pythonhosted.org/packages/3f/6b/5610004206cf7f8e7ad91c5a85a8c71b2f2f8051a0c0c4d5916b76d6cbb2/numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", size = 15811913, upload-time = "2024-02-05T23:54:53.933Z" }, + { url = "https://files.pythonhosted.org/packages/65/fb/2b23769462b34398d9326081fad5655198fcf18966fcb1f1e49db44fbf31/numpy-2.3.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4", size = 16897903, upload-time = "2025-11-16T22:49:34.191Z" }, + { url = "https://files.pythonhosted.org/packages/6f/3b/1f73994904142b2aa290449b3bb99772477b5fd94d787093e4f24f5af763/numpy-2.3.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748", size = 18838896, upload-time = "2025-11-16T22:49:39.727Z" }, + { url = "https://files.pythonhosted.org/packages/b8/50/94ccd8a2b141cb50651fddd4f6a48874acb3c91c8f0842b08a6afc4b0b21/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7", size = 16729263, upload-time = "2025-11-16T22:52:36.369Z" }, ] [[package]] -name = "nvidia-cublas-cu12" -version = "12.8.3.14" +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "sys_platform == 'darwin'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, +] + +[[package]] +name = "nvidia-cublas" +version = "13.1.0.3" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/df/4b01f10069e23c641f116c62fc31e31e8dc361a153175d81561d15c8143b/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:3f0e05e7293598cf61933258b73e66a160c27d59c4422670bf0b79348c04be44", size = 609620630, upload-time = "2025-01-23T17:55:00.753Z" }, + { url = "https://files.pythonhosted.org/packages/e7/44/423ac00af4dd95a5aeb27207e2c0d9b7118702149bf4704c3ddb55bb7429/nvidia_cublas-13.1.0.3-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:ee8722c1f0145ab246bccb9e452153b5e0515fd094c3678df50b2a0888b8b171", size = 423133236, upload-time = "2025-10-09T08:59:32.536Z" }, ] [[package]] -name = "nvidia-cuda-cupti-cu12" -version = "12.8.57" +name = "nvidia-cuda-cccl" +version = "13.3.3.3.1" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/6f/3683ecf4e38931971946777d231c2df00dd5c1c4c2c914c42ad8f9f4dca6/nvidia_cuda_cupti_cu12-12.8.57-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e0b2eb847de260739bee4a3f66fac31378f4ff49538ff527a38a01a9a39f950", size = 10237547, upload-time = "2025-01-23T17:47:56.863Z" }, + { url = "https://files.pythonhosted.org/packages/fe/fb/195d50d25ab68a76b817ffc68c45b1fb828598ce35a8e5c1736060628dab/nvidia_cuda_cccl-13.3.3.3.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:40ba1fa0b2c694ddc06cc791ed5c8bdad4638e2735b784960d68ac3086399c97", size = 3453013, upload-time = "2026-05-26T16:28:08.209Z" }, ] [[package]] -name = "nvidia-cuda-nvrtc-cu12" -version = "12.8.61" +name = "nvidia-cuda-crt" +version = "13.3.33" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/22/32029d4583f7b19cfe75c84399cbcfd23f2aaf41c66fc8db4da460104fff/nvidia_cuda_nvrtc_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a0fa9c2a21583105550ebd871bd76e2037205d56f33f128e69f6d2a55e0af9ed", size = 88024585, upload-time = "2025-01-23T17:50:10.722Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a7/998af901511d5efdc6e42fc597d32a69f34eecf86f1591a9d230ab3ab951/nvidia_cuda_crt-13.3.33-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ff37600c7b880a14cab4ade763b4c10c0ff92f25cc9dca30f0881ce52693c4", size = 157350, upload-time = "2026-05-26T16:29:22.315Z" }, ] [[package]] -name = "nvidia-cuda-runtime-cu12" -version = "12.8.57" +name = "nvidia-cuda-cupti" +version = "13.0.85" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/16/f6/0e1ef31f4753a44084310ba1a7f0abaf977ccd810a604035abb43421c057/nvidia_cuda_runtime_cu12-12.8.57-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:75342e28567340b7428ce79a5d6bb6ca5ff9d07b69e7ce00d2c7b4dc23eff0be", size = 954762, upload-time = "2025-01-23T17:47:22.21Z" }, + { url = "https://files.pythonhosted.org/packages/33/6d/737d164b4837a9bbd202f5ae3078975f0525a55730fe871d8ed4e3b952b0/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_x86_64.whl", hash = "sha256:4eb01c08e859bf924d222250d2e8f8b8ff6d3db4721288cf35d14252a4d933c8", size = 10715597, upload-time = "2025-09-04T08:26:51.312Z" }, ] [[package]] -name = "nvidia-cudnn-cu12" -version = "9.7.1.26" +name = "nvidia-cuda-nvcc" +version = "13.2.78" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12" }, + { name = "nvidia-cuda-crt", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-runtime", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvvm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/0f/c7c7d538c61794130e759ad74710ab5aa8cab1f700ee1754381f8c665605/nvidia_cuda_nvcc-13.2.78-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c3bd144dd9b6b25e062589acb7bbd43d93d3120c72fad71da808f9817aba1239", size = 44040318, upload-time = "2026-04-13T09:42:50.457Z" }, +] + +[[package]] +name = "nvidia-cuda-nvrtc" +version = "13.0.88" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575", size = 90215200, upload-time = "2025-09-04T08:28:44.204Z" }, ] + +[[package]] +name = "nvidia-cuda-runtime" +version = "13.0.96" +source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/dc/dc825c4b1c83b538e207e34f48f86063c88deaa35d46c651c7c181364ba2/nvidia_cudnn_cu12-9.7.1.26-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:6d011159a158f3cfc47bf851aea79e31bcff60d530b70ef70474c84cac484d07", size = 726851421, upload-time = "2025-02-06T22:18:29.812Z" }, + { url = "https://files.pythonhosted.org/packages/2e/24/d1558f3b68b1d26e706813b1d10aa1d785e4698c425af8db8edc3dced472/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f82250d7782aa23b6cfe765ecc7db554bd3c2870c43f3d1821f1d18aebf0548", size = 2243632, upload-time = "2025-10-09T08:55:36.117Z" }, ] [[package]] -name = "nvidia-cufft-cu12" -version = "11.3.3.41" +name = "nvidia-cuda-tileiras" +version = "13.2.78" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12" }, + { name = "nvidia-cuda-nvcc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvvm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/26/b53c493c38dccb1f1a42e1a21dc12cba2a77fbe36c652f7726d9ec4aba28/nvidia_cufft_cu12-11.3.3.41-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:da650080ab79fcdf7a4b06aa1b460e99860646b176a43f6208099bdc17836b6a", size = 193118795, upload-time = "2025-01-23T17:56:30.536Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b8/c8a96862268943c7cf30a014fe2d8f70c651d30fbfa790d54c3e347b6fa1/nvidia_cuda_tileiras-13.2.78-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5ce7c140a518aa8dfe033e7176f593617ed2fece0e50331e2a14dafd236723fd", size = 36970479, upload-time = "2026-04-13T09:48:49.919Z" }, ] [[package]] -name = "nvidia-cufile-cu12" -version = "1.13.0.11" +name = "nvidia-cudnn-cu13" +version = "9.19.0.56" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/9c/1f3264d0a84c8a031487fb7f59780fc78fa6f1c97776233956780e3dc3ac/nvidia_cufile_cu12-1.13.0.11-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:483f434c541806936b98366f6d33caef5440572de8ddf38d453213729da3e7d4", size = 1197801, upload-time = "2025-01-23T17:57:07.247Z" }, + { url = "https://files.pythonhosted.org/packages/a3/22/0b4b932655d17a6da1b92fa92ab12844b053bb2ac2475e179ba6f043da1e/nvidia_cudnn_cu13-9.19.0.56-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:d20e1734305e9d68889a96e3f35094d733ff1f83932ebe462753973e53a572bf", size = 366066321, upload-time = "2026-02-03T20:44:52.837Z" }, ] [[package]] -name = "nvidia-curand-cu12" -version = "10.3.9.55" +name = "nvidia-cudnn-frontend" +version = "1.25.0" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/fc/7be5d0082507269bb04ac07cc614c84b78749efb96e8cf4100a8a1178e98/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8387d974240c91f6a60b761b83d4b2f9b938b7e0b9617bae0f0dafe4f5c36b86", size = 63618038, upload-time = "2025-01-23T17:57:41.838Z" }, + { url = "https://files.pythonhosted.org/packages/a8/50/224ff36c5d9e02624f8d3c582982bfac74bec481cd331e704fb9a5ecd128/nvidia_cudnn_frontend-1.25.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676d56062d3ade4ffb34315abe52ea766fa4488db1161b702d9ddd872fab4ddf", size = 3413687, upload-time = "2026-06-10T21:07:04.26Z" }, ] [[package]] -name = "nvidia-cusolver-cu12" -version = "11.7.2.55" +name = "nvidia-cufft" +version = "12.0.0.61" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12" }, - { name = "nvidia-cusparse-cu12" }, - { name = "nvidia-nvjitlink-cu12" }, + { name = "nvidia-nvjitlink", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/08/953675873a136d96bb12f93b49ba045d1107bc94d2551c52b12fa6c7dec3/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4d1354102f1e922cee9db51920dba9e2559877cf6ff5ad03a00d853adafb191b", size = 260373342, upload-time = "2025-01-23T17:58:56.406Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2f/7b57e29836ea8714f81e9898409196f47d772d5ddedddf1592eadb8ab743/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6c44f692dce8fd5ffd3e3df134b6cdb9c2f72d99cf40b62c32dde45eea9ddad3", size = 214085489, upload-time = "2025-09-04T08:31:56.044Z" }, ] [[package]] -name = "nvidia-cusparse-cu12" -version = "12.5.7.53" +name = "nvidia-cufile" +version = "1.15.1.6" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-nvjitlink-cu12" }, +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/70/4f193de89a48b71714e74602ee14d04e4019ad36a5a9f20c425776e72cd6/nvidia_cufile-1.15.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44", size = 1223672, upload-time = "2025-09-04T08:32:22.779Z" }, ] + +[[package]] +name = "nvidia-curand" +version = "10.4.0.35" +source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/ab/31e8149c66213b846c082a3b41b1365b831f41191f9f40c6ddbc8a7d550e/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c1b61eb8c85257ea07e9354606b26397612627fdcd327bfd91ccf6155e7c86d", size = 292064180, upload-time = "2025-01-23T18:00:23.233Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9f/be0a41ca4a4917abf5cb9ae0daff1a6060cc5de950aec0396de9f3b52bc5/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:1aee33a5da6e1db083fe2b90082def8915f30f3248d5896bcec36a579d941bfc", size = 59544258, upload-time = "2025-08-04T10:22:03.992Z" }, ] [[package]] -name = "nvidia-cusparselt-cu12" -version = "0.6.3" +name = "nvidia-cusolver" +version = "12.0.4.66" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparse", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvjitlink", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/9a/72ef35b399b0e183bc2e8f6f558036922d453c4d8237dab26c666a04244b/nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e5c8a26c36445dd2e6812f1177978a24e2d37cacce7e090f297a688d1ec44f46", size = 156785796, upload-time = "2024-10-15T21:29:17.709Z" }, + { url = "https://files.pythonhosted.org/packages/5f/67/cba3777620cdacb99102da4042883709c41c709f4b6323c10781a9c3aa34/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:0a759da5dea5c0ea10fd307de75cdeb59e7ea4fcb8add0924859b944babf1112", size = 200941980, upload-time = "2025-09-04T08:33:22.767Z" }, ] [[package]] -name = "nvidia-nccl-cu12" -version = "2.26.2" +name = "nvidia-cusparse" +version = "12.6.3.3" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] wheels = [ - { url = "https://files.pythonhosted.org/packages/67/ca/f42388aed0fddd64ade7493dbba36e1f534d4e6fdbdd355c6a90030ae028/nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:694cf3879a206553cc9d7dbda76b13efaf610fdb70a50cba303de1b0d1530ac6", size = 201319755, upload-time = "2025-03-13T00:29:55.296Z" }, + { url = "https://files.pythonhosted.org/packages/fa/18/623c77619c31d62efd55302939756966f3ecc8d724a14dab2b75f1508850/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b3c89c88d01ee0e477cb7f82ef60a11a4bcd57b6b87c33f789350b59759360b", size = 145942937, upload-time = "2025-09-04T08:33:58.029Z" }, ] [[package]] -name = "nvidia-nvjitlink-cu12" -version = "12.8.61" +name = "nvidia-cusparselt-cu13" +version = "0.8.0" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/03/f8/9d85593582bd99b8d7c65634d2304780aefade049b2b94d96e44084be90b/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:45fd79f2ae20bd67e8bc411055939049873bfd8fac70ff13bd4865e0b9bdab17", size = 39243473, upload-time = "2025-01-23T18:03:03.509Z" }, + { url = "https://files.pythonhosted.org/packages/fd/53/43b0d71f4e702fa9733f8b4571fdca50a8813f1e450b656c239beff12315/nvidia_cusparselt_cu13-0.8.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:25e30a8a7323935d4ad0340b95a0b69926eee755767e8e0b1cf8dd85b197d3fd", size = 169884119, upload-time = "2025-08-13T19:23:41.967Z" }, ] [[package]] -name = "nvidia-nvtx-cu12" -version = "12.8.55" +name = "nvidia-cutlass-dsl" +version = "4.5.2" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cutlass-dsl-libs-base", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/cd/0e8c51b2ae3a58f054f2e7fe91b82d201abfb30167f2431e9bd92d532f42/nvidia_nvtx_cu12-12.8.55-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2dd0780f1a55c21d8e06a743de5bd95653de630decfff40621dbde78cc307102", size = 89896, upload-time = "2025-01-23T17:50:44.487Z" }, + { url = "https://files.pythonhosted.org/packages/f0/15/575d7df4fe2f3406f1cfc68be72aeff2834f8a696daf1cd5bee8017e4507/nvidia_cutlass_dsl-4.5.2-py3-none-any.whl", hash = "sha256:68ed1b63ca74aae87955012da9dfd7fdaae471329d0028b229b841c7192ccf52", size = 10179, upload-time = "2026-05-25T03:38:56.364Z" }, +] + +[package.optional-dependencies] +cu13 = [ + { name = "nvidia-cutlass-dsl-libs-cu13", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] -name = "onnxruntime" -version = "1.24.3" +name = "nvidia-cutlass-dsl-libs-base" +version = "4.5.2" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", +dependencies = [ + { name = "cuda-python", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/e0/78eded54b4478ec01a91c75f1b9bc6dc73a2ec205c4fa2fdc25a456f4089/nvidia_cutlass_dsl_libs_base-4.5.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:9117900cba53d3c21a8dacba6bbf3d6e5f269e427a526c320fb44707a0d57363", size = 74511501, upload-time = "2026-05-25T03:52:03.798Z" }, ] + +[[package]] +name = "nvidia-cutlass-dsl-libs-cu13" +version = "4.5.2" +source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "flatbuffers", marker = "python_full_version < '3.11'" }, - { name = "numpy", marker = "python_full_version < '3.11'" }, - { name = "packaging", marker = "python_full_version < '3.11'" }, - { name = "protobuf", marker = "python_full_version < '3.11'" }, - { name = "sympy", marker = "python_full_version < '3.11'" }, + { name = "cuda-python", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cutlass-dsl-libs-base", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/3d/2153608b1f8f594ccfc67daa45a1d0ff600b9e552b1e5662644e6e3ebec3/nvidia_cutlass_dsl_libs_cu13-4.5.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:df61430d6110eea872acb39257042814bf02dcbb1f8d55ea0c5681bb7ce5836a", size = 78759970, upload-time = "2026-05-25T03:43:46.762Z" }, +] + +[[package]] +name = "nvidia-ml-py" +version = "13.610.43" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/b5/a8fbc356f768fa5c9cfd646668fd7d34bf55bdd1c6e20754642a64d930d4/nvidia_ml_py-13.610.43.tar.gz", hash = "sha256:65437eb73d68d0c62c931ca4d45038472faff03bd0b8729abba4b899f70d60f2", size = 52109, upload-time = "2026-06-01T18:54:08.829Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/45/caa600acfab94560807a20a64b5830d2cd3c3202b7f1328644d70b7d6bd8/nvidia_ml_py-13.610.43-py3-none-any.whl", hash = "sha256:f13c72698edef492f985cc225f14faafe68ae065a2e407f45bdf6f4b9b43fde8", size = 53163, upload-time = "2026-06-01T18:54:07.704Z" }, +] + +[[package]] +name = "nvidia-nccl-cu13" +version = "2.28.9" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/b4/878fefaad5b2bcc6fcf8d474a25e3e3774bc5133e4b58adff4d0bca238bc/nvidia_nccl_cu13-2.28.9-py3-none-manylinux_2_18_x86_64.whl", hash = "sha256:e4553a30f34195f3fa1da02a6da3d6337d28f2003943aa0a3d247bbc25fefc42", size = 196493177, upload-time = "2025-11-18T05:49:17.677Z" }, +] + +[[package]] +name = "nvidia-nvjitlink" +version = "13.0.88" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/7a/123e033aaff487c77107195fa5a2b8686795ca537935a24efae476c41f05/nvidia_nvjitlink-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:13a74f429e23b921c1109976abefacc69835f2f433ebd323d3946e11d804e47b", size = 40713933, upload-time = "2025-09-04T08:35:43.553Z" }, +] + +[[package]] +name = "nvidia-nvshmem-cu13" +version = "3.4.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/35/a9bf80a609e74e3b000fef598933235c908fcefcef9026042b8e6dfde2a9/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:290f0a2ee94c9f3687a02502f3b9299a9f9fe826e6d0287ee18482e78d495b80", size = 60412546, upload-time = "2025-09-06T00:32:41.564Z" }, ] + +[[package]] +name = "nvidia-nvtx" +version = "13.0.85" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/f3/d86c845465a2723ad7e1e5c36dcd75ddb82898b3f53be47ebd429fb2fa5d/nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4", size = 148047, upload-time = "2025-09-04T08:29:01.761Z" }, +] + +[[package]] +name = "nvidia-nvvm" +version = "13.2.78" +source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/41/3253db975a90c3ce1d475e2a230773a21cd7998537f0657947df6fb79861/onnxruntime-1.24.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3e6456801c66b095c5cd68e690ca25db970ea5202bd0c5b84a2c3ef7731c5a3c", size = 17332766, upload-time = "2026-03-05T17:18:59.714Z" }, - { url = "https://files.pythonhosted.org/packages/7e/c5/3af6b325f1492d691b23844d88ed26844c1164620860c5efe95c0e22782d/onnxruntime-1.24.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b2ebc54c6d8281dccff78d4b06e47d4cf07535937584ab759448390a70f4978", size = 15130330, upload-time = "2026-03-05T16:34:53.831Z" }, - { url = "https://files.pythonhosted.org/packages/03/4b/f96b46c1866a293ed23ca2cf5e5a63d413ad3a951da60dd877e3c56cbbca/onnxruntime-1.24.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb56575d7794bf0781156955610c9e651c9504c64d42ec880784b6106244882d", size = 17213247, upload-time = "2026-03-05T17:17:59.812Z" }, - { url = "https://files.pythonhosted.org/packages/36/13/27cf4d8df2578747584e8758aeb0b673b60274048510257f1f084b15e80e/onnxruntime-1.24.3-cp311-cp311-win_amd64.whl", hash = "sha256:c958222ef9eff54018332beecd32d5d94a3ab079d8821937b333811bf4da0d39", size = 12595530, upload-time = "2026-03-05T17:18:49.356Z" }, - { url = "https://files.pythonhosted.org/packages/19/8c/6d9f31e6bae72a8079be12ed8ba36c4126a571fad38ded0a1b96f60f6896/onnxruntime-1.24.3-cp311-cp311-win_arm64.whl", hash = "sha256:a8f761857ebaf58a85b9e42422d03207f1d39e6bb8fecfdbf613bac5b9710723", size = 12261715, upload-time = "2026-03-05T17:18:39.699Z" }, + { url = "https://files.pythonhosted.org/packages/e8/1f/930d63ccc8adcdf27bfc051a24e3e4da2cf6ef987848d6d1d642e29d704b/nvidia_nvvm-13.2.78-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:f5aa433631109bbdec81802c5b5f319bf10bc891fe2f212e4e445845211d6f77", size = 64279462, upload-time = "2026-04-13T10:02:25.719Z" }, ] [[package]] name = "onnxruntime" version = "1.27.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.11' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version >= '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] dependencies = [ - { name = "flatbuffers", marker = "python_full_version >= '3.11'" }, - { name = "numpy", marker = "python_full_version >= '3.11'" }, - { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "protobuf", marker = "python_full_version >= '3.11'" }, + { name = "flatbuffers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "protobuf", version = "7.35.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/d4/e4/5353d7e09ced4a8f473f843223fc75d726b2b5519dcefc12f22a6c92852d/onnxruntime-1.27.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:8ba14a38c570087f3cdb8cfba33f7a38a1e826c1e5b29e17c28ceda0cc910016", size = 18416484, upload-time = "2026-06-15T22:43:43.894Z" }, - { url = "https://files.pythonhosted.org/packages/ed/1f/a2117aa3f144fce88774efa37440d0ca72d0c9144854dfc0961f2b04c6fc/onnxruntime-1.27.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2eb083321af8a236a84c7c140a7f4cecbfa2a987a18c07c78db471c20cd390ef", size = 16419330, upload-time = "2026-06-15T22:42:37.58Z" }, { url = "https://files.pythonhosted.org/packages/e0/cd/74bb804170ceb622fda9111df31a07b3024f7491472256d3a90b5391a4d2/onnxruntime-1.27.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e4f7b0e90d2d212e2c2deaa6c8291616183ab815d3ec558ea12d3ac8b26d36f4", size = 18636930, upload-time = "2026-06-15T22:43:01.584Z" }, - { url = "https://files.pythonhosted.org/packages/fe/8f/5b8e2b85e81735696887175dbaf6409f215683f5ca9d4928fbb038211d32/onnxruntime-1.27.0-cp311-cp311-win_amd64.whl", hash = "sha256:ff050e4f6bf7f12918fa14dcb047c0b02e295f35e86d42532552be4b3d54e977", size = 13356110, upload-time = "2026-06-15T22:43:32.172Z" }, - { url = "https://files.pythonhosted.org/packages/b0/3a/4f568de678126b6a371a93862f015a82138359decd97fcac61fc84b5b774/onnxruntime-1.27.0-cp311-cp311-win_arm64.whl", hash = "sha256:75fbc1e1fb43a39a856c8209c544cca7817b5de7ac16b15b1bdf55d1cc67b9df", size = 13098635, upload-time = "2026-06-15T22:43:19.607Z" }, ] [[package]] name = "openai" -version = "1.99.1" +version = "2.43.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "distro", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "httpx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "jiter", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sniffio", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/fa/88d0c58a0c58df7e6758e66b99c5d028d5e0bb49f8812d7203940cd9dbf1/openai-2.43.0.tar.gz", hash = "sha256:e74d238200a26868977002190fb6631613480a93dfe0c9c982e77021ed60a017", size = 785369, upload-time = "2026-06-17T17:06:56.06Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/d2/ba767f4bbb30776c03d40906a2d3afad716a165ffa1771fc23b8992f7920/openai-2.43.0-py3-none-any.whl", hash = "sha256:65a670b54fadf2268c9e1330133373c963eb779ee969e5cbad419ec2c21dce97", size = 1355077, upload-time = "2026-06-17T17:06:53.614Z" }, +] + +[[package]] +name = "openai-harmony" +version = "0.0.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3e/92/2d038d096f29179c7c9571b431f9e739f87a487121901725e23fe338dd9d/openai_harmony-0.0.8.tar.gz", hash = "sha256:6e43f98e6c242fa2de6f8ea12eab24af63fa2ed3e89c06341fb9d92632c5cbdf", size = 284777, upload-time = "2025-11-05T19:07:06.727Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/3f/1a192b93bb47c6b44cd98ba8cc1d3d2a9308f1bb700c3017e6352da11bda/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c007d277218a50db8839e599ed78e0fffe5130f614c3f6d93ae257f282071a29", size = 2953260, upload-time = "2025-11-05T19:06:55.406Z" }, + { url = "https://files.pythonhosted.org/packages/60/c3/3d1e01e2dba517a91760e4a03e4f20ffc75039a6fe584d0e6f9b5c78fd15/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:007b0476a1f331f8130783f901f1da6f5a7057af1a4891f1b6a31dec364189b5", size = 3205080, upload-time = "2025-11-05T19:07:05.078Z" }, +] + +[[package]] +name = "opencv-python-headless" +version = "4.13.0.92" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/ce/bd17ff5772938267fd49716e94ca24f616ff4cb1ff4c6be13085108037be/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0525a3d2c0b46c611e2130b5fdebc94cf404845d8fa64d2f3a3b679572a5bd22", size = 56016764, upload-time = "2026-02-05T10:26:48.904Z" }, + { url = "https://files.pythonhosted.org/packages/4b/33/b5db29a6c00eb8f50708110d8d453747ca125c8b805bc437b289dbdcc057/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0bd48544f77c68b2941392fcdf9bcd2b9cdf00e98cb8c29b2455d194763cf99e", size = 60391106, upload-time = "2026-02-05T10:30:14.236Z" }, +] + +[[package]] +name = "opentelemetry-api" +version = "1.42.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b4/1c/125e1c936c0873796771b7f04f6c93b9f1bf5d424cea90fda94a99f61da8/opentelemetry_api-1.42.1.tar.gz", hash = "sha256:56c63bea9f77b62856be8c47600474acad853b2924b99b1687c4cb6297166716", size = 72296, upload-time = "2026-05-21T16:32:49.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/ca/9520cc1f3dfbbd03ac5903bbf55833e257bc64b1cf30fa8b0d6df374d821/opentelemetry_api-1.42.1-py3-none-any.whl", hash = "sha256:51a69edacadbc03a8950ace1c4c21099cacc538820ac2c9e36277e78cebba714", size = 61311, upload-time = "2026-05-21T16:32:28.822Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp" +version = "1.42.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-exporter-otlp-proto-grpc", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-exporter-otlp-proto-http", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/08/94/8637919a5d01f81dacf510234bc0110b944f4687a6e96b0a02adf2f6bdce/opentelemetry_exporter_otlp-1.42.1.tar.gz", hash = "sha256:2d9ebaed714377a67d224d46795ddcc11d2c877fa5de35fda70b6f3b010729a9", size = 6086, upload-time = "2026-05-21T16:32:51.963Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/4d/c26080295a36fd22e201fefd7cb9c22cd203189b1af8cd73b158382b7ad8/opentelemetry_exporter_otlp-1.42.1-py3-none-any.whl", hash = "sha256:aedd54545bb0587cd45210abdc8be545af9c01413f3307786e276df1e3c83bee", size = 6733, upload-time = "2026-05-21T16:32:31.261Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-common" +version = "1.42.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-proto", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/9c/216acfeaedadf2e1937f4373929b20f73197c5c4a2546d4f584b7fa63813/opentelemetry_exporter_otlp_proto_common-1.42.1.tar.gz", hash = "sha256:04f1f01fb597c4249dfcd7f8b861c902c2102369d376d9d346ff38de4469a2ee", size = 21433, upload-time = "2026-05-21T16:32:55.526Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/43/2375e7612e1121a4518c17603b6e0b03ad94f565aafad53f464dc5be2bf6/opentelemetry_exporter_otlp_proto_common-1.42.1-py3-none-any.whl", hash = "sha256:f48d395ab815b444da118868977e9798ea354c25737d5cf39578ae894011c140", size = 17327, upload-time = "2026-05-21T16:32:33.387Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-grpc" +version = "1.42.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "grpcio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-api", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-exporter-otlp-proto-common", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-proto", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-sdk", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/87/ca7fc790dfdbcf4f9e9aab14a39ef1b7508ead13707e283de0b3131478d2/opentelemetry_exporter_otlp_proto_grpc-1.42.1.tar.gz", hash = "sha256:975c4461f167dd8ed8857d68d3b6b25f3d272eab896f6a9470d0f5b90e2faf15", size = 27140, upload-time = "2026-05-21T16:32:56.162Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/2b/28ba5b128f47fe8c3bab541000d6feb4b5a9bd26623ca013406f01c0fb60/opentelemetry_exporter_otlp_proto_grpc-1.42.1-py3-none-any.whl", hash = "sha256:0ae1177e2038b18a929b3098215243631ef91136cba26b7e2b12790ceb7e87cc", size = 19617, upload-time = "2026-05-21T16:32:34.278Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-http" +version = "1.42.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-api", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-exporter-otlp-proto-common", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-proto", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-sdk", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "requests", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/77/32/826bfa1d80ecea24f47808de03cd4a0d13c17ecc07712f45123f0f61e4ac/opentelemetry_exporter_otlp_proto_http-1.42.1.tar.gz", hash = "sha256:bf142a21035d7571ac3a09cb2e5639f49886f243972883cfe777ed3bf02b734d", size = 25406, upload-time = "2026-05-21T16:32:56.807Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/96/82cb223a1502f0787d4bbff12907f5f8d870a50731febcd5818d93ef9555/opentelemetry_exporter_otlp_proto_http-1.42.1-py3-none-any.whl", hash = "sha256:00a16da1b312a1d6c7233d600d557c91df71125af73020f3b9a7765bd699d59d", size = 21793, upload-time = "2026-05-21T16:32:35.277Z" }, +] + +[[package]] +name = "opentelemetry-proto" +version = "1.42.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b4/55/63eac3e1089b768ba014091fdd2ae8a9a440c821ef5e2b786909c94c8836/opentelemetry_proto-1.42.1.tar.gz", hash = "sha256:c6a51e6b4f05ae63565f3a113217f3d2bfaec68f78c02d7a6c85f9010d1cfca6", size = 45839, upload-time = "2026-05-21T16:33:03.937Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/9d/171c02c84a76940b7e601805b3bb536985aded9168fbcc9ba52f0a730fa2/opentelemetry_proto-1.42.1-py3-none-any.whl", hash = "sha256:dedb74cba2886c59c7789b227a7a670613025a07489040050aedff6e5c0fb43c", size = 71782, upload-time = "2026-05-21T16:32:44.867Z" }, +] + +[[package]] +name = "opentelemetry-sdk" +version = "1.42.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio" }, - { name = "distro" }, - { name = "httpx" }, - { name = "jiter" }, - { name = "pydantic" }, - { name = "sniffio" }, - { name = "tqdm" }, - { name = "typing-extensions" }, + { name = "opentelemetry-api", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-semantic-conventions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/03/30/f0fb7907a77e733bb801c7bdcde903500b31215141cdb261f04421e6fbec/openai-1.99.1.tar.gz", hash = "sha256:2c9d8e498c298f51bb94bcac724257a3a6cac6139ccdfc1186c6708f7a93120f", size = 497075, upload-time = "2025-08-05T19:42:36.131Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/f7/b390bd9bfd703bf98a68fea1f27786c6872331fd617164a54b8a59bdc008/opentelemetry_sdk-1.42.1.tar.gz", hash = "sha256:8c834e8f8c9ba4171d4ec843d0cb8a67e4c7394d3f9e9297e582cbd9456ddbf7", size = 239262, upload-time = "2026-05-21T16:33:04.641Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/15/9c85154ffd283abfc43309ff3aaa63c3fd02f7767ee684e73670f6c5ade2/openai-1.99.1-py3-none-any.whl", hash = "sha256:8eeccc69e0ece1357b51ca0d9fb21324afee09b20c3e5b547d02445ca18a4e03", size = 767827, upload-time = "2025-08-05T19:42:34.192Z" }, + { url = "https://files.pythonhosted.org/packages/8f/6b/4287766cfbde577ae2272e8884abac325aeaac0d64f41c61d5b8cc595105/opentelemetry_sdk-1.42.1-py3-none-any.whl", hash = "sha256:083cd4bbfaa5aa7b5a9e552430d9951219967cfb27aa61feb13a77aba1fc839d", size = 170907, upload-time = "2026-05-21T16:32:45.894Z" }, ] [[package]] -name = "openai-harmony" -version = "0.0.8" +name = "opentelemetry-semantic-conventions" +version = "0.63b1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pydantic" }, + { name = "opentelemetry-api", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3e/92/2d038d096f29179c7c9571b431f9e739f87a487121901725e23fe338dd9d/openai_harmony-0.0.8.tar.gz", hash = "sha256:6e43f98e6c242fa2de6f8ea12eab24af63fa2ed3e89c06341fb9d92632c5cbdf", size = 284777, upload-time = "2025-11-05T19:07:06.727Z" } +sdist = { url = "https://files.pythonhosted.org/packages/93/99/4d7dd6df64795951413ce6e815f8cf1eb191daf7196ae86574589643d5f3/opentelemetry_semantic_conventions-0.63b1.tar.gz", hash = "sha256:3daf963611334b365e98a57438183eb012d3bfb40b2d931a9af613476b8701a9", size = 148340, upload-time = "2026-05-21T16:33:05.455Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/c6/2502f416d46be3ec08bb66d696cccffb57781a499e3ff2e4d7c174af4e8f/openai_harmony-0.0.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:029ec25ca74abe48fdb58eb9fdd2a8c1618581fc33ce8e5653f8a1ffbfbd9326", size = 2627806, upload-time = "2025-11-05T19:06:57.063Z" }, - { url = "https://files.pythonhosted.org/packages/d3/d2/ce6953ca87db9cae3e775024184da7d1c5cb88cead19a2d75b42f00a959c/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4f709815924ec325b9a890e6ab2bbb0ceec8e319a4e257328eb752cf36b2efc", size = 2948463, upload-time = "2025-11-05T19:06:48.17Z" }, - { url = "https://files.pythonhosted.org/packages/fa/4c/b553c9651662d6ce102ca7f3629d268b23df1abe5841e24bed81e8a8e949/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5cfcfd963b50a41fc656c84d3440ca6eecdccd6c552158ce790b8f2e33dfb5a9", size = 2704083, upload-time = "2025-11-05T19:06:50.205Z" }, - { url = "https://files.pythonhosted.org/packages/9b/af/4eec8f9ab9c27bcdb444460c72cf43011d176fc44c79d6e113094ca1e152/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a3a16972aa1cee38ea958470cd04ac9a2d5ac38fdcf77ab686611246220c158", size = 2959765, upload-time = "2025-11-05T19:06:53.62Z" }, - { url = "https://files.pythonhosted.org/packages/11/3c/33f3374e4624e0e776f6b13b73c45a7ead7f9c4529f8369ed5bfcaa30cac/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4d5cfa168e74d08f8ba6d58a7e49bc7daef4d58951ec69b66b0d56f4927a68d", size = 3427031, upload-time = "2025-11-05T19:06:51.829Z" }, - { url = "https://files.pythonhosted.org/packages/25/3f/1a192b93bb47c6b44cd98ba8cc1d3d2a9308f1bb700c3017e6352da11bda/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c007d277218a50db8839e599ed78e0fffe5130f614c3f6d93ae257f282071a29", size = 2953260, upload-time = "2025-11-05T19:06:55.406Z" }, - { url = "https://files.pythonhosted.org/packages/5b/f8/93b582cad3531797c3db7c2db5400fd841538ccddfd9f5e3df61be99a630/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8565d4f5a0638da1bffde29832ed63c9e695c558611053add3b2dc0b56c92dbc", size = 3127044, upload-time = "2025-11-05T19:06:59.553Z" }, - { url = "https://files.pythonhosted.org/packages/1d/10/4327dbf87f75ae813405fd9a9b4a5cde63d506ffed0a096a440a4cabd89c/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:cbaa3bda75ef0d8836e1f8cc84af62f971b1d756d740efc95c38c3e04c0bfde2", size = 2932931, upload-time = "2025-11-05T19:07:01.437Z" }, - { url = "https://files.pythonhosted.org/packages/8a/c8/1774eec4f6f360ef57618fb8f52e3d3af245b2491bd0297513aa09eec04b/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:772922a9bd24e133950fad71eb1550836f415a88e8c77870e12d0c3bd688ddc2", size = 2996140, upload-time = "2025-11-05T19:07:03.438Z" }, - { url = "https://files.pythonhosted.org/packages/60/c3/3d1e01e2dba517a91760e4a03e4f20ffc75039a6fe584d0e6f9b5c78fd15/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:007b0476a1f331f8130783f901f1da6f5a7057af1a4891f1b6a31dec364189b5", size = 3205080, upload-time = "2025-11-05T19:07:05.078Z" }, - { url = "https://files.pythonhosted.org/packages/14/63/119de431572d7c70a7bf1037034a9be6ed0a7502a7498ba7302bca5b3242/openai_harmony-0.0.8-cp38-abi3-win32.whl", hash = "sha256:a9b5f893326b28d9e935ade14b4f655f5a840942473bc89b201c25f7a15af9cf", size = 2082457, upload-time = "2025-11-05T19:07:09.631Z" }, - { url = "https://files.pythonhosted.org/packages/40/1f/c83cf5a206c263ee70448a5ae4264682555f4d0b5bed0d2cc6ca1108103d/openai_harmony-0.0.8-cp38-abi3-win_amd64.whl", hash = "sha256:39d44f0d8f466bd56698e7ead708bead3141e27b9b87e3ab7d5a6d0e4a869ee5", size = 2438369, upload-time = "2025-11-05T19:07:08.1Z" }, + { url = "https://files.pythonhosted.org/packages/cb/7a/7fe66f5f3682b1dd47d88cc4e11f1c6c0966b737de2d16671146e23c39a5/opentelemetry_semantic_conventions-0.63b1-py3-none-any.whl", hash = "sha256:dfe5ef4dee82586b746f522b818ceb298d00b3d59f660042bd79404bff8d0682", size = 203713, upload-time = "2026-05-21T16:32:47.016Z" }, ] [[package]] -name = "opencv-python-headless" -version = "4.11.0.86" +name = "opentelemetry-semantic-conventions-ai" +version = "0.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "opentelemetry-sdk", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-semantic-conventions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/36/2f/5b2b3ba52c864848885ba988f24b7f105052f68da9ab0e693cc7c25b0b30/opencv-python-headless-4.11.0.86.tar.gz", hash = "sha256:996eb282ca4b43ec6a3972414de0e2331f5d9cda2b41091a49739c19fb843798", size = 95177929, upload-time = "2025-01-16T13:53:40.22Z" } +sdist = { url = "https://files.pythonhosted.org/packages/24/02/10aeacc37a38a3a8fa16ff67bec1ae3bf882539f6f9efb0f70acf802ca2d/opentelemetry_semantic_conventions_ai-0.5.1.tar.gz", hash = "sha256:153906200d8c1d2f8e09bd78dbef526916023de85ac3dab35912bfafb69ff04c", size = 26533, upload-time = "2026-03-26T14:20:38.73Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/53/2c50afa0b1e05ecdb4603818e85f7d174e683d874ef63a6abe3ac92220c8/opencv_python_headless-4.11.0.86-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:48128188ade4a7e517237c8e1e11a9cdf5c282761473383e77beb875bb1e61ca", size = 37326460, upload-time = "2025-01-16T13:52:57.015Z" }, - { url = "https://files.pythonhosted.org/packages/3b/43/68555327df94bb9b59a1fd645f63fafb0762515344d2046698762fc19d58/opencv_python_headless-4.11.0.86-cp37-abi3-macosx_13_0_x86_64.whl", hash = "sha256:a66c1b286a9de872c343ee7c3553b084244299714ebb50fbdcd76f07ebbe6c81", size = 56723330, upload-time = "2025-01-16T13:55:45.731Z" }, - { url = "https://files.pythonhosted.org/packages/45/be/1438ce43ebe65317344a87e4b150865c5585f4c0db880a34cdae5ac46881/opencv_python_headless-4.11.0.86-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6efabcaa9df731f29e5ea9051776715b1bdd1845d7c9530065c7951d2a2899eb", size = 29487060, upload-time = "2025-01-16T13:51:59.625Z" }, - { url = "https://files.pythonhosted.org/packages/dd/5c/c139a7876099916879609372bfa513b7f1257f7f1a908b0bdc1c2328241b/opencv_python_headless-4.11.0.86-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e0a27c19dd1f40ddff94976cfe43066fbbe9dfbb2ec1907d66c19caef42a57b", size = 49969856, upload-time = "2025-01-16T13:53:29.654Z" }, - { url = "https://files.pythonhosted.org/packages/95/dd/ed1191c9dc91abcc9f752b499b7928aacabf10567bb2c2535944d848af18/opencv_python_headless-4.11.0.86-cp37-abi3-win32.whl", hash = "sha256:f447d8acbb0b6f2808da71fddd29c1cdd448d2bc98f72d9bb78a7a898fc9621b", size = 29324425, upload-time = "2025-01-16T13:52:49.048Z" }, - { url = "https://files.pythonhosted.org/packages/86/8a/69176a64335aed183529207ba8bc3d329c2999d852b4f3818027203f50e6/opencv_python_headless-4.11.0.86-cp37-abi3-win_amd64.whl", hash = "sha256:6c304df9caa7a6a5710b91709dd4786bf20a74d57672b3c31f7033cc638174ca", size = 39402386, upload-time = "2025-01-16T13:52:56.418Z" }, + { url = "https://files.pythonhosted.org/packages/55/22/41fb05f1dc5fda2c468e05a41814c20859016c85117b66c8a257cae814f6/opentelemetry_semantic_conventions_ai-0.5.1-py3-none-any.whl", hash = "sha256:25aeb22bd261543b4898a73824026d96770e5351209c7d07a0b1314762b1f6e4", size = 11250, upload-time = "2026-03-26T14:20:37.108Z" }, ] [[package]] name = "orjson" -version = "3.10.14" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/92/f7/3219b56f47b4f5e864fb11cdf4ac0aaa3de608730ad2dc4c6e16382f35ec/orjson-3.10.14.tar.gz", hash = "sha256:cf31f6f071a6b8e7aa1ead1fa27b935b48d00fbfa6a28ce856cfff2d5dd68eed", size = 5282116, upload-time = "2025-01-08T16:59:04.045Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/62/64348b8b29a14c7342f6aa45c8be0a87fdda2ce7716bc123717376537077/orjson-3.10.14-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:849ea7845a55f09965826e816cdc7689d6cf74fe9223d79d758c714af955bcb6", size = 249439, upload-time = "2025-01-08T16:56:21.158Z" }, - { url = "https://files.pythonhosted.org/packages/9f/51/48f4dfbca7b4db630316b170db4a150a33cd405650258bd62a2d619b43b4/orjson-3.10.14-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5947b139dfa33f72eecc63f17e45230a97e741942955a6c9e650069305eb73d", size = 135811, upload-time = "2025-01-08T16:56:25.468Z" }, - { url = "https://files.pythonhosted.org/packages/a1/1c/e18770843e6d045605c8e00a1be801da5668fa934b323b0492a49c9dee4f/orjson-3.10.14-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cde6d76910d3179dae70f164466692f4ea36da124d6fb1a61399ca589e81d69a", size = 150154, upload-time = "2025-01-08T16:56:28.35Z" }, - { url = "https://files.pythonhosted.org/packages/51/1e/3817dc79164f1fc17fc53102f74f62d31f5f4ec042abdd24d94c5e06e51c/orjson-3.10.14-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6dfbaeb7afa77ca608a50e2770a0461177b63a99520d4928e27591b142c74b1", size = 139740, upload-time = "2025-01-08T16:56:29.92Z" }, - { url = "https://files.pythonhosted.org/packages/ff/fc/fbf9e25448f7a2d67c1a2b6dad78a9340666bf9fda3339ff59b1e93f0b6f/orjson-3.10.14-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa45e489ef80f28ff0e5ba0a72812b8cfc7c1ef8b46a694723807d1b07c89ebb", size = 154479, upload-time = "2025-01-08T16:56:31.292Z" }, - { url = "https://files.pythonhosted.org/packages/d4/df/c8b7ea21ff658f6a9a26d562055631c01d445bda5eb613c02c7d0934607d/orjson-3.10.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f5007abfdbb1d866e2aa8990bd1c465f0f6da71d19e695fc278282be12cffa5", size = 130414, upload-time = "2025-01-08T16:56:32.831Z" }, - { url = "https://files.pythonhosted.org/packages/df/f7/e29c2d42bef8fbf696a5e54e6339b0b9ea5179326950fee6ae80acf59d09/orjson-3.10.14-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1b49e2af011c84c3f2d541bb5cd1e3c7c2df672223e7e3ea608f09cf295e5f8a", size = 138545, upload-time = "2025-01-08T16:56:36.206Z" }, - { url = "https://files.pythonhosted.org/packages/8e/97/afdf2908fe8eaeecb29e97fa82dc934f275acf330e5271def0b8fbac5478/orjson-3.10.14-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:164ac155109226b3a2606ee6dda899ccfbe6e7e18b5bdc3fbc00f79cc074157d", size = 130952, upload-time = "2025-01-08T16:56:38.778Z" }, - { url = "https://files.pythonhosted.org/packages/4a/dd/04e01c1305694f47e9794c60ec7cece02e55fa9d57c5d72081eaaa62ad1d/orjson-3.10.14-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6b1225024cf0ef5d15934b5ffe9baf860fe8bc68a796513f5ea4f5056de30bca", size = 414673, upload-time = "2025-01-08T16:56:42.022Z" }, - { url = "https://files.pythonhosted.org/packages/fa/12/28c4d5f6a395ac9693b250f0662366968c47fc99c8f3cd803a65b1f5ba46/orjson-3.10.14-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d6546e8073dc382e60fcae4a001a5a1bc46da5eab4a4878acc2d12072d6166d5", size = 141002, upload-time = "2025-01-08T16:56:43.837Z" }, - { url = "https://files.pythonhosted.org/packages/21/f6/357cb167c2d2fd9542251cfd9f68681b67ed4dcdac82aa6ee2f4f3ab952e/orjson-3.10.14-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9f1d2942605c894162252d6259b0121bf1cb493071a1ea8cb35d79cb3e6ac5bc", size = 129626, upload-time = "2025-01-08T16:56:46.495Z" }, - { url = "https://files.pythonhosted.org/packages/df/07/d9062353500df9db8bfa7c6a5982687c97d0b69a5b158c4166d407ac94e2/orjson-3.10.14-cp310-cp310-win32.whl", hash = "sha256:397083806abd51cf2b3bbbf6c347575374d160331a2d33c5823e22249ad3118b", size = 142429, upload-time = "2025-01-08T16:56:47.931Z" }, - { url = "https://files.pythonhosted.org/packages/50/ba/6ba2bf69ac0526d143aebe78bc39e6e5fbb51d5336fbc5efb9aab6687cd9/orjson-3.10.14-cp310-cp310-win_amd64.whl", hash = "sha256:fa18f949d3183a8d468367056be989666ac2bef3a72eece0bade9cdb733b3c28", size = 133512, upload-time = "2025-01-08T16:56:49.439Z" }, - { url = "https://files.pythonhosted.org/packages/bf/18/26721760368e12b691fb6811692ed21ae5275ea918db409ba26866cacbe8/orjson-3.10.14-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f506fd666dd1ecd15a832bebc66c4df45c1902fd47526292836c339f7ba665a9", size = 249437, upload-time = "2025-01-08T16:56:51.077Z" }, - { url = "https://files.pythonhosted.org/packages/d5/5b/2adfe7cc301edeb3bffc1942956659c19ec00d51a21c53c17c0767bebf47/orjson-3.10.14-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efe5fd254cfb0eeee13b8ef7ecb20f5d5a56ddda8a587f3852ab2cedfefdb5f6", size = 135812, upload-time = "2025-01-08T16:56:53.529Z" }, - { url = "https://files.pythonhosted.org/packages/8a/68/07df7787fd9ff6dba815b2d793eec5e039d288fdf150431ed48a660bfcbb/orjson-3.10.14-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ddc8c866d7467f5ee2991397d2ea94bcf60d0048bdd8ca555740b56f9042725", size = 150153, upload-time = "2025-01-08T16:56:55.198Z" }, - { url = "https://files.pythonhosted.org/packages/02/71/f68562734461b801b53bacd5365e079dcb3c78656a662f0639494880e522/orjson-3.10.14-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3af8e42ae4363773658b8d578d56dedffb4f05ceeb4d1d4dd3fb504950b45526", size = 139742, upload-time = "2025-01-08T16:56:58.426Z" }, - { url = "https://files.pythonhosted.org/packages/04/03/1355fb27652582f00d3c62e93a32b982fa42bc31d2e07f0a317867069096/orjson-3.10.14-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84dd83110503bc10e94322bf3ffab8bc49150176b49b4984dc1cce4c0a993bf9", size = 154479, upload-time = "2025-01-08T16:56:59.96Z" }, - { url = "https://files.pythonhosted.org/packages/7c/47/1c2a840f27715e8bc2bbafffc851512ede6e53483593eded190919bdcaf4/orjson-3.10.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36f5bfc0399cd4811bf10ec7a759c7ab0cd18080956af8ee138097d5b5296a95", size = 130413, upload-time = "2025-01-08T16:57:03.46Z" }, - { url = "https://files.pythonhosted.org/packages/dd/b2/5bb51006cbae85b052d1bbee7ff43ae26fa155bb3d31a71b0c07d384d5e3/orjson-3.10.14-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868943660fb2a1e6b6b965b74430c16a79320b665b28dd4511d15ad5038d37d5", size = 138545, upload-time = "2025-01-08T16:57:06.337Z" }, - { url = "https://files.pythonhosted.org/packages/79/30/7841a5dd46bb46b8e868791d5469c9d4788d3e26b7e69d40256647997baf/orjson-3.10.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33449c67195969b1a677533dee9d76e006001213a24501333624623e13c7cc8e", size = 130953, upload-time = "2025-01-08T16:57:07.803Z" }, - { url = "https://files.pythonhosted.org/packages/08/49/720e7c2040c0f1df630a36d83d449bd7e4d4471071d5ece47a4f7211d570/orjson-3.10.14-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e4c9f60f9fb0b5be66e416dcd8c9d94c3eabff3801d875bdb1f8ffc12cf86905", size = 414675, upload-time = "2025-01-08T16:57:09.436Z" }, - { url = "https://files.pythonhosted.org/packages/50/b0/ca7619f34280e7dcbd50dbc9c5fe5200c12cd7269b8858652beb3887483f/orjson-3.10.14-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0de4d6315cfdbd9ec803b945c23b3a68207fd47cbe43626036d97e8e9561a436", size = 141004, upload-time = "2025-01-08T16:57:12.298Z" }, - { url = "https://files.pythonhosted.org/packages/75/1b/7548e3a711543f438e87a4349e00439ab7f37807942e5659f29363f35765/orjson-3.10.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:83adda3db595cb1a7e2237029b3249c85afbe5c747d26b41b802e7482cb3933e", size = 129629, upload-time = "2025-01-08T16:57:14.778Z" }, - { url = "https://files.pythonhosted.org/packages/b0/1e/4930a6ff46debd6be1ff18e869b7bc43a7ad762c865610b7e745038d6f68/orjson-3.10.14-cp311-cp311-win32.whl", hash = "sha256:998019ef74a4997a9d741b1473533cdb8faa31373afc9849b35129b4b8ec048d", size = 142430, upload-time = "2025-01-08T16:57:16.324Z" }, - { url = "https://files.pythonhosted.org/packages/28/e0/6cc1cd1dfde36555e81ac869f7847e86bb11c27f97b72fde2f1509b12163/orjson-3.10.14-cp311-cp311-win_amd64.whl", hash = "sha256:9d034abdd36f0f0f2240f91492684e5043d46f290525d1117712d5b8137784eb", size = 133516, upload-time = "2025-01-08T16:57:17.813Z" }, +version = "3.11.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/0c/964746fcafbd16f8ff53219ad9f6b412b34f345c75f384ad434ceaadb538/orjson-3.11.9.tar.gz", hash = "sha256:4fef17e1f8722c11587a6ef18e35902450221da0028e65dbaaa543619e68e48f", size = 5599163, upload-time = "2026-05-06T15:11:08.309Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/51/3fb9e65ae76ee97bd611869a503fa3fc0a6e81dd8b737cf3003f682df7ff/orjson-3.11.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f01c4818b3fc9b0da8e096722a84318071eaa118df35f6ed2344da0e73a5444f", size = 228522, upload-time = "2026-05-06T15:09:35.362Z" }, + { url = "https://files.pythonhosted.org/packages/16/fa/9d54b07cb3f3b0bfd57841478e42d7a0ece4a9f49f9907eecf5a45461687/orjson-3.11.9-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:3ebca4179031ee716ed076ffadc29428e900512f6fccee8614c9983157fcf19c", size = 128463, upload-time = "2026-05-06T15:09:37.063Z" }, + { url = "https://files.pythonhosted.org/packages/49/bd/360686f39348aa88827cb6fbf7dc606fd41c831a35235e1abf1db8e3a9e6/orjson-3.11.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:147302878da387104b66bb4a8b0227d1d487e976ce41a8501916161072ed87b1", size = 133971, upload-time = "2026-05-06T15:09:45.239Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8a/4081492586d75b073d60c5271a8d0f05a0955cabf1e34c8473f6fcd84235/orjson-3.11.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:63e0efbc991250c0b3143488fa57d95affcabbfc63c99c48d625dd37779aafe2", size = 136959, upload-time = "2026-05-06T15:09:51.311Z" }, +] + +[[package]] +name = "ormsgpack" +version = "1.12.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/12/0c/f1761e21486942ab9bb6feaebc610fa074f7c5e496e6962dea5873348077/ormsgpack-1.12.2.tar.gz", hash = "sha256:944a2233640273bee67521795a73cf1e959538e0dfb7ac635505010455e53b33", size = 39031, upload-time = "2026-01-18T20:55:28.023Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/08/8b68f24b18e69d92238aa8f258218e6dfeacf4381d9d07ab8df303f524a9/ormsgpack-1.12.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:bd5f4bf04c37888e864f08e740c5a573c4017f6fd6e99fa944c5c935fabf2dd9", size = 378266, upload-time = "2026-01-18T20:55:59.876Z" }, + { url = "https://files.pythonhosted.org/packages/1b/33/543627f323ff3c73091f51d6a20db28a1a33531af30873ea90c5ac95a9b5/ormsgpack-1.12.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43013a3f3e2e902e1d05e72c0f1aeb5bedbb8e09240b51e26792a3c89267e181", size = 212401, upload-time = "2026-01-18T20:56:10.101Z" }, + { url = "https://files.pythonhosted.org/packages/66/c4/f337ac0905eed9c393ef990c54565cd33644918e0a8031fe48c098c71dbf/ormsgpack-1.12.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c6a4c34ddef109647c769d69be65fa1de7a6022b02ad45546a69b3216573eb4a", size = 425181, upload-time = "2026-01-18T20:55:37.83Z" }, ] [[package]] name = "outlines-core" -version = "0.2.10" +version = "0.2.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/04/4a0812eb27c086cfd2e66e7ec9150f33e105912a9b7f8b335e3479f03a06/outlines_core-0.2.14.tar.gz", hash = "sha256:64808deed1591ca3029ff64346ceb974cd5d780c916ea82504951fe83523039e", size = 191539, upload-time = "2026-01-09T15:59:10.016Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/69/e0be45d4c8ad7d301cdc9917d22ff39211da1e830f92fb07b29c9221b5c4/outlines_core-0.2.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:615566bf8257d2bba8ac192cdfc29d1c4357f57b53672fbd622e821215e4f1bd", size = 2338968, upload-time = "2026-01-09T15:58:23.317Z" }, +] + +[[package]] +name = "packageurl-python" +version = "0.17.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/e2/de74a5fd00299215270a750f356ba7cb427ba5d3e495cab07cfc3110ca86/outlines_core-0.2.10.tar.gz", hash = "sha256:c9ee7be195ac18dda5acce41d8805c2fb550a4affd525414511662cfa7097dfe", size = 197140, upload-time = "2025-05-12T18:20:27.301Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/d6/3b5a4e3cfaef7a53869a26ceb034d1ff5e5c27c814ce77260a96d50ab7bb/packageurl_python-0.17.6.tar.gz", hash = "sha256:1252ce3a102372ca6f86eb968e16f9014c4ba511c5c37d95a7f023e2ca6e5c25", size = 50618, upload-time = "2025-11-24T15:20:17.998Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/cb/c5e8dfd1de4b3933d3b49a06bbded8c12c8eaf1e7869cc84530799aafa70/outlines_core-0.2.10-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b984c932bdf2843e3d5a8e57e09830d52c4237ac394f39542c4e543378b94ffb", size = 1950128, upload-time = "2025-05-12T18:19:07.174Z" }, - { url = "https://files.pythonhosted.org/packages/c1/de/338a2c89434034e861de75a530234af269300fb8d3e751569da09bdf25b9/outlines_core-0.2.10-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:65b2dba48d0f98b0145eb50494985f026e3c10df3fde94ced40e9c2aa6ea32ca", size = 2124575, upload-time = "2025-05-12T18:19:09.727Z" }, - { url = "https://files.pythonhosted.org/packages/0a/d9/f6dabd7ef45ee0c53afa193db59b1cc857b96cad52eba71185ece31e619f/outlines_core-0.2.10-cp310-cp310-macosx_15_0_arm64.whl", hash = "sha256:ac23b028da10e6914b762f36a7096e793a0e37b6c03f19963ef7875c05b67890", size = 1948695, upload-time = "2025-05-12T18:19:11.927Z" }, - { url = "https://files.pythonhosted.org/packages/06/99/1f058276cfedc731dc25e9dafa0f5664597c3546fd1dc68d7925513db6a1/outlines_core-0.2.10-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:9c5b9a3f7e658949a3dd07b8a28134277a047ed7d73f6e3b4ca8209346bbff54", size = 2120479, upload-time = "2025-05-12T18:19:13.711Z" }, - { url = "https://files.pythonhosted.org/packages/7a/94/5c40f424039f969c9766000b39cfee0e11c3b00a42fc3d6cf43a83568ca0/outlines_core-0.2.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70d99dd37a826b4d85a5dcb39ae3b557e986c9bb1c4566bbb26f589531369a53", size = 2274970, upload-time = "2025-05-12T18:19:15.533Z" }, - { url = "https://files.pythonhosted.org/packages/59/54/e5001070c1f67c0284caf1371ed5d6e1fff4bdb8aa06cd50f6c440ff4726/outlines_core-0.2.10-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:207309a1d4fcf3100e3bbdc31b4d65f2b4f5d809d600c1509e28b6dca028a892", size = 2103127, upload-time = "2025-05-12T18:19:17.251Z" }, - { url = "https://files.pythonhosted.org/packages/70/59/0388ccb03bc82d7696fbf21bd1f608e56d339f43157791a93c3870fb5802/outlines_core-0.2.10-cp310-cp310-win32.whl", hash = "sha256:534fafab18e2962b9973cae852f47476307dc217dd0708d53cbf54809d8b304e", size = 1764213, upload-time = "2025-05-12T18:19:19.334Z" }, - { url = "https://files.pythonhosted.org/packages/fb/d2/43bbef4fff12c6414d6daadfa841e39605347e0331cc68dfe3d6d29f1c98/outlines_core-0.2.10-cp310-cp310-win_amd64.whl", hash = "sha256:a29e261ab57fd992b236854fd19b46b17ad8c8b7fdc6d95a97ae83480e634cff", size = 2054688, upload-time = "2025-05-12T18:19:23.769Z" }, - { url = "https://files.pythonhosted.org/packages/20/d4/3ee07a453e952bd5e4448e2eb8fad123af288a1a8f898cc18b074024e438/outlines_core-0.2.10-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:c0de2c683f5ca37211a3fe1c8d8530c3d92fa0ae3297b237369517dcea4b5a77", size = 1950037, upload-time = "2025-05-12T18:19:25.567Z" }, - { url = "https://files.pythonhosted.org/packages/e2/ee/7eab255e16759b0c1457899de7a4d346181edf32afdcc469b4110c27e4a5/outlines_core-0.2.10-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:434aba95e0e08ef8cb6af2008562df1ad67ab02b68e64f4e725eff00bfcceb29", size = 2124545, upload-time = "2025-05-12T18:19:28.408Z" }, - { url = "https://files.pythonhosted.org/packages/80/8b/033f3d1908cd0a9679be98dec9e0d868511f92a9d9b294bc7e7a6d59f4d9/outlines_core-0.2.10-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:750e2d5e0b083161208599c9c2b99c8c2b944ac82d22de91546f4b2c14c57895", size = 1948711, upload-time = "2025-05-12T18:19:30.541Z" }, - { url = "https://files.pythonhosted.org/packages/41/53/967a853b678afd806c67eee739a24be58ad75a50f17b22d5396a9bb3a84f/outlines_core-0.2.10-cp311-cp311-macosx_15_0_x86_64.whl", hash = "sha256:4231fb008d6282f8c49543d6ae57b173e3ca1d77bbc4ff75472706a4a38cecbf", size = 2120494, upload-time = "2025-05-12T18:19:32.308Z" }, - { url = "https://files.pythonhosted.org/packages/b5/5f/e3c4589f1814a5d50c3b1b95ef2ff151c9e6e6d5c5ab62e07078410b1c6a/outlines_core-0.2.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63b9f0ef1fb61a5e18697e885b2eaa1f244d2ea021d68fdb2c9a607a769aeaa8", size = 2274712, upload-time = "2025-05-12T18:19:34.004Z" }, - { url = "https://files.pythonhosted.org/packages/86/c5/81917cdc984b375488d7a1bd0f4dd3e7330dc9d9979289504d32e195ba29/outlines_core-0.2.10-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:7b48e4bd776d4b3083d07baa3d722654e0425780772c4217f1df49d4984041b6", size = 2102981, upload-time = "2025-05-12T18:19:36.296Z" }, - { url = "https://files.pythonhosted.org/packages/e5/2e/baebc1b4dba5c92508282471ed655eb91fc13c70bd2b55c1fd7c6f16b8b7/outlines_core-0.2.10-cp311-cp311-win32.whl", hash = "sha256:795b19362798c408113da913a03e31a562a5faf4e2ea45ec0f44435843cc185e", size = 1764124, upload-time = "2025-05-12T18:19:37.979Z" }, - { url = "https://files.pythonhosted.org/packages/03/db/70de7ed1e39efee8de6356ebd13e2e7b931b0b251bc02817238e8d288029/outlines_core-0.2.10-cp311-cp311-win_amd64.whl", hash = "sha256:b5df420c57fc257a30cf3a6e088b174aeb84a19d516f6818f00b29b626540629", size = 2054551, upload-time = "2025-05-12T18:19:39.742Z" }, + { url = "https://files.pythonhosted.org/packages/b1/2f/c7277b7615a93f51b5fbc1eacfc1b75e8103370e786fd8ce2abf6e5c04ab/packageurl_python-0.17.6-py3-none-any.whl", hash = "sha256:31a85c2717bc41dd818f3c62908685ff9eebcb68588213745b14a6ee9e7df7c9", size = 36776, upload-time = "2025-11-24T15:20:16.962Z" }, ] [[package]] @@ -2123,27 +2382,18 @@ name = "pandas" version = "2.2.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, - { name = "python-dateutil" }, - { name = "pytz" }, - { name = "tzdata" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "python-dateutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pytz", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tzdata", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213, upload-time = "2024-09-20T13:10:04.827Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/70/c853aec59839bceed032d52010ff5f1b8d87dc3114b762e4ba2727661a3b/pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", size = 12580827, upload-time = "2024-09-20T13:08:42.347Z" }, - { url = "https://files.pythonhosted.org/packages/99/f2/c4527768739ffa4469b2b4fff05aa3768a478aed89a2f271a79a40eee984/pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", size = 11303897, upload-time = "2024-09-20T13:08:45.807Z" }, - { url = "https://files.pythonhosted.org/packages/ed/12/86c1747ea27989d7a4064f806ce2bae2c6d575b950be087837bdfcabacc9/pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", size = 66480908, upload-time = "2024-09-20T18:37:13.513Z" }, - { url = "https://files.pythonhosted.org/packages/44/50/7db2cd5e6373ae796f0ddad3675268c8d59fb6076e66f0c339d61cea886b/pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", size = 13064210, upload-time = "2024-09-20T13:08:48.325Z" }, - { url = "https://files.pythonhosted.org/packages/61/61/a89015a6d5536cb0d6c3ba02cebed51a95538cf83472975275e28ebf7d0c/pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", size = 16754292, upload-time = "2024-09-20T19:01:54.443Z" }, - { url = "https://files.pythonhosted.org/packages/ce/0d/4cc7b69ce37fac07645a94e1d4b0880b15999494372c1523508511b09e40/pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", size = 14416379, upload-time = "2024-09-20T13:08:50.882Z" }, - { url = "https://files.pythonhosted.org/packages/31/9e/6ebb433de864a6cd45716af52a4d7a8c3c9aaf3a98368e61db9e69e69a9c/pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", size = 11598471, upload-time = "2024-09-20T13:08:53.332Z" }, { url = "https://files.pythonhosted.org/packages/a8/44/d9502bf0ed197ba9bf1103c9867d5904ddcaf869e52329787fc54ed70cc8/pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", size = 12602222, upload-time = "2024-09-20T13:08:56.254Z" }, { url = "https://files.pythonhosted.org/packages/52/11/9eac327a38834f162b8250aab32a6781339c69afe7574368fffe46387edf/pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", size = 11321274, upload-time = "2024-09-20T13:08:58.645Z" }, - { url = "https://files.pythonhosted.org/packages/45/fb/c4beeb084718598ba19aa9f5abbc8aed8b42f90930da861fcb1acdb54c3a/pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", size = 15579836, upload-time = "2024-09-20T19:01:57.571Z" }, { url = "https://files.pythonhosted.org/packages/cd/5f/4dba1d39bb9c38d574a9a22548c540177f78ea47b32f99c0ff2ec499fac5/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", size = 13058505, upload-time = "2024-09-20T13:09:01.501Z" }, - { url = "https://files.pythonhosted.org/packages/b9/57/708135b90391995361636634df1f1130d03ba456e95bcf576fada459115a/pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", size = 16744420, upload-time = "2024-09-20T19:02:00.678Z" }, { url = "https://files.pythonhosted.org/packages/86/4a/03ed6b7ee323cf30404265c284cee9c65c56a212e0a08d9ee06984ba2240/pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", size = 14440457, upload-time = "2024-09-20T13:09:04.105Z" }, - { url = "https://files.pythonhosted.org/packages/ed/8c/87ddf1fcb55d11f9f847e3c69bb1c6f8e46e2f40ab1a2d2abadb2401b007/pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", size = 11617166, upload-time = "2024-09-20T13:09:06.917Z" }, ] [[package]] @@ -2160,16 +2410,17 @@ name = "peft" version = "0.15.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "accelerate" }, - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "psutil" }, - { name = "pyyaml" }, - { name = "safetensors" }, - { name = "torch" }, - { name = "tqdm" }, - { name = "transformers" }, + { name = "accelerate", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "psutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "safetensors", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/33/65/faa18cd8ffbe0f742c3f2559770646cce2574b9cd28a2a05e8d36f64e968/peft-0.15.2.tar.gz", hash = "sha256:7059029f4d42a092ded1aa117dd366a46084aef638bdd593f6ab0195d5427fcd", size = 472952, upload-time = "2025-04-15T15:27:53.09Z" } wheels = [ @@ -2182,35 +2433,79 @@ version = "12.2.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819, upload-time = "2026-04-01T14:46:17.687Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/aa/d0b28e1c811cd4d5f5c2bfe2e022292bd255ae5744a3b9ac7d6c8f72dd75/pillow-12.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a4e8f36e677d3336f35089648c8955c51c6d386a13cf6ee9c189c5f5bd713a9f", size = 5354355, upload-time = "2026-04-01T14:42:15.402Z" }, - { url = "https://files.pythonhosted.org/packages/27/8e/1d5b39b8ae2bd7650d0c7b6abb9602d16043ead9ebbfef4bc4047454da2a/pillow-12.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e589959f10d9824d39b350472b92f0ce3b443c0a3442ebf41c40cb8361c5b97", size = 4695871, upload-time = "2026-04-01T14:42:18.234Z" }, - { url = "https://files.pythonhosted.org/packages/f0/c5/dcb7a6ca6b7d3be41a76958e90018d56c8462166b3ef223150360850c8da/pillow-12.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a52edc8bfff4429aaabdf4d9ee0daadbbf8562364f940937b941f87a4290f5ff", size = 6269734, upload-time = "2026-04-01T14:42:20.608Z" }, - { url = "https://files.pythonhosted.org/packages/ea/f1/aa1bb13b2f4eba914e9637893c73f2af8e48d7d4023b9d3750d4c5eb2d0c/pillow-12.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:975385f4776fafde056abb318f612ef6285b10a1f12b8570f3647ad0d74b48ec", size = 8076080, upload-time = "2026-04-01T14:42:23.095Z" }, - { url = "https://files.pythonhosted.org/packages/a1/2a/8c79d6a53169937784604a8ae8d77e45888c41537f7f6f65ed1f407fe66d/pillow-12.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd9c0c7a0c681a347b3194c500cb1e6ca9cab053ea4d82a5cf45b6b754560136", size = 6382236, upload-time = "2026-04-01T14:42:25.82Z" }, - { url = "https://files.pythonhosted.org/packages/b5/42/bbcb6051030e1e421d103ce7a8ecadf837aa2f39b8f82ef1a8d37c3d4ebc/pillow-12.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:88d387ff40b3ff7c274947ed3125dedf5262ec6919d83946753b5f3d7c67ea4c", size = 7070220, upload-time = "2026-04-01T14:42:28.68Z" }, - { url = "https://files.pythonhosted.org/packages/3f/e1/c2a7d6dd8cfa6b231227da096fd2d58754bab3603b9d73bf609d3c18b64f/pillow-12.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:51c4167c34b0d8ba05b547a3bb23578d0ba17b80a5593f93bd8ecb123dd336a3", size = 6493124, upload-time = "2026-04-01T14:42:31.579Z" }, - { url = "https://files.pythonhosted.org/packages/5f/41/7c8617da5d32e1d2f026e509484fdb6f3ad7efaef1749a0c1928adbb099e/pillow-12.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:34c0d99ecccea270c04882cb3b86e7b57296079c9a4aff88cb3b33563d95afaa", size = 7194324, upload-time = "2026-04-01T14:42:34.615Z" }, - { url = "https://files.pythonhosted.org/packages/2d/de/a777627e19fd6d62f84070ee1521adde5eeda4855b5cf60fe0b149118bca/pillow-12.2.0-cp310-cp310-win32.whl", hash = "sha256:b85f66ae9eb53e860a873b858b789217ba505e5e405a24b85c0464822fe88032", size = 6376363, upload-time = "2026-04-01T14:42:37.19Z" }, - { url = "https://files.pythonhosted.org/packages/e7/34/fc4cb5204896465842767b96d250c08410f01f2f28afc43b257de842eed5/pillow-12.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:673aa32138f3e7531ccdbca7b3901dba9b70940a19ccecc6a37c77d5fdeb05b5", size = 7083523, upload-time = "2026-04-01T14:42:39.62Z" }, - { url = "https://files.pythonhosted.org/packages/2d/a0/32852d36bc7709f14dc3f64f929a275e958ad8c19a6deba9610d458e28b3/pillow-12.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:3e080565d8d7c671db5802eedfb438e5565ffa40115216eabb8cd52d0ecce024", size = 2463318, upload-time = "2026-04-01T14:42:42.063Z" }, { url = "https://files.pythonhosted.org/packages/68/e1/748f5663efe6edcfc4e74b2b93edfb9b8b99b67f21a854c3ae416500a2d9/pillow-12.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:8be29e59487a79f173507c30ddf57e733a357f67881430449bb32614075a40ab", size = 5354347, upload-time = "2026-04-01T14:42:44.255Z" }, { url = "https://files.pythonhosted.org/packages/47/a1/d5ff69e747374c33a3b53b9f98cca7889fce1fd03d79cdc4e1bccc6c5a87/pillow-12.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71cde9a1e1551df7d34a25462fc60325e8a11a82cc2e2f54578e5e9a1e153d65", size = 4695873, upload-time = "2026-04-01T14:42:46.452Z" }, - { url = "https://files.pythonhosted.org/packages/df/21/e3fbdf54408a973c7f7f89a23b2cb97a7ef30c61ab4142af31eee6aebc88/pillow-12.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f490f9368b6fc026f021db16d7ec2fbf7d89e2edb42e8ec09d2c60505f5729c7", size = 6280168, upload-time = "2026-04-01T14:42:49.228Z" }, { url = "https://files.pythonhosted.org/packages/d3/f1/00b7278c7dd52b17ad4329153748f87b6756ec195ff786c2bdf12518337d/pillow-12.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8bd7903a5f2a4545f6fd5935c90058b89d30045568985a71c79f5fd6edf9b91e", size = 8088188, upload-time = "2026-04-01T14:42:51.735Z" }, - { url = "https://files.pythonhosted.org/packages/ad/cf/220a5994ef1b10e70e85748b75649d77d506499352be135a4989c957b701/pillow-12.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3997232e10d2920a68d25191392e3a4487d8183039e1c74c2297f00ed1c50705", size = 6394401, upload-time = "2026-04-01T14:42:54.343Z" }, { url = "https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e74473c875d78b8e9d5da2a70f7099549f9eb37ded4e2f6a463e60125bccd176", size = 7079655, upload-time = "2026-04-01T14:42:56.954Z" }, - { url = "https://files.pythonhosted.org/packages/6b/3d/45132c57d5fb4b5744567c3817026480ac7fc3ce5d4c47902bc0e7f6f853/pillow-12.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:56a3f9c60a13133a98ecff6197af34d7824de9b7b38c3654861a725c970c197b", size = 6503105, upload-time = "2026-04-01T14:42:59.847Z" }, { url = "https://files.pythonhosted.org/packages/7d/2e/9df2fc1e82097b1df3dce58dc43286aa01068e918c07574711fcc53e6fb4/pillow-12.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:90e6f81de50ad6b534cab6e5aef77ff6e37722b2f5d908686f4a5c9eba17a909", size = 7203402, upload-time = "2026-04-01T14:43:02.664Z" }, - { url = "https://files.pythonhosted.org/packages/bd/2e/2941e42858ebb67e50ae741473de81c2984e6eff7b397017623c676e2e8d/pillow-12.2.0-cp311-cp311-win32.whl", hash = "sha256:8c984051042858021a54926eb597d6ee3012393ce9c181814115df4c60b9a808", size = 6378149, upload-time = "2026-04-01T14:43:05.274Z" }, - { url = "https://files.pythonhosted.org/packages/69/42/836b6f3cd7f3e5fa10a1f1a5420447c17966044c8fbf589cc0452d5502db/pillow-12.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6e6b2a0c538fc200b38ff9eb6628228b77908c319a005815f2dde585a0664b60", size = 7082626, upload-time = "2026-04-01T14:43:08.557Z" }, - { url = "https://files.pythonhosted.org/packages/c2/88/549194b5d6f1f494b485e493edc6693c0a16f4ada488e5bd974ed1f42fad/pillow-12.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:9a8a34cc89c67a65ea7437ce257cea81a9dad65b29805f3ecee8c8fe8ff25ffe", size = 2463531, upload-time = "2026-04-01T14:43:10.743Z" }, { url = "https://files.pythonhosted.org/packages/4e/b7/2437044fb910f499610356d1352e3423753c98e34f915252aafecc64889f/pillow-12.2.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538bd5e05efec03ae613fd89c4ce0368ecd2ba239cc25b9f9be7ed426b0af1f", size = 5273969, upload-time = "2026-04-01T14:45:55.538Z" }, { url = "https://files.pythonhosted.org/packages/f6/f4/8316e31de11b780f4ac08ef3654a75555e624a98db1056ecb2122d008d5a/pillow-12.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:394167b21da716608eac917c60aa9b969421b5dcbbe02ae7f013e7b85811c69d", size = 4659674, upload-time = "2026-04-01T14:45:58.093Z" }, - { url = "https://files.pythonhosted.org/packages/d4/37/664fca7201f8bb2aa1d20e2c3d5564a62e6ae5111741966c8319ca802361/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5d04bfa02cc2d23b497d1e90a0f927070043f6cbf303e738300532379a4b4e0f", size = 5288479, upload-time = "2026-04-01T14:46:01.141Z" }, { url = "https://files.pythonhosted.org/packages/49/62/5b0ed78fce87346be7a5cfcfaaad91f6a1f98c26f86bdbafa2066c647ef6/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0c838a5125cee37e68edec915651521191cef1e6aa336b855f495766e77a366e", size = 7032230, upload-time = "2026-04-01T14:46:03.874Z" }, - { url = "https://files.pythonhosted.org/packages/c3/28/ec0fc38107fc32536908034e990c47914c57cd7c5a3ece4d8d8f7ffd7e27/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a6c9fa44005fa37a91ebfc95d081e8079757d2e904b27103f4f5fa6f0bf78c0", size = 5355404, upload-time = "2026-04-01T14:46:06.33Z" }, { url = "https://files.pythonhosted.org/packages/5e/8b/51b0eddcfa2180d60e41f06bd6d0a62202b20b59c68f5a132e615b75aecf/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25373b66e0dd5905ed63fa3cae13c82fbddf3079f2c8bf15c6fb6a35586324c1", size = 6002215, upload-time = "2026-04-01T14:46:08.83Z" }, - { url = "https://files.pythonhosted.org/packages/bc/60/5382c03e1970de634027cee8e1b7d39776b778b81812aaf45b694dfe9e28/pillow-12.2.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bfa9c230d2fe991bed5318a5f119bd6780cda2915cca595393649fc118ab895e", size = 7080946, upload-time = "2026-04-01T14:46:11.734Z" }, +] + +[[package]] +name = "pip" +version = "26.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/91/47e7d486260f618783899587af63ccf7980fb60245c3e63dd4571c6b57ad/pip-26.1.2.tar.gz", hash = "sha256:f49cd134c61cf2fd75e0ce2676db03e4054504a5a4986d00f8299ae632dc4605", size = 1840799, upload-time = "2026-05-31T17:33:58.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/95/6b5cb3461ea5673ba0995989746db58eb18b91b54dbf331e72f569540946/pip-26.1.2-py3-none-any.whl", hash = "sha256:382ff9f685ee3bc25864f820aa50505825f10f5458ffff07e30a6d96e5715cab", size = 1813144, upload-time = "2026-05-31T17:33:56.772Z" }, +] + +[[package]] +name = "pip-api" +version = "0.0.34" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pip", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/f1/ee85f8c7e82bccf90a3c7aad22863cc6e20057860a1361083cd2adacb92e/pip_api-0.0.34.tar.gz", hash = "sha256:9b75e958f14c5a2614bae415f2adf7eeb54d50a2cfbe7e24fd4826471bac3625", size = 123017, upload-time = "2024-07-09T20:32:30.641Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/f7/ebf5003e1065fd00b4cbef53bf0a65c3d3e1b599b676d5383ccb7a8b88ba/pip_api-0.0.34-py3-none-any.whl", hash = "sha256:8b2d7d7c37f2447373aa2cf8b1f60a2f2b27a84e1e9e0294a3f6ef10eb3ba6bb", size = 120369, upload-time = "2024-07-09T20:32:29.099Z" }, +] + +[[package]] +name = "pip-audit" +version = "2.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cachecontrol", extra = ["filecache"], marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "cyclonedx-python-lib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pip-api", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pip-requirements-parser", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "platformdirs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "rich", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tomli", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tomli-w", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/a4/f21d5f0a0edabcbce31560b73c7c5a6f72ae87af4236fd1069c8f59a353d/pip_audit-2.10.1.tar.gz", hash = "sha256:1eb4565d19ebe5d48996f4b770b4d2b32887e12cb12cfa637f1a064011b55ffc", size = 54275, upload-time = "2026-06-10T22:17:01.744Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/a7/b0c504148114047bd1bc9d97447453c6850ca176bb2f3c0038835994e8b7/pip_audit-2.10.1-py3-none-any.whl", hash = "sha256:99ef3f600a317c1945f1e89e227ef26e1c2d618429b8bd3fa6f4f7c440c4611a", size = 62023, upload-time = "2026-06-10T22:17:00.309Z" }, +] + +[[package]] +name = "pip-requirements-parser" +version = "32.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyparsing", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/2a/63b574101850e7f7b306ddbdb02cb294380d37948140eecd468fae392b54/pip-requirements-parser-32.0.1.tar.gz", hash = "sha256:b4fa3a7a0be38243123cf9d1f3518da10c51bdb165a2b2985566247f9155a7d3", size = 209359, upload-time = "2022-12-21T15:25:22.732Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/d0/d04f1d1e064ac901439699ee097f58688caadea42498ec9c4b4ad2ef84ab/pip_requirements_parser-32.0.1-py3-none-any.whl", hash = "sha256:4659bc2a667783e7a15d190f6fccf8b2486685b6dba4c19c3876314769c57526", size = 35648, upload-time = "2022-12-21T15:25:21.046Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" }, ] [[package]] @@ -2227,27 +2522,15 @@ name = "preshed" version = "3.0.13" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cymem" }, - { name = "murmurhash" }, + { name = "cymem", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "murmurhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/43/75/fe6b7bbd0dea530a001b0e24c331b21a0be2786e402abf3c57f5dce43d4b/preshed-3.0.13.tar.gz", hash = "sha256:d75f718bbfd97e992f7827e0fa7faf6a91bdd9c922d5baa4b50d62731396cb89", size = 18338, upload-time = "2026-03-23T08:57:31.378Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/7e/d55d8cdeefa78995eec15a11ae16cbd0581a0be2342527a64251fd948cef/preshed-3.0.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:42c58b07e8b431e33d0ad9922e896632453821cad8b09171b619b8c61101916f", size = 136920, upload-time = "2026-03-23T08:56:10.829Z" }, - { url = "https://files.pythonhosted.org/packages/10/bc/ee1f388a97c613e656d774b522b4ddc1cd32e984ca4eb1157c5d822e9011/preshed-3.0.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a06e27f4e5b9d7943840087828c6a0dae4a3475576d12c2e95b71abbb325a80b", size = 137576, upload-time = "2026-03-23T08:56:12.441Z" }, - { url = "https://files.pythonhosted.org/packages/a6/dd/24c5a576035df4043998e1069718dd7369e107ce9d169df2333d00461dbf/preshed-3.0.13-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8b82d7a7bb63d248a6cbbfcabb4a570c993d54d964e39dc5d85c14018ba2079e", size = 780270, upload-time = "2026-03-23T08:56:14.108Z" }, - { url = "https://files.pythonhosted.org/packages/e5/ab/fb0f6808fffad96c962ce254587cae2bb7df0fda3e6d6b481ce4f60f6c2d/preshed-3.0.13-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bef84b225d226af43adfee78ce5ddede72a6155ce5292c1a41dcd1f0b9c87c30", size = 779722, upload-time = "2026-03-23T08:56:15.721Z" }, - { url = "https://files.pythonhosted.org/packages/bf/7f/c9948dde95bf965c6af2c31f0dbbc6c7e5433b5de1c85f20644edf38c78c/preshed-3.0.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:70d502e081348df207d90f347f21770ed596822bb04eb3c3b32b7281579e90c6", size = 1775435, upload-time = "2026-03-23T08:56:17.655Z" }, - { url = "https://files.pythonhosted.org/packages/d2/57/8db29ac57b981ef19d1078001aa6c2055a3eed46998c1c93f3d1fdb86106/preshed-3.0.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:985cb9b097beda76cd13c01a0499707103e8915f888fa30f8aa8324ef2cc6b08", size = 1842612, upload-time = "2026-03-23T08:56:19.755Z" }, - { url = "https://files.pythonhosted.org/packages/38/e5/ead05efc423be237fba76a3bf0eeb492e5d3801504c096c3552c517f2f72/preshed-3.0.13-cp310-cp310-win_amd64.whl", hash = "sha256:867aa73abbf4ee3b4d7662148091c33a8c039271269e3a7f1e0ca995f91995c8", size = 121951, upload-time = "2026-03-23T08:56:21.138Z" }, - { url = "https://files.pythonhosted.org/packages/aa/80/9cf7f7c208046c97d4b2765f89545a6ea8cfefbd87f0141dde61e6f098ac/preshed-3.0.13-cp310-cp310-win_arm64.whl", hash = "sha256:2b704e46cb7b88f656ef16a3e5347b36525a1c53721d327a4ba1457404101f85", size = 109604, upload-time = "2026-03-23T08:56:22.537Z" }, { url = "https://files.pythonhosted.org/packages/7c/d1/7bc39738388b38ff48cecbb326a9b2bb3f422bb32097be92e010f3162395/preshed-3.0.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5268c0e6fa96f50cdf87f516c2d4b32563c12706ee768e75c00e8d0098acd545", size = 136718, upload-time = "2026-03-23T08:56:23.889Z" }, { url = "https://files.pythonhosted.org/packages/f6/65/de465b6801740140c2b5d2db6c312ca7937dcfd0442f1ae7d50dee529544/preshed-3.0.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:df642547a1a94079978a0ea8f4593ab4b8d3bd43f767bef0ef64d9a214f8c4c9", size = 137261, upload-time = "2026-03-23T08:56:25.303Z" }, - { url = "https://files.pythonhosted.org/packages/89/83/478ee078746a4a413c841542caebd2ea74b659475b8bf5f2e3724b6fe655/preshed-3.0.13-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09397592d333a77f88454e72b7f1f941b2afaf040b392b9e74898dbc4648cdf5", size = 821010, upload-time = "2026-03-23T08:56:26.455Z" }, { url = "https://files.pythonhosted.org/packages/ee/2e/1ac761e973966893cd3a0ad3256360365276e2d1e779e351448981a1156a/preshed-3.0.13-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f8e6fe0620ed0f96a246d46447055c447e071cd8222731a045c235e8a758c918", size = 823096, upload-time = "2026-03-23T08:56:28.126Z" }, - { url = "https://files.pythonhosted.org/packages/3c/51/7824cfd85dd7fe547888de20228ebd87d9acd3708206d30b82211e382d23/preshed-3.0.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:502f93f49a22788203f02d3067d4ea077a0cca3864de6a792eae12e7ce589e14", size = 1812148, upload-time = "2026-03-23T08:56:29.755Z" }, { url = "https://files.pythonhosted.org/packages/34/48/32160a24705d56179de6af838c10a0c735c955dae5f9e4bb344750b79bc2/preshed-3.0.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:acd4d89abeca3678c5d8c89b3cd351314465bc67c7fa053d2644f8513e543386", size = 1881154, upload-time = "2026-03-23T08:56:31.49Z" }, - { url = "https://files.pythonhosted.org/packages/ed/22/0344b50f8b1ad9e3aac08099c47e1aba91c81602fd117d2673f6606ecae6/preshed-3.0.13-cp311-cp311-win_amd64.whl", hash = "sha256:de87fbabb0f37c3c92d4dd9b94fc82ab73cdab4247cdfbd57ab3926caa983919", size = 122219, upload-time = "2026-03-23T08:56:32.74Z" }, - { url = "https://files.pythonhosted.org/packages/33/c4/812eeaa568510f396e27edab01100ca71418f032fd7098b107f12e572361/preshed-3.0.13-cp311-cp311-win_arm64.whl", hash = "sha256:5e2753779832e411e93eb727f3d409c0a6b7408e5ce4dd868076d8ece48c7693", size = 109308, upload-time = "2026-03-23T08:56:33.839Z" }, ] [[package]] @@ -2264,8 +2547,8 @@ name = "prometheus-fastapi-instrumentator" version = "8.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "prometheus-client" }, - { name = "starlette" }, + { name = "prometheus-client", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "starlette", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/98/7a/fe49b7060e585e2cfa28cc1d13ebfe9c2904dcd80cf11071d5de0f622ff2/prometheus_fastapi_instrumentator-8.0.0.tar.gz", hash = "sha256:c31ed192db077e75467b28b2fe5055362517f53369b798cb8dac9ff85f3f1c38", size = 20357, upload-time = "2026-05-29T13:04:43.327Z" } wheels = [ @@ -2278,55 +2561,37 @@ version = "0.5.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/56/030b7b4719d53085722893e0009dffb9236aa10bca1b12121bdc5626ef16/propcache-0.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a81be28596d6559f6131ef33e10200de6e17643b3c74ce03f9eb103be6ae8b", size = 93417, upload-time = "2026-05-08T20:59:15.597Z" }, - { url = "https://files.pythonhosted.org/packages/1a/55/1140a8e067b8ec093a18a4ae7bb0045d9db65da38a08618ddc5e2f1994aa/propcache-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29cbaac5ea0212663e6845e04b5e188d5a6ae6dd919810ac835bf1d3b42c3f4c", size = 53847, upload-time = "2026-05-08T20:59:17.096Z" }, - { url = "https://files.pythonhosted.org/packages/20/42/0e7443c90310498561addf346e7d57fe3c6ba1914e1ba938b5464c7bbfd2/propcache-0.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bf3be92233808fcd338eba0fb4d0b59ec5772af4f4ecfcec450d1bfc0f8b5eb", size = 53512, upload-time = "2026-05-08T20:59:18.64Z" }, - { url = "https://files.pythonhosted.org/packages/b7/db/cf51a71bab2009517d1a7f0ee07657e3bd446c4d69f67e6966cf17bcf956/propcache-0.5.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f8ea531c794b9d6274acd4e8d2c2ebcac590a4361d27482edd3010b79f1325e", size = 58068, upload-time = "2026-05-08T20:59:20.683Z" }, - { url = "https://files.pythonhosted.org/packages/b7/43/39b6bdee9699fa1e1641c519feeb64a67e2a9f93bb465c70776b37a7333f/propcache-0.5.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:decfca4c79dd53ebab484b00cc4b6717d8c369f86e74aa4ca395a64ac651495e", size = 61020, upload-time = "2026-05-08T20:59:22.112Z" }, - { url = "https://files.pythonhosted.org/packages/26/0b/843726fbb0a29a8c5684fdb25971823638399f31e52e9d1f06a02dc9aa6b/propcache-0.5.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4621064bbf28fa77ff64dd5d94367c04684c67d3a5bf1dff25f0cd0d98a38f3b", size = 62732, upload-time = "2026-05-08T20:59:23.805Z" }, - { url = "https://files.pythonhosted.org/packages/39/6e/899fed76dc1942b8a64193a4f059d7f1a2c7ef65085e8a9366ed8ec0d199/propcache-0.5.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b96db7141a592cbc968daf1feea83a118e6ab378af4abbc72b248c895414c22d", size = 60140, upload-time = "2026-05-08T20:59:25.389Z" }, - { url = "https://files.pythonhosted.org/packages/ab/09/3da4be9b5b879219ad234aa535b3dd4a080ed1ad48d3a73ca07a9e798f22/propcache-0.5.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1ca071adabaab6e9219924bbe00af821f1ee7de113a9eca1cdc292de3d120f4d", size = 60400, upload-time = "2026-05-08T20:59:27.238Z" }, - { url = "https://files.pythonhosted.org/packages/60/2f/09b72b874a9aa0044faf52a69807a6ed618e267ceaa9ec4a63195fa5b504/propcache-0.5.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e4294d04a94dcab1b3bccd8b66d962dcad411a1d19414b2a41d1445f1de32ad0", size = 58155, upload-time = "2026-05-08T20:59:28.48Z" }, - { url = "https://files.pythonhosted.org/packages/8a/37/97489848c54c95578045473954f10956d619ce6a09e7ac137b71cdcb698b/propcache-0.5.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a0e399a2eccb91ed18721f86aa85757727400b6865c89e88934781deb9c8498b", size = 57037, upload-time = "2026-05-08T20:59:30.146Z" }, - { url = "https://files.pythonhosted.org/packages/22/db/6c695285ccfc49012743ee9c98212b8c5dd0aed7b63cfd816d4a0f7a1601/propcache-0.5.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:823581fd5cb08b12a48bfa11fe962a7916766b6170c17b028fbdf762b85eb9bf", size = 61103, upload-time = "2026-05-08T20:59:31.626Z" }, - { url = "https://files.pythonhosted.org/packages/98/a9/1e500401ca593b0bdb6bf75a70bc2d723835fd53360edff6af70692c7546/propcache-0.5.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:949c91d1a990cf3b2e8188dfcfb25005e0b834a06c63fa4ef9f360878ce21ecf", size = 60394, upload-time = "2026-05-08T20:59:32.829Z" }, - { url = "https://files.pythonhosted.org/packages/1f/87/f638b6e375eae0f30a1a2325d8b34fd85fdc785bb9960cf805f3bf1ec69a/propcache-0.5.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:cc1177027eda740fdb152706bd215a3f124e3eea15afc39f2cb9fe351b50619e", size = 63084, upload-time = "2026-05-08T20:59:35.964Z" }, - { url = "https://files.pythonhosted.org/packages/f6/18/884573f5d97b6d9eba68de759a82c901b7e39d7904d30f7b8d58d42d2a12/propcache-0.5.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b05d643f944a8c3c4bd86d65ffd87bf3264b617f87791940302bc474d2ff5274", size = 60999, upload-time = "2026-05-08T20:59:38.481Z" }, - { url = "https://files.pythonhosted.org/packages/8f/1a/c3915eb059ceec9e758a56e4cfd955292bc0f201be2176a46b76d94b303a/propcache-0.5.2-cp310-cp310-win32.whl", hash = "sha256:8114f28879e0904748e831c3a7774261bd9e75f49be089f389a76f959dcd13fe", size = 39036, upload-time = "2026-05-08T20:59:40.323Z" }, - { url = "https://files.pythonhosted.org/packages/5b/02/1dfd5607501a602d19c1c449d2d193b7d1c611f9246b4059026a1189a80e/propcache-0.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:5fcb98e7598b1ee0addab320d90f65b530297a867dbfe9de52ea838077e16e3d", size = 42190, upload-time = "2026-05-08T20:59:42.232Z" }, - { url = "https://files.pythonhosted.org/packages/57/93/f71588ad08b3e6f4b555b5ef215808a3c02b042d0151ad82fa6f15be677a/propcache-0.5.2-cp310-cp310-win_arm64.whl", hash = "sha256:04dc2390d9edbbaef7461f33322555976ffddf0b650a038649d026358714e6c5", size = 38545, upload-time = "2026-05-08T20:59:44.087Z" }, { url = "https://files.pythonhosted.org/packages/e7/f1/8a8cc1c2c7e7934ab77e0163414f736fadbc0f5e8dd9673b952355ac175b/propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78", size = 90744, upload-time = "2026-05-08T20:59:45.799Z" }, { url = "https://files.pythonhosted.org/packages/c2/f4/651b1225e976bd1a2ba5cfba0c29d096581c2636b437e3a9a7ab6276270a/propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959", size = 52033, upload-time = "2026-05-08T20:59:47.408Z" }, { url = "https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7", size = 52754, upload-time = "2026-05-08T20:59:49.202Z" }, - { url = "https://files.pythonhosted.org/packages/7d/fe/b3551b41bbc2f5b5bb088fc6920567cd43101253e68fbaa261339eb96fe1/propcache-0.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511", size = 57573, upload-time = "2026-05-08T20:59:50.778Z" }, - { url = "https://files.pythonhosted.org/packages/83/27/ab851ebd1b7172e3e161f5f8d39e315d54a91bea246f01f4d872d3376aef/propcache-0.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660", size = 60645, upload-time = "2026-05-08T20:59:52.227Z" }, - { url = "https://files.pythonhosted.org/packages/95/7d/466b3d18022e9897cbda9c735c493c5bd747d7a4c6f5ea1480b4cec434b6/propcache-0.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66", size = 61563, upload-time = "2026-05-08T20:59:53.866Z" }, { url = "https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b", size = 58888, upload-time = "2026-05-08T20:59:55.457Z" }, - { url = "https://files.pythonhosted.org/packages/0a/67/bb777ffd907633563bf35fd859c4ce97b0512c32f4633cf5d1eb7c33512b/propcache-0.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67", size = 59253, upload-time = "2026-05-08T20:59:57.075Z" }, - { url = "https://files.pythonhosted.org/packages/b9/42/64f8d90b73fd9cdc1499b48057ff6d9cd2a98a25734c9bb62ecf07e87061/propcache-0.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f", size = 57558, upload-time = "2026-05-08T20:59:58.602Z" }, - { url = "https://files.pythonhosted.org/packages/eb/02/dba5bc03c9041f2092ea55a449caf5dfe68352c6654511b29ba0654ddb69/propcache-0.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c", size = 55007, upload-time = "2026-05-08T20:59:59.837Z" }, - { url = "https://files.pythonhosted.org/packages/14/c0/43f649c7aa2a77a3b100d84e9dea3a483120ecb608bfe36ce49eaff517fe/propcache-0.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0", size = 60355, upload-time = "2026-05-08T21:00:01.144Z" }, - { url = "https://files.pythonhosted.org/packages/83/c0/435dafd27f1cb4a495381dae60e25883ccfe4020bb72818e8184c1678092/propcache-0.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6", size = 59057, upload-time = "2026-05-08T21:00:02.401Z" }, - { url = "https://files.pythonhosted.org/packages/53/ae/6e292df9135d659944e96cb3389258e4a663e5b2b5f6c217ef0ddc8d2f73/propcache-0.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27", size = 61938, upload-time = "2026-05-08T21:00:03.638Z" }, { url = "https://files.pythonhosted.org/packages/0b/42/314ebc50d8159055411fd6b0bda322ff510e4b1f7d2e4927940ad0f6af20/propcache-0.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f", size = 59731, upload-time = "2026-05-08T21:00:04.881Z" }, - { url = "https://files.pythonhosted.org/packages/b8/9b/2da6dee38871c3c8772fabc2758325a5c9077d6d18c597737dc04dd884cd/propcache-0.5.2-cp311-cp311-win32.whl", hash = "sha256:cd416c1de191973c52ff1a12a57446bfc7642797b282d7caf2162d7d1b8aa9a0", size = 38966, upload-time = "2026-05-08T21:00:06.511Z" }, - { url = "https://files.pythonhosted.org/packages/42/4e/f17363fb58c0afe05b067361cb6d86ed2d29de6506779a27547c4d183075/propcache-0.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:44e488ef40dbb452700b2b1f8188934121f6648f52c295055662d2191959ff82", size = 42135, upload-time = "2026-05-08T21:00:08.088Z" }, - { url = "https://files.pythonhosted.org/packages/c6/eb/6af6685077d22e8b33358d3c548e3282706a0b3cd85044ffba4e5dd08e3b/propcache-0.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:54adaa85a22078d1e306304a40984dc5be99d599bf3dc0a24dc98f7daeab89ab", size = 38381, upload-time = "2026-05-08T21:00:09.692Z" }, { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, ] +[[package]] +name = "protobuf" +version = "6.33.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "platform_machine == 'x86_64' and sys_platform == 'linux'", +] +sdist = { url = "https://files.pythonhosted.org/packages/66/70/e908e9c5e52ef7c3a6c7902c9dfbb34c7e29c25d2f81ade3856445fd5c94/protobuf-6.33.6.tar.gz", hash = "sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135", size = 444531, upload-time = "2026-03-18T19:05:00.988Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593", size = 323436, upload-time = "2026-03-18T19:04:55.768Z" }, + { url = "https://files.pythonhosted.org/packages/c4/72/02445137af02769918a93807b2b7890047c32bfb9f90371cbc12688819eb/protobuf-6.33.6-py3-none-any.whl", hash = "sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901", size = 170656, upload-time = "2026-03-18T19:04:59.826Z" }, +] + [[package]] name = "protobuf" version = "7.35.1" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "sys_platform == 'darwin'", +] sdist = { url = "https://files.pythonhosted.org/packages/da/01/9ef0afd7999eb9badb3a768b4aedd78c86d4c65cfaf1958ab276199e76b4/protobuf-7.35.1.tar.gz", hash = "sha256:ce115a26fe0c39a2c29973d914d327e516a6455464489fe3cd1e51a1b354f81a", size = 458717, upload-time = "2026-06-11T21:55:40.257Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/10/03/8aeeb7458d22546bf64b5250ca1daeb5ff757d900e8e4a7476c6f0db843e/protobuf-7.35.1-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:24f857477359a85c0c235261b8ba905fd51b2562f4a64ca1df5473f29850cbf6", size = 433226, upload-time = "2026-06-11T21:55:31.719Z" }, - { url = "https://files.pythonhosted.org/packages/37/4b/dfb89eb0e652a1ff073c39a59fb5e3a83cfe9b57a2c83fa6d78270101767/protobuf-7.35.1-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:11d6b0ec246892d85215b0a13ca6e0233cf5284b68f0ac02646427f4ff88a799", size = 328847, upload-time = "2026-06-11T21:55:34.035Z" }, - { url = "https://files.pythonhosted.org/packages/0f/58/dc12f2cd484951524af6e3382c785869b9b3fb5e52ee95ae23add53ee8f9/protobuf-7.35.1-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:b73f9489a4b8b1c9cb1f8ed951c736392592edb24b9d6819f36d2e10b171d5b4", size = 344030, upload-time = "2026-06-11T21:55:34.941Z" }, - { url = "https://files.pythonhosted.org/packages/e4/be/5b3cfe508bfab6761414ff944e3366eb13be4fd71efcd69450f89ba39f43/protobuf-7.35.1-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:74758715c53d7158fb76caf4f0cfdacc5329a4b1bb994f865d6cf302d413a1c4", size = 327130, upload-time = "2026-06-11T21:55:35.921Z" }, - { url = "https://files.pythonhosted.org/packages/d8/bc/6d6c7ba8709c85f8f2c390b2b118d6fb08a783676a572271851bf45a7d22/protobuf-7.35.1-cp310-abi3-win32.whl", hash = "sha256:353652e4efd0bca5b5fc2656abf8307ef351f0cf938c9eba09f0e09c20a25c30", size = 428945, upload-time = "2026-06-11T21:55:37.034Z" }, - { url = "https://files.pythonhosted.org/packages/0a/19/8d0cb6f20a1ef7b18f1c8986ad5783f22f84cce39c6ce9a6e645ea55192e/protobuf-7.35.1-cp310-abi3-win_amd64.whl", hash = "sha256:230a75ddfc2de4806e56696ce9640c1cdfdb6543b7cfce98d42a4c0a0e7bdb87", size = 439996, upload-time = "2026-06-11T21:55:38.123Z" }, { url = "https://files.pythonhosted.org/packages/19/c7/5f7c636ec43e0c545e28d1f1db71990108306f7bdcb89f069ba97e428e7f/protobuf-7.35.1-py3-none-any.whl", hash = "sha256:4bc97768d8fe4ad6743c8a19403e314511ed9f6d13205b687e52421c023ac1b9", size = 171659, upload-time = "2026-06-11T21:55:39.155Z" }, ] @@ -2339,11 +2604,7 @@ wheels = [ { 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]] @@ -2355,26 +2616,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335, upload-time = "2022-10-25T20:38:27.636Z" }, ] +[[package]] +name = "py-serializable" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "defusedxml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/73/21/d250cfca8ff30c2e5a7447bc13861541126ce9bd4426cd5d0c9f08b5547d/py_serializable-2.1.0.tar.gz", hash = "sha256:9d5db56154a867a9b897c0163b33a793c804c80cee984116d02d49e4578fc103", size = 52368, upload-time = "2025-07-21T09:56:48.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/bf/7595e817906a29453ba4d99394e781b6fabe55d21f3c15d240f85dd06bb1/py_serializable-2.1.0-py3-none-any.whl", hash = "sha256:b56d5d686b5a03ba4f4db5e769dc32336e142fc3bd4d68a8c25579ebb0a67304", size = 23045, upload-time = "2025-07-21T09:56:46.848Z" }, +] + [[package]] name = "pyarrow" version = "24.0.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/91/13/13e1069b351bdc3881266e11147ffccf687505dbb0ea74036237f5d454a5/pyarrow-24.0.0.tar.gz", hash = "sha256:85fe721a14dd823aca09127acbb06c3ca723efbd436c004f16bca601b04dcc83", size = 1180261, upload-time = "2026-04-21T10:51:25.837Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/bf/a34fee1d624152124fa8355c42f34195ad5fe5233ce5bb87946432047d52/pyarrow-24.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:7c2b98645d576a0b9616892ead22b64a83a5f043c5e2ca15ebcefcb5b70c80cb", size = 35076681, upload-time = "2026-04-21T08:51:46.845Z" }, - { url = "https://files.pythonhosted.org/packages/1d/41/64180033d7027afce12dc96d0fe1f504c6fa112190582b458acea2399530/pyarrow-24.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:644a246325b8c69c595ad1dd4b463eba4b0cdb731370e4a86137d433208d6147", size = 36684260, upload-time = "2026-04-21T08:51:53.642Z" }, - { url = "https://files.pythonhosted.org/packages/57/02/9b9320e673dd8a99411fac78690f3df92f6dd6f59754c750110bca66d64e/pyarrow-24.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:3a577bd840ca83f646f0a625dbc571dba7044c43c2d1503afc378b570954345c", size = 45698566, upload-time = "2026-04-21T10:46:02.133Z" }, - { url = "https://files.pythonhosted.org/packages/67/33/f75e91b9a64c3f33c787e263c93b871ad91b8a4a68c1d5cebddd9840e835/pyarrow-24.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e3268e43984d0b1a185c89b4cfff282a7ead12fc93f56cfd7088bdbcbe727041", size = 48835562, upload-time = "2026-04-21T10:46:10.278Z" }, - { url = "https://files.pythonhosted.org/packages/a5/63/097510448e47e4091faa41c43ba92f97cecaab8f4535b56a3d149578f634/pyarrow-24.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2392d954fcb920f42d230284b677605e4e2fbb11f2821e823e642abd67fbb491", size = 49394997, upload-time = "2026-04-21T10:46:18.08Z" }, - { url = "https://files.pythonhosted.org/packages/60/6b/c047d6222ab279024a062742d1807e2fbaf27bba88a98637299ff47b9236/pyarrow-24.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bec9373df11544592b0ba7ec2af0e35059e5f0e7647c6183a854dedd193298f1", size = 51911424, upload-time = "2026-04-21T10:46:25.347Z" }, - { url = "https://files.pythonhosted.org/packages/3a/ba/464cc70761c2a525d97ebd84e21c31ebd47f3ef4bdcee117009f51c46f24/pyarrow-24.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:c42ab9439498270139cc63e18847a02afe5c8b3ed9c931266533cfe378bd3591", size = 27251730, upload-time = "2026-04-21T10:46:30.913Z" }, { url = "https://files.pythonhosted.org/packages/62/c9/a47ab7ece0d86cbe6678418a0fbd1ac4bb493b9184a3891dfa0e7f287ae0/pyarrow-24.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b0e131f880cda8d04e076cee175a46fc0e8bc8b65c99c6c09dff6669335fde74", size = 35068898, upload-time = "2026-04-21T10:46:36.599Z" }, { url = "https://files.pythonhosted.org/packages/d1/bc/8db86617a9a58008acf8913d6fed68ea2a46acb6de928db28d724c891a68/pyarrow-24.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:1b2fe7f9a5566401a0ef2571f197eb92358925c1f0c8dba305d6e43ea0871bb3", size = 36679915, upload-time = "2026-04-21T10:46:42.602Z" }, - { url = "https://files.pythonhosted.org/packages/eb/8e/fb178720400ef69db251eb4a9c3ccf4af269bc1feb5055529b8fc87170d1/pyarrow-24.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:0b3537c00fb8d384f15ac1e79b6eb6db04a16514c8c1d22e59a9b95c8ba42868", size = 45697931, upload-time = "2026-04-21T10:46:48.403Z" }, { url = "https://files.pythonhosted.org/packages/f3/27/99c42abe8e21b44f4917f62631f3aa31404882a2c41d8a4cd5c110e13d52/pyarrow-24.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:14e31a3c9e35f1ab6356c6378f6f72830e6d2d5f1791df3774a7b097d18a6a1e", size = 48837449, upload-time = "2026-04-21T10:46:55.329Z" }, - { url = "https://files.pythonhosted.org/packages/36/b6/333749e2666e9032891125bf9c691146e92901bece62030ac1430e2e7c88/pyarrow-24.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b7d9a514e73bc42711e6a35aaccf3587c520024fe0a25d830a1a8a27c15f4f57", size = 49395949, upload-time = "2026-04-21T10:47:01.869Z" }, { url = "https://files.pythonhosted.org/packages/17/25/c5201706a2dd374e8ba6ee3fd7a8c89fb7ffc16eed5217a91fd2bd7f7626/pyarrow-24.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b196eb3f931862af3fa84c2a253514d859c08e0d8fe020e07be12e75a5a9780c", size = 51912986, upload-time = "2026-04-21T10:47:09.872Z" }, - { url = "https://files.pythonhosted.org/packages/f8/d2/4d1bbba65320b21a49678d6fbdc6ff7c649251359fdcfc03568c4136231d/pyarrow-24.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:35405aecb474e683fb36af650618fd5340ee5471fc65a21b36076a18bbc6c981", size = 27255371, upload-time = "2026-04-21T10:47:15.943Z" }, ] [[package]] @@ -2392,61 +2655,10 @@ version = "1.4.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/aa/b8/4ed5c7ad5ec15b08d35cc79ace6145d5c1ae426e46435f4987379439dfea/pybase64-1.4.3.tar.gz", hash = "sha256:c2ed274c9e0ba9c8f9c4083cfe265e66dd679126cd9c2027965d807352f3f053", size = 137272, upload-time = "2025-12-06T13:27:04.013Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/47/16d7af6fae7803f4c691856bc0d8d433ccf30e106432e2ef7707ee19a38a/pybase64-1.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f63aa7f29139b8a05ce5f97cdb7fad63d29071e5bdc8a638a343311fe996112a", size = 38241, upload-time = "2025-12-06T13:22:27.396Z" }, - { url = "https://files.pythonhosted.org/packages/4d/3e/268beb8d2240ab55396af4d1b45d2494935982212549b92a5f5b57079bd3/pybase64-1.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5943ec1ae87a8b4fe310905bb57205ea4330c75e2c628433a7d9dd52295b588", size = 31672, upload-time = "2025-12-06T13:22:28.854Z" }, - { url = "https://files.pythonhosted.org/packages/80/14/4365fa33222edcc46b6db4973f9e22bda82adfb6ab2a01afff591f1e41c8/pybase64-1.4.3-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5f2b8aef86f35cd5894c13681faf433a1fffc5b2e76544dcb5416a514a1a8347", size = 65978, upload-time = "2025-12-06T13:22:30.191Z" }, - { url = "https://files.pythonhosted.org/packages/1c/22/e89739d8bc9b96c68ead44b4eec42fe555683d9997e4ba65216d384920fc/pybase64-1.4.3-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6ec7e53dd09b0a8116ccf5c3265c7c7fce13c980747525be76902aef36a514a", size = 68903, upload-time = "2025-12-06T13:22:31.29Z" }, - { url = "https://files.pythonhosted.org/packages/77/e1/7e59a19f8999cdefe9eb0d56bfd701dd38263b0f6fb4a4d29fce165a1b36/pybase64-1.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7528604cd69c538e1dbaafded46e9e4915a2adcd6f2a60fcef6390d87ca922ea", size = 57516, upload-time = "2025-12-06T13:22:32.395Z" }, - { url = "https://files.pythonhosted.org/packages/42/ad/f47dc7e6fe32022b176868b88b671a32dab389718c8ca905cab79280aaaf/pybase64-1.4.3-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:4ec645f32b50593879031e09158f8681a1db9f5df0f72af86b3969a1c5d1fa2b", size = 54533, upload-time = "2025-12-06T13:22:33.457Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/7ab312b5a324833953b00e47b23eb4f83d45bd5c5c854b4b4e51b2a0cf5b/pybase64-1.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:634a000c5b3485ccc18bb9b244e0124f74b6fbc7f43eade815170237a7b34c64", size = 57187, upload-time = "2025-12-06T13:22:34.566Z" }, - { url = "https://files.pythonhosted.org/packages/2c/84/80acab1fcbaaae103e6b862ef5019192c8f2cd8758433595a202179a0d1d/pybase64-1.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:309ea32ad07639a485580af1be0ad447a434deb1924e76adced63ac2319cfe15", size = 57730, upload-time = "2025-12-06T13:22:35.581Z" }, - { url = "https://files.pythonhosted.org/packages/1f/24/84256d472400ea3163d7d69c44bb7e2e1027f0f1d4d20c47629a7dc4578e/pybase64-1.4.3-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:d10d517566b748d3f25f6ac7162af779360c1c6426ad5f962927ee205990d27c", size = 53036, upload-time = "2025-12-06T13:22:36.621Z" }, - { url = "https://files.pythonhosted.org/packages/a3/0f/33aecbed312ee0431798a73fa25e00dedbffdd91389ee23121fed397c550/pybase64-1.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a74cc0f4d835400857cc5c6d27ec854f7949491e07a04e6d66e2137812831f4c", size = 56321, upload-time = "2025-12-06T13:22:37.7Z" }, - { url = "https://files.pythonhosted.org/packages/dc/1c/a341b050746658cbec8cab3c733aeb3ef52ce8f11e60d0d47adbdf729ebf/pybase64-1.4.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1b591d774ac09d5eb73c156a03277cb271438fbd8042bae4109ff3a827cd218c", size = 50114, upload-time = "2025-12-06T13:22:38.752Z" }, - { url = "https://files.pythonhosted.org/packages/ba/d3/f7e6680ae6dc4ddff39112ad66e0fa6b2ec346e73881bafc08498c560bc0/pybase64-1.4.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5eb588d35a04302ef6157d17db62354a787ac6f8b1585dd0b90c33d63a97a550", size = 66570, upload-time = "2025-12-06T13:22:40.221Z" }, - { url = "https://files.pythonhosted.org/packages/4c/71/774748eecc7fe23869b7e5df028e3c4c2efa16b506b83ea3fa035ea95dc2/pybase64-1.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:df8b122d5be2c96962231cc4831d9c2e1eae6736fb12850cec4356d8b06fe6f8", size = 55700, upload-time = "2025-12-06T13:22:41.289Z" }, - { url = "https://files.pythonhosted.org/packages/b3/91/dd15075bb2fe0086193e1cd4bad80a43652c38d8a572f9218d46ba721802/pybase64-1.4.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:31b7a85c661fc591bbcce82fb8adaebe2941e6a83b08444b0957b77380452a4b", size = 52491, upload-time = "2025-12-06T13:22:42.628Z" }, - { url = "https://files.pythonhosted.org/packages/7b/27/f357d63ea3774c937fc47160e040419ed528827aa3d4306d5ec9826259c0/pybase64-1.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e6d7beaae65979fef250e25e66cf81c68a8f81910bcda1a2f43297ab486a7e4e", size = 53957, upload-time = "2025-12-06T13:22:44.615Z" }, - { url = "https://files.pythonhosted.org/packages/b3/c3/243693771701a54e67ff5ccbf4c038344f429613f5643169a7befc51f007/pybase64-1.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4a6276bc3a3962d172a2b5aba544d89881c4037ea954517b86b00892c703d007", size = 68422, upload-time = "2025-12-06T13:22:45.641Z" }, - { url = "https://files.pythonhosted.org/packages/75/95/f987081bf6bc1d1eda3012dae1b06ad427732ef9933a632cb8b58f9917f8/pybase64-1.4.3-cp310-cp310-win32.whl", hash = "sha256:4bdd07ef017515204ee6eaab17e1ad05f83c0ccb5af8ae24a0fe6d9cb5bb0b7a", size = 33622, upload-time = "2025-12-06T13:22:47.348Z" }, - { url = "https://files.pythonhosted.org/packages/79/28/c169a769fe90128f16d394aad87b2096dd4bf2f035ae0927108a46b617df/pybase64-1.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:5db0b6bbda15110db2740c61970a8fda3bf9c93c3166a3f57f87c7865ed1125c", size = 35799, upload-time = "2025-12-06T13:22:48.731Z" }, - { url = "https://files.pythonhosted.org/packages/ab/f2/bdbe6af0bd4f3fe5bc70e77ead7f7d523bb9d3ca3ad50ac42b9adbb9ca14/pybase64-1.4.3-cp310-cp310-win_arm64.whl", hash = "sha256:f96367dfc82598569aa02b1103ebd419298293e59e1151abda2b41728703284b", size = 31158, upload-time = "2025-12-06T13:22:50.021Z" }, - { url = "https://files.pythonhosted.org/packages/2b/63/21e981e9d3f1f123e0b0ee2130112b1956cad9752309f574862c7ae77c08/pybase64-1.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:70b0d4a4d54e216ce42c2655315378b8903933ecfa32fced453989a92b4317b2", size = 38237, upload-time = "2025-12-06T13:22:52.159Z" }, - { url = "https://files.pythonhosted.org/packages/92/fb/3f448e139516404d2a3963915cc10dc9dde7d3a67de4edba2f827adfef17/pybase64-1.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8127f110cdee7a70e576c5c9c1d4e17e92e76c191869085efbc50419f4ae3c72", size = 31673, upload-time = "2025-12-06T13:22:53.241Z" }, - { url = "https://files.pythonhosted.org/packages/3c/fb/bb06a5b9885e7d853ac1e801c4d8abfdb4c8506deee33e53d55aa6690e67/pybase64-1.4.3-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:f9ef0388878bc15a084bd9bf73ec1b2b4ee513d11009b1506375e10a7aae5032", size = 68331, upload-time = "2025-12-06T13:22:54.197Z" }, { url = "https://files.pythonhosted.org/packages/64/15/8d60b9ec5e658185fc2ee3333e01a6e30d717cf677b24f47cbb3a859d13c/pybase64-1.4.3-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95a57cccf106352a72ed8bc8198f6820b16cc7d55aa3867a16dea7011ae7c218", size = 71370, upload-time = "2025-12-06T13:22:55.517Z" }, - { url = "https://files.pythonhosted.org/packages/ac/29/a3e5c1667cc8c38d025a4636855de0fc117fc62e2afeb033a3c6f12c6a22/pybase64-1.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cd1c47dfceb9c7bd3de210fb4e65904053ed2d7c9dce6d107f041ff6fbd7e21", size = 59834, upload-time = "2025-12-06T13:22:56.682Z" }, - { url = "https://files.pythonhosted.org/packages/a9/00/8ffcf9810bd23f3984698be161cf7edba656fd639b818039a7be1d6405d4/pybase64-1.4.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:9fe9922698f3e2f72874b26890d53a051c431d942701bb3a37aae94da0b12107", size = 56652, upload-time = "2025-12-06T13:22:57.724Z" }, - { url = "https://files.pythonhosted.org/packages/81/62/379e347797cdea4ab686375945bc77ad8d039c688c0d4d0cfb09d247beb9/pybase64-1.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:af5f4bd29c86b59bb4375e0491d16ec8a67548fa99c54763aaedaf0b4b5a6632", size = 59382, upload-time = "2025-12-06T13:22:58.758Z" }, - { url = "https://files.pythonhosted.org/packages/c6/f2/9338ffe2f487086f26a2c8ca175acb3baa86fce0a756ff5670a0822bb877/pybase64-1.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c302f6ca7465262908131411226e02100f488f531bb5e64cb901aa3f439bccd9", size = 59990, upload-time = "2025-12-06T13:23:01.007Z" }, - { url = "https://files.pythonhosted.org/packages/f9/a4/85a6142b65b4df8625b337727aa81dc199642de3d09677804141df6ee312/pybase64-1.4.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:2f3f439fa4d7fde164ebbbb41968db7d66b064450ab6017c6c95cef0afa2b349", size = 54923, upload-time = "2025-12-06T13:23:02.369Z" }, - { url = "https://files.pythonhosted.org/packages/ac/00/e40215d25624012bf5b7416ca37f168cb75f6dd15acdb91ea1f2ea4dc4e7/pybase64-1.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7a23c6866551043f8b681a5e1e0d59469148b2920a3b4fc42b1275f25ea4217a", size = 58664, upload-time = "2025-12-06T13:23:03.378Z" }, - { url = "https://files.pythonhosted.org/packages/b0/73/d7e19a63e795c13837f2356268d95dc79d1180e756f57ced742a1e52fdeb/pybase64-1.4.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:56e6526f8565642abc5f84338cc131ce298a8ccab696b19bdf76fa6d7dc592ef", size = 52338, upload-time = "2025-12-06T13:23:04.458Z" }, - { url = "https://files.pythonhosted.org/packages/f2/32/3c746d7a310b69bdd9df77ffc85c41b80bce00a774717596f869b0d4a20e/pybase64-1.4.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6a792a8b9d866ffa413c9687d9b611553203753987a3a582d68cbc51cf23da45", size = 68993, upload-time = "2025-12-06T13:23:05.526Z" }, - { url = "https://files.pythonhosted.org/packages/5d/b3/63cec68f9d6f6e4c0b438d14e5f1ef536a5fe63ce14b70733ac5e31d7ab8/pybase64-1.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:62ad29a5026bb22cfcd1ca484ec34b0a5ced56ddba38ceecd9359b2818c9c4f9", size = 58055, upload-time = "2025-12-06T13:23:06.931Z" }, - { url = "https://files.pythonhosted.org/packages/d5/cb/7acf7c3c06f9692093c07f109668725dc37fb9a3df0fa912b50add645195/pybase64-1.4.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:11b9d1d2d32ec358c02214363b8fc3651f6be7dd84d880ecd597a6206a80e121", size = 54430, upload-time = "2025-12-06T13:23:07.936Z" }, - { url = "https://files.pythonhosted.org/packages/33/39/4eb33ff35d173bfff4002e184ce8907f5d0a42d958d61cd9058ef3570179/pybase64-1.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0aebaa7f238caa0a0d373616016e2040c6c879ebce3ba7ab3c59029920f13640", size = 56272, upload-time = "2025-12-06T13:23:09.253Z" }, { url = "https://files.pythonhosted.org/packages/19/97/a76d65c375a254e65b730c6f56bf528feca91305da32eceab8bcc08591e6/pybase64-1.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e504682b20c63c2b0c000e5f98a80ea867f8d97642e042a5a39818e44ba4d599", size = 70904, upload-time = "2025-12-06T13:23:10.336Z" }, - { url = "https://files.pythonhosted.org/packages/5e/2c/8338b6d3da3c265002839e92af0a80d6db88385c313c73f103dfb800c857/pybase64-1.4.3-cp311-cp311-win32.whl", hash = "sha256:e9a8b81984e3c6fb1db9e1614341b0a2d98c0033d693d90c726677db1ffa3a4c", size = 33639, upload-time = "2025-12-06T13:23:11.9Z" }, - { url = "https://files.pythonhosted.org/packages/39/dc/32efdf2f5927e5449cc341c266a1bbc5fecd5319a8807d9c5405f76e6d02/pybase64-1.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:a90a8fa16a901fabf20de824d7acce07586e6127dc2333f1de05f73b1f848319", size = 35797, upload-time = "2025-12-06T13:23:13.174Z" }, - { url = "https://files.pythonhosted.org/packages/da/59/eda4f9cb0cbce5a45f0cd06131e710674f8123a4d570772c5b9694f88559/pybase64-1.4.3-cp311-cp311-win_arm64.whl", hash = "sha256:61d87de5bc94d143622e94390ec3e11b9c1d4644fe9be3a81068ab0f91056f59", size = 31160, upload-time = "2025-12-06T13:23:15.696Z" }, - { url = "https://files.pythonhosted.org/packages/b2/7c/545fd4935a0e1ddd7147f557bf8157c73eecec9cffd523382fa7af2557de/pybase64-1.4.3-graalpy311-graalpy242_311_native-macosx_10_9_x86_64.whl", hash = "sha256:d27c1dfdb0c59a5e758e7a98bd78eaca5983c22f4a811a36f4f980d245df4611", size = 38393, upload-time = "2025-12-06T13:26:19.535Z" }, - { url = "https://files.pythonhosted.org/packages/c3/ca/ae7a96be9ddc96030d4e9dffc43635d4e136b12058b387fd47eb8301b60f/pybase64-1.4.3-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0f1a0c51d6f159511e3431b73c25db31095ee36c394e26a4349e067c62f434e5", size = 32109, upload-time = "2025-12-06T13:26:20.72Z" }, { url = "https://files.pythonhosted.org/packages/bf/44/d4b7adc7bf4fd5b52d8d099121760c450a52c390223806b873f0b6a2d551/pybase64-1.4.3-graalpy311-graalpy242_311_native-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a492518f3078a4e3faaef310697d21df9c6bc71908cebc8c2f6fbfa16d7d6b1f", size = 43227, upload-time = "2025-12-06T13:26:21.845Z" }, - { url = "https://files.pythonhosted.org/packages/08/86/2ba2d8734ef7939debeb52cf9952e457ba7aa226cae5c0e6dd631f9b851f/pybase64-1.4.3-graalpy311-graalpy242_311_native-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cae1a0f47784fd16df90d8acc32011c8d5fcdd9ab392c9ec49543e5f6a9c43a4", size = 35804, upload-time = "2025-12-06T13:26:23.149Z" }, - { url = "https://files.pythonhosted.org/packages/4f/5b/19c725dc3aaa6281f2ce3ea4c1628d154a40dd99657d1381995f8096768b/pybase64-1.4.3-graalpy311-graalpy242_311_native-win_amd64.whl", hash = "sha256:03cea70676ffbd39a1ab7930a2d24c625b416cacc9d401599b1d29415a43ab6a", size = 35880, upload-time = "2025-12-06T13:26:24.663Z" }, - { url = "https://files.pythonhosted.org/packages/2a/cf/6e712491bd665ea8633efb0b484121893ea838d8e830e06f39f2aae37e58/pybase64-1.4.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94cf50c36bb2f8618982ee5a978c4beed9db97d35944fa96e8586dd953c7994a", size = 38007, upload-time = "2025-12-06T13:26:32.804Z" }, - { url = "https://files.pythonhosted.org/packages/38/c0/9272cae1c49176337dcdbd97511e2843faae1aaf5a5fb48569093c6cd4ce/pybase64-1.4.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:01bc3ff5ca1341685c6d2d945b035f442f7b9c3b068a5c6ee8408a41fda5754e", size = 31538, upload-time = "2025-12-06T13:26:34.001Z" }, - { url = "https://files.pythonhosted.org/packages/20/f2/17546f97befe429c73f622bbd869ceebb518c40fdb0dec4c4f98312e80a5/pybase64-1.4.3-pp310-pypy310_pp73-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:03d0aa3761a99034960496280c02aa063f856a3cc9b33771bc4eab0e4e72b5c2", size = 40682, upload-time = "2025-12-06T13:26:35.168Z" }, - { url = "https://files.pythonhosted.org/packages/92/a0/464b36d5dfb61f3da17858afaeaa876a9342d58e9f17803ce7f28b5de9e8/pybase64-1.4.3-pp310-pypy310_pp73-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7ca5b1ce768520acd6440280cdab35235b27ad2faacfcec064bc9c3377066ef1", size = 41306, upload-time = "2025-12-06T13:26:36.351Z" }, - { url = "https://files.pythonhosted.org/packages/07/c9/a748dfc0969a8d960ecf1e82c8a2a16046ffec22f8e7ece582aa3b1c6cf9/pybase64-1.4.3-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3caa1e2ddad1c50553ffaaa1c86b74b3f9fbd505bea9970326ab88fc68c4c184", size = 35452, upload-time = "2025-12-06T13:26:37.772Z" }, - { url = "https://files.pythonhosted.org/packages/95/b7/4d37bd3577d1aa6c732dc099087fe027c48873e223de3784b095e5653f8b/pybase64-1.4.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bd47076f736b27a8b0f9b30d93b6bb4f5af01b0dc8971f883ed3b75934f39a99", size = 36125, upload-time = "2025-12-06T13:26:39.78Z" }, - { url = "https://files.pythonhosted.org/packages/b2/76/160dded493c00d3376d4ad0f38a2119c5345de4a6693419ad39c3565959b/pybase64-1.4.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:277de6e03cc9090fb359365c686a2a3036d23aee6cd20d45d22b8c89d1247f17", size = 37939, upload-time = "2025-12-06T13:26:41.014Z" }, - { url = "https://files.pythonhosted.org/packages/b7/b8/a0f10be8d648d6f8f26e560d6e6955efa7df0ff1e009155717454d76f601/pybase64-1.4.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ab1dd8b1ed2d1d750260ed58ab40defaa5ba83f76a30e18b9ebd5646f6247ae5", size = 31466, upload-time = "2025-12-06T13:26:42.539Z" }, - { url = "https://files.pythonhosted.org/packages/d3/22/832a2f9e76cdf39b52e01e40d8feeb6a04cf105494f2c3e3126d0149717f/pybase64-1.4.3-pp311-pypy311_pp73-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:bd4d2293de9fd212e294c136cec85892460b17d24e8c18a6ba18750928037750", size = 40681, upload-time = "2025-12-06T13:26:43.782Z" }, { url = "https://files.pythonhosted.org/packages/12/d7/6610f34a8972415fab3bb4704c174a1cc477bffbc3c36e526428d0f3957d/pybase64-1.4.3-pp311-pypy311_pp73-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af6d0d3a691911cc4c9a625f3ddcd3af720738c21be3d5c72de05629139d393", size = 41294, upload-time = "2025-12-06T13:26:44.936Z" }, - { url = "https://files.pythonhosted.org/packages/64/25/ed24400948a6c974ab1374a233cb7e8af0a5373cea0dd8a944627d17c34a/pybase64-1.4.3-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5cfc8c49a28322d82242088378f8542ce97459866ba73150b062a7073e82629d", size = 35447, upload-time = "2025-12-06T13:26:46.098Z" }, - { url = "https://files.pythonhosted.org/packages/ee/2b/e18ee7c5ee508a82897f021c1981533eca2940b5f072fc6ed0906c03a7a7/pybase64-1.4.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:debf737e09b8bf832ba86f5ecc3d3dbd0e3021d6cd86ba4abe962d6a5a77adb3", size = 36134, upload-time = "2025-12-06T13:26:47.35Z" }, ] [[package]] @@ -2469,78 +2681,44 @@ wheels = [ [[package]] name = "pydantic" -version = "2.11.7" +version = "2.13.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-types" }, - { name = "pydantic-core" }, - { name = "typing-extensions" }, - { name = "typing-inspection" }, + { name = "annotated-types", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-inspection", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" }, + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, ] [package.optional-dependencies] email = [ - { name = "email-validator" }, + { name = "email-validator", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] [[package]] name = "pydantic-core" -version = "2.33.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/92/b31726561b5dae176c2d2c2dc43a9c5bfba5d32f96f8b4c0a600dd492447/pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8", size = 2028817, upload-time = "2025-04-23T18:30:43.919Z" }, - { url = "https://files.pythonhosted.org/packages/a3/44/3f0b95fafdaca04a483c4e685fe437c6891001bf3ce8b2fded82b9ea3aa1/pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d", size = 1861357, upload-time = "2025-04-23T18:30:46.372Z" }, - { url = "https://files.pythonhosted.org/packages/30/97/e8f13b55766234caae05372826e8e4b3b96e7b248be3157f53237682e43c/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d", size = 1898011, upload-time = "2025-04-23T18:30:47.591Z" }, - { url = "https://files.pythonhosted.org/packages/9b/a3/99c48cf7bafc991cc3ee66fd544c0aae8dc907b752f1dad2d79b1b5a471f/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572", size = 1982730, upload-time = "2025-04-23T18:30:49.328Z" }, - { url = "https://files.pythonhosted.org/packages/de/8e/a5b882ec4307010a840fb8b58bd9bf65d1840c92eae7534c7441709bf54b/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02", size = 2136178, upload-time = "2025-04-23T18:30:50.907Z" }, - { url = "https://files.pythonhosted.org/packages/e4/bb/71e35fc3ed05af6834e890edb75968e2802fe98778971ab5cba20a162315/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b", size = 2736462, upload-time = "2025-04-23T18:30:52.083Z" }, - { url = "https://files.pythonhosted.org/packages/31/0d/c8f7593e6bc7066289bbc366f2235701dcbebcd1ff0ef8e64f6f239fb47d/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2", size = 2005652, upload-time = "2025-04-23T18:30:53.389Z" }, - { url = "https://files.pythonhosted.org/packages/d2/7a/996d8bd75f3eda405e3dd219ff5ff0a283cd8e34add39d8ef9157e722867/pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a", size = 2113306, upload-time = "2025-04-23T18:30:54.661Z" }, - { url = "https://files.pythonhosted.org/packages/ff/84/daf2a6fb2db40ffda6578a7e8c5a6e9c8affb251a05c233ae37098118788/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac", size = 2073720, upload-time = "2025-04-23T18:30:56.11Z" }, - { url = "https://files.pythonhosted.org/packages/77/fb/2258da019f4825128445ae79456a5499c032b55849dbd5bed78c95ccf163/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a", size = 2244915, upload-time = "2025-04-23T18:30:57.501Z" }, - { url = "https://files.pythonhosted.org/packages/d8/7a/925ff73756031289468326e355b6fa8316960d0d65f8b5d6b3a3e7866de7/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b", size = 2241884, upload-time = "2025-04-23T18:30:58.867Z" }, - { url = "https://files.pythonhosted.org/packages/0b/b0/249ee6d2646f1cdadcb813805fe76265745c4010cf20a8eba7b0e639d9b2/pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22", size = 1910496, upload-time = "2025-04-23T18:31:00.078Z" }, - { url = "https://files.pythonhosted.org/packages/66/ff/172ba8f12a42d4b552917aa65d1f2328990d3ccfc01d5b7c943ec084299f/pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640", size = 1955019, upload-time = "2025-04-23T18:31:01.335Z" }, - { url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584, upload-time = "2025-04-23T18:31:03.106Z" }, - { url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071, upload-time = "2025-04-23T18:31:04.621Z" }, - { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" }, - { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" }, - { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" }, - { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" }, - { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" }, - { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" }, - { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" }, - { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" }, - { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" }, - { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" }, - { url = "https://files.pythonhosted.org/packages/30/68/373d55e58b7e83ce371691f6eaa7175e3a24b956c44628eb25d7da007917/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa", size = 2023982, upload-time = "2025-04-23T18:32:53.14Z" }, - { url = "https://files.pythonhosted.org/packages/a4/16/145f54ac08c96a63d8ed6442f9dec17b2773d19920b627b18d4f10a061ea/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29", size = 1858412, upload-time = "2025-04-23T18:32:55.52Z" }, - { url = "https://files.pythonhosted.org/packages/41/b1/c6dc6c3e2de4516c0bb2c46f6a373b91b5660312342a0cf5826e38ad82fa/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d", size = 1892749, upload-time = "2025-04-23T18:32:57.546Z" }, - { url = "https://files.pythonhosted.org/packages/12/73/8cd57e20afba760b21b742106f9dbdfa6697f1570b189c7457a1af4cd8a0/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e", size = 2067527, upload-time = "2025-04-23T18:32:59.771Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d5/0bb5d988cc019b3cba4a78f2d4b3854427fc47ee8ec8e9eaabf787da239c/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c", size = 2108225, upload-time = "2025-04-23T18:33:04.51Z" }, - { url = "https://files.pythonhosted.org/packages/f1/c5/00c02d1571913d496aabf146106ad8239dc132485ee22efe08085084ff7c/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec", size = 2069490, upload-time = "2025-04-23T18:33:06.391Z" }, - { url = "https://files.pythonhosted.org/packages/22/a8/dccc38768274d3ed3a59b5d06f59ccb845778687652daa71df0cab4040d7/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052", size = 2237525, upload-time = "2025-04-23T18:33:08.44Z" }, - { url = "https://files.pythonhosted.org/packages/d4/e7/4f98c0b125dda7cf7ccd14ba936218397b44f50a56dd8c16a3091df116c3/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c", size = 2238446, upload-time = "2025-04-23T18:33:10.313Z" }, - { url = "https://files.pythonhosted.org/packages/ce/91/2ec36480fdb0b783cd9ef6795753c1dea13882f2e68e73bce76ae8c21e6a/pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808", size = 2066678, upload-time = "2025-04-23T18:33:12.224Z" }, - { url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200, upload-time = "2025-04-23T18:33:14.199Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123, upload-time = "2025-04-23T18:33:16.555Z" }, - { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" }, - { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" }, - { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" }, - { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" }, - { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" }, - { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, +version = "2.46.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, + { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, + { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, + { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, + { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, + { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, + { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, ] [[package]] @@ -2548,8 +2726,8 @@ name = "pydantic-extra-types" version = "2.11.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pydantic" }, - { name = "typing-extensions" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/71/dba38ee2651f84f7842206adbd2233d8bbdb59fb85e9fa14232486a8c471/pydantic_extra_types-2.11.1.tar.gz", hash = "sha256:46792d2307383859e923d8fcefa82108b1a141f8a9c0198982b3832ab5ef1049", size = 172002, upload-time = "2026-03-16T08:08:03.92Z" } wheels = [ @@ -2558,20 +2736,30 @@ wheels = [ [package.optional-dependencies] pycountry = [ - { name = "pycountry" }, + { name = "pycountry", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] name = "pydantic-settings" -version = "2.7.1" +version = "2.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pydantic" }, - { name = "python-dotenv" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "python-dotenv", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-inspection", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/07/60/1d1e59c9c90d54591469ada7d268251f71c24bdb765f1a8a832cee8c6653/pydantic_settings-2.14.1.tar.gz", hash = "sha256:e874d3bec7e787b0c9958277956ed9b4dd5de6a80e162188fdaff7c5e26fd5fa", size = 235551, upload-time = "2026-05-08T13:40:06.542Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/8d/f1af3832f5e6eb13ba94ee809e72b8ecb5eef226d27ee0bef7d963d943c7/pydantic_settings-2.14.1-py3-none-any.whl", hash = "sha256:6e3c7edfd8277687cdc598f56e5cff0e9bfff0910a3749deaa8d4401c3a2b9de", size = 60964, upload-time = "2026-05-08T13:40:04.958Z" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/73/7b/c58a586cd7d9ac66d2ee4ba60ca2d241fa837c02bca9bea80a9a8c3d22a9/pydantic_settings-2.7.1.tar.gz", hash = "sha256:10c9caad35e64bfb3c2fbf70a078c0e25cc92499782e5200747f942a065dec93", size = 79920, upload-time = "2024-12-31T11:27:44.632Z" } + +[[package]] +name = "pyelftools" +version = "0.33" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/11/767522582afab1b884d277de0e6e011640cb9d7292a38694b4b1a1df1ae8/pyelftools-0.33.tar.gz", hash = "sha256:660d82dcbeb8e83d1702bd97f223f761625da06111c0cc988eac6b8ab0c1b61f", size = 15068655, upload-time = "2026-05-29T12:56:22.553Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/46/93416fdae86d40879714f72956ac14df9c7b76f7d41a4d68aa9f71a0028b/pydantic_settings-2.7.1-py3-none-any.whl", hash = "sha256:590be9e6e24d06db33a4262829edef682500ef008565a969c73d39d5f8bfb3fd", size = 29718, upload-time = "2024-12-31T11:27:43.201Z" }, + { url = "https://files.pythonhosted.org/packages/46/2a/f9697576603dae937727827505a6126a066affb227034e77e6f9068910da/pyelftools-0.33-py3-none-any.whl", hash = "sha256:f215ad5f47d3f1373a21496a6c9e0707c622840d0622f23ff7ce08678b020036", size = 201178, upload-time = "2026-05-29T12:56:20.587Z" }, ] [[package]] @@ -2579,8 +2767,8 @@ name = "pyfastner" version = "1.0.10" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cython" }, - { name = "quicksectx" }, + { name = "cython", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "quicksectx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b3/59/005d6eae903c7d9a1861e8fd813ea7a03d65ab8807e6877a3dc12e5902da/PyFastNER-1.0.10.tar.gz", hash = "sha256:d477fc4f7acbb68f0c828b0bed478206092bb8190997dfda006993db5813b262", size = 13591, upload-time = "2023-12-13T05:15:48.285Z" } wheels = [ @@ -2596,27 +2784,45 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, ] +[[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.optional-dependencies] +crypto = [ + { name = "cryptography", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] + +[[package]] +name = "pyparsing" +version = "3.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, +] + [[package]] name = "pyrush" version = "1.0.9" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cython" }, - { name = "pyfastner" }, - { name = "quicksectx" }, - { name = "setuptools" }, - { name = "spacy" }, + { name = "cython", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyfastner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "quicksectx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "setuptools", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "spacy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/92/33/5c1b4ea9746b9ca2707f4f374f8ae90643c14fa5bda94edb329a3676fb57/PyRuSH-1.0.9.tar.gz", hash = "sha256:263296d121924972891e2dcff51ec29971c5c15256c061cc4e746c9ef6080e84", size = 67077, upload-time = "2024-10-27T14:46:29.711Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/aa/2970526054fb946fead047b269eb8ab49524bff08abaccf760dcdee66531/PyRuSH-1.0.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85d12241bdf1f92e5a1be922287db2d47ca62f57fd3ca9628f37a618f5537eee", size = 90218, upload-time = "2024-10-27T14:46:09.35Z" }, - { url = "https://files.pythonhosted.org/packages/48/e5/17ebdce3d4b04d83e026b364444d250040ccaba08ea2746f5b9cb8b2b863/PyRuSH-1.0.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b670646c666c8dc4c678b8c539bebc56e89634cc61b41430ebce3e5ed4c6b361", size = 198718, upload-time = "2024-10-27T14:46:10.835Z" }, - { url = "https://files.pythonhosted.org/packages/44/04/ca4c23b285612ebf7f83811aa56c7dacd9e62ab5e93c7b2e4006e238704d/PyRuSH-1.0.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:49382da67806e48d1d236c91d5a0d761824a58d51da06e94e8a938dc05602723", size = 198955, upload-time = "2024-10-27T14:46:12.254Z" }, - { url = "https://files.pythonhosted.org/packages/d8/92/5cef025fad45423a4ad4fb094b7e2592a5f7fd386acac7318c8c056801ff/PyRuSH-1.0.9-cp310-cp310-win_amd64.whl", hash = "sha256:5d0ed6be72e745ee3162224c2bca1b2ca0e50ca332b07d072c65045dd9529c25", size = 89893, upload-time = "2024-10-27T14:46:13.775Z" }, { url = "https://files.pythonhosted.org/packages/e8/d3/c59681583fcb1051ad228d0470a9705992aa0a5cc90db9f01e448b29369a/PyRuSH-1.0.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:33ff9526976c9260ab1aa7717f124f6b107d9c90bd13ed4394267a0d8a28c722", size = 90208, upload-time = "2024-10-27T14:46:15.31Z" }, { url = "https://files.pythonhosted.org/packages/f3/f2/5d1bff452c3deb7247273cdb40d6df0bcb4e01bb4350085062ee2a1eccfc/PyRuSH-1.0.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9065c9cbc69006195ca0774346d29c729a79db25b4128aa02a5e861f74fd8c69", size = 211812, upload-time = "2024-10-27T14:46:16.167Z" }, { url = "https://files.pythonhosted.org/packages/70/1e/d1cf28fe5c4773778e618ba0c3efea94476114ef290b2c19ba8fc01b7bd7/PyRuSH-1.0.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d50724ffabfae998a1526a1159c8d2fc4c9e0c2a6990dcf042c7d014c52d489a", size = 211409, upload-time = "2024-10-27T14:46:17.247Z" }, - { url = "https://files.pythonhosted.org/packages/2e/5a/65217cce498edf392b2f9ed2a8e99521020ba6198c1a1c80849deacb5856/PyRuSH-1.0.9-cp311-cp311-win_amd64.whl", hash = "sha256:f0762bcc791b05a8fba9aa7e695b28997a12c0a831764b0d7c10b61043c6e5d6", size = 89938, upload-time = "2024-10-27T14:46:18.427Z" }, ] [[package]] @@ -2633,14 +2839,23 @@ version = "1.3.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/73/fa/6f72572dee43eb501447a87895620b07e25d7a91b290f088c4bb360bc82b/pysimstring-1.3.0.tar.gz", hash = "sha256:ff5215f0b27f6c07041c1e8a1a0e795df3dc9e149a7ef0a1418ace65361d2322", size = 70080, upload-time = "2025-04-06T22:40:04.662Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/9b/d0c85b1998e6aa0bd0b689c1845267ae0f1127e6b0cba27cf15d25de0cb7/pysimstring-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb3b6428090f698664c3ad82a2707aa9fec4f71a906f38ba68e1f977d77fec26", size = 128008, upload-time = "2025-04-06T22:39:34.301Z" }, - { url = "https://files.pythonhosted.org/packages/97/ff/6d6a4211e03d1bbd0717be91bc6bd4dd533b84451b37392c44eeb1936c16/pysimstring-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:499d3502f4c3640bcacee947b9947ed5ddefea709405749abe5716737b9af04d", size = 117050, upload-time = "2025-04-06T22:39:35.289Z" }, - { url = "https://files.pythonhosted.org/packages/6d/3a/b7e1eb243e8a183f96c3d5b2c905522a9605d961c35c754188d752c1ff03/pysimstring-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4104d7a3081e4334747b912da161645dd004b4173c64d3cfe64f07f3cf96f1ac", size = 1515496, upload-time = "2025-04-06T22:39:36.612Z" }, - { url = "https://files.pythonhosted.org/packages/2b/cc/b919c35ee40ae994047826dbed44a6465c635a153c213756ad3dd947547a/pysimstring-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:6a3c0d9ef940dfdf74e45e2f5c8b3f7b76d01c43ca584bdb4012ed5e1e6b6108", size = 102647, upload-time = "2025-04-06T22:39:38.135Z" }, { url = "https://files.pythonhosted.org/packages/53/12/f269b24f4b23d66db1817bba6c3dc35ff8c12f2a7e12624007b4ca8a787c/pysimstring-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ae1ff135c0ac51c2300a4983b012b63729b1451f2c49cb4b9e9ebf8dea35d63", size = 128006, upload-time = "2025-04-06T22:39:39.067Z" }, { url = "https://files.pythonhosted.org/packages/f4/ad/1a9fce7775a713d872a3f091a9a392e7dc335adb6c19e9a099a720880363/pysimstring-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37c68e8e095fc64811d343b7141665de570fb9d3b87d875370db473f528eea32", size = 117050, upload-time = "2025-04-06T22:39:39.943Z" }, { url = "https://files.pythonhosted.org/packages/ab/3c/d00d547c1a84089b39feada04edd84e8d46ace4377ed6c9d8a7082b1f1c7/pysimstring-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332920eda9c09a6622234829516988439e12b4b0b7903832d53ace6e611dc286", size = 1521843, upload-time = "2025-04-06T22:39:41.254Z" }, - { url = "https://files.pythonhosted.org/packages/22/30/262e29f873a356e581974e001b155a03f0c5e50bd2f3cb17632ade9d790c/pysimstring-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:1b4b48a869a0d78f42e5a4ca401a46080c9e34f1a18aee3ac4970885a4352850", size = 102645, upload-time = "2025-04-06T22:39:42.311Z" }, +] + +[[package]] +name = "pystow" +version = "0.8.19" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backports-zstd", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/ae/ab4b8969de766b7eab335aba53b53de7542b682b5a7743982aa016215579/pystow-0.8.19.tar.gz", hash = "sha256:60dbad2360d6da38fbfa85d45f7d865fa5fbb49e343e27e836df5fb3b9f4f7de", size = 54537, upload-time = "2026-06-19T09:12:03.756Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/72/81bb62fe4adab824b9e664a0096b16714341c892407658884111273a5993/pystow-0.8.19-py3-none-any.whl", hash = "sha256:7ba92e23e952e250dc5dc7b7b4e6797a4ab030f3dec88fc429286f78f186965f", size = 61817, upload-time = "2026-06-19T09:12:05.012Z" }, ] [[package]] @@ -2648,13 +2863,10 @@ name = "pytest" version = "9.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "iniconfig" }, - { name = "packaging" }, - { name = "pluggy" }, - { name = "pygments" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "iniconfig", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pluggy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pygments", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/84/0e/b5858858d74958632c49b72cb25a3976ff9f632397626715be71c89d3971/pytest-9.1.0.tar.gz", hash = "sha256:41dd9148c08072446394cefd3d79701701335a9f4cae69ba92e39f6c7f5c061c", size = 1634181, upload-time = "2026-06-13T18:52:45.983Z" } wheels = [ @@ -2666,7 +2878,7 @@ name = "python-dateutil" version = "2.9.0.post0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "six" }, + { name = "six", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] 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 = [ @@ -2675,11 +2887,11 @@ wheels = [ [[package]] name = "python-dotenv" -version = "1.0.1" +version = "1.2.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bc/57/e84d88dfe0aec03b7a2d4327012c1627ab5f03652216c63d49846d7a6c58/python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", size = 39115, upload-time = "2024-01-23T06:33:00.505Z" } +sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863, upload-time = "2024-01-23T06:32:58.246Z" }, + { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, ] [[package]] @@ -2715,24 +2927,10 @@ version = "6.0.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199, upload-time = "2024-08-06T20:31:40.178Z" }, - { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758, upload-time = "2024-08-06T20:31:42.173Z" }, - { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463, upload-time = "2024-08-06T20:31:44.263Z" }, - { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280, upload-time = "2024-08-06T20:31:50.199Z" }, - { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239, upload-time = "2024-08-06T20:31:52.292Z" }, - { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802, upload-time = "2024-08-06T20:31:53.836Z" }, - { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527, upload-time = "2024-08-06T20:31:55.565Z" }, - { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052, upload-time = "2024-08-06T20:31:56.914Z" }, - { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774, upload-time = "2024-08-06T20:31:58.304Z" }, { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, - { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, - { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, - { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" }, - { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" }, ] [[package]] @@ -2740,50 +2938,31 @@ name = "pyzmq" version = "27.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi", marker = "implementation_name == 'pypy'" }, + { name = "cffi", marker = "implementation_name == 'pypy' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850, upload-time = "2025-09-08T23:07:26.274Z" }, - { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380, upload-time = "2025-09-08T23:07:29.78Z" }, - { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421, upload-time = "2025-09-08T23:07:31.263Z" }, - { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149, upload-time = "2025-09-08T23:07:33.17Z" }, - { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070, upload-time = "2025-09-08T23:07:35.205Z" }, - { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441, upload-time = "2025-09-08T23:07:37.432Z" }, - { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529, upload-time = "2025-09-08T23:07:39.047Z" }, - { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276, upload-time = "2025-09-08T23:07:40.695Z" }, - { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208, upload-time = "2025-09-08T23:07:42.298Z" }, - { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766, upload-time = "2025-09-08T23:07:43.869Z" }, - { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328, upload-time = "2025-09-08T23:07:45.946Z" }, - { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803, upload-time = "2025-09-08T23:07:47.551Z" }, - { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836, upload-time = "2025-09-08T23:07:49.436Z" }, { url = "https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e", size = 857038, upload-time = "2025-09-08T23:07:51.234Z" }, - { url = "https://files.pythonhosted.org/packages/cb/eb/bfdcb41d0db9cd233d6fb22dc131583774135505ada800ebf14dfb0a7c40/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e", size = 1657531, upload-time = "2025-09-08T23:07:52.795Z" }, - { url = "https://files.pythonhosted.org/packages/ab/21/e3180ca269ed4a0de5c34417dfe71a8ae80421198be83ee619a8a485b0c7/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2", size = 2034786, upload-time = "2025-09-08T23:07:55.047Z" }, { url = "https://files.pythonhosted.org/packages/3b/b1/5e21d0b517434b7f33588ff76c177c5a167858cc38ef740608898cd329f2/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394", size = 1894220, upload-time = "2025-09-08T23:07:57.172Z" }, - { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155, upload-time = "2025-09-08T23:07:59.05Z" }, - { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428, upload-time = "2025-09-08T23:08:00.663Z" }, - { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497, upload-time = "2025-09-08T23:08:02.15Z" }, - { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279, upload-time = "2025-09-08T23:08:03.807Z" }, - { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645, upload-time = "2025-09-08T23:08:05.301Z" }, - { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574, upload-time = "2025-09-08T23:08:06.828Z" }, { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995, upload-time = "2025-09-08T23:08:08.396Z" }, - { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070, upload-time = "2025-09-08T23:08:09.989Z" }, - { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121, upload-time = "2025-09-08T23:08:11.907Z" }, { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550, upload-time = "2025-09-08T23:08:13.513Z" }, - { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184, upload-time = "2025-09-08T23:08:15.163Z" }, - { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480, upload-time = "2025-09-08T23:08:17.192Z" }, - { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993, upload-time = "2025-09-08T23:08:18.926Z" }, - { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266, upload-time = "2025-09-08T23:09:40.048Z" }, - { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206, upload-time = "2025-09-08T23:09:41.902Z" }, - { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747, upload-time = "2025-09-08T23:09:43.741Z" }, - { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371, upload-time = "2025-09-08T23:09:45.575Z" }, - { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862, upload-time = "2025-09-08T23:09:47.448Z" }, - { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265, upload-time = "2025-09-08T23:09:49.376Z" }, - { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208, upload-time = "2025-09-08T23:09:51.073Z" }, - { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747, upload-time = "2025-09-08T23:09:52.698Z" }, { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371, upload-time = "2025-09-08T23:09:54.563Z" }, - { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862, upload-time = "2025-09-08T23:09:56.509Z" }, +] + +[[package]] +name = "quack-kernels" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "apache-tvm-ffi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "einops", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cutlass-dsl", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch-c-dlpack-ext", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/94/ee76e3a3dc74d986b7b24c5928f1d14b01bd5152375688c2ede369f6d19b/quack_kernels-0.5.0.tar.gz", hash = "sha256:c7c7338b67243397b6ca166e648bba161076e99f3858b532e1c877dcc6eaa03d", size = 366426, upload-time = "2026-05-29T05:00:25.985Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/2b/a8f171d5e172880885571bf89e93204aaf231a0e92c4c84714eaf18c271a/quack_kernels-0.5.0-py3-none-any.whl", hash = "sha256:08821ebfb8e638cc20308d5c59410c6dbb3b637ccc7b07bd57c7a9261a06af74", size = 327709, upload-time = "2026-05-29T05:00:24.679Z" }, ] [[package]] @@ -2791,46 +2970,27 @@ name = "quicksectx" version = "0.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cython" }, + { name = "cython", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/40/af/f890ee37cb2801e548aaa7479073427cf0586a414564eaba13c76647c9fe/quicksectx-0.4.0.tar.gz", hash = "sha256:25bc4ce3638c0713c8b57274454adac071e36ee76265707771eb3dab75245c55", size = 238176, upload-time = "2024-10-12T06:17:36.257Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/d6/0d03bf14032a3c162cdc1044df313086e1d8048914506d5f7156588d07f1/quicksectx-0.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2800f23a6d89bea42f9bd0f3ee589818cd6769333e2dd139bb73e9eba2dac295", size = 504884, upload-time = "2024-10-12T06:17:12.924Z" }, - { url = "https://files.pythonhosted.org/packages/e9/05/60089ad762b82d67d7bf05e39e10d5da05ccb1f3e0ba3df1a9ef2c91f81f/quicksectx-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a9b1d936bc90199c0591974a1282d913a937cfe2f50e0ca235746c96f34e23c", size = 1035989, upload-time = "2024-10-12T06:17:14.725Z" }, - { url = "https://files.pythonhosted.org/packages/a4/c9/e01386e44eb06aa65707a1fc47020e65a1666c03363ac738778afba83b84/quicksectx-0.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:dd73fd822e50d7a938a9296098e73e6bd8c61d4ade14c18c5ca0457d30130dcf", size = 356083, upload-time = "2024-10-12T06:17:16.93Z" }, { url = "https://files.pythonhosted.org/packages/a2/f8/2c07b96f891091defc28fdfab794942a8966e9ee83113173fdb4a0b742d0/quicksectx-0.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d40aaec345f47192b2c9e2e1235835560a85a3aed5b61b661e8e74c5cecaca33", size = 505774, upload-time = "2024-10-12T06:17:18.021Z" }, { url = "https://files.pythonhosted.org/packages/89/a9/a20978b3128220eb9ba07999667a9201bbf1a7196f18f23770309cac4c48/quicksectx-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68fc1af2027ffdf72ff6b77a446d28f01161b523a94879748cf6e589c30d8ada", size = 1079350, upload-time = "2024-10-12T06:17:19.599Z" }, - { url = "https://files.pythonhosted.org/packages/ca/b7/3dd75210323c0729b810f9a4f6cefad207512ae2f2b0d36c07da9d5d684d/quicksectx-0.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cec691ca82e914ce79fc790bac4d715677c6015c38b52d2e10d0afef5533e028", size = 356396, upload-time = "2024-10-12T06:17:21.24Z" }, ] [[package]] -name = "ray" -version = "2.55.1" +name = "rapidfuzz" +version = "3.14.5" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "filelock" }, - { name = "jsonschema" }, - { name = "msgpack" }, - { name = "packaging" }, - { name = "protobuf" }, - { name = "pyyaml" }, - { name = "requests" }, -] +sdist = { url = "https://files.pythonhosted.org/packages/2c/21/ef6157213316e85790041254259907eb722e00b03480256c0545d98acd33/rapidfuzz-3.14.5.tar.gz", hash = "sha256:ba10ac57884ce82112f7ed910b67e7fb6072d8ef2c06e30dc63c0f604a112e0e", size = 57901753, upload-time = "2026-04-07T11:16:31.931Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/d0/a85097dd53aaca1a44acc4dd0b3d2c0e9233179433e2ee326e4018ab3cf7/ray-2.55.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2d5786661e192148719accc959def6cdcabd7a24cd9008005bf3d0e3c8cfd529", size = 65829601, upload-time = "2026-04-22T20:09:10.013Z" }, - { url = "https://files.pythonhosted.org/packages/6a/d0/413baab5f0bdd1f913bd46538d96df3547a495b1a0de42f776b5c80d821c/ray-2.55.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:baf2ec89df7838cabdef493ff9bdbec1e6a6452f8bc696ad0c1b8a6198721745", size = 72776751, upload-time = "2026-04-22T20:09:17.802Z" }, - { url = "https://files.pythonhosted.org/packages/b4/64/640f5525bac171282c6f76f3ecc9c4cfef60149ac0d00231afb22018ebe5/ray-2.55.1-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:bb49fbbe53a1d931e1f92d17f9271338f0b738885f8f70b7f531aa33f019d8af", size = 73606971, upload-time = "2026-04-22T20:09:23.912Z" }, - { url = "https://files.pythonhosted.org/packages/31/9a/917f25438d802e23cee2bd1426f1e36ae19e0d0e41908d50937e0a4b7fd4/ray-2.55.1-cp310-cp310-win_amd64.whl", hash = "sha256:86e618e9ad8c6a24331c788eb599cee9838a62d2e10dfca0227743be06cf551c", size = 27886803, upload-time = "2026-04-22T20:09:28.747Z" }, - { url = "https://files.pythonhosted.org/packages/88/7d/48ba2f49b40a34b0071ee27c0144a2573d8836094eaca213d59cef12c271/ray-2.55.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:0053fd5b400f7ac56263aa1bbd3d68fb79341b08b8dc697c88782d5aca7b3ed4", size = 65835271, upload-time = "2026-04-22T20:09:34.984Z" }, - { url = "https://files.pythonhosted.org/packages/8f/a3/d6db3a428e4ea17cc72e79f747cfe11e90e63e36e1705bb8324e45f334b7/ray-2.55.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:0ea2f670a7725833ad2333a8c46ab69865ad06c8e5de9f65695e0f8f35331cec", size = 72879783, upload-time = "2026-04-22T20:09:40.986Z" }, - { url = "https://files.pythonhosted.org/packages/46/59/41da0e72a59cd3e8978480ccfeb86ef4235ae5ceb9b8928168a764fa930a/ray-2.55.1-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:d5382da181c03ee2f502ef46cf0ae4bbc30157b5bd9a67d7651f6a272528a85a", size = 73706515, upload-time = "2026-04-22T20:09:47.079Z" }, - { url = "https://files.pythonhosted.org/packages/65/52/c16bbdc3e31a5178f97be88966ab56db6f7e04882640c5cf2fee5b87757b/ray-2.55.1-cp311-cp311-win_amd64.whl", hash = "sha256:5e56d2e8f304cafe990c198a2b894f5b813de018998cd7212869201f6dc17cff", size = 27882093, upload-time = "2026-04-22T20:09:52.943Z" }, -] - -[package.optional-dependencies] -cgraph = [ - { name = "cupy-cuda12x", marker = "sys_platform != 'darwin'" }, + { url = "https://files.pythonhosted.org/packages/e1/f9/3c41a7be8855803f4f6c713b472226a98d31d41869d98f64f4ca790510d6/rapidfuzz-3.14.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e251126d48615e1f02b4a178f2cd0cd4f0332b8a019c01a2e10480f7552554b4", size = 1952372, upload-time = "2026-04-07T11:13:58.32Z" }, + { url = "https://files.pythonhosted.org/packages/9e/89/c2557e37531d03465193bff0ab9de70b468420a807d71a26a65100635459/rapidfuzz-3.14.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ab449c9abd0d4e1f8145dce0798a4c822a1a1933d613c764a641bea88b8bdab", size = 1159782, upload-time = "2026-04-07T11:14:00.127Z" }, + { url = "https://files.pythonhosted.org/packages/6b/d0/4539e42a2d596e068f7738f279638a4a74edd1fbb6f8594e2458058979c6/rapidfuzz-3.14.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3d50e5861872935fece391351cbb5ba21d1bced277cf5e1143d207a0a35f1925", size = 3168906, upload-time = "2026-04-07T11:14:03.29Z" }, + { url = "https://files.pythonhosted.org/packages/87/52/374d2d4f60fd98155142a869323aa221e30868cfa1f15171a0f64070c247/rapidfuzz-3.14.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f0b2af76b7e7060c09e1a0dfa9410eb19369cbe6164509bff2ef94094b54d2b6", size = 4275480, upload-time = "2026-04-07T11:14:11.332Z" }, + { url = "https://files.pythonhosted.org/packages/d9/ee/e71853bf82846c5c2174b924b71d8e8099fb05ff87c958a720380b434ba3/rapidfuzz-3.14.5-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:578e6051f6d5e6200c259b47a103cf06bb875ab5814d17333fc0b5c290b22f4c", size = 1888603, upload-time = "2026-04-07T11:16:18.223Z" }, + { url = "https://files.pythonhosted.org/packages/36/82/40f67b730f32be2ebad9f62add1571c754f52249254b2e88af094b907eee/rapidfuzz-3.14.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:fbf1b8bb2695415b347f3727da1addca2acb82c9b97ac86bebf8b1bead1eb12d", size = 1120599, upload-time = "2026-04-07T11:16:20.682Z" }, + { url = "https://files.pythonhosted.org/packages/cc/1b/2b229520f0b48464cfcd7aa758f74551d12c9bc4ab544022a60210aab064/rapidfuzz-3.14.5-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:97c6d85283629646fa87acc22c66b30ea9d4de7f6fdf887daa2e30fa041829b5", size = 3099302, upload-time = "2026-04-07T11:16:25.858Z" }, ] [[package]] @@ -2838,10 +2998,9 @@ name = "referencing" version = "0.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "attrs" }, - { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "typing-extensions" }, + { name = "attrs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "rpds-py", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } wheels = [ @@ -2850,41 +3009,15 @@ wheels = [ [[package]] name = "regex" -version = "2024.11.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494, upload-time = "2024-11-06T20:12:31.635Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/95/3c/4651f6b130c6842a8f3df82461a8950f923925db8b6961063e82744bddcc/regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91", size = 482674, upload-time = "2024-11-06T20:08:57.575Z" }, - { url = "https://files.pythonhosted.org/packages/15/51/9f35d12da8434b489c7b7bffc205c474a0a9432a889457026e9bc06a297a/regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0", size = 287684, upload-time = "2024-11-06T20:08:59.787Z" }, - { url = "https://files.pythonhosted.org/packages/bd/18/b731f5510d1b8fb63c6b6d3484bfa9a59b84cc578ac8b5172970e05ae07c/regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e", size = 284589, upload-time = "2024-11-06T20:09:01.896Z" }, - { url = "https://files.pythonhosted.org/packages/78/a2/6dd36e16341ab95e4c6073426561b9bfdeb1a9c9b63ab1b579c2e96cb105/regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde", size = 782511, upload-time = "2024-11-06T20:09:04.062Z" }, - { url = "https://files.pythonhosted.org/packages/1b/2b/323e72d5d2fd8de0d9baa443e1ed70363ed7e7b2fb526f5950c5cb99c364/regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e", size = 821149, upload-time = "2024-11-06T20:09:06.237Z" }, - { url = "https://files.pythonhosted.org/packages/90/30/63373b9ea468fbef8a907fd273e5c329b8c9535fee36fc8dba5fecac475d/regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2", size = 809707, upload-time = "2024-11-06T20:09:07.715Z" }, - { url = "https://files.pythonhosted.org/packages/f2/98/26d3830875b53071f1f0ae6d547f1d98e964dd29ad35cbf94439120bb67a/regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf", size = 781702, upload-time = "2024-11-06T20:09:10.101Z" }, - { url = "https://files.pythonhosted.org/packages/87/55/eb2a068334274db86208ab9d5599ffa63631b9f0f67ed70ea7c82a69bbc8/regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c", size = 771976, upload-time = "2024-11-06T20:09:11.566Z" }, - { url = "https://files.pythonhosted.org/packages/74/c0/be707bcfe98254d8f9d2cff55d216e946f4ea48ad2fd8cf1428f8c5332ba/regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86", size = 697397, upload-time = "2024-11-06T20:09:13.119Z" }, - { url = "https://files.pythonhosted.org/packages/49/dc/bb45572ceb49e0f6509f7596e4ba7031f6819ecb26bc7610979af5a77f45/regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67", size = 768726, upload-time = "2024-11-06T20:09:14.85Z" }, - { url = "https://files.pythonhosted.org/packages/5a/db/f43fd75dc4c0c2d96d0881967897926942e935d700863666f3c844a72ce6/regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d", size = 775098, upload-time = "2024-11-06T20:09:16.504Z" }, - { url = "https://files.pythonhosted.org/packages/99/d7/f94154db29ab5a89d69ff893159b19ada89e76b915c1293e98603d39838c/regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2", size = 839325, upload-time = "2024-11-06T20:09:18.698Z" }, - { url = "https://files.pythonhosted.org/packages/f7/17/3cbfab1f23356fbbf07708220ab438a7efa1e0f34195bf857433f79f1788/regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008", size = 843277, upload-time = "2024-11-06T20:09:21.725Z" }, - { url = "https://files.pythonhosted.org/packages/7e/f2/48b393b51900456155de3ad001900f94298965e1cad1c772b87f9cfea011/regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62", size = 773197, upload-time = "2024-11-06T20:09:24.092Z" }, - { url = "https://files.pythonhosted.org/packages/45/3f/ef9589aba93e084cd3f8471fded352826dcae8489b650d0b9b27bc5bba8a/regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e", size = 261714, upload-time = "2024-11-06T20:09:26.36Z" }, - { url = "https://files.pythonhosted.org/packages/42/7e/5f1b92c8468290c465fd50c5318da64319133231415a8aa6ea5ab995a815/regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519", size = 274042, upload-time = "2024-11-06T20:09:28.762Z" }, - { url = "https://files.pythonhosted.org/packages/58/58/7e4d9493a66c88a7da6d205768119f51af0f684fe7be7bac8328e217a52c/regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638", size = 482669, upload-time = "2024-11-06T20:09:31.064Z" }, - { url = "https://files.pythonhosted.org/packages/34/4c/8f8e631fcdc2ff978609eaeef1d6994bf2f028b59d9ac67640ed051f1218/regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7", size = 287684, upload-time = "2024-11-06T20:09:32.915Z" }, - { url = "https://files.pythonhosted.org/packages/c5/1b/f0e4d13e6adf866ce9b069e191f303a30ab1277e037037a365c3aad5cc9c/regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20", size = 284589, upload-time = "2024-11-06T20:09:35.504Z" }, - { url = "https://files.pythonhosted.org/packages/25/4d/ab21047f446693887f25510887e6820b93f791992994f6498b0318904d4a/regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114", size = 792121, upload-time = "2024-11-06T20:09:37.701Z" }, - { url = "https://files.pythonhosted.org/packages/45/ee/c867e15cd894985cb32b731d89576c41a4642a57850c162490ea34b78c3b/regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3", size = 831275, upload-time = "2024-11-06T20:09:40.371Z" }, - { url = "https://files.pythonhosted.org/packages/b3/12/b0f480726cf1c60f6536fa5e1c95275a77624f3ac8fdccf79e6727499e28/regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f", size = 818257, upload-time = "2024-11-06T20:09:43.059Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ce/0d0e61429f603bac433910d99ef1a02ce45a8967ffbe3cbee48599e62d88/regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0", size = 792727, upload-time = "2024-11-06T20:09:48.19Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c1/243c83c53d4a419c1556f43777ccb552bccdf79d08fda3980e4e77dd9137/regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55", size = 780667, upload-time = "2024-11-06T20:09:49.828Z" }, - { url = "https://files.pythonhosted.org/packages/c5/f4/75eb0dd4ce4b37f04928987f1d22547ddaf6c4bae697623c1b05da67a8aa/regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89", size = 776963, upload-time = "2024-11-06T20:09:51.819Z" }, - { url = "https://files.pythonhosted.org/packages/16/5d/95c568574e630e141a69ff8a254c2f188b4398e813c40d49228c9bbd9875/regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d", size = 784700, upload-time = "2024-11-06T20:09:53.982Z" }, - { url = "https://files.pythonhosted.org/packages/8e/b5/f8495c7917f15cc6fee1e7f395e324ec3e00ab3c665a7dc9d27562fd5290/regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34", size = 848592, upload-time = "2024-11-06T20:09:56.222Z" }, - { url = "https://files.pythonhosted.org/packages/1c/80/6dd7118e8cb212c3c60b191b932dc57db93fb2e36fb9e0e92f72a5909af9/regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d", size = 852929, upload-time = "2024-11-06T20:09:58.642Z" }, - { url = "https://files.pythonhosted.org/packages/11/9b/5a05d2040297d2d254baf95eeeb6df83554e5e1df03bc1a6687fc4ba1f66/regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45", size = 781213, upload-time = "2024-11-06T20:10:00.867Z" }, - { url = "https://files.pythonhosted.org/packages/26/b7/b14e2440156ab39e0177506c08c18accaf2b8932e39fb092074de733d868/regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9", size = 261734, upload-time = "2024-11-06T20:10:03.361Z" }, - { url = "https://files.pythonhosted.org/packages/80/32/763a6cc01d21fb3819227a1cc3f60fd251c13c37c27a73b8ff4315433a8e/regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60", size = 274052, upload-time = "2024-11-06T20:10:05.179Z" }, +version = "2026.5.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/0e/49aee608ad09480e7fd276898c99ec6192985fa331abe4eb3a986094490b/regex-2026.5.9.tar.gz", hash = "sha256:a8234aa23ec39894bfe4a3f1b85616a7032481964a13ac6fc9f10de4f6fca270", size = 416074, upload-time = "2026-05-09T23:15:19.37Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/dc/c1f2df4027e82fc54b5a473e4b250f5139faca49a0fbe29a48668d228f34/regex-2026.5.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ccf5249114cc3e772ecdd88a98a86eca0fd74c61ce32a94743758c083fc05d48", size = 489445, upload-time = "2026-05-09T23:12:06.111Z" }, + { url = "https://files.pythonhosted.org/packages/03/d2/59f01110660081cce9c0bc30ebd0b5ee250dacf658e3248ed92f01e0e8ee/regex-2026.5.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46f1326ca6e65b0879d23ca302c0f2415aad42ff0309b9c818e7949fe19a41d8", size = 291271, upload-time = "2026-05-09T23:12:07.731Z" }, + { url = "https://files.pythonhosted.org/packages/58/b6/14b2c84ff90ddb370c81d27503f4a0fcf071496416f4855f6cc8c5d81c35/regex-2026.5.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef31cbfe458e21c6122ba8150ff060e0c7789ed0d26eb423f25472584920b555", size = 289212, upload-time = "2026-05-09T23:12:09.266Z" }, + { url = "https://files.pythonhosted.org/packages/33/6f/1481597e859ef19508b345eec4afd1416ed6e6b459c75a64026ef193aecf/regex-2026.5.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a661a7d270a61f7cf460caee8b9fa2d5ef9e5c681234bcb9e0fe14f488e7dfc", size = 799843, upload-time = "2026-05-09T23:12:16.892Z" }, + { url = "https://files.pythonhosted.org/packages/a5/27/0daffb1a535bb39f422c3d200f4ab023c71110ad66a32b366bee708baba0/regex-2026.5.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1268eddd8486dc561d08eee1156e40aa3a8fe10f4bdec8fa653b455fcbffd12c", size = 789167, upload-time = "2026-05-09T23:12:27.975Z" }, ] [[package]] @@ -2892,10 +3025,10 @@ name = "requests" version = "2.34.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, + { name = "certifi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "charset-normalizer", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "urllib3", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } wheels = [ @@ -2907,7 +3040,7 @@ name = "requests-toolbelt" version = "1.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "requests" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } wheels = [ @@ -2919,9 +3052,8 @@ name = "rich" version = "13.9.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markdown-it-py" }, - { name = "pygments" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "markdown-it-py", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pygments", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149, upload-time = "2024-11-01T16:43:57.873Z" } wheels = [ @@ -2933,9 +3065,9 @@ name = "rich-toolkit" version = "0.20.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click" }, - { name = "rich" }, - { name = "typing-extensions" }, + { name = "click", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "rich", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/29/63/3e427c62f1992945c997d4ec31e2fcb37d26aadbe5aa44ae5b29f7f64d26/rich_toolkit-0.20.1.tar.gz", hash = "sha256:c7336ae281f435c785acecaedc4b71d4b663dc73d9c8079fea96372527e822a4", size = 203473, upload-time = "2026-06-05T08:56:57.679Z" } wheels = [ @@ -2948,154 +3080,25 @@ version = "0.7.6" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e5/f5/8bed2310abe4ae04b67a38374a4d311dd85220f5d8da56f47ae9361be0b0/rignore-0.7.6.tar.gz", hash = "sha256:00d3546cd793c30cb17921ce674d2c8f3a4b00501cb0e3dd0e82217dbeba2671", size = 57140, upload-time = "2025-11-05T21:41:21.968Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/86/7a/b970cd0138b0ece72eb28f086e933f9ed75b795716ad3de5ab22994b3b54/rignore-0.7.6-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f3c74a7e5ee77aea669c95fdb3933f2a6c7549893700082e759128a29cf67e45", size = 884999, upload-time = "2025-11-05T20:42:38.373Z" }, - { url = "https://files.pythonhosted.org/packages/ca/05/23faca29616d8966ada63fb0e13c214107811fa9a0aba2275e4c7ca63bd5/rignore-0.7.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7202404958f5fe3474bac91f65350f0b1dde1a5e05089f2946549b7e91e79ec", size = 824824, upload-time = "2025-11-05T20:42:22.1Z" }, - { url = "https://files.pythonhosted.org/packages/fa/2e/05a1e61f04cf2548524224f0b5f21ca19ea58f7273a863bac10846b8ff69/rignore-0.7.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bde7c5835fa3905bfb7e329a4f1d7eccb676de63da7a3f934ddd5c06df20597", size = 899121, upload-time = "2025-11-05T20:40:48.94Z" }, - { url = "https://files.pythonhosted.org/packages/ff/35/71518847e10bdbf359badad8800e4681757a01f4777b3c5e03dbde8a42d8/rignore-0.7.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:626c3d4ba03af266694d25101bc1d8d16eda49c5feb86cedfec31c614fceca7d", size = 873813, upload-time = "2025-11-05T20:41:04.71Z" }, - { url = "https://files.pythonhosted.org/packages/f6/c8/32ae405d3e7fd4d9f9b7838f2fcca0a5005bb87fa514b83f83fd81c0df22/rignore-0.7.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a43841e651e7a05a4274b9026cc408d1912e64016ede8cd4c145dae5d0635be", size = 1168019, upload-time = "2025-11-05T20:41:20.723Z" }, - { url = "https://files.pythonhosted.org/packages/25/98/013c955982bc5b4719bf9a5bea58be317eea28aa12bfd004025e3cd7c000/rignore-0.7.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7978c498dbf7f74d30cdb8859fe612167d8247f0acd377ae85180e34490725da", size = 942822, upload-time = "2025-11-05T20:41:36.99Z" }, - { url = "https://files.pythonhosted.org/packages/90/fb/9a3f3156c6ed30bcd597e63690353edac1fcffe9d382ad517722b56ac195/rignore-0.7.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d22f72ab695c07d2d96d2a645208daff17084441b5d58c07378c9dd6f9c4c87", size = 959820, upload-time = "2025-11-05T20:42:06.364Z" }, - { url = "https://files.pythonhosted.org/packages/5e/b2/93bf609633021e9658acaff24cfb055d8cdaf7f5855d10ebb35307900dda/rignore-0.7.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5bd8e1a91ed1a789b2cbe39eeea9204a6719d4f2cf443a9544b521a285a295f", size = 985050, upload-time = "2025-11-05T20:41:51.124Z" }, - { url = "https://files.pythonhosted.org/packages/69/bc/ec2d040469bdfd7b743df10f2201c5d285009a4263d506edbf7a06a090bb/rignore-0.7.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bc1fc03efad5789365018e94ac4079f851a999bc154d1551c45179f7fcf45322", size = 1079164, upload-time = "2025-11-05T21:40:10.368Z" }, - { url = "https://files.pythonhosted.org/packages/df/26/4b635f4ea5baf4baa8ba8eee06163f6af6e76dfbe72deb57da34bb24b19d/rignore-0.7.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:ce2617fe28c51367fd8abfd4eeea9e61664af63c17d4ea00353d8ef56dfb95fa", size = 1139028, upload-time = "2025-11-05T21:40:27.977Z" }, - { url = "https://files.pythonhosted.org/packages/6a/54/a3147ebd1e477b06eb24e2c2c56d951ae5faa9045b7b36d7892fec5080d9/rignore-0.7.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7c4ad2cee85068408e7819a38243043214e2c3047e9bd4c506f8de01c302709e", size = 1119024, upload-time = "2025-11-05T21:40:45.148Z" }, - { url = "https://files.pythonhosted.org/packages/fb/f4/27475db769a57cff18fe7e7267b36e6cdb5b1281caa185ba544171106cba/rignore-0.7.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:02cd240bfd59ecc3907766f4839cbba20530a2e470abca09eaa82225e4d946fb", size = 1128531, upload-time = "2025-11-05T21:41:02.734Z" }, - { url = "https://files.pythonhosted.org/packages/97/32/6e782d3b352e4349fa0e90bf75b13cb7f11d8908b36d9e2b262224b65d9a/rignore-0.7.6-cp310-cp310-win32.whl", hash = "sha256:fe2bd8fa1ff555259df54c376abc73855cb02628a474a40d51b358c3a1ddc55b", size = 646817, upload-time = "2025-11-05T21:41:47.51Z" }, - { url = "https://files.pythonhosted.org/packages/c0/8a/53185c69abb3bb362e8a46b8089999f820bf15655629ff8395107633c8ab/rignore-0.7.6-cp310-cp310-win_amd64.whl", hash = "sha256:d80afd6071c78baf3765ec698841071b19e41c326f994cfa69b5a1df676f5d39", size = 727001, upload-time = "2025-11-05T21:41:32.778Z" }, - { url = "https://files.pythonhosted.org/packages/25/41/b6e2be3069ef3b7f24e35d2911bd6deb83d20ed5642ad81d5a6d1c015473/rignore-0.7.6-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:40be8226e12d6653abbebaffaea2885f80374c1c8f76fe5ca9e0cadd120a272c", size = 885285, upload-time = "2025-11-05T20:42:39.763Z" }, - { url = "https://files.pythonhosted.org/packages/52/66/ba7f561b6062402022887706a7f2b2c2e2e2a28f1e3839202b0a2f77e36d/rignore-0.7.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:182f4e5e4064d947c756819446a7d4cdede8e756b8c81cf9e509683fe38778d7", size = 823882, upload-time = "2025-11-05T20:42:23.488Z" }, - { url = "https://files.pythonhosted.org/packages/f5/81/4087453df35a90b07370647b19017029324950c1b9137d54bf1f33843f17/rignore-0.7.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16b63047648a916a87be1e51bb5c009063f1b8b6f5afe4f04f875525507e63dc", size = 899362, upload-time = "2025-11-05T20:40:51.111Z" }, - { url = "https://files.pythonhosted.org/packages/fb/c9/390a8fdfabb76d71416be773bd9f162977bd483084f68daf19da1dec88a6/rignore-0.7.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ba5524f5178deca4d7695e936604ebc742acb8958f9395776e1fcb8133f8257a", size = 873633, upload-time = "2025-11-05T20:41:06.193Z" }, - { url = "https://files.pythonhosted.org/packages/df/c9/79404fcb0faa76edfbc9df0901f8ef18568d1104919ebbbad6d608c888d1/rignore-0.7.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:62020dbb89a1dd4b84ab3d60547b3b2eb2723641d5fb198463643f71eaaed57d", size = 1167633, upload-time = "2025-11-05T20:41:22.491Z" }, - { url = "https://files.pythonhosted.org/packages/6e/8d/b3466d32d445d158a0aceb80919085baaae495b1f540fb942f91d93b5e5b/rignore-0.7.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b34acd532769d5a6f153a52a98dcb81615c949ab11697ce26b2eb776af2e174d", size = 941434, upload-time = "2025-11-05T20:41:38.151Z" }, { url = "https://files.pythonhosted.org/packages/e8/40/9cd949761a7af5bc27022a939c91ff622d29c7a0b66d0c13a863097dde2d/rignore-0.7.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c5e53b752f9de44dff7b3be3c98455ce3bf88e69d6dc0cf4f213346c5e3416c", size = 959461, upload-time = "2025-11-05T20:42:08.476Z" }, - { url = "https://files.pythonhosted.org/packages/b5/87/1e1a145731f73bdb7835e11f80da06f79a00d68b370d9a847de979575e6d/rignore-0.7.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:25b3536d13a5d6409ce85f23936f044576eeebf7b6db1d078051b288410fc049", size = 985323, upload-time = "2025-11-05T20:41:52.735Z" }, - { url = "https://files.pythonhosted.org/packages/6c/31/1ecff992fc3f59c4fcdcb6c07d5f6c1e6dfb55ccda19c083aca9d86fa1c6/rignore-0.7.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6e01cad2b0b92f6b1993f29fc01f23f2d78caf4bf93b11096d28e9d578eb08ce", size = 1079173, upload-time = "2025-11-05T21:40:12.007Z" }, - { url = "https://files.pythonhosted.org/packages/17/18/162eedadb4c2282fa4c521700dbf93c9b14b8842e8354f7d72b445b8d593/rignore-0.7.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5991e46ab9b4868334c9e372ab0892b0150f3f586ff2b1e314272caeb38aaedb", size = 1139012, upload-time = "2025-11-05T21:40:29.399Z" }, - { url = "https://files.pythonhosted.org/packages/78/96/a9ca398a8af74bb143ad66c2a31303c894111977e28b0d0eab03867f1b43/rignore-0.7.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6c8ae562e5d1246cba5eaeb92a47b2a279e7637102828dde41dcbe291f529a3e", size = 1118827, upload-time = "2025-11-05T21:40:46.6Z" }, { url = "https://files.pythonhosted.org/packages/9f/22/1c1a65047df864def9a047dbb40bc0b580b8289a4280e62779cd61ae21f2/rignore-0.7.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aaf938530dcc0b47c4cfa52807aa2e5bfd5ca6d57a621125fe293098692f6345", size = 1128182, upload-time = "2025-11-05T21:41:04.239Z" }, - { url = "https://files.pythonhosted.org/packages/bd/f4/1526eb01fdc2235aca1fd9d0189bee4021d009a8dcb0161540238c24166e/rignore-0.7.6-cp311-cp311-win32.whl", hash = "sha256:166ebce373105dd485ec213a6a2695986346e60c94ff3d84eb532a237b24a4d5", size = 646547, upload-time = "2025-11-05T21:41:49.439Z" }, - { url = "https://files.pythonhosted.org/packages/7c/c8/dda0983e1845706beb5826459781549a840fe5a7eb934abc523e8cd17814/rignore-0.7.6-cp311-cp311-win_amd64.whl", hash = "sha256:44f35ee844b1a8cea50d056e6a595190ce9d42d3cccf9f19d280ae5f3058973a", size = 727139, upload-time = "2025-11-05T21:41:34.367Z" }, - { url = "https://files.pythonhosted.org/packages/e3/47/eb1206b7bf65970d41190b879e1723fc6bbdb2d45e53565f28991a8d9d96/rignore-0.7.6-cp311-cp311-win_arm64.whl", hash = "sha256:14b58f3da4fa3d5c3fa865cab49821675371f5e979281c683e131ae29159a581", size = 657598, upload-time = "2025-11-05T21:41:23.758Z" }, - { url = "https://files.pythonhosted.org/packages/85/12/62d690b4644c330d7ac0f739b7f078190ab4308faa909a60842d0e4af5b2/rignore-0.7.6-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3d3a523af1cd4ed2c0cba8d277a32d329b0c96ef9901fb7ca45c8cfaccf31a5", size = 887462, upload-time = "2025-11-05T20:42:50.804Z" }, - { url = "https://files.pythonhosted.org/packages/05/bc/6528a0e97ed2bd7a7c329183367d1ffbc5b9762ae8348d88dae72cc9d1f5/rignore-0.7.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:990853566e65184a506e1e2af2d15045afad3ebaebb8859cb85b882081915110", size = 826918, upload-time = "2025-11-05T20:42:33.689Z" }, - { url = "https://files.pythonhosted.org/packages/3e/2c/7d7bad116e09a04e9e1688c6f891fa2d4fd33f11b69ac0bd92419ddebeae/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cab9ff2e436ce7240d7ee301c8ef806ed77c1fd6b8a8239ff65f9bbbcb5b8a3", size = 900922, upload-time = "2025-11-05T20:41:00.361Z" }, - { url = "https://files.pythonhosted.org/packages/09/ba/e5ea89fbde8e37a90ce456e31c5e9d85512cef5ae38e0f4d2426eb776a19/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d1a6671b2082c13bfd9a5cf4ce64670f832a6d41470556112c4ab0b6519b2fc4", size = 876987, upload-time = "2025-11-05T20:41:16.219Z" }, - { url = "https://files.pythonhosted.org/packages/d0/fb/93d14193f0ec0c3d35b763f0a000e9780f63b2031f3d3756442c2152622d/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2468729b4c5295c199d084ab88a40afcb7c8b974276805105239c07855bbacee", size = 1171110, upload-time = "2025-11-05T20:41:32.631Z" }, - { url = "https://files.pythonhosted.org/packages/9e/46/08436312ff96ffa29cfa4e1a987efc37e094531db46ba5e9fda9bb792afd/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:775710777fd71e5fdf54df69cdc249996a1d6f447a2b5bfb86dbf033fddd9cf9", size = 943339, upload-time = "2025-11-05T20:41:47.128Z" }, - { url = "https://files.pythonhosted.org/packages/34/28/3b3c51328f505cfaf7e53f408f78a1e955d561135d02f9cb0341ea99f69a/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4565407f4a77f72cf9d91469e75d15d375f755f0a01236bb8aaa176278cc7085", size = 961680, upload-time = "2025-11-05T20:42:18.061Z" }, - { url = "https://files.pythonhosted.org/packages/5c/9e/cbff75c8676d4f4a90bd58a1581249d255c7305141b0868f0abc0324836b/rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dc44c33f8fb2d5c9da748de7a6e6653a78aa740655e7409895e94a247ffa97c8", size = 987045, upload-time = "2025-11-05T20:42:02.315Z" }, - { url = "https://files.pythonhosted.org/packages/8c/25/d802d1d369502a7ddb8816059e7c79d2d913e17df975b863418e0aca4d8a/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8f32478f05540513c11923e8838afab9efef0131d66dca7f67f0e1bbd118af6a", size = 1080310, upload-time = "2025-11-05T21:40:23.184Z" }, - { url = "https://files.pythonhosted.org/packages/43/f0/250b785c2e473b1ab763eaf2be820934c2a5409a722e94b279dddac21c7d/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:1b63a3dd76225ea35b01dd6596aa90b275b5d0f71d6dc28fce6dd295d98614aa", size = 1140998, upload-time = "2025-11-05T21:40:40.603Z" }, - { url = "https://files.pythonhosted.org/packages/f5/d6/bb42fd2a8bba6aea327962656e20621fd495523259db40cfb4c5f760f05c/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:fe6c41175c36554a4ef0994cd1b4dbd6d73156fca779066456b781707402048e", size = 1121178, upload-time = "2025-11-05T21:40:57.585Z" }, - { url = "https://files.pythonhosted.org/packages/97/f4/aeb548374129dce3dc191a4bb598c944d9ed663f467b9af830315d86059c/rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9a0c6792406ae36f4e7664dc772da909451d46432ff8485774526232d4885063", size = 1130190, upload-time = "2025-11-05T21:41:16.403Z" }, - { url = "https://files.pythonhosted.org/packages/82/78/a6250ff0c49a3cdb943910ada4116e708118e9b901c878cfae616c80a904/rignore-0.7.6-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a20b6fb61bcced9a83dfcca6599ad45182b06ba720cff7c8d891e5b78db5b65f", size = 886470, upload-time = "2025-11-05T20:42:52.314Z" }, - { url = "https://files.pythonhosted.org/packages/35/af/c69c0c51b8f9f7914d95c4ea91c29a2ac067572048cae95dd6d2efdbe05d/rignore-0.7.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:392dcabfecbe176c9ebbcb40d85a5e86a5989559c4f988c2741da7daf1b5be25", size = 825976, upload-time = "2025-11-05T20:42:35.118Z" }, - { url = "https://files.pythonhosted.org/packages/f1/d2/1b264f56132264ea609d3213ab603d6a27016b19559a1a1ede1a66a03dcd/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22baa462abdc36fdd5a5e2dae423107723351b85ff093762f9261148b9d0a04a", size = 899739, upload-time = "2025-11-05T20:41:01.518Z" }, - { url = "https://files.pythonhosted.org/packages/55/e4/b3c5dfdd8d8a10741dfe7199ef45d19a0e42d0c13aa377c83bd6caf65d90/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53fb28882d2538cb2d231972146c4927a9d9455e62b209f85d634408c4103538", size = 874843, upload-time = "2025-11-05T20:41:17.687Z" }, - { url = "https://files.pythonhosted.org/packages/cc/10/d6f3750233881a2a154cefc9a6a0a9b19da526b19f7f08221b552c6f827d/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87409f7eeb1103d6b77f3472a3a0d9a5953e3ae804a55080bdcb0120ee43995b", size = 1170348, upload-time = "2025-11-05T20:41:34.21Z" }, - { url = "https://files.pythonhosted.org/packages/6e/10/ad98ca05c9771c15af734cee18114a3c280914b6e34fde9ffea2e61e88aa/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:684014e42e4341ab3ea23a203551857fcc03a7f8ae96ca3aefb824663f55db32", size = 942315, upload-time = "2025-11-05T20:41:48.508Z" }, { url = "https://files.pythonhosted.org/packages/de/00/ab5c0f872acb60d534e687e629c17e0896c62da9b389c66d3aa16b817aa8/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77356ebb01ba13f8a425c3d30fcad40e57719c0e37670d022d560884a30e4767", size = 961047, upload-time = "2025-11-05T20:42:19.403Z" }, - { url = "https://files.pythonhosted.org/packages/b8/86/3030fdc363a8f0d1cd155b4c453d6db9bab47a24fcc64d03f61d9d78fe6a/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6cbd8a48abbd3747a6c830393cd578782fab5d43f4deea48c5f5e344b8fed2b0", size = 986090, upload-time = "2025-11-05T20:42:03.581Z" }, - { url = "https://files.pythonhosted.org/packages/33/b8/133aa4002cee0ebbb39362f94e4898eec7fbd09cec9fcbce1cd65b355b7f/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2673225dcec7f90497e79438c35e34638d0d0391ccea3cbb79bfb9adc0dc5bd7", size = 1079656, upload-time = "2025-11-05T21:40:24.89Z" }, - { url = "https://files.pythonhosted.org/packages/67/56/36d5d34210e5e7dfcd134eed8335b19e80ae940ee758f493e4f2b344dd70/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:c081f17290d8a2b96052b79207622aa635686ea39d502b976836384ede3d303c", size = 1139789, upload-time = "2025-11-05T21:40:42.119Z" }, - { url = "https://files.pythonhosted.org/packages/6b/5b/bb4f9420802bf73678033a4a55ab1bede36ce2e9b41fec5f966d83d932b3/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:57e8327aacc27f921968cb2a174f9e47b084ce9a7dd0122c8132d22358f6bd79", size = 1120308, upload-time = "2025-11-05T21:40:59.402Z" }, { url = "https://files.pythonhosted.org/packages/ce/8b/a1299085b28a2f6135e30370b126e3c5055b61908622f2488ade67641479/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d8955b57e42f2a5434670d5aa7b75eaf6e74602ccd8955dddf7045379cd762fb", size = 1129444, upload-time = "2025-11-05T21:41:17.906Z" }, ] -[[package]] -name = "rpds-py" -version = "0.30.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] -sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, - { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, - { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, - { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, - { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, - { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, - { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, - { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, - { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, - { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, - { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, - { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, - { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, - { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, - { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" }, - { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" }, - { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" }, - { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932, upload-time = "2025-11-30T20:21:58.47Z" }, - { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830, upload-time = "2025-11-30T20:21:59.699Z" }, - { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033, upload-time = "2025-11-30T20:22:00.991Z" }, - { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828, upload-time = "2025-11-30T20:22:02.723Z" }, - { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683, upload-time = "2025-11-30T20:22:04.367Z" }, - { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583, upload-time = "2025-11-30T20:22:05.814Z" }, - { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496, upload-time = "2025-11-30T20:22:07.713Z" }, - { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669, upload-time = "2025-11-30T20:22:09.312Z" }, - { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011, upload-time = "2025-11-30T20:22:11.309Z" }, - { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406, upload-time = "2025-11-30T20:22:13.101Z" }, - { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024, upload-time = "2025-11-30T20:22:14.853Z" }, - { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069, upload-time = "2025-11-30T20:22:16.577Z" }, - { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292, upload-time = "2025-11-30T20:24:16.537Z" }, - { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128, upload-time = "2025-11-30T20:24:18.086Z" }, - { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542, upload-time = "2025-11-30T20:24:20.092Z" }, - { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004, upload-time = "2025-11-30T20:24:22.231Z" }, - { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063, upload-time = "2025-11-30T20:24:24.302Z" }, - { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099, upload-time = "2025-11-30T20:24:25.916Z" }, - { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177, upload-time = "2025-11-30T20:24:27.834Z" }, - { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015, upload-time = "2025-11-30T20:24:29.457Z" }, - { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736, upload-time = "2025-11-30T20:24:31.22Z" }, - { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981, upload-time = "2025-11-30T20:24:32.934Z" }, - { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782, upload-time = "2025-11-30T20:24:35.169Z" }, - { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191, upload-time = "2025-11-30T20:24:36.853Z" }, -] - [[package]] name = "rpds-py" version = "2026.5.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.11' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version >= '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459, upload-time = "2026-05-28T12:02:13.232Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609, upload-time = "2026-05-28T11:58:50.78Z" }, { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460, upload-time = "2026-05-28T11:58:52.374Z" }, - { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031, upload-time = "2026-05-28T11:58:53.775Z" }, - { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121, upload-time = "2026-05-28T11:58:55.243Z" }, - { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026, upload-time = "2026-05-28T11:58:56.788Z" }, - { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865, upload-time = "2026-05-28T11:58:58.298Z" }, { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012, upload-time = "2026-05-28T11:58:59.589Z" }, - { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111, upload-time = "2026-05-28T11:59:01.104Z" }, - { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225, upload-time = "2026-05-28T11:59:02.433Z" }, - { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487, upload-time = "2026-05-28T11:59:04.012Z" }, - { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798, upload-time = "2026-05-28T11:59:05.485Z" }, { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053, upload-time = "2026-05-28T11:59:06.837Z" }, - { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390, upload-time = "2026-05-28T11:59:08.402Z" }, - { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097, upload-time = "2026-05-28T11:59:09.786Z" }, - { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361, upload-time = "2026-05-28T11:59:11.079Z" }, { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151, upload-time = "2026-05-28T12:01:53.43Z" }, { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195, upload-time = "2026-05-28T12:01:54.901Z" }, - { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850, upload-time = "2026-05-28T12:01:56.601Z" }, - { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899, upload-time = "2026-05-28T12:01:58.212Z" }, - { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618, upload-time = "2026-05-28T12:01:59.888Z" }, - { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003, upload-time = "2026-05-28T12:02:01.482Z" }, { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778, upload-time = "2026-05-28T12:02:03.197Z" }, - { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359, upload-time = "2026-05-28T12:02:04.817Z" }, - { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820, upload-time = "2026-05-28T12:02:06.401Z" }, - { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243, upload-time = "2026-05-28T12:02:08.013Z" }, - { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541, upload-time = "2026-05-28T12:02:09.661Z" }, { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326, upload-time = "2026-05-28T12:02:11.47Z" }, ] @@ -3105,45 +3108,22 @@ version = "0.15.18" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/74/98/1295ad5a5aa9bc85bdcdfa5d82fe7b49c61af5657df4f227637ff9de0da6/ruff-0.15.18.tar.gz", hash = "sha256:2698a964c70e8bf402dcb99c8810472d270d141e7aa8c4e13599fd52033a2f33", size = 4761437, upload-time = "2026-06-18T18:25:39.224Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/d0/686e984941269621e2be72612d5c1e461f8f7b38415a2a7d7a81c8ae6715/ruff-0.15.18-py3-none-linux_armv6l.whl", hash = "sha256:8b6850172348c8381b8b3084c5915a4393c2373b9b54cd5b5e1ea15812bc10df", size = 10887308, upload-time = "2026-06-18T18:25:03.062Z" }, { url = "https://files.pythonhosted.org/packages/ed/21/bc4123e3f5515ee99f8ce1eb93a14a0628fe4d1678663cd08f933ac16931/ruff-0.15.18-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3fccc153a85417dcd976883160cacce486997b0a0058dd18f54b8aaaac7d1ce2", size = 11281305, upload-time = "2026-06-18T18:25:30.026Z" }, { url = "https://files.pythonhosted.org/packages/51/93/4769464c25cf7ab2acb3c7dda9cad3d867eb41c59565b3e2a9d17249c90c/ruff-0.15.18-py3-none-macosx_11_0_arm64.whl", hash = "sha256:08d4c86a68f2c3ec2c9d56380a71fb4a4f65373055cbb8caabd645e9102f38d4", size = 10641215, upload-time = "2026-06-18T18:25:15.802Z" }, - { url = "https://files.pythonhosted.org/packages/6c/42/56926d17120db2c208d76bf60a1a019644dd9e91dc27f0f95c9caddb1366/ruff-0.15.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37e5108745c2c0705da916d7d4de533ddf547051ef45f62888c31bae73f66318", size = 10957224, upload-time = "2026-06-18T18:25:36.955Z" }, - { url = "https://files.pythonhosted.org/packages/22/4f/d43fab8d8189afde803103022d000a8ef9f230616d436d52a8b2b8d63b50/ruff-0.15.18-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:56949a6ce8b3abde54c0bcb22cebfe57e8771cadc84b407ae8b8eaf67ebdcd43", size = 10699024, upload-time = "2026-06-18T18:25:05.707Z" }, - { url = "https://files.pythonhosted.org/packages/63/42/1e3e4c68bd408b9768cf3e439acbe2c78245225faef253f7028a0cdb63e0/ruff-0.15.18-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01a754cd6a1b630d3f97e33eb452cf7a98040482318e870f8bc52a5a30e62657", size = 11491458, upload-time = "2026-06-18T18:25:20.275Z" }, - { url = "https://files.pythonhosted.org/packages/20/77/47a3484bea8521e14a203d98c389c5c97846675e4f02734672da4a69b52a/ruff-0.15.18-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ba7a07e03a44dbf10bb086ee06705b173625014ec99f73a7e6836a5e5590a0c", size = 12383752, upload-time = "2026-06-18T18:25:22.535Z" }, - { url = "https://files.pythonhosted.org/packages/0a/ca/054159590787023d83b658a1a1819c4c8910114e7015069340b71c0961cb/ruff-0.15.18-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a2c40a41a4cadbcf5897b548ab29dfe248b20c540961c0247d98a3973c70403", size = 11577923, upload-time = "2026-06-18T18:25:10.702Z" }, { url = "https://files.pythonhosted.org/packages/6d/ff/d353d6b7bbd73cc0ec37f4463d7540e45e894338abdd9964eee0de332708/ruff-0.15.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f0480ce690cbb6c4db6e5d08f19fce98e10ba131a8b60c1bcdac42771e3ae2d", size = 11583925, upload-time = "2026-06-18T18:25:32.391Z" }, - { url = "https://files.pythonhosted.org/packages/c1/4a/891f89b9c296ed3e5f3ece1a5629badc989d9a8fdaa30431aaf4774bc1c2/ruff-0.15.18-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2330215f1f393fa8733f55edce04fcf94c36a2c460fcde31f78cc84e4951e9b1", size = 11582834, upload-time = "2026-06-18T18:25:27.309Z" }, - { url = "https://files.pythonhosted.org/packages/32/a3/ed9e370154bf85de360b93c03026157f02d4943b2d01ff4945f4429f8e8a/ruff-0.15.18-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a6aa6a3d979e48ae617578183674bf264fbe7d0114a796a26bd678d67963c7ff", size = 10927328, upload-time = "2026-06-18T18:25:34.676Z" }, - { url = "https://files.pythonhosted.org/packages/f5/d1/5cf5909329fedb5d39d555ee818ba5cf4638e1a301b89785d34f2905bfcb/ruff-0.15.18-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a81beadbbff2c9c245561ae3f77b16709d87f35eec650d0501679239d3449b22", size = 10693187, upload-time = "2026-06-18T18:25:08.245Z" }, - { url = "https://files.pythonhosted.org/packages/fd/44/ff6c635cf2c4f4e7b618b6640da057376baa36014695487d88aed4794268/ruff-0.15.18-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2186d9e940ae332ab293623a75b5f4fe49565f449954d50a72a046683aa6b809", size = 11208721, upload-time = "2026-06-18T18:25:41.327Z" }, { url = "https://files.pythonhosted.org/packages/88/d9/5baa2a30861adfb7022cf33c1e35b2fc18085b08c16f83eff4c7b99a5f48/ruff-0.15.18-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5c2abf140438032bc77b2284a6c9944ecd8a19e5f1c7b52b1b8e4a0a80d19a7a", size = 11678599, upload-time = "2026-06-18T18:25:13.607Z" }, - { url = "https://files.pythonhosted.org/packages/c3/1a/0725a7cfdc32ff769efb96ee782bec882e16448c5d9e3be947ec4c04ce27/ruff-0.15.18-py3-none-win32.whl", hash = "sha256:02299e6e9fa5b297a3f6d5d10d7bcd655c925b028bb8b9d4588214549c6b9ec4", size = 10901903, upload-time = "2026-06-18T18:25:24.755Z" }, - { url = "https://files.pythonhosted.org/packages/f3/51/805d9f6fb7970505c3504794a5ec350f605361b807fef4dcf214ebd35e72/ruff-0.15.18-py3-none-win_amd64.whl", hash = "sha256:dac80dc8d26b2257dbefabed62f5d255c3937b4ccb122da1fc634794fa3578b3", size = 12041189, upload-time = "2026-06-18T18:25:17.915Z" }, - { url = "https://files.pythonhosted.org/packages/29/4c/67bb45e41609eb4726f1bfeb59e083cf91d14c696d4bd14c234a980be93d/ruff-0.15.18-py3-none-win_arm64.whl", hash = "sha256:b2c9257fcbd4a3e5b977a1904e6facca016bafe2edc17df24db67cfaee03b4e4", size = 11329958, upload-time = "2026-06-18T18:25:43.686Z" }, ] [[package]] name = "safetensors" -version = "0.5.3" +version = "0.6.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/71/7e/2d5d6ee7b40c0682315367ec7475693d110f512922d582fef1bd4a63adc3/safetensors-0.5.3.tar.gz", hash = "sha256:b6b0d6ecacec39a4fdd99cc19f4576f5219ce858e6fd8dbe7609df0b8dc56965", size = 67210, upload-time = "2025-02-26T09:15:13.155Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/cc/738f3011628920e027a11754d9cae9abec1aed00f7ae860abbf843755233/safetensors-0.6.2.tar.gz", hash = "sha256:43ff2aa0e6fa2dc3ea5524ac7ad93a9839256b8703761e76e2d0b2a3fa4f15d9", size = 197968, upload-time = "2025-08-08T13:13:58.654Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/18/ae/88f6c49dbd0cc4da0e08610019a3c78a7d390879a919411a410a1876d03a/safetensors-0.5.3-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bd20eb133db8ed15b40110b7c00c6df51655a2998132193de2f75f72d99c7073", size = 436917, upload-time = "2025-02-26T09:15:03.702Z" }, - { url = "https://files.pythonhosted.org/packages/b8/3b/11f1b4a2f5d2ab7da34ecc062b0bc301f2be024d110a6466726bec8c055c/safetensors-0.5.3-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:21d01c14ff6c415c485616b8b0bf961c46b3b343ca59110d38d744e577f9cce7", size = 418419, upload-time = "2025-02-26T09:15:01.765Z" }, - { url = "https://files.pythonhosted.org/packages/5d/9a/add3e6fef267658075c5a41573c26d42d80c935cdc992384dfae435feaef/safetensors-0.5.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11bce6164887cd491ca75c2326a113ba934be596e22b28b1742ce27b1d076467", size = 459493, upload-time = "2025-02-26T09:14:51.812Z" }, - { url = "https://files.pythonhosted.org/packages/df/5c/bf2cae92222513cc23b3ff85c4a1bb2811a2c3583ac0f8e8d502751de934/safetensors-0.5.3-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4a243be3590bc3301c821da7a18d87224ef35cbd3e5f5727e4e0728b8172411e", size = 472400, upload-time = "2025-02-26T09:14:53.549Z" }, - { url = "https://files.pythonhosted.org/packages/58/11/7456afb740bd45782d0f4c8e8e1bb9e572f1bf82899fb6ace58af47b4282/safetensors-0.5.3-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8bd84b12b1670a6f8e50f01e28156422a2bc07fb16fc4e98bded13039d688a0d", size = 522891, upload-time = "2025-02-26T09:14:55.717Z" }, - { url = "https://files.pythonhosted.org/packages/57/3d/fe73a9d2ace487e7285f6e157afee2383bd1ddb911b7cb44a55cf812eae3/safetensors-0.5.3-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:391ac8cab7c829452175f871fcaf414aa1e292b5448bd02620f675a7f3e7abb9", size = 537694, upload-time = "2025-02-26T09:14:57.036Z" }, - { url = "https://files.pythonhosted.org/packages/a6/f8/dae3421624fcc87a89d42e1898a798bc7ff72c61f38973a65d60df8f124c/safetensors-0.5.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cead1fa41fc54b1e61089fa57452e8834f798cb1dc7a09ba3524f1eb08e0317a", size = 471642, upload-time = "2025-02-26T09:15:00.544Z" }, - { url = "https://files.pythonhosted.org/packages/ce/20/1fbe16f9b815f6c5a672f5b760951e20e17e43f67f231428f871909a37f6/safetensors-0.5.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1077f3e94182d72618357b04b5ced540ceb71c8a813d3319f1aba448e68a770d", size = 502241, upload-time = "2025-02-26T09:14:58.303Z" }, - { url = "https://files.pythonhosted.org/packages/5f/18/8e108846b506487aa4629fe4116b27db65c3dde922de2c8e0cc1133f3f29/safetensors-0.5.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:799021e78287bac619c7b3f3606730a22da4cda27759ddf55d37c8db7511c74b", size = 638001, upload-time = "2025-02-26T09:15:05.79Z" }, - { url = "https://files.pythonhosted.org/packages/82/5a/c116111d8291af6c8c8a8b40628fe833b9db97d8141c2a82359d14d9e078/safetensors-0.5.3-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:df26da01aaac504334644e1b7642fa000bfec820e7cef83aeac4e355e03195ff", size = 734013, upload-time = "2025-02-26T09:15:07.892Z" }, - { url = "https://files.pythonhosted.org/packages/7d/ff/41fcc4d3b7de837963622e8610d998710705bbde9a8a17221d85e5d0baad/safetensors-0.5.3-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:32c3ef2d7af8b9f52ff685ed0bc43913cdcde135089ae322ee576de93eae5135", size = 670687, upload-time = "2025-02-26T09:15:09.979Z" }, - { url = "https://files.pythonhosted.org/packages/40/ad/2b113098e69c985a3d8fbda4b902778eae4a35b7d5188859b4a63d30c161/safetensors-0.5.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:37f1521be045e56fc2b54c606d4455573e717b2d887c579ee1dbba5f868ece04", size = 643147, upload-time = "2025-02-26T09:15:11.185Z" }, - { url = "https://files.pythonhosted.org/packages/0a/0c/95aeb51d4246bd9a3242d3d8349c1112b4ee7611a4b40f0c5c93b05f001d/safetensors-0.5.3-cp38-abi3-win32.whl", hash = "sha256:cfc0ec0846dcf6763b0ed3d1846ff36008c6e7290683b61616c4b040f6a54ace", size = 296677, upload-time = "2025-02-26T09:15:16.554Z" }, - { url = "https://files.pythonhosted.org/packages/69/e2/b011c38e5394c4c18fb5500778a55ec43ad6106126e74723ffaee246f56e/safetensors-0.5.3-cp38-abi3-win_amd64.whl", hash = "sha256:836cbbc320b47e80acd40e44c8682db0e8ad7123209f69b093def21ec7cafd11", size = 308878, upload-time = "2025-02-26T09:15:14.99Z" }, + { url = "https://files.pythonhosted.org/packages/4d/b1/3f5fd73c039fc87dba3ff8b5d528bfc5a32b597fea8e7a6a4800343a17c7/safetensors-0.6.2-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:9c85ede8ec58f120bad982ec47746981e210492a6db876882aa021446af8ffba", size = 454797, upload-time = "2025-08-08T13:13:52.066Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c9/bb114c158540ee17907ec470d01980957fdaf87b4aa07914c24eba87b9c6/safetensors-0.6.2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d6675cf4b39c98dbd7d940598028f3742e0375a6b4d4277e76beb0c35f4b843b", size = 432206, upload-time = "2025-08-08T13:13:50.931Z" }, + { url = "https://files.pythonhosted.org/packages/fe/5d/5a514d7b88e310c8b146e2404e0dc161282e78634d9358975fd56dfd14be/safetensors-0.6.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8045db2c872db8f4cbe3faa0495932d89c38c899c603f21e9b6486951a5ecb8f", size = 485835, upload-time = "2025-08-08T13:13:49.373Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/cad1d9762868c7c5dc70c8620074df28ebb1a8e4c17d4c0cb031889c457e/safetensors-0.6.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d944cea65fad0ead848b6ec2c37cc0b197194bec228f8020054742190e9312ac", size = 655957, upload-time = "2025-08-08T13:13:57.029Z" }, ] [[package]] @@ -3151,23 +3131,17 @@ name = "scikit-learn" version = "1.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "joblib" }, - { name = "numpy" }, - { name = "scipy" }, - { name = "threadpoolctl" }, + { name = "joblib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "scipy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "threadpoolctl", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9e/a5/4ae3b3a0755f7b35a280ac90b28817d1f380318973cff14075ab41ef50d9/scikit_learn-1.6.1.tar.gz", hash = "sha256:b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e", size = 7068312, upload-time = "2025-01-10T08:07:55.348Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/3a/f4597eb41049110b21ebcbb0bcb43e4035017545daa5eedcfeb45c08b9c5/scikit_learn-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d056391530ccd1e501056160e3c9673b4da4805eb67eb2bdf4e983e1f9c9204e", size = 12067702, upload-time = "2025-01-10T08:05:56.515Z" }, - { url = "https://files.pythonhosted.org/packages/37/19/0423e5e1fd1c6ec5be2352ba05a537a473c1677f8188b9306097d684b327/scikit_learn-1.6.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0c8d036eb937dbb568c6242fa598d551d88fb4399c0344d95c001980ec1c7d36", size = 11112765, upload-time = "2025-01-10T08:06:00.272Z" }, - { url = "https://files.pythonhosted.org/packages/70/95/d5cb2297a835b0f5fc9a77042b0a2d029866379091ab8b3f52cc62277808/scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8634c4bd21a2a813e0a7e3900464e6d593162a29dd35d25bdf0103b3fce60ed5", size = 12643991, upload-time = "2025-01-10T08:06:04.813Z" }, - { url = "https://files.pythonhosted.org/packages/b7/91/ab3c697188f224d658969f678be86b0968ccc52774c8ab4a86a07be13c25/scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:775da975a471c4f6f467725dff0ced5c7ac7bda5e9316b260225b48475279a1b", size = 13497182, upload-time = "2025-01-10T08:06:08.42Z" }, - { url = "https://files.pythonhosted.org/packages/17/04/d5d556b6c88886c092cc989433b2bab62488e0f0dafe616a1d5c9cb0efb1/scikit_learn-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:8a600c31592bd7dab31e1c61b9bbd6dea1b3433e67d264d17ce1017dbdce8002", size = 11125517, upload-time = "2025-01-10T08:06:12.783Z" }, { url = "https://files.pythonhosted.org/packages/6c/2a/e291c29670795406a824567d1dfc91db7b699799a002fdaa452bceea8f6e/scikit_learn-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72abc587c75234935e97d09aa4913a82f7b03ee0b74111dcc2881cba3c5a7b33", size = 12102620, upload-time = "2025-01-10T08:06:16.675Z" }, { url = "https://files.pythonhosted.org/packages/25/92/ee1d7a00bb6b8c55755d4984fd82608603a3cc59959245068ce32e7fb808/scikit_learn-1.6.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b3b00cdc8f1317b5f33191df1386c0befd16625f49d979fe77a8d44cae82410d", size = 11116234, upload-time = "2025-01-10T08:06:21.83Z" }, - { url = "https://files.pythonhosted.org/packages/30/cd/ed4399485ef364bb25f388ab438e3724e60dc218c547a407b6e90ccccaef/scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc4765af3386811c3ca21638f63b9cf5ecf66261cc4815c1db3f1e7dc7b79db2", size = 12592155, upload-time = "2025-01-10T08:06:27.309Z" }, { url = "https://files.pythonhosted.org/packages/a8/f3/62fc9a5a659bb58a03cdd7e258956a5824bdc9b4bb3c5d932f55880be569/scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25fc636bdaf1cc2f4a124a116312d837148b5e10872147bdaf4887926b8c03d8", size = 13497069, upload-time = "2025-01-10T08:06:32.515Z" }, - { url = "https://files.pythonhosted.org/packages/a1/a6/c5b78606743a1f28eae8f11973de6613a5ee87366796583fb74c67d54939/scikit_learn-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:fa909b1a36e000a03c382aade0bd2063fd5680ff8b8e501660c0f59f021a6415", size = 11139809, upload-time = "2025-01-10T08:06:35.514Z" }, ] [[package]] @@ -3175,69 +3149,29 @@ name = "scipy" version = "1.15.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/76/c6/8eb0654ba0c7d0bb1bf67bf8fbace101a8e4f250f7722371105e8b6f68fc/scipy-1.15.1.tar.gz", hash = "sha256:033a75ddad1463970c96a88063a1df87ccfddd526437136b6ee81ff0312ebdf6", size = 59407493, upload-time = "2025-01-11T00:06:16.883Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/86/53/b204ce5a4433f1864001b9d16f103b9c25f5002a602ae83585d0ea5f9c4a/scipy-1.15.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:c64ded12dcab08afff9e805a67ff4480f5e69993310e093434b10e85dc9d43e1", size = 41414518, upload-time = "2025-01-10T23:59:19.173Z" }, - { url = "https://files.pythonhosted.org/packages/c7/fc/54ffa7a8847f7f303197a6ba65a66104724beba2e38f328135a78f0dc480/scipy-1.15.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5b190b935e7db569960b48840e5bef71dc513314cc4e79a1b7d14664f57fd4ff", size = 32519265, upload-time = "2025-01-10T23:59:27.6Z" }, - { url = "https://files.pythonhosted.org/packages/f1/77/a98b8ba03d6f371dc31a38719affd53426d4665729dcffbed4afe296784a/scipy-1.15.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:4b17d4220df99bacb63065c76b0d1126d82bbf00167d1730019d2a30d6ae01ea", size = 24792859, upload-time = "2025-01-10T23:59:33.906Z" }, - { url = "https://files.pythonhosted.org/packages/a7/78/70bb9f0df7444b18b108580934bfef774822e28fd34a68e5c263c7d2828a/scipy-1.15.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:63b9b6cd0333d0eb1a49de6f834e8aeaefe438df8f6372352084535ad095219e", size = 27886506, upload-time = "2025-01-10T23:59:39.288Z" }, - { url = "https://files.pythonhosted.org/packages/14/a7/f40f6033e06de4176ddd6cc8c3ae9f10a226c3bca5d6b4ab883bc9914a14/scipy-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f151e9fb60fbf8e52426132f473221a49362091ce7a5e72f8aa41f8e0da4f25", size = 38375041, upload-time = "2025-01-10T23:59:47.066Z" }, - { url = "https://files.pythonhosted.org/packages/17/03/390a1c5c61fd76b0fa4b3c5aa3bdd7e60f6c46f712924f1a9df5705ec046/scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21e10b1dd56ce92fba3e786007322542361984f8463c6d37f6f25935a5a6ef52", size = 40597556, upload-time = "2025-01-10T23:59:55.199Z" }, - { url = "https://files.pythonhosted.org/packages/4e/70/fa95b3ae026b97eeca58204a90868802e5155ac71b9d7bdee92b68115dd3/scipy-1.15.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5dff14e75cdbcf07cdaa1c7707db6017d130f0af9ac41f6ce443a93318d6c6e0", size = 42938505, upload-time = "2025-01-11T00:00:04.734Z" }, - { url = "https://files.pythonhosted.org/packages/d6/07/427859116bdd71847c898180f01802691f203c3e2455a1eb496130ff07c5/scipy-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:f82fcf4e5b377f819542fbc8541f7b5fbcf1c0017d0df0bc22c781bf60abc4d8", size = 43909663, upload-time = "2025-01-11T00:00:15.339Z" }, { url = "https://files.pythonhosted.org/packages/8e/2e/7b71312da9c2dabff53e7c9a9d08231bc34d9d8fdabe88a6f1155b44591c/scipy-1.15.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:5bd8d27d44e2c13d0c1124e6a556454f52cd3f704742985f6b09e75e163d20d2", size = 41424362, upload-time = "2025-01-11T00:00:22.985Z" }, { url = "https://files.pythonhosted.org/packages/81/8c/ab85f1aa1cc200c796532a385b6ebf6a81089747adc1da7482a062acc46c/scipy-1.15.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:be3deeb32844c27599347faa077b359584ba96664c5c79d71a354b80a0ad0ce0", size = 32535910, upload-time = "2025-01-11T00:00:29.569Z" }, { url = "https://files.pythonhosted.org/packages/3b/9c/6f4b787058daa8d8da21ddff881b4320e28de4704a65ec147adb50cb2230/scipy-1.15.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:5eb0ca35d4b08e95da99a9f9c400dc9f6c21c424298a0ba876fdc69c7afacedf", size = 24809398, upload-time = "2025-01-11T00:00:36.218Z" }, { url = "https://files.pythonhosted.org/packages/16/2b/949460a796df75fc7a1ee1becea202cf072edbe325ebe29f6d2029947aa7/scipy-1.15.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:74bb864ff7640dea310a1377d8567dc2cb7599c26a79ca852fc184cc851954ac", size = 27918045, upload-time = "2025-01-11T00:00:42.627Z" }, - { url = "https://files.pythonhosted.org/packages/5f/36/67fe249dd7ccfcd2a38b25a640e3af7e59d9169c802478b6035ba91dfd6d/scipy-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:667f950bf8b7c3a23b4199db24cb9bf7512e27e86d0e3813f015b74ec2c6e3df", size = 38332074, upload-time = "2025-01-11T00:00:52.633Z" }, { url = "https://files.pythonhosted.org/packages/fc/da/452e1119e6f720df3feb588cce3c42c5e3d628d4bfd4aec097bd30b7de0c/scipy-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395be70220d1189756068b3173853029a013d8c8dd5fd3d1361d505b2aa58fa7", size = 40588469, upload-time = "2025-01-11T00:01:00.149Z" }, { url = "https://files.pythonhosted.org/packages/7f/71/5f94aceeac99a4941478af94fe9f459c6752d497035b6b0761a700f5f9ff/scipy-1.15.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ce3a000cd28b4430426db2ca44d96636f701ed12e2b3ca1f2b1dd7abdd84b39a", size = 42965214, upload-time = "2025-01-11T00:01:10.131Z" }, - { url = "https://files.pythonhosted.org/packages/af/25/caa430865749d504271757cafd24066d596217e83326155993980bc22f97/scipy-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fe1d95944f9cf6ba77aa28b82dd6bb2a5b52f2026beb39ecf05304b8392864b", size = 43896034, upload-time = "2025-01-11T00:01:40.933Z" }, -] - -[[package]] -name = "sentence-transformers" -version = "2.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "pillow" }, - { name = "scikit-learn" }, - { name = "scipy" }, - { name = "torch" }, - { name = "tqdm" }, - { name = "transformers" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/65/8d/8d6147fdef0ed7aeff3dab487bd17619b512afab845eb295faa08b20a5d0/sentence_transformers-2.7.0.tar.gz", hash = "sha256:2f7df99d1c021dded471ed2d079e9d1e4fc8e30ecb06f957be060511b36f24ea", size = 128393, upload-time = "2024-04-17T13:15:44.223Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/2c/bd95032aeb087b0706596af0a4518c4bfe0439a1bb149048ece18b617766/sentence_transformers-2.7.0-py3-none-any.whl", hash = "sha256:6a7276b05a95931581bbfa4ba49d780b2cf6904fa4a171ec7fd66c343f761c98", size = 171480, upload-time = "2024-04-17T13:15:42.048Z" }, ] [[package]] name = "sentencepiece" -version = "0.2.0" +version = "0.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c9/d2/b9c7ca067c26d8ff085d252c89b5f69609ca93fb85a00ede95f4857865d4/sentencepiece-0.2.0.tar.gz", hash = "sha256:a52c19171daaf2e697dc6cbe67684e0fa341b1248966f6aebb541de654d15843", size = 2632106, upload-time = "2024-02-19T17:06:47.428Z" } +sdist = { url = "https://files.pythonhosted.org/packages/15/15/2e7a025fc62d764b151ae6d0f2a92f8081755ebe8d4a64099accc6f77ba6/sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad", size = 3228515, upload-time = "2025-08-12T07:00:51.718Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/71/98648c3b64b23edb5403f74bcc906ad21766872a6e1ada26ea3f1eb941ab/sentencepiece-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:188779e1298a1c8b8253c7d3ad729cb0a9891e5cef5e5d07ce4592c54869e227", size = 2408979, upload-time = "2024-02-19T17:05:34.651Z" }, - { url = "https://files.pythonhosted.org/packages/77/9f/7efbaa6d4c0c718a9affbecc536b03ca62f99f421bdffb531c16030e2d2b/sentencepiece-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bed9cf85b296fa2b76fc2547b9cbb691a523864cebaee86304c43a7b4cb1b452", size = 1238845, upload-time = "2024-02-19T17:05:37.371Z" }, - { url = "https://files.pythonhosted.org/packages/1c/e4/c2541027a43ec6962ba9b601805d17ba3f86b38bdeae0e8ac65a2981e248/sentencepiece-0.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d7b67e724bead13f18db6e1d10b6bbdc454af574d70efbb36f27d90387be1ca3", size = 1181472, upload-time = "2024-02-19T17:05:39.775Z" }, - { url = "https://files.pythonhosted.org/packages/fd/46/316c1ba6c52b97de76aff7b9da678f7afbb52136afb2987c474d95630e65/sentencepiece-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fde4b08cfe237be4484c6c7c2e2c75fb862cfeab6bd5449ce4caeafd97b767a", size = 1259151, upload-time = "2024-02-19T17:05:42.594Z" }, - { url = "https://files.pythonhosted.org/packages/aa/5a/3c48738a0835d76dd06c62b6ac48d39c923cde78dd0f587353bdcbb99851/sentencepiece-0.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c378492056202d1c48a4979650981635fd97875a00eabb1f00c6a236b013b5e", size = 1355931, upload-time = "2024-02-19T17:05:44.695Z" }, - { url = "https://files.pythonhosted.org/packages/a6/27/33019685023221ca8ed98e8ceb7ae5e166032686fa3662c68f1f1edf334e/sentencepiece-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1380ce6540a368de2ef6d7e6ba14ba8f3258df650d39ba7d833b79ee68a52040", size = 1301537, upload-time = "2024-02-19T17:05:46.713Z" }, - { url = "https://files.pythonhosted.org/packages/ca/e4/55f97cef14293171fef5f96e96999919ab5b4d1ce95b53547ad653d7e3bf/sentencepiece-0.2.0-cp310-cp310-win32.whl", hash = "sha256:a1151d6a6dd4b43e552394aed0edfe9292820272f0194bd56c7c1660a0c06c3d", size = 936747, upload-time = "2024-02-19T17:05:48.705Z" }, - { url = "https://files.pythonhosted.org/packages/85/f4/4ef1a6e0e9dbd8a60780a91df8b7452ada14cfaa0e17b3b8dfa42cecae18/sentencepiece-0.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:d490142b0521ef22bc1085f061d922a2a6666175bb6b42e588ff95c0db6819b2", size = 991525, upload-time = "2024-02-19T17:05:55.145Z" }, - { url = "https://files.pythonhosted.org/packages/32/43/8f8885168a47a02eba1455bd3f4f169f50ad5b8cebd2402d0f5e20854d04/sentencepiece-0.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:17982700c4f6dbb55fa3594f3d7e5dd1c8659a274af3738e33c987d2a27c9d5c", size = 2409036, upload-time = "2024-02-19T17:05:58.021Z" }, - { url = "https://files.pythonhosted.org/packages/0f/35/e63ba28062af0a3d688a9f128e407a1a2608544b2f480cb49bf7f4b1cbb9/sentencepiece-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7c867012c0e8bcd5bdad0f791609101cb5c66acb303ab3270218d6debc68a65e", size = 1238921, upload-time = "2024-02-19T17:06:06.434Z" }, - { url = "https://files.pythonhosted.org/packages/de/42/ae30952c4a0bd773e90c9bf2579f5533037c886dfc8ec68133d5694f4dd2/sentencepiece-0.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7fd6071249c74f779c5b27183295b9202f8dedb68034e716784364443879eaa6", size = 1181477, upload-time = "2024-02-19T17:06:09.292Z" }, - { url = "https://files.pythonhosted.org/packages/e3/ac/2f2ab1d60bb2d795d054eebe5e3f24b164bc21b5a9b75fba7968b3b91b5a/sentencepiece-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27f90c55a65013cbb8f4d7aab0599bf925cde4adc67ae43a0d323677b5a1c6cb", size = 1259182, upload-time = "2024-02-19T17:06:16.459Z" }, - { url = "https://files.pythonhosted.org/packages/45/fb/14633c6ecf262c468759ffcdb55c3a7ee38fe4eda6a70d75ee7c7d63c58b/sentencepiece-0.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b293734059ef656dcd65be62ff771507bea8fed0a711b6733976e1ed3add4553", size = 1355537, upload-time = "2024-02-19T17:06:19.274Z" }, - { url = "https://files.pythonhosted.org/packages/fb/12/2f5c8d4764b00033cf1c935b702d3bb878d10be9f0b87f0253495832d85f/sentencepiece-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e58b47f933aca74c6a60a79dcb21d5b9e47416256c795c2d58d55cec27f9551d", size = 1301464, upload-time = "2024-02-19T17:06:21.796Z" }, - { url = "https://files.pythonhosted.org/packages/4e/b1/67afc0bde24f6dcb3acdea0dd8dcdf4b8b0db240f6bacd39378bd32d09f8/sentencepiece-0.2.0-cp311-cp311-win32.whl", hash = "sha256:c581258cf346b327c62c4f1cebd32691826306f6a41d8c4bec43b010dee08e75", size = 936749, upload-time = "2024-02-19T17:06:24.167Z" }, - { url = "https://files.pythonhosted.org/packages/a2/f6/587c62fd21fc988555b85351f50bbde43a51524caafd63bc69240ded14fd/sentencepiece-0.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:0993dbc665f4113017892f1b87c3904a44d0640eda510abcacdfb07f74286d36", size = 991520, upload-time = "2024-02-19T17:06:26.936Z" }, + { url = "https://files.pythonhosted.org/packages/d8/15/46afbab00733d81788b64be430ca1b93011bb9388527958e26cc31832de5/sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987", size = 1942560, upload-time = "2025-08-12T06:59:25.82Z" }, + { url = "https://files.pythonhosted.org/packages/fa/79/7c01b8ef98a0567e9d84a4e7a910f8e7074fcbf398a5cd76f93f4b9316f9/sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7", size = 1325385, upload-time = "2025-08-12T06:59:27.722Z" }, + { url = "https://files.pythonhosted.org/packages/bb/88/2b41e07bd24f33dcf2f18ec3b74247aa4af3526bad8907b8727ea3caba03/sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a", size = 1253319, upload-time = "2025-08-12T06:59:29.306Z" }, + { url = "https://files.pythonhosted.org/packages/ef/66/fb191403ade791ad2c3c1e72fe8413e63781b08cfa3aa4c9dfc536d6e795/sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63", size = 1387785, upload-time = "2025-08-12T06:59:32.491Z" }, ] [[package]] @@ -3245,8 +3179,8 @@ name = "sentry-sdk" version = "2.63.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi" }, - { name = "urllib3" }, + { name = "certifi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "urllib3", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ba/c8/b3c970a5b186722d276cd40a05b3254e03bccc0208560aff20f612e018e8/sentry_sdk-2.63.0.tar.gz", hash = "sha256:2a1502bf864769275dbc8c2c9fc7a0f7f5e18358180b615d262d13a31ffba216", size = 912449, upload-time = "2026-06-16T12:45:57.553Z" } wheels = [ @@ -3259,41 +3193,18 @@ version = "1.3.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8d/48/49393a96a2eef1ab418b17475fb92b8fcfad83d099e678751b05472e69de/setproctitle-1.3.7.tar.gz", hash = "sha256:bc2bc917691c1537d5b9bca1468437176809c7e11e5694ca79a9ca12345dcb9e", size = 27002, upload-time = "2025-09-05T12:51:25.278Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f2/48/fb401ec8c4953d519d05c87feca816ad668b8258448ff60579ac7a1c1386/setproctitle-1.3.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cf555b6299f10a6eb44e4f96d2f5a3884c70ce25dc5c8796aaa2f7b40e72cb1b", size = 18079, upload-time = "2025-09-05T12:49:07.732Z" }, - { url = "https://files.pythonhosted.org/packages/cc/a3/c2b0333c2716fb3b4c9a973dd113366ac51b4f8d56b500f4f8f704b4817a/setproctitle-1.3.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:690b4776f9c15aaf1023bb07d7c5b797681a17af98a4a69e76a1d504e41108b7", size = 13099, upload-time = "2025-09-05T12:49:09.222Z" }, - { url = "https://files.pythonhosted.org/packages/0e/f8/17bda581c517678260e6541b600eeb67745f53596dc077174141ba2f6702/setproctitle-1.3.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:00afa6fc507967d8c9d592a887cdc6c1f5742ceac6a4354d111ca0214847732c", size = 31793, upload-time = "2025-09-05T12:49:10.297Z" }, - { url = "https://files.pythonhosted.org/packages/27/d1/76a33ae80d4e788ecab9eb9b53db03e81cfc95367ec7e3fbf4989962fedd/setproctitle-1.3.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e02667f6b9fc1238ba753c0f4b0a37ae184ce8f3bbbc38e115d99646b3f4cd3", size = 32779, upload-time = "2025-09-05T12:49:12.157Z" }, - { url = "https://files.pythonhosted.org/packages/59/27/1a07c38121967061564f5e0884414a5ab11a783260450172d4fc68c15621/setproctitle-1.3.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:83fcd271567d133eb9532d3b067c8a75be175b2b3b271e2812921a05303a693f", size = 34578, upload-time = "2025-09-05T12:49:13.393Z" }, - { url = "https://files.pythonhosted.org/packages/d8/d4/725e6353935962d8bb12cbf7e7abba1d0d738c7f6935f90239d8e1ccf913/setproctitle-1.3.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13fe37951dda1a45c35d77d06e3da5d90e4f875c4918a7312b3b4556cfa7ff64", size = 32030, upload-time = "2025-09-05T12:49:15.362Z" }, - { url = "https://files.pythonhosted.org/packages/67/24/e4677ae8e1cb0d549ab558b12db10c175a889be0974c589c428fece5433e/setproctitle-1.3.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a05509cfb2059e5d2ddff701d38e474169e9ce2a298cf1b6fd5f3a213a553fe5", size = 33363, upload-time = "2025-09-05T12:49:16.829Z" }, - { url = "https://files.pythonhosted.org/packages/55/d4/69ce66e4373a48fdbb37489f3ded476bb393e27f514968c3a69a67343ae0/setproctitle-1.3.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6da835e76ae18574859224a75db6e15c4c2aaa66d300a57efeaa4c97ca4c7381", size = 31508, upload-time = "2025-09-05T12:49:18.032Z" }, - { url = "https://files.pythonhosted.org/packages/4b/5a/42c1ed0e9665d068146a68326529b5686a1881c8b9197c2664db4baf6aeb/setproctitle-1.3.7-cp310-cp310-win32.whl", hash = "sha256:9e803d1b1e20240a93bac0bc1025363f7f80cb7eab67dfe21efc0686cc59ad7c", size = 12558, upload-time = "2025-09-05T12:49:19.742Z" }, - { url = "https://files.pythonhosted.org/packages/dc/fe/dd206cc19a25561921456f6cb12b405635319299b6f366e0bebe872abc18/setproctitle-1.3.7-cp310-cp310-win_amd64.whl", hash = "sha256:a97200acc6b64ec4cada52c2ecaf1fba1ef9429ce9c542f8a7db5bcaa9dcbd95", size = 13245, upload-time = "2025-09-05T12:49:21.023Z" }, - { url = "https://files.pythonhosted.org/packages/04/cd/1b7ba5cad635510720ce19d7122154df96a2387d2a74217be552887c93e5/setproctitle-1.3.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a600eeb4145fb0ee6c287cb82a2884bd4ec5bbb076921e287039dcc7b7cc6dd0", size = 18085, upload-time = "2025-09-05T12:49:22.183Z" }, - { url = "https://files.pythonhosted.org/packages/8f/1a/b2da0a620490aae355f9d72072ac13e901a9fec809a6a24fc6493a8f3c35/setproctitle-1.3.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97a090fed480471bb175689859532709e28c085087e344bca45cf318034f70c4", size = 13097, upload-time = "2025-09-05T12:49:23.322Z" }, { url = "https://files.pythonhosted.org/packages/18/2e/bd03ff02432a181c1787f6fc2a678f53b7dacdd5ded69c318fe1619556e8/setproctitle-1.3.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1607b963e7b53e24ec8a2cb4e0ab3ae591d7c6bf0a160feef0551da63452b37f", size = 32191, upload-time = "2025-09-05T12:49:24.567Z" }, - { url = "https://files.pythonhosted.org/packages/28/78/1e62fc0937a8549f2220445ed2175daacee9b6764c7963b16148119b016d/setproctitle-1.3.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a20fb1a3974e2dab857870cf874b325b8705605cb7e7e8bcbb915bca896f52a9", size = 33203, upload-time = "2025-09-05T12:49:25.871Z" }, - { url = "https://files.pythonhosted.org/packages/a0/3c/65edc65db3fa3df400cf13b05e9d41a3c77517b4839ce873aa6b4043184f/setproctitle-1.3.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f8d961bba676e07d77665204f36cffaa260f526e7b32d07ab3df6a2c1dfb44ba", size = 34963, upload-time = "2025-09-05T12:49:27.044Z" }, - { url = "https://files.pythonhosted.org/packages/a1/32/89157e3de997973e306e44152522385f428e16f92f3cf113461489e1e2ee/setproctitle-1.3.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:db0fd964fbd3a9f8999b502f65bd2e20883fdb5b1fae3a424e66db9a793ed307", size = 32398, upload-time = "2025-09-05T12:49:28.909Z" }, - { url = "https://files.pythonhosted.org/packages/4a/18/77a765a339ddf046844cb4513353d8e9dcd8183da9cdba6e078713e6b0b2/setproctitle-1.3.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:db116850fcf7cca19492030f8d3b4b6e231278e8fe097a043957d22ce1bdf3ee", size = 33657, upload-time = "2025-09-05T12:49:30.323Z" }, { url = "https://files.pythonhosted.org/packages/6b/63/f0b6205c64d74d2a24a58644a38ec77bdbaa6afc13747e75973bf8904932/setproctitle-1.3.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:316664d8b24a5c91ee244460bdaf7a74a707adaa9e14fbe0dc0a53168bb9aba1", size = 31836, upload-time = "2025-09-05T12:49:32.309Z" }, - { url = "https://files.pythonhosted.org/packages/ba/51/e1277f9ba302f1a250bbd3eedbbee747a244b3cc682eb58fb9733968f6d8/setproctitle-1.3.7-cp311-cp311-win32.whl", hash = "sha256:b74774ca471c86c09b9d5037c8451fff06bb82cd320d26ae5a01c758088c0d5d", size = 12556, upload-time = "2025-09-05T12:49:33.529Z" }, - { url = "https://files.pythonhosted.org/packages/b6/7b/822a23f17e9003dfdee92cd72758441ca2a3680388da813a371b716fb07f/setproctitle-1.3.7-cp311-cp311-win_amd64.whl", hash = "sha256:acb9097213a8dd3410ed9f0dc147840e45ca9797785272928d4be3f0e69e3be4", size = 13243, upload-time = "2025-09-05T12:49:34.553Z" }, - { url = "https://files.pythonhosted.org/packages/34/8a/aff5506ce89bc3168cb492b18ba45573158d528184e8a9759a05a09088a9/setproctitle-1.3.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:eb440c5644a448e6203935ed60466ec8d0df7278cd22dc6cf782d07911bcbea6", size = 12654, upload-time = "2025-09-05T12:51:17.141Z" }, - { url = "https://files.pythonhosted.org/packages/41/89/5b6f2faedd6ced3d3c085a5efbd91380fb1f61f4c12bc42acad37932f4e9/setproctitle-1.3.7-pp310-pypy310_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:502b902a0e4c69031b87870ff4986c290ebbb12d6038a70639f09c331b18efb2", size = 14284, upload-time = "2025-09-05T12:51:18.393Z" }, - { url = "https://files.pythonhosted.org/packages/0a/c0/4312fed3ca393a29589603fd48f17937b4ed0638b923bac75a728382e730/setproctitle-1.3.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f6f268caeabb37ccd824d749e7ce0ec6337c4ed954adba33ec0d90cc46b0ab78", size = 13282, upload-time = "2025-09-05T12:51:19.703Z" }, - { url = "https://files.pythonhosted.org/packages/c3/5b/5e1c117ac84e3cefcf8d7a7f6b2461795a87e20869da065a5c087149060b/setproctitle-1.3.7-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b1cac6a4b0252b8811d60b6d8d0f157c0fdfed379ac89c25a914e6346cf355a1", size = 12587, upload-time = "2025-09-05T12:51:21.195Z" }, { url = "https://files.pythonhosted.org/packages/73/02/b9eadc226195dcfa90eed37afe56b5dd6fa2f0e5220ab8b7867b8862b926/setproctitle-1.3.7-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f1704c9e041f2b1dc38f5be4552e141e1432fba3dd52c72eeffd5bc2db04dc65", size = 14286, upload-time = "2025-09-05T12:51:22.61Z" }, - { url = "https://files.pythonhosted.org/packages/28/26/1be1d2a53c2a91ec48fa2ff4a409b395f836798adf194d99de9c059419ea/setproctitle-1.3.7-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b08b61976ffa548bd5349ce54404bf6b2d51bd74d4f1b241ed1b0f25bce09c3a", size = 13282, upload-time = "2025-09-05T12:51:24.094Z" }, ] [[package]] name = "setuptools" -version = "82.0.1" +version = "81.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316, upload-time = "2026-03-09T12:47:17.221Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/1c/73e719955c59b8e424d015ab450f51c0af856ae46ea2da83eba51cc88de1/setuptools-81.0.0.tar.gz", hash = "sha256:487b53915f52501f0a79ccfd0c02c165ffe06631443a886740b91af4b7a5845a", size = 1198299, upload-time = "2026-02-06T21:10:39.601Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223, upload-time = "2026-03-09T12:47:15.026Z" }, + { url = "https://files.pythonhosted.org/packages/e1/e3/c164c88b2e5ce7b24d667b9bd83589cf4f3520d97cad01534cd3c4f55fdb/setuptools-81.0.0-py3-none-any.whl", hash = "sha256:fdd925d5c5d9f62e4b74b30d6dd7828ce236fd6ed998a08d81de62ce5a6310d6", size = 1062021, upload-time = "2026-02-06T21:10:37.175Z" }, ] [[package]] @@ -3319,7 +3230,7 @@ name = "smart-open" version = "7.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "wrapt" }, + { name = "wrapt", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c5/65/3ada667d32675399001bf022ad3d9f3989b57101351ebc71d6fbe2384634/smart_open-7.6.1.tar.gz", hash = "sha256:4347996e7ba21db7cd1e059632e0b30395407e4f6c660d2ddffc8f2a9ae5f990", size = 54754, upload-time = "2026-05-09T06:23:37.06Z" } wheels = [ @@ -3336,50 +3247,12 @@ wheels = [ ] [[package]] -name = "soundfile" -version = "0.14.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi" }, - { name = "numpy" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d2/db/949331952a6fb1c5b12e9de80fd08747966c2039d1a61db4764fbd3981c2/soundfile-0.14.0.tar.gz", hash = "sha256:ba1c1a2d618bca5c406647c83b89f07cc8810fa506a50622a6993ba130c1de11", size = 47842, upload-time = "2026-06-06T08:58:47.869Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/d1/5e338af9ca6ed0786cd5bb03f6d60de1c325728c1189014f3b59aae7403c/soundfile-0.14.0-py2.py3-none-any.whl", hash = "sha256:8ba81ae3a89fd5ab3bef8a8eb481fbbe794e806309675a89b4df48b8d31908a8", size = 26799, upload-time = "2026-06-06T08:58:33.269Z" }, - { url = "https://files.pythonhosted.org/packages/7e/72/c6b21e58d3113596e7e8de0a08d6f1d95173492cfbca0a4db14148cbba2a/soundfile-0.14.0-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:19be05428da76ed61a4cad29b8e4bcf43a3e5c100089d2ec81dc961eed1b0dd4", size = 1144568, upload-time = "2026-06-06T08:58:35.231Z" }, - { url = "https://files.pythonhosted.org/packages/63/7a/dfdd6f8c748988427119f75eb860a3cedd858d1aea1fe28f39ad8559ef22/soundfile-0.14.0-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:d828d35a059626da52f1415b5faee610aeab393319cb3fc4a9aef47b619fc14c", size = 1103726, upload-time = "2026-06-06T08:58:37.948Z" }, - { url = "https://files.pythonhosted.org/packages/4a/f8/fc39fad6f879633461d27394cd1ddaf1f769ffa0597dca35872f51b16461/soundfile-0.14.0-py2.py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:e85724a90bc99a6e8062c0b4ddf725f53b2a3b70afd4da875e9d2cfc4e92f377", size = 1238050, upload-time = "2026-06-06T08:58:39.932Z" }, - { url = "https://files.pythonhosted.org/packages/7b/a2/70fd4432b924684c372df8b0a45708c36c057ef3596c9eb53e0a806b980b/soundfile-0.14.0-py2.py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:1e38bac1853412871318e82a1ba69a8be677619b56025bbfcccdb41b6cafe82d", size = 1315963, upload-time = "2026-06-06T08:58:41.716Z" }, - { url = "https://files.pythonhosted.org/packages/d9/34/c9e80783d83eab739a9531fdee03675d53e0bf1b2ccb4bb3af5844675046/soundfile-0.14.0-py2.py3-none-win32.whl", hash = "sha256:0a6ae43c50c71b4e020cc55382925cb89451c1ed1a0c3d0f5d802da269226849", size = 902199, upload-time = "2026-06-06T08:58:43.289Z" }, - { url = "https://files.pythonhosted.org/packages/ed/97/b39c18ac1df45e755ca22b8b00e872929da5d107998a207a5e4ac831bfda/soundfile-0.14.0-py2.py3-none-win_amd64.whl", hash = "sha256:299491d3499460fb1b74bb4bd78b57ffc2d243a5fafa7b6ec1b264875c78453e", size = 1021480, upload-time = "2026-06-06T08:58:45.016Z" }, - { url = "https://files.pythonhosted.org/packages/f4/83/55c65e61cf457805ce2ec157c1c6ae17715d0851aa2374422de0538838ca/soundfile-0.14.0-py2.py3-none-win_arm64.whl", hash = "sha256:e090704718e124e7c844695236f1fce8d18a5e761eaf7c82dfcd124620805f98", size = 888858, upload-time = "2026-06-06T08:58:46.593Z" }, -] - -[[package]] -name = "soxr" -version = "1.1.0" +name = "sortedcontainers" +version = "2.4.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ed/11/27cebce4a108f77afea7c80545115536b45e3f11ebfb914f638fdd9ba847/soxr-1.1.0.tar.gz", hash = "sha256:9f228ae21c78fa9359ca98d8a5e8e91f30639e438e574133dace62c5b5309e44", size = 173067, upload-time = "2026-05-03T00:15:18.214Z" } +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/75/96/6b335638dd3ef4e5d50b9a0a7497e8433ab10fb45457497010074dd3c734/soxr-1.1.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:9564d82f7fa6bf548e5f18bb86235dff20eea8bd30727b64d49783c95c34fb8d", size = 205270, upload-time = "2026-05-03T00:14:38.391Z" }, - { url = "https://files.pythonhosted.org/packages/d5/0e/79e479b38f014757af877755c6eeea10c8750f66ef1e2231709f1d5dc7ab/soxr-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9443e5eb82152d8952422b7285692192cc7dcffa5218bb511b096203018bc273", size = 167049, upload-time = "2026-05-03T00:14:40.226Z" }, - { url = "https://files.pythonhosted.org/packages/b3/aa/52759e223bd5b4923e518d6312161887c96d42b81df5425198cf9f3371e2/soxr-1.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:588c7de1abafe59e66face9a074514658ac0398c85a774cdbb8efac131192692", size = 210589, upload-time = "2026-05-03T00:14:41.863Z" }, - { url = "https://files.pythonhosted.org/packages/38/89/a6550d26ebeb17f83e03cf6cde2d084b8d292900a027d43a6696cbce5c5a/soxr-1.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26925618945f1a44dfbd783cc572874f0685e9ecdf46b96f4000f6b8c9c8b825", size = 245032, upload-time = "2026-05-03T00:14:43.341Z" }, - { url = "https://files.pythonhosted.org/packages/79/c6/2e47f17fa4461ba047f5f38a592f39120c21e6af8786268b0be2ef870318/soxr-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b2e94c713b7d96fb92841947b785bcee6606124bc852273fab70454b51bfe270", size = 176571, upload-time = "2026-05-03T00:14:45.035Z" }, - { url = "https://files.pythonhosted.org/packages/8e/49/3e6bc84f87439f222f40b616e9a29a170f41fb564710ea510df19dc26907/soxr-1.1.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:34cc92208c3c412c046813e69da639c04a792c6a41fbfd7d909d359cd3e97a2d", size = 205699, upload-time = "2026-05-03T00:14:46.67Z" }, - { url = "https://files.pythonhosted.org/packages/2f/94/216f46096a85b07d1e6ba7fd44491402e912a3d688cd4f36f0a600ca155f/soxr-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd30f7201eac896ebf5db7b09156e6f1a1b82601900d29d9c8449bdad8365b11", size = 167381, upload-time = "2026-05-03T00:14:48.012Z" }, - { url = "https://files.pythonhosted.org/packages/94/cb/06caa463b8181ec1981bd6376d4a873748b7008193188b8cfb60391eb131/soxr-1.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1577865e993f98ffb261257c3060fa76ec3db44ed3f181b16464268000424464", size = 210938, upload-time = "2026-05-03T00:14:49.768Z" }, - { url = "https://files.pythonhosted.org/packages/86/47/d5964551ca818b7f0c7ef7f3899056263b60ef098a801066350a9672ca8f/soxr-1.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3da87e3ffa3e41823d873b051c7ecb2acebd8d1b6b46b752f5facf10a0d84ab9", size = 245268, upload-time = "2026-05-03T00:14:51.422Z" }, - { url = "https://files.pythonhosted.org/packages/8f/29/371467eb86c7ba6810df0bfe9409bcd9c52ec5615b111190fafe23e4d2e1/soxr-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:ae30c48ac795378cf23ba3c7c640b8ff794af714ac388b9fd6b31a40b39e6e86", size = 176779, upload-time = "2026-05-03T00:14:53.09Z" }, - { url = "https://files.pythonhosted.org/packages/06/8a/f3da7973b5f1b05d2d7e94d5376b881dcbc05297900cae6c3d33d95b209b/soxr-1.1.0-cp312-abi3-macosx_10_14_x86_64.whl", hash = "sha256:e0e09fa633ce2e67df08b298afced4d184f6e753fc330f241022250f1d0d61da", size = 204124, upload-time = "2026-05-03T00:14:54.505Z" }, - { url = "https://files.pythonhosted.org/packages/03/dc/200013a74641f8774664bbcd2346c695c05c2e300ea792adcb40a293eed0/soxr-1.1.0-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:d6a7ad82b8d5f3fcc04b1d2ca055562b96af571e1d4fa7c6c61d0fb509ac43b4", size = 165457, upload-time = "2026-05-03T00:14:56.007Z" }, - { url = "https://files.pythonhosted.org/packages/88/2b/2e5eba817a762a2ec589ff165b8bc5955b25a0ad140045f7cd8e45410543/soxr-1.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf98c0d7b7d5ef5bf072fee8d3020e8b664f2d195933ea7bc5089267c2e22a06", size = 206529, upload-time = "2026-05-03T00:14:57.646Z" }, - { url = "https://files.pythonhosted.org/packages/5c/f1/0e55195893228609c9a08c3b13b7a83a46c3a992cd00d3304f0f320cfb07/soxr-1.1.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b033078e86f3c4a658e5697fac8995764fad9e799563616b630136b613167f1", size = 240413, upload-time = "2026-05-03T00:14:59.363Z" }, - { url = "https://files.pythonhosted.org/packages/b0/4d/621e4150e4815246ad552d215a8a294a90143fedd19ee442cf82d3b3abc8/soxr-1.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:6ae2a174bffea94e8ead857dad85999d3f49f091774dbad5b046c0417d7092f4", size = 174357, upload-time = "2026-05-03T00:15:00.724Z" }, + { 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]] @@ -3387,38 +3260,32 @@ name = "spacy" version = "3.7.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "catalogue" }, - { name = "cymem" }, - { name = "jinja2" }, - { name = "langcodes" }, - { name = "murmurhash" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "preshed" }, - { name = "pydantic" }, - { name = "requests" }, - { name = "setuptools" }, - { name = "spacy-legacy" }, - { name = "spacy-loggers" }, - { name = "srsly" }, - { name = "thinc" }, - { name = "tqdm" }, - { name = "typer" }, - { name = "wasabi" }, - { name = "weasel" }, + { name = "catalogue", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "cymem", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "jinja2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langcodes", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "murmurhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "preshed", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "setuptools", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "spacy-legacy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "spacy-loggers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "srsly", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "thinc", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typer", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "wasabi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "weasel", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/21/1e/94e3981516db6fcd6685f058c43c3fa81805c120b04829596367dad1aa4e/spacy-3.7.5.tar.gz", hash = "sha256:a648c6cbf2acc7a55a69ee9e7fa4f22bdf69aa828a587a1bc5cfff08cf3c2dd3", size = 1274806, upload-time = "2024-06-05T07:21:56Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/5e/f3a851f4c90e61c64956c952387db9b6557863a15050616929886cdcab45/spacy-3.7.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8002897701429ee2ab5ff6921ae43560f4cd17184cb1e10dad761901c12dcb85", size = 6847778, upload-time = "2024-06-05T07:20:28.443Z" }, - { url = "https://files.pythonhosted.org/packages/c6/3a/8c5446c40306f876f12c2f9c814c731913f775c9342348333342312bf202/spacy-3.7.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:43acd19efc845e9126b61a05ed7508a0aff509e96e15563f30f810c19e636b7c", size = 6609906, upload-time = "2024-06-05T07:20:33.505Z" }, - { url = "https://files.pythonhosted.org/packages/18/91/2fbd1c23467cbad666dbcdb9cf7d3c04d620a2f470281a9d341acccad9b2/spacy-3.7.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f044522b1271ea54718dc43b6f593b5dad349cd31b3827764c501529b599e09a", size = 6250741, upload-time = "2024-06-05T07:20:36.107Z" }, - { url = "https://files.pythonhosted.org/packages/07/52/117eae6b96e79207234bf546271bc4d8bb1ec5bf5dd1d8ddf15f12cdbf2e/spacy-3.7.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a7dbfbca42c1c128fefa6832631fe49e11c850e963af99229f14e2d0ae94f34", size = 6606864, upload-time = "2024-06-05T07:20:40.075Z" }, - { url = "https://files.pythonhosted.org/packages/df/9d/b46b6f0a4ad66498c388a94e7efbff51044be92ecc1d0f5ea02dc45ef2d1/spacy-3.7.5-cp310-cp310-win_amd64.whl", hash = "sha256:2a21b2a1e1e5d10d15c6f75990b7341d0fc9b454083dfd4222fdd75b9164831c", size = 12081318, upload-time = "2024-06-05T07:20:43.089Z" }, { url = "https://files.pythonhosted.org/packages/80/36/53a831d2e82a432d785823cdff56f84737aed26e8f7667d423ee32c3983d/spacy-3.7.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd93c34bf2a02bbed7df73d42aed8df5e3eb9688c4ea84ec576f740ba939cce5", size = 6750524, upload-time = "2024-06-05T07:20:46.41Z" }, { url = "https://files.pythonhosted.org/packages/72/49/bd65abe76607c86dc1f104ad545eeb3e771f474b7e259e64e5a16614615b/spacy-3.7.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:190ba0032a5efdb138487c587c0ebb7a98f86adb917f464b252ee8766b8eec4a", size = 6517941, upload-time = "2024-06-05T07:20:49.203Z" }, - { url = "https://files.pythonhosted.org/packages/51/83/ec38e9bddb17b8f07539a49a19f2b30ce8e7d7a3d4f94dda31ea9bd043f7/spacy-3.7.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38de1c9bbb73b8cdfea2dd6e57450f093c1a1af47515870c1c8640b85b35ab16", size = 6236788, upload-time = "2024-06-05T07:20:52.227Z" }, { url = "https://files.pythonhosted.org/packages/e0/ce/b5e6b02165881547ad251b0b172ebf496b9181a95833f94012af82d044df/spacy-3.7.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dad4853950a2fe6c7a0bdfd791a762d1f8cedd2915c4ae41b2e0ca3a850eefc", size = 6585757, upload-time = "2024-06-05T07:20:54.87Z" }, - { url = "https://files.pythonhosted.org/packages/39/e1/08681583569f435347ced0535b27c073fcc9a927d9b4293c963092f2d01c/spacy-3.7.5-cp311-cp311-win_amd64.whl", hash = "sha256:4e00d076871af784c2e43185a71ee676b58893853a05c5b81717b8af2b666c07", size = 12078792, upload-time = "2024-06-05T07:20:58.055Z" }, ] [[package]] @@ -3444,27 +3311,15 @@ name = "sqlalchemy" version = "2.0.37" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" }, - { name = "typing-extensions" }, + { name = "greenlet", marker = "(platform_machine == 'AMD64' and sys_platform == 'darwin') or (platform_machine == 'WIN32' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'darwin') or (platform_machine == 'amd64' and sys_platform == 'darwin') or (platform_machine == 'ppc64le' and sys_platform == 'darwin') or (platform_machine == 'win32' and sys_platform == 'darwin') or (platform_machine == 'x86_64' and sys_platform == 'darwin') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3b/20/93ea2518df4d7a14ebe9ace9ab8bb92aaf7df0072b9007644de74172b06c/sqlalchemy-2.0.37.tar.gz", hash = "sha256:12b28d99a9c14eaf4055810df1001557176716de0167b91026e648e65229bffb", size = 9626249, upload-time = "2025-01-09T22:43:25.981Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/80/21/aaf0cd2e7ee56e464af7cba38a54f9c1203570181ec5d847711f33c9f520/SQLAlchemy-2.0.37-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da36c3b0e891808a7542c5c89f224520b9a16c7f5e4d6a1156955605e54aef0e", size = 2102915, upload-time = "2025-01-10T00:32:23.205Z" }, - { url = "https://files.pythonhosted.org/packages/fd/01/6615256759515f13bb7d7b49981326f1f4e80ff1bd92dccd53f99dab79ea/SQLAlchemy-2.0.37-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e7402ff96e2b073a98ef6d6142796426d705addd27b9d26c3b32dbaa06d7d069", size = 2094095, upload-time = "2025-01-10T00:32:27.283Z" }, - { url = "https://files.pythonhosted.org/packages/6a/f2/400252bda1bd67da7a35bb2ab84d10a8ad43975d42f15b207a9efb765446/SQLAlchemy-2.0.37-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6f5d254a22394847245f411a2956976401e84da4288aa70cbcd5190744062c1", size = 3076482, upload-time = "2025-01-10T02:42:49.513Z" }, - { url = "https://files.pythonhosted.org/packages/40/c6/e7e8e894c8f065f96ca202cdb00454d60d4962279b3eb5a81b8766dfa836/SQLAlchemy-2.0.37-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41296bbcaa55ef5fdd32389a35c710133b097f7b2609d8218c0eabded43a1d84", size = 3084750, upload-time = "2025-01-10T00:58:04.316Z" }, - { url = "https://files.pythonhosted.org/packages/d6/ee/1cdab04b7760e48273f2592037df156afae044e2e6589157673bd2a830c0/SQLAlchemy-2.0.37-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bedee60385c1c0411378cbd4dc486362f5ee88deceea50002772912d798bb00f", size = 3040575, upload-time = "2025-01-10T02:42:52.811Z" }, - { url = "https://files.pythonhosted.org/packages/4d/af/2dd456bfd8d4b9750792ceedd828bddf83860f2420545e5effbaf722dae5/SQLAlchemy-2.0.37-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6c67415258f9f3c69867ec02fea1bf6508153709ecbd731a982442a590f2b7e4", size = 3066113, upload-time = "2025-01-10T00:58:07.514Z" }, - { url = "https://files.pythonhosted.org/packages/dd/d7/ad997559574f94d7bd895a8a63996afef518d07e9eaf5a2a9cbbcb877c16/SQLAlchemy-2.0.37-cp310-cp310-win32.whl", hash = "sha256:650dcb70739957a492ad8acff65d099a9586b9b8920e3507ca61ec3ce650bb72", size = 2075239, upload-time = "2025-01-09T22:59:09.664Z" }, - { url = "https://files.pythonhosted.org/packages/d0/82/141fbed705a21af2d825068831da1d80d720945df60c2b97ddc5133b3714/SQLAlchemy-2.0.37-cp310-cp310-win_amd64.whl", hash = "sha256:93d1543cd8359040c02b6614421c8e10cd7a788c40047dbc507ed46c29ae5636", size = 2099307, upload-time = "2025-01-09T22:59:11.208Z" }, { url = "https://files.pythonhosted.org/packages/7c/37/4915290c1849337be6d24012227fb3c30c575151eec2b182ee5f45e96ce7/SQLAlchemy-2.0.37-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:78361be6dc9073ed17ab380985d1e45e48a642313ab68ab6afa2457354ff692c", size = 2104098, upload-time = "2025-01-10T00:32:29.975Z" }, { url = "https://files.pythonhosted.org/packages/4c/f5/8cce9196434014a24cc65f6c68faa9a887080932361ee285986c0a35892d/SQLAlchemy-2.0.37-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b661b49d0cb0ab311a189b31e25576b7ac3e20783beb1e1817d72d9d02508bf5", size = 2094492, upload-time = "2025-01-10T00:32:32.697Z" }, - { url = "https://files.pythonhosted.org/packages/9c/54/2df4b3d0d11b384b6e9a8788d0f1123243f2d2356e2ccf626f93dcc1a09f/SQLAlchemy-2.0.37-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d57bafbab289e147d064ffbd5cca2d7b1394b63417c0636cea1f2e93d16eb9e8", size = 3212789, upload-time = "2025-01-10T02:42:56.584Z" }, { url = "https://files.pythonhosted.org/packages/57/4f/e1db9475f940f1c54c365ed02d4f6390f884fc95a6a4022ece7725956664/SQLAlchemy-2.0.37-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa2c0913f02341d25fb858e4fb2031e6b0813494cca1ba07d417674128ce11b", size = 3212784, upload-time = "2025-01-10T00:58:09.639Z" }, - { url = "https://files.pythonhosted.org/packages/89/57/d93212e827d1f03a6cd4d0ea13775957c2a95161330fa47449b91153bd09/SQLAlchemy-2.0.37-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9df21b8d9e5c136ea6cde1c50d2b1c29a2b5ff2b1d610165c23ff250e0704087", size = 3149616, upload-time = "2025-01-10T02:42:58.816Z" }, { url = "https://files.pythonhosted.org/packages/5f/c2/759347419f69cf0bbb76d330fbdbd24cefb15842095fe86bca623759b9e8/SQLAlchemy-2.0.37-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db18ff6b8c0f1917f8b20f8eca35c28bbccb9f83afa94743e03d40203ed83de9", size = 3169944, upload-time = "2025-01-10T00:58:12.998Z" }, - { url = "https://files.pythonhosted.org/packages/22/04/a19ecb53aa19bb8cf491ecdb6bf8c1ac74959cd4962e119e91d4e2b8ecaa/SQLAlchemy-2.0.37-cp311-cp311-win32.whl", hash = "sha256:46954173612617a99a64aee103bcd3f078901b9a8dcfc6ae80cbf34ba23df989", size = 2074686, upload-time = "2025-01-09T22:59:12.557Z" }, - { url = "https://files.pythonhosted.org/packages/7b/9d/6e030cc2c675539dbc5ef73aa97a3cbe09341e27ad38caed2b70c4273aff/SQLAlchemy-2.0.37-cp311-cp311-win_amd64.whl", hash = "sha256:7b7e772dc4bc507fdec4ee20182f15bd60d2a84f1e087a8accf5b5b7a0dcf2ba", size = 2099891, upload-time = "2025-01-09T22:59:15.253Z" }, { url = "https://files.pythonhosted.org/packages/3b/36/59cc97c365f2f79ac9f3f51446cae56dfd82c4f2dd98497e6be6de20fb91/SQLAlchemy-2.0.37-py3-none-any.whl", hash = "sha256:a8998bf9f8658bd3839cbc44ddbe982955641863da0c1efe5b00c1ab4f5c16b1", size = 1894113, upload-time = "2025-01-10T00:44:58.368Z" }, ] @@ -3473,26 +3328,43 @@ name = "srsly" version = "2.5.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "catalogue" }, + { name = "catalogue", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2b/db/f794f219a6c788b881252d2536a8c4a97d2bdaadc690391e1cb53d123d71/srsly-2.5.3.tar.gz", hash = "sha256:08f98dbecbff3a31466c4ae7c833131f59d3655a0ad8ac749e6e2c149e2b0680", size = 490881, upload-time = "2026-03-23T11:56:59.865Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/67/e6d4decfb0cdc95b54c60854a1a6d1702983c39206c2b9f70f4ab18b17c8/srsly-2.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c812302a9acfe171e82f680b7ad642014cd017380b2c678441b3da4fb513c498", size = 657202, upload-time = "2026-03-23T11:55:34.938Z" }, - { url = "https://files.pythonhosted.org/packages/cc/5d/cb8b093d0836e59c152de6dfdb5db80c6408b00def0123f26d24bffde480/srsly-2.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91688edb1f49110870d2c215db2cf445f1763c14173698ead0818908c51fb2a1", size = 657951, upload-time = "2026-03-23T11:55:36.571Z" }, - { url = "https://files.pythonhosted.org/packages/71/a1/5d2fb4c6a8e0e39dd1fb23bdd8feb1f2525ce90b28946f9f58ac5d3a039c/srsly-2.5.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1fd6c35c65c4d2435ae5bfb57b59682cf9b61606318a2a761856be9d7cc2d9e3", size = 1119766, upload-time = "2026-03-23T11:55:38.351Z" }, - { url = "https://files.pythonhosted.org/packages/ff/83/0862ffac8c06ed595dd1e28f261c37956585b9cf6b9bd049f8430a4c2daf/srsly-2.5.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b9df76d5a6bbf50967589bd42df3c522dd88babea2be745a507f56b41ab40626", size = 1120674, upload-time = "2026-03-23T11:55:39.644Z" }, - { url = "https://files.pythonhosted.org/packages/f1/06/42f72bab50876a708a10e6fc026ae8c7f185507d9f27544fa4ee8567c5fd/srsly-2.5.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a595958d0b1ff6d59c2570a3f0d1c8e36ab9f89d6e1b9c96fa7eb5e1a8698510", size = 1078505, upload-time = "2026-03-23T11:55:41.299Z" }, - { url = "https://files.pythonhosted.org/packages/e5/f4/dfb86bc5c3abee267fb2f34895ea80d0159a084987a93d56ed1bf5ebefe4/srsly-2.5.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bc0ad5be2aeb9ff29c8512848d39d7c63fdd4bfbb5516bc523f5de5a77e55e6d", size = 1090635, upload-time = "2026-03-23T11:55:42.7Z" }, - { url = "https://files.pythonhosted.org/packages/2a/a6/561b46eff4477191dd649e09dd9b88afc44aad7ce204c45f4e45ad04861d/srsly-2.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:d2b8cfd8aee4d06ab335d359e4095d206102300a5e105a4b4bc69acca42427a6", size = 651653, upload-time = "2026-03-23T11:55:44.429Z" }, - { url = "https://files.pythonhosted.org/packages/dc/05/b122a1afaf8e8644d10f0203ad5174993910e6f727843089f0d48b444340/srsly-2.5.3-cp310-cp310-win_arm64.whl", hash = "sha256:c378afcb7dd7c42f426a66112496c949fc39e5883de6817d86e60afa51720ccc", size = 639118, upload-time = "2026-03-23T11:55:45.796Z" }, { url = "https://files.pythonhosted.org/packages/9a/36/5d7bb412d52e9cca787f9bfe838b596367189b254e50bf90f234a97184bf/srsly-2.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:785a09216ac31570fb301ddb9f61ee73d1f18f8b9561f712dce0b8ac8628bc88", size = 656760, upload-time = "2026-03-23T11:55:47.155Z" }, { url = "https://files.pythonhosted.org/packages/d6/dc/124f008cd2be3e887e972cbdeb17c5aee0f42093eca02c7cfd63bb5daf19/srsly-2.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0017c7d2a0cd9a4f1bdc00d946b45edcf90bb0e271e8f084c1ce542bf6708c32", size = 657503, upload-time = "2026-03-23T11:55:48.681Z" }, - { url = "https://files.pythonhosted.org/packages/35/8a/2c97244ebab125d55f1bfb7bb94e9572b3e819410dffd6a040eca1112350/srsly-2.5.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:66ebae2c70305987341519ec1a720072a3cb3e4b1d52ac0e9e841f4d02658d3d", size = 1139161, upload-time = "2026-03-23T11:55:50.179Z" }, { url = "https://files.pythonhosted.org/packages/fc/ea/ecd396188f7591d80b89665f7af9e3ae02e42683daef57033ad7993ad3f9/srsly-2.5.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4ca4a068f6e14d84113a02fcb875c6b50a6285a12938c0e7a157eb3a63c50a86", size = 1142438, upload-time = "2026-03-23T11:55:52.607Z" }, - { url = "https://files.pythonhosted.org/packages/9c/65/143e2e143c53d498ad0956f69d0e09189aa7a6e0ee6017758c285ba1ab2d/srsly-2.5.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e283fa2a8f7350fb9fb70ecdee28d59d39c92f4c7f1cc90a44d6b86db3b3a8b3", size = 1101783, upload-time = "2026-03-23T11:55:53.906Z" }, { url = "https://files.pythonhosted.org/packages/6b/86/1392a5593de0cd3d08c2d6c071b877c84358a37f63172c4e9cb71706842d/srsly-2.5.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9ffc97e22730ea97b00f7c303ccc60b1305e786afadb2a4a46578dafa4d29da0", size = 1115876, upload-time = "2026-03-23T11:55:55.624Z" }, - { url = "https://files.pythonhosted.org/packages/d4/a5/6193aa4c08e488821538fcbce2282449e228fd2183ed67d118bb5ccd8b54/srsly-2.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:f09b551f6c3e334652831ac68c770ee4284741ce0a3895bf1ccf2a1178d66cdd", size = 651733, upload-time = "2026-03-23T11:55:56.964Z" }, - { url = "https://files.pythonhosted.org/packages/66/a8/a73181743b6d237026615ca75c3fb3e4780736f1390550a7350d0c7f1149/srsly-2.5.3-cp311-cp311-win_arm64.whl", hash = "sha256:21cf09e417d3e4f3fbf7dd337fd6d948c97abd01896b9b4cb80e81cd9778a73a", size = 639124, upload-time = "2026-03-23T11:55:58.532Z" }, +] + +[[package]] +name = "sse-starlette" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "starlette", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f7/2b/58abc2d1fd397e7dde08e947e05c884d8ef2f78d5e2588c17a12d42d6994/sse_starlette-3.4.4.tar.gz", hash = "sha256:07e0fa0460138baf25cdd5fb28683472c3995dc1642225191b3832d62526bcb0", size = 31819, upload-time = "2026-05-12T17:37:17.019Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/67/805710444ea8cc75fbf70b920ed431a560c4bf9c57f7d5a3117213189399/sse_starlette-3.4.4-py3-none-any.whl", hash = "sha256:3f4dd50d8aed2771a091f3a83000323fc3844541c16b4fe585ae2420cc6df973", size = 16514, upload-time = "2026-05-12T17:37:15.601Z" }, +] + +[[package]] +name = "sssom-pydantic" +version = "0.5.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "curies", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pystow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f2/23/02d4e16a12ac622231992e1fb57586ffd5e474afbcc5f84e4677ad08ed86/sssom_pydantic-0.5.11.tar.gz", hash = "sha256:69e57b2c786640bbcd8a0b662e67ff13adb659b059ed2e4f649490e112e398b7", size = 69738, upload-time = "2026-06-09T10:53:25.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/68/fd19236d12994440102a74ad9888ec9142bee508494d655470ebb64db5d6/sssom_pydantic-0.5.11-py3-none-any.whl", hash = "sha256:02851b369063ef248c6fc0e6f56f23caf24197673ef538126c5f4d2dd8fc09ba", size = 83827, upload-time = "2026-06-09T10:53:24.386Z" }, ] [[package]] @@ -3500,65 +3372,77 @@ name = "starlette" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio" }, - { name = "typing-extensions" }, + { name = "anyio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/eb/e3/7c1dc7381d9f8ab7d854328ebfa884e62cb3f3d8549ddfd37c7814f42afa/starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0", size = 2703240, upload-time = "2026-06-12T09:23:11.602Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6", size = 73632, upload-time = "2026-06-12T09:23:10.017Z" }, ] +[[package]] +name = "supervisor" +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/b5/37e7a3706de436a8a2d75334711dad1afb4ddffab09f25e31d89e467542f/supervisor-4.3.0.tar.gz", hash = "sha256:4a2bf149adf42997e1bb44b70c43b613275ec9852c3edacca86a9166b27e945e", size = 468912, upload-time = "2025-08-23T18:25:02.418Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/65/5e726c372da8a5e35022a94388b12252710aad0c2351699c3d76ae8dba78/supervisor-4.3.0-py2.py3-none-any.whl", hash = "sha256:0bcb763fddafba410f35cbde226aa7f8514b9fb82eb05a0c85f6588d1c13f8db", size = 320736, upload-time = "2025-08-23T18:25:00.767Z" }, +] + [[package]] name = "sympy" version = "1.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mpmath" }, + { name = "mpmath", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, ] +[[package]] +name = "tabulate" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/58/8c37dea7bbf769b20d58e7ace7e5edfe65b849442b00ffcdd56be88697c6/tabulate-0.10.0.tar.gz", hash = "sha256:e2cfde8f79420f6deeffdeda9aaec3b6bc5abce947655d17ac662b126e48a60d", size = 91754, upload-time = "2026-03-04T18:55:34.402Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl", hash = "sha256:f0b0622e567335c8fabaaa659f1b33bcb6ddfe2e496071b743aa113f8774f2d3", size = 39814, upload-time = "2026-03-04T18:55:31.284Z" }, +] + [[package]] name = "tenacity" -version = "9.1.4" +version = "9.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/47/c6/ee486fd809e357697ee8a44d3d69222b344920433d3b6666ccd9b374630c/tenacity-9.1.4.tar.gz", hash = "sha256:adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a", size = 49413, upload-time = "2026-02-07T10:45:33.841Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/94/91fccdb4b8110642462e653d5dcb27e7b674742ad68efd146367da7bdb10/tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b", size = 47421, upload-time = "2024-07-29T12:12:27.547Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl", hash = "sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55", size = 28926, upload-time = "2026-02-07T10:45:32.24Z" }, + { url = "https://files.pythonhosted.org/packages/b6/cb/b86984bed139586d01532a587464b5805f12e397594f19f931c4c2fbfa61/tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539", size = 28169, upload-time = "2024-07-29T12:12:25.825Z" }, ] [[package]] name = "thinc" -version = "8.2.5" +version = "8.2.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "blis" }, - { name = "catalogue" }, - { name = "confection" }, - { name = "cymem" }, - { name = "murmurhash" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "preshed" }, - { name = "pydantic" }, - { name = "setuptools" }, - { name = "srsly" }, - { name = "wasabi" }, + { name = "blis", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "catalogue", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "confection", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "cymem", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "murmurhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "preshed", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "setuptools", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "srsly", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "wasabi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3b/2a/0e2e961e6152bedecca70e6833f6e827ee621efcee7496643242b506d54f/thinc-8.2.5.tar.gz", hash = "sha256:c2963791c934cc7fbd8f9b942d571cac79892ad11630bfca690a868c32752b75", size = 193031, upload-time = "2024-06-19T16:42:44.563Z" } +sdist = { url = "https://files.pythonhosted.org/packages/39/e6/12f9d4ade7af128db91f725675bc9f417e6f6ea777478f5c1c3140a105a9/thinc-8.2.4.tar.gz", hash = "sha256:9383b39f286291519ebbb6454bab76404992599b0cbdfaec56b2f985023186a7", size = 192961, upload-time = "2024-06-04T21:15:34.148Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/76/1994abe2bf5cbe5f68231fd2c177e384b19bed86268d56c1b6b2dc19e203/thinc-8.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dc267f6aad80a681a85f50383afe91da9e2bec56fefdda86bfa2e4f529bef191", size = 843631, upload-time = "2024-06-19T16:40:48.216Z" }, - { url = "https://files.pythonhosted.org/packages/e5/76/47e94af32943bd92d7cda4e92d185331a89116a0bf87123cc71796f21a00/thinc-8.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d80f1e497971c9fa0938f5cc8fe607bbe87356b405fb7bbc3ff9f32fb4eed3bb", size = 779045, upload-time = "2024-06-19T16:40:55.81Z" }, - { url = "https://files.pythonhosted.org/packages/c0/76/7dcce5cd2b5a9fe92b76767d688f17fe459543c13893e588545db3c0dc85/thinc-8.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0933adbd3e65e30d3bef903e77a368bc8a41bed34b0d18df6d4fc0536908e21f", size = 868726, upload-time = "2024-06-19T16:41:01.288Z" }, - { url = "https://files.pythonhosted.org/packages/d7/b5/ad029dc7346381922b7fd655b3fc39009cf675766345d8e13f9f8282bde8/thinc-8.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54bac2ba23b208fdaf267cd6113d26a5ecbb3b0e0c6015dff784ae6a9c5e78ca", size = 922374, upload-time = "2024-06-19T16:41:05.54Z" }, - { url = "https://files.pythonhosted.org/packages/f6/3e/fb96407db92a15b5c0feb0deb930c4c223bdb772e04b51b9798a86059a26/thinc-8.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:399260197ef3f8d9600315fc5b5a1d5940400fceb0361de642e9fe3506d82385", size = 1482115, upload-time = "2024-06-19T16:41:11.734Z" }, - { url = "https://files.pythonhosted.org/packages/76/37/8acfeba6bb25b08c2a33bfae5301a5df4dc164d2d17040bebbcf66d783a1/thinc-8.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a75c0de3340afed594beda293661de145f3842873df56d9989bc338148f13fab", size = 839072, upload-time = "2024-06-19T16:41:18.429Z" }, - { url = "https://files.pythonhosted.org/packages/e9/eb/753a85875fb0261c83ca87a1a36d41346bde662c3a029ace9d68fe32bc5b/thinc-8.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6b166d1a22003ee03bc236370fff2884744c1fb758a6209a2512d305773d07d7", size = 773885, upload-time = "2024-06-19T16:41:24.693Z" }, - { url = "https://files.pythonhosted.org/packages/34/47/06810a1bd9d3287076ba17299abec82c8c643563661b1af9b1d5d9aeab38/thinc-8.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34db8a023b9f70645fdf06c510584ba6d8b97ec53c1e094f42d95652bf8c875f", size = 868332, upload-time = "2024-06-19T16:41:31.038Z" }, - { url = "https://files.pythonhosted.org/packages/1a/19/cd73e3b5f22d5d9399f6f2931ab0fb985415f34030dcfead070181866761/thinc-8.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8901b30db1071ea8d5e4437429c8632535bf5ed87938ce3bb5057bed9f15aed8", size = 920152, upload-time = "2024-06-19T16:41:36.939Z" }, - { url = "https://files.pythonhosted.org/packages/5e/0e/5e7b24e046e0725eafc37ded0cd9bfaf789efb894101a7aca8a73dba81de/thinc-8.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:8ef5d46d62e31f2450224ab22391a606cf427b13e20cfc570f70422e2f333872", size = 1480120, upload-time = "2024-06-19T16:41:40.877Z" }, + { url = "https://files.pythonhosted.org/packages/4c/5c/7229e7c8878a480f352ab3536372287919f84c6396391c1709a73eb05182/thinc-8.2.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ccc58e47bc285e9afbf92ed6104f555abfa285a4b92198d955d344c4c1942607", size = 863703, upload-time = "2024-06-04T21:13:56.189Z" }, + { url = "https://files.pythonhosted.org/packages/b3/3f/7daca81216723222b3353dd9cefbda1ea2f3bfbac7ff9a725bfacbfa1c96/thinc-8.2.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:baa4af044bfcaf9df6a02d6c6d6e96c960da540478a522daabfbde8923df3554", size = 781179, upload-time = "2024-06-04T21:13:58.412Z" }, + { url = "https://files.pythonhosted.org/packages/06/06/cb247012a34e7043f911e9bcb0bdf0b5daa37cd1130e51afaa48a61ff5a6/thinc-8.2.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc8ab48d19cd69ad9a0de2bbe49b7c20a91150faeb119638bea4c502c52b77f", size = 920139, upload-time = "2024-06-04T21:14:03.502Z" }, ] [[package]] @@ -3575,48 +3459,74 @@ name = "tiktoken" version = "0.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "regex" }, - { name = "requests" }, + { name = "regex", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/37/02/576ff3a6639e755c4f70997b2d315f56d6d71e0d046f4fb64cb81a3fb099/tiktoken-0.8.0.tar.gz", hash = "sha256:9ccbb2740f24542534369c5635cfd9b2b3c2490754a78ac8831d99f89f94eeb2", size = 35107, upload-time = "2024-10-03T22:44:04.196Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/ba/a35fad753bbca8ba0cc1b0f3402a70256a110ced7ac332cf84ba89fc87ab/tiktoken-0.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b07e33283463089c81ef1467180e3e00ab00d46c2c4bbcef0acab5f771d6695e", size = 1039905, upload-time = "2024-10-03T22:43:17.292Z" }, - { url = "https://files.pythonhosted.org/packages/91/05/13dab8fd7460391c387b3e69e14bf1e51ff71fe0a202cd2933cc3ea93fb6/tiktoken-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9269348cb650726f44dd3bbb3f9110ac19a8dcc8f54949ad3ef652ca22a38e21", size = 982417, upload-time = "2024-10-03T22:43:19.437Z" }, - { url = "https://files.pythonhosted.org/packages/e9/98/18ec4a8351a6cf4537e40cd6e19a422c10cce1ef00a2fcb716e0a96af58b/tiktoken-0.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e13f37bc4ef2d012731e93e0fef21dc3b7aea5bb9009618de9a4026844e560", size = 1144915, upload-time = "2024-10-03T22:43:21.385Z" }, - { url = "https://files.pythonhosted.org/packages/2e/28/cf3633018cbcc6deb7805b700ccd6085c9a5a7f72b38974ee0bffd56d311/tiktoken-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f13d13c981511331eac0d01a59b5df7c0d4060a8be1e378672822213da51e0a2", size = 1177221, upload-time = "2024-10-03T22:43:23.325Z" }, - { url = "https://files.pythonhosted.org/packages/57/81/8a5be305cbd39d4e83a794f9e80c7f2c84b524587b7feb27c797b2046d51/tiktoken-0.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6b2ddbc79a22621ce8b1166afa9f9a888a664a579350dc7c09346a3b5de837d9", size = 1237398, upload-time = "2024-10-03T22:43:24.71Z" }, - { url = "https://files.pythonhosted.org/packages/dc/da/8d1cc3089a83f5cf11c2e489332752981435280285231924557350523a59/tiktoken-0.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d8c2d0e5ba6453a290b86cd65fc51fedf247e1ba170191715b049dac1f628005", size = 884215, upload-time = "2024-10-03T22:43:26.793Z" }, { url = "https://files.pythonhosted.org/packages/f6/1e/ca48e7bfeeccaf76f3a501bd84db1fa28b3c22c9d1a1f41af9fb7579c5f6/tiktoken-0.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d622d8011e6d6f239297efa42a2657043aaed06c4f68833550cac9e9bc723ef1", size = 1039700, upload-time = "2024-10-03T22:43:28.315Z" }, { url = "https://files.pythonhosted.org/packages/8c/f8/f0101d98d661b34534769c3818f5af631e59c36ac6d07268fbfc89e539ce/tiktoken-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2efaf6199717b4485031b4d6edb94075e4d79177a172f38dd934d911b588d54a", size = 982413, upload-time = "2024-10-03T22:43:29.807Z" }, - { url = "https://files.pythonhosted.org/packages/ac/3c/2b95391d9bd520a73830469f80a96e3790e6c0a5ac2444f80f20b4b31051/tiktoken-0.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5637e425ce1fc49cf716d88df3092048359a4b3bbb7da762840426e937ada06d", size = 1144242, upload-time = "2024-10-04T04:42:53.66Z" }, { url = "https://files.pythonhosted.org/packages/01/c4/c4a4360de845217b6aa9709c15773484b50479f36bb50419c443204e5de9/tiktoken-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fb0e352d1dbe15aba082883058b3cce9e48d33101bdaac1eccf66424feb5b47", size = 1176588, upload-time = "2024-10-03T22:43:31.136Z" }, { url = "https://files.pythonhosted.org/packages/f8/a3/ef984e976822cd6c2227c854f74d2e60cf4cd6fbfca46251199914746f78/tiktoken-0.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56edfefe896c8f10aba372ab5706b9e3558e78db39dd497c940b47bf228bc419", size = 1237261, upload-time = "2024-10-03T22:43:32.75Z" }, - { url = "https://files.pythonhosted.org/packages/1e/86/eea2309dc258fb86c7d9b10db536434fc16420feaa3b6113df18b23db7c2/tiktoken-0.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:326624128590def898775b722ccc327e90b073714227175ea8febbc920ac0a99", size = 884537, upload-time = "2024-10-03T22:43:34.592Z" }, +] + +[[package]] +name = "tilelang" +version = "0.1.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "apache-tvm-ffi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cloudpickle", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "ml-dtypes", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "psutil", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch-c-dlpack-ext", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tqdm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "z3-solver", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/70/5051f65821baa30a3d61fc48f8ba10c776490315e8c90f82559b92089756/tilelang-0.1.9.tar.gz", hash = "sha256:287f727c913bb648fcf6c1968809ba3390e55eeed257a5c6bb9a80bc05966af4", size = 93395292, upload-time = "2026-04-22T09:19:11.988Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/8a/1cbeee79d62abaa02441c2d00621554e41aa62dbf3b94a4feb3867184b01/tilelang-0.1.9-cp38-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4bbccfe9035aed775ffafb6dc25a5994504b24e2c5d95d0f39643edfafa7bf12", size = 45419374, upload-time = "2026-04-22T09:15:56.014Z" }, ] [[package]] name = "tokenizers" -version = "0.21.1" +version = "0.22.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/46/fb6854cec3278fbfa4a75b50232c77622bc517ac886156e6afbfa4d8fc6e/tokenizers-0.22.1.tar.gz", hash = "sha256:61de6522785310a309b3407bac22d99c4db5dba349935e99e4d15ea2226af2d9", size = 363123, upload-time = "2025-09-19T09:49:23.424Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/33/f4b2d94ada7ab297328fc671fed209368ddb82f965ec2224eb1892674c3a/tokenizers-0.22.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:59fdb013df17455e5f950b4b834a7b3ee2e0271e6378ccb33aa74d178b513c73", size = 3069318, upload-time = "2025-09-19T09:49:11.848Z" }, + { url = "https://files.pythonhosted.org/packages/1c/58/2aa8c874d02b974990e89ff95826a4852a8b2a273c7d1b4411cdd45a4565/tokenizers-0.22.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8d4e484f7b0827021ac5f9f71d4794aaef62b979ab7608593da22b1d2e3c4edc", size = 2926478, upload-time = "2025-09-19T09:49:09.759Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c6/dc3a0db5a6766416c32c034286d7c2d406da1f498e4de04ab1b8959edd00/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ef6063d7a84994129732b47e7915e8710f27f99f3a3260b8a38fc7ccd083f4", size = 3250221, upload-time = "2025-09-19T09:49:07.664Z" }, + { url = "https://files.pythonhosted.org/packages/36/65/7e75caea90bc73c1dd8d40438adf1a7bc26af3b8d0a6705ea190462506e1/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a0f307d490295717726598ef6fa4f24af9d484809223bbc253b201c740a06390", size = 9681250, upload-time = "2025-09-19T09:49:21.501Z" }, +] + +[[package]] +name = "tokenspeed-mla" +version = "0.1.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "huggingface-hub" }, + { name = "apache-tvm-ffi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cutlass-dsl", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tokenspeed-triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/01/4bf8b74ead3e8e7c1c809435396254c067a33fde48acc20f602aae622d97/tokenspeed_mla-0.1.2-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:c9466a351fe039792e56cf49f3e79744c1dc28c7af10306a02e62b8e92fa5985", size = 748681, upload-time = "2026-05-13T03:30:56.718Z" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/92/76/5ac0c97f1117b91b7eb7323dcd61af80d72f790b4df71249a7850c195f30/tokenizers-0.21.1.tar.gz", hash = "sha256:a1bb04dc5b448985f86ecd4b05407f5a8d97cb2c0532199b2a302a604a0165ab", size = 343256, upload-time = "2025-03-13T10:51:18.189Z" } + +[[package]] +name = "tokenspeed-triton" +version = "3.7.10.post20260531" +source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/1f/328aee25f9115bf04262e8b4e5a2050b7b7cf44b59c74e982db7270c7f30/tokenizers-0.21.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e78e413e9e668ad790a29456e677d9d3aa50a9ad311a40905d6861ba7692cf41", size = 2780767, upload-time = "2025-03-13T10:51:09.459Z" }, - { url = "https://files.pythonhosted.org/packages/ae/1a/4526797f3719b0287853f12c5ad563a9be09d446c44ac784cdd7c50f76ab/tokenizers-0.21.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:cd51cd0a91ecc801633829fcd1fda9cf8682ed3477c6243b9a095539de4aecf3", size = 2650555, upload-time = "2025-03-13T10:51:07.692Z" }, - { url = "https://files.pythonhosted.org/packages/4d/7a/a209b29f971a9fdc1da86f917fe4524564924db50d13f0724feed37b2a4d/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28da6b72d4fb14ee200a1bd386ff74ade8992d7f725f2bde2c495a9a98cf4d9f", size = 2937541, upload-time = "2025-03-13T10:50:56.679Z" }, - { url = "https://files.pythonhosted.org/packages/3c/1e/b788b50ffc6191e0b1fc2b0d49df8cff16fe415302e5ceb89f619d12c5bc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:34d8cfde551c9916cb92014e040806122295a6800914bab5865deb85623931cf", size = 2819058, upload-time = "2025-03-13T10:50:59.525Z" }, - { url = "https://files.pythonhosted.org/packages/36/aa/3626dfa09a0ecc5b57a8c58eeaeb7dd7ca9a37ad9dd681edab5acd55764c/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaa852d23e125b73d283c98f007e06d4595732104b65402f46e8ef24b588d9f8", size = 3133278, upload-time = "2025-03-13T10:51:04.678Z" }, - { url = "https://files.pythonhosted.org/packages/a4/4d/8fbc203838b3d26269f944a89459d94c858f5b3f9a9b6ee9728cdcf69161/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a21a15d5c8e603331b8a59548bbe113564136dc0f5ad8306dd5033459a226da0", size = 3144253, upload-time = "2025-03-13T10:51:01.261Z" }, - { url = "https://files.pythonhosted.org/packages/d8/1b/2bd062adeb7c7511b847b32e356024980c0ffcf35f28947792c2d8ad2288/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2fdbd4c067c60a0ac7eca14b6bd18a5bebace54eb757c706b47ea93204f7a37c", size = 3398225, upload-time = "2025-03-13T10:51:03.243Z" }, - { url = "https://files.pythonhosted.org/packages/8a/63/38be071b0c8e06840bc6046991636bcb30c27f6bb1e670f4f4bc87cf49cc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dd9a0061e403546f7377df940e866c3e678d7d4e9643d0461ea442b4f89e61a", size = 3038874, upload-time = "2025-03-13T10:51:06.235Z" }, - { url = "https://files.pythonhosted.org/packages/ec/83/afa94193c09246417c23a3c75a8a0a96bf44ab5630a3015538d0c316dd4b/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:db9484aeb2e200c43b915a1a0150ea885e35f357a5a8fabf7373af333dcc8dbf", size = 9014448, upload-time = "2025-03-13T10:51:10.927Z" }, - { url = "https://files.pythonhosted.org/packages/ae/b3/0e1a37d4f84c0f014d43701c11eb8072704f6efe8d8fc2dcdb79c47d76de/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ed248ab5279e601a30a4d67bdb897ecbe955a50f1e7bb62bd99f07dd11c2f5b6", size = 8937877, upload-time = "2025-03-13T10:51:12.688Z" }, - { url = "https://files.pythonhosted.org/packages/ac/33/ff08f50e6d615eb180a4a328c65907feb6ded0b8f990ec923969759dc379/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:9ac78b12e541d4ce67b4dfd970e44c060a2147b9b2a21f509566d556a509c67d", size = 9186645, upload-time = "2025-03-13T10:51:14.723Z" }, - { url = "https://files.pythonhosted.org/packages/5f/aa/8ae85f69a9f6012c6f8011c6f4aa1c96154c816e9eea2e1b758601157833/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e5a69c1a4496b81a5ee5d2c1f3f7fbdf95e90a0196101b0ee89ed9956b8a168f", size = 9384380, upload-time = "2025-03-13T10:51:16.526Z" }, - { url = "https://files.pythonhosted.org/packages/e8/5b/a5d98c89f747455e8b7a9504910c865d5e51da55e825a7ae641fb5ff0a58/tokenizers-0.21.1-cp39-abi3-win32.whl", hash = "sha256:1039a3a5734944e09de1d48761ade94e00d0fa760c0e0551151d4dd851ba63e3", size = 2239506, upload-time = "2025-03-13T10:51:20.643Z" }, - { url = "https://files.pythonhosted.org/packages/e6/b6/072a8e053ae600dcc2ac0da81a23548e3b523301a442a6ca900e92ac35be/tokenizers-0.21.1-cp39-abi3-win_amd64.whl", hash = "sha256:0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382", size = 2435481, upload-time = "2025-03-13T10:51:19.243Z" }, + { url = "https://files.pythonhosted.org/packages/5b/ce/2069485cd8b4a8d8468ab65322416de1ecd0b1d7676441b4c3a69fc8d53e/tokenspeed_triton-3.7.10.post20260531-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:52be096ddc5225c6f2345e0d090ad2b56466a85bbeb866cc11a20e0fe3dde1bf", size = 85883121, upload-time = "2026-05-31T01:29:10.452Z" }, + { url = "https://files.pythonhosted.org/packages/d7/49/7bae94729bfd7a3f331795251302f0b0c8e54a7ec25b3af5d5bfe133367c/tokenspeed_triton-3.7.10.post20260531-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b90ac41e7f15933797545ff1a9e803a9d8beb4ca9ba70f6d41a9e0fc26484f5c", size = 85888791, upload-time = "2026-05-31T01:29:25.584Z" }, ] [[package]] @@ -3627,140 +3537,82 @@ sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841 wheels = [ { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, - { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, - { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, - { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, - { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, - { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, ] [[package]] -name = "torch" -version = "2.7.1+cu128" -source = { registry = "https://download.pytorch.org/whl/cu128" } -dependencies = [ - { name = "filelock" }, - { name = "fsspec" }, - { name = "jinja2" }, - { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "sympy" }, - { name = "triton", marker = "sys_platform == 'linux'" }, - { name = "typing-extensions" }, -] -wheels = [ - { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:aca3472608e3c92df5166537595687b53a6c997082478b372427b043dbed98d0", upload-time = "2025-06-03T18:30:30Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:d6c3cba198dc93f93422a8545f48a6697890366e4b9701f54351fc27e2304bd3", upload-time = "2025-06-03T18:30:47Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp310-cp310-win_amd64.whl", hash = "sha256:5174f02de8ca14df87c8e333c4c39cf3ce93a323c9d470d690301d110a053b3c", upload-time = "2025-06-03T18:30:50Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3a0954c54fd7cb9f45beab1272dece2a05b0e77023c1da33ba32a7919661260f", upload-time = "2025-06-03T18:31:04Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:c301dc280458afd95450af794924c98fe07522dd148ff384739b810e3e3179f2", upload-time = "2025-06-03T18:31:06Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp311-cp311-win_amd64.whl", hash = "sha256:138c66dcd0ed2f07aafba3ed8b7958e2bed893694990e0b4b55b6b2b4a336aa6", upload-time = "2025-06-03T18:31:13Z" }, +name = "tomli-w" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184, upload-time = "2025-01-15T12:07:24.262Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675, upload-time = "2025-01-15T12:07:22.074Z" }, ] [[package]] -name = "torchaudio" -version = "2.7.1" -source = { registry = "https://download.pytorch.org/whl/cu128" } -resolution-markers = [ - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] +name = "torch" +version = "2.11.0" +source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "torch", marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, + { name = "cuda-bindings", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "fsspec", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "jinja2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "networkx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "nvidia-cudnn-cu13", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparselt-cu13", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nccl-cu13", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvshmem-cu13", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "setuptools", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sympy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] wheels = [ - { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:80f199f643d7f8e5435c1c88e7fa8c6b08eab6ebc1ec915c9b69e83a1503dc91", upload-time = "2025-06-03T18:37:40Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:aa130165f67ef873c53c8580559e5baca08ea189835419279efbf35a58587bf8", upload-time = "2025-06-03T18:37:40Z" }, + { url = "https://files.pythonhosted.org/packages/ae/0d/98b410492609e34a155fa8b121b55c7dca229f39636851c3a9ec20edea21/torch-2.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7b6a60d48062809f58595509c524b88e6ddec3ebe25833d6462eeab81e5f2ce4", size = 80529712, upload-time = "2026-03-23T18:12:02.608Z" }, + { url = "https://files.pythonhosted.org/packages/8c/8b/d7be22fbec9ffee6cff31a39f8750d4b3a65d349a286cf4aec74c2375662/torch-2.11.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:7aa2f9bbc6d4595ba72138026b2074be1233186150e9292865e04b7a63b8c67a", size = 530604548, upload-time = "2026-03-23T18:10:03.569Z" }, ] [[package]] -name = "torchaudio" -version = "2.7.1+cu128" -source = { registry = "https://download.pytorch.org/whl/cu128" } -resolution-markers = [ - "python_full_version >= '3.11' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version >= '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", -] +name = "torch-c-dlpack-ext" +version = "0.1.5" +source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "torch", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/37/de/921b6491efce5c389a5ef9bbed3d2d6660005840dae488124173180859ab/torch_c_dlpack_ext-0.1.5.tar.gz", hash = "sha256:d06f0357d575d22a168cc77acb9020fc4bae30968ceb6718a055dcbe92bacabe", size = 12913, upload-time = "2026-01-12T11:25:08.484Z" } wheels = [ - { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.1%2Bcu128-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:2ba0816eee659e343851a9c5dc60c8e1eb819a3969b29268fab27d3143273d78", upload-time = "2025-06-03T18:37:40Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.1%2Bcu128-cp310-cp310-win_amd64.whl", hash = "sha256:b1e56a999a06a5deaebfb991dc676aaa60d98139907d99badbc6dca6456637ee", upload-time = "2025-06-03T18:37:40Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.1%2Bcu128-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:84ec727f1fdafdf85dd1c018a6d3bfabeb5665b10e0b5f273a675eb730f59ce5", upload-time = "2025-06-03T18:37:40Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchaudio-2.7.1%2Bcu128-cp311-cp311-win_amd64.whl", hash = "sha256:37a42de8c0f601dc0bc7dcccc4049644ef5adcf45920dd5813c339121e5b5a8c", upload-time = "2025-06-03T18:37:40Z" }, + { url = "https://files.pythonhosted.org/packages/64/5c/3e1382a620824f92920ab3fae132d8fb4e85898284c99e0c6a7764e452ce/torch_c_dlpack_ext-0.1.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3448c4f0d64104d0b2e58080a7efa72304a04960c18f338024b80b13cd3eca26", size = 897768, upload-time = "2026-01-12T11:24:41.209Z" }, ] [[package]] -name = "torchvision" -version = "0.22.1" -source = { registry = "https://download.pytorch.org/whl/cu128" } -resolution-markers = [ - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'", -] -dependencies = [ - { name = "numpy", marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "pillow", marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "torch", marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, -] +name = "torchaudio" +version = "2.11.0" +source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:3a41b87628c0d6095839c43a1dd706670e7e5a56edc5860e700e1ba22c3ef8af", upload-time = "2025-06-03T18:37:29Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:299fbd935f02b424e9166b7689de57067e24a228edc00abd5faf84f86c0643a0", upload-time = "2025-06-03T18:37:29Z" }, + { url = "https://files.pythonhosted.org/packages/ac/70/17408e0d154d0c894537a88dcbadc48e8ad3b6e1ef4a1dabda5d40245ee0/torchaudio-2.11.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1a07ec72fd6f26a588c39b5f029e0130d16bb40bc4221635580bf8fb18fcbc80", size = 1771930, upload-time = "2026-03-23T18:13:37.963Z" }, ] [[package]] name = "torchvision" -version = "0.22.1+cu128" -source = { registry = "https://download.pytorch.org/whl/cu128" } -resolution-markers = [ - "python_full_version >= '3.11' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version >= '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version < '3.11' and sys_platform == 'darwin'", - "python_full_version < '3.11' and platform_machine == 'aarch64' and platform_python_implementation != 'CPython' and sys_platform == 'linux'", - "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux')", -] +version = "0.26.0" +source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "pillow", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "torch", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pillow", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] wheels = [ - { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.1%2Bcu128-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:538f4db667286d939b4eee0a66d31ed21b51186668006b0e0ffe20338ecc7e00", upload-time = "2025-06-03T18:37:28Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.1%2Bcu128-cp310-cp310-win_amd64.whl", hash = "sha256:ad48ba3c3ffd48027e3a8de42fcea131a53a524ee9416ca4efb22f9ac6b7328d", upload-time = "2025-06-03T18:37:28Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.1%2Bcu128-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:92568ac46b13a8c88b61589800b1b9c4629be091ea7ce080fc6fc622e11e0915", upload-time = "2025-06-03T18:37:28Z" }, - { url = "https://download-r2.pytorch.org/whl/cu128/torchvision-0.22.1%2Bcu128-cp311-cp311-win_amd64.whl", hash = "sha256:85ecd729c947151eccea502853be6efc2c0029dc26e6e5148e04684aed008390", upload-time = "2025-06-03T18:37:28Z" }, + { url = "https://files.pythonhosted.org/packages/9a/45/57bbf9e216850d065e66dd31a50f57424b607f1d878ab8956e56a1f4e36b/torchvision-0.26.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:fd10b5f994c210f4f6d6761cf686f82d748554adf486cb0979770c3252868c8f", size = 7519925, upload-time = "2026-03-23T18:12:53.283Z" }, ] [[package]] name = "tqdm" version = "4.67.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload-time = "2024-11-24T20:12:22.481Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" }, @@ -3768,23 +3620,23 @@ wheels = [ [[package]] name = "transformers" -version = "4.55.0" +version = "5.6.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "filelock" }, - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "regex" }, - { name = "requests" }, - { name = "safetensors" }, - { name = "tokenizers" }, - { name = "tqdm" }, + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "regex", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "safetensors", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tokenizers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typer", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/27/5d/f7dc746eef83336a6b34197311fe0c1da0d1192f637c726c6a5cf0d83502/transformers-4.55.0.tar.gz", hash = "sha256:15aa138a05d07a15b30d191ea2c45e23061ebf9fcc928a1318e03fe2234f3ae1", size = 9569089, upload-time = "2025-08-05T16:13:48.997Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a4/e9/c6c80a07690142a7d05444271f47b9f3c8aac7dea01d52e1137ee480ad78/transformers-5.6.2.tar.gz", hash = "sha256:e657134c3e5a6bc00a3c35f4e2674bb51adfcd89898495b788a18552bac2b91a", size = 8311867, upload-time = "2026-04-23T18:33:29.332Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/93/bcb22fb52ed65084c0199270832aa4cdd4b41296d896f3e7ade188bccb68/transformers-4.55.0-py3-none-any.whl", hash = "sha256:29d9b8800e32a4a831bb16efb5f762f6a9742fef9fce5d693ed018d19b106490", size = 11267905, upload-time = "2025-08-05T16:13:34.814Z" }, + { url = "https://files.pythonhosted.org/packages/5d/95/0b0218149b0d6f14df35f5b8f676fa83df4f19ed253c3cc447107ef86eca/transformers-5.6.2-py3-none-any.whl", hash = "sha256:f8d3a1bb96778fed9b8aabfd0dd6e19843e4b0f2bb6b59f32b8a92051b0f348f", size = 10364898, upload-time = "2026-04-23T18:33:26.081Z" }, ] [[package]] @@ -3792,143 +3644,157 @@ name = "trialmatchai" version = "0.1.0" source = { editable = "." } dependencies = [ - { name = "accelerate" }, - { name = "bitsandbytes" }, - { name = "datasets" }, - { name = "einops" }, - { name = "elasticsearch" }, - { name = "faiss-cpu" }, - { name = "gliner" }, - { name = "httpx" }, - { name = "huggingface-hub" }, - { name = "langchain" }, - { name = "langchain-community" }, - { name = "langchain-core" }, - { name = "langchain-openai" }, - { name = "langsmith" }, - { name = "medspacy" }, - { name = "medspacy-quickumls" }, - { name = "numpy" }, - { name = "openai" }, - { name = "orjson" }, - { name = "pandas" }, - { name = "peft" }, - { name = "pydantic" }, - { name = "pydantic-settings" }, - { name = "pyfastner" }, - { name = "pyrush" }, - { name = "pysbd" }, - { name = "python-dotenv" }, - { name = "pyyaml" }, - { name = "quicksectx" }, - { name = "regex" }, - { name = "rich" }, - { name = "safetensors" }, - { name = "scikit-learn" }, - { name = "scipy" }, - { name = "sentence-transformers" }, - { name = "sentencepiece" }, - { name = "spacy" }, - { name = "sqlalchemy" }, - { name = "tiktoken" }, - { name = "tokenizers" }, - { name = "torch" }, - { name = "torchaudio", version = "2.7.1", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "torchaudio", version = "2.7.1+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "torchvision", version = "0.22.1", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "torchvision", version = "0.22.1+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "tqdm" }, - { name = "transformers" }, - { name = "vllm" }, + { name = "accelerate", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "bioregistry", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "einops", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "elasticsearch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "faiss-cpu", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "gliner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "joblib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "medspacy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "medspacy-quickumls", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "nltk", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "orjson", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pandas", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "peft", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic-settings", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyfastner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyrush", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pysbd", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "python-dateutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "python-dotenv", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "quicksectx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "rapidfuzz", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "regex", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "rich", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "safetensors", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "scikit-learn", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "scipy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sentencepiece", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "spacy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sqlalchemy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tenacity", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tiktoken", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tokenizers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] + +[package.optional-dependencies] +gpu = [ + { name = "bitsandbytes", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "vllm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +llm = [ + { name = "httpx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langchain", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langchain-community", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "langchain-openai", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "openai", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +training = [ + { name = "bert-score", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "datasets", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "jinja2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] [package.dev-dependencies] dev = [ - { name = "pytest" }, - { name = "ruff" }, + { name = "pip-audit", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pytest", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "ruff", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] [package.metadata] requires-dist = [ { name = "accelerate", specifier = "==1.8.1" }, - { name = "bitsandbytes", specifier = "==0.46.1" }, - { name = "datasets", specifier = "==2.19.0" }, + { name = "bert-score", marker = "extra == 'training'", specifier = "==0.3.13" }, + { name = "bioregistry", specifier = "==0.13.62" }, + { name = "bitsandbytes", marker = "(sys_platform == 'linux' and extra == 'gpu') or (sys_platform == 'win32' and extra == 'gpu')", specifier = "==0.49.2" }, + { name = "datasets", marker = "extra == 'training'", specifier = "==2.19.0" }, { name = "einops", specifier = "==0.8.0" }, { name = "elasticsearch", specifier = "==8.17.2" }, { name = "faiss-cpu", specifier = "==1.9.0.post1" }, - { name = "gliner", specifier = ">=0.2.17" }, - { name = "httpx", specifier = "==0.28.1" }, - { name = "huggingface-hub", specifier = "==0.34.4" }, - { name = "langchain", specifier = "==0.3.18" }, - { name = "langchain-community", specifier = "==0.3.17" }, - { name = "langchain-core", specifier = "==0.3.35" }, - { name = "langchain-openai", specifier = "==0.3.5" }, - { name = "langsmith", specifier = "==0.2.11" }, + { name = "gliner", specifier = "==0.2.27" }, + { name = "httpx", marker = "extra == 'llm'", specifier = "==0.28.1" }, + { name = "huggingface-hub", specifier = ">=1.5.0,<2" }, + { name = "jinja2", marker = "extra == 'training'", specifier = "==3.1.6" }, + { name = "joblib", specifier = "==1.4.2" }, + { name = "langchain", marker = "extra == 'llm'", specifier = "==1.3.10" }, + { name = "langchain-community", marker = "extra == 'llm'", specifier = "==0.4.2" }, + { name = "langchain-openai", marker = "extra == 'llm'", specifier = "==1.3.2" }, { name = "medspacy", specifier = "==1.3.1" }, { name = "medspacy-quickumls", specifier = "==3.2" }, - { name = "numpy", specifier = "==1.26.4" }, - { name = "openai", specifier = "==1.99.1" }, - { name = "orjson", specifier = "==3.10.14" }, + { name = "nltk", specifier = "==3.9.4" }, + { name = "numpy", specifier = ">=2.0,<3" }, + { name = "openai", marker = "extra == 'llm'", specifier = ">=2.26.0,<3" }, + { name = "orjson", specifier = "==3.11.9" }, { name = "pandas", specifier = "==2.2.3" }, { name = "peft", specifier = "==0.15.2" }, - { name = "pydantic", specifier = "==2.11.7" }, - { name = "pydantic-settings", specifier = "==2.7.1" }, + { name = "pydantic", specifier = ">=2.12.0,<3" }, + { name = "pydantic-settings", specifier = ">=2.10.1,<3" }, { name = "pyfastner", specifier = "==1.0.10" }, { name = "pyrush", specifier = "==1.0.9" }, { name = "pysbd", specifier = "==0.3.4" }, - { name = "python-dotenv", specifier = "==1.0.1" }, + { name = "python-dateutil", specifier = "==2.9.0.post0" }, + { name = "python-dotenv", specifier = "==1.2.2" }, { name = "pyyaml", specifier = "==6.0.2" }, { name = "quicksectx", specifier = "==0.4.0" }, - { name = "regex", specifier = "==2024.11.6" }, + { name = "rapidfuzz", specifier = "==3.14.5" }, + { name = "regex", specifier = ">=2025.10.22,<2027" }, + { name = "requests", specifier = "==2.34.2" }, { name = "rich", specifier = "==13.9.4" }, - { name = "safetensors", specifier = "==0.5.3" }, + { name = "safetensors", specifier = ">=0.6.2,<0.7" }, { name = "scikit-learn", specifier = "==1.6.1" }, { name = "scipy", specifier = "==1.15.1" }, - { name = "sentence-transformers", specifier = "==2.7.0" }, - { name = "sentencepiece", specifier = "==0.2.0" }, + { name = "sentencepiece", specifier = "==0.2.1" }, { name = "spacy", specifier = "==3.7.5" }, { name = "sqlalchemy", specifier = "==2.0.37" }, + { name = "tenacity", specifier = "==9.0.0" }, { name = "tiktoken", specifier = "==0.8.0" }, - { name = "tokenizers", specifier = "==0.21.1" }, - { name = "torch", specifier = "==2.7.1", index = "https://download.pytorch.org/whl/cu128" }, - { name = "torchaudio", specifier = "==2.7.1", index = "https://download.pytorch.org/whl/cu128" }, - { name = "torchvision", specifier = "==0.22.1", index = "https://download.pytorch.org/whl/cu128" }, + { name = "tokenizers", specifier = "==0.22.1" }, + { name = "torch", specifier = "==2.11.0" }, { name = "tqdm", specifier = "==4.67.1" }, - { name = "transformers", specifier = "==4.55.0" }, - { name = "vllm", specifier = "==0.10.1.1" }, + { name = "transformers", specifier = "==5.6.2" }, + { name = "vllm", marker = "sys_platform == 'linux' and extra == 'gpu'", specifier = "==0.23.0" }, ] +provides-extras = ["gpu", "llm", "training"] [package.metadata.requires-dev] dev = [ - { name = "pytest", specifier = ">=7.4" }, - { name = "ruff", specifier = ">=0.6.0" }, + { name = "pip-audit", specifier = ">=2.7.3" }, + { name = "pytest", specifier = ">=8.3" }, + { name = "ruff", specifier = ">=0.9.0" }, ] [[package]] name = "triton" -version = "3.3.1" +version = "3.6.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "setuptools" }, -] wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/a9/549e51e9b1b2c9b854fd761a1d23df0ba2fbc60bd0c13b489ffa518cfcb7/triton-3.3.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b74db445b1c562844d3cfad6e9679c72e93fdfb1a90a24052b03bb5c49d1242e", size = 155600257, upload-time = "2025-05-29T23:39:36.085Z" }, - { url = "https://files.pythonhosted.org/packages/21/2f/3e56ea7b58f80ff68899b1dbe810ff257c9d177d288c6b0f55bf2fe4eb50/triton-3.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b31e3aa26f8cb3cc5bf4e187bf737cbacf17311e1112b781d4a059353dfd731b", size = 155689937, upload-time = "2025-05-29T23:39:44.182Z" }, + { url = "https://files.pythonhosted.org/packages/e0/12/b05ba554d2c623bffa59922b94b0775673de251f468a9609bc9e45de95e9/triton-3.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8e323d608e3a9bfcc2d9efcc90ceefb764a82b99dea12a86d643c72539ad5d3", size = 188214640, upload-time = "2026-01-20T16:00:35.869Z" }, ] [[package]] name = "typer" -version = "0.26.7" +version = "0.25.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-doc" }, - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "rich" }, - { name = "shellingham" }, + { name = "annotated-doc", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "rich", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "shellingham", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/ed/ef06584ccdd5c410df0837951ecd7e15d9a6144ea1bd4c73cecab1a89891/typer-0.26.7.tar.gz", hash = "sha256:e314a34c617e419c091b2830dda3ea1f257134ff593061a8f5b9717ab8dddb3a", size = 201709, upload-time = "2026-06-03T07:18:06.843Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/51/9aed62104cea109b820bbd6c14245af756112017d309da813ef107d42e7e/typer-0.25.1.tar.gz", hash = "sha256:9616eb8853a09ffeabab1698952f33c6f29ffdbceb4eaeecf571880e8d7664cc", size = 122276, upload-time = "2026-04-30T19:32:16.964Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/24/25/2201973529af2c954de0bb725323c3aaed6d7f0ceee8f550dec9185df013/typer-0.26.7-py3-none-any.whl", hash = "sha256:5c87cfbc5d34491c5346ebf49c23e18d56ccb863268d3a8d592b26087c2f5e58", size = 122456, upload-time = "2026-06-03T07:18:05.732Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f9/2b3ff4e56e5fa7debfaf9eb135d0da96f3e9a1d5b27222223c7296336e5f/typer-0.25.1-py3-none-any.whl", hash = "sha256:75caa44ed46a03fb2dab8808753ffacdbfea88495e74c85a28c5eefcf5f39c89", size = 58409, upload-time = "2026-04-30T19:32:18.271Z" }, ] [[package]] @@ -3936,7 +3802,7 @@ name = "typer-slim" version = "0.24.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typer" }, + { name = "typer", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a7/a7/e6aecc4b4eb59598829a3b5076a93aff291b4fdaa2ded25efc4e1f4d219c/typer_slim-0.24.0.tar.gz", hash = "sha256:f0ed36127183f52ae6ced2ecb2521789995992c521a46083bfcdbb652d22ad34", size = 4776, upload-time = "2026-02-16T22:08:51.2Z" } wheels = [ @@ -3952,25 +3818,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, ] -[[package]] -name = "typing-inspect" -version = "0.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mypy-extensions" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/dc/74/1789779d91f1961fa9438e9a8710cdae6bd138c80d7303996933d117264a/typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78", size = 13825, upload-time = "2023-05-24T20:25:47.612Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827, upload-time = "2023-05-24T20:25:45.287Z" }, -] - [[package]] name = "typing-inspection" version = "0.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } wheels = [ @@ -4004,14 +3857,28 @@ 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 = "uuid-utils" +version = "0.16.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/5a/5da7ae85b38e3eddba0be3e8e4328f90882fe92989728e6fb552963d4c42/uuid_utils-0.16.2.tar.gz", hash = "sha256:fa637e4f314ad5b59ff6d8e809d506443d68bef30bfaecdfcfe02cce689abb2f", size = 42962, upload-time = "2026-06-18T13:36:48.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/96/4023966d42fd9bbf9e2a8ce2b25930113688128b569f68bc4697cb18181d/uuid_utils-0.16.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:fadd23eee409237fb8637a35796a6e108873c28b40f7de89a36685f18ca055ad", size = 567776, upload-time = "2026-06-18T13:35:02.902Z" }, + { url = "https://files.pythonhosted.org/packages/fc/30/764d2a76e8e7688abd5577e6024787c13692095eb1230fd1936f27205cd9/uuid_utils-0.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:79c5a3bd4301257b9a524efd16baf61ea65cd0d1b60b47d80f20b151fd65a09f", size = 288938, upload-time = "2026-06-18T13:35:04.285Z" }, + { url = "https://files.pythonhosted.org/packages/00/70/b3cf708e8942e6494742404a66f1586195a20c8fd235bdc79f385db383f1/uuid_utils-0.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a30b6a5790acb854e4b65fae7875e5d3c6f8076fa9c91dac43ff9e28380bc52", size = 327231, upload-time = "2026-06-18T13:35:09.327Z" }, + { url = "https://files.pythonhosted.org/packages/3f/98/371cc1f332f7463b9cfac0a66f984af00f4e3ada4a196b20879e35404e8b/uuid_utils-0.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:503f020acc7dbeb39c47fa33cf2971cf5960fa11f8394513fac461762a90c556", size = 532855, upload-time = "2026-06-18T13:35:15.99Z" }, + { url = "https://files.pythonhosted.org/packages/0e/48/8c9fee7d75571f2f4b2386eac798fe5f826155d13797f7c86d45eb3fdc23/uuid_utils-0.16.2-pp311-pypy311_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:8b8e325e61f918caf74ca540e3384b81e6e22aea782e57f615d15fc9773b96c8", size = 571003, upload-time = "2026-06-18T13:36:36.42Z" }, + { url = "https://files.pythonhosted.org/packages/de/78/754eaaa49509be6fdb705de61d1e3889de32002132d5f00e8c1e5d212da3/uuid_utils-0.16.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9282677ebf2ea5b437c20d16e75bcd7629bdc205018f95557b33b76868d8bb5b", size = 290244, upload-time = "2026-06-18T13:36:38.066Z" }, + { url = "https://files.pythonhosted.org/packages/6a/da/ddb1dcf0fe9bfcb0dfcddec8ae52c8f95e7088e44719f58477f5fb2c5586/uuid_utils-0.16.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:585d3adf73afa60348bf2bd529491c640a692350e76d8ff3974455e273aadfe7", size = 327940, upload-time = "2026-06-18T13:36:44.138Z" }, +] + [[package]] name = "uvicorn" version = "0.49.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click" }, - { name = "h11" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "click", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "h11", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c4/1f/fa18009dea8469069cca78a4e877a008ab78f08b064bfc9ab891579077ff/uvicorn-0.49.0.tar.gz", hash = "sha256:ebf4271aa580d9de97f93192d4595176df6e91f9aae919ca73e4fc07df1e66a3", size = 91284, upload-time = "2026-06-03T22:01:30.448Z" } wheels = [ @@ -4020,13 +3887,12 @@ wheels = [ [package.optional-dependencies] standard = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "httptools" }, - { name = "python-dotenv" }, - { name = "pyyaml" }, - { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'" }, - { name = "watchfiles" }, - { name = "websockets" }, + { name = "httptools", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "python-dotenv", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyyaml", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "uvloop", marker = "platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux'" }, + { name = "watchfiles", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "websockets", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] @@ -4035,93 +3901,95 @@ version = "0.22.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/06/f0/18d39dbd1971d6d62c4629cc7fa67f74821b0dc1f5a77af43719de7936a7/uvloop-0.22.1.tar.gz", hash = "sha256:6c84bae345b9147082b17371e3dd5d42775bddce91f885499017f4607fdaf39f", size = 2443250, upload-time = "2025-10-16T22:17:19.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/14/ecceb239b65adaaf7fde510aa8bd534075695d1e5f8dadfa32b5723d9cfb/uvloop-0.22.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ef6f0d4cc8a9fa1f6a910230cd53545d9a14479311e87e3cb225495952eb672c", size = 1343335, upload-time = "2025-10-16T22:16:11.43Z" }, - { url = "https://files.pythonhosted.org/packages/ba/ae/6f6f9af7f590b319c94532b9567409ba11f4fa71af1148cab1bf48a07048/uvloop-0.22.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7cd375a12b71d33d46af85a3343b35d98e8116134ba404bd657b3b1d15988792", size = 742903, upload-time = "2025-10-16T22:16:12.979Z" }, - { url = "https://files.pythonhosted.org/packages/09/bd/3667151ad0702282a1f4d5d29288fce8a13c8b6858bf0978c219cd52b231/uvloop-0.22.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac33ed96229b7790eb729702751c0e93ac5bc3bcf52ae9eccbff30da09194b86", size = 3648499, upload-time = "2025-10-16T22:16:14.451Z" }, - { url = "https://files.pythonhosted.org/packages/b3/f6/21657bb3beb5f8c57ce8be3b83f653dd7933c2fd00545ed1b092d464799a/uvloop-0.22.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:481c990a7abe2c6f4fc3d98781cc9426ebd7f03a9aaa7eb03d3bfc68ac2a46bd", size = 3700133, upload-time = "2025-10-16T22:16:16.272Z" }, - { url = "https://files.pythonhosted.org/packages/09/e0/604f61d004ded805f24974c87ddd8374ef675644f476f01f1df90e4cdf72/uvloop-0.22.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a592b043a47ad17911add5fbd087c76716d7c9ccc1d64ec9249ceafd735f03c2", size = 3512681, upload-time = "2025-10-16T22:16:18.07Z" }, - { url = "https://files.pythonhosted.org/packages/bb/ce/8491fd370b0230deb5eac69c7aae35b3be527e25a911c0acdffb922dc1cd/uvloop-0.22.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1489cf791aa7b6e8c8be1c5a080bae3a672791fcb4e9e12249b05862a2ca9cec", size = 3615261, upload-time = "2025-10-16T22:16:19.596Z" }, - { url = "https://files.pythonhosted.org/packages/c7/d5/69900f7883235562f1f50d8184bb7dd84a2fb61e9ec63f3782546fdbd057/uvloop-0.22.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c60ebcd36f7b240b30788554b6f0782454826a0ed765d8430652621b5de674b9", size = 1352420, upload-time = "2025-10-16T22:16:21.187Z" }, - { url = "https://files.pythonhosted.org/packages/a8/73/c4e271b3bce59724e291465cc936c37758886a4868787da0278b3b56b905/uvloop-0.22.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b7f102bf3cb1995cfeaee9321105e8f5da76fdb104cdad8986f85461a1b7b77", size = 748677, upload-time = "2025-10-16T22:16:22.558Z" }, - { url = "https://files.pythonhosted.org/packages/86/94/9fb7fad2f824d25f8ecac0d70b94d0d48107ad5ece03769a9c543444f78a/uvloop-0.22.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53c85520781d84a4b8b230e24a5af5b0778efdb39142b424990ff1ef7c48ba21", size = 3753819, upload-time = "2025-10-16T22:16:23.903Z" }, { url = "https://files.pythonhosted.org/packages/74/4f/256aca690709e9b008b7108bc85fba619a2bc37c6d80743d18abad16ee09/uvloop-0.22.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:56a2d1fae65fd82197cb8c53c367310b3eabe1bbb9fb5a04d28e3e3520e4f702", size = 3804529, upload-time = "2025-10-16T22:16:25.246Z" }, - { url = "https://files.pythonhosted.org/packages/7f/74/03c05ae4737e871923d21a76fe28b6aad57f5c03b6e6bfcfa5ad616013e4/uvloop-0.22.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40631b049d5972c6755b06d0bfe8233b1bd9a8a6392d9d1c45c10b6f9e9b2733", size = 3621267, upload-time = "2025-10-16T22:16:26.819Z" }, { url = "https://files.pythonhosted.org/packages/75/be/f8e590fe61d18b4a92070905497aec4c0e64ae1761498cad09023f3f4b3e/uvloop-0.22.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:535cc37b3a04f6cd2c1ef65fa1d370c9a35b6695df735fcff5427323f2cd5473", size = 3723105, upload-time = "2025-10-16T22:16:28.252Z" }, ] [[package]] name = "vllm" -version = "0.10.1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohttp" }, - { name = "blake3" }, - { name = "cachetools" }, - { name = "cbor2" }, - { name = "cloudpickle" }, - { name = "compressed-tensors" }, - { name = "depyf" }, - { name = "diskcache" }, - { name = "einops" }, - { name = "fastapi", extra = ["standard"] }, - { name = "filelock" }, - { name = "gguf" }, - { name = "lark" }, - { name = "llguidance", marker = "platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, - { name = "lm-format-enforcer" }, - { name = "mistral-common", extra = ["audio", "image"] }, - { name = "msgspec" }, - { name = "ninja" }, - { name = "numba" }, - { name = "numpy" }, - { name = "openai" }, - { name = "openai-harmony" }, - { name = "opencv-python-headless" }, - { name = "outlines-core" }, - { name = "partial-json-parser" }, - { name = "pillow" }, - { name = "prometheus-client" }, - { name = "prometheus-fastapi-instrumentator" }, - { name = "protobuf" }, - { name = "psutil" }, - { name = "py-cpuinfo" }, - { name = "pybase64" }, - { name = "pydantic" }, - { name = "python-json-logger" }, - { name = "pyyaml" }, - { name = "pyzmq" }, - { name = "ray", extra = ["cgraph"] }, - { name = "regex" }, - { name = "requests" }, - { name = "scipy" }, - { name = "sentencepiece" }, - { name = "setproctitle" }, - { name = "tiktoken" }, - { name = "tokenizers" }, - { name = "torch" }, - { name = "torchaudio", version = "2.7.1", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "torchaudio", version = "2.7.1+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "torchvision", version = "0.22.1", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" }, - { name = "torchvision", version = "0.22.1+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "tqdm" }, - { name = "transformers" }, - { name = "typing-extensions" }, - { name = "watchfiles" }, - { name = "xformers", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "xgrammar", marker = "platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ae/a8/b53e7950c05bf8e6ef4438603a70c8992e7bc90fcad5a7a4f360c7d748a6/vllm-0.10.1.1.tar.gz", hash = "sha256:3099824ee4bdaa14c4c4f7178a092101a0ec206d4c9371edf295849b2b730a39", size = 10510801, upload-time = "2025-08-20T23:17:16.776Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/14/6fac6c3f6be5657a70911c8c48062c4749925dc5e24d254b1ec493add7a0/vllm-0.10.1.1-cp38-abi3-manylinux1_x86_64.whl", hash = "sha256:8ca0dd985e1ceac8540e7719c654f1553b3ba8a43c685ac8d3fa1366ffb6443a", size = 414400912, upload-time = "2025-08-20T23:17:09.179Z" }, +version = "0.23.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "anthropic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "apache-tvm-ffi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "blake3", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cachetools", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cbor2", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "cloudpickle", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "compressed-tensors", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "depyf", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "diskcache", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "einops", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "fastapi", extra = ["standard"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "fastsafetensors", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "filelock", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "flashinfer-cubin", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "flashinfer-python", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "gguf", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "humming-kernels", extra = ["cu13"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "ijson", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "lark", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "llguidance", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "lm-format-enforcer", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "mcp", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "mistral-common", extra = ["image"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "model-hosting-container-standards", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "msgspec", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "ninja", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numba", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cudnn-frontend", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cutlass-dsl", extra = ["cu13"], marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "openai", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "openai-harmony", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opencv-python-headless", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-api", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-exporter-otlp", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-sdk", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "opentelemetry-semantic-conventions-ai", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "outlines-core", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "partial-json-parser", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pillow", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "prometheus-client", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "prometheus-fastapi-instrumentator", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "protobuf", version = "6.33.6", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "psutil", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "py-cpuinfo", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pybase64", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "python-json-logger", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyyaml", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pyzmq", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "quack-kernels", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "regex", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "requests", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "safetensors", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "sentencepiece", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "setproctitle", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tiktoken", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tilelang", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tokenizers", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tokenspeed-mla", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torchaudio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torchvision", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tqdm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "transformers", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "watchfiles", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "xgrammar", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/68/c6/c4dc766b09e93de278693502612de0beba822983d4f609830406ead65cc9/vllm-0.23.0.tar.gz", hash = "sha256:760269db3d9611e12e524681df1bca0977d5d2f5fcb4481cc34d33efc4ae7ff5", size = 36624042, upload-time = "2026-06-13T09:27:24.297Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/26/c66d588cc14f91d020294ecddaefe4ce698abdcb140612feec36a4c0aecd/vllm-0.23.0-2-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:872aeb7c36a1ea942216af067ce870ffdf960804e829367e1b4eb36d4831c03c", size = 274070565, upload-time = "2026-06-15T05:12:54.416Z" }, + { url = "https://files.pythonhosted.org/packages/72/bc/652f889cde1a20585a0ee0b1b6d36109cd8177bb60020dcb8ff477448440/vllm-0.23.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:71eae985c79ddaa999328cc56d206a1e9b785e079fc6da9e2359ec56ef1c842a", size = 274070208, upload-time = "2026-06-13T09:28:16.037Z" }, ] [[package]] name = "wasabi" version = "1.1.3" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/ac/f9/054e6e2f1071e963b5e746b48d1e3727470b2a490834d18ad92364929db3/wasabi-1.1.3.tar.gz", hash = "sha256:4bb3008f003809db0c3e28b4daf20906ea871a2bb43f9914197d540f4f2e0878", size = 30391, upload-time = "2024-05-31T16:56:18.99Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/06/7c/34330a89da55610daa5f245ddce5aab81244321101614751e7537f125133/wasabi-1.1.3-py3-none-any.whl", hash = "sha256:f76e16e8f7e79f8c4c8be49b4024ac725713ab10cd7f19350ad18a8e3f71728c", size = 27880, upload-time = "2024-05-31T16:56:16.699Z" }, @@ -4132,40 +4000,12 @@ name = "watchfiles" version = "1.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio" }, + { name = "anyio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cd/41/5e1a4bb12aac5f1493fa1bdc11154eca3b258ca4eba65d39c473fe19d8e9/watchfiles-1.2.0.tar.gz", hash = "sha256:c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838", size = 108252, upload-time = "2026-05-18T04:32:04.251Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/5a/2bf22ecb24916983bf1cc0095e7dea2741d14d6553b0d6a2ac8bc96eca93/watchfiles-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:bb68bf4df85abebe5efddc53cf2075520f243a59868d9b3973278b23e76962a9", size = 400471, upload-time = "2026-05-18T04:31:08.908Z" }, - { url = "https://files.pythonhosted.org/packages/55/70/dea1f6a0e76607841a60fb51af150e70124864673f61704abb62b90cdcc7/watchfiles-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c16cb06dd17d43b9d185094268459eac92c9538356f050e55b54e82cf700e1d4", size = 394599, upload-time = "2026-05-18T04:30:19.845Z" }, - { url = "https://files.pythonhosted.org/packages/18/52/752dcc7dc817baef5e89518732925795ce52e36a683a9a3c9fb68b21504e/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77a0feab9af4c021c581f695258c642b3d10c5fd4c676e33a0d8606425d82631", size = 455458, upload-time = "2026-05-18T04:30:29.126Z" }, - { url = "https://files.pythonhosted.org/packages/12/48/366ebbb22fcc504c2f72b45f0b7e72f40a18795cc01752c16066d597b67a/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a16ffe19bf5cf9f5edaa1ad1dd830c5a816e8feec430c522302ab55483a4b994", size = 460513, upload-time = "2026-05-18T04:31:40.85Z" }, - { url = "https://files.pythonhosted.org/packages/ad/44/1f9e1b15e7a729062e0d0c3d0d7225ea4ab98b2267ef87287153be2495fc/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204f299afcbd65918ab78dbc52626b0ae45e9d8cef403fdbf33ecf9e40eac66e", size = 493616, upload-time = "2026-05-18T04:30:58.47Z" }, - { url = "https://files.pythonhosted.org/packages/7e/55/8b1086dcc8a1d6a697a62767bd7ea368e74c61c6fd171683cfe24a3fe5d2/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11743adfa510bfffebe97659fb280182b5c9b238708f667e866f308c3430dc19", size = 573154, upload-time = "2026-05-18T04:30:37.903Z" }, - { url = "https://files.pythonhosted.org/packages/14/7a/242f400cc77fafa7b18d53d19d9cb64fc6a6f61f28c55913bae7c674d92a/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb72919d93e3a16fc451d3aa3d4b1698423daca1b382d3d959c9ac51297c12a8", size = 467046, upload-time = "2026-05-18T04:30:41.869Z" }, - { url = "https://files.pythonhosted.org/packages/02/c8/79eee650c62d2c186598489814468e389b5def0ebe755399ff645b35b1b2/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62f042afde2dde21ec1d2c1a74361e804673df86f51e418a999c9acfe671b07", size = 457100, upload-time = "2026-05-18T04:31:13.064Z" }, - { url = "https://files.pythonhosted.org/packages/81/36/519f6dbb7a95e4fe7c1513ed25b1520295ef9905a27f1f2226a73892bfb7/watchfiles-1.2.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:027ae72bfdfd254862065d8b3e2a815c6ab9b1853ce41e6648ece84afd34a551", size = 467038, upload-time = "2026-05-18T04:30:32.915Z" }, - { url = "https://files.pythonhosted.org/packages/2f/12/951af6b9f89097e02511122258402cb3578443021930b70cf968d6310dc0/watchfiles-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1cfd51e97e13ff3bd047c140764d277fc9b95b7cb5da59e46a47d167adab310", size = 632563, upload-time = "2026-05-18T04:30:11.539Z" }, - { url = "https://files.pythonhosted.org/packages/28/cc/0cba1f0a6117b7ec117271bdc3cb3a5a252005959755a2c09a745e0942cc/watchfiles-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:24b2405c0a46738dd9e1cf7135aa5dbdb9d42d024628651b3b13d5117e99f8df", size = 660851, upload-time = "2026-05-18T04:31:53.186Z" }, - { url = "https://files.pythonhosted.org/packages/d0/f2/26347558cc8bf6877845e66b315f644d03c173906aa09e233a3f4fd23928/watchfiles-1.2.0-cp310-cp310-win32.whl", hash = "sha256:8c520725602756229f045b032a1ff33d7ef0f7404189d62f6c2438cb6d8ef6a1", size = 277023, upload-time = "2026-05-18T04:30:18.825Z" }, - { url = "https://files.pythonhosted.org/packages/6d/68/a5e67b6b68e94f4c1511d61c46c55eba0737583620b6febf194c7b9cc23f/watchfiles-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:03b14855c6f35539e2d95c442ae9530a75762f1e26567152b9ed05f96534a74d", size = 290107, upload-time = "2026-05-18T04:32:09.677Z" }, - { url = "https://files.pythonhosted.org/packages/fc/3d/8024c801df84d1587740d0359e7fdd80afeae3d159011f3d5376dd82f18e/watchfiles-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:704fd259e332e01f9b9c178f4bce9e49027e5587cc2600eeeaf8e76e1c846201", size = 400242, upload-time = "2026-05-18T04:31:19.014Z" }, - { url = "https://files.pythonhosted.org/packages/87/5b/f4dfd45323e949984a3a7f9dc31d1cbb049921e7d98253488dda72ccdaa9/watchfiles-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6543cf55d170003296d185c0af981f3e1311564907e1f4e08671fc7693a890a5", size = 394562, upload-time = "2026-05-18T04:30:08.46Z" }, - { url = "https://files.pythonhosted.org/packages/98/d8/19483ef075d601c409bce8bcbb5c0f81a10876fff870400568f08ce484a1/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89d8c2394a065ca86f5d2910ff263ae67c127e1376ccc4f9fc35c71db879f80a", size = 456611, upload-time = "2026-05-18T04:30:45.723Z" }, - { url = "https://files.pythonhosted.org/packages/b1/6a/cc81fbe7ee42f2f22e661a6e12def7807e01b14b2f39e0ff83fd373fd307/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:772b80df316480d894a0e3165fdd19cf77f5d17f9a787f94029465ad0e3529d1", size = 461379, upload-time = "2026-05-18T04:31:29.292Z" }, - { url = "https://files.pythonhosted.org/packages/b1/57/7e669002082c0a0f4fb5113bb70125f7110124b846b0a11bc5ae8e90eac1/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d158cd89df6053823533e06fb1d73c549133bff5f0396170c0e53d9559340717", size = 493556, upload-time = "2026-05-18T04:30:05.44Z" }, - { url = "https://files.pythonhosted.org/packages/45/7d/f60a2b19807b21fe8281f3a8da4f59eef0d5f96825ac4680ba2d4f2ebf91/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d516b3283a758e087841aedb8031549fb41ced08f3db10aa6d2bf32dc042525b", size = 575255, upload-time = "2026-05-18T04:30:40.568Z" }, - { url = "https://files.pythonhosted.org/packages/bd/49/77f5b5e6efbcd57482f74948ebb1b97e5c0046d6b61475042d830c84b3ff/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53b2290c92e0506d102cd448fbc610d87079553f86caa39d67440856a8b8bba5", size = 467052, upload-time = "2026-05-18T04:31:17.942Z" }, { url = "https://files.pythonhosted.org/packages/ee/5a/73e2959af1b97fd5d556f9a8bdba017be23ceeef731869d5eaa0a753d5a3/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a711b51aec4370d0dcda5b6c09463206f133a5759341d7744b953a7b62e1100e", size = 456858, upload-time = "2026-05-18T04:30:30.182Z" }, - { url = "https://files.pythonhosted.org/packages/50/57/1bc8c27fad7e6c19bddee15d276dbb6ab72480ec01c127afff1673aee417/watchfiles-1.2.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:e2ca07fa7d89195ec0865d3d285666286740bfa83d83e5cee204043a31ecc165", size = 467579, upload-time = "2026-05-18T04:32:15.897Z" }, - { url = "https://files.pythonhosted.org/packages/09/6c/3c2e44edba3553c5e3c3b8c8a2a6dee6b9e12ae2cf4bd2378bebf9dc3038/watchfiles-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e0618518f282c4ebff60f5e5b1247b6d91bb8b9f4476947563a1e74acc66f3c6", size = 633253, upload-time = "2026-05-18T04:31:37.123Z" }, { url = "https://files.pythonhosted.org/packages/30/c2/d8c84a882ab39bbefcc4915ab3e91830b7a7e990c5570b0b69075aba3faf/watchfiles-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d191c054d0715c3c95c99df9b8dbf6fd096d8c1e021e8f212e1bd8bc444ccb5", size = 660713, upload-time = "2026-05-18T04:31:24.62Z" }, - { url = "https://files.pythonhosted.org/packages/a9/07/f97736a5fc605364fe67b25e9fa4a6965dfd4840d50c406ada507e9d735f/watchfiles-1.2.0-cp311-cp311-win32.whl", hash = "sha256:9342472aff9b093c5acd4f6d8f70ae0937964ab56542502bcf5579782da69ae8", size = 277222, upload-time = "2026-05-18T04:31:21.131Z" }, - { url = "https://files.pythonhosted.org/packages/cf/99/2b04981977fc2608afd60360d928c6aecf6b950292ca221d98f4005f6694/watchfiles-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:dbd6c97045dad81227c8d040173da044c1de08de64a5ea8b555da4aee1d5fa22", size = 290274, upload-time = "2026-05-18T04:31:45.966Z" }, - { url = "https://files.pythonhosted.org/packages/3c/74/f7f58a7075ee9cf612b0cfcddb78b8cd8234f0742d6f0075cf0da2dde1c6/watchfiles-1.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:57a2d9fa4fb4c2ecae57b13dfff2c7ab53e21a2ba674fe9f05506680fcdcc0d7", size = 283460, upload-time = "2026-05-18T04:31:39.126Z" }, - { url = "https://files.pythonhosted.org/packages/23/f4/7513ef1e85fc4c6331b59479d6d72661fc391fbe543678052ac72c8b6c19/watchfiles-1.2.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4674d49eb94706dfe666c069fc0a1b646ffcf920473492e209f6d5f60d3f0cc2", size = 403050, upload-time = "2026-05-18T04:30:36.753Z" }, - { url = "https://files.pythonhosted.org/packages/27/0b/a54103cfd732bb703c7a749222011a0483ef3705948dae3b203158601119/watchfiles-1.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:094b9b70103d4e963499bdea001ee3c2697b144cd9ae6218a62c0f89ec9e31db", size = 396629, upload-time = "2026-05-18T04:32:03.268Z" }, - { url = "https://files.pythonhosted.org/packages/5e/2c/73f31a3b893886206c3f54d73e8ad8dee58cdb2f69ad2622e0a8a9e07f4e/watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0ef001f8c25ad0fa9529f914c1600647ecd0f542d11c19b7894768c67b6acb7", size = 457318, upload-time = "2026-05-18T04:31:01.932Z" }, { url = "https://files.pythonhosted.org/packages/e9/f9/45d021e4a5cc7b9dd567f7cbb06d3b75f751a690063fb6cc7ec60f4e46b7/watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a88fc94e647bc4eec523f1caa540258eb71d14278b9daf72fa1e2658a98df0f0", size = 457771, upload-time = "2026-05-18T04:30:56.331Z" }, ] @@ -4174,15 +4014,15 @@ name = "weasel" version = "0.4.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cloudpathlib" }, - { name = "confection" }, - { name = "packaging" }, - { name = "pydantic" }, - { name = "requests" }, - { name = "smart-open" }, - { name = "srsly" }, - { name = "typer-slim" }, - { name = "wasabi" }, + { name = "cloudpathlib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "confection", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "smart-open", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "srsly", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typer-slim", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "wasabi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/09/d7/edd9c24e60cf8e5de130aa2e8af3b01521f4d0216c371d01212f580d0d8e/weasel-0.4.3.tar.gz", hash = "sha256:f293d6174398e8f478c78481e00c503ee4b82ea7a3e6d0d6a01e46a6b1396845", size = 38733, upload-time = "2025-11-13T23:52:28.193Z" } wheels = [ @@ -4191,34 +4031,16 @@ wheels = [ [[package]] name = "websockets" -version = "16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/04/24/4b2031d72e840ce4c1ccb255f693b15c334757fc50023e4db9537080b8c4/websockets-16.0.tar.gz", hash = "sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5", size = 179346, upload-time = "2026-01-10T09:23:47.181Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/74/221f58decd852f4b59cc3354cccaf87e8ef695fede361d03dc9a7396573b/websockets-16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a", size = 177343, upload-time = "2026-01-10T09:22:21.28Z" }, - { url = "https://files.pythonhosted.org/packages/19/0f/22ef6107ee52ab7f0b710d55d36f5a5d3ef19e8a205541a6d7ffa7994e5a/websockets-16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0", size = 175021, upload-time = "2026-01-10T09:22:22.696Z" }, - { url = "https://files.pythonhosted.org/packages/10/40/904a4cb30d9b61c0e278899bf36342e9b0208eb3c470324a9ecbaac2a30f/websockets-16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957", size = 175320, upload-time = "2026-01-10T09:22:23.94Z" }, - { url = "https://files.pythonhosted.org/packages/9d/2f/4b3ca7e106bc608744b1cdae041e005e446124bebb037b18799c2d356864/websockets-16.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72", size = 183815, upload-time = "2026-01-10T09:22:25.469Z" }, - { url = "https://files.pythonhosted.org/packages/86/26/d40eaa2a46d4302becec8d15b0fc5e45bdde05191e7628405a19cf491ccd/websockets-16.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde", size = 185054, upload-time = "2026-01-10T09:22:27.101Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ba/6500a0efc94f7373ee8fefa8c271acdfd4dca8bd49a90d4be7ccabfc397e/websockets-16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3", size = 184565, upload-time = "2026-01-10T09:22:28.293Z" }, - { url = "https://files.pythonhosted.org/packages/04/b4/96bf2cee7c8d8102389374a2616200574f5f01128d1082f44102140344cc/websockets-16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3", size = 183848, upload-time = "2026-01-10T09:22:30.394Z" }, - { url = "https://files.pythonhosted.org/packages/02/8e/81f40fb00fd125357814e8c3025738fc4ffc3da4b6b4a4472a82ba304b41/websockets-16.0-cp310-cp310-win32.whl", hash = "sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9", size = 178249, upload-time = "2026-01-10T09:22:32.083Z" }, - { url = "https://files.pythonhosted.org/packages/b4/5f/7e40efe8df57db9b91c88a43690ac66f7b7aa73a11aa6a66b927e44f26fa/websockets-16.0-cp310-cp310-win_amd64.whl", hash = "sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35", size = 178685, upload-time = "2026-01-10T09:22:33.345Z" }, - { url = "https://files.pythonhosted.org/packages/f2/db/de907251b4ff46ae804ad0409809504153b3f30984daf82a1d84a9875830/websockets-16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8", size = 177340, upload-time = "2026-01-10T09:22:34.539Z" }, - { url = "https://files.pythonhosted.org/packages/f3/fa/abe89019d8d8815c8781e90d697dec52523fb8ebe308bf11664e8de1877e/websockets-16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad", size = 175022, upload-time = "2026-01-10T09:22:36.332Z" }, - { url = "https://files.pythonhosted.org/packages/58/5d/88ea17ed1ded2079358b40d31d48abe90a73c9e5819dbcde1606e991e2ad/websockets-16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d", size = 175319, upload-time = "2026-01-10T09:22:37.602Z" }, - { url = "https://files.pythonhosted.org/packages/d2/ae/0ee92b33087a33632f37a635e11e1d99d429d3d323329675a6022312aac2/websockets-16.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe", size = 184631, upload-time = "2026-01-10T09:22:38.789Z" }, - { url = "https://files.pythonhosted.org/packages/c8/c5/27178df583b6c5b31b29f526ba2da5e2f864ecc79c99dae630a85d68c304/websockets-16.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b", size = 185870, upload-time = "2026-01-10T09:22:39.893Z" }, - { url = "https://files.pythonhosted.org/packages/87/05/536652aa84ddc1c018dbb7e2c4cbcd0db884580bf8e95aece7593fde526f/websockets-16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5", size = 185361, upload-time = "2026-01-10T09:22:41.016Z" }, - { url = "https://files.pythonhosted.org/packages/6d/e2/d5332c90da12b1e01f06fb1b85c50cfc489783076547415bf9f0a659ec19/websockets-16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64", size = 184615, upload-time = "2026-01-10T09:22:42.442Z" }, - { url = "https://files.pythonhosted.org/packages/77/fb/d3f9576691cae9253b51555f841bc6600bf0a983a461c79500ace5a5b364/websockets-16.0-cp311-cp311-win32.whl", hash = "sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6", size = 178246, upload-time = "2026-01-10T09:22:43.654Z" }, - { url = "https://files.pythonhosted.org/packages/54/67/eaff76b3dbaf18dcddabc3b8c1dba50b483761cccff67793897945b37408/websockets-16.0-cp311-cp311-win_amd64.whl", hash = "sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac", size = 178684, upload-time = "2026-01-10T09:22:44.941Z" }, - { url = "https://files.pythonhosted.org/packages/72/07/c98a68571dcf256e74f1f816b8cc5eae6eb2d3d5cfa44d37f801619d9166/websockets-16.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d", size = 174947, upload-time = "2026-01-10T09:23:36.166Z" }, - { url = "https://files.pythonhosted.org/packages/7e/52/93e166a81e0305b33fe416338be92ae863563fe7bce446b0f687b9df5aea/websockets-16.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03", size = 175260, upload-time = "2026-01-10T09:23:37.409Z" }, - { url = "https://files.pythonhosted.org/packages/56/0c/2dbf513bafd24889d33de2ff0368190a0e69f37bcfa19009ef819fe4d507/websockets-16.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da", size = 176071, upload-time = "2026-01-10T09:23:39.158Z" }, - { url = "https://files.pythonhosted.org/packages/a5/8f/aea9c71cc92bf9b6cc0f7f70df8f0b420636b6c96ef4feee1e16f80f75dd/websockets-16.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c", size = 176968, upload-time = "2026-01-10T09:23:41.031Z" }, - { url = "https://files.pythonhosted.org/packages/9a/3f/f70e03f40ffc9a30d817eef7da1be72ee4956ba8d7255c399a01b135902a/websockets-16.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767", size = 178735, upload-time = "2026-01-10T09:23:42.259Z" }, - { url = "https://files.pythonhosted.org/packages/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size = 171598, upload-time = "2026-01-10T09:23:45.395Z" }, +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423, upload-time = "2025-03-05T20:01:56.276Z" }, + { url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082, upload-time = "2025-03-05T20:01:57.563Z" }, + { url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330, upload-time = "2025-03-05T20:01:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, + { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, ] [[package]] @@ -4227,68 +4049,29 @@ version = "2.2.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2d/9f/06263fcd8ad6c405f05a3905fd7a84dd3176eb5ad46e44bccc0cd16348bb/wrapt-2.2.1.tar.gz", hash = "sha256:6744f504375775d7609c82c8d3d94af1c9a6f05586984536905908ba905277b9", size = 127620, upload-time = "2026-05-22T14:49:43.056Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/8b/84bc1ea68b620fe0e2696a8cff07e82f4b962d952ab14efee8955997bb70/wrapt-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0f68f478004475d97906686e702ddbddeaf717c0b68ad2794384308f2dc713ae", size = 80093, upload-time = "2026-05-22T14:47:27.074Z" }, - { url = "https://files.pythonhosted.org/packages/f3/8f/64ec81194a0bc708d9720174c998c8a32116e82b5b32c04e20a7fe01176c/wrapt-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e422b2d647a65d6b080cad5accd09055d3809bdff00c76fba8dca00ca935572a", size = 81183, upload-time = "2026-05-22T14:47:29.062Z" }, - { url = "https://files.pythonhosted.org/packages/94/c2/3d186944aae923631d1def58f4c4ff8f0b6309906afc0b6978de3e69b3e0/wrapt-2.2.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:036dfb40128819a751c6f451c6b9c10172c49e4c401aebcdb8ecf2aec1683598", size = 152494, upload-time = "2026-05-22T14:47:30.583Z" }, - { url = "https://files.pythonhosted.org/packages/01/d1/6b3d0ea995b867d2862aad5619bd5e17de09a9d64a821f46832dcd272d40/wrapt-2.2.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09ac16c081bebfd15d8e4dfa5bdc805990bbd52249ecff22530da7a129d6120b", size = 154310, upload-time = "2026-05-22T14:47:32.175Z" }, - { url = "https://files.pythonhosted.org/packages/f9/4b/37ecb90a8c3753e580327fb40731a984b754e3df65d2ef932bf359fe4adc/wrapt-2.2.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:07be671fa8875971222b0ba9059ed8b4dc738631122feba17c93aa36b4213e9a", size = 149002, upload-time = "2026-05-22T14:47:34.021Z" }, - { url = "https://files.pythonhosted.org/packages/e7/d0/918884d9dfa84d0d135b42a51c00910f5c5447fe7a5e211a8e16ac324dd4/wrapt-2.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:93fc2bf40cd7f4a0256010dce073d44eeb4a351b9bca94d0477ce2b6e62532b3", size = 153185, upload-time = "2026-05-22T14:47:35.722Z" }, - { url = "https://files.pythonhosted.org/packages/4c/00/382299d8ced610b29b59b099a89eda821e8c489aa152b7183748ac83f32a/wrapt-2.2.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:ba519b2d765df9871a25879e6f7fa78948ea59a2a31f9c1a257e34b651994afc", size = 148040, upload-time = "2026-05-22T14:47:37.052Z" }, - { url = "https://files.pythonhosted.org/packages/6c/46/62a79b79e35bbebb1207ca5d15b81192f37f20cc5659cf4e3ce955b7fcc8/wrapt-2.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9011395be8db1827d106c6449b4bb6dd17e331ff6ec521f227e4588f1c78e46f", size = 151773, upload-time = "2026-05-22T14:47:38.713Z" }, - { url = "https://files.pythonhosted.org/packages/a1/db/95c152151d206d4b430516c89725306e92484072f38e65492afde63f6d19/wrapt-2.2.1-cp310-cp310-win32.whl", hash = "sha256:a8f7176b83664af44567e9cc06e0d3827823fcc1a5e52307ebb8ac3aa95860b9", size = 77393, upload-time = "2026-05-22T14:47:40.061Z" }, - { url = "https://files.pythonhosted.org/packages/13/d3/882d50452c6fbd13f24fe5d2644b97cdad2565a7e1522cbb6312de8a52cf/wrapt-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:d7f513d3185e6fec82d0c3518f2e6365d8b4e49f5f45f29640d5162d56a23b54", size = 80350, upload-time = "2026-05-22T14:47:41.194Z" }, - { url = "https://files.pythonhosted.org/packages/58/0f/148376523b4e370692286a9ba14d5715cf3c5b86da3bd3630926367b6b73/wrapt-2.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:44255c84bc57554fed822e83e70036b51afa9edb56fc7ca56c54410ece7898c9", size = 79149, upload-time = "2026-05-22T14:47:42.835Z" }, { url = "https://files.pythonhosted.org/packages/5f/ac/4370bde262c0e633e6c4f0e56d55095710024cf9a5cecc20c59a10de483c/wrapt-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd57607acc85678925940bd5df0385ff8332083a32fa8d7a43f8767f4997263c", size = 80321, upload-time = "2026-05-22T14:47:43.996Z" }, { url = "https://files.pythonhosted.org/packages/eb/79/b8ff3a61e71babf58a8cf4c0d63358e8bad383e15bf7f35e62d2f6b6e4a4/wrapt-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1ae574d65c9fa8e86f64f6a7c2668f9fcd507b183e0e577619f504b883cb0a6c", size = 81216, upload-time = "2026-05-22T14:47:45.243Z" }, { url = "https://files.pythonhosted.org/packages/6e/fd/c0cac1f77c9c4f6fe58a920ca632ce379bb8be928720e11e8d73de28a5e9/wrapt-2.2.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9a04c28c10ba7fd12842b109d2edb0678872a2fe65277ca4ff06a0d61edee245", size = 159208, upload-time = "2026-05-22T14:47:47.176Z" }, - { url = "https://files.pythonhosted.org/packages/d9/4f/744132a7b2fbefa6b81118ec5942eca5fc2e9a129f9055a0c5e46885a549/wrapt-2.2.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e2f02472a1cbbf3884b365714a810b5947134a95ad6952b554cb8cce9d492b0", size = 160322, upload-time = "2026-05-22T14:47:49.04Z" }, - { url = "https://files.pythonhosted.org/packages/d6/95/b7cd9a22a06cf93e6482904ee6afc956248983553593fd1009296d1b3b31/wrapt-2.2.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac2745950b2bff80219c15ebf2fa9d8427eba7e249739f97e55c9d169e47e9e1", size = 153243, upload-time = "2026-05-22T14:47:50.386Z" }, - { url = "https://files.pythonhosted.org/packages/4c/4a/eb79423192015f46f0db2872e7e04a3dde8d359b83411e8959e7c9287eaa/wrapt-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:67a97e5b6c457f0cd3cfc19ebb2d84463e60c3ece754cc831e4281a3ca29bb18", size = 159231, upload-time = "2026-05-22T14:47:51.753Z" }, - { url = "https://files.pythonhosted.org/packages/ec/dc/435015b58ce33c6fc4104158fa91ddb0e809ab03a5751fb7465d1d461456/wrapt-2.2.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:c803a3d331796255af51ba2c79ed0ac8275865b516c09e61f248d1e7aff31ce9", size = 152351, upload-time = "2026-05-22T14:47:53.214Z" }, { url = "https://files.pythonhosted.org/packages/77/ac/5d203f98df8fd136b95c5227139aea02d34505e18baf812d0c005df61963/wrapt-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9b984d1eb252145d6302c1dbd5e87fc6d404d45531447c84eadec04bf1fcb027", size = 158347, upload-time = "2026-05-22T14:47:54.982Z" }, - { url = "https://files.pythonhosted.org/packages/52/2f/a92427dbdc74e54c1674abbed27e61b2cb5e7a94441b8c1270c70671d928/wrapt-2.2.1-cp311-cp311-win32.whl", hash = "sha256:8a983a603a18c8708f024f7f6991b2e66159219abbf894634c5056243c55f3cd", size = 77562, upload-time = "2026-05-22T14:47:56.275Z" }, - { url = "https://files.pythonhosted.org/packages/c8/56/987b9c13b3e1c1a3c6de71284076f996b79caec90e75a87c044a40c23db9/wrapt-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:9c210a6994b21aa9b29e81c8d11560e8fdab54c117e9cff37870d0a27bde1343", size = 80616, upload-time = "2026-05-22T14:47:57.854Z" }, - { url = "https://files.pythonhosted.org/packages/7e/25/d01f560888d99d94a959c85533de349ce68d71ace3f2591d6ea8f632cfed/wrapt-2.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:401229e9d63ca09f9b8891ecf83798d26c11bbb445d11ed9f1836b6d4585b38a", size = 79025, upload-time = "2026-05-22T14:47:59.089Z" }, { url = "https://files.pythonhosted.org/packages/53/46/29ac9daf11a86c22a8c38cd9236c62928ccae83f7ceb06bd3b0467cf9d05/wrapt-2.2.1-py3-none-any.whl", hash = "sha256:3aafea2975caef8ca49400640dde02cc7426e798f24870ed01f490bc3cffd32f", size = 61000, upload-time = "2026-05-22T14:49:41.593Z" }, ] -[[package]] -name = "xformers" -version = "0.0.31" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, - { name = "torch", marker = "platform_machine != 'aarch64' or platform_python_implementation != 'CPython' or sys_platform != 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/33/35/91c172a57681e1c03de5ad1ca654dc87c282279b941052ed04e616ae5bcd/xformers-0.0.31.tar.gz", hash = "sha256:3fccb159c6327c13fc1b08f8b963c2779ca526e2e50755dee9bcc1bac67d20c6", size = 12102740, upload-time = "2025-06-25T15:12:10.241Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/e3/ee90c62a3235152d4ea8e983a5eb7ac00b10582fee86aaadb11571c1ecba/xformers-0.0.31-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:50aedaea82a38d7d28631f77617d1ed1f6f37c60bdc4bf167a69cbc0e39cee76", size = 117057673, upload-time = "2025-06-25T15:11:59.775Z" }, -] - [[package]] name = "xgrammar" -version = "0.1.21" +version = "0.2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mlx-lm", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" }, - { name = "ninja" }, - { name = "pydantic" }, - { name = "torch" }, - { name = "transformers" }, + { name = "apache-tvm-ffi", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "transformers", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e3/52/ea664a56674f21c401b45f124c207a16ca4b2318364687172edbcf255375/xgrammar-0.1.21.tar.gz", hash = "sha256:2ce1e81417ff46aa7ef26d8c0627275cb20dd1f2e8ead5bb261aecde1cc8ba57", size = 2242013, upload-time = "2025-07-10T19:34:14.336Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/b7/86178b241be0b29ce9ee991a44d4b7eddb0f0c98310c0067fe83afc897d1/xgrammar-0.2.2.tar.gz", hash = "sha256:42bcc5c4187ff9cb6edc44ff5f56030d8b69d62c7576f674a5a074f71b68b1fa", size = 2430492, upload-time = "2026-06-11T19:02:49.624Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/df/a077f0c1210ee5cdbb06c8a04f3e94d4053c18704f837120badd374591d9/xgrammar-0.1.21-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:77af5e5487992489131047e38e7136733a24f9c1aa73ef80665a85effd835f77", size = 4398913, upload-time = "2025-07-10T19:33:32.332Z" }, - { url = "https://files.pythonhosted.org/packages/ef/42/209977e5c868f269bb587a41b21c80a07c989b40c981482498c53bd15b37/xgrammar-0.1.21-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ae38de964a1d56437bc84c0aedf1b0a5a48ff2e805a0ec454b0caaa25b3c7f84", size = 4534144, upload-time = "2025-07-10T19:33:34.419Z" }, - { url = "https://files.pythonhosted.org/packages/e8/63/25e04927a3f947b31f577744774aa6e67c2ba63a0675795ed85397f597ac/xgrammar-0.1.21-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce25b17690d6abebf79d287330578203a361819058f6e893aefa69049f173ad8", size = 11636098, upload-time = "2025-07-10T19:33:36.22Z" }, - { url = "https://files.pythonhosted.org/packages/d0/d7/2d15637d1bdded7dbde4742eb8be856370e6b9cf73c7bbdb1ce87f77db79/xgrammar-0.1.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b181f45bbba8563fcaf20a6338ebcbb663d804ab22d160b446c810c6fc397477", size = 11808795, upload-time = "2025-07-10T19:33:38.581Z" }, - { url = "https://files.pythonhosted.org/packages/ac/fb/fd45754a490307084f6d090b6834cedf7b4a81023bf758d162e0b7c69efb/xgrammar-0.1.21-cp310-cp310-win_amd64.whl", hash = "sha256:55625383b506f1dd64a510605df5d852cfcadbfc5fcd962f400656b67542ad8e", size = 4251280, upload-time = "2025-07-10T19:33:40.723Z" }, - { url = "https://files.pythonhosted.org/packages/a4/17/2017bdca0c99f5eaed32408fab8bc1277cc7a35f8057d09ba966cd28c211/xgrammar-0.1.21-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:50d9519211bb76c80a34b25278fcfb0253057b4f2db8fca81da19a53ea61f071", size = 4398725, upload-time = "2025-07-10T19:33:42.244Z" }, - { url = "https://files.pythonhosted.org/packages/2c/6c/365d1564de1bf9f01c95ab54c67895052aef3501fe063582a762ece820c9/xgrammar-0.1.21-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b43c1c8b2e7b0f78067b30a0661ae3b2dfa260a45b0341749d829a27df94faf4", size = 4533878, upload-time = "2025-07-10T19:33:43.738Z" }, - { url = "https://files.pythonhosted.org/packages/83/28/628240866aa2987e79a803324b318e81006c1fff0aa86af6580efe17afe2/xgrammar-0.1.21-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6e5a171ed0b79712e82f1e2726f4deb0bc1db4476b70187fa7aea04afea3350", size = 11636319, upload-time = "2025-07-10T19:33:45.579Z" }, - { url = "https://files.pythonhosted.org/packages/07/67/e60c49fa74f5a5d86601a26d9938341d5903595fd98cd470d24ac86db2f0/xgrammar-0.1.21-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f43ee3b944da5114f564a1ca734c2e0c5baf849ae824646d3e689c5c78bc6aae", size = 11809789, upload-time = "2025-07-10T19:33:47.924Z" }, - { url = "https://files.pythonhosted.org/packages/ec/e8/7923733d826453c58d35538b54cd158ebb89d8a86e830578fc2162b4850c/xgrammar-0.1.21-cp311-cp311-win_amd64.whl", hash = "sha256:328c35bd62541df41f8e71b544ea73c35dd990e275cf45bad4210e4c94f4a451", size = 4250850, upload-time = "2025-07-10T19:33:50.003Z" }, + { url = "https://files.pythonhosted.org/packages/9e/db/8cffed5a65db530e02756499ba0f4039adb1cb12850b0dcfadc384fa6440/xgrammar-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d81c13e97b7eec424da7f2b2ec61c88114301ec6037761995800a1ceb092656", size = 44588389, upload-time = "2026-06-11T19:01:35.577Z" }, ] [[package]] @@ -4297,50 +4080,13 @@ version = "3.7.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/24/2f/e183a1b407002f5af81822bee18b61cdb94b8670208ef34734d8d2b8ebe9/xxhash-3.7.0.tar.gz", hash = "sha256:6cc4eefbb542a5d6ffd6d70ea9c502957c925e800f998c5630ecc809d6702bae", size = 82022, upload-time = "2026-04-25T11:10:32.553Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/92/49/e4b575b4ed170a7f640c8bd69cfadfa81c7b700191fde5e72228762b9f73/xxhash-3.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd8ab85c916a58d5c8656ea15e3ce9df836fe2f120a74c296e01d69fab2614b4", size = 33426, upload-time = "2026-04-25T11:05:15.702Z" }, - { url = "https://files.pythonhosted.org/packages/07/61/40f0155b0b09988eb6cdbfc52652f2f371810b0c58163208cb05667757bd/xxhash-3.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:85f5c0e26d945b5bb475e0a3d95193117498130baa7619357bdc7869c2391b5a", size = 30859, upload-time = "2026-04-25T11:05:17.708Z" }, - { url = "https://files.pythonhosted.org/packages/12/bd/2902b7aad574e43cd85fd84849cfbce48c52cb02c7d6902b8a2b3f6e668e/xxhash-3.7.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b7ffeaada9f8699be63d639536b0b60dff73b7d3325b7475c5bc8fdbf4eed47f", size = 193839, upload-time = "2026-04-25T11:05:19.364Z" }, - { url = "https://files.pythonhosted.org/packages/48/df/343ce8fd09e47ba8fba43b3bad3283ddf0deca799d5a27b084c3aa2ce502/xxhash-3.7.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cee88dfaa6b1b2bfadd3c031fa5f05584870e62fb05dc500942e9900c44fcfda", size = 212896, upload-time = "2026-04-25T11:05:21.131Z" }, - { url = "https://files.pythonhosted.org/packages/79/cf/703e8422a8b52407864281fb4eb52c605e9f33180413b4458f05de110eba/xxhash-3.7.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7426ff0dfa76eb47efc2cc59d4a717bfa9dc9938bff5e49e748bca749f6aa616", size = 235896, upload-time = "2026-04-25T11:05:22.988Z" }, - { url = "https://files.pythonhosted.org/packages/ed/bc/d4b039edbd426575add5f217abeeb2bf870e2c510d35445df81b4f457901/xxhash-3.7.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e8ff6ec73110f610425caef3ea875afbfc34caa542f01df3a80f45aadeb9f906", size = 211665, upload-time = "2026-04-25T11:05:24.799Z" }, - { url = "https://files.pythonhosted.org/packages/42/24/c6f81361796814b92399a88bf079d3b65e617f531819128fcf1bd6ef0571/xxhash-3.7.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0d23fd49fdc5c8af61fb7104f1ad247954499140f6cb6045b3aa5c99dadbbf28", size = 444929, upload-time = "2026-04-25T11:05:26.245Z" }, - { url = "https://files.pythonhosted.org/packages/a4/db/268012153eb7f6bf2c8a0491fdcde11e093f166990821a2ab754fe95537d/xxhash-3.7.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:12c249621af6d50a05d9f10af894b404157b15819878e18f75fcbb0213a77d07", size = 193271, upload-time = "2026-04-25T11:05:28.282Z" }, - { url = "https://files.pythonhosted.org/packages/0a/86/1d0d905d659850dad7f59c807c130249fdb204dc6f71f1fb36268f3f3e61/xxhash-3.7.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6741564a923f082f3c2941c8bb920462ed5b25eaebdd1e161f162233c9a10bc5", size = 284580, upload-time = "2026-04-25T11:05:30.116Z" }, - { url = "https://files.pythonhosted.org/packages/1f/52/fc01ca7ff425a9bdb38d9e3a17f2630447ce3b45d45a929a6cd94d469334/xxhash-3.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4fd8acc6e32596350619896feb372033c0920975992d29837c32853bb1feacd", size = 210193, upload-time = "2026-04-25T11:05:31.969Z" }, - { url = "https://files.pythonhosted.org/packages/ec/96/122e0c6a3537a54b30752031dca557182576bae1a4171c0be8c532c84496/xxhash-3.7.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:646a69b56d8145d85f7fd2289d14fba07880c8a5bda406aa256b407481a61f35", size = 241094, upload-time = "2026-04-25T11:05:33.651Z" }, - { url = "https://files.pythonhosted.org/packages/d8/17/92e33338db8c18add33a46b56c2b7d5dcc6cc2ac076c45389f6017b1bf37/xxhash-3.7.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:11dd69b1a34b7b9af29012f390825b0cdb0617c0966560e227ca74daa7478ba9", size = 197721, upload-time = "2026-04-25T11:05:35.387Z" }, - { url = "https://files.pythonhosted.org/packages/c7/04/fd4114a0820913f336bef5c82ef851bde8d06270982ebd7b2a859961bbf2/xxhash-3.7.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:01cf5c5333aed26cc8d5eea33b8d6398e085e365a704b7372fabdf7ab06441a9", size = 210073, upload-time = "2026-04-25T11:05:37.405Z" }, - { url = "https://files.pythonhosted.org/packages/dd/eb/a2472b8b81cd576a9af3a4889ad8ba5784e8c5a04592587056cdaededd6c/xxhash-3.7.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:f1e65d52c2d526734abecb98372c256b7eacce8fdc42e0df8570417fb39e2772", size = 274960, upload-time = "2026-04-25T11:05:39.224Z" }, - { url = "https://files.pythonhosted.org/packages/3d/d3/493afc544aae50b5fb2844ceaeb3697283bb59695db1a7cb40448636de05/xxhash-3.7.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8ff00fcc3eb436617ed8556cf15daf76c2b501248361a065625a588af78a0a02", size = 413113, upload-time = "2026-04-25T11:05:40.669Z" }, - { url = "https://files.pythonhosted.org/packages/50/6a/002800845a22bff32bcf5fd09caceb4d3f5c3da6b754c46edb9743ce908b/xxhash-3.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b5cd29840505631c6f7dbb8a5d34b742b5e6bbda38fe0b9f54e825f3ea6b61dc", size = 190677, upload-time = "2026-04-25T11:05:42.403Z" }, - { url = "https://files.pythonhosted.org/packages/f4/0f/86ee514622a381c0dc49167c8d431a22aa93518a4063559c3e36e4b82bc8/xxhash-3.7.0-cp310-cp310-win32.whl", hash = "sha256:5bf2f1940499839b39fef1561b5ecb6ede9ac34ef4457474e1337fc7ef07c2f3", size = 30627, upload-time = "2026-04-25T11:05:44.022Z" }, - { url = "https://files.pythonhosted.org/packages/86/45/2ef2310803efb4a2d07844e8098d797e25702024793aa2e85858623a43b5/xxhash-3.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:d41fcda2fa8ca682ebca134a2f2dc02575ba549267585597e73061565795f475", size = 31463, upload-time = "2026-04-25T11:05:45.218Z" }, - { url = "https://files.pythonhosted.org/packages/9e/75/40dbf8f142baf8993c38cd988c8d8f51fe0c51e6c84c5769a3c0280a651d/xxhash-3.7.0-cp310-cp310-win_arm64.whl", hash = "sha256:a845a59664d5c531525a467470220f8edc37959e0a6f8e734ffb6654da5c4bee", size = 27747, upload-time = "2026-04-25T11:05:46.422Z" }, { url = "https://files.pythonhosted.org/packages/3b/f4/7bd35089ff1f8e2c96baa2dce05775a122aacd2e3830a73165e27a4d0848/xxhash-3.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fdc7d06929ae28dda98297a18eef7b0fd38991a3b405d8d7b55c9ef24c296958", size = 33423, upload-time = "2026-04-25T11:05:47.628Z" }, { url = "https://files.pythonhosted.org/packages/a3/26/4e00c88a6a2c8a759cfb77d2a9a405f901e8aa66e60ef1fd0aeb35edda48/xxhash-3.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea6daa712f4e094a30830cf01e9b47d03b24d05cc9dab8609f0d9a9db8454712", size = 30857, upload-time = "2026-04-25T11:05:49.189Z" }, - { url = "https://files.pythonhosted.org/packages/82/2f/eeb942c17a5a761a8f01cb9180a0b76bfb62a2c39e6f46b1f9001899027a/xxhash-3.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9e6c0d843f1daf85ea23aeb053579135552bde575b7b98af20bfc667b6e4548d", size = 194702, upload-time = "2026-04-25T11:05:50.457Z" }, - { url = "https://files.pythonhosted.org/packages/0e/fd/96f132c08b1e5951c68691d3b9ec351ec2edc028f6a01fcd294f46b9d9f0/xxhash-3.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:363c139bf15e1ac5f136b981d3c077eb551299b1effede7f12faa010b8590a60", size = 213613, upload-time = "2026-04-25T11:05:52.571Z" }, - { url = "https://files.pythonhosted.org/packages/82/89/d4e92b796c5ed052d29ed324dbfc1dc1188e0c4bf64bebbf0f8fc20698df/xxhash-3.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a778b25874cb0f862eaab5986bff4ca49ffb0def7c0a34c237b948b3c6c775b2", size = 236726, upload-time = "2026-04-25T11:05:54.395Z" }, - { url = "https://files.pythonhosted.org/packages/40/f1/81fc4361921dc6e557a9c60cb3712f36d244d06eeeb71cd2f4252ac42678/xxhash-3.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3e1860f1e43d40e9d904cf22d93e587ea42e010ebce4160877e46bcab4bc232a", size = 212443, upload-time = "2026-04-25T11:05:56.334Z" }, - { url = "https://files.pythonhosted.org/packages/6a/d0/afeddd4cff50a332f50d4b8a2e8857673153ab0564ef472fcdeb0b5430df/xxhash-3.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9122ad6f867c4a0f5e655f5c3bdf89103852009dbb442a3d23e688b9e699e800", size = 445793, upload-time = "2026-04-25T11:05:58.953Z" }, { url = "https://files.pythonhosted.org/packages/f7/d0/3c91e4e6a05ca4d7df8e39ec3a75b713609258ec84705ab34be6430826a1/xxhash-3.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7d9110d0c3fb02679972837a033251fd186c529aa62f19c132fc909c74052b8", size = 193937, upload-time = "2026-04-25T11:06:00.546Z" }, - { url = "https://files.pythonhosted.org/packages/4e/3a/a6b0772d9801dd4bea4ca4fd34734d6e9b51a711c8a611a24a79de26a878/xxhash-3.7.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:347a93f2b4ce67ce61959665e32a7447c380f8347e55e100daa23766baacf0e5", size = 285188, upload-time = "2026-04-25T11:06:01.96Z" }, - { url = "https://files.pythonhosted.org/packages/6c/f8/cf8e31fd7282230fe7367cd501a2e75b4b67b222bfc7eacccfc20d2652cb/xxhash-3.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:acbb48679ddf3852c45280c10ff10d52ca2cd1da2e552fb81db1ff786c75d0e4", size = 210966, upload-time = "2026-04-25T11:06:03.453Z" }, - { url = "https://files.pythonhosted.org/packages/cc/f0/fd36cc4a81bf52ee5633275daae2b93dd958aace67fd4f5d466ec83b5f35/xxhash-3.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:fe14c356f8b23ad811dc026077a6d4abccdaa7bce5ca98579605550657b6fcfb", size = 241994, upload-time = "2026-04-25T11:06:05.264Z" }, - { url = "https://files.pythonhosted.org/packages/08/e1/67f5d9c9369be42eaf99ba02c01bf14c5ecd67087b02567960bfcee43b63/xxhash-3.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f420ad3d41e38194353a498bbc9561fd5a9973a27b536ce46d8583479cf44335", size = 198707, upload-time = "2026-04-25T11:06:07.044Z" }, - { url = "https://files.pythonhosted.org/packages/50/17/a4c865ca22d2da6b1bc7d739bf88cab209533cf52ba06ca9da27c3039bee/xxhash-3.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:693d02c6dc7d1aa0a45921d54cd8c1ff629e09dfdc2238471507af1f7a1c6f04", size = 210917, upload-time = "2026-04-25T11:06:08.853Z" }, - { url = "https://files.pythonhosted.org/packages/49/8b/453b35810d697abac3c96bde3528bece685869227da274eb80a4a4d4a119/xxhash-3.7.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:14bf7a54e43825ec131ee7fe3c60e142e7c2c1e676ad0f93fc893432d15414af", size = 275772, upload-time = "2026-04-25T11:06:10.645Z" }, - { url = "https://files.pythonhosted.org/packages/b5/ad/4eed7eab07fd3ee6678f416190f0413d097ab5d7c1278906bf1e9549d789/xxhash-3.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ae3a39a4d96bdb6f8d154fd7f490c4ad06f0532fcd2bb656052a9a7762cf5d31", size = 414068, upload-time = "2026-04-25T11:06:12.511Z" }, { url = "https://files.pythonhosted.org/packages/d3/4e/fd6f8a680ba248fdb83054fa71a8bfa3891225200de1708b888ef2c49829/xxhash-3.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1cc07c639e3a77ef1d32987464d3e408565b8a3be57b545d3542b191054d9923", size = 191459, upload-time = "2026-04-25T11:06:14.07Z" }, - { url = "https://files.pythonhosted.org/packages/50/7c/8cb34b3bed4f44ca6827a534d50833f9bc6c006e83b0eb410ac9fa0793bd/xxhash-3.7.0-cp311-cp311-win32.whl", hash = "sha256:3281ba1d1e60ee7a382a7b958513ba03c2c0d5fcbd9a6f7517c0a81251a23422", size = 30628, upload-time = "2026-04-25T11:06:15.802Z" }, - { url = "https://files.pythonhosted.org/packages/0b/47/a49767bd7b40782bedae9ff0721bfe1d7e4dd9dc1585dea684e57ba67c20/xxhash-3.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:a7f25baec4c5d851d40718d6fae52285b31683093d4ff5207e63ab306ccf14a5", size = 31461, upload-time = "2026-04-25T11:06:17.104Z" }, - { url = "https://files.pythonhosted.org/packages/7c/c6/3957bfacfb706bd687be246dfa8dd60f8df97c44186d229f7fd6e26c4b7e/xxhash-3.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:4c2454448ce847c72635827bb75c15c5a3434b03ee1afd28cb6dc6fb2597d830", size = 27746, upload-time = "2026-04-25T11:06:18.716Z" }, { url = "https://files.pythonhosted.org/packages/54/c1/e57ac7317b1f58a92bab692da6d497e2a7ce44735b224e296347a7ecc754/xxhash-3.7.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ad3aa71e12ee634f22b39a0ff439357583706e50765f17f05550f92dbf128a23", size = 31232, upload-time = "2026-04-25T11:10:21.51Z" }, { url = "https://files.pythonhosted.org/packages/4f/4e/075559bd712bc62e84915ea46bbee859f935d285659082c129bdbff679dd/xxhash-3.7.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5de686e73690cdaf72b96d4fa083c230ec9020bcc2627ce6316138e2cf2fe2d1", size = 28553, upload-time = "2026-04-25T11:10:23.1Z" }, - { url = "https://files.pythonhosted.org/packages/92/ca/a9c78cb384d4b033b0c58196bd5c8509873cabe76389e195127b0302a741/xxhash-3.7.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7fbec49f5341bbdea0c471f7d1e2fb41ae8925af9b6f28025c28defd8eb94274", size = 41109, upload-time = "2026-04-25T11:10:25.022Z" }, - { url = "https://files.pythonhosted.org/packages/bd/b1/dfe2629f7c77eb2fa234c72ff537cdd64939763df704e256446ed364a16d/xxhash-3.7.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48b542c347c2089f43dc5a6db31d2a6f3cdb04ee33505ec6e9f653834dbb0bde", size = 36307, upload-time = "2026-04-25T11:10:26.949Z" }, { url = "https://files.pythonhosted.org/packages/e7/f7/5a484afce0f48dd8083208b42e4911f290a82c7b52458ef2927e4d421a45/xxhash-3.7.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a169a036bed0995e090d1493b283cc2cc8a6f5046821086b843abefff80643bc", size = 32534, upload-time = "2026-04-25T11:10:29.01Z" }, - { url = "https://files.pythonhosted.org/packages/0f/5f/4acfcd490db9780cf36c58534d828003c564cde5350220a1c783c4d10776/xxhash-3.7.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:ec101643395d7f21405b640f728f6f627e6986557027d740f2f9b220955edafe", size = 31552, upload-time = "2026-04-25T11:10:30.727Z" }, ] [[package]] @@ -4348,45 +4094,38 @@ name = "yarl" version = "1.24.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "idna" }, - { name = "multidict" }, - { name = "propcache" }, + { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "multidict", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "propcache", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/df/f1c7a3de0831cd83194f1a85c5bb431b13f81e6b45079314c86d1c4ef3f2/yarl-1.24.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5249a113065c2b7a958bc699759e359cd61cfc81e3069662208f48f191b7ed12", size = 129057, upload-time = "2026-05-19T21:27:47.564Z" }, - { url = "https://files.pythonhosted.org/packages/48/41/7daafb32dd7562bf45b1ce56562e7e1a9146f6479b6456873eb8a3413c40/yarl-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f4425fa244fbf530b006d0c5f79ce920114cfff5b4f5f6056e669f8e160fdc0", size = 91545, upload-time = "2026-05-19T21:27:50.089Z" }, - { url = "https://files.pythonhosted.org/packages/a8/8f/7b3ec212f1ea0683f55f978e3246bc313c38818664edfc97a9f349a4901e/yarl-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15c0b5e49d3c44e2a0b93e6a49476c5edad0a7686b92c395765a7ea775572a75", size = 91380, upload-time = "2026-05-19T21:27:51.953Z" }, - { url = "https://files.pythonhosted.org/packages/8a/1b/8bafab7db23b0567ae9db749099b329d91e3b82bc6028b2050ba583e116c/yarl-1.24.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:246d32a53a947c8f0189f5d699cbd4c7036de45d9359e13ba238d1239678c727", size = 105957, upload-time = "2026-05-19T21:27:53.98Z" }, - { url = "https://files.pythonhosted.org/packages/7f/77/21030c2f8d21d21559719beafc772ada2014be933418ed1eaed9cc800e42/yarl-1.24.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:64480fb3e4d4ed9ed71c48a91a477384fc342a50ca30071d2f8a88d51d9c9413", size = 97242, upload-time = "2026-05-19T21:27:55.981Z" }, - { url = "https://files.pythonhosted.org/packages/50/d8/f9ea63d1b6aa910a866e089d871fff6cbd49caab29b86b35221a62dfa0d5/yarl-1.24.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:349de4701dc3760b6e876628423a8f147ef4f5599d10aba1e10702075d424ed9", size = 114719, upload-time = "2026-05-19T21:27:58.037Z" }, - { url = "https://files.pythonhosted.org/packages/e9/a3/04e0ee98ac58a249ea7ed75223f5f901ba81a834f0b4921b58e5cec11757/yarl-1.24.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d162677af8d5d3d6ebab8394b021f4d041ac107a4b705873148a77a49dc9e1b2", size = 112140, upload-time = "2026-05-19T21:27:59.618Z" }, - { url = "https://files.pythonhosted.org/packages/02/ad/0b9cc9f38a7324a7eb1d80f834eaa5283d17e9271bbda3186e598dddaeac/yarl-1.24.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f5f5c6ec23a9043f2d139cc072f53dd23168d202a334b9b2fda8de4c3e890d90", size = 106721, upload-time = "2026-05-19T21:28:02.586Z" }, - { url = "https://files.pythonhosted.org/packages/65/e7/a52478ebfc66ec989e085c6ae038b9f1bfa4190baa193b133b669c709e2f/yarl-1.24.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:60de6742447fbbf697f16f070b8a443f1b5fe6ca3826fbef9fe70ecd5328e643", size = 106478, upload-time = "2026-05-19T21:28:04.523Z" }, - { url = "https://files.pythonhosted.org/packages/04/d8/5508530fea8472542de00013ae280765fc938ee196fc4030c43a498afb36/yarl-1.24.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acf93187c3710e422368eb768aee98db551ec7c85adc250207a95c16548ab7ac", size = 105423, upload-time = "2026-05-19T21:28:06.515Z" }, - { url = "https://files.pythonhosted.org/packages/84/f1/ece28505e9628e8b756e11bb4f28864a17cc33b6b44db4d2aaf0622bf630/yarl-1.24.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f4b0352fd41fd34b6651934606268816afd6914d09626f9bcbbf018edb0afb3f", size = 99878, upload-time = "2026-05-19T21:28:08.637Z" }, - { url = "https://files.pythonhosted.org/packages/3f/52/fb5d34529b46dd84013afcfb30b8d2bc2832ed03d412736f577d604fa393/yarl-1.24.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:6b208bb939099b4b297438da4e9b25357f0b1c791888669b963e45b203ea9f36", size = 114025, upload-time = "2026-05-19T21:28:10.64Z" }, - { url = "https://files.pythonhosted.org/packages/43/f0/ff9d31aaab024f7a251c0ed308a98ae29bf9f7dc344e78f28b1322431ca2/yarl-1.24.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4b85b8825e631295ff4bc8943f7471d54c533a9360bbe15ebb38e018b555bb8a", size = 105613, upload-time = "2026-05-19T21:28:12.784Z" }, - { url = "https://files.pythonhosted.org/packages/31/7d/3296fb3f3ecd52bf9ae6c16b0895c1cda7e9170a2083861552b683f70264/yarl-1.24.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e26acf20c26cb4fefc631fdb75aca2a6b8fa8b7b5d7f204fb6a8f1e63c706f53", size = 111665, upload-time = "2026-05-19T21:28:14.393Z" }, - { url = "https://files.pythonhosted.org/packages/1a/74/77aa6ddaca4fbf42e45e675a465c43956dd40702281049975a2aa04eae59/yarl-1.24.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:819ca24f8eafcfb683c1bd5f44f2f488cea1274eb8944731ffd2e1f10f619342", size = 106914, upload-time = "2026-05-19T21:28:15.893Z" }, - { url = "https://files.pythonhosted.org/packages/d8/02/7611f22cd1d4ed7373eb7f9ee21fde1046edba2e7c0e514880d760352f48/yarl-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:5cb0f995a901c36be096ccbf4c673591c2faabbe96279598ffaec8c030f85bf4", size = 92658, upload-time = "2026-05-19T21:28:17.471Z" }, - { url = "https://files.pythonhosted.org/packages/91/00/671d0add79938127292839ae44506ce2f7fe8909c72d5a931864f128fd0b/yarl-1.24.2-cp310-cp310-win_arm64.whl", hash = "sha256:f408eace7e22a68b467a0562e0d27d322f91fe3eaaa6f466b962c6cfaea9fa39", size = 87887, upload-time = "2026-05-19T21:28:19.021Z" }, { url = "https://files.pythonhosted.org/packages/c5/c5/1ce244152ff2839645e7cae92f90e7bafcb2c52bea7ff586ac714f14f5df/yarl-1.24.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:36348bebb147b83818b9d7e673ea4debc75970afc6ffdc7e3975ad05ce5a58c1", size = 128971, upload-time = "2026-05-19T21:28:20.543Z" }, { url = "https://files.pythonhosted.org/packages/87/5a/00f36967203ed89cb3acd2c8ed526cc3fed9418eb70ce128160a911c8499/yarl-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a97e42c8a2233f2f279ecadd9e4a037bcb5d813b78435e8eedd4db5a9e9708c", size = 91507, upload-time = "2026-05-19T21:28:22.556Z" }, { url = "https://files.pythonhosted.org/packages/31/d0/1fb0c1cd27288f39f6974da4318c32768d72c9890984541fdf1e2e32a51d/yarl-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d027d56f1035e339d1001ac33eceab5b2ec8e42e449787bb75e289fb9a5cd1d", size = 91343, upload-time = "2026-05-19T21:28:24.092Z" }, - { url = "https://files.pythonhosted.org/packages/03/ce/d4a646508bed2f8dec6435b40166fe9308dd191262033d3f307b2bbcaecd/yarl-1.24.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a6377060e7927187a42b7eb202090cbe2b34933a4eeaf90e3bd9e33432e5cae", size = 105704, upload-time = "2026-05-19T21:28:25.872Z" }, - { url = "https://files.pythonhosted.org/packages/4b/07/b3278e82d8bc41485bcf6d856cd0433262593de615b1d3dc43bd3f5bead4/yarl-1.24.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:17076578bce0049a5ce57d14ad1bded391b68a3b213e9b81b0097b090244999a", size = 97281, upload-time = "2026-05-19T21:28:27.352Z" }, - { url = "https://files.pythonhosted.org/packages/17/5b/4cee6e7c92e487bebe7afc797da0aa54a248ab4e776a68fe369ec29665a5/yarl-1.24.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:50713f1d4d6be6375bb178bb43d140ee1acb8abe589cd723320b7925a275be1e", size = 114020, upload-time = "2026-05-19T21:28:29.458Z" }, - { url = "https://files.pythonhosted.org/packages/5c/82/111076571545a7d4f9cca3fbd5c6f40615af58642be09f12328f48022468/yarl-1.24.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:34263e2fa8fb5bb63a0d97706cda38edbad62fddb58c7f12d6acbc092812aa50", size = 111450, upload-time = "2026-05-19T21:28:31.262Z" }, { url = "https://files.pythonhosted.org/packages/b6/ec/08f671f69a444d704aeecebf92af659b67b97a869942411d0a578b08c334/yarl-1.24.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49016d82f032b1bd1e10b01078a7d29ae71bf468eeae0ea22df8bab691e60003", size = 106384, upload-time = "2026-05-19T21:28:32.856Z" }, - { url = "https://files.pythonhosted.org/packages/e5/86/ce41e7a7a199340b2330d52b60f25c4074b6636dd0e60b1a80d31a9db042/yarl-1.24.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3f6d2c216318f8f32038ca3f72501ba08536f0fd18a36e858836b121b2deed9f", size = 106153, upload-time = "2026-05-19T21:28:35.222Z" }, - { url = "https://files.pythonhosted.org/packages/c4/5d/31be8a729531ab3e55ac3e7e5c800be8c89ea98947f418b2f6ea259fb6ee/yarl-1.24.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:08d3a33218e0c64393e7610284e770409a9c31c429b078bcb24096ed0a783b8f", size = 105322, upload-time = "2026-05-19T21:28:36.642Z" }, - { url = "https://files.pythonhosted.org/packages/47/9b/b57afb22b386ae87ac9940f09878b98d8c333f89113e6fc96fcf4ca9eb64/yarl-1.24.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5d699376c4ca3cba49bbfae3a05b5b70ded572937171ce1e0b8d87118e2ba294", size = 99057, upload-time = "2026-05-19T21:28:38.386Z" }, - { url = "https://files.pythonhosted.org/packages/a3/4f/06348c27c8389256c313e8a57d796808fc0264c915dd5e7cfd3c0e314dc7/yarl-1.24.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a1cab588b4fa14bea2e55ebea27478adfb05372f47573738e1acc4a36c0b05d2", size = 113502, upload-time = "2026-05-19T21:28:40.091Z" }, - { url = "https://files.pythonhosted.org/packages/5f/1c/284f307b298e4a17b7943b07d9d7ecc4151537f8d137ba51f3bb6c31ca20/yarl-1.24.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:ec87ccc31bd21db7ad009d8572c127c1000f268517618a4cc09adba3c2a7f21c", size = 105253, upload-time = "2026-05-19T21:28:41.987Z" }, - { url = "https://files.pythonhosted.org/packages/c8/bf/0de123bec8619e45c80cbded9085f61b5b4a9eddb8abe6d25d28ee1ec866/yarl-1.24.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d1dd47a22843b212baa8d74f37796815d43bd046b42a0f41e9da433386c3136b", size = 111345, upload-time = "2026-05-19T21:28:43.93Z" }, { url = "https://files.pythonhosted.org/packages/90/af/0248eb065e51129d2a9b2436cd1b5c772c19a6b04e5b6a186955671e3319/yarl-1.24.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7b54b9c67c2b06bd7b9a77253d242124b9c95d2c02def5a1144001ee547dd9d5", size = 106558, upload-time = "2026-05-19T21:28:45.806Z" }, - { url = "https://files.pythonhosted.org/packages/21/3c/f960d7a65ef97d8ba9b424fb5128796a4bc710fc6df2ddbbd7dfdc3bbd20/yarl-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:f8fdbcff8b2c7c9284e60c196f693588598ddcee31e11c18e14949ce44519d45", size = 92808, upload-time = "2026-05-19T21:28:48.465Z" }, - { url = "https://files.pythonhosted.org/packages/03/1a/49fb03750e4de4d2284cd5b885a383133c34eef45bd59631b2bb8b7e81e8/yarl-1.24.2-cp311-cp311-win_arm64.whl", hash = "sha256:b32c37a7a337e90822c45797bf3d79d60875cfcccd3ecc80e9f453d87026c122", size = 87610, upload-time = "2026-05-19T21:28:50.07Z" }, { url = "https://files.pythonhosted.org/packages/fd/4d/4b880086bd0d3e034d25647be1d830afc3e3f610e98c4ab3490af6b1b6d5/yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9", size = 53576, upload-time = "2026-05-19T21:31:03.909Z" }, ] + +[[package]] +name = "z3-solver" +version = "4.15.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/8e/0c8f17309549d2e5cde9a3ccefa6365437f1e7bafe71878eaf9478e47b18/z3_solver-4.15.4.0.tar.gz", hash = "sha256:928c29b58c4eb62106da51c1914f6a4a55d0441f8f48a81b9da07950434a8946", size = 5018600, upload-time = "2025-10-29T18:12:03.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/c9/bb51a96af0091324c81b803f16c49f719f9f6ea0b0bb52200f5c97ec4892/z3_solver-4.15.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e103a6f203f505b8b8b8e5c931cc407c95b61556512d4921c1ddc0b3f41b08e", size = 29268352, upload-time = "2025-10-29T18:11:53.032Z" }, +] + +[[package]] +name = "zstandard" +version = "0.25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz", hash = "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size = 711513, upload-time = "2025-09-14T22:15:54.002Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/83/c3ca27c363d104980f1c9cee1101cc8ba724ac8c28a033ede6aab89585b1/zstandard-0.25.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:933b65d7680ea337180733cf9e87293cc5500cc0eb3fc8769f4d3c88d724ec5c", size = 795254, upload-time = "2025-09-14T22:16:26.137Z" }, + { url = "https://files.pythonhosted.org/packages/ac/4d/e66465c5411a7cf4866aeadc7d108081d8ceba9bc7abe6b14aa21c671ec3/zstandard-0.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3f79487c687b1fc69f19e487cd949bf3aae653d181dfb5fde3bf6d18894706f", size = 640559, upload-time = "2025-09-14T22:16:27.973Z" }, + { url = "https://files.pythonhosted.org/packages/bb/1f/e9cfd801a3f9190bf3e759c422bbfd2247db9d7f3d54a56ecde70137791a/zstandard-0.25.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9300d02ea7c6506f00e627e287e0492a5eb0371ec1670ae852fefffa6164b072", size = 5559635, upload-time = "2025-09-14T22:16:37.141Z" }, + { url = "https://files.pythonhosted.org/packages/46/c0/ca3e533b4fa03112facbe7fbe7779cb1ebec215688e5df576fe5429172e0/zstandard-0.25.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f373da2c1757bb7f1acaf09369cdc1d51d84131e50d5fa9863982fd626466313", size = 5574377, upload-time = "2025-09-14T22:16:40.523Z" }, + { url = "https://files.pythonhosted.org/packages/e2/be/94267dc6ee64f0f8ba2b2ae7c7a2df934a816baaa7291db9e1aa77394c3c/zstandard-0.25.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:72d35d7aa0bba323965da807a462b0966c91608ef3a48ba761678cb20ce5d8b7", size = 5366047, upload-time = "2025-09-14T22:16:51.328Z" }, +] From 9e8e9da13e9fb7aa6a171c2a6f29661a42a0a95c Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 21 Jun 2026 16:12:38 +0200 Subject: [PATCH 02/64] Replace BioNER services with schema entity linker --- .env.example | 9 +- Dockerfile | 2 +- README.md | 14 +- docker-compose.yml | 7 +- docs/HLD.md | 25 +- pyproject.toml | 11 +- scripts/scan_secrets.py | 2 + source/Matcher/cli/build_concepts.py | 122 +++ source/Matcher/config/config.json | 29 +- source/Matcher/config/config_loader.py | 17 +- source/Matcher/config/settings.py | 80 +- source/Matcher/entities/__init__.py | 15 + source/Matcher/entities/annotator.py | 120 +++ source/Matcher/entities/builder.py | 183 ++++ source/Matcher/entities/linker.py | 352 +++++++ source/Matcher/entities/recognizers.py | 278 +++++ source/Matcher/entities/schemas.py | 104 ++ source/Matcher/entities/types.py | 141 +++ .../Matcher/entity_schemas/trialmatchai.yaml | 122 +++ source/Matcher/main.py | 20 +- .../trial_search/first_level_search.py | 13 +- .../trial_search/second_level_search.py | 17 +- source/Matcher/services/biomedner_service.py | 44 - source/Matcher/services/preflight.py | 28 + source/Parser/bin/crf_learn | Bin 15960 -> 0 bytes source/Parser/bin/crf_test | Bin 15960 -> 0 bytes source/Parser/biomedner_engine.py | 694 ++----------- source/Parser/biomedner_init.py | 983 ------------------ source/Parser/biomedner_server.py | 116 --- source/Parser/gner_server.py | 206 ---- source/Parser/include/crfpp.h | 379 ------- source/Parser/lib/libcrfpp.a | Bin 623548 -> 0 bytes source/Parser/lib/libcrfpp.la | 41 - source/Parser/lib/libcrfpp.so | 1 - source/Parser/lib/libcrfpp.so.0 | 1 - source/Parser/lib/libcrfpp.so.0.0.0 | Bin 364296 -> 0 bytes source/Parser/main.py | 273 +++-- source/Parser/models.py | 653 ------------ source/Parser/normalizer.py | 428 +------- source/Parser/normalizers/__init__.py | 0 .../Parser/normalizers/cellline_normalizer.py | 24 - .../Parser/normalizers/celltype_normalizer.py | 40 - .../Parser/normalizers/chemical_normalizer.py | 45 - .../Parser/normalizers/neural_normalizer.py | 207 ---- source/Parser/normalizers/normalizer_all.py | 137 --- source/Parser/normalizers/readme.md | 22 - .../Parser/normalizers/species_normalizer.py | 25 - source/Parser/ops.py | 449 -------- source/Parser/scripts/run_biomedner.sh | 41 - source/Parser/scripts/stop_biomedner.sh | 23 - source/biomedner_services/run_biomedner.sh | 39 - source/biomedner_services/stop_biomedner.sh | 23 - tests/test_deployment_readiness.py | 8 +- tests/test_entities.py | 170 +++ tests/test_preflight_and_indexer.py | 27 + tests/test_settings.py | 8 + utils/Indexer/index_criteria.py | 22 + utils/Indexer/prepare_criteria.py | 79 +- uv.lock | 104 +- 59 files changed, 2258 insertions(+), 4765 deletions(-) create mode 100644 source/Matcher/cli/build_concepts.py create mode 100644 source/Matcher/entities/__init__.py create mode 100644 source/Matcher/entities/annotator.py create mode 100644 source/Matcher/entities/builder.py create mode 100644 source/Matcher/entities/linker.py create mode 100644 source/Matcher/entities/recognizers.py create mode 100644 source/Matcher/entities/schemas.py create mode 100644 source/Matcher/entities/types.py create mode 100644 source/Matcher/entity_schemas/trialmatchai.yaml delete mode 100644 source/Matcher/services/biomedner_service.py delete mode 100755 source/Parser/bin/crf_learn delete mode 100755 source/Parser/bin/crf_test delete mode 100644 source/Parser/biomedner_init.py delete mode 100644 source/Parser/biomedner_server.py delete mode 100644 source/Parser/gner_server.py delete mode 100644 source/Parser/include/crfpp.h delete mode 100644 source/Parser/lib/libcrfpp.a delete mode 100755 source/Parser/lib/libcrfpp.la delete mode 120000 source/Parser/lib/libcrfpp.so delete mode 120000 source/Parser/lib/libcrfpp.so.0 delete mode 100755 source/Parser/lib/libcrfpp.so.0.0.0 delete mode 100644 source/Parser/models.py delete mode 100644 source/Parser/normalizers/__init__.py delete mode 100644 source/Parser/normalizers/cellline_normalizer.py delete mode 100644 source/Parser/normalizers/celltype_normalizer.py delete mode 100644 source/Parser/normalizers/chemical_normalizer.py delete mode 100644 source/Parser/normalizers/neural_normalizer.py delete mode 100644 source/Parser/normalizers/normalizer_all.py delete mode 100644 source/Parser/normalizers/readme.md delete mode 100644 source/Parser/normalizers/species_normalizer.py delete mode 100644 source/Parser/ops.py delete mode 100644 source/Parser/scripts/run_biomedner.sh delete mode 100644 source/Parser/scripts/stop_biomedner.sh delete mode 100644 source/biomedner_services/run_biomedner.sh delete mode 100644 source/biomedner_services/stop_biomedner.sh create mode 100644 tests/test_entities.py diff --git a/.env.example b/.env.example index e884de1d..25965ecf 100644 --- a/.env.example +++ b/.env.example @@ -27,6 +27,13 @@ TRIALMATCHAI_MODEL_RERANKER_ADAPTER_PATH=models/finetuned_gemma2 TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false TRIALMATCHAI_COT_BACKEND=vllm -TRIALMATCHAI_BIOMEDNER_AUTO_START=false +TRIALMATCHAI_ENTITY_BACKEND=gliner2 +TRIALMATCHAI_ENTITY_MODEL_NAME=fastino/gliner2-base +TRIALMATCHAI_ENTITY_SCHEMA_PATH=source/Matcher/entity_schemas/trialmatchai.yaml +TRIALMATCHAI_ENTITY_TRUST_REMOTE_CODE=false +TRIALMATCHAI_CONCEPT_DB_PATH=data/concepts +TRIALMATCHAI_CONCEPT_TABLE=concepts +TRIALMATCHAI_LINK_ACCEPT=0.80 +TRIALMATCHAI_LINK_REJECT=0.30 TRIALMATCHAI_LOG_LEVEL=INFO TRIALMATCHAI_LOG_JSON=1 diff --git a/Dockerfile b/Dockerfile index 62290d7a..03620340 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,7 +23,7 @@ COPY source ./source COPY scripts ./scripts COPY utils ./utils -RUN uv sync --frozen --no-dev --extra gpu +RUN uv sync --frozen --no-dev --extra gpu --extra entity VOLUME ["/app/data", "/app/models", "/app/results"] diff --git a/README.md b/README.md index ea70958d..632d6630 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ The supported v1 deployment path is a single Linux GPU server or VM with Docker - Docker Compose for the default Elasticsearch deployment - NVIDIA GPU with enough VRAM for the selected LLM backend - 100 GB+ disk space for datasets, models, indices, and results -- Java for BioMedNER/normalization components when those services are enabled +- A LanceDB concept table built from OMOP/legacy dictionaries for entity normalization ## Security First @@ -39,7 +39,7 @@ Dependency auditing currently ignores `CVE-2025-3000` because vLLM 0.23 pins Tor Install deployment dependencies: ```bash -uv sync --extra gpu +uv sync --extra gpu --extra entity ``` For local development, tests, healthchecks, or `TRIALMATCHAI_COT_BACKEND=default`, the default dependency set is enough: @@ -52,6 +52,7 @@ Optional tooling is split out of the default runtime: ```bash uv sync --extra llm # OpenAI/LangChain data-generation utilities +uv sync --extra entity # GLiNER2/LanceDB entity extraction and normalization uv sync --extra training # fine-tuning and evaluation utilities ``` @@ -71,6 +72,7 @@ Provision data, models, and indices: ```bash uv run trialmatchai-bootstrap-data +uv run trialmatchai-build-concepts --concept-csv data/omop/CONCEPT.csv --synonym-csv data/omop/CONCEPT_SYNONYM.csv uv run trialmatchai-index ``` @@ -115,7 +117,12 @@ TRIALMATCHAI_INDEX_TRIALS=clinical_trials TRIALMATCHAI_INDEX_TRIALS_ELIGIBILITY=trials_eligibility TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false -TRIALMATCHAI_BIOMEDNER_AUTO_START=false +TRIALMATCHAI_ENTITY_BACKEND=gliner2 +TRIALMATCHAI_ENTITY_SCHEMA_PATH=source/Matcher/entity_schemas/trialmatchai.yaml +TRIALMATCHAI_CONCEPT_DB_PATH=data/concepts +TRIALMATCHAI_CONCEPT_TABLE=concepts +TRIALMATCHAI_LINK_ACCEPT=0.80 +TRIALMATCHAI_LINK_REJECT=0.30 TRIALMATCHAI_LOG_JSON=1 ``` @@ -125,6 +132,7 @@ Use `TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=true` only when a selected model expli - `trialmatchai-healthcheck`: validate config, paths, Elasticsearch reachability, and optionally indices. - `trialmatchai-bootstrap-data`: download and extract external data/model artifacts. +- `trialmatchai-build-concepts`: build the LanceDB concept table used for entity normalization. - `trialmatchai-index`: index prepared data into Elasticsearch. - `trialmatchai-run`: run the batch matching pipeline. diff --git a/docker-compose.yml b/docker-compose.yml index 95f63cb2..9d0b2ed2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -103,10 +103,15 @@ services: TRIALMATCHAI_ES_PASSWORD: ${TRIALMATCHAI_ES_PASSWORD:-} TRIALMATCHAI_ES_CA_CERTS: /app/elasticsearch/certs/ca/ca.crt TRIALMATCHAI_ES_AUTO_START: "false" - TRIALMATCHAI_BIOMEDNER_AUTO_START: "false" TRIALMATCHAI_PATIENTS_DIR: /app/example TRIALMATCHAI_OUTPUT_DIR: /app/results TRIALMATCHAI_TRIALS_JSON_FOLDER: /app/data/trials_jsons + TRIALMATCHAI_ENTITY_BACKEND: gliner2 + TRIALMATCHAI_ENTITY_SCHEMA_PATH: /app/source/Matcher/entity_schemas/trialmatchai.yaml + TRIALMATCHAI_CONCEPT_DB_PATH: /app/data/concepts + TRIALMATCHAI_CONCEPT_TABLE: concepts + TRIALMATCHAI_LINK_ACCEPT: "0.80" + TRIALMATCHAI_LINK_REJECT: "0.30" TRIALMATCHAI_LOG_JSON: "1" command: ["trialmatchai-healthcheck"] diff --git a/docs/HLD.md b/docs/HLD.md index e85b3431..2d7fbbf5 100644 --- a/docs/HLD.md +++ b/docs/HLD.md @@ -30,8 +30,8 @@ TrialMatchAI is an AI-driven clinical trial matching system. Given a patient rec │ │ .gov JSONs │ │ ▼ │ │ │ │ │ │ │ ┌─────────────────────┐ │ │ │ │ ▼ │ │ │ Phenopacket │ │ │ -│ │ BioMedNER │ │ │ Processor + LLM │ │ │ -│ │ annotation │ │ │ (Phi-4 summariser) │ │ │ +│ │ Schema NER +│ │ │ Processor + LLM │ │ │ +│ │ concept link│ │ │ (Phi-4 summariser) │ │ │ │ │ │ │ │ └──────────┬──────────┘ │ │ │ │ ▼ │ │ │ keywords.json │ │ │ │ BGE-M3 │ │ ▼ │ │ @@ -74,7 +74,7 @@ Run once to prepare the Elasticsearch indices from raw ClinicalTrials.gov data. ``` Raw Trial JSONs │ - ├──► Parser (BioMedNER annotation) + ├──► Schema entity annotation + LanceDB concept linking │ │ │ ▼ │ Annotated criteria with entity synonyms @@ -103,7 +103,7 @@ Raw Trial JSONs | eligibility_type | keyword | `inclusion` or `exclusion` | | criterion | text | BM25 searchable | | criterion_vector | dense_vector (1024d, HNSW) | BGE-M3 embedding | -| entities | nested | BioMedNER annotations + synonyms | +| entities | nested | Schema entity annotations, linked concept candidates, and synonyms | --- @@ -144,7 +144,7 @@ hybrid_score = α × normalized_text_score + β × normalized_vector_score - **BM25 side:** multi-match across `condition`, `eligibility_criteria`, `brief_title`, `brief_summary` with field-specific boosts - **Vector side:** cosine similarity against 4 embedded fields using script-score queries -- **Synonym expansion:** BioMedNER extracts disease synonyms from `main_conditions` to broaden recall +- **Synonym expansion:** the schema entity annotator links disease mentions to the LanceDB concept table and expands accepted concepts with synonyms - **Filters:** age range, gender, `overall_status = Recruiting` **Output:** Up to 300 trial IDs with relevance scores → `nct_ids.txt`, `first_level_scores.json` @@ -244,10 +244,11 @@ Irrelevant and unclear criteria are excluded from both numerator and denominator - **Memory:** 2 GB per node (6 GB total) - **Ports:** 9200 (API), 5601 (Kibana) -### BioMedNER -- **Purpose:** Biomedical NER and entity normalization -- **Services:** 4 daemons on ports 18894, 18783, 18888, 18892 -- **Entities:** genes, diseases, drugs, procedures, signs/symptoms, cell types +### Schema Entity Annotator + LanceDB Concept Linker +- **Purpose:** Biomedical entity recognition and normalization without external Java daemons +- **Recognizer:** GLiNER2-style schema-driven extraction, with GLiNER/biomedical fallback support behind the same interface +- **Concept store:** LanceDB table built from OMOP vocabularies and legacy dictionaries +- **Entities:** diseases, genes, medications, procedures, labs, radiology, signs/symptoms, cell types, and species - **Usage:** synonym expansion (Stage 1) and entity annotation (indexing) --- @@ -257,7 +258,7 @@ Irrelevant and unclear criteria are excluded from both numerator and denominator ``` [One-time setup] ClinicalTrials.gov JSONs - → BioMedNER annotation + → schema entity annotation + LanceDB concept linking → BGE-M3 embedding → Elasticsearch (clinical_trials + trials_eligibility indices) @@ -527,7 +528,7 @@ startup: load Phi-4 (4-bit) + LoRA adapter load Gemma-2-2B (4-bit) load BGE-M3 embedder - load BioMedNER daemons + load schema entity annotator + LanceDB concept linker connect to Elasticsearch for each patient: @@ -626,7 +627,7 @@ Gemma-2-2B is never asked to generate text. Instead it's used as a **scoring fun Patient data is structured using the **GA4GH Phenopacket standard** — ontology codes (HPO, MONDO, CHEBI) rather than free text. This solves the vocabulary mismatch problem: a trial saying "coronary artery disease" and a patient record saying "CAD" both resolve to `MONDO:0005066`, ensuring consistent matching regardless of phrasing. -**BioMedNER** bridges the gap between ontology codes and natural language by extracting synonyms and related terms, expanding search recall. +The schema entity annotator bridges the gap between ontology codes and natural language by extracting mentions, linking them to LanceDB concept candidates, and expanding accepted disease concepts with synonyms. --- diff --git a/pyproject.toml b/pyproject.toml index a50a160f..8b082f21 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -50,7 +50,7 @@ dependencies = [ # App / infra "SQLAlchemy==2.0.37", "pydantic>=2.12.0,<3", - "pydantic-settings>=2.10.1,<3", + "pydantic-settings>=2.14.2,<3", "huggingface_hub>=1.5.0,<2", "bioregistry==0.13.62", "rapidfuzz==3.14.5", @@ -69,6 +69,11 @@ llm = [ "langchain-community==0.4.2", "langchain-openai==1.3.2", ] +entity = [ + "lancedb>=0.25.0,<0.26", + "pyarrow>=24.0.0,<25", + "gliner2>=1.3.1,<2", +] training = [ "datasets==2.19.0", "bert-score==0.3.13", @@ -80,6 +85,7 @@ trialmatchai-healthcheck = "Matcher.cli.healthcheck:main" trialmatchai-run = "Matcher.cli.run:main" trialmatchai-bootstrap-data = "Matcher.cli.bootstrap_data:main" trialmatchai-index = "Matcher.cli.index_data:main" +trialmatchai-build-concepts = "Matcher.cli.build_concepts:main" [dependency-groups] dev = [ @@ -96,8 +102,7 @@ include-package-data = true where = ["source"] [tool.setuptools.package-data] -Matcher = ["config/*.json"] -Parser = ["bin/*", "include/*", "lib/*", "normalizers/*.md"] +Matcher = ["config/*.json", "entity_schemas/*.yaml"] [tool.uv] environments = [ diff --git a/scripts/scan_secrets.py b/scripts/scan_secrets.py index fa5f5dae..57d3a609 100644 --- a/scripts/scan_secrets.py +++ b/scripts/scan_secrets.py @@ -39,6 +39,8 @@ def main() -> int: continue try: text = path.read_text(encoding="utf-8") + except FileNotFoundError: + continue except UnicodeDecodeError: continue for pattern in SECRET_PATTERNS: diff --git a/source/Matcher/cli/build_concepts.py b/source/Matcher/cli/build_concepts.py new file mode 100644 index 00000000..b8971a14 --- /dev/null +++ b/source/Matcher/cli/build_concepts.py @@ -0,0 +1,122 @@ +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +from Matcher.config.config_loader import load_config +from Matcher.entities.builder import ( + DEFAULT_OMOP_VOCABULARIES, + build_legacy_dictionary_rows, + build_omop_concept_rows, + concept_texts_for_embedding, + write_lancedb_table, +) +from Matcher.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig +from Matcher.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Build the TrialMatchAI LanceDB concept table." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument("--concept-csv", required=True, help="OMOP CONCEPT.csv path") + parser.add_argument( + "--synonym-csv", + default=None, + help="OMOP CONCEPT_SYNONYM.csv path", + ) + parser.add_argument( + "--legacy-dictionary", + action="append", + default=[], + metavar="VOCAB:DOMAIN:PATH", + help="Import a legacy dictionary file, e.g. EntrezGene:Gene:/path/dict_Gene.txt", + ) + parser.add_argument( + "--vocabulary", + action="append", + default=[], + help="OMOP vocabulary to include. Defaults to TrialMatchAI deployment set.", + ) + parser.add_argument("--db-path", default=None, help="Output LanceDB directory") + parser.add_argument("--table", default=None, help="Output LanceDB table name") + parser.add_argument( + "--skip-embeddings", + action="store_true", + help="Create an FTS-only table without model embeddings.", + ) + parser.add_argument( + "--recreate", + action=argparse.BooleanOptionalAction, + default=True, + help="Overwrite the target table if it exists.", + ) + args = parser.parse_args() + + config = load_config(args.config) + linker_cfg = config.get("concept_linker", {}) + embedder_cfg = config.get("embedder", {}) + db_path = args.db_path or linker_cfg.get("db_path") or "data/concepts" + table_name = args.table or linker_cfg.get("table") or "concepts" + + vocabularies = tuple(args.vocabulary or DEFAULT_OMOP_VOCABULARIES) + rows = build_omop_concept_rows( + args.concept_csv, + args.synonym_csv, + vocabularies=vocabularies, + ) + for spec in args.legacy_dictionary: + vocab, domain, path = _parse_legacy_spec(spec) + rows.extend( + build_legacy_dictionary_rows( + path, + vocabulary_id=vocab, + domain_id=domain, + ) + ) + + embeddings = None + if not args.skip_embeddings: + embedder = TextEmbedder( + TextEmbedderConfig( + model_name=embedder_cfg.get("model_name", "BAAI/bge-m3"), + revision=embedder_cfg.get("revision"), + trust_remote_code=embedder_cfg.get("trust_remote_code", False), + pooling=embedder_cfg.get("pooling", "mean"), + max_length=embedder_cfg.get("max_length", 512), + batch_size=embedder_cfg.get("batch_size", 32), + use_gpu=embedder_cfg.get("use_gpu", True), + use_fp16=embedder_cfg.get("use_fp16", False), + normalize=embedder_cfg.get("normalize", True), + ) + ) + embeddings = embedder.embed_texts(concept_texts_for_embedding(rows)) + + Path(db_path).mkdir(parents=True, exist_ok=True) + write_lancedb_table( + rows, + db_path=db_path, + table_name=table_name, + embeddings=embeddings, + recreate=args.recreate, + ) + logger.info("Wrote %s concepts to %s/%s", len(rows), db_path, table_name) + return 0 + + +def _parse_legacy_spec(spec: str) -> tuple[str, str, str]: + parts = spec.split(":", 2) + if len(parts) != 3: + raise ValueError( + "--legacy-dictionary must use VOCAB:DOMAIN:PATH, " + f"received: {spec}" + ) + return parts[0], parts[1], parts[2] + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/source/Matcher/config/config.json b/source/Matcher/config/config.json index 75f9d0b3..cba614eb 100644 --- a/source/Matcher/config/config.json +++ b/source/Matcher/config/config.json @@ -1,17 +1,22 @@ { - "bio_med_ner": { - "biomedner_port": 18894, - "gner_port": 18783, - "gene_norm_port": 18888, - "disease_norm_port": 18892, - "biomedner_home": "source/Parser/", - "use_neural_normalizer": true, - "no_cuda": false + "entity_extraction": { + "backend": "gliner2", + "model_name": "fastino/gliner2-base", + "fallback_model_name": "gliner-community/gliner_large-v2.5", + "model_revision": null, + "schema_path": "source/Matcher/entity_schemas/trialmatchai.yaml", + "threshold": 0.8, + "batch_size": 8, + "device": "auto", + "trust_remote_code": false }, - "services": { - "stop_script": "source/biomedner_services/stop_biomedner.sh", - "run_script": "source/biomedner_services/run_biomedner.sh", - "auto_start": false + "concept_linker": { + "enabled": true, + "db_path": "data/concepts", + "table": "concepts", + "accept_threshold": 0.8, + "reject_threshold": 0.3, + "search_limit": 10 }, "paths": { "patients_dir": "example", diff --git a/source/Matcher/config/config_loader.py b/source/Matcher/config/config_loader.py index 15ba3d29..9d1d7639 100644 --- a/source/Matcher/config/config_loader.py +++ b/source/Matcher/config/config_loader.py @@ -87,15 +87,16 @@ def normalize_config_paths(cfg: Dict[str, Any], config_path: Path) -> Dict[str, if value: cfg["paths"][key] = str(_resolve_local_path(value, root)) - for key in ("stop_script", "run_script"): - value = cfg.get("services", {}).get(key) - if value: - cfg["services"][key] = str(_resolve_local_path(value, root)) + schema_path = cfg.get("entity_extraction", {}).get("schema_path") + if schema_path: + cfg["entity_extraction"]["schema_path"] = str( + _resolve_local_path(schema_path, root) + ) - biomedner_home = cfg.get("bio_med_ner", {}).get("biomedner_home") - if biomedner_home: - cfg["bio_med_ner"]["biomedner_home"] = str( - _resolve_local_path(biomedner_home, root) + concept_db_path = cfg.get("concept_linker", {}).get("db_path") + if concept_db_path: + cfg["concept_linker"]["db_path"] = str( + _resolve_local_path(concept_db_path, root) ) start_script = cfg.get("elasticsearch", {}).get("start_script") diff --git a/source/Matcher/config/settings.py b/source/Matcher/config/settings.py index 10b9f7e2..dd59e7ac 100644 --- a/source/Matcher/config/settings.py +++ b/source/Matcher/config/settings.py @@ -1,24 +1,37 @@ from __future__ import annotations -from typing import Any, Dict, Iterable, Tuple +from typing import Any, Dict, Iterable, Literal, Tuple from pydantic import BaseModel, Field, field_validator -class BioMedNerSettings(BaseModel): - biomedner_port: int - gner_port: int - gene_norm_port: int - disease_norm_port: int - biomedner_home: str - use_neural_normalizer: bool = True - no_cuda: bool = False +class EntityExtractionSettings(BaseModel): + backend: Literal["gliner2", "gliner", "regex", "disabled"] = "gliner2" + model_name: str = "fastino/gliner2-base" + fallback_model_name: str = "gliner-community/gliner_large-v2.5" + model_revision: str | None = None + schema_path: str = "source/Matcher/entity_schemas/trialmatchai.yaml" + threshold: float = Field(0.8, ge=0.0, le=1.0) + batch_size: int = Field(8, ge=1) + device: str = "auto" + trust_remote_code: bool = False -class ServicesSettings(BaseModel): - stop_script: str - run_script: str - auto_start: bool = False +class ConceptLinkerSettings(BaseModel): + enabled: bool = True + db_path: str = "data/concepts" + table: str = "concepts" + accept_threshold: float = Field(0.8, ge=0.0, le=1.0) + reject_threshold: float = Field(0.3, ge=0.0, le=1.0) + search_limit: int = Field(10, ge=1) + + @field_validator("reject_threshold") + @classmethod + def validate_reject_threshold(cls, value: float, info): + accept = info.data.get("accept_threshold") + if accept is not None and value > accept: + raise ValueError("concept_linker.reject_threshold must be <= accept_threshold") + return value class PathsSettings(BaseModel): @@ -119,8 +132,10 @@ class LLMRerankerSettings(BaseModel): class TrialMatchSettings(BaseModel): - bio_med_ner: BioMedNerSettings - services: ServicesSettings + entity_extraction: EntityExtractionSettings = Field( + default_factory=EntityExtractionSettings + ) + concept_linker: ConceptLinkerSettings = Field(default_factory=ConceptLinkerSettings) paths: PathsSettings model: ModelSettings tokenizer: TokenizerSettings @@ -185,6 +200,20 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: ), "TRIALMATCHAI_COT_BACKEND": ("cot_backend",), "TRIALMATCHAI_ES_START_SCRIPT": ("elasticsearch", "start_script"), + "TRIALMATCHAI_ENTITY_BACKEND": ("entity_extraction", "backend"), + "TRIALMATCHAI_ENTITY_MODEL_NAME": ("entity_extraction", "model_name"), + "TRIALMATCHAI_ENTITY_FALLBACK_MODEL_NAME": ( + "entity_extraction", + "fallback_model_name", + ), + "TRIALMATCHAI_ENTITY_MODEL_REVISION": ( + "entity_extraction", + "model_revision", + ), + "TRIALMATCHAI_ENTITY_SCHEMA_PATH": ("entity_extraction", "schema_path"), + "TRIALMATCHAI_ENTITY_DEVICE": ("entity_extraction", "device"), + "TRIALMATCHAI_CONCEPT_DB_PATH": ("concept_linker", "db_path"), + "TRIALMATCHAI_CONCEPT_TABLE": ("concept_linker", "table"), } for env_key, path in string_env_map.items(): value = os.getenv(env_key) @@ -194,7 +223,6 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: bool_env_map: dict[str, Tuple[str, ...]] = { "TRIALMATCHAI_ES_AUTO_START": ("elasticsearch", "auto_start"), "TRIALMATCHAI_ES_RETRY_ON_TIMEOUT": ("elasticsearch", "retry_on_timeout"), - "TRIALMATCHAI_BIOMEDNER_AUTO_START": ("services", "auto_start"), "TRIALMATCHAI_EMBEDDER_USE_GPU": ("embedder", "use_gpu"), "TRIALMATCHAI_EMBEDDER_USE_FP16": ("embedder", "use_fp16"), "TRIALMATCHAI_EMBEDDER_TRUST_REMOTE_CODE": ( @@ -202,6 +230,11 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "trust_remote_code", ), "TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE": ("model", "trust_remote_code"), + "TRIALMATCHAI_ENTITY_TRUST_REMOTE_CODE": ( + "entity_extraction", + "trust_remote_code", + ), + "TRIALMATCHAI_CONCEPT_LINKER_ENABLED": ("concept_linker", "enabled"), } for env_key, path in bool_env_map.items(): value = os.getenv(env_key) @@ -212,6 +245,8 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "TRIALMATCHAI_ES_REQUEST_TIMEOUT": ("elasticsearch", "request_timeout"), "TRIALMATCHAI_ES_START_TIMEOUT": ("elasticsearch", "start_timeout"), "TRIALMATCHAI_EMBEDDER_BATCH_SIZE": ("embedder", "batch_size"), + "TRIALMATCHAI_ENTITY_BATCH_SIZE": ("entity_extraction", "batch_size"), + "TRIALMATCHAI_CONCEPT_SEARCH_LIMIT": ("concept_linker", "search_limit"), "TRIALMATCHAI_SEARCH_MAX_TRIALS_FIRST_LEVEL": ( "search", "max_trials_first_level", @@ -232,6 +267,19 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: except ValueError: pass + float_env_map: dict[str, Tuple[str, ...]] = { + "TRIALMATCHAI_ENTITY_THRESHOLD": ("entity_extraction", "threshold"), + "TRIALMATCHAI_LINK_ACCEPT": ("concept_linker", "accept_threshold"), + "TRIALMATCHAI_LINK_REJECT": ("concept_linker", "reject_threshold"), + } + for env_key, path in float_env_map.items(): + value = os.getenv(env_key) + if value: + try: + _set_nested(raw, path, float(value)) + except ValueError: + pass + return raw diff --git a/source/Matcher/entities/__init__.py b/source/Matcher/entities/__init__.py new file mode 100644 index 00000000..f3f483a9 --- /dev/null +++ b/source/Matcher/entities/__init__.py @@ -0,0 +1,15 @@ +from Matcher.entities.annotator import ( + CompatibilityEntityAnnotator, + SchemaEntityAnnotator, + build_entity_annotator, +) +from Matcher.entities.types import ConceptCandidate, EntityAnnotation, EntitySchema + +__all__ = [ + "CompatibilityEntityAnnotator", + "ConceptCandidate", + "EntityAnnotation", + "EntitySchema", + "SchemaEntityAnnotator", + "build_entity_annotator", +] diff --git a/source/Matcher/entities/annotator.py b/source/Matcher/entities/annotator.py new file mode 100644 index 00000000..7fe23905 --- /dev/null +++ b/source/Matcher/entities/annotator.py @@ -0,0 +1,120 @@ +from __future__ import annotations + +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path +from typing import Any, Sequence + +from Matcher.entities.linker import ConceptLinker, LanceDBConceptStore +from Matcher.entities.recognizers import EntityRecognizer, build_recognizer +from Matcher.entities.schemas import load_entity_schemas +from Matcher.entities.types import EntityAnnotation +from Matcher.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +class SchemaEntityAnnotator: + def __init__( + self, + recognizer: EntityRecognizer, + schemas: Sequence[Any], + *, + linker: ConceptLinker | None = None, + ): + self.recognizer = recognizer + self.schemas = list(schemas) + self.linker = linker + + def annotate_texts(self, texts: Sequence[str]) -> list[list[EntityAnnotation]]: + recognized = self.recognizer.recognize(texts, self.schemas) + if self.linker is None: + return recognized + return [self.linker.link_annotations(annotations) for annotations in recognized] + + def annotate_text(self, text: str) -> list[dict[str, Any]]: + return [annotation.to_dict() for annotation in self.annotate_texts([text])[0]] + + def annotate_texts_in_parallel( + self, + texts: Sequence[str], + max_workers: int = 20, + retries: int = 1, + delay: float = 0, + ) -> list[list[dict[str, Any]]]: + del retries, delay + if max_workers <= 1 or len(texts) <= 1: + return [ + [annotation.to_dict() for annotation in annotations] + for annotations in self.annotate_texts(texts) + ] + + results: list[list[dict[str, Any]]] = [[] for _ in texts] + with ThreadPoolExecutor(max_workers=min(max_workers, len(texts))) as executor: + future_to_index = { + executor.submit(self.annotate_text, text): index + for index, text in enumerate(texts) + } + for future, index in future_to_index.items(): + try: + results[index] = future.result() + except Exception as exc: + logger.exception("Entity annotation failed for text index %s", index) + results[index] = [ + {"error_code": 1, "error_message": str(exc)} + ] + return results + + +class CompatibilityEntityAnnotator(SchemaEntityAnnotator): + """Named compatibility shim for old call sites expecting BioMedNER shape.""" + + +def build_entity_annotator( + config: dict[str, Any], + *, + embedder: Any | None = None, +) -> CompatibilityEntityAnnotator: + extraction_cfg = dict(config.get("entity_extraction") or {}) + linker_cfg = dict(config.get("concept_linker") or {}) + schema_path = extraction_cfg.get("schema_path") + schemas = load_entity_schemas(schema_path) + recognizer = build_recognizer(extraction_cfg) + + linker: ConceptLinker | None = None + if linker_cfg.get("enabled", True): + store = _build_concept_store(linker_cfg, embedder=embedder) + linker = ConceptLinker( + store, + schemas, + accept_threshold=float(linker_cfg.get("accept_threshold", 0.8)), + reject_threshold=float(linker_cfg.get("reject_threshold", 0.3)), + search_limit=int(linker_cfg.get("search_limit", 10)), + ) + + return CompatibilityEntityAnnotator(recognizer, schemas, linker=linker) + + +def _build_concept_store( + linker_cfg: dict[str, Any], + *, + embedder: Any | None, +) -> LanceDBConceptStore | None: + db_path = linker_cfg.get("db_path") + if not db_path: + logger.warning("Concept linker enabled but concept_linker.db_path is empty.") + return None + + path = Path(db_path) + if not path.exists(): + logger.warning("Concept DB path does not exist; linking will degrade: %s", path) + return None + + try: + return LanceDBConceptStore( + path, + table_name=linker_cfg.get("table", "concepts"), + embedder=embedder, + ) + except Exception as exc: + logger.warning("Concept DB unavailable; linking will degrade: %s", exc) + return None diff --git a/source/Matcher/entities/builder.py b/source/Matcher/entities/builder.py new file mode 100644 index 00000000..5684e023 --- /dev/null +++ b/source/Matcher/entities/builder.py @@ -0,0 +1,183 @@ +from __future__ import annotations + +import csv +from pathlib import Path +from typing import Any, Iterable, Sequence + +from Matcher.entities.types import dedupe_strings + + +DEFAULT_OMOP_VOCABULARIES = ( + "SNOMED", + "ICD10", + "ICD10CM", + "LOINC", + "RxNorm", + "ATC", +) + + +def build_omop_concept_rows( + concept_csv: str | Path, + synonym_csv: str | Path | None = None, + *, + vocabularies: Sequence[str] = DEFAULT_OMOP_VOCABULARIES, +) -> list[dict[str, Any]]: + vocab_filter = {v.casefold() for v in vocabularies} + synonyms_by_concept = _read_omop_synonyms(synonym_csv) if synonym_csv else {} + rows: list[dict[str, Any]] = [] + with Path(concept_csv).open("r", encoding="utf-8-sig", newline="") as handle: + reader = csv.DictReader(handle) + for row in reader: + vocabulary_id = (row.get("vocabulary_id") or "").strip() + if vocab_filter and vocabulary_id.casefold() not in vocab_filter: + continue + concept_id = (row.get("concept_id") or "").strip() + concept_name = (row.get("concept_name") or "").strip() + concept_code = (row.get("concept_code") or "").strip() + if not concept_id or not concept_name or not concept_code: + continue + synonyms = dedupe_strings(tuple(synonyms_by_concept.get(concept_id, ()))) + rows.append( + _concept_row( + concept_id=concept_id, + vocabulary_id=vocabulary_id, + concept_code=concept_code, + concept_name=concept_name, + domain_id=(row.get("domain_id") or "").strip(), + concept_class_id=(row.get("concept_class_id") or "").strip(), + standard_concept=(row.get("standard_concept") or "").strip(), + synonyms=synonyms, + ) + ) + return rows + + +def build_legacy_dictionary_rows( + dictionary_path: str | Path, + *, + vocabulary_id: str, + domain_id: str = "", + concept_class_id: str = "LegacyDictionary", +) -> list[dict[str, Any]]: + rows: list[dict[str, Any]] = [] + with Path(dictionary_path).open("r", encoding="utf-8") as handle: + for line in handle: + stripped = line.strip() + if not stripped or "||" not in stripped: + continue + identifiers, names = stripped.split("||", 1) + synonyms = dedupe_strings(tuple(names.split("|"))) + concept_name = synonyms[0] if synonyms else "" + if not concept_name: + continue + for raw_identifier in identifiers.split(","): + concept_code = _strip_prefix(raw_identifier.strip(), vocabulary_id) + if not concept_code: + continue + rows.append( + _concept_row( + concept_id=f"{vocabulary_id}:{concept_code}", + vocabulary_id=vocabulary_id, + concept_code=concept_code, + concept_name=concept_name, + domain_id=domain_id, + concept_class_id=concept_class_id, + standard_concept="", + synonyms=synonyms, + ) + ) + return rows + + +def write_lancedb_table( + rows: Sequence[dict[str, Any]], + *, + db_path: str | Path, + table_name: str = "concepts", + embeddings: Sequence[Sequence[float]] | None = None, + recreate: bool = True, +) -> None: + try: + import lancedb # type: ignore + except Exception as exc: # pragma: no cover - optional dependency + raise RuntimeError( + "Building a LanceDB concept table requires `uv sync --extra entity`." + ) from exc + + payload = [dict(row) for row in rows] + if embeddings is not None: + if len(embeddings) != len(payload): + raise ValueError("Embedding count must match concept row count.") + for row, embedding in zip(payload, embeddings): + row["embedding"] = list(embedding) + + db = lancedb.connect(str(db_path)) + mode = "overwrite" if recreate else "create" + table = db.create_table(table_name, data=payload, mode=mode) + try: + table.create_fts_index("fts_text", replace=True) + except Exception: + # Older LanceDB versions or tiny test builds may not support FTS indexes. + pass + + +def concept_texts_for_embedding(rows: Sequence[dict[str, Any]]) -> list[str]: + texts: list[str] = [] + for row in rows: + synonyms = row.get("synonyms") or [] + if isinstance(synonyms, str): + synonyms = synonyms.split("|") + texts.append(" | ".join([row.get("concept_name", ""), *synonyms]).strip()) + return texts + + +def _read_omop_synonyms(path: str | Path | None) -> dict[str, list[str]]: + if path is None: + return {} + synonyms: dict[str, list[str]] = {} + with Path(path).open("r", encoding="utf-8-sig", newline="") as handle: + reader = csv.DictReader(handle) + for row in reader: + concept_id = (row.get("concept_id") or "").strip() + synonym = (row.get("concept_synonym_name") or "").strip() + if concept_id and synonym: + synonyms.setdefault(concept_id, []).append(synonym) + return synonyms + + +def _concept_row( + *, + concept_id: str, + vocabulary_id: str, + concept_code: str, + concept_name: str, + domain_id: str, + concept_class_id: str, + standard_concept: str, + synonyms: Iterable[str], +) -> dict[str, Any]: + synonyms_tuple = dedupe_strings(tuple(synonyms)) + fts_text = " ".join([concept_name, *synonyms_tuple]) + return { + "concept_id": concept_id, + "vocabulary_id": vocabulary_id, + "concept_code": concept_code, + "concept_name": concept_name, + "domain_id": domain_id, + "concept_class_id": concept_class_id, + "standard_concept": standard_concept, + "synonyms": list(synonyms_tuple), + "fts_text": fts_text, + } + + +def _strip_prefix(identifier: str, vocabulary_id: str) -> str: + if not identifier: + return "" + if ":" not in identifier: + return identifier + prefix, code = identifier.split(":", 1) + if prefix.casefold() == vocabulary_id.casefold(): + return code + return identifier diff --git a/source/Matcher/entities/linker.py b/source/Matcher/entities/linker.py new file mode 100644 index 00000000..6fd1605e --- /dev/null +++ b/source/Matcher/entities/linker.py @@ -0,0 +1,352 @@ +from __future__ import annotations + +from dataclasses import replace +from pathlib import Path +from typing import Any, Protocol, Sequence + +from Matcher.entities.schemas import schema_by_label +from Matcher.entities.types import ( + NO_ENTITY_ID, + ConceptCandidate, + EntityAnnotation, + EntitySchema, + dedupe_strings, +) +from Matcher.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +class ConceptStore(Protocol): + def search( + self, + query: str, + *, + vocabularies: Sequence[str] = (), + domain_hints: Sequence[str] = (), + query_vector: Sequence[float] | None = None, + limit: int = 10, + ) -> list[ConceptCandidate]: + ... + + +class InMemoryConceptStore: + def __init__(self, concepts: Sequence[ConceptCandidate | dict[str, Any]]): + self.concepts = [ + item if isinstance(item, ConceptCandidate) else concept_from_mapping(item) + for item in concepts + ] + + def search( + self, + query: str, + *, + vocabularies: Sequence[str] = (), + domain_hints: Sequence[str] = (), + query_vector: Sequence[float] | None = None, + limit: int = 10, + ) -> list[ConceptCandidate]: + vocab_filter = {v.casefold() for v in vocabularies} + domain_filter = {d.casefold() for d in domain_hints} + scored: list[ConceptCandidate] = [] + for concept in self.concepts: + if vocab_filter and concept.vocabulary_id.casefold() not in vocab_filter: + continue + if domain_filter and concept.domain_id.casefold() not in domain_filter: + continue + score = _lexical_score(query, concept) + if score <= 0: + continue + scored.append( + replace( + concept, + score=score, + source_scores={"lexical": score}, + ) + ) + scored.sort(key=lambda item: item.score, reverse=True) + return scored[:limit] + + +class LanceDBConceptStore: + def __init__( + self, + db_path: str | Path, + *, + table_name: str = "concepts", + embedder: Any | None = None, + ): + try: + import lancedb # type: ignore + except Exception as exc: # pragma: no cover - optional dependency + raise RuntimeError( + "LanceDB concept linking requires the entity extra " + "(`uv sync --extra entity`)." + ) from exc + + self.db_path = str(db_path) + self.table_name = table_name + self.embedder = embedder + self.db = lancedb.connect(self.db_path) + self.table = self.db.open_table(table_name) + + def search( + self, + query: str, + *, + vocabularies: Sequence[str] = (), + domain_hints: Sequence[str] = (), + query_vector: Sequence[float] | None = None, + limit: int = 10, + ) -> list[ConceptCandidate]: + vector = query_vector or self._embed_query(query) + lexical_rows = self._search_fts(query, vocabularies, domain_hints, limit) + vector_rows = ( + self._search_vector(vector, vocabularies, domain_hints, limit) + if vector + else [] + ) + return _rrf_merge(lexical_rows, vector_rows, limit) + + def _embed_query(self, query: str) -> list[float] | None: + if self.embedder is None: + return None + if hasattr(self.embedder, "embed_text"): + return self.embedder.embed_text(query) + if hasattr(self.embedder, "embed_texts"): + vectors = self.embedder.embed_texts([query]) + return vectors[0] if vectors else None + return None + + def _search_fts( + self, + query: str, + vocabularies: Sequence[str], + domain_hints: Sequence[str], + limit: int, + ) -> list[ConceptCandidate]: + try: + search = self.table.search(query, query_type="fts") + where = _lancedb_filter(vocabularies, domain_hints) + if where: + search = search.where(where) + rows = search.limit(limit).to_list() + except Exception as exc: + logger.warning("LanceDB FTS concept search failed: %s", exc) + rows = [] + return [concept_from_mapping(row) for row in rows] + + def _search_vector( + self, + vector: Sequence[float], + vocabularies: Sequence[str], + domain_hints: Sequence[str], + limit: int, + ) -> list[ConceptCandidate]: + try: + search = self.table.search(vector) + where = _lancedb_filter(vocabularies, domain_hints) + if where: + search = search.where(where) + rows = search.limit(limit).to_list() + except Exception as exc: + logger.warning("LanceDB vector concept search failed: %s", exc) + rows = [] + return [concept_from_mapping(row) for row in rows] + + +class ConceptLinker: + def __init__( + self, + store: ConceptStore | None, + schemas: Sequence[EntitySchema], + *, + accept_threshold: float = 0.8, + reject_threshold: float = 0.3, + search_limit: int = 10, + ): + if reject_threshold > accept_threshold: + raise ValueError("reject_threshold must be <= accept_threshold.") + self.store = store + self.schemas = {schema.id: schema for schema in schemas} + self.schemas_by_label = schema_by_label(list(schemas)) + self.accept_threshold = accept_threshold + self.reject_threshold = reject_threshold + self.search_limit = search_limit + + def link_annotations( + self, annotations: Sequence[EntityAnnotation] + ) -> list[EntityAnnotation]: + return [self.link_annotation(annotation) for annotation in annotations] + + def link_annotation(self, annotation: EntityAnnotation) -> EntityAnnotation: + schema = self._schema_for(annotation) + if schema is None or not schema.is_linkable: + return replace(annotation, linker_status="not_linkable") + if self.store is None: + return replace( + annotation, + normalized_id=(NO_ENTITY_ID,), + linker_status="concept_store_unavailable", + ) + + candidates = self.store.search( + annotation.text, + vocabularies=schema.target_vocabularies, + domain_hints=schema.domain_hints, + limit=self.search_limit, + ) + if not candidates: + return replace( + annotation, + normalized_id=(NO_ENTITY_ID,), + concept_candidates=(), + linker_score=0.0, + linker_status="rejected", + ) + + top = candidates[0] + status = _status_for_score( + top.score, + accept_threshold=self.accept_threshold, + reject_threshold=self.reject_threshold, + ) + if status == "accepted": + return replace( + annotation, + normalized_id=(top.normalized_id,), + synonyms=_candidate_synonyms(top), + concept_candidates=tuple(candidates), + linker_score=top.score, + linker_status=status, + ) + return replace( + annotation, + normalized_id=(NO_ENTITY_ID,), + synonyms=(), + concept_candidates=tuple(candidates), + linker_score=top.score, + linker_status=status, + ) + + def _schema_for(self, annotation: EntityAnnotation) -> EntitySchema | None: + if annotation.schema_id and annotation.schema_id in self.schemas: + return self.schemas[annotation.schema_id] + return self.schemas_by_label.get(annotation.entity_group.casefold()) + + +def concept_from_mapping(row: dict[str, Any]) -> ConceptCandidate: + synonyms = row.get("synonyms") or () + if isinstance(synonyms, str): + synonyms = [part.strip() for part in synonyms.split("|")] + return ConceptCandidate( + concept_id=str(row.get("concept_id") or ""), + vocabulary_id=str(row.get("vocabulary_id") or ""), + concept_code=str(row.get("concept_code") or ""), + concept_name=str(row.get("concept_name") or ""), + domain_id=str(row.get("domain_id") or ""), + concept_class_id=str(row.get("concept_class_id") or ""), + standard_concept=str(row.get("standard_concept") or ""), + synonyms=dedupe_strings(tuple(synonyms)), + score=float(row.get("score") or row.get("_score") or 0.0), + source_scores=dict(row.get("source_scores") or {}), + ) + + +def _candidate_synonyms(candidate: ConceptCandidate) -> tuple[str, ...]: + return dedupe_strings((candidate.concept_name, *candidate.synonyms)) + + +def _status_for_score( + score: float, *, accept_threshold: float, reject_threshold: float +) -> str: + if score >= accept_threshold: + return "accepted" + if score < reject_threshold: + return "rejected" + return "ambiguous" + + +def _lexical_score(query: str, concept: ConceptCandidate) -> float: + query_norm = _normalize_text(query) + names = [concept.concept_name, *concept.synonyms] + best = 0.0 + for name in names: + name_norm = _normalize_text(name) + if not name_norm: + continue + if query_norm == name_norm: + best = max(best, 1.0) + elif query_norm in name_norm or name_norm in query_norm: + best = max(best, 0.86) + else: + best = max(best, _token_jaccard(query_norm, name_norm)) + return best + + +def _normalize_text(value: str) -> str: + return " ".join(value.casefold().replace("-", " ").split()) + + +def _token_jaccard(left: str, right: str) -> float: + left_tokens = set(left.split()) + right_tokens = set(right.split()) + if not left_tokens or not right_tokens: + return 0.0 + overlap = len(left_tokens & right_tokens) + if overlap == 0: + return 0.0 + return 0.2 + 0.6 * (overlap / len(left_tokens | right_tokens)) + + +def _lancedb_filter( + vocabularies: Sequence[str], + domain_hints: Sequence[str], +) -> str: + clauses: list[str] = [] + if vocabularies: + quoted = ", ".join(f"'{_sql_escape(v)}'" for v in vocabularies) + clauses.append(f"vocabulary_id IN ({quoted})") + if domain_hints: + quoted = ", ".join(f"'{_sql_escape(d)}'" for d in domain_hints) + clauses.append(f"domain_id IN ({quoted})") + return " AND ".join(clauses) + + +def _sql_escape(value: str) -> str: + return value.replace("'", "''") + + +def _rrf_merge( + lexical_rows: Sequence[ConceptCandidate], + vector_rows: Sequence[ConceptCandidate], + limit: int, + *, + k: int = 60, +) -> list[ConceptCandidate]: + by_id: dict[str, ConceptCandidate] = {} + scores: dict[str, float] = {} + sources: dict[str, dict[str, float]] = {} + + for source_name, rows in (("fts", lexical_rows), ("vector", vector_rows)): + for rank, row in enumerate(rows, start=1): + key = row.normalized_id + by_id.setdefault(key, row) + score = 1.0 / (k + rank) + scores[key] = scores.get(key, 0.0) + score + sources.setdefault(key, {})[source_name] = score + + if not by_id: + return [] + + max_score = max(scores.values()) or 1.0 + merged = [ + replace( + row, + score=min(1.0, scores[key] / max_score), + source_scores=sources.get(key, {}), + ) + for key, row in by_id.items() + ] + merged.sort(key=lambda item: (-item.score, item.concept_name)) + return merged[:limit] diff --git a/source/Matcher/entities/recognizers.py b/source/Matcher/entities/recognizers.py new file mode 100644 index 00000000..3e7e2b51 --- /dev/null +++ b/source/Matcher/entities/recognizers.py @@ -0,0 +1,278 @@ +from __future__ import annotations + +import re +from dataclasses import replace +from typing import Any, Protocol, Sequence + +from Matcher.entities.schemas import schema_by_label +from Matcher.entities.types import EntityAnnotation, EntitySchema, NO_ENTITY_ID + + +class EntityRecognizer(Protocol): + def recognize( + self, texts: Sequence[str], schemas: Sequence[EntitySchema] + ) -> list[list[EntityAnnotation]]: + ... + + +class DisabledRecognizer: + def recognize( + self, texts: Sequence[str], schemas: Sequence[EntitySchema] + ) -> list[list[EntityAnnotation]]: + return [[] for _ in texts] + + +class RegexSchemaRecognizer: + """Small deterministic recognizer used for smoke tests and fixture runs.""" + + def recognize( + self, texts: Sequence[str], schemas: Sequence[EntitySchema] + ) -> list[list[EntityAnnotation]]: + compiled = [ + (schema, re.compile(pattern, re.IGNORECASE)) + for schema in schemas + for pattern in schema.patterns + ] + results: list[list[EntityAnnotation]] = [] + for text in texts: + annotations: list[EntityAnnotation] = [] + for schema, pattern in compiled: + for match in pattern.finditer(text): + mention = match.group(0) + annotations.append( + EntityAnnotation( + entity_group=schema.entity_group, + text=mention, + start=match.start(), + end=match.end(), + score=max(schema.threshold, 0.95), + normalized_id=(NO_ENTITY_ID,), + schema_id=schema.id, + ) + ) + results.append(resolve_overlaps(annotations)) + return results + + +class GLiNER2Recognizer: + def __init__( + self, + model_name: str, + *, + revision: str | None = None, + device: str | None = None, + trust_remote_code: bool = False, + batch_size: int = 8, + ): + try: + from gliner2 import GLiNER2 # type: ignore + except Exception as exc: # pragma: no cover - exercised without optional dep + raise RuntimeError( + "entity_extraction.backend=gliner2 requires the entity extra " + "(`uv sync --extra entity`) and a GLiNER2-compatible model." + ) from exc + + kwargs: dict[str, Any] = {} + if revision: + kwargs["revision"] = revision + if trust_remote_code: + kwargs["trust_remote_code"] = trust_remote_code + self.model = GLiNER2.from_pretrained(model_name, **kwargs) + if device and device != "auto" and hasattr(self.model, "to"): + self.model.to(device) + self.batch_size = batch_size + + def recognize( + self, texts: Sequence[str], schemas: Sequence[EntitySchema] + ) -> list[list[EntityAnnotation]]: + labels = [schema.label for schema in schemas] + label_map = schema_by_label(list(schemas)) + return [ + resolve_overlaps( + _parse_model_entities( + _call_extractor(self.model, text, labels, schemas), + text, + label_map, + ) + ) + for text in texts + ] + + +class GLiNERRecognizer: + def __init__( + self, + model_name: str, + *, + revision: str | None = None, + device: str | None = None, + trust_remote_code: bool = False, + batch_size: int = 8, + ): + try: + from gliner import GLiNER # type: ignore + except Exception as exc: # pragma: no cover - optional dependency + raise RuntimeError( + "entity_extraction.backend=gliner requires the GLiNER dependency." + ) from exc + + kwargs: dict[str, Any] = {} + if revision: + kwargs["revision"] = revision + if trust_remote_code: + kwargs["trust_remote_code"] = trust_remote_code + self.model = GLiNER.from_pretrained(model_name, **kwargs) + if device and device != "auto" and hasattr(self.model, "to"): + self.model.to(device) + self.batch_size = batch_size + + def recognize( + self, texts: Sequence[str], schemas: Sequence[EntitySchema] + ) -> list[list[EntityAnnotation]]: + labels = [schema.label for schema in schemas] + label_map = schema_by_label(list(schemas)) + results: list[list[EntityAnnotation]] = [] + for text in texts: + raw = self.model.predict_entities(text, labels) + results.append(resolve_overlaps(_parse_model_entities(raw, text, label_map))) + return results + + +def build_recognizer(config: dict[str, Any]) -> EntityRecognizer: + backend = str(config.get("backend", "gliner2")).lower() + if backend == "disabled": + return DisabledRecognizer() + if backend == "regex": + return RegexSchemaRecognizer() + if backend == "gliner": + return GLiNERRecognizer( + model_name=config.get("fallback_model_name") + or config.get("model_name") + or "urchade/gliner_base", + revision=config.get("model_revision"), + device=config.get("device", "auto"), + trust_remote_code=bool(config.get("trust_remote_code", False)), + batch_size=int(config.get("batch_size", 8)), + ) + if backend == "gliner2": + return GLiNER2Recognizer( + model_name=config.get("model_name", "fastino/gliner2-base"), + revision=config.get("model_revision"), + device=config.get("device", "auto"), + trust_remote_code=bool(config.get("trust_remote_code", False)), + batch_size=int(config.get("batch_size", 8)), + ) + raise ValueError( + "entity_extraction.backend must be one of: gliner2, gliner, regex, disabled." + ) + + +def resolve_overlaps( + annotations: Sequence[EntityAnnotation], +) -> list[EntityAnnotation]: + ranked = sorted( + annotations, + key=lambda ann: (ann.score, ann.end - ann.start), + reverse=True, + ) + accepted: list[EntityAnnotation] = [] + for candidate in ranked: + if candidate.start < 0 or candidate.end <= candidate.start: + continue + if any(_overlaps(candidate, current) for current in accepted): + continue + accepted.append(candidate) + return sorted(accepted, key=lambda ann: (ann.start, ann.end)) + + +def _overlaps(left: EntityAnnotation, right: EntityAnnotation) -> bool: + return left.start < right.end and right.start < left.end + + +def _call_extractor( + model: Any, + text: str, + labels: list[str], + schemas: Sequence[EntitySchema], +) -> list[dict[str, Any]]: + if hasattr(model, "extract_entities"): + schema_payload = { + schema.label: schema.description + for schema in schemas + } + for kwargs in ( + {"schema": schema_payload}, + {"labels": labels}, + {}, + ): + try: + return model.extract_entities(text, **kwargs) + except TypeError: + continue + if hasattr(model, "predict_entities"): + return model.predict_entities(text, labels) + raise RuntimeError("Selected entity model does not expose an entity extraction API.") + + +def _parse_model_entities( + raw_entities: Sequence[dict[str, Any]], + text: str, + label_map: dict[str, EntitySchema], +) -> list[EntityAnnotation]: + parsed: list[EntityAnnotation] = [] + for raw in raw_entities or []: + label = str(raw.get("label") or raw.get("entity_group") or raw.get("type") or "") + schema = label_map.get(label.casefold()) + if schema is None: + continue + mention = str(raw.get("text") or raw.get("span") or raw.get("mention") or "") + start = _as_int(raw.get("start")) + end = _as_int(raw.get("end")) + if start is None or end is None: + start, end = _find_span(text, mention) + if start is None or end is None: + continue + mention = text[start:end] + score = float(raw.get("score") or raw.get("confidence") or 0.0) + if score < schema.threshold: + continue + parsed.append( + EntityAnnotation( + entity_group=schema.entity_group, + text=mention, + start=start, + end=end, + score=score, + normalized_id=(NO_ENTITY_ID,), + schema_id=schema.id, + ) + ) + return parsed + + +def _find_span(text: str, mention: str) -> tuple[int | None, int | None]: + if not mention: + return None, None + start = text.casefold().find(mention.casefold()) + if start < 0: + return None, None + return start, start + len(mention) + + +def _as_int(value: Any) -> int | None: + try: + if value is None: + return None + return int(value) + except (TypeError, ValueError): + return None + + +def with_schema_threshold( + annotation: EntityAnnotation, + schemas: Sequence[EntitySchema], +) -> EntityAnnotation | None: + schema = next((item for item in schemas if item.id == annotation.schema_id), None) + if schema is not None and annotation.score < schema.threshold: + return None + return replace(annotation) diff --git a/source/Matcher/entities/schemas.py b/source/Matcher/entities/schemas.py new file mode 100644 index 00000000..db3a182d --- /dev/null +++ b/source/Matcher/entities/schemas.py @@ -0,0 +1,104 @@ +from __future__ import annotations + +from importlib import resources +from pathlib import Path +from typing import Any + +import yaml + +from Matcher.entities.types import EntitySchema + + +DEFAULT_SCHEMA_RESOURCE = "entity_schemas/trialmatchai.yaml" + + +class EntitySchemaError(ValueError): + pass + + +def default_schema_path() -> Path: + return Path(str(resources.files("Matcher").joinpath(DEFAULT_SCHEMA_RESOURCE))) + + +def load_entity_schemas(path: str | Path | None = None) -> list[EntitySchema]: + schema_path = Path(path).expanduser() if path else default_schema_path() + with schema_path.open("r", encoding="utf-8") as handle: + raw = yaml.safe_load(handle) or {} + return parse_entity_schemas(raw) + + +def parse_entity_schemas(raw: dict[str, Any]) -> list[EntitySchema]: + entries = raw.get("entities") + if not isinstance(entries, list) or not entries: + raise EntitySchemaError("Entity schema must contain a non-empty 'entities' list.") + + schemas: list[EntitySchema] = [] + seen_ids: set[str] = set() + for entry in entries: + if not isinstance(entry, dict): + raise EntitySchemaError("Each entity schema entry must be an object.") + + schema_id = _required_string(entry, "id") + if schema_id in seen_ids: + raise EntitySchemaError(f"Duplicate entity schema id: {schema_id}") + seen_ids.add(schema_id) + + threshold = float(entry.get("threshold", 0.8)) + if not 0 <= threshold <= 1: + raise EntitySchemaError( + f"Entity schema '{schema_id}' threshold must be between 0 and 1." + ) + + target_vocabularies = _string_tuple(entry.get("target_vocabularies", ())) + if entry.get("linkable_fields", ["text"]) and not target_vocabularies: + raise EntitySchemaError( + f"Entity schema '{schema_id}' is linkable but has no target vocabularies." + ) + + schemas.append( + EntitySchema( + id=schema_id, + label=_required_string(entry, "label"), + entity_group=str(entry.get("entity_group") or schema_id), + description=_required_string(entry, "description"), + target_vocabularies=target_vocabularies, + domain_hints=_string_tuple(entry.get("domain_hints", ())), + linkable_fields=_string_tuple(entry.get("linkable_fields", ("text",))), + threshold=threshold, + query_expansion=bool(entry.get("query_expansion", False)), + patterns=_string_tuple(entry.get("patterns", ())), + aliases=_string_tuple(entry.get("aliases", ())), + ) + ) + return schemas + + +def schema_by_label(schemas: list[EntitySchema]) -> dict[str, EntitySchema]: + mapping: dict[str, EntitySchema] = {} + for schema in schemas: + for label in schema.recognizer_labels: + mapping[label.casefold()] = schema + return mapping + + +def _required_string(entry: dict[str, Any], key: str) -> str: + value = entry.get(key) + if not isinstance(value, str) or not value.strip(): + raise EntitySchemaError(f"Entity schema field '{key}' must be a non-empty string.") + return value.strip() + + +def _string_tuple(value: Any) -> tuple[str, ...]: + if value is None: + return () + if isinstance(value, str): + return (value.strip(),) if value.strip() else () + if not isinstance(value, list | tuple): + raise EntitySchemaError("Schema string-list fields must be strings or lists.") + cleaned = [] + for item in value: + if not isinstance(item, str): + raise EntitySchemaError("Schema string-list fields may only contain strings.") + if item.strip(): + cleaned.append(item.strip()) + return tuple(cleaned) diff --git a/source/Matcher/entities/types.py b/source/Matcher/entities/types.py new file mode 100644 index 00000000..970647ab --- /dev/null +++ b/source/Matcher/entities/types.py @@ -0,0 +1,141 @@ +from __future__ import annotations + +from dataclasses import dataclass, field +from typing import Any + + +NO_ENTITY_ID = "CUI-less" + + +@dataclass(frozen=True) +class EntitySchema: + id: str + label: str + entity_group: str + description: str + target_vocabularies: tuple[str, ...] = () + domain_hints: tuple[str, ...] = () + linkable_fields: tuple[str, ...] = ("text",) + threshold: float = 0.8 + query_expansion: bool = False + patterns: tuple[str, ...] = () + aliases: tuple[str, ...] = () + + @property + def is_linkable(self) -> bool: + return bool(self.linkable_fields) + + @property + def recognizer_labels(self) -> tuple[str, ...]: + labels = [self.label, self.id, self.entity_group, *self.aliases] + return tuple(dict.fromkeys(label for label in labels if label)) + + +@dataclass(frozen=True) +class ConceptCandidate: + concept_id: str + vocabulary_id: str + concept_code: str + concept_name: str + domain_id: str = "" + concept_class_id: str = "" + standard_concept: str = "" + synonyms: tuple[str, ...] = () + score: float = 0.0 + source_scores: dict[str, float] = field(default_factory=dict) + + @property + def normalized_id(self) -> str: + return normalize_concept_id(self.vocabulary_id, self.concept_code) + + def to_dict(self) -> dict[str, Any]: + return { + "concept_id": self.concept_id, + "vocabulary_id": self.vocabulary_id, + "concept_code": self.concept_code, + "concept_name": self.concept_name, + "domain_id": self.domain_id, + "concept_class_id": self.concept_class_id, + "standard_concept": self.standard_concept, + "synonyms": list(self.synonyms), + "score": self.score, + "source_scores": dict(self.source_scores), + "normalized_id": self.normalized_id, + } + + +@dataclass(frozen=True) +class EntityAnnotation: + entity_group: str + text: str + start: int + end: int + score: float + normalized_id: tuple[str, ...] = (NO_ENTITY_ID,) + synonyms: tuple[str, ...] = () + concept_candidates: tuple[ConceptCandidate, ...] = () + linker_score: float | None = None + linker_status: str = "not_linked" + schema_id: str | None = None + + def to_dict(self) -> dict[str, Any]: + return { + "entity_group": self.entity_group, + "text": self.text, + "start": self.start, + "end": self.end, + "score": self.score, + "normalized_id": list(self.normalized_id), + "synonyms": list(self.synonyms), + "concept_candidates": [ + candidate.to_dict() for candidate in self.concept_candidates + ], + "linker_score": self.linker_score, + "linker_status": self.linker_status, + } + + def to_index_entity(self) -> dict[str, Any]: + data = self.to_dict() + data["entity"] = self.text + data["class"] = self.entity_group + return data + + +def normalize_concept_id(vocabulary_id: str, concept_code: str) -> str: + vocab = vocabulary_id.strip() + code = concept_code.strip() + if not vocab or not code: + return NO_ENTITY_ID + if ":" in code: + return code + + canonical_vocab = { + "SNOMED": "SNOMED", + "SNOMEDCT": "SNOMED", + "ICD10": "ICD10", + "ICD10CM": "ICD10CM", + "LOINC": "LOINC", + "RXNORM": "RxNorm", + "RXNORM EXTENSION": "RxNorm", + "ATC": "ATC", + "ENTREZGENE": "EntrezGene", + "NCBIGENE": "EntrezGene", + "CELLOSAURUS": "Cellosaurus", + "NCBITAXON": "NCBITaxon", + }.get(vocab.upper(), vocab) + return f"{canonical_vocab}:{code}" + + +def dedupe_strings(values: list[str] | tuple[str, ...]) -> tuple[str, ...]: + seen: set[str] = set() + deduped: list[str] = [] + for value in values: + cleaned = value.strip() + if not cleaned: + continue + key = cleaned.casefold() + if key in seen: + continue + seen.add(key) + deduped.append(cleaned) + return tuple(deduped) diff --git a/source/Matcher/entity_schemas/trialmatchai.yaml b/source/Matcher/entity_schemas/trialmatchai.yaml new file mode 100644 index 00000000..95acc4fc --- /dev/null +++ b/source/Matcher/entity_schemas/trialmatchai.yaml @@ -0,0 +1,122 @@ +version: 1 +entities: + - id: disease + label: disease or condition + entity_group: disease + description: Diagnosed diseases, clinical conditions, syndromes, and disorders. + aliases: [condition, disorder, syndrome] + target_vocabularies: [SNOMED, ICD10, ICD10CM] + domain_hints: [Condition] + linkable_fields: [text] + threshold: 0.80 + query_expansion: true + patterns: + - "\\b(?:cancer|carcinoma|diabetes|melanoma|leukemia|lymphoma|asthma|hypertension)\\b" + - id: gene + label: gene + entity_group: gene + description: Human genes or gene products mentioned as trial criteria. + aliases: [gene symbol, biomarker] + target_vocabularies: [EntrezGene] + domain_hints: [Gene] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:BRCA1|BRCA2|EGFR|ALK|KRAS|BRAF|TP53|ERBB2|HER2)\\b" + - id: medication + label: drug or medication + entity_group: drug + description: Drugs, medications, biologics, compounds, and therapeutic agents. + aliases: [drug, medication, biologic, compound] + target_vocabularies: [RxNorm, ATC] + domain_hints: [Drug] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:aspirin|metformin|pembrolizumab|nivolumab|cisplatin|paclitaxel)\\b" + - id: procedure + label: procedure + entity_group: procedure + description: Clinical procedures, interventions, treatments, and surgeries. + aliases: [treatment, surgical procedure, intervention] + target_vocabularies: [SNOMED] + domain_hints: [Procedure] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:surgery|radiotherapy|chemotherapy|biopsy|transplantation)\\b" + - id: diagnostic_test + label: diagnostic test + entity_group: diagnostic test + description: Diagnostic assays and tests used to establish eligibility. + aliases: [test, assay] + target_vocabularies: [LOINC, SNOMED] + domain_hints: [Measurement, Procedure] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:MRI|CT scan|PET scan|biopsy|ECG|EKG)\\b" + - id: laboratory_test + label: laboratory test + entity_group: laboratory test + description: Laboratory measurements, lab panels, biomarkers, and analytes. + aliases: [lab test, laboratory value, analyte] + target_vocabularies: [LOINC] + domain_hints: [Measurement] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:hemoglobin|creatinine|ALT|AST|bilirubin|platelet count)\\b" + - id: radiology + label: radiology + entity_group: radiology + description: Imaging modalities and radiology findings used in criteria. + aliases: [imaging] + target_vocabularies: [LOINC, SNOMED] + domain_hints: [Measurement, Procedure] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:radiograph|ultrasound|mammogram|MRI|CT)\\b" + - id: sign_symptom + label: sign or symptom + entity_group: sign symptom + description: Patient signs, symptoms, and clinical findings. + aliases: [symptom, sign] + target_vocabularies: [SNOMED] + domain_hints: [Condition, Observation] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:fever|pain|fatigue|nausea|dyspnea|cough)\\b" + - id: cell_type + label: cell type + entity_group: cell type + description: Cell types, immune cells, and tissue cell populations. + aliases: [cell population] + target_vocabularies: [Cellosaurus] + domain_hints: [Cell] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:T cell|B cell|macrophage|neutrophil|fibroblast)\\b" + - id: species + label: species + entity_group: species + description: Species and organisms in translational eligibility criteria. + aliases: [organism] + target_vocabularies: [NCBITaxon] + domain_hints: [Species] + linkable_fields: [text] + threshold: 0.80 + query_expansion: false + patterns: + - "\\b(?:human|mouse|rat|zebrafish|macaque)\\b" diff --git a/source/Matcher/main.py b/source/Matcher/main.py index b722de6b..acf278f6 100644 --- a/source/Matcher/main.py +++ b/source/Matcher/main.py @@ -11,6 +11,7 @@ from Matcher.models.llm.llm_loader import load_model_and_tokenizer from Matcher.models.llm.llm_reranker import LLMReranker from Matcher.models.llm.vllm_loader import load_vllm_engine +from Matcher.entities import build_entity_annotator from Matcher.pipeline.cot_reasoning import BatchTrialProcessor from Matcher.pipeline.cot_reasoning_vllm import BatchTrialProcessorVLLM from Matcher.pipeline.phenopacket_processor import process_phenopacket @@ -21,7 +22,6 @@ ) from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch from Matcher.pipeline.trial_search.second_level_search import SecondStageRetriever -from Matcher.services.biomedner_service import initialize_biomedner_services from Matcher.services.elasticsearch_service import ( build_elasticsearch_client, ensure_elasticsearch, @@ -45,7 +45,7 @@ def run_first_level_search( keywords: Dict, output_folder: str, patient_info: Dict, - bio_med_ner, + entity_annotator, embedder: TextEmbedder, config: Dict, es_client: Elasticsearch, @@ -64,7 +64,12 @@ def run_first_level_search( overall_status = "All" index_name = config["elasticsearch"]["index_trials"] - cts = ClinicalTrialSearch(es_client, embedder, index_name, bio_med_ner) + cts = ClinicalTrialSearch( + es_client, + embedder, + index_name, + entity_annotator=entity_annotator, + ) # Get synonyms and expand main conditions synonyms = cts.get_synonyms(condition.lower().strip()) @@ -250,9 +255,6 @@ def main_pipeline(config_path: str | None = None) -> int: if hasattr(torch.backends.cuda, "enable_flash_sdp"): torch.backends.cuda.enable_flash_sdp(True) - initialize_biomedner_services(config) - from Parser.biomedner_engine import BioMedNER - import warnings with warnings.catch_warnings(): @@ -286,7 +288,7 @@ def main_pipeline(config_path: str | None = None) -> int: normalize=embedder_cfg.get("normalize", True), ) ) - bio_med_ner = BioMedNER(**config["bio_med_ner"]) + entity_annotator = build_entity_annotator(config, embedder=embedder) with warnings.catch_warnings(): warnings.filterwarnings( @@ -306,7 +308,7 @@ def main_pipeline(config_path: str | None = None) -> int: llm_reranker=llm_reranker, embedder=embedder, index_name=config["elasticsearch"]["index_trials_eligibility"], - bio_med_ner=bio_med_ner, + entity_annotator=entity_annotator, ) # Process phenopackets @@ -352,7 +354,7 @@ def main_pipeline(config_path: str | None = None) -> int: keywords, str(output_folder), patient_info, - bio_med_ner, + entity_annotator, embedder, config, es_client, diff --git a/source/Matcher/pipeline/trial_search/first_level_search.py b/source/Matcher/pipeline/trial_search/first_level_search.py index 547b44db..324e2ac7 100644 --- a/source/Matcher/pipeline/trial_search/first_level_search.py +++ b/source/Matcher/pipeline/trial_search/first_level_search.py @@ -17,19 +17,20 @@ def __init__( es_client: Elasticsearch, embedder: Optional[TextEmbedder], index_name: str, - bio_med_ner, + bio_med_ner=None, + entity_annotator=None, ): self.es_client = es_client self.embedder = embedder self.index_name = index_name - self.bio_med_ner = bio_med_ner + self.entity_annotator = entity_annotator or bio_med_ner def get_synonyms(self, condition: str) -> List[str]: - if not self.bio_med_ner: - logger.info("BioMedNER disabled; skipping synonyms extraction.") + if not self.entity_annotator: + logger.info("Entity annotator disabled; skipping synonyms extraction.") return [] try: - raw_result = self.bio_med_ner.annotate_texts_in_parallel( + raw_result = self.entity_annotator.annotate_texts_in_parallel( [condition], max_workers=1 ) ner_results = raw_result @@ -41,7 +42,7 @@ def get_synonyms(self, condition: str) -> List[str]: return list(synonyms) logger.warning(f"No annotations found for condition: {condition}") except Exception as e: - logger.error(f"BioMedNER synonym extraction failed for '{condition}': {e}") + logger.error(f"Entity synonym extraction failed for '{condition}': {e}") return [] def parse_age_input(self, age_input: Union[int, str]) -> Optional[int]: diff --git a/source/Matcher/pipeline/trial_search/second_level_search.py b/source/Matcher/pipeline/trial_search/second_level_search.py index 4bc1c78a..ffbd49aa 100644 --- a/source/Matcher/pipeline/trial_search/second_level_search.py +++ b/source/Matcher/pipeline/trial_search/second_level_search.py @@ -25,6 +25,7 @@ def __init__( inclusion_weight: float = 1.0, exclusion_weight: float = 0.25, bio_med_ner=None, + entity_annotator=None, search_mode: str = "hybrid", ): self.es_client = es_client @@ -34,14 +35,14 @@ def __init__( self.size = size self.inclusion_weight = inclusion_weight self.exclusion_weight = exclusion_weight - self.bio_med_ner = bio_med_ner + self.entity_annotator = entity_annotator or bio_med_ner self.search_mode = search_mode.lower() if search_mode else "hybrid" def get_synonyms(self, condition: str) -> List[str]: - if self.bio_med_ner is None: - logger.warning("BioMedNER not initialized; cannot extract synonyms.") + if self.entity_annotator is None: + logger.warning("Entity annotator not initialized; cannot extract synonyms.") return [] - raw_result = self.bio_med_ner.annotate_texts_in_parallel( + raw_result = self.entity_annotator.annotate_texts_in_parallel( [condition], max_workers=1 ) ner_results = raw_result @@ -60,10 +61,10 @@ def retrieve_criteria( query_to_hits = {} def execute_query(query): - # Use entities.synonyms only if BioMedNER is enabled + # Use entities.synonyms only if entity annotation is enabled. fields_to_search = ( ["criterion", "entities.synonyms"] - if self.bio_med_ner is not None + if self.entity_annotator is not None else ["criterion"] ) @@ -225,10 +226,10 @@ def execute_query(query): return query, [] def execute_query_bm25(query): - # Helper function for BM25-only fallback + # Helper function for BM25-only fallback. fields_to_search = ( ["criterion", "entities.synonyms"] - if self.bio_med_ner is not None + if self.entity_annotator is not None else ["criterion"] ) es_query = { diff --git a/source/Matcher/services/biomedner_service.py b/source/Matcher/services/biomedner_service.py deleted file mode 100644 index 68427a82..00000000 --- a/source/Matcher/services/biomedner_service.py +++ /dev/null @@ -1,44 +0,0 @@ -import socket -import subprocess -import time - -from Matcher.utils.logging_config import setup_logging - -logger = setup_logging(__name__) - - -def is_port_in_use(port: int, host: str = "127.0.0.1") -> bool: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - return s.connect_ex((host, port)) == 0 - - -def check_ports_in_use(ports: list) -> bool: - return any(is_port_in_use(port) for port in ports) - - -def run_script(script_path: str): - logger.info(f"Executing: {script_path}") - subprocess.run(["bash", script_path], check=True) - - -def initialize_biomedner_services(config: dict): - if not config.get("services", {}).get("auto_start", False): - logger.info( - "BioMedNER auto-start is disabled. Set TRIALMATCHAI_BIOMEDNER_AUTO_START=true to start local services." - ) - return - - ports_to_check = [ - config["bio_med_ner"]["biomedner_port"], - config["bio_med_ner"]["gner_port"], - config["bio_med_ner"]["gene_norm_port"], - config["bio_med_ner"]["disease_norm_port"], - ] - if check_ports_in_use(ports_to_check): - logger.info("Detected active services. Stopping running instances...") - run_script(config["services"]["stop_script"]) - logger.info("Waiting for 10 seconds before restarting...") - time.sleep(10) - logger.info("Starting BioMedNER services...") - run_script(config["services"]["run_script"]) - logger.info("BioMedNER services started successfully.") diff --git a/source/Matcher/services/preflight.py b/source/Matcher/services/preflight.py index 52670b12..57273448 100644 --- a/source/Matcher/services/preflight.py +++ b/source/Matcher/services/preflight.py @@ -48,6 +48,34 @@ def run_preflight_checks( ) if require_models: + entity_cfg = config.get("entity_extraction") + if entity_cfg: + _require_path( + issues, + "entity_extraction.schema_path", + entity_cfg.get("schema_path"), + required=True, + ) + backend = entity_cfg.get("backend", "gliner2") + if backend == "gliner2" and importlib.util.find_spec("gliner2") is None: + issues.append( + "entity_extraction.backend=gliner2 requires the entity extra " + "(`uv sync --extra entity`)." + ) + elif backend == "gliner" and importlib.util.find_spec("gliner") is None: + issues.append( + "entity_extraction.backend=gliner requires the GLiNER dependency." + ) + + linker_cfg = config.get("concept_linker") + if linker_cfg and linker_cfg.get("enabled", True): + _require_path( + issues, + "concept_linker.db_path", + linker_cfg.get("db_path"), + required=False, + ) + model_cfg = config.get("model", {}) _require_path( issues, diff --git a/source/Parser/bin/crf_learn b/source/Parser/bin/crf_learn deleted file mode 100755 index 410b4cbb9ef66fcd561b01e0c2dc8be7cc6f41f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15960 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 replace it w/ a space") - text = text.replace(old, new) - - text = text.encode("ascii", "ignore").decode() - - tokens = text.split(" ") - for idx, tk in enumerate(tokens): - if len(tk) > self.max_word_len: - tokens[idx] = tk[: self.max_word_len] - self.print_log("Found a too long word -> cut the suffix of the word") - text = " ".join(tokens) - - return text - - def tag_entities(self, text, base_name, biomedner_home): - n_ascii_letters = sum(1 for char in text if char in string.ascii_letters) - if n_ascii_letters == 0: - return "No ascii letters. Please enter your text in English.", "" - - pubtator_file = f"{base_name}.PubTator" - input_data = f"{base_name}|t|\n{base_name}|a|{text}\n\n" - - input_biomedner = os.path.join( - self.input_dir, f"{pubtator_file}.biomedner.PubTator" - ) - output_biomedner = os.path.join( - self.output_dir, f"{pubtator_file}.biomedner.json" - ) - input_gner = os.path.join(self.input_dir, f"{pubtator_file}.gner.PubTator") - output_gner = os.path.join(self.output_dir, f"{pubtator_file}.gner.json") - - self.create_directories([self.input_dir, self.output_dir]) - - # Write input files sequentially - for path in [input_biomedner, input_gner]: - self.write_to_file(path, input_data) - - ner_start_time = time.time() - - async_result = asyncio.run( - self.async_ner( - [ - ("biomedner", pubtator_file, output_biomedner, biomedner_home), - ("gner", pubtator_file, output_gner, biomedner_home), - ] - ) - ) - - ner_elapse_time = time.time() - ner_start_time - async_result["ner_elapse_time"] = ner_elapse_time + def load_dictionary_file(file_path: str | Path) -> list[str]: + with Path(file_path).open("r", encoding="utf-8") as handle: + return handle.read().splitlines() - tagged_docs = async_result["biomedner_tagged_docs"] - gner_entities = async_result["gner_tagged_docs"] + def annotate_text(self, text: str) -> list[dict[str, Any]]: + return self._annotator.annotate_text(text) - r_norm_start_time = time.time() - tagged_docs = self.normalize_entities( - tagged_docs, async_result["biomedner_num_entities"], base_name - ) - gner_entities = self.normalize_entities( - gner_entities, async_result["gner_num_entities"], base_name - ) - r_norm_elapse_time = time.time() - r_norm_start_time - async_result["r_norm_elapse_time"] = r_norm_elapse_time - - n_norm_start_time = time.time() - if self.normalizer.use_neural_normalizer: - if async_result["biomedner_num_entities"] > 0: - tagged_docs = self.normalizer.neural_normalize( - ent_type="disease", tagged_docs=tagged_docs - ) - tagged_docs = self.normalizer.neural_normalize( - ent_type="drug", tagged_docs=tagged_docs - ) - tagged_docs = self.normalizer.neural_normalize( - ent_type="gene", tagged_docs=tagged_docs - ) - n_norm_elapse_time = time.time() - n_norm_start_time - async_result["n_norm_elapse_time"] = n_norm_elapse_time - - tagged_docs[0] = get_pub_annotation(tagged_docs[0]) - tagged_docs[0]["elapse_time"] = self.get_elapsed_times(async_result) - - gner_entities[0] = get_pub_annotation(gner_entities[0]) - gner_entities[0]["elapse_time"] = { - "gner_elapse_time": async_result["gner_elapse_time"] - } - - self.cleanup_temp_files( - [input_biomedner, output_biomedner, input_gner, output_gner] + def annotate_texts_in_parallel( + self, + texts: Sequence[str], + max_workers: int = 20, + retries: int = 1, + delay: float = 0, + ) -> list[list[dict[str, Any]]]: + return self._annotator.annotate_texts_in_parallel( + texts, + max_workers=max_workers, + retries=retries, + delay=delay, ) - gc.collect() - return tagged_docs[0], gner_entities[0] - - def get_elapsed_times(self, async_result): - return { - "biomedner_elapse_time": async_result["biomedner_elapse_time"], - "gner_elapse_time": async_result["gner_elapse_time"], - "ner_elapse_time": async_result["ner_elapse_time"], - "r_norm_elapse_time": async_result["r_norm_elapse_time"], - "n_norm_elapse_time": async_result["n_norm_elapse_time"], - "norm_elapse_time": async_result["r_norm_elapse_time"] - + async_result["n_norm_elapse_time"], - } - - def normalize_entities(self, entities, num_entities, base_name): - if num_entities > 0: - entities = self.normalizer.normalize(base_name, entities) - return entities - - def write_to_file(self, path, data): - with open(path, "w", encoding="utf-8") as f: - f.write(data) - - def generate_base_name(self, text): - return hashlib.sha224((text + str(time.time())).encode("utf-8")).hexdigest() - - async def async_ner(self, arguments): - coroutines = [self._ner_wrap(arg) for arg in arguments] - result = await asyncio.gather(*coroutines) - return {k: v for e in result if e is not None for k, v in e.items()} - - async def _ner_wrap(self, ner_type_info): - ner_type, pubtator_file, output_file, biomedner_home = ner_type_info - retries = 1 - for _ in range(retries): - try: - start_time = time.time() - await async_tell_inputfile( - self.biomedner_host, - self.biomedner_port if ner_type == "biomedner" else self.gner_port, - biomedner_home, - pubtator_file, - asyncio.get_event_loop(), - ) - with open(output_file, "r", encoding="utf-8") as f: - content = f.read() - try: - tagged_docs = [json.loads(content)] - except json.JSONDecodeError as e: - self.print_log(f"JSON decode error: {e}") - continue - - num_entities = tagged_docs[0]["num_entities"] - if tagged_docs is None: - return None - - elapse_time = time.time() - start_time - return { - f"{ner_type}_elapse_time": elapse_time, - f"{ner_type}_tagged_docs": tagged_docs, - f"{ner_type}_num_entities": num_entities, - } - - except json.JSONDecodeError as e: - self.print_log(f"JSON decode error: {e}") - time.sleep(0) - - raise Exception("Failed to decode JSON after multiple attempts") - - def cleanup_temp_files(self, files): - for f in files: - if os.path.exists(f): - os.remove(f) - - def annotate_single_text_with_retry(self, text, retries=1, delay=0): - for attempt in range(retries): - try: - return self.annotate_text(text) - except (ConnectionResetError, ConnectionRefusedError) as e: - self.print_log( - f"Error: {e}. Retrying {attempt + 1}/{retries} in {delay} seconds..." - ) - time.sleep(delay) - raise Exception(f"Failed to annotate text after {retries} attempts: {text}") +def _default_config() -> dict[str, Any]: + return { + "entity_extraction": { + "backend": "gliner2", + "model_name": "fastino/gliner2-base", + "fallback_model_name": "gliner-community/gliner_large-v2.5", + "schema_path": str(_repo_root() / "source/Matcher/entity_schemas/trialmatchai.yaml"), + "batch_size": 8, + "device": "auto", + "trust_remote_code": False, + }, + "concept_linker": { + "enabled": True, + "db_path": str(_repo_root() / "data/concepts"), + "table": "concepts", + "accept_threshold": 0.8, + "reject_threshold": 0.3, + "search_limit": 10, + }, + } - def annotate_texts_in_parallel(self, texts, max_workers=20, retries=1, delay=0): - # Reduced max_workers to avoid overwhelming the system - from typing import Any - results: list[Any] = [None] * len(texts) - with ThreadPoolExecutor(max_workers=max_workers) as executor: - future_to_index = { - executor.submit( - self.annotate_single_text_with_retry, text, retries, delay - ): i - for i, text in enumerate(texts) +def _repo_root() -> Path: + start = Path(__file__).resolve() + for parent in start.parents: + if (parent / "pyproject.toml").exists(): + return parent + return Path.cwd().resolve() + + +def transform_results(data: dict[str, Any]) -> list[dict[str, Any]]: + """Best-effort adapter for callers that still pass PubTator-style JSON.""" + annotations = data.get("annotations", []) if isinstance(data, dict) else [] + results: list[dict[str, Any]] = [] + for annotation in annotations: + span = annotation.get("span", {}) + results.append( + { + "entity_group": annotation.get("obj", ""), + "score": annotation.get("prob", 0.0), + "text": annotation.get("mention", ""), + "start": span.get("begin", 0), + "end": span.get("end", 0), + "normalized_id": annotation.get("id", ["CUI-less"]), + "synonyms": [], + "concept_candidates": [], + "linker_score": None, + "linker_status": "not_linked", } - while future_to_index: - done, _ = wait(future_to_index, return_when=ALL_COMPLETED) - for future in done: - index = future_to_index.pop(future) - try: - results[index] = future.result() - except Exception as exc: - self.print_log( - f"Text at index {index} generated an exception: {exc}" - ) - results[index] = {"error_code": 1, "error_message": str(exc)} - gc.collect() - return results - - -async def async_tell_inputfile(host, port, biomedner_home, inputfile, loop): - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - try: - sock.connect((host, port)) - message = json.dumps({"biomedner_home": biomedner_home, "inputfile": inputfile}) - input_stream = struct.pack(">H", len(message)) + message.encode("utf-8") - sock.send(input_stream) - output_stream = await loop.run_in_executor(None, sock.recv, 512) - resp = output_stream.decode("utf-8") - sock.close() - return resp - except (ConnectionRefusedError, TimeoutError, ConnectionResetError) as e: - print(e) - return None - - -def append_synonyms(ner_results, dict_paths): - """ - Append synonyms to NER results based on normalized IDs and dictionary paths. - - Args: - ner_results (list): List of dictionaries containing NER results with entity groups and normalized IDs. - dict_paths (dict): Mapping of dictionary types (e.g., 'gene', 'disease') to file paths. + ) + return results - Returns: - None: Updates ner_results in place by appending 'synonyms' to each entity. - """ - # Map entity groups to the corresponding dictionary keys - entity_group_to_dict = { - "gene": "gene", - "disease": "disease", - "sign symptom": "sign symptom", - "cell type": "cell type", - "drug": "drug", - "diagnostic test": "procedure", - "treatment": "procedure", - "laboratory test": "procedure", - "radiology": "procedure", - "surgical procedure": "procedure", - "genomic analysis technique": "procedure", - } +def append_synonyms( + ner_results: list[dict[str, Any]], dict_paths: dict[str, str | Path] +) -> None: + del dict_paths for entity in ner_results: - entity_group = entity["entity_group"].lower() - dict_key = entity_group_to_dict.get(entity_group) - if dict_key and dict_key in dict_paths: - file_path = dict_paths[dict_key] - if dict_key == "gene": - # Normalize gene IDs to match expected formats - entity["normalized_id"] = [ - nid.replace("NCBIGene:", "EntrezGene:") - for nid in entity["normalized_id"] - ] - entity["synonyms"] = get_synonyms_from_file( - file_path, entity["normalized_id"] - ) - else: - entity["synonyms"] = [] - - -def get_synonyms_from_file(file_path, entity_ids): - """ - Retrieve synonyms from the dictionary file based on normalized IDs. - - Args: - file_path (str): Path to the dictionary file. - entity_ids (list): List of normalized IDs to find synonyms for. - - Returns: - list: List of unique synonyms associated with the given IDs. - """ - entity_dict = {} - - # Load the dictionary - with open(file_path, "r", encoding="utf-8") as file: - for line in file: - parts = line.strip().split("||") - if len(parts) > 1: - # First part is the ID(s), second part is the synonyms - ids = parts[0].split(",") # Handles potential multiple IDs - synonyms = parts[1].split("|") # Synonyms are separated by '|' - for nid in ids: - nid = nid.strip().upper() # Normalize to uppercase - if nid not in entity_dict: - entity_dict[nid] = set() - entity_dict[nid].update(name.strip() for name in synonyms) - - # Collect synonyms for the provided entity IDs - synonyms = set() - for nid in entity_ids: - nid = nid.strip().upper() # Normalize input ID to uppercase - synonyms.update(entity_dict.get(nid, set())) # Add synonyms if the ID exists - - return list(synonyms) - - -def transform_results(data): - relevant_objs = { - "gene", - "disease", - "drug", - "cell type", - "sign symptom", - "diagnostic test", - "treatment", - "laboratory test", - "surgical procedure", - "radiology", - "genomic analysis technique", - } - - # Filter and transform the data into the desired format using a list comprehension - all_entities = [ - { - "entity_group": annotation["obj"], - "score": annotation["prob"], - "text": annotation["mention"], - "start": annotation["span"]["begin"], - "end": annotation["span"]["end"], - "normalized_id": annotation["id"], - } - for annotation in data["annotations"] - if annotation["prob"] >= 0.8 and annotation["obj"] in relevant_objs - ] - - # Sort entities by descending score - all_entities.sort(key=lambda x: -x["score"]) - - # Initialize structures for efficient overlap detection - accepted_starts = [] - accepted_ends = [] - non_overlapping_entities = [] - - for entity in all_entities: - start, end = entity["start"], entity["end"] - - # Use bisect to find the insertion point for the current entity's start - i = bisect.bisect_left(accepted_starts, start) - - overlap = False - # Check for overlap with the previous accepted entity - if i > 0 and accepted_ends[i - 1] > start: - overlap = True - # Check for overlap with the next accepted entity - if i < len(accepted_starts) and accepted_starts[i] < end: - overlap = True - - if not overlap: - # Insert the current entity into the accepted lists - bisect.insort(accepted_starts, start) - bisect.insort(accepted_ends, end) - non_overlapping_entities.append(entity) - - # Sort the final entities by start and end positions - non_overlapping_entities.sort(key=lambda x: (x["start"], x["end"])) - - return non_overlapping_entities - - -if __name__ == "__main__": - import argparse - - argparser = argparse.ArgumentParser() - argparser.add_argument( - "--max_word_len", type=int, help="word max chars", default=50 - ) - argparser.add_argument("--seed", type=int, help="seed value", default=2019) - argparser.add_argument("--biomedner_home", help="biomedical language model home") - argparser.add_argument( - "--biomedner_host", help="biomedical language model host", default="localhost" - ) - argparser.add_argument( - "--biomedner_port", - type=int, - help="biomedical language model port", - default=18894, - ) - argparser.add_argument("--gner_host", help="gner host", default="localhost") - argparser.add_argument("--gner_port", type=int, help="gner port", default=18783) - argparser.add_argument( - "--gene_norm_port", type=int, help="Gene port", default=18888 - ) - argparser.add_argument( - "--disease_norm_port", type=int, help="Sieve port", default=18892 - ) - argparser.add_argument( - "--time_format", help="time format", default="[%d/%b/%Y %H:%M:%S.%f]" - ) - argparser.add_argument("--use_neural_normalizer", action="store_true") - argparser.add_argument( - "--no_cuda", action="store_false", help="Avoid using CUDA when available" - ) - args = argparser.parse_args() + entity.setdefault("synonyms", []) - biomedner = BioMedNER( - max_word_len=args.max_word_len, - seed=args.seed, - gene_norm_port=args.gene_norm_port, - disease_norm_port=args.disease_norm_port, - biomedner_home=os.path.abspath(args.biomedner_home), - biomedner_host=args.biomedner_host, - biomedner_port=args.biomedner_port, - gner_host=args.gner_host, - gner_port=args.gner_port, - time_format=args.time_format, - use_neural_normalizer=args.use_neural_normalizer, - no_cuda=args.no_cuda, - ) - texts = ["colorectal cancer"] - results = biomedner.annotate_texts_in_parallel(texts, max_workers=5) - for result in results: - print(result) +def get_synonyms_from_file( + file_path: str | Path, entity_ids: Sequence[str] +) -> list[str]: + del file_path, entity_ids + return [] diff --git a/source/Parser/biomedner_init.py b/source/Parser/biomedner_init.py deleted file mode 100644 index 1eed3939..00000000 --- a/source/Parser/biomedner_init.py +++ /dev/null @@ -1,983 +0,0 @@ -import argparse -import json -import logging -import os -import time -from dataclasses import dataclass -from typing import Any, Callable, Dict, List, NamedTuple, NewType, Optional, Tuple - -import numpy as np -import torch -from models import BERTMultiNER2, RoBERTaMultiNER2 -from ops import ( - Profile, - detokenize, - get_prob, - input_form, - json_to_sent, - preprocess, -) -from torch import nn -from torch.utils.data.dataloader import DataLoader -from torch.utils.data.dataset import Dataset -from torch.utils.data.sampler import SequentialSampler -from tqdm import tqdm -from transformers import ( - AutoConfig, - AutoTokenizer, - PreTrainedTokenizer, - set_seed, -) - -logger = logging.getLogger(__name__) - -InputDataClass = NewType("InputDataClass", Any) -DataCollator = NewType( - "DataCollator", Callable[[List[InputDataClass]], Dict[str, torch.Tensor]] -) - - -@dataclass -class InputExample: - """ - A single training/test example for token classification. - - Args: - guid: Unique id for the example. - words: list. The words of the sequence. - labels: (Optional) list. The labels for each word of the sequence. This should be - specified for train and dev examples, but not for test examples. - """ - - guid: str - words: List[str] - labels: Optional[List[str]] - entity_labels: Optional[List[int]] - - -@dataclass -class InputFeatures: - """ - A single set of features of data. - Property names are the same names as the corresponding inputs to a model. - """ - - input_ids: List[int] - attention_mask: List[int] - token_type_ids: Optional[List[int]] = None - label_ids: Optional[List[int]] = None - entity_type_ids: Optional[List[int]] = None - - -class DataProcessor(object): - """Base class for data converters for sequence classification data sets.""" - - def get_train_examples(self, data_dir): - """Gets a collection of `InputExample`s for the train set.""" - raise NotImplementedError() - - def get_dev_examples(self, data_dir): - """Gets a collection of `InputExample`s for the dev set.""" - raise NotImplementedError() - - def get_labels(self): - """Gets the list of labels for this data set.""" - raise NotImplementedError() - - @classmethod - def _read_data(cls, data, pmids): - """Reads a BIO data.""" - lines = [] - words = [] - labels = [] - entity_labels = [] - for pmid in pmids: - for sent in data[pmid]["words"]: - words = sent[:] - labels = ["O"] * len(words) - entity_labels = [str(0)] * len(words) - - if len(words) >= 30: - while len(words) >= 30: - tmplabel = labels[:30] - label_text = " ".join( - [ - label - for label in labels[: len(tmplabel)] - if len(label) > 0 - ] - ) - w = " ".join( - [word for word in words[: len(tmplabel)] if len(word) > 0] - ) - e = " ".join( - [el for el in entity_labels[: len(tmplabel)] if len(el) > 0] - ) - lines.append([label_text, w, e]) - words = words[len(tmplabel) :] - labels = labels[len(tmplabel) :] - entity_labels = entity_labels[len(tmplabel) :] - if len(words) == 0: - continue - - label_text = " ".join([label for label in labels if len(label) > 0]) - w = " ".join([word for word in words if len(word) > 0]) - e = " ".join([el for el in entity_labels if len(entity_labels) > 0]) - lines.append([label_text, w, e]) - words = [] - labels = [] - entity_labels = [] - continue - - return lines - - -class NerDataset(Dataset): - """ - This will be superseded by a framework-agnostic approach soon. - """ - - features: List[InputFeatures] - pad_token_label_id: int = nn.CrossEntropyLoss().ignore_index - - def __init__( - self, - predict_examples, - labels: List[str], - tokenizer: PreTrainedTokenizer, - config, - params, - base_name, - ): - logger.info("Creating features from dataset file") - self.labels = labels - self.predict_examples = predict_examples - self.tokenizer = tokenizer - self.config = config - self.params = params - - self.features = convert_examples_to_features( - self.predict_examples, - self.labels, - self.params.max_seq_length, - self.tokenizer, - cls_token_at_end=bool(self.config.model_type in ["xlnet"]), - cls_token=self.tokenizer.cls_token, - cls_token_segment_id=2 if self.config.model_type in ["xlnet"] else 0, - sep_token=self.tokenizer.sep_token, - sep_token_extra=False, - pad_on_left=bool(self.tokenizer.padding_side == "left"), - pad_token=self.tokenizer.pad_token_id, - pad_token_segment_id=self.tokenizer.pad_token_type_id, - pad_token_label_id=self.pad_token_label_id, - base_name=base_name, - ) - - def __len__(self): - return len(self.features) - - def __getitem__(self, i) -> InputFeatures: - return self.features[i] - - -class PredictionOutput(NamedTuple): - predictions: np.ndarray - label_ids: Optional[np.ndarray] - - -def default_data_collator(features: List[InputDataClass]) -> Dict[str, torch.Tensor]: - """ - Very simple data collator that: - - simply collates batches of dict-like objects - - Performs special handling for potential keys named: - - `label`: handles a single value (int or float) per object - - `label_ids`: handles a list of values per object - - does not do any additional preprocessing - - i.e., Property names of the input object will be used as corresponding inputs to the model. - See glue and ner for example of how it's useful. - """ - - # In this function we'll make the assumption that all `features` in the batch - # have the same attributes. - # So we will look at the first element as a proxy for what attributes exist - # on the whole batch. - if not isinstance(features[0], dict): - features = [vars(f) for f in features] - - first = features[0] - batch = {} - - # Special handling for labels. - # Ensure that tensor is created with the correct type - # (it should be automatically the case, but let's make sure of it.) - if "label" in first and first["label"] is not None: - dtype = torch.long if type(first["label"]) is int else torch.float - batch["labels"] = torch.tensor([f["label"] for f in features], dtype=dtype) - elif "label_ids" in first and first["label_ids"] is not None: - if isinstance(first["label_ids"], torch.Tensor): - batch["labels"] = torch.stack([f["label_ids"] for f in features]) - else: - dtype = torch.long if type(first["label_ids"][0]) is int else torch.float - batch["labels"] = torch.tensor( - [f["label_ids"] for f in features], dtype=dtype - ) - - # Handling of all other possible keys. - # Again, we will use the first element to figure out which key/values are not None for this model. - for k, v in first.items(): - if k not in ("label", "label_ids") and v is not None and not isinstance(v, str): - if isinstance(v, torch.Tensor): - batch[k] = torch.stack([f[k] for f in features]) - else: - batch[k] = torch.tensor([f[k] for f in features], dtype=torch.long) - - return batch - - -def convert_examples_to_features( - examples: List[InputExample], - label_list: List[str], - max_seq_length: int, - tokenizer: PreTrainedTokenizer, - cls_token_at_end=False, - cls_token="[CLS]", - cls_token_segment_id=1, - sep_token="[SEP]", - sep_token_extra=False, - pad_on_left=False, - pad_token=0, - pad_token_segment_id=0, - pad_token_label_id=-100, - sequence_a_segment_id=0, - mask_padding_with_zero=True, - base_name="", -) -> List[InputFeatures]: - """Loads a data file into a list of `InputFeatures` - `cls_token_at_end` define the location of the CLS token: - - False (Default, BERT/XLM pattern): [CLS] + A + [SEP] + B + [SEP] - - True (XLNet/GPT pattern): A + [SEP] + B + [SEP] + [CLS] - `cls_token_segment_id` define the segment id associated to the CLS token (0 for BERT, 2 for XLNet) - """ - # TODO clean up all this to leverage built-in features of tokenizers - - label_map = {label: i for i, label in enumerate(label_list)} - features = [] - - for ex_index, example in tqdm(enumerate(examples)): - if ex_index % 10_000 == 0: - logger.info("Writing example %d of %d", ex_index, len(examples)) - - ( - tokens, - label_ids, - ) = [], [] - det_tokens = [] - - for word_idx, (word, label) in enumerate( - zip(example.words.split(), example.labels.split()) - ): - word_tokens = tokenizer.tokenize(word) - - # bert-base-multilingual-cased sometimes output "nothing ([]) when calling tokenize with just a space. - if len(word_tokens) > 0: - tokens.extend(word_tokens) - # Use the real label id for the first token of the word, and padding ids for the remaining tokens - label_ids.extend( - [label_map[label]] + [pad_token_label_id] * (len(word_tokens) - 1) - ) - - if len(word_tokens) == 1: - det_tokens.extend(word_tokens) - elif len(word_tokens) > 1: - for det_idx, det_word in enumerate(word_tokens): - if det_idx > 0: - det_word = "##" + det_word - det_tokens.append(det_word) - else: - det_tokens.append(det_word) - - # calculate temperature with length : temp = 1 - 0.02 * length - # temperature = [1 - sharpening * i if i > 1 else i for _, i in enumerate(entity_length)] - - # Account for [CLS] and [SEP] with "- 2" and with "- 3" for RoBERTa. - special_tokens_count = tokenizer.num_special_tokens_to_add() - ## truncating tokens with max_seq_length - # if len(tokens) > max_seq_length - special_tokens_count: - # tokens = tokens[: (max_seq_length - special_tokens_count)] - # label_ids = label_ids[: (max_seq_length - special_tokens_count)] - # det_tokens = det_tokens[: (max_seq_length - special_tokens_count)] - - # for sliding window tokens - update 23.11.13 - for i in range(0, (len(tokens) // max_seq_length) + 1): - if i == 0: - window_tokens = tokens[ - i * max_seq_length : (i + 1) * max_seq_length - special_tokens_count - ] - window_label_ids = label_ids[ - i * max_seq_length : (i + 1) * max_seq_length - special_tokens_count - ] - window_det_tokens = det_tokens[ - i * max_seq_length : (i + 1) * max_seq_length - special_tokens_count - ] - elif i >= 1: - window_tokens = tokens[ - i * max_seq_length - special_tokens_count : (i + 1) * max_seq_length - - special_tokens_count - ] - window_label_ids = label_ids[ - i * max_seq_length - special_tokens_count : (i + 1) * max_seq_length - - special_tokens_count - ] - window_det_tokens = det_tokens[ - i * max_seq_length - special_tokens_count : (i + 1) * max_seq_length - - special_tokens_count - ] - - # The convention in BERT is: - # (a) For sequence pairs: - # tokens: [CLS] is this jack ##son ##ville ? [SEP] no it is not . [SEP] - # type_ids: 0 0 0 0 0 0 0 0 1 1 1 1 1 1 - # (b) For single sequences: - # tokens: [CLS] the dog is hairy . [SEP] - # type_ids: 0 0 0 0 0 0 0 - # - # Where "type_ids" are used to indicate whether this is the first - # sequence or the second sequence. The embedding vectors for `type=0` and - # `type=1` were learned during pre-training and are added to the wordpiece - # embedding vector (and position vector). This is not *strictly* necessary - # since the [SEP] token unambiguously separates the sequences, but it makes - # it easier for the model to learn the concept of sequences. - # - # For classification tasks, the first vector (corresponding to [CLS]) is - # used as as the "sentence vector". Note that this only makes sense because - # the entire model is fine-tuned. - window_tokens += [sep_token] - window_label_ids += [pad_token_label_id] - window_det_tokens += [sep_token] - - if sep_token_extra: - # roberta uses an extra separator b/w pairs of sentences - window_tokens += [sep_token] - window_label_ids += [pad_token_label_id] - window_det_tokens += [sep_token] - - # make entity type label index for multiner - entity_type_ids = [int(example.entity_labels[0])] * len(window_tokens) - segment_ids = [sequence_a_segment_id] * len(window_tokens) - if cls_token_at_end: - window_tokens += [cls_token] - window_label_ids += [pad_token_label_id] - segment_ids += [cls_token_segment_id] - entity_type_ids += [int(example.entity_labels[0])] - window_det_tokens += [cls_token] - else: - window_tokens = [cls_token] + window_tokens - window_label_ids = [pad_token_label_id] + window_label_ids - segment_ids = [cls_token_segment_id] + segment_ids - entity_type_ids = [int(example.entity_labels[0])] + entity_type_ids - window_det_tokens = [cls_token] + window_det_tokens - - input_ids = tokenizer.convert_tokens_to_ids(window_tokens) - # The mask has 1 for real tokens and 0 for padding tokens. Only real - # tokens are attended to. - input_mask = [1 if mask_padding_with_zero else 0] * len(input_ids) - - # Zero-pad up to the sequence length. - padding_length = max_seq_length - len(input_ids) - - if pad_on_left: - input_ids = ([pad_token] * padding_length) + input_ids - input_mask = ( - [0 if mask_padding_with_zero else 1] * padding_length - ) + input_mask - segment_ids = ([pad_token_segment_id] * padding_length) + segment_ids - window_label_ids = ( - [pad_token_label_id] * padding_length - ) + window_label_ids - entity_type_ids = ( - [int(example.entity_labels[0])] * padding_length - ) + entity_type_ids - window_tokens = (["**NULL**"] * padding_length) + window_tokens - window_det_tokens = (["**NULL**"] * padding_length) + window_det_tokens - else: - input_ids += [pad_token] * padding_length - input_mask += [0 if mask_padding_with_zero else 1] * padding_length - segment_ids += [pad_token_segment_id] * padding_length - window_label_ids += [pad_token_label_id] * padding_length - entity_type_ids += [int(example.entity_labels[0])] * padding_length - window_tokens += ["**NULL**"] * padding_length - window_det_tokens += ["**NULL**"] * padding_length - - assert len(input_ids) == max_seq_length - assert len(input_mask) == max_seq_length - assert len(segment_ids) == max_seq_length - assert len(window_label_ids) == max_seq_length - assert len(entity_type_ids) == max_seq_length - assert len(window_tokens) == max_seq_length - - if ex_index < 1: - logger.info("*** Example ***") - logger.info("guid: %s", example.guid) - logger.info("tokens: %s", " ".join([str(x) for x in window_tokens])) - logger.info("input_ids: %s", " ".join([str(x) for x in input_ids])) - logger.info("input_mask: %s", " ".join([str(x) for x in input_mask])) - logger.info("segment_ids: %s", " ".join([str(x) for x in segment_ids])) - logger.info( - "label_ids: %s", " ".join([str(x) for x in window_label_ids]) - ) - logger.info( - "entity_type_ids: %s", " ".join([str(x) for x in entity_type_ids]) - ) - - if "token_type_ids" not in tokenizer.model_input_names: - segment_ids = None - - features.append( - InputFeatures( - input_ids=input_ids, - attention_mask=input_mask, - token_type_ids=segment_ids, - label_ids=window_label_ids, - entity_type_ids=entity_type_ids, - ) - ) - write_tokens(window_tokens, window_det_tokens, "test", base_name) - - return features - - -def write_tokens(tokens, det_tokens, mode, base_name): - if mode == "test": - tmp_path = os.path.join("multi_ner", "tmp") - if not os.path.exists(tmp_path): - os.makedirs(tmp_path) - - path = os.path.join( - "multi_ner", "tmp", "token_{}_{}.txt".format(mode, base_name) - ) - with open(path, "a") as wf: - for token in tokens: - if token != "**NULL**": - wf.write(token + "\n") - - det_path = os.path.join( - "multi_ner", "tmp", "det_token_{}_{}.txt".format(mode, base_name) - ) - with open(det_path, "a") as wf: - for token in det_tokens: - if token != "**NULL**": - wf.write(token + "\n") - - -class NerProcessor(DataProcessor): - def get_test_examples(self, data_dir): - data = list() - pmids = list() - with open(data_dir, "r") as in_: - for line in in_: - line = line.strip() - tmp = json.loads(line) - tmp["title"] = preprocess(tmp["title"]) - tmp["abstract"] = preprocess(tmp["abstract"]) - data.append(tmp) - pmids.append(tmp["pmid"]) - - json_file = input_form(json_to_sent(data)) - - return ( - self._create_example(self._read_data(json_file, pmids), "test"), - json_file, - data, - ) - - def get_test_dict_list(self, dict_list): - pmids = list() - for d in dict_list: - pmids.append(d["pmid"]) - - json_file = input_form(json_to_sent(dict_list)) - - return self._create_example( - self._read_data(json_file, pmids), "test" - ), json_file - - def get_labels(self): - return ["B", "I", "O"] - - def _create_example(self, lines, set_type): - examples = [] - for i, line in enumerate(lines): - guid = "%s-%s" % (set_type, i) - text = line[1] - label = line[0] - entity_labels = line[2] - examples.append( - InputExample( - guid=guid, words=text, labels=label, entity_labels=entity_labels - ) - ) - - return examples - - -class BioMedNER: - def __init__(self, params): - init_start_t = time.time() - - # Set ner processor - self.processor = NerProcessor() - - # Setup parsing - self.params = params - self.prediction_loss_only = False - - # Set seed - set_seed(self.params.seed) - - # Prepare Labels - self.labels = self.processor.get_labels() - self.id2label: Dict[int, str] = { - i: label for i, label in enumerate(self.labels) - } - self.label2id = {label: i for i, label in enumerate(self.labels)} - self.num_labels = len(self.labels) - - self.config = AutoConfig.from_pretrained( - self.params.model_name_or_path, - num_labels=self.num_labels, - id2label=self.id2label, - label2id=self.label2id, - ) - - self.tokenizer = AutoTokenizer.from_pretrained( - self.params.model_name_or_path, - ) - if ( - "roberta" in self.params.model_name_or_path - or "biolm" in self.params.model_name_or_path - ): - # roberta - self.model = RoBERTaMultiNER2.from_pretrained( - self.params.model_name_or_path, - num_labels=self.num_labels, - config=self.config, - ) - else: - self.model = BERTMultiNER2.from_pretrained( - self.params.model_name_or_path, - num_labels=self.num_labels, - config=self.config, - ) - # Determine the device - self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - self.model.to(self.device) - self.entity_types = [ - "disease", - "drug", - "gene", - "species", - "cell line", - "DNA", - "RNA", - "cell type", - ] - self.estimator_dict = {} - for etype in self.entity_types: - self.estimator_dict[etype] = {} - self.estimator_dict[etype]["prediction"] = [] - self.estimator_dict[etype]["log_probs"] = [] - - self.counter = 0 - self.pad_token_label_id: int = nn.CrossEntropyLoss().ignore_index - init_end_t = time.time() - print("BioMedNER init_t {:.3f} sec.".format(init_end_t - init_start_t)) - - @Profile(__name__) - def recognize(self, input_dl, base_name, indent=None): - if type(input_dl) is str: - predict_examples, self.json_dict, self.data_list = ( - self.processor.get_test_examples(input_dl) - ) - elif type(input_dl) is list: - predict_examples, self.json_dict = self.processor.get_test_dict_list( - input_dl - ) - self.data_list = input_dl - else: - raise ValueError("Wrong type") - - token_path = os.path.join( - "multi_ner", "tmp", "token_test_{}.txt".format(base_name) - ) - det_token_path = os.path.join( - "multi_ner", "tmp", "det_token_test_{}.txt".format(base_name) - ) - - if os.path.exists(token_path): - os.remove(token_path) - if os.path.exists(det_token_path): - os.remove(det_token_path) - - predict_example_list = NerDataset( - predict_examples, - self.labels, - self.tokenizer, - self.config, - self.params, - base_name, - ) - - tokens, tot_tokens = list(), list() - - """ - Aggregate label results with detokenized tokens - - words: Auto phagy main tain s tumour growth ... - label: O O O O O O B O ... O - - detok_words: Authophagy maintains tumour growth ... - detok_label: O O O B O ... - """ - - with open(det_token_path, "r") as reader: - for line_idx, line in enumerate(reader): - tok = line.strip() - tot_tokens.append(tok) - - if tok == "[CLS]" or tok == "": - tmp_toks = [tok] - elif tok == "[SEP]" or tok == "": - tmp_toks.append(tok) - tokens.append(tmp_toks) - else: - tmp_toks.append(tok) - - self.predict_dict, self.prob_dict = dict(), dict() - self.out_tag_dict = dict() - - all_type = self._predict(predict_example_list) - # disease, drug, gene, spec, cell_line, dna, rna, cell_type - for etype_idx, etype in enumerate(self.entity_types): - predictions, label_ids = all_type[etype_idx] # batch, seq, labels - preds_array = self.align_predictions(predictions) # batch, seq - - self.out_tag_dict[etype] = (False, None) - self.recognize_etype(etype, tokens, tot_tokens, predictions, preds_array) - - for etype in self.entity_types: - if self.out_tag_dict[etype][0]: - if type(input_dl) is str: - print( - os.path.split(input_dl)[1], - "Found an error:", - self.out_tag_dict[etype][1], - ) - else: - print("Found an error:", self.out_tag_dict[etype][1]) - if os.path.exists(token_path): - os.remove(token_path) - return None - - # get probability of all mentions - data_list = get_prob( - self.data_list, - self.json_dict, - self.predict_dict, - self.prob_dict, - entity_types=self.entity_types, - ) - - if type(input_dl) is str: - output_path = os.path.join( - "result/", - os.path.splitext(os.path.basename(input_dl))[0] - + "_NER_{}.json".format(base_name), - ) - print("pred", output_path) - - with open(output_path, "w") as resultf: - for paper in data_list: - paper["ner_model"] = "MULTI-TASK NER v.20210707" - resultf.write( - json.dumps(paper, sort_keys=True, indent=indent) + "\n" - ) - # delete temp files - if os.path.exists(token_path): - os.remove(token_path) - if os.path.exists(det_token_path): - os.remove(det_token_path) - - return data_list - - @Profile(__name__) - def recognize_etype(self, etype, tokens, tot_tokens, predictions, preds_array): - result = [] - - for one_batch in range(predictions.shape[0]): - result.append( - { - "prediction": preds_array[one_batch], - "log_probs": predictions[one_batch], - } - ) - - predicts = list() - logits = list() - - for pidx, prediction in enumerate(result): - slen = len(tokens[pidx]) - for p in prediction["prediction"][:slen]: - predicts.append(self.id2label[p]) - for log_prob in prediction["log_probs"][:slen]: - logits.append(log_prob) - - de_toks, de_labels, de_logits = detokenize(tot_tokens, predicts, logits) - - self.predict_dict[etype] = dict() - self.prob_dict[etype] = dict() - piv = 0 - for data in self.data_list: - pmid = data["pmid"] - self.predict_dict[etype][pmid] = list() - self.prob_dict[etype][pmid] = list() - - sent_lens = list() - for sent in self.json_dict[pmid]["words"]: - sent_lens.append(len(sent)) - sent_idx = 0 - de_i = 0 - overlen = False - while True: - if overlen: - try: - self.predict_dict[etype][pmid][-1].extend(de_labels[piv + de_i]) - except Exception as e: - self.out_tag_dict[etype] = (True, e) - break - self.prob_dict[etype][pmid][-1].extend(de_logits[piv + de_i]) - de_i += 1 - if len(self.predict_dict[etype][pmid][-1]) == len( - self.json_dict[pmid]["words"][ - len(self.predict_dict[etype][pmid]) - 1 - ] - ): - sent_idx += 1 - overlen = False - - else: - self.predict_dict[etype][pmid].append(de_labels[piv + de_i]) - self.prob_dict[etype][pmid].append(de_logits[piv + de_i]) - de_i += 1 - if len(self.predict_dict[etype][pmid][-1]) == len( - self.json_dict[pmid]["words"][ - len(self.predict_dict[etype][pmid]) - 1 - ] - ): - sent_idx += 1 - overlen = False - else: - overlen = True - - if sent_idx == len(self.json_dict[pmid]["words"]): - piv += de_i - break - - if self.out_tag_dict[etype][0]: - break - - def _predict(self, test_dataset: Dataset): - sampler = SequentialSampler(test_dataset) - data_loader = DataLoader( - test_dataset, - sampler=sampler, - batch_size=32, # you can adjust evaluation batch size, we prefer using 32 - collate_fn=default_data_collator, - drop_last=False, - ) - return self._prediction_loop(data_loader, description="Prediction") - - def _prediction_loop( - self, - dataloader: DataLoader, - description: str, - prediction_loss_only: Optional[bool] = None, - ) -> Tuple[ - PredictionOutput, - PredictionOutput, - PredictionOutput, - PredictionOutput, - PredictionOutput, - PredictionOutput, - PredictionOutput, - PredictionOutput, - ]: - """ - Prediction/evaluation loop, shared by `evaluate()` and `predict()`. - - Works both with or without labels. - """ - - prediction_loss_only = ( - prediction_loss_only - if prediction_loss_only is not None - else self.prediction_loss_only - ) - - model = self.model - device = self.device # Use the dedicated device attribute - - eval_losses: List[float] = [] - dise_preds = chem_preds = gene_preds = spec_preds = cl_preds = dna_preds = ( - rna_preds - ) = ct_preds = None - label_ids = None - model.eval() - - with torch.no_grad(): - for inputs in tqdm(dataloader, desc=description): - # Determine if labels are present - has_labels = any( - inputs.get(k) is not None - for k in ["labels", "lm_labels", "masked_lm_labels"] - ) - - # Move all tensor inputs to the appropriate device - inputs = { - k: v.to(device) if isinstance(v, torch.Tensor) else v - for k, v in inputs.items() - } - - # Forward pass - outputs = model(**inputs) - - if has_labels: - step_eval_loss, logits = outputs[:2] - eval_losses.append(step_eval_loss.mean().item()) - else: - logits = outputs[0] - - if not prediction_loss_only: - # Unpack logits for each entity type - ( - dise_logits, - chem_logits, - gene_logits, - spec_logits, - cl_logits, - dna_logits, - rna_logits, - _, - ct_logits, - ) = logits - - # Initialize prediction tensors if they are None - if dise_preds is None: - dise_preds = dise_logits.detach() - chem_preds = chem_logits.detach() - gene_preds = gene_logits.detach() - spec_preds = spec_logits.detach() - cl_preds = cl_logits.detach() - dna_preds = dna_logits.detach() - rna_preds = rna_logits.detach() - ct_preds = ct_logits.detach() - else: - # Concatenate predictions along the batch dimension - dise_preds = torch.cat( - (dise_preds, dise_logits.detach()), dim=0 - ) - chem_preds = torch.cat( - (chem_preds, chem_logits.detach()), dim=0 - ) - gene_preds = torch.cat( - (gene_preds, gene_logits.detach()), dim=0 - ) - spec_preds = torch.cat( - (spec_preds, spec_logits.detach()), dim=0 - ) - cl_preds = torch.cat((cl_preds, cl_logits.detach()), dim=0) - dna_preds = torch.cat((dna_preds, dna_logits.detach()), dim=0) - rna_preds = torch.cat((rna_preds, rna_logits.detach()), dim=0) - ct_preds = torch.cat((ct_preds, ct_logits.detach()), dim=0) - - if has_labels and not prediction_loss_only: - # Concatenate label IDs - if label_ids is None: - label_ids = inputs["labels"].detach().clone() - else: - label_ids = torch.cat( - (label_ids, inputs["labels"].detach().clone()), dim=0 - ) - - # Convert all prediction tensors to numpy arrays - if all( - pred is not None - for pred in [ - dise_preds, - chem_preds, - gene_preds, - spec_preds, - cl_preds, - dna_preds, - rna_preds, - ct_preds, - ] - ): - dise_preds = dise_preds.cpu().numpy() - chem_preds = chem_preds.cpu().numpy() - gene_preds = gene_preds.cpu().numpy() - spec_preds = spec_preds.cpu().numpy() - cl_preds = cl_preds.cpu().numpy() - dna_preds = dna_preds.cpu().numpy() - rna_preds = rna_preds.cpu().numpy() - ct_preds = ct_preds.cpu().numpy() - - if label_ids is not None: - label_ids = label_ids.cpu().numpy() - - # Create PredictionOutput tuples for each entity type - return_output = ( - PredictionOutput(predictions=dise_preds, label_ids=label_ids), - PredictionOutput(predictions=chem_preds, label_ids=label_ids), - PredictionOutput(predictions=gene_preds, label_ids=label_ids), - PredictionOutput(predictions=spec_preds, label_ids=label_ids), - PredictionOutput(predictions=cl_preds, label_ids=label_ids), - PredictionOutput(predictions=dna_preds, label_ids=label_ids), - PredictionOutput(predictions=rna_preds, label_ids=label_ids), - PredictionOutput(predictions=ct_preds, label_ids=label_ids), - ) - - return return_output - - def align_predictions(self, predictions: np.ndarray) -> List[int]: - preds = np.argmax(predictions, axis=2) - batch_size, seq_len = preds.shape - - preds_list = [[] for _ in range(batch_size)] - - for i in range(batch_size): - for j in range(seq_len): - preds_list[i].append(preds[i][j]) - - return np.array(preds_list) - - -def main(): - argparser = argparse.ArgumentParser() - argparser.add_argument("--model_name_or_path", default="dmis-lab/biobert-v1.1") - argparser.add_argument( - "--max_seq_length", - type=int, - help="The maximum total input sequence length after tokenization. Sequences longer than this will be truncated, sequences shorter will be padded.", - default=128, - ) - argparser.add_argument( - "--seed", type=int, help="random seed for initialization", default=1 - ) - args = argparser.parse_args() - - BioMedNER(args) - - -if __name__ == "__main__": - main() diff --git a/source/Parser/biomedner_server.py b/source/Parser/biomedner_server.py deleted file mode 100644 index 6017b805..00000000 --- a/source/Parser/biomedner_server.py +++ /dev/null @@ -1,116 +0,0 @@ -# server_script.py -import argparse -import json -import os -import socket -import struct -from datetime import datetime - -from biomedner_init import BioMedNER -from ops import filter_entities, pubtator2dict_list - - -def count_entities(data): - num_entities = 0 - for d in data: - if "entities" not in d: - continue - for ent_type, entities in d["entities"].items(): - num_entities += len(entities) - return num_entities - - -def biomedner_recognize(model, dict_path, base_name, biomedner_home, args): - # Ensure input and output directories exist within biomedner_home - input_dir = os.path.join(biomedner_home, "input") - output_dir = os.path.join(biomedner_home, "output") - os.makedirs(input_dir, exist_ok=True) - os.makedirs(output_dir, exist_ok=True) - - input_mt_ner = os.path.join( - biomedner_home, "input", f"{dict_path}.biomedner.PubTator" - ) - output_mt_ner = os.path.join( - biomedner_home, "output", f"{dict_path}.biomedner.json" - ) - - dict_list = pubtator2dict_list(input_mt_ner) - - res = model.recognize(input_dl=dict_list, base_name=base_name) - - if res is None: - return None, 0 - - num_filtered_species_per_doc = filter_entities(res) - for n_f_spcs in num_filtered_species_per_doc: - if n_f_spcs[1] > 0: - print( - datetime.now().strftime(args.time_format), - "[{}] Filtered {} species".format(base_name, n_f_spcs[1]), - ) - num_entities = count_entities(res) - - res[0]["num_entities"] = num_entities - # Write output str to a .PubTator format file - with open(output_mt_ner, "w", encoding="utf-8") as f: - json.dump(res[0], f) - - -def run_server(model, args): - host = args.biomedner_host - port = args.biomedner_port - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - s.bind((host, port)) - s.listen(600) - print(f"Server listening on {host}:{port}") - while True: - conn, addr = s.accept() - with conn: - print(f"Connected by {addr}") - message_length = struct.unpack(">H", conn.recv(2))[0] - message = conn.recv(message_length).decode("utf-8") - request = json.loads(message) - biomedner_home = request["biomedner_home"] - inputfile = request["inputfile"] - base_name = inputfile.split(".")[0] - base_name = base_name.replace("\x00A", "") - - biomedner_recognize(model, inputfile, base_name, biomedner_home, args) - - output_stream = struct.pack(">H", len(inputfile)) + inputfile.encode( - "utf-8" - ) - conn.send(output_stream) - print(f"Response sent for {inputfile}") - - -if __name__ == "__main__": - argparser = argparse.ArgumentParser() - argparser.add_argument( - "--seed", type=int, help="random seed for initialization", default=1 - ) - argparser.add_argument("--model_name_or_path") - argparser.add_argument( - "--max_seq_length", - type=int, - help="The maximum total input sequence length after tokenization. Sequences longer than this will be truncated, sequences shorter will be padded.", - default=512, - ) - argparser.add_argument( - "--biomedner_host", help="biomedical language model host", default="localhost" - ) - argparser.add_argument( - "--biomedner_port", - type=int, - help="biomedical language model port", - default=18894, - ) - argparser.add_argument( - "--time_format", help="time format", default="[%d/%b/%Y %H:%M:%S.%f]" - ) - argparser.add_argument( - "--no_cuda", action="store_false", help="Avoid using CUDA when available" - ) - args = argparser.parse_args() - mt_ner = BioMedNER(args) - run_server(mt_ner, args) diff --git a/source/Parser/gner_server.py b/source/Parser/gner_server.py deleted file mode 100644 index 0155b771..00000000 --- a/source/Parser/gner_server.py +++ /dev/null @@ -1,206 +0,0 @@ -# server_script.py -import argparse -import json -import logging -import os -import socket -import struct -import warnings -from concurrent.futures import ThreadPoolExecutor - -from gliner import GLiNER -from ops import pubtator2dict_list - -warnings.filterwarnings( - "ignore", category=UserWarning, message="TypedStorage is deprecated" -) - -# Setup logging -logging.basicConfig( - level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" -) - - -def entities_highly_overlap(entity1, entity2, threshold=0.5): - start1, end1 = entity1["start"], entity1["end"] - start2, end2 = entity2["start"], entity2["end"] - overlap_start = max(start1, start2) - overlap_end = min(end1, end2) - overlap_length = max(0, overlap_end - overlap_start) - length1 = end1 - start1 - length2 = end2 - start2 - shorter_length = min(length1, length2) - if shorter_length == 0: - return False - overlap_ratio = overlap_length / shorter_length - return overlap_ratio >= threshold - - -def filter_overlapping_entities(entities, overlap_threshold=0.5): - # Sort entities by score descending - entities = sorted(entities, key=lambda x: x.get("score", 0), reverse=True) - selected_entities = [] - for entity in entities: - overlaps = False - for sel_entity in selected_entities: - if entities_highly_overlap(entity, sel_entity, threshold=overlap_threshold): - overlaps = True - break - if not overlaps: - selected_entities.append(entity) - return selected_entities - - -class GNER: - def __init__(self, params): - self.params = params - self.entities = [ - "diagnostic test", - "treatment", - "laboratory test", - "surgical procedure", - "sign symptom", - "radiology", - "genomic analysis technique", - ] - self.model = GLiNER.from_pretrained( - self.params.model_name_or_path, map_location="cpu" - ) - - def recognize(self, text, base_name): - entities = self.model.predict_entities( - text, self.entities, flat_ner=False, threshold=0.8 - ) - - clean_entities = [ - { - "entity_group": d["label"], - "score": float(d.get("score", 0)), - "text": d["text"], - "start": int(d["start"]), - "end": int(d["end"]), - } - for d in entities - ] - - # clean_entities.extend(aberration_entities) - - # Filter overlapping entities - filtered_entities = filter_overlapping_entities( - clean_entities, overlap_threshold=0.75 - ) - - entity_dict = {entity: [] for entity in self.entities} - prob_dict = {entity: [] for entity in self.entities} - - for entity in filtered_entities: - entity_type = entity["entity_group"] - if entity_type in entity_dict: - entity_dict[entity_type].append( - {"start": entity["start"], "end": entity["end"]} - ) - prob_dict[entity_type].append( - [{"start": entity["start"], "end": entity["end"]}, entity["score"]] - ) - - return { - "pmid": base_name, - "entities": entity_dict, - "title": "", - "abstract": text, - "prob": prob_dict, - "num_entities": len(filtered_entities), - } - - -def gner_recognize(model, input_file, output_file, base_name): - try: - dict_list = pubtator2dict_list(input_file) - texts = [ - entry["abstract"] - for entry in dict_list - if isinstance(entry, dict) and "abstract" in entry - ] - - results = [model.recognize(text, base_name) for text in texts] - - if not results: - return None, 0 - - num_entities = sum(r["num_entities"] for r in results) - results[0]["num_entities"] = ( - num_entities # Total number of entities across all texts - ) - - with open(output_file, "w", encoding="utf-8") as f: - json.dump(results[0], f) - - return results, num_entities - except Exception as e: - logging.error(f"An error occurred in gner_recognize: {e}") - return None, 0 - - -def handle_connection(conn, addr, model, args): - try: - with conn: - logging.info(f"Connection accepted from {addr}") - message_length = struct.unpack(">H", conn.recv(2))[0] - message = conn.recv(message_length).decode("utf-8").replace("\x00", "") - logging.info(f"Received data: {message}") - data = json.loads(message) - biomedner_home = data["biomedner_home"] - inputfile = data["inputfile"] - base_name = os.path.splitext(os.path.basename(inputfile))[0] - - input_file = os.path.join( - biomedner_home, "input", f"{inputfile}.gner.PubTator" - ) - output_file = os.path.join( - biomedner_home, "output", f"{inputfile}.gner.json" - ) - - gner_recognize(model, input_file, output_file, base_name) - - output_stream = struct.pack(">H", len(inputfile)) + inputfile.encode( - "utf-8" - ) - conn.send(output_stream) - except Exception as e: - logging.error(f"An error occurred: {e}") - - -def run_server(model, args): - host = args.gner_host - port = args.gner_port - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - s.bind((host, port)) - s.listen(600) - logging.info(f"Server started on {host}:{port}") - with ThreadPoolExecutor(max_workers=10) as executor: - while True: - try: - conn, addr = s.accept() - executor.submit(handle_connection, conn, addr, model, args) - except Exception as e: - logging.error(f"An error occurred: {e}") - - -if __name__ == "__main__": - argparser = argparse.ArgumentParser() - argparser.add_argument( - "--model_name_or_path", type=str, required=True, help="Path to the model" - ) - argparser.add_argument( - "--gner_host", default="localhost", help="biomedical language model host" - ) - argparser.add_argument( - "--gner_port", type=int, default=18894, help="biomedical language model port" - ) - argparser.add_argument( - "--time_format", default="[%d/%b/%Y %H:%M:%S.%f]", help="time format" - ) - args = argparser.parse_args() - - mt_ner = GNER(args) - run_server(mt_ner, args) diff --git a/source/Parser/include/crfpp.h b/source/Parser/include/crfpp.h deleted file mode 100644 index aa2dbda2..00000000 --- a/source/Parser/include/crfpp.h +++ /dev/null @@ -1,379 +0,0 @@ -/* - CRF++ -- Yet Another CRF toolkit - - $Id: crfpp.h 1592 2007-02-12 09:40:53Z taku $; - - Copyright(C) 2005-2007 Taku Kudo -*/ -#ifndef CRFPP_CRFPP_H_ -#define CRFPP_CRFPP_H_ - -/* C interface */ -#ifdef __cplusplus -#include -#else -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef _WIN32 -#include -# ifdef DLL_EXPORT -# define CRFPP_DLL_EXTERN __declspec(dllexport) -# define CRFPP_DLL_CLASS_EXTERN __declspec(dllexport) -# else -# define CRFPP_DLL_EXTERN __declspec(dllimport) -# endif -#endif - -#ifndef CRFPP_DLL_EXTERN -# define CRFPP_DLL_EXTERN extern -#endif - -#ifndef CRFPP_DLL_CLASS_EXTERN -# define CRFPP_DLL_CLASS_EXTERN -#endif - -#ifndef SWIG - typedef struct crfpp_t crfpp_t; - typedef struct crfpp_model_t crfpp_model_t; - - /* C interface */ - CRFPP_DLL_EXTERN crfpp_model_t* crfpp_model_new(int, char**); - CRFPP_DLL_EXTERN crfpp_model_t* crfpp_model_new2(const char*); - CRFPP_DLL_EXTERN crfpp_model_t* crfpp_model_from_array_new(int, char**, const char *, size_t); - CRFPP_DLL_EXTERN crfpp_model_t* crfpp_model_from_array_new2(const char*, const char *, size_t); - CRFPP_DLL_EXTERN const char * crfpp_model_get_template(crfpp_model_t*); - CRFPP_DLL_EXTERN void crfpp_model_destroy(crfpp_model_t*); - CRFPP_DLL_EXTERN const char * crfpp_model_strerror(crfpp_model_t *); - CRFPP_DLL_EXTERN crfpp_t* crfpp_model_new_tagger(crfpp_model_t *); - - CRFPP_DLL_EXTERN crfpp_t* crfpp_new(int, char**); - CRFPP_DLL_EXTERN crfpp_t* crfpp_new2(const char*); - CRFPP_DLL_EXTERN void crfpp_destroy(crfpp_t*); - CRFPP_DLL_EXTERN int crfpp_set_model(crfpp_t *, crfpp_model_t *); - CRFPP_DLL_EXTERN int crfpp_add2(crfpp_t*, size_t, const char **); - CRFPP_DLL_EXTERN int crfpp_add(crfpp_t*, const char*); - CRFPP_DLL_EXTERN size_t crfpp_size(crfpp_t*); - CRFPP_DLL_EXTERN size_t crfpp_xsize(crfpp_t*); - CRFPP_DLL_EXTERN size_t crfpp_dsize(crfpp_t*); - CRFPP_DLL_EXTERN const float* crfpp_weight_vector(crfpp_t*); - CRFPP_DLL_EXTERN size_t crfpp_result(crfpp_t*, size_t); - CRFPP_DLL_EXTERN size_t crfpp_answer(crfpp_t*, size_t); - CRFPP_DLL_EXTERN size_t crfpp_y(crfpp_t*, size_t); - CRFPP_DLL_EXTERN size_t crfpp_ysize(crfpp_t*); - CRFPP_DLL_EXTERN double crfpp_prob(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_prob2(crfpp_t*, size_t); - CRFPP_DLL_EXTERN double crfpp_prob3(crfpp_t*); - CRFPP_DLL_EXTERN void crfpp_set_penalty(crfpp_t *, size_t i, size_t j, double penalty); - CRFPP_DLL_EXTERN double crfpp_penalty(crfpp_t *, size_t i, size_t j); - CRFPP_DLL_EXTERN double crfpp_alpha(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_beta(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_emisstion_cost(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_next_transition_cost(crfpp_t*, size_t, - size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_prev_transition_cost(crfpp_t*, size_t, - size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_best_cost(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN const int* crfpp_emittion_vector(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN const int* crfpp_next_transition_vector(crfpp_t*, size_t, - size_t, size_t); - CRFPP_DLL_EXTERN const int* crfpp_prev_transition_vector(crfpp_t*, size_t, - size_t, size_t); - CRFPP_DLL_EXTERN double crfpp_Z(crfpp_t*); - CRFPP_DLL_EXTERN int crfpp_parse(crfpp_t*); - CRFPP_DLL_EXTERN int crfpp_empty(crfpp_t*); - CRFPP_DLL_EXTERN int crfpp_clear(crfpp_t*); - CRFPP_DLL_EXTERN int crfpp_next(crfpp_t*); - CRFPP_DLL_EXTERN int crfpp_test(int, char **); - CRFPP_DLL_EXTERN int crfpp_test2(const char *); - CRFPP_DLL_EXTERN int crfpp_learn(int, char **); - CRFPP_DLL_EXTERN int crfpp_learn2(const char *); - CRFPP_DLL_EXTERN const char* crfpp_strerror(crfpp_t*); - CRFPP_DLL_EXTERN const char* crfpp_yname(crfpp_t*, size_t); - CRFPP_DLL_EXTERN const char* crfpp_y2(crfpp_t*, size_t); - CRFPP_DLL_EXTERN const char* crfpp_x(crfpp_t*, size_t, size_t); - CRFPP_DLL_EXTERN const char** crfpp_x2(crfpp_t*, size_t); - CRFPP_DLL_EXTERN const char* crfpp_parse_tostr(crfpp_t*, const char*); - CRFPP_DLL_EXTERN const char* crfpp_parse_tostr2(crfpp_t*, - const char*, size_t); - CRFPP_DLL_EXTERN const char* crfpp_parse_tostr3(crfpp_t*, const char*, - size_t, char *, size_t); - CRFPP_DLL_EXTERN const char* crfpp_tostr(crfpp_t*); - CRFPP_DLL_EXTERN const char* crfpp_tostr2(crfpp_t*, char *, size_t); - - CRFPP_DLL_EXTERN void crfpp_set_vlevel(crfpp_t *, unsigned int); - CRFPP_DLL_EXTERN unsigned int crfpp_vlevel(crfpp_t *); - CRFPP_DLL_EXTERN void crfpp_set_cost_factor(crfpp_t *, float); - CRFPP_DLL_EXTERN float crfpp_cost_factor(crfpp_t *); - CRFPP_DLL_EXTERN void crfpp_set_nbest(crfpp_t *, size_t); -#endif - -#ifdef __cplusplus -} -#endif - -/* C++ interface */ -#ifdef __cplusplus - -namespace CRFPP { - -class Tagger; - -class CRFPP_DLL_CLASS_EXTERN Model { - public: -#ifndef SWIG - // open model with parameters in argv[] - // e.g, argv[] = {"CRF++", "-m", "model", "-v3"}; - virtual bool open(int argc, char** argv) = 0; - - // open model with parameter arg, e.g. arg = "-m model -v3"; - virtual bool open(const char* arg) = 0; - - // open model with parameters in argv[]. - // e.g, argv[] = {"CRF++", "-v3"}; - virtual bool openFromArray(int argc, char** argv, - const char *model_buf, - size_t model_size) = 0; - - // open model with parameter arg, e.g. arg = "-m model -v3"; - virtual bool openFromArray(const char* arg, - const char *model_buf, - size_t model_size) = 0; -#endif - // return template string embedded in this model file. - virtual const char *getTemplate() const = 0; - - // create Tagger object. Returned object shared the same - // model object - virtual Tagger *createTagger() const = 0; - - virtual const char* what() = 0; - - virtual ~Model() {} -}; - -class CRFPP_DLL_CLASS_EXTERN Tagger { - public: -#ifndef SWIG - // open model with parameters in argv[] - // e.g, argv[] = {"CRF++", "-m", "model", "-v3"}; - virtual bool open(int argc, char** argv) = 0; - - // open model with parameter arg, e.g. arg = "-m model -v3"; - virtual bool open(const char* arg) = 0; - - // add str[] as tokens to the current context - virtual bool add(size_t size, const char **str) = 0; - - // close the current model - virtual void close() = 0; - - // return parameter vector. the size should be dsize(); - virtual const float *weight_vector() const = 0; -#endif - - // set Model - virtual bool set_model(const Model &model) = 0; - - // set vlevel - virtual void set_vlevel(unsigned int vlevel) = 0; - - // get vlevel - virtual unsigned int vlevel() const = 0; - - // set cost factor - virtual void set_cost_factor(float cost_factor) = 0; - - // get cost factor - virtual float cost_factor() const = 0; - - // set nbest - virtual void set_nbest(size_t nbest) = 0; - - // get nbest - virtual size_t nbest() const = 0; - - // add one line to the current context - virtual bool add(const char* str) = 0; - - // return size of tokens(lines) - virtual size_t size() const = 0; - - // return size of column - virtual size_t xsize() const = 0; - - // return size of features - virtual size_t dsize() const = 0; - - // return output tag-id of i-th token - virtual size_t result(size_t i) const = 0; - - // return answer tag-id of i-th token if it is available - virtual size_t answer(size_t i) const = 0; - - // alias of result(i) - virtual size_t y(size_t i) const = 0; - - // return output tag of i-th token as string - virtual const char* y2(size_t i) const = 0; - - // return i-th tag-id as string - virtual const char* yname(size_t i) const = 0; - - // return token at [i,j] as string(i:token j:column) - virtual const char* x(size_t i, size_t j) const = 0; - -#ifndef SWIG - // return an array of strings at i-th tokens - virtual const char** x(size_t) const = 0; -#endif - - // return size of output tags - virtual size_t ysize() const = 0; - - // return marginal probability of j-th tag id at i-th token - virtual double prob(size_t i, size_t j) const = 0; - - // return marginal probability of output tag at i-th token - // same as prob(i, tagger->y(i)); - virtual double prob(size_t i) const = 0; - - // return conditional probability of enter output - virtual double prob() const = 0; - - // set token-level penalty. It would be useful for implementing - // Dual decompositon decoding. - // e.g. - // "Dual Decomposition for Parsing with Non-Projective Head Automata" - // Terry Koo Alexander M. Rush Michael Collins Tommi Jaakkola David Sontag - virtual void set_penalty(size_t i, size_t j, double penalty) = 0; - virtual double penalty(size_t i, size_t j) const = 0; - - // return forward log-prob of the j-th tag at i-th token - virtual double alpha(size_t i, size_t j) const = 0; - - // return backward log-prob of the j-th tag at i-th token - virtual double beta(size_t i, size_t j) const = 0; - - // return emission cost of the j-th tag at i-th token - virtual double emission_cost(size_t i, size_t j) const = 0; - - // return transition cost of [j-th tag at i-th token] to - // [k-th tag at(i+1)-th token] - virtual double next_transition_cost(size_t i, - size_t j, size_t k) const = 0; - - // return transition cost of [j-th tag at i-th token] to - // [k-th tag at(i-1)-th token] - virtual double prev_transition_cost(size_t i, - size_t j, size_t k) const = 0; - - // return the best accumulative cost to the j-th tag at i-th token - // used in viterbi search - virtual double best_cost(size_t i, size_t j) const = 0; - -#ifndef SWIG - // return emission feature vector of the j-th tag at i-th token - virtual const int* emission_vector(size_t i, size_t j) const = 0; - - // return transition feature vector of [j-th tag at i-th token] to - // [k-th tag at(i+1)-th token] - virtual const int* next_transition_vector(size_t i, - size_t j, size_t k) const = 0; - - // return transition feature vector of [j-th tag at i-th token] to - // [k-th tag at(i-1)-th token] - virtual const int* prev_transition_vector(size_t i, - size_t j, size_t k) const = 0; -#endif - - // normalizing factor(log-prob) - virtual double Z() const = 0; - - // do parse and change the internal status, if failed, returns false - virtual bool parse() = 0; - - // return true if the context is empty - virtual bool empty() const = 0; - - // clear all context - virtual bool clear() = 0; - - // change the internal state to output next-optimal output. - // calling it n-th times, can get n-best results, - // Neeed to specify -nN option to use this function, where - // N>=2 - virtual bool next() = 0; - - // parse 'str' and return result as string - // 'str' must be written in CRF++'s input format - virtual const char* parse(const char* str) = 0; - -#ifndef SWIG - // return parsed result as string - virtual const char* toString() = 0; - - // return parsed result as string. - // Result is saved in the buffer 'result', 'size' is the - // size of the buffer. if failed, return NULL - virtual const char* toString(char* result , size_t size) = 0; - - // parse 'str' and return parsed result. - // You don't need to delete return value, but the buffer - // is rewritten whenever you call parse method. - // if failed, return NULL - virtual const char* parse(const char *str, size_t size) = 0; - - // parse 'str' and return parsed result. - // The result is stored in the buffer 'result'. - // 'size2' is the size of the buffer. if failed, return NULL - virtual const char* parse(const char *str, size_t size1, - char *result, size_t size2) = 0; -#endif - // return internal error code as string - virtual const char* what() = 0; - - virtual ~Tagger() {} -}; - -/* factory method */ - -// create CRFPP::Tagger instance with parameters in argv[] -// e.g, argv[] = {"CRF++", "-m", "model", "-v3"}; -CRFPP_DLL_EXTERN Tagger *createTagger(int argc, char **argv); - -// create CRFPP::Tagger instance with parameter in arg -// e.g. arg = "-m model -v3"; -CRFPP_DLL_EXTERN Tagger *createTagger(const char *arg); - -// create CRFPP::Model instance with parameters in argv[] -// e.g, argv[] = {"CRF++", "-m", "model", "-v3"}; -CRFPP_DLL_EXTERN Model *createModel(int argc, char **argv); - -// load model from [buf, buf+size]. -CRFPP_DLL_EXTERN Model *createModelFromArray(int argc, char **argv, - const char *model_buf, - size_t model_size); - -// create CRFPP::Model instance with parameter in arg -// e.g. arg = "-m model -v3"; -CRFPP_DLL_EXTERN Model *createModel(const char *arg); - -// load model from [buf, buf+size]. -CRFPP_DLL_EXTERN Model *createModelFromArray(const char *arg, - const char *model_buf, - size_t model_size); - -// return error code of createTagger(); -CRFPP_DLL_EXTERN const char *getTaggerError(); - -// alias of getTaggerError(); -CRFPP_DLL_EXTERN const char *getLastError(); -} - -#endif -#endif diff --git a/source/Parser/lib/libcrfpp.a b/source/Parser/lib/libcrfpp.a deleted file mode 100644 index 15ad3a4d8e9257485c4e968e18a26f4a01af6267..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623548 zcmeFa4SZD9nLj=g5{QVogQC((>uAR|Y!xygV4`RfGJ!if(bNPD6-`23NNPyZWCHje zO(IUmvDwwOv}Z)O0| zZg>BmUdWw$pL5Q0p7WgNJm)#jdAX-7uIsFCK6mriyvk?m-RsR?xL{$vh*LY= z<#NC0a@B|a|NnQxMwiR^_e-D4^(Xjqf7|Q&%isSD52pNNrR%W&e!IyvCEeeL!1I^C zzwiJuFtuP~@~?D`YpVXMGF?;u^7j`W{NIs*`p%|~j+!;?4UMfeZH?<(j`w^UpsBNc zO-)^AXWf;P;@X4k$yPUpYr>6dI$G<(jW&D@ja}i+_A6~LKpHzc+dFMQP*xMJTfMqb zgGp-5*Zg^sT)gF1)TPPu5e3xn*`Q;Ek9qfB^j``u|C}1S#hR>hu5r8Slb%cqiQ1=@w76z?rY+2nLuCaxGO(Uu6?9x>L!AbC^zO}I~DFW*?2d-?ZTce|2 zsX4t~;aaZ&9Yk6a2IDje3nWD(T}{>$;#tR~Fs*HET-(^Hva-D}l(kgTR7d8kD3c+K z*R~2RfdcJU0?qeCbs^w_^DDy(>%&)eGzRO-3LDyM*0nS=ww2X0XkqC^ODifChL$W{ zR=KFWz6&=0qBY{Dtfiu%q2m08%KRGquV|@U$X{ogg@UVPYn^ca!j7)SZsfJPv#z0~ zu`Nt=mHrwaY?u_cpmkN#>aLphj&REwG?}s%owdIPNmel(leRG7A=>#A?>Xl$tI z2zLfAs0^Q3Q&Ycwz2EQ8Usc!DQeT4_Y-w8^tgj4%Va;`&l+%`Q7g$qSha0Xyz9>)C z#fm$h9AjCs$e$cpz;9*ur+_a{;yYi-LPcF?-5S5Yp?ggSWU#HNWp!CaWqYy&3q=HL z#ao!X(8}ah-A(EFthj8gp^uSR@!-gERt2sM7uH;~3iaREctnCy87}CkYv~N0&!(}k zrVJ95S5w*83VrGC3I{6-2`Xr9?CJ`N;5q>+D`;wIYbd*@^2{1n;F5WrjZO1vYF4jb z4{hGr)eeQ;627u#ZJv;ITaDy5H@0>_<#l#JUCSz~3@?%@@W|)~K_I)#e`Za2O=n|W zYioObO-ox>V`n&co(L&hdqEM1YwH$G2ra3ty>m@nYfVeIv9k_(DOiDMC4F%5eSyErx7wQ2Gh> zQiOz{BsH~Yd<&rWkEqJa%GOq#Uw_g0RW+-e4Z5JUy{@4Qp_2ljP1~TpE9xuGzo4>a z(S=ac5Wv*Yklq=qs`69SqgBCA72Ux)6r~aUc~!!E48jU6pb=uzm)6jQ!rri|=SAUW zw5*0R*LBu)pn;cFSbEA&L3RJ1>ZumN)+lSM$8e#uN^oUTM>{EoMauk>0v#RU+gXqqC*Glgbu~qPsCz0ok_Jr9c0xgqO88uA%voRJD}_HLw(LFDttM7Lk9E zHC}1^nvO%65P#~-txU5TLx1Xg?e!sTN>RlJ@8%MAmP}!xUZJqtJCmw;L1(w>4rN6b zE=7kPYC#Wt@EWBq3pKW_4mSr;jVUVah!I(eaKt$5%sg^5f5tYDK5MZ4NJ_MTwRA}P z{F9)z)SOLUd_scl5^QagpAhlESbQWS9~(Z^{A@6*hAdduTo<->cGkdvEtwoMIQ6}R zT6nIa+1Uj}-M$+Bldc*J4;wq3NT|rI;TCkxAbXpd6q<@+8_b`-w6QMS-PssyYiL|Q zi4a?;l?+>eg9v+=Jv)otp)yODK1qwjj_*t;!}8!oC1n?3psWW6&aRCkU7_+sK#}T` ztz|2#Xjs$K5T;uJcC*G~9jhJgXqs7Zkf96kDPj9W<3DLNSxfWrN1n2;IaBfOOc?GM znT2UTD=*0>9GYsLSJniH6I}Fzi~OY)oXpKM@e+Kp;!{#oZ~;uQge(v>ZJN}m51u4d zE)77~ASov0DbYIPOv0lgh!JW-V^bY`s5LaCF@Ro^9Dpo>(9^d3bYxzPjFMtnk)q8d zn3i(r3^Ig0ap=J_Tx){mdhm=k`{#B^(8XqTJ1oGUI@nTHRt49c7#dCvZ8~UZ*b-`Q zGz;mFZBtDKEL*i^O#^gJi}H4gQ0*=iFR1avU~-}845(!j140W(4>^-POfr@jL5qYs zma`|YVNDsBNNH2w_H>hj5~-{fz@OSGw-fb0o^#4Fe=@5leThB=yqezRU?eFy!b>i4 z*Rj;_-bRrXrsGW>yxNka3D&8P#8ws>$d<_`!=h<%n8in6WZH=ObkJ#)Wi>z#;i(am zb7>tp{`F;;=Su2AyX99%ok$a~>>?<|H5bt>X3d%o(I)$*E|b>1Q^z>=gwXh0D=8yjjQw9I!jPlj^Yr%~^Yf$Q5O}Cj3YUqesIl{kPw~5lCcJ*EAb@GI9vg?No|XZ%b9L+ z6*;=tgQm3*{Be@m3-z&5+KZX5iYe9!(SLi0<{_<|NmA)QLOj;uA0Y}mE0W|-QYwyu zEA=FFwzHAhHM)&RTQZy6+7sE`aY?e+3eqSY8-WS&wLzUVZO`-2qUeloEt++t0xF$R z?R-8YA$GD4QMZ${$PtQJIy}~59w{ldy0+Knq-^PbDYHw!k+u*AmQt17Z<0oSjw6wL@Jp9R^ z(tN82&I0$Rfh(u0vqYszkhQsH8xZ;ZFx0Bl>Q7rK>>^WGU)Ne++75nj+$1drVIDf{ zNg-d3$U^%ua?-f9dWQdZ__^(-NP$?9LAUUNPiM^y7V(6OYJyl57{-LST&?6-xg-_} zEy7Y3+X5Tu+t&-B;L18Pv6Lmbhy_Vkm8Do7#F2gnar#X;G4=oRi_$8KAQN>9tcIkGj-#4jf#1hM%vapsagBQp+F8XsLUxXi`?Jb77)6Sgnr~Go#MV z-=9j3EOtQ3aJxy6I*PImlC@`@3v*TkCfW||<>ESO*nxVoDT%p4%rB;OqkS@GPEv<1 zf;+RJyF~_}c`BOQ}WS^7h$(>Ssq|>Id$Vovv6MK4uStnfh7CBEji=DE5 zKTT4^c+5eHqGVy9t~1=_Ul?fbUe($tSj|f)q2kW4%{L3wt9q$z0g&0c^BZ6~2txk;f>3%csoLK~l7Z&{L@ zQYB7aWKmTql*q+mhf)o;9$*<~VoCtnR?#HLuSp-SXSK9@LkvrSRIiqpge`S|Mw1+e zJKa43v0k}+h-eyHVvHl4LN*L3f)c3?;W)A5Ih@GpFei&K*$H{jTn?Eqk>eq}Ba=K= zR4u$j-Rp%Lp9IO_QZmWsawL=-6p5xJspf2@bbxj2grFo`D~ajs6hVnp>5Q6W;zP!; zHz{2gsk}9|a-{5yL<~*bL8Ql8?T3gq8C!Z+sExoR-a{lvox`L$7S6eY3Ta+Ua9i6s0CcG|4|< zFE1z(Q-VoX4?1i1F$dWis0V$P$?s3JK478PjA~=3bpe2Xfo+3o+IZIeA}L5*DE0)W zP3`|$+MtDE`>$gSgSGJ75}ZERzd&sN)!Ty8N6gQ2?&swmRm8Unk(D#~d8zgWA0$B$ zce9GUu<5DrgOAw8OmgLRxb#u;^PL1IQluq0-%0WzlPtofXzcK|d1tL$SR}WDrw#XC znKo#l*sq*6c+$cZOQkbRv=cQ%ummlVyN}b#6Sm5tUe#{ow6PY7t;jNXavqqYN$hzp z`#K3p5oaOeSo3O19kGb|$RbQfjKkq^v#36yNyM=p7|5a!3(GOgZaw5uDAipTiP#*orv3!f<<~IQpQhqF$)X6x7wXwu3sc zMKuL&`B&QJ{EoaXY!jb0o%bhi&*`&9)gMWT{<0@c@1fM3I2enMMEg7NB_%q=M0uh$ zI+ahdom#X>5@=Ts7Pu{QJ*0Ia*KiAJ4YDInKy7HPO4W(l8fHOn1>3VwTj(4c!;||U zRIjX}*)+Ws>7>1VNuEp!vZk|}CMuV-rA_K2%eMG4xvj9ZeKl7<+iXeO(tt^fvV~e% zWecz~%kBcP({3%5a&1FJ*i(q*26oR&!sCaY;ZMQ!1k zjo8Mub*(nWS$aF1g2N@@p*rldsaL9gat{85P3@iQ>N*=%)zx3Y-*o8CT+3dI}Y`;x0hn})Hhd~@<(6J5nFcMkU0;J+} z3YG4s$0X?z5!&|u!hX}qMUnlf9IPcabEfTg?YhcuZxoI|OGjy&%~mwn)7tc7(mZm` zoLlKc5=$#fpT?>ZW!~xIQn>T2YBm}5V2pCcvU9>2s>+&dz|8evO-eMj!I%z>jbf-s>E!7h>+})tQt(t7RcSpmJ+0p7>7%PC1i6?r!>Tf=g>-HfjAv5 zIn$n`;gc8*DTzALMJY*=^l}X=13wO11j7!a;+;&HT=7L*e0%}j|2CV>Qt_&5TB|mU zhY{8Cn4el23OE5EFedksC$vanels~>O2$%-A?uFwBuLNpEmGYrGEX40!gM^xK*Ab5 zMUYOV2ap`!B+%P{I;PF7!huU_SF#P!$4R5}NoookDhF7{w&n1rcJ|l^`k&7^Wtl&j zmnnUTJ_Wo%^jCZ z!}YfD`S;^|H%{*1&yl>F(Pqzt{0T=y>1Zc;D%G-{W{6b-a%` z-uF4)Jz%AAa+2Nyj_}!za7v{$zVqGd2zR{KuDA2cCU4|do+Z7iuYp3qbd{v2?}6e& zgqw#5uSgS4dNw)ufiJ+=%73Th{VvCQHE>(`)!}$w?|83uyf@q5Yx5lZD|EaUJKjyl zdxhh@+O@2-^ek`g@>Sh!;cl?H;Jocd)RY&N_;BYy-RW}w`>PT?o0uDFa>O93fN02U7KUveM#B z0V_~2D?iN?u$3ub9VuXaDPS8NFiF|uJ4HFu_147X5b8K3=$617JRfU;Yu)jAz{z{( zbrt}Oufufw^8wc|Ynmn%->ZN+{tb9f761RK_<4@_+tb87D7e+0uY&7(xm&?&9q@+~ zyu$(Crr^$g|> zjcJQapS(4${VQ7VtSATfp{8BaJwj;`pZYaq*ThKDYg%LSwR1LJ_07k z<u5Uk(2!0&x*eTT#RR zi$Gk2ABR5;f0{sCPCQ-#b-CF6sV-1J3LJ24Ynl$YSG})v!1L65hXY=$-uoQz3iVER z4=+uRPXAL0PQVA$`=A59NxeVefZwIw#~koM_5OhaKC0e5%Kp;ypz9P@t^@8>@5K(d zey3ZCm&Q}8-di2;4)xySfa~|$9qis1LT*o`$fRC#8 z8A@n$x%Mfz*8vv=NBIjJaF2R79dMm~r30R)-a8!dV)fqVfLEyZjShINdjF{duJH~! z;63X72?u;Yy^lHIo76k)U|#&;-(Bk6qwFRPA5?Ik1HMzi7dznl6uim-*LYhU@I3Y2 z=YUtJ_l*vCt$P2d1Ky$Dwf(5+?@{n49PtO#`->CFV7N4V zr;1jGEcEB|qH#^{7^?ru~uI*LVysj(PgzHw}H{2f6`wi%70{ZSCR4dGPg~(G|urQT2|G#m&PW27K!Z zAKt{*?SP@N8RwPpBb%SbtgFP*>s zrJqSZTjTxnVbXsd5>3M&<=T4PsnUC`Ks;;yY49pMFn?$I9V)%XqvJc%UxoliE!Gj# zZ?-aIsyP9Hi?#{V>h!w)QsvF~9m>&UD#1D$FxHVXJ)=464j|XP2JbG{tqwjqc}*KA zRr*>rf2-#%1Tx&5>BXl~^+Ylzi4QfG>@Uj8m$S-;KbJgEs&m(TE_R*d`mCUZbx)ee z7xIF9Ca-vLF15*cbFk8k{LzdqGmV+cvhg>Yu#sg#V$G3dxr_>Mp?UVQig2bGSyo|2 zOKZ)uOPl#t+H6K2xD!!0>pOk(dOVFWg*nnoD6dP0lXF%5?;5v80BbUG$9lKBk=1T7 zWzl3@at7m$&r8nr?l-D`*<{S$wQk0KW92AP{Bplh^T>W<=8P?7@1WZ(+7~X_Z+PYm z?JqGrzClFT(PYf~%~cuUZAkW;b;siVIG~TN%VyYqV+9gd14$A=_s<=3%O#f}>S)Qu zC6RYamX}m5uQYGiy9acc(K~z|Ff!Wbn~k4HmCqN9ef5ADS?n_-xA-dglNqPNtKd87}mNI&` z&kK4{bH6pCxAD|P_N4&L=GI?4@$Y}eNYqxoLk^w zk!Sg$*Z8tQb#Q2Oido+|Cscn?UM%xmb7LsBa$EM2Smp`lMl)8mE!*fj4TG6r%sgNY z#iy9PL+)Vj0YG0t?-Gn<=ChEY*ox%#ZCiF5gko`w_VHI?5i1>^GxfUoJw1cD>eQ%o;R@ zUO=p5!0Lne(2nEVEi-wK9?WjA@HO08~K|F!v`w&Wsh0D`a zVpn2Z_?Uk%^2n~&NT;lS@FjC96v&V;Hr;!I zL(hZdeZHHK6pY?A1_j~?#HuIA_0f-ly~FNM{U{>zAVNuO=|pho#Z0`iv6`{KaCUI$ zr71)}%@SKSabB$83qW0H)(3pq%%sDt7Zg;8cG~-zn+>G*{RtybO5e zgYdwI*$AC&#%4U4ja2Sm2V&Q|%j+lhFG0n92=TaNJ4EHW_7GxKm>bWF1q$8duFEWQuR!{YX^@`9Q$YJ8O-A*v&@~7N3Kk7_j|PhF_Vpms z@J!PkM}{jhPXV=4Au>}-dbha)XSe$DjQ)T7XktP%u%9EU2{Llc*fJ^7+aS6iA;Y-! z0X!knW(p8Q_+5zbTd053yX0dgDDW%>Eh|QnLOj&{vS@X^ueigXhsF}PQ8qIc$|C>J zLRSQ)9RNM`9sBd9fL13mMi8fI{mb*5-uxsGpq{Kc1`^FR!y9ZCf`ayFFkVuK0G3*~40E=f$p}ZEjsU^Vdr|j~&mGT-w z8K;DO6``V#ubT2In;rO_4SwfPUd!uu_l~%caW6-N+Q36r$FQ_A&DRs?aJknVr)hZ znC?GFeVphwc8Goh)Cn^}_aCz~fM{eta{7oF&D6biWPNU=BhReg5<(@%W(`x}!7kDr zhVk7Y)E*kx7USE4eM3gymtfD5wOB1E!F|UABFIF?#`Z3|5D*%DP<8~#c1Qls5uFEk zJPiJ3P&CY<9pG=W%PY{`k6FJHLY0laX9_z&PvC?Ds{7R4$qInjscaJ+h0*sQ^(YMt z-QU>^jfbgQBTzjsrr7004ejnD= z9%I95=$`$?R|nA(kCDxwuDLkA`JIUgwFXbgMhund-yMJU!-)x5k7O5BwHetX^d-xi zcYs_*1`xCAVwSY{0PUL>$V5YpXgPZ!G8>0pLen@ndO2o{YX-M_y-F~LrfqV}x^ z@q*0zklN+ahO5zc3PyQC6!`!$&S9|b)`fXGzOo7JJ9i%qfBgOm*5li-9;+UM<@h!% z$H$BfG1(2gjiCKBEPst)*jgfZKUnpa@y)LziqYSII|zh{hc2A9>X(pZCJa)~EZV2T zYrg{&j}!YAYqajCp*yZI>tUgz5j_^moXHN=y$f0%eaatTR(=NR01XKyj)5l>=;x|G z_{elW?cW{wNLqWk{1naOjG1$0n!Q^flKZ>gh`itXh`aYyclbE7{t@?1R>-3+VToz` z>ULpVX^VKI7^ajMty}|2n+u@}P&PAqv#1_4zv4t+wI7_7w2et-Tl=d0(%e$=Lb|4b zF40rc)_Nn+O`S;Fuo$`zoertX5N%-!`kG&%gP!IwLRC(-J?SWxOkRt*>z75jP*Oc;F! zV6|}|)&E^Q&@2l?FPa^YW=>?u93e>mj4mR2UalE=%EaIx6kA#xTbvz;&G2B5fW9Xi zO%QSwik<$X$Os0W$E@EKiup2>I=Ub>=VeqP`mcg7LnWOTt2*gGdF<-!VDE?7P)w)n zC@*?86m9ht8{Zx(iNKyO^^~0Q3u>*~2Fv>=jK3Q?YDdW_!{^5`GtqX3&7wY0I)s{M zLxPOk5FU(`X9rHfAmK5Iga{yGp7UavZf7EN2HD1Uh_nyJ^vxg*vCb}!jH9mz#>zZE zC^OIAVf3{in5qCua#tM8GYe^o2-E0c)NW=5lp(F@3^BB!Z88V9mDG<@rG6ah{E`Em5;5ORRf zqP2Z>cR5A{eWySg%VVuRP;|E#6Ne%gjesbOngm@Rpskl{x}ef!>%oXBFU9q^JZYT2!|0{zJQ!Vj(7FY`>~wiP4T?@q zP;@zU6I6|$YKzhPtWZ1X;)`?Hy5bFQPE1f=565qV#!u)Kyl;Bf{yzHl#Dp1nTEyKU zp7)67R>Vtm5dC9+kVg2ou4Hc_N0?d(QjjR@N*M}87>1$}ewcXUAAvs^%14l1T&$EN zVi&{9@+;9hJp$zM0whrVWA9Ie`y-o1lJ|{?iBLU#7;k~SY)Y4i;UODrv2>P5$H{n} z*6*_J=kF2ztvFI*uv~*~W@hGg)$TToqQ`^Sd_sOz-e7{lr0u=S<>rsCo2dY)5Ta;oDWZ>0|jF=;=UDrr4 zl_0!*#U1#rUhhUoF{cMkL3lqey&@c6jN@x?4DJ0~AeqOj z@oPX2OaKwl>i_g07UK?C=sErX;zm&YZ~hiV^_j6wu!d~7TX_OI;UwAuZr|-21S`p& z9r%rp!PHMu2Fn=ApKd*A5~J*yBa*ZgnWQgM`B-;!zZB1ht;qbC5B`SZKS33e&lq;~ zpNsm@{3bz&unl~t-$$!>QQHa6PyALi6*DF(=>B|?7?Uj}@}>|oDJySAJAC4m1J5W_ zTJcyg`qRvPjNkvd(f37+WO}YGbQyg#9gNN0rSZLZNT`H9uEG~x{Q^ngX$S=x>8lOa zKgF`&E!r=OHvToxJ%%<#59SlF@5X80!4bK99M0QzSK-!#dve|* z#y5Y0V59$^M5LLS9HGEJy~XIeM?gH8XqukTb{Ib}AHR((9tW;n!h{@u%)y?sVMv<^ zUX-~u(`RqSj>nyB$b&!5=>IGV6^gtn85S84zxQ&92!)RRqY+{(q}@Utyoql1daYrGH4}j zY^D6*!|dJ@AAN6P0{O-F;8&3RE`&dk%~!22UlT7VRU_MLa=8C9dajTtxn3^IapkL?c_o)dW!Z4iOEPopN@ zgyENqb|-x_NWAhlBQB(HA?AvA@P7H*c&dJvx3?Jg72K*uA=F!8J0g=3WBFE6`U+YP z-`KZV!nTQ0=r9P>!C1K!B)$0(qR$&OHk>Jje;mrLU^(XR zT8p~7M6_(gy?mTlUt(_Cfn?R^CAQ1o zeFymhGiLb?lvx~>;9@;IyF z8J74(kn%k0eXp@0%&G-r%SF0S zlViq)b0CbgSy_}ljP}g^*iQ&ywU}nve)4I+T1Ee7Kx~z#6!G95>yD1oK-_4PwB6 zHoQl&b3+~r0PMrOy{5#N8X8PR1;#1NGjXfl1A1Ay>fbS^7g=LZ<8|flkR2PU5*sjC zhQk*_1XK>-tg&J*>1TpoyoaXTn;_y|Gv8Rd0@)1vcaPsNAnL2ksFp2PJS3X$aeaef z15~b{U{?>t&qAdm;g+~x)P4`M$NRSUzhO9*96xS>1M@VPHFADObq(>?P&!V^SJSmq zVdBX&BXE8}oZuD5y~@{td&t*}`!&8=%3H`+h?fRm9$#QB^Jk^c%O6bkA*fZD6XB$Z z08}({s*`;#%>^L#2*e&B4#7ai>Ivpg=NphA4Eex3U_Kt14-5>8xjBUJbxkYzPp zHic~7d#nW!m{9~lxS&;_2jK})L9w)pNUIm)N3y(vEC;tIQ%#OzZctFo5@3o@Q>|D{ za%U3;=Nlr}sO})EE36a>Two_~fzE2O8pJYR7Kr>#kPS-7V$w_eC^hg47C#TN0l9n+ z888~3qd1NNz>h_aqq4wpQjOV6+)>}SWA0JXo`)BBCvgu;zQab;B@pblFuqv`f?zsn z7MMUe z$hJx@^6A}+Ow|-0#tC<#5jDW&c3LhTOboiK{kucapNe_8-a>d%e}mpZS~hfX{DbK1 z-h3Upd;VOb_iylO);}fYLSk1PFo)iRLwE#JYwyGT)x*iS$VdL&Xrzy-RSfhj&cyAS z<6+%w@xc8x0__BQNGy}sK@aycNMrWC!etEau!+-s?taZIdQUjO+)#z^D>BLaN5SLs zXB)j-C=9UhfSFM-NCKyXqBf&)o*+`0SrWTsqGSY7N!8V?rFvBP%<~}xGrMwo-_I~^ z`nzmS)KvMhgGEmoeFJz4ME>C4t!HV`KcL(m-z@YT4YB~3Z|NQn2%mh(yCZH)#liiF znIUK_Phi#o{LBm-e*n~!&c^M0k2z9WND2bcOSAD@!Dr-OYVuY~ZAOxcd8;n#|E$TW<(A~2hz8^fr zd@|NL^bXCI^WK5u1y@(%2OeikaSnrNnX}}C$FA;YBX9LS|55C#8AWe}y_&mVF1U)W zVJZtCpJ#&KBQ81q#hQu+^UIk+sEz*Pzy%DInk~a%-5)`Cr4y^9Hv{vrFJRHYgCN_S zB+Nf2H1ZKmZ~txxGg$d3m*ph-9Vyr0gj~}N2(wJ`CfWcj zg^!GH{s$~SqyMM4BjVQ19QMRRM(<6Cj(RBRJ?psZrpkdq^y+M^<7-6nOFKX~+!QM- zn;~(czenQVbOwoHL@Wq3ZoCyeD=EZ4I57b#>@OHwqDdk$L~%8u$?;=+B_0!eo4?iQ zT??wBdC)KYB?yY1pV|L#IG1@CH~yA3SYk2Sib@W*A2Dv^-rtc@Bom<|55$5+92#K3 z-0pB2NfO$#w1Rxw!P`zSkG2i$vR$}g99Cvr{0KSmE2H;&NJz_U2bjKP$5cidLXeC! zM1^;tYdv^@*1Y0s6J&hY)q?xu>*~QjGm_~G#Y(d|yJf~IO*F(XT>}_E$Ih=XV_jGg z$oZq#)rFzh`L&fL6^LD3a`70+1>J&LHH{VadAMXIo8A_hp&vrCBm9aA+(aFKfJ?dd z=rkrq9#4WQh*~bp+A6M={DslmD@Hx@$C`{2&d-H1$u)XU5>=lIXVrY6WSWiM31K~I z^)d4btLoSyG(A)YR#?Gmq_K?r&!@2M=qkixC4^)Cmaa1(I>%oBr9kxPGSu41i2NJS zrTbv5so(%e}g0_$sOlXGObauh&x)h3^x;&Xvd;y@dEhwn62#7_l( zz;pRi$OIqp85SC=pr4G^0`z1?Q^>e(7v3>$$J0}|wF!B8QU>5vz@A5D7eB%B{MzWH z*OHmP476KDg?Q~n(DG46;z)D;heq!&5J`v_RNEg>dVuZ~bqpqM_%}RJioBR#gIyD& zNds}C*a>mV17BA@Z^GE}@@WSpuaXj1Qh{38T5@p+I=urEtG-$xc7msrJ@5}o2KO#T z9OIL;fMFuB-&rvRet@~g%vPYLIa)2AbH#Iqc+SIf*k@93iz&xkjWHX^FlYq2(|vq= zkB^e&)ve$)K%$1as=!mi_S3D zbz><2a?lnp#3TCDX0XW>KTRND|28uRg&K-~h2xZgKpwvz1cW$CfafikDr4WJ-~R?-LI@B#7C(TJ;bBL76c1#dtE#!t zi!;6(y#fHoX>L-$#r5RNm195Yz!p_# zM&7tgxv=9ha*8{m4Y{LPGi zxMSq(;#>Y}{pWsmd;r~txXvh@GycM&&wfS1PeaY}@)SQ9+4J51*nP+1M}Ns{ug>r1 z=FcAd{{CNIb*}4UowOwPKX`zd9pjOnwFE0hTvfQ|sprpgVqi&*=UW-)=ghu!N=c5l zH#3m4$vx#c_w*cZNzQD9Ey>9~@8~I2Q>=hxM^E{@Ek@bVE>88`tnii+?^5Co5^q_K zH%<=SQWYpqF9dQ;3*Y5KAj{I@e;XjAc1@qF8rjd?N?YIY*@|LCMiBqTQ(S z_%fbdWjUUkGQLKV(q4?7{>&L+oJ>kPWzxGF!-XxS%9Bvkt?Au05{XbZ$Q|wmR(e$jRUqKO?-K#&=gk( z;_%Y#K8Ez!RLZfe$Y)3thORBvey#L5+VAI{R=VKK|Z-&&fOf zH#AhVH1O;6^Kf`VcwQd1n6`C=xr=mOo-2W*t9w;VuqJVQ$HLH(rOPTU-vFu%hYD+I zTH1MRv}<0d)W1;N7xBJ8JQj%inc`j~?uFvcTRv|hf=DKUMW~FPCnEZJ7YO|#zJCD= zn(n)!UEk;oCy!x~^e!qFHV?T0)2FNj-&?IXzX1oh<3Bz&jgQ6iTc-Hf33k-h)Hh#& zPcF8!0!c$_#aheJ@e-MTVMkYEcSCzk;wvk_2Q~tu2ETk3V}U{y_3UQHQ3N?vh3js|B@E~sp8?J5)Bwy|=~zo4ePW?f4| zV;gd4QD=TvwlC=D4ws3Kja0TTY-;W9Y8GdABO{O$ZtiSfhwpwj)YRiEFX9UqmEppc z_Ac=)@PZ)ll!}jeC_%h%>C(zFP*k!cR3<(d>x?Zw4^-38)n3zF*VfS5h`Oj>Usr?A zXsm}+scVJ$&BX5)@CSQaTmuTuCc|D&!?|9b7k}8dYB==+FaBU5d;(rg#JHUC_1;** zx!qLb5r&|OZ_Rg!@SI3IHaP7u6`#GE#&d-QZl&{@H1Kf?+)B@dOpJ?kTJwECb*0Yo zKE%S~VzIsW)Aam;n`Lo1`B102Si-4?bo@FVB!bJC@9DE7ocOf&bD1KivX9M;Qpt@{TDu^F6~7{|^@U$rku&pTP?*#<#-H zP;e*ynl$lmNCPhv*rhyBWOR9JEO3g9hJObAI4|aFm0M2T@*2>G(YsxV2txw!rBJ((wl@a4SEbw!p1? z_;-suPy{rd=Phun{Jdd-Tk$Wl$d9$W5ewW}u3SsKTl0Ow0=MERvedhk4`mj(l@H|> zxRuV^EO2YPJ45w5WYZ}YJ}7cTy|4*t{%Bj3@#k6KO1%jknP-8Yif3M|UqAjd9_nyj z#FLLd4JV8j#Yoe@cQ0?ah(}eacrOrl30GAlAh%fHs%Z*HwnaXPOJ6<*yh8;PI^cSI zbB6_PrSs#T0mDOK<{iZJl?T7*SfA2Jz>ZXYFy>=e)$=;rd5R6sx$)0~X`eXV1`rH8 zx;qqz)@My!XJ;MHuaQYGbn(ONPrf1fkspIIZ#5jCx~_Cx9?5Sz>Qk9Ww&ca?P1iAX zBl~+TgZejJdQ+uW=8@2?-W2Hxqev;WfhT#@s^9Ocep$Uv8Z)Lni>FAY&}UJTezs?8 zc^Ko1_+$R6yCq0m?>q9HC z%74?jGKHp#`BP;(^M3^}=1*N}z1CAn<60np5_g?m70dNLLInMZ81msRm7cb&^>Xs> z9Rv#ct NS}XzU6`b_5AJh5so!2qQoOZWU{zg^)I=+aEn|@FHB7Lg-t4m}GoezIG zzS8M5oc1dIPx3hKQ~4Jo%zEka>)$V>NuM`grfRk(#yUb^RgvB-)u|BNYoSeI^#w8TGd_J;dGeUBtV~^}M5C z%+GqU??{z?_7WLuts{Zs)dg=|-I|Ya7S%%kf}(t!S>^Q}{#jIm_a-SW7LUcQV%JxM z43U1)M4OT0BlcIce+i>)M?RBxRHuZozoA{r=Tq_b1@-L1?`i6peae^Ab1r`8s%JJS zrlV+3-ucXGqVD1|S$-z|^i^^R&U}&wKK1U+qYYF8Unu3t}fQg0OGtACY4yx&}db zX+uzXv>Pw)8huA0QF-(NygY35?L)L+^vctmzsF=LAt;EN4-s85rG$lmyVvHr)U zBK#_ubN5Zb=u#B#I#s--qIkyuXwCCFWVux2$dE}HzL&&j^idQ;*p(drXOU+QUQub+ z7MroM3RHn8)G=nXEQueXSYS~m@gu~6Ur%a_y88`~h9a-WxmLxDUJb0JSh{(I#)=os zDTD%Rsm6*29U{13MxK*Y_rD&#+>DHiRnjbC!$QsV~!bFiIv3P#;`3EnGnH> zPrvPciEC%kCeaqy4x%e`zIbuw3zu~e+#HXgtw|8r|B4 z53r6U+4LGkZ5?6LdntT$DDv|7opLP>v}|E0dIeh_*Vl@!8ix{k@t2EtVd|6@?G4XE z8m=h<5iYcFLBN;M!ck4zya_oE7QNp6Y$#ICRZOb5*sH-cKa9rEpO24<_e5Qrkq>!B z;0|bVtjZIt#FFYvwWJz{Iv~J57>fPKcNZ%T3%Bx&6GSvrR|w0>J;q$9cv%IX;}4eV z4EoQ>6kgv=errtyx4g1uMh#Mmi%ZyA@M2Q$Gf6^9;{nXb3d`(9C3?Iaj zTXSVbl4SOhdDsApjTUnIpfMM#@Qu0XJb0_+twZ9L3BU*v4wS4uCdUFdb&whq2+<5M z0DTP>;&0zBgRtiutO1-C6U|oiE{E)Oqlu`#APO~c(b&5Ik2lNc;}D|E|1N4umP%2K zP0%6-U=frXC&=JL0dT6LdG=x-P6CT6!nA5s^+Z09@Dw~l@e(Y8)*Dl-6pSX{igBDK z7|8013IV_~YE3g!@-R_}Dg!B4iFMB1tFhacGKfPtEX_2zH-~+_hsy@%D+Cs<^mBiV zh~Nyv8I+G9EMVM&gz@co6fxM?p`+sD{NX$gG)es+Y^-49LvgNV@80z$>?KQM!D(IC zlpR~AzFQB(fGI9Dk&4XCobBA{Ge_y#Hy zrql=bA$AWHe{7Uea345!J^m&Ly7lh>if_ejAQagjiX>CtrBcU#j0e_3FnZbSdt2JE zFdKEZwz0FT39X?D6?kzQZkJ%sJ_zS=M`rYNES5(71vl%g#*c0qFr$~!bPi)H^VO(} zt63M*j13E!Vq_2t7EzB_0(u$VS&wGqS)_o8{##v-^#b>0q8`oOKTb7n;&KaFj~sL+ z>#_UPlFft!=l(8u1IVAa{`$}1fqXD-nFBOvLn0lknsXMcAJp}=`0F-VU+#V3qexC) zj9Ea3qn1BHEq@8GctS0c&JyFEX{_dARC7frGRlb1U##Xl*VqFn6RWwH)%>cgW?{RC z8e%p7HEE3gt58g^p!-h%t)|r1x|XM`AB(Q@_C6-*!iD!u^^tY>y-s6%YFg6^56_E`K4fao#TTQtvoY&&db zt&tt^9cYJY&A)($=KjIFfpvPl@vXZNh8M~G`(aTc{>Ef{j-dMKI04^9n~6V$z@`Dw zs^3E@Fjg=*{sR_=f`uY*zgc#&#*O}^%mpT6HnK(rXA+0(*VzuK7iVKF6*Z4I zLCX_kJ~Yx7%*gLV&4i+8)C}>)1A@#x5P`}TA|<5!ArwLoVn%)g8MBbl_d^85H{muQ zXikxDu{B>51+DHQl`m*yzQytXWCrL|C|l#tz*dutxdaSVf+13fTRQcu?U!KW19`?V zSgh?A$muK-o%|rmMfFy!3>NUmqOJRU>~CP&K=;i)qzxlYl!OgK)Y6981SGU!C|IH+ zWUr2AUhEXX5O$GJE2aPm8%7O8wDE#Xb1;~q>(Ps%si`&+a^o0?gV``_SlWi60aUGf z>EcA+%Whv8GJ}XsL&jpm7<2o4JpcJEmEenHiXu>&SK6jc zn2^O;=tq?t5Gn3fZjj}+3RnY5ONqJSaL8Wv^6Jv?M# zl6xU20A)4826{+nLGX%93t=xBIF70aM&ObGOJGW&miUw%-=g#+1gi>1sB&M4XZ$&V zm`xEwGmF)&4fq+7}Ldiadt}NFTgk4_2(ic;>OeAqpuqu?KMz#ebPnz6Fvk4*Cmy#_`Jrr)V z&4A$WG~MHvy`{N0=MzOp)R@uF9vPiWuD#0Wg6W?s=-wA^gyvKI3tNE)yIA!g7i4*r zN=5And+Rl9Mi30*@qBO&P?di{UE2e=aol9Y4B1D0KFPZ$WtQ zf^2%O`F!Nfp*K&C|BfJO(}}dYe-}KA4Cril!Sig$h3o~rFy1v zUyoP*-Yjxd!#NHcp#z%%DX?mJ6PeBs05;n1wLLVY2w&6)E3^K1PwUjQ&gjIq)ooL>GfbZ4pq> z6p}VAchO|2LeU>(_8__N{$2%DSJH#c+&HO(_Q8_ut=-@9@7{b4ve#}Q6Gu#n!!H+rU2@{zmhi?arq5hJ%sqA?hw+f&B(H`#STx!C-mVwm5?}nK4vF(iSqdh3>*_9l5Mn>aRLbot~ z$Ph-aX9G??#UDpvZMTB4I4c^Z*ez)nl^~5)Gy{-l8M3i@p|?>@aa#23@1Q3|`VLF_ z4y7qYGh+4vg;tgdMMwO1s}7ySrg4 z^&-9iU@;IlK1J_-|52nx`fx+BJMY4qZhzuvARVN}5u2Aq12p7 z{3vK9k+2l9_Nq?QSzeZ;bpZX1Z**c)XOrF$%aVbs)vGvjiK&yWc z`r_7mFsmAhp33fg6M*b1MeB&j?p?@D8w5%#E2@iTNF;g?n12sI%JBsA?{?t9#|C`O z(4(`U=5gf9&9@7bW&~E0biZ!T%mDXw?{{^DSu|$!Rbf8&ZKGYrz@GS8v*_12I2XcT zM)49U#i^jB)nbNq7J(5>p+axz{I^d-8WmjhW-1RXl^Z)$sIpM3tHX?Gh5sgd>E>#% zfF;c4O)GjhFkqrfC39a_W9Qn&hI!LP1Rj{#gCsb`J`p2g@)T2#e#f)d@|chh{eu0^Ceq~6i zIMc)DO(4;XnlQwnVbuqSBA)HV9zeS)a2{(mBH+2QTDF1MExthlh!Yj*Wg<3k=EFRe zt2`u3<{=Uw55~QhaTQjPOT=SZ%7p3;GhuT`OP;oRB=b(4C<2 z77SB)4>CUr9s2i*l6!^m1TyXg_&z8=(2DV$ji9JJ`BsWm6r!YZ+9@ze@%}#KFr7F} zlA{L%FA`12DoO>QI3Y@A?6ytJgSxGe@*0)zkzOJ&X7&o!&{4cxNb~<)+`n?y!9E>KLqb|1S7mh2~xM*)NzAS*){=}Y#AS=QcdxrovI zsPNSTk22+DU4qXwY{fhcXi}{^ShU;N@GBTuOK+Y7TcWfh6scUlWIMhR*R^3eh5_(J zO&46mAd*c#go11jV6e$98PmFjPypMy*TlKqc0d|9i|`2B<^)(ZqogTHD@SU3rE8v( z<_+hQUr@5IT5)1JSfteRb66*Ulk~4e>+kyvkYmOOla23&$IK{)xtLX#%0!|kOVO=v*GdJNflb#A?ZrmLmDl=uG zS#WLAxa2fZ0vEMcd=5_yNu2HIf7rjfgg$!KuUH;OSy3E8tD>k-V|x;^l$0Z!@q{{z z-;Emvuk4=C$PC2gStJnQC>@=Uz7zOKMhhD@VOVC zVf68sJ)UKIBbZ-;^YsEnNNU_Vh!h;w&koj)h);33MP+A~N55Fov)Fe=_#r8BucjBd z4I|8*`nCU`m_LpD6fHrvfG#Y6=rXa+5oDOLrLfti+KsG7h)e=U#UtXt3fn`>JQgsr z6zAiV7JDWA-ztWv3VEU{?f@cL<`av+Y>dM>-mwhA<$N9a{u>My*;eB#fJFI2q&EP~ z=WyDNL*B{#_%Xzlkaw8$w}`f8%)G!8Utr0H{;230IA&h&J}G|M40-?|4*;RvZ_5=+ z0}VjWD$DME4Vqv!`5N$H79prAvIPB$s7RQ3VCZ>>O!=NI=O?4B*=R^|nuv4>ghNno zi7_w)1X^P&Dh`9S$EPB-sKWoo6S7+FN>PP&WrisUu8>iUH>u8yzB?etth7;NoUmx) zHwh?H;XEmkYJ7(*6b}l_fN=KZW30XS9HZ~A@EeT$vS|S7QbfU5TDH1zmTTtXbGpaj z?<<6VOPn-m&c#}@KMKrAjv9SWpnnwe?Z6U%Z#op@Y}z(DC3`>=)_b(WpEx4<{9_SW zxd!k_G)&TBF5wM5tc7E9CoC7v*cJyMA0bg4Mqlw1I@o=Mpf?L9vZXHQn444=Vg^Bu zW<+Hapu$pD#@_>*tc)9pS5?L!$mW31%a&*{V^!AzN2IMb?qYNf9*n+YpeR@!0)y^h z;_pEz4NxQGVc#~X^>R1>+)ODe)g~gV5>%BPj4GkM#Ydmm;KzRZJp3imD=@8yg>}G( zuR_Ax8iQ{jr0newC=Dr)IyyNx_ZhOK2e#X_CkWH(dbGC*yk2)N{BT(B@$Xn@3ykPWU+@06@(7I2 z-*hV>r(gI9i@tVC5* z(Jy*6tll?R?B=l>UqU6oNaey|l$dQ&jw=5e?btFDSPstz#sQ;jkWsuu%8HGdWu`Ea zuS3)S7{f|v*^~{DpJq$UH)Q%avzKvDqhbTMrb>zYDz%PrPn9p@W9f(ZZ$+P|`s<+h z5D4|1YCr#)&C(uH1p5;r$nR~ZZ5R#_tbUFnSZ@`ax1*FJlX`|do37U3*pOIE|$W_13iP$i!mF!v>0>G zONI3H-zbDB*`=5dOc@{ONkFkScJ@Z z9Gck{J3(qOvEE16*n>ipCL?CN_#$GV6;hZ$eBY;nxJzKUq`Kr@a01=$^<2~FSN2DIx0tc~GWm#`l2`rvniA4Wsy8d~XPlWdW^O?lQ%V9sy7jjhlb$rb$ zp@HK!f?=3HjEU*A`{7?kt6hjYIxlItV#Fq9WJqM#0f0)0-wCELXcLgjAT6Hpl{98jq!RKU|0CB{rU<>dBYsE9Aj(txC!(pQp;pXW zADTbsq~VWc0@hLo=e|XrC+7*xXqw!|H`}AZz>mKrDvZ4r>l&V#cpE>BMxHKr;;D;Z2odUwR2d4@v^?x z!>#8>=DdpU$B!S6c<@hk;gbo&?y|mj!=EiPHouXK9)5v?=bp1&-TyKmoCB<5EWAss z8M@s^$`X!~?i1lO$pysXG$B31f^xJ#%f;%mep`(1%duw*laA=lshp;9_g1cTzZ5rY z!3UuBe?n$AdlB<8F$I3vFjFNj;w!0A$gpVfLvdPlbTt?}4caa|H;A%ua)&j1JKpf-nphOEDtnBJb5CXj)8Lw z@#yMqyP~aqU7I7YuA`%|t-&>Yc~{-)MkMuK$^-jw9O7kyg0ATvZoKX8;pOYG2)kQ~eseGP<|cg@4}8#&2|k-Y#!lo42lWb@!UawlKgA?TuY+UkZEc zT3g%K*}^#OCr?cf%~4jJSS^6+i(YSH@Lo;+qUP|Bs5w=|@aCA2DVGY4TGET!(&@`| zdOS=@e=X9NX_v#Bo10lf0vpFB$@PYz*y?PoVd&jEJA}PA^zOi!fT^Pg5I+>17mBXU zeh7~}J~%Lf{T8~rA4J<*+;=sCCp=?xC>^Afc`4%Z9H z$EErBw2W;nwqE|5&>_MtHK>cITXb?5p$bT&2o_>7uvW1wHZU|SELItY2eMYiCj~Nr z&UgGKMf9Wv?Sw0?Dn1VgZfvea&YCU(5e-2t&eE(9ygJmvK)C|0Ho+%mnPzRAu4=W2 zN#rYTqVXiA*fbx~FLARhlVNtyph|gTt_OXbz^MzNhjqzy`lIA}qETz2)aWl=G~4n9 z*nbZ1#5M7^ z$GeZ7hXntT@s#_=nQj3T@R{!HW3x_leGy>_$ZY>LE9>UzuD)r2J~M4o#$Qi&^-k{; z@f+PMx4N^wXSm*UXWd}9-gg(gljHjSl&qNH+B7xm*&NsS)U|lNBRgwbj_U_UW$nsw z|91LM-0>XOcV=WE>H{wJ+p@3TzPR$R_rX-_db`ktH|}%$yv_=eoEHA7P%r{$ohvOSMOg%2u3V+}T|p_O^Am zwtCyz!``)Ztt|~I{%Kujd24EDLFBG$Zh?W((&atvs_wbobG_l_maa3-?Lv2+JJ%8F zS}Tl?v(7>WIE)wlcfC4~SJR9AYjs1Q>-L7oSI4zg?qmqvbQx_6-aDmMORduZK8^qL1VWAmSC7^=|RvBT!y5(z(x!egk^Ha}1wL z?tU0+_~AuGoAQ@OtE#t{&>}xi^=%8auN^|eVmzJuC`D&u%tSWGB8YQU`l+7Aze~Fx@q&o=4aAd0GiIKLcq|sa*38YeaW5h#_!E3+ zlr@cQA7b)GEa*%e1Arw=n1+}gj0^_d+ss(8H(mt<{~vqr16WmY<&P&2HU8stLavD>9@M2t+uq)mabBf z8XG`J)T&h5N_Ew&e=1M3u-YosTE3spnVI|M-MlOKXSe(N{`SJlz4y$SGiPSboH=u5 z?u?WJ(zzV0&M3>a0F<+r;_%}h407%RLKQOP*6ebf30p8XydT`PJ677m&wTsL*k(&m zx>$MUdShZ-cAjGQ;rgFR_zOyd`8V#-B9larrsO5?I!yGh!*|yUP-|Es^w){bnJ=@X zKOtXCVg}`T>4WG5$Etn#_B2tk8}hsCFn2w3Pi|2}*Zlyt+V?j)__l|BQUy00;QrbDCiJI17^pTj|0}hFS73}hZk&ce zSL7Jkl}YF>AYosD>{6s4^@O&Sy#g-;&ct2W!)|6mY215CZ#5)aN5Cp}YqmJ4OCj(H z|8g|+1tZXw6aJute-399IQ8J1`6sE7e+AzO?=dXVl9l-heurh12si#IrAwCk{qTE- zitX+fB+o1u3v^@f`)eE`2b#XK0bg)dIINo!3tLlk&TsN!;dT>+RsfWNkoxM;hq!umv z`VpAkSO+ZZI#8bQzl2)E$L2FJ5O|f}n_F`?2O610qOZl5!%@PIvzAGsf0aZrYlCUY ztLC!|kV;jLRS;TV)l4f-_7BKsEArWjd~SyFL_UAV@eJ~LhLURJ^9U)xUApuS(baY= zs_kec-&lOJGnbkejMP6^t=@6Xu%fur@GO3tne|JdAi%AEJgR;Mu!9Azs`G9ii#MRhU>*l5SAnyh;E#7LT%Sz zKIn)}ncwERs`?n5y@QJ20%^OJGceHS*Qj-XZU#EGW+PNOOh2qM!NOYkAhj`Pox-*w zgVx6ygUHPC2bqstd2BNBCY{|M$q8mA?6i}qi4ZGhu5}`ZYYdY=)7h1A{|0Gk-20g$ z)oQhW13&av`!`&HC**5?tYv6b3IkYkur{e2wzOGdg$Yp(?%Kf{ai%koVeVL@{UzS7aK9i_;odwzM)@;rnM{mAvEhi|K{&b@E z2hzk8{7Y?ja_VzLa$LmJry0P2@KF=J?8J)yh^w#tuOEvCCUY$sP#+o)cHp50D8uhO zAPjoiQ>`&UPF&P_JMg9W)Ewwklq`x_pfywR;d$zOC?xcXsTd0>o;edUq1f^4CaNi@ zL+pcgW}{4n#=UbO#c(@ZFB6$D^#nP%E*ehJwKo%5u6a({@s> zxKt?(CNz60K*2n{49k+S>R`T68kkHr!hM1^CR;A#W~Zvz_t$2BMK3q%k^3LWC$K1~ z((KJbxgMNh?jL0aHY~c3vmD)4^qOYYi;fAZi!qYh{z5IRGKwQ@Y=8Kqa&br?I%X9ex?_IEU<}LGF-YHx8aKr2MKO!{T!O znw-P5RO6kFUQ39f^x=atnDnLhY4C528_LsS>P2Q{rf@h)edMbdJI z)DC(q>Ws5$L@$FfAayORXT(^$>CJd<@wDF)JBLE3bl$)T=M@#6q zwTzqKnQaT@e6(SBouk9}i6Fyn9JEZr$bU+Q(UvO6e?xF~Tm6v6LB9t7IC(B~${fyU zWBu?dzPd4Seo^t#vID-w*Q1U)Pjb-t!}@K&7C zSKvH7`cfkEE9dx`v++s>?EnFEAy!oh@z_Um+yKl**r&B?-9 zLwW`c-gQX9jGSrG9U~biD*6IsOO;>Gpm4e|_#Sz2=bXLB--IFS$`eD@)h34Y*AMD1 zm~`F2)Q3woP1f5-KTA?(1V}0G!pV4f@8)H2!BYpgmoz@tDR2#zotg6kSbl?KS9JxK zeoUhbmff54@%c7bc5^NSKWZRQ@KMpB>nC_;x|O>8sK?DUSWY1_Z|Xi2bvCFdM~6C^ z*Hs$+ef26jl#kyQ_@PC+@JRtL>P=pQ(9TGwU*3v}sQb({Sazc}Z@K&6pts4v_%v8f zKFEiCN$4M1v`SY2^#iY~kv`M?K4lM=$cuUeoe}yece@!vO#CM_KHC$oyEOctHC@WP zxdzJ#D&|eyxlnkJ1vlv)1RYXr$(2P0{EW^gg11irU+tcrAM_c4m*)fV_F0W@Rjc4s zXn0uCPtkCGj$>b^YB;`%%e%&EIKE8HyXrKYdyU)I1PwpU2I6_5hMyaPPttI)|Ew@h zg|OGIv|xN}61dFX=7ltCc(?^$q2c9u*hNKO*6=X>B^q8E!e1uvBZ|60aCK(Y5k=n& z!99)t;}HC24PO(2uh8(dA^5j6d|e3s9SvU`g8x9nyF>81H2ldB{B8~ZZ3up!hQAhq z|5C%R3BfmOIKMfvuSW!atPPUqtpeAL%L*+QJr$N_tcw8rI7<(6i7zkq3&&Y{c$@+k z^#OjY>{zb=E%02wCSx1GoA51gL@V6u2^CS2y#Ya|!_&hQKei7i56V@9qj=Oj*jljP?0`5h?H%Gt^ zL=qe60sm>h3#EGyfQ8_R2>4|Y@OcsNYXLvbvVS^-(C@sS)s55%9YJCqF$kiVqo+;ql1`{AVKIZ$`im#9FdKd>%{q!0x?h zWCZ?Lz>k&F3KgGct6R}m1%8Tt%cb@E2s+lfRvx{atZq90a-7)Q-29=uy*LxPb;jI9 z@w0hS^{F`5Ia!6%yqo7?RZ7+3WPDOJL1X4MFJ2s%;28pHsK#=Y=0!6WH#ao$glNM; z(}IPwngwIz+{KG#@UZVoj9)tM@bIcp^Kkz1%o+3KoagxEAI?!NM^XPbB!Qy==gIlo zXX`Tx8+lGr)hO;j-^8uVv7Wc#$^c6{;@>aBA11$Z8+g)nr5tnpUz|jcmA{jCjT%My zn%_Ea#?0oXIdc~zo7xu4{c>A#{H*hF!uY7F*163yo0rU8+?-pK)s&o+JQZg?&Lh&K z)0-L^CY{w3KT9SwAfl%SB04t-!Nq!SE!(4V!Yd2Bn)1TyThE=`WXbaXmPf8U0wJ** z#h7^uXUuA7JbPy0P|Qp%XqemBIJ5EWb0#&NcCIXiZ_v2`I^IrfR_rlz?I=i-FVqLGR5mHcxm|5V9iRh2xClE0(n?-=>3aBu=B zFi)4iH~jKXu%vUn4<-Al!T6w&`}aPNcX?Y&^u(Wuj0Se<%;Z(A&6o|Wp0%)P$=q3} zvzZ?&pQD7&$rqZw;Unj~0qo71*LdapkCn|TRh(Mceq<)=D|PiO9NpTMR7E;z;i)b2 z+7{1|5a_9(H^(Z_nTwkFeMci|#DcSnZ9=U!BdZ8Ft*L1tzCLN5F<-A6EmXq|=L2)J z5(SMNm%gN7(rHbgKe}li3(l^3bm|jT-GlDjq~QPFof>{uf)0>LsH_x9rzqP3TA{?jOGP0>@_R^(ItuS#GF2Gvn5jdLHyg)KAX6C}S zq)Krw)uELEs$*1B90G%1az--D?LIC|sX>WCCnA2s`Sa(Cq_$oq3{}+_wKQ+x?71^B zG+DH85sVPwapAnh4RZx;QNeOoLKt26Fdc1y$!B)b7!I2zL$b7do~9P`f4IRIMpqbv zHNaX8e+>{nOF|m1JO^2wy`W7N^`N>J@WaG;Iis}^Xkz_}<%(P{Si(LLLRT3SQS*Y? z$vOFD^!HIaqsAbgvzwE;=h8+#zoAgNNIJM&k2tH@^oWqB9N6ve-gA2#Ars-<;}C_E`N(Y-=TbT^{3`o7~rN{ltcuYjX$gPeZf7wj=I zwn4T?T$J6p80^f4wI=QFbV$d%xeH)bBfM(noEeMYw3#tC36<3FacLkZBNivjxS%7* z*H)2fD+6HW{Gz#w7q?>2&BCV*rESLdDfV1-4JAY zj8RqSW||hZG%cF3V0Lp;%Y2x^Gq2X^?Tc8Lj&0xAGuV03Sa`syc=(`&OdX*<2j>7; zhAJPtrmCnj7d0!_$c(n74fE&ESN+@vu5|JfNtJ%k?1{yrIWq*q zjoY-5yx~7hiv=^KE2sW8hUJ(z#vQ5+YR|yAXP!BUKCrrRi3XAMFt)0~rdf*@HqC(^ zoCi4;4Tmf)g@*t_J?Uc|a!!tayyPxC2ZhM4ea7W;udIR@&@^-2jKzzaI2=bO*|M+! zXUJ<$F{foY7tD`Oc4)D6s~Z69TNectKlrB&){d|`6>(lObfo;f={sEo&|R;_#GBJZo$_@!22TL zf3)CdS#;jhaPt2}3tp+`9~sQK9+NM%&Sqfw{ELM@&ceSv0zL@qKX{S8jqhqW`Qg-@ zNq1oguGubXx9D7G;eW-#zX)(lZ_9Oy1)pNUzh}XTkLfhIUbE<542a^h2F>8dE&N6cztO^H z`I~aPCK)Dd!y)e3}J6K(E&zKG!B0{0a-+ zWWkTddJ$g4pNyZuzukh{<+j0s&$93z(QuZ3vju9@cP{!!Z{9$1VK17W_9B+?JD4tW)7dI(B<355ZX;yy`Wa@3x*i z+rqc?1pV07d zJ$}l9+x%BqaMruw^MVNaQ!V^+E&RC_ext=ttA%gt)g>XgDd(?-;HG}R9)g?t{b>k( zIMU|z3kz<`+pjg8t#rSw;gl0wZ`^L-+j`>{7Thj}3arcFMSg5O zP^sahZx@=6{lglOMYt zzih$V5oYA)I*ZP7z)ku17W@Va{!bPiTaW#~!ngI%Xbk`}(5Zo7s5 zSqr~20{<2ZKW5?I8iBvs!av@^UlW19!Gh1S@E^C}HvcbJaJ&7!9RWX7FHxr)mRt0P zYk0U`Mp*cEy;Mfvf5C#=^%A$}*!42m!ngA^-NOF|i_bX`_(==ju9s^g@H;L1&sp@l zBJjT(0l(XV+vWdQ1bmwXxBUjYG@SKvjK$BNE&RC_{I3!C#oEANJ=*v~G@SHDSagoG z;1w2pxJ9SKf*)(an=JTWEVwPV_tFT%MSjNNXY|0U7TngWZ)-UDJi)^M6rD%72tN@& zL#M)mpJc&LwcsaP@Hz`V(t4ZqmG~Jx=WBSFPD446 zaD~gKxm>^l;2jb0RT1!eG@SfY;b-`H!NRxmbsifzF5-{E&){FI;bHzCwBVf<{%yzM z1y?v<-4XC-BH+6t;1yKXn*J=@4WIuQ0snFY{Duhlk2QP{Xpgq&-)-UB<#t#MNVteU z20z2kQ5w#2u<<`|ipm#PIKP`M zxK00XDrJpt^O>;VHvXS1xXsT6RLYu;4L_dBQNwLINegbLd#eSv<>8kW+?IzwTW}kH z7?rF}*Tz4`g4_6Cw%|7Y|Iu*jpHuNO<^OF9-?!jzT5y|A1(h8x){EUPHdt_*pO-AS zO=m2XATH9e;nzmMH%7q!WWnupk7Oosh3Pj(zz;nwhi}uVwBR{~ofh2Y=RFH<^K&4Xz(szl@iX}ys^KhW z8z1ZH5?~n;xq;KR(^*WhR9S4H4|(Zc_{ zgW&T<}W!J91n>n-@#BH%x@;5SvI(-!;4=1m~81ylxJ` zmuUFohpX^_9}PcQkFyLstKl^vICqEU)ewR|rt!}U!OeP$X(9MnO=oThK3>DyLhwNv zzB~l~vW8y=7KRE;+J6O@L3BhM*ctZ$o z(mgK(H+)WufX|J9w}s$_{_+s~KFxn71ULMDGX(cE|96DohR>gc;6K#(hp6I^c2tLF z^FC6;+1|(DXWGRX5pdm%2GG&Tir%p4oEbsqk_h+#8qQ)l2S3B-hzNXb?g>BVTKG2q zw*T|Ln*Lc4e6la&#d4mEpDE}22*eeJ+k9SxaIF^bt+BdTK2z{B<)h6^p)(b5L*K5K z85Vpzo_R6d^YAnHhJVs$x(w$<99{-~l6sXnbQ>Pi@T>LR;2ZwGso|u1IesSH?^tk~ z&-E63oQ1#9g4_5{TW}kHr-l#0-7e3PViiERU7lt?J@RRnr_tYp+v(yEO}PlS%ahw@ z^D^l&oY$xj+?40I5PY~oFN%lYF%7>w1UKb;vxYN0yBxl0!7oQxQ2rKth6VqD1y5S= zdn~w3UydaJ9@A~J@HbodS6c8#E%*!zZu++{|E8Y_!%aUHhR0a&xCl?-XYyQTD z0so1H^Tyw;+MYfuLQc$HmaLa?R=Q~m-}VoD*Mi&rfoCnajsK1XxA7-4L0r7qaPGUu zi#L0`^QML~PsiYANrjDXLLfUAAz6#W@U!|++k zL~)US7KwqE5r~WYd<{PXKaxOPC*aqGpMf7oATHARI(`QJIRbH!&OhO2;Dqs_Sbtic z^8XON0zbot;gj%hSg1Dq77K3T5r4b|AEuuPueadlk?>3KtJMITKJ8UQ*W8IuyVtzy zXp*n#<^}h1{mk-VS(s~#ejr>|oj};8coDw8JgGm|>Sx0FGgqH}Fz{NPh_QBQd3=sD}S#YLd_62>uJZLc@{n&&329tij zhSzC5Lpbr9HQe;GglknOA*(I?!!#~$f3o0*Tkxc=XVT$sl_s{#f-~J#9p^y{F6E%> z<53Gv{7#L}{RerGwrTr(|4$1}{96gcRjuXA@YAoERr`1cWm*hNJ*S@`6~?2oGU zsm$S*Yd+Ul_)Np>f2H=3%;AsG_$9jW5SR4LKC6dXaPqTJ8p{8 zubQ8nae2{5d_JY_bIjAC=6N$l;+rRIiZW|Paz@d}%NH*$62M6HePF>IKJdlAjz+AH zZPyEa68~RBn!6^9T(ppRWGPgQ#4am&nXtaE%k2k%V_hRY`BWcb%18Vk2OY(pU8sMj z&y%hF9jtt{Etog=ispG&6^)!d6W`1)o!Q))Y=R`=v$?!N#g;a@jODw)|50DKM^*d( zC?*F8W$;Dzhx&T@L+;tOx3BFj$&h;f`!M-&d`O?46Z?DKkL8PXi#&F-ScFZ-bOm$o zk)|1o7R^AD3R=v^`pKzETJ#2bwichJg2DzyZAxZ z&0e$+Rrpb__yI-M?#(%BwffQ6x?jNi7xB|(OmL5iZ|po{doezL`x>9VAYOL-f5iK~ z#y2Hn{7+1qBISEgs z85KW_AAYYwT*CIJ@orsPb^1^bc~?09oNFi)zhB26mlu2Bxc_{FOZkP;@B5C5X!Hon zk3+R^`TZMUh0?D)L&d*L-GaYi{_jFaq4dkXtD;QTF_}JfQ8<0>tIzaDX*_fLnofTR z1Fg%vnmgxP_#7_(RZI|9t^CdX3G;s>A{XMnwE+JdkB0f56_I|wPM^LS`wFMu6p{W` zo&HiCndCl&UpW0cBhs&=vd8sTbqoH6)93t6q5QkwQ&B2)Os3Da8czR=LAv}kp1GaG z&JLH^M?k%)@v?d5{dB~a^lc!Xm+JIu_4u3VAB|r){j+uYxaD8t)$7B^pM5bc`4Nf@y)*OirT>TKLqg$ z)!(|+D#mmjk>z(BeujUeKYtdH{?-X9qS+5#lNsQ5yfY&GVLwzcTpf|=$M6fMe<7GJ zl>geeifHzi*JK8ye;(o&%KvnoevgjG^x0R0(=Ug76-vM7Y!%V$C$Gs2NdG9rFO+`y zk5mk^S2)ujfnPZN>rMJ50e!FKBr&cN)h+lNZogNX^aBj_P^k?NTYu1p9!~$C5Pt~Z zsK&gjRi|(8O`v%<_e@0kt9AND&X|AG*OHcj|EtcwnYT6RwCnVBH5hPFdGMqj-qG;~ zhZMk89Y0)NhHpdW&xZd{{2tA}t^ZCzBop88e<=(f%1=1`ew}`~Nl4#Kd;`7^@e9e% zE}g!s5m|m!_?h@7{f#DlL(tsMR}TiyfK7b!-fhx10DZ4!$BxTRe>C1rd_(tfo&F~T zJNKttr{99;rO3Ne33sJ3C}Ba`EApRf#pY&)WkRC$NYrT2B>I?p7<@Ja=}G&geE~a zKIeSGx(A@5IkWk6P+0{h;d`5@!x7&QUBzE^}|WL~EbRL2CtETl9RT{1@z27Kx{_nG3-Kc?f!{>@XoF6}kG6ahehlN> zBHJdPsj4V09N$mIk1&o)rr^hFnt zIc9IgkFdG;eF?uS@SBIF4WlZ^v&remCI9@DBV^ z`ZJpC85jG5!2o+<%83ue!+>xE-&Ry8Z#KU%Nfw-+sU@ zKzTU*l)Cn7W7Rm{{k`OIbXshjR`Qp*M_aB0F{I&2~l-yDPn=r;{>)6Y1mTkw+bXCmY!C&g*%xIZt3 zpx2!gg(2b3M-W~XAZViBhL^XT)PaaJ(LV<-4>>93KJH&NEa4pz+unrD{Sy8mvAADX z24Jo0mBiwiI-X*mJQ6@0506vqgR|um>P-8q%7KGS>D_E z9cRaDgvWC!x7`@`&qVgF)7d*yvUezecAD2A$ulKIh73sX?HoNPMOjbyV`BMd%rC2T zGYyTX0?E{&uHTTO@A}Ki5vu4TBt+i`p48pb$VkF_J$njIlJ~Cx)$xt4e}$onmrQH1 zV#mJ*RL2{tcrYPS3OJ@-p`~9>Ugml`vKw)xecWG$;%{h#bSR2(n@@zI95kN@2~kYw z1|nj05QJx<_vh>_LiKu3oq#%RGE^tz_>BA4gX#puXWYj_9-j$skLL54WNF-cK6@xA zy8dJ|3IA$je;l%ZiI5%Y`glQP3aZ3OKv+s``X?Lu0g9H0TpGh&Z)&VGy8_F0khBDw z^xIx?A>(M1XbWry{>3I;yoA$*Oy%;muj!U$_b;4o$Acp-omMxsZd%=CbxoVP_NG6M z(24@QQh$`hM1A}iP2Git%2z7m1PT=sD3zy0Kg?Eo2IjfJf zKWMrBG{ste>m>oxdPPIeM?}|qHhUjhuaOVCRpbgoC!Ui_m$Kg?YOEIJrdnd$q?_Lw z72~?QBIA>V@n^H=P5jksnDdC@ijzUSi zA$n4dsBVx0XddNy!(-Xmg-E`f@RKoWW{Az15F1tbXi2K_b1hiqHV}ZM@L87qtF)xI zLwut5wp&t5%Sh9foMUQ>-gG|mj@2hGe~rrA^(U0NCm!H>n_Mp$YjrogJJ|ImLzvM0 zEp4gyQZbr+u6JvU=G>dk(E8XswztlgN-2o%NzHFLfGAq!dQZEVrNuB{;@*RLpZuij-y%;{Z=nNDRJ$il^x^TO-H? z^FItZZs!Xww_>~0a(&E|v^rkgMdPd5?dbm->vtt_ig&Pwn9hJkx8`9d^+VJdNmi0X z)iVuMd+MEg?-8K@6xLx8^B>dqTHbdYt@9ho+a{;O1GPHm=Ox4IYj!PrzOJLU*sXyT z2dPG%Hw=aE?WEw9x)rZV5wlA|SBL`f{;12mq38_?A)(s@1e922OesysSCM*0eXO>a z1yWs9x20q_O66O$Hvw=oGE=R&L`!L z{I|VG#!wQIW7WwaZ#ZT3zeVx}ZRZmp@ywe}*|o8GczWp#=Y*|qI8&wfhS0w0T=Ghb zGh*W#&Se{z)*DXKCLj-AiGW8CkVRtKTbxr~b8h?(bW?9SQ{M$z4>C|+43u63p*~@R zf2AM6MhMVKW7+SZ(!1)~ONJL4aQ17I15;6`rl{J<=>%yYz6b$Fv?g%9X;XF+n{TyW@Fn^uGc3*R^R?!`PL`s5$afj*@kbT!jW3Syl(Z7FxHNwN#sTS2(*M5C<5e9qC153smbd2px zX*~l0n;NThI_l6WZAAeI98pZ^7~$5`$Cf&&`9KH+?d5m1ePE2&I0l$%M5soGdRUl2 zxEdCAD189Fk(`lgw1%fq@nqn}a&(bwc}#PPYP%-6H=IizdefPfh|NRabI8hMt7*xv zfG0GftqDJ+R2S5DSrsJU@F$#O+9^Gd&%}QGJNy7N?T1^ODUX1}0TkAFO;1}tQ)@(d zFq75EBl!x+ytw{7NMXrt@B`@{S|shQ3VH5wy^S6H#gqv)hXXfKG9CunL)mB9#lL@N z(Q$u_Ocf_%x}?E=QTFR-v?Q4QDH5onI(aDj&v?Y}E(!DYp4cj21xA*XPP#{htd8yGBIck(p12BYNUqIl+_-MTwV zz))C)@a)3fV9NC1-n-e;@Lshi+k}ELIP@e8%brO@FvD29*rDfGBV(#_Hymb1S`k

-$Le9iBqMkPmc+TlpWpANQd*}y=d%vxl9QXbN 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%0AyXHh-<~a&Cl50K+C30 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 E7j2`XmjD0& diff --git a/source/Parser/lib/libcrfpp.la b/source/Parser/lib/libcrfpp.la deleted file mode 100755 index b3d56f92..00000000 --- a/source/Parser/lib/libcrfpp.la +++ /dev/null @@ -1,41 +0,0 @@ -# libcrfpp.la - a libtool library file -# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='libcrfpp.so.0' - -# Names of this library. -library_names='libcrfpp.so.0.0.0 libcrfpp.so.0 libcrfpp.so' - -# The name of the static archive. -old_library='libcrfpp.a' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='' - -# Libraries that this one depends upon. -dependency_libs=' -lpthread' - -# Names of additional weak libraries provided by this library -weak_library_names='' - -# Version information for libcrfpp. -current=0 -age=0 -revision=0 - -# Is this an already installed library? -installed=yes - -# Should we warn about portability when linking against -modules? -shouldnotlink=no - -# Files to dlopen/dlpreopen -dlopen='' -dlpreopen='' - -# Directory that this library needs to be installed in: -libdir='/home/mabdallah/lib' diff --git a/source/Parser/lib/libcrfpp.so b/source/Parser/lib/libcrfpp.so deleted file mode 120000 index 01ace25c..00000000 --- a/source/Parser/lib/libcrfpp.so +++ /dev/null @@ -1 +0,0 @@ -libcrfpp.so.0.0.0 \ No newline at end of file diff --git a/source/Parser/lib/libcrfpp.so.0 b/source/Parser/lib/libcrfpp.so.0 deleted file mode 120000 index 01ace25c..00000000 --- a/source/Parser/lib/libcrfpp.so.0 +++ /dev/null @@ -1 +0,0 @@ -libcrfpp.so.0.0.0 \ No newline at end of file diff --git a/source/Parser/lib/libcrfpp.so.0.0.0 b/source/Parser/lib/libcrfpp.so.0.0.0 deleted file mode 100755 index 950c99279d758b3815b7c9a7969e599ab0bc02d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364296 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

d%Oj=682Y&&e0FyK649$4ICSs*wB5m0})@ zbgc_GVro)@8HvueFQ7hVr5~V;;Bw3(+NSnqd>iHto@QPQ+icJ@7p?)6fIo55j(0kvHqqre1NrAcph1 zia6h`4XyBYi7`X+A5ER?4awgG$=3ILJx_IysLOdYW9~c8x-)Y!dw+!8r8sxQU(5*Z zkCsYh{s!*-Fpyt%K};v%TUn-vZ)|?QGCCC0pzaz`g_CudMs%AcbOPkmi_u)UL~5{ z;C}rcUQM)L-^N&!*na)o=McDGZ512sg3lNVJ&vlEci}oi;W{;kRU})h8PrsE9b(zb zom&n|K_5BT-!*SMIbuDB<_>sY^%)EDzt@7FP3w0kh{iT@@MF_N-WBLR3KzWE^h^(B zrJ=H>v5Jj+cKLVrvdcKX5+z>Ji6aFk3sIP|OFRF9JXq`11ex8*f7w^-Yvw0g<=5iZ zR;OC#m(^wK{wam1zkhxiQn8H6n|?;ab`|0*vzaH@;HygI4lk?g;IeBRMEpbHqY6S( z^J35aw7+w)){Kh9y7_mabh=`>aJaoD0&|WhY4a)z3Mn$a#XI}0o*mRWlVy2Vy zQG^@aumaYBnrD)2wG_m^KiPT;4|#d?2WQh(n^VlbKeE&_d8706pF}SFY4m2#|9+Pt zFIOPs(Y1u3Xdsj*x-mg0K4Qt2n*Yx}sg^~hhvl{|OV#{+(vDus{8F!Dc&$dfKKmMj z>}3x@Sv#KQ4Ih*qu)@|bHA^#RAY-0Dp{_kRw{^3Z-MTte^AW+9vQGy)TZhJ!vl>FC z&F?7NmUh#{^DDez=T|0Me+p<;k%$#WiA0S>0lCRGJF6Z!^Pw-yVgU3H`tL|y^^&Xv z^WW(cR9`Bzoj*w84!A=zhq5#bVGc_BRPQ(8lro$?)Bfyo>%xGK)X{t$;G+5BWeIt6 zae1&Wtvhh}x&rS}i^xq^9oZ}16o%*NU9{r|at(PTJHcYbvgbE~U=(O2mC#{7$3 z=le$ZRkFyhBoH0H`to1kS7%<|IM4=|1gb>;InuB|Frl& zQ=uFGkK;2L69)gE_`fmPy3^+aV6Q8EPJ)a!MxO^!Vk7wMl|IjT3Vc3xNjH32V2SK! zW}qN+P*6z*f=g7CA*gne?Au>)iAz^>ei?q%vZU1C)~i{Q`9|`=ZF1?YO1<3HPuCn? zmU#=YQEm>W@%SD5`h!&c&6nvheYdB6_}&ie^+s^
  • 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 diff --git a/source/Parser/main.py b/source/Parser/main.py index c48ee706..bf9a87f0 100644 --- a/source/Parser/main.py +++ b/source/Parser/main.py @@ -1,53 +1,37 @@ +from __future__ import annotations + +import argparse import json import multiprocessing import os import re -import tempfile -import warnings +import sys from pathlib import Path import pandas as pd -from biomedner_engine import BioMedNER - -# Filepaths -BASE_INPUT_FILEPATH = os.path.join( - os.path.dirname(__file__), "../../data/preprocessed_data" -) -BASE_OUTPUT_FILEPATH_CT = os.path.join( - os.path.dirname(__file__), "../../data/parsed_trec" -) -BASE_TMP_SUPERDIR = os.path.join(os.path.dirname(__file__), "tmp") -DICT_PATH = Path("Parser/resources/normalization/dictionary") -dict_paths = { - "gene": DICT_PATH / "dict_Gene.txt", - "disease": DICT_PATH / "dict_Disease_20210630.txt", - "cell type": DICT_PATH / "dict_CellType_20210810.txt", - "drug": DICT_PATH / "dict_ChemicalCompound_20210630.txt", - "procedure": DICT_PATH / "dict_Procedures.txt", - "sign symptom": DICT_PATH / "dict_SignSymptom.txt", -} - - -def load_shared_dictionaries(): - return { - key: BioMedNER.load_dictionary_file(path) for key, path in dict_paths.items() - } +SOURCE_DIR = Path(__file__).resolve().parents[1] +if str(SOURCE_DIR) not in sys.path: + sys.path.append(str(SOURCE_DIR)) + +from Matcher.config.config_loader import load_config # noqa: E402 +from Parser.biomedner_engine import BioMedNER # noqa: E402 + + +BASE_INPUT_FILEPATH = Path(__file__).resolve().parents[2] / "data/preprocessed_data" +BASE_OUTPUT_FILEPATH_CT = Path(__file__).resolve().parents[2] / "data/parsed_trec" -# Global variable for BioMedNER instance (initialized in each process) -biomedner = None -data_source = "clinical trials" # Adjust this based on your data source +entity_annotator: BioMedNER | None = None +data_source = "clinical trials" -def process_dataframe(df, text_column): +def process_dataframe(df: pd.DataFrame, text_column: str) -> pd.DataFrame: new_data = [] for _, row in df.iterrows(): row_copy = row.to_dict() text = row_copy.pop(text_column) - - # Ensure text is a string if not isinstance(text, str): - text = str(text) # Convert to string if not already + text = str(text) word_count = len(text.split()) sentence_end_count = text.count(".") + text.count("?") + text.count("!") @@ -62,59 +46,21 @@ def process_dataframe(df, text_column): row_copy[text_column] = text new_data.append(row_copy) - new_df = pd.DataFrame(new_data) - return new_df + return pd.DataFrame(new_data) -def process_file(idx): - global biomedner - if biomedner is None: - raise RuntimeError( - "BioMedNER instance is not initialized. Please ensure 'biomedner' is set before calling process_file." - ) - output_filepath = os.path.join(BASE_OUTPUT_FILEPATH_CT, f"{idx}.json") - if os.path.exists(output_filepath): - print(f"File {idx} already exists. Skipping...") - return +def process_file(idx: str) -> None: + global entity_annotator + if entity_annotator is None: + raise RuntimeError("Entity annotator is not initialized.") - # Load the dataframe - file_path = None - try: - if data_source == "clinical trials": - file_path = os.path.join( - BASE_INPUT_FILEPATH, "clintra", f"{idx}_preprocessed.tsv" - ) - if os.path.exists(file_path): - print(f"Processing {idx}") - df = pd.read_csv(file_path, delimiter="\t") - else: - print(f"File {file_path} does not exist. Skipping.") - return - elif data_source == "patient": - file_path = os.path.join( - BASE_INPUT_FILEPATH, "patient", f"{idx}_preprocessed.csv" - ) - if os.path.exists(file_path): - df = pd.read_csv(file_path) - else: - print(f"File {file_path} does not exist. Skipping.") - return - else: - warnings.warn( - "Unexpected data source encountered. Please choose between 'clinical trials' or 'patient'", - UserWarning, - ) - return - except pd.errors.EmptyDataError: - print( - f"EmptyDataError: No columns to parse from file {file_path}. Skipping this file." - ) - return - except Exception as e: - print(f"An unexpected error occurred while processing file {file_path}: {e}") + output_filepath = BASE_OUTPUT_FILEPATH_CT / f"{idx}.json" + if output_filepath.exists(): + print(f"File {idx} already exists. Skipping...") return - if df.empty: + df = _load_dataframe(idx) + if df is None or df.empty: print(f"Dataframe {idx} is empty. Skipping.") return @@ -125,8 +71,10 @@ def process_file(idx): print(f"No sentences to process for {idx}. Skipping.") return - # Use the biomedner instance - annotated_sentences = biomedner.annotate_texts_in_parallel(sentences, max_workers=5) + annotated_sentences = entity_annotator.annotate_texts_in_parallel( + sentences, + max_workers=5, + ) df["entities"] = [entities for entities in annotated_sentences] result_json = { "nct_id": idx, @@ -139,91 +87,106 @@ def process_file(idx): for _, row in df.iterrows() ], } - # Save the result - with open(output_filepath, "w") as f: - json.dump(result_json, f, indent=4) + output_filepath.parent.mkdir(parents=True, exist_ok=True) + output_filepath.write_text(json.dumps(result_json, indent=4)) print(f"Saved {output_filepath}") -def process_files(device_id, ids_to_process, biomedner_params, shared_dicts): - import os - - global biomedner - - # Set the environment variable for this process +def process_files( + device_id: str, + ids_to_process: list[str], + config_path: str | None, +) -> None: + global entity_annotator os.environ["CUDA_VISIBLE_DEVICES"] = device_id - - # Initialize BioMedNER instance - biomedner = BioMedNER( - **biomedner_params, - biomedner_home=tempfile.TemporaryDirectory(dir=BASE_TMP_SUPERDIR).name, - preloaded_dicts=shared_dicts, - ) - - # Process each file in the chunk + config = load_config(config_path) if config_path else None + entity_annotator = BioMedNER(config=config) for idx in ids_to_process: process_file(idx) -if __name__ == "__main__": - import multiprocessing - - # Load dictionaries once - shared_dicts = load_shared_dictionaries() - - # Define BioMedNER parameters - biomedner_params = { - "max_word_len": 50, - "seed": 2019, - "gene_norm_port": 18888, - "disease_norm_port": 18892, - "biomedner_host": "localhost", - "biomedner_port": 18894, - "gner_host": "localhost", - "gner_port": 18783, - "time_format": "[%d/%b/%Y %H:%M:%S.%f]", - "use_neural_normalizer": True, - "no_cuda": False, - } +def main() -> int: + parser = argparse.ArgumentParser( + description="Annotate preprocessed trial criteria with TrialMatchAI entities." + ) + parser.add_argument("--config", default=None, help="TrialMatchAI config path") + parser.add_argument("--processes", type=int, default=1) + parser.add_argument("--device-id", action="append", default=["0"]) + parser.add_argument( + "--ids-file", + default=None, + help="Optional file containing one NCT ID per line. Defaults to TREC ID files.", + ) + args = parser.parse_args() - # Load your NCT IDs - df_trec21 = pd.read_csv("../../data/trec/Unique_NCT_IDs_from_2021_File.csv") - df_trec22 = pd.read_csv("../../data/trec/Unique_NCT_IDs_from_2022_File.csv") - nct_ids21 = df_trec21["Unique NCT IDs"].unique().tolist() - nct_ids22 = df_trec22["Unique NCT IDs"].unique().tolist() - unique_ids = set(nct_ids21 + nct_ids22) - # Prepare the list of unprocessed ids + unique_ids = _load_ids(args.ids_file) unprocessed_ids = [ - idx - for idx in unique_ids - if not os.path.exists(os.path.join(BASE_OUTPUT_FILEPATH_CT, f"{idx}.json")) + idx for idx in unique_ids if not (BASE_OUTPUT_FILEPATH_CT / f"{idx}.json").exists() ] + if not unprocessed_ids: + print("No unprocessed IDs found.") + return 0 - # Define your device IDs - device_ids = ["0"] # List of GPU IDs as strings - - # Define the number of processes you want - num_processes = 8 # For example, 12 processes - - # Create a list of device IDs cycling through the available GPUs - process_device_ids = [device_ids[i % len(device_ids)] for i in range(num_processes)] - - # Divide unprocessed_ids among processes + num_processes = max(1, args.processes) + process_device_ids = [ + args.device_id[i % len(args.device_id)] for i in range(num_processes) + ] chunks = [[] for _ in range(num_processes)] for i, idx in enumerate(unprocessed_ids): chunks[i % num_processes].append(idx) processes = [] - for i in range(num_processes): - device_id = process_device_ids[i] - ids_chunk = chunks[i] - if ids_chunk: # Only start a process if there's work to do - p = multiprocessing.Process( - target=process_files, - args=(device_id, ids_chunk, biomedner_params, shared_dicts), - ) - processes.append(p) - p.start() - - for p in processes: - p.join() + for i, ids_chunk in enumerate(chunks): + if not ids_chunk: + continue + process = multiprocessing.Process( + target=process_files, + args=(process_device_ids[i], ids_chunk, args.config), + ) + processes.append(process) + process.start() + + for process in processes: + process.join() + if process.exitcode: + return process.exitcode + return 0 + + +def _load_dataframe(idx: str) -> pd.DataFrame | None: + if data_source == "clinical trials": + file_path = BASE_INPUT_FILEPATH / "clintra" / f"{idx}_preprocessed.tsv" + delimiter = "\t" + elif data_source == "patient": + file_path = BASE_INPUT_FILEPATH / "patient" / f"{idx}_preprocessed.csv" + delimiter = "," + else: + raise ValueError("data_source must be 'clinical trials' or 'patient'.") + + if not file_path.exists(): + print(f"File {file_path} does not exist. Skipping.") + return None + try: + return pd.read_csv(file_path, delimiter=delimiter) + except pd.errors.EmptyDataError: + print(f"No columns to parse from file {file_path}. Skipping.") + return None + + +def _load_ids(ids_file: str | None) -> list[str]: + if ids_file: + return [ + line.strip() + for line in Path(ids_file).read_text().splitlines() + if line.strip() + ] + trec_root = Path(__file__).resolve().parents[2] / "data/trec" + df_trec21 = pd.read_csv(trec_root / "Unique_NCT_IDs_from_2021_File.csv") + df_trec22 = pd.read_csv(trec_root / "Unique_NCT_IDs_from_2022_File.csv") + nct_ids21 = df_trec21["Unique NCT IDs"].unique().tolist() + nct_ids22 = df_trec22["Unique NCT IDs"].unique().tolist() + return sorted(set(nct_ids21 + nct_ids22)) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/source/Parser/models.py b/source/Parser/models.py deleted file mode 100644 index c8abea98..00000000 --- a/source/Parser/models.py +++ /dev/null @@ -1,653 +0,0 @@ -# coding=utf-8 -import copy - -import torch -import torch.nn.functional as F -from torch.nn import CrossEntropyLoss -from transformers import ( - BertForTokenClassification, - BertModel, - RobertaForTokenClassification, - RobertaModel, -) - - -class BERTMultiNER2(BertForTokenClassification): - def __init__(self, config, num_labels=3): - super(BERTMultiNER2, self).__init__(config) - self.num_labels = num_labels - self.bert = BertModel(config) - self.dropout = torch.nn.Dropout(config.hidden_dropout_prob) - - self.dise_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # disease - self.chem_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # chemical - self.gene_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # gene/protein - self.spec_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # species - self.cellline_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # cell line - self.dna_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # dna - self.rna_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # rna - self.celltype_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # cell type - - self.dise_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.chem_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.gene_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.spec_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.cellline_classifier_2 = torch.nn.Linear( - config.hidden_size, config.hidden_size - ) - self.dna_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.rna_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.celltype_classifier_2 = torch.nn.Linear( - config.hidden_size, config.hidden_size - ) - - self.init_weights() - - def forward( - self, - input_ids, - token_type_ids=None, - attention_mask=None, - labels=None, - entity_type_ids=None, - ): - sequence_output = self.bert( - input_ids, - token_type_ids=token_type_ids, - attention_mask=attention_mask, - head_mask=None, - )[0] - batch_size, max_len, feat_dim = sequence_output.shape - sequence_output = self.dropout(sequence_output) - - if entity_type_ids[0][0].item() == 0: - """ - Raw text data with trained parameters - """ - dise_sequence_output = F.relu( - self.dise_classifier_2(sequence_output) - ) # disease logit value - chem_sequence_output = F.relu( - self.chem_classifier_2(sequence_output) - ) # chemical logit value - gene_sequence_output = F.relu( - self.gene_classifier_2(sequence_output) - ) # gene/protein logit value - spec_sequence_output = F.relu( - self.spec_classifier_2(sequence_output) - ) # species logit value - cellline_sequence_output = F.relu( - self.cellline_classifier_2(sequence_output) - ) # cell line logit value - dna_sequence_output = F.relu( - self.dna_classifier_2(sequence_output) - ) # dna logit value - rna_sequence_output = F.relu( - self.rna_classifier_2(sequence_output) - ) # rna logit value - celltype_sequence_output = F.relu( - self.celltype_classifier_2(sequence_output) - ) # cell type logit value - - dise_logits = self.dise_classifier( - dise_sequence_output - ) # disease logit value - chem_logits = self.chem_classifier( - chem_sequence_output - ) # chemical logit value - gene_logits = self.gene_classifier( - gene_sequence_output - ) # gene/protein logit value - spec_logits = self.spec_classifier( - spec_sequence_output - ) # species logit value - cellline_logits = self.cellline_classifier( - cellline_sequence_output - ) # cell line logit value - dna_logits = self.dna_classifier(dna_sequence_output) # dna logit value - rna_logits = self.rna_classifier(rna_sequence_output) # rna logit value - celltype_logits = self.celltype_classifier( - celltype_sequence_output - ) # cell type logit value - - # update logit and sequence_output - sequence_output = ( - dise_sequence_output - + chem_sequence_output - + gene_sequence_output - + spec_sequence_output - + cellline_sequence_output - + dna_sequence_output - + rna_sequence_output - + celltype_sequence_output - ) - - logits = ( - dise_logits, - chem_logits, - gene_logits, - spec_logits, - cellline_logits, - dna_logits, - rna_logits, - celltype_logits, - ) - else: - """ - Train, Eval, Test with pre-defined entity type tags - """ - # make 1*1 conv to adopt entity type - dise_idx = copy.deepcopy(entity_type_ids) - chem_idx = copy.deepcopy(entity_type_ids) - gene_idx = copy.deepcopy(entity_type_ids) - spec_idx = copy.deepcopy(entity_type_ids) - cellline_idx = copy.deepcopy(entity_type_ids) - dna_idx = copy.deepcopy(entity_type_ids) - rna_idx = copy.deepcopy(entity_type_ids) - celltype_idx = copy.deepcopy(entity_type_ids) - - dise_idx[dise_idx != 1] = 0 - chem_idx[chem_idx != 2] = 0 - gene_idx[gene_idx != 3] = 0 - spec_idx[spec_idx != 4] = 0 - cellline_idx[cellline_idx != 5] = 0 - dna_idx[dna_idx != 6] = 0 - rna_idx[rna_idx != 7] = 0 - celltype_idx[celltype_idx != 8] = 0 - - dise_sequence_output = dise_idx.unsqueeze(-1) * sequence_output - chem_sequence_output = chem_idx.unsqueeze(-1) * sequence_output - gene_sequence_output = gene_idx.unsqueeze(-1) * sequence_output - spec_sequence_output = spec_idx.unsqueeze(-1) * sequence_output - cellline_sequence_output = cellline_idx.unsqueeze(-1) * sequence_output - dna_sequence_output = dna_idx.unsqueeze(-1) * sequence_output - rna_sequence_output = rna_idx.unsqueeze(-1) * sequence_output - celltype_sequence_output = celltype_idx.unsqueeze(-1) * sequence_output - - # F.tanh or F.relu - dise_sequence_output = F.relu( - self.dise_classifier_2(dise_sequence_output) - ) # disease logit value - chem_sequence_output = F.relu( - self.chem_classifier_2(chem_sequence_output) - ) # chemical logit value - gene_sequence_output = F.relu( - self.gene_classifier_2(gene_sequence_output) - ) # gene/protein logit value - spec_sequence_output = F.relu( - self.spec_classifier_2(spec_sequence_output) - ) # species logit value - cellline_sequence_output = F.relu( - self.cellline_classifier_2(cellline_sequence_output) - ) # cell line logit value - dna_sequence_output = F.relu( - self.dna_classifier_2(dna_sequence_output) - ) # dna logit value - rna_sequence_output = F.relu( - self.rna_classifier_2(rna_sequence_output) - ) # rna logit value - celltype_sequence_output = F.relu( - self.celltype_classifier_2(celltype_sequence_output) - ) # cell type logit value - - dise_logits = self.dise_classifier( - dise_sequence_output - ) # disease logit value - chem_logits = self.chem_classifier( - chem_sequence_output - ) # chemical logit value - gene_logits = self.gene_classifier( - gene_sequence_output - ) # gene/protein logit value - spec_logits = self.spec_classifier( - spec_sequence_output - ) # species logit value - cellline_logits = self.cellline_classifier( - cellline_sequence_output - ) # cell line logit value - dna_logits = self.dna_classifier(dna_sequence_output) # dna logit value - rna_logits = self.rna_classifier(rna_sequence_output) # rna logit value - celltype_logits = self.celltype_classifier( - celltype_sequence_output - ) # cell type logit value - - # update logit and sequence_output - sequence_output = ( - dise_sequence_output - + chem_sequence_output - + gene_sequence_output - + spec_sequence_output - + cellline_sequence_output - + dna_sequence_output - + rna_sequence_output - + celltype_sequence_output - ) - - logits = ( - dise_logits - + chem_logits - + gene_logits - + spec_logits - + cellline_logits - + dna_logits - + rna_logits - + celltype_logits - ) - - outputs = (logits, sequence_output) - if labels is not None: - loss_fct = CrossEntropyLoss() - # Only keep active parts of the loss - if attention_mask is not None: - if entity_type_ids[0][0].item() == 0: - active_loss = attention_mask.view(-1) == 1 - ( - dise_logits, - chem_logits, - gene_logits, - spec_logits, - cellline_logits, - dna_logits, - rna_logits, - celltype_logits, - ) = logits - - active_dise_logits = dise_logits.view(-1, self.num_labels) - active_chem_logits = chem_logits.view(-1, self.num_labels) - active_gene_logits = gene_logits.view(-1, self.num_labels) - active_spec_logits = spec_logits.view(-1, self.num_labels) - active_cellline_logits = cellline_logits.view(-1, self.num_labels) - active_dna_logits = dna_logits.view(-1, self.num_labels) - active_rna_logits = rna_logits.view(-1, self.num_labels) - active_celltype_logits = celltype_logits.view(-1, self.num_labels) - active_labels = torch.where( - active_loss, - labels.view(-1), - torch.tensor(loss_fct.ignore_index).type_as(labels), - ) - dise_loss = loss_fct(active_dise_logits, active_labels) - chem_loss = loss_fct(active_chem_logits, active_labels) - gene_loss = loss_fct(active_gene_logits, active_labels) - spec_loss = loss_fct(active_spec_logits, active_labels) - cellline_loss = loss_fct(active_cellline_logits, active_labels) - dna_loss = loss_fct(active_dna_logits, active_labels) - rna_loss = loss_fct(active_rna_logits, active_labels) - celltype_loss = loss_fct(active_celltype_logits, active_labels) - - loss = ( - dise_loss - + chem_loss - + gene_loss - + spec_loss - + cellline_loss - + dna_loss - + rna_loss - + celltype_loss - ) - - return (loss,) + outputs - else: - active_loss = attention_mask.view(-1) == 1 - active_logits = logits.view(-1, self.num_labels) - active_labels = torch.where( - active_loss, - labels.view(-1), - torch.tensor(loss_fct.ignore_index).type_as(labels), - ) - loss = loss_fct(active_logits, active_labels) - return (loss,) + outputs - else: - loss = loss_fct(logits.view(-1, self.num_labels), labels.view(-1)) - return loss - else: - return logits - - -class RoBERTaMultiNER2(RobertaForTokenClassification): - def __init__(self, config, num_labels=3): - super(RoBERTaMultiNER2, self).__init__(config) - self.num_labels = num_labels - self.roberta = RobertaModel(config) - self.dropout = torch.nn.Dropout(config.hidden_dropout_prob) - - self.dise_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # disease - self.chem_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # chemical - self.gene_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # gene/protein - self.spec_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # species - self.cellline_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # cell line - self.dna_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # dna - self.rna_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # rna - self.protein_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # protein - self.celltype_classifier = torch.nn.Linear( - config.hidden_size, self.num_labels - ) # cell type - - self.dise_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.chem_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.gene_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.spec_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.cellline_classifier_2 = torch.nn.Linear( - config.hidden_size, config.hidden_size - ) - self.dna_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.rna_classifier_2 = torch.nn.Linear(config.hidden_size, config.hidden_size) - self.protein_classifier_2 = torch.nn.Linear( - config.hidden_size, config.hidden_size - ) - self.celltype_classifier_2 = torch.nn.Linear( - config.hidden_size, config.hidden_size - ) - - self.init_weights() - - def forward( - self, - input_ids, - token_type_ids=None, - attention_mask=None, - labels=None, - entity_type_ids=None, - ): - sequence_output = self.roberta( - input_ids, - token_type_ids=token_type_ids, - attention_mask=attention_mask, - head_mask=None, - )[0] - batch_size, max_len, feat_dim = sequence_output.shape - sequence_output = self.dropout(sequence_output) - - if entity_type_ids[0][0].item() == 0: - """ - Raw text data with trained parameters - """ - dise_sequence_output = F.relu( - self.dise_classifier_2(sequence_output) - ) # disease logit value - chem_sequence_output = F.relu( - self.chem_classifier_2(sequence_output) - ) # chemical logit value - gene_sequence_output = F.relu( - self.gene_classifier_2(sequence_output) - ) # gene/protein logit value - spec_sequence_output = F.relu( - self.spec_classifier_2(sequence_output) - ) # species logit value - cellline_sequence_output = F.relu( - self.cellline_classifier_2(sequence_output) - ) # cell line logit value - dna_sequence_output = F.relu( - self.dna_classifier_2(sequence_output) - ) # dna logit value - rna_sequence_output = F.relu( - self.rna_classifier_2(sequence_output) - ) # rna logit value - protein_sequence_output = F.relu( - self.protein_classifier_2(sequence_output) - ) # protein logit value - celltype_sequence_output = F.relu( - self.celltype_classifier_2(sequence_output) - ) # cell type logit value - - dise_logits = self.dise_classifier( - dise_sequence_output - ) # disease logit value - chem_logits = self.chem_classifier( - chem_sequence_output - ) # chemical logit value - gene_logits = self.gene_classifier( - gene_sequence_output - ) # gene/protein logit value - spec_logits = self.spec_classifier( - spec_sequence_output - ) # species logit value - cellline_logits = self.cellline_classifier( - cellline_sequence_output - ) # cell line logit value - dna_logits = self.dna_classifier(dna_sequence_output) # dna logit value - rna_logits = self.rna_classifier(rna_sequence_output) # rna logit value - protein_logits = self.protein_classifier( - protein_sequence_output - ) # protein logit value - celltype_logits = self.celltype_classifier( - celltype_sequence_output - ) # cell type logit value - - # update logit and sequence_output - sequence_output = ( - dise_sequence_output - + chem_sequence_output - + gene_sequence_output - + spec_sequence_output - + cellline_sequence_output - + dna_sequence_output - + rna_sequence_output - + protein_sequence_output - + celltype_sequence_output - ) - logits = ( - dise_logits, - chem_logits, - gene_logits, - spec_logits, - cellline_logits, - dna_logits, - rna_logits, - protein_logits, - celltype_logits, - ) - else: - """ - Train, Eval, Test with pre-defined entity type tags - """ - # make 1*1 conv to adopt entity type - dise_idx = copy.deepcopy(entity_type_ids) - chem_idx = copy.deepcopy(entity_type_ids) - gene_idx = copy.deepcopy(entity_type_ids) - spec_idx = copy.deepcopy(entity_type_ids) - cellline_idx = copy.deepcopy(entity_type_ids) - dna_idx = copy.deepcopy(entity_type_ids) - rna_idx = copy.deepcopy(entity_type_ids) - protein_idx = copy.deepcopy(entity_type_ids) - celltype_idx = copy.deepcopy(entity_type_ids) - - dise_idx[dise_idx != 1] = 0 - chem_idx[chem_idx != 2] = 0 - gene_idx[gene_idx != 3] = 0 - spec_idx[spec_idx != 4] = 0 - cellline_idx[cellline_idx != 5] = 0 - dna_idx[dna_idx != 6] = 0 - rna_idx[rna_idx != 7] = 0 - protein_idx[protein_idx != 8] = 0 - celltype_idx[celltype_idx != 9] = 0 - - dise_sequence_output = dise_idx.unsqueeze(-1) * sequence_output - chem_sequence_output = chem_idx.unsqueeze(-1) * sequence_output - gene_sequence_output = gene_idx.unsqueeze(-1) * sequence_output - spec_sequence_output = spec_idx.unsqueeze(-1) * sequence_output - cellline_sequence_output = cellline_idx.unsqueeze(-1) * sequence_output - dna_sequence_output = dna_idx.unsqueeze(-1) * sequence_output - rna_sequence_output = rna_idx.unsqueeze(-1) * sequence_output - protein_sequence_output = protein_idx.unsqueeze(-1) * sequence_output - celltype_sequence_output = celltype_idx.unsqueeze(-1) * sequence_output - - # F.tanh or F.relu - dise_sequence_output = F.relu( - self.dise_classifier_2(dise_sequence_output) - ) # disease logit value - chem_sequence_output = F.relu( - self.chem_classifier_2(chem_sequence_output) - ) # chemical logit value - gene_sequence_output = F.relu( - self.gene_classifier_2(gene_sequence_output) - ) # gene/protein logit value - spec_sequence_output = F.relu( - self.spec_classifier_2(spec_sequence_output) - ) # species logit value - cellline_sequence_output = F.relu( - self.cellline_classifier_2(cellline_sequence_output) - ) # cell line logit value - dna_sequence_output = F.relu( - self.dna_classifier_2(dna_sequence_output) - ) # dna logit value - rna_sequence_output = F.relu( - self.rna_classifier_2(rna_sequence_output) - ) # rna logit value - protein_sequence_output = F.relu( - self.protein_classifier_2(protein_sequence_output) - ) # protein logit value - celltype_sequence_output = F.relu( - self.celltype_classifier_2(celltype_sequence_output) - ) # cell type logit value - - dise_logits = self.dise_classifier( - dise_sequence_output - ) # disease logit value - chem_logits = self.chem_classifier( - chem_sequence_output - ) # chemical logit value - gene_logits = self.gene_classifier( - gene_sequence_output - ) # gene/protein logit value - spec_logits = self.spec_classifier( - spec_sequence_output - ) # species logit value - cellline_logits = self.cellline_classifier( - cellline_sequence_output - ) # cell line logit value - dna_logits = self.dna_classifier(dna_sequence_output) # dna logit value - rna_logits = self.rna_classifier(rna_sequence_output) # rna logit value - protein_logits = self.protein_classifier( - protein_sequence_output - ) # protein logit value - celltype_logits = self.celltype_classifier( - celltype_sequence_output - ) # cell type logit value - - # update logit and sequence_output - sequence_output = ( - dise_sequence_output - + chem_sequence_output - + gene_sequence_output - + spec_sequence_output - + cellline_sequence_output - + dna_sequence_output - + rna_sequence_output - + protein_sequence_output - + celltype_sequence_output - ) - logits = ( - dise_logits - + chem_logits - + gene_logits - + spec_logits - + cellline_logits - + dna_logits - + rna_logits - + protein_logits - + celltype_logits - ) - - outputs = (logits, sequence_output) - if labels is not None: - loss_fct = CrossEntropyLoss() - # Only keep active parts of the loss - if attention_mask is not None: - if entity_type_ids[0][0].item() == 0: - active_loss = attention_mask.view(-1) == 1 - ( - dise_logits, - chem_logits, - gene_logits, - spec_logits, - cellline_logits, - dna_logits, - rna_logits, - protein_logits, - celltype_logits, - ) = logits - - active_dise_logits = dise_logits.view(-1, self.num_labels) - active_chem_logits = chem_logits.view(-1, self.num_labels) - active_gene_logits = gene_logits.view(-1, self.num_labels) - active_spec_logits = spec_logits.view(-1, self.num_labels) - active_cellline_logits = cellline_logits.view(-1, self.num_labels) - active_dna_logits = dna_logits.view(-1, self.num_labels) - active_rna_logits = rna_logits.view(-1, self.num_labels) - active_protein_logits = protein_logits.view(-1, self.num_labels) - active_celltype_logits = celltype_logits.view(-1, self.num_labels) - - active_labels = torch.where( - active_loss, - labels.view(-1), - torch.tensor(loss_fct.ignore_index).type_as(labels), - ) - dise_loss = loss_fct(active_dise_logits, active_labels) - chem_loss = loss_fct(active_chem_logits, active_labels) - gene_loss = loss_fct(active_gene_logits, active_labels) - spec_loss = loss_fct(active_spec_logits, active_labels) - cellline_loss = loss_fct(active_cellline_logits, active_labels) - dna_loss = loss_fct(active_dna_logits, active_labels) - rna_loss = loss_fct(active_rna_logits, active_labels) - protein_loss = loss_fct(active_protein_logits, active_labels) - celltype_loss = loss_fct(active_celltype_logits, active_labels) - loss = ( - dise_loss - + chem_loss - + gene_loss - + spec_loss - + cellline_loss - + dna_loss - + rna_loss - + protein_loss - + celltype_loss - ) - - return (loss,) + outputs - else: - active_loss = attention_mask.view(-1) == 1 - active_logits = logits.view(-1, self.num_labels) - active_labels = torch.where( - active_loss, - labels.view(-1), - torch.tensor(loss_fct.ignore_index).type_as(labels), - ) - loss = loss_fct(active_logits, active_labels) - return (loss,) + outputs - else: - loss = loss_fct(logits.view(-1, self.num_labels), labels.view(-1)) - return loss - else: - return logits diff --git a/source/Parser/normalizer.py b/source/Parser/normalizer.py index 2266c08e..96d7e7a2 100644 --- a/source/Parser/normalizer.py +++ b/source/Parser/normalizer.py @@ -1,422 +1,28 @@ -import os -import socket -from concurrent.futures import ThreadPoolExecutor +from __future__ import annotations -from Parser.normalizers.neural_normalizer import NeuralNormalizer -from Parser.normalizers.normalizer_all import ( - CellLineNormalizer, - CellTypeNormalizer, - ChemicalNormalizer, - ProcedureNormalizer, - SignSymptomNormalizer, - SpeciesNormalizer, -) +from typing import Any -time_format = "[%d/%b/%Y %H:%M:%S.%f]" +from Matcher.entities.linker import ConceptLinker class Normalizer: - def __init__( - self, use_neural_normalizer, gene_port=18888, disease_port=18892, no_cuda=False - ): - self.BASE_DIR = "Parser/resources/normalization/" - self.NORM_INPUT_DIR = { - "disease": os.path.join(self.BASE_DIR, "inputs/disease"), - "gene": os.path.join(self.BASE_DIR, "inputs/gene"), - } - self.NORM_OUTPUT_DIR = { - "disease": os.path.join(self.BASE_DIR, "outputs/disease"), - "gene": os.path.join(self.BASE_DIR, "outputs/gene"), - } + """Legacy placeholder for Parser callers. - self.NORM_DICT_PATH = { - "drug": os.path.join(self.BASE_DIR, "dictionary/dict_ChemicalsDrugs.txt"), - "gene": "setup.txt", - "species": os.path.join(self.BASE_DIR, "dictionary/dict_Species.txt"), - "cell line": os.path.join(self.BASE_DIR, "dictionary/dict_CellLine.txt"), - "cell type": os.path.join(self.BASE_DIR, "dictionary/dict_CellType.txt"), - "procedure": os.path.join(self.BASE_DIR, "dictionary/dict_Procedures.txt"), - "sign symptom": os.path.join( - self.BASE_DIR, "dictionary/dict_SignSymptom.txt" - ), - } + Normalization now happens in Matcher.entities.ConceptLinker. This class keeps old + imports from crashing while avoiding external normalizer daemons. + """ - self.NEURAL_NORM_MODEL_PATH = { - "disease": "dmis-lab/biosyn-sapbert-bc5cdr-disease", - "sign symptom": "dmis-lab/biosyn-sapbert-bc5cdr-disease", - "drug": "dmis-lab/biosyn-sapbert-bc5cdr-chemical", - "gene": "dmis-lab/biosyn-sapbert-bc2gn", - } - self.NEURAL_NORM_CACHE_PATH = { - "disease": os.path.join( - self.BASE_DIR, - "normalizers/neural_norm_caches/dict_Disease_20210630.txt.pk", - ), - "sign symptom": os.path.join( - self.BASE_DIR, - "normalizers/neural_norm_caches/dict_Disease_20210630.txt.pk", - ), - "drug": os.path.join( - self.BASE_DIR, - "normalizers/neural_norm_caches/dict_ChemicalCompound_20210630.txt.pk", - ), - "gene": os.path.join( - self.BASE_DIR, "normalizers/neural_norm_caches/dict_Gene.txt.pk" - ), - } + NO_ENTITY_ID = "CUI-less" - self.NORM_MODEL_VERSION = "N/A" - self.HOST = "127.0.0.1" - self.GENE_PORT = gene_port - self.DISEASE_PORT = disease_port - self.NO_ENTITY_ID = "CUI-less" - self.use_neural_normalizer = use_neural_normalizer + def __init__(self, *args: Any, concept_linker: ConceptLinker | None = None, **kwargs: Any): + del args, kwargs + self.concept_linker = concept_linker + self.use_neural_normalizer = False - # Load normalizers concurrently - with ThreadPoolExecutor() as executor: - future_dict = { - "chemical": executor.submit( - ChemicalNormalizer, self.NORM_DICT_PATH["drug"] - ), - "species": executor.submit( - SpeciesNormalizer, self.NORM_DICT_PATH["species"] - ), - "cellline": executor.submit( - CellLineNormalizer, self.NORM_DICT_PATH["cell line"] - ), - "celltype": executor.submit( - CellTypeNormalizer, self.NORM_DICT_PATH["cell type"] - ), - "procedure": executor.submit( - ProcedureNormalizer, self.NORM_DICT_PATH["procedure"] - ), - "sign symptom": executor.submit( - SignSymptomNormalizer, self.NORM_DICT_PATH["sign symptom"] - ), - } - - self.chemical_normalizer = future_dict["chemical"].result() - self.species_normalizer = future_dict["species"].result() - self.cellline_normalizer = future_dict["cellline"].result() - self.celltype_normalizer = future_dict["celltype"].result() - self.procedure_normalizer = future_dict["procedure"].result() - self.sign_symptom_normalizer = future_dict["sign symptom"].result() - - if self.use_neural_normalizer: - with ThreadPoolExecutor() as executor: - future_dict = { - "neural_disease": executor.submit( - NeuralNormalizer, - model_name_or_path=self.NEURAL_NORM_MODEL_PATH["disease"], - cache_path=self.NEURAL_NORM_CACHE_PATH["disease"], - no_cuda=no_cuda, - ), - "neural_sign symptom": executor.submit( - NeuralNormalizer, - model_name_or_path=self.NEURAL_NORM_MODEL_PATH["sign symptom"], - cache_path=self.NEURAL_NORM_CACHE_PATH["sign symptom"], - no_cuda=no_cuda, - ), - "neural_chemical": executor.submit( - NeuralNormalizer, - model_name_or_path=self.NEURAL_NORM_MODEL_PATH["drug"], - cache_path=self.NEURAL_NORM_CACHE_PATH["drug"], - no_cuda=no_cuda, - ), - "neural_gene": executor.submit( - NeuralNormalizer, - model_name_or_path=self.NEURAL_NORM_MODEL_PATH["gene"], - cache_path=self.NEURAL_NORM_CACHE_PATH["gene"], - no_cuda=no_cuda, - ), - } - self.neural_disease_normalizer = future_dict["neural_disease"].result() - self.neural_sign_symptom_normalizer = future_dict[ - "neural_sign symptom" - ].result() - self.neural_chemical_normalizer = future_dict[ - "neural_chemical" - ].result() - self.neural_gene_normalizer = future_dict["neural_gene"].result() - - def normalize(self, base_name, doc_dict_list): - names = dict() - saved_items = list() - ent_cnt = 0 - abs_cnt = 0 - - for item in doc_dict_list: - content = item["abstract"] - entities = item["entities"] - - abs_cnt += 1 - - for ent_type, locs in entities.items(): - ent_cnt += len(locs) - for loc in locs: - loc["end"] += 1 - name = content[loc["start"] : loc["end"]] - if ent_type in names: - names[ent_type].append([name, len(saved_items)]) - else: - names[ent_type] = [[name, len(saved_items)]] - - item["norm_model"] = self.NORM_MODEL_VERSION - saved_items.append(item) - - results = list() - with ThreadPoolExecutor() as executor: - futures = [] - for ent_type in names.keys(): - futures.append( - executor.submit( - self.run_normalizers_wrap, - ent_type, - base_name, - names, - saved_items, - results, - ) - ) - for future in futures: - future.result() - - for ent_type, type_oids in results: - oid_cnt = 0 - for saved_item in saved_items: - for loc in saved_item["entities"][ent_type]: - loc["id"] = type_oids[oid_cnt] - loc["is_neural_normalized"] = False - oid_cnt += 1 - - return saved_items - - def neural_normalize(self, ent_type, tagged_docs): - abstract = tagged_docs[0]["abstract"] - entities = tagged_docs[0]["entities"][ent_type] - entity_names = [abstract[e["start"] : e["end"]] for e in entities] - cuiless_entity_names = [] - for entity, entity_name in zip(entities, entity_names): - if entity["id"] == self.NO_ENTITY_ID: - cuiless_entity_names.append(entity_name) - cuiless_entity_names = list(set(cuiless_entity_names)) - - if len(cuiless_entity_names) == 0: - return tagged_docs - - norm_entities = [] - if ent_type == "disease": - norm_entities = self.neural_disease_normalizer.normalize( - names=cuiless_entity_names - ) - elif ent_type == "drug": - norm_entities = self.neural_chemical_normalizer.normalize( - names=cuiless_entity_names - ) - elif ent_type == "gene": - norm_entities = self.neural_gene_normalizer.normalize( - names=cuiless_entity_names - ) - elif ent_type == "sign symptom": - norm_entities = self.neural_sign_symptom_normalizer.normalize( - names=cuiless_entity_names - ) - - cuiless_entity2norm_entities = { - c: n for c, n in zip(cuiless_entity_names, norm_entities) - } - for entity, entity_name in zip(entities, entity_names): - if entity_name in cuiless_entity2norm_entities: - cui = cuiless_entity2norm_entities[entity_name][0] - entity["id"] = cui if cui != -1 else self.NO_ENTITY_ID - entity["is_neural_normalized"] = True - else: - entity["is_neural_normalized"] = False + def normalize(self, base_name: str, doc_dict_list: list[dict[str, Any]]): + del base_name + return doc_dict_list + def neural_normalize(self, ent_type: str, tagged_docs: list[dict[str, Any]]): + del ent_type return tagged_docs - - def run_normalizers_wrap(self, ent_type, base_name, names, saved_items, results): - results.append( - (ent_type, self.run_normalizer(ent_type, base_name, names, saved_items)) - ) - - def run_normalizer(self, ent_type, base_name, names, saved_items): - name_ptr = names[ent_type] - oids = list() - bufsize = 4 - - base_thread_name = base_name - input_filename = base_thread_name + ".concept" - output_filename = base_thread_name + ".oid" - - if ent_type in ["disease"]: - norm_inp_path = os.path.join(self.NORM_INPUT_DIR[ent_type], input_filename) - norm_abs_path = os.path.join( - self.NORM_INPUT_DIR[ent_type], base_thread_name + ".txt" - ) - with open(norm_inp_path, "w") as norm_inp_f: - for name, _ in name_ptr: - norm_inp_f.write(name + "\n") - with open(norm_abs_path, "w") as _: - pass - - s = socket.socket() - s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - try: - s.connect((self.HOST, self.DISEASE_PORT)) - s.send("{}".format(base_thread_name).encode("utf-8")) - s.recv(bufsize) - except ConnectionRefusedError: - os.remove(norm_inp_path) - os.remove(norm_abs_path) - s.close() - return oids - s.close() - - norm_out_path = os.path.join( - self.NORM_OUTPUT_DIR[ent_type], output_filename - ) - if os.path.exists(norm_out_path): - with open(norm_out_path, "r") as norm_out_f: - for line in norm_out_f: - oid = line[:-1] - oids.append( - oid if oid != self.NO_ENTITY_ID else self.NO_ENTITY_ID - ) - os.remove(norm_out_path) - else: - for _ in range(len(name_ptr)): - oids.append(self.NO_ENTITY_ID) - - elif ent_type in ["drug"]: - names = [ptr[0] for ptr in name_ptr] - preds = self.chemical_normalizer.normalize(names) - oids.extend(preds) - - elif ent_type == "mutation": - pass - - elif ent_type == "species": - names = [ptr[0] for ptr in name_ptr] - preds = self.species_normalizer.normalize(names) - for pred in preds: - if pred != self.NO_ENTITY_ID: - pred = int(pred) // 100 - oids.append("NCBI:txid{}".format(pred)) - else: - oids.append(self.NO_ENTITY_ID) - - elif ent_type == "cell line": - names = [ptr[0] for ptr in name_ptr] - preds = self.cellline_normalizer.normalize(names) - oids.extend(preds) - - elif ent_type == "cell type": - names = [ptr[0] for ptr in name_ptr] - preds = self.celltype_normalizer.normalize(names) - oids.extend(preds) - - elif ent_type == "gene": - s = socket.socket() - s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - try: - s.connect((self.HOST, self.GENE_PORT)) - except ConnectionRefusedError: - s.close() - return oids - - norm_inp_path = os.path.join(self.NORM_INPUT_DIR[ent_type], input_filename) - norm_abs_path = os.path.join( - self.NORM_INPUT_DIR[ent_type], base_thread_name + ".txt" - ) - - with ( - open(norm_inp_path, "w") as norm_inp_f, - open(norm_abs_path, "w") as norm_abs_f, - ): - for saved_item in saved_items: - entities = saved_item["entities"][ent_type] - if len(entities) == 0: - continue - - abstract_title = saved_item["abstract"] - ent_names = [ - abstract_title[loc["start"] : loc["end"]] for loc in entities - ] - - norm_abs_f.write(saved_item["pmid"] + "||" + abstract_title + "\n") - norm_inp_f.write("||".join(ent_names) + "\n") - - gene_input_dir = os.path.abspath(self.NORM_INPUT_DIR[ent_type]) - gene_output_dir = os.path.abspath(self.NORM_OUTPUT_DIR[ent_type]) - setup_dir = self.NORM_DICT_PATH[ent_type] - - jar_args = ( - "\t".join( - [ - gene_input_dir, - gene_output_dir, - setup_dir, - "9606", - base_thread_name, - ] - ) - + "\n" - ) - s.send(jar_args.encode("utf-8")) - s.recv(bufsize) - s.close() - - norm_out_path = os.path.join(gene_output_dir, output_filename) - if os.path.exists(norm_out_path): - with ( - open(norm_out_path, "r") as norm_out_f, - open(norm_inp_path, "r") as norm_in_f, - ): - for line, input_l in zip(norm_out_f, norm_in_f): - gene_ids, gene_mentions = ( - line[:-1].split("||"), - input_l[:-1].split("||"), - ) - for gene_id, gene_mention in zip(gene_ids, gene_mentions): - eid = ( - "EntrezGene:" + gene_id - if gene_id.lower() != "cui-less" - else self.NO_ENTITY_ID - ) - oids.append(eid) - - os.remove(norm_out_path) - else: - for _ in range(len(name_ptr)): - oids.append(self.NO_ENTITY_ID) - - os.remove(norm_inp_path) - os.remove(norm_abs_path) - - elif ent_type in [ - "diagnostic test", - "treatment", - "radiology", - "surgical procedure", - "laboratory test", - "genomic analysis technique", - ]: - names = [ptr[0] for ptr in name_ptr] - preds = self.procedure_normalizer.normalize(names) - oids.extend(preds) - - elif ent_type == "sign symptom": - names = [ptr[0] for ptr in name_ptr] - preds = self.sign_symptom_normalizer.normalize(names) - oids.extend(preds) - - else: - names = [ptr[0] for ptr in name_ptr] - oids.extend([self.NO_ENTITY_ID] * len(names)) - - assert len(oids) == len(name_ptr), "{} vs {} in {}".format( - len(oids), len(name_ptr), ent_type - ) - - return oids diff --git a/source/Parser/normalizers/__init__.py b/source/Parser/normalizers/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/source/Parser/normalizers/cellline_normalizer.py b/source/Parser/normalizers/cellline_normalizer.py deleted file mode 100644 index 05ea2277..00000000 --- a/source/Parser/normalizers/cellline_normalizer.py +++ /dev/null @@ -1,24 +0,0 @@ -class CellLineNormalizer(object): - def __init__(self, dict_path): - self.NO_ENTITY_ID = "CUI-less" - - # Create dictionary for exact match - self.cl2oid = dict() - with open(dict_path, "r", encoding="utf-8") as f: - for line in f: - oid, names = line[:-1].split("||") - names = names.split("|") - for name in names: - self.cl2oid[name] = oid - - def normalize(self, names): - oids = list() - for name in names: - if name in self.cl2oid: - oids.append(self.cl2oid[name]) - elif name.lower() in self.cl2oid: - oids.append(self.cl2oid[name.lower()]) - else: - oids.append(self.NO_ENTITY_ID) - - return oids diff --git a/source/Parser/normalizers/celltype_normalizer.py b/source/Parser/normalizers/celltype_normalizer.py deleted file mode 100644 index 5074712d..00000000 --- a/source/Parser/normalizers/celltype_normalizer.py +++ /dev/null @@ -1,40 +0,0 @@ -import spacy -import re - -# Load only the lemmatizer component -nlp = spacy.load("en_core_web_sm") -nlp.add_pipe("lemmatizer") -nlp.initialize() - - -class CellTypeNormalizer(object): - def __init__(self, dict_path): - self.NO_ENTITY_ID = "CUI-less" - - # Create dictionary for exact match - self.ct2oid = dict() - with open(dict_path, "r", encoding="utf-8") as f: - for line in f: - oid, names = line.strip().split("||") - names = names.split("|") - for name in names: - normalized_name = self.get_tmchem_name(name) - self.ct2oid[normalized_name] = oid - - def normalize(self, names): - oids = [] - for name in names: - normalized_name = self.get_tmchem_name(name) - if normalized_name in self.ct2oid: - oids.append(self.ct2oid[normalized_name]) - else: - oids.append(self.NO_ENTITY_ID) - return oids - - def get_tmchem_name(self, name): - # Lowercase and remove all whitespace and punctuation - cleaned_name = re.sub(r"[^\w\s-]", "", name.lower()).replace(" ", "") - # Use SpaCy to lemmatize the cleaned name - doc = nlp(cleaned_name) - lemmatized_name = "".join([token.lemma_ for token in doc]) - return lemmatized_name diff --git a/source/Parser/normalizers/chemical_normalizer.py b/source/Parser/normalizers/chemical_normalizer.py deleted file mode 100644 index f9e4ea37..00000000 --- a/source/Parser/normalizers/chemical_normalizer.py +++ /dev/null @@ -1,45 +0,0 @@ -import re - -import nltk -from nltk.stem import WordNetLemmatizer - -# Download NLTK resources quietly -nltk.download("wordnet", quiet=True) -nltk.download("omw-1.4", quiet=True) - - -class ChemicalNormalizer(object): - def __init__(self, dict_path): - self.NO_ENTITY_ID = "CUI-less" - self.lemmatizer = WordNetLemmatizer() - - # Create dictionary for exact match - self.chem2oid = dict() - with open(dict_path, "r", encoding="utf-8") as f: - for line in f: - oid, names = line[:-1].split("||") - names = names.split("|") - for name in names: - # a part of tmChem normalization - normalized_name = self.get_tmchem_name(name) - self.chem2oid[normalized_name] = oid - - def normalize(self, names): - oids = list() - for name in names: - # a part of tmChem normalization - normalized_name = self.get_tmchem_name(name) - - if normalized_name in self.chem2oid: - oids.append(self.chem2oid[normalized_name]) - else: - oids.append(self.NO_ENTITY_ID) - - return oids - - def get_tmchem_name(self, name): - # 1. lowercase, 2. removes all whitespace and punctuation - # https://jcheminf.biomedcentral.com/articles/10.1186/1758-2946-7-S1-S3 - cleaned_name = re.sub(r"[^\w\s]", "", name.lower()).replace(" ", "") - lemmatized_name = self.lemmatizer.lemmatize(cleaned_name) - return lemmatized_name diff --git a/source/Parser/normalizers/neural_normalizer.py b/source/Parser/normalizers/neural_normalizer.py deleted file mode 100644 index bf8c48a8..00000000 --- a/source/Parser/normalizers/neural_normalizer.py +++ /dev/null @@ -1,207 +0,0 @@ -import argparse -import os -import pickle -import re -from string import punctuation - -import faiss -import numpy as np -import torch -from torch.utils.data import DataLoader, Dataset -from tqdm import tqdm -from transformers import AutoModel, AutoTokenizer, default_data_collator - - -class NamesDataset(Dataset): - def __init__(self, encodings, device): - self.encodings = encodings - self.device = device - - def __getitem__(self, idx): - return { - key: torch.tensor(val[idx]).to(self.device) - for key, val in self.encodings.items() - } - - def __len__(self): - return len(self.encodings["input_ids"]) - - -class NeuralNormalizer: - def __init__(self, model_name_or_path, cache_path=None, no_cuda=False): - self.max_length = 25 - self.batch_size = 1024 - self.k = 1 # top k - - # device setup - use_cuda = torch.cuda.is_available() and not no_cuda - self.device = torch.device("cuda" if use_cuda else "cpu") - - # tokenizer and model - self.tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) - # Ensure proper initialization of the model - self.model = AutoModel.from_pretrained(model_name_or_path, device_map=None) - self.model.to_empty(device=self.device) # Use to_empty to handle meta tensors - self.model.eval() - - # regex for basic normalization - self.rmv_puncts_regex = re.compile(r"[\s{}]+".format(re.escape(punctuation))) - - # optionally load existing cache - if cache_path: - self.load_cache(cache_path) - - def load_dictionary(self, dictionary_path=""): - self.dictionary = [] - with open(dictionary_path, "r", encoding="utf-8") as f: - for line in f: - line = line.strip() - if not line: - continue - cui, names = line.split("||") - for name in names.split("|"): - normalized = self._basic_normalize(name) - tokens = self.tokenizer.tokenize(normalized) - if len(tokens) <= self.max_length: - self.dictionary.append((cui, name)) - - # embed dictionary entries - self.dict_embeds = self._embed_dictionary() - - def normalize(self, names): - if not names: - return [] - - names_norm = [self._basic_normalize(n) for n in names] - - # encode inputs - encodings = self.tokenizer( - names_norm, - padding="max_length", - max_length=self.max_length, - truncation=True, - return_tensors=None, - ) - dataset = NamesDataset(encodings, self.device) - loader = DataLoader( - dataset, - batch_size=self.batch_size, - shuffle=False, - collate_fn=default_data_collator, - ) - - # compute embeddings - embeds = [] - with torch.no_grad(): - for batch in loader: - out = self.model(**batch) - cls_emb = out.last_hidden_state[:, 0].cpu().numpy() - embeds.append(cls_emb) - name_embeds = np.vstack(embeds) - - # search FAISS index - distances, indices = self.dict_embeds.search(name_embeds, self.k) - top_indices = indices[:, 0] - - # gather outputs - results = [] - for idx in top_indices: - if idx >= 0: - results.append(self.dictionary[idx]) - else: - results.append((None, None)) - return results - - def _basic_normalize(self, text): - text = text.lower() - text = re.sub(self.rmv_puncts_regex, " ", text) - return " ".join(text.split()) - - def _embed_dictionary(self, show_progress=True): - encs = self.tokenizer( - [self._basic_normalize(name) for _, name in self.dictionary], - padding="max_length", - max_length=self.max_length, - truncation=True, - return_tensors=None, - ) - dataset = NamesDataset(encs, self.device) - loader = DataLoader( - dataset, - batch_size=self.batch_size, - shuffle=False, - collate_fn=default_data_collator, - ) - - embeds = [] - with torch.no_grad(): - for batch in tqdm(loader, disable=not show_progress): - out = self.model(**batch) - cls_emb = out.last_hidden_state[:, 0].cpu().numpy() - embeds.append(cls_emb) - all_embeds = np.vstack(embeds) - return all_embeds - - def save_cache(self, cache_path): - # build FAISS index - dim = self.dict_embeds.shape[1] - quantiser = faiss.IndexFlatIP(dim) - nlist = 2048 - index = faiss.IndexIVFFlat(quantiser, dim, nlist, faiss.METRIC_INNER_PRODUCT) - index.train(self.dict_embeds) - index.add(self.dict_embeds) - index.nprobe = 25 - - faiss.write_index(index, cache_path + ".index") - with open(cache_path, "wb") as f: - pickle.dump(self.dictionary, f) - - def load_cache(self, cache_path): - self.dict_embeds = faiss.read_index(cache_path + ".index") - with open(cache_path, "rb") as f: - self.dictionary = pickle.load(f) - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("--mode", choices=["indexing", "predict"], default="indexing") - parser.add_argument( - "--model_name_or_path", default="cambridgeltl/SapBERT-from-PubMedBERT-fulltext" - ) - parser.add_argument( - "--dictionary_path", - default="../normalization/resources/dictionary/best_dict_Disease_20210630_tmp.txt", - ) - parser.add_argument("--cache_dir", default="../normalization/biosyn_cache") - parser.add_argument("--no_cuda", action="store_true") - args = parser.parse_args() - - normalizer = NeuralNormalizer( - model_name_or_path=args.model_name_or_path, - cache_path=None, - no_cuda=args.no_cuda, - ) - - if args.mode == "indexing": - normalizer.load_dictionary(dictionary_path=args.dictionary_path) - os.makedirs(args.cache_dir, exist_ok=True) - cache_path = os.path.join( - args.cache_dir, os.path.basename(args.dictionary_path) + ".pk" - ) - normalizer.save_cache(cache_path) - print("Indexing complete. Cache saved to", cache_path) - - elif args.mode == "predict": - # load cache - normalizer.load_cache( - os.path.join(args.cache_dir, os.path.basename(args.dictionary_path) + ".pk") - ) - # example prediction - samples = ["diabetes", "heart disease"] - results = normalizer.normalize(samples) - for inp, out in zip(samples, results): - print(f"{inp} => {out}") - - -if __name__ == "__main__": - main() diff --git a/source/Parser/normalizers/normalizer_all.py b/source/Parser/normalizers/normalizer_all.py deleted file mode 100644 index e7171149..00000000 --- a/source/Parser/normalizers/normalizer_all.py +++ /dev/null @@ -1,137 +0,0 @@ -import re -import os -from datetime import datetime -from rapidfuzz import fuzz - - -class BaseNormalizer: - """ - Base class for flexible normalization with exact and similarity-based matching. - """ - - def __init__(self, dict_path, nlp=None, similarity_threshold=0.5): - self.NO_ENTITY_ID = "CUI-less" - self.similarity_threshold = similarity_threshold - self.nlp = nlp - self.entity2oid = dict() - - self.load_dictionary(dict_path) - - def load_dictionary(self, dict_path): - """ - Load dictionary from the given path and normalize keys for matching. - """ - print( - datetime.now().strftime("[%d/%b/%Y %H:%M:%S.%f]"), "Loading dictionary..." - ) - with open(dict_path, "r", encoding="utf-8") as f: - for line in f: - oid, names = line.strip().split("||") - names = names.split("|") - for name in names: - normalized_name = self.normalize_string(name) - self.entity2oid[normalized_name] = oid - print(datetime.now().strftime("[%d/%b/%Y %H:%M:%S.%f]"), "Dictionary loaded.") - - def normalize(self, names): - """ - Normalize a list of names and return their corresponding IDs. - """ - oids = list() - for name in names: - normalized_name = self.get_tmchem_name(name) - - # Exact match - if normalized_name in self.entity2oid: - oids.append(self.entity2oid[normalized_name]) - else: - # Flexible match based on similarity score - best_match = self.find_best_match(normalized_name) - if best_match: - oids.append(self.entity2oid[best_match]) - else: - oids.append(self.NO_ENTITY_ID) - - return oids - - def get_tmchem_name(self, name): - """ - Normalize a name using lowercasing, punctuation removal, and lemmatization (if NLP is enabled). - """ - cleaned_name = re.sub( - r"[^\w\s-]", "", name.lower() - ) # Remove punctuation but keep hyphens - if self.nlp: - doc = self.nlp(cleaned_name) - lemmatized_name = " ".join([token.lemma_ for token in doc]) - else: - lemmatized_name = cleaned_name - return self.normalize_string(lemmatized_name) - - def normalize_string(self, text): - """ - Normalize a string for matching by removing spaces and hyphens. - """ - return re.sub(r"[\s-]", "", text.lower()) - - def find_best_match(self, normalized_name): - """ - Find the best match for a given normalized name based on a similarity score. - """ - best_match = None - highest_score = 0 - - for key in self.entity2oid.keys(): - score = self.similarity_score(normalized_name, key) - if score > self.similarity_threshold and score > highest_score: - best_match = key - highest_score = score - - return best_match - - def similarity_score(self, name1, name2): - """ - Use RapidFuzz's token_sort_ratio for fast and accurate similarity scoring. - """ - return fuzz.token_sort_ratio(name1, name2) / 100 # Normalize score to 0-1 range - - -class CellTypeNormalizer(BaseNormalizer): - pass - - -class ProcedureNormalizer(BaseNormalizer): - pass - - -class ChemicalNormalizer(BaseNormalizer): - def load_dictionary(self, dict_path): - """ - Specialized dictionary loader for chemical normalizer with file size logging. - """ - dict_size = os.path.getsize(dict_path) - print( - datetime.now().strftime("[%d/%b/%Y %H:%M:%S.%f]"), - f"Chemical dictionary file size: {dict_size} bytes", - ) - super().load_dictionary(dict_path) - - -class CellLineNormalizer(BaseNormalizer): - def get_tmchem_name(self, name): - """ - Simplified name normalization for cell line data. - """ - return self.normalize_string(name) - - -class SpeciesNormalizer(BaseNormalizer): - def get_tmchem_name(self, name): - """ - Simplified name normalization for species data. - """ - return self.normalize_string(name) - - -class SignSymptomNormalizer(BaseNormalizer): - pass diff --git a/source/Parser/normalizers/readme.md b/source/Parser/normalizers/readme.md deleted file mode 100644 index 9b5a93ae..00000000 --- a/source/Parser/normalizers/readme.md +++ /dev/null @@ -1,22 +0,0 @@ -# Neural normalizer - -## How to index dictionary embeddings -``` -# index disease -CUDA_VISIBLE_DEVICES=0 python neural_normalizer.py \ - --model_name_or_path dmis-lab/biosyn-sapbert-bc5cdr-disease \ - --dictionary_path ../resources/normalization/dictionary/dict_Disease_20210630.txt \ - --cache_dir ../resources/normalization/normalizers/neural_norm_caches - -# index chemical -CUDA_VISIBLE_DEVICES=0 python neural_normalizer.py \ - --model_name_or_path dmis-lab/biosyn-sapbert-bc5cdr-chemical \ - --dictionary_path ../resources/normalization/dictionary/dict_ChemicalCompound_20210630.txt \ - --cache_dir ../resources/normalization/normalizers/neural_norm_caches - -# index gene -CUDA_VISIBLE_DEVICES=0 python neural_normalizer.py \ - --model_name_or_path dmis-lab/biosyn-sapbert-bc2gn \ - --dictionary_path ../resources/normalization/dictionary/dict_Gene.txt \ - --cache_dir ../resources/normalization/normalizers/neural_norm_caches -``` diff --git a/source/Parser/normalizers/species_normalizer.py b/source/Parser/normalizers/species_normalizer.py deleted file mode 100644 index bb024c23..00000000 --- a/source/Parser/normalizers/species_normalizer.py +++ /dev/null @@ -1,25 +0,0 @@ -class SpeciesNormalizer(object): - def __init__(self, dict_path): - self.NO_ENTITY_ID = "CUI-less" - - # Create dictionary for exact match - self.species2oid = dict() - with open(dict_path, "r", encoding="utf-8") as f: - for line in f: - oid, names = line[:-1].split("||") - names = names.split("|") - for name in names: - # a part of tmChem normalization - self.species2oid[name] = oid - - def normalize(self, names): - oids = list() - for name in names: - if name in self.species2oid: - oids.append(self.species2oid[name]) - elif name.lower() in self.species2oid: - oids.append(self.species2oid[name.lower()]) - else: - oids.append(self.NO_ENTITY_ID) - - return oids diff --git a/source/Parser/ops.py b/source/Parser/ops.py deleted file mode 100644 index 08668a1e..00000000 --- a/source/Parser/ops.py +++ /dev/null @@ -1,449 +0,0 @@ -import re -import time - -import numpy as np - -tokenize_regex = re.compile(r"([0-9a-zA-Z]+|[^0-9a-zA-Z])") - - -def json_to_sent(data): - """data: list of json file [{pmid,abstract,title}, ...]""" - out = dict() - for paper in data: - sentences = list() - - if len(CoNLL_tokenizer(paper["title"])) < 50: - title = [paper["title"]] - else: - title = sentence_split(paper["title"]) - if len(title) != 1 or len(title[0].strip()) > 0: - sentences.extend(title) - - if len(paper["abstract"]) > 0: - abst = sentence_split(paper["abstract"]) - if len(abst) != 1 or len(abst[0].strip()) > 0: - sentences.extend(abst) - out[paper["pmid"]] = dict() - out[paper["pmid"]]["sentence"] = sentences - return out - - -def input_form(sent_data): - """sent_data: dict of sentence, key=pmid {pmid:[sent,sent, ...], pmid: ...}""" - for pmid in sent_data: - sent_data[pmid]["words"] = list() - sent_data[pmid]["wordPos"] = list() - doc_piv = 0 - for sent in sent_data[pmid]["sentence"]: - wids = list() - wpos = list() - sent_piv = 0 - tok = CoNLL_tokenizer(sent) - - for w in tok: - if len(w) > 20: - wids.append(w[:10]) - else: - wids.append(w) - - start = doc_piv + sent_piv + sent[sent_piv:].find(w) - end = start + len(w) - 1 - sent_piv = end - doc_piv + 1 - wpos.append((start, end)) - doc_piv += len(sent) - sent_data[pmid]["words"].append(wids) - sent_data[pmid]["wordPos"].append(wpos) - - return sent_data - - -def softmax(logits): - out = list() - for logit in logits: - temp = np.subtract(logit, np.max(logit)) - p = np.exp(temp) / np.sum(np.exp(temp)) - out.append(np.max(p)) - return out - - -def CoNLL_tokenizer(text): - rawTok = [t for t in tokenize_regex.split(text) if t] - assert "".join(rawTok) == text - tok = [t for t in rawTok if t != " "] - return tok - - -def sentence_split(text): - sentences = list() - sent = "" - piv = 0 - for idx, char in enumerate(text): - if char in "?!": - if idx > len(text) - 3: - sent = text[piv:] - piv = -1 - else: - sent = text[piv : idx + 1] - piv = idx + 1 - - elif char == ".": - if idx > len(text) - 3: - sent = text[piv:] - piv = -1 - elif (text[idx + 1] == " ") and ( - text[idx + 2] in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ-"' + "'" - ): - sent = text[piv : idx + 1] - piv = idx + 1 - - if sent != "": - toks = CoNLL_tokenizer(sent) - if len(toks) > 100: - while True: - rawTok = [t for t in tokenize_regex.split(sent) if t] - cut = "".join(rawTok[:200]) - sent = "".join(rawTok[200:]) - sentences.append(cut) - - if len(CoNLL_tokenizer(sent)) < 100: - if sent.strip() == "": - sent = "" - break - else: - sentences.append(sent) - sent = "" - break - else: - sentences.append(sent) - sent = "" - - if piv == -1: - break - - if piv != -1: - sent = text[piv:] - toks = CoNLL_tokenizer(sent) - if len(toks) > 100: - while True: - rawTok = [t for t in tokenize_regex.split(sent) if t] - cut = "".join(rawTok[:200]) - sent = "".join(rawTok[200:]) - sentences.append(cut) - - if len(CoNLL_tokenizer(sent)) < 100: - if sent.strip() == "": - sent = "" - break - else: - sentences.append(sent) - sent = "" - break - else: - sentences.append(sent) - sent = "" - - return sentences - - -def get_prob(data, sent_data, predicDict, logitsDict, entity_types=None): - for idx, paper in enumerate(data): - pmid = paper["pmid"] - - if len(paper["abstract"]) > 0: - content = paper["title"] + " " + paper["abstract"] - else: - content = paper["title"] - - if entity_types is not None: - for ent_type in entity_types: - paper["entities"][ent_type] = [] - paper["prob"] = dict() - - if entity_types is None: - continue - - for dtype in entity_types: - for sentidx, tags in enumerate(predicDict[dtype][pmid]): - B_flag = False - tmpSE = dict() - # get position of entity corresponding to types - for widx, tag in enumerate(tags): - if tag == "O": - if B_flag: - tmpSE["end"] = sent_data[pmid]["wordPos"][sentidx][ - widx - 1 - ][1] - paper["entities"][dtype].append(tmpSE) - B_flag = False - continue - elif tag == "B": - if B_flag: - tmpSE["end"] = sent_data[pmid]["wordPos"][sentidx][ - widx - 1 - ][1] - paper["entities"][dtype].append(tmpSE) - tmpSE = {"start": sent_data[pmid]["wordPos"][sentidx][widx][0]} - B_flag = True - elif tag == "I": - continue - if B_flag: - tmpSE["end"] = sent_data[pmid]["wordPos"][sentidx][-1][1] - paper["entities"][dtype].append(tmpSE) - - # get prob. of entity logits corresponding to types - logs = list() - for t_sent in logitsDict[dtype][pmid]: - logs.extend(t_sent) - paper["prob"][dtype] = list() - for pos in paper["entities"][dtype]: - if pos["start"] == pos["end"]: - soft = softmax( - logs[ - len(CoNLL_tokenizer(content[: pos["start"]])) : len( - CoNLL_tokenizer(content[: pos["end"]]) - ) - + 1 - ] - ) - paper["prob"][dtype].append((pos, float(np.average(soft)))) - else: - soft = softmax( - logs[ - len(CoNLL_tokenizer(content[: pos["start"]])) : len( - CoNLL_tokenizer(content[: pos["end"]]) - ) - ] - ) - paper["prob"][dtype].append((pos, float(np.average(soft)))) - - return data - - -def detokenize(tokens, predicts, logits): - pred = dict( - {"toks": tokens[:], "labels": predicts[:], "logit": logits[:]} - ) # dictionary for predicted tokens and labels. - - bert_toks = list() - bert_labels = list() - bert_logits = list() - tmp_p = list() - tmp_l = list() - tmp_s = list() - for t, label, s in zip(pred["toks"], pred["labels"], pred["logit"]): - if t == "[CLS]" or t == "": # non-text tokens will not be evaluated. - continue - elif t == "[SEP]" or t == "": # newline - bert_toks.append(tmp_p) - bert_labels.append(tmp_l) - bert_logits.append(tmp_s) - tmp_p = list() - tmp_l = list() - tmp_s = list() - continue - elif ( - t[:2] == "##" - ): # if it is a piece of a word (broken by Word Piece tokenizer) - tmp_p[-1] = tmp_p[-1] + t[2:] # append pieces - elif t.startswith("Ġ"): # roberta tokenizer - t = t.replace("Ġ", " ") - tmp_p[-1] = tmp_p[-1] + t - else: - tmp_p.append(t) - tmp_l.append(label) - tmp_s.append(s) - return bert_toks, bert_labels, bert_logits - - -# https://stackoverflow.com/a/3620972 -PROF_DATA = {} - - -class Profile(object): - def __init__(self, prefix): - self.prefix = prefix - - def __call__(self, fn): - def with_profiling(*args, **kwargs): - global PROF_DATA - start_time = time.time() - ret = fn(*args, **kwargs) - - elapsed_time = time.time() - start_time - key = "[" + self.prefix + "]." + fn.__name__ - - if key not in PROF_DATA: - PROF_DATA[key] = [0, list()] - PROF_DATA[key][0] += 1 - PROF_DATA[key][1].append(elapsed_time) - - return ret - - return with_profiling - - -def show_prof_data(): - for fname, data in sorted(PROF_DATA.items()): - max_time = max(data[1]) - avg_time = sum(data[1]) / len(data[1]) - total_time = sum(data[1]) - print("\n{} -> called {} times".format(fname, data[0])) - print( - "Time total: {:.3f}, max: {:.3f}, avg: {:.3f}".format( - total_time, max_time, avg_time - ) - ) - - -def clear_prof_data(): - global PROF_DATA - PROF_DATA = {} - - -# Ref. dict of SR4GN -species_human_excl_homo_sapiens = ( - "person|infant|Child|people|participants|woman|" - "Girls|Man|Peoples|Men|Participant|Patients|" - "humans|Persons|mans|participant|Infants|Boys|" - "Human|Humans|Women|children|Mans|child|Participants|Girl|" - "Infant|girl|patient|patients|boys|men|infants|" - "man|girls|Children|Boy|women|persons|human|Woman|" - "peoples|Patient|People|boy|Person".split("|") -) - - -def filter_entities(ner_results): - num_filtered_species_per_doc = list() - - for idx, paper in enumerate(ner_results): - if len(paper["abstract"]) > 0: - content = paper["title"] + " " + paper["abstract"] - else: - content = paper["title"] - - valid_species = list() - species = paper["entities"]["species"] - for spcs in species: - entity_mention = content[spcs["start"] : spcs["end"] + 1] - if entity_mention in species_human_excl_homo_sapiens: - spcs["end"] += 1 - continue - valid_species.append(spcs) - - num_filtered_species = len(species) - len(valid_species) - if num_filtered_species > 0: - paper["entities"]["species"] = valid_species - - num_filtered_species_per_doc.append((paper["pmid"], num_filtered_species)) - - return num_filtered_species_per_doc - - -# from convert.py -def pubtator2dict_list(pubtator_file_path): - dict_list = list() - - title_pmid = "" - # abstract_pmid = '' - title = "" - abstract_text = "" - doc_line_num = 0 - - with open(pubtator_file_path, "r", encoding="utf-8") as f: - for line in f: - line = line.rstrip() - if len(line) == 0: - doc_dict = { - "pmid": title_pmid, - "entities": {}, - } - doc_dict["title"] = title - doc_dict["abstract"] = abstract_text - - dict_list.append(doc_dict) - - doc_line_num = 0 - continue - - if doc_line_num == 0: - title_cols = line.split("|t|") - - if len(title_cols) != 2: - return '{"error": "wrong #title_cols: %d"}' % len(title_cols) - - title_pmid = title_cols[0] - - if "- No text -" == title_cols[1]: - # make tmvar2 results empty - title = "" - else: - title = title_cols[1] - elif doc_line_num == 1: - abstract_cols = line.split("|a|") - - if len(abstract_cols) != 2: - if len(abstract_cols) > 2: - abstract_text = "|a|".join(abstract_cols[1:]) - else: - return '{"error": "wrong #abstract_cols: %d"}' % len( - abstract_cols - ) - else: - if "- No text -" == abstract_cols[1]: - # make tmvar2 results empty - abstract_text = "" - else: - abstract_text = abstract_cols[1] - - doc_line_num += 1 - return dict_list - - -def preprocess(text): - text = text.replace("\r ", " ") - - text = text.replace("\u2028", " ") - text = text.replace("\u2029", " ") - - # HAIR SPACE - # https://www.fileformat.info/info/unicode/char/200a/index.htm - text = text.replace("\u200a", " ") - - # THIN SPACE - # https://www.fileformat.info/info/unicode/char/2009/index.htm - text = text.replace("\u2009", " ") - text = text.replace("\u2008", " ") - - # FOUR-PER-EM SPACE - # https://www.fileformat.info/info/unicode/char/2005/index.htm - text = text.replace("\u2005", " ") - text = text.replace("\u2004", " ") - text = text.replace("\u2003", " ") - - # EN SPACE - # https://www.fileformat.info/info/unicode/char/2002/index.htm - text = text.replace("\u2002", " ") - - # NO-BREAK SPACE - # https://www.fileformat.info/info/unicode/char/00a0/index.htm - text = text.replace("\u00a0", " ") - - # https://www.fileformat.info/info/unicode/char/f8ff/index.htm - text = text.replace("\uf8ff", " ") - - # https://www.fileformat.info/info/unicode/char/202f/index.htm - text = text.replace("\u202f", " ") - - text = text.replace("\ufeff", " ") - text = text.replace("\uf044", " ") - text = text.replace("\uf02d", " ") - text = text.replace("\uf0bb", " ") - - text = text.replace("\uf048", "Η") - text = text.replace("\uf0b0", "°") - - # MIDLINE HORIZONTAL ELLIPSIS: ⋯ - # https://www.fileformat.info/info/unicode/char/22ef/index.htm - # text = text.replace('\u22EF', '...') - - return text diff --git a/source/Parser/scripts/run_biomedner.sh b/source/Parser/scripts/run_biomedner.sh deleted file mode 100644 index 19554591..00000000 --- a/source/Parser/scripts/run_biomedner.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -cd .. -#!/bin/bash - -if [ ! -d "logs" ]; then - mkdir logs -fi -#################################### -##### NER ##### -#################################### - -# run neural NER -nohup python biomedner_server.py \ - --model_name_or_path models/finetuned_model_roberta \ - --biomedner_port 18894 >> logs/nohup_multi_ner.out 2>&1 & - -nohup python gner_server.py \ - --model_name_or_path gliner-community/gliner_large-v2.5 \ - --gner_port 18783 >> logs/nohup_gner.out 2>&1 & - -#################################### -##### Normalization ##### -#################################### -cd resources -# Disease (working dir: normalization/) -cd normalization -nohup java -Xmx16G -jar normalizers/disease/disease_normalizer_21.jar \ - "inputs/disease" \ - "outputs/disease" \ - "dictionary/dict_Disease.txt" \ - "normalizers/disease/resources" \ - 9 \ - 18892 \ - >> ../../logs/nohup_disease_normalize.out 2>&1 & - -# Gene (working dir: normalization/normalizers/gene/, port:18888) -cd normalizers/gene -nohup java -Xmx20G -jar gnormplus-normalization_21.jar \ - 18888 \ - >> ../../../../logs/nohup_gene_normalize.out 2>&1 & -cd ../../../.. \ No newline at end of file diff --git a/source/Parser/scripts/stop_biomedner.sh b/source/Parser/scripts/stop_biomedner.sh deleted file mode 100644 index bd44d473..00000000 --- a/source/Parser/scripts/stop_biomedner.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# Define a function to stop a process by its name -stop_process() { - process_name="$1" - pid=$(ps auxww | grep "$process_name" | grep -v grep | awk '{print $2}' | sort -r) - if [ "$pid" != "" ]; then - # Kill each PID one by one - for p in $pid; do - kill -9 "$p" - echo "Stopped $process_name (PID: $p)" - done - else - echo "No $process_name found to stop." - fi -} - -# Call the function for each process -stop_process "biomedner_server.py" -stop_process "disease_normalizer_21.jar" -stop_process "gnormplus-normalization_21.jar" -stop_process "gner_server.py" - diff --git a/source/biomedner_services/run_biomedner.sh b/source/biomedner_services/run_biomedner.sh deleted file mode 100644 index b8f963f5..00000000 --- a/source/biomedner_services/run_biomedner.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash -cd Parser - -if [ ! -d "logs" ]; then - mkdir logs -fi -#################################### -##### NER ##### -#################################### -# run NER -nohup python biomedner_server.py \ - --model_name_or_path models/finetuned_model_roberta \ - --biomedner_port 18894 >> logs/nohup_multi_ner.out 2>&1 & - -nohup python gner_server.py \ - --model_name_or_path gliner-community/gliner_large-v2.5 \ - --gner_port 18783 >> logs/nohup_gner.out 2>&1 & - -#################################### -##### Normalization ##### -#################################### -cd resources -# Disease (working dir: normalization/) -cd normalization -nohup java -Xmx16G -jar normalizers/disease/disease_normalizer_21.jar \ - "inputs/disease" \ - "outputs/disease" \ - "dictionary/dict_Disease.txt" \ - "normalizers/disease/resources" \ - 9 \ - 18892 \ - >> ../../logs/nohup_disease_normalize.out 2>&1 & - -# Gene (working dir: normalization/normalizers/gene/, port:18888) -cd normalizers/gene -nohup java -Xmx20G -jar gnormplus-normalization_21.jar \ - 18888 \ - >> ../../../../logs/nohup_gene_normalize.out 2>&1 & -cd ../../../../.. \ No newline at end of file diff --git a/source/biomedner_services/stop_biomedner.sh b/source/biomedner_services/stop_biomedner.sh deleted file mode 100644 index bd44d473..00000000 --- a/source/biomedner_services/stop_biomedner.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# Define a function to stop a process by its name -stop_process() { - process_name="$1" - pid=$(ps auxww | grep "$process_name" | grep -v grep | awk '{print $2}' | sort -r) - if [ "$pid" != "" ]; then - # Kill each PID one by one - for p in $pid; do - kill -9 "$p" - echo "Stopped $process_name (PID: $p)" - done - else - echo "No $process_name found to stop." - fi -} - -# Call the function for each process -stop_process "biomedner_server.py" -stop_process "disease_normalizer_21.jar" -stop_process "gnormplus-normalization_21.jar" -stop_process "gner_server.py" - diff --git a/tests/test_deployment_readiness.py b/tests/test_deployment_readiness.py index 5b81405c..2ecb35da 100644 --- a/tests/test_deployment_readiness.py +++ b/tests/test_deployment_readiness.py @@ -15,7 +15,9 @@ def test_config_env_overrides_and_standard_index_names(monkeypatch): monkeypatch.setenv("TRIALMATCHAI_ES_HOST", "https://es.example.test:9200") monkeypatch.setenv("TRIALMATCHAI_ES_PASSWORD", "secret-from-env") monkeypatch.setenv("TRIALMATCHAI_INDEX_TRIALS_ELIGIBILITY", "trials_eligibility") - monkeypatch.setenv("TRIALMATCHAI_BIOMEDNER_AUTO_START", "true") + monkeypatch.setenv("TRIALMATCHAI_ENTITY_BACKEND", "regex") + monkeypatch.setenv("TRIALMATCHAI_CONCEPT_DB_PATH", "data/concepts-test") + monkeypatch.setenv("TRIALMATCHAI_LINK_ACCEPT", "0.9") cfg = load_config() @@ -23,7 +25,9 @@ def test_config_env_overrides_and_standard_index_names(monkeypatch): assert cfg["elasticsearch"]["password"] == "secret-from-env" assert cfg["elasticsearch"]["index_trials"] == "clinical_trials" assert cfg["elasticsearch"]["index_trials_eligibility"] == "trials_eligibility" - assert cfg["services"]["auto_start"] is True + assert cfg["entity_extraction"]["backend"] == "regex" + assert cfg["concept_linker"]["db_path"].endswith("data/concepts-test") + assert cfg["concept_linker"]["accept_threshold"] == 0.9 def test_cot_prompt_does_not_inject_consent(): diff --git a/tests/test_entities.py b/tests/test_entities.py new file mode 100644 index 00000000..fc5a3efd --- /dev/null +++ b/tests/test_entities.py @@ -0,0 +1,170 @@ +from __future__ import annotations + +import csv +from pathlib import Path + +from Matcher.entities.annotator import CompatibilityEntityAnnotator +from Matcher.entities.builder import build_legacy_dictionary_rows, build_omop_concept_rows +from Matcher.entities.linker import ConceptLinker, InMemoryConceptStore +from Matcher.entities.recognizers import RegexSchemaRecognizer, resolve_overlaps +from Matcher.entities.schemas import load_entity_schemas +from Matcher.entities.types import ConceptCandidate, EntityAnnotation, NO_ENTITY_ID + +ROOT = Path(__file__).resolve().parents[1] + + +def test_default_schema_validates_vocab_routing(): + schemas = load_entity_schemas() + by_id = {schema.id: schema for schema in schemas} + + assert by_id["disease"].target_vocabularies == ("SNOMED", "ICD10", "ICD10CM") + assert by_id["laboratory_test"].target_vocabularies == ("LOINC",) + assert by_id["medication"].target_vocabularies == ("RxNorm", "ATC") + assert by_id["disease"].query_expansion is True + + +def test_regex_backend_returns_current_output_shape(): + schemas = [schema for schema in load_entity_schemas() if schema.id == "disease"] + annotator = CompatibilityEntityAnnotator(RegexSchemaRecognizer(), schemas) + + result = annotator.annotate_texts_in_parallel(["metastatic cancer"], max_workers=1) + + assert result[0][0]["entity_group"] == "disease" + assert result[0][0]["text"] == "cancer" + assert result[0][0]["normalized_id"] == [NO_ENTITY_ID] + assert "concept_candidates" in result[0][0] + + +def test_overlap_resolution_keeps_higher_confidence_span(): + annotations = [ + EntityAnnotation("disease", "lung cancer", 0, 11, 0.91, schema_id="disease"), + EntityAnnotation("disease", "cancer", 5, 11, 0.95, schema_id="disease"), + ] + + resolved = resolve_overlaps(annotations) + + assert len(resolved) == 1 + assert resolved[0].text == "cancer" + + +def test_concept_linker_accepts_rejects_and_marks_ambiguous(): + schemas = [schema for schema in load_entity_schemas() if schema.id == "disease"] + store = InMemoryConceptStore( + [ + ConceptCandidate( + concept_id="1", + vocabulary_id="SNOMED", + concept_code="363346000", + concept_name="Malignant neoplastic disease", + domain_id="Condition", + synonyms=("cancer", "malignancy"), + ), + ConceptCandidate( + concept_id="2", + vocabulary_id="SNOMED", + concept_code="73211009", + concept_name="Diabetes mellitus", + domain_id="Condition", + ), + ] + ) + linker = ConceptLinker(store, schemas, accept_threshold=0.8, reject_threshold=0.3) + + accepted = linker.link_annotation( + EntityAnnotation("disease", "cancer", 0, 6, 0.95, schema_id="disease") + ) + ambiguous = linker.link_annotation( + EntityAnnotation( + "disease", + "neoplastic disorder", + 0, + 19, + 0.95, + schema_id="disease", + ) + ) + rejected = linker.link_annotation( + EntityAnnotation("disease", "unrelated words", 0, 15, 0.95, schema_id="disease") + ) + + assert accepted.linker_status == "accepted" + assert accepted.normalized_id == ("SNOMED:363346000",) + assert "malignancy" in accepted.synonyms + assert ambiguous.linker_status == "ambiguous" + assert ambiguous.normalized_id == (NO_ENTITY_ID,) + assert rejected.linker_status == "rejected" + + +def test_concept_builders_import_omop_and_legacy_rows(tmp_path): + concept_csv = tmp_path / "CONCEPT.csv" + synonym_csv = tmp_path / "CONCEPT_SYNONYM.csv" + with concept_csv.open("w", newline="") as handle: + writer = csv.DictWriter( + handle, + fieldnames=[ + "concept_id", + "concept_name", + "domain_id", + "vocabulary_id", + "concept_class_id", + "standard_concept", + "concept_code", + ], + ) + writer.writeheader() + writer.writerow( + { + "concept_id": "1", + "concept_name": "Hemoglobin measurement", + "domain_id": "Measurement", + "vocabulary_id": "LOINC", + "concept_class_id": "Lab Test", + "standard_concept": "S", + "concept_code": "718-7", + } + ) + with synonym_csv.open("w", newline="") as handle: + writer = csv.DictWriter( + handle, + fieldnames=["concept_id", "concept_synonym_name"], + ) + writer.writeheader() + writer.writerow({"concept_id": "1", "concept_synonym_name": "Hgb"}) + + rows = build_omop_concept_rows(concept_csv, synonym_csv, vocabularies=("LOINC",)) + legacy = tmp_path / "dict_Gene.txt" + legacy.write_text("EntrezGene:1956||EGFR|ERBB1\n") + + legacy_rows = build_legacy_dictionary_rows( + legacy, + vocabulary_id="EntrezGene", + domain_id="Gene", + ) + + assert rows[0]["concept_code"] == "718-7" + assert rows[0]["synonyms"] == ["Hgb"] + assert legacy_rows[0]["concept_code"] == "1956" + assert legacy_rows[0]["synonyms"] == ["EGFR", "ERBB1"] + + +def test_runtime_replacement_has_no_old_daemon_references(): + runtime_files = [ + "source/Matcher/config/config.json", + "source/Matcher/main.py", + "source/Parser/biomedner_engine.py", + "source/Parser/normalizer.py", + ] + forbidden = [ + "18888", + "18892", + "18894", + "18783", + "GNormPlus", + "disease_normalizer_21.jar", + "java -Xmx", + "import socket", + ] + for file_name in runtime_files: + content = (ROOT / file_name).read_text() + for term in forbidden: + assert term not in content diff --git a/tests/test_preflight_and_indexer.py b/tests/test_preflight_and_indexer.py index 316ddcd7..22270350 100644 --- a/tests/test_preflight_and_indexer.py +++ b/tests/test_preflight_and_indexer.py @@ -59,6 +59,21 @@ def _base_config(tmp_path): } +def _entity_config(tmp_path): + cfg = _base_config(tmp_path) + schema = tmp_path / "schema.yaml" + schema.write_text("version: 1\nentities: []\n") + cfg["entity_extraction"] = { + "backend": "gliner2", + "schema_path": str(schema), + } + cfg["concept_linker"] = { + "enabled": True, + "db_path": str(tmp_path / "missing-concepts"), + } + return cfg + + def test_preflight_passes_for_required_paths_and_indices(tmp_path): cfg = _base_config(tmp_path) issues = run_preflight_checks( @@ -108,6 +123,18 @@ def test_preflight_reports_missing_vllm_extra(tmp_path, monkeypatch): ] +def test_preflight_reports_missing_entity_extra(tmp_path, monkeypatch): + cfg = _entity_config(tmp_path) + monkeypatch.setattr(preflight.importlib.util, "find_spec", lambda name: None) + + issues = run_preflight_checks(cfg, require_models=True) + + assert ( + "entity_extraction.backend=gliner2 requires the entity extra " + "(`uv sync --extra entity`)." + ) in issues + + def test_indexer_config_uses_env_overrides_and_resolves_certs(tmp_path, monkeypatch): config_path = tmp_path / "config.json" cert = tmp_path / "certs" / "ca.crt" diff --git a/tests/test_settings.py b/tests/test_settings.py index 8b6327ab..8108af96 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -22,20 +22,28 @@ def test_env_overrides(self) -> None: "password": "pass", }, "embedder": {"model_name": "old"}, + "entity_extraction": {"backend": "gliner2"}, + "concept_linker": {"db_path": "old"}, } os.environ["TRIALMATCHAI_ES_HOST"] = "http://override:9200" os.environ["TRIALMATCHAI_EMBEDDER_MODEL_NAME"] = "new-model" os.environ["TRIALMATCHAI_ES_AUTO_START"] = "true" + os.environ["TRIALMATCHAI_ENTITY_BACKEND"] = "regex" + os.environ["TRIALMATCHAI_CONCEPT_DB_PATH"] = "concepts" try: updated = apply_env_overrides(raw) finally: os.environ.pop("TRIALMATCHAI_ES_HOST", None) os.environ.pop("TRIALMATCHAI_EMBEDDER_MODEL_NAME", None) os.environ.pop("TRIALMATCHAI_ES_AUTO_START", None) + os.environ.pop("TRIALMATCHAI_ENTITY_BACKEND", None) + os.environ.pop("TRIALMATCHAI_CONCEPT_DB_PATH", None) self.assertEqual(updated["elasticsearch"]["host"], "http://override:9200") self.assertEqual(updated["embedder"]["model_name"], "new-model") self.assertTrue(updated["elasticsearch"]["auto_start"]) + self.assertEqual(updated["entity_extraction"]["backend"], "regex") + self.assertEqual(updated["concept_linker"]["db_path"], "concepts") if __name__ == "__main__": diff --git a/utils/Indexer/index_criteria.py b/utils/Indexer/index_criteria.py index 4d2aa892..3db6750c 100644 --- a/utils/Indexer/index_criteria.py +++ b/utils/Indexer/index_criteria.py @@ -98,6 +98,28 @@ def create_index(self, dims: int): "analyzer": "standard_lowercase", }, "class": {"type": "keyword"}, + "entity_group": {"type": "keyword"}, + "text": { + "type": "text", + "analyzer": "standard_lowercase", + }, + "score": {"type": "float"}, + "linker_score": {"type": "float"}, + "linker_status": {"type": "keyword"}, + "concept_candidates": { + "type": "nested", + "properties": { + "normalized_id": {"type": "keyword"}, + "vocabulary_id": {"type": "keyword"}, + "concept_code": {"type": "keyword"}, + "concept_name": { + "type": "text", + "analyzer": "standard_lowercase", + }, + "domain_id": {"type": "keyword"}, + "score": {"type": "float"}, + }, + }, }, }, "nct_id": {"type": "keyword"}, diff --git a/utils/Indexer/prepare_criteria.py b/utils/Indexer/prepare_criteria.py index 660e560c..7c25de6f 100644 --- a/utils/Indexer/prepare_criteria.py +++ b/utils/Indexer/prepare_criteria.py @@ -3,7 +3,9 @@ import hashlib import json import logging +import sys from pathlib import Path +from typing import Any import torch import torch.nn.functional as F @@ -16,6 +18,12 @@ logger = logging.getLogger(__name__) +ROOT = Path(__file__).resolve().parents[2] +SOURCE = ROOT / "source" +if str(SOURCE) not in sys.path: + sys.path.append(str(SOURCE)) + + class SentenceEmbedder: def __init__(self, model_name: str = "BAAI/bge-m3", use_gpu: bool = True): self.device = torch.device( @@ -66,6 +74,7 @@ def process_trial( source_folder: Path, processed_folder: Path, embedder: SentenceEmbedder, + entity_annotator: Any | None = None, ) -> int: raw_path = source_folder / f"{nct_id}.json" if not raw_path.exists(): @@ -98,6 +107,8 @@ def process_trial( if not entries: return 0 + _annotate_missing_entities(entries, texts, entity_annotator) + # embed all at once vectors = embedder.embed(texts) @@ -111,7 +122,7 @@ def process_trial( "criteria_id": crit_id, "nct_id": entry["nct_id"], "criterion": entry["criterion"], - "entities": entry["entities"], + "entities": _entities_for_index(entry["entities"]), "eligibility_type": entry["eligibility_type"], "criterion_vector": vec, } @@ -142,6 +153,16 @@ def main(): "--model-name", default="BAAI/bge-m3", help="Sentence embedding model name" ) p.add_argument("--use-gpu", action="store_true", help="Enable GPU iff available") + p.add_argument( + "--annotate-entities", + action="store_true", + help="Annotate criteria without existing entities before writing processed JSON.", + ) + p.add_argument( + "--config", + default=None, + help="TrialMatchAI config path used when --annotate-entities is enabled.", + ) args = p.parse_args() ids = [line.strip() for line in open(args.ids_file) if line.strip()] @@ -150,6 +171,7 @@ def main(): processed_folder.mkdir(parents=True, exist_ok=True) embedder = SentenceEmbedder(model_name=args.model_name, use_gpu=args.use_gpu) + entity_annotator = _build_entity_annotator(args.config) if args.annotate_entities else None total = 0 skipped = 0 @@ -162,7 +184,13 @@ def main(): skipped += 1 continue - processed_count = process_trial(nct, source_folder, processed_folder, embedder) + processed_count = process_trial( + nct, + source_folder, + processed_folder, + embedder, + entity_annotator=entity_annotator, + ) total += processed_count logger.info( @@ -170,5 +198,52 @@ def main(): ) +def _build_entity_annotator(config_path: str | None): + from Matcher.config.config_loader import load_config + from Matcher.entities import build_entity_annotator + + config = load_config(config_path) + return build_entity_annotator(config) + + +def _annotate_missing_entities( + entries: list[dict[str, Any]], + texts: list[str], + entity_annotator: Any | None, +) -> None: + if entity_annotator is None: + return + missing_indices = [ + index for index, entry in enumerate(entries) if not entry.get("entities") + ] + if not missing_indices: + return + missing_texts = [texts[index] for index in missing_indices] + annotations = entity_annotator.annotate_texts_in_parallel( + missing_texts, + max_workers=1, + ) + for index, entities in zip(missing_indices, annotations): + entries[index]["entities"] = entities + + +def _entities_for_index(entities: Any) -> list[dict[str, Any]]: + if not isinstance(entities, list): + return [] + indexed: list[dict[str, Any]] = [] + for entity in entities: + if not isinstance(entity, dict): + continue + normalized = dict(entity) + normalized.setdefault("entity", normalized.get("text", "")) + normalized.setdefault("class", normalized.get("entity_group", "")) + normalized.setdefault("normalized_id", ["CUI-less"]) + normalized.setdefault("synonyms", []) + normalized.setdefault("concept_candidates", []) + normalized.setdefault("linker_status", "not_linked") + indexed.append(normalized) + return indexed + + if __name__ == "__main__": main() diff --git a/uv.lock b/uv.lock index dcd20486..ac3614e5 100644 --- a/uv.lock +++ b/uv.lock @@ -643,6 +643,18 @@ 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 = "deprecation" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788, upload-time = "2020-04-20T14:23:38.738Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178, upload-time = "2020-04-20T14:23:36.581Z" }, +] + [[package]] name = "depyf" version = "0.20.0" @@ -988,6 +1000,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/73/48/9b6dc122f53d5493d280a797e7781143b5a86a2625b8550d6b082eb7fb46/gliner-0.2.27-py3-none-any.whl", hash = "sha256:90373a3f6166977d4ca807c5daf6e3ea1fa21a5c40d862f3e63764cba442abae", size = 207786, upload-time = "2026-06-15T14:38:36.08Z" }, ] +[[package]] +name = "gliner2" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gliner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "peft", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "urllib3", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/1c/5e7e30213e8d917c14cefa3c060457bfa6a1e21304f852f02400dba91715/gliner2-1.3.1.tar.gz", hash = "sha256:c22f496afb2c87640005f5f49f83bb42610e85e544e3170cff7ea1ba69925ffa", size = 132379, upload-time = "2026-05-06T16:15:59.58Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/48/00e07c5f36e328017e072b2fc9106215eb3557ea8baabe12f095e2f24fad/gliner2-1.3.1-py3-none-any.whl", hash = "sha256:8af0e84a61e04f2bb491de10ef9509f7b45b4a72eb678b85e06b745e85087291", size = 95218, upload-time = "2026-05-06T16:15:57.702Z" }, +] + [[package]] name = "googleapis-common-protos" version = "1.75.0" @@ -1289,6 +1317,55 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/48/44/2b5b95b7aa39fb2d8d9d956e0f3d5d45aef2ae1d942d4c3ffac2f9cfed1a/kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be4a51a55833dc29ab5d7503e7bcb3b3af3402d266018137127450005cdfe737", size = 79892, upload-time = "2026-03-09T13:15:49.694Z" }, ] +[[package]] +name = "lance-namespace" +version = "0.8.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lance-namespace-urllib3-client", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/12/f7ab93b29be3edbf5fc3610714bf2d06088e7f4524bfb38dfd6852458b08/lance_namespace-0.8.6.tar.gz", hash = "sha256:18232e721c8188145f4ec9389cc2dfbeeabf54a619d94885ea1b3375bee9f4af", size = 11529, upload-time = "2026-06-12T17:36:41.651Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/1b/5b1668ee2dc8910965f390640359112a31157092fcf8e000b89c79b58708/lance_namespace-0.8.6-py3-none-any.whl", hash = "sha256:571eae34f9aad70e5b05020416c2860889b9ec82993ccd0eb015e7b39c3ea309", size = 13383, upload-time = "2026-06-12T17:36:43.456Z" }, +] + +[[package]] +name = "lance-namespace-urllib3-client" +version = "0.8.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "python-dateutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "urllib3", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/80/fb224b4a89c1c1638cde949cb6cce6c3aca7759effbfea46a3d9c3960b21/lance_namespace_urllib3_client-0.8.6.tar.gz", hash = "sha256:b6fb1d306e74a7576e5309919020be744527de484a63dbf5eed10f8b368548df", size = 228772, upload-time = "2026-06-12T17:36:42.609Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/90/1e27de15cd1b16785a1c7312beb0a59e75c8344a815f600f58173a565bd1/lance_namespace_urllib3_client-0.8.6-py3-none-any.whl", hash = "sha256:9d78249c3fb15aa3d15d668f78f04a275af3d08d800a7027492f37996ac4968b", size = 369950, upload-time = "2026-06-12T17:36:40.438Z" }, +] + +[[package]] +name = "lancedb" +version = "0.25.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "deprecation", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "lance-namespace", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "overrides", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyarrow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/62/a149b47dc4ccf3c569eba722b805cbba1b90566976ff1d459f20f7f00ebc/lancedb-0.25.3-cp39-abi3-macosx_10_15_x86_64.whl", hash = "sha256:1cfa4dd97b33ca8f73288aa4b1baaddc9545ce0d3c8e5d06fba8feb77f42363f", size = 38425074, upload-time = "2025-11-07T05:58:15.763Z" }, + { url = "https://files.pythonhosted.org/packages/b2/94/ae3e74bb27dcca321ccf1e7a32ccab09b1062ddf54f96376221ca8610e7c/lancedb-0.25.3-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8a7bfe0cb2146f6e78e9f376673ed2f906b93dab84df97dad2ba9fa52f97e152", size = 34506539, upload-time = "2025-11-07T05:14:04.901Z" }, + { url = "https://files.pythonhosted.org/packages/c1/95/32ddb779a01cd0d349f391e7d5f4218d045f9848c1d757f5a8ace4c63b09/lancedb-0.25.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500beac161f73e3e6826a711efb1d24397d892d07dfdce2c9fb1da73f8de506c", size = 39145675, upload-time = "2025-11-07T05:24:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/ab/15/f0d69acc5e06892d19e09c127cd928cf20f5d2966a069e93693fc389b132/lancedb-0.25.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3035665fb8e4aaff8dff2602747cc77aeba6bc39f1a95345abc3275c97a044cb", size = 39191458, upload-time = "2025-11-07T05:24:38.047Z" }, +] + [[package]] name = "langchain" version = "1.3.10" @@ -2359,6 +2436,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f7/69/e0be45d4c8ad7d301cdc9917d22ff39211da1e830f92fb07b29c9221b5c4/outlines_core-0.2.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:615566bf8257d2bba8ac192cdfc29d1c4357f57b53672fbd622e821215e4f1bd", size = 2338968, upload-time = "2026-01-09T15:58:23.317Z" }, ] +[[package]] +name = "overrides" +version = "7.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812, upload-time = "2024-01-27T21:01:33.423Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832, upload-time = "2024-01-27T21:01:31.393Z" }, +] + [[package]] name = "packageurl-python" version = "0.17.6" @@ -2741,16 +2827,16 @@ pycountry = [ [[package]] name = "pydantic-settings" -version = "2.14.1" +version = "2.14.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "python-dotenv", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "typing-inspection", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/07/60/1d1e59c9c90d54591469ada7d268251f71c24bdb765f1a8a832cee8c6653/pydantic_settings-2.14.1.tar.gz", hash = "sha256:e874d3bec7e787b0c9958277956ed9b4dd5de6a80e162188fdaff7c5e26fd5fa", size = 235551, upload-time = "2026-05-08T13:40:06.542Z" } +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/ae/8d/f1af3832f5e6eb13ba94ee809e72b8ecb5eef226d27ee0bef7d963d943c7/pydantic_settings-2.14.1-py3-none-any.whl", hash = "sha256:6e3c7edfd8277687cdc598f56e5cff0e9bfff0910a3749deaa8d4401c3a2b9de", size = 60964, upload-time = "2026-05-08T13:40:04.958Z" }, + { 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]] @@ -3688,6 +3774,11 @@ dependencies = [ ] [package.optional-dependencies] +entity = [ + { name = "gliner2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "lancedb", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyarrow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] gpu = [ { name = "bitsandbytes", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "vllm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, @@ -3723,10 +3814,12 @@ requires-dist = [ { name = "elasticsearch", specifier = "==8.17.2" }, { name = "faiss-cpu", specifier = "==1.9.0.post1" }, { name = "gliner", specifier = "==0.2.27" }, + { name = "gliner2", marker = "extra == 'entity'", specifier = ">=1.3.1,<2" }, { name = "httpx", marker = "extra == 'llm'", specifier = "==0.28.1" }, { name = "huggingface-hub", specifier = ">=1.5.0,<2" }, { name = "jinja2", marker = "extra == 'training'", specifier = "==3.1.6" }, { name = "joblib", specifier = "==1.4.2" }, + { name = "lancedb", marker = "extra == 'entity'", specifier = ">=0.25.0,<0.26" }, { name = "langchain", marker = "extra == 'llm'", specifier = "==1.3.10" }, { name = "langchain-community", marker = "extra == 'llm'", specifier = "==0.4.2" }, { name = "langchain-openai", marker = "extra == 'llm'", specifier = "==1.3.2" }, @@ -3738,8 +3831,9 @@ requires-dist = [ { name = "orjson", specifier = "==3.11.9" }, { name = "pandas", specifier = "==2.2.3" }, { name = "peft", specifier = "==0.15.2" }, + { name = "pyarrow", marker = "extra == 'entity'", specifier = ">=24.0.0,<25" }, { name = "pydantic", specifier = ">=2.12.0,<3" }, - { name = "pydantic-settings", specifier = ">=2.10.1,<3" }, + { name = "pydantic-settings", specifier = ">=2.14.2,<3" }, { name = "pyfastner", specifier = "==1.0.10" }, { name = "pyrush", specifier = "==1.0.9" }, { name = "pysbd", specifier = "==0.3.4" }, @@ -3765,7 +3859,7 @@ requires-dist = [ { name = "transformers", specifier = "==5.6.2" }, { name = "vllm", marker = "sys_platform == 'linux' and extra == 'gpu'", specifier = "==0.23.0" }, ] -provides-extras = ["gpu", "llm", "training"] +provides-extras = ["gpu", "llm", "entity", "training"] [package.metadata.requires-dev] dev = [ From 3746f00f63e7dcc9c81ab160ff2d093414fc05f1 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 21 Jun 2026 17:26:16 +0200 Subject: [PATCH 03/64] Replace search service with LanceDB backend --- .env.example | 22 +- .gitignore | 16 +- Makefile | 5 +- README.md | 63 +- docker-compose.yml | 123 +-- docs/HLD.md | 721 +++------------- elasticsearch/.env.example | 12 - elasticsearch/apptainer-run-es.sh | 132 --- elasticsearch/docker-compose.yml | 232 ------ pyproject.toml | 5 +- requirements.txt | 3 +- scripts/index_data.sh | 28 +- scripts/scan_secrets.py | 10 +- scripts/start_es.sh | 30 - setup.sh | 6 +- source/Matcher/cli/healthcheck.py | 40 +- source/Matcher/cli/index_data.py | 104 ++- source/Matcher/config/config.json | 21 +- source/Matcher/config/config_loader.py | 14 +- source/Matcher/config/settings.py | 44 +- source/Matcher/main.py | 32 +- .../trial_search/first_level_search.py | 336 +------- .../trial_search/second_level_search.py | 241 +----- source/Matcher/search/__init__.py | 15 + source/Matcher/search/lancedb_backend.py | 781 ++++++++++++++++++ .../Matcher/services/elasticsearch_service.py | 95 --- source/Matcher/services/preflight.py | 71 +- tests/test_config_pytest.py | 2 +- tests/test_deployment_readiness.py | 18 +- tests/test_first_level_search_pytest.py | 35 +- tests/test_integration_es_pytest.py | 23 - tests/test_lancedb_search_backend.py | 75 ++ tests/test_preflight_and_indexer.py | 160 ++-- tests/test_search_queries.py | 59 -- tests/test_search_queries_pytest.py | 73 +- tests/test_second_level_search_pytest.py | 44 +- tests/test_settings.py | 27 +- utils/Indexer/config.json | 11 - utils/Indexer/es_config.py | 42 - utils/Indexer/index_criteria.py | 303 +++---- utils/Indexer/index_trials.py | 164 +--- uv.lock | 35 +- 42 files changed, 1633 insertions(+), 2640 deletions(-) delete mode 100644 elasticsearch/.env.example delete mode 100644 elasticsearch/apptainer-run-es.sh delete mode 100644 elasticsearch/docker-compose.yml delete mode 100644 scripts/start_es.sh create mode 100644 source/Matcher/search/__init__.py create mode 100644 source/Matcher/search/lancedb_backend.py delete mode 100644 source/Matcher/services/elasticsearch_service.py delete mode 100644 tests/test_integration_es_pytest.py create mode 100644 tests/test_lancedb_search_backend.py delete mode 100644 tests/test_search_queries.py delete mode 100644 utils/Indexer/config.json delete mode 100644 utils/Indexer/es_config.py diff --git a/.env.example b/.env.example index 25965ecf..2ee996fa 100644 --- a/.env.example +++ b/.env.example @@ -1,24 +1,16 @@ # Copy this file to .env for local TrialMatchAI runtime configuration. # Do not commit .env. -TRIALMATCHAI_ES_HOST=https://localhost:9200 -TRIALMATCHAI_ES_USERNAME=elastic -TRIALMATCHAI_ES_PASSWORD=change-me-strong-password -TRIALMATCHAI_ES_CA_CERTS=elasticsearch/certs/ca/ca.crt -TRIALMATCHAI_ES_AUTO_START=false -KIBANA_PASSWORD=change-me-strong-password -STACK_VERSION=8.13.4 -CLUSTER_NAME=trialmatchai-local -ES_PORT=9200 -KIBANA_PORT=5601 -LICENSE=basic -MEM_LIMIT=2147483648 - TRIALMATCHAI_PATIENTS_DIR=example TRIALMATCHAI_OUTPUT_DIR=results TRIALMATCHAI_TRIALS_JSON_FOLDER=data/trials_jsons -TRIALMATCHAI_INDEX_TRIALS=clinical_trials -TRIALMATCHAI_INDEX_TRIALS_ELIGIBILITY=trials_eligibility + +TRIALMATCHAI_SEARCH_BACKEND=lancedb +TRIALMATCHAI_SEARCH_DB_PATH=data/search +TRIALMATCHAI_SEARCH_TRIALS_TABLE=trials +TRIALMATCHAI_SEARCH_CRITERIA_TABLE=criteria +TRIALMATCHAI_SEARCH_CANDIDATE_LIMIT=1000 +TRIALMATCHAI_SEARCH_MODE=hybrid TRIALMATCHAI_MODEL_BASE_MODEL=microsoft/phi-4 TRIALMATCHAI_MODEL_COT_ADAPTER_PATH=models/finetuned_phi_reasoning diff --git a/.gitignore b/.gitignore index c6afa6c8..cc9e6955 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,6 @@ logs/ .env .env.* !.env.example -!elasticsearch/.env.example # ============================ # Finetuning ignore rules @@ -30,20 +29,6 @@ utils/finetuning/finetune_ner/RoBERTa-large-PM-M3-Voc/ utils/finetuning/finetune_ner/output_eval utils/finetuning/finetune_ner -# ============================ -# ElasticSearch artifacts -# ============================ -elasticsearch/.env -elasticsearch/certs/ -elasticsearch/config/ -elasticsearch/tmp-config/ -elasticsearch/sif/ -elasticsearch/data1/ -elasticsearch/data/ -elasticsearch/logs/ -elasticsearch/sif/*.sif -*.keystore - # ============================ # Parser artifacts # ============================ @@ -62,6 +47,7 @@ utils/DataLoader/nct_ids.txt utils/Indexer/nct_ids.txt utils/Indexer/processed_ids.txt utils/Indexer/*.log +*.lance # ============================ # Python cache diff --git a/Makefile b/Makefile index 2f3f1b4d..e26a94f2 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: venv sync sync-gpu test lock lint audit healthcheck bootstrap start-es index run setup +.PHONY: venv sync sync-gpu test lock lint audit healthcheck bootstrap index run setup venv: uv venv @@ -27,9 +27,6 @@ healthcheck: bootstrap: uv run trialmatchai-bootstrap-data -start-es: - bash scripts/start_es.sh - index: uv run trialmatchai-index diff --git a/README.md b/README.md index 632d6630..9f0202e8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Logo -TrialMatchAI is a batch-oriented clinical trial matching pipeline. It combines Elasticsearch retrieval, biomedical NLP, embeddings, LLM reranking, and eligibility reasoning to produce ranked trial recommendations with criterion-level explanations. +TrialMatchAI is a batch-oriented clinical trial matching pipeline. It combines local LanceDB retrieval, schema-driven biomedical entity extraction, concept linking, embeddings, LLM reranking, and eligibility reasoning to produce ranked trial recommendations with criterion-level explanations. ## Disclaimer @@ -10,28 +10,24 @@ This software is for research and informational use only. It is not medical advi ## Deployment Target -The supported v1 deployment path is a single Linux GPU server or VM with Docker Compose for Elasticsearch and a containerized TrialMatchAI worker. HPC/Apptainer support remains available through the scripts under `elasticsearch/`, but production runtime does not auto-start local services by default. +The supported v1 deployment path is a single Python 3.11 GPU server or VM. Trial and criteria search use embedded LanceDB tables under `data/search`, so no separate search service, container, socket, TLS certificate, or service credential is required. Docker remains optional for packaging the worker. ## Requirements - Python 3.11 - `uv` recommended, or `pip` with editable install -- Docker Compose for the default Elasticsearch deployment - NVIDIA GPU with enough VRAM for the selected LLM backend -- 100 GB+ disk space for datasets, models, indices, and results +- 100 GB+ disk space for datasets, models, LanceDB tables, and results - A LanceDB concept table built from OMOP/legacy dictionaries for entity normalization ## Security First -No real credentials, generated TLS keys, Elasticsearch keystores, Parser outputs, or local indexing state should be committed. Copy templates and rotate any previously exposed credentials before deployment: +No real credentials, generated private keys, Parser outputs, datasets, models, local LanceDB data, or results should be committed. Copy the template and keep runtime values local: ```bash cp .env.example .env -cp elasticsearch/.env.example elasticsearch/.env ``` -Set strong local values for `TRIALMATCHAI_ES_PASSWORD`, `ELASTIC_PASSWORD`, and `KIBANA_PASSWORD`. - Dependency auditing currently ignores `CVE-2025-3000` because vLLM 0.23 pins Torch 2.11.0 and the advisory has no fixed Torch version listed. Revisit that exception whenever upgrading vLLM or Torch. ## Quickstart @@ -42,33 +38,28 @@ Install deployment dependencies: uv sync --extra gpu --extra entity ``` -For local development, tests, healthchecks, or `TRIALMATCHAI_COT_BACKEND=default`, the default dependency set is enough: +For local development, tests, healthchecks, or `TRIALMATCHAI_COT_BACKEND=default`: ```bash uv sync ``` -Optional tooling is split out of the default runtime: +Optional tooling: ```bash uv sync --extra llm # OpenAI/LangChain data-generation utilities -uv sync --extra entity # GLiNER2/LanceDB entity extraction and normalization +uv sync --extra entity # GLiNER2 entity extraction uv sync --extra training # fine-tuning and evaluation utilities ``` -Start Elasticsearch with the root Compose stack: - -```bash -docker compose up -d elasticsearch -``` - -Run a healthcheck: +Run a config and backend healthcheck: ```bash uv run trialmatchai-healthcheck +uv run trialmatchai-healthcheck --require-tables ``` -Provision data, models, and indices: +Provision data, models, concept KB, and search tables: ```bash uv run trialmatchai-bootstrap-data @@ -86,16 +77,11 @@ Results are written under `results/`. ## Docker Worker -Build and run the worker healthcheck through Compose: +Docker is optional. The worker container uses mounted local folders and the same embedded LanceDB tables: ```bash docker compose build trialmatchai-worker -docker compose up trialmatchai-worker -``` - -To run the full pipeline in the container after provisioning data/models/indices: - -```bash +docker compose run --rm trialmatchai-worker trialmatchai-healthcheck docker compose run --rm trialmatchai-worker trialmatchai-run ``` @@ -104,17 +90,16 @@ docker compose run --rm trialmatchai-worker trialmatchai-run Configuration defaults live in `source/Matcher/config/config.json`. Runtime overrides use `.env` or environment variables: ```bash -TRIALMATCHAI_ES_HOST=https://localhost:9200 -TRIALMATCHAI_ES_USERNAME=elastic -TRIALMATCHAI_ES_PASSWORD=change-me -TRIALMATCHAI_ES_CA_CERTS=elasticsearch/certs/ca/ca.crt -TRIALMATCHAI_ES_AUTO_START=false - TRIALMATCHAI_PATIENTS_DIR=example TRIALMATCHAI_OUTPUT_DIR=results TRIALMATCHAI_TRIALS_JSON_FOLDER=data/trials_jsons -TRIALMATCHAI_INDEX_TRIALS=clinical_trials -TRIALMATCHAI_INDEX_TRIALS_ELIGIBILITY=trials_eligibility + +TRIALMATCHAI_SEARCH_BACKEND=lancedb +TRIALMATCHAI_SEARCH_DB_PATH=data/search +TRIALMATCHAI_SEARCH_TRIALS_TABLE=trials +TRIALMATCHAI_SEARCH_CRITERIA_TABLE=criteria +TRIALMATCHAI_SEARCH_CANDIDATE_LIMIT=1000 +TRIALMATCHAI_SEARCH_MODE=hybrid TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false TRIALMATCHAI_ENTITY_BACKEND=gliner2 @@ -130,10 +115,10 @@ Use `TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=true` only when a selected model expli ## CLI Commands -- `trialmatchai-healthcheck`: validate config, paths, Elasticsearch reachability, and optionally indices. +- `trialmatchai-healthcheck`: validate config, paths, and optionally LanceDB search tables. - `trialmatchai-bootstrap-data`: download and extract external data/model artifacts. - `trialmatchai-build-concepts`: build the LanceDB concept table used for entity normalization. -- `trialmatchai-index`: index prepared data into Elasticsearch. +- `trialmatchai-index`: build the LanceDB trial and criteria search tables. - `trialmatchai-run`: run the batch matching pipeline. ## Tests and Checks @@ -147,12 +132,6 @@ docker compose config docker build . ``` -Integration tests require a running Elasticsearch instance: - -```bash -TRIALMATCHAI_RUN_INTEGRATION=1 uv run pytest -m integration -``` - ## Support - Email: abdallahmajd7@gmail.com diff --git a/docker-compose.yml b/docker-compose.yml index 9d0b2ed2..dbe07663 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,111 +1,20 @@ services: - setup: - image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION:-8.13.4} - user: "0" - volumes: - - ./elasticsearch/certs:/usr/share/elasticsearch/config/certs - command: > - bash -c ' - if [ -z "$${TRIALMATCHAI_ES_PASSWORD}" ]; then - echo "Set TRIALMATCHAI_ES_PASSWORD in .env"; - exit 1; - fi; - if [ ! -f config/certs/ca.zip ]; then - bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip; - unzip config/certs/ca.zip -d config/certs; - fi; - if [ ! -f config/certs/certs.zip ]; then - printf "%s\n" \ - "instances:" \ - " - name: es01" \ - " dns:" \ - " - es01" \ - " - elasticsearch" \ - " - localhost" \ - " ip:" \ - " - 127.0.0.1" \ - > config/certs/instances.yml; - bin/elasticsearch-certutil cert --silent --pem - -out config/certs/certs.zip - --in config/certs/instances.yml - --ca-cert config/certs/ca/ca.crt - --ca-key config/certs/ca/ca.key; - unzip config/certs/certs.zip -d config/certs; - fi; - chown -R root:root config/certs; - find config/certs -type d -exec chmod 750 {} \;; - find config/certs -type f -exec chmod 640 {} \;; - ' - environment: - TRIALMATCHAI_ES_PASSWORD: ${TRIALMATCHAI_ES_PASSWORD:-} - healthcheck: - test: ["CMD-SHELL", "[ -f config/certs/es01/es01.crt ]"] - interval: 1s - timeout: 5s - retries: 120 - - elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION:-8.13.4} - depends_on: - setup: - condition: service_healthy - volumes: - - ./elasticsearch/certs:/usr/share/elasticsearch/config/certs:ro - - esdata01:/usr/share/elasticsearch/data - ports: - - "${ES_PORT:-9200}:9200" - environment: - node.name: es01 - cluster.name: ${CLUSTER_NAME:-trialmatchai-local} - discovery.type: single-node - ELASTIC_PASSWORD: ${TRIALMATCHAI_ES_PASSWORD:-} - bootstrap.memory_lock: "true" - xpack.security.enabled: "true" - xpack.security.http.ssl.enabled: "true" - xpack.security.http.ssl.key: certs/es01/es01.key - xpack.security.http.ssl.certificate: certs/es01/es01.crt - xpack.security.http.ssl.certificate_authorities: certs/ca/ca.crt - xpack.security.transport.ssl.enabled: "true" - xpack.security.transport.ssl.key: certs/es01/es01.key - xpack.security.transport.ssl.certificate: certs/es01/es01.crt - xpack.security.transport.ssl.certificate_authorities: certs/ca/ca.crt - xpack.security.transport.ssl.verification_mode: certificate - xpack.license.self_generated.type: ${LICENSE:-basic} - mem_limit: ${MEM_LIMIT:-2147483648} - ulimits: - memlock: - soft: -1 - hard: -1 - healthcheck: - test: - [ - "CMD-SHELL", - "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'", - ] - interval: 10s - timeout: 10s - retries: 120 - trialmatchai-worker: build: . - depends_on: - elasticsearch: - condition: service_healthy volumes: - ./data:/app/data - ./models:/app/models - ./results:/app/results - ./example:/app/example:ro - - ./elasticsearch/certs:/app/elasticsearch/certs:ro environment: - TRIALMATCHAI_ES_HOST: https://elasticsearch:9200 - TRIALMATCHAI_ES_USERNAME: elastic - TRIALMATCHAI_ES_PASSWORD: ${TRIALMATCHAI_ES_PASSWORD:-} - TRIALMATCHAI_ES_CA_CERTS: /app/elasticsearch/certs/ca/ca.crt - TRIALMATCHAI_ES_AUTO_START: "false" TRIALMATCHAI_PATIENTS_DIR: /app/example TRIALMATCHAI_OUTPUT_DIR: /app/results TRIALMATCHAI_TRIALS_JSON_FOLDER: /app/data/trials_jsons + TRIALMATCHAI_SEARCH_BACKEND: lancedb + TRIALMATCHAI_SEARCH_DB_PATH: /app/data/search + TRIALMATCHAI_SEARCH_TRIALS_TABLE: trials + TRIALMATCHAI_SEARCH_CRITERIA_TABLE: criteria + TRIALMATCHAI_SEARCH_MODE: hybrid TRIALMATCHAI_ENTITY_BACKEND: gliner2 TRIALMATCHAI_ENTITY_SCHEMA_PATH: /app/source/Matcher/entity_schemas/trialmatchai.yaml TRIALMATCHAI_CONCEPT_DB_PATH: /app/data/concepts @@ -114,25 +23,3 @@ services: TRIALMATCHAI_LINK_REJECT: "0.30" TRIALMATCHAI_LOG_JSON: "1" command: ["trialmatchai-healthcheck"] - - kibana: - profiles: ["kibana"] - image: docker.elastic.co/kibana/kibana:${STACK_VERSION:-8.13.4} - depends_on: - elasticsearch: - condition: service_healthy - volumes: - - ./elasticsearch/certs:/usr/share/kibana/config/certs:ro - - kibanadata:/usr/share/kibana/data - ports: - - "${KIBANA_PORT:-5601}:5601" - environment: - SERVERNAME: kibana - ELASTICSEARCH_HOSTS: https://elasticsearch:9200 - ELASTICSEARCH_USERNAME: kibana_system - ELASTICSEARCH_PASSWORD: ${KIBANA_PASSWORD:-} - ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES: config/certs/ca/ca.crt - -volumes: - esdata01: - kibanadata: diff --git a/docs/HLD.md b/docs/HLD.md index 2d7fbbf5..b3bd33cb 100644 --- a/docs/HLD.md +++ b/docs/HLD.md @@ -1,656 +1,177 @@ -# High Level Design — TrialMatchAI +# High Level Design - TrialMatchAI ## 1. Overview -TrialMatchAI is an AI-driven clinical trial matching system. Given a patient record encoded as a GA4GH Phenopacket, it retrieves and ranks the most relevant clinical trials from a large Elasticsearch-backed corpus using a three-stage pipeline: hybrid retrieval, LLM reranking, and chain-of-thought eligibility reasoning. +TrialMatchAI is a batch clinical trial matching system. Given a GA4GH Phenopacket, it retrieves candidate trials from embedded LanceDB tables, reranks eligibility criteria with an LLM, performs criterion-level reasoning, and writes ranked recommendations. ### Goals -- Match individual patients to relevant open clinical trials at scale -- Provide criterion-level explainability (why a trial does or does not match) -- Support reproducible, ontology-grounded patient representations -### Non-Goals -- Real-time / online inference (designed for batch processing) -- EHR integration or direct clinical deployment -- Trial outcome prediction - ---- - -## 2. System Architecture - -``` -┌─────────────────────────────────────────────────────────────────────┐ -│ TrialMatchAI │ -│ │ -│ ┌──────────────┐ ┌────────────────────────────────────────────┐ │ -│ │ Indexing │ │ Matching Pipeline │ │ -│ │ Pipeline │ │ │ │ -│ │ │ │ Phenopacket │ │ -│ │ ClinicalTrials │ │ │ │ -│ │ .gov JSONs │ │ ▼ │ │ -│ │ │ │ │ ┌─────────────────────┐ │ │ -│ │ ▼ │ │ │ Phenopacket │ │ │ -│ │ Schema NER +│ │ │ Processor + LLM │ │ │ -│ │ concept link│ │ │ (Phi-4 summariser) │ │ │ -│ │ │ │ │ └──────────┬──────────┘ │ │ -│ │ ▼ │ │ │ keywords.json │ │ -│ │ BGE-M3 │ │ ▼ │ │ -│ │ embeddings │ │ ┌─────────────────────┐ │ │ -│ │ │ │ │ │ Stage 1: Hybrid │ │ │ -│ │ ▼ │ │ │ BM25 + Vector Search│ │ │ -│ │ Elasticsearch│◄───┼──│ (clinical_trials) │ │ │ -│ │ clinical_ │ │ └──────────┬──────────┘ │ │ -│ │ trials │ │ │ ~300 candidates │ │ -│ │ trials_ │ │ ▼ │ │ -│ │ eligibility │◄───┼──│ Stage 2: Criteria │ │ │ -│ └──────────────┘ │ │ Search + LLM Rerank │ │ │ -│ │ │ (Gemma-2-2B) │ │ │ -│ │ └──────────┬──────────┘ │ │ -│ │ │ ~33 trials │ │ -│ │ ▼ │ │ -│ │ ┌─────────────────────┐ │ │ -│ │ │ Stage 3: CoT │ │ │ -│ │ │ Reasoning (Phi-4 + │ │ │ -│ │ │ finetuned adapter) │ │ │ -│ │ └──────────┬──────────┘ │ │ -│ │ │ │ │ -│ │ ▼ │ │ -│ │ ┌─────────────────────┐ │ │ -│ │ │ Ranker + Output │ │ │ -│ │ │ ranked_trials.json │ │ │ -│ │ └─────────────────────┘ │ │ -│ └────────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────────┘ -``` - ---- - -## 3. Components - -### 3.1 Indexing Pipeline - -Run once to prepare the Elasticsearch indices from raw ClinicalTrials.gov data. - -``` -Raw Trial JSONs - │ - ├──► Schema entity annotation + LanceDB concept linking - │ │ - │ ▼ - │ Annotated criteria with entity synonyms - │ - ├──► prepare_trials.py ──► BGE-M3 embed ──► clinical_trials index - │ - └──► prepare_criteria.py ──► BGE-M3 embed ──► trials_eligibility index -``` - -**`clinical_trials` index** — one document per trial: - -| Field | Type | Notes | -|---|---|---| -| nct_id | keyword | Primary key | -| brief_title, brief_summary, condition, eligibility_criteria | text | BM25 searchable | -| *_vector (×4) | dense_vector (1024d) | BGE-M3 embeddings | -| minimum_age, maximum_age | float | Years, for age filtering | -| overall_status, phase, gender | keyword | Facet filters | -| interventions, locations | nested | Structured metadata | - -**`trials_eligibility` index** — one document per eligibility criterion: - -| Field | Type | Notes | -|---|---|---| -| criteria_id, nct_id | keyword | Stable hash-derived ID | -| eligibility_type | keyword | `inclusion` or `exclusion` | -| criterion | text | BM25 searchable | -| criterion_vector | dense_vector (1024d, HNSW) | BGE-M3 embedding | -| entities | nested | Schema entity annotations, linked concept candidates, and synonyms | - ---- - -### 3.2 Phenopacket Processor - -Converts a GA4GH Phenopacket JSON into search-ready keywords. - -**Input:** `example/.json` (Phenopacket v2.0) - -**Steps:** -1. Validate schema with Pydantic -2. Extract structured sections: demographics, phenotypic features (HPO), diagnoses (MONDO), biosamples (UBERON), treatments (CHEBI), procedures (NCIT), genomic interpretations, family history -3. Build medical narrative sentences per section -4. Feed narrative to **Phi-4** (4-bit quantized) with a structured extraction prompt - -**Output:** `keywords.json` -```json -{ - "main_conditions": ["coronary artery disease"], - "other_conditions": ["type 2 diabetes mellitus", "hypercholesterolemia"], - "expanded_sentences": ["58-year-old male with advanced CAD..."] -} -``` - ---- - -### 3.3 Stage 1 — Hybrid Retrieval - -**Component:** `ClinicalTrialSearch` -**Index:** `clinical_trials` -**Goal:** Cast a wide net; recall over precision. - -**Query construction:** -``` -hybrid_score = α × normalized_text_score + β × normalized_vector_score - (α = 0.5, β = 0.5 by default) -``` - -- **BM25 side:** multi-match across `condition`, `eligibility_criteria`, `brief_title`, `brief_summary` with field-specific boosts -- **Vector side:** cosine similarity against 4 embedded fields using script-score queries -- **Synonym expansion:** the schema entity annotator links disease mentions to the LanceDB concept table and expands accepted concepts with synonyms -- **Filters:** age range, gender, `overall_status = Recruiting` - -**Output:** Up to 300 trial IDs with relevance scores → `nct_ids.txt`, `first_level_scores.json` - ---- - -### 3.4 Stage 2 — Criteria Matching + LLM Reranking +- Match de-identified research patient profiles to relevant clinical trials. +- Keep deployment local-first and service-light for a single GPU server. +- Provide criterion-level explainability. +- Use ontology-grounded entity extraction and normalization. -**Component:** `SecondStageRetriever` -**Index:** `trials_eligibility` -**Goal:** Narrow to trials with genuinely matching eligibility criteria. - -**Steps:** -1. For each query term (up to 150), search `trials_eligibility` within the Stage 1 trial subset -2. Retrieve up to 250 matching criteria per query (hybrid search on criterion text + entity synonyms) -3. **Gemma-2-2B reranker** scores each (query, criterion) pair by probability of "Yes" token -4. Apply type weighting: inclusion criteria score × 1.0, exclusion criteria score × 0.25 -5. Aggregate per-trial score: - ``` - trial_score = 0.7 × (Σ scores / √count) + 0.3 × max_score - ``` -6. Filter trials below threshold (default 0.5); select top ~33 - -**Output:** Ranked list of ~33 trial IDs → `top_trials.txt` - ---- - -### 3.5 Stage 3 — Chain-of-Thought Reasoning - -**Component:** `BatchTrialProcessor` (HuggingFace) or `BatchTrialProcessorVLLM` (vLLM) -**Model:** Phi-4 + fine-tuned LoRA adapter (`models/finetuned_phi_reasoning`) -**Goal:** Criterion-level eligibility assessment with explicit reasoning. - -**Prompt structure:** -``` -System: You are a medical expert with advanced knowledge in clinical reasoning... -User: Patient Profile: - Trial Criteria: - For each criterion, assess: Met / Not Met / Not Violated / Violated / Unclear - Output JSON with criterion-level evaluation and Final Decision. -``` - -**Optimizations:** -- Length bucketing to minimise padding waste across batches -- Temperature 0.0 for deterministic outputs -- Idempotent: skips already-processed trials on resume -- vLLM backend for high-throughput GPU inference - -**Output per trial:** `.txt` (raw), `.json` (parsed) -```json -{ - "Inclusion_Criteria_Evaluation": [ - {"criterion": "Age ≥ 18", "status": "Met", "reasoning": "Patient is 58."} - ], - "Exclusion_Criteria_Evaluation": [...], - "Final Decision": "Eligible" -} -``` - ---- - -### 3.6 Ranker - -**Component:** `trial_ranker.py` -**Goal:** Produce a single ranked list from CoT outputs. - -**Scoring formula per trial:** -``` -inclusion_ratio = (met + not_violated) / (met + not_violated + not_met + violated) -exclusion_ratio = (not_violated + met) / (not_violated + met + violated) -final_score = (inclusion_ratio + exclusion_ratio) / 2 -``` - -Irrelevant and unclear criteria are excluded from both numerator and denominator. - -**Output:** `ranked_trials.json` — sorted list of `{nct_id, score}` - ---- - -## 4. Models - -| Model | Role | Quantization | Backend | -|---|---|---|---| -| BAAI/bge-m3 | Text embeddings (1024d) | FP16 | HuggingFace | -| microsoft/phi-4 | Keyword extraction + CoT reasoning | 4-bit NF4 | HF / vLLM | -| finetuned_phi_reasoning | LoRA adapter for eligibility reasoning | — | PEFT / vLLM LoRA | -| google/gemma-2-2b-it | Pairwise criterion reranker | 4-bit NF4 | HuggingFace | - ---- - -## 5. External Services - -### Elasticsearch (3-node cluster) -- **Deployment:** Docker Compose (or Apptainer on HPC) -- **Version:** 8.13.4 -- **Security:** HTTPS + X-Pack, TLS certificates -- **Memory:** 2 GB per node (6 GB total) -- **Ports:** 9200 (API), 5601 (Kibana) - -### Schema Entity Annotator + LanceDB Concept Linker -- **Purpose:** Biomedical entity recognition and normalization without external Java daemons -- **Recognizer:** GLiNER2-style schema-driven extraction, with GLiNER/biomedical fallback support behind the same interface -- **Concept store:** LanceDB table built from OMOP vocabularies and legacy dictionaries -- **Entities:** diseases, genes, medications, procedures, labs, radiology, signs/symptoms, cell types, and species -- **Usage:** synonym expansion (Stage 1) and entity annotation (indexing) +### Non-Goals ---- +- Real-time clinical web application deployment. +- Direct EHR integration. +- Use with identifiable patient data without additional controls. +- Trial outcome prediction. -## 6. Data Flow Summary +## 2. Architecture ``` -[One-time setup] ClinicalTrials.gov JSONs - → schema entity annotation + LanceDB concept linking - → BGE-M3 embedding - → Elasticsearch (clinical_trials + trials_eligibility indices) - -[Per-patient inference] -phenopacket.json - → PhenopacketProcessor → Phi-4 → keywords.json - → ClinicalTrialSearch (BM25 + vector, ES) → ~300 trial IDs - → SecondStageRetriever (criteria search + Gemma rerank) → ~33 trial IDs - → BatchTrialProcessor (Phi-4 CoT reasoning) → per-trial JSON assessments - → Ranker → ranked_trials.json -``` - ---- - -## 7. Configuration - -All settings are driven by `source/Matcher/config/config.json` and can be overridden via environment variables: - -| Env Var | Default | Description | -|---|---|---| -| `TRIALMATCHAI_ES_HOST` | `https://localhost:9200` | Elasticsearch URL | -| `TRIALMATCHAI_ES_USERNAME` | `elastic` | ES user | -| `TRIALMATCHAI_ES_PASSWORD` | *(required)* | ES password | -| `TRIALMATCHAI_EMBEDDER_MODEL_NAME` | `BAAI/bge-m3` | Embedding model | -| `TRIALMATCHAI_ES_AUTO_START` | `true` | Auto-launch ES if not running | -| `TRIALMATCHAI_LOG_LEVEL` | `INFO` | Logging verbosity | - ---- - -## 8. Output Structure - + | + v +prepare_trials.py / prepare_criteria.py + | + v +Schema entity annotation + LanceDB concept linking + | + v +BGE-M3 embeddings + | + v +data/search LanceDB tables + | + v +Phenopacket -> keywords -> Stage 1 retrieval -> Stage 2 criteria rerank + | + v +Stage 3 eligibility reasoning -> ranked_trials.json ``` -results/ -└── / - ├── keywords.json # Extracted conditions and expanded narrative - ├── nct_ids.txt # Stage 1 candidate trial IDs - ├── first_level_scores.json # Stage 1 relevance scores - ├── top_trials.txt # Stage 2 shortlisted trial IDs - ├── .txt # Raw CoT reasoning text - ├── .json # Parsed criterion-level evaluation - └── ranked_trials.json # Final ranked list with scores -``` - ---- - -## 9. Infrastructure Requirements - -| Resource | Minimum | Recommended | -|---|---|---| -| GPU VRAM | 24 GB | 40 GB+ (for Phi-4 unquantized) | -| RAM | 32 GB | 64 GB | -| Disk | 100 GB | 200 GB+ | -| OS | Linux / macOS | Linux (CUDA support) | -| Python | 3.10–3.11 | 3.11 | -| Elasticsearch | 3 × 2 GB nodes | 3 × 6 GB nodes | - ---- - -## 10. Key Design Decisions - -**Two-stage retrieval before reasoning** — LLM reasoning is expensive (5000 token outputs per trial). Stages 1 and 2 reduce the candidate set from hundreds of thousands of trials to ~33 before the LLM is invoked. - -**Ontology-grounded inputs** — Using HPO, MONDO, CHEBI codes rather than free text ensures consistent entity matching across patient records and trial criteria regardless of phrasing variation. - -**Criterion-level scoring** — The final ranking score is computed from individual criterion assessments rather than a holistic match score, enabling explainable recommendations. - -**Resumable processing** — Both indexing and CoT reasoning are idempotent; partial runs can be continued without reprocessing completed items. - -**Pluggable LLM backend** — The reasoning stage supports both HuggingFace (single GPU, lower overhead) and vLLM (multi-GPU, higher throughput) backends, selectable via config. - ---- - ---- - -## HLD — LLM & Agent Harness View - -A simpler view of the system focused on how LLMs are used and how the pipeline harness orchestrates them. - ---- - -## 1. The Three LLM Agents -TrialMatchAI uses three LLMs, each with a distinct, narrow role. They do not share state or communicate with each other directly — the harness (`main.py`) wires their inputs and outputs together. +The search layer is embedded in the Python worker. There is no separate database service to start, secure, or monitor for the default v1 deployment. -``` -┌─────────────────────────────────────────────────────────────────┐ -│ Pipeline Harness │ -│ (main.py) │ -│ │ -│ Patient ┌──────────────┐ keywords.json │ -│ Phenopacket ──►│ LLM Agent 1 ├──────────────────────┐ │ -│ │ Phi-4 │ │ │ -│ │ Summariser │ ▼ │ -│ └──────────────┘ Elasticsearch │ -│ (BM25 + vector) │ -│ │ │ -│ ~300 candidates │ -│ │ │ -│ ▼ │ -│ ┌──────────────┐ │ -│ │ LLM Agent 2 │◄──────────────────────────┘ │ -│ │ Gemma-2-2B │ (query, criterion) pairs │ -│ │ Reranker ├──────────────────────┐ │ -│ └──────────────┘ │ │ -│ ~33 shortlisted │ -│ trial IDs │ -│ │ │ -│ ▼ │ -│ ┌──────────────┐ │ -│ │ LLM Agent 3 │◄──────────────────────────┘ │ -│ │ Phi-4 + │ (patient profile, │ -│ │ LoRA CoT │ trial criteria) │ -│ │ Reasoner ├──────────────────────┐ │ -│ └──────────────┘ │ │ -│ per-trial JSON │ -│ │ │ -│ ▼ │ -│ Rule-based Ranker │ -│ ranked_trials.json│ -└─────────────────────────────────────────────────────────────────┘ -``` +## 3. Persistent Stores ---- +### `data/search` Trial Table -## 2. Agent 1 — Summariser (Phi-4) +One row per trial. -**Job:** Translate a structured Phenopacket into free-text medical keywords suitable for search. +| Field | Notes | +|---|---| +| `nct_id` | Primary trial identifier | +| `brief_title`, `brief_summary`, `condition`, `eligibility_criteria` | Source text fields | +| `*_vector` | Prepared BGE-M3 vectors from the existing preparation pipeline | +| `search_text` | Flattened text used for local full-text candidate generation | +| `search_vector` | Averaged vector used for vector candidate generation | +| `minimum_age`, `maximum_age`, `gender`, `overall_status` | Runtime filters | -**Trigger:** Once per patient at the start of the pipeline. +### `data/search` Criteria Table -**Input:** -``` -Medical narrative sentences built from the Phenopacket sections: - DEMOGRAPHICS: Sex: MALE; Age: 58Y... - PHENOTYPE: Myocardial infarction (Present, Severe, Recurrent)... - DIAGNOSIS: Coronary artery disease, Stage III... - TREATMENT: Atorvastatin 40mg oral daily... - INTERPRETATION: LDLR c.1444G>A variant... -``` +One row per eligibility criterion. -**Prompt pattern:** -``` -System: You are a specialized medical assistant for clinical trial matching. - Extract primary conditions, secondary conditions, and expanded - medical notes. Return strict JSON — no commentary. +| Field | Notes | +|---|---| +| `criteria_id` | Stable criterion identifier | +| `nct_id` | Parent trial identifier | +| `criterion` | Criterion text | +| `criterion_vector` | BGE-M3 criterion vector | +| `entities` | Schema annotations and concept-link candidates | +| `entity_text`, `entity_synonyms_text` | Flattened entity search fields | +| `search_text` | Combined criterion/entity text | -User: -``` - -**Output (JSON, max 2048 tokens):** -```json -{ - "main_conditions": ["coronary artery disease", "CAD", "ischemic heart disease", ...], - "other_conditions": ["type 2 diabetes", "hypercholesterolemia", "LDLR mutation", ...], - "expanded_sentences": ["58-year-old male with advanced multivessel CAD...", ...] -} -``` +### `data/concepts` Concept Table -**Why this agent exists:** Phenopackets use ontology codes (HP:0001627), not plain text. The LLM bridges structured clinical data into natural language terms that map to how trials are described in ClinicalTrials.gov. +The concept table is built from OMOP `CONCEPT.csv`, `CONCEPT_SYNONYM.csv`, and optional legacy dictionaries. It is used only for entity normalization and synonym expansion. ---- +## 4. Retrieval -## 3. Agent 2 — Reranker (Gemma-2-2B) +### Stage 1 - Trial Retrieval -**Job:** Score how relevant a specific eligibility criterion is to a patient query term. +`ClinicalTrialSearch` calls the configured search backend with: -**Trigger:** Called in bulk during Stage 2, once per (query term, criterion) pair. Runs in a thread pool with 4 parallel workers. +- Primary disease/condition terms. +- Synonyms from accepted concept links. +- Other patient conditions. +- Age, sex, status, and optional NCT filters. +- Query embeddings when running in `vector` or `hybrid` mode. -**Input (per pair):** -``` -System: You are a clinical assistant determining if patient data supports - trial criterion evaluation. +The LanceDB backend generates candidates with local full-text/vector search and applies Python-side weighted scoring: -User: Statement A: - Statement B: - Respond with 'Yes' or 'No'. ``` - -**Output:** Not free text — the model never generates a full response. The harness reads the **logit scores** for the "Yes" and "No" tokens directly from the last position of the prompt and applies softmax: - -```python -score = softmax([logit_Yes, logit_No])[0] # probability of "Yes" +hybrid_score = 0.5 * text_score + 0.5 * vector_score ``` -Inclusion criteria scores are kept as-is; exclusion criteria scores are multiplied by 0.25 (a trial that excludes the patient's condition is less bad than one that requires something the patient doesn't have). +Text scoring weights trial fields by clinical relevance: -**Why this agent exists:** ES keyword and vector search can retrieve a criterion that mentions the right disease but actually *excludes* patients with that disease. The LLM reranker catches this semantic mismatch cheaply — a single forward pass with no generation overhead. +- `condition`: 6.0 +- `eligibility_criteria`: 4.0 +- `brief_title`: 3.0 +- `brief_summary`: 2.0 +- `detailed_description`: 1.5 +- `official_title`: 1.0 ---- +Vector scoring combines condition, title, summary, eligibility, and other-condition similarities. -## 4. Agent 3 — CoT Reasoner (Phi-4 + LoRA) +### Stage 2 - Criteria Retrieval -**Job:** Assess each eligibility criterion one-by-one and produce an explainable eligibility decision. +`SecondStageRetriever` searches the criteria table within the Stage 1 NCT subset. It searches criterion text and, when the entity annotator is enabled, flattened entity synonyms. -**Trigger:** Once per shortlisted trial (~33 trials), batched by prompt length. +The retriever returns ES-like hit dictionaries internally (`_source`, `_score`) to keep reranking and aggregation code stable while the backend is LanceDB-native. -**Input:** +### Stage 3 - Eligibility Reasoning -``` -System: You are a medical expert with advanced knowledge in clinical reasoning. - Answer the following question. Before answering, create a concise - chain of thoughts reasoning to ensure a logical and accurate response. - -User: Assess the patient's eligibility for this clinical trial by evaluating - each criterion individually. - - For inclusion criteria classify as: Met | Not Met | Unclear | Irrelevant - For exclusion criteria classify as: Violated | Not Violated | Unclear | Irrelevant - - --- Trial Criteria --- - Inclusion: - 1. Age ≥ 18 years - 2. Documented CAD with ≥50% stenosis - 3. Stable angina or prior MI - Exclusion: - 1. Recent CABG within 6 months - 2. Active malignancy - --- Patient Description --- - -``` +The top trials are passed to `BatchTrialProcessor` or `BatchTrialProcessorVLLM`. The model evaluates inclusion and exclusion criteria and writes structured JSON outputs. The final ranker computes a normalized eligibility score from those outputs. -**Output (JSON, max 5000 tokens):** - -```json -{ - "Inclusion_Criteria_Evaluation": [ - { - "Criterion": "Age ≥ 18 years", - "Classification": "Met", - "Justification": "Patient is 58 years old." - }, - { - "Criterion": "Documented CAD with ≥50% stenosis", - "Classification": "Met", - "Justification": "Diagnosis confirms advanced CAD with multivessel involvement." - } - ], - "Exclusion_Criteria_Evaluation": [ - { - "Criterion": "Recent CABG within 6 months", - "Classification": "Violated", - "Justification": "Patient underwent CABG on 2022-11-15, which is within 6 months of enrollment." - } - ], - "Recap": "Patient meets most inclusion criteria but was disqualified by recent CABG.", - "Final Decision": "Ineligible" -} -``` +## 5. Entity Extraction -**Why the LoRA adapter:** The base Phi-4 model is general-purpose. The fine-tuned LoRA adapter (`models/finetuned_phi_reasoning`) was trained specifically on clinical trial eligibility assessment tasks, improving structured JSON output and medical reasoning precision. +The BioNER path is Python-native: ---- +- Schema-driven recognizer interface. +- GLiNER2-style backend as the target recognizer. +- GLiNER fallback and regex test backend behind the same interface. +- LanceDB concept linking with confidence bands. +- No runtime Java daemons, socket IPC, Sieve, or GNormPlus dependency. -## 5. The Harness (main.py) +Entity output preserves the fields downstream search expects: -The harness is a **fixed sequential pipeline** — not a dynamic agent loop. There is no tool-calling, no self-reflection, and no LLM deciding what to do next. The harness: - -1. Loads all three models once at startup (cold start is expensive) -2. Iterates over patients in `patients_dir/` -3. Calls agents in a fixed order, passing outputs as inputs to the next stage -4. Writes intermediate results to disk at each step (enabling resume on failure) -5. Handles per-patient exceptions without stopping the full batch - -``` -startup: - load Phi-4 (4-bit) + LoRA adapter - load Gemma-2-2B (4-bit) - load BGE-M3 embedder - load schema entity annotator + LanceDB concept linker - connect to Elasticsearch - -for each patient: - [Agent 1] phenopacket → keywords.json - [ES] BM25 + vector search → nct_ids.txt - [Agent 2] criteria reranking → top_trials.txt - [Agent 3] CoT reasoning → .json (×33 trials) - [Ranker] score aggregation → ranked_trials.json -``` +- `entity_group` +- `text` +- `start` +- `end` +- `score` +- `normalized_id` +- `synonyms` +- `concept_candidates` +- `linker_score` +- `linker_status` -**The ranker is not an LLM** — it is a deterministic formula over the structured JSON that Agent 3 produces. This is intentional: keeping the final scoring rule-based makes it auditable and consistent. +## 6. Deployment ---- +Default deployment requires only the Python worker process and local mounted directories: -## 6. Data Handed Between Agents +- `data/` +- `models/` +- `results/` -| From | To | Artifact | Content | -| --- | --- | --- | --- | -| Phenopacket (raw) | Agent 1 | medical narrative sentences | Plain-text sentences per clinical category | -| Agent 1 | ES Stage 1 | `keywords.json` | `main_conditions`, `other_conditions`, `expanded_sentences` | -| ES Stage 1 | Agent 2 | `nct_ids.txt` | ~300 trial IDs + scores | -| Agent 2 | Agent 3 | `top_trials.txt` | ~33 trial IDs ranked by criterion match | -| Agent 3 | Ranker | `.json` (×33) | Per-criterion classification + final decision | -| Ranker | User | `ranked_trials.json` | Scored, sorted list of trial IDs | +Docker is optional and packages only the worker. The application does not auto-start external services. ---- +## 7. Runtime Configuration -## 7. What This Is Not +Important settings: -- **Not a ReAct / tool-use agent** — no LLM decides what action to take next -- **Not a multi-agent conversation** — agents never see each other's outputs or converse -- **Not RAG in the classic sense** — retrieved documents (criteria) are fed as structured context to Agent 3, not as retrieved passages for general Q&A -- **Not streaming / real-time** — designed for offline batch processing of patient cohorts - ---- - ---- - -## HLD — Strategy Summary (AI Engineering Learners) - ---- - -### The Problem - -Clinical trials fail to recruit because matching patients to trials manually is slow, expensive, and inconsistent. A trial might have 50 eligibility criteria. A hospital might have thousands of patients. No human team can cross-reference all of that at scale. - -The goal: automate that matching with AI, and make the reasoning **explainable** — not just a black-box score. - ---- +| Env var | Default | Purpose | +|---|---|---| +| `TRIALMATCHAI_SEARCH_DB_PATH` | `data/search` | LanceDB search table directory | +| `TRIALMATCHAI_SEARCH_TRIALS_TABLE` | `trials` | Trial table | +| `TRIALMATCHAI_SEARCH_CRITERIA_TABLE` | `criteria` | Criteria table | +| `TRIALMATCHAI_SEARCH_MODE` | `hybrid` | `bm25`, `vector`, or `hybrid` | +| `TRIALMATCHAI_CONCEPT_DB_PATH` | `data/concepts` | Concept linker table directory | +| `TRIALMATCHAI_ENTITY_BACKEND` | `gliner2` | Entity recognition backend | +| `TRIALMATCHAI_COT_BACKEND` | `vllm` | Reasoning backend | -### The Core Strategy: Progressive Filtering +## 8. Operational Checks -The system never throws the most expensive AI at the full problem. Instead it uses a **funnel** — each stage is smarter but slower than the last, and only operates on what survived the previous stage. +Use: +```bash +trialmatchai-healthcheck +trialmatchai-healthcheck --require-tables +trialmatchai-index +trialmatchai-run ``` -Hundreds of thousands of trials - ↓ cheap keyword + semantic search - 300 candidates - ↓ fast LLM reranking - 33 shortlisted - ↓ deep LLM reasoning - Ranked results with explanations -``` - -This is the central engineering insight: **don't use a sledgehammer where a sieve will do.** - ---- - -### The Four AI Techniques Used - -#### 1. Embeddings + Vector Search - -Convert text into numbers (vectors) that capture semantic meaning. Two pieces of text that mean the same thing — even with different words — land close together in vector space. Used in Stage 1 to find trials that are *semantically* related to the patient's conditions, not just keyword-matched. - -> *Key model: BAAI/bge-m3 (1024-dimensional embeddings)* - -#### 2. RAG — Retrieval-Augmented Generation - -Rather than asking an LLM to memorise every clinical trial, retrieve the relevant trial's criteria at query time and inject them into the prompt as context. The LLM reasons over what it's given, not what it was trained on. - -> *"Give the model the patient chart and the trial rulebook, then ask it to decide."* - -#### 3. Fine-Tuning with LoRA - -The base Phi-4 model is a general-purpose LLM — it can write poetry as easily as it can read medical text. Fine-tuning with a LoRA adapter (a small, efficient set of weight adjustments) specialises it for one task: structured clinical eligibility reasoning. It learns **how** to think about the problem, not specific trial content. - -> *LoRA = teach the model the job, RAG = hand it the case file.* - -#### 4. LLM-as-Scorer (not generator) - -Gemma-2-2B is never asked to generate text. Instead it's used as a **scoring function** — the reranker reads the logit (raw probability) for just two tokens (Yes/No) to score relevance. One forward pass, no generation, extremely fast. This is an underused pattern in production AI systems. - ---- - -### The Data Strategy - -Patient data is structured using the **GA4GH Phenopacket standard** — ontology codes (HPO, MONDO, CHEBI) rather than free text. This solves the vocabulary mismatch problem: a trial saying "coronary artery disease" and a patient record saying "CAD" both resolve to `MONDO:0005066`, ensuring consistent matching regardless of phrasing. - -The schema entity annotator bridges the gap between ontology codes and natural language by extracting mentions, linking them to LanceDB concept candidates, and expanding accepted disease concepts with synonyms. - ---- - -### Key Engineering Decisions - -| Decision | Why | -| --- | --- | -| Three-stage funnel | LLM inference is expensive — only invoke it on a small, pre-filtered set | -| RAG over full fine-tuning for trial knowledge | Trials change constantly; RAG stays current without retraining | -| LoRA over full fine-tuning | Trains faster, uses less memory, can be swapped per use case | -| LLM-as-scorer for reranking | Orders of magnitude faster than generating full responses | -| Criterion-level output | Explainability — doctors need to know *why*, not just a score | -| Deterministic ranker at the end | Keeps the final decision auditable and consistent | - ---- - -### The Takeaway - -TrialMatchAI is a masterclass in **composing AI primitives** rather than reaching for one big model: - -- Use **search** (fast, cheap) to filter -- Use **a small LLM as a scorer** (fast, precise) to refine -- Use **RAG + fine-tuned LLM** (slow, thorough) only on the shortlist -- Use **rules** (deterministic, auditable) for the final decision -Each component does what it's best at. The system as a whole does what none of them could do alone. +Preflight checks validate local paths, optional model artifacts, entity dependencies, GPU/vLLM readiness, and LanceDB table availability before expensive model startup. diff --git a/elasticsearch/.env.example b/elasticsearch/.env.example deleted file mode 100644 index cb41313d..00000000 --- a/elasticsearch/.env.example +++ /dev/null @@ -1,12 +0,0 @@ -# Copy this file to elasticsearch/.env for local Elasticsearch. -# Do not commit elasticsearch/.env. - -ELASTIC_PASSWORD=change-me-strong-password -KIBANA_PASSWORD=change-me-strong-password -STACK_VERSION=8.13.4 -CLUSTER_NAME=trialmatchai-local -LICENSE=basic -ES_PORT=9200 -KIBANA_PORT=5601 -MEM_LIMIT=1073741824 -COMPOSE_PROJECT_NAME=trialmatchai diff --git a/elasticsearch/apptainer-run-es.sh b/elasticsearch/apptainer-run-es.sh deleted file mode 100644 index 6f22371f..00000000 --- a/elasticsearch/apptainer-run-es.sh +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -#=== LOAD .env ===# -if [ ! -f .env ]; then - echo "[ERROR] .env file not found." - exit 1 -fi - -# shellcheck disable=SC1091 -source .env - -#=== CONFIGURATION FROM ENV ===# -STACK_VERSION="${STACK_VERSION:-8.13.4}" -CLUSTER_NAME="${CLUSTER_NAME:-apptainer-cluster}" -ES_IMAGE="docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}" - -BASE_DIR="$(pwd)" -CERTS_DIR="$BASE_DIR/certs" -CONFIG_DIR="$BASE_DIR/config" -DATA_DIR="$BASE_DIR/data" -LOGS_DIR="$BASE_DIR/logs" -SIF_DIR="$BASE_DIR/sif" -TMP_CONFIG="$BASE_DIR/tmp-config" - -ES_PORT1="${ES_PORT:-9200}" -ES_PORT2=$((ES_PORT1 + 1)) -ES_PORT3=$((ES_PORT1 + 2)) - -ELASTIC_PASSWORD="${ELASTIC_PASSWORD:?ELASTIC_PASSWORD not set in .env}" - -if [ ! -f "$CERTS_DIR/ca/ca.crt" ] || [ ! -f "$CERTS_DIR/es01/es01.crt" ]; then - echo "[ERROR] Elasticsearch TLS certs are not present in $CERTS_DIR." - echo "[ERROR] Generate local certs with Docker Compose first or provide certs out of band." - exit 1 -fi - -#=== PREPARE FOLDERS ===# -mkdir -p "$CONFIG_DIR/es01" "$CONFIG_DIR/es02" "$CONFIG_DIR/es03" -mkdir -p "$DATA_DIR/es01" "$DATA_DIR/es02" "$DATA_DIR/es03" -mkdir -p "$LOGS_DIR" "$SIF_DIR" "$TMP_CONFIG" - -#=== BUILD SIF IMAGE IF NEEDED ===# -if [ ! -f "$SIF_DIR/es.sif" ]; then - echo "[INFO] Building Elasticsearch SIF..." - apptainer build "$SIF_DIR/es.sif" "docker://$ES_IMAGE" -fi - -#=== CLEAN CONFIG EXTRACTION DIR ===# -rm -rf "$TMP_CONFIG"/* - -#=== EXTRACT DEFAULT CONFIG FILES ===# -echo "[INFO] Extracting default Elasticsearch config files..." -apptainer exec --bind "$TMP_CONFIG:/mnt/tmp" "$SIF_DIR/es.sif" \ - bash -c 'cp -r /usr/share/elasticsearch/config/* /mnt/tmp/' - -#=== PREPARE NODE CONFIGS ===# -for NODE in es01 es02 es03; do - cp -r "$TMP_CONFIG"/* "$CONFIG_DIR/$NODE/" - cp "$CERTS_DIR/ca.crt" "$CONFIG_DIR/$NODE/" - cp "$CERTS_DIR/$NODE/$NODE.crt" "$CONFIG_DIR/$NODE/" - cp "$CERTS_DIR/$NODE/$NODE.key" "$CONFIG_DIR/$NODE/" - - cat > "$CONFIG_DIR/$NODE/elasticsearch.yml" < "$LOGS_DIR/$NODE.log" 2>&1 & -} - -launch_node es01 $ES_PORT1 9300 -sleep 10 -launch_node es02 $ES_PORT2 9301 -sleep 10 -launch_node es03 $ES_PORT3 9302 -sleep 10 - -#=== WAIT FOR ES01 TO BE READY ===# -echo "[INFO] Waiting for es01 to be ready..." -until curl -s --cacert "$CERTS_DIR/ca.crt" -u elastic:"$ELASTIC_PASSWORD" \ - https://localhost:$ES_PORT1/_cluster/health?pretty | grep -q '"status"'; do - echo -n "." - sleep 5 -done -echo -e "\n[INFO] Elasticsearch cluster is up." - -echo "[INFO] Access Elasticsearch at: https://localhost:$ES_PORT1" diff --git a/elasticsearch/docker-compose.yml b/elasticsearch/docker-compose.yml deleted file mode 100644 index a14c0a05..00000000 --- a/elasticsearch/docker-compose.yml +++ /dev/null @@ -1,232 +0,0 @@ -services: - setup: - image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} - volumes: - - ./certs:/usr/share/elasticsearch/config/certs - user: "0" - command: > - bash -c ' - if [ x${ELASTIC_PASSWORD} == x ]; then - echo "Set the ELASTIC_PASSWORD environment variable in the .env file"; - exit 1; - elif [ x${KIBANA_PASSWORD} == x ]; then - echo "Set the KIBANA_PASSWORD environment variable in the .env file"; - exit 1; - fi; - if [ ! -f config/certs/ca.zip ]; then - echo "Creating CA"; - bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip; - unzip config/certs/ca.zip -d config/certs; - fi; - if [ ! -f config/certs/certs.zip ]; then - echo "Creating certs"; - echo -ne \ - "instances:\n"\ - " - name: es01\n"\ - " dns:\n"\ - " - es01\n"\ - " - localhost\n"\ - " ip:\n"\ - " - 127.0.0.1\n"\ - " - name: es02\n"\ - " dns:\n"\ - " - es02\n"\ - " - localhost\n"\ - " ip:\n"\ - " - 127.0.0.1\n"\ - " - name: es03\n"\ - " dns:\n"\ - " - es03\n"\ - " - localhost\n"\ - " ip:\n"\ - " - 127.0.0.1\n"\ - > config/certs/instances.yml; - bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key; - unzip config/certs/certs.zip -d config/certs; - fi; - echo "Setting file permissions" - chown -R root:root config/certs; - find . -type d -exec chmod 750 \{\} \;; - find . -type f -exec chmod 640 \{\} \;; - echo "Waiting for Elasticsearch availability"; - until curl -s --cacert config/certs/ca/ca.crt https://es01:9200 | grep -q "missing authentication credentials"; do sleep 30; done; - echo "Setting kibana_system password"; - until curl -s -X POST --cacert config/certs/ca/ca.crt -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" https://es01:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done; - echo "All done!"; - ' - healthcheck: - test: ["CMD-SHELL", "[ -f config/certs/es01/es01.crt ]"] - interval: 1s - timeout: 5s - retries: 120 - - es01: - depends_on: - setup: - condition: service_healthy - image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} - volumes: - - ./certs:/usr/share/elasticsearch/config/certs:ro - - esdata01:/usr/share/elasticsearch/data - ports: - - ${ES_PORT}:9200 - environment: - - node.name=es01 - - cluster.name=${CLUSTER_NAME} - - cluster.initial_master_nodes=es01,es02,es03 - - discovery.seed_hosts=es02,es03 - - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} - - bootstrap.memory_lock=true - - xpack.security.enabled=true - - xpack.security.http.ssl.enabled=true - - xpack.security.http.ssl.key=certs/es01/es01.key - - xpack.security.http.ssl.certificate=certs/es01/es01.crt - - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt - - xpack.security.transport.ssl.enabled=true - - xpack.security.transport.ssl.key=certs/es01/es01.key - - xpack.security.transport.ssl.certificate=certs/es01/es01.crt - - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt - - xpack.security.transport.ssl.verification_mode=certificate - - xpack.license.self_generated.type=${LICENSE} - # Add the thread pool settings for rate limits - - thread_pool.search.size=100 # Increase the number of search threads - - thread_pool.search.queue_size=1000 # Increase the size of the search queue - mem_limit: 2g - ulimits: - memlock: - soft: -1 - hard: -1 - healthcheck: - test: - [ - "CMD-SHELL", - "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'", - ] - interval: 10s - timeout: 10s - retries: 120 - - es02: - depends_on: - - es01 - image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} - volumes: - - ./certs:/usr/share/elasticsearch/config/certs:ro - - esdata02:/usr/share/elasticsearch/data - environment: - - node.name=es02 - - cluster.name=${CLUSTER_NAME} - - cluster.initial_master_nodes=es01,es02,es03 - - discovery.seed_hosts=es01,es03 - - bootstrap.memory_lock=true - - xpack.security.enabled=true - - xpack.security.http.ssl.enabled=true - - xpack.security.http.ssl.key=certs/es02/es02.key - - xpack.security.http.ssl.certificate=certs/es02/es02.crt - - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt - - xpack.security.transport.ssl.enabled=true - - xpack.security.transport.ssl.key=certs/es02/es02.key - - xpack.security.transport.ssl.certificate=certs/es02/es02.crt - - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt - - xpack.security.transport.ssl.verification_mode=certificate - - xpack.license.self_generated.type=${LICENSE} - # Add the thread pool settings for rate limits - - thread_pool.search.size=100 - - thread_pool.search.queue_size=1000 - mem_limit: 2g - ulimits: - memlock: - soft: -1 - hard: -1 - healthcheck: - test: - [ - "CMD-SHELL", - "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'", - ] - interval: 10s - timeout: 10s - retries: 120 - - es03: - depends_on: - - es02 - image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} - volumes: - - ./certs:/usr/share/elasticsearch/config/certs:ro - - esdata03:/usr/share/elasticsearch/data - environment: - - node.name=es03 - - cluster.name=${CLUSTER_NAME} - - cluster.initial_master_nodes=es01,es02,es03 - - discovery.seed_hosts=es01,es02 - - bootstrap.memory_lock=true - - xpack.security.enabled=true - - xpack.security.http.ssl.enabled=true - - xpack.security.http.ssl.key=certs/es03/es03.key - - xpack.security.http.ssl.certificate=certs/es03/es03.crt - - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt - - xpack.security.transport.ssl.enabled=true - - xpack.security.transport.ssl.key=certs/es03/es03.key - - xpack.security.transport.ssl.certificate=certs/es03/es03.crt - - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt - - xpack.security.transport.ssl.verification_mode=certificate - - xpack.license.self_generated.type=${LICENSE} - # Add the thread pool settings for rate limits - - thread_pool.search.size=100 - - thread_pool.search.queue_size=1000 - mem_limit: 2g - ulimits: - memlock: - soft: -1 - hard: -1 - healthcheck: - test: - [ - "CMD-SHELL", - "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'", - ] - interval: 10s - timeout: 10s - retries: 120 - - kibana: - depends_on: - es01: - condition: service_healthy - es02: - condition: service_healthy - es03: - condition: service_healthy - image: docker.elastic.co/kibana/kibana:${STACK_VERSION} - volumes: - - ./certs:/usr/share/kibana/config/certs:ro - - kibanadata:/usr/share/kibana/data - ports: - - ${KIBANA_PORT}:5601 - environment: - - SERVERNAME=kibana - - ELASTICSEARCH_HOSTS=https://es01:9200 - - ELASTICSEARCH_USERNAME=kibana_system - - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD} - - ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crt - mem_limit: ${MEM_LIMIT} - healthcheck: - test: - [ - "CMD-SHELL", - "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'", - ] - interval: 10s - timeout: 10s - retries: 120 - -volumes: - esdata01: - driver: local - esdata02: - driver: local - esdata03: - driver: local - kibanadata: - driver: local diff --git a/pyproject.toml b/pyproject.toml index 8b082f21..c48615dc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,6 @@ dependencies = [ "tokenizers==0.22.1", "safetensors>=0.6.2,<0.7", "sentencepiece==0.2.1", - "elasticsearch==8.17.2", "faiss-cpu==1.9.0.post1", "peft==0.15.2", "einops==0.8.0", @@ -38,6 +37,8 @@ dependencies = [ "PyYAML==6.0.2", "python-dotenv==1.2.2", "rich==13.9.4", + "lancedb>=0.25.0,<0.26", + "pyarrow>=24.0.0,<25", # spaCy / medspaCy (for your medical text work) "spacy==3.7.5", "medspacy==1.3.1", @@ -70,8 +71,6 @@ llm = [ "langchain-openai==1.3.2", ] entity = [ - "lancedb>=0.25.0,<0.26", - "pyarrow>=24.0.0,<25", "gliner2>=1.3.1,<2", ] training = [ diff --git a/requirements.txt b/requirements.txt index f75c9925..ac39b6cc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,6 @@ accelerate==1.8.1 tokenizers==0.22.1 safetensors>=0.6.2,<0.7 sentencepiece==0.2.1 -elasticsearch==8.17.2 faiss-cpu==1.9.0.post1 peft==0.15.2 einops==0.8.0 @@ -30,6 +29,8 @@ orjson==3.11.9 PyYAML==6.0.2 python-dotenv==1.2.2 rich==13.9.4 +lancedb>=0.25.0,<0.26 +pyarrow>=24.0.0,<25 # spaCy / medspaCy (for your medical text work) spacy==3.7.5 diff --git a/scripts/index_data.sh b/scripts/index_data.sh index 67285d5e..732bb433 100644 --- a/scripts/index_data.sh +++ b/scripts/index_data.sh @@ -9,24 +9,10 @@ error() { echo -e "[ERROR] $*" >&2; exit 1; } ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd "$ROOT_DIR/utils/Indexer" -info "Starting index_criteria.py (trials_eligibility) ..." -nohup python index_criteria.py \ - --config config.json \ - --processed-folder ../../data/processed_criteria \ - --index-name trials_eligibility \ - --batch-size 100 \ - --max-workers 100 \ - > criteria.log 2>&1 & - -info "Starting index_trials.py (clinical_trials) ..." -nohup python index_trials.py \ - --config config.json \ - --processed-folder ../../data/processed_trials \ - --index-name clinical_trials \ - --batch-size 100 \ - > trials.log 2>&1 & - -info "Waiting for indexing jobs to complete..." -wait -info "✅ Indexing complete." +cd "$ROOT_DIR" +info "Building LanceDB search tables ..." +uv run trialmatchai-index \ + --processed-trials-folder data/processed_trials \ + --processed-criteria-folder data/processed_criteria \ + --recreate +info "Indexing complete." diff --git a/scripts/scan_secrets.py b/scripts/scan_secrets.py index 57d3a609..5cdb21ac 100644 --- a/scripts/scan_secrets.py +++ b/scripts/scan_secrets.py @@ -9,19 +9,13 @@ SECRET_PATTERNS = [ re.compile(r"-----BEGIN [A-Z ]*PRIVATE KEY-----"), - re.compile( - r"\bELASTIC_PASSWORD\s*=\s*['\"]?(?!change-me|CHANGE_ME|<|\$|$)[^\s'\"]+" - ), - re.compile( - r"\bKIBANA_PASSWORD\s*=\s*['\"]?(?!change-me|CHANGE_ME|<|\$|$)[^\s'\"]+" - ), re.compile(r"\bpassword['\"]?\s*:\s*['\"](?!CHANGE_ME|change-me)[^'\"]{12,}['\"]"), + re.compile(r"\b[A-Z0-9_]*TOKEN\s*=\s*['\"]?(?!change-me|CHANGE_ME|<|\$|$)[^\s'\"]+"), + re.compile(r"\b[A-Z0-9_]*API_KEY\s*=\s*['\"]?(?!change-me|CHANGE_ME|<|\$|$)[^\s'\"]+"), ] SECRET_PATH_PATTERNS = [ - re.compile(r"^elasticsearch/(certs|config|tmp-config)/"), re.compile(r"(^|/).*\.key$"), - re.compile(r"(^|/)elasticsearch\.keystore$"), ] SKIP_SUFFIXES = {".png", ".jpg", ".jpeg", ".gif", ".zip", ".gz", ".sif", ".so", ".a"} diff --git a/scripts/start_es.sh b/scripts/start_es.sh deleted file mode 100644 index 01679630..00000000 --- a/scripts/start_es.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' - -GREEN='\033[0;32m' -NC='\033[0m' -info() { echo -e "${GREEN}[INFO]${NC} $*"; } -error() { echo -e "[ERROR] $*" >&2; exit 1; } - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd "$ROOT_DIR/elasticsearch" - -if command -v docker &> /dev/null && docker info &> /dev/null; then - info "Docker is available. Starting Elasticsearch with Docker Compose..." - if docker compose version &> /dev/null; then - docker compose up -d - elif command -v docker-compose &> /dev/null; then - docker-compose up -d - else - error "Docker is available, but Docker Compose is not installed." - fi -elif command -v apptainer &> /dev/null; then - info "Docker not found or not running. Falling back to Apptainer..." - if [ ! -f "./apptainer-run-es.sh" ]; then - error "Apptainer script not found at ./elasticsearch/apptainer-run-es.sh" - fi - bash ./apptainer-run-es.sh -else - error "Neither Docker nor Apptainer is available. Cannot continue." -fi diff --git a/setup.sh b/setup.sh index 7183c7d3..1d17395a 100644 --- a/setup.sh +++ b/setup.sh @@ -47,11 +47,7 @@ fi info "Bootstrapping data and models..." "${RUNNER[@]}" trialmatchai-bootstrap-data -# 3) Launch Elasticsearch -info "Starting Elasticsearch..." -bash scripts/start_es.sh - -# 4) Launch indexers in background +# 3) Build local LanceDB search tables info "Indexing trial data..." "${RUNNER[@]}" trialmatchai-index diff --git a/source/Matcher/cli/healthcheck.py b/source/Matcher/cli/healthcheck.py index 217a8fe2..46edd2fb 100644 --- a/source/Matcher/cli/healthcheck.py +++ b/source/Matcher/cli/healthcheck.py @@ -4,10 +4,7 @@ import sys from Matcher.config.config_loader import load_config -from Matcher.services.elasticsearch_service import ( - build_elasticsearch_client, - ensure_elasticsearch, -) +from Matcher.search import LanceDBSearchBackend from Matcher.services.preflight import run_preflight_checks from Matcher.utils.logging_config import setup_logging @@ -22,19 +19,15 @@ def main() -> int: help="Path to config.json", ) parser.add_argument( - "--start-es", + "--require-tables", action="store_true", - help="Attempt to start Elasticsearch if unreachable", - ) - parser.add_argument( - "--require-indices", - action="store_true", - help="Fail if configured Elasticsearch indices are missing", + help="Fail if configured LanceDB search tables are missing", ) args = parser.parse_args() config = load_config(args.config) issues = 0 + search_backend = LanceDBSearchBackend.from_config(config) preflight_issues = run_preflight_checks( config, @@ -44,26 +37,13 @@ def main() -> int: ) issues += len(preflight_issues) - es_cfg = config["elasticsearch"] - es_client = build_elasticsearch_client(config) - - if args.start_es and es_cfg.get("auto_start") is False: - es_cfg["auto_start"] = True - - if not ensure_elasticsearch(es_client, config): - logger.error("Elasticsearch healthcheck failed.") - issues += 1 + backend_issues = search_backend.health(require_tables=args.require_tables) + if backend_issues: + for issue in backend_issues: + logger.error("Search backend healthcheck failed: %s", issue) + issues += len(backend_issues) else: - logger.info("Elasticsearch reachable.") - - if args.require_indices: - issues += len( - run_preflight_checks( - config, - es_client=es_client, - require_indices=True, - ) - ) + logger.info("LanceDB search backend reachable at %s.", search_backend.db_path) return 1 if issues else 0 if __name__ == "__main__": diff --git a/source/Matcher/cli/index_data.py b/source/Matcher/cli/index_data.py index 8922faf0..c9c34efe 100644 --- a/source/Matcher/cli/index_data.py +++ b/source/Matcher/cli/index_data.py @@ -1,25 +1,111 @@ from __future__ import annotations import argparse -import subprocess import sys from pathlib import Path +from Matcher.config.config_loader import load_config +from Matcher.search import LanceDBSearchBackend +from Matcher.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + def main() -> int: - parser = argparse.ArgumentParser(description="Index TrialMatchAI data into Elasticsearch") + parser = argparse.ArgumentParser( + description="Build TrialMatchAI LanceDB search tables from prepared JSON data." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--processed-trials-folder", + default="data/processed_trials", + help="Folder containing prepared trial JSON files.", + ) + parser.add_argument( + "--processed-criteria-folder", + default="data/processed_criteria", + help="Folder containing prepared criteria subfolders.", + ) + parser.add_argument( + "--skip-trials", + action="store_true", + help="Do not build the trial table.", + ) parser.add_argument( - "--script", - default="scripts/index_data.sh", - help="Indexing script path relative to the repository root", + "--skip-criteria", + action="store_true", + help="Do not build the criteria table.", + ) + parser.add_argument( + "--recreate", + action=argparse.BooleanOptionalAction, + default=True, + help="Overwrite target tables before writing.", ) args = parser.parse_args() + config = load_config(args.config) + backend = LanceDBSearchBackend.from_config(config) root = _repo_root() - script = (root / args.script).resolve() - if not script.exists(): - raise FileNotFoundError(f"Indexing script not found: {script}") - return subprocess.run(["bash", str(script)], cwd=str(root), check=False).returncode + failures = 0 + + if not args.skip_trials: + trials_folder = _resolve_path(args.processed_trials_folder, root) + trial_docs = _load_flat_json_folder(trials_folder) + if not trial_docs: + logger.error("No prepared trial JSON files found in %s.", trials_folder) + failures += 1 + else: + count = backend.index_trials(trial_docs, recreate=args.recreate) + logger.info("Indexed %s trial documents.", count) + + if not args.skip_criteria: + criteria_folder = _resolve_path(args.processed_criteria_folder, root) + criteria_docs = _load_nested_json_folder(criteria_folder) + if not criteria_docs: + logger.error("No prepared criteria JSON files found in %s.", criteria_folder) + failures += 1 + else: + count = backend.index_criteria(criteria_docs, recreate=args.recreate) + logger.info("Indexed %s criteria documents.", count) + + if failures: + return 1 + logger.info("Search tables ready at %s.", backend.db_path) + return 0 + + +def _load_flat_json_folder(folder: Path) -> list[dict]: + if not folder.exists(): + return [] + return [ + _read_json(path) + for path in sorted(folder.glob("*.json")) + if path.is_file() + ] + + +def _load_nested_json_folder(folder: Path) -> list[dict]: + if not folder.exists(): + return [] + return [ + _read_json(path) + for path in sorted(folder.glob("*/*.json")) + if path.is_file() + ] + + +def _read_json(path: Path) -> dict: + import json + + return json.loads(path.read_text(encoding="utf-8")) + + +def _resolve_path(value: str, root: Path) -> Path: + path = Path(value).expanduser() + if path.is_absolute(): + return path + return (root / path).resolve() def _repo_root() -> Path: diff --git a/source/Matcher/config/config.json b/source/Matcher/config/config.json index cba614eb..d92fb5ea 100644 --- a/source/Matcher/config/config.json +++ b/source/Matcher/config/config.json @@ -21,8 +21,7 @@ "paths": { "patients_dir": "example", "output_dir": "results", - "trials_json_folder": "data/trials_jsons", - "docker_certs": "elasticsearch/certs/ca/ca.crt" + "trials_json_folder": "data/trials_jsons" }, "model": { "base_model": "microsoft/phi-4", @@ -46,17 +45,12 @@ "global": { "device": 0 }, - "elasticsearch": { - "host": "https://localhost:9200", - "username": "elastic", - "password": "CHANGE_ME", - "request_timeout": 600, - "retry_on_timeout": true, - "index_trials": "clinical_trials", - "index_trials_eligibility": "trials_eligibility", - "auto_start": false, - "start_script": "elasticsearch/apptainer-run-es.sh", - "start_timeout": 600 + "search_backend": { + "backend": "lancedb", + "db_path": "data/search", + "trials_table": "trials", + "criteria_table": "criteria", + "candidate_limit": 1000 }, "embedder": { "model_name": "BAAI/bge-m3", @@ -76,6 +70,7 @@ "batch_size": 20 }, "search": { + "mode": "hybrid", "vector_score_threshold": 0.5, "max_trials_first_level": 300, "max_trials_second_level": 100 diff --git a/source/Matcher/config/config_loader.py b/source/Matcher/config/config_loader.py index 9d1d7639..92a8605e 100644 --- a/source/Matcher/config/config_loader.py +++ b/source/Matcher/config/config_loader.py @@ -35,10 +35,6 @@ def load_config(config_path: str | os.PathLike[str] | None = None) -> Dict[str, settings = TrialMatchSettings.model_validate(raw) cfg = settings.to_dict() cfg = normalize_config_paths(cfg, resolved_config) - if cfg.get("elasticsearch", {}).get("password") in {"", "CHANGE_ME"}: - logger.warning( - "Elasticsearch password is not set. Use TRIALMATCHAI_ES_PASSWORD to supply it." - ) return cfg @@ -82,7 +78,7 @@ def resolve_config_path( def normalize_config_paths(cfg: Dict[str, Any], config_path: Path) -> Dict[str, Any]: """Normalize known local paths while leaving remote model IDs untouched.""" root = _repo_root(config_path) - for key in ("patients_dir", "output_dir", "trials_json_folder", "docker_certs"): + for key in ("patients_dir", "output_dir", "trials_json_folder"): value = cfg.get("paths", {}).get(key) if value: cfg["paths"][key] = str(_resolve_local_path(value, root)) @@ -99,9 +95,11 @@ def normalize_config_paths(cfg: Dict[str, Any], config_path: Path) -> Dict[str, _resolve_local_path(concept_db_path, root) ) - start_script = cfg.get("elasticsearch", {}).get("start_script") - if start_script: - cfg["elasticsearch"]["start_script"] = str(_resolve_local_path(start_script, root)) + search_db_path = cfg.get("search_backend", {}).get("db_path") + if search_db_path: + cfg["search_backend"]["db_path"] = str( + _resolve_local_path(search_db_path, root) + ) for key in ("cot_adapter_path", "reranker_adapter_path"): value = cfg.get("model", {}).get(key) diff --git a/source/Matcher/config/settings.py b/source/Matcher/config/settings.py index dd59e7ac..40a98014 100644 --- a/source/Matcher/config/settings.py +++ b/source/Matcher/config/settings.py @@ -38,7 +38,6 @@ class PathsSettings(BaseModel): patients_dir: str output_dir: str trials_json_folder: str - docker_certs: str class ModelQuantizationSettings(BaseModel): @@ -68,17 +67,12 @@ class GlobalSettings(BaseModel): device: int | str -class ElasticsearchSettings(BaseModel): - host: str - username: str - password: str - request_timeout: int = 600 - retry_on_timeout: bool = True - index_trials: str - index_trials_eligibility: str - auto_start: bool = False - start_script: str = "elasticsearch/apptainer-run-es.sh" - start_timeout: int = Field(600, ge=1) +class SearchBackendSettings(BaseModel): + backend: Literal["lancedb"] = "lancedb" + db_path: str = "data/search" + trials_table: str = "trials" + criteria_table: str = "criteria" + candidate_limit: int = Field(1000, ge=1) class EmbedderSettings(BaseModel): @@ -101,6 +95,7 @@ def validate_pooling(cls, value: str) -> str: class SearchSettings(BaseModel): + mode: Literal["bm25", "vector", "hybrid"] = "hybrid" vector_score_threshold: float = Field(0.5, ge=0.0, le=1.0) max_trials_first_level: int = Field(300, ge=1) max_trials_second_level: int = Field(100, ge=1) @@ -140,7 +135,7 @@ class TrialMatchSettings(BaseModel): model: ModelSettings tokenizer: TokenizerSettings global_: GlobalSettings = Field(alias="global") - elasticsearch: ElasticsearchSettings + search_backend: SearchBackendSettings = Field(default_factory=SearchBackendSettings) embedder: EmbedderSettings cot: CotSettings LLM_reranker: LLMRerankerSettings @@ -166,18 +161,14 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: import os string_env_map: dict[str, Tuple[str, ...]] = { - "TRIALMATCHAI_ES_HOST": ("elasticsearch", "host"), - "TRIALMATCHAI_ES_USERNAME": ("elasticsearch", "username"), - "TRIALMATCHAI_ES_PASSWORD": ("elasticsearch", "password"), - "TRIALMATCHAI_ES_CA_CERTS": ("paths", "docker_certs"), "TRIALMATCHAI_PATIENTS_DIR": ("paths", "patients_dir"), "TRIALMATCHAI_OUTPUT_DIR": ("paths", "output_dir"), "TRIALMATCHAI_TRIALS_JSON_FOLDER": ("paths", "trials_json_folder"), - "TRIALMATCHAI_INDEX_TRIALS": ("elasticsearch", "index_trials"), - "TRIALMATCHAI_INDEX_TRIALS_ELIGIBILITY": ( - "elasticsearch", - "index_trials_eligibility", - ), + "TRIALMATCHAI_SEARCH_BACKEND": ("search_backend", "backend"), + "TRIALMATCHAI_SEARCH_DB_PATH": ("search_backend", "db_path"), + "TRIALMATCHAI_SEARCH_TRIALS_TABLE": ("search_backend", "trials_table"), + "TRIALMATCHAI_SEARCH_CRITERIA_TABLE": ("search_backend", "criteria_table"), + "TRIALMATCHAI_SEARCH_MODE": ("search", "mode"), "TRIALMATCHAI_EMBEDDER_MODEL_NAME": ("embedder", "model_name"), "TRIALMATCHAI_EMBEDDER_REVISION": ("embedder", "revision"), "TRIALMATCHAI_MODEL_BASE_MODEL": ("model", "base_model"), @@ -199,7 +190,6 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "reranker_adapter_path", ), "TRIALMATCHAI_COT_BACKEND": ("cot_backend",), - "TRIALMATCHAI_ES_START_SCRIPT": ("elasticsearch", "start_script"), "TRIALMATCHAI_ENTITY_BACKEND": ("entity_extraction", "backend"), "TRIALMATCHAI_ENTITY_MODEL_NAME": ("entity_extraction", "model_name"), "TRIALMATCHAI_ENTITY_FALLBACK_MODEL_NAME": ( @@ -221,8 +211,6 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: _set_nested(raw, path, value) bool_env_map: dict[str, Tuple[str, ...]] = { - "TRIALMATCHAI_ES_AUTO_START": ("elasticsearch", "auto_start"), - "TRIALMATCHAI_ES_RETRY_ON_TIMEOUT": ("elasticsearch", "retry_on_timeout"), "TRIALMATCHAI_EMBEDDER_USE_GPU": ("embedder", "use_gpu"), "TRIALMATCHAI_EMBEDDER_USE_FP16": ("embedder", "use_fp16"), "TRIALMATCHAI_EMBEDDER_TRUST_REMOTE_CODE": ( @@ -242,8 +230,10 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: _set_nested(raw, path, _parse_bool(value)) int_env_map: dict[str, Tuple[str, ...]] = { - "TRIALMATCHAI_ES_REQUEST_TIMEOUT": ("elasticsearch", "request_timeout"), - "TRIALMATCHAI_ES_START_TIMEOUT": ("elasticsearch", "start_timeout"), + "TRIALMATCHAI_SEARCH_CANDIDATE_LIMIT": ( + "search_backend", + "candidate_limit", + ), "TRIALMATCHAI_EMBEDDER_BATCH_SIZE": ("embedder", "batch_size"), "TRIALMATCHAI_ENTITY_BATCH_SIZE": ("entity_extraction", "batch_size"), "TRIALMATCHAI_CONCEPT_SEARCH_LIMIT": ("concept_linker", "search_limit"), diff --git a/source/Matcher/main.py b/source/Matcher/main.py index acf278f6..92b055ab 100644 --- a/source/Matcher/main.py +++ b/source/Matcher/main.py @@ -4,7 +4,6 @@ from typing import Dict, List, Optional, Tuple import torch -from elasticsearch import Elasticsearch from Matcher.config.config_loader import load_config from Matcher.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig @@ -22,10 +21,7 @@ ) from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch from Matcher.pipeline.trial_search.second_level_search import SecondStageRetriever -from Matcher.services.elasticsearch_service import ( - build_elasticsearch_client, - ensure_elasticsearch, -) +from Matcher.search import LanceDBSearchBackend from Matcher.services.preflight import run_preflight_checks from Matcher.utils.file_utils import ( create_directory, @@ -48,7 +44,7 @@ def run_first_level_search( entity_annotator, embedder: TextEmbedder, config: Dict, - es_client: Elasticsearch, + search_backend, ) -> Optional[Tuple]: main_conditions = keywords.get("main_conditions", []) other_conditions = keywords.get("other_conditions", []) @@ -63,11 +59,9 @@ def run_first_level_search( sex = patient_info.get("gender", "all") overall_status = "All" - index_name = config["elasticsearch"]["index_trials"] cts = ClinicalTrialSearch( - es_client, - embedder, - index_name, + search_backend=search_backend, + embedder=embedder, entity_annotator=entity_annotator, ) @@ -227,25 +221,21 @@ def main_pipeline(config_path: str | None = None) -> int: paths = config["paths"] create_directory(paths["output_dir"]) - es_client = build_elasticsearch_client(config) + search_backend = LanceDBSearchBackend.from_config(config) preflight_issues = run_preflight_checks( config, - es_client=es_client, require_patient_inputs=True, require_trials_json=True, require_models=True, - require_indices=False, + require_search_tables=False, ) if preflight_issues: return 1 - if not ensure_elasticsearch(es_client, config): - return 1 - index_issues = run_preflight_checks( config, - es_client=es_client, - require_indices=True, + search_backend=search_backend, + require_search_tables=True, ) if index_issues: return 1 @@ -304,11 +294,11 @@ def main_pipeline(config_path: str | None = None) -> int: ) gemma_retriever = SecondStageRetriever( - es_client=es_client, + search_backend=search_backend, llm_reranker=llm_reranker, embedder=embedder, - index_name=config["elasticsearch"]["index_trials_eligibility"], entity_annotator=entity_annotator, + search_mode=config["search"].get("mode", "hybrid"), ) # Process phenopackets @@ -357,7 +347,7 @@ def main_pipeline(config_path: str | None = None) -> int: entity_annotator, embedder, config, - es_client, + search_backend, ) if not result: logger.error("First-level search failed for %s", patient_id) diff --git a/source/Matcher/pipeline/trial_search/first_level_search.py b/source/Matcher/pipeline/trial_search/first_level_search.py index 324e2ac7..33e9be05 100644 --- a/source/Matcher/pipeline/trial_search/first_level_search.py +++ b/source/Matcher/pipeline/trial_search/first_level_search.py @@ -3,10 +3,8 @@ from dateutil import parser as date_parser from Matcher.models.embedding.text_embedder import TextEmbedder +from Matcher.search.lancedb_backend import TrialSearchBackend from Matcher.utils.logging_config import setup_logging -from Matcher.utils.retry import with_retries - -from elasticsearch import Elasticsearch logger = setup_logging(__name__) @@ -14,15 +12,13 @@ class ClinicalTrialSearch: def __init__( self, - es_client: Elasticsearch, + search_backend: TrialSearchBackend, embedder: Optional[TextEmbedder], - index_name: str, bio_med_ner=None, entity_annotator=None, ): - self.es_client = es_client + self.search_backend = search_backend self.embedder = embedder - self.index_name = index_name self.entity_annotator = entity_annotator or bio_med_ner def get_synonyms(self, condition: str) -> List[str]: @@ -74,47 +70,6 @@ def parse_age_input(self, age_input: Union[int, str]) -> Optional[int]: pass return None - def get_max_text_score(self, synonyms: List[str]) -> float: - should_clauses = [ - { - "multi_match": { - "query": syn, - "fields": [ - "condition^6", - "eligibility_criteria^4", - "brief_title^3", - "brief_summary^2", - "detailed_description^1.5", - "official_title", - ], - "type": "best_fields", - "operator": "and", - } - } - for syn in synonyms - ] - try: - response = with_retries( - lambda: self.es_client.search( - index=self.index_name, - body={ - "size": 1, - "query": { - "bool": {"should": should_clauses, "minimum_should_match": 0} - }, - "track_total_hits": False, - "_source": False, - }, - ), - logger=logger, - action="ES max_text_score search", - ) - max_score = response["hits"]["max_score"] - return max_score if max_score else 1.0 - except Exception: - logger.exception("Failed to compute max text score; defaulting to 1.0") - return 1.0 - def create_query( self, synonyms: List[str], @@ -128,90 +83,12 @@ def create_query( other_conditions: Optional[List[str]] = None, search_mode: str = "hybrid", ) -> Dict: - sex = sex.upper() - gender_terms = { - "MALE": ["MALE", "Male", "male", "M", "All", "all", "ALL"], - "FEMALE": ["FEMALE", "Female", "female", "F", "All", "all", "ALL"], - "ALL": [ - "All", - "all", - "ALL", - "Both", - "both", - "BOTH", - "FEMALE", - "Female", - "female", - "F", - "MALE", - "Male", - "male", - "M", - ], - }.get(sex, ["All"]) - filters = [] - if age not in [None, "all", "ALL", "All"]: - filters.append( - { - "bool": { - "must": [ - { - "bool": { - "should": [ - {"range": {"minimum_age": {"lte": age}}}, - { - "bool": { - "must_not": { - "exists": {"field": "minimum_age"} - } - } - }, - ] - } - }, - { - "bool": { - "should": [ - {"range": {"maximum_age": {"gte": age}}}, - { - "bool": { - "must_not": { - "exists": {"field": "maximum_age"} - } - } - }, - ] - } - }, - ] - } - } - ) - if overall_status and overall_status.lower() != "all": - filters.append({"match": {"overall_status": overall_status}}) - if pre_selected_nct_ids: - filters.append({"terms": {"nct_id": pre_selected_nct_ids}}) - if gender_terms: - filters.append( - { - "bool": { - "should": [ - {"terms": {"gender": gender_terms}}, - {"bool": {"must_not": {"exists": {"field": "gender"}}}}, - ] - } - } - ) - - # Cap conditions to prevent too many ES clauses (each condition creates 2 clauses) - # ES default maxClauseCount is 1024, leaving room for filters and other clauses max_conditions_per_query = 800 # Conservative limit all_conditions = synonyms + (other_conditions or []) if len(all_conditions) > max_conditions_per_query: logger.warning( - f"Capping search conditions from {len(all_conditions)} to {max_conditions_per_query} to avoid ES clause limit" + f"Capping search conditions from {len(all_conditions)} to {max_conditions_per_query}" ) - # Prioritize synonyms over other_conditions capped_synonyms = synonyms[:max_conditions_per_query] remaining_slots = max_conditions_per_query - len(capped_synonyms) capped_other = ( @@ -222,170 +99,17 @@ def create_query( synonyms = capped_synonyms other_conditions = capped_other - should_clauses = [] - for condition in synonyms + (other_conditions or []): - if condition: - for match_type in ["best_fields", "phrase"]: - multi_match = { - "query": condition, - "fields": [ - "condition^6", - "eligibility_criteria^4", - "brief_title^3", - "brief_summary^2", - "detailed_description^1.5", - "official_title", - ], - "type": match_type, - } - if match_type == "best_fields": - multi_match["operator"] = "and" - should_clauses.append({"multi_match": multi_match}) - - logger.info( - f"Created query with {len(should_clauses)} should clauses for {len(synonyms)} synonyms and {len(other_conditions or [])} other conditions" - ) - - search_mode = (search_mode or "hybrid").lower() - if search_mode == "bm25": - return { - "bool": { - "should": should_clauses, - "minimum_should_match": 0, - "filter": filters, - } - } - - # Prepare vectors for vector/hybrid - query_vectors = [ - embeddings[term] for term in synonyms if term in embeddings and term - ] - other_vectors = [ - embeddings[term] - for term in (other_conditions or []) - if term in embeddings and term - ] - - if search_mode == "vector": - return { - "script_score": { - "query": { - "bool": { - "filter": filters, - } - }, - "script": { - "source": """ - double maxConditionVectorScore = 0.0; - double maxTitleVectorScore = 0.0; - double maxSummaryVectorScore = 0.0; - double maxEligibilityVectorScore = 0.0; - double totalOtherConditionScore = 0.0; - for (int i = 0; i < params.query_vectors.length; ++i) { - maxConditionVectorScore = Math.max(maxConditionVectorScore, cosineSimilarity(params.query_vectors[i], 'condition_vector')); - maxTitleVectorScore = Math.max(maxTitleVectorScore, cosineSimilarity(params.query_vectors[i], 'brief_title_vector')); - maxSummaryVectorScore = Math.max(maxSummaryVectorScore, cosineSimilarity(params.query_vectors[i], 'brief_summary_vector')); - maxEligibilityVectorScore = Math.max(maxEligibilityVectorScore, cosineSimilarity(params.query_vectors[i], 'eligibility_criteria_vector')); - } - int otherConditionCount = params.other_condition_vectors.length; - for (int i = 0; i < otherConditionCount; ++i) { - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'condition_vector'); - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'brief_title_vector'); - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'eligibility_criteria_vector'); - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'brief_summary_vector'); - } - if (otherConditionCount > 0) { - totalOtherConditionScore /= (otherConditionCount * 4); - } - double normalizedConditionScore = (maxConditionVectorScore + 1.0) / 2.0; - double normalizedTitleScore = (maxTitleVectorScore + 1.0) / 2.0; - double normalizedSummaryScore = (maxSummaryVectorScore + 1.0) / 2.0; - double normalizedEligibilityScore = (maxEligibilityVectorScore + 1.0) / 2.0; - double normalizedOtherConditionScore = (totalOtherConditionScore + 1.0) / 2.0; - double combinedVectorScore = ( - 0.3 * normalizedConditionScore + - 0.1 * normalizedTitleScore + - 0.1 * normalizedSummaryScore + - 0.2 * normalizedOtherConditionScore + - 0.3 * normalizedEligibilityScore - ); - if (combinedVectorScore < params.vector_score_threshold) { - return 0; - } - return combinedVectorScore; - """, - "params": { - "query_vectors": query_vectors, - "other_condition_vectors": other_vectors, - "vector_score_threshold": vector_score_threshold, - }, - }, - } - } - - # Hybrid (default) return { - "script_score": { - "query": { - "bool": { - "should": should_clauses, - "minimum_should_match": 0, - "filter": filters, - } - }, - "script": { - "source": """ - double alpha = 0.5; - double beta = 0.5; - double textScore = _score; - double maxTextScore = params.max_text_score; - double normalizedTextScore = (maxTextScore == 0) ? 0 : textScore / maxTextScore; - double maxConditionVectorScore = 0.0; - double maxTitleVectorScore = 0.0; - double maxSummaryVectorScore = 0.0; - double maxEligibilityVectorScore = 0.0; - double totalOtherConditionScore = 0.0; - for (int i = 0; i < params.query_vectors.length; ++i) { - maxConditionVectorScore = Math.max(maxConditionVectorScore, cosineSimilarity(params.query_vectors[i], 'condition_vector')); - maxTitleVectorScore = Math.max(maxTitleVectorScore, cosineSimilarity(params.query_vectors[i], 'brief_title_vector')); - maxSummaryVectorScore = Math.max(maxSummaryVectorScore, cosineSimilarity(params.query_vectors[i], 'brief_summary_vector')); - maxEligibilityVectorScore = Math.max(maxEligibilityVectorScore, cosineSimilarity(params.query_vectors[i], 'eligibility_criteria_vector')); - } - int otherConditionCount = params.other_condition_vectors.length; - for (int i = 0; i < otherConditionCount; ++i) { - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'condition_vector'); - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'brief_title_vector'); - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'eligibility_criteria_vector'); - totalOtherConditionScore += cosineSimilarity(params.other_condition_vectors[i], 'brief_summary_vector'); - } - if (otherConditionCount > 0) { - totalOtherConditionScore /= (otherConditionCount * 4); - } - double normalizedConditionScore = (maxConditionVectorScore + 1.0) / 2.0; - double normalizedTitleScore = (maxTitleVectorScore + 1.0) / 2.0; - double normalizedSummaryScore = (maxSummaryVectorScore + 1.0) / 2.0; - double normalizedEligibilityScore = (maxEligibilityVectorScore + 1.0) / 2.0; - double normalizedOtherConditionScore = (totalOtherConditionScore + 1.0) / 2.0; - double combinedVectorScore = ( - 0.3 * normalizedConditionScore + - 0.1 * normalizedTitleScore + - 0.1 * normalizedSummaryScore + - 0.2 * normalizedOtherConditionScore + - 0.3 * normalizedEligibilityScore - ); - if (combinedVectorScore < params.vector_score_threshold) { - return 0; - } - return alpha * normalizedTextScore + beta * combinedVectorScore; - """, - "params": { - "query_vectors": query_vectors, - "other_condition_vectors": other_vectors, - "max_text_score": max_text_score, - "vector_score_threshold": vector_score_threshold, - }, - }, - } + "primary_terms": synonyms, + "other_terms": other_conditions or [], + "embeddings": embeddings, + "age": age, + "sex": sex, + "overall_status": overall_status, + "pre_selected_nct_ids": pre_selected_nct_ids or [], + "search_mode": search_mode, + "vector_score_threshold": vector_score_threshold, + "max_text_score": max_text_score, } def search_trials( @@ -427,40 +151,34 @@ def search_trials( ) mode = "bm25" - max_text_score = ( - 1.0 if mode == "vector" else self.get_max_text_score(primary_synonyms) - ) query = self.create_query( primary_synonyms, embeddings, age if age is not None else 0, sex, overall_status, - max_text_score, + 1.0, vector_score_threshold, pre_selected_nct_ids, other_conditions, search_mode=mode, ) try: - response = with_retries( - lambda: self.es_client.search( - index=self.index_name, body={"size": size, "query": query} - ), - logger=logger, - action="ES trial search", + trials, scores = self.search_backend.search_trials( + primary_terms=query["primary_terms"], + other_terms=query["other_terms"], + embeddings=query["embeddings"], + age=age, + sex=sex, + overall_status=overall_status, + pre_selected_nct_ids=pre_selected_nct_ids, + size=size, + vector_score_threshold=vector_score_threshold, + search_mode=mode, ) - hits = response["hits"]["hits"] - trials = [hit["_source"] for hit in hits] - scores = [hit["_score"] for hit in hits] except Exception: - logger.exception("Search failed; returning empty results.") + logger.exception("First-level search failed; returning empty results.") return [], [] - trials_with_scores = sorted( - zip(trials, scores), key=lambda x: x[1], reverse=True - ) - top_x_percent_index = int(len(trials_with_scores) * 1.0) - trials = [trial for trial, score in trials_with_scores[:top_x_percent_index]] logger.info( f"[{mode}] Found {len(trials)} trials matching the search criteria." ) diff --git a/source/Matcher/pipeline/trial_search/second_level_search.py b/source/Matcher/pipeline/trial_search/second_level_search.py index ffbd49aa..2c06a607 100644 --- a/source/Matcher/pipeline/trial_search/second_level_search.py +++ b/source/Matcher/pipeline/trial_search/second_level_search.py @@ -5,11 +5,9 @@ from Matcher.models.embedding.text_embedder import TextEmbedder from Matcher.models.llm.llm_reranker import LLMReranker +from Matcher.search.lancedb_backend import TrialSearchBackend from Matcher.utils.file_utils import write_text_file from Matcher.utils.logging_config import setup_logging -from Matcher.utils.retry import with_retries - -from elasticsearch import Elasticsearch logger = setup_logging(__name__) @@ -17,10 +15,9 @@ class SecondStageRetriever: def __init__( self, - es_client: Elasticsearch, + search_backend: TrialSearchBackend, llm_reranker: Optional[LLMReranker], # Make optional embedder: Optional[TextEmbedder], - index_name: str, size: int = 250, inclusion_weight: float = 1.0, exclusion_weight: float = 0.25, @@ -28,10 +25,9 @@ def __init__( entity_annotator=None, search_mode: str = "hybrid", ): - self.es_client = es_client + self.search_backend = search_backend self.llm_reranker = llm_reranker # Can be None self.embedder = embedder - self.index_name = index_name self.size = size self.inclusion_weight = inclusion_weight self.exclusion_weight = exclusion_weight @@ -61,162 +57,35 @@ def retrieve_criteria( query_to_hits = {} def execute_query(query): - # Use entities.synonyms only if entity annotation is enabled. - fields_to_search = ( - ["criterion", "entities.synonyms"] - if self.entity_annotator is not None - else ["criterion"] - ) - - if self.search_mode == "bm25": - # BM25 only query - es_query = { - "bool": { - "should": [ - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "best_fields", - "operator": "and", - } - }, - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "phrase", - } - }, - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "best_fields", - "operator": "or", - } - }, - ], - "minimum_should_match": 1, - "filter": {"terms": {"nct_id": nct_ids}}, - } - } - elif self.search_mode == "vector": - # Vector only query + mode = self.search_mode + query_vector = None + if mode in {"vector", "hybrid"}: if self.embedder is None: logger.warning( - "Vector mode selected but embedder is None. Falling back to BM25." - ) - return execute_query_bm25(query) - - vectors = self.embedder.embed_texts([query]) - if not vectors: - logger.warning( - "Empty query after preprocessing. Falling back to BM25." - ) - return execute_query_bm25(query) - query_vector = vectors[0] - es_query = { - "script_score": { - "query": { - "bool": { - "filter": {"terms": {"nct_id": nct_ids}}, - } - }, - "script": { - "source": """ - double vectorScore = (cosineSimilarity(params.query_vector, 'criterion_vector') + 1.0) / 2.0; - if (vectorScore < params.vector_score_threshold) { - return 0; - } - return vectorScore; - """, - "params": { - "query_vector": query_vector, - "vector_score_threshold": 0.5, - }, - }, - } - } - else: - # Hybrid mode (default) - if self.embedder is None: - logger.warning( - "Hybrid mode selected but embedder is None. Falling back to BM25." - ) - return execute_query_bm25(query) - - vectors = self.embedder.embed_texts([query]) - if not vectors: - logger.warning( - "Empty query after preprocessing. Falling back to BM25." + "%s mode selected but embedder is None. Falling back to BM25.", + mode, ) - return execute_query_bm25(query) - query_vector = vectors[0] - es_query = { - "script_score": { - "query": { - "bool": { - "should": [ - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "best_fields", - "operator": "and", - } - }, - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "phrase", - } - }, - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "best_fields", - "operator": "or", - } - }, - ], - "minimum_should_match": 1, - "filter": {"terms": {"nct_id": nct_ids}}, - } - }, - "script": { - "source": """ - double alpha = 0.5; - double beta = 0.5; - double textScore = _score; - double vectorScore = (cosineSimilarity(params.query_vector, 'criterion_vector') + 1.0) / 2.0; - if (vectorScore < params.vector_score_threshold) { - return 0; - } - return alpha * textScore + beta * vectorScore; - """, - "params": { - "query_vector": query_vector, - "vector_score_threshold": 0.5, - }, - }, - } - } + mode = "bm25" + else: + vectors = self.embedder.embed_texts([query]) + if vectors: + query_vector = vectors[0] + else: + logger.warning("Empty query after preprocessing. Falling back to BM25.") + mode = "bm25" try: - response = with_retries( - lambda: self.es_client.search( - index=self.index_name, body={"size": self.size, "query": es_query} - ), - logger=logger, - action="ES criteria search", + hits = self.search_backend.search_criteria( + query=query, + nct_ids=nct_ids, + query_vector=query_vector, + size=self.size, + search_mode=mode, + use_entity_synonyms=self.entity_annotator is not None, ) - hits = response["hits"]["hits"] logger.info( "[%s] Retrieved %s documents for query: '%s'", - self.search_mode, + mode, len(hits), query, ) @@ -225,60 +94,8 @@ def execute_query(query): logger.exception("Second-level search failed for query: %s", query) return query, [] - def execute_query_bm25(query): - # Helper function for BM25-only fallback. - fields_to_search = ( - ["criterion", "entities.synonyms"] - if self.entity_annotator is not None - else ["criterion"] - ) - es_query = { - "bool": { - "should": [ - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "best_fields", - "operator": "and", - } - }, - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "phrase", - } - }, - { - "multi_match": { - "query": query, - "fields": fields_to_search, - "type": "best_fields", - "operator": "or", - } - }, - ], - "minimum_should_match": 1, - "filter": {"terms": {"nct_id": nct_ids}}, - } - } - try: - response = with_retries( - lambda: self.es_client.search( - index=self.index_name, body={"size": self.size, "query": es_query} - ), - logger=logger, - action="ES criteria bm25 search", - ) - hits = response["hits"]["hits"] - logger.info( - "[bm25] Retrieved %s documents for query: '%s'", len(hits), query - ) - return query, hits - except Exception: - logger.exception("BM25 search failed for query: %s", query) - return query, [] + if not queries: + return {} with ThreadPoolExecutor(max_workers=min(8, len(queries))) as executor: future_to_query = { @@ -291,7 +108,7 @@ def execute_query_bm25(query): def rerank_criteria(self, queries: List[str], criteria: List[Dict]) -> List[Dict]: if self.llm_reranker is None: - logger.warning("LLM reranker not available, using ES scores only") + logger.warning("LLM reranker not available, using search scores only") return self.score_criteria_without_llm(criteria) pairs = [ @@ -393,11 +210,11 @@ def retrieve_and_rank( else: if use_reranker and self.llm_reranker is None: logger.info( - "Reranking requested but LLM reranker not available; using ES scores for aggregation." + "Reranking requested but LLM reranker not available; using search scores for aggregation." ) else: logger.info( - "Second-level reranking disabled; using ES scores for aggregation." + "Second-level reranking disabled; using search scores for aggregation." ) ranked_criteria = self.score_criteria_without_llm(all_criteria) diff --git a/source/Matcher/search/__init__.py b/source/Matcher/search/__init__.py new file mode 100644 index 00000000..e086f34d --- /dev/null +++ b/source/Matcher/search/__init__.py @@ -0,0 +1,15 @@ +from Matcher.search.lancedb_backend import ( + InMemorySearchBackend, + LanceDBSearchBackend, + SearchBackendUnavailable, + build_criteria_record, + build_trial_record, +) + +__all__ = [ + "InMemorySearchBackend", + "LanceDBSearchBackend", + "SearchBackendUnavailable", + "build_criteria_record", + "build_trial_record", +] diff --git a/source/Matcher/search/lancedb_backend.py b/source/Matcher/search/lancedb_backend.py new file mode 100644 index 00000000..0d4bda85 --- /dev/null +++ b/source/Matcher/search/lancedb_backend.py @@ -0,0 +1,781 @@ +from __future__ import annotations + +import math +import re +from dataclasses import dataclass +from pathlib import Path +from typing import Any, Iterable, Mapping, Protocol, Sequence + +from Matcher.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +TRIAL_TEXT_WEIGHTS: tuple[tuple[str, float], ...] = ( + ("condition", 6.0), + ("eligibility_criteria", 4.0), + ("brief_title", 3.0), + ("brief_summary", 2.0), + ("detailed_description", 1.5), + ("official_title", 1.0), +) +TRIAL_VECTOR_WEIGHTS: tuple[tuple[str, float], ...] = ( + ("condition_vector", 0.3), + ("brief_title_vector", 0.1), + ("brief_summary_vector", 0.1), + ("eligibility_criteria_vector", 0.3), +) +CRITERIA_TEXT_WEIGHTS: tuple[tuple[str, float], ...] = ( + ("criterion", 1.0), + ("entity_synonyms_text", 1.2), + ("entity_text", 0.8), +) + + +@dataclass(frozen=True) +class SearchHit: + source: dict[str, Any] + score: float + + def to_es_like_hit(self) -> dict[str, Any]: + return {"_source": self.source, "_score": self.score} + + +class SearchBackendUnavailable(RuntimeError): + pass + + +class TrialSearchBackend(Protocol): + def search_trials( + self, + *, + primary_terms: Sequence[str], + other_terms: Sequence[str] = (), + embeddings: Mapping[str, Sequence[float]] | None = None, + age: int | None = None, + sex: str = "ALL", + overall_status: str | None = None, + pre_selected_nct_ids: Sequence[str] | None = None, + size: int = 10, + vector_score_threshold: float = 0.0, + search_mode: str = "hybrid", + ) -> tuple[list[dict[str, Any]], list[float]]: + ... + + def search_criteria( + self, + *, + query: str, + nct_ids: Sequence[str], + query_vector: Sequence[float] | None = None, + size: int = 250, + search_mode: str = "hybrid", + use_entity_synonyms: bool = True, + vector_score_threshold: float = 0.5, + ) -> list[dict[str, Any]]: + ... + + +class InMemorySearchBackend: + """Deterministic backend used for tests and small fixture smoke runs.""" + + def __init__( + self, + *, + trials: Sequence[Mapping[str, Any]] = (), + criteria: Sequence[Mapping[str, Any]] = (), + ) -> None: + self.trials = [build_trial_record(row) for row in trials] + self.criteria = [build_criteria_record(row) for row in criteria] + + def health(self, *, require_tables: bool = False) -> list[str]: + return [] + + def search_trials( + self, + *, + primary_terms: Sequence[str], + other_terms: Sequence[str] = (), + embeddings: Mapping[str, Sequence[float]] | None = None, + age: int | None = None, + sex: str = "ALL", + overall_status: str | None = None, + pre_selected_nct_ids: Sequence[str] | None = None, + size: int = 10, + vector_score_threshold: float = 0.0, + search_mode: str = "hybrid", + ) -> tuple[list[dict[str, Any]], list[float]]: + hits = _rank_trial_rows( + self.trials, + primary_terms=primary_terms, + other_terms=other_terms, + embeddings=embeddings or {}, + age=age, + sex=sex, + overall_status=overall_status, + pre_selected_nct_ids=pre_selected_nct_ids, + size=size, + vector_score_threshold=vector_score_threshold, + search_mode=search_mode, + ) + return [hit.source for hit in hits], [hit.score for hit in hits] + + def search_criteria( + self, + *, + query: str, + nct_ids: Sequence[str], + query_vector: Sequence[float] | None = None, + size: int = 250, + search_mode: str = "hybrid", + use_entity_synonyms: bool = True, + vector_score_threshold: float = 0.5, + ) -> list[dict[str, Any]]: + hits = _rank_criteria_rows( + self.criteria, + query=query, + nct_ids=nct_ids, + query_vector=query_vector, + size=size, + search_mode=search_mode, + use_entity_synonyms=use_entity_synonyms, + vector_score_threshold=vector_score_threshold, + ) + return [hit.to_es_like_hit() for hit in hits] + + +class LanceDBSearchBackend: + """Embedded LanceDB backend for TrialMatchAI trial and criteria retrieval.""" + + def __init__( + self, + db_path: str | Path, + *, + trials_table: str = "trials", + criteria_table: str = "criteria", + candidate_limit: int = 1000, + ) -> None: + try: + import lancedb # type: ignore + except Exception as exc: # pragma: no cover - optional dependency guard + raise SearchBackendUnavailable( + "LanceDB search requires the runtime dependency `lancedb`." + ) from exc + + self.db_path = Path(db_path) + self.trials_table = trials_table + self.criteria_table = criteria_table + self.candidate_limit = candidate_limit + self.db_path.mkdir(parents=True, exist_ok=True) + self.db = lancedb.connect(str(self.db_path)) + + @classmethod + def from_config(cls, config: Mapping[str, Any]) -> "LanceDBSearchBackend": + search_cfg = config.get("search_backend", {}) + backend = search_cfg.get("backend", "lancedb") + if backend != "lancedb": + raise ValueError(f"Unsupported search backend: {backend}") + return cls( + search_cfg.get("db_path", "data/search"), + trials_table=search_cfg.get("trials_table", "trials"), + criteria_table=search_cfg.get("criteria_table", "criteria"), + candidate_limit=int(search_cfg.get("candidate_limit", 1000)), + ) + + def health(self, *, require_tables: bool = False) -> list[str]: + issues: list[str] = [] + if not self.db_path.exists(): + issues.append(f"search_backend.db_path does not exist: {self.db_path}") + return issues + if require_tables: + names = set(self._table_names()) + missing = [ + name + for name in (self.trials_table, self.criteria_table) + if name not in names + ] + if missing: + issues.append("Missing LanceDB tables: " + ", ".join(missing)) + return issues + + def table_exists(self, table_name: str) -> bool: + return table_name in set(self._table_names()) + + def index_trials( + self, + docs: Sequence[Mapping[str, Any]], + *, + recreate: bool = True, + ) -> int: + rows = [build_trial_record(doc) for doc in docs] + table = self._write_rows(self.trials_table, rows, recreate=recreate) + _create_fts_index(table, "search_text") + _create_vector_index(table, "search_vector") + return len(rows) + + def index_criteria( + self, + docs: Sequence[Mapping[str, Any]], + *, + recreate: bool = True, + ) -> int: + rows = [build_criteria_record(doc) for doc in docs] + table = self._write_rows(self.criteria_table, rows, recreate=recreate) + _create_fts_index(table, "search_text") + _create_vector_index(table, "criterion_vector") + return len(rows) + + def search_trials( + self, + *, + primary_terms: Sequence[str], + other_terms: Sequence[str] = (), + embeddings: Mapping[str, Sequence[float]] | None = None, + age: int | None = None, + sex: str = "ALL", + overall_status: str | None = None, + pre_selected_nct_ids: Sequence[str] | None = None, + size: int = 10, + vector_score_threshold: float = 0.0, + search_mode: str = "hybrid", + ) -> tuple[list[dict[str, Any]], list[float]]: + table = self._open_table(self.trials_table) + where = _nct_where(pre_selected_nct_ids) + vector = _mean_vectors( + [ + embeddings[term] + for term in primary_terms + if embeddings and term in embeddings + ] + ) + rows = self._candidate_rows( + table, + text_query=" ".join([*primary_terms, *other_terms]), + query_vector=vector, + vector_column="search_vector", + where=where, + mode=search_mode, + limit=max(size, self.candidate_limit), + ) + hits = _rank_trial_rows( + rows, + primary_terms=primary_terms, + other_terms=other_terms, + embeddings=embeddings or {}, + age=age, + sex=sex, + overall_status=overall_status, + pre_selected_nct_ids=pre_selected_nct_ids, + size=size, + vector_score_threshold=vector_score_threshold, + search_mode=search_mode, + ) + return [hit.source for hit in hits], [hit.score for hit in hits] + + def search_criteria( + self, + *, + query: str, + nct_ids: Sequence[str], + query_vector: Sequence[float] | None = None, + size: int = 250, + search_mode: str = "hybrid", + use_entity_synonyms: bool = True, + vector_score_threshold: float = 0.5, + ) -> list[dict[str, Any]]: + table = self._open_table(self.criteria_table) + where = _nct_where(nct_ids) + rows = self._candidate_rows( + table, + text_query=query, + query_vector=query_vector, + vector_column="criterion_vector", + where=where, + mode=search_mode, + limit=max(size, self.candidate_limit), + ) + hits = _rank_criteria_rows( + rows, + query=query, + nct_ids=nct_ids, + query_vector=query_vector, + size=size, + search_mode=search_mode, + use_entity_synonyms=use_entity_synonyms, + vector_score_threshold=vector_score_threshold, + ) + return [hit.to_es_like_hit() for hit in hits] + + def _write_rows( + self, + table_name: str, + rows: Sequence[dict[str, Any]], + *, + recreate: bool, + ) -> Any: + if not rows: + raise ValueError(f"No rows supplied for LanceDB table {table_name}.") + if recreate or not self.table_exists(table_name): + return self.db.create_table(table_name, data=list(rows), mode="overwrite") + table = self._open_table(table_name) + table.add(list(rows)) + return table + + def _candidate_rows( + self, + table: Any, + *, + text_query: str, + query_vector: Sequence[float] | None, + vector_column: str, + where: str, + mode: str, + limit: int, + ) -> list[dict[str, Any]]: + mode = (mode or "hybrid").lower() + rows_by_key: dict[str, dict[str, Any]] = {} + + if mode in {"bm25", "hybrid"} and text_query.strip(): + for row in self._search_fts(table, text_query, where=where, limit=limit): + rows_by_key[_row_key(row)] = row + + if mode in {"vector", "hybrid"} and query_vector: + for row in self._search_vector( + table, + query_vector, + vector_column=vector_column, + where=where, + limit=limit, + ): + rows_by_key[_row_key(row)] = row + + if not rows_by_key: + for row in self._scan_rows(table, limit=limit): + rows_by_key[_row_key(row)] = row + + return list(rows_by_key.values()) + + def _search_fts( + self, + table: Any, + query: str, + *, + where: str, + limit: int, + ) -> list[dict[str, Any]]: + try: + search = table.search(query, query_type="fts") + if where: + search = search.where(where) + return list(search.limit(limit).to_list()) + except Exception as exc: + logger.warning("LanceDB FTS search failed; falling back if possible: %s", exc) + return [] + + def _search_vector( + self, + table: Any, + vector: Sequence[float], + *, + vector_column: str, + where: str, + limit: int, + ) -> list[dict[str, Any]]: + try: + search = table.search(list(vector), vector_column_name=vector_column) + if where: + search = search.where(where) + return list(search.limit(limit).to_list()) + except Exception as exc: + logger.warning( + "LanceDB vector search failed; falling back if possible: %s", exc + ) + return [] + + def _scan_rows(self, table: Any, *, limit: int) -> list[dict[str, Any]]: + try: + return list(table.to_arrow().to_pylist())[:limit] + except Exception as exc: + logger.warning("Could not scan LanceDB table rows: %s", exc) + return [] + + def _open_table(self, table_name: str) -> Any: + try: + return self.db.open_table(table_name) + except Exception as exc: + raise SearchBackendUnavailable( + f"LanceDB table is not available: {table_name}" + ) from exc + + def _table_names(self) -> list[str]: + try: + return list(self.db.table_names()) + except Exception as exc: + logger.warning("Could not list LanceDB tables: %s", exc) + return [] + + +def build_trial_record(doc: Mapping[str, Any]) -> dict[str, Any]: + row = dict(doc) + search_text = _flatten_text( + [ + row.get("condition"), + row.get("eligibility_criteria"), + row.get("brief_title"), + row.get("brief_summary"), + row.get("detailed_description"), + row.get("official_title"), + ] + ) + row["search_text"] = search_text + row["search_vector"] = _mean_vectors( + _clean_vector(row.get(field)) for field, _ in TRIAL_VECTOR_WEIGHTS + ) + return row + + +def build_criteria_record(doc: Mapping[str, Any]) -> dict[str, Any]: + row = dict(doc) + entity_text, synonym_text = _flatten_entities(row.get("entities")) + row["entity_text"] = entity_text + row["entity_synonyms_text"] = synonym_text + row["search_text"] = _flatten_text( + [row.get("criterion"), entity_text, synonym_text] + ) + return row + + +def _rank_trial_rows( + rows: Sequence[Mapping[str, Any]], + *, + primary_terms: Sequence[str], + other_terms: Sequence[str], + embeddings: Mapping[str, Sequence[float]], + age: int | None, + sex: str, + overall_status: str | None, + pre_selected_nct_ids: Sequence[str] | None, + size: int, + vector_score_threshold: float, + search_mode: str, +) -> list[SearchHit]: + mode = (search_mode or "hybrid").lower() + hits: list[SearchHit] = [] + for raw in rows: + row = build_trial_record(raw) + if not _trial_passes_filters( + row, + age=age, + sex=sex, + overall_status=overall_status, + pre_selected_nct_ids=pre_selected_nct_ids, + ): + continue + text_score = _weighted_text_score(row, primary_terms, TRIAL_TEXT_WEIGHTS) + if other_terms: + text_score = max( + text_score, + 0.75 * _weighted_text_score(row, other_terms, TRIAL_TEXT_WEIGHTS), + ) + vector_score = _trial_vector_score(row, primary_terms, other_terms, embeddings) + if mode in {"vector", "hybrid"} and vector_score < vector_score_threshold: + continue + score = _combine_scores(mode, text_score, vector_score) + if score <= 0: + continue + hits.append(SearchHit(source=row, score=score)) + hits.sort(key=lambda hit: hit.score, reverse=True) + return hits[:size] + + +def _rank_criteria_rows( + rows: Sequence[Mapping[str, Any]], + *, + query: str, + nct_ids: Sequence[str], + query_vector: Sequence[float] | None, + size: int, + search_mode: str, + use_entity_synonyms: bool, + vector_score_threshold: float, +) -> list[SearchHit]: + allowed = {nct_id for nct_id in nct_ids if nct_id} + mode = (search_mode or "hybrid").lower() + fields = ( + CRITERIA_TEXT_WEIGHTS + if use_entity_synonyms + else tuple(item for item in CRITERIA_TEXT_WEIGHTS if item[0] == "criterion") + ) + hits: list[SearchHit] = [] + for raw in rows: + row = build_criteria_record(raw) + if allowed and row.get("nct_id") not in allowed: + continue + text_score = _weighted_text_score(row, [query], fields) + vector_score = _vector_score(query_vector, _clean_vector(row.get("criterion_vector"))) + if mode in {"vector", "hybrid"} and vector_score < vector_score_threshold: + continue + score = _combine_scores(mode, text_score, vector_score) + if score <= 0: + continue + hits.append(SearchHit(source=row, score=score)) + hits.sort(key=lambda hit: hit.score, reverse=True) + return hits[:size] + + +def _combine_scores(mode: str, text_score: float, vector_score: float) -> float: + if mode == "bm25": + return text_score + if mode == "vector": + return vector_score + return 0.5 * text_score + 0.5 * vector_score + + +def _weighted_text_score( + row: Mapping[str, Any], + terms: Sequence[str], + fields: Sequence[tuple[str, float]], +) -> float: + clean_terms = [term for term in terms if term and term.strip()] + if not clean_terms: + return 0.0 + max_weight = sum(weight for _, weight in fields) or 1.0 + best = 0.0 + for term in clean_terms: + field_score = 0.0 + for field, weight in fields: + field_score += weight * _lexical_score(term, _flatten_text(row.get(field))) + best = max(best, field_score / max_weight) + return min(best, 1.0) + + +def _trial_vector_score( + row: Mapping[str, Any], + primary_terms: Sequence[str], + other_terms: Sequence[str], + embeddings: Mapping[str, Sequence[float]], +) -> float: + primary_vectors = [ + embeddings[term] for term in primary_terms if term in embeddings and embeddings[term] + ] + other_vectors = [ + embeddings[term] for term in other_terms if term in embeddings and embeddings[term] + ] + score = 0.0 + weight_total = 0.0 + for field, weight in TRIAL_VECTOR_WEIGHTS: + field_vector = _clean_vector(row.get(field)) + if not field_vector: + continue + score += weight * _max_vector_score(primary_vectors, field_vector) + weight_total += weight + if other_vectors: + other_field_scores: list[float] = [] + for field, _ in TRIAL_VECTOR_WEIGHTS: + field_vector = _clean_vector(row.get(field)) + if field_vector: + other_field_scores.append(_max_vector_score(other_vectors, field_vector)) + if other_field_scores: + score += 0.2 * (sum(other_field_scores) / len(other_field_scores)) + weight_total += 0.2 + if weight_total == 0: + return 0.0 + return min(score / weight_total, 1.0) + + +def _max_vector_score( + query_vectors: Sequence[Sequence[float]], + field_vector: Sequence[float], +) -> float: + if not query_vectors or not field_vector: + return 0.0 + return max(_vector_score(vector, field_vector) for vector in query_vectors) + + +def _vector_score( + left: Sequence[float] | None, + right: Sequence[float] | None, +) -> float: + if not left or not right: + return 0.0 + similarity = _cosine(left, right) + return max(0.0, min(1.0, (similarity + 1.0) / 2.0)) + + +def _cosine(left: Sequence[float], right: Sequence[float]) -> float: + size = min(len(left), len(right)) + if size == 0: + return 0.0 + dot = sum(float(left[i]) * float(right[i]) for i in range(size)) + left_norm = math.sqrt(sum(float(left[i]) ** 2 for i in range(size))) + right_norm = math.sqrt(sum(float(right[i]) ** 2 for i in range(size))) + if left_norm == 0 or right_norm == 0: + return 0.0 + return dot / (left_norm * right_norm) + + +def _lexical_score(query: str, text: str) -> float: + query_norm = _normalize_text(query) + text_norm = _normalize_text(text) + if not query_norm or not text_norm: + return 0.0 + if query_norm == text_norm: + return 1.0 + if query_norm in text_norm: + return 0.95 + query_tokens = set(query_norm.split()) + text_tokens = set(text_norm.split()) + if not query_tokens or not text_tokens: + return 0.0 + overlap = len(query_tokens & text_tokens) + if overlap == 0: + return 0.0 + coverage = overlap / len(query_tokens) + jaccard = overlap / len(query_tokens | text_tokens) + return min(1.0, 0.75 * coverage + 0.25 * jaccard) + + +def _trial_passes_filters( + row: Mapping[str, Any], + *, + age: int | None, + sex: str, + overall_status: str | None, + pre_selected_nct_ids: Sequence[str] | None, +) -> bool: + if pre_selected_nct_ids and row.get("nct_id") not in set(pre_selected_nct_ids): + return False + if overall_status and overall_status.casefold() != "all": + status = str(row.get("overall_status") or "") + if status.casefold() != overall_status.casefold(): + return False + if age is not None: + minimum = _as_float(row.get("minimum_age")) + maximum = _as_float(row.get("maximum_age")) + if minimum is not None and minimum > age: + return False + if maximum is not None and maximum < age: + return False + return _gender_matches(row.get("gender"), sex) + + +def _gender_matches(value: Any, sex: str) -> bool: + requested = (sex or "ALL").casefold() + raw = str(value or "All").casefold() + if requested in {"all", "both"}: + return True + if raw in {"", "all", "both"}: + return True + if requested == "male": + return raw in {"male", "m"} + if requested == "female": + return raw in {"female", "f"} + return True + + +def _flatten_entities(entities: Any) -> tuple[str, str]: + if not isinstance(entities, list): + return "", "" + texts: list[str] = [] + synonyms: list[str] = [] + for entity in entities: + if not isinstance(entity, Mapping): + continue + texts.append(_flatten_text([entity.get("text"), entity.get("entity")])) + synonyms.append(_flatten_text(entity.get("synonyms"))) + for candidate in entity.get("concept_candidates") or []: + if isinstance(candidate, Mapping): + synonyms.append(_flatten_text(candidate.get("concept_name"))) + return _flatten_text(texts), _flatten_text(synonyms) + + +def _flatten_text(value: Any) -> str: + if value is None: + return "" + if isinstance(value, str): + return " ".join(value.split()) + if isinstance(value, Mapping): + return " ".join(_flatten_text(item) for item in value.values()).strip() + if isinstance(value, Iterable) and not isinstance(value, (bytes, bytearray)): + return " ".join(_flatten_text(item) for item in value).strip() + return str(value) + + +def _normalize_text(value: str) -> str: + return " ".join(re.findall(r"[a-z0-9]+", value.casefold())) + + +def _clean_vector(value: Any) -> list[float]: + if value is None: + return [] + if hasattr(value, "tolist"): + value = value.tolist() + if not isinstance(value, Sequence) or isinstance(value, (str, bytes, bytearray)): + return [] + try: + return [float(item) for item in value] + except (TypeError, ValueError): + return [] + + +def _mean_vectors(vectors: Iterable[Sequence[float] | None]) -> list[float]: + cleaned = [_clean_vector(vector) for vector in vectors] + cleaned = [vector for vector in cleaned if vector] + if not cleaned: + return [] + width = min(len(vector) for vector in cleaned) + if width == 0: + return [] + return [ + sum(vector[index] for vector in cleaned) / len(cleaned) + for index in range(width) + ] + + +def _as_float(value: Any) -> float | None: + if value is None or value == "": + return None + try: + return float(value) + except (TypeError, ValueError): + return None + + +def _nct_where(nct_ids: Sequence[str] | None) -> str: + values = [str(item) for item in (nct_ids or []) if item] + if not values: + return "" + quoted = ", ".join(f"'{_sql_escape(value)}'" for value in values) + return f"nct_id IN ({quoted})" + + +def _sql_escape(value: str) -> str: + return value.replace("'", "''") + + +def _row_key(row: Mapping[str, Any]) -> str: + return str(row.get("criteria_id") or row.get("nct_id") or id(row)) + + +def _create_fts_index(table: Any, column: str) -> None: + try: + table.create_fts_index(column, replace=True) + except TypeError: + try: + table.create_fts_index(column) + except Exception as exc: + logger.warning("Could not create LanceDB FTS index on %s: %s", column, exc) + except Exception as exc: + logger.warning("Could not create LanceDB FTS index on %s: %s", column, exc) + + +def _create_vector_index(table: Any, column: str) -> None: + try: + table.create_index(vector_column_name=column, metric="cosine") + except TypeError: + try: + table.create_index(column) + except Exception as exc: + logger.warning("Could not create LanceDB vector index on %s: %s", column, exc) + except Exception as exc: + logger.warning("Could not create LanceDB vector index on %s: %s", column, exc) diff --git a/source/Matcher/services/elasticsearch_service.py b/source/Matcher/services/elasticsearch_service.py deleted file mode 100644 index 09cdcfbb..00000000 --- a/source/Matcher/services/elasticsearch_service.py +++ /dev/null @@ -1,95 +0,0 @@ -from __future__ import annotations - -import os -import shutil -import subprocess -import time -from pathlib import Path -from typing import Any, Dict - -from elasticsearch import Elasticsearch - -from Matcher.utils.logging_config import setup_logging - -logger = setup_logging(__name__) - - -def build_elasticsearch_client(config: Dict[str, Any]) -> Elasticsearch: - es_cfg = config["elasticsearch"] - paths = config.get("paths", {}) - kwargs: dict[str, Any] = { - "hosts": [es_cfg["host"]], - "basic_auth": (es_cfg["username"], es_cfg["password"]), - "request_timeout": es_cfg["request_timeout"], - "retry_on_timeout": es_cfg["retry_on_timeout"], - } - ca_certs = paths.get("docker_certs") - if ca_certs and Path(ca_certs).exists(): - kwargs["ca_certs"] = ca_certs - return Elasticsearch(**kwargs) - - -def ensure_elasticsearch(es_client: Any, config: Dict[str, Any]) -> bool: - if _ping(es_client): - return True - - es_cfg = config.get("elasticsearch", {}) - auto_start = bool(es_cfg.get("auto_start", False)) - if not auto_start: - logger.error( - "Elasticsearch is not reachable at %s and auto_start is disabled.", - es_cfg.get("host"), - ) - return False - - script_path = es_cfg.get("start_script", "elasticsearch/apptainer-run-es.sh") - timeout = int(es_cfg.get("start_timeout", 600)) - script = _resolve_repo_path(script_path) - - if not script.exists(): - logger.error("Elasticsearch start script not found: %s", script) - return False - - if shutil.which("apptainer") is None: - logger.error("Apptainer is not available in PATH.") - return False - - logger.info("Starting Elasticsearch via Apptainer script: %s", script) - try: - subprocess.run( - ["bash", str(script)], - cwd=str(script.parent), - check=True, - timeout=timeout, - env=os.environ.copy(), - ) - except subprocess.TimeoutExpired: - logger.error("Elasticsearch start timed out after %s seconds.", timeout) - return False - except subprocess.CalledProcessError as exc: - logger.error("Elasticsearch start failed: %s", exc) - return False - - return _wait_for_es(es_client, timeout=60) - - -def _ping(es_client: Any) -> bool: - try: - return bool(es_client.ping()) - except Exception: - return False - - -def _wait_for_es(es_client: Any, timeout: int = 60) -> bool: - deadline = time.time() + timeout - while time.time() < deadline: - if _ping(es_client): - return True - time.sleep(5) - logger.error("Elasticsearch did not become available within %s seconds.", timeout) - return False - - -def _resolve_repo_path(relative_path: str) -> Path: - root = Path(__file__).resolve().parents[3] - return (root / relative_path).resolve() diff --git a/source/Matcher/services/preflight.py b/source/Matcher/services/preflight.py index 57273448..2e52a53c 100644 --- a/source/Matcher/services/preflight.py +++ b/source/Matcher/services/preflight.py @@ -2,7 +2,7 @@ import importlib.util from pathlib import Path -from typing import Any, Dict, Iterable, List +from typing import Any, Dict, List import torch @@ -14,11 +14,11 @@ def run_preflight_checks( config: Dict[str, Any], *, - es_client: Any | None = None, + search_backend: Any | None = None, require_patient_inputs: bool = False, require_trials_json: bool = False, require_models: bool = False, - require_indices: bool = False, + require_search_tables: bool = False, ) -> List[str]: """Return blocking deployment/runtime issues discovered before heavy startup.""" issues: List[str] = [] @@ -38,15 +38,6 @@ def run_preflight_checks( ) _require_output_dir(issues, paths.get("output_dir")) - host = str(config.get("elasticsearch", {}).get("host", "")) - if host.startswith("https://"): - _require_path( - issues, - "paths.docker_certs", - paths.get("docker_certs"), - required=True, - ) - if require_models: entity_cfg = config.get("entity_extraction") if entity_cfg: @@ -98,21 +89,28 @@ def run_preflight_checks( if not torch.cuda.is_available(): issues.append("cot_backend=vllm requires a CUDA-capable runtime.") - if es_client is not None: - if not _ping(es_client): - issues.append( - f"Elasticsearch is not reachable at {config['elasticsearch']['host']}." - ) - elif require_indices: - missing = _missing_indices( - es_client, - [ - config["elasticsearch"]["index_trials"], - config["elasticsearch"]["index_trials_eligibility"], - ], - ) - if missing: - issues.append("Missing Elasticsearch indices: " + ", ".join(missing)) + search_cfg = config.get("search_backend", {}) + if search_cfg: + _require_path( + issues, + "search_backend.db_path", + search_cfg.get("db_path"), + required=require_search_tables, + ) + if require_search_tables: + if search_backend is None: + try: + from Matcher.search import LanceDBSearchBackend + + search_backend = LanceDBSearchBackend.from_config(config) + except Exception as exc: + issues.append(f"Search backend is not available: {exc}") + search_backend = None + if search_backend is not None: + if hasattr(search_backend, "health"): + issues.extend(search_backend.health(require_tables=True)) + else: + issues.append("Search backend does not expose a healthcheck.") for issue in issues: logger.error("Preflight: %s", issue) @@ -146,22 +144,3 @@ def _require_output_dir(issues: List[str], value: str | None) -> None: path.mkdir(parents=True, exist_ok=True) except OSError as exc: issues.append(f"paths.output_dir is not writable: {path} ({exc})") - - -def _ping(es_client: Any) -> bool: - try: - return bool(es_client.ping()) - except Exception: - return False - - -def _missing_indices(es_client: Any, names: Iterable[str]) -> list[str]: - missing: list[str] = [] - for name in names: - try: - if not es_client.indices.exists(index=name): - missing.append(name) - except Exception as exc: - logger.warning("Could not check Elasticsearch index %s: %s", name, exc) - missing.append(name) - return missing diff --git a/tests/test_config_pytest.py b/tests/test_config_pytest.py index 5d723e2a..36b08061 100644 --- a/tests/test_config_pytest.py +++ b/tests/test_config_pytest.py @@ -6,6 +6,6 @@ def test_load_config_from_repo(): config_path = Path(__file__).resolve().parents[1] / "source/Matcher/config/config.json" cfg = load_config(str(config_path)) - assert "elasticsearch" in cfg + assert cfg["search_backend"]["backend"] == "lancedb" assert "embedder" in cfg assert "paths" in cfg diff --git a/tests/test_deployment_readiness.py b/tests/test_deployment_readiness.py index 2ecb35da..052fc534 100644 --- a/tests/test_deployment_readiness.py +++ b/tests/test_deployment_readiness.py @@ -11,20 +11,22 @@ def test_default_config_resolution_from_repo_root(): assert path.as_posix().endswith("source/Matcher/config/config.json") -def test_config_env_overrides_and_standard_index_names(monkeypatch): - monkeypatch.setenv("TRIALMATCHAI_ES_HOST", "https://es.example.test:9200") - monkeypatch.setenv("TRIALMATCHAI_ES_PASSWORD", "secret-from-env") - monkeypatch.setenv("TRIALMATCHAI_INDEX_TRIALS_ELIGIBILITY", "trials_eligibility") +def test_config_env_overrides_and_search_tables(monkeypatch): + monkeypatch.setenv("TRIALMATCHAI_SEARCH_DB_PATH", "data/search-test") + monkeypatch.setenv("TRIALMATCHAI_SEARCH_TRIALS_TABLE", "trials-test") + monkeypatch.setenv("TRIALMATCHAI_SEARCH_CRITERIA_TABLE", "criteria-test") + monkeypatch.setenv("TRIALMATCHAI_SEARCH_MODE", "bm25") monkeypatch.setenv("TRIALMATCHAI_ENTITY_BACKEND", "regex") monkeypatch.setenv("TRIALMATCHAI_CONCEPT_DB_PATH", "data/concepts-test") monkeypatch.setenv("TRIALMATCHAI_LINK_ACCEPT", "0.9") cfg = load_config() - assert cfg["elasticsearch"]["host"] == "https://es.example.test:9200" - assert cfg["elasticsearch"]["password"] == "secret-from-env" - assert cfg["elasticsearch"]["index_trials"] == "clinical_trials" - assert cfg["elasticsearch"]["index_trials_eligibility"] == "trials_eligibility" + assert cfg["search_backend"]["backend"] == "lancedb" + assert cfg["search_backend"]["db_path"].endswith("data/search-test") + assert cfg["search_backend"]["trials_table"] == "trials-test" + assert cfg["search_backend"]["criteria_table"] == "criteria-test" + assert cfg["search"]["mode"] == "bm25" assert cfg["entity_extraction"]["backend"] == "regex" assert cfg["concept_linker"]["db_path"].endswith("data/concepts-test") assert cfg["concept_linker"]["accept_threshold"] == 0.9 diff --git a/tests/test_first_level_search_pytest.py b/tests/test_first_level_search_pytest.py index f03593c9..d6ed7454 100644 --- a/tests/test_first_level_search_pytest.py +++ b/tests/test_first_level_search_pytest.py @@ -1,18 +1,32 @@ from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch - - -class DummyES: - def search(self, index, body): - if body.get("track_total_hits") is False: - return {"hits": {"max_score": 2.0}} - return {"hits": {"hits": [{"_source": {"nct_id": "N1"}, "_score": 1.0}]}} +from Matcher.search import InMemorySearchBackend def test_search_trials_bm25_returns_hits(): + backend = InMemorySearchBackend( + trials=[ + { + "nct_id": "N1", + "condition": "lung cancer", + "brief_title": "Lung carcinoma treatment", + "eligibility_criteria": "Adults with lung cancer", + "minimum_age": 18, + "maximum_age": 80, + "gender": "All", + "overall_status": "Recruiting", + }, + { + "nct_id": "N2", + "condition": "diabetes mellitus", + "brief_title": "Diabetes lifestyle trial", + "eligibility_criteria": "Adults with diabetes", + "overall_status": "Recruiting", + }, + ] + ) search = ClinicalTrialSearch( - es_client=DummyES(), + search_backend=backend, embedder=None, - index_name="index", bio_med_ner=None, ) trials, scores = search.search_trials( @@ -24,4 +38,5 @@ def test_search_trials_bm25_returns_hits(): search_mode="bm25", ) assert len(trials) == 1 - assert scores == [1.0] + assert trials[0]["nct_id"] == "N1" + assert scores[0] > 0 diff --git a/tests/test_integration_es_pytest.py b/tests/test_integration_es_pytest.py deleted file mode 100644 index 97d72300..00000000 --- a/tests/test_integration_es_pytest.py +++ /dev/null @@ -1,23 +0,0 @@ -import os - -import pytest -from elasticsearch import Elasticsearch - -from Matcher.config.config_loader import load_config - - -@pytest.mark.integration -def test_elasticsearch_ping(): - if os.getenv("TRIALMATCHAI_RUN_INTEGRATION") != "1": - pytest.skip("Set TRIALMATCHAI_RUN_INTEGRATION=1 to enable integration tests.") - - cfg = load_config("Matcher/config/config.json") - es_cfg = cfg["elasticsearch"] - client = Elasticsearch( - hosts=[es_cfg["host"]], - ca_certs=cfg["paths"]["docker_certs"], - basic_auth=(es_cfg["username"], es_cfg["password"]), - request_timeout=es_cfg["request_timeout"], - retry_on_timeout=es_cfg["retry_on_timeout"], - ) - assert client.ping() diff --git a/tests/test_lancedb_search_backend.py b/tests/test_lancedb_search_backend.py new file mode 100644 index 00000000..bf111b37 --- /dev/null +++ b/tests/test_lancedb_search_backend.py @@ -0,0 +1,75 @@ +from __future__ import annotations + +import pytest + +from Matcher.search import LanceDBSearchBackend + + +pytest.importorskip("lancedb") + + +def test_lancedb_backend_indexes_and_searches_trials_and_criteria(tmp_path): + backend = LanceDBSearchBackend( + tmp_path / "search", + trials_table="trials", + criteria_table="criteria", + candidate_limit=25, + ) + + backend.index_trials( + [ + { + "nct_id": "N1", + "condition": "lung cancer", + "brief_title": "Targeted therapy for lung carcinoma", + "eligibility_criteria": "Adults with lung cancer", + "condition_vector": [1.0, 0.0], + "eligibility_criteria_vector": [1.0, 0.0], + "gender": "All", + "overall_status": "Recruiting", + }, + { + "nct_id": "N2", + "condition": "diabetes mellitus", + "brief_title": "Diabetes prevention", + "eligibility_criteria": "Adults with diabetes", + "condition_vector": [0.0, 1.0], + "eligibility_criteria_vector": [0.0, 1.0], + "gender": "All", + "overall_status": "Recruiting", + }, + ] + ) + backend.index_criteria( + [ + { + "criteria_id": "C1", + "nct_id": "N1", + "criterion": "Confirmed malignant neoplasm", + "criterion_vector": [1.0, 0.0], + "entities": [{"text": "malignant neoplasm", "synonyms": ["cancer"]}], + "eligibility_type": "Inclusion Criteria", + } + ] + ) + + issues = backend.health(require_tables=True) + trials, scores = backend.search_trials( + primary_terms=["lung cancer"], + embeddings={"lung cancer": [1.0, 0.0]}, + sex="ALL", + overall_status="Recruiting", + search_mode="hybrid", + vector_score_threshold=0.0, + ) + criteria_hits = backend.search_criteria( + query="cancer", + nct_ids=["N1"], + search_mode="bm25", + use_entity_synonyms=True, + ) + + assert issues == [] + assert trials[0]["nct_id"] == "N1" + assert scores[0] > 0 + assert criteria_hits[0]["_source"]["criteria_id"] == "C1" diff --git a/tests/test_preflight_and_indexer.py b/tests/test_preflight_and_indexer.py index 22270350..0d64b076 100644 --- a/tests/test_preflight_and_indexer.py +++ b/tests/test_preflight_and_indexer.py @@ -1,55 +1,33 @@ from __future__ import annotations -import json import importlib.util +import json from pathlib import Path +from Matcher.config.config_loader import load_config +from Matcher.search import InMemorySearchBackend from Matcher.services import preflight from Matcher.services.preflight import run_preflight_checks -ES_CONFIG_PATH = Path(__file__).resolve().parents[1] / "utils/Indexer/es_config.py" -spec = importlib.util.spec_from_file_location("indexer_es_config", ES_CONFIG_PATH) -assert spec and spec.loader -indexer_es_config = importlib.util.module_from_spec(spec) -spec.loader.exec_module(indexer_es_config) -load_config = indexer_es_config.load_config - - -class HealthyIndices: - def __init__(self, existing: set[str]): - self.existing = existing - - def exists(self, index: str) -> bool: - return index in self.existing - - -class FakeES: - def __init__(self, *, healthy: bool = True, existing: set[str] | None = None): - self.healthy = healthy - self.indices = HealthyIndices(existing or set()) - - def ping(self) -> bool: - return self.healthy - def _base_config(tmp_path): - cert = tmp_path / "ca.crt" - cert.write_text("cert") patients = tmp_path / "patients" patients.mkdir() trials = tmp_path / "trials" trials.mkdir() + search_db = tmp_path / "search" + search_db.mkdir() return { "paths": { "patients_dir": str(patients), "trials_json_folder": str(trials), "output_dir": str(tmp_path / "results"), - "docker_certs": str(cert), }, - "elasticsearch": { - "host": "https://localhost:9200", - "index_trials": "clinical_trials", - "index_trials_eligibility": "trials_eligibility", + "search_backend": { + "backend": "lancedb", + "db_path": str(search_db), + "trials_table": "trials", + "criteria_table": "criteria", }, "model": { "cot_adapter_path": str(tmp_path / "models" / "cot"), @@ -74,37 +52,51 @@ def _entity_config(tmp_path): return cfg -def test_preflight_passes_for_required_paths_and_indices(tmp_path): +class FakeSearchBackend: + def __init__(self, issues: list[str] | None = None): + self.issues = issues or [] + + def health(self, *, require_tables: bool = False): + return self.issues if require_tables else [] + + +def test_preflight_passes_for_required_paths_and_tables(tmp_path): cfg = _base_config(tmp_path) issues = run_preflight_checks( cfg, - es_client=FakeES( - existing={"clinical_trials", "trials_eligibility"}, - ), + search_backend=FakeSearchBackend(), require_patient_inputs=True, require_trials_json=True, - require_indices=True, + require_search_tables=True, ) assert issues == [] -def test_preflight_reports_missing_indices(tmp_path): +def test_preflight_reports_missing_search_tables(tmp_path): cfg = _base_config(tmp_path) issues = run_preflight_checks( cfg, - es_client=FakeES(existing={"clinical_trials"}), - require_indices=True, + search_backend=FakeSearchBackend(["Missing LanceDB tables: criteria"]), + require_search_tables=True, ) - assert issues == ["Missing Elasticsearch indices: trials_eligibility"] + assert issues == ["Missing LanceDB tables: criteria"] -def test_preflight_reports_unreachable_elasticsearch(tmp_path): +def test_preflight_reports_missing_search_db_path(tmp_path): cfg = _base_config(tmp_path) - issues = run_preflight_checks(cfg, es_client=FakeES(healthy=False)) + cfg["search_backend"]["db_path"] = str(tmp_path / "missing-search") - assert issues == ["Elasticsearch is not reachable at https://localhost:9200."] + issues = run_preflight_checks( + cfg, + search_backend=FakeSearchBackend(), + require_search_tables=True, + ) + + assert issues == [ + f"search_backend.db_path does not exist: {tmp_path / 'missing-search'}" + ] def test_preflight_reports_missing_vllm_extra(tmp_path, monkeypatch): @@ -135,28 +127,78 @@ def test_preflight_reports_missing_entity_extra(tmp_path, monkeypatch): ) in issues -def test_indexer_config_uses_env_overrides_and_resolves_certs(tmp_path, monkeypatch): +def test_main_config_resolves_search_paths(tmp_path, monkeypatch): config_path = tmp_path / "config.json" - cert = tmp_path / "certs" / "ca.crt" - cert.parent.mkdir() - cert.write_text("cert") + schema = tmp_path / "schema.yaml" + schema.write_text("version: 1\nentities: []\n") config_path.write_text( json.dumps( { - "elasticsearch": { - "hosts": ["https://localhost:9200"], - "ca_certs": "certs/ca.crt", - "username": "elastic", - "password": "CHANGE_ME", - } + "paths": { + "patients_dir": "patients", + "output_dir": "results", + "trials_json_folder": "trials", + }, + "search_backend": { + "backend": "lancedb", + "db_path": "search", + "trials_table": "trials", + "criteria_table": "criteria", + }, + "entity_extraction": { + "backend": "regex", + "schema_path": str(schema), + }, + "concept_linker": { + "enabled": False, + "db_path": "concepts", + }, + "model": { + "base_model": "m", + "quantization": {}, + "cot_adapter_path": "models/cot", + "reranker_model_path": "r", + "reranker_adapter_path": "models/reranker", + }, + "tokenizer": {}, + "global": {"device": "cpu"}, + "embedder": {}, + "cot": {}, + "LLM_reranker": {}, + "search": {}, + "rag": {}, + "vllm": {}, } ) ) - monkeypatch.setenv("TRIALMATCHAI_ES_HOST", "https://es.example.test:9200") - monkeypatch.setenv("TRIALMATCHAI_ES_PASSWORD", "from-env") + search_env = tmp_path / "search-env" + monkeypatch.setenv("TRIALMATCHAI_SEARCH_DB_PATH", str(search_env)) cfg = load_config(config_path) - assert cfg["elasticsearch"]["hosts"] == ["https://es.example.test:9200"] - assert cfg["elasticsearch"]["password"] == "from-env" - assert cfg["elasticsearch"]["ca_certs"] == str(cert.resolve()) + assert cfg["search_backend"]["db_path"] == str(search_env.resolve()) + + +def test_indexer_loads_prepared_criteria_docs(tmp_path): + indexer_path = Path(__file__).resolve().parents[1] / "utils/Indexer/index_criteria.py" + spec = importlib.util.spec_from_file_location("index_criteria", indexer_path) + assert spec and spec.loader + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + + processed = tmp_path / "processed_criteria" + trial_dir = processed / "N1" + trial_dir.mkdir(parents=True) + (trial_dir / "C1.json").write_text( + json.dumps({"criteria_id": "C1", "nct_id": "N1", "criterion": "cancer"}) + ) + backend = InMemorySearchBackend() + criteria_indexer = module.CriteriaIndexer( + backend=backend, + processed_file=tmp_path / "processed_ids.txt", + ) + + docs, completed = criteria_indexer.load_docs(processed, recreate=True) + + assert docs[0]["criteria_id"] == "C1" + assert completed == {"N1"} diff --git a/tests/test_search_queries.py b/tests/test_search_queries.py deleted file mode 100644 index c53d185c..00000000 --- a/tests/test_search_queries.py +++ /dev/null @@ -1,59 +0,0 @@ -import unittest - -from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch - - -class DummyES: - def search(self, *args, **kwargs): - raise AssertionError("ES search should not be called in these tests.") - - -class TestFirstLevelQueryBuilding(unittest.TestCase): - def setUp(self) -> None: - self.search = ClinicalTrialSearch( - es_client=DummyES(), - embedder=None, - index_name="index", - bio_med_ner=None, - ) - - def test_create_query_bm25(self) -> None: - query = self.search.create_query( - synonyms=["lung cancer"], - embeddings={}, - age=45, - sex="ALL", - overall_status="Recruiting", - max_text_score=1.0, - vector_score_threshold=0.5, - pre_selected_nct_ids=None, - other_conditions=None, - search_mode="bm25", - ) - self.assertIn("bool", query) - self.assertIn("should", query["bool"]) - self.assertIn("filter", query["bool"]) - - def test_create_query_vector(self) -> None: - embeddings = {"lung cancer": [0.1, 0.2], "smoking": [0.3, 0.4]} - query = self.search.create_query( - synonyms=["lung cancer"], - embeddings=embeddings, - age=60, - sex="MALE", - overall_status=None, - max_text_score=1.0, - vector_score_threshold=0.2, - pre_selected_nct_ids=None, - other_conditions=["smoking"], - search_mode="vector", - ) - self.assertIn("script_score", query) - script = query["script_score"]["script"] - self.assertIn("params", script) - self.assertEqual(len(script["params"]["query_vectors"]), 1) - self.assertEqual(len(script["params"]["other_condition_vectors"]), 1) - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/test_search_queries_pytest.py b/tests/test_search_queries_pytest.py index 2d376826..a19f7221 100644 --- a/tests/test_search_queries_pytest.py +++ b/tests/test_search_queries_pytest.py @@ -1,16 +1,11 @@ from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch +from Matcher.search import InMemorySearchBackend, build_criteria_record, build_trial_record -class DummyES: - def search(self, *args, **kwargs): - return {"hits": {"hits": [], "max_score": 1.0}} - - -def test_first_level_query_bm25(): +def test_first_level_query_describes_backend_search(): search = ClinicalTrialSearch( - es_client=DummyES(), + search_backend=InMemorySearchBackend(), embedder=None, - index_name="index", bio_med_ner=None, ) query = search.create_query( @@ -22,35 +17,45 @@ def test_first_level_query_bm25(): max_text_score=1.0, vector_score_threshold=0.5, pre_selected_nct_ids=None, - other_conditions=None, + other_conditions=["smoking"], search_mode="bm25", ) - assert "bool" in query - assert "should" in query["bool"] - assert "filter" in query["bool"] + assert query["primary_terms"] == ["lung cancer"] + assert query["other_terms"] == ["smoking"] + assert query["overall_status"] == "Recruiting" + assert query["search_mode"] == "bm25" -def test_first_level_query_vector(): - search = ClinicalTrialSearch( - es_client=DummyES(), - embedder=None, - index_name="index", - bio_med_ner=None, + +def test_build_trial_record_flattens_search_text_and_vector(): + record = build_trial_record( + { + "nct_id": "N1", + "condition": ["Lung cancer", "NSCLC"], + "brief_title": "Targeted therapy trial", + "condition_vector": [1.0, 0.0], + "brief_title_vector": [0.0, 1.0], + } ) - embeddings = {"lung cancer": [0.1, 0.2], "smoking": [0.3, 0.4]} - query = search.create_query( - synonyms=["lung cancer"], - embeddings=embeddings, - age=60, - sex="MALE", - overall_status=None, - max_text_score=1.0, - vector_score_threshold=0.2, - pre_selected_nct_ids=None, - other_conditions=["smoking"], - search_mode="vector", + + assert "Lung cancer" in record["search_text"] + assert record["search_vector"] == [0.5, 0.5] + + +def test_build_criteria_record_flattens_entity_synonyms(): + record = build_criteria_record( + { + "criteria_id": "C1", + "criterion": "Documented malignancy", + "entities": [ + { + "text": "malignancy", + "synonyms": ["cancer", "neoplasm"], + "concept_candidates": [{"concept_name": "Malignant neoplasm"}], + } + ], + } ) - assert "script_score" in query - params = query["script_score"]["script"]["params"] - assert len(params["query_vectors"]) == 1 - assert len(params["other_condition_vectors"]) == 1 + + assert "cancer" in record["entity_synonyms_text"] + assert "Malignant neoplasm" in record["search_text"] diff --git a/tests/test_second_level_search_pytest.py b/tests/test_second_level_search_pytest.py index 6c0717b0..3436b1c0 100644 --- a/tests/test_second_level_search_pytest.py +++ b/tests/test_second_level_search_pytest.py @@ -1,17 +1,12 @@ from Matcher.pipeline.trial_search.second_level_search import SecondStageRetriever - - -class DummyES: - def search(self, *args, **kwargs): - return {"hits": {"hits": []}} +from Matcher.search import InMemorySearchBackend def test_score_criteria_without_llm_weights(): retriever = SecondStageRetriever( - es_client=DummyES(), + search_backend=InMemorySearchBackend(), llm_reranker=None, embedder=None, - index_name="idx", inclusion_weight=1.0, exclusion_weight=0.25, ) @@ -26,10 +21,9 @@ def test_score_criteria_without_llm_weights(): def test_aggregate_to_trials_weighted(): retriever = SecondStageRetriever( - es_client=DummyES(), + search_backend=InMemorySearchBackend(), llm_reranker=None, embedder=None, - index_name="idx", ) criteria = [ {"llm_score": 0.6, "_source": {"nct_id": "N1"}}, @@ -38,3 +32,35 @@ def test_aggregate_to_trials_weighted(): ] trials = retriever.aggregate_to_trials(criteria, threshold=0.5, method="weighted") assert trials[0]["nct_id"] == "N2" + + +def test_retrieve_criteria_uses_entity_synonyms(): + backend = InMemorySearchBackend( + criteria=[ + { + "criteria_id": "C1", + "nct_id": "N1", + "criterion": "Documented malignant neoplasm", + "eligibility_type": "Inclusion Criteria", + "entities": [{"text": "malignant neoplasm", "synonyms": ["cancer"]}], + }, + { + "criteria_id": "C2", + "nct_id": "N2", + "criterion": "Documented diabetes mellitus", + "eligibility_type": "Inclusion Criteria", + "entities": [], + }, + ] + ) + retriever = SecondStageRetriever( + search_backend=backend, + llm_reranker=None, + embedder=None, + entity_annotator=object(), + search_mode="bm25", + ) + + hits = retriever.retrieve_criteria(["N1"], ["cancer"]) + + assert hits["cancer"][0]["_source"]["criteria_id"] == "C1" diff --git a/tests/test_settings.py b/tests/test_settings.py index 8108af96..a417277a 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -10,38 +10,43 @@ class TestConfigLoading(unittest.TestCase): def test_load_config_from_repo(self) -> None: config_path = Path(__file__).resolve().parents[1] / "source/Matcher/config/config.json" config = load_config(str(config_path)) - self.assertIn("elasticsearch", config) + self.assertIn("search_backend", config) self.assertIn("embedder", config) self.assertIn("paths", config) def test_env_overrides(self) -> None: raw = { - "elasticsearch": { - "host": "http://localhost:9200", - "username": "user", - "password": "pass", + "search_backend": { + "backend": "lancedb", + "db_path": "old-search", + "trials_table": "old-trials", + "criteria_table": "old-criteria", }, "embedder": {"model_name": "old"}, + "search": {"mode": "hybrid"}, "entity_extraction": {"backend": "gliner2"}, "concept_linker": {"db_path": "old"}, } - os.environ["TRIALMATCHAI_ES_HOST"] = "http://override:9200" + os.environ["TRIALMATCHAI_SEARCH_DB_PATH"] = "data/search-test" + os.environ["TRIALMATCHAI_SEARCH_TRIALS_TABLE"] = "trials-test" + os.environ["TRIALMATCHAI_SEARCH_MODE"] = "bm25" os.environ["TRIALMATCHAI_EMBEDDER_MODEL_NAME"] = "new-model" - os.environ["TRIALMATCHAI_ES_AUTO_START"] = "true" os.environ["TRIALMATCHAI_ENTITY_BACKEND"] = "regex" os.environ["TRIALMATCHAI_CONCEPT_DB_PATH"] = "concepts" try: updated = apply_env_overrides(raw) finally: - os.environ.pop("TRIALMATCHAI_ES_HOST", None) + os.environ.pop("TRIALMATCHAI_SEARCH_DB_PATH", None) + os.environ.pop("TRIALMATCHAI_SEARCH_TRIALS_TABLE", None) + os.environ.pop("TRIALMATCHAI_SEARCH_MODE", None) os.environ.pop("TRIALMATCHAI_EMBEDDER_MODEL_NAME", None) - os.environ.pop("TRIALMATCHAI_ES_AUTO_START", None) os.environ.pop("TRIALMATCHAI_ENTITY_BACKEND", None) os.environ.pop("TRIALMATCHAI_CONCEPT_DB_PATH", None) - self.assertEqual(updated["elasticsearch"]["host"], "http://override:9200") + self.assertEqual(updated["search_backend"]["db_path"], "data/search-test") + self.assertEqual(updated["search_backend"]["trials_table"], "trials-test") + self.assertEqual(updated["search"]["mode"], "bm25") self.assertEqual(updated["embedder"]["model_name"], "new-model") - self.assertTrue(updated["elasticsearch"]["auto_start"]) self.assertEqual(updated["entity_extraction"]["backend"], "regex") self.assertEqual(updated["concept_linker"]["db_path"], "concepts") diff --git a/utils/Indexer/config.json b/utils/Indexer/config.json deleted file mode 100644 index 4a421a57..00000000 --- a/utils/Indexer/config.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "elasticsearch": { - "hosts": ["https://localhost:9200"], - "ca_certs": "../../elasticsearch/certs/ca/ca.crt", - "username": "elastic", - "password": "CHANGE_ME", - "request_timeout": 300, - "retry_on_timeout": true, - "max_retries": 3 - } - } diff --git a/utils/Indexer/es_config.py b/utils/Indexer/es_config.py deleted file mode 100644 index b13a106b..00000000 --- a/utils/Indexer/es_config.py +++ /dev/null @@ -1,42 +0,0 @@ -from __future__ import annotations - -import json -import os -from pathlib import Path -from typing import Any - -from elasticsearch import Elasticsearch - - -def load_config(path: str | Path) -> dict[str, Any]: - config_path = Path(path) - cfg = json.loads(config_path.read_text()) - es_conf = cfg.setdefault("elasticsearch", {}) - if os.getenv("TRIALMATCHAI_ES_HOST"): - es_conf["hosts"] = [os.environ["TRIALMATCHAI_ES_HOST"]] - if os.getenv("TRIALMATCHAI_ES_USERNAME"): - es_conf["username"] = os.environ["TRIALMATCHAI_ES_USERNAME"] - if os.getenv("TRIALMATCHAI_ES_PASSWORD"): - es_conf["password"] = os.environ["TRIALMATCHAI_ES_PASSWORD"] - if os.getenv("TRIALMATCHAI_ES_CA_CERTS"): - es_conf["ca_certs"] = os.environ["TRIALMATCHAI_ES_CA_CERTS"] - if es_conf.get("ca_certs"): - ca_path = Path(es_conf["ca_certs"]).expanduser() - if not ca_path.is_absolute(): - es_conf["ca_certs"] = str((config_path.parent / ca_path).resolve()) - return cfg - - -def make_es_client(cfg: dict[str, Any]) -> Elasticsearch: - es_conf = cfg["elasticsearch"] - kwargs: dict[str, Any] = { - "hosts": es_conf["hosts"], - "basic_auth": (es_conf["username"], es_conf["password"]), - "verify_certs": True, - "request_timeout": es_conf.get("request_timeout", 60), - "max_retries": es_conf.get("max_retries", 3), - "retry_on_timeout": es_conf.get("retry_on_timeout", True), - } - if es_conf.get("ca_certs") and Path(es_conf["ca_certs"]).exists(): - kwargs["ca_certs"] = es_conf["ca_certs"] - return Elasticsearch(**kwargs) diff --git a/utils/Indexer/index_criteria.py b/utils/Indexer/index_criteria.py index 3db6750c..50ea66b1 100644 --- a/utils/Indexer/index_criteria.py +++ b/utils/Indexer/index_criteria.py @@ -1,17 +1,21 @@ #!/usr/bin/env python3 +from __future__ import annotations + import argparse import json import logging -from concurrent.futures import ThreadPoolExecutor, as_completed +import sys from pathlib import Path -from elasticsearch import Elasticsearch, NotFoundError -from elasticsearch.helpers import bulk -try: - from .es_config import load_config, make_es_client -except ImportError: # pragma: no cover - direct script execution - from es_config import load_config, make_es_client +ROOT = Path(__file__).resolve().parents[2] +SOURCE = ROOT / "source" +if str(SOURCE) not in sys.path: + sys.path.append(str(SOURCE)) + +from Matcher.config.config_loader import load_config # noqa: E402 +from Matcher.search import LanceDBSearchBackend # noqa: E402 + logging.basicConfig( format="%(asctime)s %(levelname)s %(name)s - %(message)s", @@ -21,243 +25,120 @@ class CriteriaIndexer: - def __init__(self, es: Elasticsearch, index_name: str, processed_file: Path): - self.es = es - self.index_name = index_name + def __init__( + self, + backend: LanceDBSearchBackend, + *, + processed_file: Path, + ) -> None: + self.backend = backend self.processed_file = processed_file self.processed_file.parent.mkdir(parents=True, exist_ok=True) self.processed_ids = self._load_processed_ids() def _load_processed_ids(self) -> set[str]: if self.processed_file.exists(): - return set(self.processed_file.read_text().splitlines()) + return set(self.processed_file.read_text(encoding="utf-8").splitlines()) return set() - def _save_processed_ids(self): - self.processed_file.write_text("\n".join(sorted(self.processed_ids)) + "\n") - - def _trial_indexed(self, nct_id: str) -> bool: - try: - res = self.es.count( - index=self.index_name, body={"query": {"term": {"nct_id": nct_id}}} - ) - return res.get("count", 0) > 0 - except NotFoundError: - return False - - def _detect_dim(self, processed_folder: Path) -> int: - # find first JSON under any trial subfolder - for trial_dir in processed_folder.iterdir(): - if not trial_dir.is_dir(): - continue - for f in trial_dir.glob("*.json"): - doc = json.loads(f.read_text()) - vec = doc.get("criterion_vector", []) - if isinstance(vec, list): - return len(vec) - raise RuntimeError("No criterion_vector found in any processed JSON.") - - def create_index(self, dims: int): - mapping = { - "settings": { - "analysis": { - "analyzer": { - "standard_lowercase": { - "type": "custom", - "tokenizer": "standard", - "filter": ["lowercase"], - } - } - } - }, - "mappings": { - "properties": { - "criteria_id": {"type": "keyword"}, - "criterion": {"type": "text", "analyzer": "standard_lowercase"}, - "criterion_vector": { - "type": "dense_vector", - "dims": dims, - "index": True, - "similarity": "cosine", - "index_options": { - "type": "hnsw", - "m": 16, - "ef_construction": 100, - }, - }, - "entities": { - "type": "nested", - "properties": { - "normalized_id": {"type": "keyword"}, - "synonyms": { - "type": "text", - "analyzer": "standard_lowercase", - }, - "entity": { - "type": "text", - "analyzer": "standard_lowercase", - }, - "class": {"type": "keyword"}, - "entity_group": {"type": "keyword"}, - "text": { - "type": "text", - "analyzer": "standard_lowercase", - }, - "score": {"type": "float"}, - "linker_score": {"type": "float"}, - "linker_status": {"type": "keyword"}, - "concept_candidates": { - "type": "nested", - "properties": { - "normalized_id": {"type": "keyword"}, - "vocabulary_id": {"type": "keyword"}, - "concept_code": {"type": "keyword"}, - "concept_name": { - "type": "text", - "analyzer": "standard_lowercase", - }, - "domain_id": {"type": "keyword"}, - "score": {"type": "float"}, - }, - }, - }, - }, - "nct_id": {"type": "keyword"}, - "eligibility_type": {"type": "keyword"}, - } - }, - } - self.es.indices.create( - index=self.index_name, body=mapping, timeout="60s", master_timeout="60s" + def _save_processed_ids(self) -> None: + self.processed_file.write_text( + "\n".join(sorted(self.processed_ids)) + "\n", + encoding="utf-8", ) - logger.info(f"Created index {self.index_name} with dims={dims}") - - def _index_trial(self, trial_dir: Path, batch_size: int) -> tuple[str, int]: - nct_id = trial_dir.name - - # skip if already done or in ES - if nct_id in self.processed_ids or self._trial_indexed(nct_id): - logger.info(f"Skipping {nct_id}: already indexed") - return nct_id, 0 - - # load docs - docs = [] - for f in trial_dir.glob("*.json"): - try: - docs.append(json.loads(f.read_text())) - except Exception as e: - logger.warning(f"{nct_id}: failed to load {f.name}: {e}") - - if not docs: - logger.info(f"No JSONs for {nct_id}; marking done") - return nct_id, 0 - # bulk‐index in sub‐batches - total = 0 - for i in range(0, len(docs), batch_size): - batch = docs[i : i + batch_size] - actions = [ - { - "_op_type": "index", - "_index": self.index_name, - "_id": doc["criteria_id"], - "_source": doc, - } - for doc in batch - ] - result = bulk( - client=self.es, - actions=actions, - raise_on_error=False, - chunk_size=batch_size, - ) - succ, fails = result if isinstance(result, tuple) else (result, []) - total += succ - logger.info( - f"{nct_id}: batch {i // batch_size + 1} → {succ} indexed, {len(fails) if isinstance(fails, list) else 0} failed" - ) - - return nct_id, total - - def index_all( + def load_docs( self, processed_folder: Path, - batch_size: int = 100, - max_workers: int = 4, - refresh: bool = True, - ): - trials = [d for d in processed_folder.iterdir() if d.is_dir()] - if not trials: - logger.info("No trial subfolders found.") - return - - # 1) determine vector dims & create index if missing - if not self.es.indices.exists(index=self.index_name): - dims = self._detect_dim(processed_folder) - self.create_index(dims) - else: - logger.info(f"Index {self.index_name} exists; skipping creation") - - # 2) parallel indexing across trials - total_indexed = 0 - newly_done = [] - with ThreadPoolExecutor(max_workers=max_workers) as executor: - future_to_nct = { - executor.submit(self._index_trial, td, batch_size): td.name - for td in trials - } - for future in as_completed(future_to_nct): - nct = future_to_nct[future] + *, + recreate: bool, + ) -> tuple[list[dict], set[str]]: + docs: list[dict] = [] + completed: set[str] = set() + trial_dirs = sorted(path for path in processed_folder.iterdir() if path.is_dir()) + for trial_dir in trial_dirs: + nct_id = trial_dir.name + if not recreate and nct_id in self.processed_ids: + logger.info("Skipping %s: already indexed", nct_id) + continue + trial_docs = [] + for path in sorted(trial_dir.glob("*.json")): try: - nct_id, count = future.result() - total_indexed += count - newly_done.append(nct_id) - except Exception as e: - logger.error(f"{nct}: unexpected error: {e}") - newly_done.append(nct) - - # 3) optionally refresh & persist processed IDs - if refresh: - self.es.indices.refresh(index=self.index_name) + trial_docs.append(json.loads(path.read_text(encoding="utf-8"))) + except Exception as exc: + logger.warning("%s: failed to load %s: %s", nct_id, path.name, exc) + if trial_docs: + docs.extend(trial_docs) + completed.add(nct_id) + return docs, completed - self.processed_ids.update(newly_done) + def index_all( + self, + processed_folder: Path, + *, + recreate: bool = True, + ) -> int: + if not processed_folder.exists(): + raise FileNotFoundError(f"Criteria folder not found: {processed_folder}") + docs, completed = self.load_docs(processed_folder, recreate=recreate) + if not docs: + logger.info("No prepared criteria JSON files found.") + return 0 + count = self.backend.index_criteria(docs, recreate=recreate) + self.processed_ids.update(completed) self._save_processed_ids() logger.info( - f"✅ Indexed {total_indexed} criteria across {len(newly_done)} trials (skipped: {len(self.processed_ids) - len(newly_done)})." + "Indexed %s criteria documents into %s/%s.", + count, + self.backend.db_path, + self.backend.criteria_table, ) + return count -def main(): +def main() -> int: parser = argparse.ArgumentParser( - description="Bulk‑index prepared eligibility criteria in parallel" - ) - parser.add_argument("--config", required=True, help="Path to config.json") - parser.add_argument( - "--processed-folder", required=True, help="Root folder of trial subfolders" + description="Create or update the LanceDB eligibility criteria search table." ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") parser.add_argument( - "--index-name", default="trials_eligibility", help="ES index name" + "--processed-folder", + required=True, + help="Root folder containing one prepared criteria subfolder per trial", ) + parser.add_argument("--db-path", default=None, help="Override search DB path") + parser.add_argument("--table", default=None, help="Override criteria table name") parser.add_argument( - "--batch-size", type=int, default=100, help="Docs per bulk request" + "--processed-file", + default="utils/Indexer/processed_ids.txt", + help="File used to track already appended trial IDs", ) parser.add_argument( - "--max-workers", type=int, default=4, help="Parallel trial threads" + "--recreate", + action=argparse.BooleanOptionalAction, + default=True, + help="Overwrite the target table before writing.", ) args = parser.parse_args() - cfg = load_config(args.config) - es = make_es_client(cfg) + config = load_config(args.config) + search_cfg = config["search_backend"] + if args.db_path: + search_cfg["db_path"] = str(Path(args.db_path).expanduser().resolve()) + if args.table: + search_cfg["criteria_table"] = args.table + backend = LanceDBSearchBackend.from_config(config) indexer = CriteriaIndexer( - es=es, index_name=args.index_name, processed_file=Path("processed_ids.txt") + backend=backend, + processed_file=(ROOT / args.processed_file).resolve(), ) - indexer.index_all( - processed_folder=Path(args.processed_folder), - batch_size=args.batch_size, - max_workers=args.max_workers, + count = indexer.index_all( + Path(args.processed_folder), + recreate=args.recreate, ) + return 0 if count else 1 if __name__ == "__main__": - main() + raise SystemExit(main()) diff --git a/utils/Indexer/index_trials.py b/utils/Indexer/index_trials.py index c0ee4803..25630b7f 100644 --- a/utils/Indexer/index_trials.py +++ b/utils/Indexer/index_trials.py @@ -1,151 +1,69 @@ #!/usr/bin/env python3 +from __future__ import annotations + import argparse import json -import os +import sys from pathlib import Path -from elasticsearch import Elasticsearch -from elasticsearch.helpers import bulk - -try: - from .es_config import load_config, make_es_client -except ImportError: # pragma: no cover - direct script execution - from es_config import load_config, make_es_client +ROOT = Path(__file__).resolve().parents[2] +SOURCE = ROOT / "source" +if str(SOURCE) not in sys.path: + sys.path.append(str(SOURCE)) -def detect_vector_dim(sample: dict) -> int: - for k, v in sample.items(): - if k.endswith("_vector") and isinstance(v, list): - return len(v) - raise ValueError("No vector field found in sample") +from Matcher.config.config_loader import load_config # noqa: E402 +from Matcher.search import LanceDBSearchBackend # noqa: E402 def load_processed(folder: Path) -> list[dict]: - docs = [] - for fn in os.listdir(folder): - if fn.endswith(".json"): - docs.append(json.loads((folder / fn).read_text())) + docs: list[dict] = [] + for path in sorted(folder.glob("*.json")): + docs.append(json.loads(path.read_text(encoding="utf-8"))) return docs -def create_index(es: Elasticsearch, name: str, dims: int): - body = { - "settings": { - "analysis": { - "analyzer": { - "standard_lowercase": { - "type": "custom", - "tokenizer": "standard", - "filter": ["lowercase"], - } - } - } - }, - "mappings": { - "properties": { - "nct_id": {"type": "keyword"}, - "brief_title": {"type": "text", "analyzer": "standard_lowercase"}, - "brief_title_vector": {"type": "dense_vector", "dims": dims}, - "brief_summary": {"type": "text", "analyzer": "standard_lowercase"}, - "brief_summary_vector": {"type": "dense_vector", "dims": dims}, - "condition": {"type": "text", "analyzer": "standard_lowercase"}, - "condition_vector": {"type": "dense_vector", "dims": dims}, - "overall_status": {"type": "keyword"}, - "start_date": {"type": "date", "format": "yyyy-MM-dd"}, - "completion_date": {"type": "date", "format": "yyyy-MM-dd"}, - "phase": {"type": "keyword"}, - "study_type": {"type": "keyword"}, - "intervention": { - "properties": { - "intervention_type": {"type": "keyword"}, - "intervention_name": {"type": "text"}, - } - }, - "gender": {"type": "keyword"}, - "minimum_age": {"type": "float"}, - "maximum_age": {"type": "float"}, - "location": { - "properties": { - "location_name": {"type": "text"}, - "location_address": {"type": "text"}, - } - }, - "reference": { - "type": "nested", - "properties": { - "citation": {"type": "text"}, - "PMID": {"type": "keyword"}, - }, - }, - "eligibility_criteria": { - "type": "text", - "analyzer": "standard_lowercase", - }, - "eligibility_criteria_vector": {"type": "dense_vector", "dims": dims}, - } - }, - } - es.indices.create(index=name, body=body) - print(f"Created index `{name}` with vector dims={dims}") - - -def main(): - parser = argparse.ArgumentParser(description="Bulk‑index processed trial JSONs") - parser.add_argument( - "--config", - required=True, - help="Path to JSON config file with Elasticsearch credentials", +def main() -> int: + parser = argparse.ArgumentParser( + description="Create or update the LanceDB trial search table." ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") parser.add_argument( - "--processed-folder", required=True, help="Folder of processed JSONs to index" - ) - parser.add_argument( - "--index-name", - default="clinical_trials", - help="Target Elasticsearch index name", + "--processed-folder", + required=True, + help="Folder of prepared trial JSON files", ) + parser.add_argument("--db-path", default=None, help="Override search DB path") + parser.add_argument("--table", default=None, help="Override trials table name") parser.add_argument( - "--batch-size", type=int, default=100, help="Number of docs per bulk request" + "--recreate", + action=argparse.BooleanOptionalAction, + default=True, + help="Overwrite the target table before writing.", ) args = parser.parse_args() - cfg = load_config(args.config) - es = make_es_client(cfg) + config = load_config(args.config) + search_cfg = config["search_backend"] + if args.db_path: + search_cfg["db_path"] = str(Path(args.db_path).expanduser().resolve()) + if args.table: + search_cfg["trials_table"] = args.table processed_path = Path(args.processed_folder) docs = load_processed(processed_path) if not docs: - print("❌ No JSONs found to index.") - return - - dims = detect_vector_dim(docs[0]) - - # <-- FIXED: use keyword arg `index=` - if not es.indices.exists(index=args.index_name): - create_index(es, args.index_name, dims) - else: - print(f"Index `{args.index_name}` already exists; skipping creation.") - - actions = [ - { - "_op_type": "index", - "_index": args.index_name, - "_id": doc["nct_id"], - "_source": doc, - } - for doc in docs - ] - - success, failures = bulk( - client=es, - actions=actions, - chunk_size=args.batch_size, - stats_only=True, - raise_on_error=False, + print(f"No prepared trial JSON files found in {processed_path}.") + return 1 + + backend = LanceDBSearchBackend.from_config(config) + count = backend.index_trials(docs, recreate=args.recreate) + print( + f"Indexed {count} trial documents into " + f"{backend.db_path}/{backend.trials_table}." ) - es.indices.refresh(index=args.index_name) - print(f"✅ Indexed {success} documents; {failures} failures.") + return 0 if __name__ == "__main__": - main() + raise SystemExit(main()) diff --git a/uv.lock b/uv.lock index ac3614e5..5756318d 100644 --- a/uv.lock +++ b/uv.lock @@ -731,31 +731,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/44/5a/f0b9ad6c0a9017e62d4735daaeb11ba3b6c009d69a26141b258cd37b5588/einops-0.8.0-py3-none-any.whl", hash = "sha256:9572fb63046264a862693b0a87088af3bdc8c068fde03de63453cbbde245465f", size = 43223, upload-time = "2024-04-28T04:07:49.718Z" }, ] -[[package]] -name = "elastic-transport" -version = "8.17.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "urllib3", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6a/54/d498a766ac8fa475f931da85a154666cc81a70f8eb4a780bc8e4e934e9ac/elastic_transport-8.17.1.tar.gz", hash = "sha256:5edef32ac864dca8e2f0a613ef63491ee8d6b8cfb52881fa7313ba9290cac6d2", size = 73425, upload-time = "2025-03-13T07:28:30.776Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/cd/b71d5bc74cde7fc6fd9b2ff9389890f45d9762cbbbf81dc5e51fd7588c4a/elastic_transport-8.17.1-py3-none-any.whl", hash = "sha256:192718f498f1d10c5e9aa8b9cf32aed405e469a7f0e9d6a8923431dbb2c59fb8", size = 64969, upload-time = "2025-03-13T07:28:29.031Z" }, -] - -[[package]] -name = "elasticsearch" -version = "8.17.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "elastic-transport", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5b/3d/f563e58f45d23565c0d0316a565638ce312f536b882a3281b8047fb4a58f/elasticsearch-8.17.2.tar.gz", hash = "sha256:ff7f1db8aeefd87ceba4edce3aa4070994582e6cf029d2e67b74e66d634509db", size = 602691, upload-time = "2025-03-04T12:14:27.382Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/50/16306f4722ca2fcb64a5875bc1fa9b4d0bcb08c05967f60c23acd4cbb019/elasticsearch-8.17.2-py3-none-any.whl", hash = "sha256:2d058dcddd8f2686cd431a916cdf983f9fb7d211d902834f564ab7df05ba6478", size = 717971, upload-time = "2025-03-04T12:14:23.843Z" }, -] - [[package]] name = "email-validator" version = "2.3.0" @@ -3733,11 +3708,11 @@ dependencies = [ { name = "accelerate", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "bioregistry", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "einops", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "elasticsearch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "faiss-cpu", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "gliner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "joblib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "lancedb", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "medspacy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "medspacy-quickumls", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "nltk", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, @@ -3746,6 +3721,7 @@ dependencies = [ { name = "orjson", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "pandas", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "peft", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyarrow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "pydantic-settings", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "pyfastner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, @@ -3776,8 +3752,6 @@ dependencies = [ [package.optional-dependencies] entity = [ { name = "gliner2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "lancedb", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pyarrow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] gpu = [ { name = "bitsandbytes", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, @@ -3811,7 +3785,6 @@ requires-dist = [ { name = "bitsandbytes", marker = "(sys_platform == 'linux' and extra == 'gpu') or (sys_platform == 'win32' and extra == 'gpu')", specifier = "==0.49.2" }, { name = "datasets", marker = "extra == 'training'", specifier = "==2.19.0" }, { name = "einops", specifier = "==0.8.0" }, - { name = "elasticsearch", specifier = "==8.17.2" }, { name = "faiss-cpu", specifier = "==1.9.0.post1" }, { name = "gliner", specifier = "==0.2.27" }, { name = "gliner2", marker = "extra == 'entity'", specifier = ">=1.3.1,<2" }, @@ -3819,7 +3792,7 @@ requires-dist = [ { name = "huggingface-hub", specifier = ">=1.5.0,<2" }, { name = "jinja2", marker = "extra == 'training'", specifier = "==3.1.6" }, { name = "joblib", specifier = "==1.4.2" }, - { name = "lancedb", marker = "extra == 'entity'", specifier = ">=0.25.0,<0.26" }, + { name = "lancedb", specifier = ">=0.25.0,<0.26" }, { name = "langchain", marker = "extra == 'llm'", specifier = "==1.3.10" }, { name = "langchain-community", marker = "extra == 'llm'", specifier = "==0.4.2" }, { name = "langchain-openai", marker = "extra == 'llm'", specifier = "==1.3.2" }, @@ -3831,7 +3804,7 @@ requires-dist = [ { name = "orjson", specifier = "==3.11.9" }, { name = "pandas", specifier = "==2.2.3" }, { name = "peft", specifier = "==0.15.2" }, - { name = "pyarrow", marker = "extra == 'entity'", specifier = ">=24.0.0,<25" }, + { name = "pyarrow", specifier = ">=24.0.0,<25" }, { name = "pydantic", specifier = ">=2.12.0,<3" }, { name = "pydantic-settings", specifier = ">=2.14.2,<3" }, { name = "pyfastner", specifier = "==1.0.10" }, From d51239dbfc31f36bcbad2b354271349b32bc1eef Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 21 Jun 2026 19:58:24 +0200 Subject: [PATCH 04/64] Professionalize package and add registry updater --- .dockerignore | 18 +- .env.example | 15 +- .gitignore | 35 +- Dockerfile | 5 +- README.md | 71 +- docker-compose.yml | 9 +- docs/architecture.md | 41 + docs/registry-updater.md | 89 ++ docs/release.md | 43 + pyproject.toml | 78 +- scripts/bootstrap_data.sh | 16 +- source/Matcher/cli/healthcheck.py | 50 - source/Matcher/models/embedding/__init__.py | 3 - source/Matcher/schemas/__init__.py | 3 - source/Matcher/utils/__init__.py | 0 source/Parser/__init__.py | 0 source/Parser/biomedner_engine.py | 104 -- source/Parser/convert.py | 416 ------ source/Parser/main.py | 192 --- source/Parser/normalizer.py | 28 - source/__init__.py | 0 src/Matcher/__init__.py | 13 + src/Matcher/config/__init__.py | 1 + src/Matcher/config/config_loader.py | 1 + src/Matcher/config/settings.py | 1 + src/Matcher/entities/__init__.py | 1 + src/Matcher/main.py | 1 + src/Matcher/pipeline/__init__.py | 1 + src/Matcher/pipeline/cot_reasoning.py | 1 + src/Matcher/pipeline/cot_reasoning_vllm.py | 1 + src/Matcher/pipeline/phenopacket_processor.py | 1 + src/Matcher/pipeline/trial_ranker.py | 1 + src/Matcher/pipeline/trial_search/__init__.py | 1 + .../trial_search/first_level_search.py | 1 + .../trial_search/second_level_search.py | 1 + src/Matcher/schemas/__init__.py | 1 + src/Matcher/search/__init__.py | 1 + src/Matcher/services/__init__.py | 1 + src/Matcher/utils/__init__.py | 1 + src/Matcher/utils/file_utils.py | 1 + src/Matcher/utils/json_utils.py | 1 + src/Matcher/utils/logging_config.py | 1 + src/Matcher/utils/retry.py | 1 + src/Matcher/utils/temporal_utils.py | 1 + src/Matcher/utils/timing.py | 1 + src/trialmatchai/__init__.py | 3 + src/trialmatchai/__main__.py | 4 + .../trialmatchai}/cli/__init__.py | 0 .../trialmatchai}/cli/bootstrap_data.py | 0 .../trialmatchai}/cli/build_concepts.py | 8 +- src/trialmatchai/cli/healthcheck.py | 101 ++ .../trialmatchai}/cli/index_data.py | 72 +- src/trialmatchai/cli/main.py | 39 + .../Matcher => src/trialmatchai}/cli/run.py | 2 +- src/trialmatchai/cli/update_registry.py | 180 +++ .../trialmatchai/config}/__init__.py | 0 .../trialmatchai}/config/config.json | 15 +- .../trialmatchai}/config/config_loader.py | 22 +- .../trialmatchai}/config/settings.py | 34 +- .../trialmatchai}/entities/__init__.py | 4 +- .../trialmatchai}/entities/annotator.py | 12 +- .../trialmatchai}/entities/builder.py | 2 +- .../trialmatchai}/entities/linker.py | 6 +- .../trialmatchai}/entities/recognizers.py | 4 +- .../trialmatchai}/entities/schemas.py | 4 +- .../trialmatchai}/entities/types.py | 0 .../entity_schemas/trialmatchai.yaml | 0 {source/Matcher => src/trialmatchai}/main.py | 36 +- .../trialmatchai/matching}/__init__.py | 0 .../matching/eligibility_reasoning.py | 6 +- .../matching/eligibility_reasoning_vllm.py | 6 +- .../matching}/phenopacket_processor.py | 10 +- .../matching/retrieval}/__init__.py | 0 .../matching/retrieval/criteria_retrieval.py | 10 +- .../matching/retrieval/trial_retrieval.py | 6 +- .../trialmatchai/matching}/trial_ranker.py | 4 +- .../trialmatchai/models}/__init__.py | 0 src/trialmatchai/models/embedding/__init__.py | 3 + .../models/embedding/query_embedder.py | 2 +- .../models/embedding/sentence_embedder.py | 2 +- .../models/embedding/text_embedder.py | 2 +- .../trialmatchai/models/llm}/__init__.py | 0 .../trialmatchai}/models/llm/llm_loader.py | 2 +- .../trialmatchai}/models/llm/llm_reranker.py | 2 +- .../trialmatchai}/models/llm/vllm_loader.py | 4 +- src/trialmatchai/preprocessing/__init__.py | 1 + .../preprocessing/regex/__init__.py | 1 + .../regex/exception_regex_patterns.json | 0 .../preprocessing}/regex/regex_patterns.json | 0 .../preprocessing}/regex/regex_variants.tsv | 0 src/trialmatchai/registry/__init__.py | 13 + .../registry/clinicaltrials_gov.py | 187 +++ src/trialmatchai/registry/defaults.py | 20 + src/trialmatchai/registry/manifest.py | 55 + src/trialmatchai/registry/normalization.py | 205 +++ src/trialmatchai/registry/preparation.py | 243 ++++ src/trialmatchai/registry/updater.py | 250 ++++ src/trialmatchai/schemas/__init__.py | 3 + .../trialmatchai}/schemas/phenopacket.py | 0 .../trialmatchai}/search/__init__.py | 2 +- .../trialmatchai}/search/lancedb_backend.py | 65 +- .../trialmatchai/services}/__init__.py | 0 .../trialmatchai}/services/preflight.py | 18 +- .../trialmatchai/utils}/__init__.py | 0 .../trialmatchai}/utils/evaluation.py | 6 +- .../trialmatchai}/utils/file_utils.py | 0 .../trialmatchai}/utils/json_utils.py | 0 .../trialmatchai}/utils/logging_config.py | 0 .../trialmatchai}/utils/retry.py | 0 .../trialmatchai}/utils/temporal_utils.py | 0 .../trialmatchai}/utils/timing.py | 0 tests/conftest.py | 2 +- tests/test_config_pytest.py | 4 +- tests/test_deployment_readiness.py | 12 +- tests/test_entities.py | 25 +- tests/test_file_utils_pytest.py | 2 +- tests/test_first_level_search_pytest.py | 4 +- tests/test_lancedb_search_backend.py | 2 +- tests/test_logging.py | 2 +- tests/test_logging_pytest.py | 2 +- tests/test_package_imports.py | 18 + tests/test_phenopacket_processor_pytest.py | 2 +- tests/test_preflight_and_indexer.py | 31 +- tests/test_registry_updater.py | 284 ++++ tests/test_retry_pytest.py | 2 +- tests/test_schemas.py | 2 +- tests/test_search_queries_pytest.py | 4 +- tests/test_second_level_search_pytest.py | 4 +- tests/test_settings.py | 13 +- tests/test_trial_ranker_pytest.py | 2 +- utils/DataLoader/__init__.py | 0 utils/DataLoader/downloader.py | 254 ---- utils/DataLoader/test/__init__.py | 0 utils/DataLoader/test/test_downloader.py | 179 --- utils/Indexer/__init__.py | 0 utils/Indexer/flatten.py | 41 - utils/Indexer/index_criteria.py | 144 -- utils/Indexer/index_trials.py | 69 - utils/Indexer/prepare_criteria.py | 249 ---- utils/Indexer/prepare_trials.py | 166 --- utils/Indexer/zipper.sh | 31 - utils/Preprocessor/__init__.py | 0 utils/Preprocessor/jsonify.py | 87 -- .../Preprocessor/preprocess_clinical_notes.py | 537 -------- utils/Preprocessor/preprocessing.py | 67 - utils/Preprocessor/preprocessing_utils.py | 649 ---------- utils/Preprocessor/test/__init__.py | 0 utils/Preprocessor/test/test_preprocessing.py | 336 ----- utils/Preprocessor/utils.py | 599 --------- .../finetuning/finetune_instruct/__init__.py | 1 - .../finetuning/finetune_instruct/arguments.py | 184 --- utils/finetuning/finetune_instruct/data.py | 233 ---- .../finetune_instruct/data_llama.py | 172 --- .../finetune_instruct/data_summary.py | 240 ---- .../finetuning/finetune_instruct/evaluate.py | 269 ---- .../finetune_instruct/evaluate_CoT.py | 160 --- .../finetune_instruct/evaluate_gemma2.py | 242 ---- .../finetune_instruct/evaluate_llama.py | 202 --- .../finetuning/finetune_instruct/finetune.sh | 25 - .../finetune_instruct/load_model.py | 64 - .../finetuning/finetune_instruct/modeling.py | 83 -- utils/finetuning/finetune_instruct/run.py | 161 --- .../finetune_instruct/split_train_test.py | 27 - utils/finetuning/finetune_instruct/trainer.py | 70 - utils/gpt/gpt-generate-summaries.py | 218 ---- utils/gpt/gpt_generate_ideal_candidates.py | 407 ------ utils/gpt/gpt_generate_reranking_data.py | 166 --- uv.lock | 1153 +---------------- 168 files changed, 2339 insertions(+), 8491 deletions(-) create mode 100644 docs/architecture.md create mode 100644 docs/registry-updater.md create mode 100644 docs/release.md delete mode 100644 source/Matcher/cli/healthcheck.py delete mode 100644 source/Matcher/models/embedding/__init__.py delete mode 100644 source/Matcher/schemas/__init__.py delete mode 100644 source/Matcher/utils/__init__.py delete mode 100644 source/Parser/__init__.py delete mode 100644 source/Parser/biomedner_engine.py delete mode 100644 source/Parser/convert.py delete mode 100644 source/Parser/main.py delete mode 100644 source/Parser/normalizer.py delete mode 100644 source/__init__.py create mode 100644 src/Matcher/__init__.py create mode 100644 src/Matcher/config/__init__.py create mode 100644 src/Matcher/config/config_loader.py create mode 100644 src/Matcher/config/settings.py create mode 100644 src/Matcher/entities/__init__.py create mode 100644 src/Matcher/main.py create mode 100644 src/Matcher/pipeline/__init__.py create mode 100644 src/Matcher/pipeline/cot_reasoning.py create mode 100644 src/Matcher/pipeline/cot_reasoning_vllm.py create mode 100644 src/Matcher/pipeline/phenopacket_processor.py create mode 100644 src/Matcher/pipeline/trial_ranker.py create mode 100644 src/Matcher/pipeline/trial_search/__init__.py create mode 100644 src/Matcher/pipeline/trial_search/first_level_search.py create mode 100644 src/Matcher/pipeline/trial_search/second_level_search.py create mode 100644 src/Matcher/schemas/__init__.py create mode 100644 src/Matcher/search/__init__.py create mode 100644 src/Matcher/services/__init__.py create mode 100644 src/Matcher/utils/__init__.py create mode 100644 src/Matcher/utils/file_utils.py create mode 100644 src/Matcher/utils/json_utils.py create mode 100644 src/Matcher/utils/logging_config.py create mode 100644 src/Matcher/utils/retry.py create mode 100644 src/Matcher/utils/temporal_utils.py create mode 100644 src/Matcher/utils/timing.py create mode 100644 src/trialmatchai/__init__.py create mode 100644 src/trialmatchai/__main__.py rename {source/Matcher => src/trialmatchai}/cli/__init__.py (100%) rename {source/Matcher => src/trialmatchai}/cli/bootstrap_data.py (100%) rename {source/Matcher => src/trialmatchai}/cli/build_concepts.py (93%) create mode 100644 src/trialmatchai/cli/healthcheck.py rename {source/Matcher => src/trialmatchai}/cli/index_data.py (53%) create mode 100644 src/trialmatchai/cli/main.py rename {source/Matcher => src/trialmatchai}/cli/run.py (88%) create mode 100644 src/trialmatchai/cli/update_registry.py rename {source/Matcher => src/trialmatchai/config}/__init__.py (100%) rename {source/Matcher => src/trialmatchai}/config/config.json (81%) rename {source/Matcher => src/trialmatchai}/config/config_loader.py (83%) rename {source/Matcher => src/trialmatchai}/config/settings.py (85%) rename {source/Matcher => src/trialmatchai}/entities/__init__.py (66%) rename {source/Matcher => src/trialmatchai}/entities/annotator.py (90%) rename {source/Matcher => src/trialmatchai}/entities/builder.py (99%) rename {source/Matcher => src/trialmatchai}/entities/linker.py (98%) rename {source/Matcher => src/trialmatchai}/entities/recognizers.py (98%) rename {source/Matcher => src/trialmatchai}/entities/schemas.py (96%) rename {source/Matcher => src/trialmatchai}/entities/types.py (100%) rename {source/Matcher => src/trialmatchai}/entity_schemas/trialmatchai.yaml (100%) rename {source/Matcher => src/trialmatchai}/main.py (91%) rename {source/Matcher/config => src/trialmatchai/matching}/__init__.py (100%) rename source/Matcher/pipeline/cot_reasoning.py => src/trialmatchai/matching/eligibility_reasoning.py (98%) rename source/Matcher/pipeline/cot_reasoning_vllm.py => src/trialmatchai/matching/eligibility_reasoning_vllm.py (99%) rename {source/Matcher/pipeline => src/trialmatchai/matching}/phenopacket_processor.py (98%) rename {source/Matcher/models => src/trialmatchai/matching/retrieval}/__init__.py (100%) rename source/Matcher/pipeline/trial_search/second_level_search.py => src/trialmatchai/matching/retrieval/criteria_retrieval.py (96%) rename source/Matcher/pipeline/trial_search/first_level_search.py => src/trialmatchai/matching/retrieval/trial_retrieval.py (97%) rename {source/Matcher/pipeline => src/trialmatchai/matching}/trial_ranker.py (95%) rename {source/Matcher/models/llm => src/trialmatchai/models}/__init__.py (100%) create mode 100644 src/trialmatchai/models/embedding/__init__.py rename {source/Matcher => src/trialmatchai}/models/embedding/query_embedder.py (87%) rename {source/Matcher => src/trialmatchai}/models/embedding/sentence_embedder.py (87%) rename {source/Matcher => src/trialmatchai}/models/embedding/text_embedder.py (98%) rename {source/Matcher/pipeline => src/trialmatchai/models/llm}/__init__.py (100%) rename {source/Matcher => src/trialmatchai}/models/llm/llm_loader.py (98%) rename {source/Matcher => src/trialmatchai}/models/llm/llm_reranker.py (99%) rename {source/Matcher => src/trialmatchai}/models/llm/vllm_loader.py (98%) create mode 100644 src/trialmatchai/preprocessing/__init__.py create mode 100644 src/trialmatchai/preprocessing/regex/__init__.py rename {source => src/trialmatchai/preprocessing}/regex/exception_regex_patterns.json (100%) rename {source => src/trialmatchai/preprocessing}/regex/regex_patterns.json (100%) rename {source => src/trialmatchai/preprocessing}/regex/regex_variants.tsv (100%) create mode 100644 src/trialmatchai/registry/__init__.py create mode 100644 src/trialmatchai/registry/clinicaltrials_gov.py create mode 100644 src/trialmatchai/registry/defaults.py create mode 100644 src/trialmatchai/registry/manifest.py create mode 100644 src/trialmatchai/registry/normalization.py create mode 100644 src/trialmatchai/registry/preparation.py create mode 100644 src/trialmatchai/registry/updater.py create mode 100644 src/trialmatchai/schemas/__init__.py rename {source/Matcher => src/trialmatchai}/schemas/phenopacket.py (100%) rename {source/Matcher => src/trialmatchai}/search/__init__.py (85%) rename {source/Matcher => src/trialmatchai}/search/lancedb_backend.py (91%) rename {source/Matcher/pipeline/trial_search => src/trialmatchai/services}/__init__.py (100%) rename {source/Matcher => src/trialmatchai}/services/preflight.py (89%) rename {source/Matcher/services => src/trialmatchai/utils}/__init__.py (100%) rename {source/Matcher => src/trialmatchai}/utils/evaluation.py (98%) rename {source/Matcher => src/trialmatchai}/utils/file_utils.py (100%) rename {source/Matcher => src/trialmatchai}/utils/json_utils.py (100%) rename {source/Matcher => src/trialmatchai}/utils/logging_config.py (100%) rename {source/Matcher => src/trialmatchai}/utils/retry.py (100%) rename {source/Matcher => src/trialmatchai}/utils/temporal_utils.py (100%) rename {source/Matcher => src/trialmatchai}/utils/timing.py (100%) create mode 100644 tests/test_package_imports.py create mode 100644 tests/test_registry_updater.py delete mode 100644 utils/DataLoader/__init__.py delete mode 100644 utils/DataLoader/downloader.py delete mode 100644 utils/DataLoader/test/__init__.py delete mode 100644 utils/DataLoader/test/test_downloader.py delete mode 100644 utils/Indexer/__init__.py delete mode 100644 utils/Indexer/flatten.py delete mode 100644 utils/Indexer/index_criteria.py delete mode 100644 utils/Indexer/index_trials.py delete mode 100644 utils/Indexer/prepare_criteria.py delete mode 100644 utils/Indexer/prepare_trials.py delete mode 100644 utils/Indexer/zipper.sh delete mode 100644 utils/Preprocessor/__init__.py delete mode 100644 utils/Preprocessor/jsonify.py delete mode 100644 utils/Preprocessor/preprocess_clinical_notes.py delete mode 100644 utils/Preprocessor/preprocessing.py delete mode 100644 utils/Preprocessor/preprocessing_utils.py delete mode 100644 utils/Preprocessor/test/__init__.py delete mode 100644 utils/Preprocessor/test/test_preprocessing.py delete mode 100644 utils/Preprocessor/utils.py delete mode 100644 utils/finetuning/finetune_instruct/__init__.py delete mode 100644 utils/finetuning/finetune_instruct/arguments.py delete mode 100644 utils/finetuning/finetune_instruct/data.py delete mode 100644 utils/finetuning/finetune_instruct/data_llama.py delete mode 100644 utils/finetuning/finetune_instruct/data_summary.py delete mode 100644 utils/finetuning/finetune_instruct/evaluate.py delete mode 100644 utils/finetuning/finetune_instruct/evaluate_CoT.py delete mode 100644 utils/finetuning/finetune_instruct/evaluate_gemma2.py delete mode 100644 utils/finetuning/finetune_instruct/evaluate_llama.py delete mode 100644 utils/finetuning/finetune_instruct/finetune.sh delete mode 100644 utils/finetuning/finetune_instruct/load_model.py delete mode 100644 utils/finetuning/finetune_instruct/modeling.py delete mode 100644 utils/finetuning/finetune_instruct/run.py delete mode 100644 utils/finetuning/finetune_instruct/split_train_test.py delete mode 100644 utils/finetuning/finetune_instruct/trainer.py delete mode 100644 utils/gpt/gpt-generate-summaries.py delete mode 100644 utils/gpt/gpt_generate_ideal_candidates.py delete mode 100644 utils/gpt/gpt_generate_reranking_data.py diff --git a/.dockerignore b/.dockerignore index 408dc51c..ac57fd4e 100644 --- a/.dockerignore +++ b/.dockerignore @@ -14,16 +14,8 @@ data/ results/ models/ logs/ -elasticsearch/certs/ -elasticsearch/config/ -elasticsearch/data/ -elasticsearch/data1/ -elasticsearch/logs/ -elasticsearch/sif/ -elasticsearch/tmp-config/ -source/Parser/input/ -source/Parser/output/ -source/Parser/logs/ -source/Parser/models/ -source/Parser/resources/ -utils/Indexer/*.log +build/ +dist/ +*.egg-info/ +source/ +utils/ diff --git a/.env.example b/.env.example index 2ee996fa..10dc8e14 100644 --- a/.env.example +++ b/.env.example @@ -21,11 +21,24 @@ TRIALMATCHAI_COT_BACKEND=vllm TRIALMATCHAI_ENTITY_BACKEND=gliner2 TRIALMATCHAI_ENTITY_MODEL_NAME=fastino/gliner2-base -TRIALMATCHAI_ENTITY_SCHEMA_PATH=source/Matcher/entity_schemas/trialmatchai.yaml +TRIALMATCHAI_ENTITY_SCHEMA_PATH=src/trialmatchai/entity_schemas/trialmatchai.yaml TRIALMATCHAI_ENTITY_TRUST_REMOTE_CODE=false TRIALMATCHAI_CONCEPT_DB_PATH=data/concepts TRIALMATCHAI_CONCEPT_TABLE=concepts TRIALMATCHAI_LINK_ACCEPT=0.80 TRIALMATCHAI_LINK_REJECT=0.30 + +TRIALMATCHAI_REGISTRY_SOURCE=clinicaltrials.gov +TRIALMATCHAI_REGISTRY_API_BASE_URL=https://clinicaltrials.gov/api/v2/studies +TRIALMATCHAI_REGISTRY_KEYWORDS_FILE= +TRIALMATCHAI_REGISTRY_SINCE_DAYS=7 +TRIALMATCHAI_REGISTRY_MAX_STUDIES= +TRIALMATCHAI_REGISTRY_REQUEST_TIMEOUT=30 +TRIALMATCHAI_REGISTRY_RATE_LIMIT_PER_SECOND=2 +TRIALMATCHAI_REGISTRY_RAW_DIR=data/registry/raw +TRIALMATCHAI_REGISTRY_MANIFEST_PATH=data/registry/manifest.jsonl +TRIALMATCHAI_REGISTRY_REPORTS_DIR=data/registry/runs +TRIALMATCHAI_REGISTRY_FAILURE_THRESHOLD=0.25 + TRIALMATCHAI_LOG_LEVEL=INFO TRIALMATCHAI_LOG_JSON=1 diff --git a/.gitignore b/.gitignore index cc9e6955..6135ab2a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ # ============================ data/ results/ -src/ ablation/ logs/ *.log @@ -11,43 +10,15 @@ logs/ .env.* !.env.example -# ============================ -# Finetuning ignore rules -# ============================ - -# Ignore ANY directory under finetuning/ starting with checkpoint -**/finetuning/**/checkpoint*/ - -# Ignore ANY directory under finetuning/ starting with finetuned -**/finetuning/**/finetuned*/ - -# Ignore ANY directory under finetuning/ ending with "data" -**/finetuning/**/*data/ - -# Ignore this explicit model folder -utils/finetuning/finetune_ner/RoBERTa-large-PM-M3-Voc/ -utils/finetuning/finetune_ner/output_eval -utils/finetuning/finetune_ner - -# ============================ -# Parser artifacts -# ============================ models/ -source/Parser/resources/ -source/Parser/models/ -source/Parser/input/ -source/Parser/output/ -source/Parser/logs/ -Parser/logs/ +source/ +Parser/ # ============================ # Generated indexing state # ============================ -utils/DataLoader/nct_ids.txt -utils/Indexer/nct_ids.txt -utils/Indexer/processed_ids.txt -utils/Indexer/*.log *.lance +*.lancedb # ============================ # Python cache diff --git a/Dockerfile b/Dockerfile index 03620340..8b9232e9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,11 +19,10 @@ RUN apt-get update \ && pip install --no-cache-dir uv COPY pyproject.toml uv.lock README.md LICENSE ./ -COPY source ./source +COPY src ./src COPY scripts ./scripts -COPY utils ./utils -RUN uv sync --frozen --no-dev --extra gpu --extra entity +RUN uv sync --frozen --no-dev --extra llm --extra gpu --extra entity VOLUME ["/app/data", "/app/models", "/app/results"] diff --git a/README.md b/README.md index 9f0202e8..2cb567dd 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ The supported v1 deployment path is a single Python 3.11 GPU server or VM. Trial ## Security First -No real credentials, generated private keys, Parser outputs, datasets, models, local LanceDB data, or results should be committed. Copy the template and keep runtime values local: +No real credentials, generated private keys, datasets, models, local LanceDB data, run manifests, or results should be committed. Copy the template and keep runtime values local: ```bash cp .env.example .env @@ -32,24 +32,23 @@ Dependency auditing currently ignores `CVE-2025-3000` because vLLM 0.23 pins Tor ## Quickstart -Install deployment dependencies: +Install the package for local development and operational CLIs: ```bash -uv sync --extra gpu --extra entity +uv sync ``` -For local development, tests, healthchecks, or `TRIALMATCHAI_COT_BACKEND=default`: +Install deployment dependencies for model-backed indexing, entity extraction, and vLLM reasoning: ```bash -uv sync +uv sync --extra llm --extra gpu --extra entity ``` Optional tooling: ```bash -uv sync --extra llm # OpenAI/LangChain data-generation utilities -uv sync --extra entity # GLiNER2 entity extraction -uv sync --extra training # fine-tuning and evaluation utilities +uv sync --extra entity # GLiNER/GLiNER2 entity extraction +uv sync --extra llm # local embedding and LLM stack ``` Run a config and backend healthcheck: @@ -64,7 +63,8 @@ Provision data, models, concept KB, and search tables: ```bash uv run trialmatchai-bootstrap-data uv run trialmatchai-build-concepts --concept-csv data/omop/CONCEPT.csv --synonym-csv data/omop/CONCEPT_SYNONYM.csv -uv run trialmatchai-index +uv run trialmatchai-update-registry --since 2026-06-01 --max-studies 100 +uv run trialmatchai-index --prepare ``` Run the batch matcher: @@ -82,12 +82,13 @@ Docker is optional. The worker container uses mounted local folders and the same ```bash docker compose build trialmatchai-worker docker compose run --rm trialmatchai-worker trialmatchai-healthcheck +docker compose run --rm trialmatchai-worker trialmatchai-update-registry --max-studies 100 docker compose run --rm trialmatchai-worker trialmatchai-run ``` ## Configuration -Configuration defaults live in `source/Matcher/config/config.json`. Runtime overrides use `.env` or environment variables: +Configuration defaults live in `src/trialmatchai/config/config.json`. Runtime overrides use `.env` or environment variables: ```bash TRIALMATCHAI_PATIENTS_DIR=example @@ -103,11 +104,21 @@ TRIALMATCHAI_SEARCH_MODE=hybrid TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false TRIALMATCHAI_ENTITY_BACKEND=gliner2 -TRIALMATCHAI_ENTITY_SCHEMA_PATH=source/Matcher/entity_schemas/trialmatchai.yaml +TRIALMATCHAI_ENTITY_SCHEMA_PATH=src/trialmatchai/entity_schemas/trialmatchai.yaml TRIALMATCHAI_CONCEPT_DB_PATH=data/concepts TRIALMATCHAI_CONCEPT_TABLE=concepts TRIALMATCHAI_LINK_ACCEPT=0.80 TRIALMATCHAI_LINK_REJECT=0.30 + +TRIALMATCHAI_REGISTRY_SOURCE=clinicaltrials.gov +TRIALMATCHAI_REGISTRY_KEYWORDS_FILE= +TRIALMATCHAI_REGISTRY_SINCE_DAYS=7 +TRIALMATCHAI_REGISTRY_MAX_STUDIES= +TRIALMATCHAI_REGISTRY_REQUEST_TIMEOUT=30 +TRIALMATCHAI_REGISTRY_RATE_LIMIT_PER_SECOND=2 +TRIALMATCHAI_REGISTRY_RAW_DIR=data/registry/raw +TRIALMATCHAI_REGISTRY_MANIFEST_PATH=data/registry/manifest.jsonl +TRIALMATCHAI_REGISTRY_REPORTS_DIR=data/registry/runs TRIALMATCHAI_LOG_JSON=1 ``` @@ -118,9 +129,45 @@ Use `TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=true` only when a selected model expli - `trialmatchai-healthcheck`: validate config, paths, and optionally LanceDB search tables. - `trialmatchai-bootstrap-data`: download and extract external data/model artifacts. - `trialmatchai-build-concepts`: build the LanceDB concept table used for entity normalization. -- `trialmatchai-index`: build the LanceDB trial and criteria search tables. +- `trialmatchai-update-registry`: fetch new/changed ClinicalTrials.gov studies, write normalized JSON, and upsert LanceDB. +- `trialmatchai-index`: build the LanceDB trial and criteria search tables from prepared rows or `--prepare` normalized JSON. - `trialmatchai-run`: run the batch matching pipeline. +The command group is also available as: + +```bash +uv run python -m trialmatchai healthcheck +uv run trialmatchai update-registry --dry-run --max-studies 25 +``` + +## Registry Updater + +The registry updater is designed for cron, systemd timers, and GitHub Actions. It uses ClinicalTrials.gov v2 `/api/v2/studies`, stores raw source JSON under `data/registry/raw`, writes normalized trial JSON under `data/trials_jsons`, appends idempotency records to `data/registry/manifest.jsonl`, and upserts only new or changed studies into LanceDB. + +Run with explicit keywords: + +```bash +uv run trialmatchai-update-registry \ + --keyword "lung cancer" \ + --keyword "EGFR" \ + --since 2026-06-01 \ + --max-studies 250 +``` + +Run with broad defaults: + +```bash +uv run trialmatchai-update-registry --max-studies 500 +``` + +Dry-run without writes or table changes: + +```bash +uv run trialmatchai-update-registry --dry-run --max-studies 25 +``` + +See `docs/registry-updater.md` for scheduler examples. + ## Tests and Checks ```bash diff --git a/docker-compose.yml b/docker-compose.yml index dbe07663..75830ffa 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,10 +16,15 @@ services: TRIALMATCHAI_SEARCH_CRITERIA_TABLE: criteria TRIALMATCHAI_SEARCH_MODE: hybrid TRIALMATCHAI_ENTITY_BACKEND: gliner2 - TRIALMATCHAI_ENTITY_SCHEMA_PATH: /app/source/Matcher/entity_schemas/trialmatchai.yaml + TRIALMATCHAI_ENTITY_SCHEMA_PATH: /app/src/trialmatchai/entity_schemas/trialmatchai.yaml TRIALMATCHAI_CONCEPT_DB_PATH: /app/data/concepts TRIALMATCHAI_CONCEPT_TABLE: concepts TRIALMATCHAI_LINK_ACCEPT: "0.80" TRIALMATCHAI_LINK_REJECT: "0.30" + TRIALMATCHAI_REGISTRY_SOURCE: clinicaltrials.gov + TRIALMATCHAI_REGISTRY_SINCE_DAYS: "7" + TRIALMATCHAI_REGISTRY_RAW_DIR: /app/data/registry/raw + TRIALMATCHAI_REGISTRY_MANIFEST_PATH: /app/data/registry/manifest.jsonl + TRIALMATCHAI_REGISTRY_REPORTS_DIR: /app/data/registry/runs TRIALMATCHAI_LOG_JSON: "1" - command: ["trialmatchai-healthcheck"] + command: ["trialmatchai-healthcheck", "--registry"] diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 00000000..707ee589 --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,41 @@ +# TrialMatchAI Architecture + +TrialMatchAI is an installable Python package exposed as `trialmatchai`. The supported runtime code lives under `src/trialmatchai`; `src/Matcher` is a temporary deprecated import shim for one release cycle. + +## Runtime Subsystems + +- `trialmatchai.config`: Pydantic-backed settings, path resolution, and `TRIALMATCHAI_` environment overrides. +- `trialmatchai.entities`: schema-driven biomedical entity recognition plus LanceDB-backed concept linking. +- `trialmatchai.registry`: ClinicalTrials.gov v2 client, record normalization, manifest idempotency, preparation, and update orchestration. +- `trialmatchai.search`: embedded LanceDB search tables for trials and eligibility criteria. +- `trialmatchai.matching`: first-stage retrieval, criteria retrieval, ranking, and eligibility reasoning. +- `trialmatchai.models`: local embedding and LLM loader utilities. Install with `--extra llm` and `--extra gpu` for production model runs. +- `trialmatchai.cli`: public command entry points. + +## Data Flow + +1. `trialmatchai-update-registry` fetches studies from ClinicalTrials.gov v2. +2. Raw source JSON is written to `data/registry/raw/.json`. +3. Normalized trial JSON is written to `data/trials_jsons/.json`. +4. Changed studies are embedded, criteria are optionally entity annotated, and LanceDB trial/criteria tables are upserted. +5. `trialmatchai-run` reads patient inputs, queries LanceDB, reranks candidate criteria/trials, and writes results. + +## Storage + +LanceDB is the only search database. It is embedded, file-backed, and stored under `data/search` by default. The concept linker uses a separate LanceDB database under `data/concepts`. + +The registry manifest is append-only JSONL at `data/registry/manifest.jsonl`. The latest record per `nct_id` determines idempotency. + +## Compatibility + +`Matcher` import shims are kept temporarily for downstream callers: + +```python +from Matcher.config.config_loader import load_config +``` + +New code must import: + +```python +from trialmatchai.config.config_loader import load_config +``` diff --git a/docs/registry-updater.md b/docs/registry-updater.md new file mode 100644 index 00000000..7846d450 --- /dev/null +++ b/docs/registry-updater.md @@ -0,0 +1,89 @@ +# Registry Updater + +`trialmatchai-update-registry` updates the local LanceDB-backed trial registry from ClinicalTrials.gov v2. It is command-based and safe to run from cron, systemd timers, or GitHub Actions. + +## Basic Usage + +```bash +uv run trialmatchai-update-registry --max-studies 500 +``` + +When no keyword is provided, TrialMatchAI uses broad default keyword queries covering oncology, cardiology, neurology, rare disease, immunology, infectious disease, metabolic disease, hematology, pediatrics, and precision medicine. + +Use explicit keywords: + +```bash +uv run trialmatchai-update-registry \ + --keyword "lung cancer" \ + --keyword "EGFR" \ + --since 2026-06-01 \ + --max-studies 250 +``` + +Use a keyword file: + +```bash +uv run trialmatchai-update-registry --keywords-file data/registry/keywords.txt +``` + +Dry-run: + +```bash +uv run trialmatchai-update-registry --dry-run --max-studies 25 +``` + +Dry-runs do not write raw JSON, normalized trial JSON, manifests, reports, or LanceDB tables unless an explicit `--report-path` is provided. + +## Idempotency + +Each fetched source record is hashed after canonical JSON serialization. If the latest manifest entry for an NCT ID has the same source hash, the updater skips preparation and indexing. + +Changed studies are written and then upserted: + +- Trial rows are replaced by `nct_id`. +- Criteria rows are replaced by `nct_id`. +- Failures are recorded per study and do not stop the run unless the failure rate exceeds `TRIALMATCHAI_REGISTRY_FAILURE_THRESHOLD`. + +## Cron + +Run daily at 02:30: + +```cron +30 2 * * * cd /opt/TrialMatchAI && /usr/local/bin/uv run trialmatchai-update-registry --max-studies 1000 >> logs/registry-update.log 2>&1 +``` + +## systemd + +Service: + +```ini +[Unit] +Description=TrialMatchAI registry update + +[Service] +Type=oneshot +WorkingDirectory=/opt/TrialMatchAI +ExecStart=/usr/local/bin/uv run trialmatchai-update-registry --max-studies 1000 +``` + +Timer: + +```ini +[Unit] +Description=Daily TrialMatchAI registry update + +[Timer] +OnCalendar=*-*-* 02:30:00 +Persistent=true + +[Install] +WantedBy=timers.target +``` + +## Healthcheck + +```bash +uv run trialmatchai-healthcheck --registry --require-tables +``` + +Use `--require-tables` after the first successful update or indexing run. diff --git a/docs/release.md b/docs/release.md new file mode 100644 index 00000000..26bcf207 --- /dev/null +++ b/docs/release.md @@ -0,0 +1,43 @@ +# Release Checklist + +TrialMatchAI uses a `src/` package layout and exposes the public package name `trialmatchai`. + +## Local Checks + +```bash +uv lock --check +uv run ruff check . +uv run pytest +uv build +uv run python scripts/scan_secrets.py +uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 +``` + +Smoke test console commands: + +```bash +uv run trialmatchai --help +uv run trialmatchai-healthcheck --help +uv run trialmatchai-index --help +uv run trialmatchai-build-concepts --help +uv run trialmatchai-update-registry --help +uv run trialmatchai-run --help +``` + +Wheel install smoke: + +```bash +uv build +python -m venv /tmp/trialmatchai-wheel-smoke +/tmp/trialmatchai-wheel-smoke/bin/pip install dist/trialmatchai-*.whl +/tmp/trialmatchai-wheel-smoke/bin/python -c "import trialmatchai; print(trialmatchai.__version__)" +``` + +## Container Checks + +```bash +docker compose config +docker build . +``` + +Docker is not required for local LanceDB operation; it is a packaging option for a worker environment. diff --git a/pyproject.toml b/pyproject.toml index c48615dc..b8212c2c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,59 +3,29 @@ requires = ["setuptools>=68", "wheel"] build-backend = "setuptools.build_meta" [project] -name = "TrialMatchAI" -version = "0.1.0" +name = "trialmatchai" +version = "0.2.0" description = "AI-driven clinical trial matching pipeline." readme = "README.md" requires-python = ">=3.11,<3.12" license = "MIT" license-files = ["LICENSE"] dependencies = [ - # Core ML / NLP - "torch==2.11.0", - "transformers==5.6.2", - "accelerate==1.8.1", - "tokenizers==0.22.1", - "safetensors>=0.6.2,<0.7", - "sentencepiece==0.2.1", - "faiss-cpu==1.9.0.post1", - "peft==0.15.2", - "einops==0.8.0", - "tiktoken==0.8.0", - # Classical stack & utilities "numpy>=2.0,<3", - "scipy==1.15.1", - "scikit-learn==1.6.1", "pandas==2.2.3", "python-dateutil==2.9.0.post0", "requests==2.34.2", "tenacity==9.0.0", - "joblib==1.4.2", "tqdm==4.67.1", "regex>=2025.10.22,<2027", - "orjson==3.11.9", "PyYAML==6.0.2", "python-dotenv==1.2.2", "rich==13.9.4", "lancedb>=0.25.0,<0.26", "pyarrow>=24.0.0,<25", - # spaCy / medspaCy (for your medical text work) - "spacy==3.7.5", - "medspacy==1.3.1", - "medspacy_quickumls==3.2", - "PyRuSH==1.0.9", - "PyFastNER==1.0.10", - "pysbd==0.3.4", - "quicksectx==0.4.0", - "gliner==0.2.27", - # App / infra - "SQLAlchemy==2.0.37", "pydantic>=2.12.0,<3", - "pydantic-settings>=2.14.2,<3", - "huggingface_hub>=1.5.0,<2", "bioregistry==0.13.62", "rapidfuzz==3.14.5", - "nltk==3.9.4", ] [project.optional-dependencies] @@ -64,27 +34,30 @@ gpu = [ "vllm==0.23.0; sys_platform == 'linux'", ] llm = [ - "openai>=2.26.0,<3", - "httpx==0.28.1", - "langchain==1.3.10", - "langchain-community==0.4.2", - "langchain-openai==1.3.2", + "torch==2.11.0", + "transformers==5.6.2", + "accelerate==1.8.1", + "tokenizers==0.22.1", + "safetensors>=0.6.2,<0.7", + "sentencepiece==0.2.1", + "peft==0.15.2", + "einops==0.8.0", ] entity = [ + "torch==2.11.0", + "transformers==5.6.2", + "gliner==0.2.27", "gliner2>=1.3.1,<2", ] -training = [ - "datasets==2.19.0", - "bert-score==0.3.13", - "jinja2==3.1.6", -] [project.scripts] -trialmatchai-healthcheck = "Matcher.cli.healthcheck:main" -trialmatchai-run = "Matcher.cli.run:main" -trialmatchai-bootstrap-data = "Matcher.cli.bootstrap_data:main" -trialmatchai-index = "Matcher.cli.index_data:main" -trialmatchai-build-concepts = "Matcher.cli.build_concepts:main" +trialmatchai = "trialmatchai.cli.main:main" +trialmatchai-healthcheck = "trialmatchai.cli.healthcheck:main" +trialmatchai-run = "trialmatchai.cli.run:main" +trialmatchai-bootstrap-data = "trialmatchai.cli.bootstrap_data:main" +trialmatchai-index = "trialmatchai.cli.index_data:main" +trialmatchai-build-concepts = "trialmatchai.cli.build_concepts:main" +trialmatchai-update-registry = "trialmatchai.cli.update_registry:main" [dependency-groups] dev = [ @@ -94,14 +67,19 @@ dev = [ ] [tool.setuptools] -package-dir = {"" = "source"} +package-dir = {"" = "src"} include-package-data = true [tool.setuptools.packages.find] -where = ["source"] +where = ["src"] [tool.setuptools.package-data] -Matcher = ["config/*.json", "entity_schemas/*.yaml"] +trialmatchai = [ + "config/*.json", + "entity_schemas/*.yaml", + "preprocessing/regex/*.json", + "preprocessing/regex/*.tsv", +] [tool.uv] environments = [ diff --git a/scripts/bootstrap_data.sh b/scripts/bootstrap_data.sh index ebf72565..e22e2369 100644 --- a/scripts/bootstrap_data.sh +++ b/scripts/bootstrap_data.sh @@ -3,14 +3,12 @@ set -euo pipefail IFS=$'\n\t' DATA_URL_1="https://zenodo.org/records/15516900/files/processed_trials.tar.gz?download=1" -RESOURCES_URL="https://zenodo.org/records/15516900/files/resources.tar.gz?download=1" MODELS_URL="https://zenodo.org/records/15516900/files/models.tar.gz?download=1" CRITERIA_ZIP_BASE_URL="https://zenodo.org/records/15516900/files" CHUNK_PREFIX="criteria_part" CHUNK_COUNT=6 ARCHIVE_1="processed_trials.tar.gz" -RESOURCES_ARCHIVE="resources.tar.gz" MODELS_ARCHIVE="models.tar.gz" GREEN='\033[0;32m' @@ -73,14 +71,6 @@ else fi verify_sha256 "$ARCHIVE_1" "${TRIALMATCHAI_PROCESSED_TRIALS_SHA256:-}" -if [ ! -f "$RESOURCES_ARCHIVE" ]; then - info "Downloading ${RESOURCES_ARCHIVE}..." - curl -fsSL "$RESOURCES_URL" -o "$RESOURCES_ARCHIVE" -else - info "${RESOURCES_ARCHIVE} already exists. Skipping download." -fi -verify_sha256 "$RESOURCES_ARCHIVE" "${TRIALMATCHAI_RESOURCES_SHA256:-}" - if [ ! -f "$MODELS_ARCHIVE" ]; then info "Downloading ${MODELS_ARCHIVE}..." curl -fsSL "$MODELS_URL" -o "$MODELS_ARCHIVE" @@ -122,16 +112,12 @@ fi cd "$ROOT_DIR" -info "Extracting resources into source/Parser..." -mkdir -p source/Parser -extract_tar_gz "$DATA_DIR/$RESOURCES_ARCHIVE" source/Parser - info "Extracting models into models/..." mkdir -p models extract_tar_gz "$DATA_DIR/$MODELS_ARCHIVE" models info "Cleaning up archives..." -rm -f "$DATA_DIR/$ARCHIVE_1" "$DATA_DIR/$RESOURCES_ARCHIVE" "$DATA_DIR/$MODELS_ARCHIVE" +rm -f "$DATA_DIR/$ARCHIVE_1" "$DATA_DIR/$MODELS_ARCHIVE" for i in $(seq 0 $((CHUNK_COUNT - 1))); do rm -f "$DATA_DIR/${CHUNK_PREFIX}_${i}.zip" done diff --git a/source/Matcher/cli/healthcheck.py b/source/Matcher/cli/healthcheck.py deleted file mode 100644 index 46edd2fb..00000000 --- a/source/Matcher/cli/healthcheck.py +++ /dev/null @@ -1,50 +0,0 @@ -from __future__ import annotations - -import argparse -import sys - -from Matcher.config.config_loader import load_config -from Matcher.search import LanceDBSearchBackend -from Matcher.services.preflight import run_preflight_checks -from Matcher.utils.logging_config import setup_logging - -logger = setup_logging(__name__) - - -def main() -> int: - parser = argparse.ArgumentParser(description="TrialMatchAI healthcheck") - parser.add_argument( - "--config", - default=None, - help="Path to config.json", - ) - parser.add_argument( - "--require-tables", - action="store_true", - help="Fail if configured LanceDB search tables are missing", - ) - args = parser.parse_args() - - config = load_config(args.config) - issues = 0 - search_backend = LanceDBSearchBackend.from_config(config) - - preflight_issues = run_preflight_checks( - config, - require_patient_inputs=False, - require_trials_json=False, - require_models=False, - ) - issues += len(preflight_issues) - - backend_issues = search_backend.health(require_tables=args.require_tables) - if backend_issues: - for issue in backend_issues: - logger.error("Search backend healthcheck failed: %s", issue) - issues += len(backend_issues) - else: - logger.info("LanceDB search backend reachable at %s.", search_backend.db_path) - - return 1 if issues else 0 -if __name__ == "__main__": - sys.exit(main()) diff --git a/source/Matcher/models/embedding/__init__.py b/source/Matcher/models/embedding/__init__.py deleted file mode 100644 index 06c33a33..00000000 --- a/source/Matcher/models/embedding/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from Matcher.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig - -__all__ = ["TextEmbedder", "TextEmbedderConfig"] diff --git a/source/Matcher/schemas/__init__.py b/source/Matcher/schemas/__init__.py deleted file mode 100644 index acbb6535..00000000 --- a/source/Matcher/schemas/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from Matcher.schemas.phenopacket import Keywords, Phenopacket - -__all__ = ["Keywords", "Phenopacket"] diff --git a/source/Matcher/utils/__init__.py b/source/Matcher/utils/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/source/Parser/__init__.py b/source/Parser/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/source/Parser/biomedner_engine.py b/source/Parser/biomedner_engine.py deleted file mode 100644 index 7bc00975..00000000 --- a/source/Parser/biomedner_engine.py +++ /dev/null @@ -1,104 +0,0 @@ -from __future__ import annotations - -from pathlib import Path -from typing import Any, Sequence - -from Matcher.entities import build_entity_annotator - - -class BioMedNER: - """Compatibility wrapper over the Python-native TrialMatchAI entity annotator.""" - - def __init__(self, *args: Any, config: dict[str, Any] | None = None, **kwargs: Any): - del args, kwargs - self._annotator = build_entity_annotator(config or _default_config()) - - @staticmethod - def load_dictionary_file(file_path: str | Path) -> list[str]: - with Path(file_path).open("r", encoding="utf-8") as handle: - return handle.read().splitlines() - - def annotate_text(self, text: str) -> list[dict[str, Any]]: - return self._annotator.annotate_text(text) - - def annotate_texts_in_parallel( - self, - texts: Sequence[str], - max_workers: int = 20, - retries: int = 1, - delay: float = 0, - ) -> list[list[dict[str, Any]]]: - return self._annotator.annotate_texts_in_parallel( - texts, - max_workers=max_workers, - retries=retries, - delay=delay, - ) - - -def _default_config() -> dict[str, Any]: - return { - "entity_extraction": { - "backend": "gliner2", - "model_name": "fastino/gliner2-base", - "fallback_model_name": "gliner-community/gliner_large-v2.5", - "schema_path": str(_repo_root() / "source/Matcher/entity_schemas/trialmatchai.yaml"), - "batch_size": 8, - "device": "auto", - "trust_remote_code": False, - }, - "concept_linker": { - "enabled": True, - "db_path": str(_repo_root() / "data/concepts"), - "table": "concepts", - "accept_threshold": 0.8, - "reject_threshold": 0.3, - "search_limit": 10, - }, - } - - -def _repo_root() -> Path: - start = Path(__file__).resolve() - for parent in start.parents: - if (parent / "pyproject.toml").exists(): - return parent - return Path.cwd().resolve() - - -def transform_results(data: dict[str, Any]) -> list[dict[str, Any]]: - """Best-effort adapter for callers that still pass PubTator-style JSON.""" - annotations = data.get("annotations", []) if isinstance(data, dict) else [] - results: list[dict[str, Any]] = [] - for annotation in annotations: - span = annotation.get("span", {}) - results.append( - { - "entity_group": annotation.get("obj", ""), - "score": annotation.get("prob", 0.0), - "text": annotation.get("mention", ""), - "start": span.get("begin", 0), - "end": span.get("end", 0), - "normalized_id": annotation.get("id", ["CUI-less"]), - "synonyms": [], - "concept_candidates": [], - "linker_score": None, - "linker_status": "not_linked", - } - ) - return results - - -def append_synonyms( - ner_results: list[dict[str, Any]], dict_paths: dict[str, str | Path] -) -> None: - del dict_paths - for entity in ner_results: - entity.setdefault("synonyms", []) - - -def get_synonyms_from_file( - file_path: str | Path, entity_ids: Sequence[str] -) -> list[str]: - del file_path, entity_ids - return [] diff --git a/source/Parser/convert.py b/source/Parser/convert.py deleted file mode 100644 index f0e036dd..00000000 --- a/source/Parser/convert.py +++ /dev/null @@ -1,416 +0,0 @@ -import copy -import json -from datetime import datetime, timezone -from operator import itemgetter - -# from download import query_pubtator2biocxml - - -def pubtator2dict_list(pubtator_file_path): - dict_list = list() - - title_pmid = "" - # abstract_pmid = '' - abstract_text = "" - doc_line_num = 0 - mutations = list() - - with open(pubtator_file_path, "r", encoding="utf-8") as f: - for line in f: - line = line.rstrip() - if len(line) == 0: - if len(mutations) > 0: - if len(mutations) > 1: - mutations = sorted(mutations, key=itemgetter("start")) - - mutations = get_bestplus_spans(mutations, abstract_text) - - doc_dict = { - "pmid": title_pmid, - "mutation_model": "tmVar 2.0", - "entities": {"mutation": copy.deepcopy(mutations)}, - } - doc_dict["abstract"] = abstract_text - - dict_list.append(doc_dict) - - doc_line_num = 0 - mutations.clear() - continue - - if doc_line_num == 0: - title_cols = line.split("|t|") - - if len(title_cols) != 2: - return '{"error": "wrong #title_cols %d"}' % len(title_cols) - - title_pmid = title_cols[0] - - # The 'title' variable is not used, so we skip assigning it. - elif doc_line_num == 1: - abstract_cols = line.split("|a|") - - if len(abstract_cols) != 2: - if len(abstract_cols) > 2: - abstract_text = "|a|".join(abstract_cols[1:]) - else: - return '{"error": "wrong #abstract_cols %d"}' % len( - abstract_cols - ) - else: - if "- No text -" == abstract_cols[1]: - # make tmvar2 results empty - abstract_text = "" - else: - abstract_text = abstract_cols[1] - elif doc_line_num > 1: - mutation_cols = line.split("\t") - - if len(mutation_cols) != 6: - return '{"error": "wrong #mutation_cols %d"}' % len(mutation_cols) - - mutations.append( - { - "start": int(mutation_cols[1]), - "end": int(mutation_cols[2]), - "mention": mutation_cols[3], - "mutationType": mutation_cols[4], - "normalizedName": mutation_cols[5], - } - ) - - doc_line_num += 1 - return dict_list - - -def preprocess(text): - text = text.replace("\r ", " ") - - text = text.replace("\u2028", " ") - text = text.replace("\u2029", " ") - - # HAIR SPACE - # https://www.fileformat.info/info/unicode/char/200a/index.htm - text = text.replace("\u200a", " ") - - # THIN SPACE - # https://www.fileformat.info/info/unicode/char/2009/index.htm - text = text.replace("\u2009", " ") - text = text.replace("\u2008", " ") - - # FOUR-PER-EM SPACE - # https://www.fileformat.info/info/unicode/char/2005/index.htm - text = text.replace("\u2005", " ") - text = text.replace("\u2004", " ") - text = text.replace("\u2003", " ") - - # EN SPACE - # https://www.fileformat.info/info/unicode/char/2002/index.htm - text = text.replace("\u2002", " ") - - # NO-BREAK SPACE - # https://www.fileformat.info/info/unicode/char/00a0/index.htm - text = text.replace("\u00a0", " ") - - # https://www.fileformat.info/info/unicode/char/f8ff/index.htm - text = text.replace("\uf8ff", " ") - - # https://www.fileformat.info/info/unicode/char/202f/index.htm - text = text.replace("\u202f", " ") - - text = text.replace("\ufeff", " ") - text = text.replace("\uf044", " ") - text = text.replace("\uf02d", " ") - text = text.replace("\uf0bb", " ") - - text = text.replace("\uf048", "Η") - text = text.replace("\uf0b0", "°") - - # MIDLINE HORIZONTAL ELLIPSIS: ⋯ - # https://www.fileformat.info/info/unicode/char/22ef/index.htm - # text = text.replace('\u22EF', '...') - - return text - - -def pubtator2pubannotation(pubtator): - dict_list = list() - - title_pmid = "" - abstract_pmid = "" - title = "" - abstract_text = "" - doc_line_num = 0 - entities = list() - - for line in pubtator.splitlines(): - if len(line) == 0: - if title_pmid != abstract_pmid: - return '{"error": "pmid disagreement"}' - - doc_dict = { - "text": title + " " + abstract_text, - "project": "biomedner", - "sourcedb": "PubMed", - "sourceid": title_pmid, - "annotations": copy.deepcopy(entities), - } - - dict_list.append(doc_dict) - - doc_line_num = 0 - entities.clear() - continue - - if doc_line_num == 0: - title_cols = line.split("|t|") - - if len(title_cols) != 2: - return '{"error": "wrong #title_cols=%d", "line": "%s"}' % ( - len(title_cols), - line, - ) - - title_pmid = title_cols[0] - - if "- No text -" == title_cols[1]: - # make tmvar2 results empty - title = "" - else: - title = title_cols[1] - elif doc_line_num == 1: - abstract_cols = line.split("|a|") - - if len(abstract_cols) != 2: - return '{"error": "wrong #abstract_cols %d"}' % len(abstract_cols) - - abstract_pmid = abstract_cols[0] - - if "- No text -" == abstract_cols[1] or "-NoAbstract-" == abstract_cols[1]: - # make tmvar2 results empty - abstract_text = "" - else: - abstract_text = abstract_cols[1] - elif doc_line_num > 1: - entity_cols = line.split("\t") - - if len(entity_cols) != 6: - return '{"error": "wrong #mutation_cols %d"}' % len(entity_cols) - - if entity_cols[4] in entity_cols: - entities.append( - { - "obj": entity_cols[4], - "id": entity_cols[5].split("|"), - "span": { - "begin": int(entity_cols[1]), - "end": int(entity_cols[2]), - }, - } - ) - - doc_line_num += 1 - return dict_list - - -def get_bestplus_spans(mutations, title_space_abstract): - adjusted_mutations = list() - - mention_count_dict = dict() - for m in mutations: - if "No text" in m["mention"]: - continue - - # (20220113) hotfix - if "text " in m["mention"]: - continue - - if m["mention"] in mention_count_dict: - mention_count_dict[m["mention"]] += 1 - else: - mention_count_dict[m["mention"]] = 1 - - count = mention_count_dict[m["mention"]] - - start = -1 - found = 0 - try: - while found < count: - start = title_space_abstract.index(m["mention"], start + 1) - assert start > -1 - found += 1 - except ValueError: - # hotfix for tmvar wrong mention - continue - - end = start + len(m["mention"]) - 1 # 2018.8.29 @chanho feedback - - assert m["mention"] == title_space_abstract[start : end + 1] - - adjusted_mutations.append( - { - "start": start, - "end": end, - "mention": m["mention"], - "mutationType": m["mutationType"], - "normalizedName": m["normalizedName"], - } - ) - - return adjusted_mutations - - -# Ref. -# http://pubannotation.org/docs/sourcedb/PubMed/sourceid/10022882/spans/606-710/annotations.json -# http://www.pubannotation.org/docs/annotation-format/ -def get_pub_annotation(biomedner_dict): - sourceid = biomedner_dict["pmid"] - - sourcedb = "" - text = biomedner_dict["abstract"] - - pa_dict = { - "project": "TrialMatchAI", - "sourcedb": sourcedb, - "sourceid": sourceid, - "text": text, - "annotations": biomedner2pub_annotation( - biomedner_dict["entities"], biomedner_dict, text - ), - "timestamp": datetime.now(tz=timezone.utc).strftime("%a %b %d %H:%M:%S %z %Y"), - } - - return pa_dict - - -def biomedner2pub_annotation(entity_dict, biomedner_dict, text): - entity_list = list() - for etype in entity_dict: - for entity_idx, entity in enumerate(entity_dict[etype]): - # TODO prevention in the previous step - if "id" not in entity: - entity["id"] = "CUI-less" - - assert "id" in entity, "{}, entity={}, entity_dict={}".format( - etype, entity, entity_dict - ) - assert "start" in entity and "end" in entity, ( - "{}, entity={}, entity_dict={}".format(etype, entity, entity_dict) - ) - - if "\t" in entity["id"]: - eid = entity["id"].split("\t") - else: - eid = [entity["id"]] - - entity_pa_dict = {} - # if 'mutation' == etype: - # assert 'mutationType' in entity \ - # and 'normalizedName' in entity, \ - # '{}, entity={}, entity_dict={}'.format( - # etype, entity, entity_dict) - - # entity_pa_dict['mutationType'] = entity['mutationType'] - # entity_pa_dict['normalizedName'] = entity['normalizedName'] - # entity['end'] += 1 # tmvar2 end span makes one character shift in mention - - entity_pa_dict.update( - { - "id": eid, - "span": {"begin": entity["start"], "end": entity["end"]}, - "obj": etype, - "mention": text[entity["start"] : entity["end"]], - "prob": biomedner_dict["prob"][etype][entity_idx][1] - if etype in biomedner_dict["prob"] - and biomedner_dict["prob"][etype][entity_idx][1] - else None, - "is_neural_normalized": entity["is_neural_normalized"] - if "is_neural_normalized" in entity - else False, - } - ) - - entity_list.append(entity_pa_dict) - - # sort by span begin - def get_item_key1(item): - return item["span"]["begin"] - - def get_item_key2(item): - return item["obj"] - - return sorted(sorted(entity_list, key=get_item_key2), key=get_item_key1) - - -def get_pubtator(biomedner_dict_list): - result = "" - for bd in biomedner_dict_list: - text = bd["title"] + " " + bd["abstract"] - - main = ( - bd["pmid"] - + "|t|" - + bd["title"] - + "\n" - + bd["pmid"] - + "|a|" - + bd["abstract"] - ) - - # sort by start - sorted_entities = list() - - for etype in bd["entities"]: - for entity in bd["entities"][etype]: - mention = text[entity["start"] : entity["end"]] - sorted_entities.append( - [ - entity["start"], - entity["end"], - mention, - etype, - "|".join(entity["id"].split("\t")), - ] - ) - - sorted_entities = sorted(sorted_entities, key=itemgetter(0)) - - entities = "" - for e in sorted_entities: - entities += "{}\t{}\t{}\t{}\t{}\t{}\n".format( - bd["pmid"], e[0], e[1], e[2], e[3], e[4] - ) - - result += main + "\n" + entities + "\n" - - return result - - -def tmtooljson2biomedner(tmtool_res): - tmtool_dicts = json.loads(tmtool_res) - - biomedner_dicts = list() - - for td in tmtool_dicts: - mutations = list() - for d in td["annotations"]: - mention = td["text"][d["span"]["begin"] : d["span"]["end"]] - d["span"]["end"] += 1 - mutations.append( - { - "start": d["span"]["start"], - "end": d["span"]["end"], - "mention": mention, - "normalizedName": d["obj"].replace("Mutation:", ""), - } - ) - - doc_dict = { - "pmid": td["sourceid"], - "text": td["text"], - "entities": {"mutation": mutations}, - } - - biomedner_dicts.append(doc_dict) - - return biomedner_dicts diff --git a/source/Parser/main.py b/source/Parser/main.py deleted file mode 100644 index bf9a87f0..00000000 --- a/source/Parser/main.py +++ /dev/null @@ -1,192 +0,0 @@ -from __future__ import annotations - -import argparse -import json -import multiprocessing -import os -import re -import sys -from pathlib import Path - -import pandas as pd - -SOURCE_DIR = Path(__file__).resolve().parents[1] -if str(SOURCE_DIR) not in sys.path: - sys.path.append(str(SOURCE_DIR)) - -from Matcher.config.config_loader import load_config # noqa: E402 -from Parser.biomedner_engine import BioMedNER # noqa: E402 - - -BASE_INPUT_FILEPATH = Path(__file__).resolve().parents[2] / "data/preprocessed_data" -BASE_OUTPUT_FILEPATH_CT = Path(__file__).resolve().parents[2] / "data/parsed_trec" - -entity_annotator: BioMedNER | None = None -data_source = "clinical trials" - - -def process_dataframe(df: pd.DataFrame, text_column: str) -> pd.DataFrame: - new_data = [] - for _, row in df.iterrows(): - row_copy = row.to_dict() - text = row_copy.pop(text_column) - if not isinstance(text, str): - text = str(text) - - word_count = len(text.split()) - sentence_end_count = text.count(".") + text.count("?") + text.count("!") - - if word_count > 512 and sentence_end_count > 1: - sentences = re.split(r"(?<=[.!?]) +", text) - for sentence in sentences: - new_row = row_copy.copy() - new_row[text_column] = sentence - new_data.append(new_row) - else: - row_copy[text_column] = text - new_data.append(row_copy) - - return pd.DataFrame(new_data) - - -def process_file(idx: str) -> None: - global entity_annotator - if entity_annotator is None: - raise RuntimeError("Entity annotator is not initialized.") - - output_filepath = BASE_OUTPUT_FILEPATH_CT / f"{idx}.json" - if output_filepath.exists(): - print(f"File {idx} already exists. Skipping...") - return - - df = _load_dataframe(idx) - if df is None or df.empty: - print(f"Dataframe {idx} is empty. Skipping.") - return - - print(f"Processing {idx}") - df = process_dataframe(df, "sentence") - sentences = df["sentence"].tolist() - if not sentences: - print(f"No sentences to process for {idx}. Skipping.") - return - - annotated_sentences = entity_annotator.annotate_texts_in_parallel( - sentences, - max_workers=5, - ) - df["entities"] = [entities for entities in annotated_sentences] - result_json = { - "nct_id": idx, - "criteria": [ - { - "criterion": row["sentence"], - "entities": row["entities"], - "type": row["criteria"], - } - for _, row in df.iterrows() - ], - } - output_filepath.parent.mkdir(parents=True, exist_ok=True) - output_filepath.write_text(json.dumps(result_json, indent=4)) - print(f"Saved {output_filepath}") - - -def process_files( - device_id: str, - ids_to_process: list[str], - config_path: str | None, -) -> None: - global entity_annotator - os.environ["CUDA_VISIBLE_DEVICES"] = device_id - config = load_config(config_path) if config_path else None - entity_annotator = BioMedNER(config=config) - for idx in ids_to_process: - process_file(idx) - - -def main() -> int: - parser = argparse.ArgumentParser( - description="Annotate preprocessed trial criteria with TrialMatchAI entities." - ) - parser.add_argument("--config", default=None, help="TrialMatchAI config path") - parser.add_argument("--processes", type=int, default=1) - parser.add_argument("--device-id", action="append", default=["0"]) - parser.add_argument( - "--ids-file", - default=None, - help="Optional file containing one NCT ID per line. Defaults to TREC ID files.", - ) - args = parser.parse_args() - - unique_ids = _load_ids(args.ids_file) - unprocessed_ids = [ - idx for idx in unique_ids if not (BASE_OUTPUT_FILEPATH_CT / f"{idx}.json").exists() - ] - if not unprocessed_ids: - print("No unprocessed IDs found.") - return 0 - - num_processes = max(1, args.processes) - process_device_ids = [ - args.device_id[i % len(args.device_id)] for i in range(num_processes) - ] - chunks = [[] for _ in range(num_processes)] - for i, idx in enumerate(unprocessed_ids): - chunks[i % num_processes].append(idx) - - processes = [] - for i, ids_chunk in enumerate(chunks): - if not ids_chunk: - continue - process = multiprocessing.Process( - target=process_files, - args=(process_device_ids[i], ids_chunk, args.config), - ) - processes.append(process) - process.start() - - for process in processes: - process.join() - if process.exitcode: - return process.exitcode - return 0 - - -def _load_dataframe(idx: str) -> pd.DataFrame | None: - if data_source == "clinical trials": - file_path = BASE_INPUT_FILEPATH / "clintra" / f"{idx}_preprocessed.tsv" - delimiter = "\t" - elif data_source == "patient": - file_path = BASE_INPUT_FILEPATH / "patient" / f"{idx}_preprocessed.csv" - delimiter = "," - else: - raise ValueError("data_source must be 'clinical trials' or 'patient'.") - - if not file_path.exists(): - print(f"File {file_path} does not exist. Skipping.") - return None - try: - return pd.read_csv(file_path, delimiter=delimiter) - except pd.errors.EmptyDataError: - print(f"No columns to parse from file {file_path}. Skipping.") - return None - - -def _load_ids(ids_file: str | None) -> list[str]: - if ids_file: - return [ - line.strip() - for line in Path(ids_file).read_text().splitlines() - if line.strip() - ] - trec_root = Path(__file__).resolve().parents[2] / "data/trec" - df_trec21 = pd.read_csv(trec_root / "Unique_NCT_IDs_from_2021_File.csv") - df_trec22 = pd.read_csv(trec_root / "Unique_NCT_IDs_from_2022_File.csv") - nct_ids21 = df_trec21["Unique NCT IDs"].unique().tolist() - nct_ids22 = df_trec22["Unique NCT IDs"].unique().tolist() - return sorted(set(nct_ids21 + nct_ids22)) - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/source/Parser/normalizer.py b/source/Parser/normalizer.py deleted file mode 100644 index 96d7e7a2..00000000 --- a/source/Parser/normalizer.py +++ /dev/null @@ -1,28 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from Matcher.entities.linker import ConceptLinker - - -class Normalizer: - """Legacy placeholder for Parser callers. - - Normalization now happens in Matcher.entities.ConceptLinker. This class keeps old - imports from crashing while avoiding external normalizer daemons. - """ - - NO_ENTITY_ID = "CUI-less" - - def __init__(self, *args: Any, concept_linker: ConceptLinker | None = None, **kwargs: Any): - del args, kwargs - self.concept_linker = concept_linker - self.use_neural_normalizer = False - - def normalize(self, base_name: str, doc_dict_list: list[dict[str, Any]]): - del base_name - return doc_dict_list - - def neural_normalize(self, ent_type: str, tagged_docs: list[dict[str, Any]]): - del ent_type - return tagged_docs diff --git a/source/__init__.py b/source/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/Matcher/__init__.py b/src/Matcher/__init__.py new file mode 100644 index 00000000..cb9a15ed --- /dev/null +++ b/src/Matcher/__init__.py @@ -0,0 +1,13 @@ +from __future__ import annotations + +import warnings + +from trialmatchai import __version__ + +warnings.warn( + "The 'Matcher' namespace is deprecated. Import from 'trialmatchai' instead.", + DeprecationWarning, + stacklevel=2, +) + +__all__ = ["__version__"] diff --git a/src/Matcher/config/__init__.py b/src/Matcher/config/__init__.py new file mode 100644 index 00000000..eed74c0e --- /dev/null +++ b/src/Matcher/config/__init__.py @@ -0,0 +1 @@ +from trialmatchai.config import * # noqa: F401,F403 diff --git a/src/Matcher/config/config_loader.py b/src/Matcher/config/config_loader.py new file mode 100644 index 00000000..a3064396 --- /dev/null +++ b/src/Matcher/config/config_loader.py @@ -0,0 +1 @@ +from trialmatchai.config.config_loader import * # noqa: F401,F403 diff --git a/src/Matcher/config/settings.py b/src/Matcher/config/settings.py new file mode 100644 index 00000000..16e461fb --- /dev/null +++ b/src/Matcher/config/settings.py @@ -0,0 +1 @@ +from trialmatchai.config.settings import * # noqa: F401,F403 diff --git a/src/Matcher/entities/__init__.py b/src/Matcher/entities/__init__.py new file mode 100644 index 00000000..4fdc6d4b --- /dev/null +++ b/src/Matcher/entities/__init__.py @@ -0,0 +1 @@ +from trialmatchai.entities import * # noqa: F401,F403 diff --git a/src/Matcher/main.py b/src/Matcher/main.py new file mode 100644 index 00000000..26c493cd --- /dev/null +++ b/src/Matcher/main.py @@ -0,0 +1 @@ +from trialmatchai.main import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/__init__.py b/src/Matcher/pipeline/__init__.py new file mode 100644 index 00000000..e961a2e5 --- /dev/null +++ b/src/Matcher/pipeline/__init__.py @@ -0,0 +1 @@ +from trialmatchai.matching import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/cot_reasoning.py b/src/Matcher/pipeline/cot_reasoning.py new file mode 100644 index 00000000..484df347 --- /dev/null +++ b/src/Matcher/pipeline/cot_reasoning.py @@ -0,0 +1 @@ +from trialmatchai.matching.eligibility_reasoning import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/cot_reasoning_vllm.py b/src/Matcher/pipeline/cot_reasoning_vllm.py new file mode 100644 index 00000000..0943c3b0 --- /dev/null +++ b/src/Matcher/pipeline/cot_reasoning_vllm.py @@ -0,0 +1 @@ +from trialmatchai.matching.eligibility_reasoning_vllm import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/phenopacket_processor.py b/src/Matcher/pipeline/phenopacket_processor.py new file mode 100644 index 00000000..e8645cc2 --- /dev/null +++ b/src/Matcher/pipeline/phenopacket_processor.py @@ -0,0 +1 @@ +from trialmatchai.matching.phenopacket_processor import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/trial_ranker.py b/src/Matcher/pipeline/trial_ranker.py new file mode 100644 index 00000000..21919c5c --- /dev/null +++ b/src/Matcher/pipeline/trial_ranker.py @@ -0,0 +1 @@ +from trialmatchai.matching.trial_ranker import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/trial_search/__init__.py b/src/Matcher/pipeline/trial_search/__init__.py new file mode 100644 index 00000000..f04c1b19 --- /dev/null +++ b/src/Matcher/pipeline/trial_search/__init__.py @@ -0,0 +1 @@ +from trialmatchai.matching.retrieval import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/trial_search/first_level_search.py b/src/Matcher/pipeline/trial_search/first_level_search.py new file mode 100644 index 00000000..fde78fc7 --- /dev/null +++ b/src/Matcher/pipeline/trial_search/first_level_search.py @@ -0,0 +1 @@ +from trialmatchai.matching.retrieval.trial_retrieval import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/trial_search/second_level_search.py b/src/Matcher/pipeline/trial_search/second_level_search.py new file mode 100644 index 00000000..b286feb0 --- /dev/null +++ b/src/Matcher/pipeline/trial_search/second_level_search.py @@ -0,0 +1 @@ +from trialmatchai.matching.retrieval.criteria_retrieval import * # noqa: F401,F403 diff --git a/src/Matcher/schemas/__init__.py b/src/Matcher/schemas/__init__.py new file mode 100644 index 00000000..928cdeac --- /dev/null +++ b/src/Matcher/schemas/__init__.py @@ -0,0 +1 @@ +from trialmatchai.schemas import * # noqa: F401,F403 diff --git a/src/Matcher/search/__init__.py b/src/Matcher/search/__init__.py new file mode 100644 index 00000000..5b6cd37f --- /dev/null +++ b/src/Matcher/search/__init__.py @@ -0,0 +1 @@ +from trialmatchai.search import * # noqa: F401,F403 diff --git a/src/Matcher/services/__init__.py b/src/Matcher/services/__init__.py new file mode 100644 index 00000000..c704ca63 --- /dev/null +++ b/src/Matcher/services/__init__.py @@ -0,0 +1 @@ +from trialmatchai.services import * # noqa: F401,F403 diff --git a/src/Matcher/utils/__init__.py b/src/Matcher/utils/__init__.py new file mode 100644 index 00000000..5933e8a7 --- /dev/null +++ b/src/Matcher/utils/__init__.py @@ -0,0 +1 @@ +from trialmatchai.utils import * # noqa: F401,F403 diff --git a/src/Matcher/utils/file_utils.py b/src/Matcher/utils/file_utils.py new file mode 100644 index 00000000..9ae82244 --- /dev/null +++ b/src/Matcher/utils/file_utils.py @@ -0,0 +1 @@ +from trialmatchai.utils.file_utils import * # noqa: F401,F403 diff --git a/src/Matcher/utils/json_utils.py b/src/Matcher/utils/json_utils.py new file mode 100644 index 00000000..e0a84189 --- /dev/null +++ b/src/Matcher/utils/json_utils.py @@ -0,0 +1 @@ +from trialmatchai.utils.json_utils import * # noqa: F401,F403 diff --git a/src/Matcher/utils/logging_config.py b/src/Matcher/utils/logging_config.py new file mode 100644 index 00000000..4aa94f5c --- /dev/null +++ b/src/Matcher/utils/logging_config.py @@ -0,0 +1 @@ +from trialmatchai.utils.logging_config import * # noqa: F401,F403 diff --git a/src/Matcher/utils/retry.py b/src/Matcher/utils/retry.py new file mode 100644 index 00000000..bce0516f --- /dev/null +++ b/src/Matcher/utils/retry.py @@ -0,0 +1 @@ +from trialmatchai.utils.retry import * # noqa: F401,F403 diff --git a/src/Matcher/utils/temporal_utils.py b/src/Matcher/utils/temporal_utils.py new file mode 100644 index 00000000..4d2a72ca --- /dev/null +++ b/src/Matcher/utils/temporal_utils.py @@ -0,0 +1 @@ +from trialmatchai.utils.temporal_utils import * # noqa: F401,F403 diff --git a/src/Matcher/utils/timing.py b/src/Matcher/utils/timing.py new file mode 100644 index 00000000..682226c5 --- /dev/null +++ b/src/Matcher/utils/timing.py @@ -0,0 +1 @@ +from trialmatchai.utils.timing import * # noqa: F401,F403 diff --git a/src/trialmatchai/__init__.py b/src/trialmatchai/__init__.py new file mode 100644 index 00000000..a148edec --- /dev/null +++ b/src/trialmatchai/__init__.py @@ -0,0 +1,3 @@ +from __future__ import annotations + +__version__ = "0.2.0" diff --git a/src/trialmatchai/__main__.py b/src/trialmatchai/__main__.py new file mode 100644 index 00000000..86df07ae --- /dev/null +++ b/src/trialmatchai/__main__.py @@ -0,0 +1,4 @@ +from trialmatchai.cli.main import main + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/source/Matcher/cli/__init__.py b/src/trialmatchai/cli/__init__.py similarity index 100% rename from source/Matcher/cli/__init__.py rename to src/trialmatchai/cli/__init__.py diff --git a/source/Matcher/cli/bootstrap_data.py b/src/trialmatchai/cli/bootstrap_data.py similarity index 100% rename from source/Matcher/cli/bootstrap_data.py rename to src/trialmatchai/cli/bootstrap_data.py diff --git a/source/Matcher/cli/build_concepts.py b/src/trialmatchai/cli/build_concepts.py similarity index 93% rename from source/Matcher/cli/build_concepts.py rename to src/trialmatchai/cli/build_concepts.py index b8971a14..bee79aa5 100644 --- a/source/Matcher/cli/build_concepts.py +++ b/src/trialmatchai/cli/build_concepts.py @@ -4,16 +4,16 @@ import sys from pathlib import Path -from Matcher.config.config_loader import load_config -from Matcher.entities.builder import ( +from trialmatchai.config.config_loader import load_config +from trialmatchai.entities.builder import ( DEFAULT_OMOP_VOCABULARIES, build_legacy_dictionary_rows, build_omop_concept_rows, concept_texts_for_embedding, write_lancedb_table, ) -from Matcher.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig -from Matcher.utils.logging_config import setup_logging +from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig +from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) diff --git a/src/trialmatchai/cli/healthcheck.py b/src/trialmatchai/cli/healthcheck.py new file mode 100644 index 00000000..e584c615 --- /dev/null +++ b/src/trialmatchai/cli/healthcheck.py @@ -0,0 +1,101 @@ +from __future__ import annotations + +import argparse +import sys + +from trialmatchai.config.config_loader import load_config +from trialmatchai.search import LanceDBSearchBackend +from trialmatchai.services.preflight import run_preflight_checks +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def main() -> int: + parser = argparse.ArgumentParser(description="TrialMatchAI healthcheck") + parser.add_argument( + "--config", + default=None, + help="Path to config.json", + ) + parser.add_argument( + "--require-tables", + action="store_true", + help="Fail if configured LanceDB search tables are missing", + ) + parser.add_argument( + "--registry", + action="store_true", + help="Check registry updater paths and manifest readability.", + ) + args = parser.parse_args() + + config = load_config(args.config) + issues = 0 + search_backend = LanceDBSearchBackend.from_config(config) + + preflight_issues = run_preflight_checks( + config, + require_patient_inputs=False, + require_trials_json=False, + require_models=False, + ) + issues += len(preflight_issues) + + backend_issues = search_backend.health(require_tables=args.require_tables) + if backend_issues: + for issue in backend_issues: + logger.error("Search backend healthcheck failed: %s", issue) + issues += len(backend_issues) + else: + logger.info("LanceDB search backend reachable at %s.", search_backend.db_path) + + if args.registry: + registry_issues = _check_registry(config) + for issue in registry_issues: + logger.error("Registry healthcheck failed: %s", issue) + issues += len(registry_issues) + + return 1 if issues else 0 + + +def _check_registry(config: dict) -> list[str]: + from pathlib import Path + + issues: list[str] = [] + registry_cfg = config.get("registry", {}) + paths_cfg = config.get("paths", {}) + for key in ("raw_dir", "reports_dir"): + value = registry_cfg.get(key) + if not value: + issues.append(f"registry.{key} is not configured.") + continue + try: + Path(value).mkdir(parents=True, exist_ok=True) + except OSError as exc: + issues.append(f"registry.{key} is not writable: {value} ({exc})") + + trials_folder = paths_cfg.get("trials_json_folder") + if not trials_folder: + issues.append("paths.trials_json_folder is not configured.") + else: + try: + Path(trials_folder).mkdir(parents=True, exist_ok=True) + except OSError as exc: + issues.append(f"paths.trials_json_folder is not writable: {trials_folder} ({exc})") + + manifest_path = registry_cfg.get("manifest_path") + if not manifest_path: + issues.append("registry.manifest_path is not configured.") + else: + manifest = Path(manifest_path) + try: + manifest.parent.mkdir(parents=True, exist_ok=True) + if manifest.exists(): + with manifest.open("r", encoding="utf-8"): + pass + except OSError as exc: + issues.append(f"registry.manifest_path is not readable: {manifest} ({exc})") + return issues +if __name__ == "__main__": + sys.exit(main()) diff --git a/source/Matcher/cli/index_data.py b/src/trialmatchai/cli/index_data.py similarity index 53% rename from source/Matcher/cli/index_data.py rename to src/trialmatchai/cli/index_data.py index c9c34efe..f36a0f02 100644 --- a/source/Matcher/cli/index_data.py +++ b/src/trialmatchai/cli/index_data.py @@ -4,18 +4,28 @@ import sys from pathlib import Path -from Matcher.config.config_loader import load_config -from Matcher.search import LanceDBSearchBackend -from Matcher.utils.logging_config import setup_logging +from trialmatchai.config.config_loader import load_config +from trialmatchai.search import LanceDBSearchBackend +from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) def main() -> int: parser = argparse.ArgumentParser( - description="Build TrialMatchAI LanceDB search tables from prepared JSON data." + description="Build TrialMatchAI LanceDB search tables." ) parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--prepare", + action="store_true", + help="Prepare embeddings/entities from normalized trial JSONs before indexing.", + ) + parser.add_argument( + "--trials-json-folder", + default=None, + help="Folder containing normalized trial JSON files. Defaults to config paths.trials_json_folder.", + ) parser.add_argument( "--processed-trials-folder", default="data/processed_trials", @@ -48,6 +58,16 @@ def main() -> int: backend = LanceDBSearchBackend.from_config(config) root = _repo_root() failures = 0 + if args.prepare: + _prepare_from_trials_jsons( + config=config, + trials_json_folder=_resolve_path( + args.trials_json_folder or config["paths"]["trials_json_folder"], + root, + ), + processed_trials_folder=_resolve_path(args.processed_trials_folder, root), + processed_criteria_folder=_resolve_path(args.processed_criteria_folder, root), + ) if not args.skip_trials: trials_folder = _resolve_path(args.processed_trials_folder, root) @@ -101,6 +121,50 @@ def _read_json(path: Path) -> dict: return json.loads(path.read_text(encoding="utf-8")) +def _prepare_from_trials_jsons( + *, + config: dict, + trials_json_folder: Path, + processed_trials_folder: Path, + processed_criteria_folder: Path, +) -> None: + from trialmatchai.entities import build_entity_annotator + from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig + from trialmatchai.registry.preparation import ( + prepare_criteria_documents, + prepare_trial_document, + write_prepared_criteria, + write_prepared_trial, + ) + + embedder_cfg = config.get("embedder", {}) + embedder = TextEmbedder( + TextEmbedderConfig( + model_name=embedder_cfg.get("model_name", "BAAI/bge-m3"), + revision=embedder_cfg.get("revision"), + trust_remote_code=embedder_cfg.get("trust_remote_code", False), + pooling=embedder_cfg.get("pooling", "mean"), + max_length=embedder_cfg.get("max_length", 512), + batch_size=embedder_cfg.get("batch_size", 32), + use_gpu=embedder_cfg.get("use_gpu", True), + use_fp16=embedder_cfg.get("use_fp16", False), + normalize=embedder_cfg.get("normalize", True), + ) + ) + entity_annotator = build_entity_annotator(config, embedder=embedder) + trial_docs = _load_flat_json_folder(trials_json_folder) + for doc in trial_docs: + trial_row = prepare_trial_document(doc, embedder) + criteria_rows = prepare_criteria_documents( + doc, + embedder, + entity_annotator=entity_annotator, + ) + write_prepared_trial(trial_row, processed_trials_folder) + write_prepared_criteria(criteria_rows, processed_criteria_folder) + logger.info("Prepared %s trial JSON files from %s.", len(trial_docs), trials_json_folder) + + def _resolve_path(value: str, root: Path) -> Path: path = Path(value).expanduser() if path.is_absolute(): diff --git a/src/trialmatchai/cli/main.py b/src/trialmatchai/cli/main.py new file mode 100644 index 00000000..efadc86e --- /dev/null +++ b/src/trialmatchai/cli/main.py @@ -0,0 +1,39 @@ +from __future__ import annotations + +import argparse +import sys + + +def main() -> int: + parser = argparse.ArgumentParser( + prog="trialmatchai", + description="TrialMatchAI command group.", + ) + subparsers = parser.add_subparsers(dest="command", required=True) + + subparsers.add_parser("healthcheck", help="Run deployment health checks") + subparsers.add_parser("index", help="Build LanceDB search tables") + subparsers.add_parser("build-concepts", help="Build LanceDB concept table") + subparsers.add_parser("update-registry", help="Fetch and upsert registry studies") + subparsers.add_parser("run", help="Run the matching pipeline") + + args, remainder = parser.parse_known_args() + if args.command == "healthcheck": + from trialmatchai.cli.healthcheck import main as command + elif args.command == "index": + from trialmatchai.cli.index_data import main as command + elif args.command == "build-concepts": + from trialmatchai.cli.build_concepts import main as command + elif args.command == "update-registry": + from trialmatchai.cli.update_registry import main as command + elif args.command == "run": + from trialmatchai.cli.run import main as command + else: # pragma: no cover - argparse enforces choices + parser.error(f"Unknown command: {args.command}") + + sys.argv = [f"trialmatchai {args.command}", *remainder] + return command() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/source/Matcher/cli/run.py b/src/trialmatchai/cli/run.py similarity index 88% rename from source/Matcher/cli/run.py rename to src/trialmatchai/cli/run.py index 67f7b6b1..6adf147d 100644 --- a/source/Matcher/cli/run.py +++ b/src/trialmatchai/cli/run.py @@ -8,7 +8,7 @@ def main() -> int: parser = argparse.ArgumentParser(description="Run the TrialMatchAI batch pipeline") parser.add_argument("--config", default=None, help="Path to config.json") args = parser.parse_args() - from Matcher.main import main_pipeline + from trialmatchai.main import main_pipeline return main_pipeline(args.config) diff --git a/src/trialmatchai/cli/update_registry.py b/src/trialmatchai/cli/update_registry.py new file mode 100644 index 00000000..ff784a05 --- /dev/null +++ b/src/trialmatchai/cli/update_registry.py @@ -0,0 +1,180 @@ +from __future__ import annotations + +import argparse +import json +import sys +from datetime import date, timedelta +from pathlib import Path +from typing import Any + +from trialmatchai.config.config_loader import load_config +from trialmatchai.registry.clinicaltrials_gov import ClinicalTrialsGovClient +from trialmatchai.registry.defaults import DEFAULT_REGISTRY_STATUSES +from trialmatchai.registry.updater import ( + RegistryUpdateConfig, + RegistryUpdater, + normalize_keywords, +) +from trialmatchai.search import InMemorySearchBackend, LanceDBSearchBackend +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Fetch changed ClinicalTrials.gov studies and upsert LanceDB tables." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--keyword", + action="append", + default=[], + help="ClinicalTrials.gov keyword query. Repeat for multiple queries.", + ) + parser.add_argument( + "--keywords-file", + default=None, + help="Text file with one ClinicalTrials.gov keyword query per line.", + ) + parser.add_argument("--since", default=None, help="Only process updates since YYYY-MM-DD") + parser.add_argument("--max-studies", type=int, default=None, help="Maximum studies to process") + parser.add_argument( + "--status", + action="append", + default=[], + help="ClinicalTrials.gov overall status filter. Repeat for multiple statuses.", + ) + parser.add_argument("--dry-run", action="store_true", help="Fetch and plan without writing") + parser.add_argument( + "--reindex-all-changed", + action=argparse.BooleanOptionalAction, + default=True, + help="Recompute embeddings/entities and upsert changed studies.", + ) + parser.add_argument( + "--report-path", + default=None, + help="Optional exact path for a copy of the run report JSON.", + ) + args = parser.parse_args() + + config = load_config(args.config) + registry_cfg = config.get("registry", {}) + paths_cfg = config.get("paths", {}) + + since = _resolve_since(args.since, int(registry_cfg.get("since_days", 7))) + keywords = normalize_keywords( + [ + *args.keyword, + *_read_keywords_file( + args.keywords_file or registry_cfg.get("keywords_file") + ), + ] + ) + statuses = tuple(args.status or DEFAULT_REGISTRY_STATUSES) + max_studies = args.max_studies or registry_cfg.get("max_studies") + if max_studies is not None: + max_studies = int(max_studies) + + update_config = RegistryUpdateConfig( + raw_dir=Path(registry_cfg.get("raw_dir", "data/registry/raw")), + normalized_trials_dir=Path(paths_cfg.get("trials_json_folder", "data/trials_jsons")), + manifest_path=Path( + registry_cfg.get("manifest_path", "data/registry/manifest.jsonl") + ), + reports_dir=Path(registry_cfg.get("reports_dir", "data/registry/runs")), + keywords=keywords, + statuses=statuses, + since=since, + max_studies=max_studies, + dry_run=args.dry_run, + reindex_all_changed=args.reindex_all_changed, + failure_threshold=float(registry_cfg.get("failure_threshold", 0.25)), + ) + + client = ClinicalTrialsGovClient( + base_url=registry_cfg.get( + "api_base_url", + "https://clinicaltrials.gov/api/v2/studies", + ), + timeout=float(registry_cfg.get("request_timeout", 30.0)), + rate_limit_per_second=float(registry_cfg.get("rate_limit_per_second", 2.0)), + ) + backend = InMemorySearchBackend() if args.dry_run else LanceDBSearchBackend.from_config(config) + embedder = _NullEmbedder() if args.dry_run else _build_embedder(config) + entity_annotator = None if args.dry_run else _build_entity_annotator(config, embedder) + + updater = RegistryUpdater( + client=client, + backend=backend, + embedder=embedder, + entity_annotator=entity_annotator, + ) + report = updater.run(update_config) + + if args.report_path: + _write_report_copy(Path(args.report_path), report.to_dict()) + + logger.info("Registry update report: %s", json.dumps(report.to_dict(), sort_keys=True)) + return 1 if report.failure_rate > update_config.failure_threshold else 0 + + +class _NullEmbedder: + def embed_texts(self, texts): + raise RuntimeError("Dry-run updater must not request embeddings.") + + +def _build_embedder(config: dict[str, Any]): + from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig + + embedder_cfg = config.get("embedder", {}) + return TextEmbedder( + TextEmbedderConfig( + model_name=embedder_cfg.get("model_name", "BAAI/bge-m3"), + revision=embedder_cfg.get("revision"), + trust_remote_code=embedder_cfg.get("trust_remote_code", False), + pooling=embedder_cfg.get("pooling", "mean"), + max_length=embedder_cfg.get("max_length", 512), + batch_size=embedder_cfg.get("batch_size", 32), + use_gpu=embedder_cfg.get("use_gpu", True), + use_fp16=embedder_cfg.get("use_fp16", False), + normalize=embedder_cfg.get("normalize", True), + ) + ) + + +def _build_entity_annotator(config: dict[str, Any], embedder): + from trialmatchai.entities import build_entity_annotator + + return build_entity_annotator(config, embedder=embedder) + + +def _read_keywords_file(path: str | None) -> list[str]: + if not path: + return [] + keyword_path = Path(path) + if not keyword_path.exists(): + raise FileNotFoundError(f"Registry keywords file does not exist: {keyword_path}") + return [ + line.strip() + for line in keyword_path.read_text(encoding="utf-8").splitlines() + if line.strip() and not line.lstrip().startswith("#") + ] + + +def _resolve_since(value: str | None, since_days: int) -> date | None: + if value: + return date.fromisoformat(value) + if since_days <= 0: + return None + return date.today() - timedelta(days=since_days) + + +def _write_report_copy(path: Path, payload: dict[str, Any]) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(payload, indent=2, sort_keys=True), encoding="utf-8") + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/source/Matcher/__init__.py b/src/trialmatchai/config/__init__.py similarity index 100% rename from source/Matcher/__init__.py rename to src/trialmatchai/config/__init__.py diff --git a/source/Matcher/config/config.json b/src/trialmatchai/config/config.json similarity index 81% rename from source/Matcher/config/config.json rename to src/trialmatchai/config/config.json index d92fb5ea..afa3bf2e 100644 --- a/source/Matcher/config/config.json +++ b/src/trialmatchai/config/config.json @@ -4,7 +4,7 @@ "model_name": "fastino/gliner2-base", "fallback_model_name": "gliner-community/gliner_large-v2.5", "model_revision": null, - "schema_path": "source/Matcher/entity_schemas/trialmatchai.yaml", + "schema_path": "src/trialmatchai/entity_schemas/trialmatchai.yaml", "threshold": 0.8, "batch_size": 8, "device": "auto", @@ -52,6 +52,19 @@ "criteria_table": "criteria", "candidate_limit": 1000 }, + "registry": { + "source": "clinicaltrials.gov", + "api_base_url": "https://clinicaltrials.gov/api/v2/studies", + "keywords_file": null, + "since_days": 7, + "max_studies": null, + "request_timeout": 30, + "rate_limit_per_second": 2, + "raw_dir": "data/registry/raw", + "manifest_path": "data/registry/manifest.jsonl", + "reports_dir": "data/registry/runs", + "failure_threshold": 0.25 + }, "embedder": { "model_name": "BAAI/bge-m3", "revision": null, diff --git a/source/Matcher/config/config_loader.py b/src/trialmatchai/config/config_loader.py similarity index 83% rename from source/Matcher/config/config_loader.py rename to src/trialmatchai/config/config_loader.py index 92a8605e..464c5eb3 100644 --- a/source/Matcher/config/config_loader.py +++ b/src/trialmatchai/config/config_loader.py @@ -6,8 +6,8 @@ from pathlib import Path from typing import Any, Dict -from Matcher.config.settings import TrialMatchSettings, apply_env_overrides -from Matcher.utils.logging_config import setup_logging +from trialmatchai.config.settings import TrialMatchSettings, apply_env_overrides +from trialmatchai.utils.logging_config import setup_logging try: from dotenv import load_dotenv @@ -18,8 +18,12 @@ logger = setup_logging(__name__) -DEFAULT_CONFIG_RELATIVE_PATH = Path("source/Matcher/config/config.json") -LEGACY_CONFIG_RELATIVE_PATH = Path("Matcher/config/config.json") +DEFAULT_CONFIG_RELATIVE_PATH = Path("src/trialmatchai/config/config.json") +LEGACY_CONFIG_RELATIVE_PATHS = ( + Path("trialmatchai/config/config.json"), + Path("trialmatchai/config/config.json"), + Path("source/trialmatchai/config/config.json"), +) def load_config(config_path: str | os.PathLike[str] | None = None) -> Dict[str, Any]: @@ -53,10 +57,10 @@ def resolve_config_path( [ Path.cwd() / supplied, root / supplied, - root / "source" / supplied, + root / "src" / supplied, ] ) - if supplied == LEGACY_CONFIG_RELATIVE_PATH: + if supplied in LEGACY_CONFIG_RELATIVE_PATHS: candidates.append(root / DEFAULT_CONFIG_RELATIVE_PATH) else: candidates.extend( @@ -101,6 +105,12 @@ def normalize_config_paths(cfg: Dict[str, Any], config_path: Path) -> Dict[str, _resolve_local_path(search_db_path, root) ) + registry_cfg = cfg.get("registry", {}) + for key in ("keywords_file", "raw_dir", "manifest_path", "reports_dir"): + value = registry_cfg.get(key) + if value: + registry_cfg[key] = str(_resolve_local_path(value, root)) + for key in ("cot_adapter_path", "reranker_adapter_path"): value = cfg.get("model", {}).get(key) if value: diff --git a/source/Matcher/config/settings.py b/src/trialmatchai/config/settings.py similarity index 85% rename from source/Matcher/config/settings.py rename to src/trialmatchai/config/settings.py index 40a98014..b60b400a 100644 --- a/source/Matcher/config/settings.py +++ b/src/trialmatchai/config/settings.py @@ -10,7 +10,7 @@ class EntityExtractionSettings(BaseModel): model_name: str = "fastino/gliner2-base" fallback_model_name: str = "gliner-community/gliner_large-v2.5" model_revision: str | None = None - schema_path: str = "source/Matcher/entity_schemas/trialmatchai.yaml" + schema_path: str = "src/trialmatchai/entity_schemas/trialmatchai.yaml" threshold: float = Field(0.8, ge=0.0, le=1.0) batch_size: int = Field(8, ge=1) device: str = "auto" @@ -75,6 +75,20 @@ class SearchBackendSettings(BaseModel): candidate_limit: int = Field(1000, ge=1) +class RegistrySettings(BaseModel): + source: Literal["clinicaltrials.gov"] = "clinicaltrials.gov" + api_base_url: str = "https://clinicaltrials.gov/api/v2/studies" + keywords_file: str | None = None + since_days: int = Field(7, ge=0) + max_studies: int | None = Field(default=None, ge=1) + request_timeout: float = Field(30.0, gt=0) + rate_limit_per_second: float = Field(2.0, gt=0) + raw_dir: str = "data/registry/raw" + manifest_path: str = "data/registry/manifest.jsonl" + reports_dir: str = "data/registry/runs" + failure_threshold: float = Field(0.25, ge=0.0, le=1.0) + + class EmbedderSettings(BaseModel): model_name: str = "BAAI/bge-m3" revision: str | None = None @@ -136,6 +150,7 @@ class TrialMatchSettings(BaseModel): tokenizer: TokenizerSettings global_: GlobalSettings = Field(alias="global") search_backend: SearchBackendSettings = Field(default_factory=SearchBackendSettings) + registry: RegistrySettings = Field(default_factory=RegistrySettings) embedder: EmbedderSettings cot: CotSettings LLM_reranker: LLMRerankerSettings @@ -204,6 +219,12 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "TRIALMATCHAI_ENTITY_DEVICE": ("entity_extraction", "device"), "TRIALMATCHAI_CONCEPT_DB_PATH": ("concept_linker", "db_path"), "TRIALMATCHAI_CONCEPT_TABLE": ("concept_linker", "table"), + "TRIALMATCHAI_REGISTRY_SOURCE": ("registry", "source"), + "TRIALMATCHAI_REGISTRY_API_BASE_URL": ("registry", "api_base_url"), + "TRIALMATCHAI_REGISTRY_KEYWORDS_FILE": ("registry", "keywords_file"), + "TRIALMATCHAI_REGISTRY_RAW_DIR": ("registry", "raw_dir"), + "TRIALMATCHAI_REGISTRY_MANIFEST_PATH": ("registry", "manifest_path"), + "TRIALMATCHAI_REGISTRY_REPORTS_DIR": ("registry", "reports_dir"), } for env_key, path in string_env_map.items(): value = os.getenv(env_key) @@ -237,6 +258,8 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "TRIALMATCHAI_EMBEDDER_BATCH_SIZE": ("embedder", "batch_size"), "TRIALMATCHAI_ENTITY_BATCH_SIZE": ("entity_extraction", "batch_size"), "TRIALMATCHAI_CONCEPT_SEARCH_LIMIT": ("concept_linker", "search_limit"), + "TRIALMATCHAI_REGISTRY_SINCE_DAYS": ("registry", "since_days"), + "TRIALMATCHAI_REGISTRY_MAX_STUDIES": ("registry", "max_studies"), "TRIALMATCHAI_SEARCH_MAX_TRIALS_FIRST_LEVEL": ( "search", "max_trials_first_level", @@ -261,6 +284,15 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "TRIALMATCHAI_ENTITY_THRESHOLD": ("entity_extraction", "threshold"), "TRIALMATCHAI_LINK_ACCEPT": ("concept_linker", "accept_threshold"), "TRIALMATCHAI_LINK_REJECT": ("concept_linker", "reject_threshold"), + "TRIALMATCHAI_REGISTRY_REQUEST_TIMEOUT": ("registry", "request_timeout"), + "TRIALMATCHAI_REGISTRY_RATE_LIMIT_PER_SECOND": ( + "registry", + "rate_limit_per_second", + ), + "TRIALMATCHAI_REGISTRY_FAILURE_THRESHOLD": ( + "registry", + "failure_threshold", + ), } for env_key, path in float_env_map.items(): value = os.getenv(env_key) diff --git a/source/Matcher/entities/__init__.py b/src/trialmatchai/entities/__init__.py similarity index 66% rename from source/Matcher/entities/__init__.py rename to src/trialmatchai/entities/__init__.py index f3f483a9..25109e55 100644 --- a/source/Matcher/entities/__init__.py +++ b/src/trialmatchai/entities/__init__.py @@ -1,9 +1,9 @@ -from Matcher.entities.annotator import ( +from trialmatchai.entities.annotator import ( CompatibilityEntityAnnotator, SchemaEntityAnnotator, build_entity_annotator, ) -from Matcher.entities.types import ConceptCandidate, EntityAnnotation, EntitySchema +from trialmatchai.entities.types import ConceptCandidate, EntityAnnotation, EntitySchema __all__ = [ "CompatibilityEntityAnnotator", diff --git a/source/Matcher/entities/annotator.py b/src/trialmatchai/entities/annotator.py similarity index 90% rename from source/Matcher/entities/annotator.py rename to src/trialmatchai/entities/annotator.py index 7fe23905..59649e7f 100644 --- a/source/Matcher/entities/annotator.py +++ b/src/trialmatchai/entities/annotator.py @@ -4,11 +4,11 @@ from pathlib import Path from typing import Any, Sequence -from Matcher.entities.linker import ConceptLinker, LanceDBConceptStore -from Matcher.entities.recognizers import EntityRecognizer, build_recognizer -from Matcher.entities.schemas import load_entity_schemas -from Matcher.entities.types import EntityAnnotation -from Matcher.utils.logging_config import setup_logging +from trialmatchai.entities.linker import ConceptLinker, LanceDBConceptStore +from trialmatchai.entities.recognizers import EntityRecognizer, build_recognizer +from trialmatchai.entities.schemas import load_entity_schemas +from trialmatchai.entities.types import EntityAnnotation +from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -66,7 +66,7 @@ def annotate_texts_in_parallel( class CompatibilityEntityAnnotator(SchemaEntityAnnotator): - """Named compatibility shim for old call sites expecting BioMedNER shape.""" + """Compatibility annotator exposing the historical batch annotation shape.""" def build_entity_annotator( diff --git a/source/Matcher/entities/builder.py b/src/trialmatchai/entities/builder.py similarity index 99% rename from source/Matcher/entities/builder.py rename to src/trialmatchai/entities/builder.py index 5684e023..fa1819a8 100644 --- a/source/Matcher/entities/builder.py +++ b/src/trialmatchai/entities/builder.py @@ -4,7 +4,7 @@ from pathlib import Path from typing import Any, Iterable, Sequence -from Matcher.entities.types import dedupe_strings +from trialmatchai.entities.types import dedupe_strings DEFAULT_OMOP_VOCABULARIES = ( diff --git a/source/Matcher/entities/linker.py b/src/trialmatchai/entities/linker.py similarity index 98% rename from source/Matcher/entities/linker.py rename to src/trialmatchai/entities/linker.py index 6fd1605e..967f3c2e 100644 --- a/source/Matcher/entities/linker.py +++ b/src/trialmatchai/entities/linker.py @@ -4,15 +4,15 @@ from pathlib import Path from typing import Any, Protocol, Sequence -from Matcher.entities.schemas import schema_by_label -from Matcher.entities.types import ( +from trialmatchai.entities.schemas import schema_by_label +from trialmatchai.entities.types import ( NO_ENTITY_ID, ConceptCandidate, EntityAnnotation, EntitySchema, dedupe_strings, ) -from Matcher.utils.logging_config import setup_logging +from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) diff --git a/source/Matcher/entities/recognizers.py b/src/trialmatchai/entities/recognizers.py similarity index 98% rename from source/Matcher/entities/recognizers.py rename to src/trialmatchai/entities/recognizers.py index 3e7e2b51..d5c05609 100644 --- a/source/Matcher/entities/recognizers.py +++ b/src/trialmatchai/entities/recognizers.py @@ -4,8 +4,8 @@ from dataclasses import replace from typing import Any, Protocol, Sequence -from Matcher.entities.schemas import schema_by_label -from Matcher.entities.types import EntityAnnotation, EntitySchema, NO_ENTITY_ID +from trialmatchai.entities.schemas import schema_by_label +from trialmatchai.entities.types import EntityAnnotation, EntitySchema, NO_ENTITY_ID class EntityRecognizer(Protocol): diff --git a/source/Matcher/entities/schemas.py b/src/trialmatchai/entities/schemas.py similarity index 96% rename from source/Matcher/entities/schemas.py rename to src/trialmatchai/entities/schemas.py index db3a182d..300c86d3 100644 --- a/source/Matcher/entities/schemas.py +++ b/src/trialmatchai/entities/schemas.py @@ -6,7 +6,7 @@ import yaml -from Matcher.entities.types import EntitySchema +from trialmatchai.entities.types import EntitySchema DEFAULT_SCHEMA_RESOURCE = "entity_schemas/trialmatchai.yaml" @@ -17,7 +17,7 @@ class EntitySchemaError(ValueError): def default_schema_path() -> Path: - return Path(str(resources.files("Matcher").joinpath(DEFAULT_SCHEMA_RESOURCE))) + return Path(str(resources.files("trialmatchai").joinpath(DEFAULT_SCHEMA_RESOURCE))) def load_entity_schemas(path: str | Path | None = None) -> list[EntitySchema]: diff --git a/source/Matcher/entities/types.py b/src/trialmatchai/entities/types.py similarity index 100% rename from source/Matcher/entities/types.py rename to src/trialmatchai/entities/types.py diff --git a/source/Matcher/entity_schemas/trialmatchai.yaml b/src/trialmatchai/entity_schemas/trialmatchai.yaml similarity index 100% rename from source/Matcher/entity_schemas/trialmatchai.yaml rename to src/trialmatchai/entity_schemas/trialmatchai.yaml diff --git a/source/Matcher/main.py b/src/trialmatchai/main.py similarity index 91% rename from source/Matcher/main.py rename to src/trialmatchai/main.py index 92b055ab..893673a0 100644 --- a/source/Matcher/main.py +++ b/src/trialmatchai/main.py @@ -5,34 +5,34 @@ import torch -from Matcher.config.config_loader import load_config -from Matcher.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig -from Matcher.models.llm.llm_loader import load_model_and_tokenizer -from Matcher.models.llm.llm_reranker import LLMReranker -from Matcher.models.llm.vllm_loader import load_vllm_engine -from Matcher.entities import build_entity_annotator -from Matcher.pipeline.cot_reasoning import BatchTrialProcessor -from Matcher.pipeline.cot_reasoning_vllm import BatchTrialProcessorVLLM -from Matcher.pipeline.phenopacket_processor import process_phenopacket -from Matcher.pipeline.trial_ranker import ( +from trialmatchai.config.config_loader import load_config +from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig +from trialmatchai.models.llm.llm_loader import load_model_and_tokenizer +from trialmatchai.models.llm.llm_reranker import LLMReranker +from trialmatchai.models.llm.vllm_loader import load_vllm_engine +from trialmatchai.entities import build_entity_annotator +from trialmatchai.matching.eligibility_reasoning import BatchTrialProcessor +from trialmatchai.matching.eligibility_reasoning_vllm import BatchTrialProcessorVLLM +from trialmatchai.matching.phenopacket_processor import process_phenopacket +from trialmatchai.matching.trial_ranker import ( load_trial_data, rank_trials, save_ranked_trials, ) -from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch -from Matcher.pipeline.trial_search.second_level_search import SecondStageRetriever -from Matcher.search import LanceDBSearchBackend -from Matcher.services.preflight import run_preflight_checks -from Matcher.utils.file_utils import ( +from trialmatchai.matching.retrieval.trial_retrieval import ClinicalTrialSearch +from trialmatchai.matching.retrieval.criteria_retrieval import SecondStageRetriever +from trialmatchai.search import LanceDBSearchBackend +from trialmatchai.services.preflight import run_preflight_checks +from trialmatchai.utils.file_utils import ( create_directory, read_json_file, read_text_file, write_json_file, write_text_file, ) -from Matcher.schemas.phenopacket import Keywords, Phenopacket -from Matcher.utils.logging_config import reset_request_id, set_request_id, setup_logging -from Matcher.utils.timing import log_timing +from trialmatchai.schemas.phenopacket import Keywords, Phenopacket +from trialmatchai.utils.logging_config import reset_request_id, set_request_id, setup_logging +from trialmatchai.utils.timing import log_timing logger = setup_logging(__name__) diff --git a/source/Matcher/config/__init__.py b/src/trialmatchai/matching/__init__.py similarity index 100% rename from source/Matcher/config/__init__.py rename to src/trialmatchai/matching/__init__.py diff --git a/source/Matcher/pipeline/cot_reasoning.py b/src/trialmatchai/matching/eligibility_reasoning.py similarity index 98% rename from source/Matcher/pipeline/cot_reasoning.py rename to src/trialmatchai/matching/eligibility_reasoning.py index 61fbdb33..f4c6671e 100644 --- a/source/Matcher/pipeline/cot_reasoning.py +++ b/src/trialmatchai/matching/eligibility_reasoning.py @@ -4,9 +4,9 @@ from typing import Dict, List import torch -from Matcher.utils.file_utils import read_json_file, write_json_file, write_text_file -from Matcher.utils.json_utils import extract_json_object -from Matcher.utils.logging_config import setup_logging +from trialmatchai.utils.file_utils import read_json_file, write_json_file, write_text_file +from trialmatchai.utils.json_utils import extract_json_object +from trialmatchai.utils.logging_config import setup_logging from tqdm import tqdm logger = setup_logging(__name__) diff --git a/source/Matcher/pipeline/cot_reasoning_vllm.py b/src/trialmatchai/matching/eligibility_reasoning_vllm.py similarity index 99% rename from source/Matcher/pipeline/cot_reasoning_vllm.py rename to src/trialmatchai/matching/eligibility_reasoning_vllm.py index 23f49049..f394e4bd 100644 --- a/source/Matcher/pipeline/cot_reasoning_vllm.py +++ b/src/trialmatchai/matching/eligibility_reasoning_vllm.py @@ -5,9 +5,9 @@ import time from typing import Dict, List, Optional -from Matcher.utils.file_utils import read_json_file, write_json_file, write_text_file -from Matcher.utils.json_utils import extract_json_object -from Matcher.utils.logging_config import setup_logging +from trialmatchai.utils.file_utils import read_json_file, write_json_file, write_text_file +from trialmatchai.utils.json_utils import extract_json_object +from trialmatchai.utils.logging_config import setup_logging from tqdm import tqdm from vllm import LLM, SamplingParams diff --git a/source/Matcher/pipeline/phenopacket_processor.py b/src/trialmatchai/matching/phenopacket_processor.py similarity index 98% rename from source/Matcher/pipeline/phenopacket_processor.py rename to src/trialmatchai/matching/phenopacket_processor.py index e4bae585..6aef765b 100644 --- a/source/Matcher/pipeline/phenopacket_processor.py +++ b/src/trialmatchai/matching/phenopacket_processor.py @@ -2,11 +2,11 @@ from typing import Dict, List, Optional import torch -from Matcher.schemas.phenopacket import Phenopacket -from Matcher.utils.file_utils import read_json_file, write_json_file -from Matcher.utils.json_utils import extract_json_object -from Matcher.utils.logging_config import setup_logging -from Matcher.utils.temporal_utils import parse_iso_duration, parse_temporal +from trialmatchai.schemas.phenopacket import Phenopacket +from trialmatchai.utils.file_utils import read_json_file, write_json_file +from trialmatchai.utils.json_utils import extract_json_object +from trialmatchai.utils.logging_config import setup_logging +from trialmatchai.utils.temporal_utils import parse_iso_duration, parse_temporal from transformers import AutoModelForCausalLM, AutoTokenizer logger = setup_logging(__name__) diff --git a/source/Matcher/models/__init__.py b/src/trialmatchai/matching/retrieval/__init__.py similarity index 100% rename from source/Matcher/models/__init__.py rename to src/trialmatchai/matching/retrieval/__init__.py diff --git a/source/Matcher/pipeline/trial_search/second_level_search.py b/src/trialmatchai/matching/retrieval/criteria_retrieval.py similarity index 96% rename from source/Matcher/pipeline/trial_search/second_level_search.py rename to src/trialmatchai/matching/retrieval/criteria_retrieval.py index 2c06a607..fb5487f7 100644 --- a/source/Matcher/pipeline/trial_search/second_level_search.py +++ b/src/trialmatchai/matching/retrieval/criteria_retrieval.py @@ -3,11 +3,11 @@ from concurrent.futures import ThreadPoolExecutor, as_completed from typing import Dict, List, Optional -from Matcher.models.embedding.text_embedder import TextEmbedder -from Matcher.models.llm.llm_reranker import LLMReranker -from Matcher.search.lancedb_backend import TrialSearchBackend -from Matcher.utils.file_utils import write_text_file -from Matcher.utils.logging_config import setup_logging +from trialmatchai.models.embedding.text_embedder import TextEmbedder +from trialmatchai.models.llm.llm_reranker import LLMReranker +from trialmatchai.search.lancedb_backend import TrialSearchBackend +from trialmatchai.utils.file_utils import write_text_file +from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) diff --git a/source/Matcher/pipeline/trial_search/first_level_search.py b/src/trialmatchai/matching/retrieval/trial_retrieval.py similarity index 97% rename from source/Matcher/pipeline/trial_search/first_level_search.py rename to src/trialmatchai/matching/retrieval/trial_retrieval.py index 33e9be05..0d18c652 100644 --- a/source/Matcher/pipeline/trial_search/first_level_search.py +++ b/src/trialmatchai/matching/retrieval/trial_retrieval.py @@ -2,9 +2,9 @@ from typing import Dict, List, Optional, Tuple, Union from dateutil import parser as date_parser -from Matcher.models.embedding.text_embedder import TextEmbedder -from Matcher.search.lancedb_backend import TrialSearchBackend -from Matcher.utils.logging_config import setup_logging +from trialmatchai.models.embedding.text_embedder import TextEmbedder +from trialmatchai.search.lancedb_backend import TrialSearchBackend +from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) diff --git a/source/Matcher/pipeline/trial_ranker.py b/src/trialmatchai/matching/trial_ranker.py similarity index 95% rename from source/Matcher/pipeline/trial_ranker.py rename to src/trialmatchai/matching/trial_ranker.py index 9de662c5..deb9c8d9 100644 --- a/source/Matcher/pipeline/trial_ranker.py +++ b/src/trialmatchai/matching/trial_ranker.py @@ -1,8 +1,8 @@ import os from typing import Dict, List -from Matcher.utils.file_utils import read_json_file, write_json_file -from Matcher.utils.logging_config import setup_logging +from trialmatchai.utils.file_utils import read_json_file, write_json_file +from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) diff --git a/source/Matcher/models/llm/__init__.py b/src/trialmatchai/models/__init__.py similarity index 100% rename from source/Matcher/models/llm/__init__.py rename to src/trialmatchai/models/__init__.py diff --git a/src/trialmatchai/models/embedding/__init__.py b/src/trialmatchai/models/embedding/__init__.py new file mode 100644 index 00000000..f91ae8bc --- /dev/null +++ b/src/trialmatchai/models/embedding/__init__.py @@ -0,0 +1,3 @@ +from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig + +__all__ = ["TextEmbedder", "TextEmbedderConfig"] diff --git a/source/Matcher/models/embedding/query_embedder.py b/src/trialmatchai/models/embedding/query_embedder.py similarity index 87% rename from source/Matcher/models/embedding/query_embedder.py rename to src/trialmatchai/models/embedding/query_embedder.py index 8290a366..66ca0bb6 100644 --- a/source/Matcher/models/embedding/query_embedder.py +++ b/src/trialmatchai/models/embedding/query_embedder.py @@ -1,4 +1,4 @@ -from Matcher.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig +from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig class QueryEmbedder(TextEmbedder): diff --git a/source/Matcher/models/embedding/sentence_embedder.py b/src/trialmatchai/models/embedding/sentence_embedder.py similarity index 87% rename from source/Matcher/models/embedding/sentence_embedder.py rename to src/trialmatchai/models/embedding/sentence_embedder.py index 69fd5684..2e81fe33 100644 --- a/source/Matcher/models/embedding/sentence_embedder.py +++ b/src/trialmatchai/models/embedding/sentence_embedder.py @@ -1,4 +1,4 @@ -from Matcher.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig +from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig class SecondLevelSentenceEmbedder(TextEmbedder): diff --git a/source/Matcher/models/embedding/text_embedder.py b/src/trialmatchai/models/embedding/text_embedder.py similarity index 98% rename from source/Matcher/models/embedding/text_embedder.py rename to src/trialmatchai/models/embedding/text_embedder.py index f263ae8a..acf21da4 100644 --- a/source/Matcher/models/embedding/text_embedder.py +++ b/src/trialmatchai/models/embedding/text_embedder.py @@ -7,7 +7,7 @@ import torch.nn.functional as F from transformers import AutoModel, AutoTokenizer -from Matcher.utils.logging_config import setup_logging +from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) diff --git a/source/Matcher/pipeline/__init__.py b/src/trialmatchai/models/llm/__init__.py similarity index 100% rename from source/Matcher/pipeline/__init__.py rename to src/trialmatchai/models/llm/__init__.py diff --git a/source/Matcher/models/llm/llm_loader.py b/src/trialmatchai/models/llm/llm_loader.py similarity index 98% rename from source/Matcher/models/llm/llm_loader.py rename to src/trialmatchai/models/llm/llm_loader.py index f3b10422..97ddb38e 100644 --- a/source/Matcher/models/llm/llm_loader.py +++ b/src/trialmatchai/models/llm/llm_loader.py @@ -1,7 +1,7 @@ from typing import Tuple import torch -from Matcher.utils.logging_config import setup_logging +from trialmatchai.utils.logging_config import setup_logging from peft import PeftModel from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig diff --git a/source/Matcher/models/llm/llm_reranker.py b/src/trialmatchai/models/llm/llm_reranker.py similarity index 99% rename from source/Matcher/models/llm/llm_reranker.py rename to src/trialmatchai/models/llm/llm_reranker.py index df505611..2a60e6d1 100644 --- a/source/Matcher/models/llm/llm_reranker.py +++ b/src/trialmatchai/models/llm/llm_reranker.py @@ -6,7 +6,7 @@ import torch import torch.nn.functional as F -from Matcher.utils.logging_config import setup_logging +from trialmatchai.utils.logging_config import setup_logging from peft import PeftModel from tqdm import tqdm from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig diff --git a/source/Matcher/models/llm/vllm_loader.py b/src/trialmatchai/models/llm/vllm_loader.py similarity index 98% rename from source/Matcher/models/llm/vllm_loader.py rename to src/trialmatchai/models/llm/vllm_loader.py index 0b2bdbcd..eb283637 100644 --- a/source/Matcher/models/llm/vllm_loader.py +++ b/src/trialmatchai/models/llm/vllm_loader.py @@ -1,10 +1,10 @@ -# Matcher/models/llm/vllm_loader.py +# trialmatchai/models/llm/vllm_loader.py from __future__ import annotations import os from typing import Optional, Tuple -from Matcher.utils.logging_config import setup_logging +from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) diff --git a/src/trialmatchai/preprocessing/__init__.py b/src/trialmatchai/preprocessing/__init__.py new file mode 100644 index 00000000..9200581b --- /dev/null +++ b/src/trialmatchai/preprocessing/__init__.py @@ -0,0 +1 @@ +"""Preprocessing resources and helpers.""" diff --git a/src/trialmatchai/preprocessing/regex/__init__.py b/src/trialmatchai/preprocessing/regex/__init__.py new file mode 100644 index 00000000..32ce5226 --- /dev/null +++ b/src/trialmatchai/preprocessing/regex/__init__.py @@ -0,0 +1 @@ +"""Regex preprocessing resource package.""" diff --git a/source/regex/exception_regex_patterns.json b/src/trialmatchai/preprocessing/regex/exception_regex_patterns.json similarity index 100% rename from source/regex/exception_regex_patterns.json rename to src/trialmatchai/preprocessing/regex/exception_regex_patterns.json diff --git a/source/regex/regex_patterns.json b/src/trialmatchai/preprocessing/regex/regex_patterns.json similarity index 100% rename from source/regex/regex_patterns.json rename to src/trialmatchai/preprocessing/regex/regex_patterns.json diff --git a/source/regex/regex_variants.tsv b/src/trialmatchai/preprocessing/regex/regex_variants.tsv similarity index 100% rename from source/regex/regex_variants.tsv rename to src/trialmatchai/preprocessing/regex/regex_variants.tsv diff --git a/src/trialmatchai/registry/__init__.py b/src/trialmatchai/registry/__init__.py new file mode 100644 index 00000000..c15403f0 --- /dev/null +++ b/src/trialmatchai/registry/__init__.py @@ -0,0 +1,13 @@ +from trialmatchai.registry.clinicaltrials_gov import ClinicalTrialsGovClient +from trialmatchai.registry.defaults import DEFAULT_REGISTRY_KEYWORDS +from trialmatchai.registry.normalization import normalize_study +from trialmatchai.registry.updater import RegistryUpdateConfig, RegistryUpdateReport, RegistryUpdater + +__all__ = [ + "ClinicalTrialsGovClient", + "DEFAULT_REGISTRY_KEYWORDS", + "RegistryUpdateConfig", + "RegistryUpdateReport", + "RegistryUpdater", + "normalize_study", +] diff --git a/src/trialmatchai/registry/clinicaltrials_gov.py b/src/trialmatchai/registry/clinicaltrials_gov.py new file mode 100644 index 00000000..303cdba3 --- /dev/null +++ b/src/trialmatchai/registry/clinicaltrials_gov.py @@ -0,0 +1,187 @@ +from __future__ import annotations + +import time +from collections.abc import Iterator, Sequence +from dataclasses import dataclass, field +from datetime import date +from typing import Any + +import requests +from tenacity import ( + retry, + retry_if_exception_type, + stop_after_attempt, + wait_exponential_jitter, +) + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +class RegistrySourceError(RuntimeError): + pass + + +class TransientRegistrySourceError(RegistrySourceError): + pass + + +@dataclass +class ClinicalTrialsGovClient: + base_url: str = "https://clinicaltrials.gov/api/v2/studies" + timeout: float = 30.0 + rate_limit_per_second: float = 2.0 + session: requests.Session = field(default_factory=requests.Session) + page_size: int = 100 + + def __post_init__(self) -> None: + if self.page_size < 1 or self.page_size > 1000: + raise ValueError("page_size must be between 1 and 1000.") + if self.rate_limit_per_second <= 0: + raise ValueError("rate_limit_per_second must be positive.") + self._last_request_at = 0.0 + + def iter_studies( + self, + *, + keyword: str, + statuses: Sequence[str] = (), + since: date | None = None, + max_studies: int | None = None, + ) -> Iterator[dict[str, Any]]: + """Yield studies for one ClinicalTrials.gov keyword query. + + The v2 API returns `studies` plus an optional `nextPageToken`. Date + filtering is intentionally post-fetch here because the upstream API has + changed filter names before; keeping it local makes the source client + easier to harden and test. + """ + yielded = 0 + page_token: str | None = None + status_filter = tuple(status for status in statuses if status) + while True: + payload = self._fetch_page( + keyword=keyword, + statuses=status_filter, + page_token=page_token, + ) + studies = payload.get("studies") or [] + if not isinstance(studies, list): + raise RegistrySourceError("ClinicalTrials.gov returned non-list studies.") + for study in studies: + if not isinstance(study, dict): + continue + if since is not None and not _study_updated_since(study, since): + continue + yield study + yielded += 1 + if max_studies is not None and yielded >= max_studies: + return + page_token = payload.get("nextPageToken") + if not page_token: + return + + def _fetch_page( + self, + *, + keyword: str, + statuses: Sequence[str], + page_token: str | None, + ) -> dict[str, Any]: + params: dict[str, Any] = { + "format": "json", + "pageSize": self.page_size, + "query.term": keyword, + } + if statuses: + params["filter.overallStatus"] = ",".join(statuses) + if page_token: + params["pageToken"] = page_token + return self._get_json(params) + + @retry( + retry=retry_if_exception_type( + (requests.Timeout, requests.ConnectionError, TransientRegistrySourceError) + ), + wait=wait_exponential_jitter(initial=0.5, max=8), + stop=stop_after_attempt(4), + reraise=True, + ) + def _get_json(self, params: dict[str, Any]) -> dict[str, Any]: + self._throttle() + try: + response = self.session.get( + self.base_url, + params=params, + timeout=self.timeout, + headers={"Accept": "application/json"}, + ) + except (requests.Timeout, requests.ConnectionError): + raise + except requests.RequestException as exc: + raise RegistrySourceError(f"ClinicalTrials.gov request failed: {exc}") from exc + + if response.status_code in {408, 425, 429, 500, 502, 503, 504}: + raise TransientRegistrySourceError( + f"ClinicalTrials.gov transient HTTP {response.status_code}" + ) + try: + response.raise_for_status() + except requests.HTTPError as exc: + raise RegistrySourceError( + f"ClinicalTrials.gov HTTP {response.status_code}: {response.text[:300]}" + ) from exc + payload = response.json() + if not isinstance(payload, dict): + raise RegistrySourceError("ClinicalTrials.gov returned non-object JSON.") + return payload + + def _throttle(self) -> None: + minimum_gap = 1.0 / self.rate_limit_per_second + now = time.monotonic() + elapsed = now - self._last_request_at + if elapsed < minimum_gap: + time.sleep(minimum_gap - elapsed) + self._last_request_at = time.monotonic() + + +def _study_updated_since(study: dict[str, Any], since: date) -> bool: + updated = _last_update_date(study) + return updated is None or updated >= since + + +def _last_update_date(study: dict[str, Any]) -> date | None: + protocol = study.get("protocolSection") if isinstance(study, dict) else None + if not isinstance(protocol, dict): + return None + status = protocol.get("statusModule") + if not isinstance(status, dict): + return None + for key in ( + "lastUpdatePostDateStruct", + "lastUpdateSubmitDateStruct", + "studyFirstPostDateStruct", + ): + value = status.get(key) + if isinstance(value, dict): + parsed = _parse_date(value.get("date")) + if parsed is not None: + return parsed + return None + + +def _parse_date(value: Any) -> date | None: + if not value: + return None + text = str(value) + try: + if len(text) == 4: + return date(int(text), 1, 1) + if len(text) == 7: + year, month = text.split("-", 1) + return date(int(year), int(month), 1) + return date.fromisoformat(text[:10]) + except ValueError: + logger.warning("Could not parse ClinicalTrials.gov date: %s", text) + return None diff --git a/src/trialmatchai/registry/defaults.py b/src/trialmatchai/registry/defaults.py new file mode 100644 index 00000000..6ee073f3 --- /dev/null +++ b/src/trialmatchai/registry/defaults.py @@ -0,0 +1,20 @@ +from __future__ import annotations + +DEFAULT_REGISTRY_KEYWORDS: tuple[str, ...] = ( + "cancer OR oncology OR neoplasm OR tumor", + "heart failure OR coronary artery disease OR atrial fibrillation", + "stroke OR Parkinson disease OR Alzheimer disease OR epilepsy", + "rare disease OR orphan disease", + "autoimmune disease OR immunotherapy OR inflammatory disease", + "COVID-19 OR HIV OR tuberculosis OR infectious disease", + "diabetes OR obesity OR metabolic syndrome", + "leukemia OR lymphoma OR anemia OR hematology", + "pediatric OR children OR adolescent", + "precision medicine OR genomic OR biomarker", +) + +DEFAULT_REGISTRY_STATUSES: tuple[str, ...] = ( + "RECRUITING", + "NOT_YET_RECRUITING", + "ACTIVE_NOT_RECRUITING", +) diff --git a/src/trialmatchai/registry/manifest.py b/src/trialmatchai/registry/manifest.py new file mode 100644 index 00000000..192f3eb0 --- /dev/null +++ b/src/trialmatchai/registry/manifest.py @@ -0,0 +1,55 @@ +from __future__ import annotations + +import hashlib +import json +from dataclasses import asdict, dataclass +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + + +@dataclass(frozen=True) +class ManifestRecord: + nct_id: str + source_url: str + source_hash: str + fetched_at: str + last_update_posted: str | None + processing_status: str + error_summary: str | None = None + + +class RegistryManifest: + def __init__(self, path: str | Path) -> None: + self.path = Path(path) + + def load_latest(self) -> dict[str, ManifestRecord]: + latest: dict[str, ManifestRecord] = {} + if not self.path.exists(): + return latest + with self.path.open("r", encoding="utf-8") as handle: + for line in handle: + line = line.strip() + if not line: + continue + try: + raw = json.loads(line) + record = ManifestRecord(**raw) + except (TypeError, ValueError, json.JSONDecodeError): + continue + latest[record.nct_id] = record + return latest + + def append(self, record: ManifestRecord) -> None: + self.path.parent.mkdir(parents=True, exist_ok=True) + with self.path.open("a", encoding="utf-8") as handle: + handle.write(json.dumps(asdict(record), sort_keys=True) + "\n") + + +def source_hash(payload: dict[str, Any]) -> str: + encoded = json.dumps(payload, sort_keys=True, separators=(",", ":"), default=str) + return hashlib.sha256(encoded.encode("utf-8")).hexdigest() + + +def utc_now_iso() -> str: + return datetime.now(timezone.utc).replace(microsecond=0).isoformat() diff --git a/src/trialmatchai/registry/normalization.py b/src/trialmatchai/registry/normalization.py new file mode 100644 index 00000000..91d7ffd5 --- /dev/null +++ b/src/trialmatchai/registry/normalization.py @@ -0,0 +1,205 @@ +from __future__ import annotations + +import re +from typing import Any + + +def normalize_study(study: dict[str, Any]) -> dict[str, Any]: + """Normalize a ClinicalTrials.gov v2 study into TrialMatchAI trial JSON.""" + protocol = _mapping(study.get("protocolSection")) + identification = _mapping(protocol.get("identificationModule")) + status = _mapping(protocol.get("statusModule")) + description = _mapping(protocol.get("descriptionModule")) + conditions = _mapping(protocol.get("conditionsModule")) + design = _mapping(protocol.get("designModule")) + eligibility = _mapping(protocol.get("eligibilityModule")) + interventions = _mapping(protocol.get("armsInterventionsModule")) + contacts_locations = _mapping(protocol.get("contactsLocationsModule")) + references = _mapping(protocol.get("referencesModule")) + + nct_id = _text(identification.get("nctId")) + if not nct_id: + raise ValueError("ClinicalTrials.gov study is missing protocolSection.identificationModule.nctId") + + criteria_text = _multiline_text(eligibility.get("eligibilityCriteria")) + condition_values = _string_list(conditions.get("conditions")) + normalized = { + "nct_id": nct_id, + "source": "clinicaltrials.gov", + "source_url": f"https://clinicaltrials.gov/study/{nct_id}", + "brief_title": _text(identification.get("briefTitle")), + "official_title": _text(identification.get("officialTitle")), + "brief_summary": _text(description.get("briefSummary")), + "detailed_description": _text(description.get("detailedDescription")), + "condition": condition_values, + "eligibility_criteria": criteria_text, + "criteria": split_eligibility_criteria(criteria_text), + "overall_status": _text(status.get("overallStatus")), + "phase": _join(_string_list(design.get("phases"))), + "study_type": _text(design.get("studyType")), + "gender": _text(eligibility.get("sex")) or "All", + "minimum_age": _text(eligibility.get("minimumAge")), + "maximum_age": _text(eligibility.get("maximumAge")), + "start_date": _date_struct(status.get("startDateStruct")), + "completion_date": _date_struct(status.get("completionDateStruct")), + "last_update_posted": _date_struct(status.get("lastUpdatePostDateStruct")), + "intervention": _intervention_rows(interventions.get("interventions")), + "location": _location_rows(contacts_locations.get("locations")), + "reference": _reference_rows(references.get("references")), + } + return {key: value for key, value in normalized.items() if value not in (None, "", [])} + + +def split_eligibility_criteria(text: str) -> list[dict[str, str]]: + if not text or not text.strip(): + return [] + + current_type = "unknown" + entries: list[dict[str, str]] = [] + buffered: list[str] = [] + + def flush() -> None: + if not buffered: + return + criterion = " ".join(buffered).strip() + buffered.clear() + if _is_useful_criterion(criterion): + entries.append({"type": current_type, "criterion": criterion}) + + for raw_line in text.splitlines(): + line = raw_line.strip() + if not line: + flush() + continue + detected_type = _detect_criteria_header(line) + if detected_type: + flush() + current_type = detected_type + continue + cleaned = _clean_criterion_line(line) + if not cleaned: + flush() + continue + if _starts_new_criterion(line): + flush() + buffered.append(cleaned) + else: + buffered.append(cleaned) + + flush() + if entries: + return entries + + fallback = _clean_criterion_line(text) + return [{"type": "unknown", "criterion": fallback}] if fallback else [] + + +def _mapping(value: Any) -> dict[str, Any]: + return value if isinstance(value, dict) else {} + + +def _text(value: Any) -> str: + if value is None: + return "" + if isinstance(value, str): + return " ".join(value.split()) + return str(value) + + +def _multiline_text(value: Any) -> str: + if value is None: + return "" + if isinstance(value, str): + lines = [re.sub(r"[ \t]+", " ", line).strip() for line in value.splitlines()] + return "\n".join(lines).strip() + return _text(value) + + +def _string_list(value: Any) -> list[str]: + if isinstance(value, list): + return [_text(item) for item in value if _text(item)] + text = _text(value) + return [text] if text else [] + + +def _join(values: list[str]) -> str: + return ", ".join(values) + + +def _date_struct(value: Any) -> str: + if isinstance(value, dict): + return _text(value.get("date")) + return _text(value) + + +def _intervention_rows(value: Any) -> list[dict[str, str]]: + rows: list[dict[str, str]] = [] + for item in value if isinstance(value, list) else []: + if not isinstance(item, dict): + continue + row = { + "name": _text(item.get("name")), + "type": _text(item.get("type")), + "description": _text(item.get("description")), + } + rows.append({key: val for key, val in row.items() if val}) + return rows + + +def _location_rows(value: Any) -> list[dict[str, str]]: + rows: list[dict[str, str]] = [] + for item in value if isinstance(value, list) else []: + if not isinstance(item, dict): + continue + row = { + "facility": _text(item.get("facility")), + "city": _text(item.get("city")), + "state": _text(item.get("state")), + "country": _text(item.get("country")), + "status": _text(item.get("status")), + } + rows.append({key: val for key, val in row.items() if val}) + return rows + + +def _reference_rows(value: Any) -> list[dict[str, str]]: + rows: list[dict[str, str]] = [] + for item in value if isinstance(value, list) else []: + if not isinstance(item, dict): + continue + row = { + "pmid": _text(item.get("pmid")), + "type": _text(item.get("type")), + "citation": _text(item.get("citation")), + } + rows.append({key: val for key, val in row.items() if val}) + return rows + + +def _detect_criteria_header(line: str) -> str | None: + normalized = re.sub(r"[^a-z]+", " ", line.casefold()).strip() + if normalized in {"inclusion criteria", "inclusion"}: + return "inclusion" + if normalized in {"exclusion criteria", "exclusion"}: + return "exclusion" + return None + + +def _starts_new_criterion(line: str) -> bool: + return bool(re.match(r"^\s*(?:[-*•]|\d+[\).]|[a-zA-Z][\).])\s+", line)) + + +def _clean_criterion_line(line: str) -> str: + cleaned = re.sub(r"^\s*(?:[-*•]|\d+[\).]|[a-zA-Z][\).])\s+", "", line) + cleaned = re.sub(r"\s+", " ", cleaned).strip(" :-\t") + if _detect_criteria_header(cleaned): + return "" + return cleaned + + +def _is_useful_criterion(text: str) -> bool: + if len(text) < 3: + return False + if _detect_criteria_header(text): + return False + return True diff --git a/src/trialmatchai/registry/preparation.py b/src/trialmatchai/registry/preparation.py new file mode 100644 index 00000000..48223716 --- /dev/null +++ b/src/trialmatchai/registry/preparation.py @@ -0,0 +1,243 @@ +from __future__ import annotations + +import hashlib +import json +import re +from collections.abc import Sequence +from pathlib import Path +from typing import Any, Protocol + +import dateutil.parser + + +class TextEmbeddingBackend(Protocol): + def embed_texts(self, texts: Sequence[str]) -> list[list[float]]: + ... + + +class EntityAnnotationBackend(Protocol): + def annotate_texts_in_parallel( + self, + texts: Sequence[str], + max_workers: int = 1, + retries: int = 1, + delay: float = 0, + ) -> list[list[dict[str, Any]]]: + ... + + +TRIAL_TEXT_FIELDS: tuple[tuple[str, str], ...] = ( + ("brief_title", "brief_title_vector"), + ("brief_summary", "brief_summary_vector"), + ("condition", "condition_vector"), + ("eligibility_criteria", "eligibility_criteria_vector"), +) + + +def prepare_trial_document( + doc: dict[str, Any], + embedder: TextEmbeddingBackend, +) -> dict[str, Any]: + out: dict[str, Any] = {"nct_id": doc["nct_id"]} + texts = [_preprocess_text(_flatten_text(doc.get(field))) for field, _ in TRIAL_TEXT_FIELDS] + vectors = _embed_texts(embedder, texts) + + for (field, vector_field), text, vector in zip(TRIAL_TEXT_FIELDS, texts, vectors): + out[field] = text + out[vector_field] = vector + + for simple in ( + "overall_status", + "phase", + "study_type", + "gender", + "source", + "source_url", + "last_update_posted", + ): + if doc.get(simple) not in (None, ""): + out[simple] = doc[simple] + + for date_field in ("start_date", "completion_date"): + iso = _to_iso_date(doc.get(date_field)) + if iso: + out[date_field] = iso + + for age_field in ("minimum_age", "maximum_age"): + years = _age_to_years(doc.get(age_field)) + if years is not None: + out[age_field] = years + + for nested in ("intervention", "location", "reference"): + if doc.get(nested): + out[nested] = doc[nested] + + return out + + +def prepare_criteria_documents( + doc: dict[str, Any], + embedder: TextEmbeddingBackend, + *, + entity_annotator: EntityAnnotationBackend | None = None, +) -> list[dict[str, Any]]: + nct_id = str(doc["nct_id"]) + entries: list[dict[str, Any]] = [] + texts: list[str] = [] + for criterion in doc.get("criteria") or []: + if not isinstance(criterion, dict): + continue + text = _preprocess_text( + _flatten_text(criterion.get("criterion") or criterion.get("sentence")) + ) + if not text: + continue + entries.append( + { + "nct_id": nct_id, + "criterion": text, + "entities": criterion.get("entities") or [], + "eligibility_type": criterion.get("type") or "unknown", + } + ) + texts.append(text) + + if not entries: + return [] + + _annotate_missing_entities(entries, texts, entity_annotator) + vectors = _embed_texts(embedder, texts) + rows: list[dict[str, Any]] = [] + for entry, vector in zip(entries, vectors): + criteria_id = compute_criteria_id(entry["nct_id"], entry["criterion"]) + rows.append( + { + "criteria_id": criteria_id, + "nct_id": entry["nct_id"], + "criterion": entry["criterion"], + "entities": _entities_for_index(entry.get("entities")), + "eligibility_type": entry["eligibility_type"], + "criterion_vector": vector, + } + ) + return rows + + +def write_prepared_trial(row: dict[str, Any], folder: str | Path) -> Path: + path = Path(folder) / f"{row['nct_id']}.json" + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(row, indent=2, sort_keys=True), encoding="utf-8") + return path + + +def write_prepared_criteria(rows: Sequence[dict[str, Any]], folder: str | Path) -> int: + if not rows: + return 0 + trial_folder = Path(folder) / str(rows[0]["nct_id"]) + trial_folder.mkdir(parents=True, exist_ok=True) + for row in rows: + path = trial_folder / f"{row['criteria_id']}.json" + path.write_text(json.dumps(row, indent=2, sort_keys=True), encoding="utf-8") + return len(rows) + + +def compute_criteria_id(nct_id: str, criterion: str) -> str: + return hashlib.sha256(f"{nct_id}:{criterion}".encode("utf-8")).hexdigest() + + +def _embed_texts(embedder: TextEmbeddingBackend, texts: Sequence[str]) -> list[list[float]]: + vectors_by_nonempty_text = iter( + embedder.embed_texts([text for text in texts if text.strip()]) + ) + vectors: list[list[float]] = [] + for text in texts: + if text.strip(): + vectors.append(list(next(vectors_by_nonempty_text))) + else: + vectors.append([]) + return vectors + + +def _annotate_missing_entities( + entries: list[dict[str, Any]], + texts: list[str], + entity_annotator: EntityAnnotationBackend | None, +) -> None: + if entity_annotator is None: + return + missing_indices = [ + index for index, entry in enumerate(entries) if not entry.get("entities") + ] + if not missing_indices: + return + missing_texts = [texts[index] for index in missing_indices] + annotations = entity_annotator.annotate_texts_in_parallel( + missing_texts, + max_workers=1, + ) + for index, entities in zip(missing_indices, annotations): + entries[index]["entities"] = entities + + +def _entities_for_index(entities: Any) -> list[dict[str, Any]]: + if not isinstance(entities, list): + return [] + indexed: list[dict[str, Any]] = [] + for entity in entities: + if not isinstance(entity, dict): + continue + normalized = dict(entity) + normalized.setdefault("entity", normalized.get("text", "")) + normalized.setdefault("class", normalized.get("entity_group", "")) + normalized.setdefault("normalized_id", ["CUI-less"]) + normalized.setdefault("synonyms", []) + normalized.setdefault("concept_candidates", []) + normalized.setdefault("linker_status", "not_linked") + indexed.append(normalized) + return indexed + + +def _preprocess_text(value: str) -> str: + return re.sub(r"\s+", " ", value).strip() + + +def _flatten_text(value: Any) -> str: + if value is None: + return "" + if isinstance(value, str): + return value + if isinstance(value, dict): + return " ".join(_flatten_text(item) for item in value.values()) + if isinstance(value, Sequence) and not isinstance(value, (bytes, bytearray)): + return " ".join(_flatten_text(item) for item in value) + return str(value) + + +def _to_iso_date(value: Any) -> str | None: + if not value: + return None + try: + return dateutil.parser.parse(str(value)).date().isoformat() + except (TypeError, ValueError, dateutil.parser.ParserError): + return None + + +def _age_to_years(value: Any) -> float | None: + if not value: + return None + match = re.search(r"([\d.]+)", str(value)) + if not match: + return None + amount = float(match.group(1)) + unit = str(value).casefold() + if "year" in unit: + years = amount + elif "month" in unit: + years = amount / 12 + elif "week" in unit: + years = amount / 52 + elif "day" in unit: + years = amount / 365 + else: + return None + return round(years, 2) diff --git a/src/trialmatchai/registry/updater.py b/src/trialmatchai/registry/updater.py new file mode 100644 index 00000000..611c6a94 --- /dev/null +++ b/src/trialmatchai/registry/updater.py @@ -0,0 +1,250 @@ +from __future__ import annotations + +import json +from collections.abc import Sequence +from dataclasses import asdict, dataclass, field +from datetime import date +from pathlib import Path +from typing import Any + +from trialmatchai.registry.clinicaltrials_gov import ClinicalTrialsGovClient +from trialmatchai.registry.defaults import DEFAULT_REGISTRY_KEYWORDS, DEFAULT_REGISTRY_STATUSES +from trialmatchai.registry.manifest import ( + ManifestRecord, + RegistryManifest, + source_hash, + utc_now_iso, +) +from trialmatchai.registry.normalization import normalize_study +from trialmatchai.registry.preparation import ( + EntityAnnotationBackend, + TextEmbeddingBackend, + prepare_criteria_documents, + prepare_trial_document, +) +from trialmatchai.search import LanceDBSearchBackend +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +@dataclass(frozen=True) +class RegistryUpdateConfig: + raw_dir: Path + normalized_trials_dir: Path + manifest_path: Path + reports_dir: Path + keywords: tuple[str, ...] = DEFAULT_REGISTRY_KEYWORDS + statuses: tuple[str, ...] = DEFAULT_REGISTRY_STATUSES + since: date | None = None + max_studies: int | None = None + dry_run: bool = False + reindex_all_changed: bool = True + failure_threshold: float = 0.25 + + +@dataclass +class RegistryStudyFailure: + nct_id: str | None + error: str + + +@dataclass +class RegistryUpdateReport: + fetched: int = 0 + new: int = 0 + changed: int = 0 + unchanged: int = 0 + failed: int = 0 + duplicate: int = 0 + indexed: int = 0 + criteria_indexed: int = 0 + dry_run: bool = False + failures: list[RegistryStudyFailure] = field(default_factory=list) + + @property + def failure_rate(self) -> float: + denominator = max(1, self.fetched) + return self.failed / denominator + + def to_dict(self) -> dict[str, Any]: + data = asdict(self) + data["failure_rate"] = self.failure_rate + return data + + +class RegistryUpdater: + def __init__( + self, + *, + client: ClinicalTrialsGovClient, + backend: LanceDBSearchBackend, + embedder: TextEmbeddingBackend, + entity_annotator: EntityAnnotationBackend | None = None, + ) -> None: + self.client = client + self.backend = backend + self.embedder = embedder + self.entity_annotator = entity_annotator + + def run(self, config: RegistryUpdateConfig) -> RegistryUpdateReport: + report = RegistryUpdateReport(dry_run=config.dry_run) + manifest = RegistryManifest(config.manifest_path) + latest = manifest.load_latest() + seen: set[str] = set() + + for keyword in config.keywords: + remaining = _remaining(config.max_studies, report.fetched) + if remaining == 0: + break + logger.info("Fetching registry studies for keyword: %s", keyword) + try: + for study in self.client.iter_studies( + keyword=keyword, + statuses=config.statuses, + since=config.since, + max_studies=remaining, + ): + if ( + config.max_studies is not None + and report.fetched >= config.max_studies + ): + break + self._process_study( + study, + config=config, + manifest=manifest, + latest=latest, + seen=seen, + report=report, + ) + except Exception as exc: + logger.exception("Registry source fetch failed for keyword: %s", keyword) + report.failed += 1 + report.failures.append( + RegistryStudyFailure( + nct_id=None, + error=f"{keyword}: {exc}", + ) + ) + + if not config.dry_run: + self.write_run_report(config.reports_dir, report) + return report + + def _process_study( + self, + study: dict[str, Any], + *, + config: RegistryUpdateConfig, + manifest: RegistryManifest, + latest: dict[str, ManifestRecord], + seen: set[str], + report: RegistryUpdateReport, + ) -> None: + nct_id: str | None = None + try: + normalized = normalize_study(study) + nct_id = str(normalized["nct_id"]) + if nct_id in seen: + report.duplicate += 1 + return + seen.add(nct_id) + report.fetched += 1 + + digest = source_hash(study) + previous = latest.get(nct_id) + if previous and previous.source_hash == digest: + report.unchanged += 1 + return + + is_new = previous is None + if is_new: + report.new += 1 + else: + report.changed += 1 + + if config.dry_run: + return + + self._write_source_and_normalized(study, normalized, config=config) + if config.reindex_all_changed: + prepared_trial = prepare_trial_document(normalized, self.embedder) + prepared_criteria = prepare_criteria_documents( + normalized, + self.embedder, + entity_annotator=self.entity_annotator, + ) + report.indexed += self.backend.upsert_trials([prepared_trial]) + report.criteria_indexed += self.backend.replace_criteria_for_trials( + [nct_id], + prepared_criteria, + ) + + record = ManifestRecord( + nct_id=nct_id, + source_url=str(normalized.get("source_url", "")), + source_hash=digest, + fetched_at=utc_now_iso(), + last_update_posted=normalized.get("last_update_posted"), + processing_status="indexed" if config.reindex_all_changed else "fetched", + ) + manifest.append(record) + latest[nct_id] = record + except Exception as exc: + logger.exception("Registry update failed for study %s", nct_id or "") + report.failed += 1 + report.failures.append( + RegistryStudyFailure(nct_id=nct_id, error=str(exc)) + ) + if not config.dry_run and nct_id: + manifest.append( + ManifestRecord( + nct_id=nct_id, + source_url=f"https://clinicaltrials.gov/study/{nct_id}", + source_hash=source_hash(study), + fetched_at=utc_now_iso(), + last_update_posted=None, + processing_status="failed", + error_summary=str(exc), + ) + ) + + def _write_source_and_normalized( + self, + study: dict[str, Any], + normalized: dict[str, Any], + *, + config: RegistryUpdateConfig, + ) -> None: + nct_id = str(normalized["nct_id"]) + _write_json(config.raw_dir / f"{nct_id}.json", study) + _write_json(config.normalized_trials_dir / f"{nct_id}.json", normalized) + + @staticmethod + def write_run_report( + reports_dir: str | Path, + report: RegistryUpdateReport, + ) -> Path: + reports_path = Path(reports_dir) + reports_path.mkdir(parents=True, exist_ok=True) + path = reports_path / f"registry-update-{utc_now_iso().replace(':', '')}.json" + _write_json(path, report.to_dict()) + return path + + +def _remaining(max_studies: int | None, fetched: int) -> int | None: + if max_studies is None: + return None + return max(0, max_studies - fetched) + + +def _write_json(path: str | Path, payload: dict[str, Any]) -> None: + path = Path(path) + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(payload, indent=2, sort_keys=True), encoding="utf-8") + + +def normalize_keywords(keywords: Sequence[str]) -> tuple[str, ...]: + values = tuple(dict.fromkeys(keyword.strip() for keyword in keywords if keyword.strip())) + return values or DEFAULT_REGISTRY_KEYWORDS diff --git a/src/trialmatchai/schemas/__init__.py b/src/trialmatchai/schemas/__init__.py new file mode 100644 index 00000000..680f9076 --- /dev/null +++ b/src/trialmatchai/schemas/__init__.py @@ -0,0 +1,3 @@ +from trialmatchai.schemas.phenopacket import Keywords, Phenopacket + +__all__ = ["Keywords", "Phenopacket"] diff --git a/source/Matcher/schemas/phenopacket.py b/src/trialmatchai/schemas/phenopacket.py similarity index 100% rename from source/Matcher/schemas/phenopacket.py rename to src/trialmatchai/schemas/phenopacket.py diff --git a/source/Matcher/search/__init__.py b/src/trialmatchai/search/__init__.py similarity index 85% rename from source/Matcher/search/__init__.py rename to src/trialmatchai/search/__init__.py index e086f34d..a6c2648c 100644 --- a/source/Matcher/search/__init__.py +++ b/src/trialmatchai/search/__init__.py @@ -1,4 +1,4 @@ -from Matcher.search.lancedb_backend import ( +from trialmatchai.search.lancedb_backend import ( InMemorySearchBackend, LanceDBSearchBackend, SearchBackendUnavailable, diff --git a/source/Matcher/search/lancedb_backend.py b/src/trialmatchai/search/lancedb_backend.py similarity index 91% rename from source/Matcher/search/lancedb_backend.py rename to src/trialmatchai/search/lancedb_backend.py index 0d4bda85..b47b2cd2 100644 --- a/source/Matcher/search/lancedb_backend.py +++ b/src/trialmatchai/search/lancedb_backend.py @@ -6,7 +6,7 @@ from pathlib import Path from typing import Any, Iterable, Mapping, Protocol, Sequence -from Matcher.utils.logging_config import setup_logging +from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -91,6 +91,28 @@ def __init__( def health(self, *, require_tables: bool = False) -> list[str]: return [] + def upsert_trials(self, docs: Sequence[Mapping[str, Any]]) -> int: + rows = [build_trial_record(row) for row in docs] + updated_ids = {str(row.get("nct_id")) for row in rows if row.get("nct_id")} + self.trials = [ + row for row in self.trials if str(row.get("nct_id")) not in updated_ids + ] + self.trials.extend(rows) + return len(rows) + + def replace_criteria_for_trials( + self, + nct_ids: Sequence[str], + docs: Sequence[Mapping[str, Any]], + ) -> int: + updated_ids = {str(nct_id) for nct_id in nct_ids if nct_id} + self.criteria = [ + row for row in self.criteria if str(row.get("nct_id")) not in updated_ids + ] + rows = [build_criteria_record(row) for row in docs] + self.criteria.extend(rows) + return len(rows) + def search_trials( self, *, @@ -225,6 +247,36 @@ def index_criteria( _create_vector_index(table, "criterion_vector") return len(rows) + def upsert_trials(self, docs: Sequence[Mapping[str, Any]]) -> int: + rows = [build_trial_record(doc) for doc in docs] + if not rows: + return 0 + if self.table_exists(self.trials_table): + nct_ids = [str(row["nct_id"]) for row in rows if row.get("nct_id")] + if nct_ids: + self._delete_where(self.trials_table, _nct_where(nct_ids)) + table = self._write_rows(self.trials_table, rows, recreate=False) + _create_fts_index(table, "search_text") + _create_vector_index(table, "search_vector") + return len(rows) + + def replace_criteria_for_trials( + self, + nct_ids: Sequence[str], + docs: Sequence[Mapping[str, Any]], + ) -> int: + rows = [build_criteria_record(doc) for doc in docs] + if self.table_exists(self.criteria_table): + where = _nct_where(nct_ids) + if where: + self._delete_where(self.criteria_table, where) + if not rows: + return 0 + table = self._write_rows(self.criteria_table, rows, recreate=False) + _create_fts_index(table, "search_text") + _create_vector_index(table, "criterion_vector") + return len(rows) + def search_trials( self, *, @@ -321,6 +373,17 @@ def _write_rows( table.add(list(rows)) return table + def _delete_where(self, table_name: str, where: str) -> None: + if not where: + return + try: + table = self._open_table(table_name) + table.delete(where) + except Exception as exc: + raise SearchBackendUnavailable( + f"Could not delete existing rows from LanceDB table {table_name}: {exc}" + ) from exc + def _candidate_rows( self, table: Any, diff --git a/source/Matcher/pipeline/trial_search/__init__.py b/src/trialmatchai/services/__init__.py similarity index 100% rename from source/Matcher/pipeline/trial_search/__init__.py rename to src/trialmatchai/services/__init__.py diff --git a/source/Matcher/services/preflight.py b/src/trialmatchai/services/preflight.py similarity index 89% rename from source/Matcher/services/preflight.py rename to src/trialmatchai/services/preflight.py index 2e52a53c..c46c4178 100644 --- a/source/Matcher/services/preflight.py +++ b/src/trialmatchai/services/preflight.py @@ -4,9 +4,7 @@ from pathlib import Path from typing import Any, Dict, List -import torch - -from Matcher.utils.logging_config import setup_logging +from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -86,8 +84,16 @@ def run_preflight_checks( "cot_backend=vllm requires the GPU extra " "(`uv sync --extra gpu`) or the Docker worker image." ) - if not torch.cuda.is_available(): - issues.append("cot_backend=vllm requires a CUDA-capable runtime.") + try: + import torch + except Exception: + issues.append( + "cot_backend=vllm requires PyTorch " + "(`uv sync --extra llm --extra gpu`)." + ) + else: + if not torch.cuda.is_available(): + issues.append("cot_backend=vllm requires a CUDA-capable runtime.") search_cfg = config.get("search_backend", {}) if search_cfg: @@ -100,7 +106,7 @@ def run_preflight_checks( if require_search_tables: if search_backend is None: try: - from Matcher.search import LanceDBSearchBackend + from trialmatchai.search import LanceDBSearchBackend search_backend = LanceDBSearchBackend.from_config(config) except Exception as exc: diff --git a/source/Matcher/services/__init__.py b/src/trialmatchai/utils/__init__.py similarity index 100% rename from source/Matcher/services/__init__.py rename to src/trialmatchai/utils/__init__.py diff --git a/source/Matcher/utils/evaluation.py b/src/trialmatchai/utils/evaluation.py similarity index 98% rename from source/Matcher/utils/evaluation.py rename to src/trialmatchai/utils/evaluation.py index 99976dab..aa48cd7a 100644 --- a/source/Matcher/utils/evaluation.py +++ b/src/trialmatchai/utils/evaluation.py @@ -1,4 +1,4 @@ -# Matcher/utils/evaluation.py +# trialmatchai/utils/evaluation.py from __future__ import annotations import csv @@ -304,10 +304,10 @@ def evaluate_and_save_metrics( # Lazy import to avoid package cycles try: - from Matcher.utils.file_utils import read_json_file # type: ignore + from trialmatchai.utils.file_utils import read_json_file # type: ignore except Exception: # Fallback path if run standalone - from Matcher.utils.file_utils import read_json_file # type: ignore + from trialmatchai.utils.file_utils import read_json_file # type: ignore ranked = read_json_file(args.ranked) out_dir = args.out_dir or os.path.dirname(args.ranked) diff --git a/source/Matcher/utils/file_utils.py b/src/trialmatchai/utils/file_utils.py similarity index 100% rename from source/Matcher/utils/file_utils.py rename to src/trialmatchai/utils/file_utils.py diff --git a/source/Matcher/utils/json_utils.py b/src/trialmatchai/utils/json_utils.py similarity index 100% rename from source/Matcher/utils/json_utils.py rename to src/trialmatchai/utils/json_utils.py diff --git a/source/Matcher/utils/logging_config.py b/src/trialmatchai/utils/logging_config.py similarity index 100% rename from source/Matcher/utils/logging_config.py rename to src/trialmatchai/utils/logging_config.py diff --git a/source/Matcher/utils/retry.py b/src/trialmatchai/utils/retry.py similarity index 100% rename from source/Matcher/utils/retry.py rename to src/trialmatchai/utils/retry.py diff --git a/source/Matcher/utils/temporal_utils.py b/src/trialmatchai/utils/temporal_utils.py similarity index 100% rename from source/Matcher/utils/temporal_utils.py rename to src/trialmatchai/utils/temporal_utils.py diff --git a/source/Matcher/utils/timing.py b/src/trialmatchai/utils/timing.py similarity index 100% rename from source/Matcher/utils/timing.py rename to src/trialmatchai/utils/timing.py diff --git a/tests/conftest.py b/tests/conftest.py index b4c383e1..17d198bf 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2,4 +2,4 @@ from pathlib import Path ROOT = Path(__file__).resolve().parents[1] -sys.path.append(str(ROOT / "source")) +sys.path.append(str(ROOT / "src")) diff --git a/tests/test_config_pytest.py b/tests/test_config_pytest.py index 36b08061..8e3cb05b 100644 --- a/tests/test_config_pytest.py +++ b/tests/test_config_pytest.py @@ -1,10 +1,10 @@ from pathlib import Path -from Matcher.config.config_loader import load_config +from trialmatchai.config.config_loader import load_config def test_load_config_from_repo(): - config_path = Path(__file__).resolve().parents[1] / "source/Matcher/config/config.json" + config_path = Path(__file__).resolve().parents[1] / "src/trialmatchai/config/config.json" cfg = load_config(str(config_path)) assert cfg["search_backend"]["backend"] == "lancedb" assert "embedder" in cfg diff --git a/tests/test_deployment_readiness.py b/tests/test_deployment_readiness.py index 052fc534..ba1a9328 100644 --- a/tests/test_deployment_readiness.py +++ b/tests/test_deployment_readiness.py @@ -1,14 +1,14 @@ from __future__ import annotations -from Matcher.config.config_loader import load_config, resolve_config_path -from Matcher.pipeline.cot_reasoning import BatchTrialProcessor -from Matcher.utils.json_utils import extract_json_object +from trialmatchai.config.config_loader import load_config, resolve_config_path +from trialmatchai.matching.eligibility_reasoning import BatchTrialProcessor +from trialmatchai.utils.json_utils import extract_json_object def test_default_config_resolution_from_repo_root(): path = resolve_config_path() assert path.name == "config.json" - assert path.as_posix().endswith("source/Matcher/config/config.json") + assert path.as_posix().endswith("src/trialmatchai/config/config.json") def test_config_env_overrides_and_search_tables(monkeypatch): @@ -19,6 +19,8 @@ def test_config_env_overrides_and_search_tables(monkeypatch): monkeypatch.setenv("TRIALMATCHAI_ENTITY_BACKEND", "regex") monkeypatch.setenv("TRIALMATCHAI_CONCEPT_DB_PATH", "data/concepts-test") monkeypatch.setenv("TRIALMATCHAI_LINK_ACCEPT", "0.9") + monkeypatch.setenv("TRIALMATCHAI_REGISTRY_SINCE_DAYS", "14") + monkeypatch.setenv("TRIALMATCHAI_REGISTRY_RAW_DIR", "data/registry/raw-test") cfg = load_config() @@ -30,6 +32,8 @@ def test_config_env_overrides_and_search_tables(monkeypatch): assert cfg["entity_extraction"]["backend"] == "regex" assert cfg["concept_linker"]["db_path"].endswith("data/concepts-test") assert cfg["concept_linker"]["accept_threshold"] == 0.9 + assert cfg["registry"]["since_days"] == 14 + assert cfg["registry"]["raw_dir"].endswith("data/registry/raw-test") def test_cot_prompt_does_not_inject_consent(): diff --git a/tests/test_entities.py b/tests/test_entities.py index fc5a3efd..8ee6ea5d 100644 --- a/tests/test_entities.py +++ b/tests/test_entities.py @@ -3,12 +3,12 @@ import csv from pathlib import Path -from Matcher.entities.annotator import CompatibilityEntityAnnotator -from Matcher.entities.builder import build_legacy_dictionary_rows, build_omop_concept_rows -from Matcher.entities.linker import ConceptLinker, InMemoryConceptStore -from Matcher.entities.recognizers import RegexSchemaRecognizer, resolve_overlaps -from Matcher.entities.schemas import load_entity_schemas -from Matcher.entities.types import ConceptCandidate, EntityAnnotation, NO_ENTITY_ID +from trialmatchai.entities.annotator import CompatibilityEntityAnnotator +from trialmatchai.entities.builder import build_legacy_dictionary_rows, build_omop_concept_rows +from trialmatchai.entities.linker import ConceptLinker, InMemoryConceptStore +from trialmatchai.entities.recognizers import RegexSchemaRecognizer, resolve_overlaps +from trialmatchai.entities.schemas import load_entity_schemas +from trialmatchai.entities.types import ConceptCandidate, EntityAnnotation, NO_ENTITY_ID ROOT = Path(__file__).resolve().parents[1] @@ -148,23 +148,20 @@ def test_concept_builders_import_omop_and_legacy_rows(tmp_path): def test_runtime_replacement_has_no_old_daemon_references(): - runtime_files = [ - "source/Matcher/config/config.json", - "source/Matcher/main.py", - "source/Parser/biomedner_engine.py", - "source/Parser/normalizer.py", - ] + assert not (ROOT / "source/Parser").exists() + runtime_files = sorted((ROOT / "src/trialmatchai").rglob("*.py")) forbidden = [ "18888", "18892", "18894", "18783", + "BioMedNER", "GNormPlus", "disease_normalizer_21.jar", "java -Xmx", "import socket", ] - for file_name in runtime_files: - content = (ROOT / file_name).read_text() + for path in runtime_files: + content = path.read_text() for term in forbidden: assert term not in content diff --git a/tests/test_file_utils_pytest.py b/tests/test_file_utils_pytest.py index bee17e6e..2dfbdfff 100644 --- a/tests/test_file_utils_pytest.py +++ b/tests/test_file_utils_pytest.py @@ -1,4 +1,4 @@ -from Matcher.utils.file_utils import read_json_file, read_text_file, write_json_file, write_text_file +from trialmatchai.utils.file_utils import read_json_file, read_text_file, write_json_file, write_text_file def test_write_and_read_json(tmp_path): diff --git a/tests/test_first_level_search_pytest.py b/tests/test_first_level_search_pytest.py index d6ed7454..8e92e7fd 100644 --- a/tests/test_first_level_search_pytest.py +++ b/tests/test_first_level_search_pytest.py @@ -1,5 +1,5 @@ -from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch -from Matcher.search import InMemorySearchBackend +from trialmatchai.matching.retrieval.trial_retrieval import ClinicalTrialSearch +from trialmatchai.search import InMemorySearchBackend def test_search_trials_bm25_returns_hits(): diff --git a/tests/test_lancedb_search_backend.py b/tests/test_lancedb_search_backend.py index bf111b37..012ed12e 100644 --- a/tests/test_lancedb_search_backend.py +++ b/tests/test_lancedb_search_backend.py @@ -2,7 +2,7 @@ import pytest -from Matcher.search import LanceDBSearchBackend +from trialmatchai.search import LanceDBSearchBackend pytest.importorskip("lancedb") diff --git a/tests/test_logging.py b/tests/test_logging.py index 8d82c083..b2314a4b 100644 --- a/tests/test_logging.py +++ b/tests/test_logging.py @@ -1,7 +1,7 @@ import logging import unittest -from Matcher.utils.logging_config import reset_request_id, set_request_id, setup_logging +from trialmatchai.utils.logging_config import reset_request_id, set_request_id, setup_logging class CaptureHandler(logging.Handler): diff --git a/tests/test_logging_pytest.py b/tests/test_logging_pytest.py index c7694f31..90320107 100644 --- a/tests/test_logging_pytest.py +++ b/tests/test_logging_pytest.py @@ -1,6 +1,6 @@ import logging -from Matcher.utils.logging_config import reset_request_id, set_request_id, setup_logging +from trialmatchai.utils.logging_config import reset_request_id, set_request_id, setup_logging class _CaptureHandler(logging.Handler): diff --git a/tests/test_package_imports.py b/tests/test_package_imports.py new file mode 100644 index 00000000..3c556292 --- /dev/null +++ b/tests/test_package_imports.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +import warnings + +import trialmatchai + + +def test_trialmatchai_imports_with_version(): + assert trialmatchai.__version__ == "0.2.0" + + +def test_matcher_config_compatibility_shim(): + with warnings.catch_warnings(record=True) as captured: + warnings.simplefilter("always") + from Matcher.config.config_loader import resolve_config_path + + assert resolve_config_path().name == "config.json" + assert any("Matcher" in str(warning.message) for warning in captured) diff --git a/tests/test_phenopacket_processor_pytest.py b/tests/test_phenopacket_processor_pytest.py index 3621e492..6c42fb50 100644 --- a/tests/test_phenopacket_processor_pytest.py +++ b/tests/test_phenopacket_processor_pytest.py @@ -1,6 +1,6 @@ import json -from Matcher.pipeline.phenopacket_processor import PhenopacketProcessor +from trialmatchai.matching.phenopacket_processor import PhenopacketProcessor def test_phenopacket_processor_minimal(tmp_path): diff --git a/tests/test_preflight_and_indexer.py b/tests/test_preflight_and_indexer.py index 0d64b076..6bbc64d4 100644 --- a/tests/test_preflight_and_indexer.py +++ b/tests/test_preflight_and_indexer.py @@ -1,13 +1,13 @@ from __future__ import annotations -import importlib.util import json from pathlib import Path -from Matcher.config.config_loader import load_config -from Matcher.search import InMemorySearchBackend -from Matcher.services import preflight -from Matcher.services.preflight import run_preflight_checks +from trialmatchai.cli.index_data import _load_nested_json_folder +from trialmatchai.config.config_loader import load_config +from trialmatchai.search import InMemorySearchBackend +from trialmatchai.services import preflight +from trialmatchai.services.preflight import run_preflight_checks def _base_config(tmp_path): @@ -100,12 +100,14 @@ def test_preflight_reports_missing_search_db_path(tmp_path): def test_preflight_reports_missing_vllm_extra(tmp_path, monkeypatch): + import torch + cfg = _base_config(tmp_path) cfg["cot_backend"] = "vllm" Path(cfg["model"]["cot_adapter_path"]).mkdir(parents=True) Path(cfg["model"]["reranker_adapter_path"]).mkdir(parents=True) monkeypatch.setattr(preflight.importlib.util, "find_spec", lambda name: None) - monkeypatch.setattr(preflight.torch.cuda, "is_available", lambda: True) + monkeypatch.setattr(torch.cuda, "is_available", lambda: True) issues = run_preflight_checks(cfg, require_models=True) @@ -180,25 +182,16 @@ def test_main_config_resolves_search_paths(tmp_path, monkeypatch): def test_indexer_loads_prepared_criteria_docs(tmp_path): - indexer_path = Path(__file__).resolve().parents[1] / "utils/Indexer/index_criteria.py" - spec = importlib.util.spec_from_file_location("index_criteria", indexer_path) - assert spec and spec.loader - module = importlib.util.module_from_spec(spec) - spec.loader.exec_module(module) - processed = tmp_path / "processed_criteria" trial_dir = processed / "N1" trial_dir.mkdir(parents=True) (trial_dir / "C1.json").write_text( json.dumps({"criteria_id": "C1", "nct_id": "N1", "criterion": "cancer"}) ) + docs = _load_nested_json_folder(processed) backend = InMemorySearchBackend() - criteria_indexer = module.CriteriaIndexer( - backend=backend, - processed_file=tmp_path / "processed_ids.txt", - ) - - docs, completed = criteria_indexer.load_docs(processed, recreate=True) + count = backend.replace_criteria_for_trials(["N1"], docs) assert docs[0]["criteria_id"] == "C1" - assert completed == {"N1"} + assert count == 1 + assert backend.criteria[0]["nct_id"] == "N1" diff --git a/tests/test_registry_updater.py b/tests/test_registry_updater.py new file mode 100644 index 00000000..4c4d0d05 --- /dev/null +++ b/tests/test_registry_updater.py @@ -0,0 +1,284 @@ +from __future__ import annotations + +import json +from datetime import date +from pathlib import Path +from typing import Any + +from trialmatchai.registry.clinicaltrials_gov import ClinicalTrialsGovClient +from trialmatchai.registry.defaults import DEFAULT_REGISTRY_KEYWORDS +from trialmatchai.registry.manifest import RegistryManifest, source_hash +from trialmatchai.registry.normalization import normalize_study, split_eligibility_criteria +from trialmatchai.registry.updater import RegistryUpdateConfig, RegistryUpdater, normalize_keywords +from trialmatchai.search import InMemorySearchBackend + + +def test_client_paginates_and_filters_since(): + session = _FakeSession( + [ + { + "studies": [ + _study("NCT00000001", last_update="2026-06-01"), + _study("NCT00000002", last_update="2026-01-01"), + ], + "nextPageToken": "page-2", + }, + {"studies": [_study("NCT00000003", last_update="2026-06-02")]}, + ] + ) + client = ClinicalTrialsGovClient( + session=session, + rate_limit_per_second=1000, + timeout=1, + ) + + studies = list( + client.iter_studies( + keyword="cancer", + statuses=("RECRUITING",), + since=date(2026, 6, 1), + ) + ) + + assert [study["protocolSection"]["identificationModule"]["nctId"] for study in studies] == [ + "NCT00000001", + "NCT00000003", + ] + assert session.calls[0]["params"]["query.term"] == "cancer" + assert session.calls[0]["params"]["filter.overallStatus"] == "RECRUITING" + assert session.calls[1]["params"]["pageToken"] == "page-2" + + +def test_normalize_study_maps_v2_modules_and_splits_criteria(): + normalized = normalize_study(_study("NCT00000004")) + + assert normalized["nct_id"] == "NCT00000004" + assert normalized["brief_title"] == "Trial for NCT00000004" + assert normalized["condition"] == ["Lung cancer"] + assert normalized["source_url"] == "https://clinicaltrials.gov/study/NCT00000004" + assert normalized["criteria"] == [ + {"type": "inclusion", "criterion": "Age 18 years or older"}, + {"type": "inclusion", "criterion": "Histologically confirmed lung cancer"}, + {"type": "exclusion", "criterion": "Prior investigational therapy"}, + ] + + +def test_split_eligibility_criteria_has_unknown_fallback(): + assert split_eligibility_criteria("Able to consent.") == [ + {"type": "unknown", "criterion": "Able to consent."} + ] + + +def test_manifest_keeps_latest_record_by_nct_id(tmp_path): + manifest = RegistryManifest(tmp_path / "manifest.jsonl") + study = _study("NCT00000005") + record = _manifest_record("NCT00000005", source_hash(study), status="indexed") + changed = _manifest_record("NCT00000005", "changed", status="indexed") + + manifest.append(record) + manifest.append(changed) + + latest = manifest.load_latest() + assert latest["NCT00000005"].source_hash == "changed" + + +def test_updater_writes_new_trial_and_upserts_tables(tmp_path): + study = _study("NCT00000006") + backend = InMemorySearchBackend( + criteria=[ + { + "criteria_id": "old", + "nct_id": "NCT00000006", + "criterion": "old criterion", + "criterion_vector": [0.0, 0.0], + } + ] + ) + updater = RegistryUpdater( + client=_FakeRegistryClient([study]), + backend=backend, + embedder=_FakeEmbedder(), + ) + + report = updater.run(_update_config(tmp_path)) + + assert report.fetched == 1 + assert report.new == 1 + assert report.indexed == 1 + assert report.criteria_indexed == 3 + assert (tmp_path / "raw/NCT00000006.json").exists() + assert (tmp_path / "trials/NCT00000006.json").exists() + assert len(backend.trials) == 1 + assert all(row["nct_id"] == "NCT00000006" for row in backend.criteria) + assert {row["criterion"] for row in backend.criteria} == { + "Age 18 years or older", + "Histologically confirmed lung cancer", + "Prior investigational therapy", + } + + +def test_updater_skips_unchanged_hashes(tmp_path): + study = _study("NCT00000007") + config = _update_config(tmp_path) + RegistryManifest(config.manifest_path).append( + _manifest_record("NCT00000007", source_hash(study), status="indexed") + ) + backend = InMemorySearchBackend() + updater = RegistryUpdater( + client=_FakeRegistryClient([study]), + backend=backend, + embedder=_FakeEmbedder(), + ) + + report = updater.run(config) + + assert report.unchanged == 1 + assert report.indexed == 0 + assert backend.trials == [] + + +def test_updater_dry_run_does_not_write_files_or_tables(tmp_path): + backend = InMemorySearchBackend() + updater = RegistryUpdater( + client=_FakeRegistryClient([_study("NCT00000008")]), + backend=backend, + embedder=_FakeEmbedder(), + ) + + report = updater.run(_update_config(tmp_path, dry_run=True)) + + assert report.new == 1 + assert not (tmp_path / "raw").exists() + assert not (tmp_path / "trials").exists() + assert not (tmp_path / "manifest.jsonl").exists() + assert backend.trials == [] + + +def test_normalize_keywords_uses_defaults_when_empty(): + assert normalize_keywords([]) == DEFAULT_REGISTRY_KEYWORDS + assert normalize_keywords([" cancer ", "cancer", "diabetes"]) == ( + "cancer", + "diabetes", + ) + + +class _FakeResponse: + def __init__(self, payload: dict[str, Any], status_code: int = 200): + self.payload = payload + self.status_code = status_code + self.text = json.dumps(payload) + + def json(self): + return self.payload + + def raise_for_status(self): + if self.status_code >= 400: + raise RuntimeError(self.text) + + +class _FakeSession: + def __init__(self, payloads: list[dict[str, Any]]): + self.payloads = payloads + self.calls: list[dict[str, Any]] = [] + + def get(self, url, *, params, timeout, headers): + self.calls.append( + { + "url": url, + "params": dict(params), + "timeout": timeout, + "headers": dict(headers), + } + ) + return _FakeResponse(self.payloads.pop(0)) + + +class _FakeRegistryClient: + def __init__(self, studies: list[dict[str, Any]]): + self.studies = studies + + def iter_studies(self, *, keyword, statuses, since, max_studies): + del keyword, statuses, since + for study in self.studies[:max_studies]: + yield study + + +class _FakeEmbedder: + def embed_texts(self, texts): + return [[float(len(text)), 1.0] for text in texts] + + +def _update_config(tmp_path: Path, *, dry_run: bool = False) -> RegistryUpdateConfig: + return RegistryUpdateConfig( + raw_dir=tmp_path / "raw", + normalized_trials_dir=tmp_path / "trials", + manifest_path=tmp_path / "manifest.jsonl", + reports_dir=tmp_path / "runs", + keywords=("cancer",), + statuses=("RECRUITING",), + since=None, + dry_run=dry_run, + ) + + +def _manifest_record(nct_id: str, digest: str, *, status: str): + from trialmatchai.registry.manifest import ManifestRecord, utc_now_iso + + return ManifestRecord( + nct_id=nct_id, + source_url=f"https://clinicaltrials.gov/study/{nct_id}", + source_hash=digest, + fetched_at=utc_now_iso(), + last_update_posted="2026-06-01", + processing_status=status, + ) + + +def _study(nct_id: str, *, last_update: str = "2026-06-01") -> dict[str, Any]: + return { + "protocolSection": { + "identificationModule": { + "nctId": nct_id, + "briefTitle": f"Trial for {nct_id}", + "officialTitle": f"Official trial for {nct_id}", + }, + "statusModule": { + "overallStatus": "RECRUITING", + "startDateStruct": {"date": "2026-01-01"}, + "completionDateStruct": {"date": "2027-01-01"}, + "lastUpdatePostDateStruct": {"date": last_update}, + }, + "descriptionModule": { + "briefSummary": "A test trial.", + "detailedDescription": "A detailed test trial.", + }, + "conditionsModule": {"conditions": ["Lung cancer"]}, + "designModule": { + "phases": ["PHASE2"], + "studyType": "INTERVENTIONAL", + }, + "eligibilityModule": { + "sex": "ALL", + "minimumAge": "18 Years", + "maximumAge": "80 Years", + "eligibilityCriteria": "\n".join( + [ + "Inclusion Criteria:", + "- Age 18 years or older", + "- Histologically confirmed lung cancer", + "Exclusion Criteria:", + "- Prior investigational therapy", + ] + ), + }, + "armsInterventionsModule": { + "interventions": [{"name": "Drug A", "type": "DRUG"}] + }, + "contactsLocationsModule": { + "locations": [{"facility": "Site A", "country": "United States"}] + }, + "referencesModule": { + "references": [{"pmid": "123", "citation": "Reference"}] + }, + } + } diff --git a/tests/test_retry_pytest.py b/tests/test_retry_pytest.py index 6cc900c6..58d93460 100644 --- a/tests/test_retry_pytest.py +++ b/tests/test_retry_pytest.py @@ -1,4 +1,4 @@ -from Matcher.utils.retry import with_retries +from trialmatchai.utils.retry import with_retries def test_with_retries_succeeds_after_failures(): diff --git a/tests/test_schemas.py b/tests/test_schemas.py index 73e6c5ce..9c02e994 100644 --- a/tests/test_schemas.py +++ b/tests/test_schemas.py @@ -1,6 +1,6 @@ import unittest -from Matcher.schemas.phenopacket import Keywords, Phenopacket +from trialmatchai.schemas.phenopacket import Keywords, Phenopacket class TestSchemas(unittest.TestCase): diff --git a/tests/test_search_queries_pytest.py b/tests/test_search_queries_pytest.py index a19f7221..aabeacae 100644 --- a/tests/test_search_queries_pytest.py +++ b/tests/test_search_queries_pytest.py @@ -1,5 +1,5 @@ -from Matcher.pipeline.trial_search.first_level_search import ClinicalTrialSearch -from Matcher.search import InMemorySearchBackend, build_criteria_record, build_trial_record +from trialmatchai.matching.retrieval.trial_retrieval import ClinicalTrialSearch +from trialmatchai.search import InMemorySearchBackend, build_criteria_record, build_trial_record def test_first_level_query_describes_backend_search(): diff --git a/tests/test_second_level_search_pytest.py b/tests/test_second_level_search_pytest.py index 3436b1c0..c133067c 100644 --- a/tests/test_second_level_search_pytest.py +++ b/tests/test_second_level_search_pytest.py @@ -1,5 +1,5 @@ -from Matcher.pipeline.trial_search.second_level_search import SecondStageRetriever -from Matcher.search import InMemorySearchBackend +from trialmatchai.matching.retrieval.criteria_retrieval import SecondStageRetriever +from trialmatchai.search import InMemorySearchBackend def test_score_criteria_without_llm_weights(): diff --git a/tests/test_settings.py b/tests/test_settings.py index a417277a..d65af376 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -2,13 +2,13 @@ import unittest from pathlib import Path -from Matcher.config.config_loader import load_config -from Matcher.config.settings import apply_env_overrides +from trialmatchai.config.config_loader import load_config +from trialmatchai.config.settings import apply_env_overrides class TestConfigLoading(unittest.TestCase): def test_load_config_from_repo(self) -> None: - config_path = Path(__file__).resolve().parents[1] / "source/Matcher/config/config.json" + config_path = Path(__file__).resolve().parents[1] / "src/trialmatchai/config/config.json" config = load_config(str(config_path)) self.assertIn("search_backend", config) self.assertIn("embedder", config) @@ -26,6 +26,7 @@ def test_env_overrides(self) -> None: "search": {"mode": "hybrid"}, "entity_extraction": {"backend": "gliner2"}, "concept_linker": {"db_path": "old"}, + "registry": {"since_days": 7, "raw_dir": "old-raw"}, } os.environ["TRIALMATCHAI_SEARCH_DB_PATH"] = "data/search-test" os.environ["TRIALMATCHAI_SEARCH_TRIALS_TABLE"] = "trials-test" @@ -33,6 +34,8 @@ def test_env_overrides(self) -> None: os.environ["TRIALMATCHAI_EMBEDDER_MODEL_NAME"] = "new-model" os.environ["TRIALMATCHAI_ENTITY_BACKEND"] = "regex" os.environ["TRIALMATCHAI_CONCEPT_DB_PATH"] = "concepts" + os.environ["TRIALMATCHAI_REGISTRY_SINCE_DAYS"] = "30" + os.environ["TRIALMATCHAI_REGISTRY_RAW_DIR"] = "registry/raw" try: updated = apply_env_overrides(raw) finally: @@ -42,6 +45,8 @@ def test_env_overrides(self) -> None: os.environ.pop("TRIALMATCHAI_EMBEDDER_MODEL_NAME", None) os.environ.pop("TRIALMATCHAI_ENTITY_BACKEND", None) os.environ.pop("TRIALMATCHAI_CONCEPT_DB_PATH", None) + os.environ.pop("TRIALMATCHAI_REGISTRY_SINCE_DAYS", None) + os.environ.pop("TRIALMATCHAI_REGISTRY_RAW_DIR", None) self.assertEqual(updated["search_backend"]["db_path"], "data/search-test") self.assertEqual(updated["search_backend"]["trials_table"], "trials-test") @@ -49,6 +54,8 @@ def test_env_overrides(self) -> None: self.assertEqual(updated["embedder"]["model_name"], "new-model") self.assertEqual(updated["entity_extraction"]["backend"], "regex") self.assertEqual(updated["concept_linker"]["db_path"], "concepts") + self.assertEqual(updated["registry"]["since_days"], 30) + self.assertEqual(updated["registry"]["raw_dir"], "registry/raw") if __name__ == "__main__": diff --git a/tests/test_trial_ranker_pytest.py b/tests/test_trial_ranker_pytest.py index 5bc32d0e..16265672 100644 --- a/tests/test_trial_ranker_pytest.py +++ b/tests/test_trial_ranker_pytest.py @@ -1,6 +1,6 @@ import json -from Matcher.pipeline.trial_ranker import ( +from trialmatchai.matching.trial_ranker import ( load_trial_data, rank_trials, save_ranked_trials, diff --git a/utils/DataLoader/__init__.py b/utils/DataLoader/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/utils/DataLoader/downloader.py b/utils/DataLoader/downloader.py deleted file mode 100644 index 79d0c55e..00000000 --- a/utils/DataLoader/downloader.py +++ /dev/null @@ -1,254 +0,0 @@ -import requests -import sys -import xml.etree.ElementTree as ET -import os -import time -import joblib -from tqdm.auto import tqdm -from tenacity import retry, wait_random_exponential, stop_after_attempt -import logging -from typing import List, Union - -# Configure logging for clear and timestamped output -logging.basicConfig( - level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" -) - - -def normalize_whitespace(s: str) -> str: - """Normalize whitespace in a string.""" - return " ".join(s.split()) - - -@retry(wait=wait_random_exponential(min=1, max=20), stop=stop_after_attempt(10)) -def get_cancer_trials_list(max_trials: int = 15000) -> List[str]: - """ - Retrieve a list of cancer-related clinical trial NCT IDs from ClinicalTrials.gov. - - Args: - max_trials (int): Maximum number of trial IDs to fetch. - - Returns: - List[str]: List of unique NCT IDs. - """ - base_url = "https://clinicaltrials.gov/api/query/full_studies" - trials_set = set() - page_size = 100 # Number of trials per page - current_rank = 1 - trials_fetched = 0 - - while trials_fetched < max_trials: - search_params = { - "expr": "((cancer) OR (neoplasm)) AND ((interventional) OR (treatment)) AND ((mutation) OR (variant))", - "min_rnk": current_rank, - "max_rnk": current_rank + page_size - 1, - "fmt": "json", - "fields": "NCTId", - } - response = requests.get(base_url, params=search_params) - if response.status_code == 200: - trials_data = response.json() - if "FullStudiesResponse" in trials_data: - studies = trials_data["FullStudiesResponse"].get("FullStudies", []) - if not studies: - break # No more studies found, exit the loop - for study in studies: - nct_id = ( - study.get("Study", {}) - .get("ProtocolSection", {}) - .get("IdentificationModule", {}) - .get("NCTId") - ) - if nct_id: - trials_set.add(nct_id) - trials_fetched += 1 - if trials_fetched >= max_trials: - break - current_rank += page_size - else: - logging.error("No trials found matching the criteria.") - break - else: - logging.error( - "Failed to retrieve data. Status code: %s", response.status_code - ) - break - - return list(trials_set) - - -def download_study_info( - nct_id: str, delay: float = 1.0, session: Union[requests.Session, None] = None -) -> bool: - """ - Download and update the XML information for a given clinical trial (NCT ID). - - If a local copy exists, compare selected fields with the online version. - If differences are found (or the file doesn't exist), update or create the local file. - - Args: - nct_id (str): The clinical trial NCT ID. - delay (float): Delay between requests in seconds. - session (requests.Session, optional): Requests session for connection pooling. - - Returns: - bool: True if the file was downloaded or updated successfully; False otherwise. - """ - local_file_path = os.path.join("..", "..", "data", "trials_xmls", f"{nct_id}.xml") - os.makedirs(os.path.dirname(local_file_path), exist_ok=True) - - session = session or requests.Session() - online_url = f"https://clinicaltrials.gov/ct2/show/{nct_id}?displayxml=true" - - try: - response = session.get(online_url) - except requests.exceptions.RequestException as e: - logging.error("Error fetching XML for trial %s: %s", nct_id, e) - time.sleep(delay) - return False - - if response.status_code != 200: - logging.error( - "Error: received status code %s for trial %s", response.status_code, nct_id - ) - time.sleep(delay) - return False - - try: - online_root = ET.fromstring(response.text) - except ET.ParseError as e: - logging.error("Error parsing online XML for trial %s: %s", nct_id, e) - time.sleep(delay) - return False - - # Check if a local version exists and compare key fields - if os.path.exists(local_file_path): - try: - with open(local_file_path, "r", encoding="utf-8") as f: - local_xml_content = f.read() - local_root = ET.fromstring(local_xml_content) - except (ET.ParseError, IOError) as e: - logging.error("Error reading/parsing local XML for trial %s: %s", nct_id, e) - os.remove(local_file_path) - local_root = None - else: - local_root = None - - fields_to_check = ["eligibility", "brief_title", "overall_status", "location"] - needs_update = False - - if local_root is not None: - for field in fields_to_check: - local_elem = local_root.find(f".//{field}") - online_elem = online_root.find(f".//{field}") - if local_elem is not None and online_elem is not None: - local_text = normalize_whitespace( - ET.tostring(local_elem, encoding="unicode").strip() - ) - online_text = normalize_whitespace( - ET.tostring(online_elem, encoding="unicode").strip() - ) - if local_text != online_text: - needs_update = True - break - else: - needs_update = True - break - - if local_root is None or needs_update: - try: - with open(local_file_path, "w", encoding="utf-8") as f: - f.write(ET.tostring(online_root, encoding="unicode")) - if local_root is None: - logging.info("Downloaded study information for %s", nct_id) - else: - logging.info("Updated study information for %s", nct_id) - except IOError as e: - logging.error("Error writing XML for trial %s: %s", nct_id, e) - time.sleep(delay) - return False - else: - logging.info("No changes in study information for %s", nct_id) - - time.sleep(delay) - return True - - -def parallel_downloader( - nct_ids: List[str], n_jobs: int = 10, delay: float = 1.0 -) -> List[bool]: - """ - Download and update clinical trial XMLs in parallel using joblib. - - Args: - nct_ids (List[str]): List of clinical trial NCT IDs. - n_jobs (int): Number of parallel jobs. - delay (float): Delay between requests. - - Returns: - List[bool]: List indicating the success status of each download/update. - """ - session = requests.Session() - - def download_wrapper(nct_id: str) -> bool: - return download_study_info(nct_id, delay=delay, session=session) - - results = joblib.Parallel(n_jobs=n_jobs)( - joblib.delayed(download_wrapper)(nct_id) - for nct_id in tqdm(nct_ids, desc="Downloading trials") - ) - return results - - -class Downloader: - """ - A class to manage the downloading and updating of clinical trial XML files. - - Attributes: - id_list (List[str]): List of clinical trial NCT IDs. - n_jobs (int): Number of parallel jobs. - delay (float): Delay between requests. - """ - - def __init__(self, id_list: List[str], n_jobs: int = 10, delay: float = 1.0): - self.id_list = id_list - self.n_jobs = n_jobs - self.delay = delay - - def download_and_update_trials(self) -> List[bool]: - """ - Download and update XML files for all trials in the id_list. - - Returns: - List[bool]: List of boolean statuses for each download/update. - """ - start_time = time.time() - results = parallel_downloader( - self.id_list, n_jobs=self.n_jobs, delay=self.delay - ) - elapsed_time = time.time() - start_time - logging.info("Elapsed time: %.2f seconds", elapsed_time) - return results - - -def main(): - """Main function to run the downloader.""" - id_file = "nct_ids.txt" - if not os.path.exists(id_file): - logging.error("ID file '%s' does not exist.", id_file) - sys.exit(1) - - with open(id_file, "r", encoding="utf-8") as file: - id_list = [line.strip() for line in file if line.strip()] - - if not id_list: - logging.error("No NCT IDs found in the file.") - sys.exit(1) - - n_jobs = 10 - downloader = Downloader(id_list, n_jobs=n_jobs, delay=1.0) - downloader.download_and_update_trials() - - -if __name__ == "__main__": - main() diff --git a/utils/DataLoader/test/__init__.py b/utils/DataLoader/test/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/utils/DataLoader/test/test_downloader.py b/utils/DataLoader/test/test_downloader.py deleted file mode 100644 index c7a849cb..00000000 --- a/utils/DataLoader/test/test_downloader.py +++ /dev/null @@ -1,179 +0,0 @@ -import unittest -from unittest.mock import patch, mock_open, MagicMock -import os - -from src.DataLoader.downloader import ( - normalize_whitespace, - get_cancer_trials_list, - download_study_info, - parallel_downloader, - Downloader, -) - - -class TestDownloaderFunctions(unittest.TestCase): - def test_normalize_whitespace(self): - input_str = " This is a test string \n with extra spaces. " - expected = "This is a test string with extra spaces." - self.assertEqual(normalize_whitespace(input_str), expected) - - @patch("src.DataLoader.downloader.requests.get") - def test_get_cancer_trials_list(self, mock_get): - # Set up a fake study entry - fake_study = { - "Study": { - "ProtocolSection": {"IdentificationModule": {"NCTId": "NCT12345678"}} - } - } - fake_json_response = {"FullStudiesResponse": {"FullStudies": [fake_study]}} - # Create a fake response object for the first call - fake_response = MagicMock() - fake_response.status_code = 200 - fake_response.json.return_value = fake_json_response - - # Second call returns an empty list to stop the loop. - fake_response_empty = MagicMock() - fake_response_empty.status_code = 200 - fake_response_empty.json.return_value = { - "FullStudiesResponse": {"FullStudies": []} - } - - mock_get.side_effect = [fake_response, fake_response_empty] - - result = get_cancer_trials_list(max_trials=1) - self.assertIn("NCT12345678", result) - - @patch("src.DataLoader.downloader.time.sleep", return_value=None) # avoid delay - @patch("src.DataLoader.downloader.requests.Session") - @patch("src.DataLoader.downloader.os.path.exists") - @patch("src.DataLoader.downloader.os.makedirs") - @patch("src.DataLoader.downloader.open", new_callable=mock_open, read_data="") - def test_download_study_info_no_local_file( - self, mock_file, mock_makedirs, mock_exists, mock_session_cls, mock_sleep - ): - # Simulate that the local file does not exist - mock_exists.return_value = False - - # Prepare a fake online XML - online_xml = """ - Test Trial - Test Eligibility - Recruiting - Test Location -""" - fake_response = MagicMock() - fake_response.status_code = 200 - fake_response.text = online_xml - - # Create a fake session instance - fake_session = MagicMock() - fake_session.get.return_value = fake_response - mock_session_cls.return_value = fake_session - - result = download_study_info("NCTTEST1", delay=0, session=fake_session) - self.assertTrue(result) - # Check that the file was opened for writing. - expected_path = os.path.join("..", "..", "data", "trials_xmls", "NCTTEST1.xml") - mock_file.assert_called_with(expected_path, "w", encoding="utf-8") - - @patch("src.DataLoader.downloader.time.sleep", return_value=None) - @patch("src.DataLoader.downloader.requests.Session") - @patch("src.DataLoader.downloader.os.path.exists") - @patch("src.DataLoader.downloader.os.makedirs") - def test_download_study_info_with_local_file_update_needed( - self, mock_makedirs, mock_exists, mock_session_cls, mock_sleep - ): - # Simulate that the local file exists. - mock_exists.return_value = True - - # Fake local XML (with an old title) and online XML (with an updated title) - local_xml = """ - Old Title - Test Eligibility - Recruiting - Test Location -""" - online_xml = """ - New Title - Test Eligibility - Recruiting - Test Location -""" - - fake_response = MagicMock() - fake_response.status_code = 200 - fake_response.text = online_xml - - fake_session = MagicMock() - fake_session.get.return_value = fake_response - mock_session_cls.return_value = fake_session - - # Patch open to simulate reading the local XML and then writing an updated version. - m = mock_open(read_data=local_xml) - with patch("src.DataLoader.downloader.open", m): - result = download_study_info("NCTTEST2", delay=0, session=fake_session) - self.assertTrue(result) - expected_path = os.path.join( - "..", "..", "data", "trials_xmls", "NCTTEST2.xml" - ) - # Check that open was called with write mode to update the file. - m.assert_called_with(expected_path, "w", encoding="utf-8") - - @patch("src.DataLoader.downloader.time.sleep", return_value=None) - @patch("src.DataLoader.downloader.requests.Session") - @patch("src.DataLoader.downloader.os.path.exists") - @patch("src.DataLoader.downloader.os.makedirs") - def test_download_study_info_with_local_file_no_update( - self, mock_makedirs, mock_exists, mock_session_cls, mock_sleep - ): - # Simulate that the local file exists. - mock_exists.return_value = True - - # Fake XML where both local and online versions are identical. - identical_xml = """ - Test Trial - Test Eligibility - Recruiting - Test Location -""" - - fake_response = MagicMock() - fake_response.status_code = 200 - fake_response.text = identical_xml - - fake_session = MagicMock() - fake_session.get.return_value = fake_response - mock_session_cls.return_value = fake_session - - m = mock_open(read_data=identical_xml) - with patch("src.DataLoader.downloader.open", m): - result = download_study_info("NCTTEST3", delay=0, session=fake_session) - self.assertTrue(result) - expected_path = os.path.join( - "..", "..", "data", "trials_xmls", "NCTTEST3.xml" - ) - # Check that open was called only for reading (the file was not updated). - m.assert_called_with(expected_path, "r", encoding="utf-8") - - @patch("src.DataLoader.downloader.download_study_info", return_value=True) - @patch( - "src.DataLoader.downloader.tqdm", lambda x, **kwargs: x - ) # bypass tqdm for testing - def test_parallel_downloader(self, mock_download): - trial_ids = ["NCT1", "NCT2", "NCT3"] - # Use n_jobs=1 to avoid issues with multiprocessing and patching. - results = parallel_downloader(trial_ids, n_jobs=1, delay=0) - self.assertEqual(results, [True, True, True]) - self.assertEqual(mock_download.call_count, 3) - - @patch("src.DataLoader.downloader.parallel_downloader", return_value=[True, True]) - def test_downloader_class(self, mock_parallel): - trial_ids = ["NCT1", "NCT2"] - downloader_obj = Downloader(trial_ids, n_jobs=2, delay=0) - results = downloader_obj.download_and_update_trials() - self.assertEqual(results, [True, True]) - mock_parallel.assert_called_with(trial_ids, n_jobs=2, delay=0) - - -if __name__ == "__main__": - unittest.main() diff --git a/utils/Indexer/__init__.py b/utils/Indexer/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/utils/Indexer/flatten.py b/utils/Indexer/flatten.py deleted file mode 100644 index 4c68d55e..00000000 --- a/utils/Indexer/flatten.py +++ /dev/null @@ -1,41 +0,0 @@ -import os -import shutil - - -def flatten_folder_structure( - root_dir, output_dir, separator="_", handle_duplicates=True -): - os.makedirs(output_dir, exist_ok=True) - filename_set = set() - - for subdir, dirs, files in os.walk(root_dir): - # Skip the root directory itself - if subdir == root_dir: - continue - - parent_folder = os.path.basename(subdir) - - for file in files: - old_path = os.path.join(subdir, file) - new_filename = f"{parent_folder}{separator}{file}" - new_path = os.path.join(output_dir, new_filename) - - if handle_duplicates: - base, ext = os.path.splitext(new_filename) - counter = 1 - while new_path in filename_set or os.path.exists(new_path): - new_filename = f"{base}_{counter}{ext}" - new_path = os.path.join(output_dir, new_filename) - counter += 1 - - filename_set.add(new_path) - shutil.copy2(old_path, new_path) - print(f"Copied: {old_path} → {new_path}") - - -# Example usage: -root_directory = "/home/mabdallah/scratch/TrialMatchAI/src/Indexer/processed_criteria" -output_directory = ( - "/home/mabdallah/scratch/TrialMatchAI/src/Indexer/processed_criteria_flattened" -) -flatten_folder_structure(root_directory, output_directory) diff --git a/utils/Indexer/index_criteria.py b/utils/Indexer/index_criteria.py deleted file mode 100644 index 50ea66b1..00000000 --- a/utils/Indexer/index_criteria.py +++ /dev/null @@ -1,144 +0,0 @@ -#!/usr/bin/env python3 -from __future__ import annotations - -import argparse -import json -import logging -import sys -from pathlib import Path - - -ROOT = Path(__file__).resolve().parents[2] -SOURCE = ROOT / "source" -if str(SOURCE) not in sys.path: - sys.path.append(str(SOURCE)) - -from Matcher.config.config_loader import load_config # noqa: E402 -from Matcher.search import LanceDBSearchBackend # noqa: E402 - - -logging.basicConfig( - format="%(asctime)s %(levelname)s %(name)s - %(message)s", - level=logging.INFO, -) -logger = logging.getLogger(__name__) - - -class CriteriaIndexer: - def __init__( - self, - backend: LanceDBSearchBackend, - *, - processed_file: Path, - ) -> None: - self.backend = backend - self.processed_file = processed_file - self.processed_file.parent.mkdir(parents=True, exist_ok=True) - self.processed_ids = self._load_processed_ids() - - def _load_processed_ids(self) -> set[str]: - if self.processed_file.exists(): - return set(self.processed_file.read_text(encoding="utf-8").splitlines()) - return set() - - def _save_processed_ids(self) -> None: - self.processed_file.write_text( - "\n".join(sorted(self.processed_ids)) + "\n", - encoding="utf-8", - ) - - def load_docs( - self, - processed_folder: Path, - *, - recreate: bool, - ) -> tuple[list[dict], set[str]]: - docs: list[dict] = [] - completed: set[str] = set() - trial_dirs = sorted(path for path in processed_folder.iterdir() if path.is_dir()) - for trial_dir in trial_dirs: - nct_id = trial_dir.name - if not recreate and nct_id in self.processed_ids: - logger.info("Skipping %s: already indexed", nct_id) - continue - trial_docs = [] - for path in sorted(trial_dir.glob("*.json")): - try: - trial_docs.append(json.loads(path.read_text(encoding="utf-8"))) - except Exception as exc: - logger.warning("%s: failed to load %s: %s", nct_id, path.name, exc) - if trial_docs: - docs.extend(trial_docs) - completed.add(nct_id) - return docs, completed - - def index_all( - self, - processed_folder: Path, - *, - recreate: bool = True, - ) -> int: - if not processed_folder.exists(): - raise FileNotFoundError(f"Criteria folder not found: {processed_folder}") - docs, completed = self.load_docs(processed_folder, recreate=recreate) - if not docs: - logger.info("No prepared criteria JSON files found.") - return 0 - count = self.backend.index_criteria(docs, recreate=recreate) - self.processed_ids.update(completed) - self._save_processed_ids() - logger.info( - "Indexed %s criteria documents into %s/%s.", - count, - self.backend.db_path, - self.backend.criteria_table, - ) - return count - - -def main() -> int: - parser = argparse.ArgumentParser( - description="Create or update the LanceDB eligibility criteria search table." - ) - parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") - parser.add_argument( - "--processed-folder", - required=True, - help="Root folder containing one prepared criteria subfolder per trial", - ) - parser.add_argument("--db-path", default=None, help="Override search DB path") - parser.add_argument("--table", default=None, help="Override criteria table name") - parser.add_argument( - "--processed-file", - default="utils/Indexer/processed_ids.txt", - help="File used to track already appended trial IDs", - ) - parser.add_argument( - "--recreate", - action=argparse.BooleanOptionalAction, - default=True, - help="Overwrite the target table before writing.", - ) - args = parser.parse_args() - - config = load_config(args.config) - search_cfg = config["search_backend"] - if args.db_path: - search_cfg["db_path"] = str(Path(args.db_path).expanduser().resolve()) - if args.table: - search_cfg["criteria_table"] = args.table - - backend = LanceDBSearchBackend.from_config(config) - indexer = CriteriaIndexer( - backend=backend, - processed_file=(ROOT / args.processed_file).resolve(), - ) - count = indexer.index_all( - Path(args.processed_folder), - recreate=args.recreate, - ) - return 0 if count else 1 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/utils/Indexer/index_trials.py b/utils/Indexer/index_trials.py deleted file mode 100644 index 25630b7f..00000000 --- a/utils/Indexer/index_trials.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -from __future__ import annotations - -import argparse -import json -import sys -from pathlib import Path - - -ROOT = Path(__file__).resolve().parents[2] -SOURCE = ROOT / "source" -if str(SOURCE) not in sys.path: - sys.path.append(str(SOURCE)) - -from Matcher.config.config_loader import load_config # noqa: E402 -from Matcher.search import LanceDBSearchBackend # noqa: E402 - - -def load_processed(folder: Path) -> list[dict]: - docs: list[dict] = [] - for path in sorted(folder.glob("*.json")): - docs.append(json.loads(path.read_text(encoding="utf-8"))) - return docs - - -def main() -> int: - parser = argparse.ArgumentParser( - description="Create or update the LanceDB trial search table." - ) - parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") - parser.add_argument( - "--processed-folder", - required=True, - help="Folder of prepared trial JSON files", - ) - parser.add_argument("--db-path", default=None, help="Override search DB path") - parser.add_argument("--table", default=None, help="Override trials table name") - parser.add_argument( - "--recreate", - action=argparse.BooleanOptionalAction, - default=True, - help="Overwrite the target table before writing.", - ) - args = parser.parse_args() - - config = load_config(args.config) - search_cfg = config["search_backend"] - if args.db_path: - search_cfg["db_path"] = str(Path(args.db_path).expanduser().resolve()) - if args.table: - search_cfg["trials_table"] = args.table - - processed_path = Path(args.processed_folder) - docs = load_processed(processed_path) - if not docs: - print(f"No prepared trial JSON files found in {processed_path}.") - return 1 - - backend = LanceDBSearchBackend.from_config(config) - count = backend.index_trials(docs, recreate=args.recreate) - print( - f"Indexed {count} trial documents into " - f"{backend.db_path}/{backend.trials_table}." - ) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/utils/Indexer/prepare_criteria.py b/utils/Indexer/prepare_criteria.py deleted file mode 100644 index 7c25de6f..00000000 --- a/utils/Indexer/prepare_criteria.py +++ /dev/null @@ -1,249 +0,0 @@ -#!/usr/bin/env python3 -import argparse -import hashlib -import json -import logging -import sys -from pathlib import Path -from typing import Any - -import torch -import torch.nn.functional as F -from transformers import AutoModel, AutoTokenizer - -logging.basicConfig( - format="%(asctime)s %(levelname)s %(name)s - %(message)s", - level=logging.INFO, -) -logger = logging.getLogger(__name__) - - -ROOT = Path(__file__).resolve().parents[2] -SOURCE = ROOT / "source" -if str(SOURCE) not in sys.path: - sys.path.append(str(SOURCE)) - - -class SentenceEmbedder: - def __init__(self, model_name: str = "BAAI/bge-m3", use_gpu: bool = True): - self.device = torch.device( - "cuda" if use_gpu and torch.cuda.is_available() else "cpu" - ) - logger.info(f"Loading model {model_name} on device {self.device}") - self.tokenizer = AutoTokenizer.from_pretrained(model_name) - self.model = AutoModel.from_pretrained(model_name).to(self.device) - if self.device.type == "cuda": - self.model = self.model.half() - logger.info("Converted model to FP16") - - def mean_pool( - self, token_embeds: torch.Tensor, attention_mask: torch.Tensor - ) -> torch.Tensor: - mask = attention_mask.unsqueeze(-1).expand(token_embeds.size()).float() - summed = torch.sum(token_embeds * mask, dim=1) - counts = torch.clamp(mask.sum(dim=1), min=1e-9) - return summed / counts - - def embed(self, texts: list[str]) -> list[list[float]]: - """ - Batch‑embed a list of strings; returns a list of float vectors. - """ - enc = self.tokenizer( - texts, padding=True, truncation=True, return_tensors="pt" - ).to(self.device) - with torch.no_grad(): - outputs = self.model(**enc) - vecs = self.mean_pool(outputs.last_hidden_state, enc.attention_mask) - vecs = F.normalize(vecs, p=2, dim=1) - return vecs.cpu().tolist() - - -def compute_criteria_id(nct_id: str, criterion: str) -> str: - """ - Deterministically hash a trial‑criterion pair to a 64‑hex string. - """ - return hashlib.sha256(f"{nct_id}:{criterion}".encode("utf-8")).hexdigest() - - -def load_raw_trial(path: Path) -> dict: - return json.loads(path.read_text()) - - -def process_trial( - nct_id: str, - source_folder: Path, - processed_folder: Path, - embedder: SentenceEmbedder, - entity_annotator: Any | None = None, -) -> int: - raw_path = source_folder / f"{nct_id}.json" - if not raw_path.exists(): - logger.warning(f"Missing raw JSON for {nct_id}, skipping.") - return 0 - - data = load_raw_trial(raw_path) - criteria = data.get("criteria", []) - if not criteria: - logger.info(f"No criteria found for {nct_id}.") - return 0 - - # collect texts - entries = [] - texts = [] - for crit in criteria: - text = crit.get("criterion") or crit.get("sentence") - if not text: - continue - entries.append( - { - "nct_id": nct_id, - "criterion": text, - "entities": crit.get("entities", []), - "eligibility_type": crit.get("type"), - } - ) - texts.append(text) - - if not entries: - return 0 - - _annotate_missing_entities(entries, texts, entity_annotator) - - # embed all at once - vectors = embedder.embed(texts) - - # write out - trial_folder = processed_folder / nct_id - trial_folder.mkdir(parents=True, exist_ok=True) - - for entry, vec in zip(entries, vectors): - crit_id = compute_criteria_id(entry["nct_id"], entry["criterion"]) - out = { - "criteria_id": crit_id, - "nct_id": entry["nct_id"], - "criterion": entry["criterion"], - "entities": _entities_for_index(entry["entities"]), - "eligibility_type": entry["eligibility_type"], - "criterion_vector": vec, - } - (trial_folder / f"{crit_id}.json").write_text(json.dumps(out, indent=2)) - - logger.info(f"Processed {len(entries)} criteria for {nct_id}") - return len(entries) - - -def main(): - p = argparse.ArgumentParser( - description="Prepare & embed eligibility criteria per trial" - ) - p.add_argument( - "--ids-file", required=True, help="Path to nct_ids.txt (one NCT ID per line)" - ) - p.add_argument( - "--source-folder", - required=True, - help="Folder containing raw trial JSONs named .json", - ) - p.add_argument( - "--processed-folder", - default="processed_criteria", - help="Output root; will contain one subfolder per trial", - ) - p.add_argument( - "--model-name", default="BAAI/bge-m3", help="Sentence embedding model name" - ) - p.add_argument("--use-gpu", action="store_true", help="Enable GPU iff available") - p.add_argument( - "--annotate-entities", - action="store_true", - help="Annotate criteria without existing entities before writing processed JSON.", - ) - p.add_argument( - "--config", - default=None, - help="TrialMatchAI config path used when --annotate-entities is enabled.", - ) - args = p.parse_args() - - ids = [line.strip() for line in open(args.ids_file) if line.strip()] - source_folder = Path(args.source_folder) - processed_folder = Path(args.processed_folder) - processed_folder.mkdir(parents=True, exist_ok=True) - - embedder = SentenceEmbedder(model_name=args.model_name, use_gpu=args.use_gpu) - entity_annotator = _build_entity_annotator(args.config) if args.annotate_entities else None - - total = 0 - skipped = 0 - - for nct in ids: - trial_folder = processed_folder / nct - # Skip if already processed (i.e. folder exists and contains at least one .json) - if trial_folder.exists() and any(trial_folder.glob("*.json")): - logger.info(f"Skipping {nct}: already processed") - skipped += 1 - continue - - processed_count = process_trial( - nct, - source_folder, - processed_folder, - embedder, - entity_annotator=entity_annotator, - ) - total += processed_count - - logger.info( - f"✅ Finished embedding. Total criteria written: {total}. Trials skipped: {skipped}." - ) - - -def _build_entity_annotator(config_path: str | None): - from Matcher.config.config_loader import load_config - from Matcher.entities import build_entity_annotator - - config = load_config(config_path) - return build_entity_annotator(config) - - -def _annotate_missing_entities( - entries: list[dict[str, Any]], - texts: list[str], - entity_annotator: Any | None, -) -> None: - if entity_annotator is None: - return - missing_indices = [ - index for index, entry in enumerate(entries) if not entry.get("entities") - ] - if not missing_indices: - return - missing_texts = [texts[index] for index in missing_indices] - annotations = entity_annotator.annotate_texts_in_parallel( - missing_texts, - max_workers=1, - ) - for index, entities in zip(missing_indices, annotations): - entries[index]["entities"] = entities - - -def _entities_for_index(entities: Any) -> list[dict[str, Any]]: - if not isinstance(entities, list): - return [] - indexed: list[dict[str, Any]] = [] - for entity in entities: - if not isinstance(entity, dict): - continue - normalized = dict(entity) - normalized.setdefault("entity", normalized.get("text", "")) - normalized.setdefault("class", normalized.get("entity_group", "")) - normalized.setdefault("normalized_id", ["CUI-less"]) - normalized.setdefault("synonyms", []) - normalized.setdefault("concept_candidates", []) - normalized.setdefault("linker_status", "not_linked") - indexed.append(normalized) - return indexed - - -if __name__ == "__main__": - main() diff --git a/utils/Indexer/prepare_trials.py b/utils/Indexer/prepare_trials.py deleted file mode 100644 index d91c91da..00000000 --- a/utils/Indexer/prepare_trials.py +++ /dev/null @@ -1,166 +0,0 @@ -#!/usr/bin/env python3 -import argparse -import json -import os -import re -import warnings - -import dateutil.parser -import torch -import torch.nn.functional as F -from transformers import AutoModel, AutoTokenizer - -warnings.filterwarnings( - "ignore", category=UserWarning, message="TypedStorage is deprecated" -) - - -class SentenceEmbedder: - def __init__(self, model_name: str = "BAAI/bge-m3"): - self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - print(f"Embedding on device: {self.device}") - self.tokenizer = AutoTokenizer.from_pretrained(model_name) - self.model = AutoModel.from_pretrained(model_name).to(self.device) - - def mean_pooling(self, model_output, attention_mask): - tokens = model_output[0] - mask = attention_mask.unsqueeze(-1).expand(tokens.size()).float() - return torch.sum(tokens * mask, 1) / torch.clamp(mask.sum(1), min=1e-9) - - def get_embeddings(self, text: str): - if not text: - return None - enc = self.tokenizer(text, padding=True, truncation=True, return_tensors="pt") - enc = {k: v.to(self.device) for k, v in enc.items()} - with torch.no_grad(): - out = self.model(**enc) - emb = self.mean_pooling(out, enc["attention_mask"]) - emb = F.normalize(emb, p=2, dim=1) - return emb.squeeze().cpu().tolist() - - def preprocess_text(self, t: str) -> str: - return re.sub(r"\s+", " ", t).strip() if t else t - - def to_iso(self, s: str): - try: - return dateutil.parser.parse(s).date().isoformat() if s else None - except Exception: - return None - - def age_to_years(self, s: str): - if not s: - return None - m = re.search(r"([\d\.]+)", s) - if not m: - return None - v = float(m.group(1)) - u = s.lower() - if "year" in u: - y = v - elif "month" in u: - y = v / 12 - elif "week" in u: - y = v / 52 - elif "day" in u: - y = v / 365 - else: - return None - return round(y, 2) - - -def embed_and_prepare(doc: dict, embedder: SentenceEmbedder): - out = {"nct_id": doc["nct_id"]} - # text fields → clean + vector - for field, vec_name in [ - ("brief_title", "brief_title_vector"), - ("brief_summary", "brief_summary_vector"), - ("condition", "condition_vector"), - ("eligibility_criteria", "eligibility_criteria_vector"), - ]: - if field in doc: - txt = doc[field] - if isinstance(txt, list): - txt = " ".join( - [str(t) for t in txt if isinstance(t, str) and t.strip()] - ) - txt = embedder.preprocess_text(txt) - emb = embedder.get_embeddings(txt) or [0.0] * len( - embedder.get_embeddings("test") or [0.0] - ) - out[field] = txt - out[vec_name] = emb - - # passthroughs - for simple in ["overall_status", "phase", "study_type", "gender"]: - if simple in doc: - out[simple] = doc[simple] - - # dates - for d in ["start_date", "completion_date"]: - if d in doc: - iso = embedder.to_iso(doc[d]) - if iso: - out[d] = iso - - # ages - for a in ["minimum_age", "maximum_age"]: - if a in doc: - yrs = embedder.age_to_years(doc[a]) - if yrs is not None: - out[a] = yrs - - # nested passthroughs - for nest in ["intervention", "location", "reference"]: - if nest in doc: - out[nest] = doc[nest] - - return out - - -if __name__ == "__main__": - p = argparse.ArgumentParser(description="Prepare & embed clinical trial JSONs") - p.add_argument("--ids-file", required=True, help="One NCT ID per line") - p.add_argument("--source-folder", required=True, help="Raw JSONs dir") - p.add_argument( - "--processed-folder", - default="processed_docs", - help="Where to write embedded JSONs", - ) - p.add_argument( - "--model-name", default="BAAI/bge-m3", help="Sentence embedding model" - ) - args = p.parse_args() - - os.makedirs(args.processed_folder, exist_ok=True) - embedder = SentenceEmbedder(model_name=args.model_name) - - with open(args.ids_file) as f: - ids = [line.strip() for line in f if line.strip()] - - processed = 0 - skipped = 0 - - for nct in ids: - out_path = os.path.join(args.processed_folder, f"{nct}.json") - if os.path.exists(out_path): - print(f"🟡 Skipping {nct}: already processed") - skipped += 1 - continue - - in_path = os.path.join(args.source_folder, f"{nct}.json") - if not os.path.exists(in_path): - print(f"⚠️ Missing raw JSON for {nct}") - continue - - doc = json.load(open(in_path)) - doc["nct_id"] = nct - proc = embed_and_prepare(doc, embedder) - - with open(out_path, "w") as wf: - json.dump(proc, wf, indent=2) - processed += 1 - print(f"✅ Processed {nct}") - - print( - f"\nSummary: {processed} processed, {skipped} skipped, {len(ids) - processed - skipped} missing." - ) diff --git a/utils/Indexer/zipper.sh b/utils/Indexer/zipper.sh deleted file mode 100644 index e226ee02..00000000 --- a/utils/Indexer/zipper.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' - -SRC_DIR="processed_criteria" -CHUNKS=6 -CHUNK_PREFIX="criteria_part" - -# Create a working directory for chunks -mkdir -p zip_chunks - -# Step 1: List top-level folders and count them -folders=($(find "$SRC_DIR" -mindepth 1 -maxdepth 1 -type d)) -total=${#folders[@]} -per_chunk=$(( (total + CHUNKS - 1) / CHUNKS )) # Round up - -# Step 2: Divide folders into 6 chunks and zip each -info() { echo -e "\033[0;32m[INFO]\033[0m $*"; } - -info "Total subfolders: $total" -info "Creating $CHUNKS zip chunks, ~${per_chunk} folders each..." - -for ((i=0; i>", # Double greater than - "\xc2\xbc": "1/4", # one quarter - "\xc2\xbd": "1/2", # one half - "\xc2\xbe": "3/4", # three quarters - "\xca\xbf": "\x27", # c-single quote - "\xcc\xa8": "", # modifier - under curve - "\xcc\xb1": "", # modifier - under line - "\x95": " ", -} - - -def replace_chars(match): - char = match.group(0) - return chars[char] - - -def remove_special_chars_encoding(text): - pattern = "(" + "|".join(chars.keys()) + ")" - return re.sub(pattern, replace_chars, text) - - -def add_space_after_parenthesis(text): - # Use regular expression to find ")" followed by a letter and insert a space - result = re.sub(r"\)([a-zA-Z])", r") \1", text) - return result - - -def tokenize_clinical_note(id_list, source_directory=INPUT_FILEPATH): - data = [] - for _id in id_list: - with open(source_directory + "/" + "%s" % _id + "/" + "clinical_note.txt") as f: - text = f.read() - - phi_tags = re.findall("(\[\*\*.*?\*\*\])", text) - for i, tag in enumerate(phi_tags): - text = text.replace(tag, " __PHI_%d__ " % i) - text = text.replace(tag, "__PHI__") - - """ - Thoughts & Strategies - - If a newline happens in between matching parens, then ignore newline - - Identify prose v nonprose. Use nltk.sent_tokenize on prose - - not perfect, but it is pretty good with ignoring mid-sentence newlines - - - section header: "\n------ Protected Section ------\n" - - - If you can detect a bulleted list, then those are sentences - - sometimes the bullets are hyphens "-", sometimes numbers "1." - - - ecg reports are very short & seem to be exclusively prose - - echo reports are VERY structured. definitely useful to do a echo-specific one - - nursing notes have a linear structure. sections are easily identifiable - - nursing_other notes are typically very short (and parse-able) - - radiology reports have lots of "________________________" sections - - seems like they always have "MEDICAL CONDITION" and "FINAL REPORT" sections - - found list example where "1." is its own line and its info is own next line :/ - - could be rehab-specific for notes - - strong consistency format in social_work - """ - - # break into many segments - segments = mimic_sent_tokenize_rules(text) - - # run nltk tokenizer on these segments to split prose - sents = [] - for segment in segments: - s = nltk.sent_tokenize(segment) - sents += s - - # put the PHI back - for i in range(len(sents)): - tags = re.findall("(__PHI_(\d+)__)", sents[i]) - for tag, ind in tags: - sents[i] = sents[i].replace(tag, phi_tags[int(ind)]) - - most_recent_title = None - most_recent_inline_title = None - - for sentence in sents: - sentence = remove_full_stops_and_commas(sentence) - - if len(sentence) > 1: - is_sentence_title = is_title(sentence) - is_sentence_inline_title = is_inline_title(sentence) - - field = None - - if is_sentence_title: - most_recent_title = sentence - field = sentence[:-1] - sentence = "___" - elif is_sentence_inline_title: - most_recent_inline_title = sentence.split(":", 1)[0] - field = most_recent_inline_title - sentence = sentence.split(":", 1)[1] - else: - # Check for the most recent title or inline title encountered - if most_recent_title: - field = most_recent_title[:-1] - elif most_recent_inline_title: - field = most_recent_inline_title - - data.append( - ( - _id, - field, - sentence.replace("___", ""), - is_sentence_title, - is_sentence_inline_title, - ) - ) - else: - continue - - # Create a DataFrame with 'Sentence' and 'IsTitle' columns - df = pd.DataFrame( - data, columns=["id", "field", "sentence", "IsTitle", "IsInlineTitle"] - ) - df.to_csv(PREPROCESSED_OUTPUT_FILEPATH + "%s_preprocessed.csv" % id_list[0]) - return df - - -def mimic_sent_tokenize_rules(text): - # long sections are OBVIOUSLY different sentences - text = re.sub("---+", "\n\n-----\n\n", text) - text = re.sub("___+", "\n\n_____\n\n", text) - text = re.sub("\n\n+", "\n\n", text) - text = text.replace("___", "") - text = re.sub(r"(? 0: - new_segments.append(prefix.strip()) - - # add the header - new_segments.append(h) - - # remove the prefix from processing (very unlikely to be empty) - segment = rest.strip() - - # add the final piece (aka what comes after all headers are processed) - if len(segment) > 0: - new_segments.append(segment.strip()) - - # copy over the new list of segments (further segmented than original segments) - segments = list(new_segments) - new_segments = [] - - ### Low-hanging fruit: "_____" is a delimiter - for segment in segments: - subsections = segment.split("\n_____\n") - new_segments.append(subsections[0]) - for ss in subsections[1:]: - new_segments.append("_____") - new_segments.append(ss) - - segments = list(new_segments) - new_segments = [] - - ### Low-hanging fruit: "-----" is a delimiter - for segment in segments: - subsections = segment.split("\n-----\n") - new_segments.append(subsections[0]) - for ss in subsections[1:]: - new_segments.append("-----") - new_segments.append(ss) - - segments = list(new_segments) - new_segments = [] - - """ - for segment in segments: - print('------------START------------') - print(segment) - print('-------------END-------------') - print - exit() - """ - - ### Separate enumerated lists ### - for segment in segments: - if not re.search("\n\s*\d+\.", "\n" + segment): - new_segments.append(segment) - continue - - """ - print('------------START------------') - print(segment) - print('-------------END-------------') - print - """ - - # generalizes in case the list STARTS this section - segment = "\n" + segment - - # determine whether this segment contains a bulleted list (assumes i,i+1,...,n) - start = int(re.search("\n\s*(\d+)\.", "\n" + segment).groups()[0]) - n = start - while re.search("\n\s*%d." % n, segment): - n += 1 - n -= 1 - - # no bulleted list - if n < 1: - new_segments.append(segment) - continue - - """ - print('------------START------------') - print(segment) - print('-------------END-------------') - - print(start,n) - print - """ - - # break each list into its own line - # challenge: not clear how to tell when the list ends if more text happens next - for i in range(start, n + 1): - matching_text = re.search("(\n\s*\d+\.)", segment) - if matching_text: - matching_text = matching_text.groups()[0] - prefix = segment[: segment.index(matching_text)].strip() - segment = segment[segment.index(matching_text) :].strip() - else: - continue - - if len(prefix) > 0: - new_segments.append(prefix) - - if len(segment) > 0: - new_segments.append(segment) - - segments = list(new_segments) - new_segments = [] - - """ - TODO: Big Challenge - - There is so much variation in what makes a list. Intuitively, I can tell it's a - list because it shows repeated structure (often following a header) - - Examples of some lists (with numbers & symptoms changed around to noise) - - Past Medical History: - -- Hyperlipidemia - -- lactose intolerance - -- Hypertension - - - Physical Exam: - Vitals - T 82.2 BP 123/23 HR 73 R 21 75% on 2L NC - General - well appearing male, sitting up in chair in NAD - Neck - supple, JVP elevated to angle of jaw - CV - distant heart sounds, RRR, faint __PHI_43__ murmur at - - - Labs: - __PHI_10__ 12:00PM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - __PHI_14__ 04:54AM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - __PHI_23__ 03:33AM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - __PHI_109__ 03:06AM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - __PHI_1__ 05:09AM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - __PHI_26__ 04:53AM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - __PHI_301__ 05:30AM BLOOD WBC-8.8 RBC-8.88* Hgb-88.8* Hct-88.8* - MCV-88 MCH-88.8 MCHC-88.8 RDW-88.8* Plt Ct-888 - - - Medications on Admission: - Allopurinol 100 mg DAILY - Aspirin 250 mg DAILY - Atorvastatin 10 mg DAILY - Glimepiride 1 mg once a week. - Hexavitamin DAILY - Lasix 50mg M-W-F; 60mg T-Th-Sat-Sun - Metoprolol 12.5mg TID - Prilosec OTC 20 mg once a day - Verapamil 120 mg SR DAILY - """ - - ### Remove lines with inline titles from larger segments (clearly nonprose) - for segment in segments: - """ - With: __PHI_6__, MD __PHI_5__ - Building: De __PHI_45__ Building (__PHI_32__ Complex) __PHI_87__ - Campus: WEST - """ - - lines = segment.split("\n") - - buf = [] - for i in range(len(lines)): - if is_inline_title(lines[i]): - if len(buf) > 0: - new_segments.append("\n".join(buf)) - buf = [] - buf.append(lines[i]) - if len(buf) > 0: - new_segments.append("\n".join(buf)) - - segments = list(new_segments) - new_segments = [] - # Going to put one-liner answers with their sections - # (aka A A' B B' C D D' --> AA' BB' C DD' ) - N = len(segments) - for i in range(len(segments)): - # avoid segfaults - if i == 0: - new_segments.append(segments[i]) - continue - - if ( - segments[i].count("\n") == 0 - and is_title(segments[i - 1]) - and not is_title(segments[i]) - ): - if (i == N - 1) or is_title(segments[i + 1]): - new_segments = new_segments[:-1] - new_segments.append(segments[i - 1] + " " + segments[i]) - else: - new_segments.append(segments[i].replace("\n", " ")) - - segments = list(new_segments) - new_segments = [] - - """ - Should do some kind of regex to find "TEST: value" in segments? - - Indication: Source of embolism. - BP (mm Hg): 145/89 - HR (bpm): 80 - - Note: I made a temporary hack that fixes this particular problem. - We'll see how it shakes out - """ - - """ - Separate ALL CAPS lines (Warning... is there ever prose that can be all caps?) - """ - - """ - for segment in segments: - print('------------START------------') - print(segment) - print('-------------END-------------') - print - exit() - """ - - return segments - - -def strip(s): - return s.strip() - - -def is_inline_title(text): - m = re.search("^([a-zA-Z ]+:) ", text) - if not m: - return False - - return is_title(m.groups()[0]) - - -def remove_full_stops_and_commas(text): - text = text.replace(",", "") - if text.endswith("."): - return text[:-1] # Return text without the last character (full stop) - return text - - -def drop_leading_character(sentence, regex_patterns): - """ - Drop leading characters from a sentence based on regex patterns. - - This function takes a sentence and a list of regular expression (regex) patterns. It iterates over the regex patterns, and for each - pattern, it drops the leading character from the sentence if there is a match. The loop continues until no more matches are found - for any of the patterns. The resulting sentence is then stripped of leading and trailing whitespaces. - - Parameters: - sentence (str): The input sentence from which leading characters will be dropped. - regex_patterns (list): A list of regular expression patterns to match against the leading characters. - - Returns: - str: The sentence with leading characters dropped. - - Example: - sentence = "A. This is a sample sentence." - regex_patterns = [r"^[A-Z]\.", r"^\d+\."] - drop_leading_character(sentence, regex_patterns) - # Output: "This is a sample sentence." - """ - for pattern in regex_patterns: - while True: - match = re.match(pattern, sentence) - if match: - # Drop the leading character by substituting it with an empty string, - # but only replace the first occurrence - sentence = re.sub(pattern, "", sentence, count=1).strip() - else: - # If no more matches found, exit the loop - break - return sentence.strip() - - -stopwords = set(["of", "on", "or"]) - - -def is_title(text): - if not text.endswith(":"): - return False - text = text[:-1] - - # be a little loose here... can tighten if it causes errors - text = re.sub("(\([^\)]*?\))", "", text) - - # Are all non-stopwords capitalized? - for word in text.split(): - if word in stopwords: - continue - if not word[0].isupper(): - return False - - # I noticed this is a common issue (non-title aapears at beginning of line) - if text == "Disp": - return False - - # optionally: could assert that it is less than 6 tokens - - return True - - -def main(): - """ - # read text file from command line - if len(sys.argv) != 2: - print(>>sys.stderr, '\n\tusage: python %s \n' % sys.argv[0] - exit(1) - mimic_note_file = sys.argv[1] - - with open(mimic_note_file, 'r') as f: - text = f.read() - - # tokenize - sents = tokenize_clinical_note(text) - """ - - for mimic_note_file in sys.argv[1:]: - print(mimic_note_file) - - with open(mimic_note_file, "r") as f: - text = f.read() - - # tokenize - sents = tokenize_clinical_note(text) - - for sent in sents: - print("-" * 40) - print(sent) - print("=" * 40) - print("\n\n") - - -if __name__ == "__main__": - main() diff --git a/utils/Preprocessor/preprocessing.py b/utils/Preprocessor/preprocessing.py deleted file mode 100644 index 7bea2c1d..00000000 --- a/utils/Preprocessor/preprocessing.py +++ /dev/null @@ -1,67 +0,0 @@ -import joblib -from tqdm.auto import tqdm -from preprocessing_utils import eic_text_preprocessing -from preprocess_clinical_notes import tokenize_clinical_note -import pandas as pd -import os - -memory = joblib.Memory(".") - - -def ParallelExecutor(use_bar="tqdm", **joblib_args): - """Utility for tqdm progress bar in joblib.Parallel""" - all_bar_funcs = { - "tqdm": lambda args: lambda x: tqdm(x, **args), - "False": lambda args: iter, - "None": lambda args: iter, - } - - def aprun(bar=use_bar, **tq_args): - def tmp(op_iter): - if str(bar) in all_bar_funcs.keys(): - bar_func = all_bar_funcs[str(bar)](tq_args) - else: - raise ValueError("Value %s not supported as bar type" % bar) - # Pass n_jobs from joblib_args - return joblib.Parallel(n_jobs=joblib_args.get("n_jobs", 10))( - bar_func(op_iter) - ) - - return tmp - - return aprun - - -class Preprocessor: - def __init__(self, id_list, n_jobs): - self.id_list = id_list - self.n_jobs = n_jobs - - def preprocess_clinical_trials_text(self): - parallel_runner = ParallelExecutor(n_jobs=self.n_jobs)(total=len(self.id_list)) - X = parallel_runner( - joblib.delayed(eic_text_preprocessing)([_id]) for _id in self.id_list - ) - return pd.concat(X).reset_index(drop=True) - - def preprocess_patient_clinical_notes(self): - parallel_runner = ParallelExecutor(n_jobs=self.n_jobs)(total=len(self.id_list)) - X = parallel_runner( - joblib.delayed(tokenize_clinical_note)([_id]) for _id in self.id_list - ) - return pd.concat(X).reset_index(drop=True) - - -if __name__ == "__main__": - # Load the list of NCT IDs - folder_path = "../../data/trials_xmls" - file_names = [] - # List all files in the folder - for file in os.listdir(folder_path): - if os.path.isfile(os.path.join(folder_path, file)): - file_name, file_extension = os.path.splitext(file) - file_names.append(file_name) - nct_ids = file_names - n_jobs = 10 - preprocessor = Preprocessor(nct_ids, n_jobs) - preprocessor.preprocess_clinical_trials_text() diff --git a/utils/Preprocessor/preprocessing_utils.py b/utils/Preprocessor/preprocessing_utils.py deleted file mode 100644 index 7dc346cb..00000000 --- a/utils/Preprocessor/preprocessing_utils.py +++ /dev/null @@ -1,649 +0,0 @@ -""" -Description: This script contains functions for pre-processing clinical trials eligibility criteria texts. -The functions serve to split the raw unstructured text into clean and structured sentences to be processed by a more advanced downstream NLP analysis. -""" - -import os -import re -import json -import logging -import itertools -import pandas as pd -import xml.etree.ElementTree as ET - - -def load_regex_patterns(file_path): - """ - Load regular expression patterns from a JSON file. - - Parameters: - file_path (str): Path to the JSON file containing regex patterns. - - Returns: - dict: A dictionary with pattern names as keys and regex patterns as values. - """ - with open(file_path, "r") as file: - data = json.load(file) - patterns = {key: value["regex"] for key, value in data["patterns"].items()} - return patterns - - -def split_on_leading_markers(lines): - """ - Attempt to split lines on various common list markers: - - Bullets (•) - - Dashes (-) at the start of items - - Numeric or alphabetical lists (e.g., "1)", "a)") - Adjust the patterns to fit your data. - """ - new_lines = [] - for line in lines: - # First split on bullet points - bullet_parts = [p.strip() for p in re.split(r"•", line) if p.strip()] - temp_lines = [] - for part in bullet_parts: - # Split on leading dashes - # This will split lines like "- Something" or multiple dashes in a single line. - dash_parts = [ - dp.strip() for dp in re.split(r"(? next_line_indent: - return True - - return False - - -def split_on_carriage_returns(text): - """ - Split text into lines separated by double carriage returns. - - Parameters: - text (str): The input text. - - Returns: - list: A list of lines. - """ - lines = re.split(r"\n\n+", re.sub(r":\n", ":\n\n", text)) - lines = [line.strip() for line in lines if line.strip()] - return lines - - -def split_lines_on_semicolon(lines): - """ - Splits lines on semicolons not within braces. - - Parameters: - lines (list): A list of lines. - - Returns: - list: A list of split lines. - """ - split_lines = [] - for line in lines: - line = replace_parentheses_with_braces(line) - parts = [] - temp = "" - inside_braces = False - for char in line: - if char == "{": - inside_braces = True - elif char == "}": - inside_braces = False - elif char == ";" and not inside_braces: - parts.append(temp.strip()) - temp = "" - continue - temp += char - parts.append(temp.strip()) - split_lines.extend(parts) - return split_lines - - -def split_to_sentences(text, regex_patterns, exception_patterns): - """ - Split text into sentences based on specific criteria. - - Parameters: - text (str): The input text. - regex_patterns (list): A list of regex patterns for splitting. - exception_patterns (list): A list of regex patterns to ignore during splitting. - - Returns: - list: A list of sentences. - """ - lines = split_on_carriage_returns(text) - lines = split_on_leading_markers(lines) - lines = split_lines_on_semicolon(lines) - sentences = [] - - for line in lines: - line = re.sub(r"\n", " ", line) - line = re.sub(" +", " ", line) - split_line = split_by_leading_char_from_regex_patterns( - line, regex_patterns, exceptions_patterns=exception_patterns - ) - split_line = [s for s in split_line if len(s.split()) > 1] - sentences.extend(split_line) - - return sentences - - -def drop_leading_character(sentence, regex_patterns): - """ - Drop leading characters from a sentence based on regex patterns. - - Parameters: - sentence (str): The input sentence. - regex_patterns (list): A list of regex patterns. - - Returns: - str: The cleaned sentence. - """ - for pattern in regex_patterns: - while True: - match = re.match(pattern, sentence) - if match: - sentence = re.sub(pattern, "", sentence, count=1).strip() - else: - break - return sentence.strip() - - -def extract_criteria_sections_headers(lines): - """ - Extract criteria sub-section headers from a list of lines. - - Parameters: - lines (list): A list of sentences. - - Returns: - dict: A dictionary with headers as keys and line indices as values. - """ - criteria_sections = {} - # Define explicit patterns for different writing styles of group-specific criteria headers - patterns = [ - r"^(?:-?\s*)(?:Inclusion|INCLUSION|Exclusion|EXCLUSION|Eligibility|Selection)\s?(?:Criteria|Requirements?)?\s?(?:for|in)?\s?(?:Patients|Subjects|Population|Cohort|Group|Arm)?\s?(?:with|without|who|where|having)?\s?[\w\d\s-]*[:\-]?", - r"^(?:Key\s)?(?:Inclusion|INCLUSION|EXCLUSION|Exclusion|Eligibility|Selection)(?:\s(?:Criteria|Requirements))?(?:\s?[-+:]|\sfor)?(?:\s[\w\s+-]+)?(?:\([\w\s]+\))?\s?[-+:]?\s?[\w\s]+$", - r"^(?:Key\s)?(?:Inclusion|INCLUSION|EXCLUSION|Exclusion|Eligibility|Selection)(?:\s(?:Criteria|Requirements?))(?:\s(?:for|in))?(?:\s(?:Patients|Subjects|Population|Cohort|Group|Arm))?(?:\s(?:with|without|who|where|having))?\s?(?:\([\w\s]+\))?\s?[\w\s+-]*[:\-]?", - r"^(?:[\w\d\s-]+)\s*-\s*(?:Inclusion|INCLUSION|EXCLUSION|Exclusion|Eligibility|Selection)\s(?:Criteria|Requirements?)?$", - r"^(?:[\w\s]+?)\s(?:group|patients|population|arm|subjects|cohort)\s(?:inclusion|exclusion|eligibility|selection|criteria)(?:\s?:|-)?", - r"^\b(?:\w+\s\w+|\w+)?\s(?:Inclusion|INCLUSION|EXCLUSION|Exclusion|Eligibility|Selection)\s(?:Criteria|Requirements)\b", - ] - for i, line in enumerate(lines): - header_candidate = line.strip() - if ":" in header_candidate: - header_candidate = header_candidate.split(":")[0].strip() - if len(header_candidate.split()) <= 10: - if any( - re.search(pattern, header_candidate, re.IGNORECASE) - for pattern in patterns - ): - header = header_candidate.strip() - if header not in criteria_sections: - criteria_sections[header] = [i] - else: - criteria_sections[header].append(i) - return criteria_sections - - -################################################# -# NEW FUNCTION TO HANDLE INLINE HEADERS -################################################# - - -def fix_inline_headers(text): - """ - Ensure that recognized headers (e.g., Inclusion Criteria, Exclusion Criteria, etc.) - appear on their own line by inserting a newline right after the header phrase - if it's directly followed by non-whitespace text. - """ - # Adjust or add more patterns as needed - patterns = [ - r"(Inclusion\s*Criteria\s*:)\s*(?=\S)", - r"(Exclusion\s*Criteria\s*:)\s*(?=\S)", - # Add more if needed - # r"(Eligibility\s*Criteria\s*:)\s*(?=\S)", - ] - - fixed_text = text - for pat in patterns: - fixed_text = re.sub(pat, r"\1\n", fixed_text, flags=re.IGNORECASE) - return fixed_text - - -def extract_separate_inclusion_exclusion(text, regex_patterns, exception_patterns): - """ - Extract preprocessed inclusion and exclusion criteria from eligibility criteria text. - - Parameters: - text (str): The preprocessed eligibility criteria text. - regex_patterns (list): A list of regex patterns for splitting. - exception_patterns (list): A list of regex patterns to ignore during splitting. - - Returns: - dict: A dictionary containing Inclusion Criteria, Exclusion Criteria, and Original Eligibility Criteria. - """ - # First, fix the scenario where "Inclusion Criteria:" or "Exclusion Criteria:" - # is immediately followed by text on the same line - text = fix_inline_headers(text) - - criteria = { - "Inclusion Criteria": {}, - "Exclusion Criteria": {}, - "Original Eligibility Criteria": text, - } - - lines = split_to_sentences(text, regex_patterns, exception_patterns) - subsection_indices = extract_criteria_sections_headers(lines) - - # Fallback: If no sections are identified, treat the entire text as one block of inclusion criteria - if not subsection_indices: - criteria["Inclusion Criteria"]["General"] = lines - return criteria - - inclusion_pattern = r"(? 200: # Adjust the threshold as needed - sentences = split_on_full_stops(sentence) - for s in sentences: - if s: # Ensure the sentence is not empty - new_row = row.copy() - new_row["sentence"] = s - new_rows.append(new_row) - else: - new_rows.append(row) - return pd.DataFrame(new_rows) - - -def eic_text_preprocessing( - _ids, - regex_path="../../data/regex/regex_patterns.json", - exceptions_path="../../data/regex/exception_regex_patterns.json", - output_path="../../data/preprocessed_data/clintra/", -): - """ - Main preprocessing function for eligibility criteria text from a list of clinical trial IDs. - - Parameters: - _ids (list): A list of clinical trial IDs. - regex_path (str): Path to the regex patterns JSON file. - exceptions_path (str): Path to the exception regex patterns JSON file. - output_path (str): Directory path to save the preprocessed CSV file. - - Returns: - pandas.DataFrame or None: The preprocessed DataFrame or None if no data is processed. - """ - regex_patterns = list(load_regex_patterns(regex_path).values()) - exception_patterns = list(load_regex_patterns(exceptions_path).values()) - texts = [] - trial_ids = [] - - for nid in _ids: - print(f"Processing Trial ID: {nid}") - eic_text = extract_eligibility_criteria(nid) - if eic_text: - preprocessed_text = extract_separate_inclusion_exclusion( - eic_text, regex_patterns, exception_patterns - ) - texts.append(preprocessed_text) - trial_ids.append(nid) - else: - continue - - to_concat = [] - for index, item in enumerate(texts): - _id = trial_ids[index] - for criteria_key in ["Inclusion Criteria", "Exclusion Criteria"]: - criteria_dict = item.get(criteria_key, {}) - for sub_key, sub_value in criteria_dict.items(): - df = pd.DataFrame(sub_value, columns=["sentence"]) - df["criteria"] = criteria_key - df["sub_criteria"] = sub_key - df["id"] = _id - to_concat.append(df) - - if to_concat: - final_df = pd.concat(to_concat, ignore_index=True) - final_df["sentence"] = final_df["sentence"].apply( - drop_leading_character, regex_patterns=regex_patterns - ) - final_df["sentence"] = final_df["sentence"].apply( - replace_braces_with_parentheses - ) - final_df = split_large_sentences(final_df) - final_df.to_csv( - os.path.join(output_path, f"{_ids[0]}_preprocessed.tsv"), - index=False, - sep="\t", - ) - return final_df - else: - return None diff --git a/utils/Preprocessor/test/__init__.py b/utils/Preprocessor/test/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/utils/Preprocessor/test/test_preprocessing.py b/utils/Preprocessor/test/test_preprocessing.py deleted file mode 100644 index 8ed08c7a..00000000 --- a/utils/Preprocessor/test/test_preprocessing.py +++ /dev/null @@ -1,336 +0,0 @@ -""" -test_preprocessing.py - -This file contains unit tests for the preprocessing functions used for handling -clinical trial eligibility criteria texts. -""" - -import os -import json -import tempfile -import unittest -import pandas as pd -from unittest.mock import patch - - -from src.Preprocessor.preprocessing_utils import ( - load_regex_patterns, - split_on_leading_markers, - replace_parentheses_with_braces, - replace_braces_with_parentheses, - line_starts_with_capitalized_alphanumeric, - read_xml_file, - parse_xml_content, - extract_eligibility_criteria, - split_by_leading_char_from_regex_patterns, - split_on_carriage_returns, - split_lines_on_semicolon, - split_to_sentences, - drop_leading_character, - extract_criteria_sections_headers, - fix_inline_headers, - extract_separate_inclusion_exclusion, - split_on_full_stops, - split_large_sentences, - eic_text_preprocessing, -) - - -class TestLoadRegexPatterns(unittest.TestCase): - def setUp(self): - # Create a temporary JSON file with a patterns dictionary. - self.temp_file = tempfile.NamedTemporaryFile( - mode="w+", delete=False, suffix=".json" - ) - sample_data = { - "patterns": { - "bullet": {"regex": r"•"}, - "dash": {"regex": r"^-"}, - "number": {"regex": r"^\d+\)"}, - } - } - json.dump(sample_data, self.temp_file) - self.temp_file.close() - - def tearDown(self): - os.unlink(self.temp_file.name) - - def test_load_regex_patterns(self): - patterns = load_regex_patterns(self.temp_file.name) - expected = {"bullet": r"•", "dash": r"^-", "number": r"^\d+\)"} - self.assertEqual(patterns, expected) - - -class TestSplittingAndReplacingFunctions(unittest.TestCase): - def test_split_on_leading_markers(self): - # Test splitting a line with bullet, dash and asterisk markers. - input_lines = ["• First item - subitem * detail", "No marker here"] - result = split_on_leading_markers(input_lines) - # Check that more than one line is returned and that it contains expected fragments. - self.assertIsInstance(result, list) - self.assertGreater(len(result), 1) - self.assertIn("First item", result[0]) - self.assertIn("subitem", " ".join(result)) - - def test_replace_parentheses_with_braces(self): - input_text = "This is a test (example) with [brackets]." - expected = "This is a test {example} with {brackets}." - # Note: The implementation replaces both '(' and '[' with '{' and their closing pairs with '}' - result = replace_parentheses_with_braces(input_text) - self.assertEqual(result, expected) - - def test_replace_braces_with_parentheses(self): - input_text = "This is a test {example} with {brackets}." - expected = "This is a test (example) with (brackets)." - result = replace_braces_with_parentheses(input_text) - self.assertEqual(result, expected) - - def test_line_starts_with_capitalized_alphanumeric(self): - self.assertTrue(line_starts_with_capitalized_alphanumeric("Hello world")) - self.assertFalse(line_starts_with_capitalized_alphanumeric("hello world")) - self.assertFalse(line_starts_with_capitalized_alphanumeric(" ")) - self.assertTrue(line_starts_with_capitalized_alphanumeric("A1 is valid")) - - def test_split_by_leading_char_from_regex_patterns(self): - # Use a regex that matches any numeric marker in the text (without the start-of-string anchor). - line = "1) First sentence. 2) Second sentence." - patterns = [r"\b\d+\)"] - result = split_by_leading_char_from_regex_patterns(line, patterns) - # Expect two parts: one starting from "1)" and another starting from "2)" - self.assertGreaterEqual(len(result), 2, f"Result was {result}") - - -class TestXMLFunctions(unittest.TestCase): - def setUp(self): - # Create temporary XML content. - self.valid_xml = "Eligibility Content" - self.invalid_xml = ( - "Missing closing tags" - ) - # Create a temporary file for testing read_xml_file. - self.temp_xml_file = tempfile.NamedTemporaryFile( - mode="w+", delete=False, suffix=".xml" - ) - self.temp_xml_file.write(self.valid_xml) - self.temp_xml_file.close() - - def tearDown(self): - os.unlink(self.temp_xml_file.name) - - def test_read_xml_file_success(self): - content = read_xml_file(self.temp_xml_file.name) - self.assertIn("Eligibility Content", content) - - def test_read_xml_file_failure(self): - # Attempt to read a non-existent file. - content = read_xml_file("nonexistent_file.xml") - self.assertIsNone(content) - - def test_parse_xml_content_success(self): - root = parse_xml_content(self.valid_xml) - self.assertIsNotNone(root) - self.assertEqual(root.tag, "root") - - def test_parse_xml_content_failure(self): - root = parse_xml_content(self.invalid_xml) - self.assertIsNone(root) - - -class TestExtractEligibilityCriteria(unittest.TestCase): - def setUp(self): - # Create dummy XML content that includes the eligibility textblock. - self.dummy_xml = "Eligibility Content for Trial" - # Create a temporary file that will be used to simulate a trial XML file. - self.temp_xml_file = tempfile.NamedTemporaryFile( - mode="w+", delete=False, suffix=".xml" - ) - self.temp_xml_file.write(self.dummy_xml) - self.temp_xml_file.close() - - def tearDown(self): - os.unlink(self.temp_xml_file.name) - - def test_extract_eligibility_criteria_found(self): - trial_id = "dummy_trial" - # Patch os.path.exists and os.path.join using the correct module path. - with ( - patch( - "src.Preprocessor.preprocessing_utils.os.path.exists", return_value=True - ), - patch( - "src.Preprocessor.preprocessing_utils.os.path.join", - return_value=self.temp_xml_file.name, - ), - ): - text = extract_eligibility_criteria(trial_id) - self.assertEqual(text, "Eligibility Content for Trial") - - def test_extract_eligibility_criteria_not_found(self): - trial_id = "dummy_trial" - # Return False for file existence. - with patch( - "src.Preprocessor.preprocessing_utils.os.path.exists", return_value=False - ): - text = extract_eligibility_criteria(trial_id) - self.assertIsNone(text) - - -class TestOtherTextProcessingFunctions(unittest.TestCase): - def test_split_on_carriage_returns(self): - text = "Line one.\n\nLine two.\n\n\nLine three." - result = split_on_carriage_returns(text) - self.assertEqual(len(result), 3) - self.assertIn("Line two.", result) - - def test_split_lines_on_semicolon(self): - lines = ["Sentence one; Sentence two {ignore; this} end."] - result = split_lines_on_semicolon(lines) - # Expect the semicolon outside braces to split the line - # and preserve the entire text "ignore; this" inside braces. - self.assertIn("Sentence one", result[0]) - self.assertEqual(result[1], "Sentence two {ignore; this} end.") - - def test_split_to_sentences(self): - text = "Inclusion Criteria: Patients over 18. Exclusion Criteria: Non-eligible subjects." - regex_patterns = [r"Inclusion Criteria", r"Exclusion Criteria"] - exception_patterns = [] - result = split_to_sentences(text, regex_patterns, exception_patterns) - self.assertIsInstance(result, list) - self.assertGreaterEqual(len(result), 1) - - def test_drop_leading_character(self): - # Suppose our regex patterns remove leading numbers and punctuation. - patterns = [r"^\d+\.", r"^-"] - sentence = "1. This is a test sentence." - result = drop_leading_character(sentence, patterns) - self.assertNotEqual(result, sentence) - self.assertTrue(result.startswith("This")) - - def test_extract_criteria_sections_headers(self): - # Provide a list of simulated lines where some lines look like headers. - lines = [ - "Inclusion Criteria:", - "Patients must be over 18.", - "Exclusion Criteria:", - "Patients with comorbidities.", - ] - sections = extract_criteria_sections_headers(lines) - self.assertIsInstance(sections, dict) - # There should be keys that contain "Inclusion" and "Exclusion". - keys_joined = " ".join(sections.keys()).lower() - self.assertIn("inclusion", keys_joined) - self.assertIn("exclusion", keys_joined) - - def test_fix_inline_headers(self): - text = "Inclusion Criteria:Patients must be over 18. Exclusion Criteria:Patients with comorbidities." - fixed = fix_inline_headers(text) - # Check that there is a newline inserted after the colon for each header. - self.assertIn("Criteria:\n", fixed) - - def test_extract_separate_inclusion_exclusion(self): - # Create a dummy eligibility text with inline headers. - text = "Inclusion Criteria: Patients must be over 18. Exclusion Criteria: Patients with comorbidities." - regex_patterns = [r"Inclusion Criteria", r"Exclusion Criteria"] - exception_patterns = [] - result = extract_separate_inclusion_exclusion( - text, regex_patterns, exception_patterns - ) - self.assertIn("Inclusion Criteria", result) - self.assertIn("Exclusion Criteria", result) - # The text for each header should be non-empty dictionaries. - self.assertIsInstance(result["Inclusion Criteria"], dict) - self.assertIsInstance(result["Exclusion Criteria"], dict) - - def test_split_on_full_stops(self): - text = "This is a sentence. And here is another? Yes, indeed. Final sentence." - sentences = split_on_full_stops(text) - self.assertGreaterEqual(len(sentences), 3) - self.assertTrue(any("Final sentence" in s for s in sentences)) - - def test_split_large_sentences(self): - # Create a DataFrame with one long sentence. - df = pd.DataFrame( - { - "sentence": [ - "This is a very long sentence. It should be split. Here is another sentence." - ], - "criteria": ["Inclusion"], - "sub_criteria": ["General"], - "id": ["trial1"], - } - ) - new_df = split_large_sentences(df) - # We expect that if the threshold is 200 characters, a sentence shorter than that remains unchanged. - self.assertFalse(new_df.empty) - self.assertTrue(new_df["sentence"].str.len().min() > 0) - - -class TestEICTextPreprocessing(unittest.TestCase): - def setUp(self): - # Create temporary dummy regex patterns files. - self.temp_regex_file = tempfile.NamedTemporaryFile( - mode="w+", delete=False, suffix=".json" - ) - regex_data = { - "patterns": { - "pattern1": {"regex": r"\d+\)"}, - "pattern2": {"regex": r"[•*]"}, - } - } - json.dump(regex_data, self.temp_regex_file) - self.temp_regex_file.close() - - self.temp_exceptions_file = tempfile.NamedTemporaryFile( - mode="w+", delete=False, suffix=".json" - ) - exceptions_data = {"patterns": {"exception": {"regex": r"EXCEPTION"}}} - json.dump(exceptions_data, self.temp_exceptions_file) - self.temp_exceptions_file.close() - - # Create a dummy eligibility criteria XML content. - self.dummy_xml = "Inclusion Criteria: Patients over 18. Exclusion Criteria: Patients with comorbidities." - # Create a temporary XML file to be read by extract_eligibility_criteria. - self.temp_xml_file = tempfile.NamedTemporaryFile( - mode="w+", delete=False, suffix=".xml" - ) - self.temp_xml_file.write(self.dummy_xml) - self.temp_xml_file.close() - - # Create a temporary output directory. - self.temp_output_dir = tempfile.mkdtemp() - - def tearDown(self): - os.unlink(self.temp_regex_file.name) - os.unlink(self.temp_exceptions_file.name) - os.unlink(self.temp_xml_file.name) - # Remove output files if created. - for f in os.listdir(self.temp_output_dir): - os.unlink(os.path.join(self.temp_output_dir, f)) - os.rmdir(self.temp_output_dir) - - def dummy_extract_eligibility_criteria(self, trial_id): - # Instead of reading a file from disk, simply return the text inside our dummy XML. - return "Inclusion Criteria: Patients over 18. Exclusion Criteria: Patients with comorbidities." - - @patch("src.Preprocessor.preprocessing_utils.extract_eligibility_criteria") - def test_eic_text_preprocessing(self, mock_extract): - # Patch extract_eligibility_criteria to return a dummy string. - mock_extract.side_effect = self.dummy_extract_eligibility_criteria - _ids = ["trial123"] - df = eic_text_preprocessing( - _ids, - regex_path=self.temp_regex_file.name, - exceptions_path=self.temp_exceptions_file.name, - output_path=self.temp_output_dir, - ) - self.assertIsNotNone(df) - # Check that the DataFrame contains expected columns. - for col in ["sentence", "criteria", "sub_criteria", "id"]: - self.assertIn(col, df.columns) - # Check that an output file was written to the output directory. - files = os.listdir(self.temp_output_dir) - self.assertTrue(any(f.endswith("_preprocessed.tsv") for f in files)) - - -if __name__ == "__main__": - unittest.main() diff --git a/utils/Preprocessor/utils.py b/utils/Preprocessor/utils.py deleted file mode 100644 index 18aec18f..00000000 --- a/utils/Preprocessor/utils.py +++ /dev/null @@ -1,599 +0,0 @@ -import requests -import xml.etree.ElementTree as ET -import os -import time -import re - - -def normalize_whitespace(s): - return " ".join(s.split()) - - -def download_study_info(nct_id, runs=2): - local_file_path = f"../data/trials_xmls/{nct_id}.xml" - updated_cts = [] - for _ in range(runs): - if os.path.exists(local_file_path): - # Read the content of the existing local XML file - with open(local_file_path, "r") as f: - local_xml_content = f.read() - try: - local_root = ET.fromstring(local_xml_content) - except ET.ParseError as e: - print(f"Error parsing XML for trial {nct_id}: {e}") - os.remove(local_file_path) - continue - - # Download the online version of the XML - url = f"https://clinicaltrials.gov/ct2/show/{nct_id}?displayxml=true" - response = requests.get(url) - - if response.status_code == 200: - online_xml_content = response.text - # Parse the XML content - online_root = ET.fromstring(online_xml_content) - to_check = ["eligibility", "brief_title", "overall_status", "location"] - - local_version = [] - online_version = [] - - for s in to_check: - local_elem = local_root.find(".//%s" % s) - online_elem = online_root.find(".//%s" % s) - - # Check if the element exists in both versions - if local_elem is not None and online_elem is not None: - local_version.append(local_elem) - online_version.append(online_elem) - else: - continue - - is_updated = any( - [ - normalize_whitespace(ET.tostring(a, encoding="unicode").strip()) - != normalize_whitespace( - ET.tostring(b, encoding="unicode").strip() - ) - for a, b in zip(local_version, online_version) - ] - ) - - if is_updated: - updated_cts.append(nct_id) - # Update the local XML with the online version - with open(local_file_path, "w") as f: - f.write(ET.tostring(online_root, encoding="unicode")) - print(f"Updated eligibility criteria for {nct_id}") - else: - print(f"No changes in eligibility criteria for {nct_id}.") - else: - print(f"Error downloading study information for {nct_id}") - else: - downloaded = False - while not downloaded: - url = f"https://clinicaltrials.gov/ct2/show/{nct_id}?displayxml=true" - response = requests.get(url) - if response.status_code == 200: - root = ET.fromstring(response.text) - with open(local_file_path, "w") as f: - f.write(ET.tostring(root, encoding="unicode")) - downloaded = True - print(f"Study information downloaded for {nct_id}") - else: - print(f"Error downloading study information for {nct_id}") - - if not downloaded: - print(f"Download of {nct_id}.xml failed. Retrying in 2 seconds...") - time.sleep(2) - return updated_cts - - -def extract_study_info(nct_id): - """ - Extract various study information from a clinical trial text with the given NCT identifier. - - This function attempts to extract various study information for a clinical trial specified by its unique - NCT identifier (NCT ID). The function checks if a file named '{nct_id}_info.txt' already exists - in the 'trials_texts' directory. If the file exists, the function returns 0, indicating that the - extraction is not required, and the information is already available locally. - - If the file '{nct_id}_info.txt' does not exist, the function parses the XML file with the name '{nct_id}.xml' - located in the 'trials_texts' directory. The XML content is parsed using the `xml.etree.ElementTree` - module. The function then extracts various study information from the XML content and saves it in a text file - with the name '{nct_id}_info.txt' in the 'trials_texts' directory. - - The extracted study information includes: - - Long title - - Short title - - Cancer sites - - Start date - - End date - - Primary end date - - Overall status - - Study phase - - Study type - - Brief summary - - Detailed description - - Number of arms - - Arms information - - Eligibility criteria - - Gender - - Minimum age - - Maximum age - - Intervention details - - Location details - - Parameters: - nct_id (str): The unique identifier (NCT ID) of the clinical trial for which study information - needs to be extracted. - - Returns: - int: Returns 0 if the study information file already exists locally and doesn't require extraction. - Otherwise, the function doesn't return anything directly (implicit return). - Note: The extracted study information is saved in the 'trials_texts' directory. - - """ - if os.path.exists(f"../data/trials_xmls/{nct_id}_info.txt"): - return 0 - # print(f"{nct_id}_info.txt already exists. Skipping extraction.") - else: - tree = ET.parse(f"../data/trials_xmls/{nct_id}.xml") - root = tree.getroot() - with open(f"../data/trials_xmls/{nct_id}_info.txt", "w") as f: - # Extract Long title - official_title = root.find(".//official_title") - if official_title is not None: - title_text = official_title.text.strip() - f.write(f"Long Title:\n{title_text}\n\n") - - # Extract short title - brief_title = root.find(".//brief_title") - if brief_title is not None: - title_text = brief_title.text.strip() - f.write(f"Short Title:\n{title_text}\n\n") - - # Extract cancer sites - conditions = root.findall(".//condition") - if conditions is not None: - f.write("Cancer Site(s):\n") - for condition in conditions: - condition_text = condition.text.strip() - f.write(f"- {condition_text}\n") - f.write("\n") - - # Extract start date - start_date = root.find(".//start_date") - if start_date is not None: - start_date_text = start_date.text.strip() - f.write(f"Start Date:\n{start_date_text}\n\n") - - # Extract end date - end_date = root.find(".//completion_date") - if end_date is not None: - end_date_text = end_date.text.strip() - f.write(f"End Date:\n{end_date_text}\n\n") - - # Extract primary end date - primary_end_date = root.find(".//primary_completion_date") - if primary_end_date is not None: - primary_end_date_text = primary_end_date.text.strip() - f.write(f"Primary End Date:\n{primary_end_date_text}\n\n") - - # Extract overall status - overall_status = root.find(".//overall_status") - if overall_status is not None: - overall_status_text = overall_status.text.strip() - f.write(f"Overall Status:\n{overall_status_text}\n\n") - - # Extract study phase - study_phase = root.find(".//phase") - if study_phase is not None: - f.write(f"Study Phase: \n{study_phase.text.strip()}\n\n") - - # Extract study type - study_type = root.find(".//study_type") - if study_type is not None: - study_type_text = study_type.text.strip() - f.write(f"Study Type:\n{study_type_text}\n\n") - - # Extract brief summary - brief_summary = root.find(".//brief_summary") - if brief_summary is not None: - brief_summary_text = brief_summary.find(".//textblock").text.strip() - f.write(f"Brief Summary:\n{brief_summary_text}\n\n") - - # Extract detailed description - detailed_description = root.find(".//detailed_description") - if detailed_description is not None: - detailed_description_text = detailed_description.find( - ".//textblock" - ).text.strip() - f.write(f"Detailed Description:\n{detailed_description_text}\n\n") - - # Extract number of arms - number_of_arms = root.find(".//number_of_arms") - if number_of_arms is not None: - f.write(f"Number of Arms: {number_of_arms.text.strip()}\n\n") - - arms = root.findall(".//arm_group") - if arms is not None: - f.write("Arms:\n") - for arm in arms: - arm_group_label = arm.find(".//arm_group_label").text.strip() - arm_group_description = arm.find(".//arm_group_description") - if arm_group_description is not None: - arm_group_description_text = arm_group_description.text.strip() - f.write(f"- {arm_group_label}: {arm_group_description_text}\n") - else: - f.write(f"- {arm_group_label}\n") - f.write("\n") - - # Extract eligibility criteria - eligibility_criteria = root.find(".//eligibility/criteria") - if eligibility_criteria is not None: - eligibility_criteria_text = eligibility_criteria.find( - ".//textblock" - ).text.strip() - f.write(f"Eligibility Criteria:\n{eligibility_criteria_text}\n\n") - - # Extract gender - gender = root.find(".//gender") - if gender is not None: - gender_text = gender.text.strip() - f.write(f"Gender:\n{gender_text}\n\n") - - # Extract minimum age - min_age = root.find(".//eligibility/minimum_age") - if min_age is not None: - min_age_text = min_age.text.strip() - f.write(f"Minimum Age:\n{min_age_text}\n\n") - - # Extract maximum age - max_age = root.find(".//eligibility/maximum_age") - if max_age is not None: - max_age_text = max_age.text.strip() - f.write(f"Maximum Age:\n{max_age_text}\n\n") - - # Extract intervention - intervention = root.findall(".//intervention") - if intervention is not None: - f.write("Interventions:\n") - for i in intervention: - intervention_name = i.find(".//intervention_name").text.strip() - f.write(f"- {intervention_name}\n") - f.write("\n") - - # Extract locations - locations = root.findall(".//location") - if locations is not None: - f.write("Locations:\n") - for location in locations: - city = location.find(".//city") - country = location.find(".//country") - if city is not None and country is not None: - location_text = f"{city.text.strip()}, {country.text.strip()}" - f.write(f"- {location_text}\n") - f.write("\n") - - print(f"{nct_id} info extracted and saved to {nct_id}_info.txt") - - -def add_spaces_around_punctuation(text): - """ - Add spaces around punctuation - - Parameters - ---------- - text : str - The text to be preprocessed - - Returns - ------- - str - The preprocessed text - """ - text = re.sub(r"([.,!?()])", r" \1 ", text) - return text - - -def remove_special_characters(text): - """ - Remove special characters - - Parameters - ---------- - text : str - The text to be preprocessed - - Returns - ------- - str - The preprocessed text - """ - text = re.sub(r"[^a-zA-Z0-9]", " ", text) - return text - - -def remove_dashes_at_the_start_of_sentences(text): - """ - Remove dashes at the start of sentences - - Parameters - ---------- - text : str - The text to be preprocessed - - Returns - ------- - str - The preprocessed text - """ - text = re.sub(r"^- ", "", text) - return text - - -def post_process_entities(entities): - """ - Merge consecutive entities and post-process the results. - - This function takes a list of entities generated from a named entity recognition (NER) model's output - and performs post-processing to merge consecutive entities of the same type. The input entities list - contains dictionaries representing each detected entity with the following keys: - - "entity" (str): The entity type represented as a prefixed tag (e.g., "B-ORG", "I-LOC"). - - "score" (float): The confidence score assigned to the entity by the NER model. - - "word" (str): The text of the entity in the input text. - - "start" (int): The starting index of the entity in the input text. - - "end" (int): The ending index (exclusive) of the entity in the input text. - - The function iterates through the entities and merges consecutive entities with the same type into a single - entity. It also handles entities that span multiple words, indicated by the presence of "I-" prefixes. - The merged entity is represented by a dictionary containing the merged information: - - "entity" (str): The entity type without the prefix (e.g., "ORG", "LOC"). - - "score" (float): The maximum confidence score among the merged entities. - - "word" (str): The combined text of the merged entities. - - "start" (int): The starting index of the first entity in the merged sequence. - - "end" (int): The ending index (exclusive) of the last entity in the merged sequence. - - Parameters: - entities (list): A list of dictionaries representing detected entities. - - Returns: - list: A list of dictionaries representing merged entities after post-processing. - Each dictionary contains the keys "entity", "score", "word", "start", and "end" - representing the entity type, confidence score, text, start index, and end index respectively. - """ - merged_entities = [] - current_entity = None - - for entity in entities: - if entity["entity"].startswith("B-"): - if current_entity is not None: - merged_entities.append(current_entity) - current_entity = { - "entity": entity["entity"][2:], - "score": entity["score"], - "word": entity["word"].replace("##", " "), - "start": entity["start"], - "end": entity["end"], - } - elif entity["entity"].startswith("I-"): - if (current_entity is not None) and entity["word"].startswith("##"): - current_entity["word"] += entity["word"].replace("##", "") - current_entity["end"] = entity["end"] - current_entity["score"] = max(current_entity["score"], entity["score"]) - else: - current_entity["word"] += " " + entity["word"].lstrip() - current_entity["end"] = entity["end"] - current_entity["score"] = max(current_entity["score"], entity["score"]) - else: - if current_entity is not None: - merged_entities.append(current_entity) - current_entity = None - - if current_entity is not None: - merged_entities.append(current_entity) - - return merged_entities - - -def get_dictionaries_with_values(list_of_dicts, key, values): - """ - Filter a list of dictionaries based on the presence of specific values in a specified key. - - This function takes a list of dictionaries and filters them based on the presence of specific values in a specified key. - The function checks each dictionary in the input list and includes only those dictionaries where any of the given values - are present in the specified key. The filtering is performed using list comprehensions. - - Parameters: - list_of_dicts (list): A list of dictionaries to be filtered. - key (str): The key in the dictionaries where the filtering is applied. - values (list): A list of values. The function will filter dictionaries where any of these values are present in the specified key. - - Returns: - list: A list of dictionaries that meet the filtering criteria. - - Example: - list_of_dicts = [ - {"name": "Alice", "age": 30}, - {"name": "Bob", "age": 25}, - {"name": "Charlie", "age": 35}, - {"name": "David", "age": 30}, - ] - - get_dictionaries_with_values(list_of_dicts, "age", [30, 35]) - # Output: [ - # {"name": "Alice", "age": 30}, - # {"name": "Charlie", "age": 35}, - # {"name": "David", "age": 30} - # ] - """ - return [d for d in list_of_dicts if any(val in d.get(key, []) for val in values)] - - -def resolve_ner_overlaps(ner1_results, ner2_results): - """ - Resolve overlaps between entities detected by two named entity recognition (NER) models. - - This function takes the results of two NER models (ner1_results and ner2_results) and resolves overlaps - between the entities detected by these models. An overlap occurs when the span of an entity detected by one - model partially or fully overlaps with the span of an entity detected by the other model. - - The function iterates through the entities detected by the first NER model (ner1_results). For each entity, - it checks if it overlaps with any entity from the second model (ner2_results). If there are no overlaps, - the entity from the first model is added to the resolved results. - - After processing the entities from the first model, the function then adds entities from the second model - that do not overlap with any entities from the first model. - - Parameters: - ner1_results (list): A list of dictionaries representing entities detected by the first NER model. - ner2_results (list): A list of dictionaries representing entities detected by the second NER model. - - Returns: - list: A list of dictionaries representing the resolved entities with overlaps removed. - - Example: - ner1_results = [ - {"start": 5, "end": 10, "entity_group": "PERSON"}, - {"start": 20, "end": 25, "entity_group": "LOCATION"} - ] - - ner2_results = [ - {"start": 8, "end": 15, "entity_group": "PERSON"}, - {"start": 18, "end": 30, "entity_group": "ORGANIZATION"} - ] - - resolve_ner_overlaps(ner1_results, ner2_results) - # Output: [ - # {"start": 5, "end": 10, "entity_group": "PERSON"}, - # {"start": 18, "end": 30, "entity_group": "ORGANIZATION"}, - # {"start": 20, "end": 25, "entity_group": "LOCATION"} - # ] - """ - resolved_results = [] - # Iterate over the entities detected by the first NER model - for entity1 in ner1_results: - entity1_start = entity1["start"] - entity1_end = entity1["end"] - - # Check if the entity from the first model overlaps with any entity from the second model - overlaps = False - for entity2 in ner2_results: - entity2_start = entity2["start"] - entity2_end = entity2["end"] - - if entity1_start < entity2_end and entity1_end > entity2_start: - overlaps = True - break - - # If there were no overlaps, add the entity from the first model to the resolved results - if not overlaps: - resolved_results.append(entity1) - - # Add entities from the second model that don't overlap with any entities from the first model - for entity2 in ner2_results: - entity2_start = entity2["start"] - entity2_end = entity2["end"] - - overlaps = False - for entity1 in resolved_results: - entity1_start = entity1["start"] - entity1_end = entity1["end"] - - if entity2_start < entity1_end and entity2_end > entity1_start: - overlaps = True - break - - if not overlaps: - resolved_results.append(entity2) - - return resolved_results - - -def extract_eligibility_criteria(trial_id): - """ - Extract the eligibility criteria text for a clinical trial with the given trial ID. - - This function attempts to locate and extract the eligibility criteria text for a clinical trial - specified by its trial ID. The function reads an XML file named '{trial_id}.xml' which is expected - to contain information for the clinical trial. It searches for the eligibility criteria textblock within - the XML and extracts the corresponding text. - - Parameters: - trial_id (str): The unique identifier of the clinical trial. - - Returns: - str or None: The extracted eligibility criteria text for the specified trial if found, - otherwise None. - """ - xml_file_path = f"../data/trials_xmls/{trial_id}.xml" - - if os.path.exists(xml_file_path): - with open(xml_file_path, "r") as xml_file: - xml_content = xml_file.read() - try: - tree = ET.ElementTree(ET.fromstring(xml_content)) - root = tree.getroot() - except ET.ParseError as e: - print(f"Error parsing XML for trial {trial_id}: {e}") - return None - # Find the Eligibility Criteria TextBlock section within the XML - eligibility_criteria_textblock = root.find(".//eligibility/criteria/textblock") - - if eligibility_criteria_textblock is not None: - # Extract the text from the Eligibility Criteria TextBlock section - eligibility_criteria_text = eligibility_criteria_textblock.text - return eligibility_criteria_text.strip() - - # If the trial ID is not found or the eligibility criteria textblock is missing, return None - return None - - -def replace_parentheses_with_braces(text): - """ - Replace parentheses with curly braces in the given text. - - This function takes a text as input and replaces all occurrences of opening parentheses '(' - with an opening curly brace '{', and closing parentheses ')' with a closing curly brace '}'. - The function maintains a stack to ensure proper matching of parentheses. If a closing parenthesis - is encountered without a corresponding opening parenthesis in the stack, it is left unchanged. - - Parameters: - text (str): The input text containing parentheses that need to be replaced. - - Returns: - str: The modified text with parentheses replaced by curly braces. - """ - stack = [] - result = "" - for char in text: - if char == "(" or char == "[": - stack.append(char) - result += "{" - elif char == ")" or char == "]": - if stack: - stack.pop() - result += "}" - else: - result += char - else: - result += char - return result - - -def line_starts_with_capitalized_alphanumeric(line): - """ - Check if the given line starts with a capitalized alphanumeric word. - - Parameters: - line (str): The input string representing a line. - - Returns: - bool: True if the line starts with a capitalized alphanumeric word, False otherwise. - """ - words = line.split() - if len(words) > 0: - first_word = words[0] - if first_word[0].isalpha() and first_word[0].isupper(): - return True - return False diff --git a/utils/finetuning/finetune_instruct/__init__.py b/utils/finetuning/finetune_instruct/__init__.py deleted file mode 100644 index d3f5a12f..00000000 --- a/utils/finetuning/finetune_instruct/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/utils/finetuning/finetune_instruct/arguments.py b/utils/finetuning/finetune_instruct/arguments.py deleted file mode 100644 index 6fdc440e..00000000 --- a/utils/finetuning/finetune_instruct/arguments.py +++ /dev/null @@ -1,184 +0,0 @@ -import os -from dataclasses import dataclass, field -from typing import Optional, List - -from transformers import TrainingArguments - -# Set desired GPU indices if needed -os.environ["CUDA_VISIBLE_DEVICES"] = "0,2,3,4,5,6,7" - - -def default_list() -> List[str]: - return ["q_proj", "v_proj", "o_proj", "down_proj", "up_proj", "gate_proj"] - - -@dataclass -class ModelArguments: - """ - Arguments pertaining to which model/config/tokenizer we are going to fine-tune from. - """ - - model_name_or_path: str = field( - metadata={ - "help": "Path to pretrained model or model identifier from huggingface.co/models" - } - ) - peft_model_path: str = field(default="") - config_name: Optional[str] = field( - default=None, - metadata={ - "help": "Pretrained config name or path if not the same as model_name" - }, - ) - tokenizer_name: Optional[str] = field( - default=None, - metadata={ - "help": "Pretrained tokenizer name or path if not the same as model_name" - }, - ) - use_lora: bool = field( - default=True, - metadata={ - "help": "If passed, will use LORA (low-rank parameter-efficient training) to train the model." - }, - ) - lora_rank: int = field( - default=64, metadata={"help": "The rank dimension for LoRA."} - ) - lora_alpha: float = field( - default=16, metadata={"help": "The scaling factor (alpha) for LoRA."} - ) - lora_dropout: float = field( - default=0.05, metadata={"help": "The dropout rate for LoRA layers."} - ) - target_modules: List[str] = field( - default_factory=default_list, - metadata={"help": "List of modules to apply LoRA to."}, - ) - save_merged_lora_model: bool = field( - default=False, - metadata={ - "help": "If True, merges the LoRA parameters into the base model before saving." - }, - ) - use_flash_attn: bool = field( - default=True, - metadata={ - "help": "If True, use flash attention during training (if supported)." - }, - ) - use_slow_tokenizer: bool = field( - default=False, - metadata={ - "help": "If True, use a slow (Python-based) tokenizer instead of a fast (C++/Rust) one." - }, - ) - low_cpu_mem_usage: bool = field( - default=False, - metadata={ - "help": "If True, create the model as an empty shell and then load weights, reducing RAM usage." - }, - ) - cache_dir: str = field( - default="tmp", - metadata={ - "help": "Path to the directory where models and tokenizers are cached." - }, - ) - token: str = field( - default=None, metadata={"help": "HuggingFace hub token for private models."} - ) - from_peft: str = field( - default=None, - metadata={"help": "Path to a PEFT checkpoint from which to load a model."}, - ) - lora_extra_parameters: str = field( - default=None, metadata={"help": "Additional modules to save when using LoRA."} - ) - - -@dataclass -class DataArguments: - train_data: str = field( - default="toy_finetune_data.jsonl", - metadata={"help": "Path to the training data file (in JSONL format)."}, - ) - - query_max_len: int = field( - default=32, - metadata={ - "help": "Max length of the input sequence for the instruction/input portion." - }, - ) - passage_max_len: int = field( - default=128, - metadata={ - "help": "Max length of the entire sequence (instruction + input + output)." - }, - ) - - max_example_num_per_dataset: int = field( - default=10, - metadata={"help": "Maximum number of examples to load from the dataset."}, - ) - - cache_path: str = field( - default="./data_dir", - metadata={"help": "Directory for caching processed datasets."}, - ) - - load_from_disk: bool = field( - default=False, - metadata={ - "help": "If True, load a previously saved dataset from disk instead of processing from scratch." - }, - ) - - load_disk_path: str = field( - default=None, - metadata={ - "help": "Path to the saved dataset on disk if load_from_disk is True." - }, - ) - - save_to_disk: bool = field( - default=False, metadata={"help": "If True, save the processed dataset to disk."} - ) - - save_disk_path: str = field( - default=None, - metadata={ - "help": "Path to save the processed dataset if save_to_disk is True." - }, - ) - - num_shards: int = field( - default=0, - metadata={"help": "Number of shards to split the dataset into when saving."}, - ) - - save_max_shard_size: str = field( - default="50GB", - metadata={"help": "Maximum size of each shard when saving the dataset."}, - ) - - exit_after_save: bool = field( - default=False, - metadata={"help": "If True, exit the program after saving the dataset."}, - ) - - def __post_init__(self): - if not os.path.exists(self.train_data): - raise FileNotFoundError( - f"Cannot find file: {self.train_data}. Please provide a valid path." - ) - - -@dataclass -class SFTTrainingArguments(TrainingArguments): - """ - Training arguments specifically for supervised fine-tuning a causal language model. - """ - - # Additional arguments can be added if needed. - pass diff --git a/utils/finetuning/finetune_instruct/data.py b/utils/finetuning/finetune_instruct/data.py deleted file mode 100644 index fa2e6039..00000000 --- a/utils/finetuning/finetune_instruct/data.py +++ /dev/null @@ -1,233 +0,0 @@ -import random -from dataclasses import dataclass -from typing import Any, Dict, List, Optional - -import torch -import datasets -from torch.utils.data import Dataset -from transformers import ( - DataCollatorForSeq2Seq, - PreTrainedTokenizer, - PreTrainedTokenizerBase, -) -from jinja2 import Template - -# Replace this import with your own arguments class or define it below -from arguments import DataArguments - -instruction_template = r""" -{%- set ns = namespace(found=false) -%} -{%- for message in messages -%} - {%- if message['role'] == 'system' -%} - {%- set ns.found = true -%} - {%- endif -%} -{%- endfor -%} - -{% for message in messages %} -{% if loop.first and message['role'] == 'system' %} - {% set role = 'user' %} -{% elif message['role'] == 'assistant' %} - {% set role = 'model' %} -{% else %} - {% set role = message['role'] %} -{% endif %} -{{ role }} -{{ message['content'].rstrip() }} -{% endfor %} -""" - - -def apply_chat_template(messages, add_generation_prompt=True): - """ - Renders a list of messages (dicts with 'role' and 'content') into - a single text prompt for causal language models, using Jinja. - """ - t = Template(instruction_template) - rendered = t.render(messages=messages) - if add_generation_prompt: - # Optionally append a small trigger or instruction for the model to continue - rendered += "\nuser\n" - return rendered - - -class TrainDataset(Dataset): - """ - A PyTorch Dataset for instruction-tuning on a causal language model. - """ - - def __init__(self, args: DataArguments, tokenizer: PreTrainedTokenizer): - """ - :param args: Custom DataArguments containing dataset paths, cache paths, etc. - :param tokenizer: A pretrained tokenizer (GPT-2, GPT-NeoX, or similar). - """ - # Load the dataset - self.dataset = datasets.load_dataset( - "json", data_files=args.train_data, split="train", cache_dir=args.cache_path - ) - - # Shuffle the dataset using random - self.dataset = self.dataset.shuffle(seed=42) - - # Randomly sample specified number of examples if needed - if len(self.dataset) > args.max_example_num_per_dataset: - sampled_indices = random.sample( - range(len(self.dataset)), args.max_example_num_per_dataset - ) - self.dataset = self.dataset.select(sampled_indices) - - # Basic setup - self.tokenizer = tokenizer - self.args = args - self.total_len = len(self.dataset) - - # Set the tokenizer's pad token - self.tokenizer.pad_token = self.tokenizer.eos_token - - # Generate the prompt format - messages = [ - {"role": "system", "content": "{instruction}"}, - { - "role": "user", - "content": ("{input}\n"), - }, - ] - self.prompt_format = self.tokenizer.apply_chat_template( - messages, tokenize=False, add_generation_prompt=True - ) - - print("Prompt format:", self.prompt_format) - - # Set max_length for prompt+output - self.max_length = self.args.query_max_len + self.args.passage_max_len - - def __len__(self): - return self.total_len - - def __getitem__(self, index: int) -> Dict[str, List[int]]: - """ - For each example: - 1. Read instruction, input, and output from the dataset. - 2. Build the prompt using the stored template. - 3. Concatenate prompt + output_text as the full input. - 4. Tokenize everything. - 5. Mask out the prompt portion in labels with -100. - """ - example = self.dataset[index] - instruction = example["instruction"] - input_text = example.get("input", "") - output_text = example["output"] - - # Build the prompt from our custom format - prompt = self.prompt_format.format( - instruction=instruction.strip(), input=input_text.strip() - ) - - # Concatenate prompt + output in one sequence for causal LM - full_input = prompt + output_text.strip() - - # Tokenize the entire sequence - tokenized = self.tokenizer( - full_input, - max_length=self.max_length, - truncation=True, - return_tensors=None, # return raw python lists - add_special_tokens=True, - ) - input_ids = tokenized["input_ids"] - attention_mask = tokenized["attention_mask"] - - # Tokenize just the prompt to find boundary - prompt_tokenized = self.tokenizer( - prompt, - max_length=self.max_length, - truncation=True, - return_tensors=None, - add_special_tokens=True, - ) - prompt_len = len(prompt_tokenized["input_ids"]) - - # Create labels array and mask out prompt tokens with -100 - labels = [-100] * len(input_ids) - if prompt_len < len(input_ids): - labels[prompt_len:] = input_ids[prompt_len:] - - return { - "input_ids": input_ids, - "attention_mask": attention_mask, - "labels": labels, - } - - -@dataclass -class DataCollatorForFinetuning(DataCollatorForSeq2Seq): - """ - Collator that pads input_ids, attention_mask, and labels for a - causal instruction-tuning scenario. - - In many seq2seq settings (T5/BART), you would rely on DataCollatorForSeq2Seq - to handle encoder/decoder inputs. However, here we can still inherit from it - for convenience if we only need padding on a single sequence + labels. - - If using a GPT-style model, consider using DataCollatorForLanguageModeling - from Hugging Face Transformers. But this approach will still work - if you only need to handle padding. - """ - - query_max_len: int = 32 - passage_max_len: int = 128 - label_pad_token_id: int = -100 - tokenizer: PreTrainedTokenizerBase = None - padding: bool = True - pad_to_multiple_of: Optional[int] = None - return_tensors: str = "pt" - - def __post_init__(self): - if self.tokenizer is None: - raise ValueError("Tokenizer must be provided to the DataCollator.") - - def __call__( - self, features: List[Dict[str, Any]], return_tensors: Optional[str] = None - ) -> Dict[str, Any]: - """ - Pads inputs and labels separately, then returns a batch of tensors. - """ - # 1. We use return_tensors from self if not explicitly provided - return_tensors = return_tensors or self.return_tensors - - # 2. Extract and remove labels from features - labels = [f.pop("labels") for f in features] - - # 3. Pad labels (treated as input_ids) to the longest label length - label_features = [{"input_ids": label} for label in labels] - padded_labels = self.tokenizer.pad( - label_features, - padding="longest", - max_length=None, # Let tokenizer do max length for labels - pad_to_multiple_of=self.pad_to_multiple_of, - return_tensors=return_tensors, - ) - - # Convert padded label IDs to a torch.Tensor of type long - labels_tensor = padded_labels["input_ids"] - if not isinstance(labels_tensor, torch.Tensor): - labels_tensor = torch.tensor(labels_tensor, dtype=torch.long) - - # Replace pad_token_id with -100 so they don't affect the loss - labels_tensor[labels_tensor == self.tokenizer.pad_token_id] = ( - self.label_pad_token_id - ) - - # 4. Pad the input features themselves (input_ids, attention_mask) - max_length = self.query_max_len + self.passage_max_len - padded_features = self.tokenizer.pad( - features, - padding=self.padding, - max_length=max_length, - pad_to_multiple_of=self.pad_to_multiple_of, - return_tensors=return_tensors, - ) - - # 5. Add the labels back in - padded_features["labels"] = labels_tensor - - return padded_features diff --git a/utils/finetuning/finetune_instruct/data_llama.py b/utils/finetuning/finetune_instruct/data_llama.py deleted file mode 100644 index c8ac64cc..00000000 --- a/utils/finetuning/finetune_instruct/data_llama.py +++ /dev/null @@ -1,172 +0,0 @@ -import sys -import os -import random -from typing import List, Any, Dict, Optional -from dataclasses import dataclass - -import datasets -from torch.utils.data import Dataset -from transformers import ( - PreTrainedTokenizer, - PreTrainedTokenizerBase, - DataCollatorForSeq2Seq, -) - - -class TrainDataset(Dataset): - def __init__(self, args, tokenizer: PreTrainedTokenizer): - # Load dataset (assuming args.train_data points to a directory or a JSON file) - if os.path.isdir(args.train_data): - train_datasets = [] - for file in os.listdir(args.train_data): - try: - temp_dataset = datasets.load_dataset( - "json", - data_files=os.path.join(args.train_data, file), - split="train", - cache_dir=args.cache_path, - ) - except Exception as e: - print(e, file) - sys.exit() - if len(temp_dataset) > args.max_example_num_per_dataset: - temp_dataset = temp_dataset.select( - random.sample( - range(len(temp_dataset)), args.max_example_num_per_dataset - ) - ) - train_datasets.append(temp_dataset) - - self.dataset = datasets.concatenate_datasets(train_datasets) - else: - self.dataset = datasets.load_dataset( - "json", - data_files=args.train_data, - split="train", - cache_dir=args.cache_path, - ) - - self.tokenizer = tokenizer - self.args = args - self.total_len = len(self.dataset) - - # Define prompt format - messages = [ - { - "role": "system", - "content": "You are an expert trained on healthcare and biomedical domain!{instruction}", - }, - {"role": "user", "content": "{input}\n"}, - ] - self.prompt_format = self.tokenizer.apply_chat_template( - messages, tokenize=False, add_generation_prompt=True - ) - - # Maximum length for the model input - self.max_length = self.args.query_max_len + self.args.passage_max_len - - def __len__(self): - return self.total_len - - def __getitem__(self, index): - example = self.dataset[index] - instruction = example["instruction"] - input_text = example.get("input", "") - output_text = example["output"] - - # Create the prompt - prompt = self.prompt_format.format( - instruction=instruction.strip(), input=input_text.strip() - ) - - # Tokenize the prompt and output together - full_input = prompt + output_text - tokenized = self.tokenizer( - full_input, - max_length=self.max_length, - truncation=True, - return_tensors=None, - add_special_tokens=True, - ) - - input_ids = tokenized["input_ids"] - attention_mask = tokenized["attention_mask"] - - # Determine where output starts - prompt_tokenized = self.tokenizer( - prompt, - max_length=self.max_length, - truncation=True, - return_tensors=None, - add_special_tokens=True, - ) - prompt_len = len(prompt_tokenized["input_ids"]) - - # Create labels - labels = [-100] * len(input_ids) - if prompt_len < len(input_ids): - labels[prompt_len:] = input_ids[prompt_len:] - - return { - "input_ids": input_ids, - "attention_mask": attention_mask, - "labels": labels, - } - - -@dataclass -class DataCollatorForFinetuning(DataCollatorForSeq2Seq): - """ - Collator that pads input_ids, attention_masks, and labels for LLaMA fine-tuning. - """ - - query_max_len: int = 32 - passage_max_len: int = 128 - label_pad_token_id: int = -100 - tokenizer: PreTrainedTokenizerBase = None - padding: bool = True - pad_to_multiple_of: Optional[int] = None - return_tensors: str = "pt" - - def __post_init__(self): - if self.tokenizer is None: - raise ValueError("Tokenizer must be provided to the DataCollator.") - if self.tokenizer.pad_token_id != 128009: - raise ValueError( - "The tokenizer pad_token_id must be set to 128009 for LLaMA." - ) - - def __call__( - self, features: List[Dict[str, Any]], return_tensors: Optional[str] = None - ) -> Dict[str, Any]: - return_tensors = return_tensors or self.return_tensors - - # Separate labels - labels = [feature.pop("labels") for feature in features] - - # Pad labels - label_features = [{"input_ids": label} for label in labels] - padded_labels = self.tokenizer.pad( - label_features, - padding="longest", - return_tensors=return_tensors, - pad_to_multiple_of=self.pad_to_multiple_of, - ) - labels_tensor = padded_labels["input_ids"] - labels_tensor[labels_tensor == self.tokenizer.pad_token_id] = ( - self.label_pad_token_id - ) - - # Pad input_ids and attention_mask - max_length = self.query_max_len + self.passage_max_len - padded_features = self.tokenizer.pad( - features, - padding=self.padding, - max_length=max_length, - pad_to_multiple_of=self.pad_to_multiple_of, - return_tensors=return_tensors, - ) - - # Add labels to the padded features - padded_features["labels"] = labels_tensor - return padded_features diff --git a/utils/finetuning/finetune_instruct/data_summary.py b/utils/finetuning/finetune_instruct/data_summary.py deleted file mode 100644 index c7f5cf7b..00000000 --- a/utils/finetuning/finetune_instruct/data_summary.py +++ /dev/null @@ -1,240 +0,0 @@ -import os -import os.path -import random -import sys -from dataclasses import dataclass - -import datasets -import numpy as np -import torch -from arguments import DataArguments -from torch.utils.data import Dataset -from transformers import DataCollatorForSeq2Seq, PreTrainedTokenizer - - -class TrainDataset(Dataset): - def __init__(self, args: DataArguments, tokenizer: PreTrainedTokenizer): - # Load dataset - if os.path.isdir(args.train_data): - train_datasets = [] - for file in os.listdir(args.train_data): - try: - temp_dataset = datasets.load_dataset( - "json", - data_files=os.path.join(args.train_data, file), - split="train", - cache_dir=args.cache_path, - ) - except Exception as e: - print(e) - print(file) - sys.exit() - if len(temp_dataset) > args.max_example_num_per_dataset: - temp_dataset = temp_dataset.select( - random.sample( - list(range(len(temp_dataset))), - args.max_example_num_per_dataset, - ) - ) - train_datasets.append(temp_dataset) - - self.dataset = datasets.concatenate_datasets(train_datasets) - else: - self.dataset = datasets.load_dataset( - "json", - data_files=args.train_data, - split="train", - cache_dir=args.cache_path, - ) - - self.tokenizer = tokenizer - self.args = args - self.total_len = len(self.dataset) - self.max_length = self.args.query_max_len + self.args.passage_max_len - - def __len__(self): - return self.total_len - - def apply_chat_template(self, chat_messages): - """Formats chat messages into a prompt for the model.""" - return ( - "\n".join( - f"{msg['role'].capitalize()}: {msg['content']}" for msg in chat_messages - ) - + "\nRespond with only the JSON object conforming to the schema." - ) - - def __getitem__(self, index): - example = self.dataset[index] - - # Extract fields from the dataset - inclusion_criteria = example.get("inclusion_criteria", "").strip() - exclusion_criteria = example.get("exclusion_criteria", "").strip() - classification = example.get("classification", "").strip() - reasoning = example.get("reasoning", "").strip() - - # Universal instruction as in the system chat role - system_message = ( - "You are a medical assistant tasked with evaluating a patient's eligibility for a clinical trial given the provided eligibility criteria and patient description." - "Your assessment must be detailed, accurate, and strictly based on the provided patient profile and eligibility criteria." - "\n\n" - "### Key Guidelines\n" - "1. **Critical Information**:\n" - " - Essential data includes age, sex, primary diagnosis (e.g., cancer type and stage), and treatment history.\n" - " - If any critical information is missing from the patient profile, classify the case as **Excluded**, explaining which data is missing and why it affects the decision.\n\n" - "2. **Classification Rules**:\n" - " - **Included**: The patient meets all inclusion criteria and violates no exclusion criteria.\n" - " - **Excluded**: The patient violates any exclusion criterion or fails to meet one or more inclusion criteria.\n" - " - **Undetermined**: When critical information is missing, preventing a definitive classification.\n\n" - "3. **Evaluation Process**:\n" - " - Compare each eligibility criterion with the patient's profile.\n" - " - Evaluate strictly based on the provided data—do not infer or assume missing details.\n" - " - Clearly outline your reasoning, step by step, ensuring it is logically structured and references specific criteria.\n\n" - "4. **Reasoning Template**:\n" - " - Always begin with a summary of the patient's key information relevant to the trial.\n" - " - Evaluate inclusion criteria one-by-one:\n" - " - Specify whether each criterion is met or not, with evidence from the profile.\n" - " - Evaluate exclusion criteria one-by-one:\n" - " - Specify whether each criterion is violated or not, with evidence from the profile.\n" - " - Conclude with your classification decision, summarizing how inclusion and exclusion criteria were addressed.\n\n" - "### Response Format\n" - "Your response must be a JSON object with the following structure:\n" - "{\n" - ' "classification": "string",\n' - ' "reasoning": "string"\n' - "}\n\n" - "### Example Reasoning Structure\n" - "Here is an example reasoning structure:\n\n" - "1. **Summary**:\n" - " The patient is a 65-year-old male with stage IV NSCLC who has completed two prior lines of chemotherapy.\n" - "2. **Inclusion Criteria Evaluation**:\n" - " - Criterion: Patient must have stage IV NSCLC. **Met**: Patient profile confirms stage IV NSCLC.\n" - " - Criterion: Must have measurable disease. **Not Evaluated**: Patient profile does not specify this information.\n" - "3. **Exclusion Criteria Evaluation**:\n" - " - Criterion: Prior treatment with immunotherapy. **Violated**: Patient profile confirms prior treatment with immunotherapy.\n" - "4. **Conclusion**:\n" - " Based on the criteria evaluation, the patient is classified as **Excluded** due to violation of the exclusion criterion regarding prior immunotherapy treatment.\n\n" - "### Additional Notes\n" - "- Be concise and precise in your reasoning.\n" - "- Avoid making assumptions about missing or unspecified information.\n" - "- If multiple factors lead to a classification, clearly state their contributions." - ) - - # Construct the user message with inclusion and exclusion criteria - user_message = ( - f"**Clinical Trial Eligibility Criteria:**\n\n" - f"**Inclusion Criteria:**\n{inclusion_criteria}\n\n" - f"**Exclusion Criteria:**\n{exclusion_criteria}\n\n" - "Evaluate the compatibility of the patient's profile with the eligibility criteria. Base your classification and reasoning only on the information provided." - ) - - # Build the chat-based prompt - chat = [ - {"role": "system", "content": system_message}, - {"role": "user", "content": user_message}, - ] - prompt = self.apply_chat_template(chat) - - # Construct the full input with the expected output appended - full_input = f'{prompt}\n\n{{\n "classification": "{classification}",\n "reasoning": "{reasoning}"\n}}' - - # Tokenize the full input - tokenized = self.tokenizer( - full_input, - max_length=self.max_length, - truncation=True, - return_tensors=None, - add_special_tokens=True, - ) - - input_ids = tokenized["input_ids"] - attention_mask = tokenized["attention_mask"] - - # Tokenize just the prompt to find where the completion starts - prompt_tokenized = self.tokenizer( - prompt, - max_length=self.max_length, - truncation=True, - return_tensors=None, - add_special_tokens=True, - ) - prompt_len = len(prompt_tokenized["input_ids"]) - - # Create labels, masking the prompt portion - labels = [-100] * len(input_ids) - if prompt_len < len(input_ids): - labels[prompt_len:] = input_ids[prompt_len:] - - return { - "input_ids": input_ids, - "attention_mask": attention_mask, - "labels": labels, - } - - -@dataclass -class DataCollatorForFinetuning(DataCollatorForSeq2Seq): - query_max_len: int = 32 # Maximum length for the prompt - passage_max_len: int = 128 # Maximum length for reasoning and classification - - def __call__(self, features, return_tensors="pt"): - """ - Custom data collator for fine-tuning a seq2seq model with chat-style prompts and structured output. - - Args: - features (list): A list of feature dictionaries containing `input_ids`, `attention_mask`, and `labels`. - return_tensors (str): The format for returned tensors (default is 'pt'). - """ - if return_tensors is None: - return_tensors = self.return_tensors - - # Extract labels and calculate the maximum label length - labels = [f["labels"] for f in features] - max_label_length = max(len(label) for label in labels) - - # Apply padding to labels - if self.pad_to_multiple_of is not None: - max_label_length = ( - (max_label_length + self.pad_to_multiple_of - 1) - // self.pad_to_multiple_of - * self.pad_to_multiple_of - ) - - # Determine padding side (left or right) - padding_side = self.tokenizer.padding_side - for feature in features: - remainder = [self.label_pad_token_id] * ( - max_label_length - len(feature["labels"]) - ) - if isinstance(feature["labels"], list): - feature["labels"] = ( - feature["labels"] + remainder - if padding_side == "right" - else remainder + feature["labels"] - ) - elif padding_side == "right": - feature["labels"] = np.concatenate( - [feature["labels"], remainder] - ).astype(np.int64) - else: - feature["labels"] = np.concatenate( - [remainder, feature["labels"]] - ).astype(np.int64) - - # Pad input_ids and attention_mask, ensuring proper alignment with labels - collated = self.tokenizer.pad( - features, - padding=self.padding, - max_length=self.query_max_len + self.passage_max_len, - return_tensors=return_tensors, - pad_to_multiple_of=self.pad_to_multiple_of, - ) - - # Apply masking to prevent training on prompt tokens - if "labels" in collated: - collated["labels"] = collated["labels"].clone().detach().to(torch.long) - collated["labels"][ - collated["labels"] == self.tokenizer.pad_token_id - ] = -100 # Mask padding tokens for labels - - return collated diff --git a/utils/finetuning/finetune_instruct/evaluate.py b/utils/finetuning/finetune_instruct/evaluate.py deleted file mode 100644 index 0adafc66..00000000 --- a/utils/finetuning/finetune_instruct/evaluate.py +++ /dev/null @@ -1,269 +0,0 @@ -import json -import os -import random -import re -import unicodedata -from multiprocessing import get_context - -import torch -from sklearn.metrics import accuracy_score, precision_recall_fscore_support -from tqdm import tqdm -from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig - -# Set CUDA devices -os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3,4,5,6,7" - - -class EvaluationScript: - def __init__( - self, model_path, adapter_path=None, devices=None, torch_dtype=torch.float16 - ): - self.model_path = model_path - self.adapter_path = adapter_path - self.torch_dtype = torch_dtype - self.devices = devices or list(range(torch.cuda.device_count())) - - # Initialize tokenizer - self.tokenizer = AutoTokenizer.from_pretrained( - model_path, trust_remote_code=True - ) - - # Initialize token IDs for responses - self._initialize_token_ids() - - def _initialize_token_ids(self): - responses = ["Match", "Mismatch", "Neutral"] - token_ids = [ - self.tokenizer(response, add_special_tokens=False)["input_ids"] - for response in responses - ] - self.match_token_id, self.mismatch_token_id, self.neutral_token_id = [ - ids[0] for ids in token_ids - ] - - def load_model(self, device): - print(f"Loading model on device cuda:{device}...") - quant_config = BitsAndBytesConfig(load_in_8bit=True) - model = AutoModelForCausalLM.from_pretrained( - self.model_path, - torch_dtype=self.torch_dtype, - quantization_config=quant_config, - device_map=f"cuda:{device}", - trust_remote_code=True, - ) - model.eval() - return model - - def preprocess_text(self, text): - match_a = re.search( - r"Statement A:\s*(.+?)(?=\nStatement B:|$)", text, re.DOTALL - ) - match_b = re.search(r"Statement B:\s*(.+)", text, re.DOTALL) - - statement_a = ( - unicodedata.normalize("NFKD", match_a.group(1).strip()) if match_a else "" - ) - statement_b = ( - unicodedata.normalize("NFKD", match_b.group(1).strip()) if match_b else "" - ) - - # remove unecessary punctuations - statement_a = re.sub(r"[^\w\s]", "", statement_a) - statement_b = re.sub(r"[^\w\s]", "", statement_b) - - combined_text = f"Statement A: {statement_a}\nStatement B: {statement_b}" - - return combined_text - - def create_messages(self, input_text): - messages = [ - { - "role": "system", - "content": ( - "You are a knowledgeable AI medical assistant. Your task is to evaluate the semantic consistency " - "and logical alignment between Statement A (patient description) and Statement B (eligibility criterion). " - "Apply the following rules strictly:\n" - "- Reply 'Match' if Statement A aligns with and satisfies Statement B.\n" - "- Reply 'Mismatch' if Statement A contradicts or is incompatible with Statement B.\n" - "- Reply 'Neutral' if Statement A and Statement B are unrelated, loosely related, or ambiguously connected " - "without clear alignment or contradiction.\n\n" - "Provide your response using only 'Match,' 'Mismatch,' or 'Neutral'." - ), - }, - # Few-shot example 1 - Match - { - "role": "user", - "content": ( - "Statement A: The patient has a confirmed diagnosis of Stage IV non-small cell lung cancer (NSCLC) " - "with an EGFR exon 19 deletion mutation.\n" - "Statement B: NSCLC cases associated with EGFR exon 19 mutations." - ), - }, - { - "role": "assistant", - "content": "Match", - }, - # Few-shot example 2 - Mismatch - { - "role": "user", - "content": ( - "Statement A: The patient has a history of allergic reactions to penicillin.\n" - "Statement B: No known severe hypersensitivity reactions to study drugs, especially to penicillin." - ), - }, - { - "role": "assistant", - "content": "Mismatch", - }, - # Few-shot example 3 - Neutral - { - "role": "user", - "content": ( - "Statement A: The patient is a 65-year-old male with mild osteoarthritis managed with physical therapy.\n" - "Statement B: Patients with respiratory disorders currently attending rehabilition and physical therapy." - ), - }, - { - "role": "assistant", - "content": "Neutral", - }, - # Input example to evaluate - { - "role": "user", - "content": input_text, - }, - ] - return messages - - def process_on_device(self, device, input_queue, output_queue): - model = self.load_model(device) - - while True: - input_data = input_queue.get() - if input_data is None: - break - - input_text = self.preprocess_text(input_data["input"]) - messages = self.create_messages(input_text) - prompt = self.tokenizer.apply_chat_template( - messages, tokenize=False, add_generation_prompt=True - ) - - inputs = self.tokenizer(prompt, return_tensors="pt").to(f"cuda:{device}") - - with torch.no_grad(): - outputs = model(**inputs, use_cache=False) - - last_token_logits = outputs.logits[0, -1, :] - probabilities = torch.softmax(last_token_logits, dim=-1) - top_prob, top_token_id = torch.topk(probabilities, 1) - prob = top_prob.item() - - if top_token_id == self.match_token_id: - answer = "Match" - elif top_token_id == self.mismatch_token_id: - answer = "Mismatch" - elif top_token_id == self.neutral_token_id: - answer = "Neutral" - else: - answer = "Unknown" - - result = { - "input": input_data["input"], - "ground_truth": input_data["output"], - "prediction": answer, - "llm_score": prob, - } - output_queue.put(result) - - def generate_predictions(self, dataset): - ctx = get_context("spawn") - input_queue = ctx.Queue() - output_queue = ctx.Queue() - - workers = [ - ctx.Process( - target=self.process_on_device, args=(device, input_queue, output_queue) - ) - for device in self.devices - ] - - for worker in workers: - worker.start() - - for entry in dataset: - input_queue.put(entry) - - for _ in self.devices: - input_queue.put(None) - - all_predictions = [] - for _ in tqdm(range(len(dataset)), desc="Processing inputs"): - all_predictions.append(output_queue.get()) - - for worker in workers: - worker.join() - - return all_predictions - - def evaluate(self, dataset, save_path="incorrect_predictions.jsonl"): - predictions = self.generate_predictions(dataset) - - incorrect_examples = [ - { - "input": entry["input"], - "ground_truth": entry["output"], - "prediction": pred["prediction"], - "llm_score": pred["llm_score"], - } - for entry, pred in zip(dataset, predictions) - if pred["prediction"] != entry["output"] - ] - - with open(save_path, "w", encoding="utf-8") as f: - for example in incorrect_examples: - json.dump(example, f) - f.write("\n") - - references = [entry["output"] for entry in dataset] - predictions_only = [pred["prediction"] for pred in predictions] - - accuracy = accuracy_score(references, predictions_only) - precision, recall, f1, _ = precision_recall_fscore_support( - references, predictions_only, average="weighted" - ) - - print(f"Incorrect examples saved to {save_path}") - - return { - "accuracy": accuracy, - "precision": precision, - "recall": recall, - "f1": f1, - } - - -if __name__ == "__main__": - model_path = "tiiuae/Falcon3-10B-Instruct" - adapter_path = None - devices = [0, 1] - - evaluator = EvaluationScript( - model_path=model_path, - adapter_path=adapter_path, - devices=devices, - torch_dtype=torch.float16, - ) - dataset_path = "finetuning_data/cleaned_filtered_test_data.jsonl" - with open(dataset_path, "r", encoding="utf-8") as f: - dataset = [json.loads(line) for line in f] - dataset = random.sample(dataset, 100) - # dataset = [ - # {"input": "Statement A: no history of liver diseases or kidney disease is present, and serum creatinine levels are maintained below 1.0 mg/dl.\nStatement B: participants must not have a history of liver diseases (such as hepatitis, biliary atresia, or cirrhosis) or kidney disease, defined by a serum creatinine level exceeding 1.0 mg/dl.", "output": "Match"} - - # ] - results = evaluator.evaluate(dataset) - - print("Evaluation Metrics:") - for metric, value in results.items(): - print(f"{metric.capitalize()}: {value:.4f}") diff --git a/utils/finetuning/finetune_instruct/evaluate_CoT.py b/utils/finetuning/finetune_instruct/evaluate_CoT.py deleted file mode 100644 index 7ce64d24..00000000 --- a/utils/finetuning/finetune_instruct/evaluate_CoT.py +++ /dev/null @@ -1,160 +0,0 @@ -import torch -import json -from bert_score import score -from transformers import ( - AutoModelForCausalLM, - AutoTokenizer, - BitsAndBytesConfig, - pipeline, -) -from peft import PeftModel -import random - - -def load_model(device, model_path, adapter_path): - """ - Loads the model on the specified device using 4-bit quantization. - """ - print(f"Loading model on device cuda:{device}...") - tokenizer = AutoTokenizer.from_pretrained(model_path) - tokenizer.pad_token = tokenizer.eos_token - quant_config = BitsAndBytesConfig( - load_in_4bit=True, - bnb_4bit_use_double_quant=True, - bnb_4bit_quant_type="nf4", - bnb_4bit_compute_dtype=torch.float16, - ) - base_model = AutoModelForCausalLM.from_pretrained( - model_path, - torch_dtype=torch.float16, - device_map=f"cuda:{device}", - attn_implementation="flash_attention_2", - trust_remote_code=True, - quantization_config=quant_config, - ) - - pipe = pipeline( - "text-generation", - model=base_model, - tokenizer=tokenizer, - max_new_tokens=1024, - do_sample=False, - repetition_penalty=1.05, - ) - - # Load the fine-tuned adapter model - pipe.model = PeftModel.from_pretrained(base_model, adapter_path) - - return pipe, tokenizer - - -def generate_output(pipe, tokenizer, instruction, input_text): - """ - Generates model output using the instruction as system prompt and input as user prompt. - This version instructs the model to include its internal chain-of-thought exactly once, - followed by the final answer. - """ - # Instruct the model to reveal its chain-of-thought once. - system_msg = ( - instruction + "\nPlease include your internal chain-of-thought exactly once, " - "followed by the final answer. Do not repeat the chain-of-thought." - ) - messages = [ - {"role": "system", "content": system_msg}, - {"role": "user", "content": input_text}, - ] - prompt = tokenizer.apply_chat_template( - messages, tokenize=False, add_generation_prompt=True - ) - generated = pipe(prompt)[0]["generated_text"].strip() - - # Optional post-processing: If the chain-of-thought is repeated, keep only the first occurrence. - # This snippet assumes the model labels its reasoning with "Chain-of-thought:" and final answer with "Final Answer:". - if generated.count("Chain-of-thought:") > 1: - # Split on the label and reconstruct output using only the first instance. - parts = generated.split("Chain-of-thought:") - first_cot = ( - parts[1].split("Final Answer:")[0] - if "Final Answer:" in parts[1] - else parts[1] - ) - final_answer = "" - if "Final Answer:" in generated: - final_answer = "Final Answer:" + generated.split("Final Answer:")[-1] - # Rebuild the output with a single chain-of-thought section. - generated = parts[0] + "Chain-of-thought:" + first_cot + "\n" + final_answer - generated = generated.strip() - - return generated - - -def compute_bertscore( - model_outputs, - reference_outputs, - lang="en", - model_type="allenai/longformer-base-4096", -): - """ - Computes BERTScore for evaluating model-generated outputs against reference texts. - """ - assert len(model_outputs) == len(reference_outputs), ( - "Mismatch in number of model and reference outputs" - ) - - print("Computing BERTScore...") - precision, recall, f1 = score( - model_outputs, - reference_outputs, - lang=lang, - model_type=model_type, - device="cuda" if torch.cuda.is_available() else "cpu", - ) - - return { - "precision": precision.mean().item(), - "recall": recall.mean().item(), - "f1": f1.mean().item(), - } - - -def main(): - device = 0 - model_path = "microsoft/phi-4" - adapter_path = "finetuned_phi_reasoning/" - pipe, tokenizer = load_model(device, model_path, adapter_path) - - file_path = "finetuning_data/medical_o1_reasoning_test.jsonl" - model_outputs = [] - reference_outputs = [] - - with open(file_path, "r") as f: - lines = f.readlines() - - # Randomly select 15 test cases - selected_lines = random.sample(lines, 500) - - for idx, line in enumerate(selected_lines, 1): - print(f"Processing randomly selected line {idx}") - data = json.loads(line) - generated_text = generate_output( - pipe, tokenizer, data["instruction"], data["input"] - ) - print("Generated Output:\n", generated_text, "\n") - model_outputs.append(generated_text) - reference_outputs.append(data["output"]) - - results = compute_bertscore(model_outputs, reference_outputs) - - print("\nBERTScore Results:") - print(f"Precision: {results['precision']:.4f}") - print(f"Recall: {results['recall']:.4f}") - print(f"F1 Score: {results['f1']:.4f}") - - with open("bertscore_results.txt", "w") as f: - f.write(f"Precision: {results['precision']:.4f}\n") - f.write(f"Recall: {results['recall']:.4f}\n") - f.write(f"F1 Score: {results['f1']:.4f}\n") - - -if __name__ == "__main__": - main() diff --git a/utils/finetuning/finetune_instruct/evaluate_gemma2.py b/utils/finetuning/finetune_instruct/evaluate_gemma2.py deleted file mode 100644 index a38227b0..00000000 --- a/utils/finetuning/finetune_instruct/evaluate_gemma2.py +++ /dev/null @@ -1,242 +0,0 @@ -import json -import os -import re -import unicodedata -from multiprocessing import get_context - -import torch -from peft import PeftModel -from sklearn.metrics import accuracy_score, precision_recall_fscore_support -from tqdm import tqdm -from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig - -# Set CUDA devices -os.environ["CUDA_VISIBLE_DEVICES"] = "1" - - -class EvaluationScript: - def __init__( - self, model_path, adapter_path=None, devices=None, torch_dtype=torch.float16 - ): - self.model_path = model_path - self.adapter_path = adapter_path - self.torch_dtype = torch_dtype - self.devices = devices or list(range(torch.cuda.device_count())) - - # Initialize tokenizer - self.tokenizer = AutoTokenizer.from_pretrained( - model_path, trust_remote_code=True - ) - - # Initialize token IDs for responses "Yes" and "No" - self._initialize_token_ids() - - def _initialize_token_ids(self): - responses = ["Yes", "No"] - token_ids = [ - self.tokenizer(response, add_special_tokens=False)["input_ids"] - for response in responses - ] - self.yes_token_id, self.no_token_id = [ids[0] for ids in token_ids] - - def load_model(self, device): - """ - Loads the model on the specified device using 4-bit quantization. - If an adapter path is provided, it loads the adapter using PEFT. - """ - print(f"Loading model on device cuda:{device}...") - quant_config = BitsAndBytesConfig( - load_in_4bit=True, - bnb_4bit_use_double_quant=True, - bnb_4bit_quant_type="nf4", - bnb_4bit_compute_dtype=torch.float16, - ) - model = AutoModelForCausalLM.from_pretrained( - self.model_path, - torch_dtype=self.torch_dtype, - device_map=f"cuda:{device}", - attn_implementation="flash_attention_2", - quantization_config=quant_config, - trust_remote_code=True, - ) - if self.adapter_path is not None: - model = PeftModel.from_pretrained(model, self.adapter_path) - model.eval() - return model - - def preprocess_text(self, text): - # Extract Statement A and Statement B using regex. - match_a = re.search( - r"Statement A:\s*(.+?)(?=\nStatement B:|$)", text, re.DOTALL - ) - match_b = re.search(r"Statement B:\s*(.+)", text, re.DOTALL) - - statement_a = ( - unicodedata.normalize("NFKD", match_a.group(1).strip()) if match_a else "" - ) - statement_b = ( - unicodedata.normalize("NFKD", match_b.group(1).strip()) if match_b else "" - ) - - # Optionally, remove unnecessary punctuations - statement_a = re.sub(r"[^\w\s]", "", statement_a) - statement_b = re.sub(r"[^\w\s]", "", statement_b) - - combined_text = f"Statement A: {statement_a}\nStatement B: {statement_b}" - return combined_text - - def create_messages(self, input_text): - # Create a prompt with only the system instruction and the input example. - messages = [ - { - "role": "user", - "content": ( - "You are a clinical assistant tasked with determining whether the patient information (Statement A) " - "is related to the " - "trial eligibility criterion (Statement B). Respond with 'Yes' if Statement A contains sufficient " - "information to make this evaluation, or 'No' if it does not." - ), - }, - {"role": "assistant", "content": " "}, - { - "role": "user", - "content": input_text, - }, - ] - return messages - - def process_on_device(self, device, input_queue, output_queue): - model = self.load_model(device) - - while True: - input_data = input_queue.get() - if input_data is None: - break - - # Preprocess the input text (extract and clean Statement A and B) - input_text = self.preprocess_text(input_data["input"]) - messages = self.create_messages(input_text) - - # Use the model's chat template if available to format the prompt. - prompt = self.tokenizer.apply_chat_template( - messages, tokenize=False, add_generation_prompt=True - ) - inputs = self.tokenizer(prompt, return_tensors="pt").to(f"cuda:{device}") - - with torch.no_grad(): - outputs = model(**inputs, use_cache=False) - - # Get the logits of the last token and determine the top prediction. - last_token_logits = outputs.logits[0, -1, :] - probabilities = torch.softmax(last_token_logits, dim=-1) - top_prob, top_token_id = torch.topk(probabilities, 1) - prob = top_prob.item() - - if top_token_id == self.yes_token_id: - answer = "Yes" - elif top_token_id == self.no_token_id: - answer = "No" - else: - answer = "Unknown" - - result = { - "input": input_data["input"], - "ground_truth": input_data["output"], - "prediction": answer, - "llm_score": prob, - } - output_queue.put(result) - - def generate_predictions(self, dataset): - ctx = get_context("spawn") - input_queue = ctx.Queue() - output_queue = ctx.Queue() - - workers = [ - ctx.Process( - target=self.process_on_device, args=(device, input_queue, output_queue) - ) - for device in self.devices - ] - - for worker in workers: - worker.start() - - for entry in dataset: - input_queue.put(entry) - - # Signal workers to exit - for _ in self.devices: - input_queue.put(None) - - all_predictions = [] - for _ in tqdm(range(len(dataset)), desc="Processing inputs"): - all_predictions.append(output_queue.get()) - - for worker in workers: - worker.join() - - return all_predictions - - def evaluate(self, dataset, save_path="incorrect_predictions.jsonl"): - predictions = self.generate_predictions(dataset) - - incorrect_examples = [ - { - "input": entry["input"], - "ground_truth": entry["output"], - "prediction": pred["prediction"], - "llm_score": pred["llm_score"], - } - for entry, pred in zip(dataset, predictions) - if pred["prediction"] != entry["output"] - ] - with open(save_path, "w", encoding="utf-8") as f: - for example in incorrect_examples: - json.dump(example, f) - f.write("\n") - - references = [entry["output"] for entry in dataset] - predictions_only = [pred["prediction"] for pred in predictions] - - accuracy = accuracy_score(references, predictions_only) - precision, recall, f1, _ = precision_recall_fscore_support( - references, predictions_only, average="weighted", zero_division=0 - ) - - print(f"Incorrect examples saved to {save_path}") - - return { - "accuracy": accuracy, - "precision": precision, - "recall": recall, - "f1": f1, - } - - -if __name__ == "__main__": - # Use the model from the specified path. - model_path = "google/gemma-2-2b-it" - # Set adapter_path to a valid path if you want to load a PEFT adapter; otherwise, keep it as None. - adapter_path = "finetuned_gemma2/" - devices = [0] # Adjust the devices as needed. - - evaluator = EvaluationScript( - model_path=model_path, - adapter_path=adapter_path, - devices=devices, - torch_dtype=torch.float16, - ) - - # Path to the transformed test dataset. - dataset_path = "finetuning_data/transformed_test_data.jsonl" - with open(dataset_path, "r", encoding="utf-8") as f: - dataset = [json.loads(line) for line in f] - # Optionally, sample a subset for evaluation. - # dataset = random.sample(dataset, 100) - - results = evaluator.evaluate(dataset) - - print("Evaluation Metrics:") - for metric, value in results.items(): - print(f"{metric.capitalize()}: {value:.4f}") diff --git a/utils/finetuning/finetune_instruct/evaluate_llama.py b/utils/finetuning/finetune_instruct/evaluate_llama.py deleted file mode 100644 index 45a40bb5..00000000 --- a/utils/finetuning/finetune_instruct/evaluate_llama.py +++ /dev/null @@ -1,202 +0,0 @@ -import json - -import torch -import transformers -from sklearn.metrics import accuracy_score, precision_recall_fscore_support - - -class LlamaMatchMismatchEvaluator: - """ - Evaluates a Llama-based instruction model on a classification task: - ('Match', 'Mismatch', or 'Neutral'). - - Each data entry is expected to contain: - { - "instruction": , - "input": , - "output": - } - """ - - def __init__( - self, - model_id: str = "ContactDoctor/Bio-Medical-Llama-3-8B", - torch_dtype: torch.dtype = torch.bfloat16, - device_map: str = "auto", - ): - """ - Initialize the evaluator with the specified Llama-based model. - - :param model_id: Hugging Face model ID (must be Llama-based). - :param torch_dtype: Floating-point precision (bfloat16 recommended on GPUs like A100). - :param device_map: Device mapping setting for large models, e.g. "auto". - """ - self.model_id = model_id - self.torch_dtype = torch_dtype - self.device_map = device_map - - # Create a text-generation pipeline for Llama - self.pipe = transformers.pipeline( - task="text-generation", - model=self.model_id, - model_kwargs={"torch_dtype": self.torch_dtype}, - device_map=self.device_map, - trust_remote_code=True, - ) - - # Grab tokenizer from the pipeline (useful for custom logic) - self.tokenizer = self.pipe.tokenizer - - # Define a system prompt for the conversation: - # (Customizable to remind the model of its domain) - self.system_prompt = ( - "You are a clinical trials expert specializing in matching patients " - "to eligibility criteria. You must respond with exactly one of: " - "'Match', 'Mismatch', or 'Neutral'." - ) - - def _build_prompt(self, data_entry): - """ - Builds a single prompt (string) that includes both system and user instructions. - Uses apply_chat_template to emulate a conversation. - - :param data_entry: A dict with keys: "instruction", "input". - :return: A single text prompt ready for the pipeline. - """ - # Format role-based messages - messages = [ - {"role": "system", "content": self.system_prompt}, - { - "role": "user", - "content": f"{data_entry['instruction']}\n\n" - f"{data_entry['input']}\n\n" - "Respond with 'Match', 'Mismatch', or 'Neutral' only.", - }, - ] - - # Llama's apply_chat_template for multi-turn chat - prompt = self.tokenizer.apply_chat_template( - [messages], # pass a nested list of conversation turns - tokenize=False, - add_generation_prompt=True, - ) - return prompt - - def _extract_class_label(self, generated_text: str) -> str: - """ - Attempts to extract the predicted label from the model's output text. - Returns 'Match', 'Mismatch', or 'Neutral' if found; otherwise 'Unknown'. - - :param generated_text: The raw string output from the pipeline. - :return: One of "Match", "Mismatch", "Neutral", or "Unknown". - """ - # Simple case-insensitive substring check. You can refine parsing if needed. - for label in ["Match", "Mismatch", "Neutral"]: - if label.lower() in generated_text.lower(): - return label - return "Unknown" - - def generate_predictions( - self, - dataset: list, - max_new_tokens: int = 64, - temperature: float = 0.0, - top_p: float = 1.0, - ) -> list: - """ - Generates label predictions for each dataset entry using the pipeline. - - :param dataset: List of examples, each with "instruction", "input". - :param max_new_tokens: Maximum tokens to generate for each inference call. - :param temperature: Temperature for sampling. 0.0 = deterministic. - :param top_p: Nucleus sampling parameter (1.0 = no nucleus sampling). - :return: List of predicted labels (strings). - """ - predictions = [] - for data_entry in dataset: - # Build the prompt from system + user messages - prompt = self._build_prompt(data_entry) - - # Define custom end-of-sequence tokens if needed. - # Some Llama-based models use custom tokens or just rely on eos_token_id. - eos_token_ids = [ - self.tokenizer.eos_token_id, - # If your model uses <|end_of_turn|> or similar, convert to ID: - # self.tokenizer.convert_tokens_to_ids("<|end_of_turn|>") - ] - - # Run inference. We get a list of generated sequences; pick the first. - outputs = self.pipe( - prompt, - max_new_tokens=max_new_tokens, - eos_token_id=eos_token_ids, - do_sample=(temperature > 0.0), - temperature=temperature, - top_p=top_p, - ) - # The pipeline returns a list of dicts. We extract the full text from the first. - raw_generated = outputs[0]["generated_text"] - - # Slice out only the newly generated portion if desired. - # The prompt is the first part; everything after that is the response. - response_text = raw_generated[len(prompt) :] - - # Extract class label from the response - predicted_label = self._extract_class_label(response_text) - predictions.append(predicted_label) - - return predictions - - def evaluate(self, dataset: list) -> dict: - """ - Generates predictions and computes the classification metrics. - - :param dataset: List of examples, each with "output" as the ground truth label. - :return: Dictionary with accuracy, precision, recall, and f1 (weighted). - """ - # Ground truth labels - references = [entry["output"] for entry in dataset] - # Predictions - predictions = self.generate_predictions(dataset) - - # Compute metrics - accuracy = accuracy_score(references, predictions) - precision, recall, f1, _ = precision_recall_fscore_support( - references, - predictions, - average="weighted", - labels=["Match", "Mismatch", "Neutral"], - ) - - return { - "accuracy": accuracy, - "precision": precision, - "recall": recall, - "f1": f1, - } - - -if __name__ == "__main__": - # Example usage: - - # 1. Load a dataset from JSONL or any other source. - # Each line should have keys: 'instruction', 'input', 'output' - # where 'output' is one of "Match", "Mismatch", "Neutral". - dataset_path = "cleaned_filtered_test_data.jsonl" - with open(dataset_path, "r", encoding="utf-8") as f: - dataset = [json.loads(line) for line in f] - - # 2. Initialize the evaluator - evaluator = LlamaMatchMismatchEvaluator( - model_id="ContactDoctor/Bio-Medical-Llama-3-8B", - torch_dtype=torch.bfloat16, # or torch.float16 - device_map="auto", - ) - - # 3. Run evaluation - results = evaluator.evaluate(dataset) - - # 4. Print results - print("Evaluation Metrics:") - for metric, value in results.items(): - print(f"{metric.capitalize()}: {value:.4f}") diff --git a/utils/finetuning/finetune_instruct/finetune.sh b/utils/finetuning/finetune_instruct/finetune.sh deleted file mode 100644 index 4415ce8f..00000000 --- a/utils/finetuning/finetune_instruct/finetune.sh +++ /dev/null @@ -1,25 +0,0 @@ -nohup torchrun --nproc_per_node 1 ./run.py \ - --output_dir ./finetuned_phi_reasoning \ - --model_name_or_path microsoft/phi-4 \ - --train_data ./finetuning_data/medical_o1_reasoning_train.jsonl\ - --learning_rate 5e-5 \ - --num_train_epochs 2 \ - --per_device_train_batch_size 3 \ - --gradient_accumulation_steps 16 \ - --dataloader_drop_last True \ - --query_max_len 1024 \ - --passage_max_len 1024 \ - --logging_steps 10 \ - --save_steps 1000 \ - --save_total_limit 5 \ - --ddp_find_unused_parameters False \ - --warmup_ratio 0.1 \ - --use_lora True \ - --lora_rank 32 \ - --lora_alpha 64 \ - --lora_dropout 0.1 \ - --use_flash_attn True \ - --max_example_num_per_dataset 26000 \ - --cache_dir scratch/huggingface_cache/hub \ - --target_modules q_proj k_proj v_proj o_proj gate_proj up_proj down_proj \ - --bf16 > ./finetune_log.log 2>&1 & disown \ No newline at end of file diff --git a/utils/finetuning/finetune_instruct/load_model.py b/utils/finetuning/finetune_instruct/load_model.py deleted file mode 100644 index c3aeb3d8..00000000 --- a/utils/finetuning/finetune_instruct/load_model.py +++ /dev/null @@ -1,64 +0,0 @@ -import torch -from peft import LoraConfig, PeftModel, TaskType, get_peft_model -from transformers import AutoModelForCausalLM, BitsAndBytesConfig - -# from local_gemma import LocalGemma2ForCausalLM - - -def get_model(model_args, training_args): - # model = LocalGemma2ForCausalLM.from_pretrained(model_args.model_name_or_path, - # preset="auto", - # attn_implementation='eager', - # cache_dir=model_args.cache_dir, - # torch_dtype=torch.float16 if training_args.fp16 else torch.bfloat16, - # token=model_args.token, - # from_tf=bool(".ckpt" in model_args.model_name_or_path), - # trust_remote_code=True, - # use_flash_attention_2=True if model_args.use_flash_attn else False) - quantization_config = BitsAndBytesConfig( - load_in_4bit=True, - bnb_4bit_use_double_quant=True, - bnb_4bit_quant_type="nf4", - bnb_4bit_compute_dtype="float16", - ) - - model = AutoModelForCausalLM.from_pretrained( - model_args.model_name_or_path, - torch_dtype=torch.float16 if training_args.fp16 else torch.bfloat16, - token=model_args.token, - cache_dir=model_args.cache_dir, - from_tf=bool(".ckpt" in model_args.model_name_or_path), - trust_remote_code=True, - attn_implementation="flash_attention_2", - quantization_config=quantization_config, - ) - - model = model.to("cuda") - - if torch.cuda.device_count() > 1: # If more than 1 GPU - model.is_parallelizable = True - model.model_parallel = True - - model.config.use_cache = False - - if model_args.from_peft is not None: - model = PeftModel.from_pretrained( - model, model_args.from_peft, is_trainable=True - ) - model.print_trainable_parameters() - else: - if model_args.use_lora: - peft_config = LoraConfig( - task_type=TaskType.CAUSAL_LM, - inference_mode=False, - r=model_args.lora_rank, - target_modules=model_args.target_modules, - lora_alpha=model_args.lora_alpha, - lora_dropout=model_args.lora_dropout, - modules_to_save=model_args.lora_extra_parameters, - ) - model = get_peft_model(model, peft_config) - model.print_trainable_parameters() - - print(model) - return model diff --git a/utils/finetuning/finetune_instruct/modeling.py b/utils/finetuning/finetune_instruct/modeling.py deleted file mode 100644 index d8bc5bcf..00000000 --- a/utils/finetuning/finetune_instruct/modeling.py +++ /dev/null @@ -1,83 +0,0 @@ -import logging -from dataclasses import dataclass -from typing import Optional - -import torch -from torch import Tensor, nn -from transformers import AutoTokenizer -from transformers.modeling_outputs import ModelOutput - -logger = logging.getLogger(__name__) - - -@dataclass -class LMOutput(ModelOutput): - loss: Optional[Tensor] = None - logits: Optional[Tensor] = None - - -class LanguageModelFinetuner(nn.Module): - def __init__( - self, - model: nn.Module, - tokenizer: AutoTokenizer = None, - train_batch_size: int = 4, - enable_gradient_checkpointing: bool = False, - ): - super().__init__() - self.model = model - self.tokenizer = tokenizer - self.train_batch_size = train_batch_size - - if self.model.config.pad_token_id is None and self.tokenizer is not None: - self.model.config.pad_token_id = self.tokenizer.pad_token_id - self.config = self.model.config - - if enable_gradient_checkpointing and hasattr( - self.model, "gradient_checkpointing_enable" - ): - self.model.gradient_checkpointing_enable() - - def gradient_checkpointing_enable(self, **kwargs): - if hasattr(self.model, "gradient_checkpointing_enable"): - self.model.gradient_checkpointing_enable(**kwargs) - - def enable_input_require_grads(self, **kwargs): - if hasattr(self.model, "enable_input_require_grads"): - self.model.enable_input_require_grads(**kwargs) - - def forward( - self, - input_ids: torch.Tensor = None, - attention_mask: torch.Tensor = None, - labels: torch.Tensor = None, - ) -> LMOutput: - device = next( - self.model.parameters() - ).device # Move inputs to the model's device - input_ids = input_ids.to(device) - attention_mask = attention_mask.to(device) - if labels is not None: - labels = labels.to(device) - - outputs = self.model( - input_ids=input_ids, attention_mask=attention_mask, labels=labels - ) - - return LMOutput( - loss=outputs.loss if hasattr(outputs, "loss") else None, - logits=outputs.logits if hasattr(outputs, "logits") else None, - ) - - def save(self, output_dir: str): - # Save the model (with weights) to output_dir - state_dict = self.model.state_dict() - state_dict = type(state_dict)( - {k: v.clone().cpu() for k, v in state_dict.items()} - ) - self.model.save_pretrained(output_dir, state_dict=state_dict) - - def save_pretrained(self, **kwargs): - if self.tokenizer is not None: - self.tokenizer.save_pretrained(**kwargs) - return self.model.save_pretrained(**kwargs) diff --git a/utils/finetuning/finetune_instruct/run.py b/utils/finetuning/finetune_instruct/run.py deleted file mode 100644 index 9aa3045a..00000000 --- a/utils/finetuning/finetune_instruct/run.py +++ /dev/null @@ -1,161 +0,0 @@ -import logging -import os -from pathlib import Path - -import torch -import torch.distributed as dist - -from transformers import AutoConfig, AutoTokenizer, HfArgumentParser, set_seed - -from arguments import ( - ModelArguments, - DataArguments, - SFTTrainingArguments as TrainingArguments, -) -from data import TrainDataset, DataCollatorForFinetuning -from modeling import LanguageModelFinetuner -from trainer import SFTTrainer -from load_model import get_model - - -logger = logging.getLogger(__name__) - -# Initialize the distributed environment if needed -dist.init_process_group(backend="nccl") - -# Get the rank of the current process -rank = dist.get_rank() - -# Map the rank to a specific GPU -device_id = rank # This assumes rank maps to GPU ID -torch.cuda.set_device(device_id) - -print( - f"Rank {rank} using device {device_id} on {torch.cuda.get_device_name(device_id)}" -) - - -def main(): - parser = HfArgumentParser((ModelArguments, DataArguments, TrainingArguments)) - model_args, data_args, training_args = parser.parse_args_into_dataclasses() - model_args: ModelArguments - data_args: DataArguments - training_args: TrainingArguments - - if ( - os.path.exists(training_args.output_dir) - and os.listdir(training_args.output_dir) - and training_args.do_train - and not training_args.overwrite_output_dir - ): - raise ValueError( - f"Output directory ({training_args.output_dir}) already exists and is not empty. " - f"Use --overwrite_output_dir to overcome." - ) - - # Setup logging - logging.basicConfig( - format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", - datefmt="%m/%d/%Y %H:%M:%S", - level=logging.INFO if training_args.local_rank in [-1, 0] else logging.WARN, - ) - logger.warning( - "Process rank: %s, device: %s, n_gpu: %s, distributed training: %s, 16-bits training: %s", - training_args.local_rank, - training_args.device, - training_args.n_gpu, - bool(training_args.local_rank != -1), - training_args.fp16, - ) - logger.info("Training/evaluation parameters %s", training_args) - logger.info("Model parameters %s", model_args) - logger.info("Data parameters %s", data_args) - - # Set seed - set_seed(training_args.seed) - - base_model = get_model(model_args, training_args) - - # Load tokenizer - tokenizer = AutoTokenizer.from_pretrained( - model_args.tokenizer_name - if model_args.tokenizer_name - else model_args.model_name_or_path, - cache_dir=model_args.cache_dir, - use_fast=not model_args.use_slow_tokenizer, - trust_remote_code=True, - token=model_args.token, - ) - - # Ensure pad_token_id is defined - if tokenizer.pad_token_id is None: - if tokenizer.unk_token_id is not None: - tokenizer.pad_token_id = tokenizer.unk_token_id - else: - # As a fallback if the tokenizer doesn't have unk_token_id, set pad_token_id to a known token - # If using a special tokenizer, make sure to adapt accordingly. - tokenizer.pad_token_id = tokenizer.eos_token_id - - config = AutoConfig.from_pretrained( - model_args.config_name - if model_args.config_name - else model_args.model_name_or_path, - cache_dir=model_args.cache_dir, - trust_remote_code=True, - ) - logger.info("Config: %s", config) - - model = LanguageModelFinetuner( - model=base_model, - tokenizer=tokenizer, - train_batch_size=training_args.per_device_train_batch_size, - ) - - if training_args.gradient_checkpointing: - model.enable_input_require_grads() - - # Load the training dataset - train_dataset = TrainDataset(args=data_args, tokenizer=tokenizer) - - # Setup data collator - data_collator = DataCollatorForFinetuning( - tokenizer=tokenizer, - query_max_len=data_args.query_max_len, - passage_max_len=data_args.passage_max_len, - pad_to_multiple_of=8, - return_tensors="pt", - padding=True, - ) - - trainer = SFTTrainer( - model=model, - args=training_args, - train_dataset=train_dataset, - data_collator=data_collator, - tokenizer=tokenizer, - ) - trainer.use_lora = model_args.use_lora - - Path(training_args.output_dir).mkdir(parents=True, exist_ok=True) - - # Training - trainer.train(resume_from_checkpoint=training_args.resume_from_checkpoint) - trainer.save_model() - - # If not using LoRA, you can save a final checkpoint if desired - if not model_args.use_lora and trainer.deepspeed is not None: - checkpoint_dir = os.path.join(training_args.output_dir, "checkpoint-final") - trainer.deepspeed.save_checkpoint(checkpoint_dir) - - # If world process zero, save tokenizer - if trainer.is_world_process_zero(): - tokenizer.save_pretrained(training_args.output_dir) - - -if __name__ == "__main__": - try: - main() - finally: - # Ensure all processes finalize - dist.barrier() # Synchronize all processes - dist.destroy_process_group() # Clean up diff --git a/utils/finetuning/finetune_instruct/split_train_test.py b/utils/finetuning/finetune_instruct/split_train_test.py deleted file mode 100644 index b2f0bfec..00000000 --- a/utils/finetuning/finetune_instruct/split_train_test.py +++ /dev/null @@ -1,27 +0,0 @@ -import json - -from sklearn.model_selection import train_test_split - -# File paths -input_file = "medical_o1_reasoning.jsonl" -train_file = "medical_o1_reasoning_train.jsonl" -test_file = "medical_o1_reasoning_test.jsonl" - -# Load data -with open(input_file, "r") as file: - data = [json.loads(line) for line in file] - -# Split data -train_data, test_data = train_test_split(data, test_size=0.1, random_state=42) - -# Save to JSONL -with open(train_file, "w") as file: - for item in train_data: - file.write(json.dumps(item) + "\n") - -with open(test_file, "w") as file: - for item in test_data: - file.write(json.dumps(item) + "\n") - -print(f"Train set size: {len(train_data)}") -print(f"Test set size: {len(test_data)}") diff --git a/utils/finetuning/finetune_instruct/trainer.py b/utils/finetuning/finetune_instruct/trainer.py deleted file mode 100644 index c7da4ea7..00000000 --- a/utils/finetuning/finetune_instruct/trainer.py +++ /dev/null @@ -1,70 +0,0 @@ -import logging -import os -from typing import Optional - -import torch -from peft import get_peft_model_state_dict -from transformers.integrations import is_deepspeed_zero3_enabled -from transformers.trainer import Trainer - -logger = logging.getLogger(__name__) - - -class SFTTrainer(Trainer): - use_lora: bool - - def _save(self, output_dir: Optional[str] = None, state_dict=None): - # Custom saving logic depending on whether we're using LoRA or not - if not self.use_lora: - # If not using LoRA, just use the default save implementation - super()._save(output_dir, state_dict) - return - - # Using LoRA - output_dir = output_dir if output_dir is not None else self.args.output_dir - os.makedirs(output_dir, exist_ok=True) - logger.info("Saving model checkpoint to %s", output_dir) - - # Ensure model has the `save` method implemented - if not hasattr(self.model, "save"): - raise NotImplementedError( - f"MODEL {self.model.__class__.__name__} does not support save interface" - ) - else: - self.model.save(output_dir) - - # Save training arguments - torch.save(self.args, os.path.join(output_dir, "training_args.bin")) - - # If using DeepSpeed ZeRO-3, save LoRA adapters separately - if is_deepspeed_zero3_enabled(): - if state_dict is None: - state_dict = self.model.state_dict() - prefix = "model." - assert all(k.startswith(prefix) for k in state_dict.keys()), list( - state_dict.keys() - ) - state_dict = {k[len(prefix) :]: v for k, v in state_dict.items()} - lora_state_dict = get_peft_model_state_dict(self.model.model, state_dict) - if self.args.process_index <= 0: - torch.save( - lora_state_dict, os.path.join(output_dir, "adapter_model.bin") - ) - logger.info(f"Saved LoRA adapter model at {output_dir}") - - def compute_loss( - self, model, inputs, return_outputs=False, num_items_in_batch=None - ): - """ - How the loss is computed by Trainer. - For causal language modeling tasks, the model returns the loss directly if labels are provided. - """ - outputs = model(**inputs) - loss = outputs.loss - - # Optionally use num_items_in_batch if needed for custom logic - if num_items_in_batch is not None: - # Example: Adjust loss based on batch size if required - pass - - return (loss, outputs) if return_outputs else loss diff --git a/utils/gpt/gpt-generate-summaries.py b/utils/gpt/gpt-generate-summaries.py deleted file mode 100644 index dbf5c3ac..00000000 --- a/utils/gpt/gpt-generate-summaries.py +++ /dev/null @@ -1,218 +0,0 @@ -import json -import os -from typing import List, Dict, Optional -from langchain_community.chat_models import ChatOpenAI -from langchain.schema import HumanMessage -from pydantic import BaseModel, Field -import re - -# Set OpenAI API key -os.environ["OPENAI_API_KEY"] = "" - - -# Define the schema for structured output -class PatientStory(BaseModel): - condition: Optional[str] = Field( - default=None, description="The main condition of the patient." - ) - synonyms: Optional[List[str]] = Field( - default=None, description="Synonyms or related terms for the main condition." - ) - age: Optional[str] = Field(default=None, description="The age of the patient.") - gender: Optional[str] = Field( - default=None, description="The gender of the patient." - ) - meaningful_sentences: List[str] = Field( - description="A list of factual, meaningful sentences describing the patient's conditions and entities." - ) - - -# Initialize OpenAI LLM -llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.5, top_p=0.9) - - -# Function to extract age and gender from the raw description -def extract_age_and_gender(description: str) -> Dict[str, Optional[str]]: - """ - Extracts age and gender information from the patient description. - """ - age = None - gender = None - - # Regex patterns for extracting age and gender - age_pattern = r"(\b\d{1,3}\b)-?(year-old|yr-old|years old)" - gender_pattern = r"\b(male|female|man|woman|boy|girl|gentleman|lady)\b" - - age_match = re.search(age_pattern, description, re.IGNORECASE) - gender_match = re.search(gender_pattern, description, re.IGNORECASE) - - if age_match: - age = age_match.group(1) - if gender_match: - gender = gender_match.group(0).lower() - - # Normalize gender - if gender in {"man", "male", "boy", "gentleman"}: - gender = "male" - elif gender in {"woman", "female", "girl", "lady"}: - gender = "female" - - return {"age": age, "gender": gender} - - -# Function to create meaningful sentences for entities -def generate_sentences(description: str, entities: List[str]) -> List[str]: - """ - Generates meaningful sentences for each entity in the description. - """ - prompt = f""" - You are a highly skilled medical assistant tasked with rewriting patient descriptions into factual, descriptive narratives. Each entity provided must be described in its own meaningful sentence. The sentences should strictly describe the patient and avoid making inferences, assumptions, or suggestions. - - Patient Description: - {description} - - Entities: - {json.dumps(entities)} - - Guidelines for writing the sentences: - - Each sentence must describe one entity factually, based on the information provided in the description or the entities list. - - Avoid making inferences, or suggesting potential outcomes, or suggesting improvements (e.g., no phrases like 'critical for improving' or 'should focus on'). - - Maintain a formal, clinical tone suitable for medical documentation. - - Ensure statements look as they are written by a medical professional in an official medical record. - - Ensure that the narrative remains coherent and logical when all sentences are read together. As if they are part of a single patient summary. - - Ensure to adhere to the description when describing the patient without adding any new information not found in the description. - - Provide the output as a JSON object with the key 'meaningful_sentences' containing the list of sentences. - """ - response = llm.invoke( - [HumanMessage(content=prompt)] - ) # Use invoke for LangChain models - try: - # Clean Markdown formatting if present - structured_output = ( - response.content.strip().strip("```json").strip("```").strip() - ) - return PatientStory.parse_raw(structured_output).meaningful_sentences - except Exception as e: - print(f"Error parsing response: {e}") - return [f"Error generating sentences for description: {description}"] - - -# Function to prompt the model to extract the patient's age and gender -def prompt_extract_age_and_gender(description: str) -> Dict[str, Optional[str]]: - """ - Uses the model to extract age and gender information from the patient description. - """ - prompt = f""" - You are a highly skilled medical assistant tasked with identifying specific information from patient descriptions. - - Patient Description: - {description} - - Extract the following information: - - Age of the patient: Explicitly mention the age if it is present in the description. - - Gender of the patient: Extract gender if it is stated in the description. - - Normalize the Age to an integer number and Gender to either Male or Female - - If not mentioned at all in the description, provide 'None' for both age and gender. - - Provide the output as a JSON object with the keys 'age' and 'gender'. - """ - response = llm.invoke([HumanMessage(content=prompt)]) - try: - # Parse the JSON response from the model - structured_output = ( - response.content.strip().strip("```json").strip("```").strip() - ) - extracted_info = json.loads(structured_output) - return { - "age": extracted_info.get("age"), - "gender": extracted_info.get("gender"), - } - except Exception as e: - print(f"Error extracting age and gender: {e}") - return {"age": None, "gender": None} - - -def prompt_extract_main_condition(description: str) -> Dict[str, Optional[str]]: - """ - Uses the model to extract the main condition from the patient description. - """ - prompt = f""" - You are a highly skilled medical assistant tasked with identifying the main condition/disease from patient descriptions. - - Patient Description: - {description} - - Extract the main condition mentioned in the description. - - The main condition should be a specific medical condition or disease that the patient suffers from. - - If multiple conditions are mentioned, extract the most prominent or relevant one that describes the patient. - - Ensure the extracted condition is factual and directly related to the patient's health. - - If no condition is mentioned, provide 'None' as the output. - - Provide a list of 10 well known aliases or synonyms or related terms if the condition can be described in multiple ways. - - Provide the output as a JSON object with the keys 'condition' and 'synonyms'. - """ - response = llm.invoke([HumanMessage(content=prompt)]) - try: - # Parse the JSON response from the model - structured_output = ( - response.content.strip().strip("```json").strip("```").strip() - ) - extracted_info = json.loads(structured_output) - return { - "condition": extracted_info.get("condition"), - "synonyms": extracted_info.get("synonyms"), - } - except Exception as e: - print(f"Error extracting main condition: {e}") - return {"condition": None, "synonyms": None} - - -# Update the process_file function to use the new age and gender prompt -def process_file_with_prompt(input_file: str, output_file: str): - """ - Reads patient data from the input file, prompts the model to extract age and gender, - generates expanded sentences for each patient's entities, and writes the output to the output file. - """ - with open(input_file, "r") as file: - data = json.load(file) - - results = {} - for patient_id, patient_data in data.items(): - print(f"Processing patient {patient_id}...") - raw_description = patient_data.get("raw", "") - conditions = patient_data.get("gpt-4-turbo", {}).get("conditions", []) - - # Prompt the model to extract age and gender - age_gender_info = prompt_extract_age_and_gender(raw_description) - - # Generate meaningful sentences - expanded_sentences = generate_sentences(raw_description, conditions) - - # Get the main condition - main_condition_info = prompt_extract_main_condition(raw_description) - - # Save the processed result - results[patient_id] = { - "raw_description": raw_description, - "age": age_gender_info.get("age"), - "gender": age_gender_info.get("gender"), - "main_condition": main_condition_info.get("condition"), - "synonyms": main_condition_info.get("synonyms"), - "conditions": conditions, - "expanded_sentences": expanded_sentences, - } - - # Write the results to the output file - with open(output_file, "w") as file: - json.dump(results, file, indent=2) - print(f"Processing complete. Results saved to {output_file}") - - -# Main script -if __name__ == "__main__": - input_file = ( - "../../data/id2queries21.json" # Replace with the path to your input JSON file - ) - output_file = "processed_patients21.json" # Path to save the processed output - process_file_with_prompt(input_file, output_file) diff --git a/utils/gpt/gpt_generate_ideal_candidates.py b/utils/gpt/gpt_generate_ideal_candidates.py deleted file mode 100644 index 2e31f511..00000000 --- a/utils/gpt/gpt_generate_ideal_candidates.py +++ /dev/null @@ -1,407 +0,0 @@ -import os -import json -import random -import re -import ast -from typing import List, Dict, Tuple -from dateutil.parser import parse -from langchain_openai import ChatOpenAI -from langchain.schema import HumanMessage - -# Set your API key securely in production. -os.environ["OPENAI_API_KEY"] = "" - -# Initialize the LLM -llm = ChatOpenAI(model="gpt-4o-mini", max_retries=3) - -# Minimum word count for eligibility criteria to be considered "rich" -MIN_ELIGIBILITY_WORD_COUNT = 512 - - -def safe_parse_list(response_str: str) -> List: - """ - Attempts to parse a Python list from a string. - Extracts the content between the first "[" and the last "]". - First tries ast.literal_eval; if that fails, replaces single quotes with double quotes and tries json.loads. - Returns an empty list if parsing is unsuccessful. - """ - start = response_str.find("[") - end = response_str.rfind("]") - if start == -1 or end == -1: - print("No list brackets found in the response.") - return [] - list_str = response_str[start : end + 1] - - try: - result = ast.literal_eval(list_str) - if isinstance(result, list): - return result - except Exception as e: - print(f"literal_eval failed on extracted string: {e}") - - try: - json_str = list_str.replace("'", '"') - result = json.loads(json_str) - if isinstance(result, list): - return result - except Exception as e: - print(f"json.loads fallback failed: {e}") - - return [] - - -def safe_parse_dict(response_str: str) -> Dict: - """ - Attempts to parse a Python dict from a string. - Extracts the substring between the first "{" and the last "}". - First tries ast.literal_eval; if that fails, replaces single quotes with double quotes and tries json.loads. - Returns an empty dict if unsuccessful. - """ - start = response_str.find("{") - end = response_str.rfind("}") - if start == -1 or end == -1: - print("No dictionary found in the response.") - return {} - dict_str = response_str[start : end + 1] - - try: - result = ast.literal_eval(dict_str) - if isinstance(result, dict): - return result - except Exception as e: - print(f"literal_eval failed on extracted string: {e}") - - try: - json_str = dict_str.replace("'", '"') - result = json.loads(json_str) - if isinstance(result, dict): - return result - except Exception as e: - print(f"json.loads fallback failed: {e}") - - return {} - - -def generate_synonyms(condition: str) -> List[str]: - """ - Generates 10 well-known synonyms or alternative names for the given condition. - The model is instructed to provide the output as a Python list. - """ - prompt = f""" - You are a medical expert. Generate 10 well-known synonyms or alternative names for the following condition: - Condition: {condition} - Provide the output as a Python list of strings. - """ - response = llm.invoke([HumanMessage(content=prompt)]) - print("Synonyms response:", response.content) - synonyms = safe_parse_list(response.content) - if isinstance(synonyms, list): - synonyms = [str(s) for s in synonyms if isinstance(s, (str, int, float))] - else: - synonyms = [] - print(f"Error parsing synonyms for condition '{condition}'.") - return synonyms - - -def generate_summary( - details: List[str], conditions: List[str] = None, age_spec: str = None -) -> str: - """ - Generates a one-paragraph patient note based on the provided details and conditions. - The note should naturally incorporate the necessary patient information without explicitly referencing - eligibility criteria, trial requirements, or any commentary on meeting specific conditions. - If an age_spec is provided, include this information in the note. The note must end with a separate - line exactly in the format: - "Age: , Gender: " - """ - combined_details = " ".join(details) - - condition_info = "" - if conditions: - condition_info = "diagnosed with one of : " + ", ".join(conditions) + "." - - age_sentence = f" The patient should be {age_spec}." if age_spec else "" - - prompt = f""" -You are a seasoned medical expert. Based on the clinical trial information provided below, generate a detailed, professional one-paragraph patient note describing an ideal candidate {condition_info} for the trial. Ensure that the candidate's medical history and current condition strictly satisfy every single inclusion criterion without exception while clearly and explicitly not violating any exclusion criteria. - -Age and gender requirements for the trial: {age_sentence} - -Eligibility Details: {combined_details} - -Please integrate the above information naturally into the note as if describing the patient's history and presentation, without any explicit reference to suitability of the patient with the provided eligibility criteria, trial requirements, or statements like "meets the criterion" or "satisfies the requirements of the trial" etc... Your note should simply convey the patient's condition and background in a realistic manner similar to an EHR or admission note. -Go over the criteria one-by-one. They should all be covered in the patient's note without exception. - -At the end of the note, include a new line exactly in the following format: -"Age: , Gender: " -""" - response = llm.invoke([HumanMessage(content=prompt)]) - print("Summary response:", response.content) - return response.content.strip() - - -def extract_age_gender_from_summary(summary: str) -> Tuple[int, str]: - """ - Extracts the age and gender from the summary using a regular expression. - Expects the summary to end with a line in the format: - "Age: , Gender: " - """ - pattern = r"Age:\s*(\d+)\s*,\s*Gender:\s*([A-Za-z]+)" - match = re.search(pattern, summary) - if match: - age = int(match.group(1)) - gender = match.group(2).lower() - if gender not in ["male", "female"]: - gender = "male" - return age, gender - else: - print("Could not extract age and gender from summary. Using default values.") - return 50, "male" - - -def split_into_sentences(text: str) -> List[str]: - """ - Splits the provided text into sentences using punctuation as delimiters. - """ - sentences = re.split(r"(?<=[.!?]) +", text) - return [s.strip() for s in sentences if s.strip()] - - -def generate_conditions(raw_description: str) -> List[str]: - """ - Extracts all relevant medical conditions solely based on the patient’s raw description. - The model is instructed to provide the output as a Python list of strings. - """ - prompt = f""" - You are a medical expert. Based solely on the following patient note, extract all relevant medical conditions mentioned. - Provide the output as a Python list of strings. - Patient Note: {raw_description} - """ - response = llm.invoke([HumanMessage(content=prompt)]) - print("Conditions response:", response.content) - conditions = safe_parse_list(response.content) - if isinstance(conditions, list): - conditions = [str(c) for c in conditions if isinstance(c, (str, int, float))] - else: - conditions = [] - print("Error parsing conditions.") - return conditions - - -def extract_main_condition_from_summary(summary: str) -> str: - """ - Extracts the primary condition for which the patient is being treated from the patient note. - The model is instructed to return a concise, single phrase. - """ - prompt = f""" - You are a medical expert. Based solely on the following patient note, identify the primary condition for which the patient is being treated. Provide only a concise, single phrase. - Patient Note: {summary} - """ - response = llm.invoke([HumanMessage(content=prompt)]) - main_condition = response.content.strip() - print("Extracted main condition:", main_condition) - return main_condition - - -def extract_age_gender_from_trial(trial_data: Dict) -> str: - """ - Extracts the age and gender requirements from the trial's JSON data using the fields: - "minumum_age", "maximum_age", and "gender". - Constructs and returns an age specification string. - """ - try: - min_age_raw = trial_data.get("minumum_age") - max_age_raw = trial_data.get("maximum_age") - trial_gender = trial_data.get("gender", "male") - if min_age_raw is not None and max_age_raw is not None: - if isinstance(min_age_raw, str): - min_age = int("".join(filter(str.isdigit, min_age_raw))) - else: - min_age = int(min_age_raw) - if isinstance(max_age_raw, str): - max_age = int("".join(filter(str.isdigit, max_age_raw))) - else: - max_age = int(max_age_raw) - age_spec = f"aged between {min_age} and {max_age} years old; gender must be {trial_gender}" - else: - age_spec = f"gender must be {trial_gender}" - except Exception as e: - print(f"Error constructing age specification: {e}") - age_spec = f"gender must be {trial_gender}" - return age_spec - - -def generate_patient_profile( - eligibility_criteria: str, ground_nctid: str, trial_data: Dict -) -> Dict: - """ - Generates a patient profile for a trial. - - Steps: - 1. Construct an age specification string from the trial's JSON. - 2. Extract condition(s) from the trial data. - 3. Generate a comprehensive raw patient note (summary) based on the trial's eligibility criteria and conditions. - The note will be generated using the eligibility criteria, conditions, and will include a final line with age and gender. - 4. Extract the age and gender from the generated note. - 5. Extract the main condition from the note. - 6. Generate synonyms for the extracted main condition. - 7. Extract additional conditions solely from the raw note. - - Returns a JSON object with the following keys: - - raw_description (the patient note) - - age - - gender - - main_condition - - synonyms - - conditions - - split_raw_description (the note split into sentences) - - ground_nctid - """ - # 1. Build an age specification string from trial_data. - age_spec = extract_age_gender_from_trial(trial_data) - - # 2. Extract condition(s) from the trial data. - condition_field = trial_data.get("condition", "") - if isinstance(condition_field, list): - conditions_input = condition_field # use the list directly - elif isinstance(condition_field, str) and condition_field.strip(): - conditions_input = [condition_field] - else: - conditions_input = [] - - # 3. Generate the raw patient note using eligibility criteria, conditions, and age specifications. - raw_description = generate_summary( - [eligibility_criteria], conditions=conditions_input, age_spec=age_spec - ) - - # 4. Extract age and gender from the generated note. - age, gender = extract_age_gender_from_summary(raw_description) - - # 5. Extract the main condition from the raw description. - main_condition = extract_main_condition_from_summary(raw_description) - - # 6. Generate synonyms for the main condition. - synonyms = generate_synonyms(main_condition) - - # 7. Extract additional conditions solely from the raw note. - conditions_from_note = generate_conditions(raw_description) - if main_condition not in conditions_from_note: - conditions = [main_condition] + conditions_from_note - else: - conditions = conditions_from_note - - return { - "raw_description": raw_description, - "age": age, - "gender": gender, - "main_condition": main_condition, - "synonyms": synonyms, - "conditions": conditions, - "split_raw_description": split_into_sentences(raw_description), - "ground_nctid": ground_nctid, - } - - -def process_trials(input_folder: str, output_file: str): - """ - Processes trial JSON files in the given folder: - 1. Searches for files with names starting with "NCT" and ending with ".json". - 2. For each file, checks that the trial's "start_date" is after 2015, that the "condition" - (when lowercased) contains cancer-related terms (e.g., "cancer", "tumor", "malignancy", "neoplasm", "carcinoma"), - that the eligibility criteria are sufficiently long and rich, and that the trial's overall_status is "Recruiting". - 3. Randomly samples 100 trials that meet these conditions. - 4. For each trial, uses its "eligibility_criteria" to generate a patient profile that perfectly fits the trial. - The profile is built by generating a raw patient note (aware of age/gender specs and conditions) and then extracting the main condition, - synonyms, and additional conditions from that note. - 5. Saves the 100 patient profiles to a single JSON file. - """ - all_files = [ - f - for f in os.listdir(input_folder) - if f.startswith("NCT") and f.endswith(".json") - ] - matching_trials = [] - cancer_terms = ["cancer", "tumor", "malignancy", "neoplasm", "carcinoma"] - - for filename in all_files: - file_path = os.path.join(input_folder, filename) - try: - with open(file_path, "r") as f: - trial_data = json.load(f) - except Exception as e: - print(f"Failed to load {filename}: {e}") - continue - - # Check if the start_date is after 2015. - start_date_str = trial_data.get("start_date") - if not start_date_str or not isinstance(start_date_str, str): - print( - f"Skipping trial {filename} because start_date is missing or not a valid string." - ) - continue - - try: - parsed_date = parse(start_date_str) - year = parsed_date.year - except Exception as e: - print(f"Error parsing start_date in {filename}: {e}") - year = 0 - - # Check if the eligibility criteria exist and are long and rich. - eligibility_criteria = trial_data.get("eligibility_criteria", "") - if ( - not eligibility_criteria - or len(eligibility_criteria.split()) < MIN_ELIGIBILITY_WORD_COUNT - ): - print( - f"Skipping trial {filename} due to insufficient eligibility criteria (less than {MIN_ELIGIBILITY_WORD_COUNT} words)." - ) - continue - - # Handle the condition field, which can be a list or a string. - condition_field = trial_data.get("condition", "") - if isinstance(condition_field, list): - condition_str = " ".join(condition_field) - else: - condition_str = condition_field - condition_lower = condition_str.lower() - - # Additional condition: trial must have overall_status "Recruiting" - overall_status = trial_data.get("overall_status", "").strip().lower() - - if ( - year > 2015 - and any(term in condition_lower for term in cancer_terms) - and overall_status == "recruiting" - ): - matching_trials.append((filename, trial_data)) - - if len(matching_trials) < 100: - print( - f"Warning: Only {len(matching_trials)} matching trials found. Proceeding with available trials." - ) - sample_trials = matching_trials - else: - sample_trials = random.sample(matching_trials, 100) - - results = {} - for filename, trial_data in sample_trials: - ground_nctid = filename.replace(".json", "") - eligibility_criteria = trial_data.get("eligibility_criteria", "") - print(f"Processing trial {ground_nctid}...") - patient_profile = generate_patient_profile( - eligibility_criteria, ground_nctid, trial_data - ) - results[ground_nctid] = patient_profile - - with open(output_file, "w") as out_file: - json.dump(results, out_file, indent=2) - - print(f"Processing complete. Results saved to {output_file}") - - -# Set your input folder and output file paths accordingly. -input_folder = "../../data/trials_jsons" # Folder containing NCT*.json files -output_file = "perfect_patient_profiles.json" - -process_trials(input_folder, output_file) diff --git a/utils/gpt/gpt_generate_reranking_data.py b/utils/gpt/gpt_generate_reranking_data.py deleted file mode 100644 index af07882a..00000000 --- a/utils/gpt/gpt_generate_reranking_data.py +++ /dev/null @@ -1,166 +0,0 @@ -import json -import os -import random -from typing import Dict, List, Optional - -from langchain.schema import HumanMessage -from langchain_community.chat_models import ChatOpenAI -from pydantic import BaseModel - -os.environ["OPENAI_API_KEY"] = "" - -INPUT_MEDNLI_FILE = "mednli_train.jsonl" -OUTPUT_AUGMENTED_FILE = "mednli_yesno_aug.jsonl" - -N_VARIANTS_PER_SEED = 3 -MAX_SEED_EXAMPLES = 500 - -MODEL_NAME = "gpt-4o-mini" -TEMPERATURE = 0.7 - -INSTRUCTION_TEXT = ( - "You are a clinical assistant tasked with determining whether the patient " - "information (Statement A) provides enough details to evaluate whether the " - "patient satisfies or violates the clinical trial eligibility criterion " - "(Statement B). Respond with 'Yes' if Statement A contains sufficient " - "information to make this evaluation, or 'No' if it does not." -) - - -class MedNLISeed(BaseModel): - sentence1: str - sentence2: str - gold_label: str - - -class YesNoExample(BaseModel): - instruction: str - sentence1: str - sentence2: str - gold_label: str - - -llm = ChatOpenAI( - model=MODEL_NAME, - temperature=TEMPERATURE, - top_p=0.9, -) - - -def load_mednli_jsonl(path: str) -> List[MedNLISeed]: - examples: List[MedNLISeed] = [] - with open(path, "r") as f: - for line in f: - raw = json.loads(line.strip()) - examples.append( - MedNLISeed( - sentence1=raw["sentence1"], - sentence2=raw["sentence2"], - gold_label=raw["gold_label"], - ) - ) - return examples - - -def write_jsonl(path: str, data: List[Dict]): - with open(path, "a", encoding="utf-8") as f: - for obj in data: - f.write(json.dumps(obj, ensure_ascii=False) + "\n") - - -def generate_yesno_variants( - seed_example: MedNLISeed, n_variants: int -) -> List[YesNoExample]: - prompt = f""" -You are generating training data for a clinical trial matching system. - -We want examples following this pattern: - -- Statement A: patient information. -- Statement B: clinical trial eligibility criterion. -- A fixed instruction string. -- A label "Yes" or "No". - -Semantics: -- "Yes": Statement A contains enough information to determine if the patient satisfies or violates Statement B. -- "No": Statement A does not contain enough information. - -MedNLI mapping: -- entailment/contradiction → Yes -- neutral → No - -Seed example: -{{ - "sentence1": {json.dumps(seed_example.sentence1)}, - "sentence2": {json.dumps(seed_example.sentence2)}, - "gold_label": {json.dumps(seed_example.gold_label)} -}} - -Generate {n_variants} new examples. Each example must have: -- "instruction": {json.dumps(INSTRUCTION_TEXT)} -- "sentence1": Statement A -- "sentence2": Statement B -- "gold_label": "Yes" or "No" - -Return only valid JSON: a list of objects with exactly these keys. -""".strip() - - response = llm.invoke([HumanMessage(content=prompt)]) - raw = response.content.strip() - if raw.startswith("```"): - raw = raw.strip("`").replace("json", "", 1).strip() - - try: - parsed = json.loads(raw) - out = [] - for item in parsed: - try: - ex = YesNoExample(**item) - if ex.gold_label in {"Yes", "No"}: - ex.instruction = INSTRUCTION_TEXT - out.append(ex) - except Exception: - pass - return out - except Exception: - return [] - - -def augment_mednli_yesno( - input_path: str, - output_path: str, - n_variants_per_seed: int = 3, - max_seed_examples: Optional[int] = None, -): - all_seeds = load_mednli_jsonl(input_path) - - if max_seed_examples is not None and max_seed_examples < len(all_seeds): - seed_examples = random.sample(all_seeds, max_seed_examples) - else: - seed_examples = all_seeds - - open(output_path, "w").close() - - for seed in seed_examples: - generated = generate_yesno_variants(seed, n_variants_per_seed) - if not generated: - continue - to_write = [ - { - "instruction": ex.instruction, - "sentence1": ex.sentence1, - "sentence2": ex.sentence2, - "gold_label": ex.gold_label, - } - for ex in generated - ] - write_jsonl(output_path, to_write) - - -if __name__ == "__main__": - augment_mednli_yesno( - input_path=INPUT_MEDNLI_FILE, - output_path=OUTPUT_AUGMENTED_FILE, - n_variants_per_seed=N_VARIANTS_PER_SEED, - max_seed_examples=MAX_SEED_EXAMPLES, - ) diff --git a/uv.lock b/uv.lock index 5756318d..932f1250 100644 --- a/uv.lock +++ b/uv.lock @@ -43,20 +43,17 @@ name = "aiohttp" version = "3.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohappyeyeballs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "aiosignal", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "attrs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "frozenlist", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "multidict", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "propcache", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "yarl", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "aiohappyeyeballs", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "aiosignal", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "attrs", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "frozenlist", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "multidict", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "propcache", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "yarl", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794, upload-time = "2026-06-07T21:09:35.529Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/dd/bf526e6f0a1120dd6f2df2e97bacfe4d358f13d17a0ff5847301a1375a51/aiohttp-3.14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:aa00140699487bd435fde4342d85c94cb256b7cd3a5b9c3396c67f19922afda2", size = 765225, upload-time = "2026-06-07T21:06:07.957Z" }, - { url = "https://files.pythonhosted.org/packages/8f/e1/a2872aa55495a70f61310d411541c6ee23812d9a884e000c716e1bc3edbf/aiohttp-3.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c1af67559445498b502030c35c59db59966f47041ca9de5b4e707f86bd10b5f", size = 518743, upload-time = "2026-06-07T21:06:09.749Z" }, - { url = "https://files.pythonhosted.org/packages/5b/e7/c60c7b209e509cc787de3cea0550a518538cfc08003e1c1e14c1c63fff71/aiohttp-3.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d44ec478e713ee7f29b439f7eb8dc2b9d4079e11ae114d2c2ac3d5daf30516c8", size = 514139, upload-time = "2026-06-07T21:06:11.26Z" }, { url = "https://files.pythonhosted.org/packages/76/7f/a987b14a3859094b3cea3f4825219c3e5536242564af6e3f9c2f6c994eb2/aiohttp-3.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b821a1f7dedf7e37450654e620038ac3b2e81e8fa6ea269337e97101978ec730", size = 1786989, upload-time = "2026-06-07T21:06:19.677Z" }, { url = "https://files.pythonhosted.org/packages/2b/9c/9c18cf367a0498212d9ba7daf990b504a5e8ae064cda4b504e2647c89c03/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b6feea921016eb3d4e04d65fc4e9ca402d1a3801f562aef94989f54694917af3", size = 1775698, upload-time = "2026-06-07T21:06:33.72Z" }, ] @@ -66,8 +63,8 @@ name = "aiosignal" version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "frozenlist", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "frozenlist", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } wheels = [ @@ -172,26 +169,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/53/a1/484e0f9ec994bd2285d6747e7c8028350f1a177e9210bc57637898042d3b/backports_zstd-1.6.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:17efb3d11137de5166dd51eedab9c36ad633402acba386eee8d715213ea47e49", size = 415201, upload-time = "2026-06-14T10:50:55.854Z" }, ] -[[package]] -name = "bert-score" -version = "0.3.13" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "matplotlib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, - { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pandas", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1c/93/2c97a85cbb66a8a256a13176e11c9c4508074e2341299fe75ee955c81eff/bert_score-0.3.13.tar.gz", hash = "sha256:8ffe5838eac8cdd988b8b1a896af7f49071188c8c011a1ed160d71a9899a2ba4", size = 48621, upload-time = "2023-02-20T21:07:29.477Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/8c/bc5457de4c004b1a623b31f7bc8d0375fb699b7d67df11879098b4b7b7c8/bert_score-0.3.13-py3-none-any.whl", hash = "sha256:bbbb4c7fcdaa46d7681aff49f37f96faa09ed74e1b150e659bdc6b58a66989b9", size = 61135, upload-time = "2023-02-20T21:07:27.226Z" }, -] - [[package]] name = "bioregistry" version = "0.13.62" @@ -240,21 +217,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7e/75/0252be37620699b79dbaa799c9b402d63142a131d16731df4ef09d135dd7/blake3-1.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c63ece266a43014cf29e772a82857cd8e90315ae3ed53e3c5204851596edd5f2", size = 554463, upload-time = "2025-10-14T06:45:43.22Z" }, ] -[[package]] -name = "blis" -version = "0.7.11" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/51/8c/60c85350f2e1c9647df580083a0f6acc686ef32d1a91f4ab0c624b3ff867/blis-0.7.11.tar.gz", hash = "sha256:cec6d48f75f7ac328ae1b6fbb372dde8c8a57c89559172277f66e01ff08d4d42", size = 2897107, upload-time = "2023-09-22T06:28:25.103Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/59/c8010f380a16709e6d3ef5534845d1ca1e689079914ec67ab60f57edfc37/blis-0.7.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1b68df4d01d62f9adaef3dad6f96418787265a6878891fc4e0fabafd6d02afba", size = 6123547, upload-time = "2023-09-22T06:27:28.47Z" }, - { url = "https://files.pythonhosted.org/packages/a8/73/0a9d4e7f6e78ef270e3a4532b17e060a02087590cf615ba9943fd1a283e9/blis-0.7.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:162e60d941a8151418d558a94ee5547cb1bbeed9f26b3b6f89ec9243f111a201", size = 1106895, upload-time = "2023-09-22T06:27:30.964Z" }, - { url = "https://files.pythonhosted.org/packages/dc/23/eb01450dc284a7ea8ebc0e5296f1f8fdbe5299169f4c318f836b4284a119/blis-0.7.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0421d6e44cda202b113a34761f9a062b53f8c2ae8e4ec8325a76e709fca93b6e", size = 10172888, upload-time = "2023-09-22T06:27:34.529Z" }, -] - [[package]] name = "boolean-py" version = "5.0" @@ -291,15 +253,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8c/7b/1fc1c09cc0756cf25861a3be10565915953876da48bb228fb9a672b20a42/cachetools-7.1.4-py3-none-any.whl", hash = "sha256:323dc4127934744db5b54eb4924482d7edafbf9554e820d1531c2e08c0e4ef54", size = 16761, upload-time = "2026-05-21T22:40:41.845Z" }, ] -[[package]] -name = "catalogue" -version = "2.0.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/38/b4/244d58127e1cdf04cf2dc7d9566f0d24ef01d5ce21811bab088ecc62b5ea/catalogue-2.0.10.tar.gz", hash = "sha256:4f56daa940913d3f09d589c191c74e5a6d51762b3a9e37dd53b7437afd6cda15", size = 19561, upload-time = "2023-09-25T06:29:24.962Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/96/d32b941a501ab566a16358d68b6eb4e4acc373fab3c3c4d7d9e649f7b4bb/catalogue-2.0.10-py3-none-any.whl", hash = "sha256:58c2de0020aa90f4a2da7dfad161bf7b3b054c86a5f09fcedc0b2b740c109a9f", size = 17325, upload-time = "2023-09-25T06:29:23.337Z" }, -] - [[package]] name = "cbor2" version = "6.1.2" @@ -353,15 +306,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" }, ] -[[package]] -name = "cloudpathlib" -version = "0.24.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/19/58bc6b5d7d0f81c7209b05445af477e147c486552f96665a5912211839b9/cloudpathlib-0.24.0.tar.gz", hash = "sha256:c521a984e77b47e656fe78e20a7e3e260e0ab45fc69e33ac01094227c979e34a", size = 53600, upload-time = "2026-04-30T00:54:43.265Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/5b/ba933f896d9b0b07608d575a8501e2b4e32166b60d84c430a4a7285ebe64/cloudpathlib-0.24.0-py3-none-any.whl", hash = "sha256:b1c51e2d2ec7dc4fed6538991f4aea849d6cf11a7e6b9069f86e461aa1f9b5b4", size = 63214, upload-time = "2026-04-30T00:54:42.06Z" }, -] - [[package]] name = "cloudpickle" version = "3.1.2" @@ -386,38 +330,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/35/63/6edf0415b072fff0bf8b546074dea3f0f9b148e49b601ac98bdc60a76c68/compressed_tensors-0.17.0-py3-none-any.whl", hash = "sha256:4a1b89b508f7efb8ffb4eee8a6e69e0452d9b080cae130146025c64fbe9fa9aa", size = 211714, upload-time = "2026-06-03T16:49:15.672Z" }, ] -[[package]] -name = "confection" -version = "0.1.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "srsly", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/51/d3/57c6631159a1b48d273b40865c315cf51f89df7a9d1101094ef12e3a37c2/confection-0.1.5.tar.gz", hash = "sha256:8e72dd3ca6bd4f48913cd220f10b8275978e740411654b6e8ca6d7008c590f0e", size = 38924, upload-time = "2024-05-31T16:17:01.559Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/00/3106b1854b45bd0474ced037dfe6b73b90fe68a68968cef47c23de3d43d2/confection-0.1.5-py3-none-any.whl", hash = "sha256:e29d3c3f8eac06b3f77eb9dfb4bf2fc6bcc9622a98ca00a698e3d019c6430b14", size = 35451, upload-time = "2024-05-31T16:16:59.075Z" }, -] - -[[package]] -name = "contourpy" -version = "1.3.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, -] -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/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/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/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/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" }, -] - [[package]] name = "cryptography" version = "49.0.0" @@ -558,15 +470,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/72/97/db70517204cd8aec8cb0773036333407405f6552bf928234d68531b0acd2/curies-0.13.13-py3-none-any.whl", hash = "sha256:43051140cd1f089a832f139633b14d473c09fa48a2f36e1b9b94c1270812267e", size = 82043, upload-time = "2026-06-12T10:27:51.334Z" }, ] -[[package]] -name = "cycler" -version = "0.12.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, -] - [[package]] name = "cyclonedx-python-lib" version = "11.11.0" @@ -583,57 +486,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/22/f3/56ccb2884aaa3db5622368e5191a3384b15f35392aa93df8b2f508c660d2/cyclonedx_python_lib-11.11.0-py3-none-any.whl", hash = "sha256:3049fc83e06a059b5c5907a527625a8ed5073caab10607ed4c9e5503b590fd44", size = 528689, upload-time = "2026-06-17T11:57:47.358Z" }, ] -[[package]] -name = "cymem" -version = "2.0.13" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/2f0fbb32535c3731b7c2974c569fb9325e0a38ed5565a08e1139a3b71e82/cymem-2.0.13.tar.gz", hash = "sha256:1c91a92ae8c7104275ac26bd4d29b08ccd3e7faff5893d3858cb6fadf1bc1588", size = 12320, upload-time = "2025-11-14T14:58:36.902Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/10/64/1db41f7576a6b69f70367e3c15e968fd775ba7419e12059c9966ceb826f8/cymem-2.0.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:673183466b0ff2e060d97ec5116711d44200b8f7be524323e080d215ee2d44a5", size = 43587, upload-time = "2025-11-14T14:57:22.39Z" }, - { url = "https://files.pythonhosted.org/packages/81/13/57f936fc08551323aab3f92ff6b7f4d4b89d5b4e495c870a67cb8d279757/cymem-2.0.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bee2791b3f6fc034ce41268851462bf662ff87e8947e35fb6dd0115b4644a61f", size = 43139, upload-time = "2025-11-14T14:57:23.363Z" }, - { url = "https://files.pythonhosted.org/packages/d6/01/6bc654101526fa86e82bf6b05d99b2cd47c30a333cfe8622c26c0592beb2/cymem-2.0.13-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:30c4e75a3a1d809e89106b0b21803eb78e839881aa1f5b9bd27b454bc73afde3", size = 244496, upload-time = "2025-11-14T14:57:26.42Z" }, - { url = "https://files.pythonhosted.org/packages/d4/2b/0e4664cafc581de2896d75000651fd2ce7094d33263f466185c28ffc96e4/cymem-2.0.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c90a6ecba994a15b17a3f45d7ec74d34081df2f73bd1b090e2adc0317e4e01b6", size = 248287, upload-time = "2025-11-14T14:57:29.055Z" }, -] - -[[package]] -name = "cython" -version = "3.0.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/84/4d/b720d6000f4ca77f030bd70f12550820f0766b568e43f11af7f7ad9061aa/cython-3.0.11.tar.gz", hash = "sha256:7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff", size = 2755544, upload-time = "2024-08-05T15:03:02.254Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/73/e55be864199cd674cb3426a052726c205589b1ac66fb0090e7fe793b60b3/Cython-3.0.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75ba1c70b6deeaffbac123856b8d35f253da13552207aa969078611c197377e4", size = 3113599, upload-time = "2024-08-05T15:03:52.416Z" }, - { url = "https://files.pythonhosted.org/packages/93/03/e330b241ad8aa12bb9d98b58fb76d4eb7dcbe747479aab5c29fce937b9e7/Cython-3.0.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3999fb52d3328a6a5e8c63122b0a8bd110dfcdb98dda585a3def1426b991cba7", size = 3595065, upload-time = "2024-08-05T15:03:59.174Z" }, - { url = "https://files.pythonhosted.org/packages/f8/62/0da548144c71176155ff5355c4cc40fb28b9effe22e830b55cec8072bdf2/Cython-3.0.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ddd1fe25af330f4e003421636746a546474e4ccd8f239f55d2898d80983d20ed", size = 3709662, upload-time = "2024-08-05T15:04:10.99Z" }, - { url = "https://files.pythonhosted.org/packages/43/39/bdbec9142bc46605b54d674bf158a78b191c2b75be527c6dcf3e6dfe90b8/Cython-3.0.11-py2.py3-none-any.whl", hash = "sha256:0e25f6425ad4a700d7f77cd468da9161e63658837d1bc34861a9861a4ef6346d", size = 1171267, upload-time = "2024-08-05T15:02:57.729Z" }, -] - -[[package]] -name = "datasets" -version = "2.19.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohttp", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "dill", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "fsspec", extra = ["http"], marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "multiprocess", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, - { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pandas", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pyarrow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pyarrow-hotfix", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "xxhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d3/ad/b177295f7bcf2c9d5e3fde29041c00378d50561e43de6fb7e4526e6861f3/datasets-2.19.0.tar.gz", hash = "sha256:0b47e08cc7af2c6800a42cadc4657b22a0afc7197786c8986d703c08d90886a6", size = 2215040, upload-time = "2024-04-19T08:44:29.992Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/89/a9/8e097f79d2941a2f96e33f57032957429a79f66c8252ac7fcce586a43406/datasets-2.19.0-py3-none-any.whl", hash = "sha256:f57c5316e123d4721b970c68c1cb856505f289cda58f5557ffe745b49c011a8e", size = 542018, upload-time = "2024-04-19T08:43:05.722Z" }, -] - [[package]] name = "defusedxml" version = "0.7.1" @@ -744,21 +596,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, ] -[[package]] -name = "faiss-cpu" -version = "1.9.0.post1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, - { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/4f/cf04c3e3d9af3a3a6c9537b3e878246516f85333e578118fc460acb205a3/faiss_cpu-1.9.0.post1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:7ef0c81a798a64fc932e15d560ddc01021df9ed70b678367aec6e01f39d075c1", size = 7672129, upload-time = "2024-11-20T02:20:14.872Z" }, - { url = "https://files.pythonhosted.org/packages/a6/9d/eaba10de74cd7fad91174a49481327eaf61fe80a2ad1e4ad16594256bf9d/faiss_cpu-1.9.0.post1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:783f545c3999909164a975b97d99749b244b62651ce976ee76b8a171c62e827d", size = 3225597, upload-time = "2024-11-20T02:20:16.54Z" }, - { url = "https://files.pythonhosted.org/packages/e4/9c/aed8b7c6c490c777c404131b3f6a68e4924fbc149620dc6d6a3563435371/faiss_cpu-1.9.0.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7068e14e8f557659c68bdf4d511571630721e1502efa87a70fe44023f3741645", size = 27474906, upload-time = "2024-11-20T02:20:21.174Z" }, -] - [[package]] name = "fastapi" version = "0.136.3" @@ -902,28 +739,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl", hash = "sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4", size = 26661, upload-time = "2025-12-19T23:16:13.622Z" }, ] -[[package]] -name = "fonttools" -version = "4.63.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/84/69/c97f2c18e0db87d2c7b15da1974dace76ae938f1cfa22e2727a648b7ed43/fonttools-4.63.0.tar.gz", hash = "sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0", size = 3597189, upload-time = "2026-05-14T12:04:30.958Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/75/2b/a7f1545bdf5da69c4bda0cea2a5781f0ad2a6623e0277267672db43c5fe6/fonttools-4.63.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b8ae05d9eacf6081414d759c0a352769ac28ce31280d6bb8e77b03f9e3c449f", size = 2881793, upload-time = "2026-05-14T12:02:56.645Z" }, - { url = "https://files.pythonhosted.org/packages/49/50/965308c703f085f225db2886813b27e015b8b3438c350b22dd65b52c2a2c/fonttools-4.63.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79cdc9f567aec74a72918fd060283911406750cbc9fd28c1316023deb6ce31a9", size = 2428130, upload-time = "2026-05-14T12:02:58.891Z" }, - { url = "https://files.pythonhosted.org/packages/0b/43/a81f20050a3115b57d62c8e781446949512eac36690dc384ccea65ff4cc1/fonttools-4.63.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d76ac49f929aecaf82d83250b8347e099d7aecba0f4726c1d9b6df3b8bb5fe18", size = 5082308, upload-time = "2026-05-14T12:03:03.211Z" }, - { url = "https://files.pythonhosted.org/packages/f5/f1/0aa0dbea778c75adbef223c42019fd47d22262b905974d62d829545d485f/fonttools-4.63.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7dd683fef0663e9f0f45cf541d788d24caa3ec9db50796b588e1757d8b3bc007", size = 5213271, upload-time = "2026-05-14T12:03:07.238Z" }, - { url = "https://files.pythonhosted.org/packages/2c/47/c99d5268f354002ce80f8d029cd9d7d872969da1de8b93d32de4dc56d6f4/fonttools-4.63.0-py3-none-any.whl", hash = "sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d", size = 1164562, upload-time = "2026-05-14T12:04:29.092Z" }, -] - [[package]] name = "frozenlist" version = "1.8.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, - { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, @@ -938,11 +759,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/93/6d/66d48b03460768f523da62a57a7e14e5e95fdf339d79e996ce3cecda2cdb/fsspec-2024.3.1-py3-none-any.whl", hash = "sha256:918d18d41bf73f0e2b261824baeb1b124bcf771767e3a26425cd7dec3332f512", size = 171991, upload-time = "2024-03-18T19:35:11.259Z" }, ] -[package.optional-dependencies] -http = [ - { name = "aiohttp", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] - [[package]] name = "gguf" version = "0.19.0" @@ -1003,17 +819,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e7/c8/e2645aa8ed02fd4c7a2f59d68783b65b1f3cbdfe39a6308e156509d1fee8/googleapis_common_protos-1.75.0-py3-none-any.whl", hash = "sha256:961ed60399c457ceb0ee8f285a84c870aabc9c6a832b9d37bb281b5bebde43ed", size = 300631, upload-time = "2026-05-07T08:03:30.345Z" }, ] -[[package]] -name = "greenlet" -version = "3.5.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dd/8b/befc3cb36965f397d87e86fb3b00e3ec0dc67c1ecb0986d7f54ee528f018/greenlet-3.5.2.tar.gz", hash = "sha256:c1b906220d83c140361cdd12eef970fb5881a168b98ee58a43786426173da14c", size = 199243, upload-time = "2026-06-17T20:19:01.317Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/21/68/371ee6dad168be3386c46030bedaa8e3e7e3cf3d203621d4529e78ff36ef/greenlet-3.5.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:d7792398872f89466c6671d5d193537eff163ecf7fac78d82e6ddc25017fb4f5", size = 286925, upload-time = "2026-06-17T17:33:17.928Z" }, - { url = "https://files.pythonhosted.org/packages/bd/d4/642833e778c17d32b5cabb793e14ce7364c55952462fc506fecdee55d485/greenlet-3.5.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1c1e5ad80f1f38ea479b83b39dccb20874cfe9ad5e52f87225fa294ba4d39a1", size = 616877, upload-time = "2026-06-17T17:39:26.564Z" }, - { url = "https://files.pythonhosted.org/packages/fa/d8/05a0074ee485dd51c320fd706fd7ed48006b9cad3443092d7df1a655f0d2/greenlet-3.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e554809538bd4867f24421b43abde170f9c9b8192149b30df5e164bcac6124f", size = 1643566, upload-time = "2026-06-17T17:40:05.452Z" }, -] - [[package]] name = "grpcio" version = "1.81.1" @@ -1201,12 +1006,8 @@ version = "0.15.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/66/b5/55f06bb281d92fb3cc86d14e1def2bd908bb77693183e7cb1f5a3c388b0c/jiter-0.15.0.tar.gz", hash = "sha256:4251acc80e2b7c9b7b8823456ea0fceeb0734dac2df7636d3c711b38476b5a76", size = 166640, upload-time = "2026-05-19T10:09:48.361Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/13/daa722f5765c393576f466378f9dfd29d77c9bed939e0688f96afa3601ea/jiter-0.15.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0f862193b8696249d22ec433e85fd2ab0ad9596bc3e45e6c0bc55e8aeba97be2", size = 310899, upload-time = "2026-05-19T10:07:12.89Z" }, - { url = "https://files.pythonhosted.org/packages/7f/82/2d2551829b082f4b6d82b9f939b031fb808a10aab1ec0664f82e150bb9a2/jiter-0.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1303d4d68a9b051ea90502402063ecf3807da00ad2affa19ca1ae3b90b3c5f67", size = 314963, upload-time = "2026-05-19T10:07:14.539Z" }, { url = "https://files.pythonhosted.org/packages/7b/7e/1c445c2b6f0e30a274dc8082e0c3c7825411cce80d726bccd697c98cc8d3/jiter-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3d37768fce7f88dd2a8c6091f2325dea27d30d30d5c6e7a1c0f0af77723b708", size = 349428, upload-time = "2026-05-19T10:07:22.372Z" }, { url = "https://files.pythonhosted.org/packages/e7/2c/5e07874e59e623a943a0acf1552a80d05b70f31b402287a8fc6d7ec634c7/jiter-0.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8020c99ec13a7db2b6f96cbe82ef4721c88b426a4892f27478044af0284615ef", size = 551016, upload-time = "2026-05-19T10:07:28.846Z" }, - { url = "https://files.pythonhosted.org/packages/65/43/1fc62172aa98b50a7de9a25554060db510f85c89cfbed0dfe13e1907a139/jiter-0.15.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:411fa4dfa5a7ae3d11491027ffb9beadec3996010a986862db70d91abba1c750", size = 305585, upload-time = "2026-05-19T10:09:35.995Z" }, - { url = "https://files.pythonhosted.org/packages/e8/c4/dd58fcd9e2df83666e5c1c1347bef58ce919cd8efc3ffa38aeea62ce493b/jiter-0.15.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:2b0074e2f56eb2dacca1689760fd2852a068f85a0547a157b82cb4cafeb6768b", size = 306936, upload-time = "2026-05-19T10:09:37.435Z" }, { url = "https://files.pythonhosted.org/packages/34/56/55d76614af37fe3f22a3347d1e410d2a15da581997cb2da499a625000bb5/jiter-0.15.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b15d3ec9b0449c40e85319bdb4caa8b77ab526e74f5532ed94bec15e2f66822c", size = 345606, upload-time = "2026-05-19T10:09:40.727Z" }, ] @@ -1219,45 +1020,15 @@ 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.4.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621, upload-time = "2024-05-02T12:15:05.765Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817, upload-time = "2024-05-02T12:15:00.765Z" }, -] - -[[package]] -name = "jsonpatch" -version = "1.33" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jsonpointer", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/78/18813351fe5d63acad16aec57f94ec2b70a09e53ca98145589e185423873/jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c", size = 21699, upload-time = "2023-06-26T12:07:29.144Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade", size = 12898, upload-time = "2023-06-16T21:01:28.466Z" }, -] - -[[package]] -name = "jsonpointer" -version = "3.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/c7/af399a2e7a67fd18d63c40c5e62d3af4e67b836a2107468b6a5ea24c4304/jsonpointer-3.1.1.tar.gz", hash = "sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900", size = 9068, upload-time = "2026-03-23T22:32:32.458Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659, upload-time = "2026-03-23T22:32:31.568Z" }, -] - [[package]] name = "jsonschema" version = "4.26.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "attrs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "jsonschema-specifications", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "referencing", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "rpds-py", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "attrs", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jsonschema-specifications", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "referencing", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "rpds-py", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } wheels = [ @@ -1269,29 +1040,13 @@ name = "jsonschema-specifications" version = "2025.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "referencing", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "referencing", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, ] -[[package]] -name = "kiwisolver" -version = "1.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/67/9c61eccb13f0bdca9307614e782fec49ffdde0f7a2314935d489fa93cd9c/kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a", size = 103482, upload-time = "2026-03-09T13:15:53.382Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/12/dd/a495a9c104be1c476f0386e714252caf2b7eca883915422a64c50b88c6f5/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9eed0f7edbb274413b6ee781cca50541c8c0facd3d6fd289779e494340a2b85c", size = 122798, upload-time = "2026-03-09T13:12:58.963Z" }, - { url = "https://files.pythonhosted.org/packages/11/60/37b4047a2af0cf5ef6d8b4b26e91829ae6fc6a2d1f74524bcb0e7cd28a32/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb", size = 66216, upload-time = "2026-03-09T13:13:00.155Z" }, - { url = "https://files.pythonhosted.org/packages/0a/aa/510dc933d87767584abfe03efa445889996c70c2990f6f87c3ebaa0a18c5/kiwisolver-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac", size = 63911, upload-time = "2026-03-09T13:13:01.671Z" }, - { url = "https://files.pythonhosted.org/packages/80/46/bddc13df6c2a40741e0cc7865bb1c9ed4796b6760bd04ce5fae3928ef917/kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27", size = 1438209, upload-time = "2026-03-09T13:13:03.385Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e1/65584da5356ed6cb12c63791a10b208860ac40a83de165cb6a6751a686e3/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8c63c91f95173f9c2a67c7c526b2cea976828a0e7fced9cdcead2802dc10f8a4", size = 2270718, upload-time = "2026-03-09T13:13:19.421Z" }, - { url = "https://files.pythonhosted.org/packages/e9/eb/5fcbbbf9a0e2c3a35effb88831a483345326bbc3a030a3b5b69aee647f84/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ec4c85dc4b687c7f7f15f553ff26a98bfe8c58f5f7f0ac8905f0ba4c7be60232", size = 59532, upload-time = "2026-03-09T13:15:47.047Z" }, - { url = "https://files.pythonhosted.org/packages/c3/9b/e17104555bb4db148fd52327feea1e96be4b88e8e008b029002c281a21ab/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:12e91c215a96e39f57989c8912ae761286ac5a9584d04030ceb3368a357f017a", size = 57420, upload-time = "2026-03-09T13:15:48.199Z" }, - { url = "https://files.pythonhosted.org/packages/48/44/2b5b95b7aa39fb2d8d9d956e0f3d5d45aef2ae1d942d4c3ffac2f9cfed1a/kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be4a51a55833dc29ab5d7503e7bcb3b3af3402d266018137127450005cdfe737", size = 79892, upload-time = "2026-03-09T13:15:49.694Z" }, -] - [[package]] name = "lance-namespace" version = "0.8.6" @@ -1341,208 +1096,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ab/15/f0d69acc5e06892d19e09c127cd928cf20f5d2966a069e93693fc389b132/lancedb-0.25.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3035665fb8e4aaff8dff2602747cc77aeba6bc39f1a95345abc3275c97a044cb", size = 39191458, upload-time = "2025-11-07T05:24:38.047Z" }, ] -[[package]] -name = "langchain" -version = "1.3.10" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langgraph", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3b/f6/e351d85c7828b9b90c5729de66170457c882c754efef0712904cfcd3192d/langchain-1.3.10.tar.gz", hash = "sha256:fd6ac9da86c479e4ff376e772d9e17a9232bd3113e9f2ddcb70cdc4bf7afc119", size = 632522, upload-time = "2026-06-18T19:43:00.86Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/59/f6/a682e68d004a2e23cae6c5c42e3c0d071bc0e7768167bd12277992f096f9/langchain-1.3.10-py3-none-any.whl", hash = "sha256:5da67f21aa56119744ad51b3e46ffac570c88f4fae0876e3b1c6a1c4bc0e344e", size = 133038, upload-time = "2026-06-18T19:42:58.918Z" }, -] - -[[package]] -name = "langchain-classic" -version = "1.0.8" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langchain-text-splitters", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langsmith", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "sqlalchemy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8d/65/6b5e8a7ff2f2968652c88a67dcecb925b9d8f0a0ce9458c76cd5a0dbd138/langchain_classic-1.0.8.tar.gz", hash = "sha256:ada0cc341a8a5b80fb24d73bdfaaeb849056ee2d8a41cc468355163fd3667484", size = 10557071, upload-time = "2026-06-10T21:27:54.866Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/99/9a/b8f5cb7490fdbf233088031fc69c9c747439d4097f67f196c1eb4869916d/langchain_classic-1.0.8-py3-none-any.whl", hash = "sha256:1a11ea7fbe630c4f2af2f3873d27718ceac9488cf32d0821030be7cf039a6213", size = 1041536, upload-time = "2026-06-10T21:27:52.767Z" }, -] - -[[package]] -name = "langchain-community" -version = "0.4.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohttp", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "httpx-sse", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langchain-classic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langsmith", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, - { name = "pydantic-settings", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "sqlalchemy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "tenacity", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ea/0c/e3aca1f2b1c5b95f8b87cb2b6e81a6f20d538c07a128419dc01cef0617b6/langchain_community-0.4.2.tar.gz", hash = "sha256:a99308160d53d7e9b5965ee665e5173709914338210089fd5788ad724432c21e", size = 33268708, upload-time = "2026-05-22T19:42:59.374Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/39/5d97e42a3e95dc2a6d71b2f902a3fae71786131e11d01bddb604accb0ebe/langchain_community-0.4.2-py3-none-any.whl", hash = "sha256:84dd8c5122532394d5b6849a5fc9995ef28e4f77227daeb09f24b3d942e9e466", size = 2364406, upload-time = "2026-05-22T19:42:57.103Z" }, -] - -[[package]] -name = "langchain-core" -version = "1.4.8" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jsonpatch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langchain-protocol", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langsmith", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "tenacity", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "uuid-utils", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/12/e3/bea6d0080acf183332f24dcd74c208aee5857cf8f783c3fb0bd86027d8fb/langchain_core-1.4.8.tar.gz", hash = "sha256:5bf1f8411077c904182ad8f975943d36adcbf579c4e017b3a118b719229ebf9a", size = 957974, upload-time = "2026-06-18T19:39:23.636Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/13/d6/bdf6f0481cc57ef300d6b1eb48cf1400c0409be715d6eb3cabadd1142a09/langchain_core-1.4.8-py3-none-any.whl", hash = "sha256:d84c28b05e3ba8d4271d0827aad5b592ccdaaf986e76768c23503f0a2045e8aa", size = 557416, upload-time = "2026-06-18T19:39:21.902Z" }, -] - -[[package]] -name = "langchain-openai" -version = "1.3.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "openai", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "tiktoken", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/93/4c/cf3c5a03f1d2e2e4367c1527231162a99d0f1c94113e1203c00469c860e4/langchain_openai-1.3.2.tar.gz", hash = "sha256:240917ae88d754b389a6f2ae06fa262c50c094eb4f576c27d560dff6b86c2f62", size = 3236213, upload-time = "2026-06-13T05:42:12.5Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/03/21/cbf6c3786de881b214c8c6c9f61fe44c9c47608428676a5cd5c5b2b0cda5/langchain_openai-1.3.2-py3-none-any.whl", hash = "sha256:3d247f43bba9f85d32a374b1bdf3932a0d1e3c60913ebeadf68630de52add67e", size = 119775, upload-time = "2026-06-13T05:42:11.088Z" }, -] - -[[package]] -name = "langchain-protocol" -version = "0.0.18" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d2/59/b5959aea96faa9146e2e49a7a22882b3528c62efafe9a6a95beab30c2305/langchain_protocol-0.0.18.tar.gz", hash = "sha256:ec3e11782f1ed0c9db38e5a9ed01b0e7a0d3fba406faa8aef6594b73c56a63e6", size = 6150, upload-time = "2026-06-18T17:08:26.959Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/99/2e/d82db9eec13ad0f72e7aaad5c4bc730ab111934fdc83c85523206eb9b0a0/langchain_protocol-0.0.18-py3-none-any.whl", hash = "sha256:70b53a86fbf9cedc863555effe44da192ab02d556ddbf2cf95b8873adcf41b5a", size = 7221, upload-time = "2026-06-18T17:08:25.996Z" }, -] - -[[package]] -name = "langchain-text-splitters" -version = "1.1.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/26/9f/6c545900fefb7b00ddfa3f16b80d61338a0ec68c31c5451eeeab99082760/langchain_text_splitters-1.1.2.tar.gz", hash = "sha256:782a723db0a4746ac91e251c7c1d57fd23636e4f38ed733074e28d7a86f41627", size = 293580, upload-time = "2026-04-16T14:20:39.162Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/26/1ef06f56198d631296d646a6223de35bcc6cf9795ceb2442816bc963b84c/langchain_text_splitters-1.1.2-py3-none-any.whl", hash = "sha256:a2de0d799ff31886429fd6e2e0032df275b60ec817c19059a7b46181cc1c2f10", size = 35903, upload-time = "2026-04-16T14:20:38.243Z" }, -] - -[[package]] -name = "langcodes" -version = "3.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/75/f9edc5d72945019312f359e69ded9f82392a81d49c5051ed3209b100c0d2/langcodes-3.5.1.tar.gz", hash = "sha256:40bff315e01b01d11c2ae3928dd4f5cbd74dd38f9bd912c12b9a3606c143f731", size = 191084, upload-time = "2025-12-02T16:22:01.627Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dd/c1/d10b371bcba7abce05e2b33910e39c33cfa496a53f13640b7b8e10bb4d2b/langcodes-3.5.1-py3-none-any.whl", hash = "sha256:b6a9c25c603804e2d169165091d0cdb23934610524a21d226e4f463e8e958a72", size = 183050, upload-time = "2025-12-02T16:21:59.954Z" }, -] - -[[package]] -name = "langgraph" -version = "1.2.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langgraph-checkpoint", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langgraph-prebuilt", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langgraph-sdk", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "xxhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/02/7a/ea09b05bb0cbddfa43bd34fc581357e87fc3f21a751cc0d419688c3106da/langgraph-1.2.6.tar.gz", hash = "sha256:f9b45a34f13930c94d96cdb76277447ad2cc70ec2d18cd2764d7fdadb36cdc1b", size = 714400, upload-time = "2026-06-18T20:58:21.514Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/89/32/772db1b00a9fe42f50320d1aa20caefb76e621eff1f7218b9918093d631d/langgraph-1.2.6-py3-none-any.whl", hash = "sha256:1cf94d3ca124f84f77ce408fa1b06c3dee680a8aafffe364a8fd5d7d03eb8695", size = 246132, upload-time = "2026-06-18T20:58:20.335Z" }, -] - -[[package]] -name = "langgraph-checkpoint" -version = "4.1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "ormsgpack", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/83/47/886af6f886f0bff2273164a45f008694e48a96ff3cd25ff0228f2aa9480e/langgraph_checkpoint-4.1.1.tar.gz", hash = "sha256:6c2bdb530c91f91d7d9c1bd100925d0fc4f498d418c17f3587d1526279482a25", size = 184020, upload-time = "2026-05-22T16:57:38.503Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/b4/71425e3e38be92611300b9cc5e46a5bf98ab23f5ea8a75b73d02a2f1413c/langgraph_checkpoint-4.1.1-py3-none-any.whl", hash = "sha256:25d29144b082827218e7bc3f1e9b0566a4bb007895cd6cc26f66a8428739f56e", size = 56212, upload-time = "2026-05-22T16:57:37.203Z" }, -] - -[[package]] -name = "langgraph-prebuilt" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langgraph-checkpoint", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/29/66/ed9b93f56bc17ef22d551892f0ac2b225a97fe0fcf23a511b857f70d590b/langgraph_prebuilt-1.1.0.tar.gz", hash = "sha256:3c579cf6eed2d17f9c157c2d0fcaddcd8688524e7022d3b22b37a3bf4589d528", size = 178833, upload-time = "2026-05-12T03:37:49.332Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/43/3fe1a700b8490ed02679cdbbc8c915eb23a092faf496c9c1118abcd10be3/langgraph_prebuilt-1.1.0-py3-none-any.whl", hash = "sha256:51e311747d755b751d5c6b39b0c1446124d3a7643d2515017e6714b323508fc9", size = 41043, upload-time = "2026-05-12T03:37:48.007Z" }, -] - -[[package]] -name = "langgraph-sdk" -version = "0.4.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "httpx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langchain-core", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langchain-protocol", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "orjson", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "websockets", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b4/2b/bd8ac26d4e97f6df88ef05ce5b6a38945a3903e1025d926f4752aa88aa97/langgraph_sdk-0.4.2.tar.gz", hash = "sha256:b88f0f5f6328ac0680d6790614a905b2bcfa257f2276dba4e38f0e86db0aa738", size = 348327, upload-time = "2026-06-01T17:51:19.856Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/05/aac507337cceae773c2cc9ab91eb6301963af7aeeb55b4217a00e15aff17/langgraph_sdk-0.4.2-py3-none-any.whl", hash = "sha256:75fa5096c1177ce39c847096a8fe3745ffd480ddb412995f836e9f5f884c43dd", size = 160521, upload-time = "2026-06-01T17:51:18.849Z" }, -] - -[[package]] -name = "langsmith" -version = "0.8.17" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "httpx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "orjson", marker = "(platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux') or (platform_python_implementation != 'PyPy' and sys_platform == 'darwin')" }, - { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "requests-toolbelt", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "uuid-utils", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "websockets", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "xxhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "zstandard", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ad/aa/30295e5b27b86a607aaa21390cb1e10c84203916fdcf953ba0ff94a1dfaa/langsmith-0.8.17.tar.gz", hash = "sha256:dfedd6a2558cf8e420fdf8b9ee735537f02d97c329197c9499a5c7ecbe0f18fb", size = 4525665, upload-time = "2026-06-18T20:56:20.102Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/09/04/3dddd1e331e000f942b174a7bf3382422dc2a8414ef8786efb2e9f9f5d6d/langsmith-0.8.17-py3-none-any.whl", hash = "sha256:62796120a46781a8c717b3d2e846e94343334b57bd504cc10b61a5d2e4739c5a", size = 507791, upload-time = "2026-06-18T20:56:17.959Z" }, -] - [[package]] name = "lark" version = "1.2.2" @@ -1630,33 +1183,6 @@ wheels = [ { 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" }, ] -[[package]] -name = "matplotlib" -version = "3.11.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "contourpy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "cycler", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "fonttools", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "kiwisolver", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, - { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pillow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pyparsing", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "python-dateutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1f/24/080c99d223d158d3a8902769269ab6da5b50f7a0e6e072513907e02b7a6c/matplotlib-3.11.0.tar.gz", hash = "sha256:68c0c7be01b30dcca3638934f7f591df73401235cbdbf0d1ab1c71e7db7f8b57", size = 33251176, upload-time = "2026-06-12T02:29:15.508Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/a2/78f662f1b18968531f67d3fcde1b7ea8496920bacd4f16ddb5b79d112e46/matplotlib-3.11.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f857524b442f0f36e641868ce2171aafa88cb0bc0644f4e1d8a5df9b32649fef", size = 9436261, upload-time = "2026-06-12T02:27:34.161Z" }, - { url = "https://files.pythonhosted.org/packages/5e/92/044f1de43901310202f4c79acf4f141be53b2ca8d8380e2fcefb3d523a75/matplotlib-3.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:57baa92fdc82948ed716eae6d2579d4d6f40965cd8d2f416755b4a72580a3233", size = 9264669, upload-time = "2026-06-12T02:27:37.413Z" }, - { url = "https://files.pythonhosted.org/packages/53/f4/f0b4f9ba7ec14a7af8151f3ad71ecfe3561e6ba38cfab1db3681ba4ca112/matplotlib-3.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:630eee0e67d35cce2019a0e670719f4816e3b86aff0fa72729f6c69786fceb45", size = 10021076, upload-time = "2026-06-12T02:27:39.926Z" }, - { url = "https://files.pythonhosted.org/packages/07/74/0a3683802037d8cd013144d77c247219b47f2aabace6fdde74faa12bacf7/matplotlib-3.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4d7aea652b58e686444079be3376ef546bffa1eee9b9bb9c472b9fcf6cf410d3", size = 10913103, upload-time = "2026-06-12T02:27:44.827Z" }, - { url = "https://files.pythonhosted.org/packages/0f/c2/f5da6cd37ed6871f5c9b3c0507ddb69f14d6c36fac4541e4e0c60cb8cdfc/matplotlib-3.11.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:81ae77077a1e16d37a5b61096ccb07c8d90a99b518fa8256b8f21578932f2f62", size = 9434094, upload-time = "2026-06-12T02:29:09.135Z" }, - { url = "https://files.pythonhosted.org/packages/f8/07/56f66906e0f87a0c6d0d0acbd34dbc9432b1931d8f26ef618bd6f92932a9/matplotlib-3.11.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ddef37840695f5eef65f9f070fe2d2f510f584c2156203f9f622a5b0584efffd", size = 9262183, upload-time = "2026-06-12T02:29:11.283Z" }, - { url = "https://files.pythonhosted.org/packages/0c/d8/c4ecab06b7ea36a570c4f3bd2d48d1799fd5d9174470e45c2194199431e7/matplotlib-3.11.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cf662e5ac5707658cb931e19972c4bd99f7b4f8b7bf79d3c821d239fa6b71e64", size = 10015653, upload-time = "2026-06-12T02:29:13.251Z" }, -] - [[package]] name = "mcp" version = "1.28.0" @@ -1690,48 +1216,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, ] -[[package]] -name = "medspacy" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jsonschema", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "medspacy-quickumls", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pyrush", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pysbd", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "spacy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/91/82/822c73438eac61351361f3de7278e381c42df81740d2dca363adc736e74d/medspacy-1.3.1.tar.gz", hash = "sha256:976599d9446e98018b311951cfa926be5a59d0c140967b828fe98bc4bada40fe", size = 244637, upload-time = "2024-11-21T22:19:07.592Z" } - -[[package]] -name = "medspacy-quickumls" -version = "3.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "medspacy-unqlite", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "nltk", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, - { name = "pysimstring", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pytest", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "six", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "spacy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "unidecode", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/91/a6/2fbf9b7dd475a4797f636f6bec2af0077f1c6ae4c27ca667858cb6fd5ad5/medspacy_quickumls-3.2.tar.gz", hash = "sha256:eeea4c94f4e46529470b9de894bac3384fe883f843d321cd578a62f880439165", size = 69852, upload-time = "2024-05-14T15:17:43.182Z" } - -[[package]] -name = "medspacy-unqlite" -version = "0.9.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9a/e2/a618321ed44add90c7777f7e894a0dce8fe1336b15032ba32f04d100a174/medspacy_unqlite-0.9.8.tar.gz", hash = "sha256:8bcd311b7038346d8803a1d9c50823ef3c99713ffb0a18f22d17ba6c9563a2eb", size = 636272, upload-time = "2025-05-16T08:07:18.957Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/96/0b40d77d0994e5f7ffda86911f19d769c65fad840804932226a8c624f08f/medspacy_unqlite-0.9.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3dbb26ca6219dcb57dfe518395009c1ce75d43202e3cbd725bfa9c5c071b8857", size = 349435, upload-time = "2025-05-16T09:17:26.331Z" }, - { url = "https://files.pythonhosted.org/packages/ed/c3/7f25aa5185a0c534ab1638184fb5defbe45edefce72d2de138121bfbcfa7/medspacy_unqlite-0.9.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db392053fcf3ce76beb89982eac078837dd486247770e350b2dd759b986ff45e", size = 327939, upload-time = "2025-05-16T09:17:27.308Z" }, - { url = "https://files.pythonhosted.org/packages/71/e2/c77a817c18ac1b2d584e46068ae481855b03307a93c88769833ab8b0877a/medspacy_unqlite-0.9.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f814537abd391fe5d057738c96192dd0dbe4cc61135db939112251ed92bdb8ed", size = 415399, upload-time = "2025-05-16T05:26:17.439Z" }, - { url = "https://files.pythonhosted.org/packages/cf/8b/16b95bc395d14edec734530be1992934df92636bfa659c84d8d6064c802e/medspacy_unqlite-0.9.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5d5564246ebe17ad16a4432b2e8bb8fa562fee481d8bed291e205d18e870ba7d", size = 423744, upload-time = "2025-05-16T09:17:28.302Z" }, -] - [[package]] name = "mistral-common" version = "1.11.3" @@ -1835,41 +1319,11 @@ version = "6.7.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/f1/a90635c4f88fb913fbf4ce660b83b7445b7a02615bda034b2f8eb38fd597/multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d", size = 76626, upload-time = "2026-01-26T02:43:26.485Z" }, - { url = "https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e", size = 44706, upload-time = "2026-01-26T02:43:27.607Z" }, - { url = "https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855", size = 44356, upload-time = "2026-01-26T02:43:28.661Z" }, { url = "https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144", size = 246293, upload-time = "2026-01-26T02:43:38.258Z" }, { url = "https://files.pythonhosted.org/packages/c8/11/a854b4154cd3bd8b1fd375e8a8ca9d73be37610c361543d56f764109509b/multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa", size = 241870, upload-time = "2026-01-26T02:43:47.054Z" }, { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, ] -[[package]] -name = "multiprocess" -version = "0.70.16" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "dill", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b5/ae/04f39c5d0d0def03247c2893d6f2b83c136bf3320a2154d7b8858f2ba72d/multiprocess-0.70.16.tar.gz", hash = "sha256:161af703d4652a0e1410be6abccecde4a7ddffd19341be0a7011b94aeb171ac1", size = 1772603, upload-time = "2024-01-28T18:52:34.85Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/f7/7ec7fddc92e50714ea3745631f79bd9c96424cb2702632521028e57d3a36/multiprocess-0.70.16-py310-none-any.whl", hash = "sha256:c4a9944c67bd49f823687463660a2d6daae94c289adff97e0f9d696ba6371d02", size = 134824, upload-time = "2024-01-28T18:52:26.062Z" }, - { url = "https://files.pythonhosted.org/packages/50/15/b56e50e8debaf439f44befec5b2af11db85f6e0f344c3113ae0be0593a91/multiprocess-0.70.16-py311-none-any.whl", hash = "sha256:af4cabb0dac72abfb1e794fa7855c325fd2b55a10a44628a3c1ad3311c04127a", size = 143519, upload-time = "2024-01-28T18:52:28.115Z" }, - { url = "https://files.pythonhosted.org/packages/ea/89/38df130f2c799090c978b366cfdf5b96d08de5b29a4a293df7f7429fa50b/multiprocess-0.70.16-py38-none-any.whl", hash = "sha256:a71d82033454891091a226dfc319d0cfa8019a4e888ef9ca910372a446de4435", size = 132628, upload-time = "2024-01-28T18:52:30.853Z" }, - { url = "https://files.pythonhosted.org/packages/da/d9/f7f9379981e39b8c2511c9e0326d212accacb82f12fbfdc1aa2ce2a7b2b6/multiprocess-0.70.16-py39-none-any.whl", hash = "sha256:a0bafd3ae1b732eac64be2e72038231c1ba97724b60b09400d68f229fcc2fbf3", size = 133351, upload-time = "2024-01-28T18:52:31.981Z" }, -] - -[[package]] -name = "murmurhash" -version = "1.0.15" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/23/2e/88c147931ea9725d634840d538622e94122bceaf346233349b7b5c62964b/murmurhash-1.0.15.tar.gz", hash = "sha256:58e2b27b7847f9e2a6edf10b47a8c8dd70a4705f45dccb7bf76aeadacf56ba01", size = 13291, upload-time = "2025-11-14T09:51:15.272Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/ca/77d3e69924a8eb4508bb4f0ad34e46adbeedeb93616a71080e61e53dad71/murmurhash-1.0.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f32307fb9347680bb4fe1cbef6362fb39bd994f1b59abd8c09ca174e44199081", size = 27397, upload-time = "2025-11-14T09:50:03.077Z" }, - { url = "https://files.pythonhosted.org/packages/e6/53/a936f577d35b245d47b310f29e5e9f09fcac776c8c992f1ab51a9fb0cee2/murmurhash-1.0.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:539d8405885d1d19c005f3a2313b47e8e54b0ee89915eb8dfbb430b194328e6c", size = 27692, upload-time = "2025-11-14T09:50:04.144Z" }, - { url = "https://files.pythonhosted.org/packages/4d/64/5f8cfd1fd9cbeb43fcff96672f5bd9e7e1598d1c970f808ecd915490dc20/murmurhash-1.0.15-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c4cd739a00f5a4602201b74568ddabae46ec304719d9be752fd8f534a9464b5e", size = 128396, upload-time = "2025-11-14T09:50:05.268Z" }, - { url = "https://files.pythonhosted.org/packages/53/73/32f2aaa22c1e4afae337106baf0c938abf36a6cc879cfee83a00461bbbf7/murmurhash-1.0.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c69b4d3bcd6233782a78907fe10b9b7a796bdc5d28060cf097d067bec280a5d", size = 127214, upload-time = "2025-11-14T09:50:09.265Z" }, -] - [[package]] name = "networkx" version = "3.6.1" @@ -1879,29 +1333,14 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, ] -[[package]] -name = "ninja" -version = "1.13.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/de/0e6edf44d6a04dabd0318a519125ed0415ce437ad5a1ec9b9be03d9048cf/ninja-1.13.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa", size = 180716, upload-time = "2025-08-11T15:09:58.696Z" }, - { url = "https://files.pythonhosted.org/packages/34/6f/5f5a54a1041af945130abdb2b8529cbef0cdcbbf9bcf3f4195378319d29a/ninja-1.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200", size = 581758, upload-time = "2025-08-11T15:10:13.295Z" }, -] - -[[package]] -name = "nltk" -version = "3.9.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "joblib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "regex", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/74/a1/b3b4adf15585a5bc4c357adde150c01ebeeb642173ded4d871e89468767c/nltk-3.9.4.tar.gz", hash = "sha256:ed03bc098a40481310320808b2db712d95d13ca65b27372f8a403949c8b523d0", size = 2946864, upload-time = "2026-03-24T06:13:40.641Z" } +[[package]] +name = "ninja" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/91/04e965f8e717ba0ab4bdca5c112deeab11c9e750d94c4d4602f050295d39/nltk-3.9.4-py3-none-any.whl", hash = "sha256:f2fa301c3a12718ce4a0e9305c5675299da5ad9e26068218b69d692fda84828f", size = 1552087, upload-time = "2026-03-24T06:13:38.47Z" }, + { url = "https://files.pythonhosted.org/packages/ed/de/0e6edf44d6a04dabd0318a519125ed0415ce437ad5a1ec9b9be03d9048cf/ninja-1.13.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa", size = 180716, upload-time = "2025-08-11T15:09:58.696Z" }, + { url = "https://files.pythonhosted.org/packages/34/6f/5f5a54a1041af945130abdb2b8529cbef0cdcbbf9bcf3f4195378319d29a/ninja-1.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200", size = 581758, upload-time = "2025-08-11T15:10:13.295Z" }, ] [[package]] @@ -2215,14 +1654,14 @@ name = "openai" version = "2.43.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "distro", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "httpx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "jiter", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "sniffio", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "anyio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "distro", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "jiter", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "sniffio", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "tqdm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f3/fa/88d0c58a0c58df7e6758e66b99c5d028d5e0bb49f8812d7203940cd9dbf1/openai-2.43.0.tar.gz", hash = "sha256:e74d238200a26868977002190fb6631613480a93dfe0c9c982e77021ed60a017", size = 785369, upload-time = "2026-06-17T17:06:56.06Z" } wheels = [ @@ -2379,29 +1818,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/55/22/41fb05f1dc5fda2c468e05a41814c20859016c85117b66c8a257cae814f6/opentelemetry_semantic_conventions_ai-0.5.1-py3-none-any.whl", hash = "sha256:25aeb22bd261543b4898a73824026d96770e5351209c7d07a0b1314762b1f6e4", size = 11250, upload-time = "2026-03-26T14:20:37.108Z" }, ] -[[package]] -name = "orjson" -version = "3.11.9" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7e/0c/964746fcafbd16f8ff53219ad9f6b412b34f345c75f384ad434ceaadb538/orjson-3.11.9.tar.gz", hash = "sha256:4fef17e1f8722c11587a6ef18e35902450221da0028e65dbaaa543619e68e48f", size = 5599163, upload-time = "2026-05-06T15:11:08.309Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/51/3fb9e65ae76ee97bd611869a503fa3fc0a6e81dd8b737cf3003f682df7ff/orjson-3.11.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f01c4818b3fc9b0da8e096722a84318071eaa118df35f6ed2344da0e73a5444f", size = 228522, upload-time = "2026-05-06T15:09:35.362Z" }, - { url = "https://files.pythonhosted.org/packages/16/fa/9d54b07cb3f3b0bfd57841478e42d7a0ece4a9f49f9907eecf5a45461687/orjson-3.11.9-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:3ebca4179031ee716ed076ffadc29428e900512f6fccee8614c9983157fcf19c", size = 128463, upload-time = "2026-05-06T15:09:37.063Z" }, - { url = "https://files.pythonhosted.org/packages/49/bd/360686f39348aa88827cb6fbf7dc606fd41c831a35235e1abf1db8e3a9e6/orjson-3.11.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:147302878da387104b66bb4a8b0227d1d487e976ce41a8501916161072ed87b1", size = 133971, upload-time = "2026-05-06T15:09:45.239Z" }, - { url = "https://files.pythonhosted.org/packages/b6/8a/4081492586d75b073d60c5271a8d0f05a0955cabf1e34c8473f6fcd84235/orjson-3.11.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:63e0efbc991250c0b3143488fa57d95affcabbfc63c99c48d625dd37779aafe2", size = 136959, upload-time = "2026-05-06T15:09:51.311Z" }, -] - -[[package]] -name = "ormsgpack" -version = "1.12.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/12/0c/f1761e21486942ab9bb6feaebc610fa074f7c5e496e6962dea5873348077/ormsgpack-1.12.2.tar.gz", hash = "sha256:944a2233640273bee67521795a73cf1e959538e0dfb7ac635505010455e53b33", size = 39031, upload-time = "2026-01-18T20:55:28.023Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4b/08/8b68f24b18e69d92238aa8f258218e6dfeacf4381d9d07ab8df303f524a9/ormsgpack-1.12.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:bd5f4bf04c37888e864f08e740c5a573c4017f6fd6e99fa944c5c935fabf2dd9", size = 378266, upload-time = "2026-01-18T20:55:59.876Z" }, - { url = "https://files.pythonhosted.org/packages/1b/33/543627f323ff3c73091f51d6a20db28a1a33531af30873ea90c5ac95a9b5/ormsgpack-1.12.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43013a3f3e2e902e1d05e72c0f1aeb5bedbb8e09240b51e26792a3c89267e181", size = 212401, upload-time = "2026-01-18T20:56:10.101Z" }, - { url = "https://files.pythonhosted.org/packages/66/c4/f337ac0905eed9c393ef990c54565cd33644918e0a8031fe48c098c71dbf/ormsgpack-1.12.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c6a4c34ddef109647c769d69be65fa1de7a6022b02ad45546a69b3216573eb4a", size = 425181, upload-time = "2026-01-18T20:55:37.83Z" }, -] - [[package]] name = "outlines-core" version = "0.2.14" @@ -2494,13 +1910,9 @@ version = "12.2.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819, upload-time = "2026-04-01T14:46:17.687Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/68/e1/748f5663efe6edcfc4e74b2b93edfb9b8b99b67f21a854c3ae416500a2d9/pillow-12.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:8be29e59487a79f173507c30ddf57e733a357f67881430449bb32614075a40ab", size = 5354347, upload-time = "2026-04-01T14:42:44.255Z" }, - { url = "https://files.pythonhosted.org/packages/47/a1/d5ff69e747374c33a3b53b9f98cca7889fce1fd03d79cdc4e1bccc6c5a87/pillow-12.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71cde9a1e1551df7d34a25462fc60325e8a11a82cc2e2f54578e5e9a1e153d65", size = 4695873, upload-time = "2026-04-01T14:42:46.452Z" }, { url = "https://files.pythonhosted.org/packages/d3/f1/00b7278c7dd52b17ad4329153748f87b6756ec195ff786c2bdf12518337d/pillow-12.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8bd7903a5f2a4545f6fd5935c90058b89d30045568985a71c79f5fd6edf9b91e", size = 8088188, upload-time = "2026-04-01T14:42:51.735Z" }, { url = "https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e74473c875d78b8e9d5da2a70f7099549f9eb37ded4e2f6a463e60125bccd176", size = 7079655, upload-time = "2026-04-01T14:42:56.954Z" }, { url = "https://files.pythonhosted.org/packages/7d/2e/9df2fc1e82097b1df3dce58dc43286aa01068e918c07574711fcc53e6fb4/pillow-12.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:90e6f81de50ad6b534cab6e5aef77ff6e37722b2f5d908686f4a5c9eba17a909", size = 7203402, upload-time = "2026-04-01T14:43:02.664Z" }, - { url = "https://files.pythonhosted.org/packages/4e/b7/2437044fb910f499610356d1352e3423753c98e34f915252aafecc64889f/pillow-12.2.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538bd5e05efec03ae613fd89c4ce0368ecd2ba239cc25b9f9be7ed426b0af1f", size = 5273969, upload-time = "2026-04-01T14:45:55.538Z" }, - { url = "https://files.pythonhosted.org/packages/f6/f4/8316e31de11b780f4ac08ef3654a75555e624a98db1056ecb2122d008d5a/pillow-12.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:394167b21da716608eac917c60aa9b969421b5dcbbe02ae7f013e7b85811c69d", size = 4659674, upload-time = "2026-04-01T14:45:58.093Z" }, { url = "https://files.pythonhosted.org/packages/49/62/5b0ed78fce87346be7a5cfcfaaad91f6a1f98c26f86bdbafa2066c647ef6/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0c838a5125cee37e68edec915651521191cef1e6aa336b855f495766e77a366e", size = 7032230, upload-time = "2026-04-01T14:46:03.874Z" }, { url = "https://files.pythonhosted.org/packages/5e/8b/51b0eddcfa2180d60e41f06bd6d0a62202b20b59c68f5a132e615b75aecf/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25373b66e0dd5905ed63fa3cae13c82fbddf3079f2c8bf15c6fb6a35586324c1", size = 6002215, upload-time = "2026-04-01T14:46:08.83Z" }, ] @@ -2578,22 +1990,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] -[[package]] -name = "preshed" -version = "3.0.13" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cymem", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "murmurhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/43/75/fe6b7bbd0dea530a001b0e24c331b21a0be2786e402abf3c57f5dce43d4b/preshed-3.0.13.tar.gz", hash = "sha256:d75f718bbfd97e992f7827e0fa7faf6a91bdd9c922d5baa4b50d62731396cb89", size = 18338, upload-time = "2026-03-23T08:57:31.378Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/d1/7bc39738388b38ff48cecbb326a9b2bb3f422bb32097be92e010f3162395/preshed-3.0.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5268c0e6fa96f50cdf87f516c2d4b32563c12706ee768e75c00e8d0098acd545", size = 136718, upload-time = "2026-03-23T08:56:23.889Z" }, - { url = "https://files.pythonhosted.org/packages/f6/65/de465b6801740140c2b5d2db6c312ca7937dcfd0442f1ae7d50dee529544/preshed-3.0.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:df642547a1a94079978a0ea8f4593ab4b8d3bd43f767bef0ef64d9a214f8c4c9", size = 137261, upload-time = "2026-03-23T08:56:25.303Z" }, - { url = "https://files.pythonhosted.org/packages/ee/2e/1ac761e973966893cd3a0ad3256360365276e2d1e779e351448981a1156a/preshed-3.0.13-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f8e6fe0620ed0f96a246d46447055c447e071cd8222731a045c235e8a758c918", size = 823096, upload-time = "2026-03-23T08:56:28.126Z" }, - { url = "https://files.pythonhosted.org/packages/34/48/32160a24705d56179de6af838c10a0c735c955dae5f9e4bb344750b79bc2/preshed-3.0.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:acd4d89abeca3678c5d8c89b3cd351314465bc67c7fa053d2644f8513e543386", size = 1881154, upload-time = "2026-03-23T08:56:31.49Z" }, -] - [[package]] name = "prometheus-client" version = "0.25.0" @@ -2622,9 +2018,6 @@ version = "0.5.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/f1/8a8cc1c2c7e7934ab77e0163414f736fadbc0f5e8dd9673b952355ac175b/propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78", size = 90744, upload-time = "2026-05-08T20:59:45.799Z" }, - { url = "https://files.pythonhosted.org/packages/c2/f4/651b1225e976bd1a2ba5cfba0c29d096581c2636b437e3a9a7ab6276270a/propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959", size = 52033, upload-time = "2026-05-08T20:59:47.408Z" }, - { url = "https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7", size = 52754, upload-time = "2026-05-08T20:59:49.202Z" }, { url = "https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b", size = 58888, upload-time = "2026-05-08T20:59:55.457Z" }, { url = "https://files.pythonhosted.org/packages/0b/42/314ebc50d8159055411fd6b0bda322ff510e4b1f7d2e4927940ad0f6af20/propcache-0.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f", size = 59731, upload-time = "2026-05-08T21:00:04.881Z" }, { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, @@ -2701,15 +2094,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/17/25/c5201706a2dd374e8ba6ee3fd7a8c89fb7ffc16eed5217a91fd2bd7f7626/pyarrow-24.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b196eb3f931862af3fa84c2a253514d859c08e0d8fe020e07be12e75a5a9780c", size = 51912986, upload-time = "2026-04-21T10:47:09.872Z" }, ] -[[package]] -name = "pyarrow-hotfix" -version = "0.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d2/ed/c3e8677f7abf3981838c2af7b5ac03e3589b3ef94fcb31d575426abae904/pyarrow_hotfix-0.7.tar.gz", hash = "sha256:59399cd58bdd978b2e42816a4183a55c6472d4e33d183351b6069f11ed42661d", size = 9910, upload-time = "2025-04-25T10:17:06.247Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/c3/94ade4906a2f88bc935772f59c934013b4205e773bcb4239db114a6da136/pyarrow_hotfix-0.7-py3-none-any.whl", hash = "sha256:3236f3b5f1260f0e2ac070a55c1a7b339c4bb7267839bd2015e283234e758100", size = 7923, upload-time = "2025-04-25T10:17:05.224Z" }, -] - [[package]] name = "pybase64" version = "1.4.3" @@ -2805,9 +2189,9 @@ name = "pydantic-settings" version = "2.14.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "python-dotenv", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "typing-inspection", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "python-dotenv", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-inspection", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] 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 = [ @@ -2823,19 +2207,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/46/2a/f9697576603dae937727827505a6126a066affb227034e77e6f9068910da/pyelftools-0.33-py3-none-any.whl", hash = "sha256:f215ad5f47d3f1373a21496a6c9e0707c622840d0622f23ff7ce08678b020036", size = 201178, upload-time = "2026-05-29T12:56:20.587Z" }, ] -[[package]] -name = "pyfastner" -version = "1.0.10" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cython", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "quicksectx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b3/59/005d6eae903c7d9a1861e8fd813ea7a03d65ab8807e6877a3dc12e5902da/PyFastNER-1.0.10.tar.gz", hash = "sha256:d477fc4f7acbb68f0c828b0bed478206092bb8190997dfda006993db5813b262", size = 13591, upload-time = "2023-12-13T05:15:48.285Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/41/90/d9e2d9439ee6c22562a0b175e0fdd503304b60cec22b8a484955aeac7659/PyFastNER-1.0.10-py3-none-any.whl", hash = "sha256:259665dd8a84c907559645d2ce33ec807be0fb03664cfdb14a50aa6436cedb72", size = 22522, upload-time = "2023-12-13T05:15:46.401Z" }, -] - [[package]] name = "pygments" version = "2.20.0" @@ -2868,43 +2239,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, ] -[[package]] -name = "pyrush" -version = "1.0.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cython", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pyfastner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "quicksectx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "setuptools", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "spacy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/92/33/5c1b4ea9746b9ca2707f4f374f8ae90643c14fa5bda94edb329a3676fb57/PyRuSH-1.0.9.tar.gz", hash = "sha256:263296d121924972891e2dcff51ec29971c5c15256c061cc4e746c9ef6080e84", size = 67077, upload-time = "2024-10-27T14:46:29.711Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/d3/c59681583fcb1051ad228d0470a9705992aa0a5cc90db9f01e448b29369a/PyRuSH-1.0.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:33ff9526976c9260ab1aa7717f124f6b107d9c90bd13ed4394267a0d8a28c722", size = 90208, upload-time = "2024-10-27T14:46:15.31Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f2/5d1bff452c3deb7247273cdb40d6df0bcb4e01bb4350085062ee2a1eccfc/PyRuSH-1.0.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9065c9cbc69006195ca0774346d29c729a79db25b4128aa02a5e861f74fd8c69", size = 211812, upload-time = "2024-10-27T14:46:16.167Z" }, - { url = "https://files.pythonhosted.org/packages/70/1e/d1cf28fe5c4773778e618ba0c3efea94476114ef290b2c19ba8fc01b7bd7/PyRuSH-1.0.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d50724ffabfae998a1526a1159c8d2fc4c9e0c2a6990dcf042c7d014c52d489a", size = 211409, upload-time = "2024-10-27T14:46:17.247Z" }, -] - -[[package]] -name = "pysbd" -version = "0.3.4" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/48/0a/c99fb7d7e176f8b176ef19704a32e6a9c6aafdf19ef75a187f701fc15801/pysbd-0.3.4-py3-none-any.whl", hash = "sha256:cd838939b7b0b185fcf86b0baf6636667dfb6e474743beeff878e9f42e022953", size = 71082, upload-time = "2021-02-11T16:36:33.351Z" }, -] - -[[package]] -name = "pysimstring" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/73/fa/6f72572dee43eb501447a87895620b07e25d7a91b290f088c4bb360bc82b/pysimstring-1.3.0.tar.gz", hash = "sha256:ff5215f0b27f6c07041c1e8a1a0e795df3dc9e149a7ef0a1418ace65361d2322", size = 70080, upload-time = "2025-04-06T22:40:04.662Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/53/12/f269b24f4b23d66db1817bba6c3dc35ff8c12f2a7e12624007b4ca8a787c/pysimstring-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ae1ff135c0ac51c2300a4983b012b63729b1451f2c49cb4b9e9ebf8dea35d63", size = 128006, upload-time = "2025-04-06T22:39:39.067Z" }, - { url = "https://files.pythonhosted.org/packages/f4/ad/1a9fce7775a713d872a3f091a9a392e7dc335adb6c19e9a099a720880363/pysimstring-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37c68e8e095fc64811d343b7141665de570fb9d3b87d875370db473f528eea32", size = 117050, upload-time = "2025-04-06T22:39:39.943Z" }, - { url = "https://files.pythonhosted.org/packages/ab/3c/d00d547c1a84089b39feada04edd84e8d46ace4377ed6c9d8a7082b1f1c7/pysimstring-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332920eda9c09a6622234829516988439e12b4b0b7903832d53ace6e611dc286", size = 1521843, upload-time = "2025-04-06T22:39:41.254Z" }, -] - [[package]] name = "pystow" version = "0.8.19" @@ -3026,19 +2360,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2d/2b/a8f171d5e172880885571bf89e93204aaf231a0e92c4c84714eaf18c271a/quack_kernels-0.5.0-py3-none-any.whl", hash = "sha256:08821ebfb8e638cc20308d5c59410c6dbb3b637ccc7b07bd57c7a9261a06af74", size = 327709, upload-time = "2026-05-29T05:00:24.679Z" }, ] -[[package]] -name = "quicksectx" -version = "0.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cython", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/40/af/f890ee37cb2801e548aaa7479073427cf0586a414564eaba13c76647c9fe/quicksectx-0.4.0.tar.gz", hash = "sha256:25bc4ce3638c0713c8b57274454adac071e36ee76265707771eb3dab75245c55", size = 238176, upload-time = "2024-10-12T06:17:36.257Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/f8/2c07b96f891091defc28fdfab794942a8966e9ee83113173fdb4a0b742d0/quicksectx-0.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d40aaec345f47192b2c9e2e1235835560a85a3aed5b61b661e8e74c5cecaca33", size = 505774, upload-time = "2024-10-12T06:17:18.021Z" }, - { url = "https://files.pythonhosted.org/packages/89/a9/a20978b3128220eb9ba07999667a9201bbf1a7196f18f23770309cac4c48/quicksectx-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68fc1af2027ffdf72ff6b77a446d28f01161b523a94879748cf6e589c30d8ada", size = 1079350, upload-time = "2024-10-12T06:17:19.599Z" }, -] - [[package]] name = "rapidfuzz" version = "3.14.5" @@ -3059,9 +2380,9 @@ name = "referencing" version = "0.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "attrs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "rpds-py", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "attrs", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "rpds-py", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } wheels = [ @@ -3096,18 +2417,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, ] -[[package]] -name = "requests-toolbelt" -version = "1.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" }, -] - [[package]] name = "rich" version = "13.9.4" @@ -3153,12 +2462,8 @@ version = "2026.5.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459, upload-time = "2026-05-28T12:02:13.232Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609, upload-time = "2026-05-28T11:58:50.78Z" }, - { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460, upload-time = "2026-05-28T11:58:52.374Z" }, { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012, upload-time = "2026-05-28T11:58:59.589Z" }, { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053, upload-time = "2026-05-28T11:59:06.837Z" }, - { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151, upload-time = "2026-05-28T12:01:53.43Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195, upload-time = "2026-05-28T12:01:54.901Z" }, { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778, upload-time = "2026-05-28T12:02:03.197Z" }, { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326, upload-time = "2026-05-28T12:02:11.47Z" }, ] @@ -3187,42 +2492,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ad/fe/cad1d9762868c7c5dc70c8620074df28ebb1a8e4c17d4c0cb031889c457e/safetensors-0.6.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d944cea65fad0ead848b6ec2c37cc0b197194bec228f8020054742190e9312ac", size = 655957, upload-time = "2025-08-08T13:13:57.029Z" }, ] -[[package]] -name = "scikit-learn" -version = "1.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "joblib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, - { name = "scipy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "threadpoolctl", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9e/a5/4ae3b3a0755f7b35a280ac90b28817d1f380318973cff14075ab41ef50d9/scikit_learn-1.6.1.tar.gz", hash = "sha256:b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e", size = 7068312, upload-time = "2025-01-10T08:07:55.348Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/2a/e291c29670795406a824567d1dfc91db7b699799a002fdaa452bceea8f6e/scikit_learn-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72abc587c75234935e97d09aa4913a82f7b03ee0b74111dcc2881cba3c5a7b33", size = 12102620, upload-time = "2025-01-10T08:06:16.675Z" }, - { url = "https://files.pythonhosted.org/packages/25/92/ee1d7a00bb6b8c55755d4984fd82608603a3cc59959245068ce32e7fb808/scikit_learn-1.6.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b3b00cdc8f1317b5f33191df1386c0befd16625f49d979fe77a8d44cae82410d", size = 11116234, upload-time = "2025-01-10T08:06:21.83Z" }, - { url = "https://files.pythonhosted.org/packages/a8/f3/62fc9a5a659bb58a03cdd7e258956a5824bdc9b4bb3c5d932f55880be569/scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25fc636bdaf1cc2f4a124a116312d837148b5e10872147bdaf4887926b8c03d8", size = 13497069, upload-time = "2025-01-10T08:06:32.515Z" }, -] - -[[package]] -name = "scipy" -version = "1.15.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/76/c6/8eb0654ba0c7d0bb1bf67bf8fbace101a8e4f250f7722371105e8b6f68fc/scipy-1.15.1.tar.gz", hash = "sha256:033a75ddad1463970c96a88063a1df87ccfddd526437136b6ee81ff0312ebdf6", size = 59407493, upload-time = "2025-01-11T00:06:16.883Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/2e/7b71312da9c2dabff53e7c9a9d08231bc34d9d8fdabe88a6f1155b44591c/scipy-1.15.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:5bd8d27d44e2c13d0c1124e6a556454f52cd3f704742985f6b09e75e163d20d2", size = 41424362, upload-time = "2025-01-11T00:00:22.985Z" }, - { url = "https://files.pythonhosted.org/packages/81/8c/ab85f1aa1cc200c796532a385b6ebf6a81089747adc1da7482a062acc46c/scipy-1.15.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:be3deeb32844c27599347faa077b359584ba96664c5c79d71a354b80a0ad0ce0", size = 32535910, upload-time = "2025-01-11T00:00:29.569Z" }, - { url = "https://files.pythonhosted.org/packages/3b/9c/6f4b787058daa8d8da21ddff881b4320e28de4704a65ec147adb50cb2230/scipy-1.15.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:5eb0ca35d4b08e95da99a9f9c400dc9f6c21c424298a0ba876fdc69c7afacedf", size = 24809398, upload-time = "2025-01-11T00:00:36.218Z" }, - { url = "https://files.pythonhosted.org/packages/16/2b/949460a796df75fc7a1ee1becea202cf072edbe325ebe29f6d2029947aa7/scipy-1.15.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:74bb864ff7640dea310a1377d8567dc2cb7599c26a79ca852fc184cc851954ac", size = 27918045, upload-time = "2025-01-11T00:00:42.627Z" }, - { url = "https://files.pythonhosted.org/packages/fc/da/452e1119e6f720df3feb588cce3c42c5e3d628d4bfd4aec097bd30b7de0c/scipy-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395be70220d1189756068b3173853029a013d8c8dd5fd3d1361d505b2aa58fa7", size = 40588469, upload-time = "2025-01-11T00:01:00.149Z" }, - { url = "https://files.pythonhosted.org/packages/7f/71/5f94aceeac99a4941478af94fe9f459c6752d497035b6b0761a700f5f9ff/scipy-1.15.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ce3a000cd28b4430426db2ca44d96636f701ed12e2b3ca1f2b1dd7abdd84b39a", size = 42965214, upload-time = "2025-01-11T00:01:10.131Z" }, -] - [[package]] name = "sentencepiece" version = "0.2.1" @@ -3286,18 +2555,6 @@ 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 = "smart-open" -version = "7.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "wrapt", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c5/65/3ada667d32675399001bf022ad3d9f3989b57101351ebc71d6fbe2384634/smart_open-7.6.1.tar.gz", hash = "sha256:4347996e7ba21db7cd1e059632e0b30395407e4f6c660d2ddffc8f2a9ae5f990", size = 54754, upload-time = "2026-05-09T06:23:37.06Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/14/78/0f68b93564b8c6b6987a0696c582ba2591a381ab2f733a501909e949f241/smart_open-7.6.1-py3-none-any.whl", hash = "sha256:b4de6aebef023aca91cc9fb372052e1343ba3f152de215bd22391a663e3ddd21", size = 64845, upload-time = "2026-05-09T06:23:35.386Z" }, -] - [[package]] name = "sniffio" version = "1.3.1" @@ -3316,89 +2573,6 @@ 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 = "spacy" -version = "3.7.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "catalogue", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "cymem", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "jinja2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langcodes", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "murmurhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, - { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "preshed", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "setuptools", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "spacy-legacy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "spacy-loggers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "srsly", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "thinc", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "typer", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "wasabi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "weasel", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/21/1e/94e3981516db6fcd6685f058c43c3fa81805c120b04829596367dad1aa4e/spacy-3.7.5.tar.gz", hash = "sha256:a648c6cbf2acc7a55a69ee9e7fa4f22bdf69aa828a587a1bc5cfff08cf3c2dd3", size = 1274806, upload-time = "2024-06-05T07:21:56Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/80/36/53a831d2e82a432d785823cdff56f84737aed26e8f7667d423ee32c3983d/spacy-3.7.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd93c34bf2a02bbed7df73d42aed8df5e3eb9688c4ea84ec576f740ba939cce5", size = 6750524, upload-time = "2024-06-05T07:20:46.41Z" }, - { url = "https://files.pythonhosted.org/packages/72/49/bd65abe76607c86dc1f104ad545eeb3e771f474b7e259e64e5a16614615b/spacy-3.7.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:190ba0032a5efdb138487c587c0ebb7a98f86adb917f464b252ee8766b8eec4a", size = 6517941, upload-time = "2024-06-05T07:20:49.203Z" }, - { url = "https://files.pythonhosted.org/packages/e0/ce/b5e6b02165881547ad251b0b172ebf496b9181a95833f94012af82d044df/spacy-3.7.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dad4853950a2fe6c7a0bdfd791a762d1f8cedd2915c4ae41b2e0ca3a850eefc", size = 6585757, upload-time = "2024-06-05T07:20:54.87Z" }, -] - -[[package]] -name = "spacy-legacy" -version = "3.0.12" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d9/79/91f9d7cc8db5642acad830dcc4b49ba65a7790152832c4eceb305e46d681/spacy-legacy-3.0.12.tar.gz", hash = "sha256:b37d6e0c9b6e1d7ca1cf5bc7152ab64a4c4671f59c85adaf7a3fcb870357a774", size = 23806, upload-time = "2023-01-23T09:04:15.104Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/55/12e842c70ff8828e34e543a2c7176dac4da006ca6901c9e8b43efab8bc6b/spacy_legacy-3.0.12-py2.py3-none-any.whl", hash = "sha256:476e3bd0d05f8c339ed60f40986c07387c0a71479245d6d0f4298dbd52cda55f", size = 29971, upload-time = "2023-01-23T09:04:13.45Z" }, -] - -[[package]] -name = "spacy-loggers" -version = "1.0.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/67/3d/926db774c9c98acf66cb4ed7faf6c377746f3e00b84b700d0868b95d0712/spacy-loggers-1.0.5.tar.gz", hash = "sha256:d60b0bdbf915a60e516cc2e653baeff946f0cfc461b452d11a4d5458c6fe5f24", size = 20811, upload-time = "2023-09-11T12:26:52.323Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/78/d1a1a026ef3af911159398c939b1509d5c36fe524c7b644f34a5146c4e16/spacy_loggers-1.0.5-py3-none-any.whl", hash = "sha256:196284c9c446cc0cdb944005384270d775fdeaf4f494d8e269466cfa497ef645", size = 22343, upload-time = "2023-09-11T12:26:50.586Z" }, -] - -[[package]] -name = "sqlalchemy" -version = "2.0.37" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "greenlet", marker = "(platform_machine == 'AMD64' and sys_platform == 'darwin') or (platform_machine == 'WIN32' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'darwin') or (platform_machine == 'amd64' and sys_platform == 'darwin') or (platform_machine == 'ppc64le' and sys_platform == 'darwin') or (platform_machine == 'win32' and sys_platform == 'darwin') or (platform_machine == 'x86_64' and sys_platform == 'darwin') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3b/20/93ea2518df4d7a14ebe9ace9ab8bb92aaf7df0072b9007644de74172b06c/sqlalchemy-2.0.37.tar.gz", hash = "sha256:12b28d99a9c14eaf4055810df1001557176716de0167b91026e648e65229bffb", size = 9626249, upload-time = "2025-01-09T22:43:25.981Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/37/4915290c1849337be6d24012227fb3c30c575151eec2b182ee5f45e96ce7/SQLAlchemy-2.0.37-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:78361be6dc9073ed17ab380985d1e45e48a642313ab68ab6afa2457354ff692c", size = 2104098, upload-time = "2025-01-10T00:32:29.975Z" }, - { url = "https://files.pythonhosted.org/packages/4c/f5/8cce9196434014a24cc65f6c68faa9a887080932361ee285986c0a35892d/SQLAlchemy-2.0.37-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b661b49d0cb0ab311a189b31e25576b7ac3e20783beb1e1817d72d9d02508bf5", size = 2094492, upload-time = "2025-01-10T00:32:32.697Z" }, - { url = "https://files.pythonhosted.org/packages/57/4f/e1db9475f940f1c54c365ed02d4f6390f884fc95a6a4022ece7725956664/SQLAlchemy-2.0.37-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa2c0913f02341d25fb858e4fb2031e6b0813494cca1ba07d417674128ce11b", size = 3212784, upload-time = "2025-01-10T00:58:09.639Z" }, - { url = "https://files.pythonhosted.org/packages/5f/c2/759347419f69cf0bbb76d330fbdbd24cefb15842095fe86bca623759b9e8/SQLAlchemy-2.0.37-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db18ff6b8c0f1917f8b20f8eca35c28bbccb9f83afa94743e03d40203ed83de9", size = 3169944, upload-time = "2025-01-10T00:58:12.998Z" }, - { url = "https://files.pythonhosted.org/packages/3b/36/59cc97c365f2f79ac9f3f51446cae56dfd82c4f2dd98497e6be6de20fb91/SQLAlchemy-2.0.37-py3-none-any.whl", hash = "sha256:a8998bf9f8658bd3839cbc44ddbe982955641863da0c1efe5b00c1ab4f5c16b1", size = 1894113, upload-time = "2025-01-10T00:44:58.368Z" }, -] - -[[package]] -name = "srsly" -version = "2.5.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "catalogue", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2b/db/f794f219a6c788b881252d2536a8c4a97d2bdaadc690391e1cb53d123d71/srsly-2.5.3.tar.gz", hash = "sha256:08f98dbecbff3a31466c4ae7c833131f59d3655a0ad8ac749e6e2c149e2b0680", size = 490881, upload-time = "2026-03-23T11:56:59.865Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/36/5d7bb412d52e9cca787f9bfe838b596367189b254e50bf90f234a97184bf/srsly-2.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:785a09216ac31570fb301ddb9f61ee73d1f18f8b9561f712dce0b8ac8628bc88", size = 656760, upload-time = "2026-03-23T11:55:47.155Z" }, - { url = "https://files.pythonhosted.org/packages/d6/dc/124f008cd2be3e887e972cbdeb17c5aee0f42093eca02c7cfd63bb5daf19/srsly-2.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0017c7d2a0cd9a4f1bdc00d946b45edcf90bb0e271e8f084c1ce542bf6708c32", size = 657503, upload-time = "2026-03-23T11:55:48.681Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ea/ecd396188f7591d80b89665f7af9e3ae02e42683daef57033ad7993ad3f9/srsly-2.5.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4ca4a068f6e14d84113a02fcb875c6b50a6285a12938c0e7a157eb3a63c50a86", size = 1142438, upload-time = "2026-03-23T11:55:52.607Z" }, - { url = "https://files.pythonhosted.org/packages/6b/86/1392a5593de0cd3d08c2d6c071b877c84358a37f63172c4e9cb71706842d/srsly-2.5.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9ffc97e22730ea97b00f7c303ccc60b1305e786afadb2a4a46578dafa4d29da0", size = 1115876, upload-time = "2026-03-23T11:55:55.624Z" }, -] - [[package]] name = "sse-starlette" version = "3.4.4" @@ -3480,53 +2654,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b6/cb/b86984bed139586d01532a587464b5805f12e397594f19f931c4c2fbfa61/tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539", size = 28169, upload-time = "2024-07-29T12:12:25.825Z" }, ] -[[package]] -name = "thinc" -version = "8.2.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "blis", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "catalogue", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "confection", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "cymem", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "murmurhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, - { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "preshed", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "setuptools", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "srsly", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "wasabi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/39/e6/12f9d4ade7af128db91f725675bc9f417e6f6ea777478f5c1c3140a105a9/thinc-8.2.4.tar.gz", hash = "sha256:9383b39f286291519ebbb6454bab76404992599b0cbdfaec56b2f985023186a7", size = 192961, upload-time = "2024-06-04T21:15:34.148Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/5c/7229e7c8878a480f352ab3536372287919f84c6396391c1709a73eb05182/thinc-8.2.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ccc58e47bc285e9afbf92ed6104f555abfa285a4b92198d955d344c4c1942607", size = 863703, upload-time = "2024-06-04T21:13:56.189Z" }, - { url = "https://files.pythonhosted.org/packages/b3/3f/7daca81216723222b3353dd9cefbda1ea2f3bfbac7ff9a725bfacbfa1c96/thinc-8.2.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:baa4af044bfcaf9df6a02d6c6d6e96c960da540478a522daabfbde8923df3554", size = 781179, upload-time = "2024-06-04T21:13:58.412Z" }, - { url = "https://files.pythonhosted.org/packages/06/06/cb247012a34e7043f911e9bcb0bdf0b5daa37cd1130e51afaa48a61ff5a6/thinc-8.2.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc8ab48d19cd69ad9a0de2bbe49b7c20a91150faeb119638bea4c502c52b77f", size = 920139, upload-time = "2024-06-04T21:14:03.502Z" }, -] - -[[package]] -name = "threadpoolctl" -version = "3.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, -] - [[package]] name = "tiktoken" version = "0.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "regex", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "regex", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "requests", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/37/02/576ff3a6639e755c4f70997b2d315f56d6d71e0d046f4fb64cb81a3fb099/tiktoken-0.8.0.tar.gz", hash = "sha256:9ccbb2740f24542534369c5635cfd9b2b3c2490754a78ac8831d99f89f94eeb2", size = 35107, upload-time = "2024-10-03T22:44:04.196Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/1e/ca48e7bfeeccaf76f3a501bd84db1fa28b3c22c9d1a1f41af9fb7579c5f6/tiktoken-0.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d622d8011e6d6f239297efa42a2657043aaed06c4f68833550cac9e9bc723ef1", size = 1039700, upload-time = "2024-10-03T22:43:28.315Z" }, - { url = "https://files.pythonhosted.org/packages/8c/f8/f0101d98d661b34534769c3818f5af631e59c36ac6d07268fbfc89e539ce/tiktoken-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2efaf6199717b4485031b4d6edb94075e4d79177a172f38dd934d911b588d54a", size = 982413, upload-time = "2024-10-03T22:43:29.807Z" }, { url = "https://files.pythonhosted.org/packages/01/c4/c4a4360de845217b6aa9709c15773484b50479f36bb50419c443204e5de9/tiktoken-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fb0e352d1dbe15aba082883058b3cce9e48d33101bdaac1eccf66424feb5b47", size = 1176588, upload-time = "2024-10-03T22:43:31.136Z" }, { url = "https://files.pythonhosted.org/packages/f8/a3/ef984e976822cd6c2227c854f74d2e60cf4cd6fbfca46251199914746f78/tiktoken-0.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56edfefe896c8f10aba372ab5706b9e3558e78db39dd497c940b47bf228bc419", size = 1237261, upload-time = "2024-10-03T22:43:32.75Z" }, ] @@ -3702,72 +2839,47 @@ wheels = [ [[package]] name = "trialmatchai" -version = "0.1.0" +version = "0.2.0" source = { editable = "." } dependencies = [ - { name = "accelerate", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "bioregistry", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "einops", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "faiss-cpu", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "gliner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "joblib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "lancedb", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "medspacy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "medspacy-quickumls", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "nltk", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, - { name = "orjson", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "pandas", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "peft", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "pyarrow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pydantic-settings", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pyfastner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pyrush", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pysbd", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "python-dateutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "python-dotenv", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "quicksectx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "rapidfuzz", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "regex", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "rich", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "safetensors", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "scikit-learn", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "scipy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "sentencepiece", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "spacy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "sqlalchemy", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "tenacity", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "tiktoken", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "tokenizers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] [package.optional-dependencies] entity = [ + { name = "gliner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "gliner2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] gpu = [ { name = "bitsandbytes", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "vllm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] llm = [ - { name = "httpx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langchain", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langchain-community", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "langchain-openai", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "openai", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -training = [ - { name = "bert-score", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "datasets", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "jinja2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "accelerate", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "einops", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "peft", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "safetensors", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "sentencepiece", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tokenizers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] [package.dev-dependencies] @@ -3779,60 +2891,37 @@ dev = [ [package.metadata] requires-dist = [ - { name = "accelerate", specifier = "==1.8.1" }, - { name = "bert-score", marker = "extra == 'training'", specifier = "==0.3.13" }, + { name = "accelerate", marker = "extra == 'llm'", specifier = "==1.8.1" }, { name = "bioregistry", specifier = "==0.13.62" }, { name = "bitsandbytes", marker = "(sys_platform == 'linux' and extra == 'gpu') or (sys_platform == 'win32' and extra == 'gpu')", specifier = "==0.49.2" }, - { name = "datasets", marker = "extra == 'training'", specifier = "==2.19.0" }, - { name = "einops", specifier = "==0.8.0" }, - { name = "faiss-cpu", specifier = "==1.9.0.post1" }, - { name = "gliner", specifier = "==0.2.27" }, + { name = "einops", marker = "extra == 'llm'", specifier = "==0.8.0" }, + { name = "gliner", marker = "extra == 'entity'", specifier = "==0.2.27" }, { name = "gliner2", marker = "extra == 'entity'", specifier = ">=1.3.1,<2" }, - { name = "httpx", marker = "extra == 'llm'", specifier = "==0.28.1" }, - { name = "huggingface-hub", specifier = ">=1.5.0,<2" }, - { name = "jinja2", marker = "extra == 'training'", specifier = "==3.1.6" }, - { name = "joblib", specifier = "==1.4.2" }, { name = "lancedb", specifier = ">=0.25.0,<0.26" }, - { name = "langchain", marker = "extra == 'llm'", specifier = "==1.3.10" }, - { name = "langchain-community", marker = "extra == 'llm'", specifier = "==0.4.2" }, - { name = "langchain-openai", marker = "extra == 'llm'", specifier = "==1.3.2" }, - { name = "medspacy", specifier = "==1.3.1" }, - { name = "medspacy-quickumls", specifier = "==3.2" }, - { name = "nltk", specifier = "==3.9.4" }, { name = "numpy", specifier = ">=2.0,<3" }, - { name = "openai", marker = "extra == 'llm'", specifier = ">=2.26.0,<3" }, - { name = "orjson", specifier = "==3.11.9" }, { name = "pandas", specifier = "==2.2.3" }, - { name = "peft", specifier = "==0.15.2" }, + { name = "peft", marker = "extra == 'llm'", specifier = "==0.15.2" }, { name = "pyarrow", specifier = ">=24.0.0,<25" }, { name = "pydantic", specifier = ">=2.12.0,<3" }, - { name = "pydantic-settings", specifier = ">=2.14.2,<3" }, - { name = "pyfastner", specifier = "==1.0.10" }, - { name = "pyrush", specifier = "==1.0.9" }, - { name = "pysbd", specifier = "==0.3.4" }, { name = "python-dateutil", specifier = "==2.9.0.post0" }, { name = "python-dotenv", specifier = "==1.2.2" }, { name = "pyyaml", specifier = "==6.0.2" }, - { name = "quicksectx", specifier = "==0.4.0" }, { name = "rapidfuzz", specifier = "==3.14.5" }, { name = "regex", specifier = ">=2025.10.22,<2027" }, { name = "requests", specifier = "==2.34.2" }, { name = "rich", specifier = "==13.9.4" }, - { name = "safetensors", specifier = ">=0.6.2,<0.7" }, - { name = "scikit-learn", specifier = "==1.6.1" }, - { name = "scipy", specifier = "==1.15.1" }, - { name = "sentencepiece", specifier = "==0.2.1" }, - { name = "spacy", specifier = "==3.7.5" }, - { name = "sqlalchemy", specifier = "==2.0.37" }, + { name = "safetensors", marker = "extra == 'llm'", specifier = ">=0.6.2,<0.7" }, + { name = "sentencepiece", marker = "extra == 'llm'", specifier = "==0.2.1" }, { name = "tenacity", specifier = "==9.0.0" }, - { name = "tiktoken", specifier = "==0.8.0" }, - { name = "tokenizers", specifier = "==0.22.1" }, - { name = "torch", specifier = "==2.11.0" }, + { name = "tokenizers", marker = "extra == 'llm'", specifier = "==0.22.1" }, + { name = "torch", marker = "extra == 'entity'", specifier = "==2.11.0" }, + { name = "torch", marker = "extra == 'llm'", specifier = "==2.11.0" }, { name = "tqdm", specifier = "==4.67.1" }, - { name = "transformers", specifier = "==5.6.2" }, + { name = "transformers", marker = "extra == 'entity'", specifier = "==5.6.2" }, + { name = "transformers", marker = "extra == 'llm'", specifier = "==5.6.2" }, { name = "vllm", marker = "sys_platform == 'linux' and extra == 'gpu'", specifier = "==0.23.0" }, ] -provides-extras = ["gpu", "llm", "entity", "training"] +provides-extras = ["gpu", "llm", "entity"] [package.metadata.requires-dev] dev = [ @@ -3864,18 +2953,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3f/f9/2b3ff4e56e5fa7debfaf9eb135d0da96f3e9a1d5b27222223c7296336e5f/typer-0.25.1-py3-none-any.whl", hash = "sha256:75caa44ed46a03fb2dab8808753ffacdbfea88495e74c85a28c5eefcf5f39c89", size = 58409, upload-time = "2026-04-30T19:32:18.271Z" }, ] -[[package]] -name = "typer-slim" -version = "0.24.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typer", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a7/a7/e6aecc4b4eb59598829a3b5076a93aff291b4fdaa2ded25efc4e1f4d219c/typer_slim-0.24.0.tar.gz", hash = "sha256:f0ed36127183f52ae6ced2ecb2521789995992c521a46083bfcdbb652d22ad34", size = 4776, upload-time = "2026-02-16T22:08:51.2Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/24/5480c20380dfd18cf33d14784096dca45a24eae6102e91d49a718d3b6855/typer_slim-0.24.0-py3-none-any.whl", hash = "sha256:d5d7ee1ee2834d5020c7c616ed5e0d0f29b9a4b1dd283bdebae198ec09778d0e", size = 3394, upload-time = "2026-02-16T22:08:49.92Z" }, -] - [[package]] name = "typing-extensions" version = "4.15.0" @@ -3906,15 +2983,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321, upload-time = "2026-04-24T15:22:05.876Z" }, ] -[[package]] -name = "unidecode" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149, upload-time = "2025-04-24T08:45:03.798Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837, upload-time = "2025-04-24T08:45:01.609Z" }, -] - [[package]] name = "urllib3" version = "2.7.0" @@ -3924,21 +2992,6 @@ 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 = "uuid-utils" -version = "0.16.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f8/5a/5da7ae85b38e3eddba0be3e8e4328f90882fe92989728e6fb552963d4c42/uuid_utils-0.16.2.tar.gz", hash = "sha256:fa637e4f314ad5b59ff6d8e809d506443d68bef30bfaecdfcfe02cce689abb2f", size = 42962, upload-time = "2026-06-18T13:36:48.735Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/96/4023966d42fd9bbf9e2a8ce2b25930113688128b569f68bc4697cb18181d/uuid_utils-0.16.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:fadd23eee409237fb8637a35796a6e108873c28b40f7de89a36685f18ca055ad", size = 567776, upload-time = "2026-06-18T13:35:02.902Z" }, - { url = "https://files.pythonhosted.org/packages/fc/30/764d2a76e8e7688abd5577e6024787c13692095eb1230fd1936f27205cd9/uuid_utils-0.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:79c5a3bd4301257b9a524efd16baf61ea65cd0d1b60b47d80f20b151fd65a09f", size = 288938, upload-time = "2026-06-18T13:35:04.285Z" }, - { url = "https://files.pythonhosted.org/packages/00/70/b3cf708e8942e6494742404a66f1586195a20c8fd235bdc79f385db383f1/uuid_utils-0.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a30b6a5790acb854e4b65fae7875e5d3c6f8076fa9c91dac43ff9e28380bc52", size = 327231, upload-time = "2026-06-18T13:35:09.327Z" }, - { url = "https://files.pythonhosted.org/packages/3f/98/371cc1f332f7463b9cfac0a66f984af00f4e3ada4a196b20879e35404e8b/uuid_utils-0.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:503f020acc7dbeb39c47fa33cf2971cf5960fa11f8394513fac461762a90c556", size = 532855, upload-time = "2026-06-18T13:35:15.99Z" }, - { url = "https://files.pythonhosted.org/packages/0e/48/8c9fee7d75571f2f4b2386eac798fe5f826155d13797f7c86d45eb3fdc23/uuid_utils-0.16.2-pp311-pypy311_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:8b8e325e61f918caf74ca540e3384b81e6e22aea782e57f615d15fc9773b96c8", size = 571003, upload-time = "2026-06-18T13:36:36.42Z" }, - { url = "https://files.pythonhosted.org/packages/de/78/754eaaa49509be6fdb705de61d1e3889de32002132d5f00e8c1e5d212da3/uuid_utils-0.16.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9282677ebf2ea5b437c20d16e75bcd7629bdc205018f95557b33b76868d8bb5b", size = 290244, upload-time = "2026-06-18T13:36:38.066Z" }, - { url = "https://files.pythonhosted.org/packages/6a/da/ddb1dcf0fe9bfcb0dfcddec8ae52c8f95e7088e44719f58477f5fb2c5586/uuid_utils-0.16.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:585d3adf73afa60348bf2bd529491c640a692350e76d8ff3974455e273aadfe7", size = 327940, upload-time = "2026-06-18T13:36:44.138Z" }, -] - [[package]] name = "uvicorn" version = "0.49.0" @@ -4053,15 +3106,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/72/bc/652f889cde1a20585a0ee0b1b6d36109cd8177bb60020dcb8ff477448440/vllm-0.23.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:71eae985c79ddaa999328cc56d206a1e9b785e079fc6da9e2359ec56ef1c842a", size = 274070208, upload-time = "2026-06-13T09:28:16.037Z" }, ] -[[package]] -name = "wasabi" -version = "1.1.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ac/f9/054e6e2f1071e963b5e746b48d1e3727470b2a490834d18ad92364929db3/wasabi-1.1.3.tar.gz", hash = "sha256:4bb3008f003809db0c3e28b4daf20906ea871a2bb43f9914197d540f4f2e0878", size = 30391, upload-time = "2024-05-31T16:56:18.99Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/06/7c/34330a89da55610daa5f245ddce5aab81244321101614751e7537f125133/wasabi-1.1.3-py3-none-any.whl", hash = "sha256:f76e16e8f7e79f8c4c8be49b4024ac725713ab10cd7f19350ad18a8e3f71728c", size = 27880, upload-time = "2024-05-31T16:56:16.699Z" }, -] - [[package]] name = "watchfiles" version = "1.2.0" @@ -4076,53 +3120,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e9/f9/45d021e4a5cc7b9dd567f7cbb06d3b75f751a690063fb6cc7ec60f4e46b7/watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a88fc94e647bc4eec523f1caa540258eb71d14278b9daf72fa1e2658a98df0f0", size = 457771, upload-time = "2026-05-18T04:30:56.331Z" }, ] -[[package]] -name = "weasel" -version = "0.4.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cloudpathlib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "confection", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "smart-open", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "srsly", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "typer-slim", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "wasabi", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/09/d7/edd9c24e60cf8e5de130aa2e8af3b01521f4d0216c371d01212f580d0d8e/weasel-0.4.3.tar.gz", hash = "sha256:f293d6174398e8f478c78481e00c503ee4b82ea7a3e6d0d6a01e46a6b1396845", size = 38733, upload-time = "2025-11-13T23:52:28.193Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/74/a148b41572656904a39dfcfed3f84dd1066014eed94e209223ae8e9d088d/weasel-0.4.3-py3-none-any.whl", hash = "sha256:08f65b5d0dbded4879e08a64882de9b9514753d9eaa4c4e2a576e33666ac12cf", size = 50757, upload-time = "2025-11-13T23:52:26.982Z" }, -] - [[package]] name = "websockets" version = "15.0.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423, upload-time = "2025-03-05T20:01:56.276Z" }, - { url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082, upload-time = "2025-03-05T20:01:57.563Z" }, - { url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330, upload-time = "2025-03-05T20:01:59.063Z" }, { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, ] -[[package]] -name = "wrapt" -version = "2.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2d/9f/06263fcd8ad6c405f05a3905fd7a84dd3176eb5ad46e44bccc0cd16348bb/wrapt-2.2.1.tar.gz", hash = "sha256:6744f504375775d7609c82c8d3d94af1c9a6f05586984536905908ba905277b9", size = 127620, upload-time = "2026-05-22T14:49:43.056Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/ac/4370bde262c0e633e6c4f0e56d55095710024cf9a5cecc20c59a10de483c/wrapt-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd57607acc85678925940bd5df0385ff8332083a32fa8d7a43f8767f4997263c", size = 80321, upload-time = "2026-05-22T14:47:43.996Z" }, - { url = "https://files.pythonhosted.org/packages/eb/79/b8ff3a61e71babf58a8cf4c0d63358e8bad383e15bf7f35e62d2f6b6e4a4/wrapt-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1ae574d65c9fa8e86f64f6a7c2668f9fcd507b183e0e577619f504b883cb0a6c", size = 81216, upload-time = "2026-05-22T14:47:45.243Z" }, - { url = "https://files.pythonhosted.org/packages/6e/fd/c0cac1f77c9c4f6fe58a920ca632ce379bb8be928720e11e8d73de28a5e9/wrapt-2.2.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9a04c28c10ba7fd12842b109d2edb0678872a2fe65277ca4ff06a0d61edee245", size = 159208, upload-time = "2026-05-22T14:47:47.176Z" }, - { url = "https://files.pythonhosted.org/packages/77/ac/5d203f98df8fd136b95c5227139aea02d34505e18baf812d0c005df61963/wrapt-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9b984d1eb252145d6302c1dbd5e87fc6d404d45531447c84eadec04bf1fcb027", size = 158347, upload-time = "2026-05-22T14:47:54.982Z" }, - { url = "https://files.pythonhosted.org/packages/53/46/29ac9daf11a86c22a8c38cd9236c62928ccae83f7ceb06bd3b0467cf9d05/wrapt-2.2.1-py3-none-any.whl", hash = "sha256:3aafea2975caef8ca49400640dde02cc7426e798f24870ed01f490bc3cffd32f", size = 61000, upload-time = "2026-05-22T14:49:41.593Z" }, -] - [[package]] name = "xgrammar" version = "0.2.2" @@ -4141,35 +3149,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9e/db/8cffed5a65db530e02756499ba0f4039adb1cb12850b0dcfadc384fa6440/xgrammar-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d81c13e97b7eec424da7f2b2ec61c88114301ec6037761995800a1ceb092656", size = 44588389, upload-time = "2026-06-11T19:01:35.577Z" }, ] -[[package]] -name = "xxhash" -version = "3.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/24/2f/e183a1b407002f5af81822bee18b61cdb94b8670208ef34734d8d2b8ebe9/xxhash-3.7.0.tar.gz", hash = "sha256:6cc4eefbb542a5d6ffd6d70ea9c502957c925e800f998c5630ecc809d6702bae", size = 82022, upload-time = "2026-04-25T11:10:32.553Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/f4/7bd35089ff1f8e2c96baa2dce05775a122aacd2e3830a73165e27a4d0848/xxhash-3.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fdc7d06929ae28dda98297a18eef7b0fd38991a3b405d8d7b55c9ef24c296958", size = 33423, upload-time = "2026-04-25T11:05:47.628Z" }, - { url = "https://files.pythonhosted.org/packages/a3/26/4e00c88a6a2c8a759cfb77d2a9a405f901e8aa66e60ef1fd0aeb35edda48/xxhash-3.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea6daa712f4e094a30830cf01e9b47d03b24d05cc9dab8609f0d9a9db8454712", size = 30857, upload-time = "2026-04-25T11:05:49.189Z" }, - { url = "https://files.pythonhosted.org/packages/f7/d0/3c91e4e6a05ca4d7df8e39ec3a75b713609258ec84705ab34be6430826a1/xxhash-3.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7d9110d0c3fb02679972837a033251fd186c529aa62f19c132fc909c74052b8", size = 193937, upload-time = "2026-04-25T11:06:00.546Z" }, - { url = "https://files.pythonhosted.org/packages/d3/4e/fd6f8a680ba248fdb83054fa71a8bfa3891225200de1708b888ef2c49829/xxhash-3.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1cc07c639e3a77ef1d32987464d3e408565b8a3be57b545d3542b191054d9923", size = 191459, upload-time = "2026-04-25T11:06:14.07Z" }, - { url = "https://files.pythonhosted.org/packages/54/c1/e57ac7317b1f58a92bab692da6d497e2a7ce44735b224e296347a7ecc754/xxhash-3.7.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ad3aa71e12ee634f22b39a0ff439357583706e50765f17f05550f92dbf128a23", size = 31232, upload-time = "2026-04-25T11:10:21.51Z" }, - { url = "https://files.pythonhosted.org/packages/4f/4e/075559bd712bc62e84915ea46bbee859f935d285659082c129bdbff679dd/xxhash-3.7.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5de686e73690cdaf72b96d4fa083c230ec9020bcc2627ce6316138e2cf2fe2d1", size = 28553, upload-time = "2026-04-25T11:10:23.1Z" }, - { url = "https://files.pythonhosted.org/packages/e7/f7/5a484afce0f48dd8083208b42e4911f290a82c7b52458ef2927e4d421a45/xxhash-3.7.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a169a036bed0995e090d1493b283cc2cc8a6f5046821086b843abefff80643bc", size = 32534, upload-time = "2026-04-25T11:10:29.01Z" }, -] - [[package]] name = "yarl" version = "1.24.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "multidict", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "propcache", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "idna", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "multidict", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "propcache", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/c5/1ce244152ff2839645e7cae92f90e7bafcb2c52bea7ff586ac714f14f5df/yarl-1.24.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:36348bebb147b83818b9d7e673ea4debc75970afc6ffdc7e3975ad05ce5a58c1", size = 128971, upload-time = "2026-05-19T21:28:20.543Z" }, - { url = "https://files.pythonhosted.org/packages/87/5a/00f36967203ed89cb3acd2c8ed526cc3fed9418eb70ce128160a911c8499/yarl-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a97e42c8a2233f2f279ecadd9e4a037bcb5d813b78435e8eedd4db5a9e9708c", size = 91507, upload-time = "2026-05-19T21:28:22.556Z" }, - { url = "https://files.pythonhosted.org/packages/31/d0/1fb0c1cd27288f39f6974da4318c32768d72c9890984541fdf1e2e32a51d/yarl-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d027d56f1035e339d1001ac33eceab5b2ec8e42e449787bb75e289fb9a5cd1d", size = 91343, upload-time = "2026-05-19T21:28:24.092Z" }, { url = "https://files.pythonhosted.org/packages/b6/ec/08f671f69a444d704aeecebf92af659b67b97a869942411d0a578b08c334/yarl-1.24.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49016d82f032b1bd1e10b01078a7d29ae71bf468eeae0ea22df8bab691e60003", size = 106384, upload-time = "2026-05-19T21:28:32.856Z" }, { url = "https://files.pythonhosted.org/packages/90/af/0248eb065e51129d2a9b2436cd1b5c772c19a6b04e5b6a186955671e3319/yarl-1.24.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7b54b9c67c2b06bd7b9a77253d242124b9c95d2c02def5a1144001ee547dd9d5", size = 106558, upload-time = "2026-05-19T21:28:45.806Z" }, { url = "https://files.pythonhosted.org/packages/fd/4d/4b880086bd0d3e034d25647be1d830afc3e3f610e98c4ab3490af6b1b6d5/yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9", size = 53576, upload-time = "2026-05-19T21:31:03.909Z" }, @@ -4183,16 +3173,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/8a/8e/0c8f17309549d2e5c wheels = [ { url = "https://files.pythonhosted.org/packages/21/c9/bb51a96af0091324c81b803f16c49f719f9f6ea0b0bb52200f5c97ec4892/z3_solver-4.15.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e103a6f203f505b8b8b8e5c931cc407c95b61556512d4921c1ddc0b3f41b08e", size = 29268352, upload-time = "2025-10-29T18:11:53.032Z" }, ] - -[[package]] -name = "zstandard" -version = "0.25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz", hash = "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size = 711513, upload-time = "2025-09-14T22:15:54.002Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/83/c3ca27c363d104980f1c9cee1101cc8ba724ac8c28a033ede6aab89585b1/zstandard-0.25.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:933b65d7680ea337180733cf9e87293cc5500cc0eb3fc8769f4d3c88d724ec5c", size = 795254, upload-time = "2025-09-14T22:16:26.137Z" }, - { url = "https://files.pythonhosted.org/packages/ac/4d/e66465c5411a7cf4866aeadc7d108081d8ceba9bc7abe6b14aa21c671ec3/zstandard-0.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3f79487c687b1fc69f19e487cd949bf3aae653d181dfb5fde3bf6d18894706f", size = 640559, upload-time = "2025-09-14T22:16:27.973Z" }, - { url = "https://files.pythonhosted.org/packages/bb/1f/e9cfd801a3f9190bf3e759c422bbfd2247db9d7f3d54a56ecde70137791a/zstandard-0.25.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9300d02ea7c6506f00e627e287e0492a5eb0371ec1670ae852fefffa6164b072", size = 5559635, upload-time = "2025-09-14T22:16:37.141Z" }, - { url = "https://files.pythonhosted.org/packages/46/c0/ca3e533b4fa03112facbe7fbe7779cb1ebec215688e5df576fe5429172e0/zstandard-0.25.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f373da2c1757bb7f1acaf09369cdc1d51d84131e50d5fa9863982fd626466313", size = 5574377, upload-time = "2025-09-14T22:16:40.523Z" }, - { url = "https://files.pythonhosted.org/packages/e2/be/94267dc6ee64f0f8ba2b2ae7c7a2df934a816baaa7291db9e1aa77394c3c/zstandard-0.25.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:72d35d7aa0bba323965da807a462b0966c91608ef3a48ba761678cb20ce5d8b7", size = 5366047, upload-time = "2025-09-14T22:16:51.328Z" }, -] From e20a3dcca1a6e7d3a005da05e34ee0d0440af8be Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 21 Jun 2026 20:02:57 +0200 Subject: [PATCH 05/64] Remove Docker deployment artifacts --- .dockerignore | 21 ------------------ .github/workflows/ci.yml | 6 ------ Dockerfile | 29 ------------------------- README.md | 15 +------------ docker-compose.yml | 30 -------------------------- docs/HLD.md | 2 +- docs/release.md | 9 -------- src/trialmatchai/services/preflight.py | 2 +- tests/test_preflight_and_indexer.py | 2 +- 9 files changed, 4 insertions(+), 112 deletions(-) delete mode 100644 .dockerignore delete mode 100644 Dockerfile delete mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index ac57fd4e..00000000 --- a/.dockerignore +++ /dev/null @@ -1,21 +0,0 @@ -.git -.github -.venv -.pytest_cache -.ruff_cache -__pycache__ -*.pyc -*.pyo -*.log -.env -.env.* -!/.env.example -data/ -results/ -models/ -logs/ -build/ -dist/ -*.egg-info/ -source/ -utils/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 87d32d4f..450d7bc9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,9 +41,3 @@ jobs: - name: Dependency audit # vLLM 0.23 pins torch 2.11.0; CVE-2025-3000 has no fixed version listed. run: uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 - - - name: Validate Compose - run: docker compose config - - - name: Build Docker image - run: docker build . diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 8b9232e9..00000000 --- a/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -FROM --platform=linux/amd64 python:3.11-slim AS runtime - -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 \ - UV_SYSTEM_PYTHON=1 \ - PATH="/app/.venv/bin:${PATH}" - -WORKDIR /app - -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - bash \ - build-essential \ - ca-certificates \ - curl \ - git \ - unzip \ - && rm -rf /var/lib/apt/lists/* \ - && pip install --no-cache-dir uv - -COPY pyproject.toml uv.lock README.md LICENSE ./ -COPY src ./src -COPY scripts ./scripts - -RUN uv sync --frozen --no-dev --extra llm --extra gpu --extra entity - -VOLUME ["/app/data", "/app/models", "/app/results"] - -CMD ["trialmatchai-healthcheck"] diff --git a/README.md b/README.md index 2cb567dd..e95cfce2 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ This software is for research and informational use only. It is not medical advi ## Deployment Target -The supported v1 deployment path is a single Python 3.11 GPU server or VM. Trial and criteria search use embedded LanceDB tables under `data/search`, so no separate search service, container, socket, TLS certificate, or service credential is required. Docker remains optional for packaging the worker. +The supported v1 deployment path is a single Python 3.11 GPU server or VM. Trial and criteria search use embedded LanceDB tables under `data/search`, so no separate search service, container, socket, TLS certificate, or service credential is required. ## Requirements @@ -75,17 +75,6 @@ uv run trialmatchai-run Results are written under `results/`. -## Docker Worker - -Docker is optional. The worker container uses mounted local folders and the same embedded LanceDB tables: - -```bash -docker compose build trialmatchai-worker -docker compose run --rm trialmatchai-worker trialmatchai-healthcheck -docker compose run --rm trialmatchai-worker trialmatchai-update-registry --max-studies 100 -docker compose run --rm trialmatchai-worker trialmatchai-run -``` - ## Configuration Configuration defaults live in `src/trialmatchai/config/config.json`. Runtime overrides use `.env` or environment variables: @@ -175,8 +164,6 @@ uv run ruff check . uv run pytest uv run python scripts/scan_secrets.py uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 -docker compose config -docker build . ``` ## Support diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 75830ffa..00000000 --- a/docker-compose.yml +++ /dev/null @@ -1,30 +0,0 @@ -services: - trialmatchai-worker: - build: . - volumes: - - ./data:/app/data - - ./models:/app/models - - ./results:/app/results - - ./example:/app/example:ro - environment: - TRIALMATCHAI_PATIENTS_DIR: /app/example - TRIALMATCHAI_OUTPUT_DIR: /app/results - TRIALMATCHAI_TRIALS_JSON_FOLDER: /app/data/trials_jsons - TRIALMATCHAI_SEARCH_BACKEND: lancedb - TRIALMATCHAI_SEARCH_DB_PATH: /app/data/search - TRIALMATCHAI_SEARCH_TRIALS_TABLE: trials - TRIALMATCHAI_SEARCH_CRITERIA_TABLE: criteria - TRIALMATCHAI_SEARCH_MODE: hybrid - TRIALMATCHAI_ENTITY_BACKEND: gliner2 - TRIALMATCHAI_ENTITY_SCHEMA_PATH: /app/src/trialmatchai/entity_schemas/trialmatchai.yaml - TRIALMATCHAI_CONCEPT_DB_PATH: /app/data/concepts - TRIALMATCHAI_CONCEPT_TABLE: concepts - TRIALMATCHAI_LINK_ACCEPT: "0.80" - TRIALMATCHAI_LINK_REJECT: "0.30" - TRIALMATCHAI_REGISTRY_SOURCE: clinicaltrials.gov - TRIALMATCHAI_REGISTRY_SINCE_DAYS: "7" - TRIALMATCHAI_REGISTRY_RAW_DIR: /app/data/registry/raw - TRIALMATCHAI_REGISTRY_MANIFEST_PATH: /app/data/registry/manifest.jsonl - TRIALMATCHAI_REGISTRY_REPORTS_DIR: /app/data/registry/runs - TRIALMATCHAI_LOG_JSON: "1" - command: ["trialmatchai-healthcheck", "--registry"] diff --git a/docs/HLD.md b/docs/HLD.md index b3bd33cb..bf87f43c 100644 --- a/docs/HLD.md +++ b/docs/HLD.md @@ -147,7 +147,7 @@ Default deployment requires only the Python worker process and local mounted dir - `models/` - `results/` -Docker is optional and packages only the worker. The application does not auto-start external services. +The application runs as a Python process and does not auto-start external services. ## 7. Runtime Configuration diff --git a/docs/release.md b/docs/release.md index 26bcf207..873558ee 100644 --- a/docs/release.md +++ b/docs/release.md @@ -32,12 +32,3 @@ python -m venv /tmp/trialmatchai-wheel-smoke /tmp/trialmatchai-wheel-smoke/bin/pip install dist/trialmatchai-*.whl /tmp/trialmatchai-wheel-smoke/bin/python -c "import trialmatchai; print(trialmatchai.__version__)" ``` - -## Container Checks - -```bash -docker compose config -docker build . -``` - -Docker is not required for local LanceDB operation; it is a packaging option for a worker environment. diff --git a/src/trialmatchai/services/preflight.py b/src/trialmatchai/services/preflight.py index c46c4178..05c641fd 100644 --- a/src/trialmatchai/services/preflight.py +++ b/src/trialmatchai/services/preflight.py @@ -82,7 +82,7 @@ def run_preflight_checks( if importlib.util.find_spec("vllm") is None: issues.append( "cot_backend=vllm requires the GPU extra " - "(`uv sync --extra gpu`) or the Docker worker image." + "(`uv sync --extra llm --extra gpu`)." ) try: import torch diff --git a/tests/test_preflight_and_indexer.py b/tests/test_preflight_and_indexer.py index 6bbc64d4..30bd1c3f 100644 --- a/tests/test_preflight_and_indexer.py +++ b/tests/test_preflight_and_indexer.py @@ -113,7 +113,7 @@ def test_preflight_reports_missing_vllm_extra(tmp_path, monkeypatch): assert issues == [ "cot_backend=vllm requires the GPU extra " - "(`uv sync --extra gpu`) or the Docker worker image." + "(`uv sync --extra llm --extra gpu`)." ] From 40b2a0975b6c5ce8748c1ba146ae0296823f01c3 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 21 Jun 2026 20:14:22 +0200 Subject: [PATCH 06/64] Clean up package workflows and bootstrap CLI --- .env.example | 9 ++ Makefile | 43 +++-- README.md | 3 + docs/HLD.md | 177 --------------------- requirements.txt | 64 -------- scripts/bootstrap_data.sh | 125 --------------- scripts/index_data.sh | 18 --- setup.sh | 54 ------- src/trialmatchai/cli/bootstrap_data.py | 212 +++++++++++++++++++++++-- src/trialmatchai/cli/main.py | 3 + tests/test_bootstrap_data.py | 112 +++++++++++++ tests/test_package_imports.py | 13 ++ 12 files changed, 365 insertions(+), 468 deletions(-) delete mode 100644 docs/HLD.md delete mode 100644 requirements.txt delete mode 100644 scripts/bootstrap_data.sh delete mode 100644 scripts/index_data.sh delete mode 100644 setup.sh create mode 100644 tests/test_bootstrap_data.py diff --git a/.env.example b/.env.example index 10dc8e14..01b25ca0 100644 --- a/.env.example +++ b/.env.example @@ -40,5 +40,14 @@ TRIALMATCHAI_REGISTRY_MANIFEST_PATH=data/registry/manifest.jsonl TRIALMATCHAI_REGISTRY_REPORTS_DIR=data/registry/runs TRIALMATCHAI_REGISTRY_FAILURE_THRESHOLD=0.25 +TRIALMATCHAI_PROCESSED_TRIALS_SHA256= +TRIALMATCHAI_MODELS_SHA256= +TRIALMATCHAI_CRITERIA_PART_0_SHA256= +TRIALMATCHAI_CRITERIA_PART_1_SHA256= +TRIALMATCHAI_CRITERIA_PART_2_SHA256= +TRIALMATCHAI_CRITERIA_PART_3_SHA256= +TRIALMATCHAI_CRITERIA_PART_4_SHA256= +TRIALMATCHAI_CRITERIA_PART_5_SHA256= + TRIALMATCHAI_LOG_LEVEL=INFO TRIALMATCHAI_LOG_JSON=1 diff --git a/Makefile b/Makefile index e26a94f2..abcb0b47 100644 --- a/Makefile +++ b/Makefile @@ -1,37 +1,46 @@ -.PHONY: venv sync sync-gpu test lock lint audit healthcheck bootstrap index run setup - -venv: - uv venv +.PHONY: audit bootstrap build clean healthcheck index lint lock release-check sync sync-model test update-registry sync: uv sync -sync-gpu: - uv sync --extra gpu - -test: - uv run pytest +sync-model: + uv sync --extra llm --extra gpu --extra entity lock: - uv lock + uv lock --check lint: - uv run python -m ruff check . + uv run ruff check . + +test: + uv run pytest audit: uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 +build: + uv build + healthcheck: - uv run trialmatchai-healthcheck + uv run trialmatchai-healthcheck --registry bootstrap: uv run trialmatchai-bootstrap-data +update-registry: + uv run trialmatchai-update-registry + index: - uv run trialmatchai-index + uv run trialmatchai-index --prepare -run: - uv run trialmatchai-run +release-check: + uv lock --check + uv run ruff check . + uv run pytest + uv build + uv run python scripts/scan_secrets.py + uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 -setup: - bash setup.sh +clean: + rm -rf build dist src/*.egg-info .pytest_cache .ruff_cache + find . -name '__pycache__' -type d -prune -exec rm -rf {} + diff --git a/README.md b/README.md index e95cfce2..4593dcd7 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,8 @@ cp .env.example .env Dependency auditing currently ignores `CVE-2025-3000` because vLLM 0.23 pins Torch 2.11.0 and the advisory has no fixed Torch version listed. Revisit that exception whenever upgrading vLLM or Torch. +Artifact bootstrap supports optional SHA-256 verification through `TRIALMATCHAI_PROCESSED_TRIALS_SHA256`, `TRIALMATCHAI_MODELS_SHA256`, and `TRIALMATCHAI_CRITERIA_PART__SHA256`. + ## Quickstart Install the package for local development and operational CLIs: @@ -126,6 +128,7 @@ The command group is also available as: ```bash uv run python -m trialmatchai healthcheck +uv run trialmatchai bootstrap-data --skip-models uv run trialmatchai update-registry --dry-run --max-studies 25 ``` diff --git a/docs/HLD.md b/docs/HLD.md deleted file mode 100644 index bf87f43c..00000000 --- a/docs/HLD.md +++ /dev/null @@ -1,177 +0,0 @@ -# High Level Design - TrialMatchAI - -## 1. Overview - -TrialMatchAI is a batch clinical trial matching system. Given a GA4GH Phenopacket, it retrieves candidate trials from embedded LanceDB tables, reranks eligibility criteria with an LLM, performs criterion-level reasoning, and writes ranked recommendations. - -### Goals - -- Match de-identified research patient profiles to relevant clinical trials. -- Keep deployment local-first and service-light for a single GPU server. -- Provide criterion-level explainability. -- Use ontology-grounded entity extraction and normalization. - -### Non-Goals - -- Real-time clinical web application deployment. -- Direct EHR integration. -- Use with identifiable patient data without additional controls. -- Trial outcome prediction. - -## 2. Architecture - -``` -ClinicalTrials.gov JSONs - | - v -prepare_trials.py / prepare_criteria.py - | - v -Schema entity annotation + LanceDB concept linking - | - v -BGE-M3 embeddings - | - v -data/search LanceDB tables - | - v -Phenopacket -> keywords -> Stage 1 retrieval -> Stage 2 criteria rerank - | - v -Stage 3 eligibility reasoning -> ranked_trials.json -``` - -The search layer is embedded in the Python worker. There is no separate database service to start, secure, or monitor for the default v1 deployment. - -## 3. Persistent Stores - -### `data/search` Trial Table - -One row per trial. - -| Field | Notes | -|---|---| -| `nct_id` | Primary trial identifier | -| `brief_title`, `brief_summary`, `condition`, `eligibility_criteria` | Source text fields | -| `*_vector` | Prepared BGE-M3 vectors from the existing preparation pipeline | -| `search_text` | Flattened text used for local full-text candidate generation | -| `search_vector` | Averaged vector used for vector candidate generation | -| `minimum_age`, `maximum_age`, `gender`, `overall_status` | Runtime filters | - -### `data/search` Criteria Table - -One row per eligibility criterion. - -| Field | Notes | -|---|---| -| `criteria_id` | Stable criterion identifier | -| `nct_id` | Parent trial identifier | -| `criterion` | Criterion text | -| `criterion_vector` | BGE-M3 criterion vector | -| `entities` | Schema annotations and concept-link candidates | -| `entity_text`, `entity_synonyms_text` | Flattened entity search fields | -| `search_text` | Combined criterion/entity text | - -### `data/concepts` Concept Table - -The concept table is built from OMOP `CONCEPT.csv`, `CONCEPT_SYNONYM.csv`, and optional legacy dictionaries. It is used only for entity normalization and synonym expansion. - -## 4. Retrieval - -### Stage 1 - Trial Retrieval - -`ClinicalTrialSearch` calls the configured search backend with: - -- Primary disease/condition terms. -- Synonyms from accepted concept links. -- Other patient conditions. -- Age, sex, status, and optional NCT filters. -- Query embeddings when running in `vector` or `hybrid` mode. - -The LanceDB backend generates candidates with local full-text/vector search and applies Python-side weighted scoring: - -``` -hybrid_score = 0.5 * text_score + 0.5 * vector_score -``` - -Text scoring weights trial fields by clinical relevance: - -- `condition`: 6.0 -- `eligibility_criteria`: 4.0 -- `brief_title`: 3.0 -- `brief_summary`: 2.0 -- `detailed_description`: 1.5 -- `official_title`: 1.0 - -Vector scoring combines condition, title, summary, eligibility, and other-condition similarities. - -### Stage 2 - Criteria Retrieval - -`SecondStageRetriever` searches the criteria table within the Stage 1 NCT subset. It searches criterion text and, when the entity annotator is enabled, flattened entity synonyms. - -The retriever returns ES-like hit dictionaries internally (`_source`, `_score`) to keep reranking and aggregation code stable while the backend is LanceDB-native. - -### Stage 3 - Eligibility Reasoning - -The top trials are passed to `BatchTrialProcessor` or `BatchTrialProcessorVLLM`. The model evaluates inclusion and exclusion criteria and writes structured JSON outputs. The final ranker computes a normalized eligibility score from those outputs. - -## 5. Entity Extraction - -The BioNER path is Python-native: - -- Schema-driven recognizer interface. -- GLiNER2-style backend as the target recognizer. -- GLiNER fallback and regex test backend behind the same interface. -- LanceDB concept linking with confidence bands. -- No runtime Java daemons, socket IPC, Sieve, or GNormPlus dependency. - -Entity output preserves the fields downstream search expects: - -- `entity_group` -- `text` -- `start` -- `end` -- `score` -- `normalized_id` -- `synonyms` -- `concept_candidates` -- `linker_score` -- `linker_status` - -## 6. Deployment - -Default deployment requires only the Python worker process and local mounted directories: - -- `data/` -- `models/` -- `results/` - -The application runs as a Python process and does not auto-start external services. - -## 7. Runtime Configuration - -Important settings: - -| Env var | Default | Purpose | -|---|---|---| -| `TRIALMATCHAI_SEARCH_DB_PATH` | `data/search` | LanceDB search table directory | -| `TRIALMATCHAI_SEARCH_TRIALS_TABLE` | `trials` | Trial table | -| `TRIALMATCHAI_SEARCH_CRITERIA_TABLE` | `criteria` | Criteria table | -| `TRIALMATCHAI_SEARCH_MODE` | `hybrid` | `bm25`, `vector`, or `hybrid` | -| `TRIALMATCHAI_CONCEPT_DB_PATH` | `data/concepts` | Concept linker table directory | -| `TRIALMATCHAI_ENTITY_BACKEND` | `gliner2` | Entity recognition backend | -| `TRIALMATCHAI_COT_BACKEND` | `vllm` | Reasoning backend | - -## 8. Operational Checks - -Use: - -```bash -trialmatchai-healthcheck -trialmatchai-healthcheck --require-tables -trialmatchai-index -trialmatchai-run -``` - -Preflight checks validate local paths, optional model artifacts, entity dependencies, GPU/vLLM readiness, and LanceDB table availability before expensive model startup. diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index ac39b6cc..00000000 --- a/requirements.txt +++ /dev/null @@ -1,64 +0,0 @@ -# Core ML / NLP -torch==2.11.0 -transformers==5.6.2 -accelerate==1.8.1 -tokenizers==0.22.1 -safetensors>=0.6.2,<0.7 -sentencepiece==0.2.1 -faiss-cpu==1.9.0.post1 -peft==0.15.2 -einops==0.8.0 -tiktoken==0.8.0 - -# GPU inference extra: install with `uv sync --extra gpu`. -bitsandbytes==0.49.2; sys_platform == "linux" or sys_platform == "win32" -vllm==0.23.0; sys_platform == "linux" - -# Classical stack & utilities -numpy>=2.0,<3 -scipy==1.15.1 -scikit-learn==1.6.1 -pandas==2.2.3 -python-dateutil==2.9.0.post0 -requests==2.34.2 -tenacity==9.0.0 -joblib==1.4.2 -tqdm==4.67.1 -regex>=2025.10.22,<2027 -orjson==3.11.9 -PyYAML==6.0.2 -python-dotenv==1.2.2 -rich==13.9.4 -lancedb>=0.25.0,<0.26 -pyarrow>=24.0.0,<25 - -# spaCy / medspaCy (for your medical text work) -spacy==3.7.5 -medspacy==1.3.1 -medspacy_quickumls==3.2 -PyRuSH==1.0.9 -PyFastNER==1.0.10 -pysbd==0.3.4 -quicksectx==0.4.0 -gliner==0.2.27 - -# App / infra -SQLAlchemy==2.0.37 -pydantic>=2.12.0,<3 -pydantic-settings>=2.10.1,<3 - -# LLM tooling extra: install with `uv sync --extra llm`. -openai>=2.26.0,<3 -httpx==0.28.1 -langchain==1.3.10 -langchain-community==0.4.2 -langchain-openai==1.3.2 -huggingface_hub>=1.5.0,<2 -bioregistry==0.13.62 -rapidfuzz==3.14.5 - -# Training/evaluation extra: install with `uv sync --extra training`. -datasets==2.19.0 -bert-score==0.3.13 -jinja2==3.1.6 -nltk==3.9.4 diff --git a/scripts/bootstrap_data.sh b/scripts/bootstrap_data.sh deleted file mode 100644 index e22e2369..00000000 --- a/scripts/bootstrap_data.sh +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' - -DATA_URL_1="https://zenodo.org/records/15516900/files/processed_trials.tar.gz?download=1" -MODELS_URL="https://zenodo.org/records/15516900/files/models.tar.gz?download=1" -CRITERIA_ZIP_BASE_URL="https://zenodo.org/records/15516900/files" -CHUNK_PREFIX="criteria_part" -CHUNK_COUNT=6 - -ARCHIVE_1="processed_trials.tar.gz" -MODELS_ARCHIVE="models.tar.gz" - -GREEN='\033[0;32m' -NC='\033[0m' -info() { echo -e "${GREEN}[INFO]${NC} $*"; } -warn() { echo -e "[WARN] $*" >&2; } -error() { echo -e "[ERROR] $*" >&2; exit 1; } - -verify_sha256() { - local file="$1" - local expected="$2" - if [ -z "$expected" ]; then - warn "No SHA-256 checksum configured for $file; skipping verification." - return 0 - fi - local actual - actual="$(sha256sum "$file" 2>/dev/null | awk '{print $1}' || shasum -a 256 "$file" | awk '{print $1}')" - if [ "$actual" != "$expected" ]; then - error "Checksum mismatch for $file: expected $expected, got $actual" - fi -} - -assert_safe_archive_paths() { - local archive="$1" - shift - local list_cmd=("$@") - local unsafe - unsafe="$("${list_cmd[@]}" "$archive" | awk '($0 ~ /^\// || $0 ~ /(^|\/)\.\.($|\/)/) {print; exit}')" - if [ -n "$unsafe" ]; then - error "Archive $archive contains unsafe path: $unsafe" - fi -} - -extract_tar_gz() { - local archive="$1" - local target="$2" - assert_safe_archive_paths "$archive" tar -tzf - tar -xzf "$archive" -C "$target" -} - -extract_zip() { - local archive="$1" - local target="$2" - assert_safe_archive_paths "$archive" unzip -Z1 - unzip -q "$archive" -d "$target" -} - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -DATA_DIR="${ROOT_DIR}/data" - -info "Preparing data directory..." -mkdir -p "$DATA_DIR" -cd "$DATA_DIR" - -if [ ! -f "$ARCHIVE_1" ]; then - info "Downloading ${ARCHIVE_1}..." - curl -fsSL "$DATA_URL_1" -o "$ARCHIVE_1" -else - info "${ARCHIVE_1} already exists. Skipping download." -fi -verify_sha256 "$ARCHIVE_1" "${TRIALMATCHAI_PROCESSED_TRIALS_SHA256:-}" - -if [ ! -f "$MODELS_ARCHIVE" ]; then - info "Downloading ${MODELS_ARCHIVE}..." - curl -fsSL "$MODELS_URL" -o "$MODELS_ARCHIVE" -else - info "${MODELS_ARCHIVE} already exists. Skipping download." -fi -verify_sha256 "$MODELS_ARCHIVE" "${TRIALMATCHAI_MODELS_SHA256:-}" - -if [ ! -d "processed_criteria" ]; then - info "Downloading and extracting processed_criteria chunks..." - mkdir -p processed_criteria - - for i in $(seq 0 $((CHUNK_COUNT - 1))); do - chunk_zip="${CHUNK_PREFIX}_${i}.zip" - chunk_url="${CRITERIA_ZIP_BASE_URL}/${chunk_zip}?download=1" - - if [ ! -f "$chunk_zip" ]; then - info "Downloading $chunk_zip..." - curl -fsSL "$chunk_url" -o "$chunk_zip" - else - info "$chunk_zip already exists. Skipping download." - fi - - checksum_var="TRIALMATCHAI_CRITERIA_PART_${i}_SHA256" - verify_sha256 "$chunk_zip" "${!checksum_var:-}" - info "Extracting $chunk_zip into processed_criteria..." - extract_zip "$chunk_zip" processed_criteria - done -else - info "processed_criteria already exists. Skipping extraction." -fi - -if [ ! -d "processed_trials" ]; then - info "Extracting $ARCHIVE_1..." - extract_tar_gz "$ARCHIVE_1" "$DATA_DIR" -else - info "processed_trials already exists. Skipping extraction of $ARCHIVE_1." -fi - -cd "$ROOT_DIR" - -info "Extracting models into models/..." -mkdir -p models -extract_tar_gz "$DATA_DIR/$MODELS_ARCHIVE" models - -info "Cleaning up archives..." -rm -f "$DATA_DIR/$ARCHIVE_1" "$DATA_DIR/$MODELS_ARCHIVE" -for i in $(seq 0 $((CHUNK_COUNT - 1))); do - rm -f "$DATA_DIR/${CHUNK_PREFIX}_${i}.zip" -done - -info "Data bootstrap complete." diff --git a/scripts/index_data.sh b/scripts/index_data.sh deleted file mode 100644 index 732bb433..00000000 --- a/scripts/index_data.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' - -GREEN='\033[0;32m' -NC='\033[0m' -info() { echo -e "${GREEN}[INFO]${NC} $*"; } -error() { echo -e "[ERROR] $*" >&2; exit 1; } - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" - -cd "$ROOT_DIR" -info "Building LanceDB search tables ..." -uv run trialmatchai-index \ - --processed-trials-folder data/processed_trials \ - --processed-criteria-folder data/processed_criteria \ - --recreate -info "Indexing complete." diff --git a/setup.sh b/setup.sh deleted file mode 100644 index 1d17395a..00000000 --- a/setup.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' - -#=== COLORS ===# -GREEN='\033[0;32m' -NC='\033[0m' # No Color - -#=== HELPERS ===# -info() { echo -e "${GREEN}[INFO]${NC} $*"; } -error() { echo -e "[ERROR] $*" >&2; exit 1; } - -#=== MAIN SCRIPT ===# -info "Starting TrialMatchAI setup..." - -# 0) Check for available GPUs -info "Checking for available GPUs..." - -if command -v nvidia-smi &> /dev/null; then - if nvidia-smi &> /dev/null; then - info "NVIDIA GPUs detected:" - nvidia-smi --query-gpu=index,name,memory.total --format=csv - else - info "nvidia-smi found, but no NVIDIA GPU detected or driver not loaded." - fi -else - info "No NVIDIA GPUs detected." -fi - -# 1) Install Python dependencies -if command -v uv &> /dev/null; then - info "Installing Python dependencies with uv..." - uv sync - RUNNER=(uv run) -else - if ! command -v pip &> /dev/null; then - error "pip not found. Please install Python and pip first." - fi - info "Installing Python requirements with pip..." - pip install --upgrade pip - pip install -r requirements.txt - pip install -e . - RUNNER=() -fi - -# 2) Prepare data and models -info "Bootstrapping data and models..." -"${RUNNER[@]}" trialmatchai-bootstrap-data - -# 3) Build local LanceDB search tables -info "Indexing trial data..." -"${RUNNER[@]}" trialmatchai-index - -info "TrialMatchAI setup is complete." diff --git a/src/trialmatchai/cli/bootstrap_data.py b/src/trialmatchai/cli/bootstrap_data.py index 69d9944a..ea1a5002 100644 --- a/src/trialmatchai/cli/bootstrap_data.py +++ b/src/trialmatchai/cli/bootstrap_data.py @@ -1,35 +1,221 @@ from __future__ import annotations import argparse -import subprocess +import hashlib +import os import sys +import tarfile +import zipfile +from collections.abc import Sequence from pathlib import Path +import requests -def main() -> int: +DATA_URL = "https://zenodo.org/records/15516900/files/processed_trials.tar.gz?download=1" +MODELS_URL = "https://zenodo.org/records/15516900/files/models.tar.gz?download=1" +CRITERIA_ZIP_BASE_URL = "https://zenodo.org/records/15516900/files" +CHUNK_PREFIX = "criteria_part" +CHUNK_COUNT = 6 +PROCESSED_TRIALS_ARCHIVE = "processed_trials.tar.gz" +MODELS_ARCHIVE = "models.tar.gz" + + +def main(argv: Sequence[str] | None = None) -> int: parser = argparse.ArgumentParser( description="Download and prepare TrialMatchAI data and model artifacts" ) parser.add_argument( - "--script", - default="scripts/bootstrap_data.sh", - help="Bootstrap script path relative to the repository root", + "--root", + type=Path, + default=None, + help="Runtime root for data/ and models/; defaults to repository root or current directory", + ) + parser.add_argument( + "--data-url", + default=DATA_URL, + help="processed_trials.tar.gz URL", + ) + parser.add_argument( + "--models-url", + default=MODELS_URL, + help="models.tar.gz URL", ) - args = parser.parse_args() + parser.add_argument( + "--criteria-base-url", + default=CRITERIA_ZIP_BASE_URL, + help="Base URL containing criteria_part_.zip chunks", + ) + parser.add_argument( + "--criteria-chunks", + type=int, + default=CHUNK_COUNT, + help="Number of criteria zip chunks to download", + ) + parser.add_argument( + "--skip-models", + action="store_true", + help="Do not download or extract model artifacts", + ) + parser.add_argument( + "--force", + action="store_true", + help="Re-extract archives even when target directories already exist", + ) + args = parser.parse_args(argv) + + root = (args.root or _runtime_root()).resolve() + bootstrap_data( + root=root, + data_url=args.data_url, + models_url=args.models_url, + criteria_base_url=args.criteria_base_url, + criteria_chunks=args.criteria_chunks, + skip_models=args.skip_models, + force=args.force, + ) + return 0 + + +def bootstrap_data( + *, + root: Path, + data_url: str = DATA_URL, + models_url: str = MODELS_URL, + criteria_base_url: str = CRITERIA_ZIP_BASE_URL, + criteria_chunks: int = CHUNK_COUNT, + skip_models: bool = False, + force: bool = False, +) -> None: + data_dir = root / "data" + models_dir = root / "models" + data_dir.mkdir(parents=True, exist_ok=True) + + criteria_dir = data_dir / "processed_criteria" + if force or not _has_entries(criteria_dir): + criteria_dir.mkdir(parents=True, exist_ok=True) + for index in range(criteria_chunks): + chunk_name = f"{CHUNK_PREFIX}_{index}.zip" + chunk_path = data_dir / chunk_name + _download_if_missing( + f"{criteria_base_url.rstrip('/')}/{chunk_name}?download=1", + chunk_path, + ) + _verify_sha256( + chunk_path, + os.getenv(f"TRIALMATCHAI_CRITERIA_PART_{index}_SHA256"), + ) + _safe_extract_zip(chunk_path, criteria_dir) + + processed_trials_dir = data_dir / "processed_trials" + if force or not _has_entries(processed_trials_dir): + processed_archive = data_dir / PROCESSED_TRIALS_ARCHIVE + _download_if_missing(data_url, processed_archive) + _verify_sha256( + processed_archive, os.getenv("TRIALMATCHAI_PROCESSED_TRIALS_SHA256") + ) + _safe_extract_tar_gz(processed_archive, data_dir) + + if not skip_models: + models_dir.mkdir(parents=True, exist_ok=True) + if force or not _has_entries(models_dir): + models_archive = data_dir / MODELS_ARCHIVE + _download_if_missing(models_url, models_archive) + _verify_sha256(models_archive, os.getenv("TRIALMATCHAI_MODELS_SHA256")) + _safe_extract_tar_gz(models_archive, models_dir) - root = _repo_root() - script = (root / args.script).resolve() - if not script.exists(): - raise FileNotFoundError(f"Bootstrap script not found: {script}") - return subprocess.run(["bash", str(script)], cwd=str(root), check=False).returncode + _cleanup_archives(data_dir, criteria_chunks) -def _repo_root() -> Path: +def _download_if_missing(url: str, destination: Path) -> None: + if destination.exists(): + _info(f"{destination.name} already exists; skipping download.") + return + + _info(f"Downloading {destination.name}...") + destination.parent.mkdir(parents=True, exist_ok=True) + response = requests.get(url, stream=True, timeout=120) + response.raise_for_status() + with destination.open("wb") as file: + for chunk in response.iter_content(chunk_size=1024 * 1024): + if chunk: + file.write(chunk) + + +def _verify_sha256(path: Path, expected: str | None) -> None: + if not expected: + _warn(f"No SHA-256 checksum configured for {path.name}; skipping verification.") + return + + digest = hashlib.sha256() + with path.open("rb") as file: + for chunk in iter(lambda: file.read(1024 * 1024), b""): + digest.update(chunk) + actual = digest.hexdigest() + if actual != expected: + raise ValueError( + f"Checksum mismatch for {path}: expected {expected}, got {actual}" + ) + + +def _safe_extract_tar_gz(archive: Path, target: Path) -> None: + target.mkdir(parents=True, exist_ok=True) + with tarfile.open(archive, "r:gz") as tar: + for member in tar.getmembers(): + _validated_target_path(target, member.name) + if member.issym() or member.islnk() or member.isdev(): + raise ValueError(f"Archive contains an unsafe member: {member.name}") + tar.extractall(target) + + +def _safe_extract_zip(archive: Path, target: Path) -> None: + target.mkdir(parents=True, exist_ok=True) + with zipfile.ZipFile(archive) as zip_file: + for member in zip_file.namelist(): + _validated_target_path(target, member) + zip_file.extractall(target) + + +def _validated_target_path(target: Path, member_name: str) -> Path: + if not member_name: + raise ValueError("Archive contains an empty path") + member_path = Path(member_name) + if member_path.is_absolute(): + raise ValueError(f"Archive contains an absolute path: {member_name}") + + resolved_target = target.resolve() + resolved_member = (resolved_target / member_path).resolve() + try: + resolved_member.relative_to(resolved_target) + except ValueError as exc: + raise ValueError(f"Archive contains an unsafe path: {member_name}") from exc + return resolved_member + + +def _cleanup_archives(data_dir: Path, criteria_chunks: int) -> None: + for path in [data_dir / PROCESSED_TRIALS_ARCHIVE, data_dir / MODELS_ARCHIVE]: + path.unlink(missing_ok=True) + for index in range(criteria_chunks): + (data_dir / f"{CHUNK_PREFIX}_{index}.zip").unlink(missing_ok=True) + + +def _has_entries(path: Path) -> bool: + return path.exists() and any(path.iterdir()) + + +def _runtime_root() -> Path: start = Path(__file__).resolve() for parent in start.parents: if (parent / "pyproject.toml").exists(): return parent - return Path.cwd().resolve() + return Path.cwd() + + +def _info(message: str) -> None: + print(f"[INFO] {message}") + + +def _warn(message: str) -> None: + print(f"[WARN] {message}", file=sys.stderr) if __name__ == "__main__": diff --git a/src/trialmatchai/cli/main.py b/src/trialmatchai/cli/main.py index efadc86e..ce6d48c5 100644 --- a/src/trialmatchai/cli/main.py +++ b/src/trialmatchai/cli/main.py @@ -12,6 +12,7 @@ def main() -> int: subparsers = parser.add_subparsers(dest="command", required=True) subparsers.add_parser("healthcheck", help="Run deployment health checks") + subparsers.add_parser("bootstrap-data", help="Download data and model artifacts") subparsers.add_parser("index", help="Build LanceDB search tables") subparsers.add_parser("build-concepts", help="Build LanceDB concept table") subparsers.add_parser("update-registry", help="Fetch and upsert registry studies") @@ -20,6 +21,8 @@ def main() -> int: args, remainder = parser.parse_known_args() if args.command == "healthcheck": from trialmatchai.cli.healthcheck import main as command + elif args.command == "bootstrap-data": + from trialmatchai.cli.bootstrap_data import main as command elif args.command == "index": from trialmatchai.cli.index_data import main as command elif args.command == "build-concepts": diff --git a/tests/test_bootstrap_data.py b/tests/test_bootstrap_data.py new file mode 100644 index 00000000..1e09499c --- /dev/null +++ b/tests/test_bootstrap_data.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +import hashlib +import io +import tarfile +import zipfile +from pathlib import Path + +import pytest + +from trialmatchai.cli.bootstrap_data import ( + MODELS_ARCHIVE, + PROCESSED_TRIALS_ARCHIVE, + bootstrap_data, + _safe_extract_tar_gz, + _verify_sha256, +) + + +def test_bootstrap_data_uses_existing_archives_and_removes_them(tmp_path, monkeypatch): + data_dir = tmp_path / "data" + data_dir.mkdir() + + processed_archive = data_dir / PROCESSED_TRIALS_ARCHIVE + models_archive = data_dir / MODELS_ARCHIVE + criteria_archive = data_dir / "criteria_part_0.zip" + + _write_tar_gz( + processed_archive, + {"processed_trials/NCT000001.json": b'{"nct_id": "NCT000001"}'}, + ) + _write_tar_gz(models_archive, {"demo-model/config.json": b"{}"}) + _write_zip(criteria_archive, {"criterion.txt": "Age >= 18"}) + + monkeypatch.setenv( + "TRIALMATCHAI_PROCESSED_TRIALS_SHA256", _sha256(processed_archive) + ) + monkeypatch.setenv("TRIALMATCHAI_MODELS_SHA256", _sha256(models_archive)) + monkeypatch.setenv("TRIALMATCHAI_CRITERIA_PART_0_SHA256", _sha256(criteria_archive)) + + bootstrap_data( + root=tmp_path, + data_url="https://example.invalid/processed_trials.tar.gz", + models_url="https://example.invalid/models.tar.gz", + criteria_base_url="https://example.invalid", + criteria_chunks=1, + ) + + assert (tmp_path / "data/processed_trials/NCT000001.json").exists() + assert (tmp_path / "data/processed_criteria/criterion.txt").exists() + assert (tmp_path / "models/demo-model/config.json").exists() + assert not processed_archive.exists() + assert not models_archive.exists() + assert not criteria_archive.exists() + + bootstrap_data( + root=tmp_path, + data_url="https://example.invalid/missing-processed_trials.tar.gz", + models_url="https://example.invalid/missing-models.tar.gz", + criteria_base_url="https://example.invalid/missing", + criteria_chunks=1, + ) + + +def test_verify_sha256_rejects_mismatches(tmp_path): + path = tmp_path / "artifact.txt" + path.write_text("contents") + + with pytest.raises(ValueError, match="Checksum mismatch"): + _verify_sha256(path, "0" * 64) + + +def test_tar_extraction_rejects_path_traversal(tmp_path): + archive = tmp_path / "unsafe.tar.gz" + with tarfile.open(archive, "w:gz") as tar: + data = b"bad" + info = tarfile.TarInfo("../escape.txt") + info.size = len(data) + tar.addfile(info, io.BytesIO(data)) + + with pytest.raises(ValueError, match="unsafe path"): + _safe_extract_tar_gz(archive, tmp_path / "target") + + +def test_tar_extraction_rejects_links(tmp_path): + archive = tmp_path / "unsafe-link.tar.gz" + with tarfile.open(archive, "w:gz") as tar: + info = tarfile.TarInfo("link") + info.type = tarfile.SYMTYPE + info.linkname = "/etc/passwd" + tar.addfile(info) + + with pytest.raises(ValueError, match="unsafe member"): + _safe_extract_tar_gz(archive, tmp_path / "target") + + +def _write_tar_gz(path: Path, files: dict[str, bytes]) -> None: + with tarfile.open(path, "w:gz") as tar: + for name, data in files.items(): + info = tarfile.TarInfo(name) + info.size = len(data) + tar.addfile(info, io.BytesIO(data)) + + +def _write_zip(path: Path, files: dict[str, str]) -> None: + with zipfile.ZipFile(path, "w") as zip_file: + for name, data in files.items(): + zip_file.writestr(name, data) + + +def _sha256(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() diff --git a/tests/test_package_imports.py b/tests/test_package_imports.py index 3c556292..56a14e37 100644 --- a/tests/test_package_imports.py +++ b/tests/test_package_imports.py @@ -2,6 +2,8 @@ import warnings +import pytest + import trialmatchai @@ -16,3 +18,14 @@ def test_matcher_config_compatibility_shim(): assert resolve_config_path().name == "config.json" assert any("Matcher" in str(warning.message) for warning in captured) + + +def test_command_group_includes_bootstrap_data(monkeypatch, capsys): + from trialmatchai.cli.main import main + + monkeypatch.setattr("sys.argv", ["trialmatchai", "--help"]) + with pytest.raises(SystemExit) as exc: + main() + + assert exc.value.code == 0 + assert "bootstrap-data" in capsys.readouterr().out From 3f737b258e0d4bc004b42ccd6fdea369778e26ea Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 21 Jun 2026 21:08:10 +0200 Subject: [PATCH 07/64] Add patient interoperability profiles --- .env.example | 6 + README.md | 18 + docs/interoperability.md | 105 +++++ pyproject.toml | 1 + src/trialmatchai/cli/import_patient.py | 100 +++++ src/trialmatchai/cli/main.py | 35 +- src/trialmatchai/config/config.json | 8 + src/trialmatchai/config/config_loader.py | 6 + src/trialmatchai/config/settings.py | 19 + src/trialmatchai/interop/__init__.py | 25 ++ src/trialmatchai/interop/detect.py | 57 +++ .../interop/exporters/__init__.py | 9 + src/trialmatchai/interop/exporters/fhir.py | 83 ++++ .../interop/exporters/matching_summary.py | 28 ++ .../interop/exporters/phenopacket.py | 87 ++++ .../interop/importers/__init__.py | 35 ++ src/trialmatchai/interop/importers/fhir.py | 380 ++++++++++++++++++ src/trialmatchai/interop/importers/omop.py | 322 +++++++++++++++ .../interop/importers/phenopacket.py | 299 ++++++++++++++ src/trialmatchai/interop/importers/text.py | 116 ++++++ src/trialmatchai/interop/models.py | 165 ++++++++ src/trialmatchai/interop/narrative.py | 101 +++++ src/trialmatchai/interop/utils.py | 207 ++++++++++ src/trialmatchai/main.py | 114 ++++-- .../matching/eligibility_reasoning_vllm.py | 16 +- src/trialmatchai/services/preflight.py | 30 +- tests/test_import_patient_cli.py | 36 ++ tests/test_package_imports.py | 4 +- tests/test_patient_interop.py | 220 ++++++++++ tests/test_patient_runtime_loading.py | 75 ++++ tests/test_settings.py | 7 + 31 files changed, 2658 insertions(+), 56 deletions(-) create mode 100644 docs/interoperability.md create mode 100644 src/trialmatchai/cli/import_patient.py create mode 100644 src/trialmatchai/interop/__init__.py create mode 100644 src/trialmatchai/interop/detect.py create mode 100644 src/trialmatchai/interop/exporters/__init__.py create mode 100644 src/trialmatchai/interop/exporters/fhir.py create mode 100644 src/trialmatchai/interop/exporters/matching_summary.py create mode 100644 src/trialmatchai/interop/exporters/phenopacket.py create mode 100644 src/trialmatchai/interop/importers/__init__.py create mode 100644 src/trialmatchai/interop/importers/fhir.py create mode 100644 src/trialmatchai/interop/importers/omop.py create mode 100644 src/trialmatchai/interop/importers/phenopacket.py create mode 100644 src/trialmatchai/interop/importers/text.py create mode 100644 src/trialmatchai/interop/models.py create mode 100644 src/trialmatchai/interop/narrative.py create mode 100644 src/trialmatchai/interop/utils.py create mode 100644 tests/test_import_patient_cli.py create mode 100644 tests/test_patient_interop.py create mode 100644 tests/test_patient_runtime_loading.py diff --git a/.env.example b/.env.example index 01b25ca0..9f28e37e 100644 --- a/.env.example +++ b/.env.example @@ -4,6 +4,12 @@ TRIALMATCHAI_PATIENTS_DIR=example TRIALMATCHAI_OUTPUT_DIR=results TRIALMATCHAI_TRIALS_JSON_FOLDER=data/trials_jsons +TRIALMATCHAI_PATIENT_RAW_DIR=data/patients/raw +TRIALMATCHAI_PATIENT_PROFILE_DIR=data/patients/profiles +TRIALMATCHAI_PATIENT_SUMMARY_DIR=data/patients/summaries +TRIALMATCHAI_PATIENT_INPUT_FORMAT=auto +TRIALMATCHAI_PATIENT_STRICT_VALIDATION=false +TRIALMATCHAI_PATIENT_COPY_RAW=true TRIALMATCHAI_SEARCH_BACKEND=lancedb TRIALMATCHAI_SEARCH_DB_PATH=data/search diff --git a/README.md b/README.md index 4593dcd7..7b495acd 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,15 @@ uv run trialmatchai-update-registry --since 2026-06-01 --max-studies 100 uv run trialmatchai-index --prepare ``` +Import patient data into canonical profiles before matching: + +```bash +uv run trialmatchai-import-patient --input data/patients/raw/patient-1.txt --format text +uv run trialmatchai-import-patient --input data/patients/raw/patient-1.fhir.json +uv run trialmatchai-import-patient --input data/patients/raw/patient-1.phenopacket.json +uv run trialmatchai-import-patient --input data/patients/omop_extract --format omop +``` + Run the batch matcher: ```bash @@ -85,6 +94,11 @@ Configuration defaults live in `src/trialmatchai/config/config.json`. Runtime ov TRIALMATCHAI_PATIENTS_DIR=example TRIALMATCHAI_OUTPUT_DIR=results TRIALMATCHAI_TRIALS_JSON_FOLDER=data/trials_jsons +TRIALMATCHAI_PATIENT_RAW_DIR=data/patients/raw +TRIALMATCHAI_PATIENT_PROFILE_DIR=data/patients/profiles +TRIALMATCHAI_PATIENT_SUMMARY_DIR=data/patients/summaries +TRIALMATCHAI_PATIENT_INPUT_FORMAT=auto +TRIALMATCHAI_PATIENT_STRICT_VALIDATION=false TRIALMATCHAI_SEARCH_BACKEND=lancedb TRIALMATCHAI_SEARCH_DB_PATH=data/search @@ -122,6 +136,7 @@ Use `TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=true` only when a selected model expli - `trialmatchai-build-concepts`: build the LanceDB concept table used for entity normalization. - `trialmatchai-update-registry`: fetch new/changed ClinicalTrials.gov studies, write normalized JSON, and upsert LanceDB. - `trialmatchai-index`: build the LanceDB trial and criteria search tables from prepared rows or `--prepare` normalized JSON. +- `trialmatchai-import-patient`: import text, Phenopacket, FHIR, or OMOP patient data into canonical profiles. - `trialmatchai-run`: run the batch matching pipeline. The command group is also available as: @@ -129,9 +144,12 @@ The command group is also available as: ```bash uv run python -m trialmatchai healthcheck uv run trialmatchai bootstrap-data --skip-models +uv run trialmatchai import-patient --input data/patients/raw/patient-1.txt --format text uv run trialmatchai update-registry --dry-run --max-studies 25 ``` +Patient interoperability details are documented in `docs/interoperability.md`. + ## Registry Updater The registry updater is designed for cron, systemd timers, and GitHub Actions. It uses ClinicalTrials.gov v2 `/api/v2/studies`, stores raw source JSON under `data/registry/raw`, writes normalized trial JSON under `data/trials_jsons`, appends idempotency records to `data/registry/manifest.jsonl`, and upserts only new or changed studies into LanceDB. diff --git a/docs/interoperability.md b/docs/interoperability.md new file mode 100644 index 00000000..af75690a --- /dev/null +++ b/docs/interoperability.md @@ -0,0 +1,105 @@ +# Patient Interoperability + +TrialMatchAI uses a canonical `PatientProfile` for patient data. Source-specific +importers preserve raw evidence and provenance, then exporters render the profile +for matching, LLM context, and optional standards output. + +## Supported v1 Inputs + +- Free text notes: `.txt` and `.md` files. +- GA4GH Phenopacket JSON. +- HL7 FHIR R4 Bundle JSON, individual FHIR resource JSON, and NDJSON. +- OMOP CDM extract folders with CSV or Parquet tables. + +The first import milestone intentionally does not implement C-CDA, HL7 v2, +DICOMweb, or CDISC adapters. Those formats should be added as importers on top of +the same `PatientProfile` model, not as new runtime data models. + +## Canonical Profile + +Each imported patient is written to `data/patients/profiles/.json`. +The profile contains: + +- demographics +- conditions +- phenotypes +- observations, labs, and vitals +- medications +- procedures +- diagnostic reports +- genomic findings +- cancer profile fields +- family history +- notes +- source documents +- provenance and unsupported source elements + +Every clinical fact carries source format, source path, source resource or table, +original code, normalized code candidates, evidence text and offsets when +available, confidence, negation, temporality, and mapping status. + +## Narrative Generation + +Narrative rendering is deliberately separate from import. Importers create +structured facts. `trialmatchai.interop.narrative` turns those facts into +deterministic sentences for retrieval and LLM context. This keeps source parsing, +normalization, and prompt context generation independently testable. + +The matching exporter writes `data/patients/summaries/.json` with the +current-compatible fields: + +- `main_conditions` +- `other_conditions` +- `expanded_sentences` +- `age` +- `gender` +- `provenance` + +`trialmatchai-run` consumes canonical profiles first. If no profiles exist, it +temporarily imports legacy Phenopacket JSON files from `paths.patients_dir` and +writes profiles and summaries before matching. + +## Commands + +Import a free text note: + +```bash +uv run trialmatchai-import-patient \ + --input data/patients/raw/patient-1.txt \ + --format text +``` + +Import a Phenopacket: + +```bash +uv run trialmatchai import-patient \ + --input data/patients/raw/patient-1.phenopacket.json +``` + +Import a FHIR Bundle: + +```bash +uv run trialmatchai-import-patient \ + --input data/patients/raw/patient-1.fhir.json +``` + +Import an OMOP extract folder: + +```bash +uv run trialmatchai-import-patient \ + --input data/patients/omop_extract \ + --format omop +``` + +Then run matching: + +```bash +uv run trialmatchai-run +``` + +## Conversion Limits + +FHIR and Phenopacket exports are best-effort views of `PatientProfile`. +Unsupported or lossy fields remain in the profile and are reported instead of +being silently dropped. OMOP support is file-based for v1; live database +connectors are out of scope. diff --git a/pyproject.toml b/pyproject.toml index b8212c2c..e83f1479 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,6 +58,7 @@ trialmatchai-bootstrap-data = "trialmatchai.cli.bootstrap_data:main" trialmatchai-index = "trialmatchai.cli.index_data:main" trialmatchai-build-concepts = "trialmatchai.cli.build_concepts:main" trialmatchai-update-registry = "trialmatchai.cli.update_registry:main" +trialmatchai-import-patient = "trialmatchai.cli.import_patient:main" [dependency-groups] dev = [ diff --git a/src/trialmatchai/cli/import_patient.py b/src/trialmatchai/cli/import_patient.py new file mode 100644 index 00000000..3c642174 --- /dev/null +++ b/src/trialmatchai/cli/import_patient.py @@ -0,0 +1,100 @@ +from __future__ import annotations + +import argparse +import json +import sys +from pathlib import Path +from typing import Any + +from trialmatchai.config.config_loader import load_config +from trialmatchai.interop.exporters import profile_to_matching_summary +from trialmatchai.interop.importers import import_patient_path +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Import patient data into canonical TrialMatchAI profiles." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--input", + required=True, + help="Patient input file or OMOP extract directory.", + ) + parser.add_argument( + "--format", + default="auto", + choices=["auto", "text", "phenopacket", "fhir", "fhir-ndjson", "omop"], + help="Input format. Defaults to auto-detection.", + ) + parser.add_argument( + "--output-dir", + default=None, + help="Profile output directory. Defaults to config patient_inputs.profile_dir.", + ) + parser.add_argument( + "--summary-dir", + default=None, + help="Matching summary output directory. Defaults to config patient_inputs.summary_dir.", + ) + parser.add_argument( + "--strict", + action="store_true", + help="Fail on invalid or unsupported source records instead of degrading.", + ) + parser.add_argument( + "--no-entities", + action="store_true", + help="Skip model-backed entity annotation for free-text inputs.", + ) + args = parser.parse_args() + + config = load_config(args.config) + patient_cfg = config.get("patient_inputs", {}) + output_dir = Path(args.output_dir or patient_cfg.get("profile_dir", "data/patients/profiles")) + summary_dir = Path(args.summary_dir or patient_cfg.get("summary_dir", "data/patients/summaries")) + output_dir.mkdir(parents=True, exist_ok=True) + summary_dir.mkdir(parents=True, exist_ok=True) + + entity_annotator = None if args.no_entities else _try_build_entity_annotator(config) + profiles = import_patient_path( + args.input, + input_format=args.format, + entity_annotator=entity_annotator, + strict=args.strict or bool(patient_cfg.get("strict_validation", False)), + ) + if not profiles: + logger.error("No patient profiles were imported from %s.", args.input) + return 1 + + for profile in profiles: + profile_path = output_dir / f"{profile.patient_id}.json" + summary_path = summary_dir / f"{profile.patient_id}.json" + _write_json(profile.model_dump(mode="json", exclude_none=True), profile_path) + _write_json(profile_to_matching_summary(profile), summary_path) + logger.info("Imported patient profile %s -> %s", profile.patient_id, profile_path) + return 0 + + +def _try_build_entity_annotator(config: dict[str, Any]): + try: + from trialmatchai.entities import build_entity_annotator + + return build_entity_annotator(config) + except Exception as exc: + logger.warning("Entity annotation unavailable; importing without entities: %s", exc) + return None + + +def _write_json(payload: dict, path: Path) -> None: + path.write_text( + json.dumps(payload, indent=2, sort_keys=True, ensure_ascii=False), + encoding="utf-8", + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/main.py b/src/trialmatchai/cli/main.py index ce6d48c5..f5393719 100644 --- a/src/trialmatchai/cli/main.py +++ b/src/trialmatchai/cli/main.py @@ -11,12 +11,33 @@ def main() -> int: ) subparsers = parser.add_subparsers(dest="command", required=True) - subparsers.add_parser("healthcheck", help="Run deployment health checks") - subparsers.add_parser("bootstrap-data", help="Download data and model artifacts") - subparsers.add_parser("index", help="Build LanceDB search tables") - subparsers.add_parser("build-concepts", help="Build LanceDB concept table") - subparsers.add_parser("update-registry", help="Fetch and upsert registry studies") - subparsers.add_parser("run", help="Run the matching pipeline") + subparsers.add_parser( + "healthcheck", + help="Run deployment health checks", + add_help=False, + ) + subparsers.add_parser( + "bootstrap-data", + help="Download data and model artifacts", + add_help=False, + ) + subparsers.add_parser("index", help="Build LanceDB search tables", add_help=False) + subparsers.add_parser( + "build-concepts", + help="Build LanceDB concept table", + add_help=False, + ) + subparsers.add_parser( + "update-registry", + help="Fetch and upsert registry studies", + add_help=False, + ) + subparsers.add_parser( + "import-patient", + help="Import patient data profiles", + add_help=False, + ) + subparsers.add_parser("run", help="Run the matching pipeline", add_help=False) args, remainder = parser.parse_known_args() if args.command == "healthcheck": @@ -29,6 +50,8 @@ def main() -> int: from trialmatchai.cli.build_concepts import main as command elif args.command == "update-registry": from trialmatchai.cli.update_registry import main as command + elif args.command == "import-patient": + from trialmatchai.cli.import_patient import main as command elif args.command == "run": from trialmatchai.cli.run import main as command else: # pragma: no cover - argparse enforces choices diff --git a/src/trialmatchai/config/config.json b/src/trialmatchai/config/config.json index afa3bf2e..187bfc37 100644 --- a/src/trialmatchai/config/config.json +++ b/src/trialmatchai/config/config.json @@ -23,6 +23,14 @@ "output_dir": "results", "trials_json_folder": "data/trials_jsons" }, + "patient_inputs": { + "raw_dir": "data/patients/raw", + "profile_dir": "data/patients/profiles", + "summary_dir": "data/patients/summaries", + "default_format": "auto", + "strict_validation": false, + "copy_raw": true + }, "model": { "base_model": "microsoft/phi-4", "base_model_revision": null, diff --git a/src/trialmatchai/config/config_loader.py b/src/trialmatchai/config/config_loader.py index 464c5eb3..5c5c9539 100644 --- a/src/trialmatchai/config/config_loader.py +++ b/src/trialmatchai/config/config_loader.py @@ -87,6 +87,12 @@ def normalize_config_paths(cfg: Dict[str, Any], config_path: Path) -> Dict[str, if value: cfg["paths"][key] = str(_resolve_local_path(value, root)) + patient_inputs = cfg.get("patient_inputs", {}) + for key in ("raw_dir", "profile_dir", "summary_dir"): + value = patient_inputs.get(key) + if value: + patient_inputs[key] = str(_resolve_local_path(value, root)) + schema_path = cfg.get("entity_extraction", {}).get("schema_path") if schema_path: cfg["entity_extraction"]["schema_path"] = str( diff --git a/src/trialmatchai/config/settings.py b/src/trialmatchai/config/settings.py index b60b400a..2ba011e2 100644 --- a/src/trialmatchai/config/settings.py +++ b/src/trialmatchai/config/settings.py @@ -40,6 +40,15 @@ class PathsSettings(BaseModel): trials_json_folder: str +class PatientInputSettings(BaseModel): + raw_dir: str = "data/patients/raw" + profile_dir: str = "data/patients/profiles" + summary_dir: str = "data/patients/summaries" + default_format: Literal["auto", "text", "phenopacket", "fhir", "fhir-ndjson", "omop"] = "auto" + strict_validation: bool = False + copy_raw: bool = True + + class ModelQuantizationSettings(BaseModel): load_in_4bit: bool = True bnb_4bit_use_double_quant: bool = True @@ -150,6 +159,7 @@ class TrialMatchSettings(BaseModel): tokenizer: TokenizerSettings global_: GlobalSettings = Field(alias="global") search_backend: SearchBackendSettings = Field(default_factory=SearchBackendSettings) + patient_inputs: PatientInputSettings = Field(default_factory=PatientInputSettings) registry: RegistrySettings = Field(default_factory=RegistrySettings) embedder: EmbedderSettings cot: CotSettings @@ -179,6 +189,10 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "TRIALMATCHAI_PATIENTS_DIR": ("paths", "patients_dir"), "TRIALMATCHAI_OUTPUT_DIR": ("paths", "output_dir"), "TRIALMATCHAI_TRIALS_JSON_FOLDER": ("paths", "trials_json_folder"), + "TRIALMATCHAI_PATIENT_RAW_DIR": ("patient_inputs", "raw_dir"), + "TRIALMATCHAI_PATIENT_PROFILE_DIR": ("patient_inputs", "profile_dir"), + "TRIALMATCHAI_PATIENT_SUMMARY_DIR": ("patient_inputs", "summary_dir"), + "TRIALMATCHAI_PATIENT_INPUT_FORMAT": ("patient_inputs", "default_format"), "TRIALMATCHAI_SEARCH_BACKEND": ("search_backend", "backend"), "TRIALMATCHAI_SEARCH_DB_PATH": ("search_backend", "db_path"), "TRIALMATCHAI_SEARCH_TRIALS_TABLE": ("search_backend", "trials_table"), @@ -244,6 +258,11 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "trust_remote_code", ), "TRIALMATCHAI_CONCEPT_LINKER_ENABLED": ("concept_linker", "enabled"), + "TRIALMATCHAI_PATIENT_STRICT_VALIDATION": ( + "patient_inputs", + "strict_validation", + ), + "TRIALMATCHAI_PATIENT_COPY_RAW": ("patient_inputs", "copy_raw"), } for env_key, path in bool_env_map.items(): value = os.getenv(env_key) diff --git a/src/trialmatchai/interop/__init__.py b/src/trialmatchai/interop/__init__.py new file mode 100644 index 00000000..a7379cbe --- /dev/null +++ b/src/trialmatchai/interop/__init__.py @@ -0,0 +1,25 @@ +from trialmatchai.interop.detect import detect_patient_input_format +from trialmatchai.interop.importers import import_patient_path +from trialmatchai.interop.models import ( + ClinicalFact, + Demographics, + EvidenceSpan, + NormalizedCode, + PatientNote, + PatientProfile, + Provenance, + SourceDocument, +) + +__all__ = [ + "ClinicalFact", + "Demographics", + "EvidenceSpan", + "NormalizedCode", + "PatientNote", + "PatientProfile", + "Provenance", + "SourceDocument", + "detect_patient_input_format", + "import_patient_path", +] diff --git a/src/trialmatchai/interop/detect.py b/src/trialmatchai/interop/detect.py new file mode 100644 index 00000000..55302067 --- /dev/null +++ b/src/trialmatchai/interop/detect.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +import json +from pathlib import Path +from typing import Literal + + +PatientInputFormat = Literal["text", "phenopacket", "fhir", "fhir-ndjson", "omop"] + +OMOP_TABLE_NAMES = { + "person", + "condition_occurrence", + "measurement", + "drug_exposure", + "procedure_occurrence", + "observation", + "note", + "note_nlp", +} + + +def detect_patient_input_format(path: str | Path) -> PatientInputFormat: + candidate = Path(path) + if candidate.is_dir(): + table_stems = { + item.stem.casefold() + for item in candidate.iterdir() + if item.suffix.casefold() in {".csv", ".parquet"} + } + if table_stems & OMOP_TABLE_NAMES: + return "omop" + raise ValueError(f"Could not detect patient input format for directory: {path}") + + suffix = candidate.suffix.casefold() + if suffix in {".txt", ".md"}: + return "text" + if suffix == ".ndjson": + return "fhir-ndjson" + if suffix not in {".json", ".jsonl"}: + raise ValueError(f"Unsupported patient input file extension: {suffix}") + + with candidate.open("r", encoding="utf-8") as handle: + data = json.load(handle) + if isinstance(data, dict): + if data.get("resourceType") == "Bundle": + return "fhir" + if data.get("resourceType"): + return "fhir" + if "metaData" in data and ("subject" in data or "phenotypicFeatures" in data): + return "phenopacket" + if {"id", "subject"} <= set(data): + return "phenopacket" + if isinstance(data, list) and any( + isinstance(item, dict) and item.get("resourceType") for item in data + ): + return "fhir" + raise ValueError(f"Could not detect patient input format for file: {path}") diff --git a/src/trialmatchai/interop/exporters/__init__.py b/src/trialmatchai/interop/exporters/__init__.py new file mode 100644 index 00000000..4d808e7f --- /dev/null +++ b/src/trialmatchai/interop/exporters/__init__.py @@ -0,0 +1,9 @@ +from trialmatchai.interop.exporters.fhir import profile_to_fhir_bundle +from trialmatchai.interop.exporters.matching_summary import profile_to_matching_summary +from trialmatchai.interop.exporters.phenopacket import profile_to_phenopacket + +__all__ = [ + "profile_to_fhir_bundle", + "profile_to_matching_summary", + "profile_to_phenopacket", +] diff --git a/src/trialmatchai/interop/exporters/fhir.py b/src/trialmatchai/interop/exporters/fhir.py new file mode 100644 index 00000000..5ea7f2d3 --- /dev/null +++ b/src/trialmatchai/interop/exporters/fhir.py @@ -0,0 +1,83 @@ +from __future__ import annotations + +from trialmatchai.interop.models import ClinicalFact, PatientProfile + + +def profile_to_fhir_bundle(profile: PatientProfile) -> dict: + patient_ref = f"Patient/{profile.patient_id}" + entries = [ + { + "resource": { + "resourceType": "Patient", + "id": profile.patient_id, + "gender": _fhir_gender(profile.demographics.sex), + **( + {"birthDate": profile.demographics.birth_date.isoformat()} + if profile.demographics.birth_date + else {} + ), + } + } + ] + entries.extend( + _fact_entry("Condition", fact, patient_ref) for fact in profile.conditions + ) + entries.extend( + _fact_entry("Observation", fact, patient_ref) + for fact in [*profile.phenotypes, *profile.observations] + ) + entries.extend( + _fact_entry("MedicationStatement", fact, patient_ref) + for fact in profile.medications + ) + entries.extend( + _fact_entry("Procedure", fact, patient_ref) for fact in profile.procedures + ) + entries.extend( + _fact_entry("DiagnosticReport", fact, patient_ref) + for fact in profile.diagnostic_reports + ) + return { + "resourceType": "Bundle", + "type": "collection", + "entry": entries, + } + + +def _fact_entry(resource_type: str, fact: ClinicalFact, patient_ref: str) -> dict: + return { + "resource": { + "resourceType": resource_type, + "id": fact.fact_id, + "subject": {"reference": patient_ref}, + "code": _codeable(fact), + "note": [{"text": fact.description or fact.evidence_text}] + if fact.description or fact.evidence_text + else [], + } + } + + +def _codeable(fact: ClinicalFact) -> dict: + code = fact.normalized_codes[0] if fact.normalized_codes else fact.original_code + if code is None: + return {"text": fact.label} + return { + "text": code.label or fact.label, + "coding": [ + { + "system": code.system or code.vocabulary, + "code": code.code, + "display": code.label or fact.label, + } + ], + } + + +def _fhir_gender(value: str | None) -> str | None: + if not value: + return None + normalized = value.casefold() + if normalized in {"male", "female", "other", "unknown"}: + return normalized + return "unknown" diff --git a/src/trialmatchai/interop/exporters/matching_summary.py b/src/trialmatchai/interop/exporters/matching_summary.py new file mode 100644 index 00000000..ac934a1b --- /dev/null +++ b/src/trialmatchai/interop/exporters/matching_summary.py @@ -0,0 +1,28 @@ +from __future__ import annotations + +from trialmatchai.interop.models import PatientProfile +from trialmatchai.interop.narrative import render_patient_narrative, render_search_terms + + +def profile_to_matching_summary(profile: PatientProfile) -> dict: + main_conditions, other_conditions = render_search_terms(profile) + age = ( + int(profile.demographics.age_years) + if profile.demographics.age_years is not None + else "all" + ) + gender = profile.demographics.sex or profile.demographics.gender or "all" + expanded_sentences = render_patient_narrative(profile, style="rag") + return { + "patient_id": profile.patient_id, + "main_conditions": main_conditions, + "other_conditions": other_conditions, + "expanded_sentences": expanded_sentences, + "age": age, + "gender": gender, + "split_raw_description": expanded_sentences, + "provenance": [ + provenance.model_dump(mode="json", exclude_none=True) + for provenance in profile.provenance + ], + } diff --git a/src/trialmatchai/interop/exporters/phenopacket.py b/src/trialmatchai/interop/exporters/phenopacket.py new file mode 100644 index 00000000..100dfd28 --- /dev/null +++ b/src/trialmatchai/interop/exporters/phenopacket.py @@ -0,0 +1,87 @@ +from __future__ import annotations + +from trialmatchai.interop.models import ClinicalFact, PatientProfile + + +def profile_to_phenopacket(profile: PatientProfile) -> dict: + unsupported: list[dict] = [] + packet = { + "id": profile.patient_id, + "subject": { + "id": profile.patient_id, + **({"sex": profile.demographics.sex.upper()} if profile.demographics.sex else {}), + **( + {"dateOfBirth": profile.demographics.birth_date.isoformat()} + if profile.demographics.birth_date + else {} + ), + }, + "phenotypicFeatures": [_phenotype_fact(fact) for fact in profile.phenotypes], + "diseases": [_disease_fact(fact) for fact in profile.conditions], + "measurements": [_measurement_fact(fact) for fact in profile.observations], + "medicalActions": [ + *[_treatment_fact(fact) for fact in profile.medications], + *[_procedure_fact(fact) for fact in profile.procedures], + ], + "metaData": { + "createdBy": "TrialMatchAI", + "resources": [], + }, + } + for fact in [ + *profile.diagnostic_reports, + *profile.genomic_findings, + *profile.cancer_profile, + *profile.family_history, + ]: + unsupported.append( + { + "fact_id": fact.fact_id, + "category": fact.category, + "label": fact.label, + "reason": "No lossless Phenopacket v1 exporter mapping implemented.", + } + ) + packet["trialmatchaiConversionReport"] = { + "lossy": bool(unsupported), + "unsupported": unsupported, + } + return packet + + +def _ontology_class(fact: ClinicalFact) -> dict: + code = fact.normalized_codes[0] if fact.normalized_codes else fact.original_code + if code is None: + return {"id": fact.label, "label": fact.label} + return {"id": f"{code.vocabulary}:{code.code}", "label": code.label or fact.label} + + +def _phenotype_fact(fact: ClinicalFact) -> dict: + return { + "type": _ontology_class(fact), + "excluded": fact.negated, + **({"description": fact.description} if fact.description else {}), + } + + +def _disease_fact(fact: ClinicalFact) -> dict: + return { + "term": _ontology_class(fact), + **({"excluded": fact.negated} if fact.negated else {}), + **({"description": fact.description} if fact.description else {}), + } + + +def _measurement_fact(fact: ClinicalFact) -> dict: + return { + "assay": _ontology_class(fact), + "value": {"value": fact.description or fact.label}, + } + + +def _treatment_fact(fact: ClinicalFact) -> dict: + return {"treatment": {"agent": _ontology_class(fact)}} + + +def _procedure_fact(fact: ClinicalFact) -> dict: + return {"procedure": {"code": _ontology_class(fact)}} diff --git a/src/trialmatchai/interop/importers/__init__.py b/src/trialmatchai/interop/importers/__init__.py new file mode 100644 index 00000000..2b79cfa6 --- /dev/null +++ b/src/trialmatchai/interop/importers/__init__.py @@ -0,0 +1,35 @@ +from __future__ import annotations + +from pathlib import Path +from typing import Any + +from trialmatchai.interop.detect import detect_patient_input_format +from trialmatchai.interop.importers.fhir import import_fhir +from trialmatchai.interop.importers.omop import import_omop_extract +from trialmatchai.interop.importers.phenopacket import import_phenopacket +from trialmatchai.interop.importers.text import import_text_note +from trialmatchai.interop.models import PatientProfile + + +def import_patient_path( + path: str | Path, + *, + input_format: str = "auto", + entity_annotator: Any | None = None, + strict: bool = False, +) -> list[PatientProfile]: + resolved_format = ( + detect_patient_input_format(path) if input_format == "auto" else input_format + ) + if resolved_format == "text": + return [import_text_note(path, entity_annotator=entity_annotator)] + if resolved_format == "phenopacket": + return [import_phenopacket(path, strict=strict)] + if resolved_format in {"fhir", "fhir-ndjson"}: + return [import_fhir(path, input_format=resolved_format, strict=strict)] + if resolved_format == "omop": + return import_omop_extract(path, strict=strict) + raise ValueError(f"Unsupported patient input format: {resolved_format}") + + +__all__ = ["import_patient_path"] diff --git a/src/trialmatchai/interop/importers/fhir.py b/src/trialmatchai/interop/importers/fhir.py new file mode 100644 index 00000000..8c15c9a7 --- /dev/null +++ b/src/trialmatchai/interop/importers/fhir.py @@ -0,0 +1,380 @@ +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any, Mapping + +from trialmatchai.interop.models import Demographics, PatientProfile, Provenance, SourceDocument +from trialmatchai.interop.utils import ( + age_years_from_birth_date, + clean_text, + code_from_fhir_codeable, + label_from_fhir_codeable, + make_fact, + normalize_gender, + parse_date, + safe_patient_id, + source_path_string, +) + + +def import_fhir( + path: str | Path, + *, + input_format: str = "fhir", + strict: bool = False, +) -> PatientProfile: + source_path = Path(path) + resources = ( + _load_ndjson(source_path) + if input_format == "fhir-ndjson" + else _load_json_resources(source_path) + ) + patient = next((res for res in resources if res.get("resourceType") == "Patient"), {}) + patient_id = safe_patient_id(patient.get("id"), source_path.stem) + provenance = Provenance( + source_format=input_format, + source_id=patient_id, + source_path=source_path_string(source_path), + ) + birth_date = parse_date(patient.get("birthDate")) + profile = PatientProfile( + patient_id=patient_id, + demographics=Demographics( + sex=normalize_gender(patient.get("gender")), + gender=normalize_gender(patient.get("gender")), + birth_date=birth_date, + age_years=age_years_from_birth_date(birth_date), + ), + provenance=[provenance], + ) + for resource in resources: + try: + _add_resource(profile, resource, provenance) + except Exception: + if strict: + raise + profile.unsupported.append( + { + "resourceType": resource.get("resourceType"), + "id": resource.get("id"), + "reason": "resource mapping failed", + } + ) + return profile + + +def _load_json_resources(path: Path) -> list[dict[str, Any]]: + data = json.loads(path.read_text(encoding="utf-8")) + if isinstance(data, list): + return [item for item in data if isinstance(item, dict)] + if not isinstance(data, dict): + return [] + if data.get("resourceType") == "Bundle": + return [ + entry["resource"] + for entry in data.get("entry") or [] + if isinstance(entry, dict) and isinstance(entry.get("resource"), dict) + ] + return [data] + + +def _load_ndjson(path: Path) -> list[dict[str, Any]]: + resources = [] + with path.open("r", encoding="utf-8") as handle: + for line in handle: + if line.strip(): + resources.append(json.loads(line)) + return resources + + +def _add_resource( + profile: PatientProfile, + resource: Mapping[str, Any], + base_provenance: Provenance, +) -> None: + resource_type = resource.get("resourceType") + if resource_type in {None, "Patient"}: + return + provenance = base_provenance.model_copy( + update={ + "source_resource": f"{resource_type}/{resource.get('id', 'unknown')}", + } + ) + if resource_type == "Condition": + _add_condition(profile, resource, provenance) + elif resource_type == "Observation": + _add_observation(profile, resource, provenance) + elif resource_type in { + "MedicationRequest", + "MedicationStatement", + "MedicationAdministration", + }: + _add_medication(profile, resource, provenance) + elif resource_type == "Procedure": + _add_procedure(profile, resource, provenance) + elif resource_type == "DiagnosticReport": + _add_diagnostic_report(profile, resource, provenance) + elif resource_type == "DocumentReference": + _add_document_reference(profile, resource, provenance) + elif resource_type == "AllergyIntolerance": + _add_allergy(profile, resource, provenance) + elif resource_type == "FamilyMemberHistory": + _add_family_history(profile, resource, provenance) + elif resource_type in {"MolecularSequence", "GenomicStudy"}: + _add_genomic(profile, resource, provenance) + elif resource_type == "Specimen": + _add_specimen(profile, resource, provenance) + else: + profile.unsupported.append( + { + "resourceType": resource_type, + "id": resource.get("id"), + "reason": "FHIR resource type not mapped in v1 importer", + } + ) + + +def _add_condition( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + code = code_from_fhir_codeable(resource.get("code") or {}) + label = label_from_fhir_codeable(resource.get("code") or {}) + if not label: + return + profile.conditions.append( + make_fact( + category="condition", + label=label, + original_code=code, + provenance=provenance, + description=clean_text(resource.get("note")) or None, + temporality=clean_text(resource.get("onsetDateTime")) or None, + negated=_is_negated(resource), + ) + ) + + +def _add_observation( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + code = code_from_fhir_codeable(resource.get("code") or {}) + label = label_from_fhir_codeable(resource.get("code") or {}) + if not label: + return + value = _observation_value(resource) + category = "genomic_finding" if _is_genomic_observation(resource) else "observation" + profile.add_fact( + make_fact( + category=category, + label=label, + original_code=code, + provenance=provenance, + description=value, + temporality=clean_text(resource.get("effectiveDateTime")) or None, + ) + ) + + +def _add_medication( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + medication = ( + resource.get("medicationCodeableConcept") + or resource.get("medication") + or resource.get("contained") + or {} + ) + code = code_from_fhir_codeable(medication) if isinstance(medication, Mapping) else None + label = ( + label_from_fhir_codeable(medication) + if isinstance(medication, Mapping) + else clean_text(medication) + ) + if not label: + return + profile.medications.append( + make_fact( + category="medication", + label=label, + original_code=code, + provenance=provenance, + description=clean_text(resource.get("dosageInstruction")) or None, + ) + ) + + +def _add_procedure( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + code = code_from_fhir_codeable(resource.get("code") or {}) + label = label_from_fhir_codeable(resource.get("code") or {}) + if label: + profile.procedures.append( + make_fact( + category="procedure", + label=label, + original_code=code, + provenance=provenance, + temporality=clean_text(resource.get("performedDateTime")) or None, + ) + ) + + +def _add_diagnostic_report( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + code = code_from_fhir_codeable(resource.get("code") or {}) + label = label_from_fhir_codeable(resource.get("code") or {}) or clean_text( + resource.get("conclusion") + ) + if label: + profile.diagnostic_reports.append( + make_fact( + category="diagnostic_report", + label=label, + original_code=code, + provenance=provenance, + description=clean_text(resource.get("conclusion")) or None, + ) + ) + + +def _add_document_reference( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + profile.source_documents.append( + SourceDocument( + document_id=clean_text(resource.get("id")) or provenance.source_resource or "document", + title=clean_text(resource.get("description") or resource.get("docStatus")) or None, + document_type=label_from_fhir_codeable(resource.get("type") or {}) or None, + url=_document_url(resource), + provenance=provenance, + ) + ) + + +def _add_allergy( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + code = code_from_fhir_codeable(resource.get("code") or {}) + label = label_from_fhir_codeable(resource.get("code") or {}) + if label: + profile.conditions.append( + make_fact( + category="condition", + label=f"Allergy: {label}", + original_code=code, + provenance=provenance, + extra={"clinical_status": resource.get("clinicalStatus")}, + ) + ) + + +def _add_family_history( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + relationship = label_from_fhir_codeable(resource.get("relationship") or {}) + conditions = resource.get("condition") or [] + label = relationship or clean_text(resource.get("id")) + if conditions: + labels = [ + label_from_fhir_codeable(condition.get("code") or {}) + for condition in conditions + if isinstance(condition, Mapping) + ] + label = f"{relationship}: {', '.join(item for item in labels if item)}" + if label: + profile.family_history.append( + make_fact( + category="family_history", + label=label, + provenance=provenance, + extra={"relationship": relationship, "conditions": conditions}, + ) + ) + + +def _add_genomic( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + label = clean_text(resource.get("id") or resource.get("type") or "Genomic finding") + profile.genomic_findings.append( + make_fact( + category="genomic_finding", + label=label, + provenance=provenance, + extra=dict(resource), + ) + ) + + +def _add_specimen( + profile: PatientProfile, + resource: Mapping[str, Any], + provenance: Provenance, +) -> None: + label = label_from_fhir_codeable(resource.get("type") or {}) or clean_text( + resource.get("id") + ) + if label: + profile.diagnostic_reports.append( + make_fact( + category="diagnostic_report", + label=f"Specimen: {label}", + provenance=provenance, + extra=dict(resource), + ) + ) + + +def _observation_value(resource: Mapping[str, Any]) -> str | None: + if resource.get("valueQuantity"): + value = resource["valueQuantity"] + return clean_text( + f"{value.get('value', '')} {value.get('unit') or value.get('code') or ''}" + ) + if resource.get("valueCodeableConcept"): + return label_from_fhir_codeable(resource.get("valueCodeableConcept") or {}) + for key in ("valueString", "valueBoolean", "valueInteger", "valueDateTime"): + if key in resource: + return clean_text(resource.get(key)) + return None + + +def _is_negated(resource: Mapping[str, Any]) -> bool: + verification = resource.get("verificationStatus") or {} + text = label_from_fhir_codeable(verification).casefold() + return "refuted" in text or "entered-in-error" in text + + +def _is_genomic_observation(resource: Mapping[str, Any]) -> bool: + categories = resource.get("category") or [] + text = clean_text(categories).casefold() + return "genetic" in text or "genomic" in text + + +def _document_url(resource: Mapping[str, Any]) -> str | None: + for content in resource.get("content") or []: + attachment = (content or {}).get("attachment") or {} + if attachment.get("url"): + return clean_text(attachment.get("url")) + return None diff --git a/src/trialmatchai/interop/importers/omop.py b/src/trialmatchai/interop/importers/omop.py new file mode 100644 index 00000000..c8a45214 --- /dev/null +++ b/src/trialmatchai/interop/importers/omop.py @@ -0,0 +1,322 @@ +from __future__ import annotations + +from pathlib import Path +from typing import Any + +import pandas as pd + +from trialmatchai.interop.models import Demographics, NormalizedCode, PatientNote, PatientProfile, Provenance +from trialmatchai.interop.utils import ( + age_years_from_birth_date, + clean_text, + make_fact, + normalize_gender, + parse_date, + safe_patient_id, + source_path_string, +) + + +def import_omop_extract( + path: str | Path, + *, + strict: bool = False, +) -> list[PatientProfile]: + root = Path(path) + tables = _load_tables(root) + concepts = _concept_lookup(tables.get("concept")) + person = tables.get("person") + if person is None or person.empty: + if strict: + raise ValueError(f"OMOP extract is missing PERSON table: {root}") + return [] + + profiles: list[PatientProfile] = [] + for _, row in person.iterrows(): + patient_id = safe_patient_id(row.get("person_id"), "omop-patient") + provenance = Provenance( + source_format="omop", + source_id=patient_id, + source_path=source_path_string(root), + source_table="PERSON", + ) + birth_date = _person_birth_date(row) + profile = PatientProfile( + patient_id=patient_id, + demographics=Demographics( + sex=_concept_label(row.get("gender_concept_id"), concepts) + or normalize_gender(row.get("gender_source_value")), + gender=normalize_gender(row.get("gender_source_value")), + birth_date=birth_date, + age_years=age_years_from_birth_date(birth_date), + ), + provenance=[provenance], + ) + _add_condition_rows(profile, tables.get("condition_occurrence"), concepts, root) + _add_measurement_rows(profile, tables.get("measurement"), concepts, root) + _add_drug_rows(profile, tables.get("drug_exposure"), concepts, root) + _add_procedure_rows(profile, tables.get("procedure_occurrence"), concepts, root) + _add_observation_rows(profile, tables.get("observation"), concepts, root) + _add_note_rows(profile, tables.get("note"), root) + _add_note_nlp_rows(profile, tables.get("note_nlp"), concepts, root) + profiles.append(profile) + return profiles + + +def _load_tables(root: Path) -> dict[str, pd.DataFrame]: + tables: dict[str, pd.DataFrame] = {} + for file_path in root.iterdir(): + if file_path.suffix.casefold() not in {".csv", ".parquet"}: + continue + name = file_path.stem.casefold() + if file_path.suffix.casefold() == ".csv": + table = pd.read_csv(file_path) + else: + table = pd.read_parquet(file_path) + table.columns = [str(column).casefold() for column in table.columns] + tables[name] = table + return tables + + +def _concept_lookup(table: pd.DataFrame | None) -> dict[Any, dict[str, Any]]: + if table is None: + return {} + return { + row.get("concept_id"): row.to_dict() + for _, row in table.iterrows() + if row.get("concept_id") is not None + } + + +def _person_birth_date(row) -> Any: + if row.get("birth_datetime"): + return parse_date(row.get("birth_datetime")) + year = row.get("year_of_birth") + if pd.isna(year): + return None + month = int(row.get("month_of_birth") or 1) + day = int(row.get("day_of_birth") or 1) + return parse_date(f"{int(year):04d}-{month:02d}-{day:02d}") + + +def _add_condition_rows( + profile: PatientProfile, + table: pd.DataFrame | None, + concepts: dict[Any, dict[str, Any]], + root: Path, +) -> None: + for row in _rows_for_patient(table, profile.patient_id, "person_id"): + code = _omop_code(row.get("condition_concept_id"), concepts) + label = _concept_label(row.get("condition_concept_id"), concepts) or clean_text( + row.get("condition_source_value") + ) + if label: + profile.conditions.append( + make_fact( + category="condition", + label=label, + original_code=code, + provenance=_row_provenance(root, profile.patient_id, "CONDITION_OCCURRENCE"), + temporality=clean_text(row.get("condition_start_date")) or None, + ) + ) + + +def _add_measurement_rows( + profile: PatientProfile, + table: pd.DataFrame | None, + concepts: dict[Any, dict[str, Any]], + root: Path, +) -> None: + for row in _rows_for_patient(table, profile.patient_id, "person_id"): + code = _omop_code(row.get("measurement_concept_id"), concepts) + label = _concept_label(row.get("measurement_concept_id"), concepts) or clean_text( + row.get("measurement_source_value") + ) + value = row.get("value_as_number") + if pd.isna(value): + value = _concept_label(row.get("value_as_concept_id"), concepts) + unit = _concept_label(row.get("unit_concept_id"), concepts) + if label: + profile.observations.append( + make_fact( + category="observation", + label=label, + original_code=code, + provenance=_row_provenance(root, profile.patient_id, "MEASUREMENT"), + description=clean_text(f"{value or ''} {unit or ''}") or None, + temporality=clean_text(row.get("measurement_date")) or None, + ) + ) + + +def _add_drug_rows( + profile: PatientProfile, + table: pd.DataFrame | None, + concepts: dict[Any, dict[str, Any]], + root: Path, +) -> None: + for row in _rows_for_patient(table, profile.patient_id, "person_id"): + code = _omop_code(row.get("drug_concept_id"), concepts) + label = _concept_label(row.get("drug_concept_id"), concepts) or clean_text( + row.get("drug_source_value") + ) + if label: + profile.medications.append( + make_fact( + category="medication", + label=label, + original_code=code, + provenance=_row_provenance(root, profile.patient_id, "DRUG_EXPOSURE"), + temporality=clean_text(row.get("drug_exposure_start_date")) or None, + ) + ) + + +def _add_procedure_rows( + profile: PatientProfile, + table: pd.DataFrame | None, + concepts: dict[Any, dict[str, Any]], + root: Path, +) -> None: + for row in _rows_for_patient(table, profile.patient_id, "person_id"): + code = _omop_code(row.get("procedure_concept_id"), concepts) + label = _concept_label(row.get("procedure_concept_id"), concepts) or clean_text( + row.get("procedure_source_value") + ) + if label: + profile.procedures.append( + make_fact( + category="procedure", + label=label, + original_code=code, + provenance=_row_provenance(root, profile.patient_id, "PROCEDURE_OCCURRENCE"), + temporality=clean_text(row.get("procedure_date")) or None, + ) + ) + + +def _add_observation_rows( + profile: PatientProfile, + table: pd.DataFrame | None, + concepts: dict[Any, dict[str, Any]], + root: Path, +) -> None: + for row in _rows_for_patient(table, profile.patient_id, "person_id"): + code = _omop_code(row.get("observation_concept_id"), concepts) + label = _concept_label(row.get("observation_concept_id"), concepts) or clean_text( + row.get("observation_source_value") + ) + if label: + profile.observations.append( + make_fact( + category="observation", + label=label, + original_code=code, + provenance=_row_provenance(root, profile.patient_id, "OBSERVATION"), + temporality=clean_text(row.get("observation_date")) or None, + ) + ) + + +def _add_note_rows( + profile: PatientProfile, + table: pd.DataFrame | None, + root: Path, +) -> None: + for row in _rows_for_patient(table, profile.patient_id, "person_id"): + text = clean_text(row.get("note_text")) + if not text: + continue + provenance = _row_provenance(root, profile.patient_id, "NOTE") + profile.notes.append( + PatientNote( + note_id=clean_text(row.get("note_id")) or f"{profile.patient_id}-note", + text=text, + note_type=clean_text(row.get("note_type_concept_id")) or "omop-note", + provenance=provenance, + ) + ) + + +def _add_note_nlp_rows( + profile: PatientProfile, + table: pd.DataFrame | None, + concepts: dict[Any, dict[str, Any]], + root: Path, +) -> None: + for row in _rows_for_patient(table, profile.patient_id, "person_id"): + code = _omop_code(row.get("note_nlp_concept_id"), concepts) + label = _concept_label(row.get("note_nlp_concept_id"), concepts) or clean_text( + row.get("lexical_variant") or row.get("snippet") + ) + if not label: + continue + concept = concepts.get(row.get("note_nlp_concept_id"), {}) + domain = clean_text(concept.get("domain_id")).casefold() + category = "condition" if domain == "condition" else "observation" + profile.add_fact( + make_fact( + category=category, + label=label, + original_code=code, + provenance=_row_provenance(root, profile.patient_id, "NOTE_NLP"), + evidence_text=clean_text(row.get("snippet")) or None, + evidence_start=_int_or_none(row.get("offset")), + negated=str(row.get("term_exists")).casefold() == "false", + ) + ) + + +def _rows_for_patient( + table: pd.DataFrame | None, + patient_id: str, + column: str, +) -> list[dict[str, Any]]: + if table is None or table.empty or column not in table.columns: + return [] + patient_rows = table[table[column].astype(str) == str(patient_id)] + return [row.to_dict() for _, row in patient_rows.iterrows()] + + +def _row_provenance(root: Path, patient_id: str, table_name: str) -> Provenance: + return Provenance( + source_format="omop", + source_id=patient_id, + source_path=source_path_string(root), + source_table=table_name, + ) + + +def _omop_code(concept_id: Any, concepts: dict[Any, dict[str, Any]]) -> NormalizedCode | None: + if concept_id is None or pd.isna(concept_id): + return None + concept = concepts.get(concept_id) + if not concept: + return NormalizedCode( + vocabulary="OMOP", + code=str(int(concept_id)) if isinstance(concept_id, float) else str(concept_id), + mapping_status="unmapped", + ) + return NormalizedCode( + vocabulary=clean_text(concept.get("vocabulary_id")) or "OMOP", + code=clean_text(concept.get("concept_code")) or str(concept_id), + label=clean_text(concept.get("concept_name")) or None, + mapping_status="exact", + ) + + +def _concept_label(concept_id: Any, concepts: dict[Any, dict[str, Any]]) -> str | None: + if concept_id is None or pd.isna(concept_id): + return None + concept = concepts.get(concept_id) + return clean_text((concept or {}).get("concept_name")) or None + + +def _int_or_none(value: Any) -> int | None: + if value is None or pd.isna(value): + return None + try: + return int(value) + except (TypeError, ValueError): + return None diff --git a/src/trialmatchai/interop/importers/phenopacket.py b/src/trialmatchai/interop/importers/phenopacket.py new file mode 100644 index 00000000..59e52b73 --- /dev/null +++ b/src/trialmatchai/interop/importers/phenopacket.py @@ -0,0 +1,299 @@ +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any, Mapping + +from trialmatchai.interop.models import Demographics, PatientProfile, Provenance, SourceDocument +from trialmatchai.interop.utils import ( + clean_text, + code_from_ontology_class, + make_fact, + normalize_gender, + parse_date, + parse_iso8601_age_years, + safe_patient_id, + source_path_string, +) +from trialmatchai.schemas.phenopacket import Phenopacket + + +def import_phenopacket( + path: str | Path, + *, + strict: bool = False, +) -> PatientProfile: + packet_path = Path(path) + data = json.loads(packet_path.read_text(encoding="utf-8")) + try: + Phenopacket.model_validate(data) + except Exception: + if strict: + raise + patient_id = safe_patient_id(data.get("id"), packet_path.stem) + provenance = Provenance( + source_format="phenopacket", + source_id=patient_id, + source_path=source_path_string(packet_path), + ) + profile = PatientProfile( + patient_id=patient_id, + demographics=_demographics(data.get("subject") or {}), + provenance=[provenance], + ) + _add_phenotypes(profile, data, provenance) + _add_diseases(profile, data, provenance) + _add_biosamples(profile, data, provenance) + _add_measurements(profile, data, provenance) + _add_actions(profile, data, provenance) + _add_interpretations(profile, data, provenance) + _add_family(profile, data, provenance) + _add_files(profile, data, provenance) + return profile + + +def _demographics(subject: Mapping[str, Any]) -> Demographics: + age_years = None + encounter = subject.get("timeAtLastEncounter") or {} + if isinstance(encounter, Mapping): + age = encounter.get("age") or {} + if isinstance(age, Mapping): + age_years = parse_iso8601_age_years(age.get("iso8601duration")) + birth_date = parse_date(subject.get("dateOfBirth")) + return Demographics( + sex=normalize_gender(subject.get("sex")), + gender=normalize_gender(subject.get("gender")), + birth_date=birth_date, + age_years=age_years, + species=clean_text((subject.get("taxonomy") or {}).get("label")), + description=clean_text(subject.get("description")) or None, + ) + + +def _add_phenotypes( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, item in enumerate(data.get("phenotypicFeatures") or []): + feature = item.get("type") or {} + code = code_from_ontology_class(feature) + label = clean_text(feature.get("label") or feature.get("id")) + if not label: + continue + profile.phenotypes.append( + make_fact( + category="phenotype", + label=label, + original_code=code, + provenance=provenance.model_copy( + update={"source_resource": f"phenotypicFeatures[{index}]"} + ), + description=clean_text(item.get("description")) or None, + negated=bool(item.get("excluded", False)), + temporality=clean_text(item.get("onset")) or None, + extra={"severity": item.get("severity"), "modifiers": item.get("modifiers")}, + ) + ) + + +def _add_diseases( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, item in enumerate(data.get("diseases") or []): + term = item.get("term") or {} + code = code_from_ontology_class(term) + label = clean_text(term.get("label") or term.get("id")) + if not label: + continue + category = "cancer" if item.get("tnmFinding") or item.get("diseaseStage") else "condition" + profile.add_fact( + make_fact( + category=category, + label=label, + original_code=code, + provenance=provenance.model_copy( + update={"source_resource": f"diseases[{index}]"} + ), + description=clean_text(item.get("description")) or None, + temporality=clean_text(item.get("onset")) or None, + extra={ + "disease_stage": item.get("diseaseStage") or [], + "tnm_finding": item.get("tnmFinding") or [], + }, + ) + ) + + +def _add_biosamples( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, sample in enumerate(data.get("biosamples") or []): + label = clean_text( + (sample.get("histologicalDiagnosis") or {}).get("label") + or (sample.get("sampledTissue") or {}).get("label") + or (sample.get("sampleType") or {}).get("label") + or sample.get("id") + ) + if not label: + continue + profile.diagnostic_reports.append( + make_fact( + category="diagnostic_report", + label=f"Biosample: {label}", + provenance=provenance.model_copy( + update={"source_resource": f"biosamples[{index}]"} + ), + description=clean_text(sample.get("description")) or None, + extra=sample, + ) + ) + + +def _add_measurements( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, item in enumerate(data.get("measurements") or []): + assay = item.get("assay") or {} + code = code_from_ontology_class(assay) + label = clean_text(assay.get("label") or assay.get("id")) + if not label: + continue + value = item.get("value") or {} + profile.observations.append( + make_fact( + category="observation", + label=label, + original_code=code, + provenance=provenance.model_copy( + update={"source_resource": f"measurements[{index}]"} + ), + description=clean_text(value or item.get("description")) or None, + extra={"value": value}, + ) + ) + + +def _add_actions( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, action in enumerate(data.get("medicalActions") or []): + if action.get("treatment"): + tx = action["treatment"] + agent = tx.get("agent") or {} + code = code_from_ontology_class(agent) + label = clean_text(agent.get("label") or agent.get("id") or tx.get("description")) + if label: + profile.medications.append( + make_fact( + category="medication", + label=label, + original_code=code, + provenance=provenance.model_copy( + update={"source_resource": f"medicalActions[{index}].treatment"} + ), + description=clean_text(tx.get("description")) or None, + extra=tx, + ) + ) + if action.get("procedure"): + proc = action["procedure"] + codeable = proc.get("code") or {} + code = code_from_ontology_class(codeable) + label = clean_text(codeable.get("label") or codeable.get("id") or proc.get("description")) + if label: + profile.procedures.append( + make_fact( + category="procedure", + label=label, + original_code=code, + provenance=provenance.model_copy( + update={"source_resource": f"medicalActions[{index}].procedure"} + ), + description=clean_text(proc.get("description")) or None, + temporality=clean_text(proc.get("performed")) or None, + extra=proc, + ) + ) + + +def _add_interpretations( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, item in enumerate(data.get("interpretations") or []): + diagnosis = item.get("diagnosis") or {} + for gi_index, interpretation in enumerate(diagnosis.get("genomicInterpretations") or []): + variant = (interpretation.get("variantInterpretation") or {}).get( + "variationDescriptor" + ) or {} + gene = (variant.get("geneContext") or {}).get("symbol") + label = clean_text(" ".join(part for part in [gene, variant.get("label")] if part)) + if label: + profile.genomic_findings.append( + make_fact( + category="genomic_finding", + label=label, + provenance=provenance.model_copy( + update={ + "source_resource": ( + f"interpretations[{index}].diagnosis." + f"genomicInterpretations[{gi_index}]" + ) + } + ), + description=clean_text(diagnosis.get("description")) or None, + extra=variant, + ) + ) + + +def _add_family( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + family = data.get("family") or {} + for index, relative in enumerate(family.get("relatives") or []): + label = clean_text(relative.get("description") or relative.get("id")) + if not label: + continue + profile.family_history.append( + make_fact( + category="family_history", + label=label, + provenance=provenance.model_copy( + update={"source_resource": f"family.relatives[{index}]"} + ), + extra=relative, + ) + ) + + +def _add_files( + profile: PatientProfile, + data: Mapping[str, Any], + provenance: Provenance, +) -> None: + for index, file_ref in enumerate(data.get("files") or []): + uri = clean_text(file_ref.get("uri") or file_ref.get("path")) + profile.source_documents.append( + SourceDocument( + document_id=clean_text(file_ref.get("individualToFileIdentifiers")) or f"file-{index}", + title=clean_text(file_ref.get("description")) or None, + document_type=clean_text(file_ref.get("fileAttributes")) or None, + url=uri or None, + provenance=provenance.model_copy( + update={"source_resource": f"files[{index}]"} + ), + ) + ) diff --git a/src/trialmatchai/interop/importers/text.py b/src/trialmatchai/interop/importers/text.py new file mode 100644 index 00000000..db1d93b0 --- /dev/null +++ b/src/trialmatchai/interop/importers/text.py @@ -0,0 +1,116 @@ +from __future__ import annotations + +from pathlib import Path +from typing import Any + +from trialmatchai.interop.models import Demographics, PatientNote, PatientProfile, Provenance +from trialmatchai.interop.utils import make_fact, safe_patient_id, source_path_string + + +ENTITY_GROUP_TO_CATEGORY = { + "disease": "condition", + "condition": "condition", + "drug": "medication", + "medication": "medication", + "procedure": "procedure", + "diagnostic_test": "observation", + "laboratory_test": "observation", + "radiology": "diagnostic_report", + "sign_symptom": "phenotype", + "gene": "genomic_finding", + "cell_type": "phenotype", + "species": "phenotype", +} + + +def import_text_note( + path: str | Path, + *, + entity_annotator: Any | None = None, +) -> PatientProfile: + note_path = Path(path) + text = note_path.read_text(encoding="utf-8") + patient_id = safe_patient_id(note_path.stem, note_path.stem) + provenance = Provenance( + source_format="text", + source_id=patient_id, + source_path=source_path_string(note_path), + source_field="note_text", + ) + entities = _annotate(text, entity_annotator) + profile = PatientProfile( + patient_id=patient_id, + demographics=Demographics(), + notes=[ + PatientNote( + note_id=f"{patient_id}-note", + text=text, + entities=entities, + provenance=provenance, + ) + ], + provenance=[provenance], + ) + for entity in entities: + fact = _entity_to_fact(entity, provenance) + if fact is not None: + profile.add_fact(fact) + return profile + + +def _annotate(text: str, entity_annotator: Any | None) -> list[dict]: + if entity_annotator is None: + return [] + if hasattr(entity_annotator, "annotate_texts_in_parallel"): + result = entity_annotator.annotate_texts_in_parallel([text], max_workers=1) + return list(result[0]) if result else [] + if hasattr(entity_annotator, "annotate_texts"): + result = entity_annotator.annotate_texts([text]) + annotations = result[0] if result else [] + return [ + annotation.to_dict() if hasattr(annotation, "to_dict") else dict(annotation) + for annotation in annotations + ] + return [] + + +def _entity_to_fact(entity: dict, provenance: Provenance): + if entity.get("error_code"): + return None + group = str(entity.get("entity_group") or entity.get("class") or "").casefold() + category = ENTITY_GROUP_TO_CATEGORY.get(group, "observation") + text = str(entity.get("text") or entity.get("entity") or "").strip() + if not text: + return None + normalized_codes = [] + for normalized_id in entity.get("normalized_id") or []: + if normalized_id == "CUI-less" or ":" not in normalized_id: + continue + vocabulary, code = normalized_id.split(":", 1) + normalized_codes.append( + { + "vocabulary": vocabulary, + "code": code, + "label": text, + "confidence": entity.get("linker_score") or entity.get("score"), + "mapping_status": "normalized", + } + ) + from trialmatchai.interop.models import NormalizedCode + + return make_fact( + category=category, + label=text, + provenance=provenance, + normalized_codes=[NormalizedCode.model_validate(code) for code in normalized_codes], + evidence_text=text, + evidence_start=entity.get("start"), + evidence_end=entity.get("end"), + confidence=entity.get("score"), + extra={ + "entity_group": entity.get("entity_group"), + "synonyms": entity.get("synonyms") or [], + "concept_candidates": entity.get("concept_candidates") or [], + "linker_status": entity.get("linker_status"), + }, + ) diff --git a/src/trialmatchai/interop/models.py b/src/trialmatchai/interop/models.py new file mode 100644 index 00000000..34e41699 --- /dev/null +++ b/src/trialmatchai/interop/models.py @@ -0,0 +1,165 @@ +from __future__ import annotations + +from datetime import date +from typing import Any, Literal + +from pydantic import BaseModel, ConfigDict, Field, field_validator + + +MappingStatus = Literal[ + "exact", + "normalized", + "broader", + "narrower", + "inferred", + "unsupported", + "unmapped", +] + + +class EvidenceSpan(BaseModel): + text: str | None = None + start: int | None = Field(default=None, ge=0) + end: int | None = Field(default=None, ge=0) + + @field_validator("end") + @classmethod + def validate_end(cls, value: int | None, info): + start = info.data.get("start") + if value is not None and start is not None and value < start: + raise ValueError("evidence span end must be >= start") + return value + + +class Provenance(BaseModel): + source_format: str + source_id: str | None = None + source_path: str | None = None + source_resource: str | None = None + source_table: str | None = None + source_field: str | None = None + raw_text_span: EvidenceSpan | None = None + + model_config = ConfigDict(extra="allow") + + +class NormalizedCode(BaseModel): + vocabulary: str + code: str + label: str | None = None + system: str | None = None + confidence: float | None = Field(default=None, ge=0.0, le=1.0) + mapping_status: MappingStatus = "unmapped" + + model_config = ConfigDict(extra="allow") + + +class Demographics(BaseModel): + sex: str | None = None + gender: str | None = None + birth_date: date | None = None + age_years: float | None = Field(default=None, ge=0) + species: str | None = None + description: str | None = None + + model_config = ConfigDict(extra="allow") + + +class ClinicalFact(BaseModel): + fact_id: str + category: str + label: str + description: str | None = None + original_code: NormalizedCode | None = None + normalized_codes: list[NormalizedCode] = Field(default_factory=list) + vocabulary: str | None = None + evidence_text: str | None = None + evidence_start: int | None = Field(default=None, ge=0) + evidence_end: int | None = Field(default=None, ge=0) + confidence: float | None = Field(default=None, ge=0.0, le=1.0) + negated: bool = False + temporality: str | None = None + mapping_status: MappingStatus = "unmapped" + provenance: Provenance + extra: dict[str, Any] = Field(default_factory=dict) + + model_config = ConfigDict(extra="allow") + + @field_validator("evidence_end") + @classmethod + def validate_evidence_end(cls, value: int | None, info): + start = info.data.get("evidence_start") + if value is not None and start is not None and value < start: + raise ValueError("evidence_end must be >= evidence_start") + return value + + +class PatientNote(BaseModel): + note_id: str + text: str + note_type: str = "clinical-note" + entities: list[dict[str, Any]] = Field(default_factory=list) + provenance: Provenance + + model_config = ConfigDict(extra="allow") + + +class SourceDocument(BaseModel): + document_id: str + title: str | None = None + document_type: str | None = None + url: str | None = None + text: str | None = None + provenance: Provenance + + model_config = ConfigDict(extra="allow") + + +class PatientProfile(BaseModel): + patient_id: str + demographics: Demographics = Field(default_factory=Demographics) + conditions: list[ClinicalFact] = Field(default_factory=list) + phenotypes: list[ClinicalFact] = Field(default_factory=list) + observations: list[ClinicalFact] = Field(default_factory=list) + medications: list[ClinicalFact] = Field(default_factory=list) + procedures: list[ClinicalFact] = Field(default_factory=list) + diagnostic_reports: list[ClinicalFact] = Field(default_factory=list) + genomic_findings: list[ClinicalFact] = Field(default_factory=list) + cancer_profile: list[ClinicalFact] = Field(default_factory=list) + family_history: list[ClinicalFact] = Field(default_factory=list) + notes: list[PatientNote] = Field(default_factory=list) + source_documents: list[SourceDocument] = Field(default_factory=list) + provenance: list[Provenance] = Field(default_factory=list) + unsupported: list[dict[str, Any]] = Field(default_factory=list) + + model_config = ConfigDict(extra="allow") + + def all_facts(self) -> list[ClinicalFact]: + return [ + *self.conditions, + *self.phenotypes, + *self.observations, + *self.medications, + *self.procedures, + *self.diagnostic_reports, + *self.genomic_findings, + *self.cancer_profile, + *self.family_history, + ] + + def add_fact(self, fact: ClinicalFact) -> None: + bucket = { + "condition": self.conditions, + "phenotype": self.phenotypes, + "observation": self.observations, + "medication": self.medications, + "procedure": self.procedures, + "diagnostic_report": self.diagnostic_reports, + "genomic_finding": self.genomic_findings, + "cancer": self.cancer_profile, + "family_history": self.family_history, + }.get(fact.category) + if bucket is None: + self.observations.append(fact) + else: + bucket.append(fact) diff --git a/src/trialmatchai/interop/narrative.py b/src/trialmatchai/interop/narrative.py new file mode 100644 index 00000000..5fffee41 --- /dev/null +++ b/src/trialmatchai/interop/narrative.py @@ -0,0 +1,101 @@ +from __future__ import annotations + +from trialmatchai.interop.models import ClinicalFact, PatientProfile + + +def render_patient_narrative( + profile: PatientProfile, + *, + style: str = "rag", +) -> list[str]: + """Render structured profile facts into deterministic LLM-ready sentences.""" + lines: list[str] = [] + demographics = profile.demographics + demo_bits = [] + if demographics.age_years is not None: + demo_bits.append(f"age {demographics.age_years:g} years") + if demographics.sex: + demo_bits.append(f"sex {demographics.sex}") + if demographics.gender and demographics.gender != demographics.sex: + demo_bits.append(f"gender {demographics.gender}") + if demographics.species: + demo_bits.append(f"species {demographics.species}") + if demographics.description: + demo_bits.append(demographics.description) + if demo_bits: + lines.append("Patient demographics: " + "; ".join(demo_bits) + ".") + + lines.extend(_render_fact_group("Diagnoses", profile.conditions)) + lines.extend(_render_fact_group("Phenotypes", profile.phenotypes)) + lines.extend(_render_fact_group("Observations", profile.observations)) + lines.extend(_render_fact_group("Medications", profile.medications)) + lines.extend(_render_fact_group("Procedures", profile.procedures)) + lines.extend(_render_fact_group("Diagnostic reports", profile.diagnostic_reports)) + lines.extend(_render_fact_group("Genomic findings", profile.genomic_findings)) + lines.extend(_render_fact_group("Cancer profile", profile.cancer_profile)) + lines.extend(_render_fact_group("Family history", profile.family_history)) + + if style == "audit": + for note in profile.notes: + lines.append(f"Source note {note.note_id}: {note.text}") + elif profile.notes: + note_text = " ".join(note.text for note in profile.notes[:3]) + if note_text: + lines.append(f"Clinical note context: {note_text[:2000]}") + + return lines or ["No structured patient facts were available."] + + +def render_search_terms(profile: PatientProfile) -> tuple[list[str], list[str]]: + main_conditions = _dedupe( + fact.label for fact in profile.conditions if not fact.negated + ) + if not main_conditions: + main_conditions = _dedupe( + fact.label for fact in profile.phenotypes if not fact.negated + ) + other_terms = _dedupe( + [ + *[fact.label for fact in profile.phenotypes if not fact.negated], + *[fact.label for fact in profile.observations if not fact.negated], + *[fact.label for fact in profile.medications if not fact.negated], + *[fact.label for fact in profile.procedures if not fact.negated], + *[fact.label for fact in profile.genomic_findings if not fact.negated], + *[fact.label for fact in profile.cancer_profile if not fact.negated], + *[fact.label for fact in profile.family_history if not fact.negated], + ] + ) + return main_conditions, [term for term in other_terms if term not in main_conditions] + + +def _render_fact_group(label: str, facts: list[ClinicalFact]) -> list[str]: + if not facts: + return [] + rendered = [] + for fact in facts: + status = "absent" if fact.negated else "present" + pieces = [fact.label, status] + if fact.description: + pieces.append(fact.description) + if fact.temporality: + pieces.append(f"timing {fact.temporality}") + code = fact.normalized_codes[0] if fact.normalized_codes else None + if code and code.code: + pieces.append(f"code {code.vocabulary}:{code.code}") + rendered.append(f"{label}: " + "; ".join(pieces) + ".") + return rendered + + +def _dedupe(values) -> list[str]: + seen: set[str] = set() + output: list[str] = [] + for value in values: + cleaned = str(value).strip() + if not cleaned: + continue + key = cleaned.casefold() + if key in seen: + continue + seen.add(key) + output.append(cleaned) + return output diff --git a/src/trialmatchai/interop/utils.py b/src/trialmatchai/interop/utils.py new file mode 100644 index 00000000..ab4d67a7 --- /dev/null +++ b/src/trialmatchai/interop/utils.py @@ -0,0 +1,207 @@ +from __future__ import annotations + +import hashlib +import re +from datetime import date, datetime +from pathlib import Path +from typing import Any, Iterable, Mapping + +from trialmatchai.interop.models import ClinicalFact, NormalizedCode, Provenance + + +FHIR_SYSTEM_TO_VOCABULARY = { + "http://snomed.info/sct": "SNOMED", + "http://loinc.org": "LOINC", + "http://www.nlm.nih.gov/research/umls/rxnorm": "RxNorm", + "http://hl7.org/fhir/sid/icd-10-cm": "ICD10CM", + "http://hl7.org/fhir/sid/icd-10": "ICD10", + "https://hpo.jax.org/app/browse/term": "HP", + "http://purl.obolibrary.org/obo/hp.owl": "HP", + "http://purl.obolibrary.org/obo/mondo.owl": "MONDO", +} + + +def stable_id(*parts: Any) -> str: + payload = "|".join(str(part) for part in parts if part not in (None, "")) + return hashlib.sha256(payload.encode("utf-8")).hexdigest()[:16] + + +def clean_text(value: Any) -> str: + if value is None: + return "" + if isinstance(value, str): + return re.sub(r"\s+", " ", value).strip() + if isinstance(value, Mapping): + return clean_text(" ".join(clean_text(item) for item in value.values())) + if isinstance(value, Iterable) and not isinstance(value, (bytes, bytearray)): + return clean_text(" ".join(clean_text(item) for item in value)) + return clean_text(str(value)) + + +def normalize_gender(value: Any) -> str | None: + if value is None: + return None + text = str(value).strip().casefold() + if text in {"female", "f", "woman", "women"}: + return "Female" + if text in {"male", "m", "man", "men"}: + return "Male" + if text in {"all", "any", "unknown", "other", "undifferentiated"}: + return text.title() + return str(value).strip() or None + + +def parse_date(value: Any) -> date | None: + if not value: + return None + try: + return datetime.fromisoformat(str(value).replace("Z", "+00:00")).date() + except ValueError: + return None + + +def age_years_from_birth_date(birth_date: date | None) -> float | None: + if birth_date is None: + return None + today = date.today() + years = today.year - birth_date.year + if (today.month, today.day) < (birth_date.month, birth_date.day): + years -= 1 + return float(years) if years >= 0 else None + + +def parse_iso8601_age_years(value: Any) -> float | None: + if not value: + return None + text = str(value) + match = re.fullmatch(r"P(?:(\d+(?:\.\d+)?)Y)?(?:(\d+(?:\.\d+)?)M)?", text) + if not match: + return None + years = float(match.group(1) or 0) + months = float(match.group(2) or 0) + return round(years + months / 12, 2) + + +def code_from_ontology_class(value: Mapping[str, Any] | None) -> NormalizedCode | None: + if not value: + return None + identifier = str(value.get("id") or value.get("code") or "").strip() + label = str(value.get("label") or value.get("display") or "").strip() or None + if not identifier and not label: + return None + vocabulary = "local" + code = identifier or label or "" + if ":" in identifier: + vocabulary, code = identifier.split(":", 1) + elif "/" in identifier: + code = identifier.rstrip("/").split("/")[-1] + return NormalizedCode( + vocabulary=vocabulary, + code=code, + label=label, + system=value.get("system"), + mapping_status="exact" if identifier else "unmapped", + ) + + +def code_from_fhir_codeable(value: Mapping[str, Any] | None) -> NormalizedCode | None: + if not value: + return None + text = clean_text(value.get("text")) + codings = value.get("coding") or [] + if isinstance(codings, list) and codings: + coding = codings[0] or {} + system = str(coding.get("system") or "") + vocabulary = FHIR_SYSTEM_TO_VOCABULARY.get(system, system.rsplit("/", 1)[-1]) + code = str(coding.get("code") or "").strip() + label = clean_text(coding.get("display")) or text or None + if code: + return NormalizedCode( + vocabulary=vocabulary or "FHIR", + code=code, + label=label, + system=system or None, + mapping_status="exact", + ) + if text: + return NormalizedCode( + vocabulary="FHIR", + code=text, + label=text, + mapping_status="unmapped", + ) + return None + + +def label_from_fhir_codeable(value: Mapping[str, Any] | None) -> str: + if not value: + return "" + text = clean_text(value.get("text")) + if text: + return text + codings = value.get("coding") or [] + if isinstance(codings, list): + for coding in codings: + label = clean_text((coding or {}).get("display")) + if label: + return label + code = clean_text((coding or {}).get("code")) + if code: + return code + return "" + + +def make_fact( + *, + category: str, + label: str, + provenance: Provenance, + description: str | None = None, + original_code: NormalizedCode | None = None, + normalized_codes: list[NormalizedCode] | None = None, + evidence_text: str | None = None, + evidence_start: int | None = None, + evidence_end: int | None = None, + confidence: float | None = None, + negated: bool = False, + temporality: str | None = None, + extra: dict[str, Any] | None = None, +) -> ClinicalFact: + cleaned_label = clean_text(label) or "Unknown" + codes = normalized_codes or ([] if original_code is None else [original_code]) + return ClinicalFact( + fact_id=stable_id( + category, + cleaned_label, + provenance.source_format, + provenance.source_path, + provenance.source_resource, + provenance.source_table, + evidence_start, + evidence_end, + ), + category=category, + label=cleaned_label, + description=clean_text(description) or None, + original_code=original_code, + normalized_codes=codes, + vocabulary=(codes[0].vocabulary if codes else None), + evidence_text=clean_text(evidence_text) or None, + evidence_start=evidence_start, + evidence_end=evidence_end, + confidence=confidence, + negated=negated, + temporality=temporality, + mapping_status=codes[0].mapping_status if codes else "unmapped", + provenance=provenance, + extra=extra or {}, + ) + + +def source_path_string(path: str | Path | None) -> str | None: + return str(Path(path).resolve()) if path else None + + +def safe_patient_id(value: Any, fallback: str) -> str: + candidate = clean_text(value) or fallback + return re.sub(r"[^A-Za-z0-9_.-]+", "-", candidate).strip("-") or fallback diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index 893673a0..6ab13041 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -9,11 +9,8 @@ from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig from trialmatchai.models.llm.llm_loader import load_model_and_tokenizer from trialmatchai.models.llm.llm_reranker import LLMReranker -from trialmatchai.models.llm.vllm_loader import load_vllm_engine from trialmatchai.entities import build_entity_annotator from trialmatchai.matching.eligibility_reasoning import BatchTrialProcessor -from trialmatchai.matching.eligibility_reasoning_vllm import BatchTrialProcessorVLLM -from trialmatchai.matching.phenopacket_processor import process_phenopacket from trialmatchai.matching.trial_ranker import ( load_trial_data, rank_trials, @@ -23,6 +20,9 @@ from trialmatchai.matching.retrieval.criteria_retrieval import SecondStageRetriever from trialmatchai.search import LanceDBSearchBackend from trialmatchai.services.preflight import run_preflight_checks +from trialmatchai.interop.exporters import profile_to_matching_summary +from trialmatchai.interop.importers import import_patient_path +from trialmatchai.interop.models import PatientProfile from trialmatchai.utils.file_utils import ( create_directory, read_json_file, @@ -30,7 +30,7 @@ write_json_file, write_text_file, ) -from trialmatchai.schemas.phenopacket import Keywords, Phenopacket +from trialmatchai.schemas.phenopacket import Keywords from trialmatchai.utils.logging_config import reset_request_id, set_request_id, setup_logging from trialmatchai.utils.timing import log_timing @@ -168,6 +168,10 @@ def run_rag_processing( if use_vllm: logger.info("Using vLLM backend for CoT reasoning") + from trialmatchai.matching.eligibility_reasoning_vllm import ( + BatchTrialProcessorVLLM, + ) + from trialmatchai.models.llm.vllm_loader import load_vllm_engine # Load vLLM configuration vllm_cfg = config.get("vllm", {}) @@ -240,6 +244,11 @@ def main_pipeline(config_path: str | None = None) -> int: if index_issues: return 1 + patient_inputs = _load_patient_inputs(config) + if not patient_inputs: + logger.error("No patient profiles were available for matching.") + return 1 + if torch.cuda.is_available(): torch.backends.cudnn.benchmark = True if hasattr(torch.backends.cuda, "enable_flash_sdp"): @@ -301,39 +310,21 @@ def main_pipeline(config_path: str | None = None) -> int: search_mode=config["search"].get("mode", "hybrid"), ) - # Process phenopackets - patient_folder = Path(paths["patients_dir"]) - if not patient_folder.exists(): - logger.error("Patients folder not found: %s", patient_folder) - return 1 - phenopacket_files = sorted( - [p for p in patient_folder.iterdir() if p.suffix == ".json"] - ) - if not phenopacket_files: - logger.warning("No patient files found in %s", patient_folder) - return 1 - - for phenopacket_path in phenopacket_files: - patient_id = phenopacket_path.stem + for profile, summary in patient_inputs: + patient_id = profile.patient_id token = set_request_id(patient_id) output_folder = Path(paths["output_dir"]) / patient_id create_directory(str(output_folder)) - input_file = str(phenopacket_path) - output_file = str(output_folder / "keywords.json") - try: - with log_timing(logger, "Phenopacket processing"): - with torch.no_grad(): - process_phenopacket( - input_file, output_file, model=model, tokenizer=tokenizer - ) - - keywords = Keywords.model_validate(read_json_file(output_file)).model_dump() - patient_info = Phenopacket.model_validate( - read_json_file(input_file) - ).model_dump() - patient_info["split_raw_description"] = keywords.get( + write_json_file(summary, str(output_folder / "keywords.json")) + write_json_file( + profile.model_dump(mode="json", exclude_none=True), + str(output_folder / "patient_profile.json"), + ) + keywords = Keywords.model_validate(summary).model_dump() + patient_info = dict(summary) + patient_info["split_raw_description"] = summary.get( "expanded_sentences", [] ) @@ -402,5 +393,64 @@ def main_pipeline(config_path: str | None = None) -> int: return 0 +def _load_patient_inputs(config: Dict) -> list[tuple[PatientProfile, Dict]]: + patient_cfg = config.get("patient_inputs", {}) + profile_dir = Path(patient_cfg.get("profile_dir", "data/patients/profiles")) + summary_dir = Path(patient_cfg.get("summary_dir", "data/patients/summaries")) + profile_files = sorted(profile_dir.glob("*.json")) if profile_dir.exists() else [] + if profile_files: + loaded: list[tuple[PatientProfile, Dict]] = [] + for profile_file in profile_files: + try: + profile = PatientProfile.model_validate(read_json_file(str(profile_file))) + summary_path = summary_dir / profile_file.name + if summary_path.exists(): + summary = read_json_file(str(summary_path)) + else: + summary = profile_to_matching_summary(profile) + loaded.append((profile, summary)) + except Exception: + logger.exception("Failed to load patient profile: %s", profile_file) + return loaded + + patient_folder = Path(config.get("paths", {}).get("patients_dir", "")) + if not patient_folder.exists(): + logger.error("Patient profile directory and legacy patients_dir are missing.") + return [] + + legacy_files = sorted(path for path in patient_folder.glob("*.json") if path.is_file()) + if not legacy_files: + logger.warning("No patient profile or legacy phenopacket files found.") + return [] + + logger.warning( + "No canonical patient profiles found in %s. Importing legacy Phenopacket " + "JSON files from %s for this run.", + profile_dir, + patient_folder, + ) + profile_dir.mkdir(parents=True, exist_ok=True) + summary_dir.mkdir(parents=True, exist_ok=True) + imported: list[tuple[PatientProfile, Dict]] = [] + for legacy_file in legacy_files: + try: + profiles = import_patient_path( + legacy_file, + input_format="phenopacket", + strict=bool(patient_cfg.get("strict_validation", False)), + ) + for profile in profiles: + summary = profile_to_matching_summary(profile) + write_json_file( + profile.model_dump(mode="json", exclude_none=True), + str(profile_dir / f"{profile.patient_id}.json"), + ) + write_json_file(summary, str(summary_dir / f"{profile.patient_id}.json")) + imported.append((profile, summary)) + except Exception: + logger.exception("Failed to import legacy patient file: %s", legacy_file) + return imported + + if __name__ == "__main__": raise SystemExit(main_pipeline()) diff --git a/src/trialmatchai/matching/eligibility_reasoning_vllm.py b/src/trialmatchai/matching/eligibility_reasoning_vllm.py index f394e4bd..88d05626 100644 --- a/src/trialmatchai/matching/eligibility_reasoning_vllm.py +++ b/src/trialmatchai/matching/eligibility_reasoning_vllm.py @@ -3,28 +3,20 @@ import json import os import time -from typing import Dict, List, Optional +from typing import Any, Dict, List, Optional from trialmatchai.utils.file_utils import read_json_file, write_json_file, write_text_file from trialmatchai.utils.json_utils import extract_json_object from trialmatchai.utils.logging_config import setup_logging from tqdm import tqdm -from vllm import LLM, SamplingParams - -try: - # Present in vLLM when LoRA is enabled - from vllm.lora.request import LoRARequest # type: ignore -except Exception: # pragma: no cover - LoRARequest = None # type: ignore - logger = setup_logging(__name__) class BatchTrialProcessorVLLM: def __init__( self, - llm: LLM, + llm: Any, tokenizer=None, batch_size: int = 16, use_cot: bool = True, @@ -33,7 +25,7 @@ def __init__( top_p: float = 1.0, seed: Optional[int] = 1234, length_bucket: bool = True, - lora_request: Optional[LoRARequest] = None, # type: ignore + lora_request: Optional[Any] = None, ): """ vLLM-backed trial processor for CoT eligibility evaluation. @@ -54,6 +46,8 @@ def __init__( # Validate LoRA request during initialization self.lora_request = self._init_validate_lora_request(lora_request) + from vllm import SamplingParams # type: ignore + self.sampling_params = SamplingParams( max_tokens=self.max_new_tokens, temperature=self.temperature, diff --git a/src/trialmatchai/services/preflight.py b/src/trialmatchai/services/preflight.py index 05c641fd..28318131 100644 --- a/src/trialmatchai/services/preflight.py +++ b/src/trialmatchai/services/preflight.py @@ -22,12 +22,15 @@ def run_preflight_checks( issues: List[str] = [] paths = config.get("paths", {}) - _require_path( - issues, - "paths.patients_dir", - paths.get("patients_dir"), - required=require_patient_inputs, - ) + if require_patient_inputs: + _require_patient_inputs(issues, config) + else: + _require_path( + issues, + "paths.patients_dir", + paths.get("patients_dir"), + required=False, + ) _require_path( issues, "paths.trials_json_folder", @@ -150,3 +153,18 @@ def _require_output_dir(issues: List[str], value: str | None) -> None: path.mkdir(parents=True, exist_ok=True) except OSError as exc: issues.append(f"paths.output_dir is not writable: {path} ({exc})") + + +def _require_patient_inputs(issues: List[str], config: Dict[str, Any]) -> None: + paths = config.get("paths", {}) + patient_cfg = config.get("patient_inputs", {}) + profile_dir = Path(patient_cfg.get("profile_dir", "")) + legacy_dir = Path(paths.get("patients_dir", "")) + has_profiles = profile_dir.exists() + has_legacy = legacy_dir.exists() + if has_profiles or has_legacy: + return + if profile_dir: + issues.append(f"patient_inputs.profile_dir does not exist: {profile_dir}") + if legacy_dir: + issues.append(f"paths.patients_dir does not exist: {legacy_dir}") diff --git a/tests/test_import_patient_cli.py b/tests/test_import_patient_cli.py new file mode 100644 index 00000000..5a8d0266 --- /dev/null +++ b/tests/test_import_patient_cli.py @@ -0,0 +1,36 @@ +from __future__ import annotations + +import json + +from trialmatchai.cli.import_patient import main + + +def test_import_patient_cli_writes_profile_and_summary(tmp_path, monkeypatch): + note = tmp_path / "patient.txt" + note.write_text("Patient has breast cancer.", encoding="utf-8") + profile_dir = tmp_path / "profiles" + summary_dir = tmp_path / "summaries" + + monkeypatch.setattr( + "sys.argv", + [ + "trialmatchai-import-patient", + "--input", + str(note), + "--format", + "text", + "--output-dir", + str(profile_dir), + "--summary-dir", + str(summary_dir), + "--no-entities", + ], + ) + + assert main() == 0 + + profile = json.loads((profile_dir / "patient.json").read_text(encoding="utf-8")) + summary = json.loads((summary_dir / "patient.json").read_text(encoding="utf-8")) + assert profile["patient_id"] == "patient" + assert summary["patient_id"] == "patient" + assert summary["expanded_sentences"] diff --git a/tests/test_package_imports.py b/tests/test_package_imports.py index 56a14e37..6d13a5dd 100644 --- a/tests/test_package_imports.py +++ b/tests/test_package_imports.py @@ -28,4 +28,6 @@ def test_command_group_includes_bootstrap_data(monkeypatch, capsys): main() assert exc.value.code == 0 - assert "bootstrap-data" in capsys.readouterr().out + output = capsys.readouterr().out + assert "bootstrap-data" in output + assert "import-patient" in output diff --git a/tests/test_patient_interop.py b/tests/test_patient_interop.py new file mode 100644 index 00000000..d517854f --- /dev/null +++ b/tests/test_patient_interop.py @@ -0,0 +1,220 @@ +from __future__ import annotations + +import json + +import pandas as pd + +from trialmatchai.interop import detect_patient_input_format, import_patient_path +from trialmatchai.interop.exporters import ( + profile_to_fhir_bundle, + profile_to_matching_summary, + profile_to_phenopacket, +) +from trialmatchai.interop.models import PatientProfile +from trialmatchai.interop.narrative import render_patient_narrative + + +class FakeAnnotator: + def annotate_texts_in_parallel(self, texts, max_workers=1, retries=1, delay=0): + del max_workers, retries, delay + text = texts[0] + start = text.index("melanoma") + return [ + [ + { + "entity_group": "disease", + "text": "melanoma", + "start": start, + "end": start + len("melanoma"), + "score": 0.97, + "normalized_id": ["SNOMED:372244006"], + "synonyms": ["malignant melanoma"], + "linker_score": 0.91, + "linker_status": "linked", + } + ] + ] + + +def test_patient_profile_schema_and_summary(): + schema = PatientProfile.model_json_schema() + assert "patient_id" in schema["properties"] + + profile = PatientProfile(patient_id="p1") + summary = profile_to_matching_summary(profile) + assert summary["patient_id"] == "p1" + assert summary["age"] == "all" + assert summary["expanded_sentences"] + + +def test_text_importer_preserves_offsets_and_entities(tmp_path): + note = tmp_path / "patient-note.txt" + note.write_text("Patient has metastatic melanoma.", encoding="utf-8") + + profile = import_patient_path( + note, + input_format="text", + entity_annotator=FakeAnnotator(), + )[0] + + assert detect_patient_input_format(note) == "text" + assert profile.conditions[0].label == "melanoma" + assert profile.conditions[0].evidence_start == 23 + assert profile.conditions[0].normalized_codes[0].vocabulary == "SNOMED" + assert profile.notes[0].entities[0]["linker_status"] == "linked" + + +def test_phenopacket_importer_maps_core_sections(tmp_path): + packet = { + "id": "patient-phen", + "metaData": {}, + "subject": { + "sex": "FEMALE", + "timeAtLastEncounter": {"age": {"iso8601duration": "P42Y"}}, + }, + "phenotypicFeatures": [ + {"type": {"id": "HP:0001250", "label": "Seizure"}} + ], + "diseases": [ + {"term": {"id": "MONDO:0007254", "label": "breast cancer"}} + ], + "measurements": [ + {"assay": {"id": "LOINC:718-7", "label": "Hemoglobin"}} + ], + "medicalActions": [ + {"treatment": {"agent": {"id": "RxNorm:123", "label": "trastuzumab"}}} + ], + } + path = tmp_path / "patient.json" + path.write_text(json.dumps(packet), encoding="utf-8") + + profile = import_patient_path(path)[0] + + assert detect_patient_input_format(path) == "phenopacket" + assert profile.demographics.sex == "Female" + assert profile.demographics.age_years == 42 + assert profile.conditions[0].label == "breast cancer" + assert profile.phenotypes[0].label == "Seizure" + assert profile.medications[0].label == "trastuzumab" + + +def test_fhir_bundle_importer_and_exporter(tmp_path): + bundle = { + "resourceType": "Bundle", + "type": "collection", + "entry": [ + {"resource": {"resourceType": "Patient", "id": "fhir-p1", "gender": "female"}}, + { + "resource": { + "resourceType": "Condition", + "id": "c1", + "code": { + "coding": [ + { + "system": "http://snomed.info/sct", + "code": "254637007", + "display": "Non-small cell lung cancer", + } + ] + }, + } + }, + { + "resource": { + "resourceType": "Observation", + "id": "o1", + "code": {"coding": [{"system": "http://loinc.org", "code": "718-7"}]}, + "valueQuantity": {"value": 12.5, "unit": "g/dL"}, + } + }, + ], + } + path = tmp_path / "bundle.json" + path.write_text(json.dumps(bundle), encoding="utf-8") + + profile = import_patient_path(path)[0] + exported = profile_to_fhir_bundle(profile) + + assert detect_patient_input_format(path) == "fhir" + assert profile.patient_id == "fhir-p1" + assert profile.conditions[0].normalized_codes[0].vocabulary == "SNOMED" + assert profile.observations[0].description == "12.5 g/dL" + assert exported["resourceType"] == "Bundle" + + +def test_fhir_ndjson_detection_and_import(tmp_path): + path = tmp_path / "patient.ndjson" + path.write_text( + "\n".join( + [ + json.dumps({"resourceType": "Patient", "id": "ndjson-p1"}), + json.dumps( + { + "resourceType": "Procedure", + "id": "p1", + "code": {"text": "bone marrow biopsy"}, + } + ), + ] + ), + encoding="utf-8", + ) + + profile = import_patient_path(path)[0] + + assert detect_patient_input_format(path) == "fhir-ndjson" + assert profile.procedures[0].label == "bone marrow biopsy" + + +def test_omop_importer_from_csv_extract(tmp_path): + omop = tmp_path / "omop" + omop.mkdir() + pd.DataFrame( + [{"person_id": 1, "gender_source_value": "F", "year_of_birth": 1980}] + ).to_csv(omop / "PERSON.csv", index=False) + pd.DataFrame( + [ + { + "person_id": 1, + "condition_concept_id": 10, + "condition_start_date": "2026-01-01", + } + ] + ).to_csv(omop / "CONDITION_OCCURRENCE.csv", index=False) + pd.DataFrame( + [ + { + "concept_id": 10, + "vocabulary_id": "SNOMED", + "concept_code": "44054006", + "concept_name": "Diabetes mellitus", + "domain_id": "Condition", + } + ] + ).to_csv(omop / "CONCEPT.csv", index=False) + + profiles = import_patient_path(omop) + + assert detect_patient_input_format(omop) == "omop" + assert len(profiles) == 1 + assert profiles[0].conditions[0].label == "Diabetes mellitus" + assert profiles[0].conditions[0].normalized_codes[0].code == "44054006" + + +def test_narrative_and_phenopacket_export_are_deterministic(tmp_path): + packet = { + "id": "patient-export", + "metaData": {}, + "subject": {}, + "diseases": [{"term": {"id": "MONDO:0004992", "label": "cancer"}}], + } + path = tmp_path / "patient.json" + path.write_text(json.dumps(packet), encoding="utf-8") + profile = import_patient_path(path)[0] + + narrative = render_patient_narrative(profile) + packet_out = profile_to_phenopacket(profile) + + assert narrative[0].startswith("Diagnoses:") + assert packet_out["id"] == "patient-export" + assert packet_out["diseases"][0]["term"]["label"] == "cancer" diff --git a/tests/test_patient_runtime_loading.py b/tests/test_patient_runtime_loading.py new file mode 100644 index 00000000..815d8ba7 --- /dev/null +++ b/tests/test_patient_runtime_loading.py @@ -0,0 +1,75 @@ +from __future__ import annotations + +import json + +from trialmatchai.main import _load_patient_inputs + + +def test_runtime_loads_profiles_from_configured_directory(tmp_path): + profiles = tmp_path / "profiles" + profiles.mkdir() + summaries = tmp_path / "summaries" + summaries.mkdir() + (profiles / "p1.json").write_text( + json.dumps({"patient_id": "p1", "demographics": {}}), + encoding="utf-8", + ) + (summaries / "p1.json").write_text( + json.dumps( + { + "patient_id": "p1", + "main_conditions": ["melanoma"], + "other_conditions": [], + "expanded_sentences": ["Patient has melanoma."], + "age": "all", + "gender": "all", + } + ), + encoding="utf-8", + ) + + loaded = _load_patient_inputs( + { + "patient_inputs": { + "profile_dir": str(profiles), + "summary_dir": str(summaries), + }, + "paths": {"patients_dir": str(tmp_path / "legacy")}, + } + ) + + assert loaded[0][0].patient_id == "p1" + assert loaded[0][1]["main_conditions"] == ["melanoma"] + + +def test_runtime_imports_legacy_phenopackets_when_profiles_missing(tmp_path): + legacy = tmp_path / "legacy" + legacy.mkdir() + profiles = tmp_path / "profiles" + summaries = tmp_path / "summaries" + (legacy / "patient.json").write_text( + json.dumps( + { + "id": "legacy-p1", + "metaData": {}, + "subject": {}, + "diseases": [{"term": {"label": "sarcoma"}}], + } + ), + encoding="utf-8", + ) + + loaded = _load_patient_inputs( + { + "patient_inputs": { + "profile_dir": str(profiles), + "summary_dir": str(summaries), + }, + "paths": {"patients_dir": str(legacy)}, + } + ) + + assert loaded[0][0].patient_id == "legacy-p1" + assert loaded[0][1]["main_conditions"] == ["sarcoma"] + assert (profiles / "legacy-p1.json").exists() + assert (summaries / "legacy-p1.json").exists() diff --git a/tests/test_settings.py b/tests/test_settings.py index d65af376..c8f13d3b 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -26,6 +26,7 @@ def test_env_overrides(self) -> None: "search": {"mode": "hybrid"}, "entity_extraction": {"backend": "gliner2"}, "concept_linker": {"db_path": "old"}, + "patient_inputs": {"profile_dir": "old-profiles"}, "registry": {"since_days": 7, "raw_dir": "old-raw"}, } os.environ["TRIALMATCHAI_SEARCH_DB_PATH"] = "data/search-test" @@ -34,6 +35,8 @@ def test_env_overrides(self) -> None: os.environ["TRIALMATCHAI_EMBEDDER_MODEL_NAME"] = "new-model" os.environ["TRIALMATCHAI_ENTITY_BACKEND"] = "regex" os.environ["TRIALMATCHAI_CONCEPT_DB_PATH"] = "concepts" + os.environ["TRIALMATCHAI_PATIENT_PROFILE_DIR"] = "patients/profiles" + os.environ["TRIALMATCHAI_PATIENT_STRICT_VALIDATION"] = "true" os.environ["TRIALMATCHAI_REGISTRY_SINCE_DAYS"] = "30" os.environ["TRIALMATCHAI_REGISTRY_RAW_DIR"] = "registry/raw" try: @@ -45,6 +48,8 @@ def test_env_overrides(self) -> None: os.environ.pop("TRIALMATCHAI_EMBEDDER_MODEL_NAME", None) os.environ.pop("TRIALMATCHAI_ENTITY_BACKEND", None) os.environ.pop("TRIALMATCHAI_CONCEPT_DB_PATH", None) + os.environ.pop("TRIALMATCHAI_PATIENT_PROFILE_DIR", None) + os.environ.pop("TRIALMATCHAI_PATIENT_STRICT_VALIDATION", None) os.environ.pop("TRIALMATCHAI_REGISTRY_SINCE_DAYS", None) os.environ.pop("TRIALMATCHAI_REGISTRY_RAW_DIR", None) @@ -54,6 +59,8 @@ def test_env_overrides(self) -> None: self.assertEqual(updated["embedder"]["model_name"], "new-model") self.assertEqual(updated["entity_extraction"]["backend"], "regex") self.assertEqual(updated["concept_linker"]["db_path"], "concepts") + self.assertEqual(updated["patient_inputs"]["profile_dir"], "patients/profiles") + self.assertTrue(updated["patient_inputs"]["strict_validation"]) self.assertEqual(updated["registry"]["since_days"], 30) self.assertEqual(updated["registry"]["raw_dir"], "registry/raw") From c4b753e9aaca02f3fc05f4dc8db94f8d68eae57c Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 21 Jun 2026 21:21:47 +0200 Subject: [PATCH 08/64] Fix lean CI optional ML imports --- src/trialmatchai/main.py | 26 ++++++++++++---- .../matching/eligibility_reasoning.py | 29 +++++++++++++----- .../matching/phenopacket_processor.py | 29 +++++++++++++++--- .../matching/retrieval/criteria_retrieval.py | 10 +++++-- .../matching/retrieval/trial_retrieval.py | 8 +++-- .../models/embedding/text_embedder.py | 30 +++++++++++++------ src/trialmatchai/services/preflight.py | 24 ++++++++------- tests/test_preflight_and_indexer.py | 3 -- 8 files changed, 115 insertions(+), 44 deletions(-) diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index 6ab13041..791bcc04 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -1,14 +1,9 @@ from __future__ import annotations from pathlib import Path -from typing import Dict, List, Optional, Tuple - -import torch +from typing import TYPE_CHECKING, Dict, List, Optional, Tuple from trialmatchai.config.config_loader import load_config -from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig -from trialmatchai.models.llm.llm_loader import load_model_and_tokenizer -from trialmatchai.models.llm.llm_reranker import LLMReranker from trialmatchai.entities import build_entity_annotator from trialmatchai.matching.eligibility_reasoning import BatchTrialProcessor from trialmatchai.matching.trial_ranker import ( @@ -34,6 +29,9 @@ from trialmatchai.utils.logging_config import reset_request_id, set_request_id, setup_logging from trialmatchai.utils.timing import log_timing +if TYPE_CHECKING: + from trialmatchai.models.embedding.text_embedder import TextEmbedder + logger = setup_logging(__name__) @@ -249,6 +247,22 @@ def main_pipeline(config_path: str | None = None) -> int: logger.error("No patient profiles were available for matching.") return 1 + try: + import torch + except ImportError: + logger.error( + "PyTorch is required to run matching. Install the ML extras with " + "`uv sync --extra llm --extra entity`." + ) + return 1 + + from trialmatchai.models.embedding.text_embedder import ( + TextEmbedder, + TextEmbedderConfig, + ) + from trialmatchai.models.llm.llm_loader import load_model_and_tokenizer + from trialmatchai.models.llm.llm_reranker import LLMReranker + if torch.cuda.is_available(): torch.backends.cudnn.benchmark = True if hasattr(torch.backends.cuda, "enable_flash_sdp"): diff --git a/src/trialmatchai/matching/eligibility_reasoning.py b/src/trialmatchai/matching/eligibility_reasoning.py index f4c6671e..bc15d646 100644 --- a/src/trialmatchai/matching/eligibility_reasoning.py +++ b/src/trialmatchai/matching/eligibility_reasoning.py @@ -3,7 +3,6 @@ import time from typing import Dict, List -import torch from trialmatchai.utils.file_utils import read_json_file, write_json_file, write_text_file from trialmatchai.utils.json_utils import extract_json_object from trialmatchai.utils.logging_config import setup_logging @@ -11,6 +10,20 @@ logger = setup_logging(__name__) +try: + import torch +except ImportError: # pragma: no cover - exercised by lean package imports + torch = None # type: ignore[assignment] + + +def _require_torch(): + if torch is None: + raise RuntimeError( + "BatchTrialProcessor requires PyTorch. Install the ML extras with " + "`uv sync --extra llm` or `pip install 'trialmatchai[llm]'`." + ) + return torch + class BatchTrialProcessor: def __init__( @@ -30,6 +43,7 @@ def __init__( - length bucketing (sort by prompt token length) to reduce padding waste - telemetry for tokens/sec and stage timings """ + torch_module = _require_torch() self.device = device self.device_str = f"cuda:{device}" self.batch_size = batch_size @@ -42,8 +56,8 @@ def __init__( self.model.eval() try: # Allow TF32 on Ampere+ (gives a free speedup for matmuls with minimal accuracy loss) - torch.backends.cuda.matmul.allow_tf32 = True - torch.set_float32_matmul_precision("high") + torch_module.backends.cuda.matmul.allow_tf32 = True + torch_module.set_float32_matmul_precision("high") except Exception: pass @@ -198,6 +212,7 @@ def _process_batch(self, batch: List[Dict], output_folder: str): """ Expects a list of dicts with keys: nct_id, prompt """ + torch_module = _require_torch() try: t0 = time.time() # Tokenize once; pad to the longest in this batch only @@ -213,13 +228,13 @@ def _process_batch(self, batch: List[Dict], output_folder: str): # Autocast to model dtype if it's half/bfloat16 for extra speed model_dtype = next(self.model.parameters()).dtype - use_autocast = model_dtype in (torch.float16, torch.bfloat16) + use_autocast = model_dtype in (torch_module.float16, torch_module.bfloat16) - with torch.inference_mode(): + with torch_module.inference_mode(): ctx = ( - torch.autocast(device_type="cuda", dtype=model_dtype) + torch_module.autocast(device_type="cuda", dtype=model_dtype) if use_autocast - else torch.cuda.amp.autocast(enabled=False) + else torch_module.cuda.amp.autocast(enabled=False) ) with ctx: outputs = self.model.generate( diff --git a/src/trialmatchai/matching/phenopacket_processor.py b/src/trialmatchai/matching/phenopacket_processor.py index 6aef765b..aeff21be 100644 --- a/src/trialmatchai/matching/phenopacket_processor.py +++ b/src/trialmatchai/matching/phenopacket_processor.py @@ -1,16 +1,35 @@ import json from typing import Dict, List, Optional -import torch from trialmatchai.schemas.phenopacket import Phenopacket from trialmatchai.utils.file_utils import read_json_file, write_json_file from trialmatchai.utils.json_utils import extract_json_object from trialmatchai.utils.logging_config import setup_logging from trialmatchai.utils.temporal_utils import parse_iso_duration, parse_temporal -from transformers import AutoModelForCausalLM, AutoTokenizer logger = setup_logging(__name__) +try: + import torch +except ImportError: # pragma: no cover - exercised by lean package imports + torch = None # type: ignore[assignment] + + +def _require_llm_dependencies(): + if torch is None: + raise RuntimeError( + "ClinicalSummarizer requires PyTorch. Install the ML extras with " + "`uv sync --extra llm` or `pip install 'trialmatchai[llm]'`." + ) + try: + from transformers import AutoModelForCausalLM, AutoTokenizer + except ImportError as exc: + raise RuntimeError( + "ClinicalSummarizer requires Transformers. Install the ML extras with " + "`uv sync --extra llm` or `pip install 'trialmatchai[llm]'`." + ) from exc + return torch, AutoModelForCausalLM, AutoTokenizer + class PhenopacketProcessor: def __init__(self, file_path: str): @@ -246,10 +265,11 @@ def __init__(self, model=None, tokenizer=None, model_name: Optional[str] = None) self.model = model self.tokenizer = tokenizer elif model_name is not None: + torch_module, AutoModelForCausalLM, AutoTokenizer = _require_llm_dependencies() self.tokenizer = AutoTokenizer.from_pretrained(model_name) self.model = AutoModelForCausalLM.from_pretrained( model_name, - torch_dtype=torch.float16, + torch_dtype=torch_module.float16, device_map="auto", ) else: @@ -260,6 +280,7 @@ def __init__(self, model=None, tokenizer=None, model_name: Optional[str] = None) self.model.eval() def generate_summary(self, sentences: List[str]) -> Dict: + torch_module = _require_llm_dependencies()[0] SYSTEM_PROMPT = """ You are a specialized medical assistant designed for precise and accurate clinical trial matching. Analyze the patient's medical description carefully and extract clinically relevant information for trial eligibility assessment. @@ -303,7 +324,7 @@ def generate_summary(self, sentences: List[str]) -> Dict: return_tensors="pt", ).to(self.model.device) - with torch.no_grad(): + with torch_module.no_grad(): output_ids = self.model.generate( prompt, max_new_tokens=2048, diff --git a/src/trialmatchai/matching/retrieval/criteria_retrieval.py b/src/trialmatchai/matching/retrieval/criteria_retrieval.py index fb5487f7..ece91552 100644 --- a/src/trialmatchai/matching/retrieval/criteria_retrieval.py +++ b/src/trialmatchai/matching/retrieval/criteria_retrieval.py @@ -1,14 +1,18 @@ +from __future__ import annotations + import math from collections import defaultdict from concurrent.futures import ThreadPoolExecutor, as_completed -from typing import Dict, List, Optional +from typing import TYPE_CHECKING, Dict, List, Optional -from trialmatchai.models.embedding.text_embedder import TextEmbedder -from trialmatchai.models.llm.llm_reranker import LLMReranker from trialmatchai.search.lancedb_backend import TrialSearchBackend from trialmatchai.utils.file_utils import write_text_file from trialmatchai.utils.logging_config import setup_logging +if TYPE_CHECKING: + from trialmatchai.models.embedding.text_embedder import TextEmbedder + from trialmatchai.models.llm.llm_reranker import LLMReranker + logger = setup_logging(__name__) diff --git a/src/trialmatchai/matching/retrieval/trial_retrieval.py b/src/trialmatchai/matching/retrieval/trial_retrieval.py index 0d18c652..c1e02463 100644 --- a/src/trialmatchai/matching/retrieval/trial_retrieval.py +++ b/src/trialmatchai/matching/retrieval/trial_retrieval.py @@ -1,11 +1,15 @@ +from __future__ import annotations + from datetime import datetime -from typing import Dict, List, Optional, Tuple, Union +from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Union from dateutil import parser as date_parser -from trialmatchai.models.embedding.text_embedder import TextEmbedder from trialmatchai.search.lancedb_backend import TrialSearchBackend from trialmatchai.utils.logging_config import setup_logging +if TYPE_CHECKING: + from trialmatchai.models.embedding.text_embedder import TextEmbedder + logger = setup_logging(__name__) diff --git a/src/trialmatchai/models/embedding/text_embedder.py b/src/trialmatchai/models/embedding/text_embedder.py index acf21da4..da5c9929 100644 --- a/src/trialmatchai/models/embedding/text_embedder.py +++ b/src/trialmatchai/models/embedding/text_embedder.py @@ -3,10 +3,6 @@ from dataclasses import dataclass from typing import Iterable, List, Literal, Sequence, Any -import torch -import torch.nn.functional as F -from transformers import AutoModel, AutoTokenizer - from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -30,6 +26,9 @@ class TextEmbedderConfig: class TextEmbedder: def __init__(self, config: TextEmbedderConfig): + torch, F, AutoModel, AutoTokenizer = _load_embedding_dependencies() + self._torch = torch + self._functional = F self.config = config self.device = torch.device( "cuda" if config.use_gpu and torch.cuda.is_available() else "cpu" @@ -71,21 +70,21 @@ def embed_texts(self, texts: Sequence[str]) -> List[List[float]]: return_tensors="pt", max_length=self.config.max_length, ).to(self.device) - with torch.inference_mode(): + with self._torch.inference_mode(): outputs = self.model(**enc) pooled = self._pool(outputs, enc["attention_mask"]) if self.config.normalize: - pooled = F.normalize(pooled, p=2, dim=1) + pooled = self._functional.normalize(pooled, p=2, dim=1) vectors.extend(pooled.cpu().tolist()) return vectors - def _pool(self, outputs: Any, attention_mask: torch.Tensor) -> torch.Tensor: + def _pool(self, outputs: Any, attention_mask: Any) -> Any: if self.config.pooling == "cls": return outputs.last_hidden_state[:, 0, :] token_embeddings = outputs.last_hidden_state mask = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float() - summed = torch.sum(token_embeddings * mask, dim=1) - counts = torch.clamp(mask.sum(dim=1), min=1e-9) + summed = self._torch.sum(token_embeddings * mask, dim=1) + counts = self._torch.clamp(mask.sum(dim=1), min=1e-9) return summed / counts @@ -94,3 +93,16 @@ def _batched(items: Sequence[str], batch_size: int) -> Iterable[Sequence[str]]: raise ValueError("batch_size must be positive.") for i in range(0, len(items), batch_size): yield items[i : i + batch_size] + + +def _load_embedding_dependencies(): + try: + import torch + import torch.nn.functional as F + from transformers import AutoModel, AutoTokenizer + except ImportError as exc: + raise RuntimeError( + "Text embedding requires the ML dependencies. Install them with " + "`uv sync --extra llm` or `pip install 'trialmatchai[llm]'`." + ) from exc + return torch, F, AutoModel, AutoTokenizer diff --git a/src/trialmatchai/services/preflight.py b/src/trialmatchai/services/preflight.py index 28318131..e0ff0122 100644 --- a/src/trialmatchai/services/preflight.py +++ b/src/trialmatchai/services/preflight.py @@ -82,21 +82,25 @@ def run_preflight_checks( required=True, ) if config.get("cot_backend") == "vllm": - if importlib.util.find_spec("vllm") is None: + vllm_available = importlib.util.find_spec("vllm") is not None + if not vllm_available: issues.append( "cot_backend=vllm requires the GPU extra " "(`uv sync --extra llm --extra gpu`)." ) - try: - import torch - except Exception: - issues.append( - "cot_backend=vllm requires PyTorch " - "(`uv sync --extra llm --extra gpu`)." - ) else: - if not torch.cuda.is_available(): - issues.append("cot_backend=vllm requires a CUDA-capable runtime.") + try: + import torch + except Exception: + issues.append( + "cot_backend=vllm requires PyTorch " + "(`uv sync --extra llm --extra gpu`)." + ) + else: + if not torch.cuda.is_available(): + issues.append( + "cot_backend=vllm requires a CUDA-capable runtime." + ) search_cfg = config.get("search_backend", {}) if search_cfg: diff --git a/tests/test_preflight_and_indexer.py b/tests/test_preflight_and_indexer.py index 30bd1c3f..2d9375ab 100644 --- a/tests/test_preflight_and_indexer.py +++ b/tests/test_preflight_and_indexer.py @@ -100,14 +100,11 @@ def test_preflight_reports_missing_search_db_path(tmp_path): def test_preflight_reports_missing_vllm_extra(tmp_path, monkeypatch): - import torch - cfg = _base_config(tmp_path) cfg["cot_backend"] = "vllm" Path(cfg["model"]["cot_adapter_path"]).mkdir(parents=True) Path(cfg["model"]["reranker_adapter_path"]).mkdir(parents=True) monkeypatch.setattr(preflight.importlib.util, "find_spec", lambda name: None) - monkeypatch.setattr(torch.cuda, "is_available", lambda: True) issues = run_preflight_checks(cfg, require_models=True) From 463bfe021cea210169ba4f643c2edfb295d6d07a Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 21 Jun 2026 22:18:11 +0200 Subject: [PATCH 09/64] Harden package release and remove legacy shims --- .env.example | 3 +- .github/workflows/ci.yml | 28 ++++ .gitignore | 6 +- README.md | 5 +- docs/architecture.md | 14 +- docs/interoperability.md | 8 +- src/Matcher/__init__.py | 13 -- src/Matcher/config/__init__.py | 1 - src/Matcher/config/config_loader.py | 1 - src/Matcher/config/settings.py | 1 - src/Matcher/entities/__init__.py | 1 - src/Matcher/main.py | 1 - src/Matcher/pipeline/__init__.py | 1 - src/Matcher/pipeline/cot_reasoning.py | 1 - src/Matcher/pipeline/cot_reasoning_vllm.py | 1 - src/Matcher/pipeline/phenopacket_processor.py | 1 - src/Matcher/pipeline/trial_ranker.py | 1 - src/Matcher/pipeline/trial_search/__init__.py | 1 - .../trial_search/first_level_search.py | 1 - .../trial_search/second_level_search.py | 1 - src/Matcher/schemas/__init__.py | 1 - src/Matcher/search/__init__.py | 1 - src/Matcher/services/__init__.py | 1 - src/Matcher/utils/__init__.py | 1 - src/Matcher/utils/file_utils.py | 1 - src/Matcher/utils/json_utils.py | 1 - src/Matcher/utils/logging_config.py | 1 - src/Matcher/utils/retry.py | 1 - src/Matcher/utils/temporal_utils.py | 1 - src/Matcher/utils/timing.py | 1 - src/trialmatchai/cli/bootstrap_data.py | 8 +- src/trialmatchai/cli/build_concepts.py | 16 +-- src/trialmatchai/cli/healthcheck.py | 7 +- src/trialmatchai/config/config.json | 3 +- src/trialmatchai/config/config_loader.py | 51 ++++++- src/trialmatchai/config/settings.py | 4 +- src/trialmatchai/entities/builder.py | 18 ++- src/trialmatchai/entities/schemas.py | 11 +- src/trialmatchai/interop/detect.py | 4 +- .../interop/importers/__init__.py | 2 +- src/trialmatchai/interop/importers/fhir.py | 129 +++++++++++++++--- src/trialmatchai/interop/narrative.py | 14 ++ src/trialmatchai/main.py | 64 +++------ src/trialmatchai/models/llm/llm_loader.py | 35 +++-- src/trialmatchai/models/llm/llm_reranker.py | 59 +++++--- src/trialmatchai/models/llm/vllm_loader.py | 5 +- src/trialmatchai/services/preflight.py | 29 ++-- tests/test_bootstrap_data.py | 12 ++ tests/test_config_pytest.py | 17 +++ tests/test_entities.py | 60 ++++++-- tests/test_import_patient_cli.py | 1 + tests/test_package_imports.py | 24 +++- tests/test_patient_interop.py | 64 +++++++++ tests/test_patient_runtime_loading.py | 22 +-- tests/test_preflight_and_indexer.py | 14 +- 55 files changed, 527 insertions(+), 246 deletions(-) delete mode 100644 src/Matcher/__init__.py delete mode 100644 src/Matcher/config/__init__.py delete mode 100644 src/Matcher/config/config_loader.py delete mode 100644 src/Matcher/config/settings.py delete mode 100644 src/Matcher/entities/__init__.py delete mode 100644 src/Matcher/main.py delete mode 100644 src/Matcher/pipeline/__init__.py delete mode 100644 src/Matcher/pipeline/cot_reasoning.py delete mode 100644 src/Matcher/pipeline/cot_reasoning_vllm.py delete mode 100644 src/Matcher/pipeline/phenopacket_processor.py delete mode 100644 src/Matcher/pipeline/trial_ranker.py delete mode 100644 src/Matcher/pipeline/trial_search/__init__.py delete mode 100644 src/Matcher/pipeline/trial_search/first_level_search.py delete mode 100644 src/Matcher/pipeline/trial_search/second_level_search.py delete mode 100644 src/Matcher/schemas/__init__.py delete mode 100644 src/Matcher/search/__init__.py delete mode 100644 src/Matcher/services/__init__.py delete mode 100644 src/Matcher/utils/__init__.py delete mode 100644 src/Matcher/utils/file_utils.py delete mode 100644 src/Matcher/utils/json_utils.py delete mode 100644 src/Matcher/utils/logging_config.py delete mode 100644 src/Matcher/utils/retry.py delete mode 100644 src/Matcher/utils/temporal_utils.py delete mode 100644 src/Matcher/utils/timing.py diff --git a/.env.example b/.env.example index 9f28e37e..68a22c5a 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,6 @@ # Copy this file to .env for local TrialMatchAI runtime configuration. # Do not commit .env. -TRIALMATCHAI_PATIENTS_DIR=example TRIALMATCHAI_OUTPUT_DIR=results TRIALMATCHAI_TRIALS_JSON_FOLDER=data/trials_jsons TRIALMATCHAI_PATIENT_RAW_DIR=data/patients/raw @@ -27,7 +26,7 @@ TRIALMATCHAI_COT_BACKEND=vllm TRIALMATCHAI_ENTITY_BACKEND=gliner2 TRIALMATCHAI_ENTITY_MODEL_NAME=fastino/gliner2-base -TRIALMATCHAI_ENTITY_SCHEMA_PATH=src/trialmatchai/entity_schemas/trialmatchai.yaml +TRIALMATCHAI_ENTITY_SCHEMA_PATH=entity_schemas/trialmatchai.yaml TRIALMATCHAI_ENTITY_TRUST_REMOTE_CODE=false TRIALMATCHAI_CONCEPT_DB_PATH=data/concepts TRIALMATCHAI_CONCEPT_TABLE=concepts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 450d7bc9..910a6d44 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,6 +35,34 @@ jobs: - name: Run tests run: uv run pytest -v + - name: Build package + run: uv build + + - name: Installed package smoke + run: | + WHEEL="$(ls dist/trialmatchai-*.whl | head -n 1)" + mkdir -p /tmp/trialmatchai-installed-smoke + cd /tmp/trialmatchai-installed-smoke + uv run --python 3.11 --isolated --with "$WHEEL" python - <<'PY' + from pathlib import Path + from trialmatchai.config.config_loader import load_config + + cfg = load_config() + assert Path(cfg["entity_extraction"]["schema_path"]).exists() + assert cfg["paths"]["output_dir"].endswith("results") + PY + + - name: CLI help smoke + run: | + WHEEL="$(ls dist/trialmatchai-*.whl | head -n 1)" + uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai --help + uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-healthcheck --help + uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-index --help + uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-build-concepts --help + uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-update-registry --help + uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-import-patient --help + uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-run --help + - name: Secret scan run: uv run python scripts/scan_secrets.py diff --git a/.gitignore b/.gitignore index 6135ab2a..1efa6385 100644 --- a/.gitignore +++ b/.gitignore @@ -10,9 +10,9 @@ logs/ .env.* !.env.example -models/ -source/ -Parser/ +/models/ +/source/ +/Parser/ # ============================ # Generated indexing state diff --git a/README.md b/README.md index 7b495acd..1f1ac5cd 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ The supported v1 deployment path is a single Python 3.11 GPU server or VM. Trial - `uv` recommended, or `pip` with editable install - NVIDIA GPU with enough VRAM for the selected LLM backend - 100 GB+ disk space for datasets, models, LanceDB tables, and results -- A LanceDB concept table built from OMOP/legacy dictionaries for entity normalization +- A LanceDB concept table built from OMOP and curated concept dictionaries for entity normalization ## Security First @@ -91,7 +91,6 @@ Results are written under `results/`. Configuration defaults live in `src/trialmatchai/config/config.json`. Runtime overrides use `.env` or environment variables: ```bash -TRIALMATCHAI_PATIENTS_DIR=example TRIALMATCHAI_OUTPUT_DIR=results TRIALMATCHAI_TRIALS_JSON_FOLDER=data/trials_jsons TRIALMATCHAI_PATIENT_RAW_DIR=data/patients/raw @@ -109,7 +108,7 @@ TRIALMATCHAI_SEARCH_MODE=hybrid TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false TRIALMATCHAI_ENTITY_BACKEND=gliner2 -TRIALMATCHAI_ENTITY_SCHEMA_PATH=src/trialmatchai/entity_schemas/trialmatchai.yaml +TRIALMATCHAI_ENTITY_SCHEMA_PATH=entity_schemas/trialmatchai.yaml TRIALMATCHAI_CONCEPT_DB_PATH=data/concepts TRIALMATCHAI_CONCEPT_TABLE=concepts TRIALMATCHAI_LINK_ACCEPT=0.80 diff --git a/docs/architecture.md b/docs/architecture.md index 707ee589..685e6374 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -1,6 +1,6 @@ # TrialMatchAI Architecture -TrialMatchAI is an installable Python package exposed as `trialmatchai`. The supported runtime code lives under `src/trialmatchai`; `src/Matcher` is a temporary deprecated import shim for one release cycle. +TrialMatchAI is an installable Python package exposed as `trialmatchai`. The supported runtime code lives under `src/trialmatchai`. ## Runtime Subsystems @@ -26,16 +26,12 @@ LanceDB is the only search database. It is embedded, file-backed, and stored und The registry manifest is append-only JSONL at `data/registry/manifest.jsonl`. The latest record per `nct_id` determines idempotency. -## Compatibility +## Public API -`Matcher` import shims are kept temporarily for downstream callers: - -```python -from Matcher.config.config_loader import load_config -``` - -New code must import: +New code imports from the canonical package namespace: ```python from trialmatchai.config.config_loader import load_config ``` + +The old `Matcher` namespace is not shipped. diff --git a/docs/interoperability.md b/docs/interoperability.md index af75690a..6f6e9b3c 100644 --- a/docs/interoperability.md +++ b/docs/interoperability.md @@ -46,7 +46,7 @@ deterministic sentences for retrieval and LLM context. This keeps source parsing normalization, and prompt context generation independently testable. The matching exporter writes `data/patients/summaries/.json` with the -current-compatible fields: +runtime summary fields: - `main_conditions` - `other_conditions` @@ -55,9 +55,9 @@ current-compatible fields: - `gender` - `provenance` -`trialmatchai-run` consumes canonical profiles first. If no profiles exist, it -temporarily imports legacy Phenopacket JSON files from `paths.patients_dir` and -writes profiles and summaries before matching. +`trialmatchai-run` consumes canonical profiles from `patient_inputs.profile_dir`. +Import source files explicitly with `trialmatchai-import-patient` before running +matching. ## Commands diff --git a/src/Matcher/__init__.py b/src/Matcher/__init__.py deleted file mode 100644 index cb9a15ed..00000000 --- a/src/Matcher/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -from __future__ import annotations - -import warnings - -from trialmatchai import __version__ - -warnings.warn( - "The 'Matcher' namespace is deprecated. Import from 'trialmatchai' instead.", - DeprecationWarning, - stacklevel=2, -) - -__all__ = ["__version__"] diff --git a/src/Matcher/config/__init__.py b/src/Matcher/config/__init__.py deleted file mode 100644 index eed74c0e..00000000 --- a/src/Matcher/config/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.config import * # noqa: F401,F403 diff --git a/src/Matcher/config/config_loader.py b/src/Matcher/config/config_loader.py deleted file mode 100644 index a3064396..00000000 --- a/src/Matcher/config/config_loader.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.config.config_loader import * # noqa: F401,F403 diff --git a/src/Matcher/config/settings.py b/src/Matcher/config/settings.py deleted file mode 100644 index 16e461fb..00000000 --- a/src/Matcher/config/settings.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.config.settings import * # noqa: F401,F403 diff --git a/src/Matcher/entities/__init__.py b/src/Matcher/entities/__init__.py deleted file mode 100644 index 4fdc6d4b..00000000 --- a/src/Matcher/entities/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.entities import * # noqa: F401,F403 diff --git a/src/Matcher/main.py b/src/Matcher/main.py deleted file mode 100644 index 26c493cd..00000000 --- a/src/Matcher/main.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.main import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/__init__.py b/src/Matcher/pipeline/__init__.py deleted file mode 100644 index e961a2e5..00000000 --- a/src/Matcher/pipeline/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.matching import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/cot_reasoning.py b/src/Matcher/pipeline/cot_reasoning.py deleted file mode 100644 index 484df347..00000000 --- a/src/Matcher/pipeline/cot_reasoning.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.matching.eligibility_reasoning import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/cot_reasoning_vllm.py b/src/Matcher/pipeline/cot_reasoning_vllm.py deleted file mode 100644 index 0943c3b0..00000000 --- a/src/Matcher/pipeline/cot_reasoning_vllm.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.matching.eligibility_reasoning_vllm import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/phenopacket_processor.py b/src/Matcher/pipeline/phenopacket_processor.py deleted file mode 100644 index e8645cc2..00000000 --- a/src/Matcher/pipeline/phenopacket_processor.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.matching.phenopacket_processor import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/trial_ranker.py b/src/Matcher/pipeline/trial_ranker.py deleted file mode 100644 index 21919c5c..00000000 --- a/src/Matcher/pipeline/trial_ranker.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.matching.trial_ranker import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/trial_search/__init__.py b/src/Matcher/pipeline/trial_search/__init__.py deleted file mode 100644 index f04c1b19..00000000 --- a/src/Matcher/pipeline/trial_search/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.matching.retrieval import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/trial_search/first_level_search.py b/src/Matcher/pipeline/trial_search/first_level_search.py deleted file mode 100644 index fde78fc7..00000000 --- a/src/Matcher/pipeline/trial_search/first_level_search.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.matching.retrieval.trial_retrieval import * # noqa: F401,F403 diff --git a/src/Matcher/pipeline/trial_search/second_level_search.py b/src/Matcher/pipeline/trial_search/second_level_search.py deleted file mode 100644 index b286feb0..00000000 --- a/src/Matcher/pipeline/trial_search/second_level_search.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.matching.retrieval.criteria_retrieval import * # noqa: F401,F403 diff --git a/src/Matcher/schemas/__init__.py b/src/Matcher/schemas/__init__.py deleted file mode 100644 index 928cdeac..00000000 --- a/src/Matcher/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.schemas import * # noqa: F401,F403 diff --git a/src/Matcher/search/__init__.py b/src/Matcher/search/__init__.py deleted file mode 100644 index 5b6cd37f..00000000 --- a/src/Matcher/search/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.search import * # noqa: F401,F403 diff --git a/src/Matcher/services/__init__.py b/src/Matcher/services/__init__.py deleted file mode 100644 index c704ca63..00000000 --- a/src/Matcher/services/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.services import * # noqa: F401,F403 diff --git a/src/Matcher/utils/__init__.py b/src/Matcher/utils/__init__.py deleted file mode 100644 index 5933e8a7..00000000 --- a/src/Matcher/utils/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.utils import * # noqa: F401,F403 diff --git a/src/Matcher/utils/file_utils.py b/src/Matcher/utils/file_utils.py deleted file mode 100644 index 9ae82244..00000000 --- a/src/Matcher/utils/file_utils.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.utils.file_utils import * # noqa: F401,F403 diff --git a/src/Matcher/utils/json_utils.py b/src/Matcher/utils/json_utils.py deleted file mode 100644 index e0a84189..00000000 --- a/src/Matcher/utils/json_utils.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.utils.json_utils import * # noqa: F401,F403 diff --git a/src/Matcher/utils/logging_config.py b/src/Matcher/utils/logging_config.py deleted file mode 100644 index 4aa94f5c..00000000 --- a/src/Matcher/utils/logging_config.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.utils.logging_config import * # noqa: F401,F403 diff --git a/src/Matcher/utils/retry.py b/src/Matcher/utils/retry.py deleted file mode 100644 index bce0516f..00000000 --- a/src/Matcher/utils/retry.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.utils.retry import * # noqa: F401,F403 diff --git a/src/Matcher/utils/temporal_utils.py b/src/Matcher/utils/temporal_utils.py deleted file mode 100644 index 4d2a72ca..00000000 --- a/src/Matcher/utils/temporal_utils.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.utils.temporal_utils import * # noqa: F401,F403 diff --git a/src/Matcher/utils/timing.py b/src/Matcher/utils/timing.py deleted file mode 100644 index 682226c5..00000000 --- a/src/Matcher/utils/timing.py +++ /dev/null @@ -1 +0,0 @@ -from trialmatchai.utils.timing import * # noqa: F401,F403 diff --git a/src/trialmatchai/cli/bootstrap_data.py b/src/trialmatchai/cli/bootstrap_data.py index ea1a5002..bdf2eb6f 100644 --- a/src/trialmatchai/cli/bootstrap_data.py +++ b/src/trialmatchai/cli/bootstrap_data.py @@ -3,6 +3,7 @@ import argparse import hashlib import os +import stat import sys import tarfile import zipfile @@ -170,8 +171,11 @@ def _safe_extract_tar_gz(archive: Path, target: Path) -> None: def _safe_extract_zip(archive: Path, target: Path) -> None: target.mkdir(parents=True, exist_ok=True) with zipfile.ZipFile(archive) as zip_file: - for member in zip_file.namelist(): - _validated_target_path(target, member) + for member in zip_file.infolist(): + _validated_target_path(target, member.filename) + mode = member.external_attr >> 16 + if stat.S_ISLNK(mode): + raise ValueError(f"Archive contains an unsafe member: {member.filename}") zip_file.extractall(target) diff --git a/src/trialmatchai/cli/build_concepts.py b/src/trialmatchai/cli/build_concepts.py index bee79aa5..1ca94966 100644 --- a/src/trialmatchai/cli/build_concepts.py +++ b/src/trialmatchai/cli/build_concepts.py @@ -7,7 +7,7 @@ from trialmatchai.config.config_loader import load_config from trialmatchai.entities.builder import ( DEFAULT_OMOP_VOCABULARIES, - build_legacy_dictionary_rows, + build_dictionary_rows, build_omop_concept_rows, concept_texts_for_embedding, write_lancedb_table, @@ -30,11 +30,11 @@ def main() -> int: help="OMOP CONCEPT_SYNONYM.csv path", ) parser.add_argument( - "--legacy-dictionary", + "--dictionary", action="append", default=[], metavar="VOCAB:DOMAIN:PATH", - help="Import a legacy dictionary file, e.g. EntrezGene:Gene:/path/dict_Gene.txt", + help="Import a concept dictionary file, e.g. EntrezGene:Gene:/path/dict_Gene.txt", ) parser.add_argument( "--vocabulary", @@ -69,10 +69,10 @@ def main() -> int: args.synonym_csv, vocabularies=vocabularies, ) - for spec in args.legacy_dictionary: - vocab, domain, path = _parse_legacy_spec(spec) + for spec in args.dictionary: + vocab, domain, path = _parse_dictionary_spec(spec) rows.extend( - build_legacy_dictionary_rows( + build_dictionary_rows( path, vocabulary_id=vocab, domain_id=domain, @@ -108,11 +108,11 @@ def main() -> int: return 0 -def _parse_legacy_spec(spec: str) -> tuple[str, str, str]: +def _parse_dictionary_spec(spec: str) -> tuple[str, str, str]: parts = spec.split(":", 2) if len(parts) != 3: raise ValueError( - "--legacy-dictionary must use VOCAB:DOMAIN:PATH, " + "--dictionary must use VOCAB:DOMAIN:PATH, " f"received: {spec}" ) return parts[0], parts[1], parts[2] diff --git a/src/trialmatchai/cli/healthcheck.py b/src/trialmatchai/cli/healthcheck.py index e584c615..8aabf8f1 100644 --- a/src/trialmatchai/cli/healthcheck.py +++ b/src/trialmatchai/cli/healthcheck.py @@ -28,6 +28,11 @@ def main() -> int: action="store_true", help="Check registry updater paths and manifest readability.", ) + parser.add_argument( + "--models", + action="store_true", + help="Require configured model artifacts and optional model dependencies.", + ) args = parser.parse_args() config = load_config(args.config) @@ -38,7 +43,7 @@ def main() -> int: config, require_patient_inputs=False, require_trials_json=False, - require_models=False, + require_models=args.models, ) issues += len(preflight_issues) diff --git a/src/trialmatchai/config/config.json b/src/trialmatchai/config/config.json index 187bfc37..f137a097 100644 --- a/src/trialmatchai/config/config.json +++ b/src/trialmatchai/config/config.json @@ -4,7 +4,7 @@ "model_name": "fastino/gliner2-base", "fallback_model_name": "gliner-community/gliner_large-v2.5", "model_revision": null, - "schema_path": "src/trialmatchai/entity_schemas/trialmatchai.yaml", + "schema_path": "entity_schemas/trialmatchai.yaml", "threshold": 0.8, "batch_size": 8, "device": "auto", @@ -19,7 +19,6 @@ "search_limit": 10 }, "paths": { - "patients_dir": "example", "output_dir": "results", "trials_json_folder": "data/trials_jsons" }, diff --git a/src/trialmatchai/config/config_loader.py b/src/trialmatchai/config/config_loader.py index 5c5c9539..1a1472bb 100644 --- a/src/trialmatchai/config/config_loader.py +++ b/src/trialmatchai/config/config_loader.py @@ -2,6 +2,7 @@ import json import os +from importlib import resources from copy import deepcopy from pathlib import Path from typing import Any, Dict @@ -19,10 +20,8 @@ DEFAULT_CONFIG_RELATIVE_PATH = Path("src/trialmatchai/config/config.json") -LEGACY_CONFIG_RELATIVE_PATHS = ( +CONFIG_RELATIVE_PATHS = ( Path("trialmatchai/config/config.json"), - Path("trialmatchai/config/config.json"), - Path("source/trialmatchai/config/config.json"), ) @@ -45,7 +44,7 @@ def load_config(config_path: str | os.PathLike[str] | None = None) -> Dict[str, def resolve_config_path( config_path: str | os.PathLike[str] | None = None, ) -> Path: - """Resolve explicit, repo-root, legacy, and packaged config paths.""" + """Resolve explicit, repo-root, and packaged config paths.""" root = _repo_root() candidates: list[Path] = [] if config_path: @@ -60,7 +59,7 @@ def resolve_config_path( root / "src" / supplied, ] ) - if supplied in LEGACY_CONFIG_RELATIVE_PATHS: + if supplied in CONFIG_RELATIVE_PATHS: candidates.append(root / DEFAULT_CONFIG_RELATIVE_PATH) else: candidates.extend( @@ -82,7 +81,7 @@ def resolve_config_path( def normalize_config_paths(cfg: Dict[str, Any], config_path: Path) -> Dict[str, Any]: """Normalize known local paths while leaving remote model IDs untouched.""" root = _repo_root(config_path) - for key in ("patients_dir", "output_dir", "trials_json_folder"): + for key in ("output_dir", "trials_json_folder"): value = cfg.get("paths", {}).get(key) if value: cfg["paths"][key] = str(_resolve_local_path(value, root)) @@ -96,7 +95,7 @@ def normalize_config_paths(cfg: Dict[str, Any], config_path: Path) -> Dict[str, schema_path = cfg.get("entity_extraction", {}).get("schema_path") if schema_path: cfg["entity_extraction"]["schema_path"] = str( - _resolve_local_path(schema_path, root) + _resolve_trialmatchai_resource_or_local_path(schema_path, root) ) concept_db_path = cfg.get("concept_linker", {}).get("db_path") @@ -132,6 +131,44 @@ def _resolve_local_path(value: str, root: Path) -> Path: return (root / path).resolve() +def _resolve_trialmatchai_resource_or_local_path(value: str, root: Path) -> Path: + path = Path(value).expanduser() + if path.is_absolute(): + return path.resolve() + + local_path = (root / path).resolve() + if local_path.exists(): + return local_path + + resource_path = _trialmatchai_resource_path(path) + if resource_path is not None: + return resource_path + + return local_path + + +def _trialmatchai_resource_path(path: Path) -> Path | None: + parts = path.parts + if parts[:2] == ("src", "trialmatchai"): + relative = Path(*parts[2:]) + elif parts and parts[0] == "trialmatchai": + relative = Path(*parts[1:]) + else: + relative = path + + if not relative.parts or relative.parts[0] not in { + "config", + "entity_schemas", + "preprocessing", + }: + return None + + resource = resources.files("trialmatchai").joinpath(*relative.parts) + if not resource.exists(): + return None + return Path(str(resource)).resolve() + + def _repo_root(anchor: Path | None = None) -> Path: start = (anchor or Path(__file__).resolve()).resolve() if start.is_file(): diff --git a/src/trialmatchai/config/settings.py b/src/trialmatchai/config/settings.py index 2ba011e2..6dd638b0 100644 --- a/src/trialmatchai/config/settings.py +++ b/src/trialmatchai/config/settings.py @@ -10,7 +10,7 @@ class EntityExtractionSettings(BaseModel): model_name: str = "fastino/gliner2-base" fallback_model_name: str = "gliner-community/gliner_large-v2.5" model_revision: str | None = None - schema_path: str = "src/trialmatchai/entity_schemas/trialmatchai.yaml" + schema_path: str = "entity_schemas/trialmatchai.yaml" threshold: float = Field(0.8, ge=0.0, le=1.0) batch_size: int = Field(8, ge=1) device: str = "auto" @@ -35,7 +35,6 @@ def validate_reject_threshold(cls, value: float, info): class PathsSettings(BaseModel): - patients_dir: str output_dir: str trials_json_folder: str @@ -186,7 +185,6 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: import os string_env_map: dict[str, Tuple[str, ...]] = { - "TRIALMATCHAI_PATIENTS_DIR": ("paths", "patients_dir"), "TRIALMATCHAI_OUTPUT_DIR": ("paths", "output_dir"), "TRIALMATCHAI_TRIALS_JSON_FOLDER": ("paths", "trials_json_folder"), "TRIALMATCHAI_PATIENT_RAW_DIR": ("patient_inputs", "raw_dir"), diff --git a/src/trialmatchai/entities/builder.py b/src/trialmatchai/entities/builder.py index fa1819a8..4ef792ca 100644 --- a/src/trialmatchai/entities/builder.py +++ b/src/trialmatchai/entities/builder.py @@ -53,12 +53,12 @@ def build_omop_concept_rows( return rows -def build_legacy_dictionary_rows( +def build_dictionary_rows( dictionary_path: str | Path, *, vocabulary_id: str, domain_id: str = "", - concept_class_id: str = "LegacyDictionary", + concept_class_id: str = "Dictionary", ) -> list[dict[str, Any]]: rows: list[dict[str, Any]] = [] with Path(dictionary_path).open("r", encoding="utf-8") as handle: @@ -113,8 +113,11 @@ def write_lancedb_table( row["embedding"] = list(embedding) db = lancedb.connect(str(db_path)) - mode = "overwrite" if recreate else "create" - table = db.create_table(table_name, data=payload, mode=mode) + if recreate or not _lancedb_table_exists(db, table_name): + table = db.create_table(table_name, data=payload, mode="overwrite") + else: + table = db.open_table(table_name) + table.add(payload) try: table.create_fts_index("fts_text", replace=True) except Exception: @@ -132,6 +135,13 @@ def concept_texts_for_embedding(rows: Sequence[dict[str, Any]]) -> list[str]: return texts +def _lancedb_table_exists(db: Any, table_name: str) -> bool: + try: + return table_name in set(db.table_names()) + except Exception: + return False + + def _read_omop_synonyms(path: str | Path | None) -> dict[str, list[str]]: if path is None: return {} diff --git a/src/trialmatchai/entities/schemas.py b/src/trialmatchai/entities/schemas.py index 300c86d3..d683d270 100644 --- a/src/trialmatchai/entities/schemas.py +++ b/src/trialmatchai/entities/schemas.py @@ -21,8 +21,15 @@ def default_schema_path() -> Path: def load_entity_schemas(path: str | Path | None = None) -> list[EntitySchema]: - schema_path = Path(path).expanduser() if path else default_schema_path() - with schema_path.open("r", encoding="utf-8") as handle: + if path: + handle_source = Path(path).expanduser() + handle = handle_source.open("r", encoding="utf-8") + else: + handle = resources.files("trialmatchai").joinpath(DEFAULT_SCHEMA_RESOURCE).open( + "r", + encoding="utf-8", + ) + with handle: raw = yaml.safe_load(handle) or {} return parse_entity_schemas(raw) diff --git a/src/trialmatchai/interop/detect.py b/src/trialmatchai/interop/detect.py index 55302067..90e17436 100644 --- a/src/trialmatchai/interop/detect.py +++ b/src/trialmatchai/interop/detect.py @@ -34,9 +34,9 @@ def detect_patient_input_format(path: str | Path) -> PatientInputFormat: suffix = candidate.suffix.casefold() if suffix in {".txt", ".md"}: return "text" - if suffix == ".ndjson": + if suffix in {".ndjson", ".jsonl"}: return "fhir-ndjson" - if suffix not in {".json", ".jsonl"}: + if suffix != ".json": raise ValueError(f"Unsupported patient input file extension: {suffix}") with candidate.open("r", encoding="utf-8") as handle: diff --git a/src/trialmatchai/interop/importers/__init__.py b/src/trialmatchai/interop/importers/__init__.py index 2b79cfa6..3e59c3e9 100644 --- a/src/trialmatchai/interop/importers/__init__.py +++ b/src/trialmatchai/interop/importers/__init__.py @@ -26,7 +26,7 @@ def import_patient_path( if resolved_format == "phenopacket": return [import_phenopacket(path, strict=strict)] if resolved_format in {"fhir", "fhir-ndjson"}: - return [import_fhir(path, input_format=resolved_format, strict=strict)] + return import_fhir(path, input_format=resolved_format, strict=strict) if resolved_format == "omop": return import_omop_extract(path, strict=strict) raise ValueError(f"Unsupported patient input format: {resolved_format}") diff --git a/src/trialmatchai/interop/importers/fhir.py b/src/trialmatchai/interop/importers/fhir.py index 8c15c9a7..e4648faa 100644 --- a/src/trialmatchai/interop/importers/fhir.py +++ b/src/trialmatchai/interop/importers/fhir.py @@ -23,14 +23,64 @@ def import_fhir( *, input_format: str = "fhir", strict: bool = False, -) -> PatientProfile: +) -> list[PatientProfile]: source_path = Path(path) resources = ( _load_ndjson(source_path) if input_format == "fhir-ndjson" else _load_json_resources(source_path) ) - patient = next((res for res in resources if res.get("resourceType") == "Patient"), {}) + patients = [res for res in resources if res.get("resourceType") == "Patient"] + if not patients: + patients = [{}] + + profiles = [ + _profile_from_patient(patient, source_path=source_path, input_format=input_format) + for patient in patients + ] + profiles_by_reference = _profiles_by_reference(patients, profiles) + + for resource in resources: + if resource.get("resourceType") == "Patient": + continue + profile = _profile_for_resource(resource, profiles, profiles_by_reference) + if profile is None: + message = "FHIR resource has no resolvable patient reference" + if strict: + raise ValueError( + f"{message}: {resource.get('resourceType')}/{resource.get('id')}" + ) + for candidate in profiles: + candidate.unsupported.append( + { + "resourceType": resource.get("resourceType"), + "id": resource.get("id"), + "reason": message, + } + ) + continue + try: + base_provenance = profile.provenance[0] + _add_resource(profile, resource, base_provenance) + except Exception: + if strict: + raise + profile.unsupported.append( + { + "resourceType": resource.get("resourceType"), + "id": resource.get("id"), + "reason": "resource mapping failed", + } + ) + return profiles + + +def _profile_from_patient( + patient: Mapping[str, Any], + *, + source_path: Path, + input_format: str, +) -> PatientProfile: patient_id = safe_patient_id(patient.get("id"), source_path.stem) provenance = Provenance( source_format=input_format, @@ -38,7 +88,7 @@ def import_fhir( source_path=source_path_string(source_path), ) birth_date = parse_date(patient.get("birthDate")) - profile = PatientProfile( + return PatientProfile( patient_id=patient_id, demographics=Demographics( sex=normalize_gender(patient.get("gender")), @@ -48,20 +98,6 @@ def import_fhir( ), provenance=[provenance], ) - for resource in resources: - try: - _add_resource(profile, resource, provenance) - except Exception: - if strict: - raise - profile.unsupported.append( - { - "resourceType": resource.get("resourceType"), - "id": resource.get("id"), - "reason": "resource mapping failed", - } - ) - return profile def _load_json_resources(path: Path) -> list[dict[str, Any]]: @@ -71,11 +107,15 @@ def _load_json_resources(path: Path) -> list[dict[str, Any]]: if not isinstance(data, dict): return [] if data.get("resourceType") == "Bundle": - return [ - entry["resource"] - for entry in data.get("entry") or [] - if isinstance(entry, dict) and isinstance(entry.get("resource"), dict) - ] + resources = [] + for entry in data.get("entry") or []: + if not isinstance(entry, dict) or not isinstance(entry.get("resource"), dict): + continue + resource = dict(entry["resource"]) + if entry.get("fullUrl"): + resource["_bundle_full_url"] = entry["fullUrl"] + resources.append(resource) + return resources return [data] @@ -88,6 +128,51 @@ def _load_ndjson(path: Path) -> list[dict[str, Any]]: return resources +def _profiles_by_reference( + patients: list[Mapping[str, Any]], + profiles: list[PatientProfile], +) -> dict[str, PatientProfile]: + mapping: dict[str, PatientProfile] = {} + for patient, profile in zip(patients, profiles): + patient_id = str(patient.get("id") or "").strip() + if patient_id: + mapping[patient_id] = profile + mapping[f"Patient/{patient_id}"] = profile + full_url = str(patient.get("_bundle_full_url") or "").strip() + if full_url: + mapping[full_url] = profile + return mapping + + +def _profile_for_resource( + resource: Mapping[str, Any], + profiles: list[PatientProfile], + profiles_by_reference: Mapping[str, PatientProfile], +) -> PatientProfile | None: + reference = _patient_reference(resource) + if reference: + return profiles_by_reference.get(reference) + if len(profiles) == 1: + return profiles[0] + return None + + +def _patient_reference(resource: Mapping[str, Any]) -> str | None: + for key in ("subject", "patient", "beneficiary"): + reference = _reference_value(resource.get(key)) + if reference: + return reference + return None + + +def _reference_value(value: Any) -> str | None: + if isinstance(value, Mapping): + reference = value.get("reference") + if isinstance(reference, str) and reference.strip(): + return reference.strip() + return None + + def _add_resource( profile: PatientProfile, resource: Mapping[str, Any], diff --git a/src/trialmatchai/interop/narrative.py b/src/trialmatchai/interop/narrative.py index 5fffee41..388e68ed 100644 --- a/src/trialmatchai/interop/narrative.py +++ b/src/trialmatchai/interop/narrative.py @@ -1,5 +1,7 @@ from __future__ import annotations +import re + from trialmatchai.interop.models import ClinicalFact, PatientProfile @@ -54,6 +56,10 @@ def render_search_terms(profile: PatientProfile) -> tuple[list[str], list[str]]: main_conditions = _dedupe( fact.label for fact in profile.phenotypes if not fact.negated ) + if not main_conditions: + main_conditions = _dedupe( + _note_search_term(note.text) for note in profile.notes if note.text + )[:1] other_terms = _dedupe( [ *[fact.label for fact in profile.phenotypes if not fact.negated], @@ -99,3 +105,11 @@ def _dedupe(values) -> list[str]: seen.add(key) output.append(cleaned) return output + + +def _note_search_term(text: str, *, max_chars: int = 500) -> str: + cleaned = re.sub(r"\s+", " ", text).strip() + if len(cleaned) <= max_chars: + return cleaned + truncated = cleaned[:max_chars].rsplit(" ", 1)[0].strip() + return truncated or cleaned[:max_chars].strip() diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index 791bcc04..b2d88f02 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -16,7 +16,6 @@ from trialmatchai.search import LanceDBSearchBackend from trialmatchai.services.preflight import run_preflight_checks from trialmatchai.interop.exporters import profile_to_matching_summary -from trialmatchai.interop.importers import import_patient_path from trialmatchai.interop.models import PatientProfile from trialmatchai.utils.file_utils import ( create_directory, @@ -412,58 +411,27 @@ def _load_patient_inputs(config: Dict) -> list[tuple[PatientProfile, Dict]]: profile_dir = Path(patient_cfg.get("profile_dir", "data/patients/profiles")) summary_dir = Path(patient_cfg.get("summary_dir", "data/patients/summaries")) profile_files = sorted(profile_dir.glob("*.json")) if profile_dir.exists() else [] - if profile_files: - loaded: list[tuple[PatientProfile, Dict]] = [] - for profile_file in profile_files: - try: - profile = PatientProfile.model_validate(read_json_file(str(profile_file))) - summary_path = summary_dir / profile_file.name - if summary_path.exists(): - summary = read_json_file(str(summary_path)) - else: - summary = profile_to_matching_summary(profile) - loaded.append((profile, summary)) - except Exception: - logger.exception("Failed to load patient profile: %s", profile_file) - return loaded - - patient_folder = Path(config.get("paths", {}).get("patients_dir", "")) - if not patient_folder.exists(): - logger.error("Patient profile directory and legacy patients_dir are missing.") - return [] - - legacy_files = sorted(path for path in patient_folder.glob("*.json") if path.is_file()) - if not legacy_files: - logger.warning("No patient profile or legacy phenopacket files found.") + if not profile_files: + logger.error( + "No canonical patient profiles found in %s. Run " + "`trialmatchai-import-patient` first.", + profile_dir, + ) return [] - logger.warning( - "No canonical patient profiles found in %s. Importing legacy Phenopacket " - "JSON files from %s for this run.", - profile_dir, - patient_folder, - ) - profile_dir.mkdir(parents=True, exist_ok=True) - summary_dir.mkdir(parents=True, exist_ok=True) - imported: list[tuple[PatientProfile, Dict]] = [] - for legacy_file in legacy_files: + loaded: list[tuple[PatientProfile, Dict]] = [] + for profile_file in profile_files: try: - profiles = import_patient_path( - legacy_file, - input_format="phenopacket", - strict=bool(patient_cfg.get("strict_validation", False)), - ) - for profile in profiles: + profile = PatientProfile.model_validate(read_json_file(str(profile_file))) + summary_path = summary_dir / profile_file.name + if summary_path.exists(): + summary = read_json_file(str(summary_path)) + else: summary = profile_to_matching_summary(profile) - write_json_file( - profile.model_dump(mode="json", exclude_none=True), - str(profile_dir / f"{profile.patient_id}.json"), - ) - write_json_file(summary, str(summary_dir / f"{profile.patient_id}.json")) - imported.append((profile, summary)) + loaded.append((profile, summary)) except Exception: - logger.exception("Failed to import legacy patient file: %s", legacy_file) - return imported + logger.exception("Failed to load patient profile: %s", profile_file) + return loaded if __name__ == "__main__": diff --git a/src/trialmatchai/models/llm/llm_loader.py b/src/trialmatchai/models/llm/llm_loader.py index 97ddb38e..1aea7f33 100644 --- a/src/trialmatchai/models/llm/llm_loader.py +++ b/src/trialmatchai/models/llm/llm_loader.py @@ -1,17 +1,15 @@ -from typing import Tuple +from typing import Any, Tuple -import torch from trialmatchai.utils.logging_config import setup_logging -from peft import PeftModel -from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig logger = setup_logging(__name__) -def load_model_and_tokenizer( - model_config: dict, device: int -) -> Tuple[AutoModelForCausalLM, AutoTokenizer]: +def load_model_and_tokenizer(model_config: dict, device: int) -> Tuple[Any, Any]: """Load a model and tokenizer with safe device handling and optional 4-bit.""" + torch, peft_model, auto_model, auto_tokenizer, bits_and_bytes_config = ( + _load_llm_dependencies() + ) use_cuda = torch.cuda.is_available() device_str = "cuda" if use_cuda else "cpu" quant_config = None @@ -55,7 +53,7 @@ def load_model_and_tokenizer( except Exception: logger.info("flash-attn not available; using SDPA.") - quant_config = BitsAndBytesConfig( + quant_config = bits_and_bytes_config( load_in_4bit=bool(model_config["quantization"]["load_in_4bit"]), bnb_4bit_use_double_quant=bool( model_config["quantization"]["bnb_4bit_use_double_quant"] @@ -71,11 +69,11 @@ def load_model_and_tokenizer( "CUDA not available; loading model on CPU without 4-bit quantization." ) device_str = "cpu" - quant_config = BitsAndBytesConfig(load_in_4bit=False) + quant_config = bits_and_bytes_config(load_in_4bit=False) trust_remote_code = bool(model_config.get("trust_remote_code", False)) revision = model_config.get("base_model_revision") - tokenizer = AutoTokenizer.from_pretrained( + tokenizer = auto_tokenizer.from_pretrained( model_config["base_model"], revision=revision, use_fast=True, @@ -91,7 +89,7 @@ def load_model_and_tokenizer( "Using FlashAttention-2; keeping padding_side='left' for decoder-only models." ) - model = AutoModelForCausalLM.from_pretrained( + model = auto_model.from_pretrained( model_config["base_model"], revision=revision, trust_remote_code=trust_remote_code, @@ -107,7 +105,7 @@ def load_model_and_tokenizer( except Exception: pass - model = PeftModel.from_pretrained( + model = peft_model.from_pretrained( model, model_config["cot_adapter_path"], device_map=device_str ) @@ -125,3 +123,16 @@ def load_model_and_tokenizer( logger.warning("Model is not an instance of torch.nn.Module; skipping eval.") logger.info(f"Model loaded on {device_str}.") return model, tokenizer # type: ignore[return-value] + + +def _load_llm_dependencies() -> tuple[Any, Any, Any, Any, Any]: + try: + import torch + from peft import PeftModel + from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig + except Exception as exc: # pragma: no cover - exercised in lean installs + raise RuntimeError( + "LLM model loading requires the optional `llm` dependencies " + "(`uv sync --extra llm`)." + ) from exc + return torch, PeftModel, AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig diff --git a/src/trialmatchai/models/llm/llm_reranker.py b/src/trialmatchai/models/llm/llm_reranker.py index 2a60e6d1..1eb08771 100644 --- a/src/trialmatchai/models/llm/llm_reranker.py +++ b/src/trialmatchai/models/llm/llm_reranker.py @@ -2,14 +2,10 @@ import threading import unicodedata from concurrent.futures import ThreadPoolExecutor, as_completed -from typing import Dict, List, Optional +from typing import Any, Dict, List, Optional -import torch -import torch.nn.functional as F from trialmatchai.utils.logging_config import setup_logging -from peft import PeftModel from tqdm import tqdm -from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig logger = setup_logging(__name__) @@ -20,20 +16,28 @@ def __init__( model_path: str, adapter_path: Optional[str] = None, device: int = 0, - torch_dtype=torch.float16, + torch_dtype: Any | None = None, batch_size: int = 8, revision: Optional[str] = None, trust_remote_code: bool = False, ): + ( + self._torch, + self._torch_functional, + self._peft_model, + self._auto_model, + self._auto_tokenizer, + self._bits_and_bytes_config, + ) = _load_llm_dependencies() self.model_path = model_path self.adapter_path = adapter_path - self.torch_dtype = torch_dtype + self.torch_dtype = torch_dtype or self._torch.float16 self.batch_size = batch_size self.revision = revision self.trust_remote_code = trust_remote_code # Resolve device string - if torch.cuda.is_available(): - cuda_count = torch.cuda.device_count() + if self._torch.cuda.is_available(): + cuda_count = self._torch.cuda.device_count() idx = int(device) if isinstance(device, int) else 0 if idx < 0 or idx >= cuda_count: logger.warning( @@ -43,14 +47,14 @@ def __init__( self.device_str = f"cuda:{idx}" # Ensure Accelerate/HF loaders use the selected GPU when device_map='auto' try: - torch.cuda.set_device(idx) + self._torch.cuda.set_device(idx) except Exception as e: logger.warning(f"Could not set CUDA device to {idx}: {e}") else: logger.warning("LLMReranker: CUDA not available; using CPU.") self.device_str = "cpu" - self.tokenizer = AutoTokenizer.from_pretrained( + self.tokenizer = self._auto_tokenizer.from_pretrained( self.model_path, revision=self.revision, trust_remote_code=self.trust_remote_code, @@ -72,7 +76,7 @@ def _initialize_token_ids(self): def load_model(self): use_cuda = self.device_str.startswith("cuda") quant_config = ( - BitsAndBytesConfig( + self._bits_and_bytes_config( load_in_4bit=True, bnb_4bit_use_double_quant=True, bnb_4bit_quant_type="nf4", @@ -81,17 +85,17 @@ def load_model(self): if use_cuda else None ) - model = AutoModelForCausalLM.from_pretrained( + model = self._auto_model.from_pretrained( self.model_path, revision=self.revision, - torch_dtype=self.torch_dtype if use_cuda else torch.float32, + torch_dtype=self.torch_dtype if use_cuda else self._torch.float32, quantization_config=quant_config, device_map="auto" if use_cuda else None, attn_implementation="flash_attention_2" if use_cuda else None, trust_remote_code=self.trust_remote_code, ) if self.adapter_path: - model = PeftModel.from_pretrained(model, self.adapter_path) + model = self._peft_model.from_pretrained(model, self.adapter_path) model.eval() return model @@ -129,10 +133,10 @@ def process_batch(self, batch: List[tuple]) -> List[Dict]: inputs = self.tokenizer(batch_prompts, return_tensors="pt", padding=True) inputs = {k: v.to(self.device_str) for k, v in inputs.items()} with self.model_lock: - with torch.no_grad(): + with self._torch.no_grad(): outputs = self.model(**inputs) logits = outputs.logits[:, -1, :] - probabilities = F.softmax(logits, dim=-1) + probabilities = self._torch_functional.softmax(logits, dim=-1) applicable_probs = probabilities[:, self.applicable_token_id].tolist() return [ {"llm_score": prob, "answer": "Yes" if prob > 0.5 else "No"} @@ -152,3 +156,24 @@ def rank_pairs(self, patient_trial_pairs: List[tuple]) -> List[Dict]: ): results.extend(future.result()) return results + + +def _load_llm_dependencies() -> tuple[Any, Any, Any, Any, Any, Any]: + try: + import torch + import torch.nn.functional as torch_functional + from peft import PeftModel + from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig + except Exception as exc: # pragma: no cover - exercised in lean installs + raise RuntimeError( + "LLM reranking requires the optional `llm` dependencies " + "(`uv sync --extra llm`)." + ) from exc + return ( + torch, + torch_functional, + PeftModel, + AutoModelForCausalLM, + AutoTokenizer, + BitsAndBytesConfig, + ) diff --git a/src/trialmatchai/models/llm/vllm_loader.py b/src/trialmatchai/models/llm/vllm_loader.py index eb283637..7166729d 100644 --- a/src/trialmatchai/models/llm/vllm_loader.py +++ b/src/trialmatchai/models/llm/vllm_loader.py @@ -203,14 +203,13 @@ def load_vllm_engine( logger.debug(f"[vLLM] Second LoRA signature failed: {e2}") try: - # Older versions might have different parameter names - # Some versions might use just name and path + # Some vLLM releases use just name and path. lora_request = LoRARequest(name, adapter_path) # type: ignore # Manually set the ID if the object allows it if hasattr(lora_request, "lora_int_id"): setattr(lora_request, "lora_int_id", adapter_id) logger.info( - "[vLLM] Created LoRA request (legacy): name=%s path=%s", + "[vLLM] Created LoRA request with fallback signature: name=%s path=%s", name, adapter_path, ) diff --git a/src/trialmatchai/services/preflight.py b/src/trialmatchai/services/preflight.py index e0ff0122..d1eb03e8 100644 --- a/src/trialmatchai/services/preflight.py +++ b/src/trialmatchai/services/preflight.py @@ -25,10 +25,11 @@ def run_preflight_checks( if require_patient_inputs: _require_patient_inputs(issues, config) else: + patient_cfg = config.get("patient_inputs", {}) _require_path( issues, - "paths.patients_dir", - paths.get("patients_dir"), + "patient_inputs.profile_dir", + patient_cfg.get("profile_dir"), required=False, ) _require_path( @@ -39,15 +40,17 @@ def run_preflight_checks( ) _require_output_dir(issues, paths.get("output_dir")) + entity_cfg = config.get("entity_extraction") + if entity_cfg: + _require_path( + issues, + "entity_extraction.schema_path", + entity_cfg.get("schema_path"), + required=True, + ) + if require_models: - entity_cfg = config.get("entity_extraction") if entity_cfg: - _require_path( - issues, - "entity_extraction.schema_path", - entity_cfg.get("schema_path"), - required=True, - ) backend = entity_cfg.get("backend", "gliner2") if backend == "gliner2" and importlib.util.find_spec("gliner2") is None: issues.append( @@ -160,15 +163,9 @@ def _require_output_dir(issues: List[str], value: str | None) -> None: def _require_patient_inputs(issues: List[str], config: Dict[str, Any]) -> None: - paths = config.get("paths", {}) patient_cfg = config.get("patient_inputs", {}) profile_dir = Path(patient_cfg.get("profile_dir", "")) - legacy_dir = Path(paths.get("patients_dir", "")) - has_profiles = profile_dir.exists() - has_legacy = legacy_dir.exists() - if has_profiles or has_legacy: + if profile_dir.exists(): return if profile_dir: issues.append(f"patient_inputs.profile_dir does not exist: {profile_dir}") - if legacy_dir: - issues.append(f"paths.patients_dir does not exist: {legacy_dir}") diff --git a/tests/test_bootstrap_data.py b/tests/test_bootstrap_data.py index 1e09499c..f4653f25 100644 --- a/tests/test_bootstrap_data.py +++ b/tests/test_bootstrap_data.py @@ -13,6 +13,7 @@ PROCESSED_TRIALS_ARCHIVE, bootstrap_data, _safe_extract_tar_gz, + _safe_extract_zip, _verify_sha256, ) @@ -94,6 +95,17 @@ def test_tar_extraction_rejects_links(tmp_path): _safe_extract_tar_gz(archive, tmp_path / "target") +def test_zip_extraction_rejects_symlinks(tmp_path): + archive = tmp_path / "unsafe-link.zip" + with zipfile.ZipFile(archive, "w") as zip_file: + info = zipfile.ZipInfo("link") + info.external_attr = 0o120777 << 16 + zip_file.writestr(info, "/etc/passwd") + + with pytest.raises(ValueError, match="unsafe member"): + _safe_extract_zip(archive, tmp_path / "target") + + def _write_tar_gz(path: Path, files: dict[str, bytes]) -> None: with tarfile.open(path, "w:gz") as tar: for name, data in files.items(): diff --git a/tests/test_config_pytest.py b/tests/test_config_pytest.py index 8e3cb05b..bcf97a47 100644 --- a/tests/test_config_pytest.py +++ b/tests/test_config_pytest.py @@ -1,6 +1,7 @@ from pathlib import Path from trialmatchai.config.config_loader import load_config +from trialmatchai.entities.schemas import default_schema_path def test_load_config_from_repo(): @@ -9,3 +10,19 @@ def test_load_config_from_repo(): assert cfg["search_backend"]["backend"] == "lancedb" assert "embedder" in cfg assert "paths" in cfg + + +def test_packaged_schema_path_resolves_outside_repo(tmp_path, monkeypatch): + source_config = ( + Path(__file__).resolve().parents[1] / "src/trialmatchai/config/config.json" + ) + installed_config = tmp_path / "site-packages/trialmatchai/config/config.json" + installed_config.parent.mkdir(parents=True) + installed_config.write_text(source_config.read_text(encoding="utf-8"), encoding="utf-8") + monkeypatch.chdir(tmp_path) + + cfg = load_config(installed_config) + + assert cfg["entity_extraction"]["schema_path"] == str(default_schema_path().resolve()) + assert Path(cfg["entity_extraction"]["schema_path"]).exists() + assert cfg["paths"]["output_dir"] == str((tmp_path / "results").resolve()) diff --git a/tests/test_entities.py b/tests/test_entities.py index 8ee6ea5d..d2f7b80f 100644 --- a/tests/test_entities.py +++ b/tests/test_entities.py @@ -4,7 +4,11 @@ from pathlib import Path from trialmatchai.entities.annotator import CompatibilityEntityAnnotator -from trialmatchai.entities.builder import build_legacy_dictionary_rows, build_omop_concept_rows +from trialmatchai.entities.builder import ( + build_dictionary_rows, + build_omop_concept_rows, + write_lancedb_table, +) from trialmatchai.entities.linker import ConceptLinker, InMemoryConceptStore from trialmatchai.entities.recognizers import RegexSchemaRecognizer, resolve_overlaps from trialmatchai.entities.schemas import load_entity_schemas @@ -95,7 +99,7 @@ def test_concept_linker_accepts_rejects_and_marks_ambiguous(): assert rejected.linker_status == "rejected" -def test_concept_builders_import_omop_and_legacy_rows(tmp_path): +def test_concept_builders_import_omop_and_dictionary_rows(tmp_path): concept_csv = tmp_path / "CONCEPT.csv" synonym_csv = tmp_path / "CONCEPT_SYNONYM.csv" with concept_csv.open("w", newline="") as handle: @@ -132,23 +136,63 @@ def test_concept_builders_import_omop_and_legacy_rows(tmp_path): writer.writerow({"concept_id": "1", "concept_synonym_name": "Hgb"}) rows = build_omop_concept_rows(concept_csv, synonym_csv, vocabularies=("LOINC",)) - legacy = tmp_path / "dict_Gene.txt" - legacy.write_text("EntrezGene:1956||EGFR|ERBB1\n") + dictionary = tmp_path / "dict_Gene.txt" + dictionary.write_text("EntrezGene:1956||EGFR|ERBB1\n") - legacy_rows = build_legacy_dictionary_rows( - legacy, + dictionary_rows = build_dictionary_rows( + dictionary, vocabulary_id="EntrezGene", domain_id="Gene", ) assert rows[0]["concept_code"] == "718-7" assert rows[0]["synonyms"] == ["Hgb"] - assert legacy_rows[0]["concept_code"] == "1956" - assert legacy_rows[0]["synonyms"] == ["EGFR", "ERBB1"] + assert dictionary_rows[0]["concept_code"] == "1956" + assert dictionary_rows[0]["synonyms"] == ["EGFR", "ERBB1"] + + +def test_concept_table_no_recreate_appends_rows(tmp_path): + db_path = tmp_path / "concepts" + first = [ + { + "concept_id": "SNOMED:1", + "vocabulary_id": "SNOMED", + "concept_code": "1", + "concept_name": "Melanoma", + "domain_id": "Condition", + "concept_class_id": "Clinical Finding", + "standard_concept": "S", + "synonyms": ["malignant melanoma"], + "fts_text": "Melanoma malignant melanoma", + } + ] + second = [ + { + "concept_id": "SNOMED:2", + "vocabulary_id": "SNOMED", + "concept_code": "2", + "concept_name": "Sarcoma", + "domain_id": "Condition", + "concept_class_id": "Clinical Finding", + "standard_concept": "S", + "synonyms": ["soft tissue sarcoma"], + "fts_text": "Sarcoma soft tissue sarcoma", + } + ] + + write_lancedb_table(first, db_path=db_path, table_name="concepts", recreate=True) + write_lancedb_table(second, db_path=db_path, table_name="concepts", recreate=False) + + import lancedb + + table = lancedb.connect(str(db_path)).open_table("concepts") + codes = {row["concept_code"] for row in table.to_arrow().to_pylist()} + assert codes == {"1", "2"} def test_runtime_replacement_has_no_old_daemon_references(): assert not (ROOT / "source/Parser").exists() + assert not (ROOT / "src/Matcher").exists() runtime_files = sorted((ROOT / "src/trialmatchai").rglob("*.py")) forbidden = [ "18888", diff --git a/tests/test_import_patient_cli.py b/tests/test_import_patient_cli.py index 5a8d0266..dfa8e429 100644 --- a/tests/test_import_patient_cli.py +++ b/tests/test_import_patient_cli.py @@ -33,4 +33,5 @@ def test_import_patient_cli_writes_profile_and_summary(tmp_path, monkeypatch): summary = json.loads((summary_dir / "patient.json").read_text(encoding="utf-8")) assert profile["patient_id"] == "patient" assert summary["patient_id"] == "patient" + assert summary["main_conditions"] == ["Patient has breast cancer."] assert summary["expanded_sentences"] diff --git a/tests/test_package_imports.py b/tests/test_package_imports.py index 6d13a5dd..5853ea03 100644 --- a/tests/test_package_imports.py +++ b/tests/test_package_imports.py @@ -1,6 +1,7 @@ from __future__ import annotations -import warnings +import importlib.util +import pkgutil import pytest @@ -11,13 +12,22 @@ def test_trialmatchai_imports_with_version(): assert trialmatchai.__version__ == "0.2.0" -def test_matcher_config_compatibility_shim(): - with warnings.catch_warnings(record=True) as captured: - warnings.simplefilter("always") - from Matcher.config.config_loader import resolve_config_path +def test_matcher_namespace_is_removed(): + assert importlib.util.find_spec("Matcher") is None - assert resolve_config_path().name == "config.json" - assert any("Matcher" in str(warning.message) for warning in captured) + +def test_trialmatchai_modules_import_with_core_dependencies(): + failures = [] + for module in pkgutil.walk_packages( + trialmatchai.__path__, + prefix=f"{trialmatchai.__name__}.", + ): + try: + __import__(module.name) + except Exception as exc: # pragma: no cover - assertion path + failures.append(f"{module.name}: {type(exc).__name__}: {exc}") + + assert failures == [] def test_command_group_includes_bootstrap_data(monkeypatch, capsys): diff --git a/tests/test_patient_interop.py b/tests/test_patient_interop.py index d517854f..78089d1b 100644 --- a/tests/test_patient_interop.py +++ b/tests/test_patient_interop.py @@ -142,6 +142,45 @@ def test_fhir_bundle_importer_and_exporter(tmp_path): assert exported["resourceType"] == "Bundle" +def test_fhir_bundle_groups_resources_by_patient_reference(tmp_path): + bundle = { + "resourceType": "Bundle", + "type": "collection", + "entry": [ + { + "fullUrl": "urn:uuid:patient-1", + "resource": {"resourceType": "Patient", "id": "p1"}, + }, + {"resource": {"resourceType": "Patient", "id": "p2"}}, + { + "resource": { + "resourceType": "Condition", + "id": "c1", + "subject": {"reference": "urn:uuid:patient-1"}, + "code": {"text": "melanoma"}, + } + }, + { + "resource": { + "resourceType": "Condition", + "id": "c2", + "subject": {"reference": "Patient/p2"}, + "code": {"text": "sarcoma"}, + } + }, + ], + } + path = tmp_path / "bundle.json" + path.write_text(json.dumps(bundle), encoding="utf-8") + + profiles = import_patient_path(path) + + by_id = {profile.patient_id: profile for profile in profiles} + assert sorted(by_id) == ["p1", "p2"] + assert by_id["p1"].conditions[0].label == "melanoma" + assert by_id["p2"].conditions[0].label == "sarcoma" + + def test_fhir_ndjson_detection_and_import(tmp_path): path = tmp_path / "patient.ndjson" path.write_text( @@ -166,6 +205,31 @@ def test_fhir_ndjson_detection_and_import(tmp_path): assert profile.procedures[0].label == "bone marrow biopsy" +def test_fhir_jsonl_detection_and_import(tmp_path): + path = tmp_path / "patient.jsonl" + path.write_text( + "\n".join( + [ + json.dumps({"resourceType": "Patient", "id": "jsonl-p1"}), + json.dumps( + { + "resourceType": "Condition", + "id": "c1", + "subject": {"reference": "Patient/jsonl-p1"}, + "code": {"text": "glioma"}, + } + ), + ] + ), + encoding="utf-8", + ) + + profile = import_patient_path(path)[0] + + assert detect_patient_input_format(path) == "fhir-ndjson" + assert profile.conditions[0].label == "glioma" + + def test_omop_importer_from_csv_extract(tmp_path): omop = tmp_path / "omop" omop.mkdir() diff --git a/tests/test_patient_runtime_loading.py b/tests/test_patient_runtime_loading.py index 815d8ba7..349984f8 100644 --- a/tests/test_patient_runtime_loading.py +++ b/tests/test_patient_runtime_loading.py @@ -34,7 +34,6 @@ def test_runtime_loads_profiles_from_configured_directory(tmp_path): "profile_dir": str(profiles), "summary_dir": str(summaries), }, - "paths": {"patients_dir": str(tmp_path / "legacy")}, } ) @@ -42,22 +41,9 @@ def test_runtime_loads_profiles_from_configured_directory(tmp_path): assert loaded[0][1]["main_conditions"] == ["melanoma"] -def test_runtime_imports_legacy_phenopackets_when_profiles_missing(tmp_path): - legacy = tmp_path / "legacy" - legacy.mkdir() +def test_runtime_requires_canonical_profiles(tmp_path): profiles = tmp_path / "profiles" summaries = tmp_path / "summaries" - (legacy / "patient.json").write_text( - json.dumps( - { - "id": "legacy-p1", - "metaData": {}, - "subject": {}, - "diseases": [{"term": {"label": "sarcoma"}}], - } - ), - encoding="utf-8", - ) loaded = _load_patient_inputs( { @@ -65,11 +51,7 @@ def test_runtime_imports_legacy_phenopackets_when_profiles_missing(tmp_path): "profile_dir": str(profiles), "summary_dir": str(summaries), }, - "paths": {"patients_dir": str(legacy)}, } ) - assert loaded[0][0].patient_id == "legacy-p1" - assert loaded[0][1]["main_conditions"] == ["sarcoma"] - assert (profiles / "legacy-p1.json").exists() - assert (summaries / "legacy-p1.json").exists() + assert loaded == [] diff --git a/tests/test_preflight_and_indexer.py b/tests/test_preflight_and_indexer.py index 2d9375ab..e1799ef0 100644 --- a/tests/test_preflight_and_indexer.py +++ b/tests/test_preflight_and_indexer.py @@ -11,18 +11,21 @@ def _base_config(tmp_path): - patients = tmp_path / "patients" - patients.mkdir() + profiles = tmp_path / "profiles" + profiles.mkdir() trials = tmp_path / "trials" trials.mkdir() search_db = tmp_path / "search" search_db.mkdir() return { "paths": { - "patients_dir": str(patients), "trials_json_folder": str(trials), "output_dir": str(tmp_path / "results"), }, + "patient_inputs": { + "profile_dir": str(profiles), + "summary_dir": str(tmp_path / "summaries"), + }, "search_backend": { "backend": "lancedb", "db_path": str(search_db), @@ -134,10 +137,13 @@ def test_main_config_resolves_search_paths(tmp_path, monkeypatch): json.dumps( { "paths": { - "patients_dir": "patients", "output_dir": "results", "trials_json_folder": "trials", }, + "patient_inputs": { + "profile_dir": "patients/profiles", + "summary_dir": "patients/summaries", + }, "search_backend": { "backend": "lancedb", "db_path": "search", From 6aaebc208ab72f07d1d5fc98d19f0c37e428b9a9 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 09:35:20 +0200 Subject: [PATCH 10/64] PR0: CI ML-extras smoke job + scoring characterization tests Safety net before the audit-driven refactor (see REFACTOR_PLAN.md). - CI: add ml-extras-smoke job that `uv sync --extra entity`, imports the heavy libs (torch/transformers/gliner/gliner2) and the six local-model modules the default job never exercises, so a broken import or API drift is caught instead of shipping silently. - CI: keep the installed-smoke wheel path absolute ("$PWD"/dist) so $WHEEL survives the cd into /tmp. - tests: characterization tests pinning the current (buggy) score_trial behavior, plus a strict xfail encoding the PR1 contract (a Violated exclusion must hard-disqualify). Co-Authored-By: Claude Opus 4.8 --- .github/workflows/ci.yml | 50 ++++++++- REFACTOR_PLAN.md | 106 ++++++++++++++++++++ tests/test_trial_ranker_scoring_contract.py | 61 +++++++++++ 3 files changed, 215 insertions(+), 2 deletions(-) create mode 100644 REFACTOR_PLAN.md create mode 100644 tests/test_trial_ranker_scoring_contract.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 910a6d44..2e59511d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,7 +2,7 @@ name: CI on: push: - branches: [main, dev, deployment-readiness-audit] + branches: [main, dev, deployment-readiness-audit, refactor/audit-fixes] pull_request: branches: [main, dev] workflow_dispatch: @@ -40,7 +40,7 @@ jobs: - name: Installed package smoke run: | - WHEEL="$(ls dist/trialmatchai-*.whl | head -n 1)" + WHEEL="$(ls "$PWD"/dist/trialmatchai-*.whl | head -n 1)" mkdir -p /tmp/trialmatchai-installed-smoke cd /tmp/trialmatchai-installed-smoke uv run --python 3.11 --isolated --with "$WHEEL" python - <<'PY' @@ -69,3 +69,49 @@ jobs: - name: Dependency audit # vLLM 0.23 pins torch 2.11.0; CVE-2025-3000 has no fixed version listed. run: uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 + + ml-extras-smoke: + # Installs the optional ML extras (CPU-only) and imports the local-model + # surface that the default job never touches, so a broken import or wrong + # transformers/gliner API call is caught instead of shipping silently. + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install uv + uses: astral-sh/setup-uv@v5 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install with entity extra (CPU) + run: uv sync --extra entity + + - name: Import ML surface + run: | + uv run python - <<'PY' + import importlib + + # The entity extra's heavy libs must import cleanly in the resolved + # environment (catches a bad transformers API or a torch pin conflict). + for lib in ("torch", "transformers", "gliner", "gliner2"): + importlib.import_module(lib) + print(f"imported {lib}") + + # The package's local-model modules must import with extras present. + modules = [ + "trialmatchai.entities.recognizers", + "trialmatchai.models.embedding.text_embedder", + "trialmatchai.models.llm.llm_loader", + "trialmatchai.models.llm.llm_reranker", + "trialmatchai.matching.eligibility_reasoning", + "trialmatchai.matching.eligibility_reasoning_vllm", + ] + for name in modules: + importlib.import_module(name) + print(f"imported {name}") + PY diff --git a/REFACTOR_PLAN.md b/REFACTOR_PLAN.md new file mode 100644 index 00000000..65a053f2 --- /dev/null +++ b/REFACTOR_PLAN.md @@ -0,0 +1,106 @@ +# TrialMatchAI Refactor Plan + +Derived from the comprehensive audit (170 findings → 151 confirmed, 8 uncertain, 11 refuted). +Each phase below is an independently shippable PR. Work proceeds on branch `refactor/audit-fixes` +(or per-PR branches off it). + +## Principles +1. **Safety net before surgery** — CI must exercise the ML surface and characterization tests + must lock current behavior before any behavior-changing PR merges. +2. **One PR = one theme**, independently reviewable and revertable. +3. **Behavior-preserving by default**; behavior-changing items are flagged and validated. +4. **Delete before dedup** — remove dead code before refactoring duplicates. +5. **Re-grep every deletion at edit time**, not just from the audit. + +## Resolved decisions +- **Phenopacket pipeline:** `interop/importers/phenopacket.py` + `interop/narrative.py` are canonical. + Delete `matching/phenopacket_processor.py` wholesale (only caller is its own test — verified). +- **`utils/evaluation.py`:** delete (orphaned, no entry point, no test). +- **Delivery:** this plan is tracked here; execution starts with PR0. + +## PR sequence + +| PR | Theme | Risk | Behavior change | Depends on | +|----|-------|------|-----------------|-----------| +| 0 | Safety net: CI ML-extras job + characterization tests + CI wheel-path fix | low | no | — | +| 1 | 🔴 Eligibility scoring contract (C1): exclusion = hard disqualifier | med | **yes** | 0 | +| 2 | 🔴 `models/llm/_common.py` + reranker hardening (C2 + padding/attn/dtype/device) | med | **yes (correctness)** | 0 | +| 3 | Dead-code sweep #1: whole modules (evaluation, embedders, regex tree, phenopacket) | low | no | 0 | +| 4 | Dead-code sweep #2: symbols/params/config/shims | low | no | 0 | +| 5 | OMOP importer: float/sanitized id join + groupby perf | med | **yes (recovers dropped records)** | 0 | +| 6 | Retrieval/indexing: restore fields, NCT sidecar filter, fallback WHERE, create_query | med | **yes (re-index required)** | 0 | +| 7 | Deduplication: BaseTrialProcessor, build_embedder, flatten_text, get_synonyms | med | no | 1,3,4 | +| 8 | Performance: lazy HF model under vLLM, precompute lancedb records | low | no | 2,5 | +| 9 | Hygiene: logging, broad excepts, packaging/deps, 8 uncertain findings | low | no | all | + +Critical path: `0 → {1,2,5,6} → {3,4} → 7 → 8 → 9`. + +## Per-PR detail + +### PR0 — Safety net +- CI: add a Linux job that runs `uv sync --extra entity` and smoke-imports the ML modules + (`entities.recognizers`, `models.embedding.text_embedder`, `models.llm.llm_loader`, + `models.llm.llm_reranker`, `matching.eligibility_reasoning_vllm`). +- CI: fix the installed-smoke wheel path (`ls "$PWD"/dist/...`) so `$WHEEL` survives the `cd`. +- Tests: characterization test for `score_trial` (current behavior) + `xfail` tests encoding the + desired post-PR1 contract (a Violated exclusion hard-disqualifies). PR1 flips xfail→pass. +- Note: OMOP (PR5) and indexing (PR6) characterization tests are added at the start of those PRs, + immediately before their changes. + +### PR1 — Eligibility scoring contract (C1) +- `trial_ranker.score_trial`: score inclusion and exclusion separately; **any `Violated` exclusion + is a hard disqualifier** (ranks below all eligible trials). Remove impossible labels + (`Not Violated`/`Violated` from inclusion, `Met` from exclusion) from both eligibility_reasoning + prompt calls. Document the scoring contract. +- Update `test_score_trial_basic` (currently encodes the buggy averaging) and flip PR0's xfail tests. +- **Behavior change:** ranking order — validate against a labeled trial set. + +### PR2 — LLM `_common.py` + reranker hardening +- New `models/llm/_common.py`: `load_llm_dependencies`, `resolve_cuda_device`, + `build_4bit_quant_config`, `select_attn_impl` (flash-attn probe → `sdpa`). +- Rewrite `llm_reranker.py` on it: device pinning (C2), `padding_side='left'` + pad token, + sdpa fallback, dtype-from-config, `device:int` coercion, honest concurrency. +- Refactor `llm_loader.py` to reuse the helpers. + +### PR3 — Dead-code sweep #1 (whole modules) +Delete (re-grep first): `utils/evaluation.py`, `models/embedding/query_embedder.py`, +`models/embedding/sentence_embedder.py`, `preprocessing/regex/` tree (+ `pyproject` package-data + +`config_loader` whitelist), `matching/phenopacket_processor.py` (+ its test). Resolves the +phenopacket ontology bug, dead summarizer, always-true guards, `truncate` typo, and duplicate +pipeline by deletion. + +### PR4 — Dead-code sweep #2 (symbols/params/config) +Remove `recognizers.with_schema_threshold`, `types.to_index_entity`, `retry.with_retries`, +`interop` `EvidenceSpan`/`Provenance.raw_text_span`/`all_facts`, `narrative` `style='audit'`, +`CompatibilityEntityAnnotator`, `annotator` `retries`/`delay`, dead settings (`cot`, +`LLM_reranker`, `TokenizerSettings`, `entity_extraction.threshold`, `max_text_score`, +`rerank_criteria.queries`). + +### PR5 — OMOP importer +Join on raw `person_id`; normalize `'1.0'→'1'`; group child tables by `person_id` once (kills N+1); +replace `iterrows` with `itertuples`/indexed dict. Test: null `person_id` in a child table no longer +drops records. + +### PR6 — Retrieval/indexing correctness +Restore `detailed_description` + `official_title` in `prepare_trial_document`; filter +`load_trial_data` to `NCT*` (or trials subdir); thread `where` into `_scan_rows` fallback; resolve +`create_query` dead keys + age semantics. **Requires LanceDB trial index rebuild after merge.** + +### PR7 — Deduplication +`BaseTrialProcessor` with abstract `_generate_batch` (HF + vLLM override only that); `build_embedder(cfg)` +replacing 4 copy-pasted blocks; one canonical `flatten_text`/`clean_text`; shared `get_synonyms`. + +### PR8 — Performance +Lazy-load HF CoT model only when `cot_backend != 'vllm'`; precompute +`build_trial_record`/`build_criteria_record` instead of per-row at query time. + +### PR9 — Hygiene & uncertain triage +Centralize logging (no import-time `basicConfig`); replace broad bare-`except` in `import_patient` and +pass the embedder so semantic linking isn't silently disabled; drop 5 unused deps, dedupe +`torch`/`transformers` pins via shared base extra, gitignore `egg-info`/`__pycache__`/`dist`; +investigate & resolve the 8 uncertain findings (LanceDB status/age/sex push-down, vLLM sampling under +greedy, unused `query_vector`). + +## Behavior-change register (validate, don't just unit-test) +PRs **1, 5, 6** change pipeline outputs. Diff before/after on a fixed patient+trial set: +ranking order (PR1), patient record counts (PR5), retrieval recall after re-index (PR6). diff --git a/tests/test_trial_ranker_scoring_contract.py b/tests/test_trial_ranker_scoring_contract.py new file mode 100644 index 00000000..f37c9b58 --- /dev/null +++ b/tests/test_trial_ranker_scoring_contract.py @@ -0,0 +1,61 @@ +"""Characterization + contract tests for trial_ranker.score_trial. + +PR0 (safety net): these lock the CURRENT behavior of the scorer and pin the +DESIRED behavior of the eligibility-scoring contract as an xfail. PR1 fixes +score_trial so that a Violated exclusion becomes a hard disqualifier; at that +point the xfail below flips to pass and the characterization test is updated. + +See REFACTOR_PLAN.md (PR1) and audit finding C1. +""" + +import pytest + +from trialmatchai.matching.trial_ranker import rank_trials, score_trial + +# A trial the patient is clearly ineligible for: every inclusion is Met, but an +# exclusion criterion is Violated. +TRIAL_VIOLATED_EXCLUSION = { + "TrialID": "VIOLATED", + "Inclusion_Criteria_Evaluation": [ + {"Classification": "Met"}, + {"Classification": "Met"}, + ], + "Exclusion_Criteria_Evaluation": [ + {"Classification": "Not Violated"}, + {"Classification": "Violated"}, + ], +} + +# A trial the patient partially matches and violates no exclusions. +TRIAL_PARTIAL_ELIGIBLE = { + "TrialID": "PARTIAL", + "Inclusion_Criteria_Evaluation": [ + {"Classification": "Met"}, + {"Classification": "Not Met"}, + ], + "Exclusion_Criteria_Evaluation": [], +} + + +def test_characterization_violated_exclusion_only_partially_penalized(): + """CURRENT behavior: a Violated exclusion is averaged away rather than + disqualifying. This documents the C1 bug and will be updated in PR1.""" + # inclusion_ratio = (2 - 0) / 2 = 1.0 + # exclusion_ratio = (1 - 1) / 2 = 0.0 (Not Violated positive, Violated negative) + # score = (1.0 + 0.0) / 2 = 0.5 + assert score_trial(TRIAL_VIOLATED_EXCLUSION) == 0.5 + + +def test_characterization_violated_exclusion_outranks_eligible_trial(): + """CURRENT (buggy) ranking: the trial with a Violated exclusion (0.5) ranks + ABOVE the violation-free partial match (0.0).""" + ranked = rank_trials([TRIAL_PARTIAL_ELIGIBLE, TRIAL_VIOLATED_EXCLUSION]) + assert ranked[0]["TrialID"] == "VIOLATED" + + +@pytest.mark.xfail(reason="PR1: a Violated exclusion must hard-disqualify", strict=True) +def test_contract_violated_exclusion_ranks_below_eligible(): + """DESIRED contract (PR1): any trial with a Violated exclusion ranks strictly + below any trial that violates no exclusions.""" + ranked = rank_trials([TRIAL_VIOLATED_EXCLUSION, TRIAL_PARTIAL_ELIGIBLE]) + assert ranked[-1]["TrialID"] == "VIOLATED" From 611ffa666296011902b655b9c9ae86f3c86410cc Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 09:37:57 +0200 Subject: [PATCH 11/64] =?UTF-8?q?PR1:=20eligibility=20scoring=20=E2=80=94?= =?UTF-8?q?=20a=20violated=20exclusion=20hard-disqualifies=20(C1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously score_trial averaged the inclusion ratio with the exclusion ratio, so a trial whose exclusion criteria were Violated could still outrank an eligible trial (audit finding C1). The classification lists also counted impossible labels (inclusion can never be "Not Violated", exclusion can never be "Met"). score_trial now: - returns DISQUALIFIED_SCORE (-1.0) if any exclusion is "Violated", so it ranks strictly below every eligible trial; - otherwise scores eligible trials in [0, 1] by the fraction of decided inclusion criteria (Met or Not Met) that are Met. The prompts already constrain the label sets correctly, so only the scorer changed; the duplicated prompt text is addressed in PR7. Contract tests (disqualification, met-fraction, ranking order) replace the prior xfail. Co-Authored-By: Claude Opus 4.8 --- src/trialmatchai/matching/trial_ranker.py | 68 ++++++++--------- tests/test_trial_ranker_pytest.py | 5 +- tests/test_trial_ranker_scoring_contract.py | 81 +++++++++++++-------- 3 files changed, 84 insertions(+), 70 deletions(-) diff --git a/src/trialmatchai/matching/trial_ranker.py b/src/trialmatchai/matching/trial_ranker.py index deb9c8d9..1c1fceae 100644 --- a/src/trialmatchai/matching/trial_ranker.py +++ b/src/trialmatchai/matching/trial_ranker.py @@ -22,46 +22,38 @@ def load_trial_data(json_folder: str) -> List[Dict]: return trial_data +# Eligibility scoring contract (see REFACTOR_PLAN.md PR1, audit finding C1). +# +# The eligibility model classifies each inclusion criterion as one of +# {Met, Not Met, Unclear, Irrelevant} and each exclusion criterion as one of +# {Violated, Not Violated, Unclear, Irrelevant}. A single Violated exclusion +# makes the patient ineligible, so it HARD-DISQUALIFIES the trial rather than +# being averaged against the inclusion score (the previous behavior, which let a +# violated trial outrank an eligible one). Eligible trials are ranked in [0, 1] +# by the fraction of decided inclusion criteria (Met or Not Met) that are Met. +DISQUALIFIED_SCORE = -1.0 + +_DECIDED_INCLUSION = {"Met", "Not Met"} + + def score_trial(trial: Dict) -> float: - def calculate_ratio( - criteria_list, positive_classifications, negative_classifications - ): - criteria_to_exclude = ["Irrelevant", "Unclear"] - criteria_list = [ - c - for c in criteria_list - if c.get("Classification") not in criteria_to_exclude - ] - total_criteria = len(criteria_list) - if total_criteria == 0: - return 0.0 - positive_count = sum( - 1 - for c in criteria_list - if c.get("Classification") in positive_classifications - ) - negative_count = sum( - 1 - for c in criteria_list - if c.get("Classification") in negative_classifications - ) - penalty_factor_negative = 1.0 - reward_factor_positive = 1.0 - score = ( - reward_factor_positive * positive_count - - penalty_factor_negative * negative_count - ) / total_criteria - return score + inclusion = [ + c.get("Classification") for c in trial.get("Inclusion_Criteria_Evaluation", []) + ] + exclusion = [ + c.get("Classification") for c in trial.get("Exclusion_Criteria_Evaluation", []) + ] + + # Any violated exclusion is a hard disqualifier: rank below all eligible trials. + if "Violated" in exclusion: + return DISQUALIFIED_SCORE - inclusion_criteria = trial.get("Inclusion_Criteria_Evaluation", []) - exclusion_criteria = trial.get("Exclusion_Criteria_Evaluation", []) - inclusion_ratio = calculate_ratio( - inclusion_criteria, ["Met", "Not Violated"], ["Violated", "Not Met"] - ) - exclusion_ratio = calculate_ratio( - exclusion_criteria, ["Not Violated", "Met"], ["Violated"] - ) - return (inclusion_ratio + exclusion_ratio) / 2 + # Eligible: score by the fraction of decided inclusion criteria that are Met. + decided = [c for c in inclusion if c in _DECIDED_INCLUSION] + if not decided: + return 0.0 + met = sum(1 for c in decided if c == "Met") + return met / len(decided) def rank_trials(trial_data: List[Dict]) -> List[Dict]: diff --git a/tests/test_trial_ranker_pytest.py b/tests/test_trial_ranker_pytest.py index 16265672..aba7fc42 100644 --- a/tests/test_trial_ranker_pytest.py +++ b/tests/test_trial_ranker_pytest.py @@ -9,19 +9,18 @@ def test_score_trial_basic(): + # A violated exclusion hard-disqualifies the trial regardless of inclusions. trial = { "Inclusion_Criteria_Evaluation": [ {"Classification": "Met"}, {"Classification": "Met"}, - {"Classification": "Violated"}, ], "Exclusion_Criteria_Evaluation": [ {"Classification": "Not Violated"}, {"Classification": "Violated"}, ], } - score = score_trial(trial) - assert score == ((2 - 1) / 3 + (1 - 1) / 2) / 2 + assert score_trial(trial) == -1.0 def test_rank_trials_orders_by_score(): diff --git a/tests/test_trial_ranker_scoring_contract.py b/tests/test_trial_ranker_scoring_contract.py index f37c9b58..ab25c7ed 100644 --- a/tests/test_trial_ranker_scoring_contract.py +++ b/tests/test_trial_ranker_scoring_contract.py @@ -1,19 +1,18 @@ -"""Characterization + contract tests for trial_ranker.score_trial. +"""Contract tests for trial_ranker.score_trial (audit finding C1, PR1). -PR0 (safety net): these lock the CURRENT behavior of the scorer and pin the -DESIRED behavior of the eligibility-scoring contract as an xfail. PR1 fixes -score_trial so that a Violated exclusion becomes a hard disqualifier; at that -point the xfail below flips to pass and the characterization test is updated. - -See REFACTOR_PLAN.md (PR1) and audit finding C1. +A Violated exclusion hard-disqualifies a trial: it must rank strictly below every +trial that violates no exclusion. Eligible trials are scored in [0, 1] by the +fraction of decided inclusion criteria (Met or Not Met) that are Met. +See REFACTOR_PLAN.md (PR1). """ -import pytest - -from trialmatchai.matching.trial_ranker import rank_trials, score_trial +from trialmatchai.matching.trial_ranker import ( + DISQUALIFIED_SCORE, + rank_trials, + score_trial, +) -# A trial the patient is clearly ineligible for: every inclusion is Met, but an -# exclusion criterion is Violated. +# Ineligible: every inclusion is Met, but an exclusion criterion is Violated. TRIAL_VIOLATED_EXCLUSION = { "TrialID": "VIOLATED", "Inclusion_Criteria_Evaluation": [ @@ -26,7 +25,7 @@ ], } -# A trial the patient partially matches and violates no exclusions. +# Eligible partial match: half the decided inclusions are Met, no violations. TRIAL_PARTIAL_ELIGIBLE = { "TrialID": "PARTIAL", "Inclusion_Criteria_Evaluation": [ @@ -36,26 +35,50 @@ "Exclusion_Criteria_Evaluation": [], } +# Eligible but a poor match: all inclusions Not Met, still violates nothing. +TRIAL_ALL_NOT_MET = { + "TrialID": "NOT_MET", + "Inclusion_Criteria_Evaluation": [ + {"Classification": "Not Met"}, + {"Classification": "Not Met"}, + ], + "Exclusion_Criteria_Evaluation": [{"Classification": "Not Violated"}], +} -def test_characterization_violated_exclusion_only_partially_penalized(): - """CURRENT behavior: a Violated exclusion is averaged away rather than - disqualifying. This documents the C1 bug and will be updated in PR1.""" - # inclusion_ratio = (2 - 0) / 2 = 1.0 - # exclusion_ratio = (1 - 1) / 2 = 0.0 (Not Violated positive, Violated negative) - # score = (1.0 + 0.0) / 2 = 0.5 - assert score_trial(TRIAL_VIOLATED_EXCLUSION) == 0.5 +def test_violated_exclusion_is_disqualified(): + assert score_trial(TRIAL_VIOLATED_EXCLUSION) == DISQUALIFIED_SCORE -def test_characterization_violated_exclusion_outranks_eligible_trial(): - """CURRENT (buggy) ranking: the trial with a Violated exclusion (0.5) ranks - ABOVE the violation-free partial match (0.0).""" - ranked = rank_trials([TRIAL_PARTIAL_ELIGIBLE, TRIAL_VIOLATED_EXCLUSION]) - assert ranked[0]["TrialID"] == "VIOLATED" +def test_eligible_scored_by_met_fraction(): + assert score_trial(TRIAL_PARTIAL_ELIGIBLE) == 0.5 + assert score_trial(TRIAL_ALL_NOT_MET) == 0.0 + assert score_trial( + {"Inclusion_Criteria_Evaluation": [{"Classification": "Met"}]} + ) == 1.0 -@pytest.mark.xfail(reason="PR1: a Violated exclusion must hard-disqualify", strict=True) -def test_contract_violated_exclusion_ranks_below_eligible(): - """DESIRED contract (PR1): any trial with a Violated exclusion ranks strictly - below any trial that violates no exclusions.""" + +def test_unclear_and_irrelevant_inclusions_are_ignored(): + # Only Met/Not Met count toward the fraction; Unclear/Irrelevant are excluded. + trial = { + "Inclusion_Criteria_Evaluation": [ + {"Classification": "Met"}, + {"Classification": "Unclear"}, + {"Classification": "Irrelevant"}, + ], + "Exclusion_Criteria_Evaluation": [], + } + assert score_trial(trial) == 1.0 + + +def test_violated_exclusion_ranks_below_eligible(): ranked = rank_trials([TRIAL_VIOLATED_EXCLUSION, TRIAL_PARTIAL_ELIGIBLE]) + assert ranked[0]["TrialID"] == "PARTIAL" + assert ranked[-1]["TrialID"] == "VIOLATED" + + +def test_disqualified_ranks_below_even_a_zero_score_eligible_trial(): + # An all-Not-Met eligible trial (0.0) still outranks a disqualified one (-1.0). + ranked = rank_trials([TRIAL_VIOLATED_EXCLUSION, TRIAL_ALL_NOT_MET]) + assert ranked[0]["TrialID"] == "NOT_MET" assert ranked[-1]["TrialID"] == "VIOLATED" From 008b0800866af46123525d1a53923be04dcd1eed Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 09:45:31 +0200 Subject: [PATCH 12/64] PR2: shared models/llm/_common.py + reranker hardening (C2 + bugs) The reranker re-derived device/dtype/attention setup independently of llm_loader and got several wrong. Extract the shared logic into models/llm/_common.py and rebuild both loaders on it. Reranker fixes (audit C2 + highs/mediums): - device_map pinned to the resolved device instead of "auto", so the model's first layer lives where inputs are moved (fixes multi-GPU "tensors on different devices" crash); - left padding + pad token via configure_decoder_tokenizer, so logits[:, -1, :] reads the last real token, not a PAD position; - FlashAttention-2 -> SDPA fallback instead of hardcoding flash_attn; - compute dtype defaults to bf16/fp16 by capability instead of fp16; - device accepts int or "auto" (no silent coercion of non-ints to GPU 0); - dropped the ThreadPoolExecutor + model_lock that serialized anyway. llm_loader now reuses the same helpers. Stub-based unit tests cover the tokenizer/device/dtype/attention logic without the llm extra. Co-Authored-By: Claude Opus 4.8 --- src/trialmatchai/models/llm/_common.py | 162 ++++++++++++++++++++ src/trialmatchai/models/llm/llm_loader.py | 105 ++++--------- src/trialmatchai/models/llm/llm_reranker.py | 115 ++++++-------- tests/test_llm_common.py | 104 +++++++++++++ 4 files changed, 337 insertions(+), 149 deletions(-) create mode 100644 src/trialmatchai/models/llm/_common.py create mode 100644 tests/test_llm_common.py diff --git a/src/trialmatchai/models/llm/_common.py b/src/trialmatchai/models/llm/_common.py new file mode 100644 index 00000000..3f92abbb --- /dev/null +++ b/src/trialmatchai/models/llm/_common.py @@ -0,0 +1,162 @@ +"""Shared helpers for the optional LLM model loaders (llm_loader, llm_reranker). + +The heavy dependencies (torch/transformers/peft) are imported lazily by +``load_llm_dependencies`` so this module imports cleanly without the ``llm`` +extra installed. The torch-dependent helpers take ``torch`` as an argument and +are otherwise pure, which keeps them unit-testable with a stub. +""" + +from __future__ import annotations + +from typing import Any, NamedTuple, Optional + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +class LLMDeps(NamedTuple): + torch: Any + torch_functional: Any + peft_model: Any + auto_model: Any + auto_tokenizer: Any + bnb_config: Any + + +def load_llm_dependencies() -> LLMDeps: + """Import the optional LLM stack, raising a clear error when it is missing.""" + try: + import torch + import torch.nn.functional as torch_functional + from peft import PeftModel + from transformers import ( + AutoModelForCausalLM, + AutoTokenizer, + BitsAndBytesConfig, + ) + except Exception as exc: # pragma: no cover - exercised in lean installs + raise RuntimeError( + "LLM model loading requires the optional `llm` dependencies " + "(`uv sync --extra llm`)." + ) from exc + return LLMDeps( + torch, + torch_functional, + PeftModel, + AutoModelForCausalLM, + AutoTokenizer, + BitsAndBytesConfig, + ) + + +def resolve_cuda_device( + torch: Any, device: Any, *, label: str = "LLM" +) -> tuple[str, Optional[int]]: + """Resolve a requested device to ``(device_str, cuda_index)``. + + Validates the requested GPU index (accepting ``int`` or ``"auto"``), selects + it via ``set_device``, and falls back to GPU 0 with a warning on anything + invalid. Returns ``("cpu", None)`` when CUDA is unavailable. + """ + if not torch.cuda.is_available(): + logger.warning("%s: CUDA not available; using CPU.", label) + return "cpu", None + + cuda_count = torch.cuda.device_count() + if device == "auto" or device is None: + idx = 0 + elif isinstance(device, bool): # bool is an int subclass; reject it explicitly + logger.warning("%s: invalid device %r; using 0.", label, device) + idx = 0 + elif isinstance(device, int): + idx = device + else: + try: + idx = int(device) + except (TypeError, ValueError): + logger.warning("%s: non-numeric device %r; using 0.", label, device) + idx = 0 + + if idx < 0 or idx >= cuda_count: + logger.warning( + "%s: requested CUDA device %r invalid; using 0 (num_gpus=%d).", + label, + device, + cuda_count, + ) + idx = 0 + + try: + torch.cuda.set_device(idx) + except Exception as e: + logger.warning( + "%s: torch.cuda.set_device(%d) failed: %s; using 0.", label, idx, e + ) + idx = 0 + torch.cuda.set_device(idx) + return f"cuda:{idx}", idx + + +def select_compute_dtype(torch: Any, use_cuda: bool) -> Any: + """bfloat16 when supported, else float16 on GPU, else float32 on CPU.""" + if use_cuda and torch.cuda.is_bf16_supported(): + return torch.bfloat16 + if use_cuda: + return torch.float16 + return torch.float32 + + +def select_attn_impl(torch: Any, cuda_index: Optional[int]) -> Optional[str]: + """Prefer FlashAttention-2 when installed and supported, else SDPA. + + Returns ``None`` on CPU (let transformers pick its default). + """ + if cuda_index is None: + return None + attn_impl = "sdpa" + try: + import flash_attn # noqa: F401 + + major, minor = torch.cuda.get_device_capability(cuda_index) + if (major * 10 + minor) >= 75: + attn_impl = "flash_attention_2" + logger.info("Using FlashAttention-2.") + else: + logger.info("FlashAttention-2 unsupported on this GPU; using SDPA.") + except Exception: + logger.info("flash-attn not available; using SDPA.") + return attn_impl + + +def build_4bit_quant_config( + bnb_config: Any, + *, + load_in_4bit: bool, + double_quant: bool = True, + quant_type: str = "nf4", + compute_dtype: Any = None, +) -> Any: + """Build a BitsAndBytesConfig; a no-op config when ``load_in_4bit`` is False.""" + if not load_in_4bit: + return bnb_config(load_in_4bit=False) + return bnb_config( + load_in_4bit=True, + bnb_4bit_use_double_quant=double_quant, + bnb_4bit_quant_type=quant_type, + bnb_4bit_compute_dtype=compute_dtype, + ) + + +def configure_decoder_tokenizer(tokenizer: Any) -> Any: + """Left-pad/-truncate a decoder-only tokenizer and ensure a pad token exists. + + Decoder-only next-token prediction reads ``logits[:, -1, :]``. With right + padding, that position is a PAD token for the shorter rows in a batch, + producing wrong probabilities — so left padding is required for correctness. + """ + tokenizer.padding_side = "left" + tokenizer.truncation_side = "left" + if tokenizer.pad_token is None: + tokenizer.pad_token = tokenizer.eos_token + return tokenizer diff --git a/src/trialmatchai/models/llm/llm_loader.py b/src/trialmatchai/models/llm/llm_loader.py index 1aea7f33..0930a0e4 100644 --- a/src/trialmatchai/models/llm/llm_loader.py +++ b/src/trialmatchai/models/llm/llm_loader.py @@ -1,5 +1,13 @@ from typing import Any, Tuple +from trialmatchai.models.llm._common import ( + build_4bit_quant_config, + configure_decoder_tokenizer, + load_llm_dependencies, + resolve_cuda_device, + select_attn_impl, + select_compute_dtype, +) from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -7,93 +15,49 @@ def load_model_and_tokenizer(model_config: dict, device: int) -> Tuple[Any, Any]: """Load a model and tokenizer with safe device handling and optional 4-bit.""" - torch, peft_model, auto_model, auto_tokenizer, bits_and_bytes_config = ( - _load_llm_dependencies() + deps = load_llm_dependencies() + torch = deps.torch + + device_str, cuda_index = resolve_cuda_device( + torch, device, label="load_model_and_tokenizer" ) - use_cuda = torch.cuda.is_available() - device_str = "cuda" if use_cuda else "cpu" - quant_config = None - attn_impl = None - # Select best dtype - compute_dtype = torch.float32 - if use_cuda and torch.cuda.is_bf16_supported(): - compute_dtype = torch.bfloat16 - elif use_cuda: - compute_dtype = torch.float16 + use_cuda = cuda_index is not None + compute_dtype = select_compute_dtype(torch, use_cuda) + attn_impl = select_attn_impl(torch, cuda_index) if use_cuda: - cuda_count = torch.cuda.device_count() - idx = int(device) if isinstance(device, int) else 0 - if idx < 0 or idx >= cuda_count: - logger.warning( - f"Requested CUDA device {device} invalid; using 0 (num_gpus={cuda_count})." - ) - idx = 0 - try: - torch.cuda.set_device(idx) - except Exception as e: - logger.warning( - f"torch.cuda.set_device({idx}) failed: {e}. Falling back to 0." - ) - idx = 0 - torch.cuda.set_device(idx) - device_str = f"cuda:{idx}" - - # Prefer FlashAttention-2 if available, else SDPA - attn_impl = "sdpa" - try: - import flash_attn # noqa: F401 - - major, minor = torch.cuda.get_device_capability(idx) - if (major * 10 + minor) >= 75: - attn_impl = "flash_attention_2" - logger.info("Using FlashAttention-2.") - else: - logger.info("FlashAttention-2 unsupported on this GPU; using SDPA.") - except Exception: - logger.info("flash-attn not available; using SDPA.") - - quant_config = bits_and_bytes_config( + quant_config = build_4bit_quant_config( + deps.bnb_config, load_in_4bit=bool(model_config["quantization"]["load_in_4bit"]), - bnb_4bit_use_double_quant=bool( + double_quant=bool( model_config["quantization"]["bnb_4bit_use_double_quant"] ), - bnb_4bit_quant_type=str( - model_config["quantization"]["bnb_4bit_quant_type"] - ), - bnb_4bit_compute_dtype=compute_dtype, + quant_type=str(model_config["quantization"]["bnb_4bit_quant_type"]), + compute_dtype=compute_dtype, ) logger.info(f"Loading model on {device_str} with 4-bit quantization.") else: logger.warning( "CUDA not available; loading model on CPU without 4-bit quantization." ) - device_str = "cpu" - quant_config = bits_and_bytes_config(load_in_4bit=False) + quant_config = build_4bit_quant_config(deps.bnb_config, load_in_4bit=False) trust_remote_code = bool(model_config.get("trust_remote_code", False)) revision = model_config.get("base_model_revision") - tokenizer = auto_tokenizer.from_pretrained( + tokenizer = deps.auto_tokenizer.from_pretrained( model_config["base_model"], revision=revision, use_fast=True, - padding_side="left", trust_remote_code=trust_remote_code, ) - # Always left-pad decoder-only models; keep most recent tokens if truncation occurs. - tokenizer.padding_side = "left" - tokenizer.truncation_side = "left" - tokenizer.pad_token = tokenizer.eos_token - if attn_impl == "flash_attention_2": - logger.info( - "Using FlashAttention-2; keeping padding_side='left' for decoder-only models." - ) + # Always left-pad decoder-only models; keep most recent tokens on truncation. + configure_decoder_tokenizer(tokenizer) - model = auto_model.from_pretrained( + model = deps.auto_model.from_pretrained( model_config["base_model"], revision=revision, trust_remote_code=trust_remote_code, - torch_dtype=compute_dtype if use_cuda else torch.float32, + torch_dtype=compute_dtype, device_map=device_str, attn_implementation=attn_impl, quantization_config=quant_config, @@ -105,7 +69,7 @@ def load_model_and_tokenizer(model_config: dict, device: int) -> Tuple[Any, Any] except Exception: pass - model = peft_model.from_pretrained( + model = deps.peft_model.from_pretrained( model, model_config["cot_adapter_path"], device_map=device_str ) @@ -123,16 +87,3 @@ def load_model_and_tokenizer(model_config: dict, device: int) -> Tuple[Any, Any] logger.warning("Model is not an instance of torch.nn.Module; skipping eval.") logger.info(f"Model loaded on {device_str}.") return model, tokenizer # type: ignore[return-value] - - -def _load_llm_dependencies() -> tuple[Any, Any, Any, Any, Any]: - try: - import torch - from peft import PeftModel - from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig - except Exception as exc: # pragma: no cover - exercised in lean installs - raise RuntimeError( - "LLM model loading requires the optional `llm` dependencies " - "(`uv sync --extra llm`)." - ) from exc - return torch, PeftModel, AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig diff --git a/src/trialmatchai/models/llm/llm_reranker.py b/src/trialmatchai/models/llm/llm_reranker.py index 1eb08771..18e1d636 100644 --- a/src/trialmatchai/models/llm/llm_reranker.py +++ b/src/trialmatchai/models/llm/llm_reranker.py @@ -1,9 +1,15 @@ import re -import threading import unicodedata -from concurrent.futures import ThreadPoolExecutor, as_completed from typing import Any, Dict, List, Optional +from trialmatchai.models.llm._common import ( + build_4bit_quant_config, + configure_decoder_tokenizer, + load_llm_dependencies, + resolve_cuda_device, + select_attn_impl, + select_compute_dtype, +) from trialmatchai.utils.logging_config import setup_logging from tqdm import tqdm @@ -15,53 +21,39 @@ def __init__( self, model_path: str, adapter_path: Optional[str] = None, - device: int = 0, + device: Any = 0, torch_dtype: Any | None = None, batch_size: int = 8, revision: Optional[str] = None, trust_remote_code: bool = False, ): - ( - self._torch, - self._torch_functional, - self._peft_model, - self._auto_model, - self._auto_tokenizer, - self._bits_and_bytes_config, - ) = _load_llm_dependencies() + self._deps = load_llm_dependencies() + self._torch = self._deps.torch + self._torch_functional = self._deps.torch_functional self.model_path = model_path self.adapter_path = adapter_path - self.torch_dtype = torch_dtype or self._torch.float16 self.batch_size = batch_size self.revision = revision self.trust_remote_code = trust_remote_code - # Resolve device string - if self._torch.cuda.is_available(): - cuda_count = self._torch.cuda.device_count() - idx = int(device) if isinstance(device, int) else 0 - if idx < 0 or idx >= cuda_count: - logger.warning( - f"LLMReranker: requested CUDA device {device} invalid; using 0 (num_gpus={cuda_count})." - ) - idx = 0 - self.device_str = f"cuda:{idx}" - # Ensure Accelerate/HF loaders use the selected GPU when device_map='auto' - try: - self._torch.cuda.set_device(idx) - except Exception as e: - logger.warning(f"Could not set CUDA device to {idx}: {e}") - else: - logger.warning("LLMReranker: CUDA not available; using CPU.") - self.device_str = "cpu" - self.tokenizer = self._auto_tokenizer.from_pretrained( + # Validate/select the GPU once (handles int or "auto"); pins the device so + # device_map below is consistent with where inputs are moved. + self.device_str, self._cuda_index = resolve_cuda_device( + self._torch, device, label="LLMReranker" + ) + use_cuda = self._cuda_index is not None + self.torch_dtype = torch_dtype or select_compute_dtype(self._torch, use_cuda) + + self.tokenizer = self._deps.auto_tokenizer.from_pretrained( self.model_path, revision=self.revision, trust_remote_code=self.trust_remote_code, ) + # Left padding is required: process_batch reads logits[:, -1, :], which + # must be the last real token, not a right-pad position. + configure_decoder_tokenizer(self.tokenizer) self._initialize_token_ids() self.model = self.load_model() - self.model_lock = threading.Lock() def _initialize_token_ids(self): responses = ["Yes", "No"] @@ -74,28 +66,31 @@ def _initialize_token_ids(self): ] def load_model(self): - use_cuda = self.device_str.startswith("cuda") + use_cuda = self._cuda_index is not None quant_config = ( - self._bits_and_bytes_config( + build_4bit_quant_config( + self._deps.bnb_config, load_in_4bit=True, - bnb_4bit_use_double_quant=True, - bnb_4bit_quant_type="nf4", - bnb_4bit_compute_dtype=self.torch_dtype, + double_quant=True, + quant_type="nf4", + compute_dtype=self.torch_dtype, ) if use_cuda else None ) - model = self._auto_model.from_pretrained( + model = self._deps.auto_model.from_pretrained( self.model_path, revision=self.revision, torch_dtype=self.torch_dtype if use_cuda else self._torch.float32, quantization_config=quant_config, - device_map="auto" if use_cuda else None, - attn_implementation="flash_attention_2" if use_cuda else None, + # Pin to the selected GPU (not "auto"): inputs are moved to + # self.device_str, so the model's first layer must live there too. + device_map=self.device_str if use_cuda else None, + attn_implementation=select_attn_impl(self._torch, self._cuda_index), trust_remote_code=self.trust_remote_code, ) if self.adapter_path: - model = self._peft_model.from_pretrained(model, self.adapter_path) + model = self._deps.peft_model.from_pretrained(model, self.adapter_path) model.eval() return model @@ -132,9 +127,8 @@ def process_batch(self, batch: List[tuple]) -> List[Dict]: batch_prompts.append(prompt) inputs = self.tokenizer(batch_prompts, return_tensors="pt", padding=True) inputs = {k: v.to(self.device_str) for k, v in inputs.items()} - with self.model_lock: - with self._torch.no_grad(): - outputs = self.model(**inputs) + with self._torch.no_grad(): + outputs = self.model(**inputs) logits = outputs.logits[:, -1, :] probabilities = self._torch_functional.softmax(logits, dim=-1) applicable_probs = probabilities[:, self.applicable_token_id].tolist() @@ -144,36 +138,13 @@ def process_batch(self, batch: List[tuple]) -> List[Dict]: ] def rank_pairs(self, patient_trial_pairs: List[tuple]) -> List[Dict]: + # Inference on a single device is serial regardless; iterate batches + # directly rather than behind a thread pool + lock that serialized anyway. batches = [ patient_trial_pairs[i : i + self.batch_size] for i in range(0, len(patient_trial_pairs), self.batch_size) ] - results = [] - with ThreadPoolExecutor(max_workers=4) as executor: - futures = [executor.submit(self.process_batch, batch) for batch in batches] - for future in tqdm( - as_completed(futures), total=len(futures), desc="Processing batches" - ): - results.extend(future.result()) + results: List[Dict] = [] + for batch in tqdm(batches, desc="Reranking batches"): + results.extend(self.process_batch(batch)) return results - - -def _load_llm_dependencies() -> tuple[Any, Any, Any, Any, Any, Any]: - try: - import torch - import torch.nn.functional as torch_functional - from peft import PeftModel - from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig - except Exception as exc: # pragma: no cover - exercised in lean installs - raise RuntimeError( - "LLM reranking requires the optional `llm` dependencies " - "(`uv sync --extra llm`)." - ) from exc - return ( - torch, - torch_functional, - PeftModel, - AutoModelForCausalLM, - AutoTokenizer, - BitsAndBytesConfig, - ) diff --git a/tests/test_llm_common.py b/tests/test_llm_common.py new file mode 100644 index 00000000..d0fd6704 --- /dev/null +++ b/tests/test_llm_common.py @@ -0,0 +1,104 @@ +"""Unit tests for the shared LLM helpers (models/llm/_common.py). + +These lock the correctness fixes from PR2 — left padding, device resolution, +dtype selection — using lightweight stubs so they run without the `llm` extra. +""" + +from trialmatchai.models.llm._common import ( + configure_decoder_tokenizer, + resolve_cuda_device, + select_attn_impl, + select_compute_dtype, +) + + +class FakeTokenizer: + def __init__(self, pad_token=None, eos_token=""): + self.pad_token = pad_token + self.eos_token = eos_token + self.padding_side = "right" + self.truncation_side = "right" + + +class FakeCuda: + def __init__(self, available=True, count=2, bf16=False): + self._available = available + self._count = count + self._bf16 = bf16 + self.selected = None + + def is_available(self): + return self._available + + def device_count(self): + return self._count + + def is_bf16_supported(self): + return self._bf16 + + def set_device(self, idx): + self.selected = idx + + +class FakeTorch: + def __init__(self, **kw): + self.cuda = FakeCuda(**kw) + self.bfloat16 = "bfloat16" + self.float16 = "float16" + self.float32 = "float32" + + +def test_configure_decoder_tokenizer_sets_left_padding_and_pad_token(): + tok = FakeTokenizer(pad_token=None, eos_token="") + configure_decoder_tokenizer(tok) + assert tok.padding_side == "left" + assert tok.truncation_side == "left" + assert tok.pad_token == "" # filled from eos when missing + + +def test_configure_decoder_tokenizer_keeps_existing_pad_token(): + tok = FakeTokenizer(pad_token="", eos_token="") + configure_decoder_tokenizer(tok) + assert tok.pad_token == "" + + +def test_resolve_cuda_device_cpu_when_unavailable(): + torch = FakeTorch(available=False) + assert resolve_cuda_device(torch, 0) == ("cpu", None) + + +def test_resolve_cuda_device_auto_selects_zero(): + torch = FakeTorch(available=True, count=2) + assert resolve_cuda_device(torch, "auto") == ("cuda:0", 0) + assert torch.cuda.selected == 0 + + +def test_resolve_cuda_device_valid_index(): + torch = FakeTorch(available=True, count=2) + assert resolve_cuda_device(torch, 1) == ("cuda:1", 1) + assert torch.cuda.selected == 1 + + +def test_resolve_cuda_device_invalid_index_falls_back_to_zero(): + torch = FakeTorch(available=True, count=2) + assert resolve_cuda_device(torch, 5) == ("cuda:0", 0) + + +def test_resolve_cuda_device_non_numeric_string_falls_back(): + torch = FakeTorch(available=True, count=2) + assert resolve_cuda_device(torch, "gpu0") == ("cuda:0", 0) + + +def test_select_compute_dtype(): + assert select_compute_dtype(FakeTorch(available=True, bf16=True), True) == "bfloat16" + assert select_compute_dtype(FakeTorch(available=True, bf16=False), True) == "float16" + assert select_compute_dtype(FakeTorch(available=False), False) == "float32" + + +def test_select_attn_impl_cpu_is_none(): + assert select_attn_impl(FakeTorch(available=False), None) is None + + +def test_select_attn_impl_gpu_without_flash_attn_is_sdpa(): + # flash_attn is not installed in the base test env, so this falls back. + assert select_attn_impl(FakeTorch(available=True), 0) == "sdpa" From 0f0447058976494266ff67ea524ee3165a9fd52d Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 09:51:13 +0200 Subject: [PATCH 13/64] PR3: remove dead whole modules (~900 lines) Re-grepped each target to confirm zero live references (only auto-generated egg-info/SOURCES.txt and the now-removed test/whitelist referenced them): - utils/evaluation.py: orphaned TREC eval, no caller, no entry point. - models/embedding/query_embedder.py, sentence_embedder.py: vestigial TextEmbedder subclasses nothing constructs. - preprocessing/regex/ tree: regex resource files with no Python consumer (leftovers from the deleted src/Matcher); also drop the package-data globs in pyproject and the "preprocessing" entry in the config_loader resource whitelist. - matching/phenopacket_processor.py (+ its test): superseded by the canonical interop/importers/phenopacket.py + interop/narrative.py path. This deletion also resolves the dead ClinicalSummarizer, the ontology label bug, the always-true temporal guards, the truncate typo, and the duplicate phenopacket pipeline. Co-Authored-By: Claude Opus 4.8 --- pyproject.toml | 2 - src/trialmatchai/config/config_loader.py | 1 - .../matching/phenopacket_processor.py | 395 ------------------ .../models/embedding/query_embedder.py | 24 -- .../models/embedding/sentence_embedder.py | 24 -- src/trialmatchai/preprocessing/__init__.py | 1 - .../preprocessing/regex/__init__.py | 1 - .../regex/exception_regex_patterns.json | 105 ----- .../preprocessing/regex/regex_patterns.json | 193 --------- .../preprocessing/regex/regex_variants.tsv | 52 --- src/trialmatchai/utils/evaluation.py | 322 -------------- tests/test_phenopacket_processor_pytest.py | 13 - 12 files changed, 1133 deletions(-) delete mode 100644 src/trialmatchai/matching/phenopacket_processor.py delete mode 100644 src/trialmatchai/models/embedding/query_embedder.py delete mode 100644 src/trialmatchai/models/embedding/sentence_embedder.py delete mode 100644 src/trialmatchai/preprocessing/__init__.py delete mode 100644 src/trialmatchai/preprocessing/regex/__init__.py delete mode 100644 src/trialmatchai/preprocessing/regex/exception_regex_patterns.json delete mode 100644 src/trialmatchai/preprocessing/regex/regex_patterns.json delete mode 100644 src/trialmatchai/preprocessing/regex/regex_variants.tsv delete mode 100644 src/trialmatchai/utils/evaluation.py delete mode 100644 tests/test_phenopacket_processor_pytest.py diff --git a/pyproject.toml b/pyproject.toml index e83f1479..bfbe518e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -78,8 +78,6 @@ where = ["src"] trialmatchai = [ "config/*.json", "entity_schemas/*.yaml", - "preprocessing/regex/*.json", - "preprocessing/regex/*.tsv", ] [tool.uv] diff --git a/src/trialmatchai/config/config_loader.py b/src/trialmatchai/config/config_loader.py index 1a1472bb..af9ca99e 100644 --- a/src/trialmatchai/config/config_loader.py +++ b/src/trialmatchai/config/config_loader.py @@ -159,7 +159,6 @@ def _trialmatchai_resource_path(path: Path) -> Path | None: if not relative.parts or relative.parts[0] not in { "config", "entity_schemas", - "preprocessing", }: return None diff --git a/src/trialmatchai/matching/phenopacket_processor.py b/src/trialmatchai/matching/phenopacket_processor.py deleted file mode 100644 index aeff21be..00000000 --- a/src/trialmatchai/matching/phenopacket_processor.py +++ /dev/null @@ -1,395 +0,0 @@ -import json -from typing import Dict, List, Optional - -from trialmatchai.schemas.phenopacket import Phenopacket -from trialmatchai.utils.file_utils import read_json_file, write_json_file -from trialmatchai.utils.json_utils import extract_json_object -from trialmatchai.utils.logging_config import setup_logging -from trialmatchai.utils.temporal_utils import parse_iso_duration, parse_temporal - -logger = setup_logging(__name__) - -try: - import torch -except ImportError: # pragma: no cover - exercised by lean package imports - torch = None # type: ignore[assignment] - - -def _require_llm_dependencies(): - if torch is None: - raise RuntimeError( - "ClinicalSummarizer requires PyTorch. Install the ML extras with " - "`uv sync --extra llm` or `pip install 'trialmatchai[llm]'`." - ) - try: - from transformers import AutoModelForCausalLM, AutoTokenizer - except ImportError as exc: - raise RuntimeError( - "ClinicalSummarizer requires Transformers. Install the ML extras with " - "`uv sync --extra llm` or `pip install 'trialmatchai[llm]'`." - ) from exc - return torch, AutoModelForCausalLM, AutoTokenizer - - -class PhenopacketProcessor: - def __init__(self, file_path: str): - self.phenopacket = self._load_and_validate(file_path) - self.medical_sentences: List[str] = [] - self.ontology_cache: Dict[str, str] = {} - - def _load_and_validate(self, file_path: str) -> Dict: - data = read_json_file(file_path) - try: - Phenopacket.model_validate(data) - logger.info("Phenopacket loaded and validated successfully.") - except Exception as exc: - raise ValueError(f"Invalid Phenopacket: {exc}") from exc - return data - - def _add_medical_sentence(self, category: str, content: str): - self.medical_sentences.append(f"{category.upper()}: {content}") - - def _get_ontology_label(self, term_id: str) -> str: - if term_id in self.ontology_cache: - return self.ontology_cache[term_id] - for resource in self.phenopacket.get("metaData", {}).get("resources", []): - if term_id.startswith(resource.get("namespacePrefix", "")): - label = term_id.split("/")[-1].replace("_", " ") - self.ontology_cache[term_id] = label - return label - return term_id - - def generate_medical_narrative(self) -> List[str]: - try: - self._extract_subject() - self._extract_phenotypic_features() - self._extract_diseases() - self._extract_biosamples() - self._extract_interpretations() - self._extract_medical_actions() - self._extract_measurements() - self._extract_family() - logger.info("Medical narrative generation completed successfully.") - return self.medical_sentences - except Exception as e: - logger.error(f"Narrative generation failed: {e}") - raise - - def _extract_subject(self): - subject = self.phenopacket.get("subject", {}) - demographics = [ - f"Sex: {subject.get('sex', 'Unknown')}", - f"DOB: {subject.get('dateOfBirth', 'Unknown')}", - ] - if "timeAtLastEncounter" in subject: - encounter_time = parse_temporal(subject.get("timeAtLastEncounter")) - demographics.append(f"Last Encounter: {encounter_time}") - if "taxonomy" in subject: - demographics.append( - f"Species: {subject['taxonomy'].get('label', 'Unknown')}" - ) - if subject.get("description"): - demographics.append(f"Description: {subject.get('description')}") - self._add_medical_sentence("DEMOGRAPHICS", "; ".join(demographics)) - - def _extract_phenotypic_features(self): - for pf in self.phenopacket.get("phenotypicFeatures", []): - feature = pf.get("type", {}) - label = self._get_ontology_label(feature.get("label", "Unknown")) - details = ["Absent" if pf.get("excluded", False) else "Present"] - if "severity" in pf: - severity = self._get_ontology_label( - pf["severity"].get("label", "Unknown") - ) - details.append(f"Severity: {severity}") - temporal = parse_temporal(pf.get("onset")) - if temporal: - details.append(f"Onset: {temporal}") - if "modifiers" in pf: - mods = [ - self._get_ontology_label(m.get("label", "Unknown")) - for m in pf["modifiers"] - ] - details.append(f"Modifiers: {', '.join(mods)}") - descs = [] - if pf.get("description"): - descs.append(pf.get("description")) - if feature.get("description"): - descs.append(feature.get("description")) - if descs: - details.append("Description: " + " ".join(descs)) - self._add_medical_sentence("PHENOTYPE", f"{label}: {'; '.join(details)}") - - def _extract_diseases(self): - for disease in self.phenopacket.get("diseases", []): - term = disease.get("term", {}) - label = self._get_ontology_label(term.get("label", "Unknown")) - details = [] - if "diseaseStage" in disease: - stages = [ - self._get_ontology_label(s.get("label", "Unknown")) - for s in disease["diseaseStage"] - ] - details.append(f"Stage: {', '.join(stages)}") - if "tnmFinding" in disease: - tnm = [ - self._get_ontology_label(t.get("label", "Unknown")) - for t in disease["tnmFinding"] - ] - details.append(f"TNM: {', '.join(tnm)}") - onset = parse_temporal(disease.get("onset")) - if onset: - details.append(f"Onset: {onset}") - if disease.get("description"): - details.append(f"Description: {disease.get('description')}") - self._add_medical_sentence("DIAGNOSIS", f"{label}: {'; '.join(details)}") - - def _extract_biosamples(self): - for sample in self.phenopacket.get("biosamples", []): - details = [ - f"Type: {self._get_ontology_label(sample.get('sampleType', {}).get('label', 'Unknown'))}", - f"Tissue: {self._get_ontology_label(sample.get('sampledTissue', {}).get('label', 'Unknown'))}", - f"Collection: {parse_temporal(sample.get('timeOfCollection'))}", - ] - if "histologicalDiagnosis" in sample: - hd = sample["histologicalDiagnosis"] - details.append( - f"Histology: {self._get_ontology_label(hd.get('label', 'Unknown'))}" - ) - if sample.get("description"): - details.append(f"Description: {sample.get('description')}") - self._add_medical_sentence("BIOSAMPLE", "; ".join(details)) - - def _extract_measurements(self): - for meas in self.phenopacket.get("measurements", []): - assay = self._get_ontology_label(meas.get("assay", {}).get("id", "Unknown")) - value_info = meas.get("value", {}) - unit_label = value_info.get("unit", {}).get("label", "") - value = f"{value_info.get('value', 'Unknown')} {unit_label}".strip() - content = f"{assay}: {value}" - if meas.get("description"): - content += f"; Description: {meas.get('description')}" - self._add_medical_sentence("MEASUREMENT", content) - - def _extract_medical_actions(self): - for action in self.phenopacket.get("medicalActions", []): - if "treatment" in action: - tx = action["treatment"] - details = [ - f"Agent: {self._get_ontology_label(tx.get('agent', {}).get('label', 'Unknown'))}", - f"Route: {tx.get('routeOfAdministration', {}).get('label', 'Unknown')}", - ] - if "doseIntervals" in tx and tx["doseIntervals"]: - dose_info = tx["doseIntervals"][0].get("quantity", {}) - dose_unit = dose_info.get("unit", {}).get("label", "") - details.append( - f"Dose: {dose_info.get('value', 'Unknown')} {dose_unit}".strip() - ) - if tx.get("description"): - details.append(f"Description: {tx.get('description')}") - self._add_medical_sentence("TREATMENT", "; ".join(details)) - if "procedure" in action: - proc = action["procedure"] - performed = proc.get("performed", "unknown date") - proc_details = ( - f"{proc.get('code', {}).get('label', 'Procedure')} on {performed}" - ) - if proc.get("description"): - proc_details += f"; Description: {proc.get('description')}" - self._add_medical_sentence("PROCEDURE", proc_details) - - def _extract_interpretations(self): - for interpret in self.phenopacket.get("interpretations", []): - if "diagnosis" not in interpret: - continue - dx = interpret["diagnosis"] - details = [ - f"Status: {dx.get('diagnosisStatus', {}).get('label', 'unknown')}" - ] - if dx.get("description"): - details.append(f"Description: {dx.get('description')}") - for gi in dx.get("genomicInterpretations", []): - if "variantInterpretation" in gi: - var = gi["variantInterpretation"].get("variationDescriptor", {}) - gene = var.get("geneContext", {}).get("symbol", "Unknown gene") - details.append(f"{gene} {var.get('label', 'variant')}") - if interpret.get("description"): - details.append(f"Note: {interpret.get('description')}") - self._add_medical_sentence("INTERPRETATION", "; ".join(details)) - - def _extract_family(self): - family = self.phenopacket.get("family") - if not family: - return - relatives = family.get("relatives", []) - for relative in relatives: - rel_id = relative.get("id", "Unknown") - sex = relative.get("sex", "Unknown") - vital_status = relative.get("vitalStatus", {}).get("status", "Unknown") - age_at_death = parse_iso_duration( - relative.get("vitalStatus", {}) - .get("ageAtDeath", {}) - .get("iso8601duration", "") - ) - rel_phens = [] - for pf in relative.get("phenotypicFeatures", []): - label = self._get_ontology_label( - pf.get("type", {}).get("label", "Unknown") - ) - onset = parse_temporal(pf.get("onset")) - rel_phens.append(f"{label} (onset: {onset})") - description = relative.get("description", "") - summary = f"Relative {rel_id} ({sex}) - Vital status: {vital_status}" - if age_at_death: - summary += f", Age at death: {age_at_death}" - if rel_phens: - summary += f"; Phenotypes: {', '.join(rel_phens)}" - if description: - summary += f"; Description: {description}" - self._add_medical_sentence("FAMILY_HISTORY", summary) - pedigree = family.get("pedigree", {}) - if pedigree.get("persons"): - summary = ( - f"Pedigree defined with {len(pedigree['persons'])} individuals." - ) - self._add_medical_sentence("FAMILY_PEDIGREE", summary) - - -class ClinicalSummarizer: - def __init__(self, model=None, tokenizer=None, model_name: Optional[str] = None): - if model is not None: - if tokenizer is None: - raise ValueError( - "A tokenizer must be provided if a model instance is given." - ) - self.model = model - self.tokenizer = tokenizer - elif model_name is not None: - torch_module, AutoModelForCausalLM, AutoTokenizer = _require_llm_dependencies() - self.tokenizer = AutoTokenizer.from_pretrained(model_name) - self.model = AutoModelForCausalLM.from_pretrained( - model_name, - torch_dtype=torch_module.float16, - device_map="auto", - ) - else: - raise ValueError( - "Must provide either a model instance with its tokenizer or a model_name." - ) - - self.model.eval() - - def generate_summary(self, sentences: List[str]) -> Dict: - torch_module = _require_llm_dependencies()[0] - SYSTEM_PROMPT = """ - You are a specialized medical assistant designed for precise and accurate clinical trial matching. - Analyze the patient's medical description carefully and extract clinically relevant information for trial eligibility assessment. - - 1. **Primary Condition**: - - Determine the primary medical conditions based on explicit patient information and overall clinical context. - - List up to 10 medically recognized synonyms, aliases, or closely related medical terms for the primary conditions. - - Include the identified primary conditions and their associated synonyms or related terms within the "main_conditions" list. - - 2. **Secondary Clinical Factors**: - - Provide up to 50 clinically significant additional factors, including comorbidities, concurrent medical conditions, molecular or genetic biomarkers, prior therapies, relevant medical history, and clinically notable patient characteristics explicitly mentioned in the patient description. - - Provide these factors in the "other_conditions" list. - - 3. **Expanded Clinical Descriptions**: - - Based solely on the original patient-provided data, generate semantically accurate and medically sound statements resembling real-life medical notes. - - **Crucial**: Expanded descriptions must strictly reflect explicit patient-reported information without introducing new or inferred medical details. - - Output: - Return a JSON object in the exact following structure without any additional commentary: - - { - "main_conditions": ["PrimaryCondition", "Synonym1", "Synonym2", "..."], - "other_conditions": ["AdditionalCondition1", "AdditionalCondition2", "..."], - "expanded_sentences": [ - "Expanded note for sentence 1...", - "Expanded note for sentence 2...", - "..." - ] - } - """ - messages = [ - {"role": "system", "content": SYSTEM_PROMPT.strip()}, - {"role": "user", "content": " ".join(sentences)}, - ] - - try: - prompt = self.tokenizer.apply_chat_template( - messages, - truncate=False, - add_generation_prompt=True, - return_tensors="pt", - ).to(self.model.device) - - with torch_module.no_grad(): - output_ids = self.model.generate( - prompt, - max_new_tokens=2048, - do_sample=False, - return_dict_in_generate=False, - pad_token_id=self.tokenizer.eos_token_id, - ) - - # Only decode the newly generated tokens - generated_text = self.tokenizer.decode( - output_ids[0][prompt.shape[-1] :], skip_special_tokens=True - ) - return self._extract_llm_output(generated_text) - - except Exception as e: - logger.error(f"LLM generation failed: {e}") - return { - "main_conditions": [], - "other_conditions": [], - "expanded_sentences": [], - "error": str(e), - } - - def _extract_llm_output(self, generated_text: str) -> Dict: - try: - result = extract_json_object(generated_text) - expected_keys = [ - "main_conditions", - "other_conditions", - "expanded_sentences", - ] - if not all(key in result for key in expected_keys): - raise ValueError("Missing required JSON keys in LLM output") - return result - except (json.JSONDecodeError, ValueError) as e: - logger.error(f"JSON extraction failed: {e}") - return { - "error": f"Invalid JSON format: {str(e)}", - "main_conditions": [], - "other_conditions": [], - "expanded_sentences": [], - } - - -def process_phenopacket( - input_file: str, - output_file: str, - model=None, - tokenizer=None, - model_name: str = "microsoft/phi-2", -) -> bool: - try: - processor = PhenopacketProcessor(input_file) - narrative = processor.generate_medical_narrative() - summarizer = ( - ClinicalSummarizer(model=model, tokenizer=tokenizer) - if model and tokenizer - else ClinicalSummarizer(model_name=model_name) - ) - summary = summarizer.generate_summary(narrative) - write_json_file(summary, output_file) - logger.info( - f"Successfully processed {input_file} and saved results to {output_file}" - ) - return True - except Exception as e: - logger.error(f"Processing failed: {e}") - return False diff --git a/src/trialmatchai/models/embedding/query_embedder.py b/src/trialmatchai/models/embedding/query_embedder.py deleted file mode 100644 index 66ca0bb6..00000000 --- a/src/trialmatchai/models/embedding/query_embedder.py +++ /dev/null @@ -1,24 +0,0 @@ -from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig - - -class QueryEmbedder(TextEmbedder): - def __init__( - self, - model_name: str = "ncbi/MedCPT-Query-Encoder", - max_length: int = 512, - use_gpu: bool = True, - use_fp16: bool = False, - batch_size: int = 32, - normalize: bool = True, - ): - super().__init__( - TextEmbedderConfig( - model_name=model_name, - pooling="cls", - max_length=max_length, - batch_size=batch_size, - use_gpu=use_gpu, - use_fp16=use_fp16, - normalize=normalize, - ) - ) diff --git a/src/trialmatchai/models/embedding/sentence_embedder.py b/src/trialmatchai/models/embedding/sentence_embedder.py deleted file mode 100644 index 2e81fe33..00000000 --- a/src/trialmatchai/models/embedding/sentence_embedder.py +++ /dev/null @@ -1,24 +0,0 @@ -from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig - - -class SecondLevelSentenceEmbedder(TextEmbedder): - def __init__( - self, - model_name: str = "BAAI/bge-m3", - use_gpu: bool = True, - use_fp16: bool = False, - max_length: int = 512, - batch_size: int = 32, - normalize: bool = True, - ): - super().__init__( - TextEmbedderConfig( - model_name=model_name, - pooling="mean", - max_length=max_length, - batch_size=batch_size, - use_gpu=use_gpu, - use_fp16=use_fp16, - normalize=normalize, - ) - ) diff --git a/src/trialmatchai/preprocessing/__init__.py b/src/trialmatchai/preprocessing/__init__.py deleted file mode 100644 index 9200581b..00000000 --- a/src/trialmatchai/preprocessing/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Preprocessing resources and helpers.""" diff --git a/src/trialmatchai/preprocessing/regex/__init__.py b/src/trialmatchai/preprocessing/regex/__init__.py deleted file mode 100644 index 32ce5226..00000000 --- a/src/trialmatchai/preprocessing/regex/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Regex preprocessing resource package.""" diff --git a/src/trialmatchai/preprocessing/regex/exception_regex_patterns.json b/src/trialmatchai/preprocessing/regex/exception_regex_patterns.json deleted file mode 100644 index bd2fe774..00000000 --- a/src/trialmatchai/preprocessing/regex/exception_regex_patterns.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "patterns": { - "pattern1": { - "regex": "^\\d+\\s$", - "comment": "Matches digits followed by a space." - }, - "pattern2": { - "regex": "^\\d+(\\.|\\-)\\d+$", - "comment": "Matches digits separated by a dot (.) or hyphen (-)." - }, - "pattern3": { - "regex": "^\\d+(\\.\\d+)?\\s?[×x]\\s?\\d+(\\.\\d+)?/?[A-Za-z/]+?$", - "comment": "Matches expressions like '3x 2.5mm' or '5.75x2.5mm/s'." - }, - "pattern4": { - "regex": "^\\d+/[A-Za-z]$", - "comment": "Matches fraction expressions like '2/A' or '5/m'." - }, - "pattern5": { - "regex": "^\\d+(\\.\\d+)?%$", - "comment": "Matches percentage values like '25%', '3.5%', etc." - }, - "pattern6": { - "regex": "^\\d+(\\.\\d+)?\\s*[°°°CFC]$", - "comment": "Matches temperature values like '25°C', '3.5°F', etc." - }, - "pattern7": { - "regex": "^\\d+[\\/\\^]\\d+[\\/\\^]\\w$", - "comment": "Matches expressions like '2/3/m' or '5^2/n'." - }, - "pattern8": { - "regex": "\\b\\d+\\b(?![.\\-+*/\\\\()\\[\\]{}])", - "comment": "Matches standalone whole numbers that are not part of larger expressions." - }, - "pattern9": { - "regex": "\\b\\d+-\\w+\\b", - "comment": "Matches expressions like '12-abc' or '5-xyz'." - }, - "pattern10": { - "regex": "\\b\\d+\\/\\d+\\b", - "comment": "Matches fraction expressions like '2/3' or '5/8'." - }, - "pattern11": { - "regex": "\\b\\d+[A-Za-z]+\\b", - "comment": "Matches expressions like '25kg' or '10m'." - }, - "pattern12": { - "regex": "e.g.", - "comment": "Matches 'e.g.' (for example)." - }, - "pattern13": { - "regex": "i.e.", - "comment": "Matches 'i.e.' (that is)." - }, - "pattern14": { - "regex": "\\b\\d+\\.\\d+[A-Za-z]\\b", - "comment": "Matches expressions like '3.14pi' or '2.75x'." - }, - "pattern15": { - "regex": "\\b\\d+\\/\\w+\\b", - "comment": "Matches patterns like '≥ 10/μL', '< 9/cl', '+ 12/hgmm', etc." - }, - "pattern16": { - "regex": "\\b\\d+\\.\\d+[)]?", - "comment": "Matches patterns like '2.0)', '3.0)', '15.0)', '16.1-', '2.1)', '9.6/'." - }, - - "pattern17": { - "regex": "(?(A|C|T|G)))|((p\\.)?[A-Z][1-9][0-9]{0,3}([A-Z]|((_|-)[A-Z]?[1-9][0-9]{0,3}(delins|del|dup|ins)*[A-Z]{0,}))?)|(rs[0-9]{3,})|((((p\\.)?((NON|non|Non)(-| )?)?((Ala|Asx|Cys|Asp|Glu|Phe|Gly|His|Ile|Lys|Leu|Met|Asn|Pro|Gln|Arg|Ser|Thr|Sec|Val|Trp|Xaa|Tyr|Ter|Glx)|[A-Z])[1-9][0-9]{1,3}(del|dup|ins|=|(Ala|Asx|Cys|Asp|Glu|Phe|Gly|His|Ile|Lys|Leu|Met|Ter|Asn|Pro|Gln|Arg|Ser|Thr|Sec|Val|Trp|Xaa|Tyr|Glx)|[A-Z]){0,})(fs(\\*[0-9]{1,})?)?)))((-|/)[A-Z]([0-9]{1,3}([A-Z])?)?)?( |/|$)) -chromosome arm chromosome arm ((chromosome ([0-9]{1,2}|X|Y)(q|p)?([1-9]{1,2})?(\\.[0-9]{1,})?)|((chromosome)?( ([1-9]{1}|(1[0-9]{1})|(2([0-2]){1})|X|Y)(q|p)([1-9]{1}[0-9]{0,1})? ))) -aberration aberration ((((cytogenetic(al)?)|(chromosom(e|al)|genetic) )?(abnormalit(ies|y)|alteration(s)?|variant(s)?|aberrant|aberration(s)?))( of)?) -demethylation demethylation demethylat(ed|es)|demethylation|hypomethylation|decreased methylation -expression expression (((E|e)xpression( (S|s)tatus)?( of)?)|(((mRNA|RNA|(G|g)ene)? (E|e)xpress(ed|es|ion|ing))( status)?( of)?)|(m?RNA levels( of)?)|((((G|g)ene )?(E|e)xpression) level(s)?( of)?)) -frameshift frameshift (frame(-| )?shift(s)?( ((alteration|variant|mutation)(s)?))?( of )?) -inframe deletion inframe deletion (in(-)?frame (deletion|insertion)(s)?( of)?) -fusion fusion ((((G|g)ene )?(F|f)usion(s)?( (G|g)ene)?)|(NTRK( (G|g)ene)?(( |-)((T|t)ranslocation(s)?|(F|f)usion(s)?)))) -exon exon (((E|e)xon)(s)?)( |-)[0-9]{1,}(( |-|( (or|and) ))[0-9]{1,})* -gain of function gain of function (((gain(s)?(-| )of(-| )function)( (alteration|mutation|variant)s?)( of)?)|(( activating(( (gene|point))? (alteration|mutation|variant)s?)?)( of )?)) -cna cna ((gene )?copy (number|aberration|alteration)( of )?) -amplification amplification (- amplified|amplification|((gene )?amplifi(ed|cation)( of )?)|((chromosom(e|al) )?amplification(s)?( of )?)|((gene )?copy( number)? (gain(ed|s)?( of )?))|(increase(d|s)?)|(extra copy( of )?)|cn gain) -deletion deletion -deleted|- deleted| del([0-9]{1,})? |gene deleted|gene-deleted|gene deletion( of )?|((chromosom(e|al) )?deletion(s)?( of )?)|(copy los(t|s|ses)(of )?)|([0-9]{1,}(p|q)(-| )del(etion))|copy number decrease(d)?|copy decrease|deleted|((homozygous|heterozygous)(ly)?( (deletion|eleted|loss|lost))( of)?)|cn loss -germline amplification germline amplification germline amplification|germ-line amplification -germline deletion germline deletion (inherited )?germ(-)?line deletion|(delet(ed|ion)|loss|lost) in germline -germline loh germline loh (germ(-)?line (loh|(loss(-| )of(-| )heterozygosity))) -germline mutation germline mutation ((germ(-)?line( or somatic)?( mutation(s)?( (in |of |(status (of )?))?)))|((inherited )?germ(-)?line (variant(s)?|snv|alteration(s)?|mutation(s)?))) -inactivation inactivation inactivat(ed|ion)|((gene|mutation(al)?) (inactivat(ion|ed)))|(inactivating (deletion(s)?|insertion(s)?|mutation(s)?)) -indel indel indel|indels|insertion or deletion -insertion insertion insertion(s)? -inhibitor inhibitor inhibitor(s)?|inhibition|inhibited|inhibit(s)? -loss loss (loss( of)?( (both|either))?) -knockdown knockdown knockdown -loss of function loss of function ((loss(-| )of(-| )function( (mutation|variant|substitution)(s)?))|(deactivating( point)? (alteration|variant|substitution|mutation)(s)?)) -loss of heterozygosity loss of heterozygosity loss of heterozygosity|loss-of-heterozygosity|LOH -methylation methylation ((un|non-)?methylat(ed|es))|methylation|hypermethylation|increased methylation -mutation mutation (((missense|nonsense|(nonsynonymous( coding)?)|(protein(-| )coding)|point|coding|actionable|hotspot|acquired|de(-| )novo|driver|molecular(ly)?|(somatic( coding)?))( ((mutation|(alter(ed|ation))|variant|snv|(nucleotide )?substitution)(s)?)))|((mutation|variant|alteration)(s)? (of|in|within) the)|(gene (substitution(s)?|mutated|alteration(s)?|mutation(s)?))|( (-)?mutated)|(-mut )|(((gene|known) )?mutation(s)?((-| )(positive|negative|in |testing|((wild(-| )?type or muta(nt|ed))|(status( of )?)|of ))?))|((pathway )?muta(ted|nt)( or ((wt|(wild(-| )?type))))?)) -phosphorylation phosphorylation ((un|non-)?phosphorylat(ed|ion|es)) -promoter demethylation promoter demethylation ((promoter (de|hypo|non|un)(-)?methylat(ed|ion))|((de|hypo|un|non)(-)?methylat(ed|ion)( of( the)?)? promoter)) -promoter methylation promoter methylation ((promoter (hyper)?methylat(ed|ion))|((hyper)?methylation of( the)? promoter)) -promoter mutation promoter mutation (promoter (alteration|variant|mutation)s?) -protein expression protein expression ((((p|P)rotein )(E|e)xpression( of )?)|((P|p)rotein (L|l)evel(s)?( of )?)|((I|i)mmunohistochemi(cal|stry)( ((S|s)taining|(S|s)tatus|(E|e)xpression|(A|a)ssay))?( of)?)|(IHC( |-)(((P|p)ositive)|((N|n)egative)))|(IHC( )?[0-9]\\+)) -protein overexpression protein overexpression protein over(-)?express(ed|ion|ing|es) -protein underexpression protein underexpression protein under(-)?express(ed|ion|ing|es) -overexpression overexpression ((((mrna|rna) )?(non-)?over(-| )?express(ed|ion|ing|es)( of )?)|(transcriptional up(-)?regulation)|(elevated level(s)? of )|(up(-)?regulat(es|ion|ed))|((increased|increase in |up(-)?regulated|prominent(ly)?|high(ly|er)?) express(ed|ion))) -underexpression underexpression ((((mrna|rna) )?under(-| )?express(ed|ion|es|ing)( of )?)|(ihc loss)|silenced|(transcriptional down(-)?regulation( of )?)|(down(-)?regulat(es|ion|ed)( of )?)|(loss of expression( of )?)|((decreased|low(er)?|no|zero|down(-)?regulated) expression)|not expressed|(no expresssion( of )?)) -single nucleotide polymorphism single nucleotide polymorphism single nucleotide polymorphism|snp -splice variant splice variant ((splice ((mutation|variant)(s)?))|(splice site (alteration|mutation|substitution|variant)(s)?)) -structural variant structural variant (structural variant(s)?|((cytogenetic|gene|chromosom(e|al) )?rearrangement(s)?)|(large( |-)?scale (gene )?rearrangement(s))) -synonymous mutation synonymous mutation ((synonymous|silent)( coding)?( (mutation(s)?|substitution(s)?))) -switch of function switch of function switch of function -translocation translocation (gene )?translocat(ion|ing)(s)? -truncation truncation (truncat(ed|ing|ion(s)?)( mutation(s)?)?)|truncated form -wildtype wildtype ((N|n)on-(A|a)mplified)|((N|n)onamplified)|((N|n)on(-| )?(D|d)eleted)|((W|w)ild(-| )?(T|t)ype)|((U|u)nmutated)|((N|n)on(-)?(M|m)utated)|( WT )|-(WT|wt)|(WILD( |-)?TYPE) -codon codon ((amino acid position [0-9]{1,})|( codon(s)? [0-9]{1,}((/[0-9]{1,})|(( or | and | et | |-)[0-9]{1,}))*)) -codon mutation codon mutation (mutation(s)? (in|of) codon(s)? [0-9]{1,}((/[0-9]{1,})|(( or | and | et | |-)[0-9]{1,}))*) -exon mutation exon mutation ((((met|c(-)?met) )?(exon(s)? [0-9]{1,} skipping))|(metex14)|(exon(s)? [0-9]{1,2}(( (or|and|et) |-| |/)[0-9]{1,2})* ((splice|skipping) )?(substitution|snp|variant|mutation|alteration)(s)?)|((splice )?(mutation|variant|substitution|snp|alteration)(s)?( (detected|occur(red)?))? (in|of)( [A-Z0-9]{3,8})? exon(s)? [0-9]{1,2}(( (or|and|to|et) |-| |/)[0-9]{1,2})*)) -exon deletion exon deletion ((ex[1-9][0-9]{0,}del)|(exon(s)? [0-9]{1,2}(( (or|and|et) |-| |/)[0-9]{1,2})* del(etion(s)?)?)|(deletion(s)?( (detected|occur(red)?|found))? (in|of)( [A-Z0-9]{3,8})? exon(s)? [0-9]{1,2}(( (or|and|et) |-| |/)[0-9]{1,2})*)|(exon del-[0-9]{1,2})|(exon [0-9]{1,}-del)) -exon insertion exon insertion ((ex[1-9][0-9]{0,}ins)|(exon(s)? [0-9]{1,2}(( (or|and|et) |-| |/)[0-9]{1,2})* insertion(s)?)|(insertion(s)?( (detected|occur(red)?|found))? (in|of) exon(s)? [0-9]{1,2}(( (or|and|et) |-| |/)[0-9]{1,2})*)|(exon ins-[0-9]{1,2})|(exon [0-9]{1,2}-ins)) -deficiency deficiency deficienc(y|ies)|deficancy -rearrangement rearrangement re(arrangement(s)?|arranged|arranging)|gen(e|etic|omic)? rearrangement(s)?|chromosomal rearrangement(s)? -mutation mutation mutation(s)?|mutated|mutant|mutate|mutating|mutational|mutate|mutating|mutate|mutating diff --git a/src/trialmatchai/utils/evaluation.py b/src/trialmatchai/utils/evaluation.py deleted file mode 100644 index aa48cd7a..00000000 --- a/src/trialmatchai/utils/evaluation.py +++ /dev/null @@ -1,322 +0,0 @@ -# trialmatchai/utils/evaluation.py -from __future__ import annotations - -import csv -import json -import math -import os -import re -from typing import Any, Dict, Iterable, List, Tuple, Union - -# Strict NCT id pattern (case-insensitive on input; stored uppercase) -_NCT_RE = re.compile(r"^NCT\d{8}$", re.IGNORECASE) - - -def load_ground_truth(trec_csv_path: str) -> Dict[str, Dict[str, int]]: - """ - Load TREC ground-truth (query-id, corpus-id, score) from .tsv or .csv. - Returns: { query_id: { NCT########: int(score) } } - - Notes: - - Score semantics (TREC 2021 Clinical Trials): - 2 = eligible (relevant), 1 = excluded (ineligible), 0 = not relevant - - We uppercase trial ids for consistency. - - Header row is optional; delimiter auto-detected between tab/comma. - """ - gt: Dict[str, Dict[str, int]] = {} - if not os.path.exists(trec_csv_path): - raise FileNotFoundError(f"TREC ground truth file not found: {trec_csv_path}") - - with open(trec_csv_path, "r", encoding="utf-8") as fh: - sample = fh.read(4096) - fh.seek(0) - first_line = sample.splitlines()[0] if sample else "" - delimiter = "\t" if ("\t" in first_line) else "," - reader = csv.reader(fh, delimiter=delimiter) - - # Detect header - try: - first = next(reader) - except StopIteration: - return gt - - def _is_header(row: List[str]) -> bool: - if not row: - return False - low = [c.strip().lower() for c in row[:3]] - joined = "|".join(low) - return ( - ("query-id" in joined or "qid" in joined) - and ("corpus-id" in joined or "docid" in joined or "doc-id" in joined) - and ("score" in joined or "label" in joined or "relevance" in joined) - ) - - if not _is_header(first): - fh.seek(0) - reader = csv.reader(fh, delimiter=delimiter) - - for row in reader: - if not row or len(row) < 3: - continue - qid = row[0].strip() - nid = row[1].strip().upper() - # Only store proper NCT ids - if not _NCT_RE.match(nid): - continue - try: - score = int(float(row[2])) - except Exception: - continue - gt.setdefault(qid, {})[nid] = score - return gt - - -def _dcg(rels: Iterable[int], gain_scheme: str = "linear") -> float: - """ - DCG with log2 discount. Two gain schemes: - - 'linear': gain = rel (default; typical for TREC ndcg) - - 'exp2' : gain = 2^rel - 1 - """ - dcg = 0.0 - for i, rel in enumerate(rels, start=1): - if gain_scheme == "exp2": - gain = (2**rel) - 1.0 - else: - gain = float(rel) - dcg += gain / math.log2(i + 1) - return dcg - - -def _idcg(ground_rels: List[int], k: int, gain_scheme: str = "linear") -> float: - ideal = sorted(ground_rels, reverse=True)[:k] - return _dcg(ideal, gain_scheme=gain_scheme) - - -def ndcg_at_k( - pred_ids: List[str], - ground_truth: Dict[str, int], - k: int, - gain_scheme: str = "linear", -) -> float: - """ - nDCG@K using graded labels (2 eligible, 1 excluded, 0 not relevant). - Assumes pred_ids already filtered to labelled trials (see evaluate_ranking). - """ - if k <= 0: - return 0.0 - pred_rels = [int(ground_truth.get(nid, 0)) for nid in pred_ids[:k]] - dcg = _dcg(pred_rels, gain_scheme=gain_scheme) - ideal_rels = list(ground_truth.values()) - if not ideal_rels: - return 0.0 - idcg = _idcg(ideal_rels, k, gain_scheme=gain_scheme) - return dcg / idcg if idcg > 0 else 0.0 - - -def precision_at_k( - pred_ids: List[str], - ground_truth: Dict[str, int], - k: int, - eligible_threshold: int = 2, -) -> float: - """ - Precision@K for TREC CT: - - Count ONLY 'eligible' trials as relevant (label >= eligible_threshold, default 2). - - Unlabelled trials are assumed removed by the caller (we don't count them). - - Denominator is the number of labelled predictions among the first K after filtering. - """ - if k <= 0: - return 0.0 - topk = pred_ids[:k] - if not topk: - return 0.0 - rels = [ - 1 if int(ground_truth.get(nid, 0)) >= eligible_threshold else 0 for nid in topk - ] - return sum(rels) / float(len(topk)) - - -def _get_case_insensitive(d: Dict[str, Any], *keys: str) -> Any: - """Fetch any matching key (case-insensitive) from dict.""" - lower_map = {k.lower(): k for k in d.keys()} - for k in keys: - real = lower_map.get(k.lower()) - if real is not None: - return d[real] - return None - - -def _extract_top_list(container: Any) -> Any: - """ - If 'container' is a dict that wraps the ranked list, extract the list. - Accepts keys: RankedTrials, ranked_trials, ranked, trials (any case). - Otherwise return container as is. - """ - if isinstance(container, dict): - for k in ("RankedTrials", "ranked_trials", "ranked", "trials"): - v = _get_case_insensitive(container, k) - if isinstance(v, list): - return v - return container - - -def _normalize_ranked_input(ranked: Any) -> List[str]: - """ - Accept common ranked formats and return a clean list of NCT IDs (uppercase), preserving order. - - list[str] - - list[dict] with id keys: TrialID, trial_id, nct_id, id, nctId (any case) - - list[tuple/list] like (id, score) - - dict with top-level list under RankedTrials / ranked_trials / ranked / trials - Filters out non-NCT-shaped IDs and normalizes to uppercase. - """ - ranked = _extract_top_list(ranked) - - ids: List[str] = [] - - if not ranked: - return ids - - # list[str] - if isinstance(ranked, list) and ranked and isinstance(ranked[0], str): - ids = [s for s in ranked] - - # list[tuple/list] - elif isinstance(ranked, list) and ranked and isinstance(ranked[0], (list, tuple)): - ids = [str(item[0]) for item in ranked if item] - - # list[dict] - elif isinstance(ranked, list) and ranked and isinstance(ranked[0], dict): - for r in ranked: - nid = _get_case_insensitive( - r, "TrialID", "trial_id", "nct_id", "id", "nctId" - ) - if nid is None: - continue - ids.append(str(nid)) - - # fallback - else: - try: - ids = [str(x) for x in ranked] # type: ignore - except Exception: - ids = [] - - # Normalize + keep only proper NCT IDs - cleaned: List[str] = [] - for x in ids: - x_u = x.strip().upper() - if _NCT_RE.match(x_u): - cleaned.append(x_u) - return cleaned - - -def evaluate_ranking( - predicted_ranked: Any, - ground_truth_for_query: Dict[str, int], - ks: Tuple[int, ...] = (5, 10, 20), - gain_scheme: str = "linear", -) -> Dict[str, float]: - """ - Compute metrics for a single patient/query: - - nDCG@K with graded labels (0/1/2) - - Precision@K with 'eligible-only' relevance (label >= 2) - - IMPORTANT: Unlabelled trials are REMOVED before computing metrics, per your requirement. - """ - pred_ids_all = _normalize_ranked_input(predicted_ranked) - - # Keep only labelled trials (ignore unjudged) - pred_ids = ( - [pid for pid in pred_ids_all if pid in ground_truth_for_query] - if ground_truth_for_query - else [] - ) - - results: Dict[str, float] = {} - for k in ks: - results[f"ndcg@{k}"] = ndcg_at_k( - pred_ids, ground_truth_for_query, k, gain_scheme=gain_scheme - ) - results[f"precision@{k}"] = precision_at_k( - pred_ids, ground_truth_for_query, k, eligible_threshold=2 - ) - return results - - -def evaluate_and_save_metrics( - ranked_trials: Any, - patient_qid: str, - ground_truth_source: Union[str, Dict[str, Dict[str, int]]], - output_folder: str, - ks: Tuple[int, ...] = (5, 10, 20), - gain_scheme: str = "linear", -) -> Dict[str, float]: - """ - Evaluate 'ranked_trials' for a patient using either: - - ground_truth_source: str path to TREC .tsv/.csv, OR - - a preloaded dict { qid: { nct_id: score } } - - Saves JSON to {output_folder}/evaluation_metrics.json - """ - # Load ground truth if a file path is provided - if isinstance(ground_truth_source, str): - ground_truth_map = load_ground_truth(ground_truth_source) - else: - ground_truth_map = ground_truth_source - - gt = ground_truth_map.get(patient_qid) - if gt is None: - metrics: Dict[str, float] = {"error": "no_ground_truth_for_patient"} # type: ignore[assignment] - else: - metrics = evaluate_ranking(ranked_trials, gt, ks=ks, gain_scheme=gain_scheme) # type: ignore[assignment] - metrics["patient_id"] = patient_qid # type: ignore[index] - - os.makedirs(output_folder, exist_ok=True) - out_path = os.path.join(output_folder, "evaluation_metrics.json") - with open(out_path, "w", encoding="utf-8") as fh: - json.dump(metrics, fh, indent=2) - return metrics - - -if __name__ == "__main__": - import argparse - - ap = argparse.ArgumentParser("Evaluate ranked trials against TREC ground truth") - ap.add_argument("--ranked", required=True, help="Path to ranked_trials.json") - ap.add_argument( - "--ground-truth", - required=True, - help="Path to TREC TSV/CSV (query-id, corpus-id, score)", - ) - ap.add_argument( - "--patient", required=True, help="Query-id in the ground truth to evaluate" - ) - ap.add_argument( - "--out-dir", default=None, help="Output dir (default: folder of ranked)" - ) - ap.add_argument( - "--gain", - default="linear", - choices=["linear", "exp2"], - help="DCG gain scheme (default: linear)", - ) - args = ap.parse_args() - - # Lazy import to avoid package cycles - try: - from trialmatchai.utils.file_utils import read_json_file # type: ignore - except Exception: - # Fallback path if run standalone - from trialmatchai.utils.file_utils import read_json_file # type: ignore - - ranked = read_json_file(args.ranked) - out_dir = args.out_dir or os.path.dirname(args.ranked) - res = evaluate_and_save_metrics( - ranked_trials=ranked, - patient_qid=args.patient, - ground_truth_source=args.ground_truth, - output_folder=out_dir, - ks=(5, 10, 20), - gain_scheme=args.gain, - ) - print(json.dumps(res, indent=2)) diff --git a/tests/test_phenopacket_processor_pytest.py b/tests/test_phenopacket_processor_pytest.py deleted file mode 100644 index 6c42fb50..00000000 --- a/tests/test_phenopacket_processor_pytest.py +++ /dev/null @@ -1,13 +0,0 @@ -import json - -from trialmatchai.matching.phenopacket_processor import PhenopacketProcessor - - -def test_phenopacket_processor_minimal(tmp_path): - data = {"id": "patient-1", "metaData": {}, "subject": {}} - path = tmp_path / "patient.json" - path.write_text(json.dumps(data)) - - processor = PhenopacketProcessor(str(path)) - narrative = processor.generate_medical_narrative() - assert narrative From a33091d07d070f34f26b934d4ac761b40fcc82ab Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 10:00:58 +0200 Subject: [PATCH 14/64] PR4: remove dead symbols, params, and a legacy shim MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Verified-safe in-file dead code (re-grepped each before removal): - recognizers.with_schema_threshold (+ now-unused dataclasses.replace import) - types.EntityAnnotation.to_index_entity - utils/retry.py (with_retries) + its test — only the test used it; production retries go through tenacity - interop EvidenceSpan model, Provenance.raw_text_span field, and the PatientProfile.all_facts helper — none populated, read, or referenced (Provenance keeps extra="allow", so dropping the field is safe) - narrative.render_patient_narrative: dead style="audit" branch and the unused style parameter (only caller passed "rag") - annotator.annotate_texts_in_parallel: dead retries/delay params (accepted then immediately del'd; no caller supplies them) - criteria_retrieval.rerank_criteria: unused `queries` parameter (body keys off criterion["query"]); updated the call site Legacy shim removed: - CompatibilityEntityAnnotator was an empty SchemaEntityAnnotator subclass; build_entity_annotator now returns SchemaEntityAnnotator directly, and the export/test were repointed. Deferred: max_text_score -> PR6 (folded into the create_query rework); dead config settings (cot/LLM_reranker/TokenizerSettings/entity_extraction.threshold) -> PR9, since they are entangled with config.json + the env-override map and carry config-validation risk that does not belong in a deletion PR. Co-Authored-By: Claude Opus 4.8 --- src/trialmatchai/entities/__init__.py | 2 - src/trialmatchai/entities/annotator.py | 11 +----- src/trialmatchai/entities/recognizers.py | 11 ------ src/trialmatchai/entities/types.py | 6 --- src/trialmatchai/interop/__init__.py | 2 - .../interop/exporters/matching_summary.py | 2 +- src/trialmatchai/interop/models.py | 28 -------------- src/trialmatchai/interop/narrative.py | 11 +----- .../matching/retrieval/criteria_retrieval.py | 4 +- src/trialmatchai/utils/retry.py | 37 ------------------- tests/test_entities.py | 4 +- tests/test_retry_pytest.py | 13 ------- 12 files changed, 9 insertions(+), 122 deletions(-) delete mode 100644 src/trialmatchai/utils/retry.py delete mode 100644 tests/test_retry_pytest.py diff --git a/src/trialmatchai/entities/__init__.py b/src/trialmatchai/entities/__init__.py index 25109e55..03525712 100644 --- a/src/trialmatchai/entities/__init__.py +++ b/src/trialmatchai/entities/__init__.py @@ -1,12 +1,10 @@ from trialmatchai.entities.annotator import ( - CompatibilityEntityAnnotator, SchemaEntityAnnotator, build_entity_annotator, ) from trialmatchai.entities.types import ConceptCandidate, EntityAnnotation, EntitySchema __all__ = [ - "CompatibilityEntityAnnotator", "ConceptCandidate", "EntityAnnotation", "EntitySchema", diff --git a/src/trialmatchai/entities/annotator.py b/src/trialmatchai/entities/annotator.py index 59649e7f..ea3b69b1 100644 --- a/src/trialmatchai/entities/annotator.py +++ b/src/trialmatchai/entities/annotator.py @@ -38,10 +38,7 @@ def annotate_texts_in_parallel( self, texts: Sequence[str], max_workers: int = 20, - retries: int = 1, - delay: float = 0, ) -> list[list[dict[str, Any]]]: - del retries, delay if max_workers <= 1 or len(texts) <= 1: return [ [annotation.to_dict() for annotation in annotations] @@ -65,15 +62,11 @@ def annotate_texts_in_parallel( return results -class CompatibilityEntityAnnotator(SchemaEntityAnnotator): - """Compatibility annotator exposing the historical batch annotation shape.""" - - def build_entity_annotator( config: dict[str, Any], *, embedder: Any | None = None, -) -> CompatibilityEntityAnnotator: +) -> SchemaEntityAnnotator: extraction_cfg = dict(config.get("entity_extraction") or {}) linker_cfg = dict(config.get("concept_linker") or {}) schema_path = extraction_cfg.get("schema_path") @@ -91,7 +84,7 @@ def build_entity_annotator( search_limit=int(linker_cfg.get("search_limit", 10)), ) - return CompatibilityEntityAnnotator(recognizer, schemas, linker=linker) + return SchemaEntityAnnotator(recognizer, schemas, linker=linker) def _build_concept_store( diff --git a/src/trialmatchai/entities/recognizers.py b/src/trialmatchai/entities/recognizers.py index d5c05609..e064a8b0 100644 --- a/src/trialmatchai/entities/recognizers.py +++ b/src/trialmatchai/entities/recognizers.py @@ -1,7 +1,6 @@ from __future__ import annotations import re -from dataclasses import replace from typing import Any, Protocol, Sequence from trialmatchai.entities.schemas import schema_by_label @@ -266,13 +265,3 @@ def _as_int(value: Any) -> int | None: return int(value) except (TypeError, ValueError): return None - - -def with_schema_threshold( - annotation: EntityAnnotation, - schemas: Sequence[EntitySchema], -) -> EntityAnnotation | None: - schema = next((item for item in schemas if item.id == annotation.schema_id), None) - if schema is not None and annotation.score < schema.threshold: - return None - return replace(annotation) diff --git a/src/trialmatchai/entities/types.py b/src/trialmatchai/entities/types.py index 970647ab..72a6e87c 100644 --- a/src/trialmatchai/entities/types.py +++ b/src/trialmatchai/entities/types.py @@ -94,12 +94,6 @@ def to_dict(self) -> dict[str, Any]: "linker_status": self.linker_status, } - def to_index_entity(self) -> dict[str, Any]: - data = self.to_dict() - data["entity"] = self.text - data["class"] = self.entity_group - return data - def normalize_concept_id(vocabulary_id: str, concept_code: str) -> str: vocab = vocabulary_id.strip() diff --git a/src/trialmatchai/interop/__init__.py b/src/trialmatchai/interop/__init__.py index a7379cbe..1919662c 100644 --- a/src/trialmatchai/interop/__init__.py +++ b/src/trialmatchai/interop/__init__.py @@ -3,7 +3,6 @@ from trialmatchai.interop.models import ( ClinicalFact, Demographics, - EvidenceSpan, NormalizedCode, PatientNote, PatientProfile, @@ -14,7 +13,6 @@ __all__ = [ "ClinicalFact", "Demographics", - "EvidenceSpan", "NormalizedCode", "PatientNote", "PatientProfile", diff --git a/src/trialmatchai/interop/exporters/matching_summary.py b/src/trialmatchai/interop/exporters/matching_summary.py index ac934a1b..4d8f91fc 100644 --- a/src/trialmatchai/interop/exporters/matching_summary.py +++ b/src/trialmatchai/interop/exporters/matching_summary.py @@ -12,7 +12,7 @@ def profile_to_matching_summary(profile: PatientProfile) -> dict: else "all" ) gender = profile.demographics.sex or profile.demographics.gender or "all" - expanded_sentences = render_patient_narrative(profile, style="rag") + expanded_sentences = render_patient_narrative(profile) return { "patient_id": profile.patient_id, "main_conditions": main_conditions, diff --git a/src/trialmatchai/interop/models.py b/src/trialmatchai/interop/models.py index 34e41699..7e8e567b 100644 --- a/src/trialmatchai/interop/models.py +++ b/src/trialmatchai/interop/models.py @@ -17,20 +17,6 @@ ] -class EvidenceSpan(BaseModel): - text: str | None = None - start: int | None = Field(default=None, ge=0) - end: int | None = Field(default=None, ge=0) - - @field_validator("end") - @classmethod - def validate_end(cls, value: int | None, info): - start = info.data.get("start") - if value is not None and start is not None and value < start: - raise ValueError("evidence span end must be >= start") - return value - - class Provenance(BaseModel): source_format: str source_id: str | None = None @@ -38,7 +24,6 @@ class Provenance(BaseModel): source_resource: str | None = None source_table: str | None = None source_field: str | None = None - raw_text_span: EvidenceSpan | None = None model_config = ConfigDict(extra="allow") @@ -134,19 +119,6 @@ class PatientProfile(BaseModel): model_config = ConfigDict(extra="allow") - def all_facts(self) -> list[ClinicalFact]: - return [ - *self.conditions, - *self.phenotypes, - *self.observations, - *self.medications, - *self.procedures, - *self.diagnostic_reports, - *self.genomic_findings, - *self.cancer_profile, - *self.family_history, - ] - def add_fact(self, fact: ClinicalFact) -> None: bucket = { "condition": self.conditions, diff --git a/src/trialmatchai/interop/narrative.py b/src/trialmatchai/interop/narrative.py index 388e68ed..cf762ed1 100644 --- a/src/trialmatchai/interop/narrative.py +++ b/src/trialmatchai/interop/narrative.py @@ -5,11 +5,7 @@ from trialmatchai.interop.models import ClinicalFact, PatientProfile -def render_patient_narrative( - profile: PatientProfile, - *, - style: str = "rag", -) -> list[str]: +def render_patient_narrative(profile: PatientProfile) -> list[str]: """Render structured profile facts into deterministic LLM-ready sentences.""" lines: list[str] = [] demographics = profile.demographics @@ -37,10 +33,7 @@ def render_patient_narrative( lines.extend(_render_fact_group("Cancer profile", profile.cancer_profile)) lines.extend(_render_fact_group("Family history", profile.family_history)) - if style == "audit": - for note in profile.notes: - lines.append(f"Source note {note.note_id}: {note.text}") - elif profile.notes: + if profile.notes: note_text = " ".join(note.text for note in profile.notes[:3]) if note_text: lines.append(f"Clinical note context: {note_text[:2000]}") diff --git a/src/trialmatchai/matching/retrieval/criteria_retrieval.py b/src/trialmatchai/matching/retrieval/criteria_retrieval.py index ece91552..356e701f 100644 --- a/src/trialmatchai/matching/retrieval/criteria_retrieval.py +++ b/src/trialmatchai/matching/retrieval/criteria_retrieval.py @@ -110,7 +110,7 @@ def execute_query(query): query_to_hits[query] = hits return query_to_hits - def rerank_criteria(self, queries: List[str], criteria: List[Dict]) -> List[Dict]: + def rerank_criteria(self, criteria: List[Dict]) -> List[Dict]: if self.llm_reranker is None: logger.warning("LLM reranker not available, using search scores only") return self.score_criteria_without_llm(criteria) @@ -210,7 +210,7 @@ def retrieve_and_rank( # Check if reranker is available before trying to use it if use_reranker and self.llm_reranker is not None: - ranked_criteria = self.rerank_criteria(queries, all_criteria) + ranked_criteria = self.rerank_criteria(all_criteria) else: if use_reranker and self.llm_reranker is None: logger.info( diff --git a/src/trialmatchai/utils/retry.py b/src/trialmatchai/utils/retry.py deleted file mode 100644 index c4429eef..00000000 --- a/src/trialmatchai/utils/retry.py +++ /dev/null @@ -1,37 +0,0 @@ -from __future__ import annotations - -import random -import time -from typing import Callable, Optional, Tuple, TypeVar - -T = TypeVar("T") - - -def with_retries( - fn: Callable[[], T], - *, - retries: int = 3, - base_delay: float = 0.5, - max_delay: float = 5.0, - jitter: float = 0.1, - exceptions: Tuple[type[BaseException], ...] = (Exception,), - logger: Optional[object] = None, - action: str = "operation", -) -> T: - last_exc: Optional[BaseException] = None - for attempt in range(1, retries + 1): - try: - return fn() - except exceptions as exc: # type: ignore[misc] - last_exc = exc - if logger is not None: - logger.warning( - "%s failed (attempt %s/%s): %s", action, attempt, retries, exc - ) - if attempt < retries: - delay = min(max_delay, base_delay * (2 ** (attempt - 1))) - delay += random.uniform(0, jitter) - time.sleep(delay) - if last_exc is not None: - raise last_exc - raise RuntimeError(f"{action} failed after {retries} attempts") diff --git a/tests/test_entities.py b/tests/test_entities.py index d2f7b80f..36b63ec1 100644 --- a/tests/test_entities.py +++ b/tests/test_entities.py @@ -3,7 +3,7 @@ import csv from pathlib import Path -from trialmatchai.entities.annotator import CompatibilityEntityAnnotator +from trialmatchai.entities.annotator import SchemaEntityAnnotator from trialmatchai.entities.builder import ( build_dictionary_rows, build_omop_concept_rows, @@ -29,7 +29,7 @@ def test_default_schema_validates_vocab_routing(): def test_regex_backend_returns_current_output_shape(): schemas = [schema for schema in load_entity_schemas() if schema.id == "disease"] - annotator = CompatibilityEntityAnnotator(RegexSchemaRecognizer(), schemas) + annotator = SchemaEntityAnnotator(RegexSchemaRecognizer(), schemas) result = annotator.annotate_texts_in_parallel(["metastatic cancer"], max_workers=1) diff --git a/tests/test_retry_pytest.py b/tests/test_retry_pytest.py deleted file mode 100644 index 58d93460..00000000 --- a/tests/test_retry_pytest.py +++ /dev/null @@ -1,13 +0,0 @@ -from trialmatchai.utils.retry import with_retries - - -def test_with_retries_succeeds_after_failures(): - calls = {"count": 0} - - def flaky(): - calls["count"] += 1 - if calls["count"] < 3: - raise RuntimeError("boom") - return "ok" - - assert with_retries(flaky, retries=3, base_delay=0.0, max_delay=0.0) == "ok" From ac0ded4eca2ce292f27578e533abf97ff682d718 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 10:07:39 +0200 Subject: [PATCH 15/64] PR5: fix OMOP child-table join (silent data loss) + remove N+1 The join compared each child table's raw person_id against the patient's *sanitized* profile id via astype(str). Two real failures: 1. a null person_id in a child table promotes the column to float64, so person_id 1 serialized as "1.0" and "1.0" != "1" dropped every condition/measurement/drug/procedure/observation/note for that patient; 2. a person_id needing sanitization ("pat 01" -> "pat-01") never matched the raw child value. Now join on the raw person_id via _normalize_join_id (handles float promotion and string/int mismatch) and pre-group each child table once with _group_by_person, so each patient is an O(1) lookup instead of a full astype scan per table (removes the O(P*R) N+1). _concept_lookup also switches off iterrows. Profile ids are still sanitized for display/provenance. Two regression tests (null-person_id float promotion; sanitized id) fail on the old code and pass now. Co-Authored-By: Claude Opus 4.8 --- src/trialmatchai/interop/importers/omop.py | 115 ++++++++++++++------- tests/test_patient_interop.py | 63 +++++++++++ 2 files changed, 143 insertions(+), 35 deletions(-) diff --git a/src/trialmatchai/interop/importers/omop.py b/src/trialmatchai/interop/importers/omop.py index c8a45214..a026b64d 100644 --- a/src/trialmatchai/interop/importers/omop.py +++ b/src/trialmatchai/interop/importers/omop.py @@ -31,9 +31,27 @@ def import_omop_extract( raise ValueError(f"OMOP extract is missing PERSON table: {root}") return [] + # Group each child table by normalized person_id ONCE, so each patient is an + # O(1) lookup instead of a full-table scan (no N+1), and the join is robust + # to float promotion from null person_id and to id sanitization. + grouped = { + name: _group_by_person(tables.get(name)) + for name in ( + "condition_occurrence", + "measurement", + "drug_exposure", + "procedure_occurrence", + "observation", + "note", + "note_nlp", + ) + } + profiles: list[PatientProfile] = [] - for _, row in person.iterrows(): - patient_id = safe_patient_id(row.get("person_id"), "omop-patient") + for row in person.to_dict("records"): + raw_person_id = row.get("person_id") + person_key = _normalize_join_id(raw_person_id) + patient_id = safe_patient_id(raw_person_id, "omop-patient") provenance = Provenance( source_format="omop", source_id=patient_id, @@ -52,13 +70,13 @@ def import_omop_extract( ), provenance=[provenance], ) - _add_condition_rows(profile, tables.get("condition_occurrence"), concepts, root) - _add_measurement_rows(profile, tables.get("measurement"), concepts, root) - _add_drug_rows(profile, tables.get("drug_exposure"), concepts, root) - _add_procedure_rows(profile, tables.get("procedure_occurrence"), concepts, root) - _add_observation_rows(profile, tables.get("observation"), concepts, root) - _add_note_rows(profile, tables.get("note"), root) - _add_note_nlp_rows(profile, tables.get("note_nlp"), concepts, root) + _add_condition_rows(profile, grouped["condition_occurrence"].get(person_key, []), concepts, root) + _add_measurement_rows(profile, grouped["measurement"].get(person_key, []), concepts, root) + _add_drug_rows(profile, grouped["drug_exposure"].get(person_key, []), concepts, root) + _add_procedure_rows(profile, grouped["procedure_occurrence"].get(person_key, []), concepts, root) + _add_observation_rows(profile, grouped["observation"].get(person_key, []), concepts, root) + _add_note_rows(profile, grouped["note"].get(person_key, []), root) + _add_note_nlp_rows(profile, grouped["note_nlp"].get(person_key, []), concepts, root) profiles.append(profile) return profiles @@ -82,9 +100,9 @@ def _concept_lookup(table: pd.DataFrame | None) -> dict[Any, dict[str, Any]]: if table is None: return {} return { - row.get("concept_id"): row.to_dict() - for _, row in table.iterrows() - if row.get("concept_id") is not None + record.get("concept_id"): record + for record in table.to_dict("records") + if record.get("concept_id") is not None } @@ -101,11 +119,11 @@ def _person_birth_date(row) -> Any: def _add_condition_rows( profile: PatientProfile, - table: pd.DataFrame | None, + rows: list[dict[str, Any]], concepts: dict[Any, dict[str, Any]], root: Path, ) -> None: - for row in _rows_for_patient(table, profile.patient_id, "person_id"): + for row in rows: code = _omop_code(row.get("condition_concept_id"), concepts) label = _concept_label(row.get("condition_concept_id"), concepts) or clean_text( row.get("condition_source_value") @@ -124,11 +142,11 @@ def _add_condition_rows( def _add_measurement_rows( profile: PatientProfile, - table: pd.DataFrame | None, + rows: list[dict[str, Any]], concepts: dict[Any, dict[str, Any]], root: Path, ) -> None: - for row in _rows_for_patient(table, profile.patient_id, "person_id"): + for row in rows: code = _omop_code(row.get("measurement_concept_id"), concepts) label = _concept_label(row.get("measurement_concept_id"), concepts) or clean_text( row.get("measurement_source_value") @@ -152,11 +170,11 @@ def _add_measurement_rows( def _add_drug_rows( profile: PatientProfile, - table: pd.DataFrame | None, + rows: list[dict[str, Any]], concepts: dict[Any, dict[str, Any]], root: Path, ) -> None: - for row in _rows_for_patient(table, profile.patient_id, "person_id"): + for row in rows: code = _omop_code(row.get("drug_concept_id"), concepts) label = _concept_label(row.get("drug_concept_id"), concepts) or clean_text( row.get("drug_source_value") @@ -175,11 +193,11 @@ def _add_drug_rows( def _add_procedure_rows( profile: PatientProfile, - table: pd.DataFrame | None, + rows: list[dict[str, Any]], concepts: dict[Any, dict[str, Any]], root: Path, ) -> None: - for row in _rows_for_patient(table, profile.patient_id, "person_id"): + for row in rows: code = _omop_code(row.get("procedure_concept_id"), concepts) label = _concept_label(row.get("procedure_concept_id"), concepts) or clean_text( row.get("procedure_source_value") @@ -198,11 +216,11 @@ def _add_procedure_rows( def _add_observation_rows( profile: PatientProfile, - table: pd.DataFrame | None, + rows: list[dict[str, Any]], concepts: dict[Any, dict[str, Any]], root: Path, ) -> None: - for row in _rows_for_patient(table, profile.patient_id, "person_id"): + for row in rows: code = _omop_code(row.get("observation_concept_id"), concepts) label = _concept_label(row.get("observation_concept_id"), concepts) or clean_text( row.get("observation_source_value") @@ -221,10 +239,10 @@ def _add_observation_rows( def _add_note_rows( profile: PatientProfile, - table: pd.DataFrame | None, + rows: list[dict[str, Any]], root: Path, ) -> None: - for row in _rows_for_patient(table, profile.patient_id, "person_id"): + for row in rows: text = clean_text(row.get("note_text")) if not text: continue @@ -241,11 +259,11 @@ def _add_note_rows( def _add_note_nlp_rows( profile: PatientProfile, - table: pd.DataFrame | None, + rows: list[dict[str, Any]], concepts: dict[Any, dict[str, Any]], root: Path, ) -> None: - for row in _rows_for_patient(table, profile.patient_id, "person_id"): + for row in rows: code = _omop_code(row.get("note_nlp_concept_id"), concepts) label = _concept_label(row.get("note_nlp_concept_id"), concepts) or clean_text( row.get("lexical_variant") or row.get("snippet") @@ -268,15 +286,42 @@ def _add_note_nlp_rows( ) -def _rows_for_patient( - table: pd.DataFrame | None, - patient_id: str, - column: str, -) -> list[dict[str, Any]]: - if table is None or table.empty or column not in table.columns: - return [] - patient_rows = table[table[column].astype(str) == str(patient_id)] - return [row.to_dict() for _, row in patient_rows.iterrows()] +def _normalize_join_id(value: Any) -> str: + """Canonicalize a person_id for joining across tables. + + Robust to float promotion (a null in the column makes person_id 1 -> 1.0) + and to the raw-vs-string mismatch, so PERSON and child tables join on the + same key regardless of dtype. + """ + if value is None: + return "" + if isinstance(value, float): + if pd.isna(value): + return "" + if value.is_integer(): + return str(int(value)) + return str(value) + try: + if pd.isna(value): + return "" + except (TypeError, ValueError): + pass + text = str(value).strip() + if text.endswith(".0") and text[:-2].isdigit(): + return text[:-2] + return text + + +def _group_by_person(table: pd.DataFrame | None) -> dict[str, list[dict[str, Any]]]: + if table is None or table.empty or "person_id" not in table.columns: + return {} + grouped: dict[str, list[dict[str, Any]]] = {} + for record in table.to_dict("records"): + key = _normalize_join_id(record.get("person_id")) + if not key: + continue + grouped.setdefault(key, []).append(record) + return grouped def _row_provenance(root: Path, patient_id: str, table_name: str) -> Provenance: diff --git a/tests/test_patient_interop.py b/tests/test_patient_interop.py index 78089d1b..81efba93 100644 --- a/tests/test_patient_interop.py +++ b/tests/test_patient_interop.py @@ -265,6 +265,69 @@ def test_omop_importer_from_csv_extract(tmp_path): assert profiles[0].conditions[0].normalized_codes[0].code == "44054006" +def test_omop_join_survives_null_person_id_float_promotion(tmp_path): + # A NULL person_id in a child table promotes the whole column to float64, so + # person_id 1 serializes as "1.0". The join must still match the PERSON row + # (previously every child record was silently dropped). + omop = tmp_path / "omop" + omop.mkdir() + pd.DataFrame( + [{"person_id": 1, "gender_source_value": "F", "year_of_birth": 1980}] + ).to_csv(omop / "PERSON.csv", index=False) + pd.DataFrame( + [ + {"person_id": 1, "condition_concept_id": 10}, + {"person_id": None, "condition_concept_id": 11}, + ] + ).to_csv(omop / "CONDITION_OCCURRENCE.csv", index=False) + pd.DataFrame( + [ + { + "concept_id": 10, + "vocabulary_id": "SNOMED", + "concept_code": "44054006", + "concept_name": "Diabetes mellitus", + "domain_id": "Condition", + } + ] + ).to_csv(omop / "CONCEPT.csv", index=False) + + profiles = import_patient_path(omop) + + assert len(profiles) == 1 + assert [c.label for c in profiles[0].conditions] == ["Diabetes mellitus"] + + +def test_omop_join_uses_raw_person_id_not_sanitized_profile_id(tmp_path): + # The profile id is sanitized ("pat 01" -> "pat-01"), but child-table joins + # must key off the raw person_id, not the sanitized profile id. + omop = tmp_path / "omop" + omop.mkdir() + pd.DataFrame( + [{"person_id": "pat 01", "gender_source_value": "M", "year_of_birth": 1970}] + ).to_csv(omop / "PERSON.csv", index=False) + pd.DataFrame( + [{"person_id": "pat 01", "condition_concept_id": 10}] + ).to_csv(omop / "CONDITION_OCCURRENCE.csv", index=False) + pd.DataFrame( + [ + { + "concept_id": 10, + "vocabulary_id": "SNOMED", + "concept_code": "44054006", + "concept_name": "Diabetes mellitus", + "domain_id": "Condition", + } + ] + ).to_csv(omop / "CONCEPT.csv", index=False) + + profiles = import_patient_path(omop) + + assert len(profiles) == 1 + assert profiles[0].patient_id == "pat-01" + assert [c.label for c in profiles[0].conditions] == ["Diabetes mellitus"] + + def test_narrative_and_phenopacket_export_are_deterministic(tmp_path): packet = { "id": "patient-export", From a68d108e52ffd83deb9a99dde00bd84119008b67 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 10:14:09 +0200 Subject: [PATCH 16/64] PR6: retrieval/indexing correctness (4 fixes) 1. prepare_trial_document now writes detailed_description and official_title. The backend weights both in TRIAL_TEXT_WEIGHTS (1.5 / 1.0) but they were never indexed, so the weights were dead and trials were under-indexed. (Requires rebuilding the LanceDB trial index to take effect.) 2. trial_ranker.load_trial_data only loads NCT-named files. It previously globbed every *.json in the output folder, scoring run sidecars (keywords/patient_profile/first_level_scores/rag_output) as bogus 0.0 trials. 3. _scan_rows fallback now applies the nct_id WHERE filter (table.search().where(...)). When FTS and vector both returned nothing it scanned an unfiltered head slice that could exclude the requested trials. Verified table.search().where() against lancedb 0.25.3. 4. create_query drops the 7 keys the backend never reads (age/sex/ overall_status/pre_selected_nct_ids/vector_score_threshold/max_text_score/ search_mode) and the misleading age=0-vs-None contract; search_trials already passes those filters to the backend directly. Removes the deferred max_text_score param. Regression tests: scan-fallback nct filter, NCT-only loading (+ sidecars skipped), minimal create_query contract, and prepared-doc field preservation. Co-Authored-By: Claude Opus 4.8 --- .../matching/retrieval/trial_retrieval.py | 30 ++------------ src/trialmatchai/matching/trial_ranker.py | 5 ++- src/trialmatchai/registry/preparation.py | 6 +++ src/trialmatchai/search/lancedb_backend.py | 10 ++++- tests/test_lancedb_search_backend.py | 39 +++++++++++++++++++ tests/test_registry_updater.py | 25 ++++++++++++ tests/test_search_queries_pytest.py | 12 ++---- tests/test_trial_ranker_pytest.py | 11 ++++-- 8 files changed, 97 insertions(+), 41 deletions(-) diff --git a/src/trialmatchai/matching/retrieval/trial_retrieval.py b/src/trialmatchai/matching/retrieval/trial_retrieval.py index c1e02463..2d93a556 100644 --- a/src/trialmatchai/matching/retrieval/trial_retrieval.py +++ b/src/trialmatchai/matching/retrieval/trial_retrieval.py @@ -78,15 +78,11 @@ def create_query( self, synonyms: List[str], embeddings: Dict[str, List[float]], - age: int, - sex: str, - overall_status: Optional[str], - max_text_score: float, - vector_score_threshold: float = 0.5, - pre_selected_nct_ids: Optional[List[str]] = None, other_conditions: Optional[List[str]] = None, - search_mode: str = "hybrid", ) -> Dict: + # Assemble the term lists (with a conservative cap) and embeddings the + # backend consumes. Filters like age/sex/status/nct_ids are passed to the + # backend directly by search_trials, not threaded through this dict. max_conditions_per_query = 800 # Conservative limit all_conditions = synonyms + (other_conditions or []) if len(all_conditions) > max_conditions_per_query: @@ -107,13 +103,6 @@ def create_query( "primary_terms": synonyms, "other_terms": other_conditions or [], "embeddings": embeddings, - "age": age, - "sex": sex, - "overall_status": overall_status, - "pre_selected_nct_ids": pre_selected_nct_ids or [], - "search_mode": search_mode, - "vector_score_threshold": vector_score_threshold, - "max_text_score": max_text_score, } def search_trials( @@ -155,18 +144,7 @@ def search_trials( ) mode = "bm25" - query = self.create_query( - primary_synonyms, - embeddings, - age if age is not None else 0, - sex, - overall_status, - 1.0, - vector_score_threshold, - pre_selected_nct_ids, - other_conditions, - search_mode=mode, - ) + query = self.create_query(primary_synonyms, embeddings, other_conditions) try: trials, scores = self.search_backend.search_trials( primary_terms=query["primary_terms"], diff --git a/src/trialmatchai/matching/trial_ranker.py b/src/trialmatchai/matching/trial_ranker.py index 1c1fceae..cd9dcf24 100644 --- a/src/trialmatchai/matching/trial_ranker.py +++ b/src/trialmatchai/matching/trial_ranker.py @@ -10,7 +10,10 @@ def load_trial_data(json_folder: str) -> List[Dict]: trial_data = [] for file_name in os.listdir(json_folder): - if file_name.endswith(".json"): + # Only NCT-named files are trials; skip run sidecars written to the same + # folder (keywords.json, patient_profile.json, first_level_scores.json, + # rag_output.json), which would otherwise be scored as bogus trials. + if file_name.endswith(".json") and file_name.upper().startswith("NCT"): file_path = os.path.join(json_folder, file_name) trial_id = os.path.splitext(file_name)[0] try: diff --git a/src/trialmatchai/registry/preparation.py b/src/trialmatchai/registry/preparation.py index 48223716..620a6c20 100644 --- a/src/trialmatchai/registry/preparation.py +++ b/src/trialmatchai/registry/preparation.py @@ -46,6 +46,12 @@ def prepare_trial_document( out[field] = text out[vector_field] = vector + # Text-only fields the backend scores on (TRIAL_TEXT_WEIGHTS) but does not embed. + for text_field in ("detailed_description", "official_title"): + value = _preprocess_text(_flatten_text(doc.get(text_field))) + if value: + out[text_field] = value + for simple in ( "overall_status", "phase", diff --git a/src/trialmatchai/search/lancedb_backend.py b/src/trialmatchai/search/lancedb_backend.py index b47b2cd2..575a0309 100644 --- a/src/trialmatchai/search/lancedb_backend.py +++ b/src/trialmatchai/search/lancedb_backend.py @@ -413,7 +413,7 @@ def _candidate_rows( rows_by_key[_row_key(row)] = row if not rows_by_key: - for row in self._scan_rows(table, limit=limit): + for row in self._scan_rows(table, where=where, limit=limit): rows_by_key[_row_key(row)] = row return list(rows_by_key.values()) @@ -455,8 +455,14 @@ def _search_vector( ) return [] - def _scan_rows(self, table: Any, *, limit: int) -> list[dict[str, Any]]: + def _scan_rows( + self, table: Any, *, where: str, limit: int + ) -> list[dict[str, Any]]: try: + # Honor the nct_id filter on the fallback path; an unfiltered head + # slice could return rows that exclude the requested trials entirely. + if where: + return list(table.search().where(where).limit(limit).to_list()) return list(table.to_arrow().to_pylist())[:limit] except Exception as exc: logger.warning("Could not scan LanceDB table rows: %s", exc) diff --git a/tests/test_lancedb_search_backend.py b/tests/test_lancedb_search_backend.py index 012ed12e..5b94a4a6 100644 --- a/tests/test_lancedb_search_backend.py +++ b/tests/test_lancedb_search_backend.py @@ -3,6 +3,7 @@ import pytest from trialmatchai.search import LanceDBSearchBackend +from trialmatchai.search.lancedb_backend import _nct_where pytest.importorskip("lancedb") @@ -73,3 +74,41 @@ def test_lancedb_backend_indexes_and_searches_trials_and_criteria(tmp_path): assert trials[0]["nct_id"] == "N1" assert scores[0] > 0 assert criteria_hits[0]["_source"]["criteria_id"] == "C1" + + +def test_scan_rows_fallback_applies_nct_filter(tmp_path): + # The fallback scan (used when FTS and vector both return nothing) must honor + # the nct_id filter; otherwise it returns arbitrary rows that may exclude the + # requested trials entirely. + backend = LanceDBSearchBackend( + tmp_path / "search", + trials_table="trials", + criteria_table="criteria", + candidate_limit=25, + ) + backend.index_criteria( + [ + { + "criteria_id": "C1", + "nct_id": "N1", + "criterion": "alpha", + "criterion_vector": [1.0, 0.0], + "entities": [], + "eligibility_type": "Inclusion Criteria", + }, + { + "criteria_id": "C2", + "nct_id": "N2", + "criterion": "beta", + "criterion_vector": [0.0, 1.0], + "entities": [], + "eligibility_type": "Inclusion Criteria", + }, + ] + ) + table = backend._open_table("criteria") + + rows = backend._scan_rows(table, where=_nct_where(["N1"]), limit=25) + + assert rows + assert {row["nct_id"] for row in rows} == {"N1"} diff --git a/tests/test_registry_updater.py b/tests/test_registry_updater.py index 4c4d0d05..061428de 100644 --- a/tests/test_registry_updater.py +++ b/tests/test_registry_updater.py @@ -49,6 +49,31 @@ def test_client_paginates_and_filters_since(): assert session.calls[1]["params"]["pageToken"] == "page-2" +def test_prepare_trial_document_preserves_detailed_description_and_official_title(): + # These two fields carry BM25 weight in the backend (TRIAL_TEXT_WEIGHTS) but + # were previously dropped before indexing, silently losing retrieval signal. + from trialmatchai.registry.preparation import prepare_trial_document + + class _StubEmbedder: + def embed_texts(self, texts): + return [[0.0, 0.0] for _ in texts] + + prepared = prepare_trial_document( + { + "nct_id": "NCT00000009", + "brief_title": "Brief", + "condition": ["Lung cancer"], + "eligibility_criteria": "Adults", + "detailed_description": "A longer detailed description of the study.", + "official_title": "The Official Long Title of the Study", + }, + _StubEmbedder(), + ) + + assert "description" in prepared["detailed_description"].lower() + assert "official" in prepared["official_title"].lower() + + def test_normalize_study_maps_v2_modules_and_splits_criteria(): normalized = normalize_study(_study("NCT00000004")) diff --git a/tests/test_search_queries_pytest.py b/tests/test_search_queries_pytest.py index aabeacae..8ee62a04 100644 --- a/tests/test_search_queries_pytest.py +++ b/tests/test_search_queries_pytest.py @@ -11,20 +11,14 @@ def test_first_level_query_describes_backend_search(): query = search.create_query( synonyms=["lung cancer"], embeddings={}, - age=45, - sex="ALL", - overall_status="Recruiting", - max_text_score=1.0, - vector_score_threshold=0.5, - pre_selected_nct_ids=None, other_conditions=["smoking"], - search_mode="bm25", ) assert query["primary_terms"] == ["lung cancer"] assert query["other_terms"] == ["smoking"] - assert query["overall_status"] == "Recruiting" - assert query["search_mode"] == "bm25" + assert query["embeddings"] == {} + # Filters are passed to the backend directly, not via the query dict. + assert set(query) == {"primary_terms", "other_terms", "embeddings"} def test_build_trial_record_flattens_search_text_and_vector(): diff --git a/tests/test_trial_ranker_pytest.py b/tests/test_trial_ranker_pytest.py index aba7fc42..45e279d5 100644 --- a/tests/test_trial_ranker_pytest.py +++ b/tests/test_trial_ranker_pytest.py @@ -39,12 +39,12 @@ def test_rank_trials_orders_by_score(): def test_load_and_save_ranked_trials(tmp_path): trial_folder = tmp_path / "trials" trial_folder.mkdir() - (trial_folder / "T1.json").write_text( + (trial_folder / "NCT0001.json").write_text( json.dumps( {"Inclusion_Criteria_Evaluation": [], "Exclusion_Criteria_Evaluation": []} ) ) - (trial_folder / "T2.json").write_text( + (trial_folder / "NCT0002.json").write_text( json.dumps( { "Inclusion_Criteria_Evaluation": [{"Classification": "Met"}], @@ -52,12 +52,17 @@ def test_load_and_save_ranked_trials(tmp_path): } ) ) + # Run sidecars in the same folder must NOT be loaded as trials. + (trial_folder / "keywords.json").write_text(json.dumps({"keywords": ["x"]})) + (trial_folder / "patient_profile.json").write_text(json.dumps({"id": "p1"})) trials = load_trial_data(str(trial_folder)) + assert {t["TrialID"] for t in trials} == {"NCT0001", "NCT0002"} + ranked = rank_trials(trials) out_file = tmp_path / "ranked.json" save_ranked_trials(ranked, str(out_file)) saved = json.loads(out_file.read_text()) assert "RankedTrials" in saved - assert saved["RankedTrials"][0]["TrialID"] == "T2" + assert saved["RankedTrials"][0]["TrialID"] == "NCT0002" From d0fc7667fd9a4124dc79b01af77fc3981812ed85 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 10:23:18 +0200 Subject: [PATCH 17/64] PR7a: deduplicate embedder/synonyms/flatten_text helpers Behavior-preserving consolidation of copy-pasted logic: - models/embedding.build_embedder(config): single embedder factory replacing the identical TextEmbedder(TextEmbedderConfig(...)) block in main.py and the index/build-concepts/update-registry CLIs. - matching/retrieval/synonyms.disease_synonyms(): one disease-synonym extractor that ClinicalTrialSearch and SecondStageRetriever now delegate to. - utils/text.flatten_text(): single whitespace-normalizing flatten used by both registry.preparation and search.lancedb_backend (the two _flatten_text copies). Behavior-preserving for preparation since _preprocess_text re-normalizes. Co-Authored-By: Claude Opus 4.8 --- src/trialmatchai/cli/build_concepts.py | 17 ++-------- src/trialmatchai/cli/index_data.py | 17 ++-------- src/trialmatchai/cli/update_registry.py | 19 ++--------- src/trialmatchai/main.py | 20 ++--------- .../matching/retrieval/criteria_retrieval.py | 17 ++-------- .../matching/retrieval/synonyms.py | 33 +++++++++++++++++++ .../matching/retrieval/trial_retrieval.py | 20 ++--------- src/trialmatchai/models/embedding/__init__.py | 8 +++-- .../models/embedding/text_embedder.py | 22 +++++++++++++ src/trialmatchai/registry/preparation.py | 20 +++-------- src/trialmatchai/search/lancedb_backend.py | 27 +++++---------- src/trialmatchai/utils/text.py | 21 ++++++++++++ 12 files changed, 108 insertions(+), 133 deletions(-) create mode 100644 src/trialmatchai/matching/retrieval/synonyms.py create mode 100644 src/trialmatchai/utils/text.py diff --git a/src/trialmatchai/cli/build_concepts.py b/src/trialmatchai/cli/build_concepts.py index 1ca94966..6937a34b 100644 --- a/src/trialmatchai/cli/build_concepts.py +++ b/src/trialmatchai/cli/build_concepts.py @@ -12,7 +12,7 @@ concept_texts_for_embedding, write_lancedb_table, ) -from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig +from trialmatchai.models.embedding import build_embedder from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -59,7 +59,6 @@ def main() -> int: config = load_config(args.config) linker_cfg = config.get("concept_linker", {}) - embedder_cfg = config.get("embedder", {}) db_path = args.db_path or linker_cfg.get("db_path") or "data/concepts" table_name = args.table or linker_cfg.get("table") or "concepts" @@ -81,19 +80,7 @@ def main() -> int: embeddings = None if not args.skip_embeddings: - embedder = TextEmbedder( - TextEmbedderConfig( - model_name=embedder_cfg.get("model_name", "BAAI/bge-m3"), - revision=embedder_cfg.get("revision"), - trust_remote_code=embedder_cfg.get("trust_remote_code", False), - pooling=embedder_cfg.get("pooling", "mean"), - max_length=embedder_cfg.get("max_length", 512), - batch_size=embedder_cfg.get("batch_size", 32), - use_gpu=embedder_cfg.get("use_gpu", True), - use_fp16=embedder_cfg.get("use_fp16", False), - normalize=embedder_cfg.get("normalize", True), - ) - ) + embedder = build_embedder(config) embeddings = embedder.embed_texts(concept_texts_for_embedding(rows)) Path(db_path).mkdir(parents=True, exist_ok=True) diff --git a/src/trialmatchai/cli/index_data.py b/src/trialmatchai/cli/index_data.py index f36a0f02..0cf2c7fd 100644 --- a/src/trialmatchai/cli/index_data.py +++ b/src/trialmatchai/cli/index_data.py @@ -129,7 +129,7 @@ def _prepare_from_trials_jsons( processed_criteria_folder: Path, ) -> None: from trialmatchai.entities import build_entity_annotator - from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig + from trialmatchai.models.embedding import build_embedder from trialmatchai.registry.preparation import ( prepare_criteria_documents, prepare_trial_document, @@ -137,20 +137,7 @@ def _prepare_from_trials_jsons( write_prepared_trial, ) - embedder_cfg = config.get("embedder", {}) - embedder = TextEmbedder( - TextEmbedderConfig( - model_name=embedder_cfg.get("model_name", "BAAI/bge-m3"), - revision=embedder_cfg.get("revision"), - trust_remote_code=embedder_cfg.get("trust_remote_code", False), - pooling=embedder_cfg.get("pooling", "mean"), - max_length=embedder_cfg.get("max_length", 512), - batch_size=embedder_cfg.get("batch_size", 32), - use_gpu=embedder_cfg.get("use_gpu", True), - use_fp16=embedder_cfg.get("use_fp16", False), - normalize=embedder_cfg.get("normalize", True), - ) - ) + embedder = build_embedder(config) entity_annotator = build_entity_annotator(config, embedder=embedder) trial_docs = _load_flat_json_folder(trials_json_folder) for doc in trial_docs: diff --git a/src/trialmatchai/cli/update_registry.py b/src/trialmatchai/cli/update_registry.py index ff784a05..b1bf5971 100644 --- a/src/trialmatchai/cli/update_registry.py +++ b/src/trialmatchai/cli/update_registry.py @@ -126,22 +126,9 @@ def embed_texts(self, texts): def _build_embedder(config: dict[str, Any]): - from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig - - embedder_cfg = config.get("embedder", {}) - return TextEmbedder( - TextEmbedderConfig( - model_name=embedder_cfg.get("model_name", "BAAI/bge-m3"), - revision=embedder_cfg.get("revision"), - trust_remote_code=embedder_cfg.get("trust_remote_code", False), - pooling=embedder_cfg.get("pooling", "mean"), - max_length=embedder_cfg.get("max_length", 512), - batch_size=embedder_cfg.get("batch_size", 32), - use_gpu=embedder_cfg.get("use_gpu", True), - use_fp16=embedder_cfg.get("use_fp16", False), - normalize=embedder_cfg.get("normalize", True), - ) - ) + from trialmatchai.models.embedding import build_embedder + + return build_embedder(config) def _build_entity_annotator(config: dict[str, Any], embedder): diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index b2d88f02..a157f315 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -255,10 +255,7 @@ def main_pipeline(config_path: str | None = None) -> int: ) return 1 - from trialmatchai.models.embedding.text_embedder import ( - TextEmbedder, - TextEmbedderConfig, - ) + from trialmatchai.models.embedding import build_embedder from trialmatchai.models.llm.llm_loader import load_model_and_tokenizer from trialmatchai.models.llm.llm_reranker import LLMReranker @@ -286,20 +283,7 @@ def main_pipeline(config_path: str | None = None) -> int: model = model.half() # type: ignore # Initialize components - embedder_cfg = config.get("embedder", {}) - embedder = TextEmbedder( - TextEmbedderConfig( - model_name=embedder_cfg.get("model_name", "BAAI/bge-m3"), - revision=embedder_cfg.get("revision"), - trust_remote_code=embedder_cfg.get("trust_remote_code", False), - pooling=embedder_cfg.get("pooling", "mean"), - max_length=embedder_cfg.get("max_length", 512), - batch_size=embedder_cfg.get("batch_size", 32), - use_gpu=embedder_cfg.get("use_gpu", True), - use_fp16=embedder_cfg.get("use_fp16", False), - normalize=embedder_cfg.get("normalize", True), - ) - ) + embedder = build_embedder(config) entity_annotator = build_entity_annotator(config, embedder=embedder) with warnings.catch_warnings(): diff --git a/src/trialmatchai/matching/retrieval/criteria_retrieval.py b/src/trialmatchai/matching/retrieval/criteria_retrieval.py index 356e701f..0439117a 100644 --- a/src/trialmatchai/matching/retrieval/criteria_retrieval.py +++ b/src/trialmatchai/matching/retrieval/criteria_retrieval.py @@ -5,6 +5,7 @@ from concurrent.futures import ThreadPoolExecutor, as_completed from typing import TYPE_CHECKING, Dict, List, Optional +from trialmatchai.matching.retrieval.synonyms import disease_synonyms from trialmatchai.search.lancedb_backend import TrialSearchBackend from trialmatchai.utils.file_utils import write_text_file from trialmatchai.utils.logging_config import setup_logging @@ -39,21 +40,7 @@ def __init__( self.search_mode = search_mode.lower() if search_mode else "hybrid" def get_synonyms(self, condition: str) -> List[str]: - if self.entity_annotator is None: - logger.warning("Entity annotator not initialized; cannot extract synonyms.") - return [] - raw_result = self.entity_annotator.annotate_texts_in_parallel( - [condition], max_workers=1 - ) - ner_results = raw_result - if ner_results and ner_results[0]: - synonyms = set() - for entity in ner_results[0]: - if entity.get("entity_group", "").lower() == "disease": - synonyms.update(entity.get("synonyms", [])) - return list(synonyms) - logger.warning(f"No annotations found for condition: {condition}") - return [] + return disease_synonyms(self.entity_annotator, condition) def retrieve_criteria( self, nct_ids: List[str], queries: List[str] diff --git a/src/trialmatchai/matching/retrieval/synonyms.py b/src/trialmatchai/matching/retrieval/synonyms.py new file mode 100644 index 00000000..7b8ad381 --- /dev/null +++ b/src/trialmatchai/matching/retrieval/synonyms.py @@ -0,0 +1,33 @@ +"""Shared disease-synonym extraction used by the first- and second-stage retrievers.""" + +from __future__ import annotations + +from typing import Any, List + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def disease_synonyms(entity_annotator: Any, condition: str) -> List[str]: + """Return linked disease synonyms for a condition via the entity annotator. + + Returns an empty list when the annotator is unavailable or extraction fails. + """ + if entity_annotator is None: + logger.info("Entity annotator disabled; skipping synonyms extraction.") + return [] + try: + raw_result = entity_annotator.annotate_texts_in_parallel( + [condition], max_workers=1 + ) + if raw_result and raw_result[0]: + synonyms: set[str] = set() + for entity in raw_result[0]: + if entity.get("entity_group", "").lower() == "disease": + synonyms.update(entity.get("synonyms", [])) + return list(synonyms) + logger.warning("No annotations found for condition: %s", condition) + except Exception as exc: + logger.error("Entity synonym extraction failed for '%s': %s", condition, exc) + return [] diff --git a/src/trialmatchai/matching/retrieval/trial_retrieval.py b/src/trialmatchai/matching/retrieval/trial_retrieval.py index 2d93a556..62eafc90 100644 --- a/src/trialmatchai/matching/retrieval/trial_retrieval.py +++ b/src/trialmatchai/matching/retrieval/trial_retrieval.py @@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Union from dateutil import parser as date_parser +from trialmatchai.matching.retrieval.synonyms import disease_synonyms from trialmatchai.search.lancedb_backend import TrialSearchBackend from trialmatchai.utils.logging_config import setup_logging @@ -26,24 +27,7 @@ def __init__( self.entity_annotator = entity_annotator or bio_med_ner def get_synonyms(self, condition: str) -> List[str]: - if not self.entity_annotator: - logger.info("Entity annotator disabled; skipping synonyms extraction.") - return [] - try: - raw_result = self.entity_annotator.annotate_texts_in_parallel( - [condition], max_workers=1 - ) - ner_results = raw_result - if ner_results and ner_results[0]: - synonyms = set() - for entity in ner_results[0]: - if entity.get("entity_group", "").lower() == "disease": - synonyms.update(entity.get("synonyms", [])) - return list(synonyms) - logger.warning(f"No annotations found for condition: {condition}") - except Exception as e: - logger.error(f"Entity synonym extraction failed for '{condition}': {e}") - return [] + return disease_synonyms(self.entity_annotator, condition) def parse_age_input(self, age_input: Union[int, str]) -> Optional[int]: if isinstance(age_input, int): diff --git a/src/trialmatchai/models/embedding/__init__.py b/src/trialmatchai/models/embedding/__init__.py index f91ae8bc..85fc9fdf 100644 --- a/src/trialmatchai/models/embedding/__init__.py +++ b/src/trialmatchai/models/embedding/__init__.py @@ -1,3 +1,7 @@ -from trialmatchai.models.embedding.text_embedder import TextEmbedder, TextEmbedderConfig +from trialmatchai.models.embedding.text_embedder import ( + TextEmbedder, + TextEmbedderConfig, + build_embedder, +) -__all__ = ["TextEmbedder", "TextEmbedderConfig"] +__all__ = ["TextEmbedder", "TextEmbedderConfig", "build_embedder"] diff --git a/src/trialmatchai/models/embedding/text_embedder.py b/src/trialmatchai/models/embedding/text_embedder.py index da5c9929..b86eadfa 100644 --- a/src/trialmatchai/models/embedding/text_embedder.py +++ b/src/trialmatchai/models/embedding/text_embedder.py @@ -95,6 +95,28 @@ def _batched(items: Sequence[str], batch_size: int) -> Iterable[Sequence[str]]: yield items[i : i + batch_size] +def build_embedder(config: dict) -> TextEmbedder: + """Construct a TextEmbedder from the ``embedder`` section of a config dict. + + Single source for the embedder wiring previously copy-pasted across main.py + and the index/build-concepts/update-registry CLIs. + """ + embedder_cfg = config.get("embedder", {}) or {} + return TextEmbedder( + TextEmbedderConfig( + model_name=embedder_cfg.get("model_name", "BAAI/bge-m3"), + revision=embedder_cfg.get("revision"), + trust_remote_code=embedder_cfg.get("trust_remote_code", False), + pooling=embedder_cfg.get("pooling", "mean"), + max_length=embedder_cfg.get("max_length", 512), + batch_size=embedder_cfg.get("batch_size", 32), + use_gpu=embedder_cfg.get("use_gpu", True), + use_fp16=embedder_cfg.get("use_fp16", False), + normalize=embedder_cfg.get("normalize", True), + ) + ) + + def _load_embedding_dependencies(): try: import torch diff --git a/src/trialmatchai/registry/preparation.py b/src/trialmatchai/registry/preparation.py index 620a6c20..eba4c15e 100644 --- a/src/trialmatchai/registry/preparation.py +++ b/src/trialmatchai/registry/preparation.py @@ -9,6 +9,8 @@ import dateutil.parser +from trialmatchai.utils.text import flatten_text + class TextEmbeddingBackend(Protocol): def embed_texts(self, texts: Sequence[str]) -> list[list[float]]: @@ -39,7 +41,7 @@ def prepare_trial_document( embedder: TextEmbeddingBackend, ) -> dict[str, Any]: out: dict[str, Any] = {"nct_id": doc["nct_id"]} - texts = [_preprocess_text(_flatten_text(doc.get(field))) for field, _ in TRIAL_TEXT_FIELDS] + texts = [_preprocess_text(flatten_text(doc.get(field))) for field, _ in TRIAL_TEXT_FIELDS] vectors = _embed_texts(embedder, texts) for (field, vector_field), text, vector in zip(TRIAL_TEXT_FIELDS, texts, vectors): @@ -48,7 +50,7 @@ def prepare_trial_document( # Text-only fields the backend scores on (TRIAL_TEXT_WEIGHTS) but does not embed. for text_field in ("detailed_description", "official_title"): - value = _preprocess_text(_flatten_text(doc.get(text_field))) + value = _preprocess_text(flatten_text(doc.get(text_field))) if value: out[text_field] = value @@ -94,7 +96,7 @@ def prepare_criteria_documents( if not isinstance(criterion, dict): continue text = _preprocess_text( - _flatten_text(criterion.get("criterion") or criterion.get("sentence")) + flatten_text(criterion.get("criterion") or criterion.get("sentence")) ) if not text: continue @@ -207,18 +209,6 @@ def _preprocess_text(value: str) -> str: return re.sub(r"\s+", " ", value).strip() -def _flatten_text(value: Any) -> str: - if value is None: - return "" - if isinstance(value, str): - return value - if isinstance(value, dict): - return " ".join(_flatten_text(item) for item in value.values()) - if isinstance(value, Sequence) and not isinstance(value, (bytes, bytearray)): - return " ".join(_flatten_text(item) for item in value) - return str(value) - - def _to_iso_date(value: Any) -> str | None: if not value: return None diff --git a/src/trialmatchai/search/lancedb_backend.py b/src/trialmatchai/search/lancedb_backend.py index 575a0309..ef46ed70 100644 --- a/src/trialmatchai/search/lancedb_backend.py +++ b/src/trialmatchai/search/lancedb_backend.py @@ -7,6 +7,7 @@ from typing import Any, Iterable, Mapping, Protocol, Sequence from trialmatchai.utils.logging_config import setup_logging +from trialmatchai.utils.text import flatten_text logger = setup_logging(__name__) @@ -486,7 +487,7 @@ def _table_names(self) -> list[str]: def build_trial_record(doc: Mapping[str, Any]) -> dict[str, Any]: row = dict(doc) - search_text = _flatten_text( + search_text = flatten_text( [ row.get("condition"), row.get("eligibility_criteria"), @@ -508,7 +509,7 @@ def build_criteria_record(doc: Mapping[str, Any]) -> dict[str, Any]: entity_text, synonym_text = _flatten_entities(row.get("entities")) row["entity_text"] = entity_text row["entity_synonyms_text"] = synonym_text - row["search_text"] = _flatten_text( + row["search_text"] = flatten_text( [row.get("criterion"), entity_text, synonym_text] ) return row @@ -613,7 +614,7 @@ def _weighted_text_score( for term in clean_terms: field_score = 0.0 for field, weight in fields: - field_score += weight * _lexical_score(term, _flatten_text(row.get(field))) + field_score += weight * _lexical_score(term, flatten_text(row.get(field))) best = max(best, field_score / max_weight) return min(best, 1.0) @@ -750,24 +751,12 @@ def _flatten_entities(entities: Any) -> tuple[str, str]: for entity in entities: if not isinstance(entity, Mapping): continue - texts.append(_flatten_text([entity.get("text"), entity.get("entity")])) - synonyms.append(_flatten_text(entity.get("synonyms"))) + texts.append(flatten_text([entity.get("text"), entity.get("entity")])) + synonyms.append(flatten_text(entity.get("synonyms"))) for candidate in entity.get("concept_candidates") or []: if isinstance(candidate, Mapping): - synonyms.append(_flatten_text(candidate.get("concept_name"))) - return _flatten_text(texts), _flatten_text(synonyms) - - -def _flatten_text(value: Any) -> str: - if value is None: - return "" - if isinstance(value, str): - return " ".join(value.split()) - if isinstance(value, Mapping): - return " ".join(_flatten_text(item) for item in value.values()).strip() - if isinstance(value, Iterable) and not isinstance(value, (bytes, bytearray)): - return " ".join(_flatten_text(item) for item in value).strip() - return str(value) + synonyms.append(flatten_text(candidate.get("concept_name"))) + return flatten_text(texts), flatten_text(synonyms) def _normalize_text(value: str) -> str: diff --git a/src/trialmatchai/utils/text.py b/src/trialmatchai/utils/text.py new file mode 100644 index 00000000..f4f2ed09 --- /dev/null +++ b/src/trialmatchai/utils/text.py @@ -0,0 +1,21 @@ +"""Shared text helpers.""" + +from __future__ import annotations + +from collections.abc import Iterable, Mapping +from typing import Any + + +def flatten_text(value: Any) -> str: + """Flatten a possibly-nested value (str/mapping/sequence) into whitespace- + normalized text. Used for both trial indexing and backend search-text building. + """ + if value is None: + return "" + if isinstance(value, str): + return " ".join(value.split()) + if isinstance(value, Mapping): + return " ".join(flatten_text(item) for item in value.values()).strip() + if isinstance(value, Iterable) and not isinstance(value, (bytes, bytearray)): + return " ".join(flatten_text(item) for item in value).strip() + return str(value) From b481b9df26f74057f7b49ee95094d093f38a52a7 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 10:26:51 +0200 Subject: [PATCH 18/64] PR7b: extract BaseTrialProcessor to dedupe the eligibility processors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The HF (eligibility_reasoning) and vLLM (eligibility_reasoning_vllm) CoT processors duplicated the ~90-line prompt template, _load_trial_data, _save_outputs, and the worklist/length-bucketing orchestration verbatim — the largest duplication in the repo and a drift risk for the scoring contract. New matching/eligibility_base.BaseTrialProcessor holds the shared prompt, trial I/O, output persistence, and process_trials skeleton (parameterized by the _token_length and _progress_desc hooks). Each backend now subclasses it and implements only __init__ and _process_batch (plus vLLM's LoRA/token-length helpers). Prompt output is byte-identical; behavior preserved. Co-Authored-By: Claude Opus 4.8 --- src/trialmatchai/matching/eligibility_base.py | 215 ++++++++++++++++ .../matching/eligibility_reasoning.py | 193 +-------------- .../matching/eligibility_reasoning_vllm.py | 229 +----------------- 3 files changed, 227 insertions(+), 410 deletions(-) create mode 100644 src/trialmatchai/matching/eligibility_base.py diff --git a/src/trialmatchai/matching/eligibility_base.py b/src/trialmatchai/matching/eligibility_base.py new file mode 100644 index 00000000..7ca14557 --- /dev/null +++ b/src/trialmatchai/matching/eligibility_base.py @@ -0,0 +1,215 @@ +"""Shared base for the CoT eligibility processors (HF and vLLM backends). + +Holds the prompt, trial I/O, output persistence, and the worklist/bucketing +orchestration. Backends subclass this and implement only ``_process_batch`` (and +optionally override ``_token_length`` / ``_progress_desc``). +""" + +from __future__ import annotations + +import json +import os +from typing import Dict, List + +from trialmatchai.utils.file_utils import read_json_file, write_json_file, write_text_file +from trialmatchai.utils.json_utils import extract_json_object +from trialmatchai.utils.logging_config import setup_logging +from tqdm import tqdm + +logger = setup_logging(__name__) + + +class BaseTrialProcessor: + # Subclasses set these in __init__. + tokenizer = None + batch_size: int = 4 + use_cot: bool = True + + # ---------------------- I/O helpers ---------------------- + + def _load_trial_data(self, nct_id: str, json_folder: str) -> str: + try: + path = f"{json_folder}/{nct_id}.json" + trial_data = read_json_file(path) + return trial_data.get("eligibility_criteria", "") + except Exception as e: + logger.error(f"Error loading {nct_id}: {str(e)}") + return "" + + # ---------------------- Prompting ---------------------- + + def _format_prompt(self, criteria_text: str, patient_profile: str) -> str: + criteria_text_formatted = ( + f"Eligibility Criteria:\n{criteria_text}" + if criteria_text + else "No eligibility criteria provided." + ) + + if self.use_cot: + system_msg = ( + "You are a medical expert with advanced knowledge in clinical reasoning, diagnostics, and treatment planning. " + "Answer the following question. Before answering, create a concise chain of thoughts reasoning to ensure a logical and accurate response.\n" + ) + chat = [ + {"role": "system", "content": system_msg}, + { + "role": "user", + "content": ( + "Assess the given patient's eligibility for a clinical trial by evaluating each and every criterion individually.\n\n" + "### INCLUSION CRITERIA ASSESSMENT\n" + "For each inclusion criterion, classify it as one of:\n" + "- **Met:** The patient's data explicitly and unequivocally satisfies the criterion.\n" + "- **Not Met:** The patient's data explicitly and unequivocally contradicts or fails to satisfy the criterion.\n" + "- **Unclear:** Insufficient or missing patient data to verify.\n" + "- **Irrelevant:** The criterion does not apply to the patient's context.\n\n" + "### EXCLUSION CRITERIA ASSESSMENT\n" + "For each exclusion criterion, classify it as one of:\n" + "- **Violated:** The patient's data explicitly and unequivocally violates the criterion.\n" + "- **Not Violated:** The patient's data confirms compliance with the criterion.\n" + "- **Unclear:** Insufficient or missing patient data to verify.\n" + "- **Irrelevant:** The criterion does not apply to the patient's context.\n\n" + "### IMPORTANT INSTRUCTIONS\n" + "- Ensure all criteria are assessed one-by-one.\n" + "- Use **only** the provided patient data; **do not infer, assume, or extrapolate beyond the given information.**\n" + "- Justifications must be strictly based on direct evidence from the patient profile.\n" + "### RESPONSE FORMAT (STRICTLY FOLLOW)\n" + "{\n" + ' "Inclusion_Criteria_Evaluation": [\n' + ' {"Criterion": "Exact inclusion criterion text", "Classification": "Met | Not Met | Unclear | Irrelevant", "Justification": "Clear, evidence-based rationale using ONLY provided data"}\n' + " ],\n" + ' "Exclusion_Criteria_Evaluation": [\n' + ' {"Criterion": "Exact exclusion criterion text", "Classification": "Violated | Not Violated | Unclear | Irrelevant", "Justification": "Clear, evidence-based rationale using ONLY provided data"}\n' + " ],\n" + ' "Recap": "Concise summary of key qualifying/disqualifying factors",\n' + ' "Final Decision": "Eligible | Likely Eligible (leaning toward inclusion) | Likely Ineligible (leaning toward exclusion) | Ineligible"\n' + "}\n\n" + "### INPUT\n" + "---Start of Clinical Trial Criteria---\n" + f"{criteria_text_formatted}\n" + "---End of Clinical Trial Criteria---\n\n" + "----\n" + "---Start of Patient Description---\n" + f"{patient_profile}\n" + "---End of Patient Description---\n" + "## IMPORTANT REMINDER:\n" + "NEVER make assumptions, inferences, or extrapolations beyond the explicitly stated patient information." + ), + }, + ] + else: + chat = [ + { + "role": "system", + "content": ( + "You are a clinical assistant tasked with assessing the eligibility of a patient for a clinical trial. " + "Output only a JSON object evaluating trial eligibility for the patient based only on the provided criteria and patient profile.\n" + ), + }, + { + "role": "user", + "content": ( + "For each criterion, classify:\n" + '- If Inclusion Criterion: "Met" | "Not Met" | "Unclear" | "Irrelevant"\n' + '- If Exclusion Criterion: "Violated" | "Not Violated" | "Unclear" | "Irrelevant"\n\n' + "Provide a justification for each classification based strictly on the provided data. " + "Output this JSON schema:\n" + "{\n" + ' "Inclusion_Criteria_Evaluation": [ {"Criterion": "...", "Classification": "...", "Justification": "..."} ],\n' + ' "Exclusion_Criteria_Evaluation": [ {"Criterion": "...", "Classification": "...", "Justification": "..."} ],\n' + ' "Final Decision": "Eligible | Likely Eligible | Likely Ineligible | Ineligible"\n' + "}\n\n" + "---Start of Clinical Trial Criteria---\n" + f"{criteria_text_formatted}\n" + "---End of Clinical Trial Criteria---\n\n" + "---Start of Patient Description---\n" + f"{patient_profile}\n" + "---End of Patient Description---\n" + ), + }, + ] + + if self.tokenizer is not None and hasattr(self.tokenizer, "apply_chat_template"): + return self.tokenizer.apply_chat_template( + chat, tokenize=False, add_generation_prompt=True + ) + # Fallback: simple concatenation + system_part = f"{chat[0]['content']}\n\n" + user_part = f"{chat[1]['content']}\n\n" + return system_part + user_part + "Answer: " + + # ---------------------- Persistence ---------------------- + + def _save_outputs(self, nct_id: str, response: str, output_folder: str): + try: + os.makedirs(output_folder, exist_ok=True) + txt_path = f"{output_folder}/{nct_id}.txt" + write_text_file([response], txt_path) + try: + json_data = extract_json_object(response) + write_json_file(json_data, f"{output_folder}/{nct_id}.json") + logger.info(f"Processed {nct_id} successfully") + except (json.JSONDecodeError, ValueError) as e: + logger.error(f"Invalid JSON response for {nct_id}: {str(e)}") + write_json_file( + {"error": "invalid_json_response", "raw_output": response}, + f"{output_folder}/{nct_id}.json", + ) + except Exception as e: + logger.error(f"Failed to save {nct_id}: {str(e)}") + + # ---------------------- Hooks for subclasses ---------------------- + + def _token_length(self, prompt: str, nct_id: str = "") -> int: + """Token count used for length bucketing; char-based fallback on error.""" + try: + return len(self.tokenizer(prompt, add_special_tokens=False)["input_ids"]) + except Exception: + return max(1, len(prompt) // 4) + + def _progress_desc(self) -> str: + return "Processing Trials" + + def _process_batch(self, batch: List[Dict], output_folder: str): # pragma: no cover + raise NotImplementedError + + # ---------------------- Public API ---------------------- + + def process_trials( + self, + nct_ids: List[str], + json_folder: str, + output_folder: str, + patient_profile: List[str], + ): + """Build a worklist (skipping already-processed trials), length-bucket to + minimize padding, then process in batches.""" + patient_text = " ".join( + str(line).strip() for line in patient_profile if str(line).strip() + ) + + items: List[Dict] = [] + for nct_id in nct_ids: + if os.path.exists(f"{output_folder}/{nct_id}.json"): + logger.info(f"Skipping existing: {nct_id}") + continue + criteria_text = self._load_trial_data(nct_id, json_folder) + prompt = self._format_prompt(criteria_text, patient_text) + items.append( + { + "nct_id": nct_id, + "prompt": prompt, + "tok_len": self._token_length(prompt, nct_id), + } + ) + + if not items: + logger.info("No work to do.") + return + + if getattr(self, "length_bucket", True): + items.sort(key=lambda x: x["tok_len"]) + + for i in tqdm( + range(0, len(items), self.batch_size), desc=self._progress_desc() + ): + self._process_batch(items[i : i + self.batch_size], output_folder) diff --git a/src/trialmatchai/matching/eligibility_reasoning.py b/src/trialmatchai/matching/eligibility_reasoning.py index bc15d646..4df07283 100644 --- a/src/trialmatchai/matching/eligibility_reasoning.py +++ b/src/trialmatchai/matching/eligibility_reasoning.py @@ -1,12 +1,8 @@ -import json -import os import time from typing import Dict, List -from trialmatchai.utils.file_utils import read_json_file, write_json_file, write_text_file -from trialmatchai.utils.json_utils import extract_json_object +from trialmatchai.matching.eligibility_base import BaseTrialProcessor from trialmatchai.utils.logging_config import setup_logging -from tqdm import tqdm logger = setup_logging(__name__) @@ -25,7 +21,7 @@ def _require_torch(): return torch -class BatchTrialProcessor: +class BatchTrialProcessor(BaseTrialProcessor): def __init__( self, model, @@ -94,117 +90,8 @@ def __init__( except Exception: pass - # ---------------------- I/O helpers ---------------------- - - def _load_trial_data(self, nct_id: str, json_folder: str) -> str: - try: - path = f"{json_folder}/{nct_id}.json" - trial_data = read_json_file(path) - return trial_data.get("eligibility_criteria", "") - except Exception as e: - logger.error(f"Error loading {nct_id}: {str(e)}") - return "" - - # ---------------------- Prompting ---------------------- - - def _format_prompt(self, criteria_text: str, patient_profile: str) -> str: - criteria_text_formatted = ( - f"Eligibility Criteria:\n{criteria_text}" - if criteria_text - else "No eligibility criteria provided." - ) - - if self.use_cot: - system_msg = ( - "You are a medical expert with advanced knowledge in clinical reasoning, diagnostics, and treatment planning. " - "Answer the following question. Before answering, create a concise chain of thoughts reasoning to ensure a logical and accurate response.\n" - ) - chat = [ - {"role": "system", "content": system_msg}, - { - "role": "user", - "content": ( - "Assess the given patient's eligibility for a clinical trial by evaluating each and every criterion individually.\n\n" - "### INCLUSION CRITERIA ASSESSMENT\n" - "For each inclusion criterion, classify it as one of:\n" - "- **Met:** The patient's data explicitly and unequivocally satisfies the criterion.\n" - "- **Not Met:** The patient's data explicitly and unequivocally contradicts or fails to satisfy the criterion.\n" - "- **Unclear:** Insufficient or missing patient data to verify.\n" - "- **Irrelevant:** The criterion does not apply to the patient's context.\n\n" - "### EXCLUSION CRITERIA ASSESSMENT\n" - "For each exclusion criterion, classify it as one of:\n" - "- **Violated:** The patient's data explicitly and unequivocally violates the criterion.\n" - "- **Not Violated:** The patient's data confirms compliance with the criterion.\n" - "- **Unclear:** Insufficient or missing patient data to verify.\n" - "- **Irrelevant:** The criterion does not apply to the patient's context.\n\n" - "### IMPORTANT INSTRUCTIONS\n" - "- Ensure all criteria are assessed one-by-one.\n" - "- Use **only** the provided patient data; **do not infer, assume, or extrapolate beyond the given information.**\n" - "- Justifications must be strictly based on direct evidence from the patient profile.\n" - "### RESPONSE FORMAT (STRICTLY FOLLOW)\n" - "{\n" - ' "Inclusion_Criteria_Evaluation": [\n' - ' {"Criterion": "Exact inclusion criterion text", "Classification": "Met | Not Met | Unclear | Irrelevant", "Justification": "Clear, evidence-based rationale using ONLY provided data"}\n' - " ],\n" - ' "Exclusion_Criteria_Evaluation": [\n' - ' {"Criterion": "Exact exclusion criterion text", "Classification": "Violated | Not Violated | Unclear | Irrelevant", "Justification": "Clear, evidence-based rationale using ONLY provided data"}\n' - " ],\n" - ' "Recap": "Concise summary of key qualifying/disqualifying factors",\n' - ' "Final Decision": "Eligible | Likely Eligible (leaning toward inclusion) | Likely Ineligible (leaning toward exclusion) | Ineligible"\n' - "}\n\n" - "### INPUT\n" - "---Start of Clinical Trial Criteria---\n" - f"{criteria_text_formatted}\n" - "---End of Clinical Trial Criteria---\n\n" - "----\n" - "---Start of Patient Description---\n" - f"{patient_profile}\n" - "---End of Patient Description---\n" - "## IMPORTANT REMINDER:\n" - "NEVER make assumptions, inferences, or extrapolations beyond the explicitly stated patient information." - ), - }, - ] - else: - chat = [ - { - "role": "system", - "content": ( - "You are a clinical assistant tasked with assessing the eligibility of a patient for a clinical trial. " - "Output only a JSON object evaluating trial eligibility for the patient based only on the provided criteria and patient profile.\n" - ), - }, - { - "role": "user", - "content": ( - "For each criterion, classify:\n" - '- If Inclusion Criterion: "Met" | "Not Met" | "Unclear" | "Irrelevant"\n' - '- If Exclusion Criterion: "Violated" | "Not Violated" | "Unclear" | "Irrelevant"\n\n' - "Provide a justification for each classification based strictly on the provided data. " - "Output this JSON schema:\n" - "{\n" - ' "Inclusion_Criteria_Evaluation": [ {"Criterion": "...", "Classification": "...", "Justification": "..."} ],\n' - ' "Exclusion_Criteria_Evaluation": [ {"Criterion": "...", "Classification": "...", "Justification": "..."} ],\n' - ' "Final Decision": "Eligible | Likely Eligible | Likely Ineligible | Ineligible"\n' - "}\n\n" - "---Start of Clinical Trial Criteria---\n" - f"{criteria_text_formatted}\n" - "---End of Clinical Trial Criteria---\n\n" - "---Start of Patient Description---\n" - f"{patient_profile}\n" - "---End of Patient Description---\n" - ), - }, - ] - - if hasattr(self.tokenizer, "apply_chat_template"): - return self.tokenizer.apply_chat_template( - chat, tokenize=False, add_generation_prompt=True - ) - # Fallback: simple concatenation - system_part = f"{chat[0]['content']}\n\n" - user_part = f"{chat[1]['content']}\n\n" - return system_part + user_part + "Answer: " + def _progress_desc(self) -> str: + return f"GPU {self.device} Processing Trials" # ---------------------- Core batch path ---------------------- @@ -273,75 +160,3 @@ def _process_batch(self, batch: List[Dict], output_folder: str): logger.error(f"Batch processing failed: {str(e)}") for item in batch: logger.error(f"Failed trial: {item['nct_id']}") - - # ---------------------- Persistence ---------------------- - - def _save_outputs(self, nct_id: str, response: str, output_folder: str): - try: - os.makedirs(output_folder, exist_ok=True) - txt_path = f"{output_folder}/{nct_id}.txt" - write_text_file([response], txt_path) - try: - json_data = extract_json_object(response) - write_json_file(json_data, f"{output_folder}/{nct_id}.json") - logger.info(f"Processed {nct_id} successfully") - except (json.JSONDecodeError, ValueError) as e: - logger.error(f"Invalid JSON response for {nct_id}: {str(e)}") - write_json_file( - {"error": "invalid_json_response", "raw_output": response}, - f"{output_folder}/{nct_id}.json", - ) - except Exception as e: - logger.error(f"Failed to save {nct_id}: {str(e)}") - - # ---------------------- Public API ---------------------- - - def process_trials( - self, - nct_ids: List[str], - json_folder: str, - output_folder: str, - patient_profile: List[str], - ): - """ - Length-buckets all prompts to reduce padding overhead, then processes in batches. - Keeps existing outputs (idempotent resume). - """ - patient_text = " ".join( - str(line).strip() for line in patient_profile if str(line).strip() - ) - - # Build worklist, skipping already-processed trials - items: List[Dict] = [] - for nct_id in nct_ids: - output_path = f"{output_folder}/{nct_id}.json" - if os.path.exists(output_path): - logger.info(f"Skipping existing: {nct_id}") - continue - criteria_text = self._load_trial_data(nct_id, json_folder) - prompt = self._format_prompt(criteria_text, patient_text) - - # Measure token length once for bucketing (no truncation here) - try: - tok = self.tokenizer(prompt, add_special_tokens=False) - tok_len = len(tok["input_ids"]) - except Exception: - # Fallback: rough char-based estimate if tokenizer hiccups - tok_len = max(1, len(prompt) // 4) - - items.append({"nct_id": nct_id, "prompt": prompt, "tok_len": tok_len}) - - if not items: - logger.info("No work to do.") - return - - # Sort by length (ascending) => minimal padding inside batches - items.sort(key=lambda x: x["tok_len"]) - - # Process in batches - for i in tqdm( - range(0, len(items), self.batch_size), - desc=f"GPU {self.device} Processing Trials", - ): - batch = items[i : i + self.batch_size] - self._process_batch(batch, output_folder) diff --git a/src/trialmatchai/matching/eligibility_reasoning_vllm.py b/src/trialmatchai/matching/eligibility_reasoning_vllm.py index 88d05626..9b3d1671 100644 --- a/src/trialmatchai/matching/eligibility_reasoning_vllm.py +++ b/src/trialmatchai/matching/eligibility_reasoning_vllm.py @@ -1,19 +1,15 @@ from __future__ import annotations -import json -import os import time from typing import Any, Dict, List, Optional -from trialmatchai.utils.file_utils import read_json_file, write_json_file, write_text_file -from trialmatchai.utils.json_utils import extract_json_object +from trialmatchai.matching.eligibility_base import BaseTrialProcessor from trialmatchai.utils.logging_config import setup_logging -from tqdm import tqdm logger = setup_logging(__name__) -class BatchTrialProcessorVLLM: +class BatchTrialProcessorVLLM(BaseTrialProcessor): def __init__( self, llm: Any, @@ -56,6 +52,9 @@ def __init__( detokenize=True, ) + def _progress_desc(self) -> str: + return "vLLM Processing Trials" + def _init_validate_lora_request(self, lora_request): """Validate LoRA request during initialization.""" if lora_request is None: @@ -92,120 +91,6 @@ def _init_validate_lora_request(self, lora_request): logger.warning("Disabling LoRA due to validation error") return None - # ---------------------- I/O helpers ---------------------- - - def _load_trial_data(self, nct_id: str, json_folder: str) -> str: - try: - path = f"{json_folder}/{nct_id}.json" - trial_data = read_json_file(path) - return trial_data.get("eligibility_criteria", "") - except Exception as e: - logger.error(f"Error loading {nct_id}: {str(e)}") - return "" - - # ---------------------- Prompting ---------------------- - - def _format_prompt(self, criteria_text: str, patient_profile: str) -> str: - criteria_text_formatted = ( - f"Eligibility Criteria:\n{criteria_text}" - if criteria_text - else "No eligibility criteria provided." - ) - - if self.use_cot: - system_msg = ( - "You are a medical expert with advanced knowledge in clinical reasoning, diagnostics, and treatment planning. " - "Answer the following question. Before answering, create a concise chain of thoughts reasoning to ensure a logical and accurate response.\n" - ) - chat = [ - {"role": "system", "content": system_msg}, - { - "role": "user", - "content": ( - "Assess the given patient's eligibility for a clinical trial by evaluating each and every criterion individually.\n\n" - "### INCLUSION CRITERIA ASSESSMENT\n" - "For each inclusion criterion, classify it as one of:\n" - "- **Met:** The patient's data explicitly and unequivocally satisfies the criterion.\n" - "- **Not Met:** The patient's data explicitly and unequivocally contradicts or fails to satisfy the criterion.\n" - "- **Unclear:** Insufficient or missing patient data to verify.\n" - "- **Irrelevant:** The criterion does not apply to the patient's context.\n\n" - "### EXCLUSION CRITERIA ASSESSMENT\n" - "For each exclusion criterion, classify it as one of:\n" - "- **Violated:** The patient's data explicitly and unequivocally violates the criterion.\n" - "- **Not Violated:** The patient's data confirms compliance with the criterion.\n" - "- **Unclear:** Insufficient or missing patient data to verify.\n" - "- **Irrelevant:** The criterion does not apply to the patient's context.\n\n" - "### IMPORTANT INSTRUCTIONS\n" - "- Ensure all criteria are assessed one-by-one.\n" - "- Use **only** the provided patient data; **do not infer, assume, or extrapolate beyond the given information.**\n" - "- Justifications must be strictly based on direct evidence from the patient profile.\n" - "### RESPONSE FORMAT (STRICTLY FOLLOW)\n" - "{\n" - ' "Inclusion_Criteria_Evaluation": [\n' - ' {"Criterion": "Exact inclusion criterion text", "Classification": "Met | Not Met | Unclear | Irrelevant", "Justification": "Clear, evidence-based rationale using ONLY provided data"}\n' - " ],\n" - ' "Exclusion_Criteria_Evaluation": [\n' - ' {"Criterion": "Exact exclusion criterion text", "Classification": "Violated | Not Violated | Unclear | Irrelevant", "Justification": "Clear, evidence-based rationale using ONLY provided data"}\n' - " ],\n" - ' "Recap": "Concise summary of key qualifying/disqualifying factors",\n' - ' "Final Decision": "Eligible | Likely Eligible (leaning toward inclusion) | Likely Ineligible (leaning toward exclusion) | Ineligible"\n' - "}\n\n" - "### INPUT\n" - "---Start of Clinical Trial Criteria---\n" - f"{criteria_text_formatted}\n" - "---End of Clinical Trial Criteria---\n\n" - "----\n" - "---Start of Patient Description---\n" - f"{patient_profile}\n" - "---End of Patient Description---\n" - "## IMPORTANT REMINDER:\n" - "NEVER make assumptions, inferences, or extrapolations beyond the explicitly stated patient information." - ), - }, - ] - else: - chat = [ - { - "role": "system", - "content": ( - "You are a clinical assistant tasked with assessing the eligibility of a patient for a clinical trial. " - "Output only a JSON object evaluating trial eligibility for the patient based only on the provided criteria and patient profile.\n" - ), - }, - { - "role": "user", - "content": ( - "For each criterion, classify:\n" - '- If Inclusion Criterion: "Met" | "Not Met" | "Unclear" | "Irrelevant"\n' - '- If Exclusion Criterion: "Violated" | "Not Violated" | "Unclear" | "Irrelevant"\n\n' - "Provide a justification for each classification based strictly on the provided data. " - "Output this JSON schema:\n" - "{\n" - ' "Inclusion_Criteria_Evaluation": [ {"Criterion": "...", "Classification": "...", "Justification": "..."} ],\n' - ' "Exclusion_Criteria_Evaluation": [ {"Criterion": "...", "Classification": "...", "Justification": "..."} ],\n' - ' "Final Decision": "Eligible | Likely Eligible | Likely Ineligible | Ineligible"\n' - "}\n\n" - "---Start of Clinical Trial Criteria---\n" - f"{criteria_text_formatted}\n" - "---End of Clinical Trial Criteria---\n\n" - "---Start of Patient Description---\n" - f"{patient_profile}\n" - "---End of Patient Description---\n" - ), - }, - ] - - if self.tokenizer is not None and hasattr( - self.tokenizer, "apply_chat_template" - ): - return self.tokenizer.apply_chat_template( - chat, tokenize=False, add_generation_prompt=True - ) - - system_part = f"{chat[0]['content']}\n\n" - user_part = f"{chat[1]['content']}\n\n" - return system_part + user_part + "Answer: " - # ---------------------- Core batch path (vLLM) ---------------------- def _process_batch(self, batch: List[Dict], output_folder: str): @@ -385,82 +270,10 @@ def _validate_lora_request(self): logger.warning("Disabling LoRA due to validation error") return None - # ---------------------- Persistence ---------------------- - - def _save_outputs(self, nct_id: str, response: str, output_folder: str): - try: - os.makedirs(output_folder, exist_ok=True) - txt_path = f"{output_folder}/{nct_id}.txt" - write_text_file([response], txt_path) - try: - json_data = extract_json_object(response) - write_json_file(json_data, f"{output_folder}/{nct_id}.json") - logger.info(f"Processed {nct_id} successfully") - except (json.JSONDecodeError, ValueError) as e: - logger.error(f"Invalid JSON response for {nct_id}: {str(e)}") - write_json_file( - {"error": "invalid_json_response", "raw_output": response}, - f"{output_folder}/{nct_id}.json", - ) - except Exception as e: - logger.error(f"Failed to save {nct_id}: {str(e)}") - - # ---------------------- Public API ---------------------- - - def process_trials( - self, - nct_ids: List[str], - json_folder: str, - output_folder: str, - patient_profile: List[str], - ): - patient_text = " ".join( - str(line).strip() for line in patient_profile if str(line).strip() - ) - - items: List[Dict] = [] - for nct_id in nct_ids: - output_path = f"{output_folder}/{nct_id}.json" - if os.path.exists(output_path): - logger.info(f"Skipping existing: {nct_id}") - continue - - criteria_text = self._load_trial_data(nct_id, json_folder) - prompt = self._format_prompt(criteria_text, patient_text) - - # Calculate token length with comprehensive type safety - tok_len = self._safe_calculate_token_length(prompt, nct_id) - - items.append({"nct_id": nct_id, "prompt": prompt, "tok_len": tok_len}) - - if not items: - logger.info("No work to do.") - return - - # Validate all tok_len values before sorting - self._validate_token_lengths(items) - - # Sort by token length if length_bucket is enabled - if self.length_bucket: - try: - items.sort(key=lambda x: x["tok_len"]) - logger.debug(f"Successfully sorted {len(items)} items by token length") - except Exception as e: - logger.error(f"Failed to sort items by token length: {str(e)}") - # Log the problematic items for debugging - for i, item in enumerate(items): - logger.error( - f"Item {i}: nct_id={item['nct_id']}, tok_len={item['tok_len']}, type={type(item['tok_len'])}" - ) - # Disable length bucketing and continue without sorting - logger.warning("Disabling length bucketing due to sorting failure") - pass + # ---------------------- Token-length bucketing (vLLM tokenizer aware) ---- - for i in tqdm( - range(0, len(items), self.batch_size), desc="vLLM Processing Trials" - ): - batch = items[i : i + self.batch_size] - self._process_batch(batch, output_folder) + def _token_length(self, prompt: str, nct_id: str = "") -> int: + return self._safe_calculate_token_length(prompt, nct_id) def _safe_calculate_token_length(self, prompt: str, nct_id: str) -> int: """Safely calculate token length using vLLM's tokenizer.""" @@ -533,29 +346,3 @@ def _extract_token_length(self, tokenized, nct_id: str) -> int: logger.warning(f"Could not extract token length for {nct_id}, using fallback") return fallback_length - - def _validate_token_lengths(self, items: List[Dict]) -> None: - """Validate that all token lengths are integers and fix any that aren't.""" - for i, item in enumerate(items): - tok_len = item["tok_len"] - if not isinstance(tok_len, int): - logger.error( - f"Invalid tok_len type for {item['nct_id']}: {type(tok_len)}, value: {tok_len}" - ) - # Force conversion to int - try: - if ( - isinstance(tok_len, (float, str)) - and str(tok_len).replace(".", "").isdigit() - ): - item["tok_len"] = int(float(tok_len)) - logger.warning( - f"Converted tok_len for {item['nct_id']} from {type(tok_len)} to int" - ) - else: - # Use character-based fallback - item["tok_len"] = max(1, len(item["prompt"]) // 4) - logger.warning(f"Using fallback tok_len for {item['nct_id']}") - except Exception as e: - logger.error(f"Failed to convert tok_len for {item['nct_id']}: {e}") - item["tok_len"] = max(1, len(item["prompt"]) // 4) From 1902d30a2ba54b3b7734cadda2f109d1c17d15cc Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 10:29:17 +0200 Subject: [PATCH 19/64] =?UTF-8?q?PR8:=20performance=20=E2=80=94=20skip=20u?= =?UTF-8?q?nused=20HF=20CoT=20load=20under=20vLLM;=20reuse=20indexed=20rec?= =?UTF-8?q?ords?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - main_pipeline only loads (and half()s) the HuggingFace CoT model when cot_backend != "vllm". Under the vLLM backend run_rag_processing loads its own engine and ignored the HF model, so it was wasting GPU memory and load time (and could OOM alongside the vLLM engine). - _rank_trial_rows / _rank_criteria_rows skip rebuilding the trial/criteria record when the candidate row read from the index already has the derived fields (search_text); raw in-memory docs still get built. Avoids recomputing search_text/search_vector for every candidate on every query. Co-Authored-By: Claude Opus 4.8 --- src/trialmatchai/main.py | 32 +++++++++++++--------- src/trialmatchai/search/lancedb_backend.py | 6 ++-- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index a157f315..f8011abd 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -266,21 +266,27 @@ def main_pipeline(config_path: str | None = None) -> int: import warnings - with warnings.catch_warnings(): - warnings.filterwarnings( - "ignore", message=".*quantization_config.*", category=UserWarning - ) - model, tokenizer = load_model_and_tokenizer( - config["model"], config["global"]["device"] - ) + # The HuggingFace CoT model is only used by the default backend. When the + # vLLM backend is configured, run_rag_processing loads its own engine and + # ignores these, so skip loading (and half()-ing) the HF model entirely to + # avoid wasting GPU memory and load time (and risking OOM next to vLLM). + model, tokenizer = None, None + if config.get("cot_backend", "default") != "vllm": + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", message=".*quantization_config.*", category=UserWarning + ) + model, tokenizer = load_model_and_tokenizer( + config["model"], config["global"]["device"] + ) - if tokenizer.pad_token is None: # type: ignore - tokenizer.pad_token = tokenizer.eos_token # type: ignore - if hasattr(model.config, "pad_token_id") and model.config.pad_token_id is None: # type: ignore - model.config.pad_token_id = tokenizer.pad_token_id # type: ignore + if tokenizer.pad_token is None: # type: ignore + tokenizer.pad_token = tokenizer.eos_token # type: ignore + if hasattr(model.config, "pad_token_id") and model.config.pad_token_id is None: # type: ignore + model.config.pad_token_id = tokenizer.pad_token_id # type: ignore - if config["global"]["device"] != "cpu" and torch.cuda.is_available(): - model = model.half() # type: ignore + if config["global"]["device"] != "cpu" and torch.cuda.is_available(): + model = model.half() # type: ignore # Initialize components embedder = build_embedder(config) diff --git a/src/trialmatchai/search/lancedb_backend.py b/src/trialmatchai/search/lancedb_backend.py index ef46ed70..651b1226 100644 --- a/src/trialmatchai/search/lancedb_backend.py +++ b/src/trialmatchai/search/lancedb_backend.py @@ -532,7 +532,9 @@ def _rank_trial_rows( mode = (search_mode or "hybrid").lower() hits: list[SearchHit] = [] for raw in rows: - row = build_trial_record(raw) + # Candidate rows read from the index already carry the derived fields; + # only rebuild for callers (e.g. in-memory) that pass raw docs. + row = dict(raw) if "search_text" in raw else build_trial_record(raw) if not _trial_passes_filters( row, age=age, @@ -578,7 +580,7 @@ def _rank_criteria_rows( ) hits: list[SearchHit] = [] for raw in rows: - row = build_criteria_record(raw) + row = dict(raw) if "search_text" in raw else build_criteria_record(raw) if allowed and row.get("nct_id") not in allowed: continue text_score = _weighted_text_score(row, [query], fields) From 1476501779e54c5be768345b9f059332ff4aa6d2 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 10:33:45 +0200 Subject: [PATCH 20/64] =?UTF-8?q?PR9:=20hygiene=20=E2=80=94=20logging,=20i?= =?UTF-8?q?mport-patient=20embedder,=20prune=20unused=20deps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - logging_config: configure the root handler exactly once instead of building a new StreamHandler on every setup_logging() call (~all modules call it at import). Per-logger request-id ContextFilter behavior is unchanged. - import_patient: build and pass an embedder to the entity annotator so concept linking can use semantic search instead of silently degrading to lexical-only (still degrades gracefully to no-entities when ML extras are absent). - pyproject: drop 5 dependencies never imported in src (regex, python-dotenv, rich, bioregistry, rapidfuzz); regenerated uv.lock. numpy/pyarrow kept as real transitive runtime needs of pandas/lancedb. Co-Authored-By: Claude Opus 4.8 --- pyproject.toml | 5 - src/trialmatchai/cli/import_patient.py | 6 +- src/trialmatchai/utils/logging_config.py | 17 +- uv.lock | 312 ++++++++++++++--------- 4 files changed, 210 insertions(+), 130 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index bfbe518e..04dde31d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,15 +17,10 @@ dependencies = [ "requests==2.34.2", "tenacity==9.0.0", "tqdm==4.67.1", - "regex>=2025.10.22,<2027", "PyYAML==6.0.2", - "python-dotenv==1.2.2", - "rich==13.9.4", "lancedb>=0.25.0,<0.26", "pyarrow>=24.0.0,<25", "pydantic>=2.12.0,<3", - "bioregistry==0.13.62", - "rapidfuzz==3.14.5", ] [project.optional-dependencies] diff --git a/src/trialmatchai/cli/import_patient.py b/src/trialmatchai/cli/import_patient.py index 3c642174..de0587c2 100644 --- a/src/trialmatchai/cli/import_patient.py +++ b/src/trialmatchai/cli/import_patient.py @@ -82,8 +82,12 @@ def main() -> int: def _try_build_entity_annotator(config: dict[str, Any]): try: from trialmatchai.entities import build_entity_annotator + from trialmatchai.models.embedding import build_embedder - return build_entity_annotator(config) + # Pass an embedder so concept linking can use semantic (vector) search; + # without it linking silently degrades to lexical-only matching. + embedder = build_embedder(config) + return build_entity_annotator(config, embedder=embedder) except Exception as exc: logger.warning("Entity annotation unavailable; importing without entities: %s", exc) return None diff --git a/src/trialmatchai/utils/logging_config.py b/src/trialmatchai/utils/logging_config.py index 04eaedb0..8c44f8e6 100644 --- a/src/trialmatchai/utils/logging_config.py +++ b/src/trialmatchai/utils/logging_config.py @@ -39,8 +39,14 @@ def reset_request_id(token: contextvars.Token) -> None: _request_id_var.reset(token) -def setup_logging(name: Optional[str] = None) -> logging.Logger: - """Configure logging for the application.""" +_root_configured = False + + +def _configure_root_once() -> None: + """Install the root stream handler exactly once (imported by ~all modules).""" + global _root_configured + if _root_configured: + return level = os.getenv("TRIALMATCHAI_LOG_LEVEL", "INFO").upper() use_json = os.getenv("TRIALMATCHAI_LOG_JSON", "0") in {"1", "true", "TRUE"} handler = logging.StreamHandler(sys.stdout) @@ -54,6 +60,13 @@ def setup_logging(name: Optional[str] = None) -> logging.Logger: ) ) logging.basicConfig(level=level, handlers=[handler]) + _root_configured = True + + +def setup_logging(name: Optional[str] = None) -> logging.Logger: + """Return a named logger with request-id context; configures root once.""" + _configure_root_once() + level = os.getenv("TRIALMATCHAI_LOG_LEVEL", "INFO").upper() logger = logging.getLogger(name if name else __name__) logger.setLevel(level) if not any(isinstance(f, ContextFilter) for f in logger.filters): diff --git a/uv.lock b/uv.lock index 932f1250..4adfce83 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 2 requires-python = "==3.11.*" resolution-markers = [ "sys_platform == 'darwin'", @@ -54,7 +54,15 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794, upload-time = "2026-06-07T21:09:35.529Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/49/e0/726e90f99542bf292f81a96a12cc4847deb86f3ccf62c6f4014a201f4d33/aiohttp-3.14.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5f2504bc0322437c9a1ff6d3333ca56c7477b727c995f036b976ae17b98372c8", size = 1737835, upload-time = "2026-06-07T21:06:14.564Z" }, + { url = "https://files.pythonhosted.org/packages/0b/4b/d176d5c4db9d33dacf0543102ea59503bc1d528af4cfd0b719949ca49389/aiohttp-3.14.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73f05ea02013e02512c3bf42714f1208c57168c779cc6fe23516e4543089d0a6", size = 1842801, upload-time = "2026-06-07T21:06:16.228Z" }, + { url = "https://files.pythonhosted.org/packages/dc/d6/5a99b563690ea0cbed912ae94a2ce33993a5709a651a3a4fe761e7dd973a/aiohttp-3.14.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:797457503c2d426bee06eef808d07b31ede30b65e054444e7de64cad0061b7af", size = 1929992, upload-time = "2026-06-07T21:06:17.947Z" }, { url = "https://files.pythonhosted.org/packages/76/7f/a987b14a3859094b3cea3f4825219c3e5536242564af6e3f9c2f6c994eb2/aiohttp-3.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b821a1f7dedf7e37450654e620038ac3b2e81e8fa6ea269337e97101978ec730", size = 1786989, upload-time = "2026-06-07T21:06:19.677Z" }, + { url = "https://files.pythonhosted.org/packages/f1/1a/420e5c85a3e73349372ed22ce0b6af86bfa6ce16a4b20a64a2e94608c781/aiohttp-3.14.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4cd96b5ba05d67ed0cf00b5b405c8cd99586d8e3481e8ee0a831057591af7621", size = 1640129, upload-time = "2026-06-07T21:06:22.558Z" }, + { url = "https://files.pythonhosted.org/packages/ec/0b/8b3d5713373858ff71a617daf6e3b0e81ad63e79d09a3cf2f6b6b983939c/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:764457a7be60825fb770a644852ff717bcbb5042f189f2bd16df61a81b3f6573", size = 1754668, upload-time = "2026-06-07T21:06:26.528Z" }, + { url = "https://files.pythonhosted.org/packages/9f/49/fd564575cf225821d7ba5a117cb8bc27213d8a7e1811162afb43ae077039/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f7a16ef45b081454ef844502d87a848876c490c4cb5c650c230f6ec79ed2c1e7", size = 1817019, upload-time = "2026-06-07T21:06:28.297Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1b/e850c9ae6fc91356552ae668bb6c51e93fa29c8aef13398a10b56678557f/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2fbc3ed048b3475b9f0cbcb9978e9d2d3511acd91ead203af26ed9f0056004cf", size = 1631638, upload-time = "2026-06-07T21:06:30.242Z" }, + { url = "https://files.pythonhosted.org/packages/eb/94/3c337ba72451a89806ace6f75bddc92bafc5b8d53d90115a512858024b63/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bedb0cd073cc2dc035e30aeb99444389d3cd2113afe4ef9fcd23d439f5bade85", size = 1835660, upload-time = "2026-06-07T21:06:31.943Z" }, { url = "https://files.pythonhosted.org/packages/2b/9c/9c18cf367a0498212d9ba7daf990b504a5e8ae064cda4b504e2647c89c03/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b6feea921016eb3d4e04d65fc4e9ca402d1a3801f562aef94989f54694917af3", size = 1775698, upload-time = "2026-06-07T21:06:33.72Z" }, ] @@ -154,43 +162,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, ] -[[package]] -name = "backports-zstd" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8e/b5/5a873da082bd08acd6a497f7aae224e94a7c27fa8f24488089cc50a16c84/backports_zstd-1.6.0.tar.gz", hash = "sha256:80a7859ffe70bf239d7a2ce15293bdeb5b4280ff7dc326ffab312b0e254dbb24", size = 1000009, upload-time = "2026-06-14T10:50:58.555Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/90/428dd82228b1b6d62d5a1bf312c29e6c125af6a182fcfd82768ca179dcc7/backports_zstd-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c4fc41b2df5529cad5ceb230319e82728096d4b353ce8d4df68a2ec37e291bb8", size = 437067, upload-time = "2026-06-14T10:49:28.335Z" }, - { url = "https://files.pythonhosted.org/packages/ef/48/768edf21fe33bae8d874470b1be136681d4d32eb820a32e1c98262ebe39b/backports_zstd-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:83391ef5935cc0f329b1abca414ae20ffe40d335fc21a4b5e664f08a74317d5f", size = 363454, upload-time = "2026-06-14T10:49:29.784Z" }, - { url = "https://files.pythonhosted.org/packages/4d/25/a9e37dd035027565fa0b7e367da50e88a6ab26e7fd413269aa118e25258b/backports_zstd-1.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7293fefe15f0e5852bdb4ad1e0e26f3cbd4d3e61c19f751ecc4ff34bc1eb237d", size = 492486, upload-time = "2026-06-14T10:49:36.06Z" }, - { url = "https://files.pythonhosted.org/packages/81/a4/1692fbb88af8aaf900a53619fcc95c9e45d9ff162223a47fd672a9893c8d/backports_zstd-1.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dd085eafa2aac6f883afd28210a3231f717f25409a1e44a39bb7b04c8c5b5646", size = 496496, upload-time = "2026-06-14T10:49:45.118Z" }, - { url = "https://files.pythonhosted.org/packages/e8/09/898fe2f8196fa7ab825f5fed786c68581fdac7d23a8e20baa0cc01cb2f0b/backports_zstd-1.6.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:aeef8563b82ed4af328f98e5041c1b4800d86f68f857ffd1577d4d47dc9aa6cd", size = 411023, upload-time = "2026-06-14T10:50:50.286Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ad/6ad9af1596ab5f284bb53954be41396e13d23c81cdfe3d945402e8ee0215/backports_zstd-1.6.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9cb75e33131946fabd6319061df3b8b1d588fe0963183280e9b5f49f7772fc09", size = 340554, upload-time = "2026-06-14T10:50:51.523Z" }, - { url = "https://files.pythonhosted.org/packages/53/a1/484e0f9ec994bd2285d6747e7c8028350f1a177e9210bc57637898042d3b/backports_zstd-1.6.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:17efb3d11137de5166dd51eedab9c36ad633402acba386eee8d715213ea47e49", size = 415201, upload-time = "2026-06-14T10:50:55.854Z" }, -] - -[[package]] -name = "bioregistry" -version = "0.13.62" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "curies", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "more-click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pydantic", extra = ["email"], marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pystow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "python-multipart", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "sssom-pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "urllib3", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f8/a3/aaf3fbeae7df7967a8203f919dc85f276a91e128035c42d2ae0d3969f9a0/bioregistry-0.13.62.tar.gz", hash = "sha256:d5cb226eb287be202e6ce33b7c2800cc7ed9f497dc4675e6945f40abfe0e2033", size = 6073578, upload-time = "2026-06-13T05:14:17.521Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/61/f3/779624aec98ac5ef06e03335b050ee8008267f08043e466f9f2b65d1177c/bioregistry-0.13.62-py3-none-any.whl", hash = "sha256:1c95f5ebe426e88c8c5f4453c98804679fcc0cb3a6995d3410c8dca32909f2c2", size = 6166032, upload-time = "2026-06-13T05:14:15.034Z" }, -] - [[package]] name = "bitsandbytes" version = "0.49.2" @@ -213,6 +184,9 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/75/aa/abcd75e9600987a0bc6cfe9b6b2ff3f0e2cb08c170addc6e76035b5c4cb3/blake3-1.0.8.tar.gz", hash = "sha256:513cc7f0f5a7c035812604c2c852a0c1468311345573de647e310aca4ab165ba", size = 117308, upload-time = "2025-10-14T06:47:48.83Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/33/9d342a2bf5817f006bbe947335e5d387327541ea47590854947befd01251/blake3-1.0.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:58ce8d45a5bb5326482de72ea1969a378634236186a970fef63058a5b7b8b435", size = 374859, upload-time = "2025-10-14T06:45:35.262Z" }, + { url = "https://files.pythonhosted.org/packages/a5/67/167a65a4c431715407d07b1b8b1367698a3ad88e7260edb85f0c5293f08a/blake3-1.0.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b5573b052777142b2cecc453d022c3f21aa4aba75011258410bb98f41c1a727", size = 507519, upload-time = "2025-10-14T06:45:37.814Z" }, + { url = "https://files.pythonhosted.org/packages/32/e2/0886e192d634b264c613b0fbf380745b39992b424a0effc00ef08783644e/blake3-1.0.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe1b02ab49bfd969ef50b9f17482a2011c77536654af21807ba5c2674e0bb2a0", size = 393645, upload-time = "2025-10-14T06:45:39.146Z" }, { url = "https://files.pythonhosted.org/packages/fc/3b/7fb2fe615448caaa5f6632b2c7551117b38ccac747a3a5769181e9751641/blake3-1.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7780666dc6be809b49442d6d5ce06fdbe33024a87560b58471103ec17644682", size = 387640, upload-time = "2025-10-14T06:45:40.546Z" }, { url = "https://files.pythonhosted.org/packages/7e/75/0252be37620699b79dbaa799c9b402d63142a131d16731df4ef09d135dd7/blake3-1.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c63ece266a43014cf29e772a82857cd8e90315ae3ed53e3c5204851596edd5f2", size = 554463, upload-time = "2025-10-14T06:45:43.22Z" }, ] @@ -281,6 +255,8 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, ] @@ -292,7 +268,17 @@ source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705, upload-time = "2026-04-02T09:26:02.191Z" }, + { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419, upload-time = "2026-04-02T09:26:03.583Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901, upload-time = "2026-04-02T09:26:04.738Z" }, + { url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", size = 222742, upload-time = "2026-04-02T09:26:06.36Z" }, { url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", size = 214061, upload-time = "2026-04-02T09:26:08.347Z" }, + { url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", size = 199239, upload-time = "2026-04-02T09:26:09.823Z" }, + { url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", size = 210173, upload-time = "2026-04-02T09:26:10.953Z" }, + { url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", size = 209841, upload-time = "2026-04-02T09:26:12.142Z" }, + { url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", size = 200304, upload-time = "2026-04-02T09:26:13.711Z" }, + { url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", size = 229455, upload-time = "2026-04-02T09:26:14.941Z" }, + { url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", size = 210036, upload-time = "2026-04-02T09:26:16.478Z" }, + { url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", size = 224739, upload-time = "2026-04-02T09:26:17.751Z" }, { url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", size = 216277, upload-time = "2026-04-02T09:26:18.981Z" }, { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, ] @@ -340,11 +326,17 @@ dependencies = [ sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e6/8b/43011f7ebe515a8aa20d61f290a326cd890c2e738e16e59eaff8d9c3a412/cryptography-49.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e959b578856a3924bc0cbb710fc12c387b9412a951389f3ca61704a9e25f325", size = 4716422, upload-time = "2026-06-12T20:01:48.566Z" }, + { url = "https://files.pythonhosted.org/packages/62/99/a2c95cf8293f07491e9e27c20cc4dcd18176d944e674679adeb1d0173fd6/cryptography-49.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2eda353d8a27bcbcaa4cbed18994a74ab4d19a2ca897db188ea269ab9b71419b", size = 5309779, upload-time = "2026-06-12T20:02:08.987Z" }, { url = "https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6", size = 4749683, upload-time = "2026-06-12T20:02:03.335Z" }, + { url = "https://files.pythonhosted.org/packages/a3/5b/c5246635d5fd3b64e0d45ae10e99fd32fe9676a79915ccfe5a61ba9af1a5/cryptography-49.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:0b82e28ee398a386f0807bba7884d30f25218855690f45115831bcce5d90822c", size = 4337874, upload-time = "2026-06-12T20:02:54.323Z" }, + { url = "https://files.pythonhosted.org/packages/c4/b6/d7696e4e890d6ae1469935164c9e5215c557671cb78d6e3f458ccceaa632/cryptography-49.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:d0527ce944105f257f605a827d6ebead966c752038b6e8656abb9c5edee6fc68", size = 5265844, upload-time = "2026-06-12T20:01:24.09Z" }, { url = "https://files.pythonhosted.org/packages/a9/3c/f3ad17eecc1a57b0ba236dc01f90e783c51f4a2f35f64777cc4f47a184b2/cryptography-49.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:cbc77da8c523d5abd028635ba850a6966fcee2c82e2bf65a41d1d8afe0f98be9", size = 4749290, upload-time = "2026-06-12T20:01:30.848Z" }, { url = "https://files.pythonhosted.org/packages/71/fd/577302e213a1be9468f92d1afef66fcf1ef83d516819d9992ca547f592bd/cryptography-49.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66ec79c3904820572d7e987abdf304281f141d37ad9a489b8e97066e7b9b6459", size = 4980804, upload-time = "2026-06-12T20:01:42.853Z" }, { url = "https://files.pythonhosted.org/packages/2c/99/2d13299eb3dd27b02dcfaafcc91d6b5cb3329f7cbd6d8f51921acd566c1a/cryptography-49.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:35b151772baff2c74cba7fa290ceaff4c3b11c0c881eb93eb5dbc05a7cfbba18", size = 4700968, upload-time = "2026-06-12T20:02:45.383Z" }, + { url = "https://files.pythonhosted.org/packages/24/01/186c825898477d77e2324d5360fefe622ff1d8d1963ec0554e2cada8ec77/cryptography-49.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9e82dcc8e56052715fb18b2429e3bca4823b1629136a2084fc45a9a5cecb9b64", size = 5298863, upload-time = "2026-06-12T20:02:24.579Z" }, { url = "https://files.pythonhosted.org/packages/b8/7b/62cbbab75d0659865bf0273790031544a0b16c8072d258f9428dcd8190dc/cryptography-49.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6f2debedf9ca60cf1d5bd466475638af5130f89965605cd818484d19987d3a21", size = 4735983, upload-time = "2026-06-12T20:01:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/6c/72/3e798c064bc39e471008075d0f9bc9daf77a80879c092e4a8e170c585ed4/cryptography-49.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:8c25ceb16df5b9435f3f6a9829204985b0e0cbee3b48aacd432c7d2c850b44d9", size = 4334173, upload-time = "2026-06-12T20:01:44.743Z" }, + { url = "https://files.pythonhosted.org/packages/67/d0/a5fcd3515f0bae49a7b6d0413cc1bdccdcc1fc0047037a0d480642cdc5d6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:6fc361c34fb6aac015ce19435876635e5c6d21db31998b0920f675f131e043b8", size = 5254338, upload-time = "2026-06-12T20:02:22.737Z" }, { url = "https://files.pythonhosted.org/packages/a0/84/84fe36f19caf857d61cb7fc9c63035a47ffabd84ea12d1d393148efa3615/cryptography-49.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2400ef9c9e2299a25614eb1dea3db54a69b1349efd043bfac9c67630d136df36", size = 4735650, upload-time = "2026-06-12T20:02:41.389Z" }, { url = "https://files.pythonhosted.org/packages/93/77/8df9eb486495979bccecd1062e2eaf435250e84437040295b57d09048b0b/cryptography-49.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:42b0684e0e40cf26122427802486f6d93aea593612603a94fbf260c7eb1e9c1b", size = 4967968, upload-time = "2026-06-12T20:02:12.524Z" }, { url = "https://files.pythonhosted.org/packages/d7/70/2ba3769dd0ae167e2f33dfa9592d45db6ff9a61d62ca1a5b3d1bdd09068f/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b39efa323140595abd3ecca8529d321ae50f55f3aa3ba9cc81ea56a6011953d5", size = 4715584, upload-time = "2026-06-12T20:01:27.495Z" }, @@ -456,20 +448,6 @@ nvtx = [ { name = "nvidia-nvtx", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] -[[package]] -name = "curies" -version = "0.13.13" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pystow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/80/66/20c0babb17c401dd9ddb57413eb9a11192528f11f856378587ba97d2e7b5/curies-0.13.13.tar.gz", hash = "sha256:aac8b3175680315566395ac754f6fa0878112d0fa6e8997cb65d9af91c66b778", size = 72376, upload-time = "2026-06-12T10:27:52.517Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/72/97/db70517204cd8aec8cb0773036333407405f6552bf928234d68531b0acd2/curies-0.13.13-py3-none-any.whl", hash = "sha256:43051140cd1f089a832f139633b14d473c09fa48a2f36e1b9b94c1270812267e", size = 82043, upload-time = "2026-06-12T10:27:51.334Z" }, -] - [[package]] name = "cyclonedx-python-lib" version = "11.11.0" @@ -588,8 +566,8 @@ name = "email-validator" version = "2.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "dnspython", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "dnspython", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "idna", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } wheels = [ @@ -671,9 +649,19 @@ version = "0.11.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/03/0f/0aeb3fc50046617702acc0078b277b58367fd62eb727b9ec733ae0e8bbcc/fastar-0.11.0.tar.gz", hash = "sha256:aa7f100f7313c03fdb20f1385927ba95671071ba308ad0c1763fef295e1895ce", size = 70238, upload-time = "2026-04-13T17:11:17.143Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/07/cc/5491e2b677bb841f768e3aba052d0344338a5c78aa5d4c18b443831a8e8d/fastar-0.11.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5b83c1f61f7017d6e1498568038f8745440cfc16ca2f697ec81bac83050108f6", size = 759232, upload-time = "2026-04-13T17:08:08.864Z" }, + { url = "https://files.pythonhosted.org/packages/4e/b7/643630bdbd179e41e9fae31c03b4cf6061dbf4d6fbbae8425d16eb12545d/fastar-0.11.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db73a9b765a516e73983b25341e7b5e0189733878279e278b2295131b0e3a21e", size = 926271, upload-time = "2026-04-13T17:08:23.68Z" }, + { url = "https://files.pythonhosted.org/packages/09/5d/37ade50003b4540e0a53ef100f6692d7ab2ac1122d5acf39920cc09a3e8b/fastar-0.11.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:625827d52eb4e8fec942e0233f125ff8010fcf6a67c0a974a8e5f4666b771e3c", size = 818634, upload-time = "2026-04-13T17:08:54.268Z" }, { url = "https://files.pythonhosted.org/packages/c3/ff/135d177de32cc1e837c99019e4643e6e79352bde49544d4ece5b5eebf56b/fastar-0.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7f5fd8fa21ec0a88296a38dc5d7fc35efd3b26d46a17b8b7c73c5563925ca15", size = 822755, upload-time = "2026-04-13T17:09:25.01Z" }, + { url = "https://files.pythonhosted.org/packages/27/cb/b835dbe76ceac7fa6105851468c259ffd06830eb9c029402e499d0ec153b/fastar-0.11.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8c15af91b8cd87ddf23ea55355ae513c1de3ab67178f26dad017c9e9c0af6096", size = 887101, upload-time = "2026-04-13T17:08:39.248Z" }, + { url = "https://files.pythonhosted.org/packages/1f/fd/776d50a0897c01dc6bfd0926772ee913436fdae91b9affaf0a0cbd09f0a1/fastar-0.11.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f2994bb8f5f8c11eb12beae1e6e77a907173c9819236b8a4c8f0573652ceccce", size = 1036696, upload-time = "2026-04-13T17:10:28.502Z" }, { url = "https://files.pythonhosted.org/packages/f8/9e/21e4701aec4a1123d4dc4d31578dc18875582b5710e4725f7ceb752a248b/fastar-0.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29c9c386dc0d5dda78845a8e6b1480d26ab861c1e0b68f42ae5735cb70ca07f1", size = 1032336, upload-time = "2026-04-13T17:11:02.364Z" }, + { url = "https://files.pythonhosted.org/packages/99/e3/74d6859e632e8fb9339a14f652fb9f800c2bd6aa53071e311c0be3fbab8b/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:878eaf15463eb572e3538af7ca3a8534e5e279cf8196db902d24e5725c4af86e", size = 761375, upload-time = "2026-04-13T17:08:20.669Z" }, + { url = "https://files.pythonhosted.org/packages/a3/e7/cc70e2be5ef8731a7525552b1c35c1448cf9eae6a62cb3a56f12c1bf27ea/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0324ed1d1ef0186e1bbd843b17807d6d837d0906899d4c99378b02c5d86bdd9c", size = 928189, upload-time = "2026-04-13T17:08:35.663Z" }, + { url = "https://files.pythonhosted.org/packages/3c/33/c9a969e78dca323547276a6fee5f4f9588f7cd5ab45acec3778c67399589/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bdf9bd863205590beaf8ef6e66f315310196632180dceaf674985d01a876cac3", size = 820864, upload-time = "2026-04-13T17:09:06.366Z" }, { url = "https://files.pythonhosted.org/packages/84/bd/6b9434b541fe55c125b5f2e017a565596a2d215aa09207e4555e4585064f/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59af8dbb683b24b90fb5b506de080faeab0a17a908e6c2a5d93a97260ed75d7b", size = 824060, upload-time = "2026-04-13T17:09:37.377Z" }, + { url = "https://files.pythonhosted.org/packages/24/8d/871d5f8cf4c6f13987119fb0a9ae8be131e34f2756c2524e9974adf33824/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:9f3df73a3c4292cfe15696cdf59cdb6c309ab59d30b34c733be13c6e32d9a264", size = 889217, upload-time = "2026-04-13T17:08:50.884Z" }, + { url = "https://files.pythonhosted.org/packages/99/94/8bbb0b13f5b6cbe2492f0b7cbba5103e6163976a3331466d010e781fa189/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:a8c7bc8ac74cb359bb546b199288c83236372d094b402e557c197e85527495cd", size = 1038492, upload-time = "2026-04-13T17:10:41.939Z" }, { url = "https://files.pythonhosted.org/packages/ec/6d/56ef943ea524784598c035ccbd42e564e937da0438ae3f55f0e76cb95571/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6a1c56957ac82408be37a3f63594bc83e0919e8760492a4475e542f9f1828778", size = 1034886, upload-time = "2026-04-13T17:11:15.617Z" }, ] @@ -746,6 +734,12 @@ source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, + { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, + { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, + { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, + { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, + { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, ] @@ -828,6 +822,7 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/b0/b5/1ff353970a87eda4c98251e34d2dfd214abd4982dc89119c9252a2a482d2/grpcio-1.81.1.tar.gz", hash = "sha256:6fa10a767143a5e82e8eaab53918af0cd8909a57a27f8cb2288b80a613ac671b", size = 13026582, upload-time = "2026-06-11T12:46:51.673Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/52/ea/1c2fa386b718ff493225e61cfc052ef400b4d6ffc54cbe261026432624b5/grpcio-1.81.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:d71d30f2d92f67d944631c523713934fee37292469e182ebcd2c1dd8a64ce53f", size = 6093112, upload-time = "2026-06-11T12:44:52.131Z" }, { url = "https://files.pythonhosted.org/packages/23/d6/abeda5c2b896a0b341584fe5ac411bbf72e197a9a374c355fb90965e08d2/grpcio-1.81.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a37165cc80b1a368384b383e63a4c38116a10467ae44c904d2d7468c4470ec2", size = 6842229, upload-time = "2026-06-11T12:45:04.76Z" }, { url = "https://files.pythonhosted.org/packages/f7/b2/524847365122ee509ca17bcc4e092198b700e94af7bfd5bb5e6dd9f3ee66/grpcio-1.81.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1b22c80559854b789a01fd89e8929b3798a156c0829b5282a8939f33ad4115ad", size = 7873989, upload-time = "2026-06-11T12:45:13.102Z" }, ] @@ -850,6 +845,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7a/d8/5e54cf37434759d1f4f2ba9b66077ff9d4c4e1f37b6bd7975da5c40d94ab/hf_xet-1.5.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6abd35c3221eff63836618ddfb954dcf84798603f71d8e33e3ed7b04acfdbe6e", size = 4077794, upload-time = "2026-06-08T23:02:40.656Z" }, { url = "https://files.pythonhosted.org/packages/35/94/4b2ecfbad8f8b04701a23aefb62f540b9137d058b7e1dbef16a32676f0e9/hf_xet-1.5.1-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:94e761bbd266bf4c03cee73753916062665ce8365aa40ed321f45afcb934b41e", size = 3845354, upload-time = "2026-06-08T23:02:42.702Z" }, { url = "https://files.pythonhosted.org/packages/de/cc/f99f4bc7295023d7bd9ebbfd51f75cc530ca262c1227666268b8208f4b77/hf_xet-1.5.1-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:892e3a3a3aecc12aded8b93cf4f9cd059282c7de0732f7d55026f3abdf474350", size = 4514864, upload-time = "2026-06-08T23:02:44.497Z" }, + { url = "https://files.pythonhosted.org/packages/cd/6e/21f7e5a2381278bd3b7b7a5a4d90038518bb6308a0c1daf5d9f8268bb178/hf_xet-1.5.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a93df2039190502835b1db8cd7e178b0b7b889fe9ab51299d5ced26e0dd879a4", size = 4303784, upload-time = "2026-06-08T23:02:46.203Z" }, + { url = "https://files.pythonhosted.org/packages/35/0e/f992bb6927ac1cb30ef74e62268f551f338bc32b2191f7c96a44c6f7283e/hf_xet-1.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0c97106032ef70467b4f6bc2d0ccc266d7613ee076afc56516c502f87ce1c4a6", size = 4500703, upload-time = "2026-06-08T23:02:47.628Z" }, { url = "https://files.pythonhosted.org/packages/fb/d1/90a498d05447980b977b1669246eeeeae4cfb0ea3e7a286eaba627f91bf9/hf_xet-1.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6208adb15d192b90e4c2ad2a27ed864359b2cb0f2494eb6d7c7f3699ac02e2bf", size = 4719498, upload-time = "2026-06-08T23:02:49.268Z" }, ] @@ -1006,7 +1003,11 @@ version = "0.15.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/66/b5/55f06bb281d92fb3cc86d14e1def2bd908bb77693183e7cb1f5a3c388b0c/jiter-0.15.0.tar.gz", hash = "sha256:4251acc80e2b7c9b7b8823456ea0fceeb0734dac2df7636d3c711b38476b5a76", size = 166640, upload-time = "2026-05-19T10:09:48.361Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/2a/e71dea19822e2e404e83992a08c1d6b9b617bb944f28c9c2fbd85d02c91e/jiter-0.15.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:773b6eb282ce11ee19f05f6b2d4404fa308e5bbd353b0b80a0262caad6db2cd7", size = 366214, upload-time = "2026-05-19T10:07:17.259Z" }, + { url = "https://files.pythonhosted.org/packages/c4/59/97e1fa539d124a509a00ab7f669289d1c1d236ecabf12948a18f16c91082/jiter-0.15.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2c0c44d569ce0f2850f5c926f8caeb5f245fbc84475aeb36efccc2103e6dbd", size = 459527, upload-time = "2026-05-19T10:07:18.741Z" }, + { url = "https://files.pythonhosted.org/packages/d1/7a/4a68d331aef8cf2e2393c14a3aacb635c62aa86071b0229899fb5baaa907/jiter-0.15.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:032396229564bca02440396bd327710719f724f5e7b7e9f7a8eb3faa4a2c2281", size = 375451, upload-time = "2026-05-19T10:07:20.208Z" }, { url = "https://files.pythonhosted.org/packages/7b/7e/1c445c2b6f0e30a274dc8082e0c3c7825411cce80d726bccd697c98cc8d3/jiter-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3d37768fce7f88dd2a8c6091f2325dea27d30d30d5c6e7a1c0f0af77723b708", size = 349428, upload-time = "2026-05-19T10:07:22.372Z" }, + { url = "https://files.pythonhosted.org/packages/00/94/e20d38984fc17a636371bffd2ae0f698124fdc8e75ef969cd2da6ba7cea7/jiter-0.15.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:2c9cb907439d20bd0c7d7565ca01ee52234203208433749bae5b516907526928", size = 355405, upload-time = "2026-05-19T10:07:23.916Z" }, { url = "https://files.pythonhosted.org/packages/e7/2c/5e07874e59e623a943a0acf1552a80d05b70f31b402287a8fc6d7ec634c7/jiter-0.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8020c99ec13a7db2b6f96cbe82ef4721c88b426a4892f27478044af0284615ef", size = 551016, upload-time = "2026-05-19T10:07:28.846Z" }, { url = "https://files.pythonhosted.org/packages/34/56/55d76614af37fe3f22a3347d1e410d2a15da581997cb2da499a625000bb5/jiter-0.15.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b15d3ec9b0449c40e85319bdb4caa8b77ab526e74f5532ed94bec15e2f66822c", size = 345606, upload-time = "2026-05-19T10:09:40.727Z" }, ] @@ -1092,7 +1093,9 @@ dependencies = [ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/62/a149b47dc4ccf3c569eba722b805cbba1b90566976ff1d459f20f7f00ebc/lancedb-0.25.3-cp39-abi3-macosx_10_15_x86_64.whl", hash = "sha256:1cfa4dd97b33ca8f73288aa4b1baaddc9545ce0d3c8e5d06fba8feb77f42363f", size = 38425074, upload-time = "2025-11-07T05:58:15.763Z" }, { url = "https://files.pythonhosted.org/packages/b2/94/ae3e74bb27dcca321ccf1e7a32ccab09b1062ddf54f96376221ca8610e7c/lancedb-0.25.3-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8a7bfe0cb2146f6e78e9f376673ed2f906b93dab84df97dad2ba9fa52f97e152", size = 34506539, upload-time = "2025-11-07T05:14:04.901Z" }, + { url = "https://files.pythonhosted.org/packages/6a/07/b580d0e002eaaa3d5216699fb9f19186c37861c3fa11ac3be991fa7d6d03/lancedb-0.25.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25a395d07d31da1e13e2631fd9911b15e6d4fb903d34358cea0bd450006364e3", size = 36149261, upload-time = "2025-11-07T05:23:13.002Z" }, { url = "https://files.pythonhosted.org/packages/c1/95/32ddb779a01cd0d349f391e7d5f4218d045f9848c1d757f5a8ace4c63b09/lancedb-0.25.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500beac161f73e3e6826a711efb1d24397d892d07dfdce2c9fb1da73f8de506c", size = 39145675, upload-time = "2025-11-07T05:24:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/f4/33/fdaff64a111f86dbb99f3ff09136df93b441e350f4953884a9fc21c49283/lancedb-0.25.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:2d0fce4187582e48b69430d204665e164002f1b49b03e67747ca8ec2c3083481", size = 36165492, upload-time = "2025-11-07T05:27:13.394Z" }, { url = "https://files.pythonhosted.org/packages/ab/15/f0d69acc5e06892d19e09c127cd928cf20f5d2966a069e93693fc389b132/lancedb-0.25.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3035665fb8e4aaff8dff2602747cc77aeba6bc39f1a95345abc3275c97a044cb", size = 39191458, upload-time = "2025-11-07T05:24:38.047Z" }, ] @@ -1124,6 +1127,7 @@ source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/da/91/6bc8bb503dc259e46d253b5424385a54fe06c38a4c7a12befe69a3c2455a/llguidance-1.7.6.tar.gz", hash = "sha256:db7febbe412ed2015501904646750071d7e00e6df7f85c4b956ad4f206fd2df7", size = 1156574, upload-time = "2026-06-03T20:13:25.316Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/1a/64/d74336f22242ef94356a456057d4ff1be7c1bc9c7dbc867171c6982a5512/llguidance-1.7.6-cp39-abi3-manylinux_2_31_x86_64.whl", hash = "sha256:ceec951d29a74309984e3be0fe7f5f56c1362434cd937abd517b259a60908b1e", size = 3074809, upload-time = "2026-06-03T20:13:15.498Z" }, + { url = "https://files.pythonhosted.org/packages/47/e6/6b61cecced5233739bc85e463d68d67d4b4c29fb6f91bd12e6b6a65647e3/llguidance-1.7.6-cp39-abi3-manylinux_2_39_riscv64.whl", hash = "sha256:e9f68206e0f3f89aceabb90aa1f8ed570db22fb7cb1fd9ebf96fa7727a65af55", size = 3603845, upload-time = "2026-06-03T20:13:19.473Z" }, ] [[package]] @@ -1179,7 +1183,11 @@ sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95 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" }, ] @@ -1270,18 +1278,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/07/ef/6eabeb251d2a0598cb5f9a274159e05ae07a1e3fe6a1473bf6035793252a/model_hosting_container_standards-0.1.16-py3-none-any.whl", hash = "sha256:47f4f65713120bc3a69feb022981a38db9e557aedf88dbd72077f20588caa12b", size = 125666, upload-time = "2026-06-15T21:29:33.415Z" }, ] -[[package]] -name = "more-click" -version = "0.1.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/74/52/dc524f10307c472f3ee83ceef5cc3c3c1d987f9554c90cf34616bdcb2ca9/more_click-0.1.3.tar.gz", hash = "sha256:c170987d37334278169fe3b9b388f1fcd9fc96439579354fd7c537537a182128", size = 11793, upload-time = "2025-10-21T15:28:23.531Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/21/c8/62a253fdb3f66529ed0d7f0e4703fdb44cc8745610f199e173550d8f85eb/more_click-0.1.3-py3-none-any.whl", hash = "sha256:12f0f3da94c84d39daaaec08e9503df8877f493812f8ebc3f0713081da48d282", size = 12052, upload-time = "2025-10-21T15:28:22.456Z" }, -] - [[package]] name = "mpmath" version = "1.3.0" @@ -1299,7 +1295,11 @@ sdist = { url = "https://files.pythonhosted.org/packages/31/f9/c0a1c127f9049db91 wheels = [ { url = "https://files.pythonhosted.org/packages/f4/6b/e9b1cdc042c4458801d2545ed782a95f3d6ba8e270cce8745b8603c7f748/msgpack-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:29a3f6e9667868429d8240dfd063ea5ffdc1321c13d783aa23827a38de0dcb22", size = 82812, upload-time = "2026-06-18T16:12:45.022Z" }, { url = "https://files.pythonhosted.org/packages/0c/3a/dd518a1bf78ed1e9ad8afe57307c079a00eafe4b3068932a27ca1ea56b4f/msgpack-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aded5bdf32609dc7987a49bbbd15a8ef096193f96dd8bbeb791de729e650acf5", size = 82739, upload-time = "2026-06-18T16:12:46.025Z" }, + { url = "https://files.pythonhosted.org/packages/70/e0/7ba9e1542bf0771a27b8b37c1316e3f95ae9d748fd765284655c476ad4ef/msgpack-1.2.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:146ee4e9ce80b365c6d4c47073da9da7bcec473e58194ceee5dd7620ace77e06", size = 414233, upload-time = "2026-06-18T16:12:47.029Z" }, { url = "https://files.pythonhosted.org/packages/03/8d/671d81534ea0e2b0e8a121be100020da09eb78861fe3aa8f3ef7dcd3bed1/msgpack-1.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a28d076ca7c82b9c8728ad90b7147489449557038bed50e4241eb832395169b4", size = 423843, upload-time = "2026-06-18T16:12:48.19Z" }, + { url = "https://files.pythonhosted.org/packages/d2/b6/e5c737515ed1f166664b87601b532f58cbb73d8aa6a90b99f7c2c5037e8e/msgpack-1.2.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7d31c0ac0c640f877804c67cb2bc9f4e23dc2db97e96c2e67fa27d38283b41f8", size = 390772, upload-time = "2026-06-18T16:12:49.624Z" }, + { url = "https://files.pythonhosted.org/packages/a8/46/62ed8c2e87d7021eab19921594d961ef3aa3794eec76c716dc30f3bfd433/msgpack-1.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8ff92d7feeaf5bc26c51495b69e2f99ed97ab79346fb6555f44be7dd2ac6503b", size = 409559, upload-time = "2026-06-18T16:12:50.936Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/59aa3887b860bbf43532835e192b1c388a17590d6068ae4f8b2bc74c906e/msgpack-1.2.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:779197a6513bab3c3632265e3d0f7cb3227e62510841a6f34f1eaa37efbb345e", size = 387838, upload-time = "2026-06-18T16:12:52.161Z" }, { url = "https://files.pythonhosted.org/packages/09/11/f8563e471093420cf6478cb3271a0175d8402b82d879783d4035d2d03360/msgpack-1.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:67f6dd22fa72a93752643f07889796d62739a13415ee630169a8ce764f86cf9f", size = 421732, upload-time = "2026-06-18T16:12:53.556Z" }, ] @@ -1319,7 +1319,13 @@ version = "6.7.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/01/fb/4dbd7e848d2799c6a026ec88ad39cf2b8416aa167fcc903baa55ecaa045c/multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a", size = 225376, upload-time = "2026-01-26T02:43:34.417Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8a/4a3a6341eac3830f6053062f8fbc9a9e54407c80755b3f05bc427295c2d0/multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8", size = 257365, upload-time = "2026-01-26T02:43:35.741Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a2/dd575a69c1aa206e12d27d0770cdf9b92434b48a9ef0cd0d1afdecaa93c4/multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0", size = 254747, upload-time = "2026-01-26T02:43:36.976Z" }, { url = "https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144", size = 246293, upload-time = "2026-01-26T02:43:38.258Z" }, + { url = "https://files.pythonhosted.org/packages/1f/67/51dd754a3524d685958001e8fa20a0f5f90a6a856e0a9dcabff69be3dbb7/multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71", size = 237360, upload-time = "2026-01-26T02:43:41.752Z" }, + { url = "https://files.pythonhosted.org/packages/3d/20/6214d3c105928ebc353a1c644a6ef1408bc5794fcb4f170bb524a3c16311/multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c", size = 253502, upload-time = "2026-01-26T02:43:44.371Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e2/c653bc4ae1be70a0f836b82172d643fcf1dade042ba2676ab08ec08bff0f/multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0", size = 247065, upload-time = "2026-01-26T02:43:45.745Z" }, { url = "https://files.pythonhosted.org/packages/c8/11/a854b4154cd3bd8b1fd375e8a8ca9d73be37610c361543d56f764109509b/multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa", size = 241870, upload-time = "2026-01-26T02:43:47.054Z" }, { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, ] @@ -1339,7 +1345,15 @@ version = "1.13.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/56/c7/ba22748fb59f7f896b609cd3e568d28a0a367a6d953c24c461fe04fc4433/ninja-1.13.0-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:60056592cf495e9a6a4bea3cd178903056ecb0943e4de45a2ea825edb6dc8d3e", size = 202736, upload-time = "2025-08-11T15:09:55.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/22/d1de07632b78ac8e6b785f41fa9aad7a978ec8c0a1bf15772def36d77aac/ninja-1.13.0-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1c97223cdda0417f414bf864cfb73b72d8777e57ebb279c5f6de368de0062988", size = 179034, upload-time = "2025-08-11T15:09:57.394Z" }, { url = "https://files.pythonhosted.org/packages/ed/de/0e6edf44d6a04dabd0318a519125ed0415ce437ad5a1ec9b9be03d9048cf/ninja-1.13.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa", size = 180716, upload-time = "2025-08-11T15:09:58.696Z" }, + { url = "https://files.pythonhosted.org/packages/54/28/938b562f9057aaa4d6bfbeaa05e81899a47aebb3ba6751e36c027a7f5ff7/ninja-1.13.0-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4be9c1b082d244b1ad7ef41eb8ab088aae8c109a9f3f0b3e56a252d3e00f42c1", size = 146843, upload-time = "2025-08-11T15:10:00.046Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fb/d06a3838de4f8ab866e44ee52a797b5491df823901c54943b2adb0389fbb/ninja-1.13.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:6739d3352073341ad284246f81339a384eec091d9851a886dfa5b00a6d48b3e2", size = 154402, upload-time = "2025-08-11T15:10:01.657Z" }, + { url = "https://files.pythonhosted.org/packages/9d/70/c99d0c2c809f992752453cce312848abb3b1607e56d4cd1b6cded317351a/ninja-1.13.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:aa45b4037b313c2f698bc13306239b8b93b4680eb47e287773156ac9e9304714", size = 472501, upload-time = "2025-08-11T15:10:04.735Z" }, + { url = "https://files.pythonhosted.org/packages/8c/45/9151bba2c8d0ae2b6260f71696330590de5850e5574b7b5694dce6023e20/ninja-1.13.0-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:3d7d7779d12cb20c6d054c61b702139fd23a7a964ec8f2c823f1ab1b084150db", size = 642420, upload-time = "2025-08-11T15:10:08.35Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/95752eb635bb8ad27d101d71bef15bc63049de23f299e312878fc21cb2da/ninja-1.13.0-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:d741a5e6754e0bda767e3274a0f0deeef4807f1fec6c0d7921a0244018926ae5", size = 585106, upload-time = "2025-08-11T15:10:09.818Z" }, + { url = "https://files.pythonhosted.org/packages/c1/31/aa56a1a286703800c0cbe39fb4e82811c277772dc8cd084f442dd8e2938a/ninja-1.13.0-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:e8bad11f8a00b64137e9b315b137d8bb6cbf3086fbdc43bf1f90fd33324d2e96", size = 707138, upload-time = "2025-08-11T15:10:11.366Z" }, { url = "https://files.pythonhosted.org/packages/34/6f/5f5a54a1041af945130abdb2b8529cbef0cdcbbf9bcf3f4195378319d29a/ninja-1.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200", size = 581758, upload-time = "2025-08-11T15:10:13.295Z" }, ] @@ -1646,6 +1660,7 @@ dependencies = [ ] wheels = [ { url = "https://files.pythonhosted.org/packages/d4/e4/5353d7e09ced4a8f473f843223fc75d726b2b5519dcefc12f22a6c92852d/onnxruntime-1.27.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:8ba14a38c570087f3cdb8cfba33f7a38a1e826c1e5b29e17c28ceda0cc910016", size = 18416484, upload-time = "2026-06-15T22:43:43.894Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1f/a2117aa3f144fce88774efa37440d0ca72d0c9144854dfc0961f2b04c6fc/onnxruntime-1.27.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2eb083321af8a236a84c7c140a7f4cecbfa2a987a18c07c78db471c20cd390ef", size = 16419330, upload-time = "2026-06-15T22:42:37.58Z" }, { url = "https://files.pythonhosted.org/packages/e0/cd/74bb804170ceb622fda9111df31a07b3024f7491472256d3a90b5391a4d2/onnxruntime-1.27.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e4f7b0e90d2d212e2c2deaa6c8291616183ab815d3ec558ea12d3ac8b26d36f4", size = 18636930, upload-time = "2026-06-15T22:43:01.584Z" }, ] @@ -1677,7 +1692,10 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/3e/92/2d038d096f29179c7c9571b431f9e739f87a487121901725e23fe338dd9d/openai_harmony-0.0.8.tar.gz", hash = "sha256:6e43f98e6c242fa2de6f8ea12eab24af63fa2ed3e89c06341fb9d92632c5cbdf", size = 284777, upload-time = "2025-11-05T19:07:06.727Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/4c/b553c9651662d6ce102ca7f3629d268b23df1abe5841e24bed81e8a8e949/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5cfcfd963b50a41fc656c84d3440ca6eecdccd6c552158ce790b8f2e33dfb5a9", size = 2704083, upload-time = "2025-11-05T19:06:50.205Z" }, + { url = "https://files.pythonhosted.org/packages/11/3c/33f3374e4624e0e776f6b13b73c45a7ead7f9c4529f8369ed5bfcaa30cac/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4d5cfa168e74d08f8ba6d58a7e49bc7daef4d58951ec69b66b0d56f4927a68d", size = 3427031, upload-time = "2025-11-05T19:06:51.829Z" }, { url = "https://files.pythonhosted.org/packages/25/3f/1a192b93bb47c6b44cd98ba8cc1d3d2a9308f1bb700c3017e6352da11bda/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c007d277218a50db8839e599ed78e0fffe5130f614c3f6d93ae257f282071a29", size = 2953260, upload-time = "2025-11-05T19:06:55.406Z" }, + { url = "https://files.pythonhosted.org/packages/1d/10/4327dbf87f75ae813405fd9a9b4a5cde63d506ffed0a096a440a4cabd89c/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:cbaa3bda75ef0d8836e1f8cc84af62f971b1d756d740efc95c38c3e04c0bfde2", size = 2932931, upload-time = "2025-11-05T19:07:01.437Z" }, { url = "https://files.pythonhosted.org/packages/60/c3/3d1e01e2dba517a91760e4a03e4f20ffc75039a6fe584d0e6f9b5c78fd15/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:007b0476a1f331f8130783f901f1da6f5a7057af1a4891f1b6a31dec364189b5", size = 3205080, upload-time = "2025-11-05T19:07:05.078Z" }, ] @@ -1869,7 +1887,9 @@ sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca wheels = [ { url = "https://files.pythonhosted.org/packages/a8/44/d9502bf0ed197ba9bf1103c9867d5904ddcaf869e52329787fc54ed70cc8/pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", size = 12602222, upload-time = "2024-09-20T13:08:56.254Z" }, { url = "https://files.pythonhosted.org/packages/52/11/9eac327a38834f162b8250aab32a6781339c69afe7574368fffe46387edf/pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", size = 11321274, upload-time = "2024-09-20T13:08:58.645Z" }, + { url = "https://files.pythonhosted.org/packages/45/fb/c4beeb084718598ba19aa9f5abbc8aed8b42f90930da861fcb1acdb54c3a/pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", size = 15579836, upload-time = "2024-09-20T19:01:57.571Z" }, { url = "https://files.pythonhosted.org/packages/cd/5f/4dba1d39bb9c38d574a9a22548c540177f78ea47b32f99c0ff2ec499fac5/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", size = 13058505, upload-time = "2024-09-20T13:09:01.501Z" }, + { url = "https://files.pythonhosted.org/packages/b9/57/708135b90391995361636634df1f1130d03ba456e95bcf576fada459115a/pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", size = 16744420, upload-time = "2024-09-20T19:02:00.678Z" }, { url = "https://files.pythonhosted.org/packages/86/4a/03ed6b7ee323cf30404265c284cee9c65c56a212e0a08d9ee06984ba2240/pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", size = 14440457, upload-time = "2024-09-20T13:09:04.105Z" }, ] @@ -2018,7 +2038,14 @@ version = "0.5.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/83/27/ab851ebd1b7172e3e161f5f8d39e315d54a91bea246f01f4d872d3376aef/propcache-0.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660", size = 60645, upload-time = "2026-05-08T20:59:52.227Z" }, + { url = "https://files.pythonhosted.org/packages/95/7d/466b3d18022e9897cbda9c735c493c5bd747d7a4c6f5ea1480b4cec434b6/propcache-0.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66", size = 61563, upload-time = "2026-05-08T20:59:53.866Z" }, { url = "https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b", size = 58888, upload-time = "2026-05-08T20:59:55.457Z" }, + { url = "https://files.pythonhosted.org/packages/0a/67/bb777ffd907633563bf35fd859c4ce97b0512c32f4633cf5d1eb7c33512b/propcache-0.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67", size = 59253, upload-time = "2026-05-08T20:59:57.075Z" }, + { url = "https://files.pythonhosted.org/packages/eb/02/dba5bc03c9041f2092ea55a449caf5dfe68352c6654511b29ba0654ddb69/propcache-0.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c", size = 55007, upload-time = "2026-05-08T20:59:59.837Z" }, + { url = "https://files.pythonhosted.org/packages/14/c0/43f649c7aa2a77a3b100d84e9dea3a483120ecb608bfe36ce49eaff517fe/propcache-0.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0", size = 60355, upload-time = "2026-05-08T21:00:01.144Z" }, + { url = "https://files.pythonhosted.org/packages/83/c0/435dafd27f1cb4a495381dae60e25883ccfe4020bb72818e8184c1678092/propcache-0.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6", size = 59057, upload-time = "2026-05-08T21:00:02.401Z" }, + { url = "https://files.pythonhosted.org/packages/53/ae/6e292df9135d659944e96cb3389258e4a663e5b2b5f6c217ef0ddc8d2f73/propcache-0.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27", size = 61938, upload-time = "2026-05-08T21:00:03.638Z" }, { url = "https://files.pythonhosted.org/packages/0b/42/314ebc50d8159055411fd6b0bda322ff510e4b1f7d2e4927940ad0f6af20/propcache-0.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f", size = 59731, upload-time = "2026-05-08T21:00:04.881Z" }, { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, ] @@ -2032,6 +2059,7 @@ resolution-markers = [ ] sdist = { url = "https://files.pythonhosted.org/packages/66/70/e908e9c5e52ef7c3a6c7902c9dfbb34c7e29c25d2f81ade3856445fd5c94/protobuf-6.33.6.tar.gz", hash = "sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135", size = 444531, upload-time = "2026-03-18T19:05:00.988Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/ca/25afc144934014700c52e05103c2421997482d561f3101ff352e1292fb81/protobuf-6.33.6-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:c96c37eec15086b79762ed265d59ab204dabc53056e3443e702d2681f4b39ce3", size = 339381, upload-time = "2026-03-18T19:04:54.616Z" }, { url = "https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593", size = 323436, upload-time = "2026-03-18T19:04:55.768Z" }, { url = "https://files.pythonhosted.org/packages/c4/72/02445137af02769918a93807b2b7890047c32bfb9f90371cbc12688819eb/protobuf-6.33.6-py3-none-any.whl", hash = "sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901", size = 170656, upload-time = "2026-03-18T19:04:59.826Z" }, ] @@ -2058,6 +2086,8 @@ wheels = [ { 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" }, ] @@ -2090,7 +2120,9 @@ sdist = { url = "https://files.pythonhosted.org/packages/91/13/13e1069b351bdc388 wheels = [ { url = "https://files.pythonhosted.org/packages/62/c9/a47ab7ece0d86cbe6678418a0fbd1ac4bb493b9184a3891dfa0e7f287ae0/pyarrow-24.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b0e131f880cda8d04e076cee175a46fc0e8bc8b65c99c6c09dff6669335fde74", size = 35068898, upload-time = "2026-04-21T10:46:36.599Z" }, { url = "https://files.pythonhosted.org/packages/d1/bc/8db86617a9a58008acf8913d6fed68ea2a46acb6de928db28d724c891a68/pyarrow-24.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:1b2fe7f9a5566401a0ef2571f197eb92358925c1f0c8dba305d6e43ea0871bb3", size = 36679915, upload-time = "2026-04-21T10:46:42.602Z" }, + { url = "https://files.pythonhosted.org/packages/eb/8e/fb178720400ef69db251eb4a9c3ccf4af269bc1feb5055529b8fc87170d1/pyarrow-24.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:0b3537c00fb8d384f15ac1e79b6eb6db04a16514c8c1d22e59a9b95c8ba42868", size = 45697931, upload-time = "2026-04-21T10:46:48.403Z" }, { url = "https://files.pythonhosted.org/packages/f3/27/99c42abe8e21b44f4917f62631f3aa31404882a2c41d8a4cd5c110e13d52/pyarrow-24.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:14e31a3c9e35f1ab6356c6378f6f72830e6d2d5f1791df3774a7b097d18a6a1e", size = 48837449, upload-time = "2026-04-21T10:46:55.329Z" }, + { url = "https://files.pythonhosted.org/packages/36/b6/333749e2666e9032891125bf9c691146e92901bece62030ac1430e2e7c88/pyarrow-24.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b7d9a514e73bc42711e6a35aaccf3587c520024fe0a25d830a1a8a27c15f4f57", size = 49395949, upload-time = "2026-04-21T10:47:01.869Z" }, { url = "https://files.pythonhosted.org/packages/17/25/c5201706a2dd374e8ba6ee3fd7a8c89fb7ffc16eed5217a91fd2bd7f7626/pyarrow-24.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b196eb3f931862af3fa84c2a253514d859c08e0d8fe020e07be12e75a5a9780c", size = 51912986, upload-time = "2026-04-21T10:47:09.872Z" }, ] @@ -2101,6 +2133,14 @@ source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/aa/b8/4ed5c7ad5ec15b08d35cc79ace6145d5c1ae426e46435f4987379439dfea/pybase64-1.4.3.tar.gz", hash = "sha256:c2ed274c9e0ba9c8f9c4083cfe265e66dd679126cd9c2027965d807352f3f053", size = 137272, upload-time = "2025-12-06T13:27:04.013Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/64/15/8d60b9ec5e658185fc2ee3333e01a6e30d717cf677b24f47cbb3a859d13c/pybase64-1.4.3-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95a57cccf106352a72ed8bc8198f6820b16cc7d55aa3867a16dea7011ae7c218", size = 71370, upload-time = "2025-12-06T13:22:55.517Z" }, + { url = "https://files.pythonhosted.org/packages/a9/00/8ffcf9810bd23f3984698be161cf7edba656fd639b818039a7be1d6405d4/pybase64-1.4.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:9fe9922698f3e2f72874b26890d53a051c431d942701bb3a37aae94da0b12107", size = 56652, upload-time = "2025-12-06T13:22:57.724Z" }, + { url = "https://files.pythonhosted.org/packages/81/62/379e347797cdea4ab686375945bc77ad8d039c688c0d4d0cfb09d247beb9/pybase64-1.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:af5f4bd29c86b59bb4375e0491d16ec8a67548fa99c54763aaedaf0b4b5a6632", size = 59382, upload-time = "2025-12-06T13:22:58.758Z" }, + { url = "https://files.pythonhosted.org/packages/c6/f2/9338ffe2f487086f26a2c8ca175acb3baa86fce0a756ff5670a0822bb877/pybase64-1.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c302f6ca7465262908131411226e02100f488f531bb5e64cb901aa3f439bccd9", size = 59990, upload-time = "2025-12-06T13:23:01.007Z" }, + { url = "https://files.pythonhosted.org/packages/f9/a4/85a6142b65b4df8625b337727aa81dc199642de3d09677804141df6ee312/pybase64-1.4.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:2f3f439fa4d7fde164ebbbb41968db7d66b064450ab6017c6c95cef0afa2b349", size = 54923, upload-time = "2025-12-06T13:23:02.369Z" }, + { url = "https://files.pythonhosted.org/packages/b0/73/d7e19a63e795c13837f2356268d95dc79d1180e756f57ced742a1e52fdeb/pybase64-1.4.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:56e6526f8565642abc5f84338cc131ce298a8ccab696b19bdf76fa6d7dc592ef", size = 52338, upload-time = "2025-12-06T13:23:04.458Z" }, + { url = "https://files.pythonhosted.org/packages/5d/b3/63cec68f9d6f6e4c0b438d14e5f1ef536a5fe63ce14b70733ac5e31d7ab8/pybase64-1.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:62ad29a5026bb22cfcd1ca484ec34b0a5ced56ddba38ceecd9359b2818c9c4f9", size = 58055, upload-time = "2025-12-06T13:23:06.931Z" }, + { url = "https://files.pythonhosted.org/packages/d5/cb/7acf7c3c06f9692093c07f109668725dc37fb9a3df0fa912b50add645195/pybase64-1.4.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:11b9d1d2d32ec358c02214363b8fc3651f6be7dd84d880ecd597a6206a80e121", size = 54430, upload-time = "2025-12-06T13:23:07.936Z" }, + { url = "https://files.pythonhosted.org/packages/33/39/4eb33ff35d173bfff4002e184ce8907f5d0a42d958d61cd9058ef3570179/pybase64-1.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0aebaa7f238caa0a0d373616016e2040c6c879ebce3ba7ab3c59029920f13640", size = 56272, upload-time = "2025-12-06T13:23:09.253Z" }, { url = "https://files.pythonhosted.org/packages/19/97/a76d65c375a254e65b730c6f56bf528feca91305da32eceab8bcc08591e6/pybase64-1.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e504682b20c63c2b0c000e5f98a80ea867f8d97642e042a5a39818e44ba4d599", size = 70904, upload-time = "2025-12-06T13:23:10.336Z" }, { url = "https://files.pythonhosted.org/packages/bf/44/d4b7adc7bf4fd5b52d8d099121760c450a52c390223806b873f0b6a2d551/pybase64-1.4.3-graalpy311-graalpy242_311_native-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a492518f3078a4e3faaef310697d21df9c6bc71908cebc8c2f6fbfa16d7d6b1f", size = 43227, upload-time = "2025-12-06T13:26:21.845Z" }, { url = "https://files.pythonhosted.org/packages/12/d7/6610f34a8972415fab3bb4704c174a1cc477bffbc3c36e526428d0f3957d/pybase64-1.4.3-pp311-pypy311_pp73-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af6d0d3a691911cc4c9a625f3ddcd3af720738c21be3d5c72de05629139d393", size = 41294, upload-time = "2025-12-06T13:26:44.936Z" }, @@ -2141,7 +2181,7 @@ wheels = [ [package.optional-dependencies] email = [ - { name = "email-validator", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "email-validator", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] @@ -2155,14 +2195,26 @@ sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f wheels = [ { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, + { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, + { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, + { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, + { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, + { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, + { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, + { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, + { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, + { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, ] @@ -2239,20 +2291,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, ] -[[package]] -name = "pystow" -version = "0.8.19" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "backports-zstd", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/38/ae/ab4b8969de766b7eab335aba53b53de7542b682b5a7743982aa016215579/pystow-0.8.19.tar.gz", hash = "sha256:60dbad2360d6da38fbfa85d45f7d865fa5fbb49e343e27e836df5fb3b9f4f7de", size = 54537, upload-time = "2026-06-19T09:12:03.756Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/72/81bb62fe4adab824b9e664a0096b16714341c892407658884111273a5993/pystow-0.8.19-py3-none-any.whl", hash = "sha256:7ba92e23e952e250dc5dc7b7b4e6797a4ab030f3dec88fc429286f78f186965f", size = 61817, upload-time = "2026-06-19T09:12:05.012Z" }, -] - [[package]] name = "pytest" version = "9.1.0" @@ -2324,7 +2362,10 @@ sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa wheels = [ { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, + { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, + { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, + { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, ] @@ -2360,21 +2401,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2d/2b/a8f171d5e172880885571bf89e93204aaf231a0e92c4c84714eaf18c271a/quack_kernels-0.5.0-py3-none-any.whl", hash = "sha256:08821ebfb8e638cc20308d5c59410c6dbb3b637ccc7b07bd57c7a9261a06af74", size = 327709, upload-time = "2026-05-29T05:00:24.679Z" }, ] -[[package]] -name = "rapidfuzz" -version = "3.14.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2c/21/ef6157213316e85790041254259907eb722e00b03480256c0545d98acd33/rapidfuzz-3.14.5.tar.gz", hash = "sha256:ba10ac57884ce82112f7ed910b67e7fb6072d8ef2c06e30dc63c0f604a112e0e", size = 57901753, upload-time = "2026-04-07T11:16:31.931Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/f9/3c41a7be8855803f4f6c713b472226a98d31d41869d98f64f4ca790510d6/rapidfuzz-3.14.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e251126d48615e1f02b4a178f2cd0cd4f0332b8a019c01a2e10480f7552554b4", size = 1952372, upload-time = "2026-04-07T11:13:58.32Z" }, - { url = "https://files.pythonhosted.org/packages/9e/89/c2557e37531d03465193bff0ab9de70b468420a807d71a26a65100635459/rapidfuzz-3.14.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ab449c9abd0d4e1f8145dce0798a4c822a1a1933d613c764a641bea88b8bdab", size = 1159782, upload-time = "2026-04-07T11:14:00.127Z" }, - { url = "https://files.pythonhosted.org/packages/6b/d0/4539e42a2d596e068f7738f279638a4a74edd1fbb6f8594e2458058979c6/rapidfuzz-3.14.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3d50e5861872935fece391351cbb5ba21d1bced277cf5e1143d207a0a35f1925", size = 3168906, upload-time = "2026-04-07T11:14:03.29Z" }, - { url = "https://files.pythonhosted.org/packages/87/52/374d2d4f60fd98155142a869323aa221e30868cfa1f15171a0f64070c247/rapidfuzz-3.14.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f0b2af76b7e7060c09e1a0dfa9410eb19369cbe6164509bff2ef94094b54d2b6", size = 4275480, upload-time = "2026-04-07T11:14:11.332Z" }, - { url = "https://files.pythonhosted.org/packages/d9/ee/e71853bf82846c5c2174b924b71d8e8099fb05ff87c958a720380b434ba3/rapidfuzz-3.14.5-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:578e6051f6d5e6200c259b47a103cf06bb875ab5814d17333fc0b5c290b22f4c", size = 1888603, upload-time = "2026-04-07T11:16:18.223Z" }, - { url = "https://files.pythonhosted.org/packages/36/82/40f67b730f32be2ebad9f62add1571c754f52249254b2e88af094b907eee/rapidfuzz-3.14.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:fbf1b8bb2695415b347f3727da1addca2acb82c9b97ac86bebf8b1bead1eb12d", size = 1120599, upload-time = "2026-04-07T11:16:20.682Z" }, - { url = "https://files.pythonhosted.org/packages/cc/1b/2b229520f0b48464cfcd7aa758f74551d12c9bc4ab544022a60210aab064/rapidfuzz-3.14.5-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:97c6d85283629646fa87acc22c66b30ea9d4de7f6fdf887daa2e30fa041829b5", size = 3099302, upload-time = "2026-04-07T11:16:25.858Z" }, -] - [[package]] name = "referencing" version = "0.37.0" @@ -2398,7 +2424,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c2/dc/c1f2df4027e82fc54b5a473e4b250f5139faca49a0fbe29a48668d228f34/regex-2026.5.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ccf5249114cc3e772ecdd88a98a86eca0fd74c61ce32a94743758c083fc05d48", size = 489445, upload-time = "2026-05-09T23:12:06.111Z" }, { url = "https://files.pythonhosted.org/packages/03/d2/59f01110660081cce9c0bc30ebd0b5ee250dacf658e3248ed92f01e0e8ee/regex-2026.5.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46f1326ca6e65b0879d23ca302c0f2415aad42ff0309b9c818e7949fe19a41d8", size = 291271, upload-time = "2026-05-09T23:12:07.731Z" }, { url = "https://files.pythonhosted.org/packages/58/b6/14b2c84ff90ddb370c81d27503f4a0fcf071496416f4855f6cc8c5d81c35/regex-2026.5.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef31cbfe458e21c6122ba8150ff060e0c7789ed0d26eb423f25472584920b555", size = 289212, upload-time = "2026-05-09T23:12:09.266Z" }, + { url = "https://files.pythonhosted.org/packages/03/d0/4db86529117320de0c84afd90e70bb47434625875e34fcef9d8c127c5b16/regex-2026.5.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:992604d02e6d9c6d786c24a706a71ecffe1020fc1ef264044474cd81fa2c3919", size = 792310, upload-time = "2026-05-09T23:12:11.416Z" }, + { url = "https://files.pythonhosted.org/packages/07/78/fe4800cd322f862ecffd2d553409b20d80650e5ed71b9d178f853d020b82/regex-2026.5.9-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c9411dd64ca95477225734a93dfc8583b51916b8d5942f99d6cac21e09965451", size = 861721, upload-time = "2026-05-09T23:12:13.681Z" }, + { url = "https://files.pythonhosted.org/packages/b5/d0/b3618a895dd8feb897c61bb2954edd265e1767d82a01d53065d5871127a3/regex-2026.5.9-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3dd4a3ff360dfb836fecdb93a4598f9d6e2ac81e3e397125145c6221bf58cf4c", size = 906460, upload-time = "2026-05-09T23:12:15.443Z" }, { url = "https://files.pythonhosted.org/packages/33/6f/1481597e859ef19508b345eec4afd1416ed6e6b459c75a64026ef193aecf/regex-2026.5.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a661a7d270a61f7cf460caee8b9fa2d5ef9e5c681234bcb9e0fe14f488e7dfc", size = 799843, upload-time = "2026-05-09T23:12:16.892Z" }, + { url = "https://files.pythonhosted.org/packages/73/59/955734c803f59108deccba3597ae440c76b62a652733c0006e6243758420/regex-2026.5.9-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f079e50a0d3cc3cd5091fa9ff45869a2e6b2cd35895731edafb0327901a8d86d", size = 773610, upload-time = "2026-05-09T23:12:19.127Z" }, + { url = "https://files.pythonhosted.org/packages/68/8f/70c04a236d651c81881dac42ef8538bddda6121434509d0a22d9e601503b/regex-2026.5.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4ebe8f0b5ec5a5024dc4a4c59f444c4e9afc5f2abdbb8962065b75d27fb971f9", size = 781645, upload-time = "2026-05-09T23:12:20.806Z" }, + { url = "https://files.pythonhosted.org/packages/1d/96/05c7434d88185e5d27fe54aeb74df86bd77cd79f52f0b4eae54faa8fea70/regex-2026.5.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:97cf3bc1b7d7d2306772ec07366c80d9df00ff79e79cea32898883a646d2fae2", size = 854473, upload-time = "2026-05-09T23:12:22.465Z" }, + { url = "https://files.pythonhosted.org/packages/4e/c1/6e3d8202d981f3117004bf341ee74893ba4ba8a9fbaf4b94615846550a08/regex-2026.5.9-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0f9eede6a5cbdc02d4978090186390936e1776a7d1359b21e41014c609880bcf", size = 763311, upload-time = "2026-05-09T23:12:24.351Z" }, + { url = "https://files.pythonhosted.org/packages/93/c7/e7737f1526b3fb32bd4c337fd6c71c3ebb5c8296fc34d11197e0955d2e35/regex-2026.5.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:01f0f5f55f4b64dacec85dc116d3c05fd23ad3ff037bbc73a2085775953c2611", size = 844593, upload-time = "2026-05-09T23:12:26.341Z" }, { url = "https://files.pythonhosted.org/packages/a5/27/0daffb1a535bb39f422c3d200f4ab023c71110ad66a32b366bee708baba0/regex-2026.5.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1268eddd8486dc561d08eee1156e40aa3a8fe10f4bdec8fa653b455fcbffd12c", size = 789167, upload-time = "2026-05-09T23:12:27.975Z" }, ] @@ -2450,9 +2484,17 @@ version = "0.7.6" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e5/f5/8bed2310abe4ae04b67a38374a4d311dd85220f5d8da56f47ae9361be0b0/rignore-0.7.6.tar.gz", hash = "sha256:00d3546cd793c30cb17921ce674d2c8f3a4b00501cb0e3dd0e82217dbeba2671", size = 57140, upload-time = "2025-11-05T21:41:21.968Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/c9/390a8fdfabb76d71416be773bd9f162977bd483084f68daf19da1dec88a6/rignore-0.7.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ba5524f5178deca4d7695e936604ebc742acb8958f9395776e1fcb8133f8257a", size = 873633, upload-time = "2025-11-05T20:41:06.193Z" }, + { url = "https://files.pythonhosted.org/packages/df/c9/79404fcb0faa76edfbc9df0901f8ef18568d1104919ebbbad6d608c888d1/rignore-0.7.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:62020dbb89a1dd4b84ab3d60547b3b2eb2723641d5fb198463643f71eaaed57d", size = 1167633, upload-time = "2025-11-05T20:41:22.491Z" }, + { url = "https://files.pythonhosted.org/packages/6e/8d/b3466d32d445d158a0aceb80919085baaae495b1f540fb942f91d93b5e5b/rignore-0.7.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b34acd532769d5a6f153a52a98dcb81615c949ab11697ce26b2eb776af2e174d", size = 941434, upload-time = "2025-11-05T20:41:38.151Z" }, { url = "https://files.pythonhosted.org/packages/e8/40/9cd949761a7af5bc27022a939c91ff622d29c7a0b66d0c13a863097dde2d/rignore-0.7.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c5e53b752f9de44dff7b3be3c98455ce3bf88e69d6dc0cf4f213346c5e3416c", size = 959461, upload-time = "2025-11-05T20:42:08.476Z" }, + { url = "https://files.pythonhosted.org/packages/17/18/162eedadb4c2282fa4c521700dbf93c9b14b8842e8354f7d72b445b8d593/rignore-0.7.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5991e46ab9b4868334c9e372ab0892b0150f3f586ff2b1e314272caeb38aaedb", size = 1139012, upload-time = "2025-11-05T21:40:29.399Z" }, { url = "https://files.pythonhosted.org/packages/9f/22/1c1a65047df864def9a047dbb40bc0b580b8289a4280e62779cd61ae21f2/rignore-0.7.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aaf938530dcc0b47c4cfa52807aa2e5bfd5ca6d57a621125fe293098692f6345", size = 1128182, upload-time = "2025-11-05T21:41:04.239Z" }, + { url = "https://files.pythonhosted.org/packages/55/e4/b3c5dfdd8d8a10741dfe7199ef45d19a0e42d0c13aa377c83bd6caf65d90/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53fb28882d2538cb2d231972146c4927a9d9455e62b209f85d634408c4103538", size = 874843, upload-time = "2025-11-05T20:41:17.687Z" }, + { url = "https://files.pythonhosted.org/packages/cc/10/d6f3750233881a2a154cefc9a6a0a9b19da526b19f7f08221b552c6f827d/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87409f7eeb1103d6b77f3472a3a0d9a5953e3ae804a55080bdcb0120ee43995b", size = 1170348, upload-time = "2025-11-05T20:41:34.21Z" }, + { url = "https://files.pythonhosted.org/packages/6e/10/ad98ca05c9771c15af734cee18114a3c280914b6e34fde9ffea2e61e88aa/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:684014e42e4341ab3ea23a203551857fcc03a7f8ae96ca3aefb824663f55db32", size = 942315, upload-time = "2025-11-05T20:41:48.508Z" }, { url = "https://files.pythonhosted.org/packages/de/00/ab5c0f872acb60d534e687e629c17e0896c62da9b389c66d3aa16b817aa8/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77356ebb01ba13f8a425c3d30fcad40e57719c0e37670d022d560884a30e4767", size = 961047, upload-time = "2025-11-05T20:42:19.403Z" }, + { url = "https://files.pythonhosted.org/packages/67/56/36d5d34210e5e7dfcd134eed8335b19e80ae940ee758f493e4f2b344dd70/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:c081f17290d8a2b96052b79207622aa635686ea39d502b976836384ede3d303c", size = 1139789, upload-time = "2025-11-05T21:40:42.119Z" }, { url = "https://files.pythonhosted.org/packages/ce/8b/a1299085b28a2f6135e30370b126e3c5055b61908622f2488ade67641479/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d8955b57e42f2a5434670d5aa7b75eaf6e74602ccd8955dddf7045379cd762fb", size = 1129444, upload-time = "2025-11-05T21:41:17.906Z" }, ] @@ -2462,9 +2504,17 @@ version = "2026.5.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459, upload-time = "2026-05-28T12:02:13.232Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121, upload-time = "2026-05-28T11:58:55.243Z" }, + { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026, upload-time = "2026-05-28T11:58:56.788Z" }, + { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865, upload-time = "2026-05-28T11:58:58.298Z" }, { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012, upload-time = "2026-05-28T11:58:59.589Z" }, + { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111, upload-time = "2026-05-28T11:59:01.104Z" }, { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053, upload-time = "2026-05-28T11:59:06.837Z" }, + { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899, upload-time = "2026-05-28T12:01:58.212Z" }, + { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618, upload-time = "2026-05-28T12:01:59.888Z" }, + { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003, upload-time = "2026-05-28T12:02:01.482Z" }, { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778, upload-time = "2026-05-28T12:02:03.197Z" }, + { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359, upload-time = "2026-05-28T12:02:04.817Z" }, { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326, upload-time = "2026-05-28T12:02:11.47Z" }, ] @@ -2474,9 +2524,19 @@ version = "0.15.18" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/74/98/1295ad5a5aa9bc85bdcdfa5d82fe7b49c61af5657df4f227637ff9de0da6/ruff-0.15.18.tar.gz", hash = "sha256:2698a964c70e8bf402dcb99c8810472d270d141e7aa8c4e13599fd52033a2f33", size = 4761437, upload-time = "2026-06-18T18:25:39.224Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/d0/686e984941269621e2be72612d5c1e461f8f7b38415a2a7d7a81c8ae6715/ruff-0.15.18-py3-none-linux_armv6l.whl", hash = "sha256:8b6850172348c8381b8b3084c5915a4393c2373b9b54cd5b5e1ea15812bc10df", size = 10887308, upload-time = "2026-06-18T18:25:03.062Z" }, { url = "https://files.pythonhosted.org/packages/ed/21/bc4123e3f5515ee99f8ce1eb93a14a0628fe4d1678663cd08f933ac16931/ruff-0.15.18-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3fccc153a85417dcd976883160cacce486997b0a0058dd18f54b8aaaac7d1ce2", size = 11281305, upload-time = "2026-06-18T18:25:30.026Z" }, { url = "https://files.pythonhosted.org/packages/51/93/4769464c25cf7ab2acb3c7dda9cad3d867eb41c59565b3e2a9d17249c90c/ruff-0.15.18-py3-none-macosx_11_0_arm64.whl", hash = "sha256:08d4c86a68f2c3ec2c9d56380a71fb4a4f65373055cbb8caabd645e9102f38d4", size = 10641215, upload-time = "2026-06-18T18:25:15.802Z" }, + { url = "https://files.pythonhosted.org/packages/6c/42/56926d17120db2c208d76bf60a1a019644dd9e91dc27f0f95c9caddb1366/ruff-0.15.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37e5108745c2c0705da916d7d4de533ddf547051ef45f62888c31bae73f66318", size = 10957224, upload-time = "2026-06-18T18:25:36.955Z" }, + { url = "https://files.pythonhosted.org/packages/22/4f/d43fab8d8189afde803103022d000a8ef9f230616d436d52a8b2b8d63b50/ruff-0.15.18-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:56949a6ce8b3abde54c0bcb22cebfe57e8771cadc84b407ae8b8eaf67ebdcd43", size = 10699024, upload-time = "2026-06-18T18:25:05.707Z" }, + { url = "https://files.pythonhosted.org/packages/63/42/1e3e4c68bd408b9768cf3e439acbe2c78245225faef253f7028a0cdb63e0/ruff-0.15.18-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01a754cd6a1b630d3f97e33eb452cf7a98040482318e870f8bc52a5a30e62657", size = 11491458, upload-time = "2026-06-18T18:25:20.275Z" }, + { url = "https://files.pythonhosted.org/packages/20/77/47a3484bea8521e14a203d98c389c5c97846675e4f02734672da4a69b52a/ruff-0.15.18-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ba7a07e03a44dbf10bb086ee06705b173625014ec99f73a7e6836a5e5590a0c", size = 12383752, upload-time = "2026-06-18T18:25:22.535Z" }, + { url = "https://files.pythonhosted.org/packages/0a/ca/054159590787023d83b658a1a1819c4c8910114e7015069340b71c0961cb/ruff-0.15.18-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a2c40a41a4cadbcf5897b548ab29dfe248b20c540961c0247d98a3973c70403", size = 11577923, upload-time = "2026-06-18T18:25:10.702Z" }, { url = "https://files.pythonhosted.org/packages/6d/ff/d353d6b7bbd73cc0ec37f4463d7540e45e894338abdd9964eee0de332708/ruff-0.15.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f0480ce690cbb6c4db6e5d08f19fce98e10ba131a8b60c1bcdac42771e3ae2d", size = 11583925, upload-time = "2026-06-18T18:25:32.391Z" }, + { url = "https://files.pythonhosted.org/packages/c1/4a/891f89b9c296ed3e5f3ece1a5629badc989d9a8fdaa30431aaf4774bc1c2/ruff-0.15.18-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2330215f1f393fa8733f55edce04fcf94c36a2c460fcde31f78cc84e4951e9b1", size = 11582834, upload-time = "2026-06-18T18:25:27.309Z" }, + { url = "https://files.pythonhosted.org/packages/32/a3/ed9e370154bf85de360b93c03026157f02d4943b2d01ff4945f4429f8e8a/ruff-0.15.18-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a6aa6a3d979e48ae617578183674bf264fbe7d0114a796a26bd678d67963c7ff", size = 10927328, upload-time = "2026-06-18T18:25:34.676Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d1/5cf5909329fedb5d39d555ee818ba5cf4638e1a301b89785d34f2905bfcb/ruff-0.15.18-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a81beadbbff2c9c245561ae3f77b16709d87f35eec650d0501679239d3449b22", size = 10693187, upload-time = "2026-06-18T18:25:08.245Z" }, + { url = "https://files.pythonhosted.org/packages/fd/44/ff6c635cf2c4f4e7b618b6640da057376baa36014695487d88aed4794268/ruff-0.15.18-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2186d9e940ae332ab293623a75b5f4fe49565f449954d50a72a046683aa6b809", size = 11208721, upload-time = "2026-06-18T18:25:41.327Z" }, { url = "https://files.pythonhosted.org/packages/88/d9/5baa2a30861adfb7022cf33c1e35b2fc18085b08c16f83eff4c7b99a5f48/ruff-0.15.18-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5c2abf140438032bc77b2284a6c9944ecd8a19e5f1c7b52b1b8e4a0a80d19a7a", size = 11678599, upload-time = "2026-06-18T18:25:13.607Z" }, ] @@ -2488,7 +2548,15 @@ sdist = { url = "https://files.pythonhosted.org/packages/ac/cc/738f3011628920e02 wheels = [ { url = "https://files.pythonhosted.org/packages/4d/b1/3f5fd73c039fc87dba3ff8b5d528bfc5a32b597fea8e7a6a4800343a17c7/safetensors-0.6.2-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:9c85ede8ec58f120bad982ec47746981e210492a6db876882aa021446af8ffba", size = 454797, upload-time = "2025-08-08T13:13:52.066Z" }, { url = "https://files.pythonhosted.org/packages/8c/c9/bb114c158540ee17907ec470d01980957fdaf87b4aa07914c24eba87b9c6/safetensors-0.6.2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d6675cf4b39c98dbd7d940598028f3742e0375a6b4d4277e76beb0c35f4b843b", size = 432206, upload-time = "2025-08-08T13:13:50.931Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8e/f70c34e47df3110e8e0bb268d90db8d4be8958a54ab0336c9be4fe86dac8/safetensors-0.6.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d2d2b3ce1e2509c68932ca03ab8f20570920cd9754b05063d4368ee52833ecd", size = 473261, upload-time = "2025-08-08T13:13:41.259Z" }, + { url = "https://files.pythonhosted.org/packages/2a/f5/be9c6a7c7ef773e1996dc214e73485286df1836dbd063e8085ee1976f9cb/safetensors-0.6.2-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:93de35a18f46b0f5a6a1f9e26d91b442094f2df02e9fd7acf224cfec4238821a", size = 485117, upload-time = "2025-08-08T13:13:43.506Z" }, + { url = "https://files.pythonhosted.org/packages/c9/55/23f2d0a2c96ed8665bf17a30ab4ce5270413f4d74b6d87dd663258b9af31/safetensors-0.6.2-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89a89b505f335640f9120fac65ddeb83e40f1fd081cb8ed88b505bdccec8d0a1", size = 616154, upload-time = "2025-08-08T13:13:45.096Z" }, + { url = "https://files.pythonhosted.org/packages/98/c6/affb0bd9ce02aa46e7acddbe087912a04d953d7a4d74b708c91b5806ef3f/safetensors-0.6.2-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4d0d0b937e04bdf2ae6f70cd3ad51328635fe0e6214aa1fc811f3b576b3bda", size = 520713, upload-time = "2025-08-08T13:13:46.25Z" }, { url = "https://files.pythonhosted.org/packages/fe/5d/5a514d7b88e310c8b146e2404e0dc161282e78634d9358975fd56dfd14be/safetensors-0.6.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8045db2c872db8f4cbe3faa0495932d89c38c899c603f21e9b6486951a5ecb8f", size = 485835, upload-time = "2025-08-08T13:13:49.373Z" }, + { url = "https://files.pythonhosted.org/packages/7a/7b/4fc3b2ba62c352b2071bea9cfbad330fadda70579f617506ae1a2f129cab/safetensors-0.6.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:81e67e8bab9878bb568cffbc5f5e655adb38d2418351dc0859ccac158f753e19", size = 521503, upload-time = "2025-08-08T13:13:47.651Z" }, + { url = "https://files.pythonhosted.org/packages/5a/50/0057e11fe1f3cead9254315a6c106a16dd4b1a19cd247f7cc6414f6b7866/safetensors-0.6.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b0e4d029ab0a0e0e4fdf142b194514695b1d7d3735503ba700cf36d0fc7136ce", size = 652256, upload-time = "2025-08-08T13:13:53.167Z" }, + { url = "https://files.pythonhosted.org/packages/e9/29/473f789e4ac242593ac1656fbece6e1ecd860bb289e635e963667807afe3/safetensors-0.6.2-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:fa48268185c52bfe8771e46325a1e21d317207bcabcb72e65c6e28e9ffeb29c7", size = 747281, upload-time = "2025-08-08T13:13:54.656Z" }, + { url = "https://files.pythonhosted.org/packages/68/52/f7324aad7f2df99e05525c84d352dc217e0fa637a4f603e9f2eedfbe2c67/safetensors-0.6.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:d83c20c12c2d2f465997c51b7ecb00e407e5f94d7dec3ea0cc11d86f60d3fde5", size = 692286, upload-time = "2025-08-08T13:13:55.884Z" }, { url = "https://files.pythonhosted.org/packages/ad/fe/cad1d9762868c7c5dc70c8620074df28ebb1a8e4c17d4c0cb031889c457e/safetensors-0.6.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d944cea65fad0ead848b6ec2c37cc0b197194bec228f8020054742190e9312ac", size = 655957, upload-time = "2025-08-08T13:13:57.029Z" }, ] @@ -2501,6 +2569,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d8/15/46afbab00733d81788b64be430ca1b93011bb9388527958e26cc31832de5/sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987", size = 1942560, upload-time = "2025-08-12T06:59:25.82Z" }, { url = "https://files.pythonhosted.org/packages/fa/79/7c01b8ef98a0567e9d84a4e7a910f8e7074fcbf398a5cd76f93f4b9316f9/sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7", size = 1325385, upload-time = "2025-08-12T06:59:27.722Z" }, { url = "https://files.pythonhosted.org/packages/bb/88/2b41e07bd24f33dcf2f18ec3b74247aa4af3526bad8907b8727ea3caba03/sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a", size = 1253319, upload-time = "2025-08-12T06:59:29.306Z" }, + { url = "https://files.pythonhosted.org/packages/a0/54/38a1af0c6210a3c6f95aa46d23d6640636d020fba7135cd0d9a84ada05a7/sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e", size = 1316162, upload-time = "2025-08-12T06:59:30.914Z" }, { url = "https://files.pythonhosted.org/packages/ef/66/fb191403ade791ad2c3c1e72fe8413e63781b08cfa3aa4c9dfc536d6e795/sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63", size = 1387785, upload-time = "2025-08-12T06:59:32.491Z" }, ] @@ -2524,6 +2593,8 @@ source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8d/48/49393a96a2eef1ab418b17475fb92b8fcfad83d099e678751b05472e69de/setproctitle-1.3.7.tar.gz", hash = "sha256:bc2bc917691c1537d5b9bca1468437176809c7e11e5694ca79a9ca12345dcb9e", size = 27002, upload-time = "2025-09-05T12:51:25.278Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/18/2e/bd03ff02432a181c1787f6fc2a678f53b7dacdd5ded69c318fe1619556e8/setproctitle-1.3.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1607b963e7b53e24ec8a2cb4e0ab3ae591d7c6bf0a160feef0551da63452b37f", size = 32191, upload-time = "2025-09-05T12:49:24.567Z" }, + { url = "https://files.pythonhosted.org/packages/a0/3c/65edc65db3fa3df400cf13b05e9d41a3c77517b4839ce873aa6b4043184f/setproctitle-1.3.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f8d961bba676e07d77665204f36cffaa260f526e7b32d07ab3df6a2c1dfb44ba", size = 34963, upload-time = "2025-09-05T12:49:27.044Z" }, + { url = "https://files.pythonhosted.org/packages/4a/18/77a765a339ddf046844cb4513353d8e9dcd8183da9cdba6e078713e6b0b2/setproctitle-1.3.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:db116850fcf7cca19492030f8d3b4b6e231278e8fe097a043957d22ce1bdf3ee", size = 33657, upload-time = "2025-09-05T12:49:30.323Z" }, { url = "https://files.pythonhosted.org/packages/6b/63/f0b6205c64d74d2a24a58644a38ec77bdbaa6afc13747e75973bf8904932/setproctitle-1.3.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:316664d8b24a5c91ee244460bdaf7a74a707adaa9e14fbe0dc0a53168bb9aba1", size = 31836, upload-time = "2025-09-05T12:49:32.309Z" }, { url = "https://files.pythonhosted.org/packages/73/02/b9eadc226195dcfa90eed37afe56b5dd6fa2f0e5220ab8b7867b8862b926/setproctitle-1.3.7-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f1704c9e041f2b1dc38f5be4552e141e1432fba3dd52c72eeffd5bc2db04dc65", size = 14286, upload-time = "2025-09-05T12:51:22.61Z" }, ] @@ -2586,22 +2657,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/67/805710444ea8cc75fbf70b920ed431a560c4bf9c57f7d5a3117213189399/sse_starlette-3.4.4-py3-none-any.whl", hash = "sha256:3f4dd50d8aed2771a091f3a83000323fc3844541c16b4fe585ae2420cc6df973", size = 16514, upload-time = "2026-05-12T17:37:15.601Z" }, ] -[[package]] -name = "sssom-pydantic" -version = "0.5.11" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "curies", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pystow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f2/23/02d4e16a12ac622231992e1fb57586ffd5e474afbcc5f84e4677ad08ed86/sssom_pydantic-0.5.11.tar.gz", hash = "sha256:69e57b2c786640bbcd8a0b662e67ff13adb659b059ed2e4f649490e112e398b7", size = 69738, upload-time = "2026-06-09T10:53:25.908Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/29/68/fd19236d12994440102a74ad9888ec9142bee508494d655470ebb64db5d6/sssom_pydantic-0.5.11-py3-none-any.whl", hash = "sha256:02851b369063ef248c6fc0e6f56f23caf24197673ef538126c5f4d2dd8fc09ba", size = 83827, upload-time = "2026-06-09T10:53:24.386Z" }, -] - [[package]] name = "starlette" version = "1.3.1" @@ -2700,7 +2755,15 @@ sdist = { url = "https://files.pythonhosted.org/packages/1c/46/fb6854cec3278fbfa wheels = [ { url = "https://files.pythonhosted.org/packages/bf/33/f4b2d94ada7ab297328fc671fed209368ddb82f965ec2224eb1892674c3a/tokenizers-0.22.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:59fdb013df17455e5f950b4b834a7b3ee2e0271e6378ccb33aa74d178b513c73", size = 3069318, upload-time = "2025-09-19T09:49:11.848Z" }, { url = "https://files.pythonhosted.org/packages/1c/58/2aa8c874d02b974990e89ff95826a4852a8b2a273c7d1b4411cdd45a4565/tokenizers-0.22.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8d4e484f7b0827021ac5f9f71d4794aaef62b979ab7608593da22b1d2e3c4edc", size = 2926478, upload-time = "2025-09-19T09:49:09.759Z" }, + { url = "https://files.pythonhosted.org/packages/1e/3b/55e64befa1e7bfea963cf4b787b2cea1011362c4193f5477047532ce127e/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d2962dd28bc67c1f205ab180578a78eef89ac60ca7ef7cbe9635a46a56422a", size = 3256994, upload-time = "2025-09-19T09:48:56.701Z" }, + { url = "https://files.pythonhosted.org/packages/71/0b/fbfecf42f67d9b7b80fde4aabb2b3110a97fac6585c9470b5bff103a80cb/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:38201f15cdb1f8a6843e6563e6e79f4abd053394992b9bbdf5213ea3469b4ae7", size = 3153141, upload-time = "2025-09-19T09:48:59.749Z" }, + { url = "https://files.pythonhosted.org/packages/17/a9/b38f4e74e0817af8f8ef925507c63c6ae8171e3c4cb2d5d4624bf58fca69/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1cbe5454c9a15df1b3443c726063d930c16f047a3cc724b9e6e1a91140e5a21", size = 3508049, upload-time = "2025-09-19T09:49:05.868Z" }, + { url = "https://files.pythonhosted.org/packages/d2/48/dd2b3dac46bb9134a88e35d72e1aa4869579eacc1a27238f1577270773ff/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7d094ae6312d69cc2a872b54b91b309f4f6fbce871ef28eb27b52a98e4d0214", size = 3710730, upload-time = "2025-09-19T09:49:01.832Z" }, + { url = "https://files.pythonhosted.org/packages/93/0e/ccabc8d16ae4ba84a55d41345207c1e2ea88784651a5a487547d80851398/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afd7594a56656ace95cdd6df4cca2e4059d294c5cfb1679c57824b605556cb2f", size = 3412560, upload-time = "2025-09-19T09:49:03.867Z" }, { url = "https://files.pythonhosted.org/packages/d0/c6/dc3a0db5a6766416c32c034286d7c2d406da1f498e4de04ab1b8959edd00/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ef6063d7a84994129732b47e7915e8710f27f99f3a3260b8a38fc7ccd083f4", size = 3250221, upload-time = "2025-09-19T09:49:07.664Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a6/2c8486eef79671601ff57b093889a345dd3d576713ef047776015dc66de7/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ba0a64f450b9ef412c98f6bcd2a50c6df6e2443b560024a09fa6a03189726879", size = 9345569, upload-time = "2025-09-19T09:49:14.214Z" }, + { url = "https://files.pythonhosted.org/packages/6b/16/32ce667f14c35537f5f605fe9bea3e415ea1b0a646389d2295ec348d5657/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:331d6d149fa9c7d632cde4490fb8bbb12337fa3a0232e77892be656464f4b446", size = 9271599, upload-time = "2025-09-19T09:49:16.639Z" }, + { url = "https://files.pythonhosted.org/packages/51/7c/a5f7898a3f6baa3fc2685c705e04c98c1094c523051c805cdd9306b8f87e/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:607989f2ea68a46cb1dfbaf3e3aabdf3f21d8748312dbeb6263d1b3b66c5010a", size = 9533862, upload-time = "2025-09-19T09:49:19.146Z" }, { url = "https://files.pythonhosted.org/packages/36/65/7e75caea90bc73c1dd8d40438adf1a7bc26af3b8d0a6705ea190462506e1/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a0f307d490295717726598ef6fa4f24af9d484809223bbc253b201c740a06390", size = 9681250, upload-time = "2025-09-19T09:49:21.501Z" }, ] @@ -2735,7 +2798,9 @@ sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841 wheels = [ { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, ] @@ -2771,6 +2836,7 @@ dependencies = [ ] wheels = [ { url = "https://files.pythonhosted.org/packages/ae/0d/98b410492609e34a155fa8b121b55c7dca229f39636851c3a9ec20edea21/torch-2.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7b6a60d48062809f58595509c524b88e6ddec3ebe25833d6462eeab81e5f2ce4", size = 80529712, upload-time = "2026-03-23T18:12:02.608Z" }, + { url = "https://files.pythonhosted.org/packages/84/03/acea680005f098f79fd70c1d9d5ccc0cb4296ec2af539a0450108232fc0c/torch-2.11.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d91aac77f24082809d2c5a93f52a5f085032740a1ebc9252a7b052ef5a4fddc6", size = 419718178, upload-time = "2026-03-23T18:10:46.675Z" }, { url = "https://files.pythonhosted.org/packages/8c/8b/d7be22fbec9ffee6cff31a39f8750d4b3a65d349a286cf4aec74c2375662/torch-2.11.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:7aa2f9bbc6d4595ba72138026b2074be1233186150e9292865e04b7a63b8c67a", size = 530604548, upload-time = "2026-03-23T18:10:03.569Z" }, ] @@ -2842,7 +2908,6 @@ name = "trialmatchai" version = "0.2.0" source = { editable = "." } dependencies = [ - { name = "bioregistry", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "lancedb", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, @@ -2850,12 +2915,8 @@ dependencies = [ { name = "pyarrow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "pydantic", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "python-dateutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "python-dotenv", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "rapidfuzz", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "regex", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "rich", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "tenacity", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] @@ -2892,7 +2953,6 @@ dev = [ [package.metadata] requires-dist = [ { name = "accelerate", marker = "extra == 'llm'", specifier = "==1.8.1" }, - { name = "bioregistry", specifier = "==0.13.62" }, { name = "bitsandbytes", marker = "(sys_platform == 'linux' and extra == 'gpu') or (sys_platform == 'win32' and extra == 'gpu')", specifier = "==0.49.2" }, { name = "einops", marker = "extra == 'llm'", specifier = "==0.8.0" }, { name = "gliner", marker = "extra == 'entity'", specifier = "==0.2.27" }, @@ -2904,12 +2964,8 @@ requires-dist = [ { name = "pyarrow", specifier = ">=24.0.0,<25" }, { name = "pydantic", specifier = ">=2.12.0,<3" }, { name = "python-dateutil", specifier = "==2.9.0.post0" }, - { name = "python-dotenv", specifier = "==1.2.2" }, { name = "pyyaml", specifier = "==6.0.2" }, - { name = "rapidfuzz", specifier = "==3.14.5" }, - { name = "regex", specifier = ">=2025.10.22,<2027" }, { name = "requests", specifier = "==2.34.2" }, - { name = "rich", specifier = "==13.9.4" }, { name = "safetensors", marker = "extra == 'llm'", specifier = ">=0.6.2,<0.7" }, { name = "sentencepiece", marker = "extra == 'llm'", specifier = "==0.2.1" }, { name = "tenacity", specifier = "==9.0.0" }, @@ -3115,7 +3171,11 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/cd/41/5e1a4bb12aac5f1493fa1bdc11154eca3b258ca4eba65d39c473fe19d8e9/watchfiles-1.2.0.tar.gz", hash = "sha256:c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838", size = 108252, upload-time = "2026-05-18T04:32:04.251Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/6a/cc81fbe7ee42f2f22e661a6e12def7807e01b14b2f39e0ff83fd373fd307/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:772b80df316480d894a0e3165fdd19cf77f5d17f9a787f94029465ad0e3529d1", size = 461379, upload-time = "2026-05-18T04:31:29.292Z" }, + { url = "https://files.pythonhosted.org/packages/45/7d/f60a2b19807b21fe8281f3a8da4f59eef0d5f96825ac4680ba2d4f2ebf91/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d516b3283a758e087841aedb8031549fb41ced08f3db10aa6d2bf32dc042525b", size = 575255, upload-time = "2026-05-18T04:30:40.568Z" }, + { url = "https://files.pythonhosted.org/packages/bd/49/77f5b5e6efbcd57482f74948ebb1b97e5c0046d6b61475042d830c84b3ff/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53b2290c92e0506d102cd448fbc610d87079553f86caa39d67440856a8b8bba5", size = 467052, upload-time = "2026-05-18T04:31:17.942Z" }, { url = "https://files.pythonhosted.org/packages/ee/5a/73e2959af1b97fd5d556f9a8bdba017be23ceeef731869d5eaa0a753d5a3/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a711b51aec4370d0dcda5b6c09463206f133a5759341d7744b953a7b62e1100e", size = 456858, upload-time = "2026-05-18T04:30:30.182Z" }, + { url = "https://files.pythonhosted.org/packages/50/57/1bc8c27fad7e6c19bddee15d276dbb6ab72480ec01c127afff1673aee417/watchfiles-1.2.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:e2ca07fa7d89195ec0865d3d285666286740bfa83d83e5cee204043a31ecc165", size = 467579, upload-time = "2026-05-18T04:32:15.897Z" }, { url = "https://files.pythonhosted.org/packages/30/c2/d8c84a882ab39bbefcc4915ab3e91830b7a7e990c5570b0b69075aba3faf/watchfiles-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d191c054d0715c3c95c99df9b8dbf6fd096d8c1e021e8f212e1bd8bc444ccb5", size = 660713, upload-time = "2026-05-18T04:31:24.62Z" }, { url = "https://files.pythonhosted.org/packages/e9/f9/45d021e4a5cc7b9dd567f7cbb06d3b75f751a690063fb6cc7ec60f4e46b7/watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a88fc94e647bc4eec523f1caa540258eb71d14278b9daf72fa1e2658a98df0f0", size = 457771, upload-time = "2026-05-18T04:30:56.331Z" }, ] @@ -3160,7 +3220,15 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/07/b3278e82d8bc41485bcf6d856cd0433262593de615b1d3dc43bd3f5bead4/yarl-1.24.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:17076578bce0049a5ce57d14ad1bded391b68a3b213e9b81b0097b090244999a", size = 97281, upload-time = "2026-05-19T21:28:27.352Z" }, + { url = "https://files.pythonhosted.org/packages/17/5b/4cee6e7c92e487bebe7afc797da0aa54a248ab4e776a68fe369ec29665a5/yarl-1.24.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:50713f1d4d6be6375bb178bb43d140ee1acb8abe589cd723320b7925a275be1e", size = 114020, upload-time = "2026-05-19T21:28:29.458Z" }, + { url = "https://files.pythonhosted.org/packages/5c/82/111076571545a7d4f9cca3fbd5c6f40615af58642be09f12328f48022468/yarl-1.24.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:34263e2fa8fb5bb63a0d97706cda38edbad62fddb58c7f12d6acbc092812aa50", size = 111450, upload-time = "2026-05-19T21:28:31.262Z" }, { url = "https://files.pythonhosted.org/packages/b6/ec/08f671f69a444d704aeecebf92af659b67b97a869942411d0a578b08c334/yarl-1.24.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49016d82f032b1bd1e10b01078a7d29ae71bf468eeae0ea22df8bab691e60003", size = 106384, upload-time = "2026-05-19T21:28:32.856Z" }, + { url = "https://files.pythonhosted.org/packages/e5/86/ce41e7a7a199340b2330d52b60f25c4074b6636dd0e60b1a80d31a9db042/yarl-1.24.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3f6d2c216318f8f32038ca3f72501ba08536f0fd18a36e858836b121b2deed9f", size = 106153, upload-time = "2026-05-19T21:28:35.222Z" }, + { url = "https://files.pythonhosted.org/packages/47/9b/b57afb22b386ae87ac9940f09878b98d8c333f89113e6fc96fcf4ca9eb64/yarl-1.24.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5d699376c4ca3cba49bbfae3a05b5b70ded572937171ce1e0b8d87118e2ba294", size = 99057, upload-time = "2026-05-19T21:28:38.386Z" }, + { url = "https://files.pythonhosted.org/packages/a3/4f/06348c27c8389256c313e8a57d796808fc0264c915dd5e7cfd3c0e314dc7/yarl-1.24.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a1cab588b4fa14bea2e55ebea27478adfb05372f47573738e1acc4a36c0b05d2", size = 113502, upload-time = "2026-05-19T21:28:40.091Z" }, + { url = "https://files.pythonhosted.org/packages/5f/1c/284f307b298e4a17b7943b07d9d7ecc4151537f8d137ba51f3bb6c31ca20/yarl-1.24.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:ec87ccc31bd21db7ad009d8572c127c1000f268517618a4cc09adba3c2a7f21c", size = 105253, upload-time = "2026-05-19T21:28:41.987Z" }, + { url = "https://files.pythonhosted.org/packages/c8/bf/0de123bec8619e45c80cbded9085f61b5b4a9eddb8abe6d25d28ee1ec866/yarl-1.24.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d1dd47a22843b212baa8d74f37796815d43bd046b42a0f41e9da433386c3136b", size = 111345, upload-time = "2026-05-19T21:28:43.93Z" }, { url = "https://files.pythonhosted.org/packages/90/af/0248eb065e51129d2a9b2436cd1b5c772c19a6b04e5b6a186955671e3319/yarl-1.24.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7b54b9c67c2b06bd7b9a77253d242124b9c95d2c02def5a1144001ee547dd9d5", size = 106558, upload-time = "2026-05-19T21:28:45.806Z" }, { url = "https://files.pythonhosted.org/packages/fd/4d/4b880086bd0d3e034d25647be1d830afc3e3f610e98c4ab3490af6b1b6d5/yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9", size = 53576, upload-time = "2026-05-19T21:31:03.909Z" }, ] From 411dc5b9aa93070c4fabdeb6d311126c8385a621 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 10:42:32 +0200 Subject: [PATCH 21/64] feat: fine-tuning integration for NER, reranker, and CoT models Lets users train their own models and plug them straight into the pipeline, instead of only relying on the vanilla checkpoints. The integration path already existed via config (entity_extraction.model_name, model.reranker_adapter_path, model.cot_adapter_path); this adds the missing training side, modernized for the current architecture (GLiNER for NER, LoRA for reranker/CoT). New trialmatchai.finetuning package (heavy deps imported lazily): - config.FinetuneConfig: shared LoRA SFT hyper-parameters. - data: JSONL loaders + prompt builders that REUSE the runtime prompts (LLMReranker.create_messages, chat templates) so train == inference; plus a char-span -> GLiNER token-span converter. - _sft.run_sft: LoRA SFT loop with prompt-masked labels (loss on completion). - cot/reranker/ner: thin task fine-tuners producing a LoRA adapter (cot, reranker) or a GLiNER checkpoint (ner). - cli: `trialmatchai-finetune {cot,reranker,ner}` console command. pyproject: new `finetune` optional extra (torch/transformers/peft/accelerate/ datasets/gliner[2]/bitsandbytes) + the console entry point. LLMReranker .create_messages is now a @staticmethod so finetuning reuses it without loading a model. CI imports the finetuning modules and smoke-tests the new CLI. Tests cover data conversion, prompt reuse, and CLI parsing (CPU-only). Co-Authored-By: Claude Opus 4.8 --- .github/workflows/ci.yml | 4 + pyproject.toml | 11 ++ src/trialmatchai/finetuning/__init__.py | 17 +++ src/trialmatchai/finetuning/_sft.py | 139 ++++++++++++++++++ src/trialmatchai/finetuning/cli.py | 123 ++++++++++++++++ src/trialmatchai/finetuning/config.py | 77 ++++++++++ src/trialmatchai/finetuning/cot.py | 17 +++ src/trialmatchai/finetuning/data.py | 116 +++++++++++++++ src/trialmatchai/finetuning/ner.py | 90 ++++++++++++ src/trialmatchai/finetuning/reranker.py | 21 +++ src/trialmatchai/models/llm/llm_reranker.py | 3 +- tests/test_finetuning.py | 73 ++++++++++ uv.lock | 148 ++++++++++++++++++-- 13 files changed, 824 insertions(+), 15 deletions(-) create mode 100644 src/trialmatchai/finetuning/__init__.py create mode 100644 src/trialmatchai/finetuning/_sft.py create mode 100644 src/trialmatchai/finetuning/cli.py create mode 100644 src/trialmatchai/finetuning/config.py create mode 100644 src/trialmatchai/finetuning/cot.py create mode 100644 src/trialmatchai/finetuning/data.py create mode 100644 src/trialmatchai/finetuning/ner.py create mode 100644 src/trialmatchai/finetuning/reranker.py create mode 100644 tests/test_finetuning.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2e59511d..51c446db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -62,6 +62,7 @@ jobs: uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-update-registry --help uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-import-patient --help uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-run --help + uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-finetune --help - name: Secret scan run: uv run python scripts/scan_secrets.py @@ -110,6 +111,9 @@ jobs: "trialmatchai.models.llm.llm_reranker", "trialmatchai.matching.eligibility_reasoning", "trialmatchai.matching.eligibility_reasoning_vllm", + "trialmatchai.finetuning.cot", + "trialmatchai.finetuning.reranker", + "trialmatchai.finetuning.ner", ] for name in modules: importlib.import_module(name) diff --git a/pyproject.toml b/pyproject.toml index 04dde31d..fa7d20b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,8 +44,19 @@ entity = [ "gliner==0.2.27", "gliner2>=1.3.1,<2", ] +finetune = [ + "torch==2.11.0", + "transformers==5.6.2", + "accelerate==1.8.1", + "peft==0.15.2", + "datasets>=3.0,<5", + "gliner==0.2.27", + "gliner2>=1.3.1,<2", + "bitsandbytes==0.49.2; sys_platform == 'linux' or sys_platform == 'win32'", +] [project.scripts] +trialmatchai-finetune = "trialmatchai.finetuning.cli:main" trialmatchai = "trialmatchai.cli.main:main" trialmatchai-healthcheck = "trialmatchai.cli.healthcheck:main" trialmatchai-run = "trialmatchai.cli.run:main" diff --git a/src/trialmatchai/finetuning/__init__.py b/src/trialmatchai/finetuning/__init__.py new file mode 100644 index 00000000..4faa4f07 --- /dev/null +++ b/src/trialmatchai/finetuning/__init__.py @@ -0,0 +1,17 @@ +"""Fine-tuning utilities for TrialMatchAI's local models. + +Lets users train their own NER (GLiNER), reranker (LoRA), and CoT eligibility +(LoRA) models and plug them straight back into the pipeline via config: + +- NER: entity_extraction.model_name -> a fine-tuned GLiNER checkpoint +- reranker: model.reranker_adapter_path -> a LoRA adapter +- CoT: model.cot_adapter_path -> a LoRA adapter + +All heavy training dependencies are imported lazily, so this package imports +cleanly without the ``finetune`` extra installed. Install it with +``uv sync --extra finetune``. +""" + +from trialmatchai.finetuning.config import FinetuneConfig + +__all__ = ["FinetuneConfig"] diff --git a/src/trialmatchai/finetuning/_sft.py b/src/trialmatchai/finetuning/_sft.py new file mode 100644 index 00000000..355be793 --- /dev/null +++ b/src/trialmatchai/finetuning/_sft.py @@ -0,0 +1,139 @@ +"""Shared LoRA supervised fine-tuning loop for causal LMs. + +Builds (input_ids, labels) from chat messages with the prompt masked to -100 so +loss is computed only on the assistant completion, then trains a LoRA adapter +and saves it. Heavy dependencies are imported lazily. +""" + +from __future__ import annotations + +from typing import Dict, List + +from trialmatchai.finetuning.config import FinetuneConfig +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def _load_train_deps(): + try: + import torch + from datasets import Dataset + from peft import LoraConfig, TaskType, get_peft_model + from transformers import ( + AutoModelForCausalLM, + AutoTokenizer, + BitsAndBytesConfig, + DataCollatorForSeq2Seq, + Trainer, + ) + except Exception as exc: # pragma: no cover - exercised only without the extra + raise RuntimeError( + "Fine-tuning requires the optional `finetune` dependencies " + "(`uv sync --extra finetune`)." + ) from exc + return { + "torch": torch, + "Dataset": Dataset, + "LoraConfig": LoraConfig, + "TaskType": TaskType, + "get_peft_model": get_peft_model, + "AutoModelForCausalLM": AutoModelForCausalLM, + "AutoTokenizer": AutoTokenizer, + "BitsAndBytesConfig": BitsAndBytesConfig, + "DataCollatorForSeq2Seq": DataCollatorForSeq2Seq, + "Trainer": Trainer, + } + + +def _build_tokenizer(deps, config: FinetuneConfig): + tokenizer = deps["AutoTokenizer"].from_pretrained( + config.base_model, + trust_remote_code=config.trust_remote_code, + token=config.hf_token, + ) + if tokenizer.pad_token is None: + tokenizer.pad_token = tokenizer.eos_token + return tokenizer + + +def _encode_example( + tokenizer, messages: List[Dict[str, str]], max_seq_length: int +) -> Dict[str, list]: + """Tokenize a chat example, masking the prompt so only the completion trains.""" + full = tokenizer.apply_chat_template( + messages, tokenize=False, add_generation_prompt=False + ) + prompt = tokenizer.apply_chat_template( + messages[:-1], tokenize=False, add_generation_prompt=True + ) + full_ids = tokenizer(full, truncation=True, max_length=max_seq_length)["input_ids"] + prompt_ids = tokenizer( + prompt, truncation=True, max_length=max_seq_length + )["input_ids"] + prompt_len = min(len(prompt_ids), len(full_ids)) + labels = [-100] * prompt_len + full_ids[prompt_len:] + return {"input_ids": full_ids, "attention_mask": [1] * len(full_ids), "labels": labels} + + +def run_sft(config: FinetuneConfig, message_lists: List[List[Dict[str, str]]]) -> str: + """Run LoRA SFT over a list of chat-message examples; returns the adapter dir.""" + if not message_lists: + raise ValueError("No training examples provided.") + deps = _load_train_deps() + torch = deps["torch"] + + tokenizer = _build_tokenizer(deps, config) + + compute_dtype = torch.bfloat16 if config.bf16 else torch.float16 + quant_config = None + if config.load_in_4bit: + quant_config = deps["BitsAndBytesConfig"]( + load_in_4bit=True, + bnb_4bit_use_double_quant=True, + bnb_4bit_quant_type="nf4", + bnb_4bit_compute_dtype=compute_dtype, + ) + + model = deps["AutoModelForCausalLM"].from_pretrained( + config.base_model, + torch_dtype=compute_dtype, + quantization_config=quant_config, + trust_remote_code=config.trust_remote_code, + token=config.hf_token, + ) + model.config.use_cache = False + + peft_config = deps["LoraConfig"]( + task_type=deps["TaskType"].CAUSAL_LM, + inference_mode=False, + r=config.lora_rank, + lora_alpha=config.lora_alpha, + lora_dropout=config.lora_dropout, + target_modules=config.target_modules, + ) + model = deps["get_peft_model"](model, peft_config) + model.print_trainable_parameters() + + encoded = [ + _encode_example(tokenizer, messages, config.max_seq_length) + for messages in message_lists + ] + dataset = deps["Dataset"].from_list(encoded) + + collator = deps["DataCollatorForSeq2Seq"]( + tokenizer, padding=True, label_pad_token_id=-100 + ) + trainer = deps["Trainer"]( + model=model, + args=config.to_training_arguments(), + train_dataset=dataset, + data_collator=collator, + ) + + logger.info("Starting LoRA SFT on %d examples...", len(encoded)) + trainer.train() + model.save_pretrained(config.output_dir) + tokenizer.save_pretrained(config.output_dir) + logger.info("Saved LoRA adapter to %s", config.output_dir) + return config.output_dir diff --git a/src/trialmatchai/finetuning/cli.py b/src/trialmatchai/finetuning/cli.py new file mode 100644 index 00000000..3fea874c --- /dev/null +++ b/src/trialmatchai/finetuning/cli.py @@ -0,0 +1,123 @@ +"""``trialmatchai-finetune`` — train custom NER / reranker / CoT models. + +Examples: + trialmatchai-finetune cot --base-model microsoft/phi-4 \ + --train-data data/cot.jsonl --output-dir models/cot-adapter + trialmatchai-finetune reranker --base-model google/gemma-2-2b-it \ + --train-data data/reranker.jsonl --output-dir models/reranker-adapter + trialmatchai-finetune ner --base-model fastino/gliner2-base \ + --train-data data/ner.jsonl --output-dir models/ner + +Plug the result back into config: entity_extraction.model_name (NER), +model.reranker_adapter_path (reranker), model.cot_adapter_path (CoT). +""" + +from __future__ import annotations + +import argparse +import sys +from typing import Optional, Sequence + +from trialmatchai.finetuning.config import FinetuneConfig + + +def _add_common_lora_args(parser: argparse.ArgumentParser) -> None: + parser.add_argument("--base-model", required=True) + parser.add_argument("--train-data", required=True) + parser.add_argument("--output-dir", required=True) + parser.add_argument("--eval-data", default=None) + parser.add_argument("--epochs", type=float, default=2.0) + parser.add_argument("--learning-rate", type=float, default=5e-5) + parser.add_argument("--batch-size", type=int, default=2) + parser.add_argument("--grad-accum", type=int, default=16) + parser.add_argument("--max-seq-length", type=int, default=2048) + parser.add_argument("--lora-rank", type=int, default=32) + parser.add_argument("--lora-alpha", type=int, default=64) + parser.add_argument("--lora-dropout", type=float, default=0.1) + parser.add_argument("--max-examples", type=int, default=None) + parser.add_argument("--no-4bit", action="store_true", help="Disable 4-bit loading") + parser.add_argument("--fp16", action="store_true", help="Use fp16 instead of bf16") + parser.add_argument("--trust-remote-code", action="store_true") + parser.add_argument("--hf-token", default=None) + + +def _lora_config_from_args(args: argparse.Namespace) -> FinetuneConfig: + return FinetuneConfig( + base_model=args.base_model, + train_data=args.train_data, + output_dir=args.output_dir, + eval_data=args.eval_data, + epochs=args.epochs, + learning_rate=args.learning_rate, + per_device_batch_size=args.batch_size, + gradient_accumulation_steps=args.grad_accum, + max_seq_length=args.max_seq_length, + lora_rank=args.lora_rank, + lora_alpha=args.lora_alpha, + lora_dropout=args.lora_dropout, + max_examples=args.max_examples, + load_in_4bit=not args.no_4bit, + bf16=not args.fp16, + trust_remote_code=args.trust_remote_code, + hf_token=args.hf_token, + ) + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + prog="trialmatchai-finetune", + description="Fine-tune TrialMatchAI's NER, reranker, or CoT models.", + ) + sub = parser.add_subparsers(dest="component", required=True) + + cot = sub.add_parser("cot", help="LoRA SFT for the CoT eligibility model") + _add_common_lora_args(cot) + + reranker = sub.add_parser("reranker", help="LoRA SFT for the reranker (Yes/No)") + _add_common_lora_args(reranker) + + ner = sub.add_parser("ner", help="Fine-tune the GLiNER NER model") + ner.add_argument("--base-model", required=True) + ner.add_argument("--train-data", required=True) + ner.add_argument("--output-dir", required=True) + ner.add_argument("--eval-data", default=None) + ner.add_argument("--epochs", type=float, default=3.0) + ner.add_argument("--learning-rate", type=float, default=5e-6) + ner.add_argument("--batch-size", type=int, default=8) + ner.add_argument("--max-examples", type=int, default=None) + return parser + + +def main(argv: Optional[Sequence[str]] = None) -> int: + args = build_parser().parse_args(argv) + + if args.component == "cot": + from trialmatchai.finetuning.cot import finetune_cot + + finetune_cot(_lora_config_from_args(args)) + elif args.component == "reranker": + from trialmatchai.finetuning.reranker import finetune_reranker + + finetune_reranker(_lora_config_from_args(args)) + elif args.component == "ner": + from trialmatchai.finetuning.ner import NERFinetuneConfig, finetune_ner + + finetune_ner( + NERFinetuneConfig( + base_model=args.base_model, + train_data=args.train_data, + output_dir=args.output_dir, + eval_data=args.eval_data, + epochs=args.epochs, + learning_rate=args.learning_rate, + batch_size=args.batch_size, + max_examples=args.max_examples, + ) + ) + else: # pragma: no cover - argparse enforces choices + return 2 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/finetuning/config.py b/src/trialmatchai/finetuning/config.py new file mode 100644 index 00000000..01042db5 --- /dev/null +++ b/src/trialmatchai/finetuning/config.py @@ -0,0 +1,77 @@ +"""Shared configuration for the LoRA fine-tuners (CoT and reranker).""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from typing import List, Optional + + +@dataclass +class FinetuneConfig: + """Hyper-parameters for LoRA supervised fine-tuning of a causal LM. + + Sensible defaults are tuned for a single consumer GPU; override per run. + """ + + base_model: str + train_data: str + output_dir: str + eval_data: Optional[str] = None + + # Optimization + epochs: float = 2.0 + learning_rate: float = 5e-5 + per_device_batch_size: int = 2 + gradient_accumulation_steps: int = 16 + warmup_ratio: float = 0.1 + max_seq_length: int = 2048 + weight_decay: float = 0.0 + seed: int = 42 + + # LoRA + lora_rank: int = 32 + lora_alpha: int = 64 + lora_dropout: float = 0.1 + target_modules: List[str] = field( + default_factory=lambda: [ + "q_proj", + "k_proj", + "v_proj", + "o_proj", + "gate_proj", + "up_proj", + "down_proj", + ] + ) + + # Runtime + load_in_4bit: bool = True + bf16: bool = True + trust_remote_code: bool = False + logging_steps: int = 10 + save_steps: int = 500 + save_total_limit: int = 3 + max_examples: Optional[int] = None + hf_token: Optional[str] = None + + def to_training_arguments(self): + """Build transformers.TrainingArguments (imported lazily).""" + from transformers import TrainingArguments + + return TrainingArguments( + output_dir=self.output_dir, + num_train_epochs=self.epochs, + learning_rate=self.learning_rate, + per_device_train_batch_size=self.per_device_batch_size, + gradient_accumulation_steps=self.gradient_accumulation_steps, + warmup_ratio=self.warmup_ratio, + weight_decay=self.weight_decay, + logging_steps=self.logging_steps, + save_steps=self.save_steps, + save_total_limit=self.save_total_limit, + bf16=self.bf16, + fp16=not self.bf16, + seed=self.seed, + report_to=[], + ddp_find_unused_parameters=False, + ) diff --git a/src/trialmatchai/finetuning/cot.py b/src/trialmatchai/finetuning/cot.py new file mode 100644 index 00000000..3d3b30ac --- /dev/null +++ b/src/trialmatchai/finetuning/cot.py @@ -0,0 +1,17 @@ +"""Fine-tune the chain-of-thought eligibility model (LoRA SFT). + +Produces a LoRA adapter that plugs into the pipeline via +``model.cot_adapter_path`` (HuggingFace backend) or vLLM's LoRARequest. +""" + +from __future__ import annotations + +from trialmatchai.finetuning._sft import run_sft +from trialmatchai.finetuning.config import FinetuneConfig +from trialmatchai.finetuning.data import cot_row_to_messages, read_jsonl + + +def finetune_cot(config: FinetuneConfig) -> str: + rows = read_jsonl(config.train_data, config.max_examples) + message_lists = [cot_row_to_messages(row) for row in rows] + return run_sft(config, message_lists) diff --git a/src/trialmatchai/finetuning/data.py b/src/trialmatchai/finetuning/data.py new file mode 100644 index 00000000..7e22bc62 --- /dev/null +++ b/src/trialmatchai/finetuning/data.py @@ -0,0 +1,116 @@ +"""Dataset loading and prompt formatting for fine-tuning. + +Training prompts reuse the exact runtime prompt builders so a fine-tuned model +sees the same format at train and inference time. + +Input formats (JSONL, one object per line): +- CoT: {"messages": [{"role","content"}, ...]} + or {"instruction": str, "input": str, "output": str} +- Reranker: {"patient_text": str, "criterion": str, "label": "Yes"|"No"} +- NER: {"text": str, "ner": [[start_char, end_char, "label"], ...]} + or GLiNER-native {"tokenized_text": [...], "ner": [[s_tok, e_tok, label]]} +""" + +from __future__ import annotations + +import json +import re +from typing import Any, Dict, Iterator, List, Optional + + +def read_jsonl(path: str, max_examples: Optional[int] = None) -> List[Dict[str, Any]]: + rows: List[Dict[str, Any]] = [] + with open(path, "r", encoding="utf-8") as handle: + for line in handle: + line = line.strip() + if not line: + continue + rows.append(json.loads(line)) + if max_examples is not None and len(rows) >= max_examples: + break + return rows + + +# --------------------------------------------------------------------------- CoT + + +def cot_row_to_messages(row: Dict[str, Any]) -> List[Dict[str, str]]: + """Normalize a CoT training row to a chat-message list.""" + if "messages" in row: + return list(row["messages"]) + instruction = (row.get("instruction") or "").strip() + user = (row.get("input") or row.get("question") or "").strip() + output = row.get("output") or row.get("answer") or "" + messages: List[Dict[str, str]] = [] + if instruction: + messages.append({"role": "system", "content": instruction}) + messages.append({"role": "user", "content": user}) + messages.append({"role": "assistant", "content": output}) + return messages + + +# ----------------------------------------------------------------------- Reranker + + +def reranker_row_to_messages(row: Dict[str, Any]) -> tuple[List[Dict[str, str]], str]: + """Build the reranker prompt (matching LLMReranker.create_messages) + target.""" + from trialmatchai.models.llm.llm_reranker import LLMReranker + + patient_text = str(row.get("patient_text", "")).strip() + criterion = str(row.get("criterion", row.get("trial_text", ""))).strip() + label = str(row.get("label", "")).strip() or "No" + if label not in {"Yes", "No"}: + label = "Yes" if label.lower() in {"1", "true", "yes", "relevant"} else "No" + messages = LLMReranker.create_messages(patient_text, criterion) + return messages, label + + +# --------------------------------------------------------------------------- NER + +_WORD_RE = re.compile(r"\w+|[^\w\s]") + + +def _tokenize_with_spans(text: str) -> tuple[List[str], List[tuple[int, int]]]: + tokens: List[str] = [] + spans: List[tuple[int, int]] = [] + for match in _WORD_RE.finditer(text): + tokens.append(match.group()) + spans.append((match.start(), match.end())) + return tokens, spans + + +def ner_row_to_gliner(row: Dict[str, Any]) -> Dict[str, Any]: + """Normalize an NER row to GLiNER's training format. + + Accepts GLiNER-native rows unchanged; converts char-span rows by mapping + character offsets onto whitespace/punctuation tokens. + """ + if "tokenized_text" in row: + return {"tokenized_text": row["tokenized_text"], "ner": row.get("ner", [])} + + text = str(row.get("text", "")) + raw_spans = row.get("ner") + if raw_spans is None: + raw_spans = [ + [ent["start"], ent["end"], ent["label"]] for ent in row.get("entities", []) + ] + + tokens, spans = _tokenize_with_spans(text) + ner: List[List[Any]] = [] + for start_char, end_char, label in raw_spans: + start_tok = next( + (i for i, (s, e) in enumerate(spans) if s <= start_char < e), None + ) + end_tok = next( + (i for i, (s, e) in enumerate(spans) if s < end_char <= e), None + ) + if start_tok is not None and end_tok is not None and end_tok >= start_tok: + ner.append([start_tok, end_tok, label]) + return {"tokenized_text": tokens, "ner": ner} + + +def iter_gliner_examples( + path: str, max_examples: Optional[int] = None +) -> Iterator[Dict[str, Any]]: + for row in read_jsonl(path, max_examples): + yield ner_row_to_gliner(row) diff --git a/src/trialmatchai/finetuning/ner.py b/src/trialmatchai/finetuning/ner.py new file mode 100644 index 00000000..b2fdfdf6 --- /dev/null +++ b/src/trialmatchai/finetuning/ner.py @@ -0,0 +1,90 @@ +"""Fine-tune the biomedical NER model (GLiNER). + +Produces a GLiNER checkpoint that plugs into the pipeline via +``entity_extraction.model_name`` (and backend "gliner"/"gliner2"). +""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from typing import List, Optional + +from trialmatchai.finetuning.data import iter_gliner_examples +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +@dataclass +class NERFinetuneConfig: + base_model: str + train_data: str + output_dir: str + eval_data: Optional[str] = None + epochs: float = 3.0 + learning_rate: float = 5e-6 + batch_size: int = 8 + weight_decay: float = 0.01 + warmup_ratio: float = 0.1 + max_examples: Optional[int] = None + labels: List[str] = field(default_factory=list) + seed: int = 42 + + +def finetune_ner(config: NERFinetuneConfig) -> str: + """Fine-tune a GLiNER model on span-annotated data and save it.""" + try: + from gliner import GLiNER + from gliner.data_processing.collator import DataCollator + from gliner.training import Trainer, TrainingArguments + except Exception as exc: # pragma: no cover - exercised only without the extra + raise RuntimeError( + "GLiNER fine-tuning requires the optional `finetune` dependencies " + "(`uv sync --extra finetune`). If your installed gliner exposes a " + "different training API, adapt finetuning/ner.py to it." + ) from exc + + data = list(iter_gliner_examples(config.train_data, config.max_examples)) + if not data: + raise ValueError("No training examples provided.") + eval_data = ( + list(iter_gliner_examples(config.eval_data)) if config.eval_data else None + ) + + model = GLiNER.from_pretrained(config.base_model) + model.set_sampling_params( + max_types=25, shuffle_types=True, random_drop=True, max_neg_type_ratio=1 + ) + + collator = DataCollator( + model.config, data_processor=model.data_processor, prepare_labels=True + ) + + args = TrainingArguments( + output_dir=config.output_dir, + num_train_epochs=config.epochs, + learning_rate=config.learning_rate, + per_device_train_batch_size=config.batch_size, + per_device_eval_batch_size=config.batch_size, + weight_decay=config.weight_decay, + warmup_ratio=config.warmup_ratio, + seed=config.seed, + report_to=[], + evaluation_strategy="epoch" if eval_data else "no", + save_strategy="epoch", + ) + + trainer = Trainer( + model=model, + args=args, + train_dataset=data, + eval_dataset=eval_data, + data_collator=collator, + tokenizer=model.data_processor.transformer_tokenizer, + ) + + logger.info("Starting GLiNER fine-tuning on %d examples...", len(data)) + trainer.train() + model.save_pretrained(config.output_dir) + logger.info("Saved fine-tuned GLiNER model to %s", config.output_dir) + return config.output_dir diff --git a/src/trialmatchai/finetuning/reranker.py b/src/trialmatchai/finetuning/reranker.py new file mode 100644 index 00000000..558914ca --- /dev/null +++ b/src/trialmatchai/finetuning/reranker.py @@ -0,0 +1,21 @@ +"""Fine-tune the cross-encoder reranker (LoRA SFT, Yes/No target). + +The reranker reads the next-token logits for "Yes"/"No" after the prompt, so we +SFT the model to emit the correct token. Produces a LoRA adapter that plugs into +the pipeline via ``model.reranker_adapter_path``. +""" + +from __future__ import annotations + +from trialmatchai.finetuning._sft import run_sft +from trialmatchai.finetuning.config import FinetuneConfig +from trialmatchai.finetuning.data import read_jsonl, reranker_row_to_messages + + +def finetune_reranker(config: FinetuneConfig) -> str: + rows = read_jsonl(config.train_data, config.max_examples) + message_lists = [] + for row in rows: + messages, label = reranker_row_to_messages(row) + message_lists.append([*messages, {"role": "assistant", "content": label}]) + return run_sft(config, message_lists) diff --git a/src/trialmatchai/models/llm/llm_reranker.py b/src/trialmatchai/models/llm/llm_reranker.py index 18e1d636..820b5ee3 100644 --- a/src/trialmatchai/models/llm/llm_reranker.py +++ b/src/trialmatchai/models/llm/llm_reranker.py @@ -99,7 +99,8 @@ def preprocess_text(self, text: str) -> str: text = re.sub(r"\s+", " ", text) return text.strip() - def create_messages(self, patient_text: str, trial_text: str) -> List[Dict]: + @staticmethod + def create_messages(patient_text: str, trial_text: str) -> List[Dict]: system_prompt = ( "You are a clinical assistant tasked with determining whether the patient information (Statement A) " "provides enough details to evaluate whether the patient satisfies or violates the clinical " diff --git a/tests/test_finetuning.py b/tests/test_finetuning.py new file mode 100644 index 00000000..cf65470d --- /dev/null +++ b/tests/test_finetuning.py @@ -0,0 +1,73 @@ +"""Tests for the fine-tuning data/CLI layer (no heavy deps or model loads).""" + +from __future__ import annotations + +import json + +import pytest + +from trialmatchai.finetuning.cli import build_parser +from trialmatchai.finetuning.config import FinetuneConfig +from trialmatchai.finetuning.data import ( + cot_row_to_messages, + ner_row_to_gliner, + read_jsonl, + reranker_row_to_messages, +) + + +def test_cot_row_messages_passthrough_and_instruct(): + msgs = cot_row_to_messages({"messages": [{"role": "user", "content": "hi"}]}) + assert msgs == [{"role": "user", "content": "hi"}] + + converted = cot_row_to_messages( + {"instruction": "sys", "input": "q", "output": "a"} + ) + assert converted[0] == {"role": "system", "content": "sys"} + assert converted[-1] == {"role": "assistant", "content": "a"} + + +def test_reranker_row_messages_and_label(): + messages, label = reranker_row_to_messages( + {"patient_text": "P", "criterion": "C", "label": "relevant"} + ) + assert label == "Yes" # normalized from "relevant" + # Reuses the runtime reranker prompt (Statement A / Statement B). + assert any("Statement A: P" in m["content"] for m in messages) + assert any("Statement B: C" in m["content"] for m in messages) + + +def test_ner_char_spans_convert_to_token_indices(): + gliner = ner_row_to_gliner( + {"text": "EGFR mutation positive", "ner": [[0, 4, "gene"]]} + ) + assert gliner["tokenized_text"][0] == "EGFR" + assert gliner["ner"] == [[0, 0, "gene"]] + + +def test_ner_native_format_passthrough(): + row = {"tokenized_text": ["A", "B"], "ner": [[0, 1, "x"]]} + assert ner_row_to_gliner(row) == row + + +def test_read_jsonl_respects_max(tmp_path): + path = tmp_path / "d.jsonl" + path.write_text("\n".join(json.dumps({"i": i}) for i in range(5))) + assert len(read_jsonl(str(path), max_examples=2)) == 2 + + +def test_cli_parses_each_subcommand(): + parser = build_parser() + for component in ("cot", "reranker", "ner"): + args = parser.parse_args( + [component, "--base-model", "m", "--train-data", "t", "--output-dir", "o"] + ) + assert args.component == component + + with pytest.raises(SystemExit): + parser.parse_args(["cot"]) # missing required args + + +def test_finetune_config_training_args_lazy(): + cfg = FinetuneConfig(base_model="m", train_data="t", output_dir="o") + assert cfg.lora_rank == 32 and cfg.bf16 is True diff --git a/uv.lock b/uv.lock index 4adfce83..fcac0f97 100644 --- a/uv.lock +++ b/uv.lock @@ -43,22 +43,27 @@ name = "aiohttp" version = "3.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohappyeyeballs", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "aiosignal", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "attrs", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "frozenlist", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "multidict", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "propcache", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "yarl", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "aiohappyeyeballs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "aiosignal", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "attrs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "frozenlist", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "multidict", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "propcache", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "yarl", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794, upload-time = "2026-06-07T21:09:35.529Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/26/dd/bf526e6f0a1120dd6f2df2e97bacfe4d358f13d17a0ff5847301a1375a51/aiohttp-3.14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:aa00140699487bd435fde4342d85c94cb256b7cd3a5b9c3396c67f19922afda2", size = 765225, upload-time = "2026-06-07T21:06:07.957Z" }, + { url = "https://files.pythonhosted.org/packages/8f/e1/a2872aa55495a70f61310d411541c6ee23812d9a884e000c716e1bc3edbf/aiohttp-3.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c1af67559445498b502030c35c59db59966f47041ca9de5b4e707f86bd10b5f", size = 518743, upload-time = "2026-06-07T21:06:09.749Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e7/c60c7b209e509cc787de3cea0550a518538cfc08003e1c1e14c1c63fff71/aiohttp-3.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d44ec478e713ee7f29b439f7eb8dc2b9d4079e11ae114d2c2ac3d5daf30516c8", size = 514139, upload-time = "2026-06-07T21:06:11.26Z" }, + { url = "https://files.pythonhosted.org/packages/5b/8d/614ace2f579702c9840ab1e1447fd8509e35b0b904f7196418fa2f57b25d/aiohttp-3.14.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d3b1a184a9a8f548a6b73f1e26b96b052193e4b3175ed7342aaf1151a1f00a04", size = 1784088, upload-time = "2026-06-07T21:06:12.887Z" }, { url = "https://files.pythonhosted.org/packages/49/e0/726e90f99542bf292f81a96a12cc4847deb86f3ccf62c6f4014a201f4d33/aiohttp-3.14.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5f2504bc0322437c9a1ff6d3333ca56c7477b727c995f036b976ae17b98372c8", size = 1737835, upload-time = "2026-06-07T21:06:14.564Z" }, { url = "https://files.pythonhosted.org/packages/0b/4b/d176d5c4db9d33dacf0543102ea59503bc1d528af4cfd0b719949ca49389/aiohttp-3.14.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73f05ea02013e02512c3bf42714f1208c57168c779cc6fe23516e4543089d0a6", size = 1842801, upload-time = "2026-06-07T21:06:16.228Z" }, { url = "https://files.pythonhosted.org/packages/dc/d6/5a99b563690ea0cbed912ae94a2ce33993a5709a651a3a4fe761e7dd973a/aiohttp-3.14.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:797457503c2d426bee06eef808d07b31ede30b65e054444e7de64cad0061b7af", size = 1929992, upload-time = "2026-06-07T21:06:17.947Z" }, { url = "https://files.pythonhosted.org/packages/76/7f/a987b14a3859094b3cea3f4825219c3e5536242564af6e3f9c2f6c994eb2/aiohttp-3.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b821a1f7dedf7e37450654e620038ac3b2e81e8fa6ea269337e97101978ec730", size = 1786989, upload-time = "2026-06-07T21:06:19.677Z" }, { url = "https://files.pythonhosted.org/packages/f1/1a/420e5c85a3e73349372ed22ce0b6af86bfa6ce16a4b20a64a2e94608c781/aiohttp-3.14.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4cd96b5ba05d67ed0cf00b5b405c8cd99586d8e3481e8ee0a831057591af7621", size = 1640129, upload-time = "2026-06-07T21:06:22.558Z" }, + { url = "https://files.pythonhosted.org/packages/a7/80/18a592ed3be0a402cc03670bd72ee1f8563ddbe1d8d5542dbf868f274136/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d459b98a932296c6f0e94f87511a0b1b90a8a02c30a50e60a297619cd5a58ee", size = 1756576, upload-time = "2026-06-07T21:06:24.8Z" }, { url = "https://files.pythonhosted.org/packages/ec/0b/8b3d5713373858ff71a617daf6e3b0e81ad63e79d09a3cf2f6b6b983939c/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:764457a7be60825fb770a644852ff717bcbb5042f189f2bd16df61a81b3f6573", size = 1754668, upload-time = "2026-06-07T21:06:26.528Z" }, { url = "https://files.pythonhosted.org/packages/9f/49/fd564575cf225821d7ba5a117cb8bc27213d8a7e1811162afb43ae077039/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f7a16ef45b081454ef844502d87a848876c490c4cb5c650c230f6ec79ed2c1e7", size = 1817019, upload-time = "2026-06-07T21:06:28.297Z" }, { url = "https://files.pythonhosted.org/packages/ed/1b/e850c9ae6fc91356552ae668bb6c51e93fa29c8aef13398a10b56678557f/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2fbc3ed048b3475b9f0cbcb9978e9d2d3511acd91ead203af26ed9f0056004cf", size = 1631638, upload-time = "2026-06-07T21:06:30.242Z" }, @@ -71,8 +76,8 @@ name = "aiosignal" version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "frozenlist", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "frozenlist", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } wheels = [ @@ -464,6 +469,32 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/22/f3/56ccb2884aaa3db5622368e5191a3384b15f35392aa93df8b2f508c660d2/cyclonedx_python_lib-11.11.0-py3-none-any.whl", hash = "sha256:3049fc83e06a059b5c5907a527625a8ed5073caab10607ed4c9e5503b590fd44", size = 528689, upload-time = "2026-06-17T11:57:47.358Z" }, ] +[[package]] +name = "datasets" +version = "4.8.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "fsspec", extra = ["http"], marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "httpx", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "huggingface-hub", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "multiprocess", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pandas", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyarrow", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "tqdm", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "xxhash", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/34/14cd8e76f907f7d4dca2334cfeec9f81d30fd15c25a015f99aaea694eaed/datasets-4.8.5.tar.gz", hash = "sha256:0f0c1c3d56ffff2c93b2f4c63c95bac94f3d7e8621aea2a2a576275233bba772", size = 605649, upload-time = "2026-04-27T15:43:57.384Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/99/00f3196036501b53032c4b1ab8337a0b978dee832ed276dae3815df4e8b5/datasets-4.8.5-py3-none-any.whl", hash = "sha256:5079900781719c0e063a8efdd2cd95a31ad0c63209178669cd23cf1b926149ff", size = 528973, upload-time = "2026-04-27T15:43:53.702Z" }, +] + [[package]] name = "defusedxml" version = "0.7.1" @@ -733,10 +764,15 @@ version = "1.8.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, + { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, + { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, @@ -753,6 +789,11 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/93/6d/66d48b03460768f523da62a57a7e14e5e95fdf339d79e996ce3cecda2cdb/fsspec-2024.3.1-py3-none-any.whl", hash = "sha256:918d18d41bf73f0e2b261824baeb1b124bcf771767e3a26425cd7dec3332f512", size = 171991, upload-time = "2024-03-18T19:35:11.259Z" }, ] +[package.optional-dependencies] +http = [ + { name = "aiohttp", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] + [[package]] name = "gguf" version = "0.19.0" @@ -1319,17 +1360,39 @@ version = "6.7.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/f1/a90635c4f88fb913fbf4ce660b83b7445b7a02615bda034b2f8eb38fd597/multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d", size = 76626, upload-time = "2026-01-26T02:43:26.485Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e", size = 44706, upload-time = "2026-01-26T02:43:27.607Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855", size = 44356, upload-time = "2026-01-26T02:43:28.661Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d2/0a36c8473f0cbaeadd5db6c8b72d15bbceeec275807772bfcd059bef487d/multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3", size = 244355, upload-time = "2026-01-26T02:43:31.165Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/8c65be997fd7dd311b7d39c7b6e71a0cb449bad093761481eccbbe4b42a2/multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e", size = 246433, upload-time = "2026-01-26T02:43:32.581Z" }, { url = "https://files.pythonhosted.org/packages/01/fb/4dbd7e848d2799c6a026ec88ad39cf2b8416aa167fcc903baa55ecaa045c/multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a", size = 225376, upload-time = "2026-01-26T02:43:34.417Z" }, { url = "https://files.pythonhosted.org/packages/b6/8a/4a3a6341eac3830f6053062f8fbc9a9e54407c80755b3f05bc427295c2d0/multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8", size = 257365, upload-time = "2026-01-26T02:43:35.741Z" }, { url = "https://files.pythonhosted.org/packages/f7/a2/dd575a69c1aa206e12d27d0770cdf9b92434b48a9ef0cd0d1afdecaa93c4/multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0", size = 254747, upload-time = "2026-01-26T02:43:36.976Z" }, { url = "https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144", size = 246293, upload-time = "2026-01-26T02:43:38.258Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a4/23466059dc3854763423d0ad6c0f3683a379d97673b1b89ec33826e46728/multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49", size = 242962, upload-time = "2026-01-26T02:43:40.034Z" }, { url = "https://files.pythonhosted.org/packages/1f/67/51dd754a3524d685958001e8fa20a0f5f90a6a856e0a9dcabff69be3dbb7/multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71", size = 237360, upload-time = "2026-01-26T02:43:41.752Z" }, + { url = "https://files.pythonhosted.org/packages/64/3f/036dfc8c174934d4b55d86ff4f978e558b0e585cef70cfc1ad01adc6bf18/multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3", size = 245940, upload-time = "2026-01-26T02:43:43.042Z" }, { url = "https://files.pythonhosted.org/packages/3d/20/6214d3c105928ebc353a1c644a6ef1408bc5794fcb4f170bb524a3c16311/multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c", size = 253502, upload-time = "2026-01-26T02:43:44.371Z" }, { url = "https://files.pythonhosted.org/packages/b1/e2/c653bc4ae1be70a0f836b82172d643fcf1dade042ba2676ab08ec08bff0f/multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0", size = 247065, upload-time = "2026-01-26T02:43:45.745Z" }, { url = "https://files.pythonhosted.org/packages/c8/11/a854b4154cd3bd8b1fd375e8a8ca9d73be37610c361543d56f764109509b/multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa", size = 241870, upload-time = "2026-01-26T02:43:47.054Z" }, { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, ] +[[package]] +name = "multiprocess" +version = "0.70.16" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/ae/04f39c5d0d0def03247c2893d6f2b83c136bf3320a2154d7b8858f2ba72d/multiprocess-0.70.16.tar.gz", hash = "sha256:161af703d4652a0e1410be6abccecde4a7ddffd19341be0a7011b94aeb171ac1", size = 1772603, upload-time = "2024-01-28T18:52:34.85Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/f7/7ec7fddc92e50714ea3745631f79bd9c96424cb2702632521028e57d3a36/multiprocess-0.70.16-py310-none-any.whl", hash = "sha256:c4a9944c67bd49f823687463660a2d6daae94c289adff97e0f9d696ba6371d02", size = 134824, upload-time = "2024-01-28T18:52:26.062Z" }, + { url = "https://files.pythonhosted.org/packages/50/15/b56e50e8debaf439f44befec5b2af11db85f6e0f344c3113ae0be0593a91/multiprocess-0.70.16-py311-none-any.whl", hash = "sha256:af4cabb0dac72abfb1e794fa7855c325fd2b55a10a44628a3c1ad3311c04127a", size = 143519, upload-time = "2024-01-28T18:52:28.115Z" }, + { url = "https://files.pythonhosted.org/packages/ea/89/38df130f2c799090c978b366cfdf5b96d08de5b29a4a293df7f7429fa50b/multiprocess-0.70.16-py38-none-any.whl", hash = "sha256:a71d82033454891091a226dfc319d0cfa8019a4e888ef9ca910372a446de4435", size = 132628, upload-time = "2024-01-28T18:52:30.853Z" }, + { url = "https://files.pythonhosted.org/packages/da/d9/f7f9379981e39b8c2511c9e0326d212accacb82f12fbfdc1aa2ce2a7b2b6/multiprocess-0.70.16-py39-none-any.whl", hash = "sha256:a0bafd3ae1b732eac64be2e72038231c1ba97724b60b09400d68f229fcc2fbf3", size = 133351, upload-time = "2024-01-28T18:52:31.981Z" }, +] + [[package]] name = "networkx" version = "3.6.1" @@ -2038,10 +2101,15 @@ version = "0.5.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/f1/8a8cc1c2c7e7934ab77e0163414f736fadbc0f5e8dd9673b952355ac175b/propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78", size = 90744, upload-time = "2026-05-08T20:59:45.799Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f4/651b1225e976bd1a2ba5cfba0c29d096581c2636b437e3a9a7ab6276270a/propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959", size = 52033, upload-time = "2026-05-08T20:59:47.408Z" }, + { url = "https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7", size = 52754, upload-time = "2026-05-08T20:59:49.202Z" }, + { url = "https://files.pythonhosted.org/packages/7d/fe/b3551b41bbc2f5b5bb088fc6920567cd43101253e68fbaa261339eb96fe1/propcache-0.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511", size = 57573, upload-time = "2026-05-08T20:59:50.778Z" }, { url = "https://files.pythonhosted.org/packages/83/27/ab851ebd1b7172e3e161f5f8d39e315d54a91bea246f01f4d872d3376aef/propcache-0.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660", size = 60645, upload-time = "2026-05-08T20:59:52.227Z" }, { url = "https://files.pythonhosted.org/packages/95/7d/466b3d18022e9897cbda9c735c493c5bd747d7a4c6f5ea1480b4cec434b6/propcache-0.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66", size = 61563, upload-time = "2026-05-08T20:59:53.866Z" }, { url = "https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b", size = 58888, upload-time = "2026-05-08T20:59:55.457Z" }, { url = "https://files.pythonhosted.org/packages/0a/67/bb777ffd907633563bf35fd859c4ce97b0512c32f4633cf5d1eb7c33512b/propcache-0.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67", size = 59253, upload-time = "2026-05-08T20:59:57.075Z" }, + { url = "https://files.pythonhosted.org/packages/b9/42/64f8d90b73fd9cdc1499b48057ff6d9cd2a98a25734c9bb62ecf07e87061/propcache-0.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f", size = 57558, upload-time = "2026-05-08T20:59:58.602Z" }, { url = "https://files.pythonhosted.org/packages/eb/02/dba5bc03c9041f2092ea55a449caf5dfe68352c6654511b29ba0654ddb69/propcache-0.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c", size = 55007, upload-time = "2026-05-08T20:59:59.837Z" }, { url = "https://files.pythonhosted.org/packages/14/c0/43f649c7aa2a77a3b100d84e9dea3a483120ecb608bfe36ce49eaff517fe/propcache-0.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0", size = 60355, upload-time = "2026-05-08T21:00:01.144Z" }, { url = "https://files.pythonhosted.org/packages/83/c0/435dafd27f1cb4a495381dae60e25883ccfe4020bb72818e8184c1678092/propcache-0.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6", size = 59057, upload-time = "2026-05-08T21:00:02.401Z" }, @@ -2928,6 +2996,16 @@ entity = [ { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] +finetune = [ + { name = "accelerate", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "bitsandbytes", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "datasets", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "gliner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "gliner2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "peft", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] gpu = [ { name = "bitsandbytes", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "vllm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, @@ -2952,14 +3030,20 @@ dev = [ [package.metadata] requires-dist = [ + { name = "accelerate", marker = "extra == 'finetune'", specifier = "==1.8.1" }, { name = "accelerate", marker = "extra == 'llm'", specifier = "==1.8.1" }, + { name = "bitsandbytes", marker = "(sys_platform == 'linux' and extra == 'finetune') or (sys_platform == 'win32' and extra == 'finetune')", specifier = "==0.49.2" }, { name = "bitsandbytes", marker = "(sys_platform == 'linux' and extra == 'gpu') or (sys_platform == 'win32' and extra == 'gpu')", specifier = "==0.49.2" }, + { name = "datasets", marker = "extra == 'finetune'", specifier = ">=3.0,<5" }, { name = "einops", marker = "extra == 'llm'", specifier = "==0.8.0" }, { name = "gliner", marker = "extra == 'entity'", specifier = "==0.2.27" }, + { name = "gliner", marker = "extra == 'finetune'", specifier = "==0.2.27" }, { name = "gliner2", marker = "extra == 'entity'", specifier = ">=1.3.1,<2" }, + { name = "gliner2", marker = "extra == 'finetune'", specifier = ">=1.3.1,<2" }, { name = "lancedb", specifier = ">=0.25.0,<0.26" }, { name = "numpy", specifier = ">=2.0,<3" }, { name = "pandas", specifier = "==2.2.3" }, + { name = "peft", marker = "extra == 'finetune'", specifier = "==0.15.2" }, { name = "peft", marker = "extra == 'llm'", specifier = "==0.15.2" }, { name = "pyarrow", specifier = ">=24.0.0,<25" }, { name = "pydantic", specifier = ">=2.12.0,<3" }, @@ -2971,13 +3055,15 @@ requires-dist = [ { name = "tenacity", specifier = "==9.0.0" }, { name = "tokenizers", marker = "extra == 'llm'", specifier = "==0.22.1" }, { name = "torch", marker = "extra == 'entity'", specifier = "==2.11.0" }, + { name = "torch", marker = "extra == 'finetune'", specifier = "==2.11.0" }, { name = "torch", marker = "extra == 'llm'", specifier = "==2.11.0" }, { name = "tqdm", specifier = "==4.67.1" }, { name = "transformers", marker = "extra == 'entity'", specifier = "==5.6.2" }, + { name = "transformers", marker = "extra == 'finetune'", specifier = "==5.6.2" }, { name = "transformers", marker = "extra == 'llm'", specifier = "==5.6.2" }, { name = "vllm", marker = "sys_platform == 'linux' and extra == 'gpu'", specifier = "==0.23.0" }, ] -provides-extras = ["gpu", "llm", "entity"] +provides-extras = ["gpu", "llm", "entity", "finetune"] [package.metadata.requires-dev] dev = [ @@ -3209,22 +3295,56 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9e/db/8cffed5a65db530e02756499ba0f4039adb1cb12850b0dcfadc384fa6440/xgrammar-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d81c13e97b7eec424da7f2b2ec61c88114301ec6037761995800a1ceb092656", size = 44588389, upload-time = "2026-06-11T19:01:35.577Z" }, ] +[[package]] +name = "xxhash" +version = "3.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/2f/e183a1b407002f5af81822bee18b61cdb94b8670208ef34734d8d2b8ebe9/xxhash-3.7.0.tar.gz", hash = "sha256:6cc4eefbb542a5d6ffd6d70ea9c502957c925e800f998c5630ecc809d6702bae", size = 82022, upload-time = "2026-04-25T11:10:32.553Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/f4/7bd35089ff1f8e2c96baa2dce05775a122aacd2e3830a73165e27a4d0848/xxhash-3.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fdc7d06929ae28dda98297a18eef7b0fd38991a3b405d8d7b55c9ef24c296958", size = 33423, upload-time = "2026-04-25T11:05:47.628Z" }, + { url = "https://files.pythonhosted.org/packages/a3/26/4e00c88a6a2c8a759cfb77d2a9a405f901e8aa66e60ef1fd0aeb35edda48/xxhash-3.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea6daa712f4e094a30830cf01e9b47d03b24d05cc9dab8609f0d9a9db8454712", size = 30857, upload-time = "2026-04-25T11:05:49.189Z" }, + { url = "https://files.pythonhosted.org/packages/82/2f/eeb942c17a5a761a8f01cb9180a0b76bfb62a2c39e6f46b1f9001899027a/xxhash-3.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9e6c0d843f1daf85ea23aeb053579135552bde575b7b98af20bfc667b6e4548d", size = 194702, upload-time = "2026-04-25T11:05:50.457Z" }, + { url = "https://files.pythonhosted.org/packages/0e/fd/96f132c08b1e5951c68691d3b9ec351ec2edc028f6a01fcd294f46b9d9f0/xxhash-3.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:363c139bf15e1ac5f136b981d3c077eb551299b1effede7f12faa010b8590a60", size = 213613, upload-time = "2026-04-25T11:05:52.571Z" }, + { url = "https://files.pythonhosted.org/packages/82/89/d4e92b796c5ed052d29ed324dbfc1dc1188e0c4bf64bebbf0f8fc20698df/xxhash-3.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a778b25874cb0f862eaab5986bff4ca49ffb0def7c0a34c237b948b3c6c775b2", size = 236726, upload-time = "2026-04-25T11:05:54.395Z" }, + { url = "https://files.pythonhosted.org/packages/40/f1/81fc4361921dc6e557a9c60cb3712f36d244d06eeeb71cd2f4252ac42678/xxhash-3.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3e1860f1e43d40e9d904cf22d93e587ea42e010ebce4160877e46bcab4bc232a", size = 212443, upload-time = "2026-04-25T11:05:56.334Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d0/afeddd4cff50a332f50d4b8a2e8857673153ab0564ef472fcdeb0b5430df/xxhash-3.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9122ad6f867c4a0f5e655f5c3bdf89103852009dbb442a3d23e688b9e699e800", size = 445793, upload-time = "2026-04-25T11:05:58.953Z" }, + { url = "https://files.pythonhosted.org/packages/f7/d0/3c91e4e6a05ca4d7df8e39ec3a75b713609258ec84705ab34be6430826a1/xxhash-3.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7d9110d0c3fb02679972837a033251fd186c529aa62f19c132fc909c74052b8", size = 193937, upload-time = "2026-04-25T11:06:00.546Z" }, + { url = "https://files.pythonhosted.org/packages/4e/3a/a6b0772d9801dd4bea4ca4fd34734d6e9b51a711c8a611a24a79de26a878/xxhash-3.7.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:347a93f2b4ce67ce61959665e32a7447c380f8347e55e100daa23766baacf0e5", size = 285188, upload-time = "2026-04-25T11:06:01.96Z" }, + { url = "https://files.pythonhosted.org/packages/6c/f8/cf8e31fd7282230fe7367cd501a2e75b4b67b222bfc7eacccfc20d2652cb/xxhash-3.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:acbb48679ddf3852c45280c10ff10d52ca2cd1da2e552fb81db1ff786c75d0e4", size = 210966, upload-time = "2026-04-25T11:06:03.453Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f0/fd36cc4a81bf52ee5633275daae2b93dd958aace67fd4f5d466ec83b5f35/xxhash-3.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:fe14c356f8b23ad811dc026077a6d4abccdaa7bce5ca98579605550657b6fcfb", size = 241994, upload-time = "2026-04-25T11:06:05.264Z" }, + { url = "https://files.pythonhosted.org/packages/08/e1/67f5d9c9369be42eaf99ba02c01bf14c5ecd67087b02567960bfcee43b63/xxhash-3.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f420ad3d41e38194353a498bbc9561fd5a9973a27b536ce46d8583479cf44335", size = 198707, upload-time = "2026-04-25T11:06:07.044Z" }, + { url = "https://files.pythonhosted.org/packages/50/17/a4c865ca22d2da6b1bc7d739bf88cab209533cf52ba06ca9da27c3039bee/xxhash-3.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:693d02c6dc7d1aa0a45921d54cd8c1ff629e09dfdc2238471507af1f7a1c6f04", size = 210917, upload-time = "2026-04-25T11:06:08.853Z" }, + { url = "https://files.pythonhosted.org/packages/49/8b/453b35810d697abac3c96bde3528bece685869227da274eb80a4a4d4a119/xxhash-3.7.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:14bf7a54e43825ec131ee7fe3c60e142e7c2c1e676ad0f93fc893432d15414af", size = 275772, upload-time = "2026-04-25T11:06:10.645Z" }, + { url = "https://files.pythonhosted.org/packages/b5/ad/4eed7eab07fd3ee6678f416190f0413d097ab5d7c1278906bf1e9549d789/xxhash-3.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ae3a39a4d96bdb6f8d154fd7f490c4ad06f0532fcd2bb656052a9a7762cf5d31", size = 414068, upload-time = "2026-04-25T11:06:12.511Z" }, + { url = "https://files.pythonhosted.org/packages/d3/4e/fd6f8a680ba248fdb83054fa71a8bfa3891225200de1708b888ef2c49829/xxhash-3.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1cc07c639e3a77ef1d32987464d3e408565b8a3be57b545d3542b191054d9923", size = 191459, upload-time = "2026-04-25T11:06:14.07Z" }, + { url = "https://files.pythonhosted.org/packages/54/c1/e57ac7317b1f58a92bab692da6d497e2a7ce44735b224e296347a7ecc754/xxhash-3.7.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ad3aa71e12ee634f22b39a0ff439357583706e50765f17f05550f92dbf128a23", size = 31232, upload-time = "2026-04-25T11:10:21.51Z" }, + { url = "https://files.pythonhosted.org/packages/4f/4e/075559bd712bc62e84915ea46bbee859f935d285659082c129bdbff679dd/xxhash-3.7.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5de686e73690cdaf72b96d4fa083c230ec9020bcc2627ce6316138e2cf2fe2d1", size = 28553, upload-time = "2026-04-25T11:10:23.1Z" }, + { url = "https://files.pythonhosted.org/packages/92/ca/a9c78cb384d4b033b0c58196bd5c8509873cabe76389e195127b0302a741/xxhash-3.7.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7fbec49f5341bbdea0c471f7d1e2fb41ae8925af9b6f28025c28defd8eb94274", size = 41109, upload-time = "2026-04-25T11:10:25.022Z" }, + { url = "https://files.pythonhosted.org/packages/bd/b1/dfe2629f7c77eb2fa234c72ff537cdd64939763df704e256446ed364a16d/xxhash-3.7.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48b542c347c2089f43dc5a6db31d2a6f3cdb04ee33505ec6e9f653834dbb0bde", size = 36307, upload-time = "2026-04-25T11:10:26.949Z" }, + { url = "https://files.pythonhosted.org/packages/e7/f7/5a484afce0f48dd8083208b42e4911f290a82c7b52458ef2927e4d421a45/xxhash-3.7.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a169a036bed0995e090d1493b283cc2cc8a6f5046821086b843abefff80643bc", size = 32534, upload-time = "2026-04-25T11:10:29.01Z" }, +] + [[package]] name = "yarl" version = "1.24.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "idna", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "multidict", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "propcache", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "idna", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "multidict", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "propcache", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/c5/1ce244152ff2839645e7cae92f90e7bafcb2c52bea7ff586ac714f14f5df/yarl-1.24.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:36348bebb147b83818b9d7e673ea4debc75970afc6ffdc7e3975ad05ce5a58c1", size = 128971, upload-time = "2026-05-19T21:28:20.543Z" }, + { url = "https://files.pythonhosted.org/packages/87/5a/00f36967203ed89cb3acd2c8ed526cc3fed9418eb70ce128160a911c8499/yarl-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a97e42c8a2233f2f279ecadd9e4a037bcb5d813b78435e8eedd4db5a9e9708c", size = 91507, upload-time = "2026-05-19T21:28:22.556Z" }, + { url = "https://files.pythonhosted.org/packages/31/d0/1fb0c1cd27288f39f6974da4318c32768d72c9890984541fdf1e2e32a51d/yarl-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d027d56f1035e339d1001ac33eceab5b2ec8e42e449787bb75e289fb9a5cd1d", size = 91343, upload-time = "2026-05-19T21:28:24.092Z" }, + { url = "https://files.pythonhosted.org/packages/03/ce/d4a646508bed2f8dec6435b40166fe9308dd191262033d3f307b2bbcaecd/yarl-1.24.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a6377060e7927187a42b7eb202090cbe2b34933a4eeaf90e3bd9e33432e5cae", size = 105704, upload-time = "2026-05-19T21:28:25.872Z" }, { url = "https://files.pythonhosted.org/packages/4b/07/b3278e82d8bc41485bcf6d856cd0433262593de615b1d3dc43bd3f5bead4/yarl-1.24.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:17076578bce0049a5ce57d14ad1bded391b68a3b213e9b81b0097b090244999a", size = 97281, upload-time = "2026-05-19T21:28:27.352Z" }, { url = "https://files.pythonhosted.org/packages/17/5b/4cee6e7c92e487bebe7afc797da0aa54a248ab4e776a68fe369ec29665a5/yarl-1.24.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:50713f1d4d6be6375bb178bb43d140ee1acb8abe589cd723320b7925a275be1e", size = 114020, upload-time = "2026-05-19T21:28:29.458Z" }, { url = "https://files.pythonhosted.org/packages/5c/82/111076571545a7d4f9cca3fbd5c6f40615af58642be09f12328f48022468/yarl-1.24.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:34263e2fa8fb5bb63a0d97706cda38edbad62fddb58c7f12d6acbc092812aa50", size = 111450, upload-time = "2026-05-19T21:28:31.262Z" }, { url = "https://files.pythonhosted.org/packages/b6/ec/08f671f69a444d704aeecebf92af659b67b97a869942411d0a578b08c334/yarl-1.24.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49016d82f032b1bd1e10b01078a7d29ae71bf468eeae0ea22df8bab691e60003", size = 106384, upload-time = "2026-05-19T21:28:32.856Z" }, { url = "https://files.pythonhosted.org/packages/e5/86/ce41e7a7a199340b2330d52b60f25c4074b6636dd0e60b1a80d31a9db042/yarl-1.24.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3f6d2c216318f8f32038ca3f72501ba08536f0fd18a36e858836b121b2deed9f", size = 106153, upload-time = "2026-05-19T21:28:35.222Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5d/31be8a729531ab3e55ac3e7e5c800be8c89ea98947f418b2f6ea259fb6ee/yarl-1.24.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:08d3a33218e0c64393e7610284e770409a9c31c429b078bcb24096ed0a783b8f", size = 105322, upload-time = "2026-05-19T21:28:36.642Z" }, { url = "https://files.pythonhosted.org/packages/47/9b/b57afb22b386ae87ac9940f09878b98d8c333f89113e6fc96fcf4ca9eb64/yarl-1.24.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5d699376c4ca3cba49bbfae3a05b5b70ded572937171ce1e0b8d87118e2ba294", size = 99057, upload-time = "2026-05-19T21:28:38.386Z" }, { url = "https://files.pythonhosted.org/packages/a3/4f/06348c27c8389256c313e8a57d796808fc0264c915dd5e7cfd3c0e314dc7/yarl-1.24.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a1cab588b4fa14bea2e55ebea27478adfb05372f47573738e1acc4a36c0b05d2", size = 113502, upload-time = "2026-05-19T21:28:40.091Z" }, { url = "https://files.pythonhosted.org/packages/5f/1c/284f307b298e4a17b7943b07d9d7ecc4151537f8d137ba51f3bb6c31ca20/yarl-1.24.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:ec87ccc31bd21db7ad009d8572c127c1000f268517618a4cc09adba3c2a7f21c", size = 105253, upload-time = "2026-05-19T21:28:41.987Z" }, From 600f819f41709c7724f12addb08773bc08aee63a Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 10:44:30 +0200 Subject: [PATCH 22/64] docs: rewrite README + add fine-tuning guide - README: add an architecture/"how it works" overview, a "bring your own models" section (custom checkpoints/adapters via config), the new trialmatchai-finetune command, an extras table, and a navigable layout. - docs/finetuning.md: data formats, commands, and plug-back-in steps for the NER (GLiNER), reranker (LoRA Yes/No), and CoT (LoRA SFT) fine-tuners. Co-Authored-By: Claude Opus 4.8 --- README.md | 233 +++++++++++++++++++++------------------------ docs/finetuning.md | 102 ++++++++++++++++++++ 2 files changed, 210 insertions(+), 125 deletions(-) create mode 100644 docs/finetuning.md diff --git a/README.md b/README.md index 1f1ac5cd..849c31f4 100644 --- a/README.md +++ b/README.md @@ -1,183 +1,166 @@ # TrialMatchAI -Logo - -TrialMatchAI is a batch-oriented clinical trial matching pipeline. It combines local LanceDB retrieval, schema-driven biomedical entity extraction, concept linking, embeddings, LLM reranking, and eligibility reasoning to produce ranked trial recommendations with criterion-level explanations. - -## Disclaimer - -This software is for research and informational use only. It is not medical advice, is not a medical device, and must not replace review by qualified healthcare professionals. - -## Deployment Target +TrialMatchAI logo + +**AI-driven clinical trial matching.** TrialMatchAI ingests patient data, finds +relevant trials with hybrid local retrieval, and produces ranked recommendations +with **criterion-level eligibility explanations** — all on a single GPU server, +with no external search service. + +[Quickstart](#quickstart) · [How it works](#how-it-works) · [Bring your own models](#bring-your-own-models) · [Fine-tuning](docs/finetuning.md) · [Configuration](#configuration) · [CLI](#cli-reference) + +> **Disclaimer.** For research and informational use only. This is not medical +> advice, not a medical device, and must not replace review by qualified +> healthcare professionals. + +--- + +## How it works + +```text +Patient data (text / FHIR / Phenopacket / OMOP) + │ interop importers → canonical PatientProfile + ▼ +Biomedical NER (GLiNER) ──► concept linking (OMOP/UMLS, hybrid lexical+vector) + ▼ +First-level retrieval ──► LanceDB hybrid search (BM25 + embeddings) over trials + ▼ +Criterion retrieval + LLM reranker (cross-encoder, Yes/No) + ▼ +CoT eligibility reasoning (per-criterion Met / Not Met / Violated …) + ▼ +Ranking ──► ranked trials + per-criterion explanations (results/) +``` -The supported v1 deployment path is a single Python 3.11 GPU server or VM. Trial and criteria search use embedded LanceDB tables under `data/search`, so no separate search service, container, socket, TLS certificate, or service credential is required. +Every model stage — **NER, reranker, and CoT** — is swappable and fine-tunable +(see [Bring your own models](#bring-your-own-models)). ## Requirements -- Python 3.11 -- `uv` recommended, or `pip` with editable install +- Python **3.11** +- [`uv`](https://docs.astral.sh/uv/) recommended (or `pip` with an editable install) - NVIDIA GPU with enough VRAM for the selected LLM backend -- 100 GB+ disk space for datasets, models, LanceDB tables, and results -- A LanceDB concept table built from OMOP and curated concept dictionaries for entity normalization - -## Security First - -No real credentials, generated private keys, datasets, models, local LanceDB data, run manifests, or results should be committed. Copy the template and keep runtime values local: - -```bash -cp .env.example .env -``` - -Dependency auditing currently ignores `CVE-2025-3000` because vLLM 0.23 pins Torch 2.11.0 and the advisory has no fixed Torch version listed. Revisit that exception whenever upgrading vLLM or Torch. - -Artifact bootstrap supports optional SHA-256 verification through `TRIALMATCHAI_PROCESSED_TRIALS_SHA256`, `TRIALMATCHAI_MODELS_SHA256`, and `TRIALMATCHAI_CRITERIA_PART__SHA256`. +- ~100 GB disk for datasets, models, LanceDB tables, and results +- A LanceDB concept table built from OMOP + curated dictionaries (for entity normalization) ## Quickstart -Install the package for local development and operational CLIs: - ```bash +# 1. Install. Base CLIs only: uv sync -``` - -Install deployment dependencies for model-backed indexing, entity extraction, and vLLM reasoning: - -```bash +# …or the full model-backed stack: uv sync --extra llm --extra gpu --extra entity ``` -Optional tooling: +| Extra | Adds | +|-------|------| +| `entity` | GLiNER/GLiNER2 biomedical NER | +| `llm` | local embedding + LLM stack (torch, transformers, peft) | +| `gpu` | vLLM + bitsandbytes (Linux) | +| `finetune` | training stack for `trialmatchai-finetune` | ```bash -uv sync --extra entity # GLiNER/GLiNER2 entity extraction -uv sync --extra llm # local embedding and LLM stack -``` - -Run a config and backend healthcheck: - -```bash -uv run trialmatchai-healthcheck +# 2. Verify config and backends. uv run trialmatchai-healthcheck --require-tables -``` -Provision data, models, concept KB, and search tables: - -```bash +# 3. Provision data, concept KB, trials, and search tables. uv run trialmatchai-bootstrap-data uv run trialmatchai-build-concepts --concept-csv data/omop/CONCEPT.csv --synonym-csv data/omop/CONCEPT_SYNONYM.csv uv run trialmatchai-update-registry --since 2026-06-01 --max-studies 100 uv run trialmatchai-index --prepare -``` -Import patient data into canonical profiles before matching: - -```bash +# 4. Import patients (text / FHIR / Phenopacket / OMOP — format auto-detected). uv run trialmatchai-import-patient --input data/patients/raw/patient-1.txt --format text uv run trialmatchai-import-patient --input data/patients/raw/patient-1.fhir.json -uv run trialmatchai-import-patient --input data/patients/raw/patient-1.phenopacket.json uv run trialmatchai-import-patient --input data/patients/omop_extract --format omop + +# 5. Run the batch matcher. Results land in results/. +uv run trialmatchai-run ``` -Run the batch matcher: +## Bring your own models + +Defaults are good starting points, not a ceiling. Point the pipeline at your own +checkpoints or adapters — no code changes: + +| Component | Default | Config key | +|-----------|---------|------------| +| Biomedical NER | `fastino/gliner2-base` | `entity_extraction.model_name` | +| Reranker | `google/gemma-2-2b-it` | `model.reranker_adapter_path` | +| CoT eligibility | configured CoT model | `model.cot_adapter_path` | + +Train your own with the built-in fine-tuner: ```bash -uv run trialmatchai-run +uv sync --extra finetune +trialmatchai-finetune cot --base-model microsoft/phi-4 --train-data data/cot.jsonl --output-dir models/cot-adapter +trialmatchai-finetune reranker --base-model google/gemma-2-2b-it --train-data data/reranker.jsonl --output-dir models/reranker-adapter +trialmatchai-finetune ner --base-model fastino/gliner2-base --train-data data/ner.jsonl --output-dir models/ner ``` -Results are written under `results/`. +Full data formats, flags, and plug-back-in steps: **[docs/finetuning.md](docs/finetuning.md)**. ## Configuration -Configuration defaults live in `src/trialmatchai/config/config.json`. Runtime overrides use `.env` or environment variables: +Defaults live in `src/trialmatchai/config/config.json`; override at runtime via +`.env` or environment variables. Common knobs: ```bash -TRIALMATCHAI_OUTPUT_DIR=results -TRIALMATCHAI_TRIALS_JSON_FOLDER=data/trials_jsons -TRIALMATCHAI_PATIENT_RAW_DIR=data/patients/raw -TRIALMATCHAI_PATIENT_PROFILE_DIR=data/patients/profiles -TRIALMATCHAI_PATIENT_SUMMARY_DIR=data/patients/summaries -TRIALMATCHAI_PATIENT_INPUT_FORMAT=auto -TRIALMATCHAI_PATIENT_STRICT_VALIDATION=false - -TRIALMATCHAI_SEARCH_BACKEND=lancedb -TRIALMATCHAI_SEARCH_DB_PATH=data/search -TRIALMATCHAI_SEARCH_TRIALS_TABLE=trials -TRIALMATCHAI_SEARCH_CRITERIA_TABLE=criteria -TRIALMATCHAI_SEARCH_CANDIDATE_LIMIT=1000 -TRIALMATCHAI_SEARCH_MODE=hybrid - -TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false -TRIALMATCHAI_ENTITY_BACKEND=gliner2 +TRIALMATCHAI_SEARCH_DB_PATH=data/search # embedded LanceDB tables +TRIALMATCHAI_SEARCH_MODE=hybrid # hybrid | bm25 | vector +TRIALMATCHAI_ENTITY_BACKEND=gliner2 # gliner2 | gliner | regex | disabled TRIALMATCHAI_ENTITY_SCHEMA_PATH=entity_schemas/trialmatchai.yaml TRIALMATCHAI_CONCEPT_DB_PATH=data/concepts -TRIALMATCHAI_CONCEPT_TABLE=concepts -TRIALMATCHAI_LINK_ACCEPT=0.80 +TRIALMATCHAI_LINK_ACCEPT=0.80 # concept-linking accept threshold TRIALMATCHAI_LINK_REJECT=0.30 - -TRIALMATCHAI_REGISTRY_SOURCE=clinicaltrials.gov -TRIALMATCHAI_REGISTRY_KEYWORDS_FILE= -TRIALMATCHAI_REGISTRY_SINCE_DAYS=7 -TRIALMATCHAI_REGISTRY_MAX_STUDIES= -TRIALMATCHAI_REGISTRY_REQUEST_TIMEOUT=30 -TRIALMATCHAI_REGISTRY_RATE_LIMIT_PER_SECOND=2 -TRIALMATCHAI_REGISTRY_RAW_DIR=data/registry/raw -TRIALMATCHAI_REGISTRY_MANIFEST_PATH=data/registry/manifest.jsonl -TRIALMATCHAI_REGISTRY_REPORTS_DIR=data/registry/runs -TRIALMATCHAI_LOG_JSON=1 +TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false # true only if a model requires it +TRIALMATCHAI_LOG_JSON=1 # structured logs ``` -Use `TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=true` only when a selected model explicitly requires custom remote code. +The full set of overrides is documented in [`.env.example`](.env.example). +Patient interoperability details: [docs/interoperability.md](docs/interoperability.md). -## CLI Commands +## CLI reference -- `trialmatchai-healthcheck`: validate config, paths, and optionally LanceDB search tables. -- `trialmatchai-bootstrap-data`: download and extract external data/model artifacts. -- `trialmatchai-build-concepts`: build the LanceDB concept table used for entity normalization. -- `trialmatchai-update-registry`: fetch new/changed ClinicalTrials.gov studies, write normalized JSON, and upsert LanceDB. -- `trialmatchai-index`: build the LanceDB trial and criteria search tables from prepared rows or `--prepare` normalized JSON. -- `trialmatchai-import-patient`: import text, Phenopacket, FHIR, or OMOP patient data into canonical profiles. -- `trialmatchai-run`: run the batch matching pipeline. +| Command | Purpose | +|---------|---------| +| `trialmatchai-healthcheck` | Validate config, paths, and (optionally) LanceDB tables | +| `trialmatchai-bootstrap-data` | Download/extract external data + model artifacts | +| `trialmatchai-build-concepts` | Build the LanceDB concept table for entity normalization | +| `trialmatchai-update-registry` | Fetch new/changed ClinicalTrials.gov studies and upsert LanceDB | +| `trialmatchai-index` | Build the LanceDB trial + criteria search tables | +| `trialmatchai-import-patient` | Import text / FHIR / Phenopacket / OMOP patient data | +| `trialmatchai-run` | Run the batch matching pipeline | +| `trialmatchai-finetune` | Fine-tune the NER / reranker / CoT models | -The command group is also available as: +The first seven are also available as subcommands of the `trialmatchai` group, +e.g. `uv run trialmatchai healthcheck` or `uv run python -m trialmatchai healthcheck`. -```bash -uv run python -m trialmatchai healthcheck -uv run trialmatchai bootstrap-data --skip-models -uv run trialmatchai import-patient --input data/patients/raw/patient-1.txt --format text -uv run trialmatchai update-registry --dry-run --max-studies 25 -``` - -Patient interoperability details are documented in `docs/interoperability.md`. +## Deployment -## Registry Updater +The supported deployment is a single Python 3.11 GPU server/VM. Trial and +criteria search use embedded LanceDB tables under `data/search`, so there is no +separate search service, container, socket, or service credential to manage. The +registry updater is built for cron / systemd timers / GitHub Actions — see +[docs/registry-updater.md](docs/registry-updater.md). -The registry updater is designed for cron, systemd timers, and GitHub Actions. It uses ClinicalTrials.gov v2 `/api/v2/studies`, stores raw source JSON under `data/registry/raw`, writes normalized trial JSON under `data/trials_jsons`, appends idempotency records to `data/registry/manifest.jsonl`, and upserts only new or changed studies into LanceDB. +## Security -Run with explicit keywords: +Never commit real credentials, private keys, datasets, models, local LanceDB +data, run manifests, or results. Copy the template and keep runtime values local: ```bash -uv run trialmatchai-update-registry \ - --keyword "lung cancer" \ - --keyword "EGFR" \ - --since 2026-06-01 \ - --max-studies 250 -``` - -Run with broad defaults: - -```bash -uv run trialmatchai-update-registry --max-studies 500 +cp .env.example .env ``` -Dry-run without writes or table changes: - -```bash -uv run trialmatchai-update-registry --dry-run --max-studies 25 -``` +Artifact bootstrap supports optional SHA-256 verification via +`TRIALMATCHAI_PROCESSED_TRIALS_SHA256`, `TRIALMATCHAI_MODELS_SHA256`, and +`TRIALMATCHAI_CRITERIA_PART__SHA256`. -See `docs/registry-updater.md` for scheduler examples. +Dependency auditing ignores `CVE-2025-3000` because vLLM 0.23 pins Torch 2.11.0 +and the advisory lists no fixed Torch version; revisit when upgrading either. -## Tests and Checks +## Development ```bash uv run ruff check . @@ -186,7 +169,7 @@ uv run python scripts/scan_secrets.py uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 ``` -## Support +## Support & citation - Email: abdallahmajd7@gmail.com - DOI: https://doi.org/10.5281/zenodo.18329084 diff --git a/docs/finetuning.md b/docs/finetuning.md new file mode 100644 index 00000000..a00e0fec --- /dev/null +++ b/docs/finetuning.md @@ -0,0 +1,102 @@ +# Fine-tuning & bringing your own models + +TrialMatchAI ships with capable default models, but every model in the pipeline +is **swappable** and **fine-tunable**. You can point the pipeline at your own +checkpoints/adapters via config, and train those adapters with the built-in +`trialmatchai-finetune` command. + +| Component | Default | Config key | Fine-tune target | +|-----------|---------|------------|------------------| +| Biomedical NER | `fastino/gliner2-base` | `entity_extraction.model_name` | GLiNER checkpoint | +| Reranker | `google/gemma-2-2b-it` | `model.reranker_adapter_path` | LoRA adapter | +| CoT eligibility | configured CoT model | `model.cot_adapter_path` | LoRA adapter | + +Install the training dependencies: + +```bash +uv sync --extra finetune +``` + +## 1. Using a custom or fine-tuned model (no training) + +Already have a checkpoint or adapter? Just point the config at it — no code +changes needed. + +- **NER:** set `entity_extraction.model_name` to your GLiNER checkpoint (local + path or Hub id) and keep `backend: gliner2` (or `gliner`). +- **Reranker:** set `model.reranker_adapter_path` to your LoRA adapter directory. +- **CoT:** set `model.cot_adapter_path` to your LoRA adapter directory. The vLLM + backend loads it as a `LoRARequest`; the HuggingFace backend loads it with PEFT. + +## 2. Fine-tuning + +### CoT eligibility model (LoRA) + +Train an adapter that improves chain-of-thought eligibility evaluation. + +Data — JSONL, one example per line, either chat or instruct form: + +```json +{"messages": [{"role": "system", "content": "..."}, {"role": "user", "content": "..."}, {"role": "assistant", "content": "{...evaluation JSON...}"}]} +{"instruction": "...", "input": "...", "output": "..."} +``` + +```bash +trialmatchai-finetune cot \ + --base-model microsoft/phi-4 \ + --train-data data/finetune/cot.jsonl \ + --output-dir models/cot-adapter \ + --epochs 2 --lora-rank 32 --lora-alpha 64 +``` + +Then set `model.cot_adapter_path: models/cot-adapter`. + +### Reranker (LoRA, Yes/No) + +The reranker decides whether the patient text contains enough information to +evaluate a criterion. Training teaches the model to emit `Yes`/`No`. + +Data — JSONL: + +```json +{"patient_text": "...", "criterion": "...", "label": "Yes"} +{"patient_text": "...", "criterion": "...", "label": "No"} +``` + +```bash +trialmatchai-finetune reranker \ + --base-model google/gemma-2-2b-it \ + --train-data data/finetune/reranker.jsonl \ + --output-dir models/reranker-adapter +``` + +Then set `model.reranker_adapter_path: models/reranker-adapter`. + +### NER (GLiNER) + +Data — JSONL, character spans (auto-converted to GLiNER token spans) or native: + +```json +{"text": "EGFR exon 19 deletion positive", "ner": [[0, 4, "gene"], [5, 21, "sign_symptom"]]} +{"tokenized_text": ["EGFR", "positive"], "ner": [[0, 0, "gene"]]} +``` + +```bash +trialmatchai-finetune ner \ + --base-model fastino/gliner2-base \ + --train-data data/finetune/ner.jsonl \ + --output-dir models/ner --epochs 3 +``` + +Then set `entity_extraction.model_name: models/ner`. + +## Notes + +- Training prompts reuse the **exact runtime prompts**, so a fine-tuned model + sees the same format at train and inference time. +- LoRA SFT masks the prompt tokens and computes loss only on the completion. +- 4-bit quantized loading is on by default (`--no-4bit` to disable); `bf16` is + default (`--fp16` to switch). See `trialmatchai-finetune --help` + for all flags. +- GLiNER's training API varies by version; if your installed `gliner` exposes a + different interface, adapt `src/trialmatchai/finetuning/ner.py`. From 01b30e8e5efb4032c4b7e785e583221cea4cc44e Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 10:46:36 +0200 Subject: [PATCH 23/64] chore: remove REFACTOR_PLAN.md The audit-driven refactor (PR0-PR9), fine-tuning integration, and README/docs updates are complete and merged; the tracking plan is no longer needed. Co-Authored-By: Claude Opus 4.8 --- REFACTOR_PLAN.md | 106 ----------------------------------------------- 1 file changed, 106 deletions(-) delete mode 100644 REFACTOR_PLAN.md diff --git a/REFACTOR_PLAN.md b/REFACTOR_PLAN.md deleted file mode 100644 index 65a053f2..00000000 --- a/REFACTOR_PLAN.md +++ /dev/null @@ -1,106 +0,0 @@ -# TrialMatchAI Refactor Plan - -Derived from the comprehensive audit (170 findings → 151 confirmed, 8 uncertain, 11 refuted). -Each phase below is an independently shippable PR. Work proceeds on branch `refactor/audit-fixes` -(or per-PR branches off it). - -## Principles -1. **Safety net before surgery** — CI must exercise the ML surface and characterization tests - must lock current behavior before any behavior-changing PR merges. -2. **One PR = one theme**, independently reviewable and revertable. -3. **Behavior-preserving by default**; behavior-changing items are flagged and validated. -4. **Delete before dedup** — remove dead code before refactoring duplicates. -5. **Re-grep every deletion at edit time**, not just from the audit. - -## Resolved decisions -- **Phenopacket pipeline:** `interop/importers/phenopacket.py` + `interop/narrative.py` are canonical. - Delete `matching/phenopacket_processor.py` wholesale (only caller is its own test — verified). -- **`utils/evaluation.py`:** delete (orphaned, no entry point, no test). -- **Delivery:** this plan is tracked here; execution starts with PR0. - -## PR sequence - -| PR | Theme | Risk | Behavior change | Depends on | -|----|-------|------|-----------------|-----------| -| 0 | Safety net: CI ML-extras job + characterization tests + CI wheel-path fix | low | no | — | -| 1 | 🔴 Eligibility scoring contract (C1): exclusion = hard disqualifier | med | **yes** | 0 | -| 2 | 🔴 `models/llm/_common.py` + reranker hardening (C2 + padding/attn/dtype/device) | med | **yes (correctness)** | 0 | -| 3 | Dead-code sweep #1: whole modules (evaluation, embedders, regex tree, phenopacket) | low | no | 0 | -| 4 | Dead-code sweep #2: symbols/params/config/shims | low | no | 0 | -| 5 | OMOP importer: float/sanitized id join + groupby perf | med | **yes (recovers dropped records)** | 0 | -| 6 | Retrieval/indexing: restore fields, NCT sidecar filter, fallback WHERE, create_query | med | **yes (re-index required)** | 0 | -| 7 | Deduplication: BaseTrialProcessor, build_embedder, flatten_text, get_synonyms | med | no | 1,3,4 | -| 8 | Performance: lazy HF model under vLLM, precompute lancedb records | low | no | 2,5 | -| 9 | Hygiene: logging, broad excepts, packaging/deps, 8 uncertain findings | low | no | all | - -Critical path: `0 → {1,2,5,6} → {3,4} → 7 → 8 → 9`. - -## Per-PR detail - -### PR0 — Safety net -- CI: add a Linux job that runs `uv sync --extra entity` and smoke-imports the ML modules - (`entities.recognizers`, `models.embedding.text_embedder`, `models.llm.llm_loader`, - `models.llm.llm_reranker`, `matching.eligibility_reasoning_vllm`). -- CI: fix the installed-smoke wheel path (`ls "$PWD"/dist/...`) so `$WHEEL` survives the `cd`. -- Tests: characterization test for `score_trial` (current behavior) + `xfail` tests encoding the - desired post-PR1 contract (a Violated exclusion hard-disqualifies). PR1 flips xfail→pass. -- Note: OMOP (PR5) and indexing (PR6) characterization tests are added at the start of those PRs, - immediately before their changes. - -### PR1 — Eligibility scoring contract (C1) -- `trial_ranker.score_trial`: score inclusion and exclusion separately; **any `Violated` exclusion - is a hard disqualifier** (ranks below all eligible trials). Remove impossible labels - (`Not Violated`/`Violated` from inclusion, `Met` from exclusion) from both eligibility_reasoning - prompt calls. Document the scoring contract. -- Update `test_score_trial_basic` (currently encodes the buggy averaging) and flip PR0's xfail tests. -- **Behavior change:** ranking order — validate against a labeled trial set. - -### PR2 — LLM `_common.py` + reranker hardening -- New `models/llm/_common.py`: `load_llm_dependencies`, `resolve_cuda_device`, - `build_4bit_quant_config`, `select_attn_impl` (flash-attn probe → `sdpa`). -- Rewrite `llm_reranker.py` on it: device pinning (C2), `padding_side='left'` + pad token, - sdpa fallback, dtype-from-config, `device:int` coercion, honest concurrency. -- Refactor `llm_loader.py` to reuse the helpers. - -### PR3 — Dead-code sweep #1 (whole modules) -Delete (re-grep first): `utils/evaluation.py`, `models/embedding/query_embedder.py`, -`models/embedding/sentence_embedder.py`, `preprocessing/regex/` tree (+ `pyproject` package-data + -`config_loader` whitelist), `matching/phenopacket_processor.py` (+ its test). Resolves the -phenopacket ontology bug, dead summarizer, always-true guards, `truncate` typo, and duplicate -pipeline by deletion. - -### PR4 — Dead-code sweep #2 (symbols/params/config) -Remove `recognizers.with_schema_threshold`, `types.to_index_entity`, `retry.with_retries`, -`interop` `EvidenceSpan`/`Provenance.raw_text_span`/`all_facts`, `narrative` `style='audit'`, -`CompatibilityEntityAnnotator`, `annotator` `retries`/`delay`, dead settings (`cot`, -`LLM_reranker`, `TokenizerSettings`, `entity_extraction.threshold`, `max_text_score`, -`rerank_criteria.queries`). - -### PR5 — OMOP importer -Join on raw `person_id`; normalize `'1.0'→'1'`; group child tables by `person_id` once (kills N+1); -replace `iterrows` with `itertuples`/indexed dict. Test: null `person_id` in a child table no longer -drops records. - -### PR6 — Retrieval/indexing correctness -Restore `detailed_description` + `official_title` in `prepare_trial_document`; filter -`load_trial_data` to `NCT*` (or trials subdir); thread `where` into `_scan_rows` fallback; resolve -`create_query` dead keys + age semantics. **Requires LanceDB trial index rebuild after merge.** - -### PR7 — Deduplication -`BaseTrialProcessor` with abstract `_generate_batch` (HF + vLLM override only that); `build_embedder(cfg)` -replacing 4 copy-pasted blocks; one canonical `flatten_text`/`clean_text`; shared `get_synonyms`. - -### PR8 — Performance -Lazy-load HF CoT model only when `cot_backend != 'vllm'`; precompute -`build_trial_record`/`build_criteria_record` instead of per-row at query time. - -### PR9 — Hygiene & uncertain triage -Centralize logging (no import-time `basicConfig`); replace broad bare-`except` in `import_patient` and -pass the embedder so semantic linking isn't silently disabled; drop 5 unused deps, dedupe -`torch`/`transformers` pins via shared base extra, gitignore `egg-info`/`__pycache__`/`dist`; -investigate & resolve the 8 uncertain findings (LanceDB status/age/sex push-down, vLLM sampling under -greedy, unused `query_vector`). - -## Behavior-change register (validate, don't just unit-test) -PRs **1, 5, 6** change pipeline outputs. Diff before/after on a fixed patient+trial set: -ranking order (PR1), patient record counts (PR5), retrieval recall after re-index (PR6). From a337868fd35cd59a7e60812d8691d0f1e2ea77d2 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 10:47:02 +0200 Subject: [PATCH 24/64] ci: drop refactor/audit-fixes from push triggers (branch merged & deleted) Co-Authored-By: Claude Opus 4.8 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 51c446db..ed1af554 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,7 +2,7 @@ name: CI on: push: - branches: [main, dev, deployment-readiness-audit, refactor/audit-fixes] + branches: [main, dev, deployment-readiness-audit] pull_request: branches: [main, dev] workflow_dispatch: From 6b197b85c5a46b6d21e885110aef161367bf8456 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 10:48:07 +0200 Subject: [PATCH 25/64] ci: make ml-extras-smoke non-blocking It exercises heavy third-party deps (torch/gliner) on a Linux runner that we don't gate releases on; keep it as a signal without failing the workflow. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ed1af554..d405b4f6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,6 +75,10 @@ jobs: # Installs the optional ML extras (CPU-only) and imports the local-model # surface that the default job never touches, so a broken import or wrong # transformers/gliner API call is caught instead of shipping silently. + # Non-blocking: it exercises heavy third-party deps (torch/gliner) whose + # availability we don't gate releases on; failures show up as a signal + # without failing the workflow. + continue-on-error: true runs-on: ubuntu-latest steps: From f3753890871b040b5b91fd5f7583bc82f3ab7204 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 10:59:34 +0200 Subject: [PATCH 26/64] fix(finetune): correct GLiNER2 training API + QLoRA best practices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Research-driven corrections to the fine-tuning integration: - NER now uses the real GLiNER2 stack (GLiNER2Trainer / TrainingConfig / InputExample with entities={label: [surface forms]}), not the gliner-v1 token-classification API. entity_descriptions are back-filled from the entity schema so a fine-tuned model keeps the runtime label semantics. Saves a LoRA adapter (output_dir/final) or full checkpoint (output_dir/best); both load via entity_extraction.model_name. CLI exposes encoder-lr/task-lr/lora/schema-path. - data: NER converter emits GLiNER2 surface-form schema (accepts {entities}, char spans, or native {input,output}) instead of token spans. - _sft: add prepare_model_for_kbit_training + gradient checkpointing + a paged 8-bit optimizer + cosine schedule — required for stable, memory-efficient 4-bit (QLoRA) training of the reranker and CoT adapters. - docs/finetuning.md updated to the GLiNER2 data format and flags. Sources: GLiNER2 training + LoRA tutorials (fastino-ai/GLiNER2); QLoRA/PEFT fine-tuning best practices. --- docs/finetuning.md | 24 ++-- src/trialmatchai/finetuning/_sft.py | 17 ++- src/trialmatchai/finetuning/cli.py | 24 +++- src/trialmatchai/finetuning/config.py | 6 + src/trialmatchai/finetuning/data.py | 86 ++++++------- src/trialmatchai/finetuning/ner.py | 169 ++++++++++++++++++-------- tests/test_finetuning.py | 28 +++-- 7 files changed, 232 insertions(+), 122 deletions(-) diff --git a/docs/finetuning.md b/docs/finetuning.md index a00e0fec..8ce253f6 100644 --- a/docs/finetuning.md +++ b/docs/finetuning.md @@ -72,23 +72,33 @@ trialmatchai-finetune reranker \ Then set `model.reranker_adapter_path: models/reranker-adapter`. -### NER (GLiNER) +### NER (GLiNER2) -Data — JSONL, character spans (auto-converted to GLiNER token spans) or native: +Uses the native GLiNER2 training stack (`GLiNER2Trainer`). GLiNER2 NER data maps +entity-type labels to **surface forms**. Three input shapes are accepted: ```json -{"text": "EGFR exon 19 deletion positive", "ner": [[0, 4, "gene"], [5, 21, "sign_symptom"]]} -{"tokenized_text": ["EGFR", "positive"], "ner": [[0, 0, "gene"]]} +{"text": "EGFR exon 19 deletion in NSCLC", "entities": {"gene": ["EGFR"], "disease": ["NSCLC"]}} +{"text": "EGFR positive", "ner": [[0, 4, "gene"]]} +{"input": "EGFR positive", "output": {"entities": {"gene": ["EGFR"]}}} ``` +`entity_descriptions` are back-filled from your entity schema (`--schema-path`) +so the fine-tuned model shares the runtime label semantics. + ```bash trialmatchai-finetune ner \ - --base-model fastino/gliner2-base \ + --base-model fastino/gliner2-base-v1 \ --train-data data/finetune/ner.jsonl \ - --output-dir models/ner --epochs 3 + --output-dir models/ner \ + --schema-path src/trialmatchai/entity_schemas/trialmatchai.yaml \ + --epochs 10 # LoRA by default; add --no-lora for a full fine-tune ``` -Then set `entity_extraction.model_name: models/ner`. +- LoRA run saves the adapter to `models/ner/final`; a full run saves + `models/ner/best`. Set `entity_extraction.model_name` to that path. +- Encoder vs. task-head learning rates are tuned separately + (`--encoder-lr 1e-5 --task-lr 5e-4`, GLiNER2 defaults). ## Notes diff --git a/src/trialmatchai/finetuning/_sft.py b/src/trialmatchai/finetuning/_sft.py index 355be793..96c607c3 100644 --- a/src/trialmatchai/finetuning/_sft.py +++ b/src/trialmatchai/finetuning/_sft.py @@ -19,7 +19,12 @@ def _load_train_deps(): try: import torch from datasets import Dataset - from peft import LoraConfig, TaskType, get_peft_model + from peft import ( + LoraConfig, + TaskType, + get_peft_model, + prepare_model_for_kbit_training, + ) from transformers import ( AutoModelForCausalLM, AutoTokenizer, @@ -43,6 +48,7 @@ def _load_train_deps(): "BitsAndBytesConfig": BitsAndBytesConfig, "DataCollatorForSeq2Seq": DataCollatorForSeq2Seq, "Trainer": Trainer, + "prepare_model_for_kbit_training": prepare_model_for_kbit_training, } @@ -102,7 +108,14 @@ def run_sft(config: FinetuneConfig, message_lists: List[List[Dict[str, str]]]) - trust_remote_code=config.trust_remote_code, token=config.hf_token, ) - model.config.use_cache = False + model.config.use_cache = False # required with gradient checkpointing + + if config.load_in_4bit: + # Freeze base weights, cast layer norms to fp32, enable gradient + # checkpointing — required for stable 4-bit (QLoRA) training. + model = deps["prepare_model_for_kbit_training"]( + model, use_gradient_checkpointing=True + ) peft_config = deps["LoraConfig"]( task_type=deps["TaskType"].CAUSAL_LM, diff --git a/src/trialmatchai/finetuning/cli.py b/src/trialmatchai/finetuning/cli.py index 3fea874c..4284d81d 100644 --- a/src/trialmatchai/finetuning/cli.py +++ b/src/trialmatchai/finetuning/cli.py @@ -76,14 +76,20 @@ def build_parser() -> argparse.ArgumentParser: reranker = sub.add_parser("reranker", help="LoRA SFT for the reranker (Yes/No)") _add_common_lora_args(reranker) - ner = sub.add_parser("ner", help="Fine-tune the GLiNER NER model") - ner.add_argument("--base-model", required=True) + ner = sub.add_parser("ner", help="Fine-tune the GLiNER2 NER model") + ner.add_argument("--base-model", default="fastino/gliner2-base-v1") ner.add_argument("--train-data", required=True) ner.add_argument("--output-dir", required=True) ner.add_argument("--eval-data", default=None) - ner.add_argument("--epochs", type=float, default=3.0) - ner.add_argument("--learning-rate", type=float, default=5e-6) + ner.add_argument("--epochs", type=float, default=10.0) ner.add_argument("--batch-size", type=int, default=8) + ner.add_argument("--encoder-lr", type=float, default=1e-5) + ner.add_argument("--task-lr", type=float, default=5e-4) + ner.add_argument("--lora-r", type=int, default=8) + ner.add_argument("--lora-alpha", type=float, default=16.0) + ner.add_argument("--no-lora", action="store_true", help="Full fine-tune instead of LoRA") + ner.add_argument("--fp32", action="store_true", help="Disable fp16 mixed precision") + ner.add_argument("--schema-path", default=None, help="Entity schema for label descriptions") ner.add_argument("--max-examples", type=int, default=None) return parser @@ -104,13 +110,19 @@ def main(argv: Optional[Sequence[str]] = None) -> int: finetune_ner( NERFinetuneConfig( - base_model=args.base_model, train_data=args.train_data, output_dir=args.output_dir, + base_model=args.base_model, eval_data=args.eval_data, epochs=args.epochs, - learning_rate=args.learning_rate, batch_size=args.batch_size, + encoder_lr=args.encoder_lr, + task_lr=args.task_lr, + use_lora=not args.no_lora, + lora_r=args.lora_r, + lora_alpha=args.lora_alpha, + fp16=not args.fp32, + schema_path=args.schema_path, max_examples=args.max_examples, ) ) diff --git a/src/trialmatchai/finetuning/config.py b/src/trialmatchai/finetuning/config.py index 01042db5..f0bd784f 100644 --- a/src/trialmatchai/finetuning/config.py +++ b/src/trialmatchai/finetuning/config.py @@ -74,4 +74,10 @@ def to_training_arguments(self): seed=self.seed, report_to=[], ddp_find_unused_parameters=False, + # QLoRA memory/throughput best practices: gradient checkpointing and + # a paged optimizer keep large models on a single GPU. + gradient_checkpointing=True, + gradient_checkpointing_kwargs={"use_reentrant": False}, + optim="paged_adamw_8bit" if self.load_in_4bit else "adamw_torch", + lr_scheduler_type="cosine", ) diff --git a/src/trialmatchai/finetuning/data.py b/src/trialmatchai/finetuning/data.py index 7e22bc62..c01689da 100644 --- a/src/trialmatchai/finetuning/data.py +++ b/src/trialmatchai/finetuning/data.py @@ -7,15 +7,15 @@ - CoT: {"messages": [{"role","content"}, ...]} or {"instruction": str, "input": str, "output": str} - Reranker: {"patient_text": str, "criterion": str, "label": "Yes"|"No"} -- NER: {"text": str, "ner": [[start_char, end_char, "label"], ...]} - or GLiNER-native {"tokenized_text": [...], "ner": [[s_tok, e_tok, label]]} +- NER (GLiNER2): {"text": str, "entities": {"label": ["surface form", ...]}} + or char-span {"text": str, "ner": [[start_char, end_char, "label"], ...]} + or native {"input": str, "output": {"entities": {...}, "entity_descriptions": {...}}} """ from __future__ import annotations import json -import re -from typing import Any, Dict, Iterator, List, Optional +from typing import Any, Dict, List, Optional def read_jsonl(path: str, max_examples: Optional[int] = None) -> List[Dict[str, Any]]: @@ -67,50 +67,44 @@ def reranker_row_to_messages(row: Dict[str, Any]) -> tuple[List[Dict[str, str]], # --------------------------------------------------------------------------- NER -_WORD_RE = re.compile(r"\w+|[^\w\s]") +def ner_row_to_entities(row: Dict[str, Any]) -> Dict[str, Any]: + """Normalize an NER row to GLiNER2's surface-form schema. -def _tokenize_with_spans(text: str) -> tuple[List[str], List[tuple[int, int]]]: - tokens: List[str] = [] - spans: List[tuple[int, int]] = [] - for match in _WORD_RE.finditer(text): - tokens.append(match.group()) - spans.append((match.start(), match.end())) - return tokens, spans - - -def ner_row_to_gliner(row: Dict[str, Any]) -> Dict[str, Any]: - """Normalize an NER row to GLiNER's training format. - - Accepts GLiNER-native rows unchanged; converts char-span rows by mapping - character offsets onto whitespace/punctuation tokens. + Returns ``{"text", "entities": {label: [surface forms]}, "entity_descriptions"}``. + Accepts the native GLiNER2 form, a simple ``entities`` mapping, or character + spans (which are sliced from the text into surface forms). """ - if "tokenized_text" in row: - return {"tokenized_text": row["tokenized_text"], "ner": row.get("ner", [])} + # Native GLiNER2 JSONL: {"input": ..., "output": {"entities": ..., ...}} + if "input" in row and "output" in row: + output = row.get("output") or {} + return { + "text": str(row["input"]), + "entities": dict(output.get("entities") or {}), + "entity_descriptions": output.get("entity_descriptions"), + } text = str(row.get("text", "")) - raw_spans = row.get("ner") - if raw_spans is None: - raw_spans = [ - [ent["start"], ent["end"], ent["label"]] for ent in row.get("entities", []) - ] - - tokens, spans = _tokenize_with_spans(text) - ner: List[List[Any]] = [] - for start_char, end_char, label in raw_spans: - start_tok = next( - (i for i, (s, e) in enumerate(spans) if s <= start_char < e), None - ) - end_tok = next( - (i for i, (s, e) in enumerate(spans) if s < end_char <= e), None - ) - if start_tok is not None and end_tok is not None and end_tok >= start_tok: - ner.append([start_tok, end_tok, label]) - return {"tokenized_text": tokens, "ner": ner} - - -def iter_gliner_examples( - path: str, max_examples: Optional[int] = None -) -> Iterator[Dict[str, Any]]: - for row in read_jsonl(path, max_examples): - yield ner_row_to_gliner(row) + + # Already a {label: [forms]} mapping. + if isinstance(row.get("entities"), dict): + return { + "text": text, + "entities": {k: list(v) for k, v in row["entities"].items()}, + "entity_descriptions": row.get("entity_descriptions"), + } + + # Character spans -> surface forms grouped by label. + entities: Dict[str, List[str]] = {} + for span in row.get("ner") or []: + start_char, end_char, label = span[0], span[1], span[2] + surface = text[start_char:end_char].strip() + if surface: + entities.setdefault(label, []) + if surface not in entities[label]: + entities[label].append(surface) + return { + "text": text, + "entities": entities, + "entity_descriptions": row.get("entity_descriptions"), + } diff --git a/src/trialmatchai/finetuning/ner.py b/src/trialmatchai/finetuning/ner.py index b2fdfdf6..6285ff4c 100644 --- a/src/trialmatchai/finetuning/ner.py +++ b/src/trialmatchai/finetuning/ner.py @@ -1,15 +1,23 @@ -"""Fine-tune the biomedical NER model (GLiNER). +"""Fine-tune the biomedical NER model (GLiNER2). -Produces a GLiNER checkpoint that plugs into the pipeline via -``entity_extraction.model_name`` (and backend "gliner"/"gliner2"). +Uses the native GLiNER2 training stack (GLiNER2Trainer / TrainingConfig / +InputExample). Produces either a full checkpoint (``/best``) or a +LoRA adapter (``/final``) that plugs into the pipeline via +``entity_extraction.model_name`` with backend "gliner2". + +GLiNER2 NER data maps entity-type labels to surface forms, e.g. +``{"text": "...", "entities": {"gene": ["EGFR"], "disease": ["NSCLC"]}}``. +Character-span rows (``{"text", "ner": [[start, end, "label"]]}``) are converted +automatically. ``entity_descriptions`` is back-filled from the entity schema so +the fine-tuned model uses the same label semantics as inference. """ from __future__ import annotations -from dataclasses import dataclass, field -from typing import List, Optional +from dataclasses import dataclass +from typing import Dict, Optional -from trialmatchai.finetuning.data import iter_gliner_examples +from trialmatchai.finetuning.data import ner_row_to_entities, read_jsonl from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -17,74 +25,131 @@ @dataclass class NERFinetuneConfig: - base_model: str train_data: str output_dir: str + base_model: str = "fastino/gliner2-base-v1" eval_data: Optional[str] = None - epochs: float = 3.0 - learning_rate: float = 5e-6 + epochs: float = 10.0 batch_size: int = 8 - weight_decay: float = 0.01 + encoder_lr: float = 1e-5 + task_lr: float = 5e-4 warmup_ratio: float = 0.1 + use_lora: bool = True + lora_r: int = 8 + lora_alpha: float = 16.0 + fp16: bool = True max_examples: Optional[int] = None - labels: List[str] = field(default_factory=list) + schema_path: Optional[str] = None seed: int = 42 +def _schema_descriptions(schema_path: Optional[str]) -> Dict[str, str]: + """Map entity-group label -> description from the entity schema, if available.""" + try: + from trialmatchai.entities.schemas import load_entity_schemas + + schemas = load_entity_schemas(schema_path) + except Exception: # pragma: no cover - schema optional during training + return {} + descriptions: Dict[str, str] = {} + for schema in schemas: + if schema.description: + descriptions[schema.entity_group] = schema.description + descriptions[schema.label] = schema.description + return descriptions + + +def _build_examples(config: "NERFinetuneConfig", path: str, descriptions: Dict[str, str]): + from gliner2.training.data import InputExample + + examples = [] + for row in read_jsonl(path, config.max_examples): + normalized = ner_row_to_entities(row) + entities = normalized["entities"] + if not entities: + continue + descs = dict(normalized.get("entity_descriptions") or {}) + for label in entities: + if label not in descs and label in descriptions: + descs[label] = descriptions[label] + examples.append( + InputExample( + text=normalized["text"], + entities=entities, + entity_descriptions=descs or None, + ) + ) + return examples + + def finetune_ner(config: NERFinetuneConfig) -> str: - """Fine-tune a GLiNER model on span-annotated data and save it.""" try: - from gliner import GLiNER - from gliner.data_processing.collator import DataCollator - from gliner.training import Trainer, TrainingArguments + from gliner2 import GLiNER2 + from gliner2.training.data import TrainingDataset + from gliner2.training.trainer import GLiNER2Trainer, TrainingConfig except Exception as exc: # pragma: no cover - exercised only without the extra raise RuntimeError( - "GLiNER fine-tuning requires the optional `finetune` dependencies " - "(`uv sync --extra finetune`). If your installed gliner exposes a " - "different training API, adapt finetuning/ner.py to it." + "GLiNER2 fine-tuning requires the optional `finetune` dependencies " + "(`uv sync --extra finetune`)." ) from exc - data = list(iter_gliner_examples(config.train_data, config.max_examples)) - if not data: + descriptions = _schema_descriptions(config.schema_path) + train_examples = _build_examples(config, config.train_data, descriptions) + if not train_examples: raise ValueError("No training examples provided.") - eval_data = ( - list(iter_gliner_examples(config.eval_data)) if config.eval_data else None - ) - model = GLiNER.from_pretrained(config.base_model) - model.set_sampling_params( - max_types=25, shuffle_types=True, random_drop=True, max_neg_type_ratio=1 - ) + train_dataset = TrainingDataset(train_examples) + train_dataset.validate(strict=False, raise_on_error=False) + train_dataset.print_stats() - collator = DataCollator( - model.config, data_processor=model.data_processor, prepare_labels=True - ) + if config.eval_data: + train_data: object = train_dataset + val_data: object = TrainingDataset( + _build_examples(config, config.eval_data, descriptions) + ) + else: + train_data, val_data, _ = train_dataset.split( + train_ratio=0.9, val_ratio=0.1, test_ratio=0.0, shuffle=True, seed=config.seed + ) - args = TrainingArguments( + training_config = TrainingConfig( output_dir=config.output_dir, - num_train_epochs=config.epochs, - learning_rate=config.learning_rate, - per_device_train_batch_size=config.batch_size, - per_device_eval_batch_size=config.batch_size, - weight_decay=config.weight_decay, + experiment_name="trialmatchai_ner", + num_epochs=config.epochs, + batch_size=config.batch_size, + encoder_lr=config.encoder_lr, + task_lr=config.task_lr, warmup_ratio=config.warmup_ratio, - seed=config.seed, - report_to=[], - evaluation_strategy="epoch" if eval_data else "no", - save_strategy="epoch", + scheduler_type="cosine", + fp16=config.fp16, + eval_strategy="epoch", + save_best=True, + early_stopping=True, + early_stopping_patience=3, + use_lora=config.use_lora, + lora_r=config.lora_r, + lora_alpha=config.lora_alpha, + lora_target_modules=["encoder"], + save_adapter_only=config.use_lora, ) - trainer = Trainer( - model=model, - args=args, - train_dataset=data, - eval_dataset=eval_data, - data_collator=collator, - tokenizer=model.data_processor.transformer_tokenizer, + model = GLiNER2.from_pretrained(config.base_model) + trainer = GLiNER2Trainer(model, training_config) + logger.info("Starting GLiNER2 fine-tuning on %d examples...", len(train_examples)) + trainer.train(train_data=train_data, val_data=val_data) + + result_dir = ( + f"{config.output_dir.rstrip('/')}/final" + if config.use_lora + else f"{config.output_dir.rstrip('/')}/best" + ) + logger.info( + "Saved %s to %s. Set entity_extraction.model_name to this path " + "(LoRA adapters load via GLiNER2.load_adapter).", + "LoRA adapter" if config.use_lora else "fine-tuned model", + result_dir, ) + return result_dir + - logger.info("Starting GLiNER fine-tuning on %d examples...", len(data)) - trainer.train() - model.save_pretrained(config.output_dir) - logger.info("Saved fine-tuned GLiNER model to %s", config.output_dir) - return config.output_dir +__all__ = ["NERFinetuneConfig", "finetune_ner"] diff --git a/tests/test_finetuning.py b/tests/test_finetuning.py index cf65470d..7843403a 100644 --- a/tests/test_finetuning.py +++ b/tests/test_finetuning.py @@ -10,7 +10,7 @@ from trialmatchai.finetuning.config import FinetuneConfig from trialmatchai.finetuning.data import ( cot_row_to_messages, - ner_row_to_gliner, + ner_row_to_entities, read_jsonl, reranker_row_to_messages, ) @@ -37,17 +37,27 @@ def test_reranker_row_messages_and_label(): assert any("Statement B: C" in m["content"] for m in messages) -def test_ner_char_spans_convert_to_token_indices(): - gliner = ner_row_to_gliner( - {"text": "EGFR mutation positive", "ner": [[0, 4, "gene"]]} +def test_ner_char_spans_convert_to_surface_forms(): + out = ner_row_to_entities( + {"text": "EGFR mutation in NSCLC", "ner": [[0, 4, "gene"], [17, 22, "disease"]]} ) - assert gliner["tokenized_text"][0] == "EGFR" - assert gliner["ner"] == [[0, 0, "gene"]] + assert out["text"] == "EGFR mutation in NSCLC" + assert out["entities"] == {"gene": ["EGFR"], "disease": ["NSCLC"]} -def test_ner_native_format_passthrough(): - row = {"tokenized_text": ["A", "B"], "ner": [[0, 1, "x"]]} - assert ner_row_to_gliner(row) == row +def test_ner_entities_mapping_passthrough(): + out = ner_row_to_entities( + {"text": "EGFR positive", "entities": {"gene": ["EGFR"]}} + ) + assert out["entities"] == {"gene": ["EGFR"]} + + +def test_ner_native_gliner2_format(): + out = ner_row_to_entities( + {"input": "EGFR positive", "output": {"entities": {"gene": ["EGFR"]}}} + ) + assert out["text"] == "EGFR positive" + assert out["entities"] == {"gene": ["EGFR"]} def test_read_jsonl_respects_max(tmp_path): From de588d9cc65f605af00f28cb2042089753d27254 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 11:13:34 +0200 Subject: [PATCH 27/64] refactor: vLLM is the only LLM backend; adapters served natively Per direction: every LLM runs on vLLM (no HuggingFace backend), and fine-tuned LoRA adapters are served everywhere via vLLM's LoRARequest. Removed the HuggingFace LLM path entirely: - delete matching/eligibility_reasoning.py (HF CoT processor), models/llm/llm_loader.py, models/llm/_common.py, and tests/test_llm_common.py. - run_rag_processing always builds a vLLM engine; main_pipeline no longer loads or half()s an HF model. Drop the cot_backend config switch (settings, config.json, env map) and make preflight's vLLM/GPU check unconditional under require_models. Reranker now runs on vLLM: - rewrite LLMReranker to score (patient, criterion) pairs by constraining generation to the Yes/No tokens (allowed_token_ids) and reading their logprobs; a configured reranker_adapter_path is served via LoRARequest. create_messages is a @staticmethod (reused by the fine-tuner without loading a model). Adapters end to end: - CoT and reranker both load their LoRA adapters through vLLM (cot_adapter_path / reranker_adapter_path); NER LoRA loads via GLiNER2.load_adapter. - new `trialmatchai-finetune merge` to merge a LoRA adapter into the base model for users who prefer a standalone checkpoint over base+adapter. The embedder stays on transformers (it is an embedding model, not a generative LLM). Docs/README updated; CI import smoke adjusted to the vLLM modules. --- .github/workflows/ci.yml | 3 +- README.md | 6 +- docs/finetuning.md | 21 +- src/trialmatchai/config/config.json | 1 - src/trialmatchai/config/settings.py | 9 - src/trialmatchai/finetuning/cli.py | 17 ++ src/trialmatchai/finetuning/merge.py | 45 ++++ src/trialmatchai/main.py | 95 +++------ .../matching/eligibility_reasoning.py | 162 --------------- src/trialmatchai/models/llm/_common.py | 162 --------------- src/trialmatchai/models/llm/llm_loader.py | 89 -------- src/trialmatchai/models/llm/llm_reranker.py | 194 +++++++++--------- src/trialmatchai/services/preflight.py | 31 ++- tests/test_deployment_readiness.py | 6 +- tests/test_finetuning.py | 5 + tests/test_llm_common.py | 104 ---------- tests/test_preflight_and_indexer.py | 7 +- 17 files changed, 222 insertions(+), 735 deletions(-) create mode 100644 src/trialmatchai/finetuning/merge.py delete mode 100644 src/trialmatchai/matching/eligibility_reasoning.py delete mode 100644 src/trialmatchai/models/llm/_common.py delete mode 100644 src/trialmatchai/models/llm/llm_loader.py delete mode 100644 tests/test_llm_common.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d405b4f6..b2af2fc5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -111,9 +111,8 @@ jobs: modules = [ "trialmatchai.entities.recognizers", "trialmatchai.models.embedding.text_embedder", - "trialmatchai.models.llm.llm_loader", "trialmatchai.models.llm.llm_reranker", - "trialmatchai.matching.eligibility_reasoning", + "trialmatchai.models.llm.vllm_loader", "trialmatchai.matching.eligibility_reasoning_vllm", "trialmatchai.finetuning.cot", "trialmatchai.finetuning.reranker", diff --git a/README.md b/README.md index 849c31f4..6b048c68 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,10 @@ CoT eligibility reasoning (per-criterion Met / Not Met / Violated …) Ranking ──► ranked trials + per-criterion explanations (results/) ``` -Every model stage — **NER, reranker, and CoT** — is swappable and fine-tunable -(see [Bring your own models](#bring-your-own-models)). +The generative LLM stages — **reranker and CoT** — run on **vLLM** (the only LLM +backend), which serves fine-tuned **LoRA adapters** natively. Every model stage — +NER, reranker, and CoT — is swappable and fine-tunable (see +[Bring your own models](#bring-your-own-models)). ## Requirements diff --git a/docs/finetuning.md b/docs/finetuning.md index 8ce253f6..295e9797 100644 --- a/docs/finetuning.md +++ b/docs/finetuning.md @@ -22,11 +22,24 @@ uv sync --extra finetune Already have a checkpoint or adapter? Just point the config at it — no code changes needed. -- **NER:** set `entity_extraction.model_name` to your GLiNER checkpoint (local - path or Hub id) and keep `backend: gliner2` (or `gliner`). +- **NER:** set `entity_extraction.model_name` to your GLiNER2 checkpoint (local + path or Hub id), backend `gliner2`. LoRA NER adapters load via `GLiNER2.load_adapter`. - **Reranker:** set `model.reranker_adapter_path` to your LoRA adapter directory. -- **CoT:** set `model.cot_adapter_path` to your LoRA adapter directory. The vLLM - backend loads it as a `LoRARequest`; the HuggingFace backend loads it with PEFT. +- **CoT:** set `model.cot_adapter_path` to your LoRA adapter directory. + +The reranker and CoT both run on **vLLM (the only LLM backend)**, which serves +the LoRA adapter natively via `LoRARequest` — no merge step required. If you +prefer a single self-contained model instead of base + adapter, merge them: + +```bash +trialmatchai-finetune merge \ + --base-model google/gemma-2-2b-it \ + --adapter models/reranker-adapter \ + --output-dir models/reranker-merged +``` + +Then point the config at the merged directory (`reranker_model_path` / +`cot model`) and leave the adapter path empty. ## 2. Fine-tuning diff --git a/src/trialmatchai/config/config.json b/src/trialmatchai/config/config.json index f137a097..5ac0a77f 100644 --- a/src/trialmatchai/config/config.json +++ b/src/trialmatchai/config/config.json @@ -96,7 +96,6 @@ "max_trials_second_level": 100 }, "use_cot_reasoning": true, - "cot_backend": "vllm", "rag": { "batch_size": 4, "max_trials_rag": 20 diff --git a/src/trialmatchai/config/settings.py b/src/trialmatchai/config/settings.py index 6dd638b0..04f590aa 100644 --- a/src/trialmatchai/config/settings.py +++ b/src/trialmatchai/config/settings.py @@ -165,17 +165,9 @@ class TrialMatchSettings(BaseModel): LLM_reranker: LLMRerankerSettings search: SearchSettings use_cot_reasoning: bool = True - cot_backend: str = "vllm" rag: RagSettings vllm: VllmSettings - @field_validator("cot_backend") - @classmethod - def validate_cot_backend(cls, value: str) -> str: - if value not in {"default", "vllm"}: - raise ValueError("cot_backend must be 'default' or 'vllm'") - return value - def to_dict(self) -> Dict[str, Any]: return self.model_dump(by_alias=True) @@ -216,7 +208,6 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "model", "reranker_adapter_path", ), - "TRIALMATCHAI_COT_BACKEND": ("cot_backend",), "TRIALMATCHAI_ENTITY_BACKEND": ("entity_extraction", "backend"), "TRIALMATCHAI_ENTITY_MODEL_NAME": ("entity_extraction", "model_name"), "TRIALMATCHAI_ENTITY_FALLBACK_MODEL_NAME": ( diff --git a/src/trialmatchai/finetuning/cli.py b/src/trialmatchai/finetuning/cli.py index 4284d81d..31914b9b 100644 --- a/src/trialmatchai/finetuning/cli.py +++ b/src/trialmatchai/finetuning/cli.py @@ -76,6 +76,14 @@ def build_parser() -> argparse.ArgumentParser: reranker = sub.add_parser("reranker", help="LoRA SFT for the reranker (Yes/No)") _add_common_lora_args(reranker) + merge = sub.add_parser( + "merge", help="Merge a LoRA adapter into its base model (standalone checkpoint)" + ) + merge.add_argument("--base-model", required=True) + merge.add_argument("--adapter", required=True) + merge.add_argument("--output-dir", required=True) + merge.add_argument("--trust-remote-code", action="store_true") + ner = sub.add_parser("ner", help="Fine-tune the GLiNER2 NER model") ner.add_argument("--base-model", default="fastino/gliner2-base-v1") ner.add_argument("--train-data", required=True) @@ -105,6 +113,15 @@ def main(argv: Optional[Sequence[str]] = None) -> int: from trialmatchai.finetuning.reranker import finetune_reranker finetune_reranker(_lora_config_from_args(args)) + elif args.component == "merge": + from trialmatchai.finetuning.merge import merge_adapter + + merge_adapter( + base_model=args.base_model, + adapter_path=args.adapter, + output_dir=args.output_dir, + trust_remote_code=args.trust_remote_code, + ) elif args.component == "ner": from trialmatchai.finetuning.ner import NERFinetuneConfig, finetune_ner diff --git a/src/trialmatchai/finetuning/merge.py b/src/trialmatchai/finetuning/merge.py new file mode 100644 index 00000000..2377727f --- /dev/null +++ b/src/trialmatchai/finetuning/merge.py @@ -0,0 +1,45 @@ +"""Merge a LoRA adapter into its base model to produce a standalone checkpoint. + +vLLM serves LoRA adapters natively (via LoRARequest), so merging is optional. +Use it when you prefer a single self-contained model directory over base+adapter. +""" + +from __future__ import annotations + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def merge_adapter( + base_model: str, + adapter_path: str, + output_dir: str, + *, + trust_remote_code: bool = False, +) -> str: + """Load base + LoRA adapter, merge weights, and save a full model to output_dir.""" + try: + import torch + from peft import PeftModel + from transformers import AutoModelForCausalLM, AutoTokenizer + except Exception as exc: # pragma: no cover - exercised only without the extra + raise RuntimeError( + "Merging requires the optional `finetune` dependencies " + "(`uv sync --extra finetune`)." + ) from exc + + logger.info("Loading base model %s ...", base_model) + base = AutoModelForCausalLM.from_pretrained( + base_model, + torch_dtype=torch.bfloat16, + trust_remote_code=trust_remote_code, + ) + logger.info("Applying and merging adapter %s ...", adapter_path) + merged = PeftModel.from_pretrained(base, adapter_path).merge_and_unload() + merged.save_pretrained(output_dir) + AutoTokenizer.from_pretrained(base_model, trust_remote_code=trust_remote_code).save_pretrained( + output_dir + ) + logger.info("Saved merged model to %s", output_dir) + return output_dir diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index f8011abd..6c2104bb 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -5,7 +5,6 @@ from trialmatchai.config.config_loader import load_config from trialmatchai.entities import build_entity_annotator -from trialmatchai.matching.eligibility_reasoning import BatchTrialProcessor from trialmatchai.matching.trial_ranker import ( load_trial_data, rank_trials, @@ -144,8 +143,6 @@ def run_rag_processing( output_folder: str, top_trials_file: str, patient_info: Dict, - model, - tokenizer, config: Dict, ): top_trials = read_text_file(top_trials_file) @@ -159,52 +156,28 @@ def run_rag_processing( logger.error("No patient profile available for RAG processing.") return - # Check if vLLM backend is configured - cot_backend = config.get("cot_backend", "default") - use_vllm = cot_backend == "vllm" + # vLLM is the only LLM backend. A configured cot_adapter_path is served as a + # LoRA adapter (LoRARequest) by the engine loader. + from trialmatchai.matching.eligibility_reasoning_vllm import BatchTrialProcessorVLLM + from trialmatchai.models.llm.vllm_loader import load_vllm_engine - if use_vllm: - logger.info("Using vLLM backend for CoT reasoning") - from trialmatchai.matching.eligibility_reasoning_vllm import ( - BatchTrialProcessorVLLM, - ) - from trialmatchai.models.llm.vllm_loader import load_vllm_engine - - # Load vLLM configuration - vllm_cfg = config.get("vllm", {}) - - # Load vLLM engine - vllm_engine, vllm_tokenizer, lora_request = load_vllm_engine( - model_config=config.get("model", {}), - vllm_cfg=vllm_cfg, - ) - - # Create vLLM processor - rag_processor = BatchTrialProcessorVLLM( - llm=vllm_engine, # type: ignore - tokenizer=vllm_tokenizer, - batch_size=vllm_cfg.get("batch_size", 16), - use_cot=config.get("use_cot_reasoning", True), - max_new_tokens=vllm_cfg.get("max_new_tokens", 5000), - temperature=vllm_cfg.get("temperature", 0.0), - top_p=vllm_cfg.get("top_p", 1.0), - seed=vllm_cfg.get("seed", 1234), - length_bucket=vllm_cfg.get("length_bucket", True), - lora_request=lora_request, - ) - else: - logger.info("Using default (HuggingFace) backend for CoT reasoning") - - batch_size = min(config["rag"]["batch_size"] * 2, 8) - if tokenizer.pad_token is None: - tokenizer.pad_token = tokenizer.eos_token - - rag_processor = BatchTrialProcessor( - model, - tokenizer, - device=config["global"]["device"], - batch_size=batch_size, - ) + vllm_cfg = config.get("vllm", {}) + vllm_engine, vllm_tokenizer, lora_request = load_vllm_engine( + model_config=config.get("model", {}), + vllm_cfg=vllm_cfg, + ) + rag_processor = BatchTrialProcessorVLLM( + llm=vllm_engine, # type: ignore + tokenizer=vllm_tokenizer, + batch_size=vllm_cfg.get("batch_size", 16), + use_cot=config.get("use_cot_reasoning", True), + max_new_tokens=vllm_cfg.get("max_new_tokens", 5000), + temperature=vllm_cfg.get("temperature", 0.0), + top_p=vllm_cfg.get("top_p", 1.0), + seed=vllm_cfg.get("seed", 1234), + length_bucket=vllm_cfg.get("length_bucket", True), + lora_request=lora_request, + ) rag_processor.process_trials( nct_ids=top_trials, @@ -256,7 +229,6 @@ def main_pipeline(config_path: str | None = None) -> int: return 1 from trialmatchai.models.embedding import build_embedder - from trialmatchai.models.llm.llm_loader import load_model_and_tokenizer from trialmatchai.models.llm.llm_reranker import LLMReranker if torch.cuda.is_available(): @@ -266,27 +238,8 @@ def main_pipeline(config_path: str | None = None) -> int: import warnings - # The HuggingFace CoT model is only used by the default backend. When the - # vLLM backend is configured, run_rag_processing loads its own engine and - # ignores these, so skip loading (and half()-ing) the HF model entirely to - # avoid wasting GPU memory and load time (and risking OOM next to vLLM). - model, tokenizer = None, None - if config.get("cot_backend", "default") != "vllm": - with warnings.catch_warnings(): - warnings.filterwarnings( - "ignore", message=".*quantization_config.*", category=UserWarning - ) - model, tokenizer = load_model_and_tokenizer( - config["model"], config["global"]["device"] - ) - - if tokenizer.pad_token is None: # type: ignore - tokenizer.pad_token = tokenizer.eos_token # type: ignore - if hasattr(model.config, "pad_token_id") and model.config.pad_token_id is None: # type: ignore - model.config.pad_token_id = tokenizer.pad_token_id # type: ignore - - if config["global"]["device"] != "cpu" and torch.cuda.is_available(): - model = model.half() # type: ignore + # The CoT reasoning model is loaded lazily by run_rag_processing as a vLLM + # engine (the only LLM backend), so nothing to load here. # Initialize components embedder = build_embedder(config) @@ -374,8 +327,6 @@ def main_pipeline(config_path: str | None = None) -> int: str(output_folder), top_trials_path, patient_info, - model, - tokenizer, config, ) diff --git a/src/trialmatchai/matching/eligibility_reasoning.py b/src/trialmatchai/matching/eligibility_reasoning.py deleted file mode 100644 index 4df07283..00000000 --- a/src/trialmatchai/matching/eligibility_reasoning.py +++ /dev/null @@ -1,162 +0,0 @@ -import time -from typing import Dict, List - -from trialmatchai.matching.eligibility_base import BaseTrialProcessor -from trialmatchai.utils.logging_config import setup_logging - -logger = setup_logging(__name__) - -try: - import torch -except ImportError: # pragma: no cover - exercised by lean package imports - torch = None # type: ignore[assignment] - - -def _require_torch(): - if torch is None: - raise RuntimeError( - "BatchTrialProcessor requires PyTorch. Install the ML extras with " - "`uv sync --extra llm` or `pip install 'trialmatchai[llm]'`." - ) - return torch - - -class BatchTrialProcessor(BaseTrialProcessor): - def __init__( - self, - model, - tokenizer, - device: int, - batch_size: int = 4, - use_cot: bool = True, - max_new_tokens: int = 5000, # keep long answers - ): - """ - Optimized for throughput while preserving long outputs. - - Key improvements: - - model.eval(), use_cache, TF32 hints, and SDPA/FlashAttention2 when available - - length bucketing (sort by prompt token length) to reduce padding waste - - telemetry for tokens/sec and stage timings - """ - torch_module = _require_torch() - self.device = device - self.device_str = f"cuda:{device}" - self.batch_size = batch_size - self.model = model - self.tokenizer = tokenizer - self.use_cot = use_cot - self.max_new_tokens = max_new_tokens - - # ---- Inference-time performance knobs (safe if available) ---- - self.model.eval() - try: - # Allow TF32 on Ampere+ (gives a free speedup for matmuls with minimal accuracy loss) - torch_module.backends.cuda.matmul.allow_tf32 = True - torch_module.set_float32_matmul_precision("high") - except Exception: - pass - - # Prefer fast attention kernels if supported by your install - try: - from transformers.utils.import_utils import is_flash_attn_2_available - - if hasattr(self.model, "config"): - if is_flash_attn_2_available(): - self.model.config.attn_implementation = "flash_attention_2" - else: - # SDPA is the PyTorch fused attention (fast on recent torch) - self.model.config.attn_implementation = "sdpa" - except Exception: - # Fall back silently; HF will pick the best available - pass - - # Ensure caching is on for generation - try: - if hasattr(self.model, "config") and hasattr( - self.model.config, "use_cache" - ): - self.model.config.use_cache = True - except Exception: - pass - - # Pad token handling (avoids warnings for decoder-only models) - try: - if ( - self.tokenizer.pad_token_id is None - and self.tokenizer.eos_token_id is not None - ): - self.tokenizer.pad_token = self.tokenizer.eos_token - except Exception: - pass - - def _progress_desc(self) -> str: - return f"GPU {self.device} Processing Trials" - - # ---------------------- Core batch path ---------------------- - - def _process_batch(self, batch: List[Dict], output_folder: str): - """ - Expects a list of dicts with keys: nct_id, prompt - """ - torch_module = _require_torch() - try: - t0 = time.time() - # Tokenize once; pad to the longest in this batch only - tokenized = self.tokenizer( - [item["prompt"] for item in batch], - padding=True, - truncation=True, # keep to model max length to avoid OOM - return_tensors="pt", - ) - input_len = tokenized["input_ids"].shape[1] - tokenized = tokenized.to(self.device_str) - t1 = time.time() - - # Autocast to model dtype if it's half/bfloat16 for extra speed - model_dtype = next(self.model.parameters()).dtype - use_autocast = model_dtype in (torch_module.float16, torch_module.bfloat16) - - with torch_module.inference_mode(): - ctx = ( - torch_module.autocast(device_type="cuda", dtype=model_dtype) - if use_autocast - else torch_module.cuda.amp.autocast(enabled=False) - ) - with ctx: - outputs = self.model.generate( - **tokenized, - max_new_tokens=self.max_new_tokens, # long answers kept - do_sample=False, - use_cache=True, - pad_token_id=self.tokenizer.pad_token_id - if self.tokenizer.pad_token_id is not None - else self.tokenizer.eos_token_id, - eos_token_id=self.tokenizer.eos_token_id, - num_return_sequences=1, - return_dict_in_generate=False, - ) - t2 = time.time() - - # Decode only the generated tail - gen_len = outputs.shape[1] - input_len - decoded_responses = self.tokenizer.batch_decode( - outputs[:, input_len:], skip_special_tokens=True - ) - - # Persist outputs - for item, response in zip(batch, decoded_responses): - self._save_outputs(item["nct_id"], response, output_folder) - - # Telemetry - total_gen_tokens = gen_len * len(batch) - gen_time = t2 - t1 - logger.info( - f"[GPU {self.device}] batch={len(batch)} | in_len={input_len} | " - f"out_len≈{gen_len} | tokenize+H2D={t1 - t0:.2f}s | " - f"generate={gen_time:.2f}s | ~{(total_gen_tokens / gen_time) if gen_time > 0 else 0:.1f} tok/s" - ) - except Exception as e: - logger.error(f"Batch processing failed: {str(e)}") - for item in batch: - logger.error(f"Failed trial: {item['nct_id']}") diff --git a/src/trialmatchai/models/llm/_common.py b/src/trialmatchai/models/llm/_common.py deleted file mode 100644 index 3f92abbb..00000000 --- a/src/trialmatchai/models/llm/_common.py +++ /dev/null @@ -1,162 +0,0 @@ -"""Shared helpers for the optional LLM model loaders (llm_loader, llm_reranker). - -The heavy dependencies (torch/transformers/peft) are imported lazily by -``load_llm_dependencies`` so this module imports cleanly without the ``llm`` -extra installed. The torch-dependent helpers take ``torch`` as an argument and -are otherwise pure, which keeps them unit-testable with a stub. -""" - -from __future__ import annotations - -from typing import Any, NamedTuple, Optional - -from trialmatchai.utils.logging_config import setup_logging - -logger = setup_logging(__name__) - - -class LLMDeps(NamedTuple): - torch: Any - torch_functional: Any - peft_model: Any - auto_model: Any - auto_tokenizer: Any - bnb_config: Any - - -def load_llm_dependencies() -> LLMDeps: - """Import the optional LLM stack, raising a clear error when it is missing.""" - try: - import torch - import torch.nn.functional as torch_functional - from peft import PeftModel - from transformers import ( - AutoModelForCausalLM, - AutoTokenizer, - BitsAndBytesConfig, - ) - except Exception as exc: # pragma: no cover - exercised in lean installs - raise RuntimeError( - "LLM model loading requires the optional `llm` dependencies " - "(`uv sync --extra llm`)." - ) from exc - return LLMDeps( - torch, - torch_functional, - PeftModel, - AutoModelForCausalLM, - AutoTokenizer, - BitsAndBytesConfig, - ) - - -def resolve_cuda_device( - torch: Any, device: Any, *, label: str = "LLM" -) -> tuple[str, Optional[int]]: - """Resolve a requested device to ``(device_str, cuda_index)``. - - Validates the requested GPU index (accepting ``int`` or ``"auto"``), selects - it via ``set_device``, and falls back to GPU 0 with a warning on anything - invalid. Returns ``("cpu", None)`` when CUDA is unavailable. - """ - if not torch.cuda.is_available(): - logger.warning("%s: CUDA not available; using CPU.", label) - return "cpu", None - - cuda_count = torch.cuda.device_count() - if device == "auto" or device is None: - idx = 0 - elif isinstance(device, bool): # bool is an int subclass; reject it explicitly - logger.warning("%s: invalid device %r; using 0.", label, device) - idx = 0 - elif isinstance(device, int): - idx = device - else: - try: - idx = int(device) - except (TypeError, ValueError): - logger.warning("%s: non-numeric device %r; using 0.", label, device) - idx = 0 - - if idx < 0 or idx >= cuda_count: - logger.warning( - "%s: requested CUDA device %r invalid; using 0 (num_gpus=%d).", - label, - device, - cuda_count, - ) - idx = 0 - - try: - torch.cuda.set_device(idx) - except Exception as e: - logger.warning( - "%s: torch.cuda.set_device(%d) failed: %s; using 0.", label, idx, e - ) - idx = 0 - torch.cuda.set_device(idx) - return f"cuda:{idx}", idx - - -def select_compute_dtype(torch: Any, use_cuda: bool) -> Any: - """bfloat16 when supported, else float16 on GPU, else float32 on CPU.""" - if use_cuda and torch.cuda.is_bf16_supported(): - return torch.bfloat16 - if use_cuda: - return torch.float16 - return torch.float32 - - -def select_attn_impl(torch: Any, cuda_index: Optional[int]) -> Optional[str]: - """Prefer FlashAttention-2 when installed and supported, else SDPA. - - Returns ``None`` on CPU (let transformers pick its default). - """ - if cuda_index is None: - return None - attn_impl = "sdpa" - try: - import flash_attn # noqa: F401 - - major, minor = torch.cuda.get_device_capability(cuda_index) - if (major * 10 + minor) >= 75: - attn_impl = "flash_attention_2" - logger.info("Using FlashAttention-2.") - else: - logger.info("FlashAttention-2 unsupported on this GPU; using SDPA.") - except Exception: - logger.info("flash-attn not available; using SDPA.") - return attn_impl - - -def build_4bit_quant_config( - bnb_config: Any, - *, - load_in_4bit: bool, - double_quant: bool = True, - quant_type: str = "nf4", - compute_dtype: Any = None, -) -> Any: - """Build a BitsAndBytesConfig; a no-op config when ``load_in_4bit`` is False.""" - if not load_in_4bit: - return bnb_config(load_in_4bit=False) - return bnb_config( - load_in_4bit=True, - bnb_4bit_use_double_quant=double_quant, - bnb_4bit_quant_type=quant_type, - bnb_4bit_compute_dtype=compute_dtype, - ) - - -def configure_decoder_tokenizer(tokenizer: Any) -> Any: - """Left-pad/-truncate a decoder-only tokenizer and ensure a pad token exists. - - Decoder-only next-token prediction reads ``logits[:, -1, :]``. With right - padding, that position is a PAD token for the shorter rows in a batch, - producing wrong probabilities — so left padding is required for correctness. - """ - tokenizer.padding_side = "left" - tokenizer.truncation_side = "left" - if tokenizer.pad_token is None: - tokenizer.pad_token = tokenizer.eos_token - return tokenizer diff --git a/src/trialmatchai/models/llm/llm_loader.py b/src/trialmatchai/models/llm/llm_loader.py deleted file mode 100644 index 0930a0e4..00000000 --- a/src/trialmatchai/models/llm/llm_loader.py +++ /dev/null @@ -1,89 +0,0 @@ -from typing import Any, Tuple - -from trialmatchai.models.llm._common import ( - build_4bit_quant_config, - configure_decoder_tokenizer, - load_llm_dependencies, - resolve_cuda_device, - select_attn_impl, - select_compute_dtype, -) -from trialmatchai.utils.logging_config import setup_logging - -logger = setup_logging(__name__) - - -def load_model_and_tokenizer(model_config: dict, device: int) -> Tuple[Any, Any]: - """Load a model and tokenizer with safe device handling and optional 4-bit.""" - deps = load_llm_dependencies() - torch = deps.torch - - device_str, cuda_index = resolve_cuda_device( - torch, device, label="load_model_and_tokenizer" - ) - use_cuda = cuda_index is not None - compute_dtype = select_compute_dtype(torch, use_cuda) - attn_impl = select_attn_impl(torch, cuda_index) - - if use_cuda: - quant_config = build_4bit_quant_config( - deps.bnb_config, - load_in_4bit=bool(model_config["quantization"]["load_in_4bit"]), - double_quant=bool( - model_config["quantization"]["bnb_4bit_use_double_quant"] - ), - quant_type=str(model_config["quantization"]["bnb_4bit_quant_type"]), - compute_dtype=compute_dtype, - ) - logger.info(f"Loading model on {device_str} with 4-bit quantization.") - else: - logger.warning( - "CUDA not available; loading model on CPU without 4-bit quantization." - ) - quant_config = build_4bit_quant_config(deps.bnb_config, load_in_4bit=False) - - trust_remote_code = bool(model_config.get("trust_remote_code", False)) - revision = model_config.get("base_model_revision") - tokenizer = deps.auto_tokenizer.from_pretrained( - model_config["base_model"], - revision=revision, - use_fast=True, - trust_remote_code=trust_remote_code, - ) - # Always left-pad decoder-only models; keep most recent tokens on truncation. - configure_decoder_tokenizer(tokenizer) - - model = deps.auto_model.from_pretrained( - model_config["base_model"], - revision=revision, - trust_remote_code=trust_remote_code, - torch_dtype=compute_dtype, - device_map=device_str, - attn_implementation=attn_impl, - quantization_config=quant_config, - low_cpu_mem_usage=True, - ) - # Ensure KV cache usage for faster generation - try: - model.config.use_cache = True - except Exception: - pass - - model = deps.peft_model.from_pretrained( - model, model_config["cot_adapter_path"], device_map=device_str - ) - - # Optional: compile for extra speed when supported - if bool(model_config.get("compile", False)): - try: - model = torch.compile(model, mode="max-autotune", fullgraph=False) - logger.info("Model compiled with torch.compile.") - except Exception as e: - logger.warning(f"torch.compile failed; continuing without it. Err: {e}") - - if isinstance(model, torch.nn.Module): - model.eval() - else: - logger.warning("Model is not an instance of torch.nn.Module; skipping eval.") - logger.info(f"Model loaded on {device_str}.") - return model, tokenizer # type: ignore[return-value] diff --git a/src/trialmatchai/models/llm/llm_reranker.py b/src/trialmatchai/models/llm/llm_reranker.py index 820b5ee3..55812da7 100644 --- a/src/trialmatchai/models/llm/llm_reranker.py +++ b/src/trialmatchai/models/llm/llm_reranker.py @@ -1,15 +1,8 @@ +import math import re import unicodedata from typing import Any, Dict, List, Optional -from trialmatchai.models.llm._common import ( - build_4bit_quant_config, - configure_decoder_tokenizer, - load_llm_dependencies, - resolve_cuda_device, - select_attn_impl, - select_compute_dtype, -) from trialmatchai.utils.logging_config import setup_logging from tqdm import tqdm @@ -17,87 +10,71 @@ class LLMReranker: + """vLLM-backed pointwise reranker. + + Scores each (patient, criterion) pair by the model's probability of emitting + "Yes" vs "No" as the next token. Generation is constrained to those two + tokens and their logprobs are read back, so the score is a calibrated + relevance probability. A fine-tuned LoRA adapter is served via vLLM's + LoRARequest (the only LLM backend in TrialMatchAI). + """ + def __init__( self, model_path: str, adapter_path: Optional[str] = None, - device: Any = 0, + device: Any = 0, # accepted for API compatibility; vLLM manages devices torch_dtype: Any | None = None, batch_size: int = 8, revision: Optional[str] = None, trust_remote_code: bool = False, + gpu_memory_utilization: float = 0.4, + max_model_len: int = 4096, + max_lora_rank: int = 32, + dtype: str = "auto", ): - self._deps = load_llm_dependencies() - self._torch = self._deps.torch - self._torch_functional = self._deps.torch_functional - self.model_path = model_path - self.adapter_path = adapter_path + from vllm import LLM, SamplingParams # type: ignore + + try: + from vllm.lora.request import LoRARequest # type: ignore + except ImportError: # pragma: no cover - older vLLM + LoRARequest = None # type: ignore + self.batch_size = batch_size - self.revision = revision - self.trust_remote_code = trust_remote_code + enable_lora = bool(adapter_path) and LoRARequest is not None + if adapter_path and not enable_lora: + logger.warning( + "Reranker adapter requested but LoRA is unavailable in this vLLM " + "build; using the base model." + ) - # Validate/select the GPU once (handles int or "auto"); pins the device so - # device_map below is consistent with where inputs are moved. - self.device_str, self._cuda_index = resolve_cuda_device( - self._torch, device, label="LLMReranker" + self.llm = LLM( + model=str(model_path), + revision=revision, + trust_remote_code=trust_remote_code, + enable_lora=enable_lora, + max_lora_rank=max_lora_rank if enable_lora else 16, + gpu_memory_utilization=gpu_memory_utilization, + max_model_len=max_model_len, + dtype=dtype, ) - use_cuda = self._cuda_index is not None - self.torch_dtype = torch_dtype or select_compute_dtype(self._torch, use_cuda) - - self.tokenizer = self._deps.auto_tokenizer.from_pretrained( - self.model_path, - revision=self.revision, - trust_remote_code=self.trust_remote_code, + self.tokenizer = self.llm.get_tokenizer() + self.lora_request = ( + LoRARequest("reranker_adapter", 1, str(adapter_path)) if enable_lora else None ) - # Left padding is required: process_batch reads logits[:, -1, :], which - # must be the last real token, not a right-pad position. - configure_decoder_tokenizer(self.tokenizer) - self._initialize_token_ids() - self.model = self.load_model() - - def _initialize_token_ids(self): - responses = ["Yes", "No"] - token_ids = [ - self.tokenizer(response, add_special_tokens=False)["input_ids"] - for response in responses - ] - self.applicable_token_id, self.not_applicable_token_id = [ - ids[0] for ids in token_ids - ] - def load_model(self): - use_cuda = self._cuda_index is not None - quant_config = ( - build_4bit_quant_config( - self._deps.bnb_config, - load_in_4bit=True, - double_quant=True, - quant_type="nf4", - compute_dtype=self.torch_dtype, - ) - if use_cuda - else None + self.applicable_token_id, self.not_applicable_token_id = self._yes_no_token_ids() + self.sampling_params = SamplingParams( + temperature=0.0, + max_tokens=1, + logprobs=20, + allowed_token_ids=[self.applicable_token_id, self.not_applicable_token_id], ) - model = self._deps.auto_model.from_pretrained( - self.model_path, - revision=self.revision, - torch_dtype=self.torch_dtype if use_cuda else self._torch.float32, - quantization_config=quant_config, - # Pin to the selected GPU (not "auto"): inputs are moved to - # self.device_str, so the model's first layer must live there too. - device_map=self.device_str if use_cuda else None, - attn_implementation=select_attn_impl(self._torch, self._cuda_index), - trust_remote_code=self.trust_remote_code, - ) - if self.adapter_path: - model = self._deps.peft_model.from_pretrained(model, self.adapter_path) - model.eval() - return model - def preprocess_text(self, text: str) -> str: - text = unicodedata.normalize("NFKD", text) - text = re.sub(r"\s+", " ", text) - return text.strip() + def _yes_no_token_ids(self) -> tuple[int, int]: + yes = self.tokenizer("Yes", add_special_tokens=False)["input_ids"] + no = self.tokenizer("No", add_special_tokens=False)["input_ids"] + return yes[0], no[0] @staticmethod def create_messages(patient_text: str, trial_text: str) -> List[Dict]: @@ -116,36 +93,49 @@ def create_messages(patient_text: str, trial_text: str) -> List[Dict]: }, ] - def process_batch(self, batch: List[tuple]) -> List[Dict]: - batch_prompts = [] - for patient_text, trial_text in batch: - messages = self.create_messages( - self.preprocess_text(patient_text), self.preprocess_text(trial_text) - ) - prompt = self.tokenizer.apply_chat_template( - messages, tokenize=False, add_generation_prompt=True - ) - batch_prompts.append(prompt) - inputs = self.tokenizer(batch_prompts, return_tensors="pt", padding=True) - inputs = {k: v.to(self.device_str) for k, v in inputs.items()} - with self._torch.no_grad(): - outputs = self.model(**inputs) - logits = outputs.logits[:, -1, :] - probabilities = self._torch_functional.softmax(logits, dim=-1) - applicable_probs = probabilities[:, self.applicable_token_id].tolist() - return [ - {"llm_score": prob, "answer": "Yes" if prob > 0.5 else "No"} - for prob in applicable_probs - ] + def preprocess_text(self, text: str) -> str: + text = unicodedata.normalize("NFKD", text) + text = re.sub(r"\s+", " ", text) + return text.strip() + + def _build_prompt(self, patient_text: str, trial_text: str) -> str: + messages = self.create_messages( + self.preprocess_text(patient_text), self.preprocess_text(trial_text) + ) + return self.tokenizer.apply_chat_template( + messages, tokenize=False, add_generation_prompt=True + ) + + def _yes_probability(self, output: Any) -> float: + try: + token_logprobs = output.outputs[0].logprobs[0] + except (AttributeError, IndexError, TypeError): + return 0.0 + yes = token_logprobs.get(self.applicable_token_id) + no = token_logprobs.get(self.not_applicable_token_id) + yes_lp = yes.logprob if yes is not None else float("-inf") + no_lp = no.logprob if no is not None else float("-inf") + highest = max(yes_lp, no_lp) + if highest == float("-inf"): + return 0.0 + ey = math.exp(yes_lp - highest) + en = math.exp(no_lp - highest) + return ey / (ey + en) def rank_pairs(self, patient_trial_pairs: List[tuple]) -> List[Dict]: - # Inference on a single device is serial regardless; iterate batches - # directly rather than behind a thread pool + lock that serialized anyway. - batches = [ - patient_trial_pairs[i : i + self.batch_size] - for i in range(0, len(patient_trial_pairs), self.batch_size) - ] results: List[Dict] = [] - for batch in tqdm(batches, desc="Reranking batches"): - results.extend(self.process_batch(batch)) + for start in tqdm( + range(0, len(patient_trial_pairs), self.batch_size), + desc="Reranking batches", + ): + batch = patient_trial_pairs[start : start + self.batch_size] + prompts = [self._build_prompt(p, t) for p, t in batch] + outputs = self.llm.generate( + prompts, self.sampling_params, lora_request=self.lora_request + ) + for output in outputs: + prob = self._yes_probability(output) + results.append( + {"llm_score": prob, "answer": "Yes" if prob > 0.5 else "No"} + ) return results diff --git a/src/trialmatchai/services/preflight.py b/src/trialmatchai/services/preflight.py index d1eb03e8..c96b9719 100644 --- a/src/trialmatchai/services/preflight.py +++ b/src/trialmatchai/services/preflight.py @@ -84,26 +84,23 @@ def run_preflight_checks( model_cfg.get("reranker_adapter_path"), required=True, ) - if config.get("cot_backend") == "vllm": - vllm_available = importlib.util.find_spec("vllm") is not None - if not vllm_available: + # vLLM is the only LLM backend (CoT + reranker), so it is always required + # when running models. + vllm_available = importlib.util.find_spec("vllm") is not None + if not vllm_available: + issues.append( + "vLLM is required (`uv sync --extra llm --extra gpu`)." + ) + else: + try: + import torch + except Exception: issues.append( - "cot_backend=vllm requires the GPU extra " - "(`uv sync --extra llm --extra gpu`)." + "vLLM requires PyTorch (`uv sync --extra llm --extra gpu`)." ) else: - try: - import torch - except Exception: - issues.append( - "cot_backend=vllm requires PyTorch " - "(`uv sync --extra llm --extra gpu`)." - ) - else: - if not torch.cuda.is_available(): - issues.append( - "cot_backend=vllm requires a CUDA-capable runtime." - ) + if not torch.cuda.is_available(): + issues.append("vLLM requires a CUDA-capable runtime.") search_cfg = config.get("search_backend", {}) if search_cfg: diff --git a/tests/test_deployment_readiness.py b/tests/test_deployment_readiness.py index ba1a9328..9733e21c 100644 --- a/tests/test_deployment_readiness.py +++ b/tests/test_deployment_readiness.py @@ -1,7 +1,7 @@ from __future__ import annotations from trialmatchai.config.config_loader import load_config, resolve_config_path -from trialmatchai.matching.eligibility_reasoning import BatchTrialProcessor +from trialmatchai.matching.eligibility_base import BaseTrialProcessor from trialmatchai.utils.json_utils import extract_json_object @@ -37,9 +37,9 @@ def test_config_env_overrides_and_search_tables(monkeypatch): def test_cot_prompt_does_not_inject_consent(): - processor = BatchTrialProcessor.__new__(BatchTrialProcessor) + processor = BaseTrialProcessor.__new__(BaseTrialProcessor) processor.use_cot = True - processor.tokenizer = object() + processor.tokenizer = None prompt = processor._format_prompt("Age >= 18", "Patient has lung cancer.") diff --git a/tests/test_finetuning.py b/tests/test_finetuning.py index 7843403a..64470f57 100644 --- a/tests/test_finetuning.py +++ b/tests/test_finetuning.py @@ -74,6 +74,11 @@ def test_cli_parses_each_subcommand(): ) assert args.component == component + merge_args = parser.parse_args( + ["merge", "--base-model", "b", "--adapter", "a", "--output-dir", "o"] + ) + assert merge_args.component == "merge" and merge_args.adapter == "a" + with pytest.raises(SystemExit): parser.parse_args(["cot"]) # missing required args diff --git a/tests/test_llm_common.py b/tests/test_llm_common.py deleted file mode 100644 index d0fd6704..00000000 --- a/tests/test_llm_common.py +++ /dev/null @@ -1,104 +0,0 @@ -"""Unit tests for the shared LLM helpers (models/llm/_common.py). - -These lock the correctness fixes from PR2 — left padding, device resolution, -dtype selection — using lightweight stubs so they run without the `llm` extra. -""" - -from trialmatchai.models.llm._common import ( - configure_decoder_tokenizer, - resolve_cuda_device, - select_attn_impl, - select_compute_dtype, -) - - -class FakeTokenizer: - def __init__(self, pad_token=None, eos_token=""): - self.pad_token = pad_token - self.eos_token = eos_token - self.padding_side = "right" - self.truncation_side = "right" - - -class FakeCuda: - def __init__(self, available=True, count=2, bf16=False): - self._available = available - self._count = count - self._bf16 = bf16 - self.selected = None - - def is_available(self): - return self._available - - def device_count(self): - return self._count - - def is_bf16_supported(self): - return self._bf16 - - def set_device(self, idx): - self.selected = idx - - -class FakeTorch: - def __init__(self, **kw): - self.cuda = FakeCuda(**kw) - self.bfloat16 = "bfloat16" - self.float16 = "float16" - self.float32 = "float32" - - -def test_configure_decoder_tokenizer_sets_left_padding_and_pad_token(): - tok = FakeTokenizer(pad_token=None, eos_token="") - configure_decoder_tokenizer(tok) - assert tok.padding_side == "left" - assert tok.truncation_side == "left" - assert tok.pad_token == "" # filled from eos when missing - - -def test_configure_decoder_tokenizer_keeps_existing_pad_token(): - tok = FakeTokenizer(pad_token="", eos_token="") - configure_decoder_tokenizer(tok) - assert tok.pad_token == "" - - -def test_resolve_cuda_device_cpu_when_unavailable(): - torch = FakeTorch(available=False) - assert resolve_cuda_device(torch, 0) == ("cpu", None) - - -def test_resolve_cuda_device_auto_selects_zero(): - torch = FakeTorch(available=True, count=2) - assert resolve_cuda_device(torch, "auto") == ("cuda:0", 0) - assert torch.cuda.selected == 0 - - -def test_resolve_cuda_device_valid_index(): - torch = FakeTorch(available=True, count=2) - assert resolve_cuda_device(torch, 1) == ("cuda:1", 1) - assert torch.cuda.selected == 1 - - -def test_resolve_cuda_device_invalid_index_falls_back_to_zero(): - torch = FakeTorch(available=True, count=2) - assert resolve_cuda_device(torch, 5) == ("cuda:0", 0) - - -def test_resolve_cuda_device_non_numeric_string_falls_back(): - torch = FakeTorch(available=True, count=2) - assert resolve_cuda_device(torch, "gpu0") == ("cuda:0", 0) - - -def test_select_compute_dtype(): - assert select_compute_dtype(FakeTorch(available=True, bf16=True), True) == "bfloat16" - assert select_compute_dtype(FakeTorch(available=True, bf16=False), True) == "float16" - assert select_compute_dtype(FakeTorch(available=False), False) == "float32" - - -def test_select_attn_impl_cpu_is_none(): - assert select_attn_impl(FakeTorch(available=False), None) is None - - -def test_select_attn_impl_gpu_without_flash_attn_is_sdpa(): - # flash_attn is not installed in the base test env, so this falls back. - assert select_attn_impl(FakeTorch(available=True), 0) == "sdpa" diff --git a/tests/test_preflight_and_indexer.py b/tests/test_preflight_and_indexer.py index e1799ef0..b5f70e55 100644 --- a/tests/test_preflight_and_indexer.py +++ b/tests/test_preflight_and_indexer.py @@ -36,7 +36,6 @@ def _base_config(tmp_path): "cot_adapter_path": str(tmp_path / "models" / "cot"), "reranker_adapter_path": str(tmp_path / "models" / "reranker"), }, - "cot_backend": "default", } @@ -104,17 +103,13 @@ def test_preflight_reports_missing_search_db_path(tmp_path): def test_preflight_reports_missing_vllm_extra(tmp_path, monkeypatch): cfg = _base_config(tmp_path) - cfg["cot_backend"] = "vllm" Path(cfg["model"]["cot_adapter_path"]).mkdir(parents=True) Path(cfg["model"]["reranker_adapter_path"]).mkdir(parents=True) monkeypatch.setattr(preflight.importlib.util, "find_spec", lambda name: None) issues = run_preflight_checks(cfg, require_models=True) - assert issues == [ - "cot_backend=vllm requires the GPU extra " - "(`uv sync --extra llm --extra gpu`)." - ] + assert issues == ["vLLM is required (`uv sync --extra llm --extra gpu`)."] def test_preflight_reports_missing_entity_extra(tmp_path, monkeypatch): From cff1c39ce7e56caefe2da0e9698effd504fe4b1e Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 11:26:33 +0200 Subject: [PATCH 28/64] feat: domain-aware criteria chunking + hybrid genetic-variant recognizer Reintegrates domain knowledge dropped in the migration, folded into the current architecture rather than restored verbatim. Criteria chunking (registry/criteria_chunking.py): - replaces the generic line-splitter in normalization.split_eligibility_criteria with a single pass that understands multi-level enumeration hierarchies (1, 1.2, 1.2.3, (a), roman), varied inclusion/exclusion headers (incl. inline "Exclusion Criteria: 1. ... 2. ..."), parenthetical protection, decimal/ abbreviation split-exceptions, and continuation-line joining. 8 new tests. Genetic-variant recognizer (entities/recognizers.py): - restore the curated variant pattern table as entities/resources/ variant_patterns.tsv (HGVS mutations, fusions, chromosome arms, ...). - RegexVariantRecognizer matches these deterministically (e.g. p.V600E, c.1799T>A) and CompositeRecognizer runs it alongside the GLiNER model, merging by confidence/length so precise variant spans the model would miss are still captured. On by default (entity_extraction.variant_regex). 5 tests. Packaging: variant_patterns.tsv added to package-data; both load correctly from the built wheel. --- README.md | 3 +- pyproject.toml | 1 + src/trialmatchai/entities/recognizers.py | 114 ++++++++++- .../entities/resources/variant_patterns.tsv | 52 +++++ .../registry/criteria_chunking.py | 185 ++++++++++++++++++ src/trialmatchai/registry/normalization.py | 73 +------ tests/test_criteria_chunking.py | 105 ++++++++++ tests/test_variant_recognizer.py | 51 +++++ 8 files changed, 508 insertions(+), 76 deletions(-) create mode 100644 src/trialmatchai/entities/resources/variant_patterns.tsv create mode 100644 src/trialmatchai/registry/criteria_chunking.py create mode 100644 tests/test_criteria_chunking.py create mode 100644 tests/test_variant_recognizer.py diff --git a/README.md b/README.md index 6b048c68..a77761c0 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,8 @@ with no external search service. Patient data (text / FHIR / Phenopacket / OMOP) │ interop importers → canonical PatientProfile ▼ -Biomedical NER (GLiNER) ──► concept linking (OMOP/UMLS, hybrid lexical+vector) +Biomedical NER (GLiNER + deterministic variant patterns) ──► concept linking + ▼ (OMOP/UMLS, hybrid lexical+vector) ▼ First-level retrieval ──► LanceDB hybrid search (BM25 + embeddings) over trials ▼ diff --git a/pyproject.toml b/pyproject.toml index fa7d20b5..5842063d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -84,6 +84,7 @@ where = ["src"] trialmatchai = [ "config/*.json", "entity_schemas/*.yaml", + "entities/resources/*.tsv", ] [tool.uv] diff --git a/src/trialmatchai/entities/recognizers.py b/src/trialmatchai/entities/recognizers.py index e064a8b0..83510cdc 100644 --- a/src/trialmatchai/entities/recognizers.py +++ b/src/trialmatchai/entities/recognizers.py @@ -1,10 +1,16 @@ from __future__ import annotations import re +from importlib import resources from typing import Any, Protocol, Sequence from trialmatchai.entities.schemas import schema_by_label from trialmatchai.entities.types import EntityAnnotation, EntitySchema, NO_ENTITY_ID +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + +VARIANT_PATTERNS_RESOURCE = ("trialmatchai.entities", "resources/variant_patterns.tsv") class EntityRecognizer(Protocol): @@ -53,6 +59,93 @@ def recognize( return results +def _load_variant_patterns() -> list[tuple[str, "re.Pattern[str]"]]: + """Load curated genetic-variant regexes (label, compiled pattern).""" + package, name = VARIANT_PATTERNS_RESOURCE + try: + raw = resources.files(package).joinpath(name).read_text(encoding="utf-8") + except (FileNotFoundError, ModuleNotFoundError, OSError): + logger.warning("Variant pattern resource not found; variant detection off.") + return [] + patterns: list[tuple[str, "re.Pattern[str]"]] = [] + for line in raw.splitlines(): + if not line.strip(): + continue + parts = line.split("\t") + if len(parts) < 3: + continue + label = parts[0].strip() or "variant" + # The table stores patterns with doubled backslashes; collapse to one. + pattern_text = parts[-1].replace("\\\\", "\\") + try: + patterns.append((label, re.compile(pattern_text))) + except re.error as exc: + logger.warning("Skipping invalid variant pattern %r: %s", label, exc) + return patterns + + +class RegexVariantRecognizer: + """Deterministic recognizer for genetic variants (HGVS mutations, fusions, + chromosome arms, ...) from a curated pattern table. + + Runs alongside the model recognizer to capture precise biomedical strings — + e.g. ``c.1799T>A``, ``p.V600E``, ``EGFR fusion`` — that a generalist NER + model often misses or mangles. Emits high-confidence spans tagged with the + variant type as the entity group. + """ + + def __init__(self, patterns: list[tuple[str, "re.Pattern[str]"]] | None = None): + self._patterns = patterns if patterns is not None else _load_variant_patterns() + + def recognize( + self, texts: Sequence[str], schemas: Sequence[EntitySchema] + ) -> list[list[EntityAnnotation]]: + results: list[list[EntityAnnotation]] = [] + for text in texts: + annotations: list[EntityAnnotation] = [] + for label, pattern in self._patterns: + for match in pattern.finditer(text): + start, end = match.start(), match.end() + if end <= start or not match.group(0).strip(): + continue # skip zero-width / whitespace-only matches + annotations.append( + EntityAnnotation( + entity_group=label, + text=match.group(0).strip(), + start=start, + end=end, + score=0.97, + normalized_id=(NO_ENTITY_ID,), + schema_id=None, + ) + ) + results.append(resolve_overlaps(annotations)) + return results + + +class CompositeRecognizer: + """Runs a primary recognizer plus augmenters and merges their annotations. + + Overlaps are resolved by confidence then span length, so a high-precision + variant match wins over a lower-confidence model span covering the same text. + """ + + def __init__(self, primary: EntityRecognizer, *augmenters: EntityRecognizer): + self._recognizers = [primary, *augmenters] + + def recognize( + self, texts: Sequence[str], schemas: Sequence[EntitySchema] + ) -> list[list[EntityAnnotation]]: + per_recognizer = [r.recognize(texts, schemas) for r in self._recognizers] + merged: list[list[EntityAnnotation]] = [] + for i in range(len(texts)): + combined: list[EntityAnnotation] = [] + for recognizer_results in per_recognizer: + combined.extend(recognizer_results[i]) + merged.append(resolve_overlaps(combined)) + return merged + + class GLiNER2Recognizer: def __init__( self, @@ -144,7 +237,7 @@ def build_recognizer(config: dict[str, Any]) -> EntityRecognizer: if backend == "regex": return RegexSchemaRecognizer() if backend == "gliner": - return GLiNERRecognizer( + recognizer: EntityRecognizer = GLiNERRecognizer( model_name=config.get("fallback_model_name") or config.get("model_name") or "urchade/gliner_base", @@ -153,17 +246,26 @@ def build_recognizer(config: dict[str, Any]) -> EntityRecognizer: trust_remote_code=bool(config.get("trust_remote_code", False)), batch_size=int(config.get("batch_size", 8)), ) - if backend == "gliner2": - return GLiNER2Recognizer( + elif backend == "gliner2": + recognizer = GLiNER2Recognizer( model_name=config.get("model_name", "fastino/gliner2-base"), revision=config.get("model_revision"), device=config.get("device", "auto"), trust_remote_code=bool(config.get("trust_remote_code", False)), batch_size=int(config.get("batch_size", 8)), ) - raise ValueError( - "entity_extraction.backend must be one of: gliner2, gliner, regex, disabled." - ) + else: + raise ValueError( + "entity_extraction.backend must be one of: gliner2, gliner, regex, disabled." + ) + + # Augment model NER with the deterministic variant recognizer (on by default) + # so precise HGVS/fusion strings are captured alongside model spans. + if bool(config.get("variant_regex", True)): + variants = _load_variant_patterns() + if variants: + return CompositeRecognizer(recognizer, RegexVariantRecognizer(variants)) + return recognizer def resolve_overlaps( diff --git a/src/trialmatchai/entities/resources/variant_patterns.tsv b/src/trialmatchai/entities/resources/variant_patterns.tsv new file mode 100644 index 00000000..73646df5 --- /dev/null +++ b/src/trialmatchai/entities/resources/variant_patterns.tsv @@ -0,0 +1,52 @@ +protein mutation protein mutation (|/|-|Braf|BRAF|Kras|KRAS)(((c\\.[1-9][0-9]{1,4}((-|\\+)[1-9]{1,})?(((del|ins)(A|T|C|G))|(A|C|T|G)>(A|C|T|G)))|((p\\.)?[A-Z][1-9][0-9]{0,3}([A-Z]|((_|-)[A-Z]?[1-9][0-9]{0,3}(delins|del|dup|ins)*[A-Z]{0,}))?)|(rs[0-9]{3,})|((((p\\.)?((NON|non|Non)(-| )?)?((Ala|Asx|Cys|Asp|Glu|Phe|Gly|His|Ile|Lys|Leu|Met|Asn|Pro|Gln|Arg|Ser|Thr|Sec|Val|Trp|Xaa|Tyr|Ter|Glx)|[A-Z])[1-9][0-9]{1,3}(del|dup|ins|=|(Ala|Asx|Cys|Asp|Glu|Phe|Gly|His|Ile|Lys|Leu|Met|Ter|Asn|Pro|Gln|Arg|Ser|Thr|Sec|Val|Trp|Xaa|Tyr|Glx)|[A-Z]){0,})(fs(\\*[0-9]{1,})?)?)))((-|/)[A-Z]([0-9]{1,3}([A-Z])?)?)?( |/|$)) +chromosome arm chromosome arm ((chromosome ([0-9]{1,2}|X|Y)(q|p)?([1-9]{1,2})?(\\.[0-9]{1,})?)|((chromosome)?( ([1-9]{1}|(1[0-9]{1})|(2([0-2]){1})|X|Y)(q|p)([1-9]{1}[0-9]{0,1})? ))) +aberration aberration ((((cytogenetic(al)?)|(chromosom(e|al)|genetic) )?(abnormalit(ies|y)|alteration(s)?|variant(s)?|aberrant|aberration(s)?))( of)?) +demethylation demethylation demethylat(ed|es)|demethylation|hypomethylation|decreased methylation +expression expression (((E|e)xpression( (S|s)tatus)?( of)?)|(((mRNA|RNA|(G|g)ene)? (E|e)xpress(ed|es|ion|ing))( status)?( of)?)|(m?RNA levels( of)?)|((((G|g)ene )?(E|e)xpression) level(s)?( of)?)) +frameshift frameshift (frame(-| )?shift(s)?( ((alteration|variant|mutation)(s)?))?( of )?) +inframe deletion inframe deletion (in(-)?frame (deletion|insertion)(s)?( of)?) +fusion fusion ((((G|g)ene )?(F|f)usion(s)?( (G|g)ene)?)|(NTRK( (G|g)ene)?(( |-)((T|t)ranslocation(s)?|(F|f)usion(s)?)))) +exon exon (((E|e)xon)(s)?)( |-)[0-9]{1,}(( |-|( (or|and) ))[0-9]{1,})* +gain of function gain of function (((gain(s)?(-| )of(-| )function)( (alteration|mutation|variant)s?)( of)?)|(( activating(( (gene|point))? (alteration|mutation|variant)s?)?)( of )?)) +cna cna ((gene )?copy (number|aberration|alteration)( of )?) +amplification amplification (- amplified|amplification|((gene )?amplifi(ed|cation)( of )?)|((chromosom(e|al) )?amplification(s)?( of )?)|((gene )?copy( number)? (gain(ed|s)?( of )?))|(increase(d|s)?)|(extra copy( of )?)|cn gain) +deletion deletion -deleted|- deleted| del([0-9]{1,})? |gene deleted|gene-deleted|gene deletion( of )?|((chromosom(e|al) )?deletion(s)?( of )?)|(copy los(t|s|ses)(of )?)|([0-9]{1,}(p|q)(-| )del(etion))|copy number decrease(d)?|copy decrease|deleted|((homozygous|heterozygous)(ly)?( (deletion|eleted|loss|lost))( of)?)|cn loss +germline amplification germline amplification germline amplification|germ-line amplification +germline deletion germline deletion (inherited )?germ(-)?line deletion|(delet(ed|ion)|loss|lost) in germline +germline loh germline loh (germ(-)?line (loh|(loss(-| )of(-| )heterozygosity))) +germline mutation germline mutation ((germ(-)?line( or somatic)?( mutation(s)?( (in |of |(status (of )?))?)))|((inherited )?germ(-)?line (variant(s)?|snv|alteration(s)?|mutation(s)?))) +inactivation inactivation inactivat(ed|ion)|((gene|mutation(al)?) (inactivat(ion|ed)))|(inactivating (deletion(s)?|insertion(s)?|mutation(s)?)) +indel indel indel|indels|insertion or deletion +insertion insertion insertion(s)? +inhibitor inhibitor inhibitor(s)?|inhibition|inhibited|inhibit(s)? +loss loss (loss( of)?( (both|either))?) +knockdown knockdown knockdown +loss of function loss of function ((loss(-| )of(-| )function( (mutation|variant|substitution)(s)?))|(deactivating( point)? (alteration|variant|substitution|mutation)(s)?)) +loss of heterozygosity loss of heterozygosity loss of heterozygosity|loss-of-heterozygosity|LOH +methylation methylation ((un|non-)?methylat(ed|es))|methylation|hypermethylation|increased methylation +mutation mutation (((missense|nonsense|(nonsynonymous( coding)?)|(protein(-| )coding)|point|coding|actionable|hotspot|acquired|de(-| )novo|driver|molecular(ly)?|(somatic( coding)?))( ((mutation|(alter(ed|ation))|variant|snv|(nucleotide )?substitution)(s)?)))|((mutation|variant|alteration)(s)? (of|in|within) the)|(gene (substitution(s)?|mutated|alteration(s)?|mutation(s)?))|( (-)?mutated)|(-mut )|(((gene|known) )?mutation(s)?((-| )(positive|negative|in |testing|((wild(-| )?type or muta(nt|ed))|(status( of )?)|of ))?))|((pathway )?muta(ted|nt)( or ((wt|(wild(-| )?type))))?)) +phosphorylation phosphorylation ((un|non-)?phosphorylat(ed|ion|es)) +promoter demethylation promoter demethylation ((promoter (de|hypo|non|un)(-)?methylat(ed|ion))|((de|hypo|un|non)(-)?methylat(ed|ion)( of( the)?)? promoter)) +promoter methylation promoter methylation ((promoter (hyper)?methylat(ed|ion))|((hyper)?methylation of( the)? promoter)) +promoter mutation promoter mutation (promoter (alteration|variant|mutation)s?) +protein expression protein expression ((((p|P)rotein )(E|e)xpression( of )?)|((P|p)rotein (L|l)evel(s)?( of )?)|((I|i)mmunohistochemi(cal|stry)( ((S|s)taining|(S|s)tatus|(E|e)xpression|(A|a)ssay))?( of)?)|(IHC( |-)(((P|p)ositive)|((N|n)egative)))|(IHC( )?[0-9]\\+)) +protein overexpression protein overexpression protein over(-)?express(ed|ion|ing|es) +protein underexpression protein underexpression protein under(-)?express(ed|ion|ing|es) +overexpression overexpression ((((mrna|rna) )?(non-)?over(-| )?express(ed|ion|ing|es)( of )?)|(transcriptional up(-)?regulation)|(elevated level(s)? of )|(up(-)?regulat(es|ion|ed))|((increased|increase in |up(-)?regulated|prominent(ly)?|high(ly|er)?) express(ed|ion))) +underexpression underexpression ((((mrna|rna) )?under(-| )?express(ed|ion|es|ing)( of )?)|(ihc loss)|silenced|(transcriptional down(-)?regulation( of )?)|(down(-)?regulat(es|ion|ed)( of )?)|(loss of expression( of )?)|((decreased|low(er)?|no|zero|down(-)?regulated) expression)|not expressed|(no expresssion( of )?)) +single nucleotide polymorphism single nucleotide polymorphism single nucleotide polymorphism|snp +splice variant splice variant ((splice ((mutation|variant)(s)?))|(splice site (alteration|mutation|substitution|variant)(s)?)) +structural variant structural variant (structural variant(s)?|((cytogenetic|gene|chromosom(e|al) )?rearrangement(s)?)|(large( |-)?scale (gene )?rearrangement(s))) +synonymous mutation synonymous mutation ((synonymous|silent)( coding)?( (mutation(s)?|substitution(s)?))) +switch of function switch of function switch of function +translocation translocation (gene )?translocat(ion|ing)(s)? +truncation truncation (truncat(ed|ing|ion(s)?)( mutation(s)?)?)|truncated form +wildtype wildtype ((N|n)on-(A|a)mplified)|((N|n)onamplified)|((N|n)on(-| )?(D|d)eleted)|((W|w)ild(-| )?(T|t)ype)|((U|u)nmutated)|((N|n)on(-)?(M|m)utated)|( WT )|-(WT|wt)|(WILD( |-)?TYPE) +codon codon ((amino acid position [0-9]{1,})|( codon(s)? [0-9]{1,}((/[0-9]{1,})|(( or | and | et | |-)[0-9]{1,}))*)) +codon mutation codon mutation (mutation(s)? (in|of) codon(s)? [0-9]{1,}((/[0-9]{1,})|(( or | and | et | |-)[0-9]{1,}))*) +exon mutation exon mutation ((((met|c(-)?met) )?(exon(s)? [0-9]{1,} skipping))|(metex14)|(exon(s)? [0-9]{1,2}(( (or|and|et) |-| |/)[0-9]{1,2})* ((splice|skipping) )?(substitution|snp|variant|mutation|alteration)(s)?)|((splice )?(mutation|variant|substitution|snp|alteration)(s)?( (detected|occur(red)?))? (in|of)( [A-Z0-9]{3,8})? exon(s)? [0-9]{1,2}(( (or|and|to|et) |-| |/)[0-9]{1,2})*)) +exon deletion exon deletion ((ex[1-9][0-9]{0,}del)|(exon(s)? [0-9]{1,2}(( (or|and|et) |-| |/)[0-9]{1,2})* del(etion(s)?)?)|(deletion(s)?( (detected|occur(red)?|found))? (in|of)( [A-Z0-9]{3,8})? exon(s)? [0-9]{1,2}(( (or|and|et) |-| |/)[0-9]{1,2})*)|(exon del-[0-9]{1,2})|(exon [0-9]{1,}-del)) +exon insertion exon insertion ((ex[1-9][0-9]{0,}ins)|(exon(s)? [0-9]{1,2}(( (or|and|et) |-| |/)[0-9]{1,2})* insertion(s)?)|(insertion(s)?( (detected|occur(red)?|found))? (in|of) exon(s)? [0-9]{1,2}(( (or|and|et) |-| |/)[0-9]{1,2})*)|(exon ins-[0-9]{1,2})|(exon [0-9]{1,2}-ins)) +deficiency deficiency deficienc(y|ies)|deficancy +rearrangement rearrangement re(arrangement(s)?|arranged|arranging)|gen(e|etic|omic)? rearrangement(s)?|chromosomal rearrangement(s)? +mutation mutation mutation(s)?|mutated|mutant|mutate|mutating|mutational|mutate|mutating|mutate|mutating diff --git a/src/trialmatchai/registry/criteria_chunking.py b/src/trialmatchai/registry/criteria_chunking.py new file mode 100644 index 00000000..ac199463 --- /dev/null +++ b/src/trialmatchai/registry/criteria_chunking.py @@ -0,0 +1,185 @@ +"""Eligibility-criteria chunking. + +Splits a free-text eligibility section into individual, typed criteria. This +folds the domain knowledge from the legacy regex preprocessor — multi-level +enumeration hierarchies, varied inclusion/exclusion headers, parenthetical +protection, and decimal/abbreviation split-exceptions — into one streamlined +pass over the text. + +Public API: ``split_eligibility_criteria(text) -> list[{"type", "criterion"}]`` +where ``type`` is "inclusion", "exclusion", or "unknown". +""" + +from __future__ import annotations + +import re + +# --- Header detection ------------------------------------------------------- +# A line is a section header when, reduced to alpha words, it is essentially the +# inclusion/exclusion label (with optional qualifiers / "for "), or it +# is a "...the following inclusion/exclusion criteria" lead-in. This is precise +# enough not to misfire on a real criterion that merely mentions "inclusion". +_HEADER_CORE = re.compile( + r"^(?:key|main|general|principal|primary|additional|specific|major)?\s*" + r"(inclusion|exclusion)(?:\s+criteria)?(?:\s+for\s+.+)?$" +) +_HEADER_FOLLOWING = re.compile(r"following\s+(inclusion|exclusion)\s+criteria") + +# A header that begins a line and may be followed (after a colon) by inline +# criteria, e.g. "Exclusion Criteria: 1. Pregnancy 2. Active infection". +_LEADING_HEADER = re.compile( + r"^\s*(?:key|main|general|principal|primary|additional|specific|major)?\s*" + r"(inclusion|exclusion)(?:\s+criteria)?\s*:\s*(.*)$", + re.IGNORECASE, +) + +# --- Enumeration markers ---------------------------------------------------- +# A leading list marker at the start of a line. Numeric markers REQUIRE a +# trailing "." or ")" so a bare "18 years" is not mistaken for item 18, and the +# mandatory trailing whitespace means "e.g." / "i.e." are not treated as markers. +_LEADING_MARKER = re.compile( + r"^\s*(?:" + r"[-–—*•·]" # - – — * • · + r"|\(?[0-9]{1,2}(?:\.[0-9]{1,2}){1,3}[.)]?" # multi-level: 1.2 1.2.3 1.2. + r"|\(?[0-9]{1,2}[.)]" # single: 1. 1) + r"|\([0-9]{1,2}\)" # (1) + r"|\([a-zA-Z]\)" # (a) + r"|\(?(?:i{1,3}|iv|v|vi{0,3}|ix|x)[.)]" # roman i. ii) (iv) + r"|[a-zA-Z][.)]" # a. b) + r")\s+" +) + +# Mid-line marker (preceded and followed by whitespace) — used to split several +# criteria packed onto one line. +_MIDLINE_MARKER = re.compile( + r"\s(" + r"[0-9]{1,2}(?:\.[0-9]{1,2}){0,3}[.)]" + r"|\([0-9a-zA-Z]{1,3}\)" + r"|[a-z][.)]" + r"|[-–—•*]" + r")\s" +) + + +def detect_header(line: str) -> str | None: + """Return 'inclusion'/'exclusion' if the line is a section header, else None.""" + stripped = line.strip().rstrip(":").strip() + core = re.sub(r"[^a-z ]+", " ", stripped.casefold()) + core = re.sub(r"\s+", " ", core).strip() + if not core: + return None + match = _HEADER_CORE.match(core) + if match: + return match.group(1) + match = _HEADER_FOLLOWING.search(core) + if match: + return match.group(1) + return None + + +def _mask_parens(text: str) -> str: + """Blank out parenthesized spans so markers inside them are not split points.""" + out = list(text) + depth = 0 + for i, char in enumerate(text): + if char in "([{": + depth += 1 + out[i] = " " + elif char in ")]}": + depth = max(0, depth - 1) + out[i] = " " + elif depth > 0: + out[i] = " " + return "".join(out) + + +def _split_inline(line: str) -> list[str]: + """Split a line into segments at mid-line enumeration markers (paren-safe).""" + masked = _mask_parens(line) + cut_points = [0] + for match in _MIDLINE_MARKER.finditer(masked): + start = match.start(1) + if start > 0: + cut_points.append(start) + cut_points = sorted(set(cut_points)) + segments = [ + line[cut_points[i] : cut_points[i + 1]] for i in range(len(cut_points) - 1) + ] + segments.append(line[cut_points[-1] :]) + return segments + + +def _starts_new_criterion(line: str) -> bool: + return bool(_LEADING_MARKER.match(line)) + + +def _strip_marker(line: str) -> str: + return _LEADING_MARKER.sub("", line, count=1) + + +def _clean(text: str) -> str: + cleaned = re.sub(r"\s+", " ", text).strip(" :-\t") + if detect_header(cleaned): + return "" + return cleaned + + +def _is_useful(text: str) -> bool: + return len(text) >= 3 and detect_header(text) is None + + +def split_eligibility_criteria(text: str) -> list[dict[str, str]]: + if not text or not text.strip(): + return [] + + current_type = "unknown" + entries: list[dict[str, str]] = [] + buffered: list[str] = [] + + def flush() -> None: + if not buffered: + return + criterion = _clean(" ".join(buffered)) + buffered.clear() + if _is_useful(criterion): + entries.append({"type": current_type, "criterion": criterion}) + + for raw_line in text.splitlines(): + line = raw_line.strip() + if not line: + flush() + continue + + # A header at the start of the line sets the section type. If the colon + # form carries inline criteria after it, process the remainder below. + leading = _LEADING_HEADER.match(line) + if leading: + flush() + current_type = leading.group(1).lower() + remainder = leading.group(2).strip() + if not remainder: + continue + line = remainder + else: + header = detect_header(line) + if header: + flush() + current_type = header + continue + + for segment in _split_inline(line): + segment = segment.strip() + if not segment: + continue + if _starts_new_criterion(segment): + flush() + buffered.append(_strip_marker(segment)) + else: + buffered.append(segment) + + flush() + if entries: + return entries + + fallback = _clean(text) + return [{"type": "unknown", "criterion": fallback}] if fallback else [] diff --git a/src/trialmatchai/registry/normalization.py b/src/trialmatchai/registry/normalization.py index 91d7ffd5..95055ee0 100644 --- a/src/trialmatchai/registry/normalization.py +++ b/src/trialmatchai/registry/normalization.py @@ -3,6 +3,10 @@ import re from typing import Any +from trialmatchai.registry.criteria_chunking import split_eligibility_criteria + +__all__ = ["normalize_study", "split_eligibility_criteria"] + def normalize_study(study: dict[str, Any]) -> dict[str, Any]: """Normalize a ClinicalTrials.gov v2 study into TrialMatchAI trial JSON.""" @@ -50,48 +54,6 @@ def normalize_study(study: dict[str, Any]) -> dict[str, Any]: return {key: value for key, value in normalized.items() if value not in (None, "", [])} -def split_eligibility_criteria(text: str) -> list[dict[str, str]]: - if not text or not text.strip(): - return [] - - current_type = "unknown" - entries: list[dict[str, str]] = [] - buffered: list[str] = [] - - def flush() -> None: - if not buffered: - return - criterion = " ".join(buffered).strip() - buffered.clear() - if _is_useful_criterion(criterion): - entries.append({"type": current_type, "criterion": criterion}) - - for raw_line in text.splitlines(): - line = raw_line.strip() - if not line: - flush() - continue - detected_type = _detect_criteria_header(line) - if detected_type: - flush() - current_type = detected_type - continue - cleaned = _clean_criterion_line(line) - if not cleaned: - flush() - continue - if _starts_new_criterion(line): - flush() - buffered.append(cleaned) - else: - buffered.append(cleaned) - - flush() - if entries: - return entries - - fallback = _clean_criterion_line(text) - return [{"type": "unknown", "criterion": fallback}] if fallback else [] def _mapping(value: Any) -> dict[str, Any]: @@ -176,30 +138,3 @@ def _reference_rows(value: Any) -> list[dict[str, str]]: return rows -def _detect_criteria_header(line: str) -> str | None: - normalized = re.sub(r"[^a-z]+", " ", line.casefold()).strip() - if normalized in {"inclusion criteria", "inclusion"}: - return "inclusion" - if normalized in {"exclusion criteria", "exclusion"}: - return "exclusion" - return None - - -def _starts_new_criterion(line: str) -> bool: - return bool(re.match(r"^\s*(?:[-*•]|\d+[\).]|[a-zA-Z][\).])\s+", line)) - - -def _clean_criterion_line(line: str) -> str: - cleaned = re.sub(r"^\s*(?:[-*•]|\d+[\).]|[a-zA-Z][\).])\s+", "", line) - cleaned = re.sub(r"\s+", " ", cleaned).strip(" :-\t") - if _detect_criteria_header(cleaned): - return "" - return cleaned - - -def _is_useful_criterion(text: str) -> bool: - if len(text) < 3: - return False - if _detect_criteria_header(text): - return False - return True diff --git a/tests/test_criteria_chunking.py b/tests/test_criteria_chunking.py new file mode 100644 index 00000000..5533309d --- /dev/null +++ b/tests/test_criteria_chunking.py @@ -0,0 +1,105 @@ +"""Tests for the eligibility-criteria chunker (registry/criteria_chunking.py).""" + +from __future__ import annotations + +from trialmatchai.registry.criteria_chunking import ( + detect_header, + split_eligibility_criteria, +) + + +def _criteria(text): + return [(c["type"], c["criterion"]) for c in split_eligibility_criteria(text)] + + +def test_simple_dashed_inclusion_exclusion(): + text = "\n".join( + [ + "Inclusion Criteria:", + "- Age 18 years or older", + "- Histologically confirmed lung cancer", + "Exclusion Criteria:", + "- Prior investigational therapy", + ] + ) + assert _criteria(text) == [ + ("inclusion", "Age 18 years or older"), + ("inclusion", "Histologically confirmed lung cancer"), + ("exclusion", "Prior investigational therapy"), + ] + + +def test_unknown_fallback_for_unheadered_single_line(): + assert split_eligibility_criteria("Able to consent.") == [ + {"type": "unknown", "criterion": "Able to consent."} + ] + + +def test_varied_headers_are_detected(): + assert detect_header("Key Inclusion Criteria:") == "inclusion" + assert detect_header("EXCLUSION CRITERIA") == "exclusion" + assert detect_header("Inclusion criteria for Cohort A:") == "inclusion" + assert detect_header("Patients must meet the following exclusion criteria:") == "exclusion" + # Not headers: + assert detect_header("- Age 18 years or older") is None + assert detect_header("No prior chemotherapy (inclusion in another study allowed)") is None + + +def test_numbered_and_multilevel_markers(): + text = "\n".join( + [ + "Inclusion Criteria", + "1. Adults aged 18 or older", + "2. ECOG performance status 0-1", + "2.1 No prior systemic therapy", + "Exclusion Criteria", + "a) Pregnancy", + "(b) Active infection", + ] + ) + assert _criteria(text) == [ + ("inclusion", "Adults aged 18 or older"), + ("inclusion", "ECOG performance status 0-1"), + ("inclusion", "No prior systemic therapy"), + ("exclusion", "Pregnancy"), + ("exclusion", "Active infection"), + ] + + +def test_continuation_lines_are_joined(): + text = "\n".join( + [ + "Inclusion Criteria:", + "- Measurable disease per RECIST 1.1 with at least one", + " lesion not previously irradiated", + ] + ) + assert _criteria(text) == [ + ( + "inclusion", + "Measurable disease per RECIST 1.1 with at least one lesion not previously irradiated", + ) + ] + + +def test_decimal_values_do_not_trigger_false_splits(): + text = "Inclusion Criteria:\n- Hemoglobin 9.5 g/dL or higher at screening" + assert _criteria(text) == [ + ("inclusion", "Hemoglobin 9.5 g/dL or higher at screening") + ] + + +def test_parenthetical_markers_are_not_split_points(): + text = "Inclusion Criteria:\n- Adequate organ function (see section 2.3 for details)" + assert _criteria(text) == [ + ("inclusion", "Adequate organ function (see section 2.3 for details)") + ] + + +def test_multiple_criteria_packed_on_one_line(): + text = "Exclusion Criteria: 1. Pregnancy 2. Active infection 3. Prior therapy" + # The header is on the same line as the first marker; types resolve to exclusion. + result = _criteria(text) + assert ("exclusion", "Pregnancy") in result + assert ("exclusion", "Active infection") in result + assert ("exclusion", "Prior therapy") in result diff --git a/tests/test_variant_recognizer.py b/tests/test_variant_recognizer.py new file mode 100644 index 00000000..72abc5d3 --- /dev/null +++ b/tests/test_variant_recognizer.py @@ -0,0 +1,51 @@ +"""Tests for the deterministic genetic-variant recognizer and compositing.""" + +from __future__ import annotations + +from trialmatchai.entities.recognizers import ( + CompositeRecognizer, + RegexSchemaRecognizer, + RegexVariantRecognizer, + _load_variant_patterns, +) +from trialmatchai.entities.schemas import load_entity_schemas + + +def test_variant_patterns_load(): + patterns = _load_variant_patterns() + assert len(patterns) > 10 # the curated table has dozens of patterns + assert all(hasattr(p, "finditer") for _, p in patterns) + + +def test_recognizes_hgvs_protein_and_dna_variants(): + recognizer = RegexVariantRecognizer() + text = "BRAF p.V600E and the c.1799T>A variant were detected." + spans = {ann.text for ann in recognizer.recognize([text], [])[0]} + assert any("V600E" in s for s in spans) + assert any("1799T>A" in s for s in spans) + + +def test_recognizes_gene_fusion(): + recognizer = RegexVariantRecognizer() + spans = {ann.text.lower() for ann in recognizer.recognize(["EGFR gene fusion"], [])[0]} + assert any("fusion" in s for s in spans) + + +def test_composite_merges_model_and_variant_spans(): + schemas = [s for s in load_entity_schemas() if s.id == "disease"] + composite = CompositeRecognizer( + RegexSchemaRecognizer(), RegexVariantRecognizer() + ) + text = "Patient with cancer harboring BRAF p.V600E" + annotations = composite.recognize([text], schemas)[0] + groups = {ann.entity_group for ann in annotations} + # Both the schema-recognized disease and the variant span are present. + assert "disease" in groups + assert any(ann.text.endswith("V600E") or "V600E" in ann.text for ann in annotations) + + +def test_no_zero_width_matches(): + recognizer = RegexVariantRecognizer() + for ann in recognizer.recognize(["plain text without variants"], [])[0]: + assert ann.end > ann.start + assert ann.text.strip() From b1f344a50d568a92ac52e64801f91e16811483de Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 11:29:57 +0200 Subject: [PATCH 29/64] docs: cite the Nature Communications paper Replace the arXiv reference with an explicit "please cite" message pointing to the Nature Communications paper (with a BibTeX entry); keep the Zenodo DOI as the software archive. --- README.md | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a77761c0..0d99485f 100644 --- a/README.md +++ b/README.md @@ -172,8 +172,26 @@ uv run python scripts/scan_secrets.py uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 ``` -## Support & citation +## Citation + +If you use TrialMatchAI in your research, please cite our **Nature +Communications** paper: + +> Abdallah, M. _et al._ TrialMatchAI. _Nature Communications_ (2026). +> + +```bibtex +@article{trialmatchai, + title = {TrialMatchAI}, + author = {Abdallah, Majd and others}, + journal = {Nature Communications}, + year = {2026}, + doi = {10.1038/s41467-026-70509-w}, + url = {https://www.nature.com/articles/s41467-026-70509-w} +} +``` + +## Support - Email: abdallahmajd7@gmail.com -- DOI: https://doi.org/10.5281/zenodo.18329084 -- arXiv: https://arxiv.org/abs/2505.08508 +- Software archive (DOI): From b9a3519da80a33989771b43301d7df71e58df2a2 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 14:59:58 +0200 Subject: [PATCH 30/64] feat: first-level planner + constraint scoring, with review-fix corrections Adds the multi-channel first-level query planner and the eligibility-constraint extraction/evaluation subsystem, and corrects the bugs found in review: Constraints - exclusion criteria the patient cleanly passes now reward instead of scoring neutral (relation "absent": exclusion -> not-violated, inclusion -> neutral) - biomarker evaluation is wild-type-safe (a negative/wild-type patient no longer satisfies a "present"/"mutated" requirement) - age regexes require an explicit year unit or age cue (no more "100 to 200 mg" -> age); comparator-less labs are skipped (no silent ge default) - unknown_is_neutral config is now honored (penalizes unconfirmable inclusions) First-level planner - hard_filters config is actually applied (and [] truly disables filters); age parsing degrades gracefully instead of aborting the search; a guard logs when all channels return nothing; disease_synonyms output is deterministic Other - restore the entity_extraction.variant_regex knob broken by extra="forbid" - remove the vestigial GLiNER-v1 backend Regression tests added for each fix. --- .env.example | 11 + README.md | 404 +++++++++++---- docs/finetuning.md | 6 +- docs/interoperability.md | 2 +- pyproject.toml | 2 - src/trialmatchai/config/config.json | 24 +- src/trialmatchai/config/settings.py | 108 +++- src/trialmatchai/constraints/__init__.py | 30 ++ src/trialmatchai/constraints/evaluation.py | 445 ++++++++++++++++ src/trialmatchai/constraints/extraction.py | 487 ++++++++++++++++++ src/trialmatchai/constraints/models.py | 121 +++++ src/trialmatchai/constraints/reports.py | 119 +++++ src/trialmatchai/entities/recognizers.py | 53 +- src/trialmatchai/finetuning/__init__.py | 4 +- .../interop/exporters/matching_summary.py | 5 +- src/trialmatchai/main.py | 174 +++++-- src/trialmatchai/matching/eligibility_base.py | 4 +- .../matching/retrieval/criteria_retrieval.py | 89 +++- .../matching/retrieval/first_level_planner.py | 399 ++++++++++++++ .../matching/retrieval/synonyms.py | 3 +- .../matching/retrieval/trial_retrieval.py | 133 ++++- src/trialmatchai/registry/preparation.py | 9 + src/trialmatchai/schemas/phenopacket.py | 2 +- src/trialmatchai/services/preflight.py | 4 - tests/test_config_pytest.py | 11 + tests/test_constraints.py | 317 ++++++++++++ tests/test_first_level_planner.py | 327 ++++++++++++ tests/test_first_level_search_pytest.py | 2 +- tests/test_import_patient_cli.py | 2 +- tests/test_patient_interop.py | 2 +- tests/test_patient_runtime_loading.py | 2 +- tests/test_schemas.py | 4 +- tests/test_search_queries_pytest.py | 2 +- tests/test_second_level_search_pytest.py | 131 +++++ tests/test_settings.py | 21 +- uv.lock | 4 - 36 files changed, 3231 insertions(+), 232 deletions(-) create mode 100644 src/trialmatchai/constraints/__init__.py create mode 100644 src/trialmatchai/constraints/evaluation.py create mode 100644 src/trialmatchai/constraints/extraction.py create mode 100644 src/trialmatchai/constraints/models.py create mode 100644 src/trialmatchai/constraints/reports.py create mode 100644 src/trialmatchai/matching/retrieval/first_level_planner.py create mode 100644 tests/test_constraints.py create mode 100644 tests/test_first_level_planner.py diff --git a/.env.example b/.env.example index 68a22c5a..fc19d6ce 100644 --- a/.env.example +++ b/.env.example @@ -16,6 +16,12 @@ TRIALMATCHAI_SEARCH_TRIALS_TABLE=trials TRIALMATCHAI_SEARCH_CRITERIA_TABLE=criteria TRIALMATCHAI_SEARCH_CANDIDATE_LIMIT=1000 TRIALMATCHAI_SEARCH_MODE=hybrid +TRIALMATCHAI_FIRST_LEVEL_ENABLED=true +TRIALMATCHAI_FIRST_LEVEL_MAX_TRIALS=1000 +TRIALMATCHAI_FIRST_LEVEL_PER_CHANNEL_SIZE=300 +TRIALMATCHAI_FIRST_LEVEL_VECTOR_SCORE_THRESHOLD=0.0 +TRIALMATCHAI_FIRST_LEVEL_LLM_EXPANSION_ENABLED=false +TRIALMATCHAI_FIRST_LEVEL_WRITE_REPORTS=true TRIALMATCHAI_MODEL_BASE_MODEL=microsoft/phi-4 TRIALMATCHAI_MODEL_COT_ADAPTER_PATH=models/finetuned_phi_reasoning @@ -33,6 +39,11 @@ TRIALMATCHAI_CONCEPT_TABLE=concepts TRIALMATCHAI_LINK_ACCEPT=0.80 TRIALMATCHAI_LINK_REJECT=0.30 +TRIALMATCHAI_CONSTRAINTS_ENABLED=true +TRIALMATCHAI_CONSTRAINTS_SCORE_WEIGHT=0.25 +TRIALMATCHAI_CONSTRAINTS_LLM_EXTRACTION_ENABLED=false +TRIALMATCHAI_CONSTRAINTS_WRITE_REPORTS=true + TRIALMATCHAI_REGISTRY_SOURCE=clinicaltrials.gov TRIALMATCHAI_REGISTRY_API_BASE_URL=https://clinicaltrials.gov/api/v2/studies TRIALMATCHAI_REGISTRY_KEYWORDS_FILE= diff --git a/README.md b/README.md index 0d99485f..7de83c88 100644 --- a/README.md +++ b/README.md @@ -2,180 +2,384 @@ TrialMatchAI logo -**AI-driven clinical trial matching.** TrialMatchAI ingests patient data, finds -relevant trials with hybrid local retrieval, and produces ranked recommendations -with **criterion-level eligibility explanations** — all on a single GPU server, -with no external search service. +TrialMatchAI is an AI-driven clinical trial matching pipeline. It imports patient +data, retrieves relevant trials from local LanceDB tables, and produces ranked +trial recommendations with criterion-level eligibility explanations. -[Quickstart](#quickstart) · [How it works](#how-it-works) · [Bring your own models](#bring-your-own-models) · [Fine-tuning](docs/finetuning.md) · [Configuration](#configuration) · [CLI](#cli-reference) +The supported deployment is a single Python 3.11 GPU server. Trial search is +embedded and file-backed; there is no Elasticsearch, hosted vector database, or +separate search service to run. -> **Disclaimer.** For research and informational use only. This is not medical -> advice, not a medical device, and must not replace review by qualified -> healthcare professionals. +[Install](#install) | [Quickstart](#quickstart) | [How It Works](#how-it-works) | [Configuration](#configuration) | [CLI](#cli-reference) ---- +> For research and informational use only. TrialMatchAI is not medical advice, +> not a medical device, and must not replace review by qualified healthcare +> professionals. -## How it works +## Requirements -```text -Patient data (text / FHIR / Phenopacket / OMOP) - │ interop importers → canonical PatientProfile - ▼ -Biomedical NER (GLiNER + deterministic variant patterns) ──► concept linking - ▼ (OMOP/UMLS, hybrid lexical+vector) - ▼ -First-level retrieval ──► LanceDB hybrid search (BM25 + embeddings) over trials - ▼ -Criterion retrieval + LLM reranker (cross-encoder, Yes/No) - ▼ -CoT eligibility reasoning (per-criterion Met / Not Met / Violated …) - ▼ -Ranking ──► ranked trials + per-criterion explanations (results/) -``` - -The generative LLM stages — **reranker and CoT** — run on **vLLM** (the only LLM -backend), which serves fine-tuned **LoRA adapters** natively. Every model stage — -NER, reranker, and CoT — is swappable and fine-tunable (see -[Bring your own models](#bring-your-own-models)). +- Python 3.11 (`pyproject.toml` requires `>=3.11,<3.12`) +- `uv` recommended, or `pip` with an editable install +- NVIDIA GPU for vLLM-backed matching and fine-tuning +- Around 100 GB disk for datasets, model artifacts, LanceDB tables, manifests, + and run outputs +- OMOP vocabulary files if you want to build the concept-linking table locally -## Requirements +## Install -- Python **3.11** -- [`uv`](https://docs.astral.sh/uv/) recommended (or `pip` with an editable install) -- NVIDIA GPU with enough VRAM for the selected LLM backend -- ~100 GB disk for datasets, models, LanceDB tables, and results -- A LanceDB concept table built from OMOP + curated dictionaries (for entity normalization) +Clone the repository and install from the project root: -## Quickstart +```bash +git clone +cd TrialMatchAI +``` + +Base install with `uv` gives the package and CLI entry points without the heavy +model stack: ```bash -# 1. Install. Base CLIs only: uv sync -# …or the full model-backed stack: +uv run trialmatchai --help +``` + +Install the full model-backed runtime: + +```bash uv sync --extra llm --extra gpu --extra entity ``` +Install the fine-tuning stack: + +```bash +uv sync --extra finetune +``` + +Editable install with `pip` is also supported: + +```bash +python3.11 -m venv .venv +source .venv/bin/activate +pip install -e . +``` + +Optional extras with `pip`: + +```bash +pip install -e ".[entity]" +pip install -e ".[llm,entity]" +pip install -e ".[llm,gpu,entity]" +pip install -e ".[finetune]" +``` + | Extra | Adds | -|-------|------| -| `entity` | GLiNER/GLiNER2 biomedical NER | -| `llm` | local embedding + LLM stack (torch, transformers, peft) | -| `gpu` | vLLM + bitsandbytes (Linux) | -| `finetune` | training stack for `trialmatchai-finetune` | +| --- | --- | +| `entity` | GLiNER2 biomedical NER | +| `llm` | local embedding and LLM dependencies | +| `gpu` | vLLM and bitsandbytes; intended for Linux CUDA hosts | +| `finetune` | training dependencies for `trialmatchai-finetune` | + +Installing the package is only the first step. Real matching also needs runtime +data, model artifacts, a concept table, normalized trials, and LanceDB search +tables. + +## Quickstart + +Copy the environment template if you need local overrides: + +```bash +cp .env.example .env +``` + +Check the installation and configured paths: ```bash -# 2. Verify config and backends. -uv run trialmatchai-healthcheck --require-tables +uv run trialmatchai-healthcheck +``` + +Download packaged artifacts: -# 3. Provision data, concept KB, trials, and search tables. +```bash uv run trialmatchai-bootstrap-data -uv run trialmatchai-build-concepts --concept-csv data/omop/CONCEPT.csv --synonym-csv data/omop/CONCEPT_SYNONYM.csv +``` + +Build the concept-linking table from OMOP vocabulary files: + +```bash +uv run trialmatchai-build-concepts \ + --concept-csv data/omop/CONCEPT.csv \ + --synonym-csv data/omop/CONCEPT_SYNONYM.csv +``` + +Fetch recent ClinicalTrials.gov studies and update local trial JSON plus +LanceDB: + +```bash uv run trialmatchai-update-registry --since 2026-06-01 --max-studies 100 +``` + +Build or rebuild search tables from normalized trial JSON: + +```bash uv run trialmatchai-index --prepare +``` + +Import patients into canonical TrialMatchAI profiles: -# 4. Import patients (text / FHIR / Phenopacket / OMOP — format auto-detected). +```bash uv run trialmatchai-import-patient --input data/patients/raw/patient-1.txt --format text uv run trialmatchai-import-patient --input data/patients/raw/patient-1.fhir.json uv run trialmatchai-import-patient --input data/patients/omop_extract --format omop +``` + +Run batch matching: -# 5. Run the batch matcher. Results land in results/. +```bash uv run trialmatchai-run ``` -## Bring your own models +Results are written under `results//`. + +## How It Works + +```text +Patient data (text / FHIR / Phenopacket / OMOP) + | + v +Interop importers -> canonical PatientProfile + | + v +GLiNER2 NER + deterministic variant patterns -> concept linking + | + v +First-level trial retrieval in LanceDB (BM25 + embeddings) + | + v +Multi-channel query fusion for broad candidate recall + | + v +Criterion retrieval + vLLM Yes/No reranker + | + v +Constraint-aware criterion scoring + | + v +vLLM eligibility reasoning per criterion + | + v +Final ranking + explanations in results/ +``` + +The generative LLM stages, reranker and eligibility reasoning, run on vLLM. +LoRA adapters are served natively through vLLM. NER, reranker, and eligibility +reasoning are configurable and fine-tunable. + +## Data And Storage + +TrialMatchAI uses embedded LanceDB tables by default: + +- Search DB: `data/search` +- Trial table: `trials` +- Criteria table: `criteria` +- Concept-linking DB: `data/concepts` +- Concept table: `concepts` + +ClinicalTrials.gov records are normalized to JSON files under +`data/trials_jsons/.json`. During indexing, TrialMatchAI prepares: + +- one trial row per NCT ID, including text fields, metadata filters, date/age + fields, and embedding vectors +- one criteria row per eligibility criterion, including criterion text, + criterion embedding, eligibility type, entity annotations, and parsed + eligibility constraints + +The trial and criteria tables each get full-text search fields and vector +columns, so retrieval can run in `bm25`, `vector`, or `hybrid` mode. + +Patient inputs are imported before matching. Each imported patient is stored as +a canonical profile under `data/patients/profiles/.json`, with a +matching summary under `data/patients/summaries/.json`. + +## Patient Inputs + +The importer supports: + +- free-text notes: `.txt` and `.md` +- GA4GH Phenopacket JSON +- HL7 FHIR R4 Bundle JSON, individual FHIR resource JSON, NDJSON, and JSONL +- OMOP CDM extract folders with CSV or Parquet tables + +Importers preserve provenance and unsupported source elements where possible. +The matching summary is rendered deterministically from the canonical +`PatientProfile`; raw patient files are not consumed directly by +`trialmatchai-run`. + +See [docs/interoperability.md](docs/interoperability.md) for format details. + +## First-Level Retrieval + +First-level retrieval is recall-oriented. It builds a multi-channel query plan +from the canonical `PatientProfile` and matching summary, then searches each +channel separately and fuses candidates with reciprocal rank fusion. + +Channels include primary conditions, linked concept synonyms, broader disease +terms, patient narrative text, biomarkers, prior therapy or procedures, and +optional LLM-generated expansions. LLM expansion is off by default; deterministic +concept and patient-profile expansion are the default path. + +The first level only hard-filters by age, sex/gender, and recruitment status. +Location, biomarkers, phase, prior therapy, and eligibility constraints remain +soft signals for later retrieval and reasoning stages. + +When enabled, first-level artifacts are written under `results//`: + +- `first_level_query_plan.json` +- `first_level_candidates.json` + +## Constraint-Aware Retrieval + +TrialMatchAI parses common eligibility logic from criteria rows and compares it +with the canonical `PatientProfile` during second-stage retrieval. V1 supports +age, sex or gender, conditions, medications and prior therapy, procedures, labs, +biomarkers, ECOG/Karnofsky-style performance status, temporal phrases, and +inclusion/exclusion polarity. -Defaults are good starting points, not a ceiling. Point the pipeline at your own -checkpoints or adapters — no code changes: +Constraints are a soft ranking signal. They can boost matching inclusion +criteria, penalize violated inclusion or exclusion criteria, and leave unknown +facts neutral. They do not hard-exclude trials and they are not medical advice; +the final vLLM eligibility reasoning remains the final judge. + +When enabled, per-patient reports are written under `results//`: + +- `constraint_evaluations.json` +- `constraint_summary.md` +- `top_trials_explained.json` + +## Bring Your Own Models + +Defaults are starting points. Point the pipeline at your own checkpoints or +adapters through config or environment variables. | Component | Default | Config key | -|-----------|---------|------------| +| --- | --- | --- | | Biomedical NER | `fastino/gliner2-base` | `entity_extraction.model_name` | | Reranker | `google/gemma-2-2b-it` | `model.reranker_adapter_path` | | CoT eligibility | configured CoT model | `model.cot_adapter_path` | -Train your own with the built-in fine-tuner: +Fine-tune model components with: ```bash uv sync --extra finetune -trialmatchai-finetune cot --base-model microsoft/phi-4 --train-data data/cot.jsonl --output-dir models/cot-adapter -trialmatchai-finetune reranker --base-model google/gemma-2-2b-it --train-data data/reranker.jsonl --output-dir models/reranker-adapter -trialmatchai-finetune ner --base-model fastino/gliner2-base --train-data data/ner.jsonl --output-dir models/ner +uv run trialmatchai-finetune cot \ + --base-model microsoft/phi-4 \ + --train-data data/finetune/cot.jsonl \ + --output-dir models/cot-adapter +uv run trialmatchai-finetune reranker \ + --base-model google/gemma-2-2b-it \ + --train-data data/finetune/reranker.jsonl \ + --output-dir models/reranker-adapter +uv run trialmatchai-finetune ner \ + --base-model fastino/gliner2-base-v1 \ + --train-data data/finetune/ner.jsonl \ + --output-dir models/ner ``` -Full data formats, flags, and plug-back-in steps: **[docs/finetuning.md](docs/finetuning.md)**. +See [docs/finetuning.md](docs/finetuning.md) for accepted training formats and +adapter configuration. ## Configuration -Defaults live in `src/trialmatchai/config/config.json`; override at runtime via -`.env` or environment variables. Common knobs: +Defaults live in `src/trialmatchai/config/config.json`. Runtime overrides can be +set in `.env` or as environment variables. + +Common overrides: ```bash -TRIALMATCHAI_SEARCH_DB_PATH=data/search # embedded LanceDB tables -TRIALMATCHAI_SEARCH_MODE=hybrid # hybrid | bm25 | vector -TRIALMATCHAI_ENTITY_BACKEND=gliner2 # gliner2 | gliner | regex | disabled +TRIALMATCHAI_OUTPUT_DIR=results +TRIALMATCHAI_TRIALS_JSON_FOLDER=data/trials_jsons +TRIALMATCHAI_SEARCH_DB_PATH=data/search +TRIALMATCHAI_SEARCH_MODE=hybrid +TRIALMATCHAI_FIRST_LEVEL_MAX_TRIALS=1000 +TRIALMATCHAI_FIRST_LEVEL_PER_CHANNEL_SIZE=300 +TRIALMATCHAI_FIRST_LEVEL_VECTOR_SCORE_THRESHOLD=0.0 +TRIALMATCHAI_FIRST_LEVEL_LLM_EXPANSION_ENABLED=false +TRIALMATCHAI_ENTITY_BACKEND=gliner2 TRIALMATCHAI_ENTITY_SCHEMA_PATH=entity_schemas/trialmatchai.yaml TRIALMATCHAI_CONCEPT_DB_PATH=data/concepts -TRIALMATCHAI_LINK_ACCEPT=0.80 # concept-linking accept threshold +TRIALMATCHAI_LINK_ACCEPT=0.80 TRIALMATCHAI_LINK_REJECT=0.30 -TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false # true only if a model requires it -TRIALMATCHAI_LOG_JSON=1 # structured logs +TRIALMATCHAI_CONSTRAINTS_ENABLED=true +TRIALMATCHAI_CONSTRAINTS_SCORE_WEIGHT=0.25 +TRIALMATCHAI_CONSTRAINTS_LLM_EXTRACTION_ENABLED=false +TRIALMATCHAI_CONSTRAINTS_WRITE_REPORTS=true +TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false +TRIALMATCHAI_LOG_JSON=1 ``` -The full set of overrides is documented in [`.env.example`](.env.example). -Patient interoperability details: [docs/interoperability.md](docs/interoperability.md). +The full override list is in [`.env.example`](.env.example). -## CLI reference +## CLI Reference | Command | Purpose | -|---------|---------| -| `trialmatchai-healthcheck` | Validate config, paths, and (optionally) LanceDB tables | -| `trialmatchai-bootstrap-data` | Download/extract external data + model artifacts | +| --- | --- | +| `trialmatchai` | Command group for the main subcommands | +| `trialmatchai-healthcheck` | Validate config, paths, optional model deps, and LanceDB tables | +| `trialmatchai-bootstrap-data` | Download and extract runtime data/model artifacts | | `trialmatchai-build-concepts` | Build the LanceDB concept table for entity normalization | -| `trialmatchai-update-registry` | Fetch new/changed ClinicalTrials.gov studies and upsert LanceDB | -| `trialmatchai-index` | Build the LanceDB trial + criteria search tables | -| `trialmatchai-import-patient` | Import text / FHIR / Phenopacket / OMOP patient data | +| `trialmatchai-update-registry` | Fetch changed ClinicalTrials.gov studies and upsert LanceDB | +| `trialmatchai-index` | Prepare/index trial and criteria search tables | +| `trialmatchai-import-patient` | Import text, FHIR, Phenopacket, or OMOP patient data | | `trialmatchai-run` | Run the batch matching pipeline | -| `trialmatchai-finetune` | Fine-tune the NER / reranker / CoT models | - -The first seven are also available as subcommands of the `trialmatchai` group, -e.g. `uv run trialmatchai healthcheck` or `uv run python -m trialmatchai healthcheck`. - -## Deployment - -The supported deployment is a single Python 3.11 GPU server/VM. Trial and -criteria search use embedded LanceDB tables under `data/search`, so there is no -separate search service, container, socket, or service credential to manage. The -registry updater is built for cron / systemd timers / GitHub Actions — see -[docs/registry-updater.md](docs/registry-updater.md). +| `trialmatchai-finetune` | Fine-tune NER, reranker, or eligibility reasoning models | -## Security - -Never commit real credentials, private keys, datasets, models, local LanceDB -data, run manifests, or results. Copy the template and keep runtime values local: +The first seven commands are also available as subcommands: ```bash -cp .env.example .env +uv run trialmatchai healthcheck +uv run python -m trialmatchai healthcheck ``` -Artifact bootstrap supports optional SHA-256 verification via -`TRIALMATCHAI_PROCESSED_TRIALS_SHA256`, `TRIALMATCHAI_MODELS_SHA256`, and -`TRIALMATCHAI_CRITERIA_PART__SHA256`. +## Deployment -Dependency auditing ignores `CVE-2025-3000` because vLLM 0.23 pins Torch 2.11.0 -and the advisory lists no fixed Torch version; revisit when upgrading either. +The supported deployment is a single Python 3.11 GPU server or VM. Search tables +are local LanceDB files under `data/search`, and concept linking uses a separate +LanceDB database under `data/concepts`. + +The registry updater is designed for cron, systemd timers, or GitHub Actions. +See [docs/registry-updater.md](docs/registry-updater.md). ## Development ```bash +uv sync uv run ruff check . uv run pytest uv run python scripts/scan_secrets.py uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 ``` +## Security + +Never commit real credentials, private keys, datasets, models, local LanceDB +data, run manifests, or results. Keep runtime values local: + +```bash +cp .env.example .env +``` + +Artifact bootstrap supports optional SHA-256 verification through: + +- `TRIALMATCHAI_PROCESSED_TRIALS_SHA256` +- `TRIALMATCHAI_MODELS_SHA256` +- `TRIALMATCHAI_CRITERIA_PART__SHA256` + +Dependency auditing currently ignores `CVE-2025-3000` because vLLM 0.23 pins +Torch 2.11.0 and the advisory lists no fixed Torch version. Revisit this when +upgrading vLLM or Torch. + ## Citation -If you use TrialMatchAI in your research, please cite our **Nature -Communications** paper: +If you use TrialMatchAI in your research, please cite the Nature Communications +paper: > Abdallah, M. _et al._ TrialMatchAI. _Nature Communications_ (2026). > diff --git a/docs/finetuning.md b/docs/finetuning.md index 295e9797..7d04d6ea 100644 --- a/docs/finetuning.md +++ b/docs/finetuning.md @@ -7,7 +7,7 @@ checkpoints/adapters via config, and train those adapters with the built-in | Component | Default | Config key | Fine-tune target | |-----------|---------|------------|------------------| -| Biomedical NER | `fastino/gliner2-base` | `entity_extraction.model_name` | GLiNER checkpoint | +| Biomedical NER | `fastino/gliner2-base` | `entity_extraction.model_name` | GLiNER2 checkpoint | | Reranker | `google/gemma-2-2b-it` | `model.reranker_adapter_path` | LoRA adapter | | CoT eligibility | configured CoT model | `model.cot_adapter_path` | LoRA adapter | @@ -121,5 +121,5 @@ trialmatchai-finetune ner \ - 4-bit quantized loading is on by default (`--no-4bit` to disable); `bf16` is default (`--fp16` to switch). See `trialmatchai-finetune --help` for all flags. -- GLiNER's training API varies by version; if your installed `gliner` exposes a - different interface, adapt `src/trialmatchai/finetuning/ner.py`. +- GLiNER2's training API can vary by version; if your installed `gliner2` exposes + a different interface, adapt `src/trialmatchai/finetuning/ner.py`. diff --git a/docs/interoperability.md b/docs/interoperability.md index 6f6e9b3c..4e38030a 100644 --- a/docs/interoperability.md +++ b/docs/interoperability.md @@ -50,7 +50,7 @@ runtime summary fields: - `main_conditions` - `other_conditions` -- `expanded_sentences` +- `patient_narrative` - `age` - `gender` - `provenance` diff --git a/pyproject.toml b/pyproject.toml index 5842063d..e295f10b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,7 +41,6 @@ llm = [ entity = [ "torch==2.11.0", "transformers==5.6.2", - "gliner==0.2.27", "gliner2>=1.3.1,<2", ] finetune = [ @@ -50,7 +49,6 @@ finetune = [ "accelerate==1.8.1", "peft==0.15.2", "datasets>=3.0,<5", - "gliner==0.2.27", "gliner2>=1.3.1,<2", "bitsandbytes==0.49.2; sys_platform == 'linux' or sys_platform == 'win32'", ] diff --git a/src/trialmatchai/config/config.json b/src/trialmatchai/config/config.json index 5ac0a77f..dcdbc051 100644 --- a/src/trialmatchai/config/config.json +++ b/src/trialmatchai/config/config.json @@ -2,7 +2,6 @@ "entity_extraction": { "backend": "gliner2", "model_name": "fastino/gliner2-base", - "fallback_model_name": "gliner-community/gliner_large-v2.5", "model_revision": null, "schema_path": "entity_schemas/trialmatchai.yaml", "threshold": 0.8, @@ -92,8 +91,27 @@ "search": { "mode": "hybrid", "vector_score_threshold": 0.5, - "max_trials_first_level": 300, - "max_trials_second_level": 100 + "max_trials_first_level": 1000, + "max_trials_second_level": 100, + "first_level": { + "enabled": true, + "max_trials": 1000, + "per_channel_size": 300, + "fusion": "rrf", + "rrf_k": 60, + "vector_score_threshold": 0.0, + "llm_expansion_enabled": false, + "llm_max_terms": 12, + "write_reports": true, + "hard_filters": ["age", "sex", "overall_status"] + } + }, + "constraints": { + "enabled": true, + "score_weight": 0.25, + "llm_extraction_enabled": false, + "unknown_is_neutral": true, + "write_reports": true }, "use_cot_reasoning": true, "rag": { diff --git a/src/trialmatchai/config/settings.py b/src/trialmatchai/config/settings.py index 04f590aa..91635914 100644 --- a/src/trialmatchai/config/settings.py +++ b/src/trialmatchai/config/settings.py @@ -2,19 +2,21 @@ from typing import Any, Dict, Iterable, Literal, Tuple -from pydantic import BaseModel, Field, field_validator +from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator class EntityExtractionSettings(BaseModel): - backend: Literal["gliner2", "gliner", "regex", "disabled"] = "gliner2" + backend: Literal["gliner2", "regex", "disabled"] = "gliner2" model_name: str = "fastino/gliner2-base" - fallback_model_name: str = "gliner-community/gliner_large-v2.5" model_revision: str | None = None schema_path: str = "entity_schemas/trialmatchai.yaml" threshold: float = Field(0.8, ge=0.0, le=1.0) batch_size: int = Field(8, ge=1) device: str = "auto" trust_remote_code: bool = False + # Augment model NER with the deterministic genetic-variant recognizer. + variant_regex: bool = True + model_config = ConfigDict(extra="forbid") class ConceptLinkerSettings(BaseModel): @@ -116,11 +118,51 @@ def validate_pooling(cls, value: str) -> str: return value +class FirstLevelSearchSettings(BaseModel): + enabled: bool = True + max_trials: int = Field(1000, ge=1) + per_channel_size: int = Field(300, ge=1) + fusion: Literal["rrf"] = "rrf" + rrf_k: int = Field(60, ge=1) + vector_score_threshold: float = Field(0.0, ge=0.0, le=1.0) + llm_expansion_enabled: bool = False + llm_max_terms: int = Field(12, ge=0) + write_reports: bool = True + hard_filters: list[Literal["age", "sex", "overall_status"]] = Field( + default_factory=lambda: ["age", "sex", "overall_status"] + ) + + class SearchSettings(BaseModel): mode: Literal["bm25", "vector", "hybrid"] = "hybrid" vector_score_threshold: float = Field(0.5, ge=0.0, le=1.0) - max_trials_first_level: int = Field(300, ge=1) + max_trials_first_level: int = Field(1000, ge=1) max_trials_second_level: int = Field(100, ge=1) + first_level: FirstLevelSearchSettings = Field( + default_factory=FirstLevelSearchSettings + ) + + @model_validator(mode="before") + @classmethod + def sync_first_level_alias(cls, data): + if not isinstance(data, dict): + return data + normalized = dict(data) + first_level = dict(normalized.get("first_level") or {}) + if "first_level" not in normalized and "max_trials_first_level" in normalized: + first_level["max_trials"] = normalized["max_trials_first_level"] + normalized["first_level"] = first_level + elif "max_trials" in first_level: + normalized["max_trials_first_level"] = first_level["max_trials"] + return normalized + + +class ConstraintSettings(BaseModel): + enabled: bool = True + score_weight: float = Field(0.25, ge=0.0, le=1.0) + llm_extraction_enabled: bool = False + unknown_is_neutral: bool = True + write_reports: bool = True class RagSettings(BaseModel): @@ -164,6 +206,7 @@ class TrialMatchSettings(BaseModel): cot: CotSettings LLM_reranker: LLMRerankerSettings search: SearchSettings + constraints: ConstraintSettings = Field(default_factory=ConstraintSettings) use_cot_reasoning: bool = True rag: RagSettings vllm: VllmSettings @@ -210,10 +253,6 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: ), "TRIALMATCHAI_ENTITY_BACKEND": ("entity_extraction", "backend"), "TRIALMATCHAI_ENTITY_MODEL_NAME": ("entity_extraction", "model_name"), - "TRIALMATCHAI_ENTITY_FALLBACK_MODEL_NAME": ( - "entity_extraction", - "fallback_model_name", - ), "TRIALMATCHAI_ENTITY_MODEL_REVISION": ( "entity_extraction", "model_revision", @@ -252,6 +291,27 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "strict_validation", ), "TRIALMATCHAI_PATIENT_COPY_RAW": ("patient_inputs", "copy_raw"), + "TRIALMATCHAI_CONSTRAINTS_ENABLED": ("constraints", "enabled"), + "TRIALMATCHAI_CONSTRAINTS_LLM_EXTRACTION_ENABLED": ( + "constraints", + "llm_extraction_enabled", + ), + "TRIALMATCHAI_CONSTRAINTS_UNKNOWN_IS_NEUTRAL": ( + "constraints", + "unknown_is_neutral", + ), + "TRIALMATCHAI_CONSTRAINTS_WRITE_REPORTS": ("constraints", "write_reports"), + "TRIALMATCHAI_FIRST_LEVEL_ENABLED": ("search", "first_level", "enabled"), + "TRIALMATCHAI_FIRST_LEVEL_LLM_EXPANSION_ENABLED": ( + "search", + "first_level", + "llm_expansion_enabled", + ), + "TRIALMATCHAI_FIRST_LEVEL_WRITE_REPORTS": ( + "search", + "first_level", + "write_reports", + ), } for env_key, path in bool_env_map.items(): value = os.getenv(env_key) @@ -272,6 +332,22 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "search", "max_trials_first_level", ), + "TRIALMATCHAI_FIRST_LEVEL_MAX_TRIALS": ( + "search", + "first_level", + "max_trials", + ), + "TRIALMATCHAI_FIRST_LEVEL_PER_CHANNEL_SIZE": ( + "search", + "first_level", + "per_channel_size", + ), + "TRIALMATCHAI_FIRST_LEVEL_RRF_K": ("search", "first_level", "rrf_k"), + "TRIALMATCHAI_FIRST_LEVEL_LLM_MAX_TERMS": ( + "search", + "first_level", + "llm_max_terms", + ), "TRIALMATCHAI_SEARCH_MAX_TRIALS_SECOND_LEVEL": ( "search", "max_trials_second_level", @@ -287,6 +363,16 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: _set_nested(raw, path, int(value)) except ValueError: pass + max_trials_first_level_env = os.getenv("TRIALMATCHAI_SEARCH_MAX_TRIALS_FIRST_LEVEL") + if max_trials_first_level_env: + try: + _set_nested( + raw, + ("search", "first_level", "max_trials"), + int(max_trials_first_level_env), + ) + except ValueError: + pass float_env_map: dict[str, Tuple[str, ...]] = { "TRIALMATCHAI_ENTITY_THRESHOLD": ("entity_extraction", "threshold"), @@ -301,6 +387,12 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "registry", "failure_threshold", ), + "TRIALMATCHAI_CONSTRAINTS_SCORE_WEIGHT": ("constraints", "score_weight"), + "TRIALMATCHAI_FIRST_LEVEL_VECTOR_SCORE_THRESHOLD": ( + "search", + "first_level", + "vector_score_threshold", + ), } for env_key, path in float_env_map.items(): value = os.getenv(env_key) diff --git a/src/trialmatchai/constraints/__init__.py b/src/trialmatchai/constraints/__init__.py new file mode 100644 index 00000000..d018a0d6 --- /dev/null +++ b/src/trialmatchai/constraints/__init__.py @@ -0,0 +1,30 @@ +from trialmatchai.constraints.evaluation import ( + apply_constraint_score, + build_patient_constraint_context, + evaluate_constraint_set, +) +from trialmatchai.constraints.extraction import extract_constraint_set, normalize_polarity +from trialmatchai.constraints.models import ( + Constraint, + ConstraintEvaluation, + ConstraintSet, + CriterionConstraintEvaluation, + PatientConstraintContext, + PatientConstraintFact, +) +from trialmatchai.constraints.reports import write_constraint_reports + +__all__ = [ + "Constraint", + "ConstraintEvaluation", + "ConstraintSet", + "CriterionConstraintEvaluation", + "PatientConstraintContext", + "PatientConstraintFact", + "apply_constraint_score", + "build_patient_constraint_context", + "evaluate_constraint_set", + "extract_constraint_set", + "normalize_polarity", + "write_constraint_reports", +] diff --git a/src/trialmatchai/constraints/evaluation.py b/src/trialmatchai/constraints/evaluation.py new file mode 100644 index 00000000..61d0c3d7 --- /dev/null +++ b/src/trialmatchai/constraints/evaluation.py @@ -0,0 +1,445 @@ +from __future__ import annotations + +import re +from collections.abc import Iterable, Sequence +from typing import Any + +from trialmatchai.constraints.models import ( + Constraint, + ConstraintEvaluation, + ConstraintSet, + CriterionConstraintEvaluation, + EvaluationStatus, + PatientConstraintContext, + PatientConstraintFact, +) +from trialmatchai.interop.models import ClinicalFact, PatientProfile +from trialmatchai.utils.text import flatten_text + + +MATCH_SIGNAL = 1.0 +INCLUSION_VIOLATION_SIGNAL = -0.6 +EXCLUSION_VIOLATION_SIGNAL = -1.0 +EXCLUSION_NOT_VIOLATED_SIGNAL = 0.25 +# Applied to an inclusion criterion we cannot confirm when unknown_is_neutral=False. +UNKNOWN_INCLUSION_PENALTY = -0.1 + + +def build_patient_constraint_context(profile: PatientProfile) -> PatientConstraintContext: + facts: list[PatientConstraintFact] = [] + facts.extend(_facts_from_clinical(profile.conditions, "condition")) + facts.extend(_facts_from_clinical(profile.phenotypes, "phenotype")) + facts.extend(_facts_from_clinical(profile.observations, "lab")) + facts.extend(_facts_from_clinical(profile.medications, "medication")) + facts.extend(_facts_from_clinical(profile.procedures, "procedure")) + facts.extend(_facts_from_clinical(profile.genomic_findings, "biomarker")) + facts.extend(_facts_from_clinical(profile.cancer_profile, "condition")) + facts.extend(_facts_from_clinical(profile.family_history, "condition")) + facts.extend(_performance_facts(profile)) + return PatientConstraintContext( + patient_id=profile.patient_id, + age_years=profile.demographics.age_years, + sex=profile.demographics.sex, + gender=profile.demographics.gender, + facts=facts, + ) + + +def evaluate_constraint_set( + constraint_set: ConstraintSet, + patient_context: PatientConstraintContext, + *, + unknown_is_neutral: bool = True, +) -> CriterionConstraintEvaluation: + evaluations = [ + evaluate_constraint(constraint, constraint_set, patient_context) + for constraint in constraint_set.constraints + ] + signals = [evaluation.score_signal for evaluation in evaluations if evaluation.score_signal != 0] + if signals: + signal = _clamp(sum(signals) / len(signals)) + elif ( + not unknown_is_neutral + and constraint_set.polarity == "inclusion" + and evaluations + ): + # We could not confirm any inclusion constraint; apply a small penalty. + signal = UNKNOWN_INCLUSION_PENALTY + else: + signal = 0.0 + return CriterionConstraintEvaluation( + nct_id=constraint_set.nct_id, + criteria_id=constraint_set.criteria_id, + criterion=constraint_set.source_text, + polarity=constraint_set.polarity, + evaluations=evaluations, + constraint_signal=signal, + matched_count=sum(1 for evaluation in evaluations if evaluation.status == "matched"), + violated_count=sum(1 for evaluation in evaluations if evaluation.status == "violated"), + unknown_count=sum(1 for evaluation in evaluations if evaluation.status == "unknown"), + not_applicable_count=sum( + 1 for evaluation in evaluations if evaluation.status == "not_applicable" + ), + ) + + +def evaluate_constraint( + constraint: Constraint, + constraint_set: ConstraintSet, + patient_context: PatientConstraintContext, +) -> ConstraintEvaluation: + relation, evidence, reason = _evaluate_relation(constraint, patient_context) + status, signal = _status_and_signal(constraint_set.polarity, relation) + return ConstraintEvaluation( + nct_id=constraint_set.nct_id, + criteria_id=constraint_set.criteria_id, + polarity=constraint_set.polarity, + constraint=constraint, + status=status, + score_signal=signal, + patient_evidence=evidence, + reason=reason, + ) + + +def apply_constraint_score( + base_score: float, + signal: float, + *, + score_weight: float, +) -> float: + return _clamp(base_score + score_weight * signal, lower=0.0, upper=1.0) + + +def _facts_from_clinical( + facts: Sequence[ClinicalFact], + kind: str, +) -> list[PatientConstraintFact]: + output: list[PatientConstraintFact] = [] + for fact in facts: + numeric_value, unit = _parse_numeric_value(fact.description) + output.append( + PatientConstraintFact( + kind=kind, # type: ignore[arg-type] + label=fact.label, + normalized_codes=[ + code.model_dump(mode="json", exclude_none=True) + for code in fact.normalized_codes + ], + value=numeric_value, + unit=unit, + negated=fact.negated, + temporality=fact.temporality, + evidence_text=fact.evidence_text or _fact_text(fact), + source=fact.provenance.model_dump(mode="json", exclude_none=True), + ) + ) + return output + + +def _performance_facts(profile: PatientProfile) -> list[PatientConstraintFact]: + output: list[PatientConstraintFact] = [] + buckets = [ + *profile.observations, + *profile.cancer_profile, + *profile.diagnostic_reports, + ] + for fact in buckets: + text = _fact_text(fact) + for label, pattern in ( + ("ECOG", r"\becog\b[^0-9]*(\d)"), + ("Karnofsky", r"\bkarnofsky\b[^0-9]*(\d{2,3})"), + ): + match = re.search(pattern, text, re.IGNORECASE) + if not match: + continue + output.append( + PatientConstraintFact( + kind="performance_status", + label=label, + value=float(match.group(1)), + negated=fact.negated, + temporality=fact.temporality, + evidence_text=fact.evidence_text or text, + source=fact.provenance.model_dump(mode="json", exclude_none=True), + ) + ) + return output + + +def _evaluate_relation( + constraint: Constraint, + patient_context: PatientConstraintContext, +) -> tuple[str, str | None, str]: + if constraint.kind == "age": + return _evaluate_age(constraint, patient_context) + if constraint.kind == "sex": + return _evaluate_sex(constraint, patient_context) + if constraint.kind == "lab": + return _evaluate_numeric_fact(constraint, patient_context, ("lab",)) + if constraint.kind == "performance_status": + return _evaluate_numeric_fact( + constraint, + patient_context, + ("performance_status", "lab"), + ) + if constraint.kind == "biomarker": + return _evaluate_biomarker(constraint, patient_context) + return _evaluate_concept_fact(constraint, patient_context, (constraint.kind,)) + + +def _evaluate_age( + constraint: Constraint, + patient_context: PatientConstraintContext, +) -> tuple[str, str | None, str]: + age = patient_context.age_years + if age is None: + return "unknown", None, "Patient age is unavailable." + satisfied = _compare_numeric(age, constraint) + evidence = f"Patient age {age:g} years" + if satisfied: + return "satisfied", evidence, "Patient age satisfies the age constraint." + return "unsatisfied", evidence, "Patient age does not satisfy the age constraint." + + +def _evaluate_sex( + constraint: Constraint, + patient_context: PatientConstraintContext, +) -> tuple[str, str | None, str]: + requested = _normalize_text(str(constraint.value or constraint.label)) + current = _normalize_text(patient_context.sex or patient_context.gender or "") + if not current: + return "unknown", None, "Patient sex/gender is unavailable." + if requested in {"all", "any", "both"} or current in {"all", "any", "both"}: + return "satisfied", current, "Sex/gender constraint is broadly compatible." + if requested == current: + return "satisfied", current, "Patient sex/gender satisfies the constraint." + return "unsatisfied", current, "Patient sex/gender does not satisfy the constraint." + + +def _evaluate_numeric_fact( + constraint: Constraint, + patient_context: PatientConstraintContext, + kinds: tuple[str, ...], +) -> tuple[str, str | None, str]: + candidates = _matching_facts(patient_context.facts, constraint, kinds) + if not candidates: + return "unknown", None, f"No patient fact found for {constraint.label}." + for fact in candidates: + if fact.negated: + return "unsatisfied", fact.evidence_text, f"Patient fact is explicitly absent: {fact.label}." + if fact.value is None: + continue + if _compare_numeric(fact.value, constraint): + return "satisfied", fact.evidence_text, f"Patient value satisfies {constraint.label}." + return "unsatisfied", fact.evidence_text, f"Patient value does not satisfy {constraint.label}." + return "unknown", candidates[0].evidence_text, f"No numeric value available for {constraint.label}." + + +_NEGATIVE_BIOMARKER_TERMS = ( + "negative", + "wild type", + "wildtype", + "wild-type", + "not detected", + "no mutation", + "absent", +) + + +def _evaluate_biomarker( + constraint: Constraint, + patient_context: PatientConstraintContext, +) -> tuple[str, str | None, str]: + candidates = _matching_facts( + patient_context.facts, + constraint, + ("biomarker", "lab", "condition"), + ) + if not candidates: + # Patient has no record of this biomarker. + return "absent", None, f"No patient biomarker fact found for {constraint.label}." + + fact = candidates[0] + fact_text = _normalize_text(flatten_text([fact.label, fact.evidence_text])) + patient_negative = fact.negated or any( + term in fact_text for term in _NEGATIVE_BIOMARKER_TERMS + ) + expected_negative = str(constraint.comparator) in {"negative", "wildtype"} + + if expected_negative: + if patient_negative: + return "satisfied", fact.evidence_text, "Patient biomarker is negative/wild-type as required." + return "unsatisfied", fact.evidence_text, "Patient biomarker is not negative/wild-type." + # expected present / positive / mutated + if patient_negative: + return ( + "unsatisfied", + fact.evidence_text, + "Patient biomarker is negative/wild-type; conflicts with the required presence.", + ) + return "satisfied", fact.evidence_text, "Patient biomarker evidence satisfies the constraint." + + +def _evaluate_concept_fact( + constraint: Constraint, + patient_context: PatientConstraintContext, + kinds: tuple[str, ...], +) -> tuple[str, str | None, str]: + candidates = _matching_facts(patient_context.facts, constraint, kinds) + requires_absence = constraint.comparator == "absent" + + # The patient "has" the item when a matching, non-negated fact exists. + present_fact = next((f for f in candidates if not f.negated), None) + evidence = candidates[0].evidence_text if candidates else None + + if requires_absence: + if present_fact is not None: + return "unsatisfied", present_fact.evidence_text, f"Patient has {constraint.label}, but absence is required." + return "satisfied", evidence, f"Patient has no record of {constraint.label} (absence required)." + + if present_fact is not None: + return "satisfied", present_fact.evidence_text, f"Patient fact matches {constraint.label}." + # No matching fact, or only negated ones -> the patient lacks the item. + return "absent", evidence, f"Patient has no record of {constraint.label}." + + +def _status_and_signal(polarity: str, relation: str) -> tuple[EvaluationStatus, float]: + """Map a (polarity, relation) pair to a scoring status and signal. + + Relations: + satisfied - patient meets the criterion's condition / has the item + unsatisfied - patient's value contradicts a numeric bound + absent - patient does not have the item (no record / negated) + unknown - genuinely indeterminate (e.g. age/sex/lab unavailable) + """ + if relation == "not_applicable": + return "not_applicable", 0.0 + + if polarity == "exclusion": + if relation == "satisfied": + # Patient has the excluded item -> excluded. + return "violated", EXCLUSION_VIOLATION_SIGNAL + if relation in {"unsatisfied", "absent"}: + # Patient does not meet / lacks the excluded item -> not excluded. + return "matched", EXCLUSION_NOT_VIOLATED_SIGNAL + return "unknown", 0.0 + + # inclusion / unknown polarity + if relation == "satisfied": + return "matched", MATCH_SIGNAL + if relation == "unsatisfied": + return "violated", INCLUSION_VIOLATION_SIGNAL + # "absent" for an inclusion: we cannot confirm a required presence from an + # (often incomplete) profile, so stay neutral rather than penalize. + return "unknown", 0.0 + + +def _matching_facts( + facts: Iterable[PatientConstraintFact], + constraint: Constraint, + kinds: tuple[str, ...], +) -> list[PatientConstraintFact]: + constraint_text = _normalize_text(constraint.label) + constraint_codes = { + f"{code.get('vocabulary')}:{code.get('code')}".casefold() + for code in constraint.normalized_codes + if code.get("vocabulary") and code.get("code") + } + matches: list[tuple[float, PatientConstraintFact]] = [] + for fact in facts: + if fact.kind not in kinds: + continue + fact_codes = { + f"{code.get('vocabulary')}:{code.get('code')}".casefold() + for code in fact.normalized_codes + if code.get("vocabulary") and code.get("code") + } + if constraint_codes and constraint_codes & fact_codes: + matches.append((1.0, fact)) + continue + fact_text = _normalize_text(flatten_text([fact.label, fact.evidence_text])) + score = _text_match_score(constraint_text, fact_text) + if score > 0: + matches.append((score, fact)) + matches.sort(key=lambda item: item[0], reverse=True) + return [fact for _, fact in matches] + + +def _compare_numeric(value: float, constraint: Constraint) -> bool: + comparator = constraint.comparator + target = _float_or_none(constraint.value) + if comparator == "between": + if constraint.min_value is not None and value < constraint.min_value: + return False + if constraint.max_value is not None and value > constraint.max_value: + return False + return True + if target is None: + return False + if comparator == "gt": + return value > target + if comparator == "ge": + return value >= target + if comparator == "lt": + return value < target + if comparator == "le": + return value <= target + if comparator == "eq": + return value == target + if comparator == "ne": + return value != target + return False + + +def _parse_numeric_value(value: str | None) -> tuple[float | None, str | None]: + if not value: + return None, None + match = re.search(r"(-?\d+(?:\.\d+)?)\s*([A-Za-z/%0-9^µμ.-]+)?", value) + if not match: + return None, None + unit = (match.group(2) or "").strip() or None + return float(match.group(1)), unit + + +def _fact_text(fact: ClinicalFact) -> str: + return flatten_text([fact.label, fact.description, fact.evidence_text]) + + +def _text_match_score(left: str, right: str) -> float: + if not left or not right: + return 0.0 + if left == right: + return 1.0 + if left in right or right in left: + return 0.95 + left_tokens = set(left.split()) + right_tokens = set(right.split()) + if not left_tokens or not right_tokens: + return 0.0 + overlap = len(left_tokens & right_tokens) + if overlap == 0: + return 0.0 + coverage = overlap / len(left_tokens) + jaccard = overlap / len(left_tokens | right_tokens) + score = 0.75 * coverage + 0.25 * jaccard + return score if score >= 0.5 else 0.0 + + +def _normalize_text(value: str) -> str: + value = value.casefold() + value = value.replace("non small", "non-small") + return " ".join(re.findall(r"[a-z0-9-]+", value)) + + +def _float_or_none(value: Any) -> float | None: + try: + if value is None: + return None + return float(value) + except (TypeError, ValueError): + return None + + +def _clamp(value: float, *, lower: float = -1.0, upper: float = 1.0) -> float: + return max(lower, min(upper, value)) diff --git a/src/trialmatchai/constraints/extraction.py b/src/trialmatchai/constraints/extraction.py new file mode 100644 index 00000000..cf095a51 --- /dev/null +++ b/src/trialmatchai/constraints/extraction.py @@ -0,0 +1,487 @@ +from __future__ import annotations + +import re +from typing import Any, Mapping + +from trialmatchai.constraints.models import ( + Constraint, + ConstraintPolarity, + ConstraintSet, +) +from trialmatchai.utils.text import flatten_text + + +GENE_SYMBOLS = ( + "ALK", + "BRAF", + "BRCA1", + "BRCA2", + "EGFR", + "ERBB2", + "HER2", + "KRAS", + "NTRK", + "PD-L1", + "PIK3CA", + "ROS1", + "TP53", +) +LAB_ALIASES = ( + "absolute neutrophil count", + "anc", + "alt", + "ast", + "bilirubin", + "creatinine", + "hemoglobin", + "platelet count", + "platelets", +) + + +def extract_constraint_set( + *, + nct_id: str, + criteria_id: str, + criterion: str, + eligibility_type: str, + entities: Any = None, +) -> ConstraintSet: + text = flatten_text(criterion) + polarity = normalize_polarity(eligibility_type) + constraints: list[Constraint] = [] + constraints.extend(_age_constraints(text)) + constraints.extend(_sex_constraints(text)) + constraints.extend(_performance_constraints(text)) + constraints.extend(_lab_constraints(text)) + constraints.extend(_biomarker_constraints(text)) + constraints.extend(_prior_therapy_constraints(text)) + constraints.extend(_temporal_constraints(text)) + constraints.extend(_entity_constraints(entities, text)) + constraints = _dedupe_constraints(constraints) + return ConstraintSet( + nct_id=str(nct_id), + criteria_id=str(criteria_id), + polarity=polarity, + source_text=text, + source_start=0 if text else None, + source_end=len(text) if text else None, + constraints=constraints, + ) + + +def normalize_polarity(value: str | None) -> ConstraintPolarity: + normalized = (value or "").casefold() + if "excl" in normalized: + return "exclusion" + if "incl" in normalized: + return "inclusion" + return "unknown" + + +def _age_constraints(text: str) -> list[Constraint]: + constraints: list[Constraint] = [] + lower = text.casefold() + # Every numeric age match must carry an explicit age signal — a trailing year + # unit OR a preceding "age/aged" cue — so dosing/lab numbers like + # "100 to 200 mg" or "at least 100 mg" are not mistaken for ages. + year = r"(?:years?|yrs?|y/?o)" + age_cue = r"(?:age[d]?|years?\s+of\s+age)" + + for pattern in ( + rf"\b(\d{{1,3}})\s*(?:-|to|through)\s*(\d{{1,3}})\s*{year}\b", + rf"\b{age_cue}\s*(\d{{1,3}})\s*(?:-|to|through)\s*(\d{{1,3}})\b", + ): + for match in re.finditer(pattern, lower): + start, end = match.span() + constraints.append( + Constraint( + kind="age", + label="age", + comparator="between", + min_value=float(match.group(1)), + max_value=float(match.group(2)), + unit="years", + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + ) + for pattern in ( + rf"\b(\d{{1,3}})\s*{year}\s*(?:or\s+)?(?:older|greater|above)\b", + rf"\b(?:>=|≥|at\s+least)\s*(\d{{1,3}})\s*{year}\b", + rf"\b{age_cue}\s*(\d{{1,3}})\s*(?:or\s+)?(?:older|greater|above)\b", + rf"\b{age_cue}\s*(?:>=|≥|at\s+least)\s*(\d{{1,3}})\b", + ): + for match in re.finditer(pattern, lower): + constraints.append(_age_bound(text, match, "ge", float(match.group(1)))) + for pattern in ( + rf"\b(?:younger|less|under|below)\s+than\s+(\d{{1,3}})\s*{year}\b", + rf"\b{age_cue}\s*(?:younger|less|under|below)\s+than\s+(\d{{1,3}})\b", + ): + for match in re.finditer(pattern, lower): + constraints.append(_age_bound(text, match, "lt", float(match.group(1)))) + for pattern in ( + rf"\b(\d{{1,3}})\s*{year}\s*(?:or\s+)?(?:younger|less|under)\b", + rf"\b{age_cue}\s*(\d{{1,3}})\s*(?:or\s+)?(?:younger|less|under)\b", + ): + for match in re.finditer(pattern, lower): + constraints.append(_age_bound(text, match, "le", float(match.group(1)))) + if not constraints and re.search(r"\badults?\b", lower): + match = re.search(r"\badults?\b", lower) + start, end = match.span() if match else (None, None) + constraints.append( + Constraint( + kind="age", + label="adult", + comparator="ge", + value=18.0, + unit="years", + confidence=0.7, + evidence_text=text[start:end] if start is not None else None, + evidence_start=start, + evidence_end=end, + ) + ) + return constraints + + +def _age_bound(text: str, match: re.Match[str], comparator: str, value: float) -> Constraint: + start, end = match.span() + return Constraint( + kind="age", + label="age", + comparator=comparator, # type: ignore[arg-type] + value=value, + unit="years", + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + + +def _sex_constraints(text: str) -> list[Constraint]: + lower = text.casefold() + constraints: list[Constraint] = [] + female = re.search(r"\b(female|females|woman|women)\b", lower) + male = re.search(r"\b(male|males|man|men)\b", lower) + if female and not male: + constraints.append(_sex_constraint(text, female, "female")) + elif male and not female: + constraints.append(_sex_constraint(text, male, "male")) + return constraints + + +def _sex_constraint(text: str, match: re.Match[str], value: str) -> Constraint: + start, end = match.span() + return Constraint( + kind="sex", + label="sex", + comparator="eq", + value=value, + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + + +def _performance_constraints(text: str) -> list[Constraint]: + constraints: list[Constraint] = [] + lower = text.casefold() + for match in re.finditer( + r"\becog(?:\s+performance\s+status)?(?:\s+of)?\s*(\d)\s*(?:-|to|or)\s*(\d)\b", + lower, + ): + start, end = match.span() + constraints.append( + Constraint( + kind="performance_status", + label="ECOG", + comparator="between", + min_value=float(match.group(1)), + max_value=float(match.group(2)), + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + ) + for match in re.finditer( + r"\becog(?:\s+performance\s+status)?\s*(?:<=|≤|no\s+greater\s+than|up\s+to)\s*(\d)\b", + lower, + ): + start, end = match.span() + constraints.append( + Constraint( + kind="performance_status", + label="ECOG", + comparator="le", + value=float(match.group(1)), + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + ) + for match in re.finditer( + r"\bkarnofsky\b.*?(?:>=|≥|at\s+least)\s*(\d{2,3})\b", + lower, + ): + start, end = match.span() + constraints.append( + Constraint( + kind="performance_status", + label="Karnofsky", + comparator="ge", + value=float(match.group(1)), + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + ) + return constraints + + +def _lab_constraints(text: str) -> list[Constraint]: + constraints: list[Constraint] = [] + aliases = "|".join(re.escape(alias) for alias in LAB_ALIASES) + pattern = re.compile( + rf"\b({aliases})\b(?:[^0-9<>≤≥=]{{0,40}})(>=|<=|≥|≤|>|<|=|at least|greater than|less than)?\s*([0-9]+(?:\.[0-9]+)?)\s*([A-Za-z/%0-9^µμ.-]+)?", + re.IGNORECASE, + ) + for match in pattern.finditer(text): + # Require an explicit comparator: a bare "creatinine 1.5" is directionally + # ambiguous (upper- vs lower-bound), and guessing inverts the signal. + if not match.group(2): + continue + label = _canonical_lab_label(match.group(1)) + comparator = _normalize_comparator(match.group(2)) + start, end = match.span() + constraints.append( + Constraint( + kind="lab", + label=label, + comparator=comparator, + value=float(match.group(3)), + unit=(match.group(4) or "").strip() or None, + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + ) + ) + return constraints + + +def _canonical_lab_label(value: str) -> str: + normalized = value.casefold() + if normalized == "anc": + return "absolute neutrophil count" + if normalized == "platelets": + return "platelet count" + return normalized + + +def _normalize_comparator(value: str) -> str: + normalized = value.strip().casefold() + if normalized in {">=", "≥", "at least", "greater than"}: + return "ge" + if normalized == ">": + return "gt" + if normalized in {"<=", "≤"}: + return "le" + if normalized in {"<", "less than"}: + return "lt" + if normalized == "=": + return "eq" + return "ge" + + +def _biomarker_constraints(text: str) -> list[Constraint]: + constraints: list[Constraint] = [] + gene_pattern = "|".join(re.escape(gene) for gene in GENE_SYMBOLS) + pattern = re.compile( + rf"\b({gene_pattern})\b(?:[-\s]*(mutated|mutation|positive|negative|wild[-\s]?type|amplification|overexpression))?", + re.IGNORECASE, + ) + for match in pattern.finditer(text): + status = (match.group(2) or "").casefold().replace(" ", "-") + comparator = "present" + if status in {"mutated", "mutation"}: + comparator = "mutated" + elif status in {"positive", "amplification", "overexpression"}: + comparator = "positive" + elif status == "negative": + comparator = "negative" + elif status in {"wild-type", "wildtype"}: + comparator = "wildtype" + start, end = match.span() + constraints.append( + Constraint( + kind="biomarker", + label=match.group(1).upper(), + comparator=comparator, # type: ignore[arg-type] + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + confidence=0.9 if comparator != "present" else 0.75, + ) + ) + return constraints + + +def _prior_therapy_constraints(text: str) -> list[Constraint]: + constraints: list[Constraint] = [] + patterns = ( + r"\bprior\s+(?:treatment|therapy)\s+with\s+([^.;,]+)", + r"\bpreviously\s+treated\s+with\s+([^.;,]+)", + r"\breceived\s+prior\s+([^.;,]+)", + r"\bprior\s+investigational\s+therapy\b", + ) + for pattern in patterns: + for match in re.finditer(pattern, text, re.IGNORECASE): + if match.lastindex: + label = match.group(1) + else: + label = "investigational therapy" + start, end = match.span() + constraints.append( + Constraint( + kind="medication", + label=_clean_label(label), + comparator="prior", + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + confidence=0.8, + ) + ) + return constraints + + +def _temporal_constraints(text: str) -> list[Constraint]: + constraints: list[Constraint] = [] + for match in re.finditer( + r"\bwithin\s+(?:the\s+last\s+)?(\d+)\s+(days?|weeks?|months?|years?)\b", + text, + re.IGNORECASE, + ): + start, end = match.span() + constraints.append( + Constraint( + kind="temporal", + label="time window", + comparator="current", + value=float(match.group(1)), + unit=match.group(2).lower(), + temporal_window=text[start:end], + evidence_text=text[start:end], + evidence_start=start, + evidence_end=end, + confidence=0.7, + ) + ) + return constraints + + +def _entity_constraints(entities: Any, text: str) -> list[Constraint]: + if not isinstance(entities, list): + return [] + constraints: list[Constraint] = [] + for entity in entities: + if not isinstance(entity, Mapping): + continue + group = str(entity.get("entity_group") or entity.get("class") or "").casefold() + label = _clean_label(entity.get("text") or entity.get("entity") or "") + if not label: + continue + kind = _entity_group_to_kind(group) + if kind is None: + continue + start = _safe_int(entity.get("start")) + end = _safe_int(entity.get("end")) + constraints.append( + Constraint( + kind=kind, + label=label, + comparator=_entity_comparator(kind, text), + normalized_codes=_entity_codes(entity), + evidence_text=text[start:end] if start is not None and end is not None else label, + evidence_start=start, + evidence_end=end, + confidence=float(entity.get("score") or 0.8), + ) + ) + return constraints + + +def _entity_group_to_kind(group: str) -> str | None: + if group in {"disease", "condition", "sign symptom", "sign_symptom"}: + return "condition" + if group in {"drug", "medication"}: + return "medication" + if group == "procedure": + return "procedure" + if group == "gene": + return "biomarker" + if group in {"laboratory test", "laboratory_test", "diagnostic test", "diagnostic_test"}: + return "lab" + return None + + +def _entity_comparator(kind: str, text: str) -> str: + if kind == "biomarker": + lower = text.casefold() + if re.search(r"\b(mutated|mutation)\b", lower): + return "mutated" + if re.search(r"\b(positive|amplification|overexpression)\b", lower): + return "positive" + if re.search(r"\bnegative\b", lower): + return "negative" + if kind == "medication" and re.search(r"\b(prior|previous|previously)\b", text, re.IGNORECASE): + return "prior" + return "present" + + +def _entity_codes(entity: Mapping[str, Any]) -> list[dict[str, Any]]: + codes = entity.get("normalized_id") or [] + if isinstance(codes, str): + codes = [codes] + output: list[dict[str, Any]] = [] + for code in codes: + text = str(code) + if not text or text == "CUI-less": + continue + if ":" in text: + vocabulary, value = text.split(":", 1) + else: + vocabulary, value = "local", text + output.append({"vocabulary": vocabulary, "code": value}) + return output + + +def _dedupe_constraints(constraints: list[Constraint]) -> list[Constraint]: + seen: set[tuple[Any, ...]] = set() + output: list[Constraint] = [] + for constraint in constraints: + key = ( + constraint.kind, + constraint.label.casefold(), + constraint.comparator, + constraint.value, + constraint.min_value, + constraint.max_value, + ) + if key in seen: + continue + seen.add(key) + output.append(constraint) + return output + + +def _clean_label(value: Any) -> str: + return re.sub(r"\s+", " ", str(value or "")).strip(" .;,:") + + +def _safe_int(value: Any) -> int | None: + try: + return int(value) + except (TypeError, ValueError): + return None diff --git a/src/trialmatchai/constraints/models.py b/src/trialmatchai/constraints/models.py new file mode 100644 index 00000000..4cb61792 --- /dev/null +++ b/src/trialmatchai/constraints/models.py @@ -0,0 +1,121 @@ +from __future__ import annotations + +from typing import Any, Literal + +from pydantic import BaseModel, ConfigDict, Field + + +ConstraintKind = Literal[ + "age", + "sex", + "condition", + "phenotype", + "medication", + "procedure", + "lab", + "biomarker", + "performance_status", + "temporal", +] +ConstraintPolarity = Literal["inclusion", "exclusion", "unknown"] +ConstraintComparator = Literal[ + "present", + "absent", + "eq", + "ne", + "gt", + "ge", + "lt", + "le", + "between", + "positive", + "negative", + "mutated", + "wildtype", + "prior", + "current", +] +EvaluationStatus = Literal["matched", "violated", "unknown", "not_applicable"] + + +class Constraint(BaseModel): + kind: ConstraintKind + label: str + comparator: ConstraintComparator = "present" + value: float | str | None = None + min_value: float | None = None + max_value: float | None = None + unit: str | None = None + normalized_codes: list[dict[str, Any]] = Field(default_factory=list) + temporal_window: str | None = None + confidence: float = Field(1.0, ge=0.0, le=1.0) + evidence_text: str | None = None + evidence_start: int | None = Field(default=None, ge=0) + evidence_end: int | None = Field(default=None, ge=0) + + model_config = ConfigDict(extra="forbid") + + +class ConstraintSet(BaseModel): + nct_id: str + criteria_id: str + polarity: ConstraintPolarity + source_text: str + source_start: int | None = Field(default=None, ge=0) + source_end: int | None = Field(default=None, ge=0) + constraints: list[Constraint] = Field(default_factory=list) + extractor_version: str = "deterministic-v1" + + model_config = ConfigDict(extra="forbid") + + +class PatientConstraintFact(BaseModel): + kind: ConstraintKind + label: str + normalized_codes: list[dict[str, Any]] = Field(default_factory=list) + value: float | None = None + unit: str | None = None + negated: bool = False + temporality: str | None = None + evidence_text: str | None = None + source: dict[str, Any] = Field(default_factory=dict) + + model_config = ConfigDict(extra="forbid") + + +class PatientConstraintContext(BaseModel): + patient_id: str + age_years: float | None = None + sex: str | None = None + gender: str | None = None + facts: list[PatientConstraintFact] = Field(default_factory=list) + + model_config = ConfigDict(extra="forbid") + + +class ConstraintEvaluation(BaseModel): + nct_id: str + criteria_id: str + polarity: ConstraintPolarity + constraint: Constraint + status: EvaluationStatus + score_signal: float = Field(0.0, ge=-1.0, le=1.0) + patient_evidence: str | None = None + reason: str + + model_config = ConfigDict(extra="forbid") + + +class CriterionConstraintEvaluation(BaseModel): + nct_id: str + criteria_id: str + criterion: str + polarity: ConstraintPolarity + evaluations: list[ConstraintEvaluation] = Field(default_factory=list) + constraint_signal: float = Field(0.0, ge=-1.0, le=1.0) + matched_count: int = 0 + violated_count: int = 0 + unknown_count: int = 0 + not_applicable_count: int = 0 + + model_config = ConfigDict(extra="forbid") diff --git a/src/trialmatchai/constraints/reports.py b/src/trialmatchai/constraints/reports.py new file mode 100644 index 00000000..47070242 --- /dev/null +++ b/src/trialmatchai/constraints/reports.py @@ -0,0 +1,119 @@ +from __future__ import annotations + +from collections import defaultdict +from pathlib import Path +from typing import Iterable + +from trialmatchai.constraints.models import CriterionConstraintEvaluation +from trialmatchai.utils.file_utils import write_json_file, write_text_file + + +def write_constraint_reports( + *, + output_folder: str | Path, + evaluations: Iterable[CriterionConstraintEvaluation], + top_trials: list[dict], +) -> None: + folder = Path(output_folder) + payload = [evaluation.model_dump(mode="json") for evaluation in evaluations] + explained_trials = _build_explained_trials(payload, top_trials) + write_json_file( + {"criteria": payload, "top_trials": top_trials}, + str(folder / "constraint_evaluations.json"), + ) + write_text_file( + _render_markdown(payload, top_trials), + str(folder / "constraint_summary.md"), + ) + write_json_file( + {"top_trials": explained_trials}, + str(folder / "top_trials_explained.json"), + ) + + +def _render_markdown(criteria: list[dict], top_trials: list[dict]) -> list[str]: + lines = ["# Constraint-Aware Retrieval Summary", ""] + if not criteria: + lines.extend( + [ + "No constraint evaluations were produced for this patient.", + "", + ] + ) + return lines + + scores = {trial.get("nct_id"): trial.get("score") for trial in top_trials} + by_trial: dict[str, list[dict]] = defaultdict(list) + for item in criteria: + by_trial[str(item.get("nct_id", "unknown"))].append(item) + + ordered_ids = [str(trial.get("nct_id")) for trial in top_trials if trial.get("nct_id")] + ordered_ids.extend(sorted(set(by_trial) - set(ordered_ids))) + for nct_id in ordered_ids: + trial_items = by_trial.get(nct_id, []) + lines.append(f"## {nct_id}") + score = scores.get(nct_id) + if isinstance(score, (int, float)): + lines.append(f"- Retrieval score: {score:.4f}") + shift = _ranking_shift(trial_items) + if shift: + lines.append(f"- Constraint ranking effect: {shift}") + for status, title in ( + ("matched", "Matched"), + ("violated", "Violated"), + ("unknown", "Unknown"), + ): + entries = _entries_for_status(trial_items, status) + if entries: + lines.append(f"- {title}:") + lines.extend(f" - {entry}" for entry in entries[:8]) + lines.append("") + return lines + + +def _build_explained_trials(criteria: list[dict], top_trials: list[dict]) -> list[dict]: + by_trial: dict[str, list[dict]] = defaultdict(list) + for item in criteria: + by_trial[str(item.get("nct_id", "unknown"))].append(item) + + explained: list[dict] = [] + for trial in top_trials: + nct_id = str(trial.get("nct_id", "")) + trial_items = by_trial.get(nct_id, []) + explained.append( + { + **trial, + "constraint_effect": _ranking_shift(trial_items) or "unchanged", + "matched_constraints": _entries_for_status(trial_items, "matched"), + "violated_constraints": _entries_for_status(trial_items, "violated"), + "unknown_constraints": _entries_for_status(trial_items, "unknown"), + } + ) + return explained + + +def _ranking_shift(trial_items: list[dict]) -> str | None: + if not trial_items: + return None + signal = sum(float(item.get("constraint_signal") or 0.0) for item in trial_items) + if signal > 0.05: + return "boosted" + if signal < -0.05: + return "penalized" + return "unchanged" + + +def _entries_for_status(trial_items: list[dict], status: str) -> list[str]: + entries: list[str] = [] + for item in trial_items: + criterion = item.get("criterion", "") + for evaluation in item.get("evaluations", []): + if evaluation.get("status") != status: + continue + constraint = evaluation.get("constraint", {}) + label = constraint.get("label") or constraint.get("kind") + reason = evaluation.get("reason") or "" + patient = evaluation.get("patient_evidence") or "no patient evidence" + trial = constraint.get("evidence_text") or criterion + entries.append(f"{label}: {reason} Patient: {patient}. Trial: {trial}.") + return entries diff --git a/src/trialmatchai/entities/recognizers.py b/src/trialmatchai/entities/recognizers.py index 83510cdc..abce12bd 100644 --- a/src/trialmatchai/entities/recognizers.py +++ b/src/trialmatchai/entities/recognizers.py @@ -191,62 +191,13 @@ def recognize( ] -class GLiNERRecognizer: - def __init__( - self, - model_name: str, - *, - revision: str | None = None, - device: str | None = None, - trust_remote_code: bool = False, - batch_size: int = 8, - ): - try: - from gliner import GLiNER # type: ignore - except Exception as exc: # pragma: no cover - optional dependency - raise RuntimeError( - "entity_extraction.backend=gliner requires the GLiNER dependency." - ) from exc - - kwargs: dict[str, Any] = {} - if revision: - kwargs["revision"] = revision - if trust_remote_code: - kwargs["trust_remote_code"] = trust_remote_code - self.model = GLiNER.from_pretrained(model_name, **kwargs) - if device and device != "auto" and hasattr(self.model, "to"): - self.model.to(device) - self.batch_size = batch_size - - def recognize( - self, texts: Sequence[str], schemas: Sequence[EntitySchema] - ) -> list[list[EntityAnnotation]]: - labels = [schema.label for schema in schemas] - label_map = schema_by_label(list(schemas)) - results: list[list[EntityAnnotation]] = [] - for text in texts: - raw = self.model.predict_entities(text, labels) - results.append(resolve_overlaps(_parse_model_entities(raw, text, label_map))) - return results - - def build_recognizer(config: dict[str, Any]) -> EntityRecognizer: backend = str(config.get("backend", "gliner2")).lower() if backend == "disabled": return DisabledRecognizer() if backend == "regex": return RegexSchemaRecognizer() - if backend == "gliner": - recognizer: EntityRecognizer = GLiNERRecognizer( - model_name=config.get("fallback_model_name") - or config.get("model_name") - or "urchade/gliner_base", - revision=config.get("model_revision"), - device=config.get("device", "auto"), - trust_remote_code=bool(config.get("trust_remote_code", False)), - batch_size=int(config.get("batch_size", 8)), - ) - elif backend == "gliner2": + if backend == "gliner2": recognizer = GLiNER2Recognizer( model_name=config.get("model_name", "fastino/gliner2-base"), revision=config.get("model_revision"), @@ -256,7 +207,7 @@ def build_recognizer(config: dict[str, Any]) -> EntityRecognizer: ) else: raise ValueError( - "entity_extraction.backend must be one of: gliner2, gliner, regex, disabled." + "entity_extraction.backend must be one of: gliner2, regex, disabled." ) # Augment model NER with the deterministic variant recognizer (on by default) diff --git a/src/trialmatchai/finetuning/__init__.py b/src/trialmatchai/finetuning/__init__.py index 4faa4f07..a1171de5 100644 --- a/src/trialmatchai/finetuning/__init__.py +++ b/src/trialmatchai/finetuning/__init__.py @@ -1,9 +1,9 @@ """Fine-tuning utilities for TrialMatchAI's local models. -Lets users train their own NER (GLiNER), reranker (LoRA), and CoT eligibility +Lets users train their own NER (GLiNER2), reranker (LoRA), and CoT eligibility (LoRA) models and plug them straight back into the pipeline via config: -- NER: entity_extraction.model_name -> a fine-tuned GLiNER checkpoint +- NER: entity_extraction.model_name -> a fine-tuned GLiNER2 checkpoint - reranker: model.reranker_adapter_path -> a LoRA adapter - CoT: model.cot_adapter_path -> a LoRA adapter diff --git a/src/trialmatchai/interop/exporters/matching_summary.py b/src/trialmatchai/interop/exporters/matching_summary.py index 4d8f91fc..e7ff9cef 100644 --- a/src/trialmatchai/interop/exporters/matching_summary.py +++ b/src/trialmatchai/interop/exporters/matching_summary.py @@ -12,15 +12,14 @@ def profile_to_matching_summary(profile: PatientProfile) -> dict: else "all" ) gender = profile.demographics.sex or profile.demographics.gender or "all" - expanded_sentences = render_patient_narrative(profile) + patient_narrative = render_patient_narrative(profile) return { "patient_id": profile.patient_id, "main_conditions": main_conditions, "other_conditions": other_conditions, - "expanded_sentences": expanded_sentences, + "patient_narrative": patient_narrative, "age": age, "gender": gender, - "split_raw_description": expanded_sentences, "provenance": [ provenance.model_dump(mode="json", exclude_none=True) for provenance in profile.provenance diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index 6c2104bb..3c2e4dbe 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -4,6 +4,10 @@ from typing import TYPE_CHECKING, Dict, List, Optional, Tuple from trialmatchai.config.config_loader import load_config +from trialmatchai.constraints import ( + build_patient_constraint_context, + write_constraint_reports, +) from trialmatchai.entities import build_entity_annotator from trialmatchai.matching.trial_ranker import ( load_trial_data, @@ -28,6 +32,7 @@ from trialmatchai.utils.timing import log_timing if TYPE_CHECKING: + from trialmatchai.constraints import PatientConstraintContext from trialmatchai.models.embedding.text_embedder import TextEmbedder logger = setup_logging(__name__) @@ -41,10 +46,11 @@ def run_first_level_search( embedder: TextEmbedder, config: Dict, search_backend, + patient_profile: PatientProfile | None = None, ) -> Optional[Tuple]: - main_conditions = keywords.get("main_conditions", []) - other_conditions = keywords.get("other_conditions", []) - expanded_sentences = keywords.get("expanded_sentences", []) + main_conditions = list(keywords.get("main_conditions", [])) + other_conditions = list(keywords.get("other_conditions", [])) + patient_narrative = list(keywords.get("patient_narrative", [])) if not main_conditions: logger.error("No main_conditions found in keywords.") @@ -61,22 +67,75 @@ def run_first_level_search( entity_annotator=entity_annotator, ) - # Get synonyms and expand main conditions - synonyms = cts.get_synonyms(condition.lower().strip()) - main_conditions.extend(synonyms[:5]) - - search_size = config["search"].get("max_trials_first_level", 300) - trials, scores = cts.search_trials( - condition=condition, - age_input=age, - sex=sex, - overall_status=overall_status, - size=search_size, - pre_selected_nct_ids=None, - synonyms=main_conditions, - other_conditions=other_conditions, - vector_score_threshold=config["search"]["vector_score_threshold"], - ) + search_cfg = config["search"] + first_level_cfg = _first_level_search_config(search_cfg) + if first_level_cfg.get("enabled", True) and patient_profile is not None: + plan = cts.build_query_plan( + profile=patient_profile, + matching_summary=keywords, + config=first_level_cfg, + age=age, + sex=sex, + overall_status=overall_status, + ) + trials, scores, candidate_evidence = cts.search_trials_with_plan( + query_plan=plan, + age_input=age, + sex=sex, + overall_status=overall_status, + size=int(first_level_cfg.get("max_trials", 1000)), + per_channel_size=int(first_level_cfg.get("per_channel_size", 300)), + pre_selected_nct_ids=None, + vector_score_threshold=float( + first_level_cfg.get("vector_score_threshold", 0.0) + ), + search_mode=search_cfg.get("mode", "hybrid"), + rrf_k=int(first_level_cfg.get("rrf_k", 60)), + ) + main_conditions = _dedupe_strings( + [ + *main_conditions, + *plan.terms_for("primary_condition", "concept_synonym"), + ] + ) + other_conditions = _dedupe_strings( + [ + *other_conditions, + *plan.terms_for("biomarker", "therapy", "broader_disease"), + ] + ) + if first_level_cfg.get("write_reports", True): + write_json_file( + plan.model_dump(mode="json"), + f"{output_folder}/first_level_query_plan.json", + ) + write_json_file( + { + "candidates": [ + item.model_dump(mode="json") for item in candidate_evidence + ] + }, + f"{output_folder}/first_level_candidates.json", + ) + else: + # Single-query first-level retrieval path. This remains available for exact + # behavior preservation when search.first_level.enabled=false. + synonyms = cts.get_synonyms(condition.lower().strip()) + main_conditions.extend(synonyms[:5]) + + search_size = search_cfg.get("max_trials_first_level", 300) + trials, scores = cts.search_trials( + condition=condition, + age_input=age, + sex=sex, + overall_status=overall_status, + size=search_size, + pre_selected_nct_ids=None, + synonyms=main_conditions, + other_conditions=other_conditions, + vector_score_threshold=search_cfg["vector_score_threshold"], + search_mode=search_cfg.get("mode", "hybrid"), + ) nct_ids = [trial.get("nct_id") for trial in trials if trial.get("nct_id")] first_level_scores = { @@ -93,7 +152,7 @@ def run_first_level_search( nct_ids, main_conditions, other_conditions, - expanded_sentences, + patient_narrative, first_level_scores, ) @@ -103,12 +162,13 @@ def run_second_level_search( nct_ids: List[str], main_conditions: List[str], other_conditions: List[str], - expanded_sentences: List[str], + patient_narrative: List[str], gemma_retriever: SecondStageRetriever, first_level_scores: Dict, config: Dict, + patient_context: Optional["PatientConstraintContext"] = None, ) -> Tuple: - queries = list(set(main_conditions + other_conditions + expanded_sentences))[:10] + queries = list(set(main_conditions + other_conditions + patient_narrative))[:10] logger.info(f"Running second-level retrieval with {len(queries)} queries ...") # Add synonyms for second level @@ -118,7 +178,11 @@ def run_second_level_search( top_n = min(len(nct_ids), config["search"].get("max_trials_second_level", 100)) second_level_results = gemma_retriever.retrieve_and_rank( - queries, nct_ids, top_n=top_n + queries, + nct_ids, + top_n=top_n, + patient_context=patient_context, + constraints_config=config.get("constraints", {}), ) combined_scores = {} @@ -134,6 +198,19 @@ def run_second_level_search( top_trials_path = f"{output_folder}/top_trials.txt" write_text_file([trial_id for trial_id, _ in semi_final_trials], top_trials_path) + constraints_config = config.get("constraints", {}) + if constraints_config.get("enabled", True) and constraints_config.get( + "write_reports", + True, + ): + write_constraint_reports( + output_folder=output_folder, + evaluations=gemma_retriever.last_constraint_evaluations, + top_trials=[ + {"nct_id": trial_id, "score": score} + for trial_id, score in semi_final_trials + ], + ) logger.info("Second-level retrieval and ranking complete. Top trials saved.") return semi_final_trials, top_trials_path @@ -151,9 +228,9 @@ def run_rag_processing( return top_trials = top_trials[: config["rag"].get("max_trials_rag", 20)] - patient_profile = patient_info.get("split_raw_description", []) - if not patient_profile: - logger.error("No patient profile available for RAG processing.") + patient_narrative = patient_info.get("patient_narrative", []) + if not patient_narrative: + logger.error("No patient narrative available for RAG processing.") return # vLLM is the only LLM backend. A configured cot_adapter_path is served as a @@ -183,7 +260,7 @@ def run_rag_processing( nct_ids=top_trials, json_folder=config["paths"]["trials_json_folder"], output_folder=output_folder, - patient_profile=patient_profile, + patient_narrative=patient_narrative, ) write_json_file({"status": "done"}, f"{output_folder}/rag_output.json") logger.info("RAG-based trial matching complete.") @@ -280,9 +357,8 @@ def main_pipeline(config_path: str | None = None) -> int: ) keywords = Keywords.model_validate(summary).model_dump() patient_info = dict(summary) - patient_info["split_raw_description"] = summary.get( - "expanded_sentences", [] - ) + patient_info["patient_narrative"] = summary.get("patient_narrative", []) + patient_context = build_patient_constraint_context(profile) # Run pipeline with log_timing(logger, "First-level search"): @@ -295,6 +371,7 @@ def main_pipeline(config_path: str | None = None) -> int: embedder, config, search_backend, + patient_profile=profile, ) if not result: logger.error("First-level search failed for %s", patient_id) @@ -304,7 +381,7 @@ def main_pipeline(config_path: str | None = None) -> int: nct_ids, main_conditions, other_conditions, - expanded_sentences, + patient_narrative, first_level_scores, ) = result @@ -315,10 +392,11 @@ def main_pipeline(config_path: str | None = None) -> int: nct_ids, main_conditions, other_conditions, - expanded_sentences, + patient_narrative, gemma_retriever, first_level_scores, config, + patient_context, ) with log_timing(logger, "RAG processing"): @@ -375,5 +453,37 @@ def _load_patient_inputs(config: Dict) -> list[tuple[PatientProfile, Dict]]: return loaded +def _first_level_search_config(search_cfg: Dict) -> Dict: + first_level_cfg = dict(search_cfg.get("first_level") or {}) + first_level_cfg.setdefault( + "max_trials", + search_cfg.get("max_trials_first_level", 1000), + ) + first_level_cfg.setdefault("per_channel_size", 300) + first_level_cfg.setdefault("rrf_k", 60) + first_level_cfg.setdefault("vector_score_threshold", 0.0) + first_level_cfg.setdefault("enabled", True) + first_level_cfg.setdefault("write_reports", True) + first_level_cfg.setdefault("llm_expansion_enabled", False) + first_level_cfg.setdefault("llm_max_terms", 12) + first_level_cfg.setdefault("hard_filters", ["age", "sex", "overall_status"]) + return first_level_cfg + + +def _dedupe_strings(values: list[str]) -> list[str]: + seen: set[str] = set() + output: list[str] = [] + for value in values: + cleaned = str(value or "").strip() + if not cleaned: + continue + key = cleaned.casefold() + if key in seen: + continue + seen.add(key) + output.append(cleaned) + return output + + if __name__ == "__main__": raise SystemExit(main_pipeline()) diff --git a/src/trialmatchai/matching/eligibility_base.py b/src/trialmatchai/matching/eligibility_base.py index 7ca14557..8ce60072 100644 --- a/src/trialmatchai/matching/eligibility_base.py +++ b/src/trialmatchai/matching/eligibility_base.py @@ -179,12 +179,12 @@ def process_trials( nct_ids: List[str], json_folder: str, output_folder: str, - patient_profile: List[str], + patient_narrative: List[str], ): """Build a worklist (skipping already-processed trials), length-bucket to minimize padding, then process in batches.""" patient_text = " ".join( - str(line).strip() for line in patient_profile if str(line).strip() + str(line).strip() for line in patient_narrative if str(line).strip() ) items: List[Dict] = [] diff --git a/src/trialmatchai/matching/retrieval/criteria_retrieval.py b/src/trialmatchai/matching/retrieval/criteria_retrieval.py index 0439117a..db5f5f1f 100644 --- a/src/trialmatchai/matching/retrieval/criteria_retrieval.py +++ b/src/trialmatchai/matching/retrieval/criteria_retrieval.py @@ -1,16 +1,20 @@ from __future__ import annotations +import json import math from collections import defaultdict from concurrent.futures import ThreadPoolExecutor, as_completed -from typing import TYPE_CHECKING, Dict, List, Optional +from typing import TYPE_CHECKING, Any, Dict, List, Mapping, Optional +from trialmatchai.constraints import apply_constraint_score, evaluate_constraint_set +from trialmatchai.constraints.models import ConstraintSet, CriterionConstraintEvaluation from trialmatchai.matching.retrieval.synonyms import disease_synonyms from trialmatchai.search.lancedb_backend import TrialSearchBackend from trialmatchai.utils.file_utils import write_text_file from trialmatchai.utils.logging_config import setup_logging if TYPE_CHECKING: + from trialmatchai.constraints.models import PatientConstraintContext from trialmatchai.models.embedding.text_embedder import TextEmbedder from trialmatchai.models.llm.llm_reranker import LLMReranker @@ -26,7 +30,6 @@ def __init__( size: int = 250, inclusion_weight: float = 1.0, exclusion_weight: float = 0.25, - bio_med_ner=None, entity_annotator=None, search_mode: str = "hybrid", ): @@ -36,8 +39,9 @@ def __init__( self.size = size self.inclusion_weight = inclusion_weight self.exclusion_weight = exclusion_weight - self.entity_annotator = entity_annotator or bio_med_ner + self.entity_annotator = entity_annotator self.search_mode = search_mode.lower() if search_mode else "hybrid" + self.last_constraint_evaluations: list[CriterionConstraintEvaluation] = [] def get_synonyms(self, condition: str) -> List[str]: return disease_synonyms(self.entity_annotator, condition) @@ -138,6 +142,59 @@ def score_criteria_without_llm(self, criteria: List[Dict]) -> List[Dict]: criterion["llm_score"] = base return criteria + def apply_constraint_adjustments( + self, + criteria: List[Dict], + *, + patient_context: Optional["PatientConstraintContext"] = None, + constraints_config: Mapping[str, Any] | None = None, + ) -> List[Dict]: + self.last_constraint_evaluations = [] + config = constraints_config or {} + if not config.get("enabled", True) or patient_context is None: + return criteria + + score_weight = _constraint_score_weight(config.get("score_weight", 0.25)) + unknown_is_neutral = bool(config.get("unknown_is_neutral", True)) + seen_criteria: set[str] = set() + for criterion in criteria: + source = criterion.get("_source") or {} + raw_constraints = source.get("constraints") + if not raw_constraints: + continue + try: + constraint_set = _constraint_set_from_payload(raw_constraints) + except Exception: + logger.warning( + "Ignoring invalid constraint payload for criterion %s.", + source.get("criteria_id", "unknown"), + ) + continue + if not constraint_set.constraints: + continue + + evaluation = evaluate_constraint_set( + constraint_set, patient_context, unknown_is_neutral=unknown_is_neutral + ) + if evaluation.criteria_id not in seen_criteria: + self.last_constraint_evaluations.append(evaluation) + seen_criteria.add(evaluation.criteria_id) + + base_score = float( + criterion.get("llm_score", criterion.get("_score", 0.0)) or 0.0 + ) + adjusted_score = apply_constraint_score( + base_score, + evaluation.constraint_signal, + score_weight=score_weight, + ) + criterion["pre_constraint_score"] = base_score + criterion["constraint_signal"] = evaluation.constraint_signal + criterion["constraint_adjusted_score"] = adjusted_score + criterion["constraint_evaluation"] = evaluation.model_dump(mode="json") + criterion["llm_score"] = adjusted_score + return criteria + def aggregate_to_trials( self, criteria: List[Dict], threshold: float = 0.5, method: str = "weighted" ) -> List[Dict]: @@ -145,7 +202,8 @@ def aggregate_to_trials( for criterion in criteria: nct_id = criterion["_source"]["nct_id"] score = criterion["llm_score"] - if score >= threshold: + threshold_basis = criterion.get("pre_constraint_score", score) + if score >= threshold or threshold_basis >= threshold: trial_scores[nct_id].append(score) aggregated_scores = {} for nct_id, scores in trial_scores.items(): @@ -179,6 +237,8 @@ def retrieve_and_rank( top_n: int, use_reranker: bool = True, save_path: Optional[str] = None, + patient_context: Optional["PatientConstraintContext"] = None, + constraints_config: Mapping[str, Any] | None = None, ) -> List[Dict]: # Cap queries to prevent memory/performance issues max_queries = 150 # Reasonable limit for second-level search @@ -209,6 +269,11 @@ def retrieve_and_rank( ) ranked_criteria = self.score_criteria_without_llm(all_criteria) + ranked_criteria = self.apply_constraint_adjustments( + ranked_criteria, + patient_context=patient_context, + constraints_config=constraints_config, + ) sorted_trials = self.aggregate_to_trials(ranked_criteria) top_trials = sorted_trials[:top_n] logger.info(f"Top {top_n} trials retrieved: {top_trials}") @@ -216,3 +281,19 @@ def retrieve_and_rank( write_text_file([trial["nct_id"] for trial in top_trials], save_path) logger.info(f"Top trials saved to {save_path}") return top_trials + + +def _constraint_score_weight(value: Any) -> float: + try: + weight = float(value) + except (TypeError, ValueError): + return 0.25 + return max(0.0, min(1.0, weight)) + + +def _constraint_set_from_payload(payload: Any) -> ConstraintSet: + if isinstance(payload, ConstraintSet): + return payload + if isinstance(payload, str): + payload = json.loads(payload) + return ConstraintSet.model_validate(payload) diff --git a/src/trialmatchai/matching/retrieval/first_level_planner.py b/src/trialmatchai/matching/retrieval/first_level_planner.py new file mode 100644 index 00000000..a55ac8f0 --- /dev/null +++ b/src/trialmatchai/matching/retrieval/first_level_planner.py @@ -0,0 +1,399 @@ +from __future__ import annotations + +import json +import re +from collections.abc import Callable, Sequence +from typing import Any, Literal, Protocol + +from pydantic import BaseModel, ConfigDict, Field + +from trialmatchai.interop.models import ClinicalFact, PatientProfile +from trialmatchai.interop.narrative import render_patient_narrative +from trialmatchai.matching.retrieval.synonyms import disease_synonyms +from trialmatchai.utils.logging_config import setup_logging +from trialmatchai.utils.text import flatten_text + +logger = setup_logging(__name__) + + +FirstLevelChannelKind = Literal[ + "primary_condition", + "concept_synonym", + "broader_disease", + "narrative", + "biomarker", + "therapy", + "llm_expansion", +] + +DEFAULT_CHANNEL_WEIGHTS: dict[FirstLevelChannelKind, float] = { + "primary_condition": 1.0, + "concept_synonym": 0.9, + "narrative": 0.8, + "biomarker": 0.7, + "therapy": 0.45, + "broader_disease": 0.35, + "llm_expansion": 0.5, +} + + +class FirstLevelQueryChannel(BaseModel): + kind: FirstLevelChannelKind + terms: list[str] + weight: float = Field(ge=0.0) + source: str = "deterministic" + + model_config = ConfigDict(extra="forbid") + + +class FirstLevelQueryPlan(BaseModel): + patient_id: str | None = None + channels: list[FirstLevelQueryChannel] = Field(default_factory=list) + filters: dict[str, Any] = Field(default_factory=dict) + llm_expansion_enabled: bool = False + + model_config = ConfigDict(extra="forbid") + + def terms_for(self, *kinds: FirstLevelChannelKind) -> list[str]: + allowed = set(kinds) + return dedupe_terms( + term + for channel in self.channels + if channel.kind in allowed + for term in channel.terms + ) + + +class FirstLevelCandidateEvidence(BaseModel): + nct_id: str + score: float + channels: list[dict[str, Any]] = Field(default_factory=list) + + model_config = ConfigDict(extra="forbid") + + +class LLMQueryExpansion(BaseModel): + primary_queries: list[str] = Field(default_factory=list) + disease_aliases: list[str] = Field(default_factory=list) + broader_queries: list[str] = Field(default_factory=list) + biomarker_queries: list[str] = Field(default_factory=list) + treatment_queries: list[str] = Field(default_factory=list) + discarded_or_uncertain: list[str] = Field(default_factory=list) + + model_config = ConfigDict(extra="forbid") + + +class LLMQueryExpansionBackend(Protocol): + def expand_first_level_queries( + self, + *, + profile: PatientProfile, + matching_summary: dict[str, Any], + ) -> str | dict[str, Any]: + ... + + +class FirstLevelQueryPlanner: + def __init__( + self, + *, + entity_annotator: Any = None, + llm_expander: LLMQueryExpansionBackend + | Callable[..., str | dict[str, Any]] + | None = None, + ) -> None: + self.entity_annotator = entity_annotator + self.llm_expander = llm_expander + + def build( + self, + *, + profile: PatientProfile, + matching_summary: dict[str, Any], + config: dict[str, Any] | None = None, + age: int | str | None = None, + sex: str | None = None, + overall_status: str | None = None, + ) -> FirstLevelQueryPlan: + cfg = config or {} + channels: list[FirstLevelQueryChannel] = [] + primary_terms = dedupe_terms( + [ + *matching_summary.get("main_conditions", []), + *positive_fact_labels(profile.conditions), + ] + ) + channels.append( + self._channel("primary_condition", primary_terms, "matching_summary") + ) + + synonym_terms = self._synonym_terms(primary_terms) + channels.append(self._channel("concept_synonym", synonym_terms, "concept_linker")) + + broader_terms = broader_disease_terms([*primary_terms, *synonym_terms]) + channels.append(self._channel("broader_disease", broader_terms, "deterministic")) + + narrative_terms = narrative_terms_from_summary_or_profile( + profile, + matching_summary, + ) + channels.append(self._channel("narrative", narrative_terms, "patient_narrative")) + + biomarker_terms = dedupe_terms( + [ + *positive_fact_labels(profile.genomic_findings), + *biomarker_terms_from_facts(profile.cancer_profile), + ] + ) + channels.append(self._channel("biomarker", biomarker_terms, "patient_profile")) + + therapy_terms = therapy_terms_from_profile(profile) + channels.append(self._channel("therapy", therapy_terms, "patient_profile")) + + llm_enabled = bool(cfg.get("llm_expansion_enabled", False)) + if llm_enabled: + llm_terms = self._llm_terms( + profile=profile, + matching_summary=matching_summary, + max_terms=int(cfg.get("llm_max_terms", 12)), + ) + channels.append(self._channel("llm_expansion", llm_terms, "llm")) + + return FirstLevelQueryPlan( + patient_id=profile.patient_id, + channels=[channel for channel in channels if channel.terms], + filters={ + "age": age, + "sex": sex, + "overall_status": overall_status, + "hard_filters": cfg.get( + "hard_filters", + ["age", "sex", "overall_status"], + ), + }, + llm_expansion_enabled=llm_enabled, + ) + + def _channel( + self, + kind: FirstLevelChannelKind, + terms: Sequence[str], + source: str, + ) -> FirstLevelQueryChannel: + return FirstLevelQueryChannel( + kind=kind, + terms=dedupe_terms(terms), + weight=DEFAULT_CHANNEL_WEIGHTS[kind], + source=source, + ) + + def _synonym_terms(self, primary_terms: Sequence[str]) -> list[str]: + output: list[str] = [] + for term in primary_terms[:5]: + output.extend(disease_synonyms(self.entity_annotator, term)) + return dedupe_terms(output) + + def _llm_terms( + self, + *, + profile: PatientProfile, + matching_summary: dict[str, Any], + max_terms: int, + ) -> list[str]: + if self.llm_expander is None: + logger.warning( + "First-level LLM expansion is enabled but no expander is configured." + ) + return [] + try: + if hasattr(self.llm_expander, "expand_first_level_queries"): + raw = self.llm_expander.expand_first_level_queries( + profile=profile, + matching_summary=matching_summary, + ) + else: + raw = self.llm_expander( + profile=profile, + matching_summary=matching_summary, + ) + parsed = parse_llm_query_expansion(raw, max_terms=max_terms) + except Exception: + logger.exception("Discarding invalid first-level LLM query expansion.") + return [] + return dedupe_terms( + [ + *parsed.primary_queries, + *parsed.disease_aliases, + *parsed.broader_queries, + *parsed.biomarker_queries, + *parsed.treatment_queries, + ] + )[:max_terms] + + +def parse_llm_query_expansion( + raw: str | dict[str, Any], + *, + max_terms: int, +) -> LLMQueryExpansion: + payload = json.loads(raw) if isinstance(raw, str) else raw + parsed = LLMQueryExpansion.model_validate(payload) + capped: dict[str, list[str]] = {} + remaining = max(0, max_terms) + for field in ( + "primary_queries", + "disease_aliases", + "broader_queries", + "biomarker_queries", + "treatment_queries", + ): + values = dedupe_terms(getattr(parsed, field)) + if remaining <= 0: + capped[field] = [] + continue + capped[field] = values[:remaining] + remaining -= len(capped[field]) + capped["discarded_or_uncertain"] = dedupe_terms(parsed.discarded_or_uncertain) + return LLMQueryExpansion.model_validate(capped) + + +def fuse_first_level_channel_hits( + channel_hits: Sequence[tuple[FirstLevelQueryChannel, list[dict], list[float]]], + *, + size: int, + rrf_k: int = 60, +) -> tuple[list[dict], list[float], list[FirstLevelCandidateEvidence]]: + candidates: dict[str, dict[str, Any]] = {} + evidence: dict[str, list[dict[str, Any]]] = {} + for channel, trials, scores in channel_hits: + for rank, (trial, raw_score) in enumerate(zip(trials, scores), start=1): + nct_id = str(trial.get("nct_id") or "") + if not nct_id: + continue + contribution = channel.weight / (rrf_k + rank) + if nct_id not in candidates: + candidates[nct_id] = { + "trial": trial, + "score": 0.0, + } + evidence[nct_id] = [] + candidates[nct_id]["score"] += contribution + evidence[nct_id].append( + { + "channel": channel.kind, + "rank": rank, + "raw_score": float(raw_score), + "weight": channel.weight, + "terms": channel.terms, + "contribution": contribution, + } + ) + + ranked = sorted( + candidates.values(), + key=lambda item: item["score"], + reverse=True, + )[:size] + trials = [item["trial"] for item in ranked] + scores = [float(item["score"]) for item in ranked] + candidate_evidence = [ + FirstLevelCandidateEvidence( + nct_id=str(item["trial"].get("nct_id")), + score=float(item["score"]), + channels=evidence.get(str(item["trial"].get("nct_id")), []), + ) + for item in ranked + ] + return trials, scores, candidate_evidence + + +def positive_fact_labels(facts: Sequence[ClinicalFact]) -> list[str]: + return dedupe_terms(fact.label for fact in facts if not fact.negated) + + +def narrative_terms_from_summary_or_profile( + profile: PatientProfile, + matching_summary: dict[str, Any], + *, + max_chars: int = 1500, +) -> list[str]: + sentences = matching_summary.get("patient_narrative") or render_patient_narrative( + profile + ) + sentences = [ + sentence + for sentence in sentences + if " absent" not in str(sentence).casefold() + ] + narrative = flatten_text(sentences) + if not narrative: + return [] + return [narrative[:max_chars].rsplit(" ", 1)[0].strip() or narrative[:max_chars]] + + +def biomarker_terms_from_facts(facts: Sequence[ClinicalFact]) -> list[str]: + terms: list[str] = [] + gene_pattern = re.compile( + r"\b(ALK|BRAF|BRCA1|BRCA2|EGFR|ERBB2|HER2|KRAS|NTRK|PD-L1|PIK3CA|ROS1|TP53)\b", + re.IGNORECASE, + ) + for fact in facts: + if fact.negated: + continue + text = flatten_text([fact.label, fact.description, fact.evidence_text]) + terms.extend(match.group(1).upper() for match in gene_pattern.finditer(text)) + return dedupe_terms(terms) + + +def therapy_terms_from_profile(profile: PatientProfile) -> list[str]: + terms: list[str] = [] + for fact in [*profile.medications, *profile.procedures]: + if fact.negated: + continue + terms.append(fact.label) + if fact.temporality and "prior" in fact.temporality.casefold(): + terms.append(f"prior {fact.label}") + return dedupe_terms(terms) + + +def broader_disease_terms(terms: Sequence[str]) -> list[str]: + output: list[str] = [] + for term in terms: + normalized = term.casefold() + if any( + marker in normalized + for marker in ( + "cancer", + "carcinoma", + "melanoma", + "sarcoma", + "tumor", + "tumour", + "neoplasm", + ) + ): + output.extend(["cancer", "malignant neoplasm", "solid tumor"]) + if any(marker in normalized for marker in ("leukemia", "lymphoma", "myeloma")): + output.extend(["hematologic malignancy", "blood cancer"]) + if "lung" in normalized and any( + marker in normalized for marker in ("cancer", "carcinoma", "nsclc") + ): + output.extend(["thoracic cancer", "solid tumor"]) + return dedupe_terms(output) + + +def dedupe_terms(values: Any) -> list[str]: + if values is None: + return [] + seen: set[str] = set() + output: list[str] = [] + for value in values: + cleaned = re.sub(r"\s+", " ", str(value or "")).strip() + if not cleaned: + continue + key = cleaned.casefold() + if key in seen: + continue + seen.add(key) + output.append(cleaned) + return output diff --git a/src/trialmatchai/matching/retrieval/synonyms.py b/src/trialmatchai/matching/retrieval/synonyms.py index 7b8ad381..90cd039e 100644 --- a/src/trialmatchai/matching/retrieval/synonyms.py +++ b/src/trialmatchai/matching/retrieval/synonyms.py @@ -26,7 +26,8 @@ def disease_synonyms(entity_annotator: Any, condition: str) -> List[str]: for entity in raw_result[0]: if entity.get("entity_group", "").lower() == "disease": synonyms.update(entity.get("synonyms", [])) - return list(synonyms) + # sorted() for deterministic ordering across runs (set order is not stable). + return sorted(synonyms) logger.warning("No annotations found for condition: %s", condition) except Exception as exc: logger.error("Entity synonym extraction failed for '%s': %s", condition, exc) diff --git a/src/trialmatchai/matching/retrieval/trial_retrieval.py b/src/trialmatchai/matching/retrieval/trial_retrieval.py index 62eafc90..a70bff98 100644 --- a/src/trialmatchai/matching/retrieval/trial_retrieval.py +++ b/src/trialmatchai/matching/retrieval/trial_retrieval.py @@ -1,14 +1,22 @@ from __future__ import annotations from datetime import datetime -from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Union +from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union from dateutil import parser as date_parser +from trialmatchai.matching.retrieval.first_level_planner import ( + FirstLevelCandidateEvidence, + FirstLevelQueryPlan, + FirstLevelQueryPlanner, + LLMQueryExpansionBackend, + fuse_first_level_channel_hits, +) from trialmatchai.matching.retrieval.synonyms import disease_synonyms from trialmatchai.search.lancedb_backend import TrialSearchBackend from trialmatchai.utils.logging_config import setup_logging if TYPE_CHECKING: + from trialmatchai.interop.models import PatientProfile from trialmatchai.models.embedding.text_embedder import TextEmbedder logger = setup_logging(__name__) @@ -19,12 +27,16 @@ def __init__( self, search_backend: TrialSearchBackend, embedder: Optional[TextEmbedder], - bio_med_ner=None, entity_annotator=None, + llm_query_expander: LLMQueryExpansionBackend | None = None, ): self.search_backend = search_backend self.embedder = embedder - self.entity_annotator = entity_annotator or bio_med_ner + self.entity_annotator = entity_annotator + self.query_planner = FirstLevelQueryPlanner( + entity_annotator=entity_annotator, + llm_expander=llm_query_expander, + ) def get_synonyms(self, condition: str) -> List[str]: return disease_synonyms(self.entity_annotator, condition) @@ -150,6 +162,121 @@ def search_trials( ) return trials, scores + def build_query_plan( + self, + *, + profile: "PatientProfile", + matching_summary: dict[str, Any], + config: dict[str, Any] | None = None, + age: int | str | None = None, + sex: str | None = None, + overall_status: str | None = None, + ) -> FirstLevelQueryPlan: + return self.query_planner.build( + profile=profile, + matching_summary=matching_summary, + config=config, + age=age, + sex=sex, + overall_status=overall_status, + ) + + def search_trials_with_plan( + self, + *, + query_plan: FirstLevelQueryPlan, + age_input: Union[int, str], + sex: str, + overall_status: Optional[str] = None, + size: int = 1000, + per_channel_size: int = 300, + pre_selected_nct_ids: Optional[List[str]] = None, + vector_score_threshold: float = 0.0, + search_mode: str = "hybrid", + rrf_k: int = 60, + ) -> tuple[list[dict], list[float], list[FirstLevelCandidateEvidence]]: + # Honor the configured hard filters: only apply the ones listed in the + # plan (default age/sex/overall_status). This makes first_level.hard_filters + # actually controllable instead of always-on. + # Distinguish an unset value (None -> default) from an explicit empty + # list ([] -> no hard filters), so hard_filters=[] truly disables them. + configured = query_plan.filters.get("hard_filters") + hard_filters = set( + configured if configured is not None else ["age", "sex", "overall_status"] + ) + + age = None + if "age" in hard_filters and str(age_input).strip().casefold() != "all": + age = self.parse_age_input(age_input) + if age is None: + logger.warning( + "Could not parse age %r; proceeding without an age filter.", + age_input, + ) + effective_sex = sex if "sex" in hard_filters else "all" + effective_status = overall_status if "overall_status" in hard_filters else None + + mode = (search_mode or "hybrid").lower() + if mode in {"vector", "hybrid"} and self.embedder is None: + logger.warning( + "Vector/hybrid mode selected but embedder is None. Falling back to BM25 only." + ) + mode = "bm25" + + channel_hits = [] + failed_channels = 0 + for channel in query_plan.channels: + embeddings = self._embed_terms(channel.terms, mode) + try: + trials, scores = self.search_backend.search_trials( + primary_terms=channel.terms, + other_terms=[], + embeddings=embeddings, + age=age, + sex=effective_sex, + overall_status=effective_status, + pre_selected_nct_ids=pre_selected_nct_ids, + size=per_channel_size, + vector_score_threshold=vector_score_threshold, + search_mode=mode, + ) + except Exception: + failed_channels += 1 + logger.exception( + "First-level channel search failed for %s; skipping channel.", + channel.kind, + ) + continue + if trials: + channel_hits.append((channel, trials, scores)) + + if query_plan.channels and not channel_hits: + logger.warning( + "First-level retrieval produced no candidates from %d channels " + "(%d errored). Check the search backend/tables.", + len(query_plan.channels), + failed_channels, + ) + + trials, scores, evidence = fuse_first_level_channel_hits( + channel_hits, + size=size, + rrf_k=rrf_k, + ) + logger.info( + "[%s] First-level planned retrieval found %s trials across %s channels.", + mode, + len(trials), + len(channel_hits), + ) + return trials, scores, evidence + + def _embed_terms(self, terms: list[str], mode: str) -> dict[str, list[float]]: + if mode not in {"vector", "hybrid"} or self.embedder is None: + return {} + vectors = self.embedder.embed_texts(terms) + return dict(zip(terms, vectors)) + def _clean_terms(terms: List[str]) -> List[str]: return [term.strip() for term in terms if term and term.strip()] diff --git a/src/trialmatchai/registry/preparation.py b/src/trialmatchai/registry/preparation.py index eba4c15e..aadbc9bb 100644 --- a/src/trialmatchai/registry/preparation.py +++ b/src/trialmatchai/registry/preparation.py @@ -9,6 +9,7 @@ import dateutil.parser +from trialmatchai.constraints import extract_constraint_set from trialmatchai.utils.text import flatten_text @@ -118,6 +119,13 @@ def prepare_criteria_documents( rows: list[dict[str, Any]] = [] for entry, vector in zip(entries, vectors): criteria_id = compute_criteria_id(entry["nct_id"], entry["criterion"]) + constraint_set = extract_constraint_set( + nct_id=entry["nct_id"], + criteria_id=criteria_id, + criterion=entry["criterion"], + eligibility_type=entry["eligibility_type"], + entities=entry.get("entities"), + ) rows.append( { "criteria_id": criteria_id, @@ -126,6 +134,7 @@ def prepare_criteria_documents( "entities": _entities_for_index(entry.get("entities")), "eligibility_type": entry["eligibility_type"], "criterion_vector": vector, + "constraints": constraint_set.model_dump(mode="json"), } ) return rows diff --git a/src/trialmatchai/schemas/phenopacket.py b/src/trialmatchai/schemas/phenopacket.py index b7fccc07..2c0177d7 100644 --- a/src/trialmatchai/schemas/phenopacket.py +++ b/src/trialmatchai/schemas/phenopacket.py @@ -16,7 +16,7 @@ class Phenopacket(BaseModel): class Keywords(BaseModel): main_conditions: List[str] = Field(default_factory=list) other_conditions: List[str] = Field(default_factory=list) - expanded_sentences: List[str] = Field(default_factory=list) + patient_narrative: List[str] = Field(default_factory=list) error: Optional[str] = None model_config = ConfigDict(extra="allow") diff --git a/src/trialmatchai/services/preflight.py b/src/trialmatchai/services/preflight.py index c96b9719..925591ab 100644 --- a/src/trialmatchai/services/preflight.py +++ b/src/trialmatchai/services/preflight.py @@ -57,10 +57,6 @@ def run_preflight_checks( "entity_extraction.backend=gliner2 requires the entity extra " "(`uv sync --extra entity`)." ) - elif backend == "gliner" and importlib.util.find_spec("gliner") is None: - issues.append( - "entity_extraction.backend=gliner requires the GLiNER dependency." - ) linker_cfg = config.get("concept_linker") if linker_cfg and linker_cfg.get("enabled", True): diff --git a/tests/test_config_pytest.py b/tests/test_config_pytest.py index bcf97a47..7e5f90bf 100644 --- a/tests/test_config_pytest.py +++ b/tests/test_config_pytest.py @@ -1,6 +1,9 @@ from pathlib import Path +import pytest + from trialmatchai.config.config_loader import load_config +from trialmatchai.config.settings import EntityExtractionSettings from trialmatchai.entities.schemas import default_schema_path @@ -26,3 +29,11 @@ def test_packaged_schema_path_resolves_outside_repo(tmp_path, monkeypatch): assert cfg["entity_extraction"]["schema_path"] == str(default_schema_path().resolve()) assert Path(cfg["entity_extraction"]["schema_path"]).exists() assert cfg["paths"]["output_dir"] == str((tmp_path / "results").resolve()) + + +def test_legacy_gliner_backend_and_fallback_key_are_rejected(): + with pytest.raises(ValueError): + EntityExtractionSettings.model_validate({"backend": "gliner"}) + + with pytest.raises(ValueError): + EntityExtractionSettings.model_validate({"fallback_model_name": "old-model"}) diff --git a/tests/test_constraints.py b/tests/test_constraints.py new file mode 100644 index 00000000..6aa8f671 --- /dev/null +++ b/tests/test_constraints.py @@ -0,0 +1,317 @@ +import json + +from trialmatchai.constraints import ( + build_patient_constraint_context, + evaluate_constraint_set, + extract_constraint_set, + write_constraint_reports, +) +from trialmatchai.constraints.models import Constraint, ConstraintSet +from trialmatchai.interop.models import ClinicalFact, Demographics, PatientProfile, Provenance + + +def test_extracts_common_deterministic_constraints(): + parsed = extract_constraint_set( + nct_id="N1", + criteria_id="C1", + criterion=( + "Adults aged 18-75 years with ANC >= 1500/mm3, ECOG 0-1, " + "EGFR mutated disease, and treatment within 6 months." + ), + eligibility_type="Inclusion Criteria", + ) + + kinds = {constraint.kind for constraint in parsed.constraints} + assert {"age", "lab", "performance_status", "biomarker", "temporal"} <= kinds + assert any( + constraint.kind == "age" + and constraint.comparator == "between" + and constraint.min_value == 18 + and constraint.max_value == 75 + for constraint in parsed.constraints + ) + assert any( + constraint.kind == "lab" + and constraint.label == "absolute neutrophil count" + and constraint.comparator == "ge" + and constraint.value == 1500 + for constraint in parsed.constraints + ) + + +def test_extracts_age_lower_bound_and_sex(): + parsed = extract_constraint_set( + nct_id="N1", + criteria_id="C2", + criterion="Female participants 18 years or older.", + eligibility_type="Inclusion Criteria", + ) + + assert any( + constraint.kind == "age" + and constraint.comparator == "ge" + and constraint.value == 18 + for constraint in parsed.constraints + ) + assert any( + constraint.kind == "sex" and constraint.value == "female" + for constraint in parsed.constraints + ) + + +def test_patient_context_evaluates_matches_and_exclusion_violations(): + profile = PatientProfile( + patient_id="P1", + demographics=Demographics(age_years=64, sex="female"), + conditions=[ + _fact( + "condition-1", + "condition", + "non-small cell lung cancer", + evidence_text="Patient has metastatic non-small cell lung cancer.", + ) + ], + observations=[ + _fact( + "obs-1", + "observation", + "absolute neutrophil count", + description="1800 /mm3", + evidence_text="ANC 1800/mm3.", + ) + ], + genomic_findings=[ + _fact( + "gene-1", + "genomic_finding", + "EGFR mutated", + evidence_text="EGFR exon 19 deletion detected.", + ) + ], + medications=[ + _fact( + "med-1", + "medication", + "osimertinib", + evidence_text="Prior osimertinib documented.", + temporality="prior", + ) + ], + ) + context = build_patient_constraint_context(profile) + inclusion = ConstraintSet( + nct_id="N1", + criteria_id="C1", + polarity="inclusion", + source_text="Adults with NSCLC, EGFR mutation, and ANC >= 1500/mm3.", + constraints=[ + Constraint( + kind="age", + label="age", + comparator="between", + min_value=18, + max_value=75, + ), + Constraint(kind="condition", label="non-small cell lung cancer"), + Constraint(kind="biomarker", label="EGFR", comparator="mutated"), + Constraint( + kind="lab", + label="absolute neutrophil count", + comparator="ge", + value=1500, + unit="/mm3", + ), + ], + ) + exclusion = ConstraintSet( + nct_id="N1", + criteria_id="C2", + polarity="exclusion", + source_text="Prior osimertinib is excluded.", + constraints=[ + Constraint(kind="medication", label="osimertinib", comparator="prior") + ], + ) + + inclusion_eval = evaluate_constraint_set(inclusion, context) + exclusion_eval = evaluate_constraint_set(exclusion, context) + + assert inclusion_eval.violated_count == 0 + assert inclusion_eval.matched_count == 4 + assert inclusion_eval.constraint_signal > 0 + assert exclusion_eval.violated_count == 1 + assert exclusion_eval.constraint_signal < 0 + + +def test_unknown_constraints_are_neutral(): + context = build_patient_constraint_context( + PatientProfile(patient_id="P1", demographics=Demographics(age_years=42)) + ) + parsed = ConstraintSet( + nct_id="N1", + criteria_id="C1", + polarity="inclusion", + source_text="Documented diabetes mellitus.", + constraints=[Constraint(kind="condition", label="diabetes mellitus")], + ) + + evaluation = evaluate_constraint_set(parsed, context) + + assert evaluation.unknown_count == 1 + assert evaluation.constraint_signal == 0 + + +def test_constraint_reports_are_written(tmp_path): + context = build_patient_constraint_context( + PatientProfile( + patient_id="P1", + conditions=[ + _fact( + "condition-1", + "condition", + "lung cancer", + evidence_text="Patient has lung cancer.", + ) + ], + ) + ) + evaluation = evaluate_constraint_set( + ConstraintSet( + nct_id="N1", + criteria_id="C1", + polarity="inclusion", + source_text="Patients with lung cancer.", + constraints=[Constraint(kind="condition", label="lung cancer")], + ), + context, + ) + + write_constraint_reports( + output_folder=tmp_path, + evaluations=[evaluation], + top_trials=[{"nct_id": "N1", "score": 0.91}], + ) + + payload = json.loads((tmp_path / "constraint_evaluations.json").read_text()) + explained = json.loads((tmp_path / "top_trials_explained.json").read_text()) + summary = (tmp_path / "constraint_summary.md").read_text() + assert payload["criteria"][0]["nct_id"] == "N1" + assert explained["top_trials"][0]["constraint_effect"] == "boosted" + assert "Matched" in summary + + +def test_exclusion_clean_pass_is_rewarded(): + # Patient does NOT have the excluded item -> not excluded -> should reward. + context = build_patient_constraint_context( + PatientProfile(patient_id="P1", demographics=Demographics(age_years=60)) + ) + exclusion = ConstraintSet( + nct_id="N1", + criteria_id="C1", + polarity="exclusion", + source_text="Prior chemotherapy is excluded.", + constraints=[ + Constraint(kind="medication", label="chemotherapy", comparator="prior") + ], + ) + evaluation = evaluate_constraint_set(exclusion, context) + assert evaluation.matched_count == 1 + assert evaluation.violated_count == 0 + assert evaluation.constraint_signal > 0 + + +def test_dosing_and_unit_numbers_are_not_ages(): + for criterion in ( + "Administer 100 to 200 mg daily.", + "Give at least 100 mg of the study drug.", + "Up to 3 cycles of therapy.", + ): + parsed = extract_constraint_set( + nct_id="N1", + criteria_id="C1", + criterion=criterion, + eligibility_type="Inclusion Criteria", + ) + assert not any(c.kind == "age" for c in parsed.constraints), criterion + + +def test_comparator_less_lab_is_skipped(): + parsed = extract_constraint_set( + nct_id="N1", + criteria_id="C1", + criterion="Creatinine 1.5 at screening.", + eligibility_type="Exclusion Criteria", + ) + assert not any(c.kind == "lab" for c in parsed.constraints) + # An explicit comparator is still extracted. + parsed2 = extract_constraint_set( + nct_id="N1", + criteria_id="C2", + criterion="Creatinine <= 1.5 mg/dL.", + eligibility_type="Exclusion Criteria", + ) + assert any(c.kind == "lab" and c.comparator == "le" for c in parsed2.constraints) + + +def test_biomarker_wildtype_patient_is_not_a_false_positive(): + context = build_patient_constraint_context( + PatientProfile( + patient_id="P1", + genomic_findings=[ + _fact( + "g1", + "genomic_finding", + "EGFR wild-type", + evidence_text="EGFR wild-type, no mutation detected.", + ) + ], + ) + ) + # Exclusion "EGFR mutation" against a wild-type patient -> not excluded -> reward. + exclusion = ConstraintSet( + nct_id="N1", + criteria_id="C1", + polarity="exclusion", + source_text="EGFR mutation excluded.", + constraints=[Constraint(kind="biomarker", label="EGFR", comparator="mutated")], + ) + evaluation = evaluate_constraint_set(exclusion, context) + assert evaluation.violated_count == 0 + assert evaluation.constraint_signal > 0 + + +def test_unknown_is_neutral_false_penalizes_unconfirmable_inclusion(): + context = build_patient_constraint_context( + PatientProfile(patient_id="P1", demographics=Demographics(age_years=42)) + ) + inclusion = ConstraintSet( + nct_id="N1", + criteria_id="C1", + polarity="inclusion", + source_text="Documented diabetes mellitus.", + constraints=[Constraint(kind="condition", label="diabetes mellitus")], + ) + neutral = evaluate_constraint_set(inclusion, context, unknown_is_neutral=True) + penalized = evaluate_constraint_set(inclusion, context, unknown_is_neutral=False) + assert neutral.constraint_signal == 0 + assert penalized.constraint_signal < 0 + + +def _fact( + fact_id: str, + category: str, + label: str, + *, + description: str | None = None, + evidence_text: str | None = None, + temporality: str | None = None, +) -> ClinicalFact: + return ClinicalFact( + fact_id=fact_id, + category=category, + label=label, + description=description, + evidence_text=evidence_text, + temporality=temporality, + provenance=Provenance(source_format="test"), + ) diff --git a/tests/test_first_level_planner.py b/tests/test_first_level_planner.py new file mode 100644 index 00000000..e1025bf6 --- /dev/null +++ b/tests/test_first_level_planner.py @@ -0,0 +1,327 @@ +import json + +import pytest + +from trialmatchai.interop.models import ClinicalFact, PatientProfile, Provenance +from trialmatchai.main import run_first_level_search +from trialmatchai.matching.retrieval.first_level_planner import ( + FirstLevelQueryPlanner, + parse_llm_query_expansion, +) +from trialmatchai.matching.retrieval.trial_retrieval import ClinicalTrialSearch +from trialmatchai.search import InMemorySearchBackend + + +def test_planner_builds_deterministic_channels_and_skips_negated_facts(): + planner = FirstLevelQueryPlanner(entity_annotator=FakeAnnotator()) + profile = PatientProfile( + patient_id="P1", + conditions=[ + _fact("condition-1", "condition", "lung cancer"), + _fact("condition-2", "condition", "asthma", negated=True), + ], + genomic_findings=[_fact("gene-1", "genomic_finding", "EGFR mutation")], + medications=[ + _fact("med-1", "medication", "osimertinib", temporality="prior") + ], + ) + + plan = planner.build( + profile=profile, + matching_summary={ + "main_conditions": ["lung cancer"], + "other_conditions": [], + "patient_narrative": ["Patient has EGFR-mutated lung cancer."], + }, + config={"llm_expansion_enabled": False}, + age=64, + sex="female", + overall_status="All", + ) + + assert plan.terms_for("primary_condition") == ["lung cancer"] + assert "lung carcinoma" in plan.terms_for("concept_synonym") + assert "solid tumor" in plan.terms_for("broader_disease") + assert "EGFR mutation" in plan.terms_for("biomarker") + assert "prior osimertinib" in plan.terms_for("therapy") + assert "asthma" not in plan.terms_for("primary_condition", "broader_disease") + + +def test_llm_query_expansion_is_strict_and_capped(): + parsed = parse_llm_query_expansion( + { + "primary_queries": ["lung cancer", "lung cancer"], + "disease_aliases": ["NSCLC"], + "broader_queries": ["solid tumor"], + "biomarker_queries": ["EGFR mutation"], + "treatment_queries": ["osimertinib"], + "discarded_or_uncertain": ["random drift"], + }, + max_terms=3, + ) + + assert parsed.primary_queries == ["lung cancer"] + assert parsed.disease_aliases == ["NSCLC"] + assert parsed.broader_queries == ["solid tumor"] + assert parsed.biomarker_queries == [] + assert parsed.treatment_queries == [] + with pytest.raises(Exception): + parse_llm_query_expansion("{bad json", max_terms=3) + with pytest.raises(Exception): + parse_llm_query_expansion({"primary_queries": [], "extra": []}, max_terms=3) + + +def test_planned_search_fuses_multi_channel_hits_above_single_channel_hits(): + backend = InMemorySearchBackend( + trials=[ + { + "nct_id": "N1", + "condition": "lung cancer", + "brief_title": "EGFR lung cancer osimertinib trial", + "brief_summary": "Study for EGFR mutation after prior osimertinib.", + "eligibility_criteria": "Adults with lung cancer or solid tumor.", + "overall_status": "Recruiting", + "gender": "All", + }, + { + "nct_id": "N2", + "condition": "lung cancer", + "brief_title": "General lung cancer trial", + "eligibility_criteria": "Adults with lung cancer.", + "overall_status": "Recruiting", + "gender": "All", + }, + { + "nct_id": "N3", + "condition": "solid tumor", + "brief_title": "Advanced solid tumor study", + "eligibility_criteria": "Adults with solid tumor.", + "overall_status": "Recruiting", + "gender": "All", + }, + ] + ) + search = ClinicalTrialSearch( + search_backend=backend, + embedder=None, + entity_annotator=FakeAnnotator(), + ) + profile = PatientProfile( + patient_id="P1", + conditions=[_fact("condition-1", "condition", "lung cancer")], + genomic_findings=[_fact("gene-1", "genomic_finding", "EGFR mutation")], + medications=[ + _fact("med-1", "medication", "osimertinib", temporality="prior") + ], + ) + plan = search.build_query_plan( + profile=profile, + matching_summary={ + "main_conditions": ["lung cancer"], + "other_conditions": [], + "patient_narrative": ["Patient has lung cancer with EGFR mutation."], + }, + config={}, + age="all", + sex="ALL", + overall_status="All", + ) + + trials, scores, evidence = search.search_trials_with_plan( + query_plan=plan, + age_input="all", + sex="ALL", + overall_status="All", + size=3, + per_channel_size=3, + search_mode="bm25", + ) + + assert trials[0]["nct_id"] == "N1" + assert scores[0] > scores[-1] + assert "N3" in {trial["nct_id"] for trial in trials} + n1 = next(item for item in evidence if item.nct_id == "N1") + assert len({channel["channel"] for channel in n1.channels}) > 1 + + +def test_run_first_level_search_uses_narrative_channel_and_writes_artifacts(tmp_path): + backend = InMemorySearchBackend( + trials=[ + { + "nct_id": "N1", + "condition": "rare sarcoma", + "brief_title": "Rare sarcoma trial", + "eligibility_criteria": "Adults with rare sarcoma.", + "overall_status": "Recruiting", + "gender": "All", + } + ] + ) + profile = PatientProfile( + patient_id="P1", + conditions=[_fact("condition-1", "condition", "unknown condition")], + ) + + result = run_first_level_search( + { + "main_conditions": ["unknown condition"], + "other_conditions": [], + "patient_narrative": ["Patient has rare sarcoma."], + }, + str(tmp_path), + {"age": "all", "gender": "ALL"}, + None, + None, + _config(enabled=True), + backend, + patient_profile=profile, + ) + + assert result is not None + nct_ids, *_ = result + assert nct_ids == ["N1"] + assert (tmp_path / "first_level_query_plan.json").exists() + candidates = json.loads((tmp_path / "first_level_candidates.json").read_text()) + assert candidates["candidates"][0]["nct_id"] == "N1" + assert (tmp_path / "nct_ids.txt").read_text().strip() == "N1" + + +def test_run_first_level_search_disabled_uses_single_query_path(tmp_path): + backend = InMemorySearchBackend( + trials=[ + { + "nct_id": "N1", + "condition": "lung cancer", + "brief_title": "Lung cancer trial", + "eligibility_criteria": "Adults with lung cancer.", + "overall_status": "Recruiting", + "gender": "All", + } + ] + ) + + result = run_first_level_search( + { + "main_conditions": ["lung cancer"], + "other_conditions": [], + "patient_narrative": ["Patient has lung cancer."], + }, + str(tmp_path), + {"age": "all", "gender": "ALL"}, + None, + None, + _config(enabled=False), + backend, + patient_profile=PatientProfile(patient_id="P1"), + ) + + assert result is not None + nct_ids, *_ = result + assert nct_ids == ["N1"] + assert not (tmp_path / "first_level_query_plan.json").exists() + + +class _RecordingBackend: + def __init__(self): + self.calls = [] + + def search_trials(self, **kwargs): + self.calls.append(kwargs) + return [], [] + + +def test_hard_filters_config_controls_applied_filters(): + profile = PatientProfile( + patient_id="P1", conditions=[_fact("c1", "condition", "lung cancer")] + ) + summary = {"main_conditions": ["lung cancer"], "other_conditions": [], "patient_narrative": []} + + # hard_filters=[] disables age/sex/status filtering entirely. + backend = _RecordingBackend() + search = ClinicalTrialSearch( + search_backend=backend, embedder=None, entity_annotator=FakeAnnotator() + ) + plan = search.build_query_plan( + profile=profile, matching_summary=summary, config={"hard_filters": []}, + age=64, sex="female", overall_status="Recruiting", + ) + search.search_trials_with_plan( + query_plan=plan, age_input=64, sex="female", overall_status="Recruiting", + size=10, per_channel_size=10, search_mode="bm25", + ) + assert backend.calls + for call in backend.calls: + assert call["age"] is None + assert call["sex"] == "all" + assert call["overall_status"] is None + + # hard_filters=["overall_status"] applies only the recruitment-status filter. + backend2 = _RecordingBackend() + search2 = ClinicalTrialSearch( + search_backend=backend2, embedder=None, entity_annotator=FakeAnnotator() + ) + plan2 = search2.build_query_plan( + profile=profile, matching_summary=summary, + config={"hard_filters": ["overall_status"]}, + age=64, sex="female", overall_status="Recruiting", + ) + search2.search_trials_with_plan( + query_plan=plan2, age_input=64, sex="female", overall_status="Recruiting", + size=10, per_channel_size=10, search_mode="bm25", + ) + assert backend2.calls + for call in backend2.calls: + assert call["age"] is None + assert call["sex"] == "all" + assert call["overall_status"] == "Recruiting" + + +class FakeAnnotator: + def annotate_texts_in_parallel(self, texts, max_workers=1, retries=1, delay=0): + return [ + [ + { + "entity_group": "disease", + "text": text, + "synonyms": ["NSCLC", "lung carcinoma"], + } + ] + for text in texts + ] + + +def _fact( + fact_id: str, + category: str, + label: str, + *, + negated: bool = False, + temporality: str | None = None, +) -> ClinicalFact: + return ClinicalFact( + fact_id=fact_id, + category=category, + label=label, + negated=negated, + temporality=temporality, + provenance=Provenance(source_format="test"), + ) + + +def _config(*, enabled: bool) -> dict: + return { + "search": { + "mode": "bm25", + "vector_score_threshold": 0.5, + "max_trials_first_level": 1000, + "first_level": { + "enabled": enabled, + "max_trials": 1000, + "per_channel_size": 300, + "rrf_k": 60, + "vector_score_threshold": 0.0, + "llm_expansion_enabled": False, + "write_reports": True, + }, + } + } diff --git a/tests/test_first_level_search_pytest.py b/tests/test_first_level_search_pytest.py index 8e92e7fd..69c5d708 100644 --- a/tests/test_first_level_search_pytest.py +++ b/tests/test_first_level_search_pytest.py @@ -27,7 +27,7 @@ def test_search_trials_bm25_returns_hits(): search = ClinicalTrialSearch( search_backend=backend, embedder=None, - bio_med_ner=None, + entity_annotator=None, ) trials, scores = search.search_trials( condition="lung cancer", diff --git a/tests/test_import_patient_cli.py b/tests/test_import_patient_cli.py index dfa8e429..ae165e91 100644 --- a/tests/test_import_patient_cli.py +++ b/tests/test_import_patient_cli.py @@ -34,4 +34,4 @@ def test_import_patient_cli_writes_profile_and_summary(tmp_path, monkeypatch): assert profile["patient_id"] == "patient" assert summary["patient_id"] == "patient" assert summary["main_conditions"] == ["Patient has breast cancer."] - assert summary["expanded_sentences"] + assert summary["patient_narrative"] diff --git a/tests/test_patient_interop.py b/tests/test_patient_interop.py index 81efba93..0b507508 100644 --- a/tests/test_patient_interop.py +++ b/tests/test_patient_interop.py @@ -44,7 +44,7 @@ def test_patient_profile_schema_and_summary(): summary = profile_to_matching_summary(profile) assert summary["patient_id"] == "p1" assert summary["age"] == "all" - assert summary["expanded_sentences"] + assert summary["patient_narrative"] def test_text_importer_preserves_offsets_and_entities(tmp_path): diff --git a/tests/test_patient_runtime_loading.py b/tests/test_patient_runtime_loading.py index 349984f8..7227e1f0 100644 --- a/tests/test_patient_runtime_loading.py +++ b/tests/test_patient_runtime_loading.py @@ -20,7 +20,7 @@ def test_runtime_loads_profiles_from_configured_directory(tmp_path): "patient_id": "p1", "main_conditions": ["melanoma"], "other_conditions": [], - "expanded_sentences": ["Patient has melanoma."], + "patient_narrative": ["Patient has melanoma."], "age": "all", "gender": "all", } diff --git a/tests/test_schemas.py b/tests/test_schemas.py index 9c02e994..c8747a6c 100644 --- a/tests/test_schemas.py +++ b/tests/test_schemas.py @@ -10,7 +10,7 @@ def test_phenopacket_minimal(self) -> None: self.assertEqual(obj.id, "patient-1") def test_keywords_default(self) -> None: - data = {"main_conditions": ["A"], "other_conditions": [], "expanded_sentences": []} + data = {"main_conditions": ["A"], "other_conditions": [], "patient_narrative": []} obj = Keywords.model_validate(data) self.assertEqual(obj.main_conditions, ["A"]) @@ -18,7 +18,7 @@ def test_keywords_allows_extra(self) -> None: data = { "main_conditions": [], "other_conditions": [], - "expanded_sentences": [], + "patient_narrative": [], "error": "bad", "extra": "ok", } diff --git a/tests/test_search_queries_pytest.py b/tests/test_search_queries_pytest.py index 8ee62a04..77b0f441 100644 --- a/tests/test_search_queries_pytest.py +++ b/tests/test_search_queries_pytest.py @@ -6,7 +6,7 @@ def test_first_level_query_describes_backend_search(): search = ClinicalTrialSearch( search_backend=InMemorySearchBackend(), embedder=None, - bio_med_ner=None, + entity_annotator=None, ) query = search.create_query( synonyms=["lung cancer"], diff --git a/tests/test_second_level_search_pytest.py b/tests/test_second_level_search_pytest.py index c133067c..45894b29 100644 --- a/tests/test_second_level_search_pytest.py +++ b/tests/test_second_level_search_pytest.py @@ -1,3 +1,9 @@ +from trialmatchai.constraints.models import ( + Constraint, + ConstraintSet, + PatientConstraintContext, + PatientConstraintFact, +) from trialmatchai.matching.retrieval.criteria_retrieval import SecondStageRetriever from trialmatchai.search import InMemorySearchBackend @@ -64,3 +70,128 @@ def test_retrieve_criteria_uses_entity_synonyms(): hits = retriever.retrieve_criteria(["N1"], ["cancer"]) assert hits["cancer"][0]["_source"]["criteria_id"] == "C1" + + +def test_constraint_adjustments_penalize_without_hard_exclusion(): + backend = InMemorySearchBackend(criteria=_constraint_test_criteria()) + retriever = SecondStageRetriever( + search_backend=backend, + llm_reranker=None, + embedder=None, + inclusion_weight=1.0, + exclusion_weight=1.0, + search_mode="bm25", + ) + + trials = retriever.retrieve_and_rank( + ["lung cancer"], + ["N1", "N2"], + top_n=2, + patient_context=_constraint_context(), + constraints_config={"enabled": True, "score_weight": 1.0}, + ) + + scores = {trial["nct_id"]: trial["score"] for trial in trials} + assert trials[0]["nct_id"] == "N1" + assert "N2" in scores + assert scores["N2"] == 0 + assert any( + evaluation.nct_id == "N2" and evaluation.violated_count == 1 + for evaluation in retriever.last_constraint_evaluations + ) + + +def test_constraints_disabled_preserves_ranking_behavior(): + backend = InMemorySearchBackend(criteria=_constraint_test_criteria()) + retriever = SecondStageRetriever( + search_backend=backend, + llm_reranker=None, + embedder=None, + inclusion_weight=1.0, + exclusion_weight=1.0, + search_mode="bm25", + ) + + disabled = retriever.retrieve_and_rank( + ["lung cancer"], + ["N1", "N2"], + top_n=2, + patient_context=_constraint_context(), + constraints_config={"enabled": False, "score_weight": 1.0}, + ) + assert retriever.last_constraint_evaluations == [] + + baseline = retriever.retrieve_and_rank(["lung cancer"], ["N1", "N2"], top_n=2) + + assert disabled == baseline + + +def _constraint_test_criteria(): + return [ + { + "criteria_id": "C1", + "nct_id": "N1", + "criterion": "Adults with lung cancer.", + "eligibility_type": "Inclusion Criteria", + "entities": [], + "constraints": _constraint_payload( + "N1", + "C1", + "inclusion", + [Constraint(kind="condition", label="lung cancer")], + ), + }, + { + "criteria_id": "C2", + "nct_id": "N2", + "criterion": "Adults with lung cancer. Prior osimertinib is excluded.", + "eligibility_type": "Exclusion Criteria", + "entities": [], + "constraints": _constraint_payload( + "N2", + "C2", + "exclusion", + [ + Constraint( + kind="medication", + label="osimertinib", + comparator="prior", + ) + ], + ), + }, + ] + + +def _constraint_payload( + nct_id: str, + criteria_id: str, + polarity: str, + constraints: list[Constraint], +): + return ConstraintSet( + nct_id=nct_id, + criteria_id=criteria_id, + polarity=polarity, + source_text="constraint fixture", + constraints=constraints, + ).model_dump(mode="json") + + +def _constraint_context() -> PatientConstraintContext: + return PatientConstraintContext( + patient_id="P1", + facts=[ + PatientConstraintFact( + kind="condition", + label="lung cancer", + evidence_text="Patient has lung cancer.", + ), + PatientConstraintFact( + kind="medication", + label="osimertinib", + temporality="prior", + evidence_text="Prior osimertinib documented.", + ), + ], + ) diff --git a/tests/test_settings.py b/tests/test_settings.py index c8f13d3b..a963f1a6 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -23,11 +23,12 @@ def test_env_overrides(self) -> None: "criteria_table": "old-criteria", }, "embedder": {"model_name": "old"}, - "search": {"mode": "hybrid"}, "entity_extraction": {"backend": "gliner2"}, "concept_linker": {"db_path": "old"}, "patient_inputs": {"profile_dir": "old-profiles"}, "registry": {"since_days": 7, "raw_dir": "old-raw"}, + "constraints": {"enabled": True, "score_weight": 0.25}, + "search": {"mode": "hybrid", "first_level": {"max_trials": 1000}}, } os.environ["TRIALMATCHAI_SEARCH_DB_PATH"] = "data/search-test" os.environ["TRIALMATCHAI_SEARCH_TRIALS_TABLE"] = "trials-test" @@ -39,6 +40,12 @@ def test_env_overrides(self) -> None: os.environ["TRIALMATCHAI_PATIENT_STRICT_VALIDATION"] = "true" os.environ["TRIALMATCHAI_REGISTRY_SINCE_DAYS"] = "30" os.environ["TRIALMATCHAI_REGISTRY_RAW_DIR"] = "registry/raw" + os.environ["TRIALMATCHAI_CONSTRAINTS_ENABLED"] = "false" + os.environ["TRIALMATCHAI_CONSTRAINTS_SCORE_WEIGHT"] = "0.4" + os.environ["TRIALMATCHAI_FIRST_LEVEL_ENABLED"] = "false" + os.environ["TRIALMATCHAI_FIRST_LEVEL_MAX_TRIALS"] = "700" + os.environ["TRIALMATCHAI_FIRST_LEVEL_PER_CHANNEL_SIZE"] = "250" + os.environ["TRIALMATCHAI_FIRST_LEVEL_VECTOR_SCORE_THRESHOLD"] = "0.1" try: updated = apply_env_overrides(raw) finally: @@ -52,6 +59,12 @@ def test_env_overrides(self) -> None: os.environ.pop("TRIALMATCHAI_PATIENT_STRICT_VALIDATION", None) os.environ.pop("TRIALMATCHAI_REGISTRY_SINCE_DAYS", None) os.environ.pop("TRIALMATCHAI_REGISTRY_RAW_DIR", None) + os.environ.pop("TRIALMATCHAI_CONSTRAINTS_ENABLED", None) + os.environ.pop("TRIALMATCHAI_CONSTRAINTS_SCORE_WEIGHT", None) + os.environ.pop("TRIALMATCHAI_FIRST_LEVEL_ENABLED", None) + os.environ.pop("TRIALMATCHAI_FIRST_LEVEL_MAX_TRIALS", None) + os.environ.pop("TRIALMATCHAI_FIRST_LEVEL_PER_CHANNEL_SIZE", None) + os.environ.pop("TRIALMATCHAI_FIRST_LEVEL_VECTOR_SCORE_THRESHOLD", None) self.assertEqual(updated["search_backend"]["db_path"], "data/search-test") self.assertEqual(updated["search_backend"]["trials_table"], "trials-test") @@ -63,6 +76,12 @@ def test_env_overrides(self) -> None: self.assertTrue(updated["patient_inputs"]["strict_validation"]) self.assertEqual(updated["registry"]["since_days"], 30) self.assertEqual(updated["registry"]["raw_dir"], "registry/raw") + self.assertFalse(updated["constraints"]["enabled"]) + self.assertEqual(updated["constraints"]["score_weight"], 0.4) + self.assertFalse(updated["search"]["first_level"]["enabled"]) + self.assertEqual(updated["search"]["first_level"]["max_trials"], 700) + self.assertEqual(updated["search"]["first_level"]["per_channel_size"], 250) + self.assertEqual(updated["search"]["first_level"]["vector_score_threshold"], 0.1) if __name__ == "__main__": diff --git a/uv.lock b/uv.lock index fcac0f97..7b6661d9 100644 --- a/uv.lock +++ b/uv.lock @@ -2991,7 +2991,6 @@ dependencies = [ [package.optional-dependencies] entity = [ - { name = "gliner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "gliner2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "transformers", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, @@ -3000,7 +2999,6 @@ finetune = [ { name = "accelerate", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "bitsandbytes", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "datasets", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "gliner", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "gliner2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "peft", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "torch", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, @@ -3036,8 +3034,6 @@ requires-dist = [ { name = "bitsandbytes", marker = "(sys_platform == 'linux' and extra == 'gpu') or (sys_platform == 'win32' and extra == 'gpu')", specifier = "==0.49.2" }, { name = "datasets", marker = "extra == 'finetune'", specifier = ">=3.0,<5" }, { name = "einops", marker = "extra == 'llm'", specifier = "==0.8.0" }, - { name = "gliner", marker = "extra == 'entity'", specifier = "==0.2.27" }, - { name = "gliner", marker = "extra == 'finetune'", specifier = "==0.2.27" }, { name = "gliner2", marker = "extra == 'entity'", specifier = ">=1.3.1,<2" }, { name = "gliner2", marker = "extra == 'finetune'", specifier = ">=1.3.1,<2" }, { name = "lancedb", specifier = ">=0.25.0,<0.26" }, From 57808853fcf6276500ee64e31c3aa0f46418cbf5 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 15:06:31 +0200 Subject: [PATCH 31/64] feat: optional country-level geographic trial filter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds geographic location as an opt-in first-level hard filter, done site-aware and recall-safe rather than as a blunt cut. - interop: PatientProfile gains a Location (country/state/city); the FHIR importer populates it from Patient.address. - matching/retrieval/location.py: country-level, match-ANY-site filtering. A trial is kept when the patient's country is unknown, when the trial has no indexed site countries, or when any of its sites is in the patient's country — so trials with unknown locations are never dropped. - run_first_level_search applies it only when "location" is in search.first_level.hard_filters (default keeps age/sex/overall_status, so the behavior is unchanged unless opted in). - settings: hard_filters Literal accepts "location". Tests cover recall-safety, the end-to-end hard-filter on/off behavior, and FHIR address extraction. README updated. --- README.md | 10 +- src/trialmatchai/config/settings.py | 3 +- src/trialmatchai/interop/__init__.py | 2 + src/trialmatchai/interop/importers/fhir.py | 26 +++- src/trialmatchai/interop/models.py | 11 ++ src/trialmatchai/main.py | 20 +++ .../matching/retrieval/location.py | 60 +++++++ tests/test_location_filter.py | 146 ++++++++++++++++++ 8 files changed, 273 insertions(+), 5 deletions(-) create mode 100644 src/trialmatchai/matching/retrieval/location.py create mode 100644 tests/test_location_filter.py diff --git a/README.md b/README.md index 7de83c88..c9ec1ba4 100644 --- a/README.md +++ b/README.md @@ -226,9 +226,13 @@ terms, patient narrative text, biomarkers, prior therapy or procedures, and optional LLM-generated expansions. LLM expansion is off by default; deterministic concept and patient-profile expansion are the default path. -The first level only hard-filters by age, sex/gender, and recruitment status. -Location, biomarkers, phase, prior therapy, and eligibility constraints remain -soft signals for later retrieval and reasoning stages. +By default the first level hard-filters by age, sex/gender, and recruitment +status (`search.first_level.hard_filters`). Geographic **location** is an opt-in +hard filter: add `"location"` to `hard_filters` to keep only trials with a +recruiting site in the patient's country (country-level, site-aware, and +recall-safe — trials with unknown site countries are never dropped; patient +location is populated by the FHIR importer). Biomarkers, phase, prior therapy, +and eligibility constraints remain soft signals for later stages. When enabled, first-level artifacts are written under `results//`: diff --git a/src/trialmatchai/config/settings.py b/src/trialmatchai/config/settings.py index 91635914..fac0fd56 100644 --- a/src/trialmatchai/config/settings.py +++ b/src/trialmatchai/config/settings.py @@ -128,7 +128,8 @@ class FirstLevelSearchSettings(BaseModel): llm_expansion_enabled: bool = False llm_max_terms: int = Field(12, ge=0) write_reports: bool = True - hard_filters: list[Literal["age", "sex", "overall_status"]] = Field( + # "location" is opt-in (country-level, site-aware); not in the default set. + hard_filters: list[Literal["age", "sex", "overall_status", "location"]] = Field( default_factory=lambda: ["age", "sex", "overall_status"] ) diff --git a/src/trialmatchai/interop/__init__.py b/src/trialmatchai/interop/__init__.py index 1919662c..e436452e 100644 --- a/src/trialmatchai/interop/__init__.py +++ b/src/trialmatchai/interop/__init__.py @@ -3,6 +3,7 @@ from trialmatchai.interop.models import ( ClinicalFact, Demographics, + Location, NormalizedCode, PatientNote, PatientProfile, @@ -13,6 +14,7 @@ __all__ = [ "ClinicalFact", "Demographics", + "Location", "NormalizedCode", "PatientNote", "PatientProfile", diff --git a/src/trialmatchai/interop/importers/fhir.py b/src/trialmatchai/interop/importers/fhir.py index e4648faa..978e1f02 100644 --- a/src/trialmatchai/interop/importers/fhir.py +++ b/src/trialmatchai/interop/importers/fhir.py @@ -4,7 +4,13 @@ from pathlib import Path from typing import Any, Mapping -from trialmatchai.interop.models import Demographics, PatientProfile, Provenance, SourceDocument +from trialmatchai.interop.models import ( + Demographics, + Location, + PatientProfile, + Provenance, + SourceDocument, +) from trialmatchai.interop.utils import ( age_years_from_birth_date, clean_text, @@ -96,10 +102,28 @@ def _profile_from_patient( birth_date=birth_date, age_years=age_years_from_birth_date(birth_date), ), + location=_patient_location(patient.get("address")), provenance=[provenance], ) +def _patient_location(address: Any) -> Location | None: + """Extract a coarse location from a FHIR Patient.address list (first entry).""" + if isinstance(address, dict): + address = [address] + if not isinstance(address, list): + return None + for entry in address: + if not isinstance(entry, dict): + continue + country = (entry.get("country") or "").strip() or None + state = (entry.get("state") or "").strip() or None + city = (entry.get("city") or "").strip() or None + if country or state or city: + return Location(country=country, state=state, city=city) + return None + + def _load_json_resources(path: Path) -> list[dict[str, Any]]: data = json.loads(path.read_text(encoding="utf-8")) if isinstance(data, list): diff --git a/src/trialmatchai/interop/models.py b/src/trialmatchai/interop/models.py index 7e8e567b..251046f6 100644 --- a/src/trialmatchai/interop/models.py +++ b/src/trialmatchai/interop/models.py @@ -50,6 +50,16 @@ class Demographics(BaseModel): model_config = ConfigDict(extra="allow") +class Location(BaseModel): + """A patient's geographic location, used for optional site-based filtering.""" + + country: str | None = None + state: str | None = None + city: str | None = None + + model_config = ConfigDict(extra="allow") + + class ClinicalFact(BaseModel): fact_id: str category: str @@ -103,6 +113,7 @@ class SourceDocument(BaseModel): class PatientProfile(BaseModel): patient_id: str demographics: Demographics = Field(default_factory=Demographics) + location: Location | None = None conditions: list[ClinicalFact] = Field(default_factory=list) phenotypes: list[ClinicalFact] = Field(default_factory=list) observations: list[ClinicalFact] = Field(default_factory=list) diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index 3c2e4dbe..306d8461 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -16,6 +16,10 @@ ) from trialmatchai.matching.retrieval.trial_retrieval import ClinicalTrialSearch from trialmatchai.matching.retrieval.criteria_retrieval import SecondStageRetriever +from trialmatchai.matching.retrieval.location import ( + filter_trials_by_country, + patient_country, +) from trialmatchai.search import LanceDBSearchBackend from trialmatchai.services.preflight import run_preflight_checks from trialmatchai.interop.exporters import profile_to_matching_summary @@ -137,6 +141,22 @@ def run_first_level_search( search_mode=search_cfg.get("mode", "hybrid"), ) + # Optional geographic hard filter (country-level, site-aware, opt-in via + # search.first_level.hard_filters). Recall-safe: only drops trials whose + # known sites exclude the patient's country. + hard_filters = first_level_cfg.get("hard_filters") or ["age", "sex", "overall_status"] + if "location" in hard_filters and patient_profile is not None: + country = patient_country(patient_profile) + if country: + before = len(trials) + trials, scores = filter_trials_by_country(trials, scores, country) + logger.info( + "Location filter (country=%s): %d -> %d trials.", + country, + before, + len(trials), + ) + nct_ids = [trial.get("nct_id") for trial in trials if trial.get("nct_id")] first_level_scores = { trial.get("nct_id"): score diff --git a/src/trialmatchai/matching/retrieval/location.py b/src/trialmatchai/matching/retrieval/location.py new file mode 100644 index 00000000..27532ecf --- /dev/null +++ b/src/trialmatchai/matching/retrieval/location.py @@ -0,0 +1,60 @@ +"""Optional geographic (country-level, site-aware) trial filtering. + +Trials recruit at many sites across countries, so the filter is deliberately +recall-safe: a trial passes when the patient's country is unknown, when the +trial has no indexed site countries, or when ANY of its sites is in the +patient's country. It only drops trials we are confident have no site in the +patient's country. Country granularity avoids the recall risk of distance/region +matching on messy ClinicalTrials.gov site data. +""" + +from __future__ import annotations + +from typing import Any, Mapping, Sequence + + +def patient_country(profile: Any) -> str | None: + location = getattr(profile, "location", None) + country = getattr(location, "country", None) if location is not None else None + country = (country or "").strip() + return country or None + + +def trial_site_countries(trial: Mapping[str, Any]) -> set[str]: + countries: set[str] = set() + locations = trial.get("location") + if isinstance(locations, Mapping): + locations = [locations] + if not isinstance(locations, Sequence) or isinstance(locations, (str, bytes)): + return countries + for site in locations: + if isinstance(site, Mapping): + country = str(site.get("country") or "").strip().casefold() + if country: + countries.add(country) + return countries + + +def trial_in_country(trial: Mapping[str, Any], country: str) -> bool: + """True if the trial should pass the country filter (recall-safe).""" + site_countries = trial_site_countries(trial) + if not site_countries: + return True # unknown location -> do not drop + return country.strip().casefold() in site_countries + + +def filter_trials_by_country( + trials: list[dict[str, Any]], + scores: list[float], + country: str | None, +) -> tuple[list[dict[str, Any]], list[float]]: + """Drop trials with known sites that exclude the patient's country.""" + if not country: + return trials, scores + kept_trials: list[dict[str, Any]] = [] + kept_scores: list[float] = [] + for trial, score in zip(trials, scores): + if trial_in_country(trial, country): + kept_trials.append(trial) + kept_scores.append(score) + return kept_trials, kept_scores diff --git a/tests/test_location_filter.py b/tests/test_location_filter.py new file mode 100644 index 00000000..9b6f6047 --- /dev/null +++ b/tests/test_location_filter.py @@ -0,0 +1,146 @@ +"""Tests for the optional country-level, site-aware trial location filter.""" + +from __future__ import annotations + +import json + +from trialmatchai.interop import import_patient_path +from trialmatchai.interop.models import ( + ClinicalFact, + Location, + PatientProfile, + Provenance, +) +from trialmatchai.main import run_first_level_search +from trialmatchai.matching.retrieval.location import ( + filter_trials_by_country, + patient_country, + trial_in_country, +) +from trialmatchai.search import InMemorySearchBackend + + +def _trial(nct_id, countries): + return { + "nct_id": nct_id, + "condition": "lung cancer", + "brief_title": "Lung cancer trial", + "eligibility_criteria": "Adults with lung cancer.", + "overall_status": "Recruiting", + "gender": "All", + "location": [{"country": c} for c in countries], + } + + +def test_filter_is_recall_safe(): + us = _trial("N_US", ["United States", "Germany"]) + fr = _trial("N_FR", ["France"]) + unknown = {"nct_id": "N_UNK"} # no location data + trials = [us, fr, unknown] + scores = [3.0, 2.0, 1.0] + + kept, kept_scores = filter_trials_by_country(trials, scores, "United States") + ids = {t["nct_id"] for t in kept} + assert ids == {"N_US", "N_UNK"} # multi-site US kept; unknown kept; France dropped + assert kept_scores == [3.0, 1.0] + + # No patient country -> no filtering. + assert filter_trials_by_country(trials, scores, None)[0] == trials + assert trial_in_country(unknown, "France") is True # unknown location never dropped + + +def test_patient_country_extraction(): + profile = PatientProfile(patient_id="P", location=Location(country=" France ")) + assert patient_country(profile) == "France" + assert patient_country(PatientProfile(patient_id="P")) is None + + +def _fl_config(*, hard_filters): + return { + "search": { + "mode": "bm25", + "vector_score_threshold": 0.5, + "max_trials_first_level": 1000, + "first_level": { + "enabled": True, + "max_trials": 1000, + "per_channel_size": 300, + "rrf_k": 60, + "vector_score_threshold": 0.0, + "llm_expansion_enabled": False, + "write_reports": False, + "hard_filters": hard_filters, + }, + } + } + + +def _profile_us(): + return PatientProfile( + patient_id="P1", + location=Location(country="United States"), + conditions=[ + ClinicalFact( + fact_id="c1", + category="condition", + label="lung cancer", + provenance=Provenance(source_format="test"), + ) + ], + ) + + +def test_location_hard_filter_drops_out_of_country_trials(tmp_path): + backend = InMemorySearchBackend( + trials=[_trial("N_US", ["United States"]), _trial("N_FR", ["France"])] + ) + result = run_first_level_search( + {"main_conditions": ["lung cancer"], "other_conditions": [], "patient_narrative": []}, + str(tmp_path), + {"age": "all", "gender": "ALL"}, + None, + None, + _fl_config(hard_filters=["age", "sex", "overall_status", "location"]), + backend, + patient_profile=_profile_us(), + ) + nct_ids, *_ = result + assert "N_US" in nct_ids + assert "N_FR" not in nct_ids + + +def test_location_filter_off_by_default_keeps_all_countries(tmp_path): + backend = InMemorySearchBackend( + trials=[_trial("N_US", ["United States"]), _trial("N_FR", ["France"])] + ) + result = run_first_level_search( + {"main_conditions": ["lung cancer"], "other_conditions": [], "patient_narrative": []}, + str(tmp_path), + {"age": "all", "gender": "ALL"}, + None, + None, + _fl_config(hard_filters=["age", "sex", "overall_status"]), + backend, + patient_profile=_profile_us(), + ) + nct_ids, *_ = result + assert {"N_US", "N_FR"} <= set(nct_ids) + + +def test_fhir_importer_extracts_patient_location(tmp_path): + path = tmp_path / "patient.json" + path.write_text( + json.dumps( + { + "resourceType": "Patient", + "id": "pat-1", + "gender": "female", + "birthDate": "1980-01-01", + "address": [{"city": "Boston", "state": "MA", "country": "United States"}], + } + ) + ) + profiles = import_patient_path(path) + assert profiles[0].location is not None + assert profiles[0].location.country == "United States" + assert profiles[0].location.city == "Boston" From acde376b74cde6dae190c031e2c69215e16e6414 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 15:29:39 +0200 Subject: [PATCH 32/64] feat: populate patient location from the OMOP importer The OMOP importer now resolves a patient's location via the LOCATION table (PERSON.location_id -> LOCATION), filling country (country_source_value, or country_concept_id via concept lookup), state, and city. NaN-safe field extraction; degrades to no location when the table or link is absent. This extends the optional country-level location hard filter to OMOP patients (previously FHIR-only). Test added; README updated. --- README.md | 4 +- src/trialmatchai/interop/importers/omop.py | 52 +++++++++++++++++++++- tests/test_location_filter.py | 19 ++++++++ 3 files changed, 72 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c9ec1ba4..c8ed97fe 100644 --- a/README.md +++ b/README.md @@ -231,8 +231,8 @@ status (`search.first_level.hard_filters`). Geographic **location** is an opt-in hard filter: add `"location"` to `hard_filters` to keep only trials with a recruiting site in the patient's country (country-level, site-aware, and recall-safe — trials with unknown site countries are never dropped; patient -location is populated by the FHIR importer). Biomarkers, phase, prior therapy, -and eligibility constraints remain soft signals for later stages. +location is populated by the FHIR and OMOP importers). Biomarkers, phase, prior +therapy, and eligibility constraints remain soft signals for later stages. When enabled, first-level artifacts are written under `results//`: diff --git a/src/trialmatchai/interop/importers/omop.py b/src/trialmatchai/interop/importers/omop.py index a026b64d..4055770d 100644 --- a/src/trialmatchai/interop/importers/omop.py +++ b/src/trialmatchai/interop/importers/omop.py @@ -5,7 +5,14 @@ import pandas as pd -from trialmatchai.interop.models import Demographics, NormalizedCode, PatientNote, PatientProfile, Provenance +from trialmatchai.interop.models import ( + Demographics, + Location, + NormalizedCode, + PatientNote, + PatientProfile, + Provenance, +) from trialmatchai.interop.utils import ( age_years_from_birth_date, clean_text, @@ -25,6 +32,7 @@ def import_omop_extract( root = Path(path) tables = _load_tables(root) concepts = _concept_lookup(tables.get("concept")) + location_index = _location_index(tables.get("location")) person = tables.get("person") if person is None or person.empty: if strict: @@ -68,6 +76,7 @@ def import_omop_extract( birth_date=birth_date, age_years=age_years_from_birth_date(birth_date), ), + location=_person_location(row, location_index, concepts), provenance=[provenance], ) _add_condition_rows(profile, grouped["condition_occurrence"].get(person_key, []), concepts, root) @@ -312,6 +321,47 @@ def _normalize_join_id(value: Any) -> str: return text +def _location_index(table: pd.DataFrame | None) -> dict[str, dict[str, Any]]: + if table is None or table.empty or "location_id" not in table.columns: + return {} + index: dict[str, dict[str, Any]] = {} + for record in table.to_dict("records"): + key = _normalize_join_id(record.get("location_id")) + if key: + index.setdefault(key, record) + return index + + +def _person_location( + row: dict[str, Any], + location_index: dict[str, dict[str, Any]], + concepts: dict[Any, dict[str, Any]], +) -> Location | None: + if not location_index: + return None + location_id = _normalize_join_id(row.get("location_id")) + if not location_id: + return None + loc = location_index.get(location_id) + if not loc: + return None + + def field(name: str) -> str | None: + value = loc.get(name) + if value is None or (isinstance(value, float) and pd.isna(value)): + return None + return clean_text(value) or None + + country = field("country_source_value") or _concept_label( + loc.get("country_concept_id"), concepts + ) + state = field("state") + city = field("city") + if not (country or state or city): + return None + return Location(country=country, state=state, city=city) + + def _group_by_person(table: pd.DataFrame | None) -> dict[str, list[dict[str, Any]]]: if table is None or table.empty or "person_id" not in table.columns: return {} diff --git a/tests/test_location_filter.py b/tests/test_location_filter.py index 9b6f6047..05a30743 100644 --- a/tests/test_location_filter.py +++ b/tests/test_location_filter.py @@ -127,6 +127,25 @@ def test_location_filter_off_by_default_keeps_all_countries(tmp_path): assert {"N_US", "N_FR"} <= set(nct_ids) +def test_omop_importer_extracts_patient_location(tmp_path): + import pandas as pd + + omop = tmp_path / "omop" + omop.mkdir() + pd.DataFrame( + [{"person_id": 1, "gender_source_value": "M", "year_of_birth": 1975, "location_id": 10}] + ).to_csv(omop / "PERSON.csv", index=False) + pd.DataFrame( + [{"location_id": 10, "city": "Lyon", "country_source_value": "France"}] + ).to_csv(omop / "LOCATION.csv", index=False) + + profiles = import_patient_path(omop) + assert len(profiles) == 1 + assert profiles[0].location is not None + assert profiles[0].location.country == "France" + assert profiles[0].location.city == "Lyon" + + def test_fhir_importer_extracts_patient_location(tmp_path): path = tmp_path / "patient.json" path.write_text( From 175890fa6faf4802bd3ebfab87719695739930fc Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Mon, 22 Jun 2026 15:59:23 +0200 Subject: [PATCH 33/64] fix(fhir): harden importer for real EHR data Addresses the correctness/coverage gaps found in adversarial review so the importer is trustworthy on real Epic/Cerner R4 output, not just Synthea. Correctness (incl. one patient-safety bug): - honor clinicalStatus/verificationStatus/status: resolved/inactive/refuted conditions are now NEGATED (no longer matched as active); entered-in-error, cancelled, and not-done resources are dropped (recorded in `unsupported`). Completed/stopped medications stay un-negated (real prior exposure). - CodeableConcept: extract ALL codings, ordering known vocabularies (SNOMED/LOINC/RxNorm/ICD) first, so concept linking uses the standard code instead of a proprietary one; secondary codings retained. - parse_date handles partial FHIR dates (YYYY, YYYY-MM) -> age no longer lost. Coverage: - medications via medicationReference / contained Medication / R5 wrapper. - Observation.component panels, interpretation flags, and value[x] variants (comparator, Range, Ratio, CodeableConcept, string/bool/int/datetime). - onset/effective/performed Period + recordedDate temporality; cleaner note and dosageInstruction text; broader genomic-observation detection. Robustness: - NDJSON loader tolerates malformed lines (skips + logs) instead of aborting. - reference resolution handles urn:uuid, absolute URLs, and contained refs; orphan resources attributed once, with a logged mapping-failure reason. 9 regression tests added. --- src/trialmatchai/interop/importers/fhir.py | 449 +++++++++++++++++---- src/trialmatchai/interop/utils.py | 93 +++-- tests/test_fhir_robustness.py | 211 ++++++++++ 3 files changed, 642 insertions(+), 111 deletions(-) create mode 100644 tests/test_fhir_robustness.py diff --git a/src/trialmatchai/interop/importers/fhir.py b/src/trialmatchai/interop/importers/fhir.py index 978e1f02..bd0f4523 100644 --- a/src/trialmatchai/interop/importers/fhir.py +++ b/src/trialmatchai/interop/importers/fhir.py @@ -14,7 +14,7 @@ from trialmatchai.interop.utils import ( age_years_from_birth_date, clean_text, - code_from_fhir_codeable, + codes_from_fhir_codeable, label_from_fhir_codeable, make_fact, normalize_gender, @@ -22,6 +22,9 @@ safe_patient_id, source_path_string, ) +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) def import_fhir( @@ -32,7 +35,7 @@ def import_fhir( ) -> list[PatientProfile]: source_path = Path(path) resources = ( - _load_ndjson(source_path) + _load_ndjson(source_path, strict=strict) if input_format == "fhir-ndjson" else _load_json_resources(source_path) ) @@ -56,26 +59,33 @@ def import_fhir( raise ValueError( f"{message}: {resource.get('resourceType')}/{resource.get('id')}" ) - for candidate in profiles: - candidate.unsupported.append( - { - "resourceType": resource.get("resourceType"), - "id": resource.get("id"), - "reason": message, - } - ) + # Attribute the orphan to the first profile only (avoid duplicating it + # across every profile in a multi-patient bundle). + profiles[0].unsupported.append( + { + "resourceType": resource.get("resourceType"), + "id": resource.get("id"), + "reason": message, + } + ) continue try: base_provenance = profile.provenance[0] _add_resource(profile, resource, base_provenance) - except Exception: + except Exception as exc: if strict: raise + logger.warning( + "FHIR mapping failed for %s/%s: %s", + resource.get("resourceType"), + resource.get("id"), + exc, + ) profile.unsupported.append( { "resourceType": resource.get("resourceType"), "id": resource.get("id"), - "reason": "resource mapping failed", + "reason": f"resource mapping failed: {exc}", } ) return profiles @@ -124,6 +134,9 @@ def _patient_location(address: Any) -> Location | None: return None +# --------------------------------------------------------------------------- I/O + + def _load_json_resources(path: Path) -> list[dict[str, Any]]: data = json.loads(path.read_text(encoding="utf-8")) if isinstance(data, list): @@ -143,15 +156,33 @@ def _load_json_resources(path: Path) -> list[dict[str, Any]]: return [data] -def _load_ndjson(path: Path) -> list[dict[str, Any]]: - resources = [] +def _load_ndjson(path: Path, *, strict: bool = False) -> list[dict[str, Any]]: + resources: list[dict[str, Any]] = [] with path.open("r", encoding="utf-8") as handle: - for line in handle: - if line.strip(): - resources.append(json.loads(line)) + for line_number, line in enumerate(handle, start=1): + line = line.strip() + if not line: + continue + try: + obj = json.loads(line) + except json.JSONDecodeError as exc: + if strict: + raise + logger.warning( + "Skipping malformed NDJSON line %d in %s: %s", + line_number, + path.name, + exc, + ) + continue + if isinstance(obj, dict): + resources.append(obj) return resources +# ------------------------------------------------------------ reference resolution + + def _profiles_by_reference( patients: list[Mapping[str, Any]], profiles: list[PatientProfile], @@ -165,6 +196,8 @@ def _profiles_by_reference( full_url = str(patient.get("_bundle_full_url") or "").strip() if full_url: mapping[full_url] = profile + if full_url.casefold().startswith("urn:uuid:"): + mapping[full_url.split(":")[-1]] = profile return mapping @@ -175,12 +208,34 @@ def _profile_for_resource( ) -> PatientProfile | None: reference = _patient_reference(resource) if reference: - return profiles_by_reference.get(reference) + for candidate in _reference_candidates(reference): + if candidate in profiles_by_reference: + return profiles_by_reference[candidate] if len(profiles) == 1: return profiles[0] return None +def _reference_candidates(reference: str) -> list[str]: + """All key forms a patient reference might match (relative, absolute URL, + urn:uuid, contained).""" + ref = reference.strip() + candidates = [ref] + if ref.casefold().startswith("urn:uuid:"): + candidates.append(ref.split(":")[-1]) + if ref.startswith("#"): + candidates.append(ref[1:]) + if "/" in ref: + parts = ref.rstrip("/").split("/") + tail = parts[-1] + candidates.append(tail) + if len(parts) >= 2 and parts[-2].casefold() == "patient": + candidates.append(f"Patient/{tail}") + # de-duplicate, preserve order + seen: set[str] = set() + return [c for c in candidates if c and not (c in seen or seen.add(c))] + + def _patient_reference(resource: Mapping[str, Any]) -> str | None: for key in ("subject", "patient", "beneficiary"): reference = _reference_value(resource.get(key)) @@ -197,6 +252,78 @@ def _reference_value(value: Any) -> str | None: return None +# ------------------------------------------------------------------ status / dates + +# Statuses that mean the resource is an error or did not happen -> drop entirely. +_STATUS_DROP = {"entered-in-error", "cancelled", "not-done", "nullified", "declined"} +# clinicalStatus values that mean the item is no longer present -> negate. +_INACTIVE_CLINICAL = {"resolved", "inactive", "remission"} + + +def _status_code(value: Any) -> str: + if isinstance(value, Mapping): + for coding in value.get("coding") or []: + code = str((coding or {}).get("code") or "").strip().casefold() + if code: + return code + return clean_text(value.get("text")).casefold() + return str(value or "").strip().casefold() + + +def _resource_disposition(resource_type: str, resource: Mapping[str, Any]) -> tuple[str, bool]: + """Return ("drop"|"keep", negated) from FHIR status fields. + + - entered-in-error / cancelled / not-done -> drop (error or did not happen) + - verificationStatus refuted -> keep but negated + - clinicalStatus resolved/inactive on Condition/Allergy -> keep but negated + (medications stay un-negated: a completed/stopped drug is real prior exposure) + """ + status = _status_code(resource.get("status")) + verification = _status_code(resource.get("verificationStatus")) + clinical = _status_code(resource.get("clinicalStatus")) + + if status in _STATUS_DROP or verification == "entered-in-error": + return "drop", False + if verification == "refuted": + return "keep", True + if resource_type in {"Condition", "AllergyIntolerance"} and clinical in _INACTIVE_CLINICAL: + return "keep", True + return "keep", False + + +def _temporality(resource: Mapping[str, Any], keys: tuple[str, ...]) -> str | None: + for key in keys: + value = resource.get(key) + if not value: + continue + if isinstance(value, str): + return clean_text(value) or None + if isinstance(value, Mapping): + if value.get("start") or value.get("end"): + span = f"{value.get('start', '')} to {value.get('end', '')}" + return clean_text(span).strip(" to") or None + if value.get("value") is not None: + return clean_text(f"{value.get('value')} {value.get('unit', '')}") or None + return None + + +def _annotations_text(value: Any) -> str | None: + if isinstance(value, Mapping): + value = [value] + if not isinstance(value, list): + return None + texts = [ + clean_text((note or {}).get("text")) + for note in value + if isinstance(note, Mapping) + ] + joined = "; ".join(text for text in texts if text) + return joined or None + + +# ----------------------------------------------------------------- resource router + + def _add_resource( profile: PatientProfile, resource: Mapping[str, Any], @@ -205,33 +332,43 @@ def _add_resource( resource_type = resource.get("resourceType") if resource_type in {None, "Patient"}: return + + disposition, negated = _resource_disposition(str(resource_type), resource) provenance = base_provenance.model_copy( - update={ - "source_resource": f"{resource_type}/{resource.get('id', 'unknown')}", - } + update={"source_resource": f"{resource_type}/{resource.get('id', 'unknown')}"} ) + if disposition == "drop": + profile.unsupported.append( + { + "resourceType": resource_type, + "id": resource.get("id"), + "reason": "dropped: status indicates error or did-not-happen", + } + ) + return + if resource_type == "Condition": - _add_condition(profile, resource, provenance) + _add_condition(profile, resource, provenance, negated) elif resource_type == "Observation": - _add_observation(profile, resource, provenance) + _add_observation(profile, resource, provenance, negated) elif resource_type in { "MedicationRequest", "MedicationStatement", "MedicationAdministration", }: - _add_medication(profile, resource, provenance) + _add_medication(profile, resource, provenance, negated) elif resource_type == "Procedure": - _add_procedure(profile, resource, provenance) + _add_procedure(profile, resource, provenance, negated) elif resource_type == "DiagnosticReport": _add_diagnostic_report(profile, resource, provenance) elif resource_type == "DocumentReference": _add_document_reference(profile, resource, provenance) elif resource_type == "AllergyIntolerance": - _add_allergy(profile, resource, provenance) + _add_allergy(profile, resource, provenance, negated) elif resource_type == "FamilyMemberHistory": _add_family_history(profile, resource, provenance) elif resource_type in {"MolecularSequence", "GenomicStudy"}: - _add_genomic(profile, resource, provenance) + _add_genomic(profile, resource, provenance, negated) elif resource_type == "Specimen": _add_specimen(profile, resource, provenance) else: @@ -248,20 +385,26 @@ def _add_condition( profile: PatientProfile, resource: Mapping[str, Any], provenance: Provenance, + negated: bool, ) -> None: - code = code_from_fhir_codeable(resource.get("code") or {}) - label = label_from_fhir_codeable(resource.get("code") or {}) + codeable = resource.get("code") or {} + codes = codes_from_fhir_codeable(codeable) + label = label_from_fhir_codeable(codeable) if not label: return profile.conditions.append( make_fact( category="condition", label=label, - original_code=code, + original_code=codes[0] if codes else None, + normalized_codes=codes or None, provenance=provenance, - description=clean_text(resource.get("note")) or None, - temporality=clean_text(resource.get("onsetDateTime")) or None, - negated=_is_negated(resource), + description=_annotations_text(resource.get("note")), + temporality=_temporality( + resource, + ("onsetDateTime", "onsetPeriod", "onsetAge", "onsetString", "recordedDate"), + ), + negated=negated, ) ) @@ -270,21 +413,26 @@ def _add_observation( profile: PatientProfile, resource: Mapping[str, Any], provenance: Provenance, + negated: bool, ) -> None: - code = code_from_fhir_codeable(resource.get("code") or {}) - label = label_from_fhir_codeable(resource.get("code") or {}) + codeable = resource.get("code") or {} + codes = codes_from_fhir_codeable(codeable) + label = label_from_fhir_codeable(codeable) if not label: return - value = _observation_value(resource) category = "genomic_finding" if _is_genomic_observation(resource) else "observation" profile.add_fact( make_fact( category=category, label=label, - original_code=code, + original_code=codes[0] if codes else None, + normalized_codes=codes or None, provenance=provenance, - description=value, - temporality=clean_text(resource.get("effectiveDateTime")) or None, + description=_observation_value(resource), + temporality=_temporality( + resource, ("effectiveDateTime", "effectivePeriod", "effectiveInstant") + ), + negated=negated, ) ) @@ -293,28 +441,24 @@ def _add_medication( profile: PatientProfile, resource: Mapping[str, Any], provenance: Provenance, + negated: bool, ) -> None: - medication = ( - resource.get("medicationCodeableConcept") - or resource.get("medication") - or resource.get("contained") - or {} - ) - code = code_from_fhir_codeable(medication) if isinstance(medication, Mapping) else None - label = ( - label_from_fhir_codeable(medication) - if isinstance(medication, Mapping) - else clean_text(medication) - ) + codes, label = _medication_codes_label(resource) if not label: return profile.medications.append( make_fact( category="medication", label=label, - original_code=code, + original_code=codes[0] if codes else None, + normalized_codes=codes or None, provenance=provenance, - description=clean_text(resource.get("dosageInstruction")) or None, + description=_dosage_text(resource.get("dosageInstruction")), + temporality=_temporality( + resource, + ("authoredOn", "effectiveDateTime", "effectivePeriod"), + ), + negated=negated, ) ) @@ -323,17 +467,23 @@ def _add_procedure( profile: PatientProfile, resource: Mapping[str, Any], provenance: Provenance, + negated: bool, ) -> None: - code = code_from_fhir_codeable(resource.get("code") or {}) - label = label_from_fhir_codeable(resource.get("code") or {}) + codeable = resource.get("code") or {} + codes = codes_from_fhir_codeable(codeable) + label = label_from_fhir_codeable(codeable) if label: profile.procedures.append( make_fact( category="procedure", label=label, - original_code=code, + original_code=codes[0] if codes else None, + normalized_codes=codes or None, provenance=provenance, - temporality=clean_text(resource.get("performedDateTime")) or None, + temporality=_temporality( + resource, ("performedDateTime", "performedPeriod", "performedString") + ), + negated=negated, ) ) @@ -343,16 +493,16 @@ def _add_diagnostic_report( resource: Mapping[str, Any], provenance: Provenance, ) -> None: - code = code_from_fhir_codeable(resource.get("code") or {}) - label = label_from_fhir_codeable(resource.get("code") or {}) or clean_text( - resource.get("conclusion") - ) + codeable = resource.get("code") or {} + codes = codes_from_fhir_codeable(codeable) + label = label_from_fhir_codeable(codeable) or clean_text(resource.get("conclusion")) if label: profile.diagnostic_reports.append( make_fact( category="diagnostic_report", label=label, - original_code=code, + original_code=codes[0] if codes else None, + normalized_codes=codes or None, provenance=provenance, description=clean_text(resource.get("conclusion")) or None, ) @@ -379,17 +529,21 @@ def _add_allergy( profile: PatientProfile, resource: Mapping[str, Any], provenance: Provenance, + negated: bool, ) -> None: - code = code_from_fhir_codeable(resource.get("code") or {}) - label = label_from_fhir_codeable(resource.get("code") or {}) + codeable = resource.get("code") or {} + codes = codes_from_fhir_codeable(codeable) + label = label_from_fhir_codeable(codeable) if label: profile.conditions.append( make_fact( category="condition", label=f"Allergy: {label}", - original_code=code, + original_code=codes[0] if codes else None, + normalized_codes=codes or None, provenance=provenance, - extra={"clinical_status": resource.get("clinicalStatus")}, + negated=negated, + extra={"clinical_status": _status_code(resource.get("clinicalStatus")) or None}, ) ) @@ -415,7 +569,7 @@ def _add_family_history( category="family_history", label=label, provenance=provenance, - extra={"relationship": relationship, "conditions": conditions}, + extra={"relationship": relationship}, ) ) @@ -424,14 +578,19 @@ def _add_genomic( profile: PatientProfile, resource: Mapping[str, Any], provenance: Provenance, + negated: bool = False, ) -> None: - label = clean_text(resource.get("id") or resource.get("type") or "Genomic finding") + label = ( + label_from_fhir_codeable(resource.get("type") or {}) + or clean_text(resource.get("id")) + or "Genomic finding" + ) profile.genomic_findings.append( make_fact( category="genomic_finding", label=label, provenance=provenance, - extra=dict(resource), + negated=negated, ) ) @@ -450,35 +609,151 @@ def _add_specimen( category="diagnostic_report", label=f"Specimen: {label}", provenance=provenance, - extra=dict(resource), ) ) +# ------------------------------------------------------------------- value helpers + + +def _medication_codes_label(resource: Mapping[str, Any]): + """Resolve a medication's codes + label across R4/R5 shapes and references.""" + codeable = resource.get("medicationCodeableConcept") + if not isinstance(codeable, Mapping): + medication = resource.get("medication") + if isinstance(medication, Mapping): + # R5 wraps as medication.concept; otherwise treat as the concept itself. + concept = medication.get("concept") + codeable = concept if isinstance(concept, Mapping) else medication + if isinstance(codeable, Mapping) and (codeable.get("coding") or codeable.get("text")): + label = label_from_fhir_codeable(codeable) + if label: + return codes_from_fhir_codeable(codeable), label + + # medicationReference (R4) / medication.reference (R5), incl. contained Medication. + reference = resource.get("medicationReference") + if not isinstance(reference, Mapping) and isinstance(resource.get("medication"), Mapping): + reference = resource["medication"].get("reference") + if isinstance(reference, Mapping): + contained = _resolve_contained(resource, reference.get("reference")) + if contained is not None: + contained_code = contained.get("code") or {} + label = label_from_fhir_codeable(contained_code) or clean_text( + reference.get("display") + ) + if label: + return codes_from_fhir_codeable(contained_code), label + display = clean_text(reference.get("display")) + if display: + return [], display + return [], None + + +def _resolve_contained(resource: Mapping[str, Any], reference: Any) -> Mapping[str, Any] | None: + if not isinstance(reference, str) or not reference.startswith("#"): + return None + target = reference[1:] + for item in resource.get("contained") or []: + if isinstance(item, Mapping) and str(item.get("id")) == target: + return item + return None + + +def _dosage_text(value: Any) -> str | None: + if isinstance(value, Mapping): + value = [value] + if not isinstance(value, list): + return None + texts = [ + clean_text((dosage or {}).get("text")) + for dosage in value + if isinstance(dosage, Mapping) + ] + joined = "; ".join(text for text in texts if text) + return joined or None + + def _observation_value(resource: Mapping[str, Any]) -> str | None: - if resource.get("valueQuantity"): - value = resource["valueQuantity"] - return clean_text( - f"{value.get('value', '')} {value.get('unit') or value.get('code') or ''}" - ) - if resource.get("valueCodeableConcept"): - return label_from_fhir_codeable(resource.get("valueCodeableConcept") or {}) - for key in ("valueString", "valueBoolean", "valueInteger", "valueDateTime"): - if key in resource: - return clean_text(resource.get(key)) + parts: list[str] = [] + main = _value_x(resource) + if main: + parts.append(main) + interpretation = _interpretation_text(resource.get("interpretation")) + if interpretation: + parts.append(f"[{interpretation}]") + for component in resource.get("component") or []: + if not isinstance(component, Mapping): + continue + component_label = label_from_fhir_codeable(component.get("code") or {}) + component_value = _value_x(component) + if component_label and component_value: + parts.append(f"{component_label}: {component_value}") + elif component_label: + parts.append(component_label) + elif component_value: + parts.append(component_value) + return clean_text(" ".join(parts)) or None + + +def _value_x(node: Mapping[str, Any]) -> str | None: + quantity = node.get("valueQuantity") + if isinstance(quantity, Mapping): + comparator = clean_text(quantity.get("comparator")) + unit = clean_text(quantity.get("unit") or quantity.get("code")) + value = quantity.get("value") + if value is not None or comparator: + number = f"{comparator}{value if value is not None else ''}".strip() + return clean_text(f"{number} {unit}") or None + concept = node.get("valueCodeableConcept") + if isinstance(concept, Mapping): + return label_from_fhir_codeable(concept) or None + value_range = node.get("valueRange") + if isinstance(value_range, Mapping): + low = (value_range.get("low") or {}).get("value") + high = (value_range.get("high") or {}).get("value") + span = f"{'' if low is None else low}-{'' if high is None else high}" + return clean_text(span).strip("-") or None + ratio = node.get("valueRatio") + if isinstance(ratio, Mapping): + numerator = (ratio.get("numerator") or {}).get("value") + denominator = (ratio.get("denominator") or {}).get("value") + return clean_text(f"{numerator}/{denominator}") or None + for key in ("valueString", "valueBoolean", "valueInteger", "valueDateTime", "valueTime"): + if key in node: + return clean_text(node.get(key)) or None return None -def _is_negated(resource: Mapping[str, Any]) -> bool: - verification = resource.get("verificationStatus") or {} - text = label_from_fhir_codeable(verification).casefold() - return "refuted" in text or "entered-in-error" in text +def _interpretation_text(value: Any) -> str | None: + if isinstance(value, Mapping): + value = [value] + if not isinstance(value, list): + return None + labels = [ + label_from_fhir_codeable(item) for item in value if isinstance(item, Mapping) + ] + joined = ", ".join(label for label in labels if label) + return joined or None + + +_GENOMIC_HINTS = ( + "genetic", + "genomic", + "variant", + "mutation", + "sequence variant", + "molecular", +) def _is_genomic_observation(resource: Mapping[str, Any]) -> bool: - categories = resource.get("category") or [] - text = clean_text(categories).casefold() - return "genetic" in text or "genomic" in text + haystack = " ".join( + [ + clean_text(resource.get("category")).casefold(), + label_from_fhir_codeable(resource.get("code") or {}).casefold(), + ] + ) + return any(hint in haystack for hint in _GENOMIC_HINTS) def _document_url(resource: Mapping[str, Any]) -> str | None: diff --git a/src/trialmatchai/interop/utils.py b/src/trialmatchai/interop/utils.py index ab4d67a7..130d6858 100644 --- a/src/trialmatchai/interop/utils.py +++ b/src/trialmatchai/interop/utils.py @@ -54,10 +54,32 @@ def normalize_gender(value: Any) -> str | None: def parse_date(value: Any) -> date | None: if not value: return None + text = str(value).strip() + # Full date / datetime (FHIR dateTime, with or without timezone). try: - return datetime.fromisoformat(str(value).replace("Z", "+00:00")).date() + return datetime.fromisoformat(text.replace("Z", "+00:00")).date() except ValueError: - return None + pass + # Partial FHIR dates are legal: YYYY or YYYY-MM (default to Jan / day 1). + match = re.fullmatch(r"(\d{4})(?:-(\d{2}))?(?:-(\d{2}))?", text) + if match: + try: + return date( + int(match.group(1)), + int(match.group(2) or 1), + int(match.group(3) or 1), + ) + except ValueError: + return None + # Datetime string fromisoformat couldn't parse (e.g. older Python tz forms): + # fall back to the leading YYYY-MM-DD if present. + prefix = re.match(r"(\d{4}-\d{2}-\d{2})", text) + if prefix: + try: + return date.fromisoformat(prefix.group(1)) + except ValueError: + return None + return None def age_years_from_birth_date(birth_date: date | None) -> float | None: @@ -104,33 +126,56 @@ def code_from_ontology_class(value: Mapping[str, Any] | None) -> NormalizedCode ) -def code_from_fhir_codeable(value: Mapping[str, Any] | None) -> NormalizedCode | None: - if not value: - return None +def codes_from_fhir_codeable(value: Mapping[str, Any] | None) -> list[NormalizedCode]: + """Extract all codings from a FHIR CodeableConcept, known vocabularies first. + + Real EHRs emit several codings per concept (e.g. a proprietary code plus + SNOMED/LOINC/RxNorm). We keep them all and order recognized vocabularies + first so concept linking uses the standard code rather than a local one. + """ + if not isinstance(value, Mapping) or not value: + return [] text = clean_text(value.get("text")) - codings = value.get("coding") or [] - if isinstance(codings, list) and codings: - coding = codings[0] or {} - system = str(coding.get("system") or "") - vocabulary = FHIR_SYSTEM_TO_VOCABULARY.get(system, system.rsplit("/", 1)[-1]) + codings = value.get("coding") + ranked: list[tuple[int, NormalizedCode]] = [] + for coding in codings if isinstance(codings, list) else []: + if not isinstance(coding, Mapping): + continue code = str(coding.get("code") or "").strip() + if not code: + continue + system = str(coding.get("system") or "") + known = system in FHIR_SYSTEM_TO_VOCABULARY + vocabulary = FHIR_SYSTEM_TO_VOCABULARY.get(system) or ( + system.rsplit("/", 1)[-1] if system else "FHIR" + ) label = clean_text(coding.get("display")) or text or None - if code: - return NormalizedCode( - vocabulary=vocabulary or "FHIR", - code=code, - label=label, - system=system or None, - mapping_status="exact", + ranked.append( + ( + 0 if known else 1, + NormalizedCode( + vocabulary=vocabulary or "FHIR", + code=code, + label=label, + system=system or None, + mapping_status="exact", + ), ) - if text: - return NormalizedCode( - vocabulary="FHIR", - code=text, - label=text, - mapping_status="unmapped", ) - return None + ranked.sort(key=lambda item: item[0]) # stable: known vocabularies first + codes = [code for _, code in ranked] + if not codes and text: + codes = [ + NormalizedCode( + vocabulary="FHIR", code=text, label=text, mapping_status="unmapped" + ) + ] + return codes + + +def code_from_fhir_codeable(value: Mapping[str, Any] | None) -> NormalizedCode | None: + codes = codes_from_fhir_codeable(value) + return codes[0] if codes else None def label_from_fhir_codeable(value: Mapping[str, Any] | None) -> str: diff --git a/tests/test_fhir_robustness.py b/tests/test_fhir_robustness.py new file mode 100644 index 00000000..00eb149d --- /dev/null +++ b/tests/test_fhir_robustness.py @@ -0,0 +1,211 @@ +"""Regression tests for the hardened FHIR importer (real-EHR edge cases).""" + +from __future__ import annotations + +import json + +from trialmatchai.interop.importers.fhir import ( + _medication_codes_label, + _resource_disposition, + _value_x, + import_fhir, +) +from trialmatchai.interop.utils import ( + code_from_fhir_codeable, + codes_from_fhir_codeable, + parse_date, +) + + +# --------------------------------------------------------------------- unit level + + +def test_status_disposition(): + cases = [ + ("Condition", {"clinicalStatus": {"coding": [{"code": "resolved"}]}}, ("keep", True)), + ("Condition", {"clinicalStatus": {"coding": [{"code": "inactive"}]}}, ("keep", True)), + ("Condition", {"verificationStatus": {"coding": [{"code": "refuted"}]}}, ("keep", True)), + ("Condition", {"verificationStatus": {"coding": [{"code": "entered-in-error"}]}}, ("drop", False)), + ("Observation", {"status": "entered-in-error"}, ("drop", False)), + ("Procedure", {"status": "not-done"}, ("drop", False)), + # Completed/stopped medications are real prior exposure -> kept, not negated. + ("MedicationStatement", {"status": "completed"}, ("keep", False)), + ("MedicationStatement", {"status": "stopped"}, ("keep", False)), + ("Condition", {"clinicalStatus": {"coding": [{"code": "active"}]}}, ("keep", False)), + ] + for rtype, resource, expected in cases: + assert _resource_disposition(rtype, resource) == expected, (rtype, resource) + + +def test_partial_fhir_dates(): + assert parse_date("1980") is not None and parse_date("1980").year == 1980 + assert parse_date("1980-03").month == 3 + assert parse_date("1980-03-15").day == 15 + assert parse_date("1980-03-15T09:00:00Z").year == 1980 + assert parse_date("garbage") is None + + +def test_multi_coding_prefers_known_vocabulary_and_keeps_all(): + cc = { + "coding": [ + {"system": "urn:oid:1.2.840.114350", "code": "EPIC1"}, + {"system": "http://snomed.info/sct", "code": "254637007", "display": "NSCLC"}, + ] + } + best = code_from_fhir_codeable(cc) + assert best.vocabulary == "SNOMED" and best.code == "254637007" + all_codes = codes_from_fhir_codeable(cc) + assert {c.vocabulary for c in all_codes} == {"SNOMED", "urn:oid:1.2.840.114350"} + + +def test_value_x_variants_and_comparator(): + assert _value_x({"valueQuantity": {"value": 9.5, "unit": "g/dL"}}) == "9.5 g/dL" + assert _value_x({"valueQuantity": {"comparator": "<", "value": 0.01, "unit": "ng/mL"}}) == "<0.01 ng/mL" + assert _value_x({"valueString": "positive"}) == "positive" + assert _value_x({"valueCodeableConcept": {"text": "detected"}}) == "detected" + assert _value_x({"valueRange": {"low": {"value": 1}, "high": {"value": 5}}}) == "1-5" + + +def test_medication_reference_and_contained(): + # medicationReference with display only + codes, label = _medication_codes_label( + {"medicationReference": {"reference": "Medication/123", "display": "osimertinib"}} + ) + assert label == "osimertinib" + + # contained Medication resolved by #ref + codes, label = _medication_codes_label( + { + "medicationReference": {"reference": "#med1"}, + "contained": [ + { + "resourceType": "Medication", + "id": "med1", + "code": {"coding": [{"system": "http://www.nlm.nih.gov/research/umls/rxnorm", "code": "1", "display": "pembrolizumab"}]}, + } + ], + } + ) + assert label == "pembrolizumab" + assert codes and codes[0].vocabulary == "RxNorm" + + +# -------------------------------------------------------------------- integration + + +def _import_bundle(tmp_path, entries): + path = tmp_path / "bundle.json" + path.write_text( + json.dumps( + { + "resourceType": "Bundle", + "entry": [{"resource": r} for r in entries], + } + ) + ) + return import_fhir(path, input_format="fhir") + + +def test_resolved_condition_is_negated_and_error_is_dropped(tmp_path): + profiles = _import_bundle( + tmp_path, + [ + {"resourceType": "Patient", "id": "p1", "birthDate": "1975"}, + { + "resourceType": "Condition", + "id": "c-active", + "subject": {"reference": "Patient/p1"}, + "clinicalStatus": {"coding": [{"code": "active"}]}, + "code": {"text": "lung cancer"}, + }, + { + "resourceType": "Condition", + "id": "c-resolved", + "subject": {"reference": "Patient/p1"}, + "clinicalStatus": {"coding": [{"code": "resolved"}]}, + "verificationStatus": {"coding": [{"code": "confirmed"}]}, + "code": {"text": "pneumonia"}, + }, + { + "resourceType": "Condition", + "id": "c-error", + "subject": {"reference": "Patient/p1"}, + "verificationStatus": {"coding": [{"code": "entered-in-error"}]}, + "code": {"text": "typo diagnosis"}, + }, + ], + ) + profile = profiles[0] + # Partial birthDate populated age. + assert profile.demographics.age_years is not None + by_label = {c.label: c for c in profile.conditions} + assert by_label["lung cancer"].negated is False + assert by_label["pneumonia"].negated is True # resolved -> not currently present + assert "typo diagnosis" not in by_label # entered-in-error dropped + assert any(u.get("id") == "c-error" for u in profile.unsupported) + + +def test_observation_component_and_interpretation_captured(tmp_path): + profiles = _import_bundle( + tmp_path, + [ + {"resourceType": "Patient", "id": "p1"}, + { + "resourceType": "Observation", + "id": "bp", + "subject": {"reference": "Patient/p1"}, + "status": "final", + "code": {"text": "Blood pressure"}, + "interpretation": [{"coding": [{"code": "H", "display": "High"}]}], + "component": [ + {"code": {"text": "Systolic"}, "valueQuantity": {"value": 160, "unit": "mmHg"}}, + {"code": {"text": "Diastolic"}, "valueQuantity": {"value": 95, "unit": "mmHg"}}, + ], + }, + ], + ) + obs = profiles[0].observations[0] + assert "Systolic: 160 mmHg" in obs.description + assert "Diastolic: 95 mmHg" in obs.description + assert "High" in obs.description + + +def test_ndjson_skips_malformed_lines(tmp_path): + path = tmp_path / "export.ndjson" + path.write_text( + "\n".join( + [ + json.dumps({"resourceType": "Patient", "id": "p1"}), + "{ this is not valid json", + json.dumps( + { + "resourceType": "Condition", + "subject": {"reference": "Patient/p1"}, + "code": {"text": "diabetes"}, + } + ), + ] + ) + ) + profiles = import_fhir(path, input_format="fhir-ndjson") + assert len(profiles) == 1 + assert any(c.label == "diabetes" for c in profiles[0].conditions) + + +def test_reference_resolution_urn_uuid_and_absolute_url(tmp_path): + path = tmp_path / "bundle.json" + path.write_text( + json.dumps( + { + "resourceType": "Bundle", + "entry": [ + {"fullUrl": "urn:uuid:abc-123", "resource": {"resourceType": "Patient", "id": "p1"}}, + {"resource": {"resourceType": "Condition", "subject": {"reference": "urn:uuid:abc-123"}, "code": {"text": "asthma"}}}, + {"resource": {"resourceType": "Condition", "subject": {"reference": "http://ehr.example.org/fhir/Patient/p1"}, "code": {"text": "eczema"}}}, + ], + } + ) + ) + profile = import_fhir(path, input_format="fhir")[0] + labels = {c.label for c in profile.conditions} + assert {"asthma", "eczema"} <= labels # both reference styles resolved From 2cc6d29c9dc435e6f7a23f1f7e37b4441f0ac927 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Tue, 23 Jun 2026 18:00:58 +0200 Subject: [PATCH 34/64] feat: Transformers CPU backend, finetuning improvements, and reasoning-model eligibility fixes - Add CPU-capable Transformers reranker (TransformersReranker) and eligibility processor (BatchTrialProcessorTransformers) so the pipeline runs without vLLM - Add no_think config option (rag.no_think) to disable blocks on reasoning models like Qwen3; passes enable_thinking=False to apply_chat_template and falls back to /no_think prefix for plain-prompt paths - Strip ... blocks from model output before JSON extraction so eligibility responses from thinking models are parsed correctly - Separate reranker_model_path from base_model so a lightweight model can handle second-level reranking while a larger model handles RAG eligibility reasoning - Add hf/hashing backends to EmbedderSettings, RagSettings.enabled/backend, LLMRerankerSettings.enabled, and ConceptLinkerSettings to settings schema - Finetuning: multi-GPU support, LoRA config improvements, data pipeline hardening, NER and reranker trainer updates, extended CLI flags - Registry preparation: hardened FHIR/OMOP importer, improved field normalisation - LanceDB backend: expose candidate_limit, add FTS fallback path - Preflight: extended checks for concept index, embedding model, and registry - Update default entity model to fastino/gliner2-base-v1 across config and settings - Add tests for embedding, deployment readiness, finetuning, LanceDB backend, patient runtime loading, preflight, and registry updater Co-Authored-By: Claude Sonnet 4.6 --- .env.example | 2 +- README.md | 6 +- docs/finetuning.md | 46 ++++- src/trialmatchai/config/config.json | 2 +- src/trialmatchai/config/settings.py | 8 +- src/trialmatchai/entities/recognizers.py | 37 +++- src/trialmatchai/finetuning/_sft.py | 139 ++++++++++--- src/trialmatchai/finetuning/cli.py | 64 +++++- src/trialmatchai/finetuning/config.py | 39 ++-- src/trialmatchai/finetuning/cot.py | 14 +- src/trialmatchai/finetuning/data.py | 135 +++++++++---- src/trialmatchai/finetuning/ner.py | 100 ++++++--- src/trialmatchai/finetuning/reranker.py | 17 +- src/trialmatchai/main.py | 189 +++++++++++++----- src/trialmatchai/matching/eligibility_base.py | 50 ++++- .../eligibility_reasoning_transformers.py | 123 ++++++++++++ src/trialmatchai/models/embedding/__init__.py | 3 +- .../models/embedding/text_embedder.py | 51 +++++ .../models/llm/transformers_reranker.py | 101 ++++++++++ src/trialmatchai/registry/preparation.py | 54 +++-- src/trialmatchai/search/lancedb_backend.py | 14 ++ src/trialmatchai/services/preflight.py | 88 +++++--- tests/test_deployment_readiness.py | 49 +++++ tests/test_embedding.py | 22 ++ tests/test_entities.py | 38 +++- tests/test_finetuning.py | 134 ++++++++++++- tests/test_lancedb_search_backend.py | 69 +++++++ tests/test_patient_runtime_loading.py | 55 +++++ tests/test_preflight_and_indexer.py | 28 +++ tests/test_registry_updater.py | 38 ++++ 30 files changed, 1474 insertions(+), 241 deletions(-) create mode 100644 src/trialmatchai/matching/eligibility_reasoning_transformers.py create mode 100644 src/trialmatchai/models/llm/transformers_reranker.py create mode 100644 tests/test_embedding.py diff --git a/.env.example b/.env.example index fc19d6ce..d10d303e 100644 --- a/.env.example +++ b/.env.example @@ -31,7 +31,7 @@ TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false TRIALMATCHAI_COT_BACKEND=vllm TRIALMATCHAI_ENTITY_BACKEND=gliner2 -TRIALMATCHAI_ENTITY_MODEL_NAME=fastino/gliner2-base +TRIALMATCHAI_ENTITY_MODEL_NAME=fastino/gliner2-base-v1 TRIALMATCHAI_ENTITY_SCHEMA_PATH=entity_schemas/trialmatchai.yaml TRIALMATCHAI_ENTITY_TRUST_REMOTE_CODE=false TRIALMATCHAI_CONCEPT_DB_PATH=data/concepts diff --git a/README.md b/README.md index c8ed97fe..703f713b 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ pip install -e ".[finetune]" | Extra | Adds | | --- | --- | -| `entity` | GLiNER2 biomedical NER | +| `entity` | GLiNER2 biomedical extraction | | `llm` | local embedding and LLM dependencies | | `gpu` | vLLM and bitsandbytes; intended for Linux CUDA hosts | | `finetune` | training dependencies for `trialmatchai-finetune` | @@ -148,7 +148,7 @@ Patient data (text / FHIR / Phenopacket / OMOP) Interop importers -> canonical PatientProfile | v -GLiNER2 NER + deterministic variant patterns -> concept linking +GLiNER2 entity extraction + deterministic variant patterns -> concept linking | v First-level trial retrieval in LanceDB (BM25 + embeddings) @@ -265,7 +265,7 @@ adapters through config or environment variables. | Component | Default | Config key | | --- | --- | --- | -| Biomedical NER | `fastino/gliner2-base` | `entity_extraction.model_name` | +| Biomedical extraction | `fastino/gliner2-base-v1` | `entity_extraction.model_name` | | Reranker | `google/gemma-2-2b-it` | `model.reranker_adapter_path` | | CoT eligibility | configured CoT model | `model.cot_adapter_path` | diff --git a/docs/finetuning.md b/docs/finetuning.md index 7d04d6ea..3c58b5bf 100644 --- a/docs/finetuning.md +++ b/docs/finetuning.md @@ -7,7 +7,7 @@ checkpoints/adapters via config, and train those adapters with the built-in | Component | Default | Config key | Fine-tune target | |-----------|---------|------------|------------------| -| Biomedical NER | `fastino/gliner2-base` | `entity_extraction.model_name` | GLiNER2 checkpoint | +| Biomedical extraction | `fastino/gliner2-base-v1` | `entity_extraction.model_name` | GLiNER2 checkpoint | | Reranker | `google/gemma-2-2b-it` | `model.reranker_adapter_path` | LoRA adapter | | CoT eligibility | configured CoT model | `model.cot_adapter_path` | LoRA adapter | @@ -22,8 +22,9 @@ uv sync --extra finetune Already have a checkpoint or adapter? Just point the config at it — no code changes needed. -- **NER:** set `entity_extraction.model_name` to your GLiNER2 checkpoint (local - path or Hub id), backend `gliner2`. LoRA NER adapters load via `GLiNER2.load_adapter`. +- **GLiNER2 extraction:** set `entity_extraction.model_name` to your GLiNER2 + checkpoint (local path or Hub id), backend `gliner2`. LoRA adapters load via + `GLiNER2.load_adapter`. - **Reranker:** set `model.reranker_adapter_path` to your LoRA adapter directory. - **CoT:** set `model.cot_adapter_path` to your LoRA adapter directory. @@ -58,12 +59,18 @@ Data — JSONL, one example per line, either chat or instruct form: trialmatchai-finetune cot \ --base-model microsoft/phi-4 \ --train-data data/finetune/cot.jsonl \ + --eval-data data/finetune/cot.eval.jsonl \ --output-dir models/cot-adapter \ --epochs 2 --lora-rank 32 --lora-alpha 64 ``` Then set `model.cot_adapter_path: models/cot-adapter`. +By default, LoRA targets all linear layers (`--target-modules all-linear`), +which works across common Gemma/Llama/Phi-style architectures. Use +`--target-modules auto` to let PEFT choose its built-in mapping, or pass a +comma-separated suffix list such as `q_proj,v_proj`. + ### Reranker (LoRA, Yes/No) The reranker decides whether the patient text contains enough information to @@ -80,24 +87,40 @@ Data — JSONL: trialmatchai-finetune reranker \ --base-model google/gemma-2-2b-it \ --train-data data/finetune/reranker.jsonl \ + --eval-data data/finetune/reranker.eval.jsonl \ --output-dir models/reranker-adapter ``` Then set `model.reranker_adapter_path: models/reranker-adapter`. -### NER (GLiNER2) +### GLiNER2 Schema Extraction -Uses the native GLiNER2 training stack (`GLiNER2Trainer`). GLiNER2 NER data maps -entity-type labels to **surface forms**. Three input shapes are accepted: +Uses the native GLiNER2 training stack (`GLiNER2Trainer`). The CLI subcommand is +still named `ner` for compatibility, but the training data can now include flat +entities, schema-based JSON structures, classifications, relations, or a mix. +Flat entity data maps entity-type labels to **surface forms**: ```json {"text": "EGFR exon 19 deletion in NSCLC", "entities": {"gene": ["EGFR"], "disease": ["NSCLC"]}} {"text": "EGFR positive", "ner": [[0, 4, "gene"]]} {"input": "EGFR positive", "output": {"entities": {"gene": ["EGFR"]}}} +{"text": "No reportable biomarker", "schema": {"entities": {"gene": []}}} +``` + +Structured JSON examples use GLiNER2's native `json_structures` and optional +`json_descriptions` keys: + +```json +{"text": "Patient has EGFR exon 19 deletion and stage IV NSCLC.", "schema": {"entities": {"gene": ["EGFR"]}, "json_structures": [{"biomarker": {"gene": "EGFR", "variant": "exon 19 deletion", "disease_stage": "stage IV"}}], "json_descriptions": {"biomarker": {"gene": "Gene symbol", "variant": "Observed alteration", "disease_stage": "Disease stage"}}}} +{"input": "Erlotinib targets EGFR.", "output": {"relations": [{"targets": {"head": "Erlotinib", "tail": "EGFR"}}]}} +{"text": "Trial requires ECOG 0-1.", "structures": {"eligibility": {"performance_status": "ECOG 0-1"}}} ``` `entity_descriptions` are back-filled from your entity schema (`--schema-path`) -so the fine-tuned model shares the runtime label semantics. +for flat entity labels, so entity examples share the runtime label semantics. +TrialMatchAI's current runtime annotator consumes the flat `entities` output; +structured JSON training data is useful for GLiNER2 adapters you call directly +or for future structured extraction integration. ```bash trialmatchai-finetune ner \ @@ -118,8 +141,11 @@ trialmatchai-finetune ner \ - Training prompts reuse the **exact runtime prompts**, so a fine-tuned model sees the same format at train and inference time. - LoRA SFT masks the prompt tokens and computes loss only on the completion. -- 4-bit quantized loading is on by default (`--no-4bit` to disable); `bf16` is - default (`--fp16` to switch). See `trialmatchai-finetune --help` - for all flags. +- `--eval-data` is optional for LoRA SFT. When supplied, evaluation loss is used + for best-checkpoint tracking; `--save-steps` must be a multiple of + `--eval-steps` (defaults align at 500). +- 4-bit quantized loading is on by default (`--no-4bit` to disable) and requires + bitsandbytes on a CUDA-capable machine; `bf16` is default (`--fp16` to switch). + See `trialmatchai-finetune --help` for all flags. - GLiNER2's training API can vary by version; if your installed `gliner2` exposes a different interface, adapt `src/trialmatchai/finetuning/ner.py`. diff --git a/src/trialmatchai/config/config.json b/src/trialmatchai/config/config.json index dcdbc051..8e102601 100644 --- a/src/trialmatchai/config/config.json +++ b/src/trialmatchai/config/config.json @@ -1,7 +1,7 @@ { "entity_extraction": { "backend": "gliner2", - "model_name": "fastino/gliner2-base", + "model_name": "fastino/gliner2-base-v1", "model_revision": null, "schema_path": "entity_schemas/trialmatchai.yaml", "threshold": 0.8, diff --git a/src/trialmatchai/config/settings.py b/src/trialmatchai/config/settings.py index fac0fd56..92ac56cc 100644 --- a/src/trialmatchai/config/settings.py +++ b/src/trialmatchai/config/settings.py @@ -7,7 +7,7 @@ class EntityExtractionSettings(BaseModel): backend: Literal["gliner2", "regex", "disabled"] = "gliner2" - model_name: str = "fastino/gliner2-base" + model_name: str = "fastino/gliner2-base-v1" model_revision: str | None = None schema_path: str = "entity_schemas/trialmatchai.yaml" threshold: float = Field(0.8, ge=0.0, le=1.0) @@ -100,6 +100,7 @@ class RegistrySettings(BaseModel): class EmbedderSettings(BaseModel): + backend: Literal["hf", "hashing"] = "hf" model_name: str = "BAAI/bge-m3" revision: str | None = None trust_remote_code: bool = False @@ -109,6 +110,7 @@ class EmbedderSettings(BaseModel): use_gpu: bool = True use_fp16: bool = False normalize: bool = True + hashing_dimensions: int = Field(64, ge=1) @field_validator("pooling") @classmethod @@ -167,6 +169,8 @@ class ConstraintSettings(BaseModel): class RagSettings(BaseModel): + enabled: bool = True + backend: Literal["vllm", "transformers"] = "vllm" batch_size: int = Field(4, ge=1) max_trials_rag: int = Field(20, ge=1) @@ -188,6 +192,8 @@ class CotSettings(BaseModel): class LLMRerankerSettings(BaseModel): + enabled: bool = True + backend: Literal["vllm", "transformers"] = "vllm" batch_size: int = Field(20, ge=1) diff --git a/src/trialmatchai/entities/recognizers.py b/src/trialmatchai/entities/recognizers.py index abce12bd..60501b87 100644 --- a/src/trialmatchai/entities/recognizers.py +++ b/src/trialmatchai/entities/recognizers.py @@ -199,7 +199,7 @@ def build_recognizer(config: dict[str, Any]) -> EntityRecognizer: return RegexSchemaRecognizer() if backend == "gliner2": recognizer = GLiNER2Recognizer( - model_name=config.get("model_name", "fastino/gliner2-base"), + model_name=config.get("model_name", "fastino/gliner2-base-v1"), revision=config.get("model_revision"), device=config.get("device", "auto"), trust_remote_code=bool(config.get("trust_remote_code", False)), @@ -252,6 +252,17 @@ def _call_extractor( schema.label: schema.description for schema in schemas } + try: + return _flatten_gliner2_entities( + model.extract_entities( + text, + schema_payload, + include_confidence=True, + include_spans=True, + ) + ) + except TypeError: + pass for kwargs in ( {"schema": schema_payload}, {"labels": labels}, @@ -267,12 +278,12 @@ def _call_extractor( def _parse_model_entities( - raw_entities: Sequence[dict[str, Any]], + raw_entities: Sequence[dict[str, Any]] | dict[str, Any], text: str, label_map: dict[str, EntitySchema], ) -> list[EntityAnnotation]: parsed: list[EntityAnnotation] = [] - for raw in raw_entities or []: + for raw in _flatten_gliner2_entities(raw_entities): label = str(raw.get("label") or raw.get("entity_group") or raw.get("type") or "") schema = label_map.get(label.casefold()) if schema is None: @@ -302,6 +313,26 @@ def _parse_model_entities( return parsed +def _flatten_gliner2_entities(raw_entities: Any) -> list[dict[str, Any]]: + if not isinstance(raw_entities, dict): + return list(raw_entities or []) + entities = raw_entities.get("entities") + if not isinstance(entities, dict): + return [] + flattened: list[dict[str, Any]] = [] + for label, values in entities.items(): + if not isinstance(values, list): + continue + for value in values: + if isinstance(value, dict): + item = dict(value) + else: + item = {"text": str(value)} + item.setdefault("label", label) + flattened.append(item) + return flattened + + def _find_span(text: str, mention: str) -> tuple[int | None, int | None]: if not mention: return None, None diff --git a/src/trialmatchai/finetuning/_sft.py b/src/trialmatchai/finetuning/_sft.py index 96c607c3..12973778 100644 --- a/src/trialmatchai/finetuning/_sft.py +++ b/src/trialmatchai/finetuning/_sft.py @@ -7,7 +7,8 @@ from __future__ import annotations -from typing import Dict, List +import importlib.util +from typing import Dict, List, Optional from trialmatchai.finetuning.config import FinetuneConfig from trialmatchai.utils.logging_config import setup_logging @@ -63,26 +64,84 @@ def _build_tokenizer(deps, config: FinetuneConfig): return tokenizer +def _validate_4bit_runtime(deps) -> None: + torch = deps["torch"] + if importlib.util.find_spec("bitsandbytes") is None: + raise RuntimeError( + "4-bit QLoRA requires bitsandbytes. Install the finetune extra on a " + "CUDA-capable Linux/Windows environment, or pass --no-4bit." + ) + if not torch.cuda.is_available(): + raise RuntimeError( + "4-bit QLoRA through bitsandbytes requires CUDA. Pass --no-4bit " + "for full/bfloat16 training on this machine." + ) + + +def _validate_messages(messages: List[Dict[str, str]]) -> None: + if len(messages) < 2: + raise ValueError("Each SFT row must contain at least one prompt and one answer.") + if messages[-1].get("role") != "assistant": + raise ValueError("Each SFT row must end with an assistant message.") + for index, message in enumerate(messages): + if message.get("role") not in {"system", "user", "assistant", "tool"}: + raise ValueError(f"Unsupported chat role at message {index}: {message!r}") + if "content" not in message: + raise ValueError(f"Missing chat content at message {index}: {message!r}") + + def _encode_example( tokenizer, messages: List[Dict[str, str]], max_seq_length: int ) -> Dict[str, list]: """Tokenize a chat example, masking the prompt so only the completion trains.""" - full = tokenizer.apply_chat_template( - messages, tokenize=False, add_generation_prompt=False + if max_seq_length <= 0: + raise ValueError("max_seq_length must be positive.") + _validate_messages(messages) + if getattr(tokenizer, "chat_template", None) is None: + raise ValueError( + "The base model tokenizer does not define a chat template. Use a chat " + "or instruction-tuned model, or add a tokenizer chat_template before training." + ) + + full_ids = tokenizer.apply_chat_template( + messages, tokenize=True, add_generation_prompt=False ) - prompt = tokenizer.apply_chat_template( - messages[:-1], tokenize=False, add_generation_prompt=True + prompt_ids = tokenizer.apply_chat_template( + messages[:-1], tokenize=True, add_generation_prompt=True ) - full_ids = tokenizer(full, truncation=True, max_length=max_seq_length)["input_ids"] - prompt_ids = tokenizer( - prompt, truncation=True, max_length=max_seq_length - )["input_ids"] - prompt_len = min(len(prompt_ids), len(full_ids)) + if full_ids[: len(prompt_ids)] != prompt_ids: + raise ValueError( + "Tokenizer chat template did not produce a prompt prefix for the full " + "conversation; refusing to risk training on prompt tokens." + ) + + prompt_len = len(prompt_ids) labels = [-100] * prompt_len + full_ids[prompt_len:] + if len(full_ids) > max_seq_length: + full_ids = full_ids[-max_seq_length:] + labels = labels[-max_seq_length:] + if all(label == -100 for label in labels): + raise ValueError( + "Encoded example has no trainable assistant tokens. Increase " + "max_seq_length or shorten the prompt." + ) return {"input_ids": full_ids, "attention_mask": [1] * len(full_ids), "labels": labels} -def run_sft(config: FinetuneConfig, message_lists: List[List[Dict[str, str]]]) -> str: +def _encode_dataset(deps, tokenizer, message_lists, max_seq_length): + encoded = [ + _encode_example(tokenizer, messages, max_seq_length) for messages in message_lists + ] + if not encoded: + raise ValueError("No examples provided.") + return deps["Dataset"].from_list(encoded), len(encoded) + + +def run_sft( + config: FinetuneConfig, + message_lists: List[List[Dict[str, str]]], + eval_message_lists: Optional[List[List[Dict[str, str]]]] = None, +) -> str: """Run LoRA SFT over a list of chat-message examples; returns the adapter dir.""" if not message_lists: raise ValueError("No training examples provided.") @@ -94,6 +153,7 @@ def run_sft(config: FinetuneConfig, message_lists: List[List[Dict[str, str]]]) - compute_dtype = torch.bfloat16 if config.bf16 else torch.float16 quant_config = None if config.load_in_4bit: + _validate_4bit_runtime(deps) quant_config = deps["BitsAndBytesConfig"]( load_in_4bit=True, bnb_4bit_use_double_quant=True, @@ -101,12 +161,17 @@ def run_sft(config: FinetuneConfig, message_lists: List[List[Dict[str, str]]]) - bnb_4bit_compute_dtype=compute_dtype, ) + model_kwargs = { + "torch_dtype": compute_dtype, + "quantization_config": quant_config, + "trust_remote_code": config.trust_remote_code, + "token": config.hf_token, + } + if config.load_in_4bit and config.device_map: + model_kwargs["device_map"] = config.device_map + model = deps["AutoModelForCausalLM"].from_pretrained( - config.base_model, - torch_dtype=compute_dtype, - quantization_config=quant_config, - trust_remote_code=config.trust_remote_code, - token=config.hf_token, + config.base_model, **model_kwargs ) model.config.use_cache = False # required with gradient checkpointing @@ -117,22 +182,28 @@ def run_sft(config: FinetuneConfig, message_lists: List[List[Dict[str, str]]]) - model, use_gradient_checkpointing=True ) - peft_config = deps["LoraConfig"]( - task_type=deps["TaskType"].CAUSAL_LM, - inference_mode=False, - r=config.lora_rank, - lora_alpha=config.lora_alpha, - lora_dropout=config.lora_dropout, - target_modules=config.target_modules, - ) + peft_kwargs = { + "task_type": deps["TaskType"].CAUSAL_LM, + "inference_mode": False, + "r": config.lora_rank, + "lora_alpha": config.lora_alpha, + "lora_dropout": config.lora_dropout, + } + if config.target_modules is not None: + peft_kwargs["target_modules"] = config.target_modules + peft_config = deps["LoraConfig"](**peft_kwargs) model = deps["get_peft_model"](model, peft_config) model.print_trainable_parameters() - encoded = [ - _encode_example(tokenizer, messages, config.max_seq_length) - for messages in message_lists - ] - dataset = deps["Dataset"].from_list(encoded) + dataset, train_count = _encode_dataset( + deps, tokenizer, message_lists, config.max_seq_length + ) + eval_dataset = None + eval_count = 0 + if eval_message_lists is not None: + eval_dataset, eval_count = _encode_dataset( + deps, tokenizer, eval_message_lists, config.max_seq_length + ) collator = deps["DataCollatorForSeq2Seq"]( tokenizer, padding=True, label_pad_token_id=-100 @@ -141,10 +212,18 @@ def run_sft(config: FinetuneConfig, message_lists: List[List[Dict[str, str]]]) - model=model, args=config.to_training_arguments(), train_dataset=dataset, + eval_dataset=eval_dataset, data_collator=collator, ) - logger.info("Starting LoRA SFT on %d examples...", len(encoded)) + if eval_dataset is None: + logger.info("Starting LoRA SFT on %d examples...", train_count) + else: + logger.info( + "Starting LoRA SFT on %d examples with %d eval examples...", + train_count, + eval_count, + ) trainer.train() model.save_pretrained(config.output_dir) tokenizer.save_pretrained(config.output_dir) diff --git a/src/trialmatchai/finetuning/cli.py b/src/trialmatchai/finetuning/cli.py index 31914b9b..55bacac0 100644 --- a/src/trialmatchai/finetuning/cli.py +++ b/src/trialmatchai/finetuning/cli.py @@ -1,11 +1,11 @@ -"""``trialmatchai-finetune`` — train custom NER / reranker / CoT models. +"""``trialmatchai-finetune`` — train custom GLiNER2 / reranker / CoT models. Examples: trialmatchai-finetune cot --base-model microsoft/phi-4 \ --train-data data/cot.jsonl --output-dir models/cot-adapter trialmatchai-finetune reranker --base-model google/gemma-2-2b-it \ --train-data data/reranker.jsonl --output-dir models/reranker-adapter - trialmatchai-finetune ner --base-model fastino/gliner2-base \ + trialmatchai-finetune ner --base-model fastino/gliner2-base-v1 \ --train-data data/ner.jsonl --output-dir models/ner Plug the result back into config: entity_extraction.model_name (NER), @@ -21,6 +21,26 @@ from trialmatchai.finetuning.config import FinetuneConfig +def _parse_target_modules(value: Optional[str]): + if value is None: + return "all-linear" + value = value.strip() + if value.lower() in {"auto", "none"}: + return None + if "," in value: + return [part.strip() for part in value.split(",") if part.strip()] + return value + + +def _parse_device_map(value: Optional[str]) -> Optional[str]: + if value is None: + return None + value = value.strip() + if value.lower() in {"", "none", "off", "false"}: + return None + return value + + def _add_common_lora_args(parser: argparse.ArgumentParser) -> None: parser.add_argument("--base-model", required=True) parser.add_argument("--train-data", required=True) @@ -31,12 +51,29 @@ def _add_common_lora_args(parser: argparse.ArgumentParser) -> None: parser.add_argument("--batch-size", type=int, default=2) parser.add_argument("--grad-accum", type=int, default=16) parser.add_argument("--max-seq-length", type=int, default=2048) + parser.add_argument("--logging-steps", type=int, default=10) + parser.add_argument("--save-steps", type=int, default=500) + parser.add_argument("--eval-steps", type=int, default=None) + parser.add_argument("--save-total-limit", type=int, default=3) parser.add_argument("--lora-rank", type=int, default=32) parser.add_argument("--lora-alpha", type=int, default=64) parser.add_argument("--lora-dropout", type=float, default=0.1) + parser.add_argument( + "--target-modules", + default="all-linear", + help=( + "LoRA target modules: 'all-linear' (default), 'auto' for PEFT's " + "model mapping, or a comma-separated suffix list." + ), + ) parser.add_argument("--max-examples", type=int, default=None) parser.add_argument("--no-4bit", action="store_true", help="Disable 4-bit loading") parser.add_argument("--fp16", action="store_true", help="Use fp16 instead of bf16") + parser.add_argument( + "--device-map", + default="auto", + help="Device map for 4-bit model loading; use 'none' to disable.", + ) parser.add_argument("--trust-remote-code", action="store_true") parser.add_argument("--hf-token", default=None) @@ -52,12 +89,18 @@ def _lora_config_from_args(args: argparse.Namespace) -> FinetuneConfig: per_device_batch_size=args.batch_size, gradient_accumulation_steps=args.grad_accum, max_seq_length=args.max_seq_length, + logging_steps=args.logging_steps, + save_steps=args.save_steps, + eval_steps=args.eval_steps, + save_total_limit=args.save_total_limit, lora_rank=args.lora_rank, lora_alpha=args.lora_alpha, lora_dropout=args.lora_dropout, + target_modules=_parse_target_modules(args.target_modules), max_examples=args.max_examples, load_in_4bit=not args.no_4bit, bf16=not args.fp16, + device_map=_parse_device_map(args.device_map), trust_remote_code=args.trust_remote_code, hf_token=args.hf_token, ) @@ -66,7 +109,7 @@ def _lora_config_from_args(args: argparse.Namespace) -> FinetuneConfig: def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser( prog="trialmatchai-finetune", - description="Fine-tune TrialMatchAI's NER, reranker, or CoT models.", + description="Fine-tune TrialMatchAI's GLiNER2, reranker, or CoT models.", ) sub = parser.add_subparsers(dest="component", required=True) @@ -84,17 +127,25 @@ def build_parser() -> argparse.ArgumentParser: merge.add_argument("--output-dir", required=True) merge.add_argument("--trust-remote-code", action="store_true") - ner = sub.add_parser("ner", help="Fine-tune the GLiNER2 NER model") + ner = sub.add_parser( + "ner", + help="Fine-tune the GLiNER2 schema extraction model (entities/JSON/relations)", + ) ner.add_argument("--base-model", default="fastino/gliner2-base-v1") ner.add_argument("--train-data", required=True) ner.add_argument("--output-dir", required=True) ner.add_argument("--eval-data", default=None) ner.add_argument("--epochs", type=float, default=10.0) ner.add_argument("--batch-size", type=int, default=8) + ner.add_argument("--grad-accum", type=int, default=1) ner.add_argument("--encoder-lr", type=float, default=1e-5) ner.add_argument("--task-lr", type=float, default=5e-4) ner.add_argument("--lora-r", type=int, default=8) ner.add_argument("--lora-alpha", type=float, default=16.0) + ner.add_argument("--lora-dropout", type=float, default=0.0) + ner.add_argument("--eval-steps", type=int, default=500) + ner.add_argument("--logging-steps", type=int, default=50) + ner.add_argument("--save-total-limit", type=int, default=3) ner.add_argument("--no-lora", action="store_true", help="Full fine-tune instead of LoRA") ner.add_argument("--fp32", action="store_true", help="Disable fp16 mixed precision") ner.add_argument("--schema-path", default=None, help="Entity schema for label descriptions") @@ -133,11 +184,16 @@ def main(argv: Optional[Sequence[str]] = None) -> int: eval_data=args.eval_data, epochs=args.epochs, batch_size=args.batch_size, + gradient_accumulation_steps=args.grad_accum, encoder_lr=args.encoder_lr, task_lr=args.task_lr, use_lora=not args.no_lora, lora_r=args.lora_r, lora_alpha=args.lora_alpha, + lora_dropout=args.lora_dropout, + eval_steps=args.eval_steps, + logging_steps=args.logging_steps, + save_total_limit=args.save_total_limit, fp16=not args.fp32, schema_path=args.schema_path, max_examples=args.max_examples, diff --git a/src/trialmatchai/finetuning/config.py b/src/trialmatchai/finetuning/config.py index f0bd784f..5c4f9887 100644 --- a/src/trialmatchai/finetuning/config.py +++ b/src/trialmatchai/finetuning/config.py @@ -2,8 +2,8 @@ from __future__ import annotations -from dataclasses import dataclass, field -from typing import List, Optional +from dataclasses import dataclass +from typing import List, Optional, Union @dataclass @@ -32,17 +32,7 @@ class FinetuneConfig: lora_rank: int = 32 lora_alpha: int = 64 lora_dropout: float = 0.1 - target_modules: List[str] = field( - default_factory=lambda: [ - "q_proj", - "k_proj", - "v_proj", - "o_proj", - "gate_proj", - "up_proj", - "down_proj", - ] - ) + target_modules: Optional[Union[List[str], str]] = "all-linear" # Runtime load_in_4bit: bool = True @@ -50,23 +40,36 @@ class FinetuneConfig: trust_remote_code: bool = False logging_steps: int = 10 save_steps: int = 500 + eval_steps: Optional[int] = None save_total_limit: int = 3 max_examples: Optional[int] = None hf_token: Optional[str] = None + device_map: Optional[str] = "auto" def to_training_arguments(self): """Build transformers.TrainingArguments (imported lazily).""" from transformers import TrainingArguments - return TrainingArguments( + has_eval = self.eval_data is not None + eval_steps = self.eval_steps or self.save_steps + if has_eval and self.save_steps % eval_steps != 0: + raise ValueError( + "save_steps must be a multiple of eval_steps when eval_data is set " + "because load_best_model_at_end requires aligned save/eval steps." + ) + + kwargs = dict( output_dir=self.output_dir, num_train_epochs=self.epochs, learning_rate=self.learning_rate, per_device_train_batch_size=self.per_device_batch_size, + per_device_eval_batch_size=self.per_device_batch_size, gradient_accumulation_steps=self.gradient_accumulation_steps, warmup_ratio=self.warmup_ratio, weight_decay=self.weight_decay, logging_steps=self.logging_steps, + eval_strategy="steps" if has_eval else "no", + save_strategy="steps", save_steps=self.save_steps, save_total_limit=self.save_total_limit, bf16=self.bf16, @@ -81,3 +84,11 @@ def to_training_arguments(self): optim="paged_adamw_8bit" if self.load_in_4bit else "adamw_torch", lr_scheduler_type="cosine", ) + if has_eval: + kwargs.update( + eval_steps=eval_steps, + load_best_model_at_end=True, + metric_for_best_model="eval_loss", + greater_is_better=False, + ) + return TrainingArguments(**kwargs) diff --git a/src/trialmatchai/finetuning/cot.py b/src/trialmatchai/finetuning/cot.py index 3d3b30ac..a4da1b2c 100644 --- a/src/trialmatchai/finetuning/cot.py +++ b/src/trialmatchai/finetuning/cot.py @@ -11,7 +11,15 @@ from trialmatchai.finetuning.data import cot_row_to_messages, read_jsonl +def _load_messages(path: str, max_examples: int | None): + return [cot_row_to_messages(row) for row in read_jsonl(path, max_examples)] + + def finetune_cot(config: FinetuneConfig) -> str: - rows = read_jsonl(config.train_data, config.max_examples) - message_lists = [cot_row_to_messages(row) for row in rows] - return run_sft(config, message_lists) + message_lists = _load_messages(config.train_data, config.max_examples) + eval_message_lists = ( + _load_messages(config.eval_data, config.max_examples) + if config.eval_data is not None + else None + ) + return run_sft(config, message_lists, eval_message_lists) diff --git a/src/trialmatchai/finetuning/data.py b/src/trialmatchai/finetuning/data.py index c01689da..95a4a13e 100644 --- a/src/trialmatchai/finetuning/data.py +++ b/src/trialmatchai/finetuning/data.py @@ -7,9 +7,10 @@ - CoT: {"messages": [{"role","content"}, ...]} or {"instruction": str, "input": str, "output": str} - Reranker: {"patient_text": str, "criterion": str, "label": "Yes"|"No"} -- NER (GLiNER2): {"text": str, "entities": {"label": ["surface form", ...]}} +- GLiNER2: {"text": str, "entities": {"label": ["surface form", ...]}} or char-span {"text": str, "ner": [[start_char, end_char, "label"], ...]} - or native {"input": str, "output": {"entities": {...}, "entity_descriptions": {...}}} + or native {"input": str, "output": {"entities": {...}, "json_structures": [...]}} + or native {"text": str, "schema": {"json_structures": [...]}} """ from __future__ import annotations @@ -19,13 +20,21 @@ def read_jsonl(path: str, max_examples: Optional[int] = None) -> List[Dict[str, Any]]: + if max_examples is not None and max_examples <= 0: + return [] rows: List[Dict[str, Any]] = [] with open(path, "r", encoding="utf-8") as handle: - for line in handle: + for line_no, line in enumerate(handle, start=1): line = line.strip() if not line: continue - rows.append(json.loads(line)) + try: + row = json.loads(line) + except json.JSONDecodeError as exc: + raise ValueError(f"Invalid JSON in {path}:{line_no}: {exc.msg}") from exc + if not isinstance(row, dict): + raise ValueError(f"Expected JSON object in {path}:{line_no}.") + rows.append(row) if max_examples is not None and len(rows) >= max_examples: break return rows @@ -37,7 +46,10 @@ def read_jsonl(path: str, max_examples: Optional[int] = None) -> List[Dict[str, def cot_row_to_messages(row: Dict[str, Any]) -> List[Dict[str, str]]: """Normalize a CoT training row to a chat-message list.""" if "messages" in row: - return list(row["messages"]) + return [ + {"role": str(message["role"]), "content": str(message["content"])} + for message in row["messages"] + ] instruction = (row.get("instruction") or "").strip() user = (row.get("input") or row.get("question") or "").strip() output = row.get("output") or row.get("answer") or "" @@ -65,46 +77,101 @@ def reranker_row_to_messages(row: Dict[str, Any]) -> tuple[List[Dict[str, str]], return messages, label -# --------------------------------------------------------------------------- NER +# ----------------------------------------------------------------------- GLiNER2 -def ner_row_to_entities(row: Dict[str, Any]) -> Dict[str, Any]: - """Normalize an NER row to GLiNER2's surface-form schema. +def _entity_mapping(value: Any) -> Dict[str, List[str]]: + entities: Dict[str, List[str]] = {} + for label, surfaces in dict(value or {}).items(): + if surfaces is None: + entities[str(label)] = [] + elif isinstance(surfaces, str): + entities[str(label)] = [surfaces] + else: + entities[str(label)] = [str(surface) for surface in surfaces] + return entities - Returns ``{"text", "entities": {label: [surface forms]}, "entity_descriptions"}``. - Accepts the native GLiNER2 form, a simple ``entities`` mapping, or character - spans (which are sliced from the text into surface forms). + +def _copy_if_present(source: Dict[str, Any], target: Dict[str, Any], key: str) -> None: + if key in source and source[key] is not None: + target[key] = source[key] + + +def _json_structures(value: Any) -> Any: + if isinstance(value, dict): + return [{name: fields} for name, fields in value.items()] + return value + + +def gliner2_row_to_training_record(row: Dict[str, Any]) -> Dict[str, Any]: + """Normalize supported GLiNER2 row shapes to ``{"input", "output"}``. + + The output schema is intentionally close to GLiNER2's native format so + schema-based extraction tasks (JSON structures, classifications, relations) + pass through to ``InputExample.from_dict`` without being flattened. """ - # Native GLiNER2 JSONL: {"input": ..., "output": {"entities": ..., ...}} if "input" in row and "output" in row: - output = row.get("output") or {} - return { - "text": str(row["input"]), - "entities": dict(output.get("entities") or {}), - "entity_descriptions": output.get("entity_descriptions"), - } - - text = str(row.get("text", "")) - - # Already a {label: [forms]} mapping. - if isinstance(row.get("entities"), dict): - return { - "text": text, - "entities": {k: list(v) for k, v in row["entities"].items()}, - "entity_descriptions": row.get("entity_descriptions"), - } - - # Character spans -> surface forms grouped by label. + text = str(row["input"]) + source = dict(row.get("output") or {}) + else: + text = str(row.get("text", "")) + source = dict(row.get("schema") or {}) + for key in ( + "entities", + "entity_descriptions", + "classifications", + "json_structures", + "structures", + "json_descriptions", + "relations", + ): + _copy_if_present(row, source, key) + + output: Dict[str, Any] = {} + if "entities" in source: + output["entities"] = _entity_mapping(source.get("entities")) + if "ner" in row and "entities" not in output: + output["entities"] = _entities_from_spans(text, row.get("ner") or []) + _copy_if_present(source, output, "entity_descriptions") + _copy_if_present(source, output, "classifications") + if "json_structures" in source: + output["json_structures"] = _json_structures(source["json_structures"]) + elif "structures" in source: + output["json_structures"] = _json_structures(source["structures"]) + _copy_if_present(source, output, "json_descriptions") + _copy_if_present(source, output, "relations") + return {"input": text, "output": output} + + +def _entities_from_spans(text: str, spans: Any) -> Dict[str, List[str]]: entities: Dict[str, List[str]] = {} - for span in row.get("ner") or []: + for span in spans: + if not isinstance(span, (list, tuple)): + continue + if len(span) < 3: + continue start_char, end_char, label = span[0], span[1], span[2] + if not isinstance(start_char, int) or not isinstance(end_char, int): + continue surface = text[start_char:end_char].strip() if surface: + label = str(label) entities.setdefault(label, []) if surface not in entities[label]: entities[label].append(surface) + return entities + + +def ner_row_to_entities(row: Dict[str, Any]) -> Dict[str, Any]: + """Normalize an NER row to GLiNER2's surface-form schema. + + Returns ``{"text", "entities": {label: [surface forms]}, "entity_descriptions"}``. + Accepts the native GLiNER2 form, a simple ``entities`` mapping, or character + spans (which are sliced from the text into surface forms). + """ + record = gliner2_row_to_training_record(row) return { - "text": text, - "entities": entities, - "entity_descriptions": row.get("entity_descriptions"), + "text": record["input"], + "entities": record["output"].get("entities", {}), + "entity_descriptions": record["output"].get("entity_descriptions"), } diff --git a/src/trialmatchai/finetuning/ner.py b/src/trialmatchai/finetuning/ner.py index 6285ff4c..1f2322cd 100644 --- a/src/trialmatchai/finetuning/ner.py +++ b/src/trialmatchai/finetuning/ner.py @@ -5,11 +5,10 @@ LoRA adapter (``/final``) that plugs into the pipeline via ``entity_extraction.model_name`` with backend "gliner2". -GLiNER2 NER data maps entity-type labels to surface forms, e.g. -``{"text": "...", "entities": {"gene": ["EGFR"], "disease": ["NSCLC"]}}``. -Character-span rows (``{"text", "ner": [[start, end, "label"]]}``) are converted -automatically. ``entity_descriptions`` is back-filled from the entity schema so -the fine-tuned model uses the same label semantics as inference. +GLiNER2 data can be flat entity extraction, schema-based JSON structures, +classifications, relations, or a mix of those tasks. Character-span NER rows +are converted automatically. ``entity_descriptions`` is back-filled from the +entity schema so flat entity examples use the same label semantics as inference. """ from __future__ import annotations @@ -17,7 +16,7 @@ from dataclasses import dataclass from typing import Dict, Optional -from trialmatchai.finetuning.data import ner_row_to_entities, read_jsonl +from trialmatchai.finetuning.data import gliner2_row_to_training_record, read_jsonl from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -31,13 +30,18 @@ class NERFinetuneConfig: eval_data: Optional[str] = None epochs: float = 10.0 batch_size: int = 8 + gradient_accumulation_steps: int = 1 encoder_lr: float = 1e-5 task_lr: float = 5e-4 warmup_ratio: float = 0.1 use_lora: bool = True lora_r: int = 8 lora_alpha: float = 16.0 + lora_dropout: float = 0.0 fp16: bool = True + eval_steps: int = 500 + logging_steps: int = 50 + save_total_limit: int = 3 max_examples: Optional[int] = None schema_path: Optional[str] = None seed: int = 42 @@ -59,26 +63,53 @@ def _schema_descriptions(schema_path: Optional[str]) -> Dict[str, str]: return descriptions +def _backfill_entity_descriptions( + record: Dict[str, object], descriptions: Dict[str, str] +) -> Dict[str, object]: + output = dict(record.get("output") or {}) + entities = output.get("entities") or {} + if not isinstance(entities, dict): + return record + descs = dict(output.get("entity_descriptions") or {}) + for label in entities: + if label not in descs and label in descriptions: + descs[label] = descriptions[label] + if descs: + output["entity_descriptions"] = descs + record = dict(record) + record["output"] = output + return record + + +def _sanitize_example(example) -> bool: + if not hasattr(example, "sanitize"): + return True + warnings, is_valid = example.sanitize() + for warning in warnings: + logger.warning("Sanitized GLiNER2 training example: %s", warning) + return is_valid + + +def _validate_dataset(dataset) -> None: + try: + dataset.validate(raise_on_error=False) + except TypeError: # pragma: no cover - older GLiNER2 compatibility + dataset.validate(strict=False, raise_on_error=False) + + def _build_examples(config: "NERFinetuneConfig", path: str, descriptions: Dict[str, str]): from gliner2.training.data import InputExample examples = [] for row in read_jsonl(path, config.max_examples): - normalized = ner_row_to_entities(row) - entities = normalized["entities"] - if not entities: + record = gliner2_row_to_training_record(row) + record["input"] = str(record["input"]).strip() + if not record["input"]: continue - descs = dict(normalized.get("entity_descriptions") or {}) - for label in entities: - if label not in descs and label in descriptions: - descs[label] = descriptions[label] - examples.append( - InputExample( - text=normalized["text"], - entities=entities, - entity_descriptions=descs or None, - ) - ) + record = _backfill_entity_descriptions(record, descriptions) + example = InputExample.from_dict(record) + if _sanitize_example(example): + examples.append(example) return examples @@ -99,36 +130,47 @@ def finetune_ner(config: NERFinetuneConfig) -> str: raise ValueError("No training examples provided.") train_dataset = TrainingDataset(train_examples) - train_dataset.validate(strict=False, raise_on_error=False) + _validate_dataset(train_dataset) train_dataset.print_stats() if config.eval_data: train_data: object = train_dataset - val_data: object = TrainingDataset( - _build_examples(config, config.eval_data, descriptions) - ) - else: + eval_examples = _build_examples(config, config.eval_data, descriptions) + if not eval_examples: + raise ValueError("No evaluation examples provided.") + val_data: object | None = TrainingDataset(eval_examples) + elif len(train_examples) >= 10: train_data, val_data, _ = train_dataset.split( train_ratio=0.9, val_ratio=0.1, test_ratio=0.0, shuffle=True, seed=config.seed ) + else: + train_data = train_dataset + val_data = None + + has_eval = val_data is not None training_config = TrainingConfig( output_dir=config.output_dir, experiment_name="trialmatchai_ner", num_epochs=config.epochs, batch_size=config.batch_size, + gradient_accumulation_steps=config.gradient_accumulation_steps, encoder_lr=config.encoder_lr, task_lr=config.task_lr, warmup_ratio=config.warmup_ratio, scheduler_type="cosine", fp16=config.fp16, - eval_strategy="epoch", - save_best=True, - early_stopping=True, + eval_strategy="epoch" if has_eval else "no", + eval_steps=config.eval_steps, + save_total_limit=config.save_total_limit, + save_best=has_eval, + early_stopping=has_eval, early_stopping_patience=3, + logging_steps=config.logging_steps, use_lora=config.use_lora, lora_r=config.lora_r, lora_alpha=config.lora_alpha, + lora_dropout=config.lora_dropout, lora_target_modules=["encoder"], save_adapter_only=config.use_lora, ) @@ -140,7 +182,7 @@ def finetune_ner(config: NERFinetuneConfig) -> str: result_dir = ( f"{config.output_dir.rstrip('/')}/final" - if config.use_lora + if config.use_lora or not has_eval else f"{config.output_dir.rstrip('/')}/best" ) logger.info( diff --git a/src/trialmatchai/finetuning/reranker.py b/src/trialmatchai/finetuning/reranker.py index 558914ca..9062e3dc 100644 --- a/src/trialmatchai/finetuning/reranker.py +++ b/src/trialmatchai/finetuning/reranker.py @@ -12,10 +12,19 @@ from trialmatchai.finetuning.data import read_jsonl, reranker_row_to_messages -def finetune_reranker(config: FinetuneConfig) -> str: - rows = read_jsonl(config.train_data, config.max_examples) +def _load_messages(path: str, max_examples: int | None): message_lists = [] - for row in rows: + for row in read_jsonl(path, max_examples): messages, label = reranker_row_to_messages(row) message_lists.append([*messages, {"role": "assistant", "content": label}]) - return run_sft(config, message_lists) + return message_lists + + +def finetune_reranker(config: FinetuneConfig) -> str: + message_lists = _load_messages(config.train_data, config.max_examples) + eval_message_lists = ( + _load_messages(config.eval_data, config.max_examples) + if config.eval_data is not None + else None + ) + return run_sft(config, message_lists, eval_message_lists) diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index 306d8461..bbee0214 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -1,5 +1,6 @@ from __future__ import annotations +from contextlib import nullcontext from pathlib import Path from typing import TYPE_CHECKING, Dict, List, Optional, Tuple @@ -253,28 +254,52 @@ def run_rag_processing( logger.error("No patient narrative available for RAG processing.") return - # vLLM is the only LLM backend. A configured cot_adapter_path is served as a - # LoRA adapter (LoRARequest) by the engine loader. - from trialmatchai.matching.eligibility_reasoning_vllm import BatchTrialProcessorVLLM - from trialmatchai.models.llm.vllm_loader import load_vllm_engine + rag_cfg = config.get("rag", {}) + rag_backend = str(rag_cfg.get("backend", "vllm")) + if rag_backend == "transformers": + from trialmatchai.matching.eligibility_reasoning_transformers import ( + BatchTrialProcessorTransformers, + ) - vllm_cfg = config.get("vllm", {}) - vllm_engine, vllm_tokenizer, lora_request = load_vllm_engine( - model_config=config.get("model", {}), - vllm_cfg=vllm_cfg, - ) - rag_processor = BatchTrialProcessorVLLM( - llm=vllm_engine, # type: ignore - tokenizer=vllm_tokenizer, - batch_size=vllm_cfg.get("batch_size", 16), - use_cot=config.get("use_cot_reasoning", True), - max_new_tokens=vllm_cfg.get("max_new_tokens", 5000), - temperature=vllm_cfg.get("temperature", 0.0), - top_p=vllm_cfg.get("top_p", 1.0), - seed=vllm_cfg.get("seed", 1234), - length_bucket=vllm_cfg.get("length_bucket", True), - lora_request=lora_request, - ) + vllm_cfg = config.get("vllm", {}) + rag_processor = BatchTrialProcessorTransformers( + model_path=config["model"]["base_model"], + device=str(config.get("global", {}).get("device", "cpu")), + batch_size=rag_cfg.get("batch_size", 1), + use_cot=config.get("use_cot_reasoning", False), + max_new_tokens=vllm_cfg.get("max_new_tokens", 256), + temperature=vllm_cfg.get("temperature", 0.0), + top_p=vllm_cfg.get("top_p", 1.0), + revision=config["model"].get("base_model_revision"), + trust_remote_code=config["model"].get("trust_remote_code", False), + length_bucket=vllm_cfg.get("length_bucket", True), + no_think=rag_cfg.get("no_think", False), + ) + elif rag_backend == "vllm": + from trialmatchai.matching.eligibility_reasoning_vllm import ( + BatchTrialProcessorVLLM, + ) + from trialmatchai.models.llm.vllm_loader import load_vllm_engine + + vllm_cfg = config.get("vllm", {}) + vllm_engine, vllm_tokenizer, lora_request = load_vllm_engine( + model_config=config.get("model", {}), + vllm_cfg=vllm_cfg, + ) + rag_processor = BatchTrialProcessorVLLM( + llm=vllm_engine, # type: ignore + tokenizer=vllm_tokenizer, + batch_size=vllm_cfg.get("batch_size", 16), + use_cot=config.get("use_cot_reasoning", True), + max_new_tokens=vllm_cfg.get("max_new_tokens", 5000), + temperature=vllm_cfg.get("temperature", 0.0), + top_p=vllm_cfg.get("top_p", 1.0), + seed=vllm_cfg.get("seed", 1234), + length_bucket=vllm_cfg.get("length_bucket", True), + lora_request=lora_request, + ) + else: + raise ValueError(f"Unsupported rag.backend: {rag_backend}") rag_processor.process_trials( nct_ids=top_trials, @@ -319,24 +344,18 @@ def main_pipeline(config_path: str | None = None) -> int: try: import torch except ImportError: - logger.error( - "PyTorch is required to run matching. Install the ML extras with " - "`uv sync --extra llm --extra entity`." - ) - return 1 + torch = None # type: ignore from trialmatchai.models.embedding import build_embedder - from trialmatchai.models.llm.llm_reranker import LLMReranker - - if torch.cuda.is_available(): + if torch is not None and torch.cuda.is_available(): torch.backends.cudnn.benchmark = True if hasattr(torch.backends.cuda, "enable_flash_sdp"): torch.backends.cuda.enable_flash_sdp(True) import warnings - # The CoT reasoning model is loaded lazily by run_rag_processing as a vLLM - # engine (the only LLM backend), so nothing to load here. + # The eligibility reasoning model is loaded lazily by run_rag_processing + # after the top-trial shortlist is known. # Initialize components embedder = build_embedder(config) @@ -346,14 +365,36 @@ def main_pipeline(config_path: str | None = None) -> int: warnings.filterwarnings( "ignore", message=".*quantization_config.*", category=UserWarning ) - llm_reranker = LLMReranker( - model_path=config["model"]["reranker_model_path"], - adapter_path=config["model"]["reranker_adapter_path"], - device=config["global"]["device"], - batch_size=config["rag"]["batch_size"] * 2, - revision=config["model"].get("reranker_model_revision"), - trust_remote_code=config["model"].get("trust_remote_code", False), - ) + if _reranker_enabled(config): + if _reranker_backend(config) == "transformers": + from trialmatchai.models.llm.transformers_reranker import ( + TransformersReranker, + ) + + llm_reranker = TransformersReranker( + model_path=config["model"]["reranker_model_path"], + device=str(config["global"]["device"]), + batch_size=config.get("LLM_reranker", {}).get("batch_size", 8), + revision=config["model"].get("reranker_model_revision"), + trust_remote_code=config["model"].get("trust_remote_code", False), + ) + elif _reranker_backend(config) == "vllm": + from trialmatchai.models.llm.llm_reranker import LLMReranker + + llm_reranker = LLMReranker( + model_path=config["model"]["reranker_model_path"], + adapter_path=config["model"]["reranker_adapter_path"], + device=config["global"]["device"], + batch_size=config["rag"]["batch_size"] * 2, + revision=config["model"].get("reranker_model_revision"), + trust_remote_code=config["model"].get("trust_remote_code", False), + ) + else: + raise ValueError( + f"Unsupported LLM_reranker.backend: {_reranker_backend(config)}" + ) + else: + llm_reranker = None gemma_retriever = SecondStageRetriever( search_backend=search_backend, @@ -363,6 +404,9 @@ def main_pipeline(config_path: str | None = None) -> int: search_mode=config["search"].get("mode", "hybrid"), ) + completed_patients = 0 + failed_patients = 0 + for profile, summary in patient_inputs: patient_id = profile.patient_id token = set_request_id(patient_id) @@ -382,7 +426,7 @@ def main_pipeline(config_path: str | None = None) -> int: # Run pipeline with log_timing(logger, "First-level search"): - with torch.no_grad(): + with _inference_context(torch): result = run_first_level_search( keywords, str(output_folder), @@ -406,8 +450,8 @@ def main_pipeline(config_path: str | None = None) -> int: ) = result with log_timing(logger, "Second-level search"): - with torch.no_grad(): - _, top_trials_path = run_second_level_search( + with _inference_context(torch): + semi_final_trials, top_trials_path = run_second_level_search( str(output_folder), nct_ids, main_conditions, @@ -419,29 +463,46 @@ def main_pipeline(config_path: str | None = None) -> int: patient_context, ) - with log_timing(logger, "RAG processing"): - with torch.no_grad(): - run_rag_processing( - str(output_folder), - top_trials_path, - patient_info, - config, + if _rag_enabled(config): + with log_timing(logger, "RAG processing"): + with _inference_context(torch): + run_rag_processing( + str(output_folder), + top_trials_path, + patient_info, + config, + ) + + with log_timing(logger, "Final ranking"): + trial_data = load_trial_data(str(output_folder)) + ranked_trials = rank_trials(trial_data) + save_ranked_trials( + ranked_trials, str(output_folder / "ranked_trials.json") ) - - with log_timing(logger, "Final ranking"): - trial_data = load_trial_data(str(output_folder)) - ranked_trials = rank_trials(trial_data) + else: + logger.info("RAG processing disabled; ranking by retrieval scores.") save_ranked_trials( - ranked_trials, str(output_folder / "ranked_trials.json") + [ + {"TrialID": trial_id, "Score": score} + for trial_id, score in semi_final_trials + ], + str(output_folder / "ranked_trials.json"), ) logger.info("Pipeline completed for patient %s", patient_id) + completed_patients += 1 except Exception: logger.exception("Pipeline failed for patient %s", patient_id) + failed_patients += 1 continue finally: reset_request_id(token) + if completed_patients == 0: + logger.error("Pipeline failed for all %s patient(s).", len(patient_inputs)) + return 1 + if failed_patients: + logger.warning("Pipeline completed with %s patient failure(s).", failed_patients) return 0 @@ -505,5 +566,25 @@ def _dedupe_strings(values: list[str]) -> list[str]: return output +def _reranker_enabled(config: Dict) -> bool: + return bool(config.get("LLM_reranker", {}).get("enabled", True)) + + +def _reranker_backend(config: Dict) -> str: + return str(config.get("LLM_reranker", {}).get("backend", "vllm")) + + +def _rag_enabled(config: Dict) -> bool: + if not bool(config.get("use_cot_reasoning", True)): + return False + return bool(config.get("rag", {}).get("enabled", True)) + + +def _inference_context(torch_module): + if torch_module is None: + return nullcontext() + return torch_module.no_grad() + + if __name__ == "__main__": raise SystemExit(main_pipeline()) diff --git a/src/trialmatchai/matching/eligibility_base.py b/src/trialmatchai/matching/eligibility_base.py index 8ce60072..eb2aa00b 100644 --- a/src/trialmatchai/matching/eligibility_base.py +++ b/src/trialmatchai/matching/eligibility_base.py @@ -9,6 +9,7 @@ import json import os +import re from typing import Dict, List from trialmatchai.utils.file_utils import read_json_file, write_json_file, write_text_file @@ -24,6 +25,7 @@ class BaseTrialProcessor: tokenizer = None batch_size: int = 4 use_cot: bool = True + no_think: bool = False # ---------------------- I/O helpers ---------------------- @@ -45,6 +47,8 @@ def _format_prompt(self, criteria_text: str, patient_profile: str) -> str: else "No eligibility criteria provided." ) + no_think_prefix = "/no_think\n" if self.no_think else "" + if self.use_cot: system_msg = ( "You are a medical expert with advanced knowledge in clinical reasoning, diagnostics, and treatment planning. " @@ -55,7 +59,8 @@ def _format_prompt(self, criteria_text: str, patient_profile: str) -> str: { "role": "user", "content": ( - "Assess the given patient's eligibility for a clinical trial by evaluating each and every criterion individually.\n\n" + no_think_prefix + + "Assess the given patient's eligibility for a clinical trial by evaluating each and every criterion individually.\n\n" "### INCLUSION CRITERIA ASSESSMENT\n" "For each inclusion criterion, classify it as one of:\n" "- **Met:** The patient's data explicitly and unequivocally satisfies the criterion.\n" @@ -108,7 +113,8 @@ def _format_prompt(self, criteria_text: str, patient_profile: str) -> str: { "role": "user", "content": ( - "For each criterion, classify:\n" + no_think_prefix + + "For each criterion, classify:\n" '- If Inclusion Criterion: "Met" | "Not Met" | "Unclear" | "Irrelevant"\n' '- If Exclusion Criterion: "Violated" | "Not Violated" | "Unclear" | "Irrelevant"\n\n' "Provide a justification for each classification based strictly on the provided data. " @@ -129,9 +135,21 @@ def _format_prompt(self, criteria_text: str, patient_profile: str) -> str: ] if self.tokenizer is not None and hasattr(self.tokenizer, "apply_chat_template"): - return self.tokenizer.apply_chat_template( - chat, tokenize=False, add_generation_prompt=True - ) + # Pass enable_thinking=False for reasoning models (e.g. Qwen3) when + # no_think is set. The kwarg is silently accepted or raises TypeError on + # models whose chat templates don't declare the variable — fall through. + template_kwargs: dict = {} + if self.no_think: + template_kwargs["enable_thinking"] = False + try: + return self.tokenizer.apply_chat_template( + chat, tokenize=False, add_generation_prompt=True, **template_kwargs + ) + except (TypeError, ValueError) as exc: + logger.warning( + "Tokenizer chat template unavailable; using plain prompt: %s", + exc, + ) # Fallback: simple concatenation system_part = f"{chat[0]['content']}\n\n" user_part = f"{chat[1]['content']}\n\n" @@ -139,13 +157,27 @@ def _format_prompt(self, criteria_text: str, patient_profile: str) -> str: # ---------------------- Persistence ---------------------- + @staticmethod + def _strip_thinking_tags(text: str) -> str: + """Remove blocks emitted by reasoning models (e.g. Qwen3). + + The full response (with thinking) is still written to the .txt file so the + reasoning chain is not lost; only JSON extraction operates on the stripped text. + """ + text = re.sub(r".*?", "", text, flags=re.DOTALL) + # Trim incomplete block if the model was cut off mid-think + cut = text.find("") + if cut != -1: + text = text[:cut] + return text.strip() + def _save_outputs(self, nct_id: str, response: str, output_folder: str): try: os.makedirs(output_folder, exist_ok=True) txt_path = f"{output_folder}/{nct_id}.txt" write_text_file([response], txt_path) try: - json_data = extract_json_object(response) + json_data = extract_json_object(self._strip_thinking_tags(response)) write_json_file(json_data, f"{output_folder}/{nct_id}.json") logger.info(f"Processed {nct_id} successfully") except (json.JSONDecodeError, ValueError) as e: @@ -162,7 +194,11 @@ def _save_outputs(self, nct_id: str, response: str, output_folder: str): def _token_length(self, prompt: str, nct_id: str = "") -> int: """Token count used for length bucketing; char-based fallback on error.""" try: - return len(self.tokenizer(prompt, add_special_tokens=False)["input_ids"]) + kwargs = {"add_special_tokens": False} + max_input_tokens = getattr(self, "max_input_tokens", None) + if isinstance(max_input_tokens, int) and max_input_tokens > 0: + kwargs.update(truncation=True, max_length=max_input_tokens) + return len(self.tokenizer(prompt, **kwargs)["input_ids"]) except Exception: return max(1, len(prompt) // 4) diff --git a/src/trialmatchai/matching/eligibility_reasoning_transformers.py b/src/trialmatchai/matching/eligibility_reasoning_transformers.py new file mode 100644 index 00000000..d79d6a79 --- /dev/null +++ b/src/trialmatchai/matching/eligibility_reasoning_transformers.py @@ -0,0 +1,123 @@ +from __future__ import annotations + +from typing import Any, Dict, List, Optional + +from trialmatchai.matching.eligibility_base import BaseTrialProcessor +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +class BatchTrialProcessorTransformers(BaseTrialProcessor): + """CPU-capable Transformers eligibility processor for smoke/small runs.""" + + def __init__( + self, + model_path: str, + *, + device: str = "cpu", + batch_size: int = 1, + use_cot: bool = False, + max_new_tokens: int = 256, + temperature: float = 0.0, + top_p: float = 1.0, + revision: Optional[str] = None, + trust_remote_code: bool = False, + length_bucket: bool = True, + no_think: bool = False, + ): + try: + import torch + from transformers import AutoModelForCausalLM, AutoTokenizer + except ImportError as exc: # pragma: no cover - optional dependency guard + raise RuntimeError( + "Transformers eligibility processing requires the llm extra " + "(`uv sync --extra llm`)." + ) from exc + + self.torch = torch + self.device = torch.device(device if device != "auto" else "cpu") + self.tokenizer = AutoTokenizer.from_pretrained( + model_path, + revision=revision, + trust_remote_code=trust_remote_code, + ) + if self.tokenizer.pad_token is None: + self.tokenizer.pad_token = self.tokenizer.eos_token + self.tokenizer.padding_side = "left" + self.tokenizer.truncation_side = "left" + self.model = AutoModelForCausalLM.from_pretrained( + model_path, + revision=revision, + trust_remote_code=trust_remote_code, + ).to(self.device) + self.model.eval() + self.batch_size = batch_size + self.use_cot = use_cot + self.max_new_tokens = max_new_tokens + self.temperature = temperature + self.top_p = top_p + self.length_bucket = length_bucket + self.no_think = no_think + self.max_input_tokens = _max_input_tokens( + self.tokenizer, + self.model, + self.max_new_tokens, + ) + logger.info( + "Loaded Transformers eligibility model %s on %s.", + model_path, + self.device, + ) + + def _progress_desc(self) -> str: + return "CPU Transformers Processing Trials" + + def _process_batch(self, batch: List[Dict[str, Any]], output_folder: str): + prompts = [item["prompt"] for item in batch] + encoded = self.tokenizer( + prompts, + padding=True, + truncation=True, + max_length=self.max_input_tokens, + return_tensors="pt", + ).to(self.device) + generation_kwargs: dict[str, Any] = { + "max_new_tokens": self.max_new_tokens, + "pad_token_id": self.tokenizer.pad_token_id, + } + if self.temperature > 0: + generation_kwargs.update( + do_sample=True, + temperature=self.temperature, + top_p=self.top_p, + ) + else: + generation_kwargs["do_sample"] = False + + with self.torch.inference_mode(): + output_ids = self.model.generate(**encoded, **generation_kwargs) + + prompt_width = encoded["input_ids"].shape[1] + for item, sequence in zip(batch, output_ids): + completion_ids = sequence[prompt_width:] + response = self.tokenizer.decode( + completion_ids, + skip_special_tokens=True, + ).strip() + self._save_outputs(item["nct_id"], response, output_folder) + + +def _max_input_tokens(tokenizer: Any, model: Any, max_new_tokens: int) -> int: + candidates: list[int] = [] + config = getattr(model, "config", None) + for attr in ("max_position_embeddings", "n_positions", "n_ctx"): + value = getattr(config, attr, None) + if isinstance(value, int) and 0 < value < 1_000_000: + candidates.append(value) + tokenizer_limit = getattr(tokenizer, "model_max_length", None) + if isinstance(tokenizer_limit, int) and 0 < tokenizer_limit < 1_000_000: + candidates.append(tokenizer_limit) + + context_window = min(candidates) if candidates else 2048 + return max(1, context_window - max(0, int(max_new_tokens))) diff --git a/src/trialmatchai/models/embedding/__init__.py b/src/trialmatchai/models/embedding/__init__.py index 85fc9fdf..4668f315 100644 --- a/src/trialmatchai/models/embedding/__init__.py +++ b/src/trialmatchai/models/embedding/__init__.py @@ -1,7 +1,8 @@ from trialmatchai.models.embedding.text_embedder import ( + HashingTextEmbedder, TextEmbedder, TextEmbedderConfig, build_embedder, ) -__all__ = ["TextEmbedder", "TextEmbedderConfig", "build_embedder"] +__all__ = ["HashingTextEmbedder", "TextEmbedder", "TextEmbedderConfig", "build_embedder"] diff --git a/src/trialmatchai/models/embedding/text_embedder.py b/src/trialmatchai/models/embedding/text_embedder.py index b86eadfa..b6120795 100644 --- a/src/trialmatchai/models/embedding/text_embedder.py +++ b/src/trialmatchai/models/embedding/text_embedder.py @@ -1,6 +1,9 @@ from __future__ import annotations from dataclasses import dataclass +import hashlib +import math +import re from typing import Iterable, List, Literal, Sequence, Any from trialmatchai.utils.logging_config import setup_logging @@ -8,11 +11,13 @@ logger = setup_logging(__name__) +EmbedderBackend = Literal["hf", "hashing"] PoolingStrategy = Literal["cls", "mean"] @dataclass(frozen=True) class TextEmbedderConfig: + backend: EmbedderBackend = "hf" model_name: str = "BAAI/bge-m3" revision: str | None = None trust_remote_code: bool = False @@ -22,6 +27,43 @@ class TextEmbedderConfig: use_gpu: bool = True use_fp16: bool = False normalize: bool = True + hashing_dimensions: int = 64 + + +class HashingTextEmbedder: + """Deterministic lightweight embedder for tests and CPU smoke runs.""" + + def __init__(self, dimensions: int = 64, normalize: bool = True): + if dimensions <= 0: + raise ValueError("hashing_dimensions must be positive.") + self.dimensions = dimensions + self.normalize = normalize + logger.info( + "Using deterministic hashing embedder with %d dimensions.", dimensions + ) + + def embed_text(self, text: str) -> List[float]: + vectors = self.embed_texts([text]) + if not vectors: + raise ValueError("Cannot embed empty text.") + return vectors[0] + + def embed_texts(self, texts: Sequence[str]) -> List[List[float]]: + return [self._embed(text) for text in texts if text and text.strip()] + + def _embed(self, text: str) -> List[float]: + vector = [0.0] * self.dimensions + tokens = re.findall(r"[A-Za-z0-9]+", text.casefold()) + for token in tokens: + digest = hashlib.blake2b(token.encode("utf-8"), digest_size=8).digest() + bucket = int.from_bytes(digest[:4], "big") % self.dimensions + sign = 1.0 if digest[4] % 2 == 0 else -1.0 + vector[bucket] += sign + if self.normalize: + norm = math.sqrt(sum(value * value for value in vector)) + if norm: + vector = [value / norm for value in vector] + return vector class TextEmbedder: @@ -102,8 +144,17 @@ def build_embedder(config: dict) -> TextEmbedder: and the index/build-concepts/update-registry CLIs. """ embedder_cfg = config.get("embedder", {}) or {} + backend = embedder_cfg.get("backend", "hf") + if backend == "hashing": + return HashingTextEmbedder( + dimensions=int(embedder_cfg.get("hashing_dimensions", 64)), + normalize=bool(embedder_cfg.get("normalize", True)), + ) + if backend != "hf": + raise ValueError(f"Unsupported embedder backend: {backend}") return TextEmbedder( TextEmbedderConfig( + backend="hf", model_name=embedder_cfg.get("model_name", "BAAI/bge-m3"), revision=embedder_cfg.get("revision"), trust_remote_code=embedder_cfg.get("trust_remote_code", False), diff --git a/src/trialmatchai/models/llm/transformers_reranker.py b/src/trialmatchai/models/llm/transformers_reranker.py new file mode 100644 index 00000000..131691e1 --- /dev/null +++ b/src/trialmatchai/models/llm/transformers_reranker.py @@ -0,0 +1,101 @@ +from __future__ import annotations + +import math +from typing import Any, List, Optional + +from tqdm import tqdm + +from trialmatchai.models.llm.llm_reranker import LLMReranker +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +class TransformersReranker: + """CPU-capable next-token Yes/No reranker for smoke tests and small runs.""" + + def __init__( + self, + model_path: str, + *, + device: str = "cpu", + batch_size: int = 8, + revision: Optional[str] = None, + trust_remote_code: bool = False, + ): + try: + import torch + from transformers import AutoModelForCausalLM, AutoTokenizer + except ImportError as exc: # pragma: no cover - optional dependency guard + raise RuntimeError( + "Transformers reranker requires the llm extra " + "(`uv sync --extra llm`)." + ) from exc + + self.torch = torch + self.device = torch.device(device if device != "auto" else "cpu") + self.batch_size = batch_size + self.tokenizer = AutoTokenizer.from_pretrained( + model_path, + revision=revision, + trust_remote_code=trust_remote_code, + ) + if self.tokenizer.pad_token is None: + self.tokenizer.pad_token = self.tokenizer.eos_token + self.model = AutoModelForCausalLM.from_pretrained( + model_path, + revision=revision, + trust_remote_code=trust_remote_code, + ).to(self.device) + self.model.eval() + self.yes_token_id = self._first_token_id(" Yes", "Yes") + self.no_token_id = self._first_token_id(" No", "No") + logger.info("Loaded Transformers reranker %s on %s.", model_path, self.device) + + def _first_token_id(self, preferred: str, fallback: str) -> int: + token_ids = self.tokenizer(preferred, add_special_tokens=False)["input_ids"] + if not token_ids: + token_ids = self.tokenizer(fallback, add_special_tokens=False)["input_ids"] + if not token_ids: + raise ValueError(f"Tokenizer could not encode {fallback!r}.") + return int(token_ids[0]) + + def rank_pairs(self, patient_trial_pairs: List[tuple]) -> List[dict[str, Any]]: + results: List[dict[str, Any]] = [] + for start in tqdm( + range(0, len(patient_trial_pairs), self.batch_size), + desc="CPU reranking batches", + ): + batch = patient_trial_pairs[start : start + self.batch_size] + prompts = [self._build_prompt(patient, trial) for patient, trial in batch] + encoded = self.tokenizer( + prompts, + padding=True, + truncation=True, + return_tensors="pt", + ).to(self.device) + with self.torch.inference_mode(): + outputs = self.model(**encoded) + next_logits = outputs.logits[:, -1, :] + for row in next_logits: + yes_logit = float(row[self.yes_token_id]) + no_logit = float(row[self.no_token_id]) + highest = max(yes_logit, no_logit) + yes = math.exp(yes_logit - highest) + no = math.exp(no_logit - highest) + prob = yes / (yes + no) + results.append( + {"llm_score": prob, "answer": "Yes" if prob > 0.5 else "No"} + ) + return results + + def _build_prompt(self, patient_text: str, trial_text: str) -> str: + messages = LLMReranker.create_messages(patient_text, trial_text) + if getattr(self.tokenizer, "chat_template", None): + return self.tokenizer.apply_chat_template( + messages, tokenize=False, add_generation_prompt=True + ) + return ( + f"{messages[0]['content']}\n\n" + f"{messages[2]['content']}\nAnswer Yes or No:" + ) diff --git a/src/trialmatchai/registry/preparation.py b/src/trialmatchai/registry/preparation.py index aadbc9bb..3ef99f56 100644 --- a/src/trialmatchai/registry/preparation.py +++ b/src/trialmatchai/registry/preparation.py @@ -52,8 +52,7 @@ def prepare_trial_document( # Text-only fields the backend scores on (TRIAL_TEXT_WEIGHTS) but does not embed. for text_field in ("detailed_description", "official_title"): value = _preprocess_text(flatten_text(doc.get(text_field))) - if value: - out[text_field] = value + out[text_field] = value for simple in ( "overall_status", @@ -64,22 +63,30 @@ def prepare_trial_document( "source_url", "last_update_posted", ): - if doc.get(simple) not in (None, ""): - out[simple] = doc[simple] + out[simple] = str(doc.get(simple) or "") - for date_field in ("start_date", "completion_date"): - iso = _to_iso_date(doc.get(date_field)) - if iso: - out[date_field] = iso + out["start_date"] = _to_iso_date(doc.get("start_date")) or "" + out["completion_date"] = _to_iso_date(doc.get("completion_date")) or "" - for age_field in ("minimum_age", "maximum_age"): - years = _age_to_years(doc.get(age_field)) - if years is not None: - out[age_field] = years + out["minimum_age"] = _age_to_years(doc.get("minimum_age")) + if out["minimum_age"] is None: + out["minimum_age"] = 0.0 + out["maximum_age"] = _age_to_years(doc.get("maximum_age")) + if out["maximum_age"] is None: + out["maximum_age"] = 999.0 - for nested in ("intervention", "location", "reference"): - if doc.get(nested): - out[nested] = doc[nested] + out["intervention"] = _stable_dict_list( + doc.get("intervention"), + keys=("name", "type", "description"), + ) + out["location"] = _stable_dict_list( + doc.get("location"), + keys=("facility", "city", "state", "country", "status"), + ) + out["reference"] = _stable_dict_list( + doc.get("reference"), + keys=("pmid", "citation", "type"), + ) return out @@ -134,7 +141,10 @@ def prepare_criteria_documents( "entities": _entities_for_index(entry.get("entities")), "eligibility_type": entry["eligibility_type"], "criterion_vector": vector, - "constraints": constraint_set.model_dump(mode="json"), + "constraints": json.dumps( + constraint_set.model_dump(mode="json"), + sort_keys=True, + ), } ) return rows @@ -218,6 +228,18 @@ def _preprocess_text(value: str) -> str: return re.sub(r"\s+", " ", value).strip() +def _stable_dict_list(value: Any, *, keys: Sequence[str]) -> list[dict[str, str]]: + rows = value if isinstance(value, list) else [] + normalized: list[dict[str, str]] = [] + for row in rows: + if not isinstance(row, dict): + continue + normalized.append({key: str(row.get(key) or "") for key in keys}) + if normalized: + return normalized + return [{key: "" for key in keys}] + + def _to_iso_date(value: Any) -> str | None: if not value: return None diff --git a/src/trialmatchai/search/lancedb_backend.py b/src/trialmatchai/search/lancedb_backend.py index 651b1226..33b87fc0 100644 --- a/src/trialmatchai/search/lancedb_backend.py +++ b/src/trialmatchai/search/lancedb_backend.py @@ -1,5 +1,6 @@ from __future__ import annotations +import json import math import re from dataclasses import dataclass @@ -507,6 +508,7 @@ def build_trial_record(doc: Mapping[str, Any]) -> dict[str, Any]: def build_criteria_record(doc: Mapping[str, Any]) -> dict[str, Any]: row = dict(doc) entity_text, synonym_text = _flatten_entities(row.get("entities")) + row["entities"] = _json_payload(row.get("entities")) row["entity_text"] = entity_text row["entity_synonyms_text"] = synonym_text row["search_text"] = flatten_text( @@ -746,6 +748,11 @@ def _gender_matches(value: Any, sex: str) -> bool: def _flatten_entities(entities: Any) -> tuple[str, str]: + if isinstance(entities, str): + try: + entities = json.loads(entities) + except json.JSONDecodeError: + return "", "" if not isinstance(entities, list): return "", "" texts: list[str] = [] @@ -761,6 +768,13 @@ def _flatten_entities(entities: Any) -> tuple[str, str]: return flatten_text(texts), flatten_text(synonyms) +def _json_payload(value: Any) -> str: + try: + return json.dumps(value or [], sort_keys=True) + except TypeError: + return "[]" + + def _normalize_text(value: str) -> str: return " ".join(re.findall(r"[a-z0-9]+", value.casefold())) diff --git a/src/trialmatchai/services/preflight.py b/src/trialmatchai/services/preflight.py index 925591ab..d14d8384 100644 --- a/src/trialmatchai/services/preflight.py +++ b/src/trialmatchai/services/preflight.py @@ -50,6 +50,10 @@ def run_preflight_checks( ) if require_models: + reranker_enabled = _reranker_enabled(config) + rag_enabled = _rag_enabled(config) + reranker_backend = _reranker_backend(config) + rag_backend = _rag_backend(config) if entity_cfg: backend = entity_cfg.get("backend", "gliner2") if backend == "gliner2" and importlib.util.find_spec("gliner2") is None: @@ -68,35 +72,53 @@ def run_preflight_checks( ) model_cfg = config.get("model", {}) - _require_path( - issues, - "model.cot_adapter_path", - model_cfg.get("cot_adapter_path"), - required=True, + if rag_enabled and rag_backend == "vllm": + _require_path( + issues, + "model.cot_adapter_path", + model_cfg.get("cot_adapter_path"), + required=True, + ) + if reranker_enabled and reranker_backend == "vllm": + _require_path( + issues, + "model.reranker_adapter_path", + model_cfg.get("reranker_adapter_path"), + required=True, + ) + needs_vllm = (rag_enabled and rag_backend == "vllm") or ( + reranker_enabled and reranker_backend == "vllm" ) - _require_path( - issues, - "model.reranker_adapter_path", - model_cfg.get("reranker_adapter_path"), - required=True, + needs_transformers = (rag_enabled and rag_backend == "transformers") or ( + reranker_enabled and reranker_backend == "transformers" ) - # vLLM is the only LLM backend (CoT + reranker), so it is always required - # when running models. - vllm_available = importlib.util.find_spec("vllm") is not None - if not vllm_available: - issues.append( - "vLLM is required (`uv sync --extra llm --extra gpu`)." - ) - else: - try: - import torch - except Exception: + # vLLM is the production LLM backend. CPU smoke configs may use the + # Transformers backend to exercise model calls without CUDA. + if needs_vllm: + vllm_available = importlib.util.find_spec("vllm") is not None + if not vllm_available: issues.append( - "vLLM requires PyTorch (`uv sync --extra llm --extra gpu`)." + "vLLM is required (`uv sync --extra llm --extra gpu`)." ) else: - if not torch.cuda.is_available(): - issues.append("vLLM requires a CUDA-capable runtime.") + try: + import torch + except Exception: + issues.append( + "vLLM requires PyTorch (`uv sync --extra llm --extra gpu`)." + ) + else: + if not torch.cuda.is_available(): + issues.append("vLLM requires a CUDA-capable runtime.") + if needs_transformers: + if importlib.util.find_spec("torch") is None: + issues.append( + "Transformers CPU backend requires PyTorch (`uv sync --extra llm`)." + ) + if importlib.util.find_spec("transformers") is None: + issues.append( + "Transformers CPU backend requires transformers (`uv sync --extra llm`)." + ) search_cfg = config.get("search_backend", {}) if search_cfg: @@ -162,3 +184,21 @@ def _require_patient_inputs(issues: List[str], config: Dict[str, Any]) -> None: return if profile_dir: issues.append(f"patient_inputs.profile_dir does not exist: {profile_dir}") + + +def _reranker_enabled(config: Dict[str, Any]) -> bool: + return bool(config.get("LLM_reranker", {}).get("enabled", True)) + + +def _rag_enabled(config: Dict[str, Any]) -> bool: + if not bool(config.get("use_cot_reasoning", True)): + return False + return bool(config.get("rag", {}).get("enabled", True)) + + +def _reranker_backend(config: Dict[str, Any]) -> str: + return str(config.get("LLM_reranker", {}).get("backend", "vllm")) + + +def _rag_backend(config: Dict[str, Any]) -> str: + return str(config.get("rag", {}).get("backend", "vllm")) diff --git a/tests/test_deployment_readiness.py b/tests/test_deployment_readiness.py index 9733e21c..898abfa9 100644 --- a/tests/test_deployment_readiness.py +++ b/tests/test_deployment_readiness.py @@ -2,6 +2,7 @@ from trialmatchai.config.config_loader import load_config, resolve_config_path from trialmatchai.matching.eligibility_base import BaseTrialProcessor +from trialmatchai.matching.eligibility_reasoning_transformers import _max_input_tokens from trialmatchai.utils.json_utils import extract_json_object @@ -46,6 +47,54 @@ def test_cot_prompt_does_not_inject_consent(): assert "Written informed consent has been obtained" not in prompt +def test_cot_prompt_falls_back_for_tokenizer_without_chat_template(): + class _TokenizerWithoutTemplate: + def apply_chat_template(self, *args, **kwargs): + raise ValueError("tokenizer.chat_template is not set") + + processor = BaseTrialProcessor.__new__(BaseTrialProcessor) + processor.use_cot = True + processor.tokenizer = _TokenizerWithoutTemplate() + + prompt = processor._format_prompt("Age >= 18", "Patient has lung cancer.") + + assert "Age >= 18" in prompt + assert "Patient has lung cancer." in prompt + assert prompt.endswith("Answer: ") + + +def test_transformers_rag_reserves_generation_context(): + class _Config: + max_position_embeddings = 1024 + + class _Model: + config = _Config() + + class _Tokenizer: + model_max_length = 2048 + + assert _max_input_tokens(_Tokenizer(), _Model(), 64) == 960 + + +def test_token_length_uses_generation_budget_when_available(): + class _Tokenizer: + def __init__(self): + self.kwargs = None + + def __call__(self, prompt, **kwargs): + self.kwargs = kwargs + return {"input_ids": [1, 2, 3]} + + tokenizer = _Tokenizer() + processor = BaseTrialProcessor.__new__(BaseTrialProcessor) + processor.tokenizer = tokenizer + processor.max_input_tokens = 128 + + assert processor._token_length("prompt") == 3 + assert tokenizer.kwargs["truncation"] is True + assert tokenizer.kwargs["max_length"] == 128 + + def test_json_extraction_uses_balanced_object(): output = 'prefix {"outer": {"inner": "value"}, "items": [1, 2]} suffix {"bad": true}' diff --git a/tests/test_embedding.py b/tests/test_embedding.py new file mode 100644 index 00000000..f910e789 --- /dev/null +++ b/tests/test_embedding.py @@ -0,0 +1,22 @@ +from __future__ import annotations + +from trialmatchai.models.embedding import HashingTextEmbedder, build_embedder + + +def test_hashing_embedder_is_deterministic_and_normalized(): + embedder = HashingTextEmbedder(dimensions=16) + first = embedder.embed_text("EGFR lung cancer") + second = embedder.embed_text("EGFR lung cancer") + + assert first == second + assert len(first) == 16 + assert round(sum(value * value for value in first), 6) == 1.0 + + +def test_build_embedder_supports_hashing_backend(): + embedder = build_embedder( + {"embedder": {"backend": "hashing", "hashing_dimensions": 8}} + ) + + assert isinstance(embedder, HashingTextEmbedder) + assert len(embedder.embed_text("melanoma")) == 8 diff --git a/tests/test_entities.py b/tests/test_entities.py index 36b63ec1..968d5fc0 100644 --- a/tests/test_entities.py +++ b/tests/test_entities.py @@ -10,7 +10,11 @@ write_lancedb_table, ) from trialmatchai.entities.linker import ConceptLinker, InMemoryConceptStore -from trialmatchai.entities.recognizers import RegexSchemaRecognizer, resolve_overlaps +from trialmatchai.entities.recognizers import ( + RegexSchemaRecognizer, + _parse_model_entities, + resolve_overlaps, +) from trialmatchai.entities.schemas import load_entity_schemas from trialmatchai.entities.types import ConceptCandidate, EntityAnnotation, NO_ENTITY_ID @@ -39,6 +43,38 @@ def test_regex_backend_returns_current_output_shape(): assert "concept_candidates" in result[0][0] +def test_gliner2_entity_mapping_response_parses_to_annotations(): + schemas = [ + schema for schema in load_entity_schemas() if schema.id in {"disease", "gene"} + ] + label_map = { + label.casefold(): schema + for schema in schemas + for label in schema.recognizer_labels + } + text = "Patient has lung cancer with EGFR mutation." + + annotations = _parse_model_entities( + { + "entities": { + "disease": [ + { + "text": "lung cancer", + "start": 12, + "end": 23, + "confidence": 0.99, + } + ], + "gene": [{"text": "EGFR", "start": 29, "end": 33, "confidence": 0.99}], + } + }, + text, + label_map, + ) + + assert [annotation.text for annotation in annotations] == ["lung cancer", "EGFR"] + + def test_overlap_resolution_keeps_higher_confidence_span(): annotations = [ EntityAnnotation("disease", "lung cancer", 0, 11, 0.91, schema_id="disease"), diff --git a/tests/test_finetuning.py b/tests/test_finetuning.py index 64470f57..38b49800 100644 --- a/tests/test_finetuning.py +++ b/tests/test_finetuning.py @@ -6,10 +6,11 @@ import pytest -from trialmatchai.finetuning.cli import build_parser +from trialmatchai.finetuning.cli import _lora_config_from_args, build_parser from trialmatchai.finetuning.config import FinetuneConfig from trialmatchai.finetuning.data import ( cot_row_to_messages, + gliner2_row_to_training_record, ner_row_to_entities, read_jsonl, reranker_row_to_messages, @@ -60,10 +61,109 @@ def test_ner_native_gliner2_format(): assert out["entities"] == {"gene": ["EGFR"]} +def test_ner_native_gliner2_text_schema_format_and_negative_entities(): + out = ner_row_to_entities( + { + "text": "No reportable biomarker", + "schema": { + "entities": {"gene": []}, + "entity_descriptions": {"gene": "Gene symbols"}, + }, + } + ) + assert out["text"] == "No reportable biomarker" + assert out["entities"] == {"gene": []} + assert out["entity_descriptions"] == {"gene": "Gene symbols"} + + +def test_gliner2_schema_record_preserves_json_structures(): + record = gliner2_row_to_training_record( + { + "text": "Patient has EGFR exon 19 deletion and stage IV NSCLC.", + "schema": { + "entities": {"gene": ["EGFR"]}, + "json_structures": [ + { + "biomarker": { + "gene": "EGFR", + "variant": "exon 19 deletion", + "disease_stage": "stage IV", + } + } + ], + "json_descriptions": { + "biomarker": { + "gene": "Gene symbol", + "variant": "Observed alteration", + } + }, + }, + } + ) + assert record == { + "input": "Patient has EGFR exon 19 deletion and stage IV NSCLC.", + "output": { + "entities": {"gene": ["EGFR"]}, + "json_structures": [ + { + "biomarker": { + "gene": "EGFR", + "variant": "exon 19 deletion", + "disease_stage": "stage IV", + } + } + ], + "json_descriptions": { + "biomarker": { + "gene": "Gene symbol", + "variant": "Observed alteration", + } + }, + }, + } + + +def test_gliner2_record_preserves_classifications_and_relations(): + row = { + "input": "Erlotinib targets EGFR.", + "output": { + "classifications": [ + { + "task": "actionability", + "labels": ["actionable", "not_actionable"], + "true_label": "actionable", + } + ], + "relations": [{"targets": {"head": "Erlotinib", "tail": "EGFR"}}], + }, + } + assert gliner2_row_to_training_record(row) == row + + +def test_gliner2_top_level_structures_alias_normalizes_to_json_structures(): + record = gliner2_row_to_training_record( + { + "text": "Trial requires ECOG 0-1.", + "structures": {"eligibility": {"performance_status": "ECOG 0-1"}}, + } + ) + assert record["output"]["json_structures"] == [ + {"eligibility": {"performance_status": "ECOG 0-1"}} + ] + + def test_read_jsonl_respects_max(tmp_path): path = tmp_path / "d.jsonl" path.write_text("\n".join(json.dumps({"i": i}) for i in range(5))) assert len(read_jsonl(str(path), max_examples=2)) == 2 + assert read_jsonl(str(path), max_examples=0) == [] + + +def test_read_jsonl_reports_invalid_line(tmp_path): + path = tmp_path / "bad.jsonl" + path.write_text('{"ok": true}\nnot-json\n') + with pytest.raises(ValueError, match="bad.jsonl:2"): + read_jsonl(str(path)) def test_cli_parses_each_subcommand(): @@ -83,6 +183,38 @@ def test_cli_parses_each_subcommand(): parser.parse_args(["cot"]) # missing required args +def test_lora_cli_maps_training_controls(): + parser = build_parser() + args = parser.parse_args( + [ + "cot", + "--base-model", + "m", + "--train-data", + "t", + "--output-dir", + "o", + "--eval-data", + "e", + "--target-modules", + "q_proj,v_proj", + "--eval-steps", + "100", + "--save-steps", + "500", + "--device-map", + "none", + ] + ) + cfg = _lora_config_from_args(args) + assert cfg.eval_data == "e" + assert cfg.target_modules == ["q_proj", "v_proj"] + assert cfg.eval_steps == 100 + assert cfg.save_steps == 500 + assert cfg.device_map is None + + def test_finetune_config_training_args_lazy(): cfg = FinetuneConfig(base_model="m", train_data="t", output_dir="o") assert cfg.lora_rank == 32 and cfg.bf16 is True + assert cfg.target_modules == "all-linear" diff --git a/tests/test_lancedb_search_backend.py b/tests/test_lancedb_search_backend.py index 5b94a4a6..978d6398 100644 --- a/tests/test_lancedb_search_backend.py +++ b/tests/test_lancedb_search_backend.py @@ -1,5 +1,7 @@ from __future__ import annotations +import json + import pytest from trialmatchai.search import LanceDBSearchBackend @@ -112,3 +114,70 @@ def test_scan_rows_fallback_applies_nct_filter(tmp_path): assert rows assert {row["nct_id"] for row in rows} == {"N1"} + + +def test_lancedb_backend_serializes_variable_entity_payloads(tmp_path): + backend = LanceDBSearchBackend( + tmp_path / "search", + trials_table="trials", + criteria_table="criteria", + candidate_limit=25, + ) + + backend.index_criteria( + [ + { + "criteria_id": "C1", + "nct_id": "N1", + "criterion": "Confirmed EGFR mutation", + "criterion_vector": [1.0, 0.0], + "entities": [ + { + "entity_group": "gene", + "text": "EGFR", + "start": 10, + "end": 14, + "score": 0.99, + "normalized_id": ["CUI-less"], + "synonyms": ["ERBB1"], + "concept_candidates": [ + { + "concept_id": "EntrezGene:1956", + "concept_name": "epidermal growth factor receptor", + "source_scores": {"fts": 1.0}, + } + ], + "linker_score": None, + "linker_status": "not_linked", + } + ], + "eligibility_type": "Inclusion Criteria", + }, + { + "criteria_id": "C2", + "nct_id": "N1", + "criterion": "No active autoimmune disease", + "criterion_vector": [0.0, 1.0], + "entities": [ + { + "entity_group": "disease", + "text": "autoimmune disease", + "start": 10, + "end": 28, + "score": 0.95, + } + ], + "eligibility_type": "Exclusion Criteria", + }, + ] + ) + + hits = backend.search_criteria( + query="ERBB1", + nct_ids=["N1"], + search_mode="bm25", + use_entity_synonyms=True, + ) + + assert hits[0]["_source"]["criteria_id"] == "C1" + assert json.loads(hits[0]["_source"]["entities"])[0]["text"] == "EGFR" diff --git a/tests/test_patient_runtime_loading.py b/tests/test_patient_runtime_loading.py index 7227e1f0..15f6d896 100644 --- a/tests/test_patient_runtime_loading.py +++ b/tests/test_patient_runtime_loading.py @@ -2,6 +2,7 @@ import json +from trialmatchai.interop.models import PatientProfile from trialmatchai.main import _load_patient_inputs @@ -55,3 +56,57 @@ def test_runtime_requires_canonical_profiles(tmp_path): ) assert loaded == [] + + +def test_main_pipeline_returns_nonzero_when_all_patients_fail(tmp_path, monkeypatch): + import trialmatchai.main as main_module + import trialmatchai.models.embedding as embedding_module + + class _Backend: + def health(self, *, require_tables=False): + return [] + + config = { + "paths": { + "output_dir": str(tmp_path / "results"), + "trials_json_folder": str(tmp_path / "trials"), + }, + "search_backend": {"backend": "lancedb"}, + "patient_inputs": {}, + "search": {"mode": "bm25"}, + "constraints": {"enabled": False}, + "LLM_reranker": {"enabled": False}, + "rag": {"enabled": False}, + "use_cot_reasoning": False, + } + profile = PatientProfile.model_validate({"patient_id": "p1", "demographics": {}}) + summary = { + "patient_id": "p1", + "main_conditions": ["lung cancer"], + "other_conditions": [], + "patient_narrative": ["Patient has lung cancer."], + "age": "all", + "gender": "all", + } + + monkeypatch.setattr(main_module, "load_config", lambda config_path=None: config) + monkeypatch.setattr(main_module, "run_preflight_checks", lambda *args, **kwargs: []) + monkeypatch.setattr( + main_module.LanceDBSearchBackend, + "from_config", + classmethod(lambda cls, cfg: _Backend()), + ) + monkeypatch.setattr(embedding_module, "build_embedder", lambda cfg: object()) + monkeypatch.setattr(main_module, "build_entity_annotator", lambda cfg, embedder: None) + monkeypatch.setattr( + main_module, + "_load_patient_inputs", + lambda cfg: [(profile, summary)], + ) + + def _fail_first_level(*args, **kwargs): + raise RuntimeError("forced patient failure") + + monkeypatch.setattr(main_module, "run_first_level_search", _fail_first_level) + + assert main_module.main_pipeline("config.json") == 1 diff --git a/tests/test_preflight_and_indexer.py b/tests/test_preflight_and_indexer.py index b5f70e55..52cc0281 100644 --- a/tests/test_preflight_and_indexer.py +++ b/tests/test_preflight_and_indexer.py @@ -112,6 +112,34 @@ def test_preflight_reports_missing_vllm_extra(tmp_path, monkeypatch): assert issues == ["vLLM is required (`uv sync --extra llm --extra gpu`)."] +def test_preflight_allows_cpu_smoke_when_llm_stages_disabled(tmp_path, monkeypatch): + cfg = _base_config(tmp_path) + cfg["LLM_reranker"] = {"enabled": False} + cfg["rag"] = {"enabled": False} + cfg["use_cot_reasoning"] = False + monkeypatch.setattr(preflight.importlib.util, "find_spec", lambda name: None) + + issues = run_preflight_checks(cfg, require_models=True) + + assert issues == [] + + +def test_preflight_allows_transformers_cpu_llm_backend(tmp_path, monkeypatch): + cfg = _base_config(tmp_path) + cfg["LLM_reranker"] = {"enabled": True, "backend": "transformers"} + cfg["rag"] = {"enabled": True, "backend": "transformers"} + cfg["use_cot_reasoning"] = True + monkeypatch.setattr( + preflight.importlib.util, + "find_spec", + lambda name: object() if name in {"torch", "transformers"} else None, + ) + + issues = run_preflight_checks(cfg, require_models=True) + + assert issues == [] + + def test_preflight_reports_missing_entity_extra(tmp_path, monkeypatch): cfg = _entity_config(tmp_path) monkeypatch.setattr(preflight.importlib.util, "find_spec", lambda name: None) diff --git a/tests/test_registry_updater.py b/tests/test_registry_updater.py index 061428de..3b9c12d0 100644 --- a/tests/test_registry_updater.py +++ b/tests/test_registry_updater.py @@ -74,6 +74,44 @@ def embed_texts(self, texts): assert "official" in prepared["official_title"].lower() +def test_prepare_documents_emit_lancedb_stable_fields(): + from trialmatchai.registry.preparation import ( + prepare_criteria_documents, + prepare_trial_document, + ) + + class _StubEmbedder: + def embed_texts(self, texts): + return [[0.0, 0.0] for _ in texts] + + trial = prepare_trial_document( + { + "nct_id": "NCT00000010", + "brief_title": "Brief", + "condition": ["Lung cancer"], + "eligibility_criteria": "Adults", + }, + _StubEmbedder(), + ) + criteria = prepare_criteria_documents( + { + "nct_id": "NCT00000010", + "criteria": [ + {"type": "inclusion", "criterion": "Female adults age 18 years or older"} + ], + }, + _StubEmbedder(), + ) + + assert trial["location"] == [ + {"facility": "", "city": "", "state": "", "country": "", "status": ""} + ] + assert trial["minimum_age"] == 0.0 + assert trial["maximum_age"] == 999.0 + assert isinstance(criteria[0]["constraints"], str) + assert json.loads(criteria[0]["constraints"])["nct_id"] == "NCT00000010" + + def test_normalize_study_maps_v2_modules_and_splits_criteria(): normalized = normalize_study(_study("NCT00000004")) From 447c4fed4056ca8fb30834435ad99f53f59b0063 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Fri, 26 Jun 2026 17:59:56 +0200 Subject: [PATCH 35/64] feat: streamlined two-halves CLI (build/match), faithful preprocessing, official TREC eval Clean build-time vs run-time split with robust, resumable, well-logged commands. CLI / orchestration: - Add `trialmatchai build`: prepare corpus (embeddings/entities) + build index as one resumable command (per-trial resume, streaming/bounded memory, per-trial failure isolation, build manifest, `--status` introspection). - Add `trialmatchai e2e` (ingest -> index -> match) and `trialmatchai trec` (official TREC eval); both idempotent with per-patient resume. - New orchestration module (ingest/expand/index/match/build stages). - Fail-fast preflight: CUDA + extras + HuggingFace gated-model access checked upfront; match preflight points users at `trialmatchai build`. Preprocessing: - Restore faithful eligibility-criteria chunking (semicolon split + >200-char full-stop re-split) to match the legacy pipeline. - prepare_criteria_documents falls back to chunking raw eligibility_criteria when a trial doc has no pre-chunked criteria (so build works from existing trials_jsons). Query expansion: - Re-introduce the runtime CoT query-expansion module (legacy keywords.json behaviour); configurable model/backend, off by default, on for TREC. TREC harness: - Official topic + qrels download (NIST), per-track corpus derived from qrels, recall@k evaluation. Docs: - README overhaul: centered logo/hero, two-halves quickstart, grouped CLI reference; corrected Nature Communications citation (vol 17, 4472, 2026). Co-Authored-By: Claude Opus 4.8 --- .env.example | 7 + .gitignore | 6 + README.md | 167 ++++-- img/logo.png | Bin 1067715 -> 758820 bytes pyproject.toml | 3 + src/trialmatchai/cli/build.py | 112 ++++ src/trialmatchai/cli/e2e.py | 69 +++ src/trialmatchai/cli/main.py | 21 + src/trialmatchai/cli/trec.py | 69 +++ src/trialmatchai/config/config.json | 9 + src/trialmatchai/config/settings.py | 20 + src/trialmatchai/main.py | 30 +- src/trialmatchai/matching/query_expansion.py | 199 +++++++ src/trialmatchai/orchestration.py | 519 ++++++++++++++++++ .../registry/criteria_chunking.py | 58 +- src/trialmatchai/registry/preparation.py | 10 +- src/trialmatchai/services/preflight.py | 88 +++ src/trialmatchai/trec/__init__.py | 17 + src/trialmatchai/trec/corpus.py | 71 +++ src/trialmatchai/trec/qrels.py | 159 ++++++ src/trialmatchai/trec/runner.py | 146 +++++ src/trialmatchai/trec/topics.py | 275 ++++++++++ 22 files changed, 1982 insertions(+), 73 deletions(-) create mode 100644 src/trialmatchai/cli/build.py create mode 100644 src/trialmatchai/cli/e2e.py create mode 100644 src/trialmatchai/cli/trec.py create mode 100644 src/trialmatchai/matching/query_expansion.py create mode 100644 src/trialmatchai/orchestration.py create mode 100644 src/trialmatchai/trec/__init__.py create mode 100644 src/trialmatchai/trec/corpus.py create mode 100644 src/trialmatchai/trec/qrels.py create mode 100644 src/trialmatchai/trec/runner.py create mode 100644 src/trialmatchai/trec/topics.py diff --git a/.env.example b/.env.example index d10d303e..5250dac3 100644 --- a/.env.example +++ b/.env.example @@ -30,6 +30,13 @@ TRIALMATCHAI_MODEL_RERANKER_ADAPTER_PATH=models/finetuned_gemma2 TRIALMATCHAI_MODEL_TRUST_REMOTE_CODE=false TRIALMATCHAI_COT_BACKEND=vllm +# Runtime CoT query expansion (legacy keywords.json behaviour). Off by default; +# the TREC preset enables it. Model/adapter default to the CoT reasoning model. +TRIALMATCHAI_QUERY_EXPANSION_ENABLED=false +TRIALMATCHAI_QUERY_EXPANSION_BACKEND= +TRIALMATCHAI_QUERY_EXPANSION_MODEL= +TRIALMATCHAI_QUERY_EXPANSION_ADAPTER= + TRIALMATCHAI_ENTITY_BACKEND=gliner2 TRIALMATCHAI_ENTITY_MODEL_NAME=fastino/gliner2-base-v1 TRIALMATCHAI_ENTITY_SCHEMA_PATH=entity_schemas/trialmatchai.yaml diff --git a/.gitignore b/.gitignore index 1efa6385..7862acbf 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,12 @@ logs/ /source/ /Parser/ +# ============================ +# Local working dirs (large data stores / uncommitted code) +# ============================ +/elasticsearch/ +/utils/ + # ============================ # Generated indexing state # ============================ diff --git a/README.md b/README.md index 703f713b..85ef1034 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,37 @@ -# TrialMatchAI +
    -TrialMatchAI logo +TrialMatchAI -TrialMatchAI is an AI-driven clinical trial matching pipeline. It imports patient -data, retrieves relevant trials from local LanceDB tables, and produces ranked -trial recommendations with criterion-level eligibility explanations. +

    TrialMatchAI

    -The supported deployment is a single Python 3.11 GPU server. Trial search is -embedded and file-backed; there is no Elasticsearch, hosted vector database, or -separate search service to run. +

    AI-driven clinical trial matching. Import a patient — text, FHIR, Phenopacket, or OMOP — and get ranked, eligible trials with criterion-level eligibility explanations. Local LanceDB search + vLLM reasoning on a single GPU server; no Elasticsearch or hosted vector database to run.

    -[Install](#install) | [Quickstart](#quickstart) | [How It Works](#how-it-works) | [Configuration](#configuration) | [CLI](#cli-reference) +

    + Install · + Quickstart · + How it works · + Configuration · + CLI +

    -> For research and informational use only. TrialMatchAI is not medical advice, -> not a medical device, and must not replace review by qualified healthcare -> professionals. +
    + +> **⚕️ For research and informational use only.** TrialMatchAI is not medical +> advice, not a medical device, and must not replace review by qualified +> healthcare professionals. + +## TL;DR + +TrialMatchAI runs in **two halves**: **build the system once**, then **match +patients many times**. Both commands are idempotent and resume after disruption. + +```bash +uv sync --extra llm --extra gpu --extra entity # GPU host + HuggingFace access +uv run trialmatchai-bootstrap-data # fetch prepared corpus + adapters +uv run trialmatchai build # 1) BUILD: prepare + index (once) +uv run trialmatchai e2e --input patient.txt # 2) MATCH: ingest + match a patient +# -> results//ranked_trials.json +``` ## Requirements @@ -78,69 +95,79 @@ pip install -e ".[finetune]" | `gpu` | vLLM and bitsandbytes; intended for Linux CUDA hosts | | `finetune` | training dependencies for `trialmatchai-finetune` | -Installing the package is only the first step. Real matching also needs runtime -data, model artifacts, a concept table, normalized trials, and LanceDB search -tables. +Installing the package only gives you the CLI. Real matching also needs the +trial corpus, model artifacts, and LanceDB search tables — all produced by the +**build** step below. ## Quickstart -Copy the environment template if you need local overrides: +The pipeline has two halves. **Build** is the heavy, one-time setup (GPU); it is +resumable and only does work that is not already done. **Match** is fast and +repeatable against the built system. -```bash -cp .env.example .env -``` - -Check the installation and configured paths: +### 0. Set up the runtime (GPU host) ```bash -uv run trialmatchai-healthcheck +uv sync --extra llm --extra gpu --extra entity # model-backed runtime +cp .env.example .env # optional local overrides +export HF_TOKEN= # required for gated models (phi-4, gemma-2) ``` -Download packaged artifacts: +### 1. Build the system — once ```bash -uv run trialmatchai-bootstrap-data +uv run trialmatchai-bootstrap-data # download the prepared corpus + LoRA adapters +uv run trialmatchai build # prepare embeddings/entities + build the index +uv run trialmatchai build --status # see exactly what is built (and what isn't) ``` -Build the concept-linking table from OMOP vocabulary files: +`build` fails fast if a GPU, an extra, or model access is missing — and resumes +from where it left off if interrupted. Bringing your **own** trials instead of +bootstrapping? Put normalized JSON in `data/trials_jsons/` and `build` will +prepare them. To also enable concept linking, pass an OMOP vocabulary: ```bash -uv run trialmatchai-build-concepts \ - --concept-csv data/omop/CONCEPT.csv \ - --synonym-csv data/omop/CONCEPT_SYNONYM.csv +uv run trialmatchai build --concepts-csv data/omop/CONCEPT.csv --synonym-csv data/omop/CONCEPT_SYNONYM.csv ``` -Fetch recent ClinicalTrials.gov studies and update local trial JSON plus -LanceDB: - -```bash -uv run trialmatchai-update-registry --since 2026-06-01 --max-studies 100 -``` +### 2. Match patients — repeatably -Build or rebuild search tables from normalized trial JSON: +`e2e` ingests the patient (format auto-detected) and matches in one command: ```bash -uv run trialmatchai-index --prepare +uv run trialmatchai e2e --input data/patients/raw/patient-1.txt +uv run trialmatchai e2e --input data/patients/raw/patient-1.fhir.json +uv run trialmatchai e2e --input data/patients/omop_extract ``` -Import patients into canonical TrialMatchAI profiles: +Results land in `results//` (ranked trials + eligibility +explanations). Re-running skips patients already matched. + +### Health and maintenance ```bash -uv run trialmatchai-import-patient --input data/patients/raw/patient-1.txt --format text -uv run trialmatchai-import-patient --input data/patients/raw/patient-1.fhir.json -uv run trialmatchai-import-patient --input data/patients/omop_extract --format omop +uv run trialmatchai-healthcheck # validate config/paths/deps +uv run trialmatchai-update-registry --since 2026-06-01 # pull new ClinicalTrials.gov studies ``` -Run batch matching: +
    +Manual / advanced control (the steps build and e2e wrap) ```bash -uv run trialmatchai-run +uv run trialmatchai-index --prepare # prepare + index from trials_jsons (what `build` runs) +uv run trialmatchai-import-patient --input patient.txt # stage a profile only +uv run trialmatchai-run # match already-staged profiles +uv run trialmatchai trec --tracks "21 22" # benchmark: official TREC CT eval ``` -Results are written under `results//`. +
    ## How It Works +The diagram below is the **match** path. The one-time **build** step produces the +LanceDB index it queries — trial and criterion embeddings, entity annotations, +and parsed eligibility constraints. + ```text Patient data (text / FHIR / Phenopacket / OMOP) | @@ -323,23 +350,38 @@ The full override list is in [`.env.example`](.env.example). ## CLI Reference +Every command is available both as a flat script (`trialmatchai-build`) and as a +subcommand (`trialmatchai build`); they are equivalent. + +**Build the system (setup half)** + | Command | Purpose | | --- | --- | -| `trialmatchai` | Command group for the main subcommands | -| `trialmatchai-healthcheck` | Validate config, paths, optional model deps, and LanceDB tables | -| `trialmatchai-bootstrap-data` | Download and extract runtime data/model artifacts | -| `trialmatchai-build-concepts` | Build the LanceDB concept table for entity normalization | -| `trialmatchai-update-registry` | Fetch changed ClinicalTrials.gov studies and upsert LanceDB | -| `trialmatchai-index` | Prepare/index trial and criteria search tables | -| `trialmatchai-import-patient` | Import text, FHIR, Phenopacket, or OMOP patient data | -| `trialmatchai-run` | Run the batch matching pipeline | -| `trialmatchai-finetune` | Fine-tune NER, reranker, or eligibility reasoning models | +| `trialmatchai build` | Prepare the corpus (embeddings + entities) and build the search index — resumable, with `--status` | +| `trialmatchai-bootstrap-data` | Download and extract the prepared corpus + model adapters | +| `trialmatchai build-concepts` | Build the LanceDB concept table for entity normalization (optional, OMOP) | +| `trialmatchai update-registry` | Fetch changed ClinicalTrials.gov studies and upsert LanceDB | + +**Match patients (run half)** -The first seven commands are also available as subcommands: +| Command | Purpose | +| --- | --- | +| `trialmatchai e2e` | Ingest a patient and match end-to-end (idempotent, per-patient resume) | +| `trialmatchai import-patient` | Import text, FHIR, Phenopacket, or OMOP patient data into a profile | +| `trialmatchai run` | Match already-staged patient profiles | +| `trialmatchai trec` | Benchmark: end-to-end evaluation on the official TREC Clinical Trials tracks | + +**Utility** + +| Command | Purpose | +| --- | --- | +| `trialmatchai healthcheck` | Validate config, paths, optional model deps, and LanceDB tables | +| `trialmatchai index` | Lower-level prepare/index of trial and criteria search tables | +| `trialmatchai-finetune` | Fine-tune NER, reranker, or eligibility reasoning models | ```bash -uv run trialmatchai healthcheck -uv run python -m trialmatchai healthcheck +uv run trialmatchai build --status # what is built +uv run python -m trialmatchai e2e --input patient.txt ``` ## Deployment @@ -385,17 +427,20 @@ upgrading vLLM or Torch. If you use TrialMatchAI in your research, please cite the Nature Communications paper: -> Abdallah, M. _et al._ TrialMatchAI. _Nature Communications_ (2026). -> +> Abdallah, M. _et al._ TrialMatchAI: an end-to-end AI-powered clinical trial +> recommendation system to streamline patient-to-trial matching. _Nature +> Communications_ **17**, 4472 (2026). ```bibtex -@article{trialmatchai, - title = {TrialMatchAI}, - author = {Abdallah, Majd and others}, +@article{abdallah2026trialmatchai, + title = {TrialMatchAI: an end-to-end AI-powered clinical trial recommendation system to streamline patient-to-trial matching}, + author = {Abdallah, Majd and Nakken, Sigve and Georges, Mikael and Bierkens, Mariska and Galvis, Johanna and Groppi, Alexis and Karkar, Slim and Meiqari, Lana and Rujano, Maria Alexandra and Canham, Steve and Dienstmann, Rodrigo and Fijneman, Remond and Hovig, Eivind and Meijer, Gerrit and Nikolski, Macha}, journal = {Nature Communications}, + volume = {17}, + pages = {4472}, year = {2026}, doi = {10.1038/s41467-026-70509-w}, - url = {https://www.nature.com/articles/s41467-026-70509-w} + url = {https://doi.org/10.1038/s41467-026-70509-w} } ``` diff --git a/img/logo.png b/img/logo.png index b5ff2ac1c57fdf78bca72a9c7917e0fbe8d2aeaf..15a654b8b0a5cdc36875076fe6b855eb20a4e8f9 100644 GIT binary patch literal 758820 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

    lhl1 z7giv`p;Z}E3ah)W7As5&G>|I|)H`iR-h^Zfz z@!(zyOGxC^YBDeO<776N1zWQ;p`oz;P-UbBYkh_kK02Y`#^0pPee$S9g~M@>pB2xF zzcH-0`oytC-Z>FJ>Am0#n2gfk0Qqbdub!gOY^qH6Y62_BV58t-%F7&7liZ0A;4V=y zAX^aR(7-toNgE!b(?2RM z@qI--Rq!`lQR0zhNQ4`{Tg=7eDjNk_17mHiR21wsfj*WaatD@SXoTcCDOe+H>#V(I zK&oiX+ahhgdpZWi}Mu>u3QIE@1cSujo!3D};Lw>EV&4`fb5mKux9RorkCxTS?o8%0bW+s}=D2)MvKt)+8~Ii< zpvYjCCnPaLJ}uu|WE0UwupNci=JOij3d9j)YUKOXC@22VM39_h6n5U6p*)ndv>fiw z^ic#2_w~iK@S~GHU&Vor;As|tS*6;DX6&!i>Dq>K6N5bp*$trN4HI%WGa6#{h}s<# zexdBwd^_LCPop{fijNFGZmLg2^}wRNG2Tg$Muxzzoe;lrgK~R1pneBCGA7mf z6%fd298ku_EuxWGt|y~~C}xq>2!!&zS)X z2vrk^bC(6&UdkRC2k%}P>Quwb#G_gi>pDS^dDSYG)XrD9%X!tA)=;O7_7*k8sH9?f zxH*68vSg#TMwH^vf`o%egN{W(qD`v!EzwHgsdPzXyqiM^iSdN{b8dBX!BP6*PYyiI zgz>I4xxg4CV-xf#9ya1v{2nK8T%5|p)P^>+q@rBlAltazw9jWp4v52L;?3>cPFqkM zA7D1%ll>0^l2^`wesnl8SJ~Dq9C}Y-Sij@OVtj}5FM(_l6FKon2VR&QRiwnOGYDTH zynXFZ6k`SWpf@W7EB4q?^r)iY~%dv!4LA26gOK&Liao5toQH&yLbe0OJNVi}L_ahTcU46TIGa-7_cEVZ>RBLm=>4o zHER@%;5x{k+y-gPgP+=m`8t*Uho8DwH4X)}mw>dK{2fn(4UD( ziY~gUeykP^?Merc&{Sh&w~@%h3B$Y~74&Lr23D+3kvZW3gDyLZSMAZwee${d>SSyW zAX-bd&pwRIqraO-AZQ12zM$Eym}|(hEv7+pF96=gV3or!UB~fpA=Q>I=tbau*Llc` z;3&I;_799aPMe!+XCi$@=Djs=z{woVGffKjYBcL6jF&)yu*wJ(T!7uNW%PZHg|J>Y zoQS}utu7eu1f%}~*^8?mOAyg9+wf8BBTvD#m8tM8f`#mD@I-w?hI6P)q!42g8BWl4>Mgn?( z(ox)9p`-l7htrvu;EDaE0R2qOSVE53TYoQDVP2ACr!_ILEc9p1?fFufp^AZ-U(~e+ zYvPDR;(h)H5SvCdOx=lGX})I6nD$PJ3A!M)v6$N#Nmj4##o2(qk$>kf(jAz%Ip0%b z`ad%BGwVe4wsevNjdsm8@f@lc`bVPYs!6_i215|{n?_)KUB)47!pAM3nEungPHIh; z$`JKY82ZBcg=}Ck1Qe}xhycCzfdm|jAJNc>$dn?Qf|{K8Sj#q0PSrE!d_Bcz@!Z$> zPsp~aldFjzr)4s^33!uHpC1}B7$jV+lX!-S?CkM@v6`F*7f?1Cof?+>TpozliUCs- zj9O|q(P^q_od7(Tgy`vf1>Z^BWo4oi@FspAUnXS@JJ2)4O*clgJe0(Y;llJKo297x znSodplsy6mfW+PUi>DbS$F8y=YnsHN#hWK^NV2amNCnG7I7bO61)t8?DvD|ln^ZV+ zu~ev8=5pq_wMx^@VoN0zegvT)yb?lZMxrA)W9|KV8HYSMj7*jrUC6fM-0pA1;iMhK zQi466roMagn9L$;293ZWGx^wNDnT29KDnJR^EDz5(^f_s4U6M{&eH;89hDM(6d+I; zNHh2eLJBw2t%bH0$sn;8J4}Jpm9YtFUq{x`kUetZCLq#I!6DvUdfH>KnsG(eq$}2P z>k?aO!=Ui2-$wRb*55xO@&>KKz)5Q$VpPu^``SOXI5HW^*bkHFptwBv!U2l(^nn@&B#N!f|2t+fx$(s%ocZrbiH`df&rEy zmo0kNtKcepLZov)jcto+C(voafOHm8VP|G;jjDjb{KQPnN`TaSM1wUcOs|Up6;?H3 zKla(Etu{jT%$uf#g8^|X*nMIx2|^_LdJ>d^j$1?p}})Z$G(C@iHbnZ>c6K^Ad-@*E;CjP|xRMK@p| zzm!ZQ{#*CAmQy_FbVxE^%8P0jp_10v$ncP0mKASJLq|{La15yJ4FMr!isUa~WLC$_ z!zmhI8}rsDByq+TKz*))TZlXs7-xkR-n_u-gMY9ei)M^_30|hGEd& zK4Q%q06?_iWNeMG)w)uLO5G{s(q+^X=S|a0E~U6g8J7$cYvk&adY^a64z=KlHa*od6K=6t7MbLvKa&DyS{Lh56&y@F+zx$QGq2s%>1T??9tr&GOF4lSWJ?D?*07l^v72TbWyrSS-$?1E9tj3mnuM^w9p zDRNaxVhG`}6|QzfZTJyrxEmhnd8LT0a1!FtjGS_ilM<*{niX*J%I@YMwe~@@@M$%f z2PV$e87mih=!nEh)+b!Z_bu5+$s92+d7e_zBTt09(xllekCdwXrL7JI=y)^#E|lIl~)k9 zr+Zvq+332NiavMsCTvR?`f!rAmJq`RhORQIvFTur6mW>AJet^PF;Yjm5CG&n5D%kM z+WM9>;-bjaX8q>}s+txPA~$H}veF%;vf zNkyxfc;b28HDHX3t&b2T_B00nOxrZuMb2uu=S>J}Ult-$X3!X{f$Ba9c07H{uqW!_ z)r7|qqyj&tPo(Hrina_mnm6Hulv&DQi*y&n)jZ2aXXb?J zjW}U;I`}-_UA3t;p5f?nCxK0qSPLIb$`R5Z4%i2%Uby2B9Lef>-jl^g?Wf|-Wj$nW zl`nr`wK`#k;2{Na%YteilWu9&f1X1>s5c&azezJ{G>%Y81Xr>I{TZuJCJyt$^ODB&3!Pm zCtzMyTTd&V+0FFYaGwV*2^uTd^GVON2o)1Eo{wW4OyQeUb_Ma7>obC)gbl5F{*mRA zQWTqpJeB1~Qe*RQ?PwOu!K{LH60UXeT~}Pp(5!(h4+g3ows>%$+>1kV8X(}5VReyS zUQ%oB;XAhSO_sudMm3sBvm=+OJW2AS4}Nk+DC*cyJ40xHK&hR$BPXlbf@iRbd^A+>mY z!@k<=a$a;~Kjmg!+9t+rsk^|$V%IUhK5445<_4w+_@{aY&k^ae6cGvKB7O5d(z49i zHaIMqe!I+m=u_Uj79@Hqy$^!kyhv}-N)0)>NAON z5Fw>ZG;-&so8P1tc9_jx#mGY30L=$&;miU~xdHDt=6Sl1}v3VRL2DY^J)x0C>a6 zgViN8_{}NA^ys=+eM~CkGmx4%kFJk6XddtBFx3dC7K_QFng{&>p2i{sXaw8(Y9q)@ z#XECI)6v_2Z9UIS`3c-|{O4uhCIyU@2YPYcwP`-YlB2TVbtO4&xuXW*NB=aqp;eM4 z<9OjrPe!m$7d~(ul49!rlO~~4WWLd~+jG@Vx0vq3p$r&D%qA`l2oOBmtxx=2Jii5-jO1=ejxj0$kj#t*DV4rA|bPP@IM?2&5F zp=%ebGC;*`QL49^vCvp$i$xsoKr-D}sMI{80DDNPfJBu4x{4i*XC=skYNkZf>iey_ z6SGptXIvoQem>1zt$lR3i4;=dO%549dL7KS`X@q*ffs(u%5;=&c$R1|a@AN+ z$wiKq{%+O@$281=0);THXXhH&rb0lZ=i;I}a0+V~uAs}Aa}!9n)0na~*4bLic#5Yg zGdDI>Y>v}aO+G>$mU$*ucQyK>(_r|pENoypw}T%FwT`yOaTD!D+w5KmSEHD;Ez`@@eyfZcOZoZ@}4>mD5gjdq~_f*1|v%MlZHt^ z2V{md*;tJSrW!0^sXf6HWtt=Ck_qRfu6-1=u#%Z z9XMTEK;QfwAGelLq=H3DO9j*MW}fxPh{rtrqMX^xX)k6so+<0}xU&;gRt2S{n5Ddx z0MEr)7@K^|CyucyVRMc z4@n6qn_YE4=P8fI3kB4R8SXTrx@N23^~UP5_-JUJ;Rb*BiE>-f3kpA%>TuATo-5I& z!B0G;LKzL}J~+atb|1OPC^3vISY{t7*&ydUj$b&SMXNO;KcwJl@^ZyZ-R{wz+T4v| zM&4oH;2}NeL?`rJ>&!$(-*u|FE!MO`uI~I%iELE$P&@GS1mLMt<(w9q>$Nv=--TgQ zaaMLp%4Tk9;FhsK*x~BLt6QM;Pz(e0(j+1*(n8_1zOnPhtssH*rlsf4T(}MD!*B@O zqH^5mPh9R#uXB;Z>qS2xKb^j?yMM@5#qF)eM9Az`pPAIE-rO1yqW(Kk!Y52k+gYqO zBnV99VR_07$O-6MHaKdSBvlWo=lHxlT(cljC5aaNV5G=>K^5>ffjQD6ai6T?xHVdM znldp4M%y{pA&M-lsF>4Ul05QZ<5LVG7`j!7@S%XN=h17@12uKd7Crj4icoao_-N@~ zk0th|Jwocq1m1UnTc*Knn}=CqVzC!-n66F|rJS50j63RS=KDCgJBaX^@5V#J!!4$2 zziU>|(9eCxSOQsIVM=#^t=@;v=ON$59NoIlLdjdN%FXsZ_i3+#B_x8VU0qdaBh{IN`l$4F=pHB zUsYnDvL}fEMU2=h+WYKVB@B)$uZHC&hPomQjlvL|H5)s5F-)0pi2gOAD3%%nxuCF+ zGB;q(acGu<<{D8ZW63cVS0`~ueH1GvacK1HCM}Q67Ud=*j)S=EYi{d3D}s4Y;m`Fh zQcf@Jr#0+Ym`Y>2Y~_Xb#I|X3kXr|-fNJP^T}s)WVq3~sJWgVcY=FUzTQTQjSM9>+ zkt+dU5P3B}RjiT<<%hor#-3vgGHyEA{2xS2-vFu)x9$%&!KnKVic@ynHhmO?kPVU< zNrp~*^a~-=s0r^30?Op%A=~E+1DqB7#x-S=?zdlq8L@&I4GR_X#(MPHLR=hmY|5v(wryQV^V<11Y1@mttaAo zh8QU7bpfEq*1;0CpG`hy5Gz4-6r_3)T_hV&gLHeG)?u-CIB8WCxBLBC3mTC?7(mi&5Ea+8!M9K*FW>9LyQPV2YTzeP$z+N&@fKAkd~pYO{wyk2+auC-~t zGfhM-axIJW4Bj+5mg9fNsW|r?9*tg{Ipd&dTES*X7Qwx4j(WAZYTKS^Qk4j0 z(t+fe%VH`5GlB|{-+HR)yxF>?WF zSrDO2VC?vEryT8SoERLI_Ekw5ZW%3*oZ*a&0Gq`+R7nvx4`xu~f$z>d&U6hozD^ht zfp-bboBH15Ik$0LZd1BB-T?+QR?*1QPe|6o+!&9DLKl1p4aXPFu(#^vsg0=gb2F_n zvz?1pJJytO6Ayu;8F`#Tx0OBXtbGUUBH~RLAd%RgcnA!Twch!tgV@K~;$}nUTLwz9 zquOw?ri-Wz{v8!H{AjiFg9*+hWm;72poo2;jPaX2K+Urf?*0NYxlV&p-B`U5w#En z7Tur@SIP+w*3`9j@Xxts<27mwgJAgSHXbJJ5O+*nQ^Er8hYDx_nIFW5m*M_73dX!M zqfYWm(AhB9Yjk!j-(ywbr?Pre-_b&VUGPHKbf^!UkLg5Q%(Vip&bMUQsN>tJ8x*Ux0HJJCO z^9^ymnOR7ph%d5erhZtavS*-`uob#R4qVpC>pusPF|blKF{cH3n zr1nh%?zH0qpca+a#RsGly`FQs#vqsGn>i%X3J%xWw_NdZu!7F09!;Oukfv}9#MH)m zie?yyx9VV1J6h1}b@qLp_!wVDGMwQ>g;z9FgmonUl4+9K>8vywCzCgl&u*1rDLHpt zP&l3tOBZX&fGHy|Hl*dIQX1$S!%j@%muGBmyPx`Cqvf!# zBZP%6fvRONRo-d6X->l#V7J(&z^D0+5_0G?xG)8)-Al&?NZ9NJo1mWRz#S|b(wJDS z0*{(wHK5#ySyN7{eXU3y?Uw7*f^tV8bXqS*kiAnbBorqYef?q5%s$F!NDL1WpW*<7XOS3{^oPS|s31E7M&FRPF=Crh@Fu?npvFg}>s1u4e{(5Q8A+~-1V9iMS3^Rzg0ZERE_FRf~; zL{?=AjMq)Xq&7}-Nw6x6-vHRu2XRcFeG0Y1!W~n~xUeVl45p_pC|a5Ym_{Ly-gw{hIt&lIC@d32xYSOu>eJ zX}Q6Jr%jl`Gp@f5Pp(gqI|$v3M>gqprW}j?G7Xv`{cs)Gixter z+J>H~Qrn97?FQgZTp>%DZD&Fxan8hl4txbTU z$$C&w{6WSuo~9l3;}IvP3UeiXx!3NQj-G{OZ=)K?We93!vY1vhI18B!b_wiN&whtd z*x#m=j8y0@wM8?mz~DtQO}8VTvv6zQ_ZIdNkwW@}m80xzm1U$b;3~_mGgw6eaSPW` zn2Zh7GQmMGWU-gT2k3Y5Q};kqk&f+hc(lk)t%Im?o4Q?AQ&g9AM@9;Duwoj#(`lawM}PlPKK>uSu)ZH^=VH2yd$xi zwfCbm%5zvncz|Px!Z|Bo)f%0SCx|YhBDm>r<|1M9$b(Zjkz+knao|bomO-mKVjy9$ z7wUIh530+_U*Ak8|~H0fl5W16)qjH=Te z`e&#hW0ZiwieMI3utF?`2Sg&ZEo#jOt>Wl}${4{8CR-!R$uMK;Oebd`C+L6iV51rb z{UPm1#~6-Y_{Z`^7t#0Y^9Zsrjxz3nOHqV^^15XD^8&t!`fdL+yF)iB>_~MVED#C zB3Icsj2JlnGhObf9{rf%q>J?X8)^AYA)3 zTJI#2DJr>&LCKQeyzs0#wH~pf=(Dq`;W+>^qMmzt6B~*%v6Cg&-69V%u1N$V{7zy9 z)kNgJwGhl>y9A3goyi)e#MQubbDC(5aY(N)O^CI@>UZG5A^~BT328x^DwwZnnmr-5 z!zsFkWwPWgO+~ooDXvh4t-X04ts1pTKofKbE8byrKy~JN@g4Fp93yPNdW3pOHC+2Z z6&-@{R^a+VCz{w*$EVF&cs4?&l1*=u*XvrkB$uJ!j8wC*8sT=v@Hd zF*Q@U%n%6P!RcPh4c{(ITu1!iCE$oLtyzQ{;GL}eR)<#3zr{yxAgKB8oe0s4tI<}P>yYDc3gx2xBNmN= zS!K!X3L4%jOlQ=AgMUEpo7+Il+?AY{r=kpLTHe*lF;_8@Kz4|!_9jL)_WDv29k6sCG%Jxn^)U>m$iK1>`emd5klGuwI{hK`0)4M-yGo#m z&k;}z#+;&gVb`S9%WMK*OH=ea8`V;JP>T8+EMeSN@V$?k4n0Qrs*es;&rhJUMGkc= zASLG&d>J!*6P7?`(y>gHcMMmjAp-xWFdmyb31TcAlRnSvc{a4l-4KXD=w(QmkGJQQ z3tuak>W8)vvq5?0mPvcTs-jjcA6-%A>5^(5f?=O|x>_q^I@tGHxW7fJhbP!i?o>{V)B6m(X>71 zjheR92-fYICKaoBoWcxiYC%k2tkC2z6g&_!vMR*kY07UxuurOpB*>77L`~8pa$q~s zhgL79%{@`7P$B6gpkB!+r1m;J9Yf&Z22IOD`s)xvq;Jz?zm&{L^4RO3%&wC&9dc|y zTl-PpLQ4qJB3v1qFp-3{&aZO=J(x@cg6-0uaoN`5r9y_Q+?NckMR84;U%aMEv|TNp|~Phf1179bGGf zu`P(P_eaWYJc?5Dk=cCf{!*`3Qp;}}Kpgi5*ZGuwtwU>I|HSV`tLiy8u3Uw&XTpqG zkHIlJ$!y0rAiRji$@s+CVf{V@WyGlbZ0-1J{SK zRU*s)Ax1TrOjLgO27VA@7en^=(B|fR&6Si z00JH-9V`0ZbxB}_yA^z6Hx*|?Exg94IPIf~@bOL*PQjO&+eE{fE7yBfOoHHqVRP6b z<-!;w!Rn`uMOfSD1~qKK$v6)A2Fy&EWn0gc1A!fiWL%)y|Aw#mvhVtqU;DMc z_DkRXwlCf`Zg_a(ZQC}@h`_8;kLuQ&9x$S~N9u~dALdFwF3eDpOciL31gnLbj=07d z*lDD!lupRWd6`d|OFfE7W&C9$Z}Vsp73sX1)rv7w(*hUQHqnBnqLNC!DIoJ^Lq zrXOZvNs%R~d(Xsv!Cnf$3ae3T<)Twq<#yjIV>bWBYb-RqlsboVsFb}0siyo9^mGcbqS0#?7Yl(AlCNdE}FuKxatBCY5-c$^5#7ON20A z(1Z=F96LIic4yWXY8%^nP8Rr(-I@ltmCdS*r5B=kCO5kKjy(?%xZ1bccSB=8y1*V5 z*L9pyN7N8Md_hlSBbGC6_c#_?(0B00uPh<=>wZ_Z&dydmg_oS(J<3bEG4j6eesFcE zCTNw62~a6=?}-;UbCJk#=`@LFr8H~=JUaguc=j8}g#u_D$MKo$6f=Xmk~4nH{BZy9 z=id3(|K&gRmww`>-~G8yed5W>FUdyx^}1h0u2&+KtMD_=zy9rS{oe2R`oH&gfAw&i)3>iZObGM zuku<;7gYil%9$nhgSxR)iSyod{evLrd-5+;QZP)@1Nw~AQG``bUC{lJy7Azi-RcER z&-ans6j?{RSZid)qsPG@?%PpFIGK5RJIE+I)gc!Xio9!w`n)nbWr}+??V)hAf@NPhH z5A26x8zO|>{e~j;tZ0cEb*^k9D+_m7(quhkrvLJy<2z*K4!4 zKDi8_VgiFoSpdoSfpEU4o>ZK;P!e2JfaF=t_h9{}zeBi$=2XjTE-cv(45#QT*qO>$ zF~qt`ZH@&v&rf>V`_s9Ld5V;M1|fwI?Od2l)`a{Sz=Q|{55rd(iBdSHUHH|}g{wm( zoJp$1Ci(~>O5Rzqj1JNhG!ekNItJ>5FXFEar0soDoFBt40FYCt+7>y^^AlU@me0{l zLiEDP9=hp@pZ2WXty)#-{@1Gel}$rL%?S`P&^Jg?0xDFIk6geye2dnD_kFLnhOj}E zP+29|Xo!VDrrGJ!!gfSwe>Q1^V8u%3;n3EDs*>wrPrD>*a<{|!?;;|!ZM5;m%(UfpOQ!0b|I#FrYp%#vJ*4Qm1N)d?cre)dFI(SzVUm%`|JPV z-~Zcw&)@o8kM6i(o_!}8FRThV^>WcwoxH=SWzWw~k@$%7!@*$rlR+Hj96~-%vuHa_ z8_c=mJT7sxYtBTTA(Dj3*86%n38Jfaa;0NJbDVaBa|rx2OwX=5>;J{i6p40dI6pKF z)91~;tQf5Qp6vyZM-EImt4~=UZmN5wDe;FfSfJD(W}7L$Nku^($^!x?W~AceP}giW zq1_p%D>Kg6Hj(+jmLE}IcK~AlZD+DHTYvM~Yl@gAArw5|$B;4<@a1q=VG>z<_uJV$ zACRsTr&Soq6YJ>=`qBS0Q8*HeGH2y))Eo~2^Uk7j_@Yf|-+;lBVwqr(g(Du~>1M-g zO?Z@i7fH-m&N%K-=HUCk;K}sI))9(*-+TF*ruK~$}ajMiaQKvLUX};U=*!2h$|NI2%}M0&{(847LmK7KTmut!n{Kt5G`g5bv!yyuY0)BqRuEKO>xo6r*b`l|tRA}4zZf`G1xPN%zg~$KBzy16FxBuuL_=>N5o3uBAh_tt# zp4WdJY~Kjg_rSr=P|e^I)*(#_9L_^JZ=`dJ$qQoQWX}D>njk^&zIxoGyK_Qb6{jh& zZ7Q*Sw|VOyOwAL?qpEjTCsl25iNqEV31|T83X9pz6PfzrmA%+as`etDu84gtg&}^< zHq5pIO{OTb7)xuhy6-ql>MdECV$T*&PZ|e`K*~m%GN2J*5Y4Ps;hyJB%!l@+A8^L? zVsdb3TjCp4XV|2PFh^6u9rv+u5`0DT{LA^#cedAyQciUR+!g492u;x7H5)pbaj9oA z}FM93NLuOvz z`BWM=EB9A|iec&{M(IOxyo!cR6laigYd=Vh!$bD zWY*H-f!ak1T+>j;uoQtoTxe@2t6grzc-jgvC(<94J3|RqWW^=ZOuzazwJ}*BTLpN- z3Kce9ghDBbP6uoCU)NZ0irhF_^L#lhK?KHSai#(_X|QVK2Mo0bR$$eG=H|j);pek< zClimukmP(CdT=>-N*BEoHDF+sAXa~U=#C?B4e)>{nAxKD1?Vjq$m*X&r-33daWzGY z={gggnLFt_J`NKnDu{W_YRQ|dhqwOBsY#(2+^qK5lHMR6sgB3SC81^nqzPg$VumKB zx2WGL?0M^p+fp7PJ3V@I`H6S^(%<)w{qcAGLt)&|FLbKq+&RNYu%^B$Mf= z9VR{&`m2+<6YU*~(}igpxOW%2b^yv3<_(oEwZ17vw0hcEFh)=V)w4ya<2IxBnEU8Z z5>m_Tn1eu{aILik$|}SgfX&uS2gZ<-%q#dsjAlw}hM$Y8{F%Qm9p6Dxz`KBG)+Xav zlWB&7ozmc6Qy8Q1#Hq0Gh+Sm7y-e-nLE;07ns&DLW_TE}A0`K_6wg@Niir45ePjYdiHq2*jrzq1YDoZQ=DC2%C1*e&t6EH4VWw7TA`x zgr_Ju_cCNya`a1}JcNvca89!@q*s?WCi~2V)f%6YuzV1OUlY*#n9zWHUg;5RM$*-B ziH`^%97)P##&l=NNBEI>nT~c0)huNb7qrZFsY*@*-KBGdt!dy83f-9@cq1A0Yc{lY zN5wb+mQY=7_vp^ZK!Bii=9AFpxHx*Q9q`%RAT+;Y{3ZsAW@RqbDWUW z!1@(Yq;OO-zS|p6WFCR4Q!B%+$*1G_ut{v_iwp*Wur=P4TDmBC2A?P_tYOc{2RKmI zstUN`w8SRZqd`sUh@*1f&4@XEAck@gA6krRDh@*lpB%hiuko(ZN~ea7W(O<8DEdH* z`WumpcH6+ty-=%k|0rHDCW#|MLIlfAX8Z_ZzPF z*KO;DV&hy=2cGEzKA1gRN-(T0Gq;e6^}H?cXjL;Q=-X=Bk!8A)4Hs@Q>FTCUHPgyMT~-yTmDa4B77ic0S<(aFhz z+jz*8Co5j2XI%%QDKxayDs@AH} zs!eD!Vpd^|FceOj!^t4BqH>F2Iaqci>UxAaMwQaogvPU(D6|o%?aVhc5j(^G0*dgg z-vlkKpG`}?9_2f<*%On9pexDYngzaL*i0gq3XS_+*G&{GIZM2KXU>%L!Q zmz|z{_VG`=>wSOVANprM@UC}1^X3<>4-Z$ldyq#&8#T8zW{2i8dHmTFr`H~-!^#S zq4^W*O~f#lPi$LHBLp6^KmE4|QOJv>jv@{0qfvIs>=L(EL3}V+R z8pjr6tU?7y?)sNgR@=Xa={W=|>3%-N32)U3?@>5JOGL`w-P2 zPhW6+^KrJIm={=JJY>}ms+eA*Q!z`m_}Tl+bwXDR*JP&9^ui+mmW8TfcM*j<1tBu| z3)I0}_~G6<&EXJlo_es(V)#nM#(?Lb8PtT7T(x14#&uZ*Ru_N51-rK6ftP^}T<4r< z#RK9-aWv~;lQQl3T>604D4X`cZ);)ET5uK<$)Es;#J&>hX@yFVK#Zp}4z(K!f_gIN z&#PXC|iA|sdGr?iH)-*#Upx{{wz-SFk0Zt-t?S;&!<6y&d zl~5rmR;iN$kJ!F>o#NRvYm3s1&rOMsPE#^!Ox}pax1v2o;sXX^+G>+q5+4*K+{}i) zhT>_9y2f@zdn9A-2MqoZ@tgbGC~n)-R5#`P-W%oW!HrVL0S3 zBG>En;krNf%;WcdhFU6 zi5>+fY8@yBmJ3IIMwQ$r_D8{EFRq}sm~$1JQ{PFILTt*8qF>KO zwz5Gew1>qC66D^(%Gy4oNiREfGr(5Z1~qdhh3SLC627=FV<8bFQ5`HH_eGVEFgQKI z+R(sulfU-<^(d^${PBD|Jz&M42VfyS$=Q%Wa^adan8fbJKgqL689yzYIFGeOy(6*` zWpXrOGsc-OFSm>@_i|%6;2dkNO`=0M#$1b$_E|-fs)b3ZWImb6kP0&QYtI|$&J>BA zjCA+Hc(CHwCQ?uxbf_jEeE(t>6aekcF-B-yMSQNeR~VQIMDD4x)y`Qs#zv(vE(PZ| zzFi^#+av1BKqmM_Y(c(?rwMi@l0_`B$XZsziQN@*J{QoNSxPLep{DbE$d2tGI-M%P zv?4lY<)joPnNt~5vL7xSyaaIF$ecuLNX>FY4}D%<;)m-quRJ_{_0`8OzjF8TOZ&?&edbp`^QS)e-rxOKfBc;< z|0*#($S8*OU?01Gr(;J!!GQ@Z!*qUmIHLKg#1n{NEK)FgO?jY^iCb8vFnaCY&{YiK zHoB+56N#RNqLY(M3u;f$fZwecC6e|0*jrgUA5qTLWG<6O?$O#TIF#=na-xi>T}nkO zY^{VE<9=oU7hIPFkKmeNsi?T{s)~>4$l7>6PMHWvauE$(gw&Ia)tocFK&Cc$XWh;0 zLe5=YM!h-?qoe($d}8bD(InUW-H55$Y$yY{9c3n4&Ct(&A4;G4FsYu3<^-l1vQZ^T zVzyc=xp_o0?nOxjk2TJ*C|oySOjJ2EPC)l6#WAM|QYVtOt3WBGQ}1h<6i>;9@Bea zAW||DOg(gRAQm98Gw?%G5DBi+B3;JDd}P53z=p$c-KiMOky^5+%uCfpdLQ#FgIC6m z1pc~~cAdu%PVwcff9JtR@$6gFG60MXYDuq!v?pfC`pPe05sMM6cK9Gy%(Wr%g<^*@ zTEh`Monbs*Saxv{U4H-pr{4rvVw6b7=dFWxiE)T#G}}$L>uWYP&&7==q43~hD$?2p zDdjV4=w$YvaoK4ndG_(6AN}#a_6PovKk}hp_`uy8Ubo-BO3cKY&_&v54&y9c5S|M>gf|L1bJxerJ6#_3?S9{`53&pGJBe&N3Cs2Fa{tWT zJKpm4fAbr^^*bLwyOA(&L)7}v9qVHTaDu`NjJ65qW)#8qj4rBtyfGuD%0M4_7$G>i zII%G}X%9M|Ln0mX(qpLEi*lRGu$>McF)kuH^~bS@tH`=wRYpJFd5Rs3j{eC{ve$?i zwTzc0_6Mtcy4y<>`%3?QvED{g+-W(IxKSDBM|miAXk&g>fvLd|ZZ?9HR=SS?)!Zxv zfe%}z0A;|uPlE~Pp5h*h^5)Y(b&2OV@M5x&8A;#o5ZAs@e-6ZxosdZ{l?t;V-!=D$ zxR={0a?l5g5Sr(b$j;rDJVQew4Wt}RRgqgEQaiMdM$0z|SGJ;G#p zaOgX4B-7?-^rsxSURIky9coz%^`3A2mX0|FP2>LOugf zhXWxZlK|Jr)j-pHgSwKv;po&~%yClYD-ZE%%s;MEJl;k<)ed2tQXUMCR~m*U;JASq zr)Wb!r2lncyze)&CovI*3}A_f#Z|k(@zuc0lUj=6nuuW!kxQgdFr3?y!f`~^JCw$4 zxVlxPr!I$Ck8v*;5i+}HChH-I5S%J9#k7RBAv1RvvENuki1uBs5Atxm-d!%A_{`^j z_&@rw5Bz@7n#n1-T+}-RWVc>vg9`{E1I}@?ZTA zf8_I@eersg>viA98&zq9#qH9Ki|4Ko>E60w;i;r!?KUv|oIb5u9dw#PI0dM%;?Y`7 z)J|?K68Z5-Q+_%LDN7~lGQRc1GzW8KdSH1Vx{5H#<8AxYlj}eBz7KrQPyFP+^Pcy7 z^z)zFw!6#znB?)!j~^~~_m{^Hmq+)PNB5UU50|?u-^qU2?)iP6_{=~0i@)@_T{h;e z%NgxUJ}tJzWE0VdS1V&#ky~{J0agE)QfErtL&in%7-I&XzXSda1Wn;<>nIpsQz`{D~k+w8Dw4JeRetHkq zIPkpB)n0upd?0(vmWIg#Vdl)Tg&m&xF*U92pu}qi0xIpNvL2%e+jlCQ>Zku}5%U+e z7$|Ra_sBmiNJ^UZILXH7{&a_FN*Ay5R1s?JGHgEF26xwW^+W7_Q{hFsc;Ci3PuF8f z{3+2R6z@A~Aar|2N*l=!6W79B5qk*Z%sx%dd0;oYV#*9GvS;pF#+Z-I?nHW#jEFe@r5|6-_8XX8p|?dQxL4SxV%=S~_rCul|Iwd+ z=eE(d(Y{}a9}!*j>jGV&7&uP4Z96JVw6ieLzRS)eB>Tp)@7F*77k=!||LC{>uD|s= zA0DpTb{Y9!?Lsw+;VX2b22uF4F(h~{r!cbRGHxD!2h*6G#R6}Bg%8B#8b?wasvt*-<2C5apMaEd$ZFrhlzA3R-PL#Do+txXK%@w z_d__SGZu%LNT7x6(Z>4COl2dT!|C_3hv^GA#jO2wlShbZ&4?BmZ{I*9j7=iwRd-3X zC5dMZ+{Y;c#eIAlBbD(vpdD~9s9e1KHjT0B)7I(Uh+kah*)IqtnAQx>qyr2p-%Y*h zQ6x27iKnl&biVY-hMk==V0aLg95=>Pim|VLu&JY`Ogu~vS%LTbb!rK@X|65Jxq~`S zyODJ_QF{WDLSuU}qB0{e;}$?AP9#&iohHRT3>}#Y7D%MB6h~w&t@SlVG#6w>eU!RY zy@`BWn4|NPQf@Mj!tPB(wQJa+IMMit`GKusO>)a-rjel!3{fom*eL-BF=u?T0a7Ak zrq5Xcjo5^fiLQi2F=zuOVH$PtCmE|MqR={a?A;G=jka;MuaNod#8cq89G-0#4WnK1 zCKu%}*yoD7g(Wnk5HQ#-LM-4%;ZM+{0+V{l03$a#Do>L-y0Jx>2wbk;Yc01AYcO#G z@Qsa`i8tOhestMhy}$n0PyNDsfByZ?e$flNTxh!xxBs^GzS1EY!#yWF4{2(LH|Q#| zlk6n-8$G$uD|eSCpZ%4O{ri9JXYTL!T}VWBk$tEA%J8P-hDl`K_v^mzd%ot)H3)Y5 z|4-#mHY9v;pt%ynH)(uefunmkd_O!ugjX_C?PZ<$^)DV?5U2^!mFP-xFVYtAx$W}8 zcKJ^}@tN=Y*`NK#fBvWc+NVD9AWt6e!gP7y?P1&Y{=I2#^2SZ@woNVX$hZpZu`R+hB!Am9Yvx+X8An!GEpmftMhVbj*Xd)$`*$^ z5;HG0+37xLo9! z)nvTUsB2bf_qHfwU-6*yoKdK_+=*s7e6#6lFFP0Gr`f?yTPzrNY^>GaF&65iiJ>WZ z-pmv+Ko&9;Y{12NnLJOwic;L^Au+bLRDX#&IE)eUuIaO^ZpBb%V^)=c1+@Dd!DDcH zW+PEm$@ZUUX!F!rpkuv*C63jM|8!&`!z0@gyGys|2ASJb@_gy8Y)zvU7&FPiO}|Fo z*rmzl1Ne(~I_Mgq+ku@UI_Eo4i88mzn(%SlP*;;<4E9>wZgmc{+Oo9?54|FPwJI1K zryiju#cuHu>+IESe$L;pgIVgbfGh9UY7YbF;5SzOe)Jy)@bo2Gt)g=)V+Zi^1U1Zh z(0U1NvDPDJK3lZK(}V8*e_hPvGvCF>>tu;5<&tM&eJC8cCmYL|Ce9a(VP(G?wpa-( zMit)8IXSVw%(M~H#*gmqKKa=f|LVJcNuJ#ETL*qvApm^1D(k$!z( zACc!ya=q}wCJ(Z0Pe}gCyMOV;7hih*_0Nk4^G4kFWtj&85bD2n%G>am!IP_5vWhl>gP1&XIm053m(w2hyLD2<;+wM0c0V z&%FBNpZeej{=!Gz|EX7BrhR|J+vQ>3dB0vRdmmC;;^vt)X5npXA|&kvGuP|3%flW0 z{O3Ra<1fGXo1c3@h_|+5&^q(GJY&3LU>yUQ&AR^8eH;KofZ-RVHtWSUT;B~d$5v&` zpR0-alp~xP$BLrtH=_V`;eB_Q)*VC06WAeu@fCo5zwep~xVC^FJLmw*X7Lh5b0JVf zj`P>DXSJST#O;=L0sBx&JPtGtf;Ht)1*PLBoCj~o#QJ50Ma2Vaa~BkpeV(aF^*4lz zv#(n~Kw_YnD9VZV5#ie0HcOlxY&O3eH@j&1OCwoqk(1l|%g!2DHnMpW6F~cI;mPyV zGN3M_k(wYs^7&(vEdDT&^L9z_Hbf3}TxDJdfNdoV^AKG574PW97?gRR^ZC_f(vPuL z|M_062Oa50HwjkSL8XEZuhKM=f=+iTx@i+72;(wGHsV38CAfE|;k@oRtT@bq$)0;H zv|3Y~dp(B1&LSZb&TAHsvvwDw!dPV*L(CilM90>BjL&qe%qD6ajM^Iq~?2xm3$n@8fxs>NAA#VK|n;0IAe{sEm zjf^Id=WXG&m5~Hxc;XQsb_#52=22CV6wB?fG88DyFe2!0g}pmV3KbW;fy}$#xHT#R z43uI?ey*mqpT_2tX~mA(wLkIk8q>YVwYxaGA?C0Q&^fbdaKI9iaJDy*R&M_WfhhM~ zM;GRXS1lr@V=^UU#Ltoi0Lm!k7LFwPl%l)}2TfB2J+HfE-6<87nuPPPke8#D99ylvav-5qaR%bZ-V^5lAba{qAu zaD8~#ukGz1*`R$e<9SV>PkL>JR@DDO6~BT)!+<})^$kO7PB?$ZEJIR0J@nw^=A!&zgP=z~di zprn#k*Ql%hghAR-j}Qq6H(1{)j&BWYNa`2 z;^26|ImlvL{WR-QG7oU;CXe40^VS9M)+w!G2Fvz4YdVoDt5WlP!)^yMaZBk~;!IU$ zXPOwhjERAwyY`R0n^c_t$|P)I|LIcXm-|DlFgzDL#U^GHxjAy(rt?uRTH9ev+(n)= zALp|CK0#pjs8m%G@iVGjVk$(shmT%Ln0(Qf#GV~_PkwQ{LHWZ%wPMZZ~4Y|Fw14L8)ibx z{BVE&v5$ZHi{J3N7hd-~5nV3y(yRB^>wY2PjW3t&!gEl)N64l-t~wTxc9j62Z1!?N z(!>+)(CW=~!cXF6QC6+7>eG{d0>2i8k8q z_I-cvEB703(%)U#cTBtd^Z|rX!%jkz8rF?On3R4;_h;JeWFsa_X@>|NXX`?kqaV@u zPM0dsE#jpi?NQW~BluD@$2tajPBr$9VO9@vB`_kKhfq+EMs|kD`YKHJBa9}FqUrlm6mysL;84XmH@Qkk5voKivjwqSQ zM}-Z(KwygC?IgO$Zr2^=9KF)0J%4z`Wn(?hYy3SZq~oMC{Zm)m)s*wqcMM1)D6+jM&LwL%_TkyfIWwH$VN^-juQ)aBH}m zvkiRHnzbW+I;|^6=A=-J0`UyNv^($bS5}wOttnxnOdf_fb;~(wIE0TWl62;bJkZ#& zAH5FEf(p7|NJ=LcIQBipQ&i4VSRD}_Uw=@y1H_rxX?ltSBO;BGF>Azz>ylkJ` z#~4UJ2M8Y>ht2`dp=sNMaMHjZ)k)rnWonY-R<6rP<~umZxs2l#^FW6+r&V#MiK((? z8mEAqhd|Ymb+&zaS1%a4ohByHXUNS8;%5^EJ*}%hI-&rlKv=)}7;uOmW8$g%$2$&> zAU)oMgf_n1@vASs{MX+5A>Oua7v`DDX+QA7e0k-`lRx^;|L{+~ z`(xkto4@(HzV)krE{bTmXubEEKQ_0d( z=00yJn&dLj>Rd~rZu=H#-9>iqP|F6^XWoT`cA_f_G3{*~nV!FF4@CdwXFu~V{Nj7w z`==rcU%4Q{tO%L-%&-%& zf5rYu3)2kROwXNectExYY)%n(2F9=@D9Wom4mLIKhRAB@H9Wn+HK);s-B}Utdny`} zxI|drDNQk6x-bjlKz*K?$W2a|H10h!tQ4=V_iPfjD-OXJ$L+uw8xYN$g4#(;i&RBK z0&h(c!Y^sHX&0iAkBE-K1>u2i%0kDhV~!*wF-P~q6uYoLa9VD@4zY=GRF+gqgJ3^o zJdt$r#9U-JDQS`mzm|eEdF)4=LAEDyB~*>xJ|~-oaM)xHwcAJALiW>3pOWd%;)ZFMdRQA$7XQTrHoG&bryH148vrx zl5_d#mWa~(IJUU8KZV2I7YVzaUb-T(JQ&Yn>q#rnuwTwEy1b@IdFUiq5Vq)RZ4Olb z+x*=>xu+)&e0fCIC)Dy3G@vjE^&Id(RI|GRI?gm26K%rXUDI~AU$39~?5`5>w)LOn z5axZC>s3VLvhg#IA3b{E`5*hMzw|S|@X3Gu(O-JQ>$bOiT z>F(j-BHKlXX=`t>W!k0x5Umg(oxx(ydNA=uOhPP|on#lj@@3mZ9_}An7y(&#TOw!( z3)k~vBE&|C)C%EN?U>Vf#@HnmhlQ~cXgXt@{8>i>u)%OU|5Aypmz=>eKGJ;*zCjZwS(32}{iOsR@ld*{oj zGnGknE?oDkU7virel(TAz_gWWEk3tcDVb^YM-Q*J9 zr{`h{qi&uYS9S^ zNs> zwmrH$7QTDJ+rG1i5bqu9N=tk&2-rB4W;zmLqK&)RlnZS{#Lr(Ief2ZXk?aa|I1dQI z%=Bbx(|54WpnA(<(B(Y60Ooiet2cOIr53RGJX_5v^- zA_{D18>`v9Wgg#=iPIV|w;?n4rAGh|#--QhJ6}lF0Z<74A_8~JAsEN8_u&-sGtnLy z{92YstiCcqcYI{Qw$y!DI%L@-a z%oLf(z*Gy<>QBuiD=AKL^AOq~x7*E#<(LK#hM^5SfP%43pd<<9q$@E8 z;u7~06*cMWwjtM3bl?TN+dA9(nV2q?I~1MOBxgHckrlwkeL}A422ACeL@-em7OtyT-6>8AZoAt^9?NxmczAf<$3H_K z{={E>@5lbD|LW)7{Ke0H#aF!bxBr%J`K{mi8@~DLzv}U`&pvs$-aonDW#4$aT(-+) zqb3q$-V0q#8-~W|+&TlDZ-x}YuvW8}hCCoHq@hkq*)$)E6m=33(ljsFD-Oz?fJwL# zJ&5o|uiq~3ed)=+@R1My=?}l}1Hby2ecvD5UoUstRrV|IvZ=^5>O*=$2{3mgD41kt zxojdtS9!~G&;RbXy@_dO+Hi^;mowRs?*{m7ngc^`rpe-CJ|NAed+WZ+8!#QqVIW`H^{)@Smjy7GS+h+ z)Sc60iS2=HWuW$nW_et3&pf6Xr#Q(F>^0d^@G{7n1gY$s{=%2}(l5oumcb3F%1(<2 zKD3?x!n~@gf)mAF0Rp^f1g9_zc53y>qkJO9(?!(HIL6`1Ht1Kh!yFu-nMwO3*gpF& zlElUmUY#($i~v)CT~HDc=}u`fS7X$bb95}DR-)43BS#9OeRJNY{((7z_|usKYObiM z?8bo-u6)zE+GZ??c34t62?xNPL6rMfNyMBW(}4$gLvy(O!ZdKHE zvNFa)h$jWrQ#4|hOQfb1I6Or`jVjM*Jgu{K3t;d`HSuG<;t?S*|7y9cp^Ud2Kgb4n ze@DgeUO*JbzVmuKj=InEnd&mlxivNm`a~WyjGDPl@DUvsjJ~xQStDQ^Zk@VXs6+k; zVhQ!F#uwO$(nVTlV1)eYS0^13vvycSr_P@RGtq<&Dy30?9L;^8xiiJ+gZeR_D~Vgd z(>#U%VqJ{ULo@E|bKolSzYYKmji5DmX}%L;WI!{rn#TcCRf04R=T>&f@5fN>~ z)P8l8xu5db?jFDK4PVqcmAzYWXI?Lt3-M)tkgLePlkkPM%iZ&vh{*N&(NBN+qo2Hg z*Sml5$A0vu-u#9azUG^L?eG09-}ZgK>6^d)YrgV@=byj7UhnT88+4%WU;>TiwsnPb86c?X|sTGNczx%B&j^#4B!= zR1Gb{MxLvvgWPYjI>PnpJC~Qk*?_U!Y(^|-S%dLb5s~ZEVVVeW0Or|h`kLa>oBKm> zne{7i-dPQWL*@Z%h)5giJlIl%c9w62rz7{<2^kyPc5i0*G1&0oD9MFA_pSBBrdu(<4lI>stWm4c5}iEH7dM0yF<%3{_RW}FP4c=n8O4b-B6ZT!}vA8&RBZiB3NTfmA-2cpgDm>LNHKrKI95aVi5lRmP}(g>txX2Ar5=A z5BOHFNjlfYJh;5W$zlWG!1sLBh!Amq+vqIDWuudIM06mNw>hjdy_J-v#4@!*jIad< z0bJ$`Q#Mz24pT53OSMKmv!-N&Z<4@U8d#YOiS-e=Ph1pb=3KTQ&VWiORSqW;MXl-8 z)7D>nj{|O?nKV;pR=HB1?%P&NyqKG^iFeW!0pKL9cB7p}A6i$*4DT{wbkkvcC752{ z!J&s$GtUi9Q04H*D8_o(u&+h_WfIRkO4QXwSuIKYK@Bp}Ao_(*BKOAGMefZY5+P!G z?)m5G^)FnXyuvKBKadd7Wjqxk{WhALBK+o+22{!-w=cOc@3gfqEYRaOyzq{%`Z5vy zDh+qe<}Z!PlZS`>dKJE0iLZNyYINO+E<(1EV_OtK(=%@bjkNoVL z-}1(<`s%Ovo!|c*-~T<|^f!IuuiY+pyX>#L`XIYpF5Bh88xNeP;hk44ovwLp=1mjT znZ3i3F6d!4q=tN6;Nz(uJT7E7gnA~M#>t}?VrdX~CA!M^UIo+L#uwWD<4^zUKl{t? z|LISB_;U}hkjUNkm}D2>{c@3Q8ynCvg6bh}V%ap`CQ56ZOoDai#Xba5}c)F!yI5J8q&%sz_ zA=$)&*sqn%l=(>?ATiztxJY(R zME~$4f=d&7oB}uyfUCr?rH^;9Yp>9X=`>9?aHdLPT;oAv&=@K<=VVmyt^sH=w8b=H ztAGa#%p_ncp$%v-4py`g37Q+M*+N;vjnW@^WLsbfm;0!CmF)4tMOwQWnan^A5$X}y zS#@@?mf7=&- z%Qt<^&;IngAHVRd$UV`<{jKH0$_h0FkxoHviQyG4xc{ZLyVR1>`y1c-#&7+GcZkUK zx^Ej_SeO~l!(OlQ(u*%&AFkW>KqMraM%+Z#ecwrBmz}rm(KCweGof9DVUrf>f0uX_9C*~d@ruRYik+OIO0_JDRd%u$5AqyRSeJlch}zG{673>F{pVUX5+S~0CgvZ1^5l>I z@(2HmkACO_FMp1Rx65N9lKr9c$D1?)GAT06+}WIA_(laAW!!luBH6CYyfe$?(cP2l z{(HaVEkE?8H;q-GZK8KS9q!!w%&OQ)V$G>{G0z~HBMu%}r_7m=l%;h^)0!!ru+Sa_ zLQEby=^AbO!XEVD7^au)+6NpMNm%!3sjAF5GUk|6#)8@OSp#FFy1Db{Bm$c8AdW6$ zkxJvOuO1{3{Owf};pJTze%U@7mBpM3Gu0C{-F*+VOjO&r;=&GVHBu7T)!+KV= zP4^RP7^cjxdp3wBU1$zGayi=pANwW~LIg`IC{)(r_LgH49Epd>ZOpLV)Q9XQ*929+4+K4uq+jPClkh7iY^W59QNCMUPet%2E$} zUJM_dcd;nvn~0soR@GEU4Q794T|;aeYHE+uptn{$-i-}J(Bp9P8~siyPie>6z};O< zU$>^1LzGAet=b@TFUk+1c>(+QE}EO zAwG1%IL3Im4`kP<{h7YClT1wnhnkj!z-Zr$#|g=8DHwFL#s_IyLjY`@U2f&XE!pJC zc8w#r^?b@r!Ixv>u6<2yVSfUF&gS^!*Jh5^)=}hi2sjR(p3m#d*&JP)bQC4$22FG4 zyu}ZbtW2+%)Q&`UBH8!L#&3Sp7yZU>{OX_muYc=tw--))3?N8eXz4*$jpZLs+a=j-J7G`1nf(4U^$W@qy zW#5>tB*eTwdj6S>ndsrACojL}1Hby74}S7T|FfU@HDCLc-}xP1_d~z;`+o3yzPT~- zb^61LjPAr#w-|lF?(!O;d zPWn2S@j-DgqvW(Sv#O|&5bwl98xxB>+BV+k#aFMt`>kL3zx#?WfBm*S>^l=}BAb$6 zZE7L5vC;+^K>TK(TwVu@k1_C2Go0sQg zn7D5Y7P#~Z$fVX=pc?NBMC8z11HS~u(D?$qGn<%f*V4Cz#JXdHtht`X)7on4FA^4t z(ej{f^c0L$l{7a)GBx6eU;&GWLq>K6ztls;6nU3gqzv5CUZI?DzkiV!v?SDVeUUQU zzTNFJR?*#uQB<5ALc6r3qZ~r<0NY|oR{h>E@GE`mnZiRZ+gS)zU$k*;a`8|*;bXLS?3N%=8Kb> z4dJPK-0`8P8Iw5}84UFd%d^it{`Rkb$D7{xtX!`n?CA)MTY`%DGoO9&-S7J_?GLmw z?K{zhX=^dGXaiwl7TK7DWZ(CzFkd!${P+<)`^>|`<RnA@9gg_&B4 zikn1qFir&cnN>i*%>eFU+WBGcZMJ=*yUVt{vHp%ZzUphAdG=wC@*NMs z3}=}K8g|MQwZRHm$k2s4W|Zf1vJi8Oh{zj(UY{Mi-iya9bxX=^6nYu;XIlzozHSrQ zbHnI#^i>x9bfSHOk1`yZ8bGW~%rS2bFDDPyU z^?0|B%XIGT7no}72RgK!nNQ&@lU1f3t(H^jxj~~nXud;ao}qJ`_!$e&Be>Evoomz^ zM`?Et21(de8gERiP;8V3bM!+*+~y%z9ybIfRbeov(GvlNshRt89-IbMiZ|>`nh}kO z#TUszOd0p!{19UCNQSs!O8|0Z`%`E}2Sr0`YD{ZBLiDBEImQ;*G%-?GL;c2y?=Ew` z1S-!||3Zxghk36+98aihJ079q(2+{&xtPB!d9Kh z;Y4vX-7JD}o>}A8+Cz@v!5jFTmeeYPV?^s@)?3Re1n30962~?GgY%RJx>V;@z@+q< zI1B-1X3Esj0n%) z5HZnJXcyT@uGjr_j~{)Mw{~Nr>gj z^oV4`*JF~1dUhcq+L~?N_d6D8Z-aRBMb9#^JnZlO<&VGnmp=YuKk^grc*j@%zz=@M z@BMAR@i%?TSGR`OhpUk6yD;&#X*z1^)xs&BDXReE#+nN(alV&M3gXyER>prsbQK}u z*Ih2ZD*ONK)1Uk|KJfm(`l(;}+)-PBf8nd>Vssy3ett2KEIfFJQnCN1rW z7ltuRK_s2oK$~+3M6#j9oAJCJfK%VZ?9ZF`FXO_@)dI`_>>a60tC~Hr%O9In+ZRs! zqGfh`rVM0k3r(SEso@e>dty$N47#e&p65iXxr;>jjj&F;AgY5^k7IG2(xEhlwm$pZ zG&8(PTnSb`Eo?rTrBsiIGVf7+ zNM=@3L}-(GS)iiEPzP_zoJ*&;JpYMB;>57;l;UI>M$OEmme%qYc>ohsmk=rkD;Fxy zd~T?MnXpuT^qS$7aGDa*5n<%h@_opg(jSd8gJaSPxC%leRG#eEbn4l?920V!ve-#6 zz6pLmDC-Yv5-MHM1XbQz1?UvgH!1gk5R{8#uqg!f0#k69sX*@~k2n<7Yx)K`EQXM* z7x+*QnsmmZ?`VDSaP7f$7>~xjuyh?wOvQ!zD-AxW{9iRKP-`- zc5(2IkJ5iL&xzx_$qL7WUMl-?=4Mqb(oFVVPCt#X#_or3i^1lejLKQ3J{!0D8_E5{ z_1C}S?f=8y^S%GaKl(Qw^F_Mllkxg^1`pQ=i_(&IXNG%1w6_BQ?Ly?T?{Xpjo^St_ z@A~$yd)W7$2%a*}%)-3ME`Q~({o;o|__535i|kjDo#dYA4g{YF?bkS#B4b`yHWt1< z?7Z=I$Im=|Mjl^3{L;gRf9gFy^VdK4AN=rt`R(8Jb-(|&|E9m?d%yL$*FU!tz53!S z%yf6TTrO^s)gevwe(JIi03JzkSIR6{io@b|L=-B3Tf?LEn$muNWzfEgJP^IWv-=QmcpiYq zsL9wUFdCFDbJQ;yYCt+ros2AbIus*+b-y9*?zrFFkq&fNzewbQ)f}mo!x_!8Htm6o zJ;87qL(L1O;dKKrVP!0k%cKwn61I1JgcFjnIagsKegi4P!0n5~R2dLkuzNbtqGMoK zpXqL_u9>5D=vLGDBorb1X>;a<83K#A0wV4vY#jOMLV<4;D#U#iR-l|T>49-4uD}g= zPdFBHWp=cz($P}x4-BlZd-a;<-{Ehb8VzodF$Mv(<^BNRPKpYWC9@{WJ#Hk(l8PBO zl(7WF>r<6sc68A6&ChKH;J|+@OIlxTc{_)A{`Dz$9 z1JSHaORJSF6xQ_6tnAtBi!zlW`$6g9hIZ5M8eT${S09j(w4TG3Mt#sWwwh-|%dlbnOaJ1~+}`tnvzpK`6%{P;`+Qc4lNrmW5Uk~(RxQNb zFw>vPb<^JU&ktuE3C6rcdOzk(?z*)%r+yA4({(;vLY3CF9JttW0T$O~(L~}eKY2In z8CWviYFqT2wQ7D5kq030z6Z03(6%+Jb-iA{=ylKi{@?jG|NH;(kG}sG-p{Xlf$sOq z)+n^sDKOC<=jW0}Ji6$*c0kU-jjG&)@z7U;Kv0*X#ANF*EZv z6^VA@ZTr>FzxWq_@?G-sEAs5?_x+*ArYz$ZJal;7*i!qNWS%qJ4X~67#-o z+v8{Nwr3u_`pT1^`^69b-1|TJ7yk2~`L^%=hTrwue&g@^{%`-%FMSgcz4Xef*9W<5 z+s53rrp;pSjnz~Wk$*$xdc~ersLH~%@@uDvNPT0PyFml<>_iXaJJtJ6&s?@=nSc7l zm;U&NfB8T8@CQHena_~W<82e7>-B-|Hrcjag!ZcfG;bR_7|^%!GuI*_dT} zc-XG@+jYM@qF0!nTrY2Y{agOQFZ+_;^(Alqt{1-O8KNiqekHlHFv5>ZX5Usz{P6YC zC?nb(TRQ|n_*OST zh8>Y9ClFdpX`g*~00l5!FLJYR`Rx{+&ktEy>mb5bpZ*-gW{g^go zz>V7{D>WdDb7ZaSgkB=Mk=3|}BI)66QKzqx6Gr1Fv$&sj3$qauRVi@CM{d#MqrBKv zo9B<*qq4P*Fj-=Mgh%6zY;(AX8QLpavEq;o_309pJIuDR#!|la)iGo)ij-@WqD@PT z?iz0zv0(>*Y|wWfB$!W_jmq= zUw8NT^3p3$WS6_kwp}*vNyDB9A=9-On+(s~c9vTg%eI%X6j!+>>HV}Eimq;G?LS;Tm;388`@{A6`h9PB!y7hv^-2#S7pBX$ zT~GqjWFLg=uvs+LZiyY$7lL6Ix8y1Y`Oa|W5+-Nvcgo1i$-x$42+SxXw%{E``tKZb zCOmDFWxqVM(tFt!bkH~hvJhP}g@#?9@<{z+6BRM5fz@I*y=heAkf?r{neWLca~qOF zcwz^W1`MVzNRa6)AuNmc=bhCrQ_fzEqYNe~Fl12A+LR=dEV`*aq$1E++MJ$k@71#A zNj_lKn1{1QUuXm7tW@HGAwhjwQ7b*3o4WW>Wk=z+I*#Uj??Z9kWXpAil8;f1JtO! z9q4sbVV&2=ww z&}e~_l(>o<2VH9o)bcnR@VQO9#1T3L(vLQuCVWlL2C!jlIrppY_ z`mDs<8a%U_jY)h)EAW!3)_z+G#5x0EfA`Z*ecbZl783HI!?4oR>tJVACCvzI&=0C8ZaaYGlORBl*e-q|}X zqcv5-;~`MOL+SnPaxn8<%&bS!uFaYcm+3Ff_J2FY9W3-oxYy24=56xqFT?Y(#tbH= zeZIfHKJ)D3ANqa2V*lGZAg$rSBv60S2GAnSf@FnQ0ff zZgdr)>&AS&KD_kmZ~Se)>3{xr{;p@A;r&6j%fLqaFq}lp{K}K-fBGXo`?2?boS%J0 zuJ`-o)!<1p_zAT9yfBf_wS_>^glfNv(8luY>+b0K$({|Z5=DTeZJ`lD=seJj#<_30Dj{m8O2(=$= zX)|_5{P=QtN$B7D#Hau5_y5vg{=|n~zJF=kdAoal-{mShUp8XiiD_@Ct|4nJzubyP zM>4+^1yz_@`gAASw##L^+h2TDo`3Ew|L~W*^>@DMEx+Z>U;Kv4_OQ!KJ8ewQX!=R1 z6i7b3C;H}@)l^JCKgl-f0Le{uqL@K2K-Dkh^)!$-c}IW7%;J2{J=xy9z*fJnn7T*+4Ky6^fWy zCn^=EI#gmlN_HQ*iToc1y_2hgEDs-TQV-I91rMOGHB-HM^FIL3%O z!+3BZ3MyL~>F!S37K6_1vPSpsrW(Vf0i3fjiF2>G7o8G3UlIYZe5Xe>|R?J^Scg@A>fG|BwBj-}$3I{>Hby z@#S3}9=4tCNH&^tcx|nTc9NZBC)$V67nYsnN+Nt=ez-n-{>88P_HX@T|KvaVw|w{4 z@B4n)h?ut#qqO|62=T`6egDV)jz9Fr{`z0}d3ydC+3#s@2(29wXw$^vWOuk$BIyS& zHAc2o#-!{_`-L7Z{J<9>y1e?*EAq0?RNI(& zyJO~8_bWZ~-0yqSTYuH=;Y(d7s{1v>!43QqUtI4+q&j zu|83KlEXpc<03iB@of&XPrJAy7;(nb+bGi>jQ(hwJn~4dJt%igr$-3^#Awf~1J~^- zLZ1Eb=HyhV*vMeyE!z>QY+vIQ-gC_DM0Za!L}$34i9{f)fPlRcl+EfY#F2dgqzBUDvoM6h=X* zNQ7WOikqonYw$t3N&b*JnwKjAEFO*V|WR*9G@)PXJ6xZtDTQnDX0?4JV{7(o^ z%Wtsd951K_sF;j+^MtiTVV+lAw!~JLbuws_QwBp(t#_(ZE?gJOCrtWe1+Arb0hXCF zY$RhD6qHI-TX$2HBeCR?F2|6BuCMLhf~#~yU{x~h>5!KSC$cPYrBt26W?nv>j%ie6 z;LqPTdnBwaS*4wD1=Hn53w9V10);5^NU&enl(8G>N{`S5fIP>84CN8O5V7hKEHaE{ zuyu*HI&SkDaBJ<@NuH5f6&cM)xk$}0v1A>3u>^67uFADa89q6Cch)+S3izqbcB$8| zFh7!gz3}YjOjZ_r@_2jpFxK|*$qrZW))x

    M3OAtpS~F6Orq6|HiNVvOo4u{zL!E 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�wP2Dsx@53P*t&E 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%0DbgBF=e=k13ZA85W$QxDADv$kTo}Bm>c-=sN!= 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 literal 1067715 zcmeFabySp5*Ec*vr${%00wN&YEg~)5ARr7ibax|N0)o;YB`wn3Al=<1-8GWmpx*a$ z_x-%@`o8u3_v!zoCGEs2^s(Zz?71FsRRHZz`h~?P~c#f zL+|=A0Psl&SpS8_{ngCT(g60D0(Lb7v)SkaumKN!0Dyb|Pm(SC&j$biH}3CV62E#` z{(Ub;J1f5Xo_s7|RwGs;VfK*FAHog;PUU` z=za~SZ~sq|GU?mf8`(KPtgY2O6pS_u!*kCUJ#=x*n87BI_9{Ob( z|N3TePbL%C&Pd+StKa-_A(H#K_8_$>c#&9EctnTNqiHIG7T1i~Z!< z>V9NnN=tn!h%u}SSl`0L*xpp1jg!mpenbt*1Q+%%;&FSiJ8DighZK{mif4o#<~S!I z@&a~=i2?(CU>kiy$@@8feSqJ8lS=!OR5q~1Kg$bjp%1bAB`sjpJ*7Ej5GxpYR$wEk zmoCp-EN%E85JNs=He*(H1AT5rUQP}$BL~=!jgg0o#ek8G+fbjEjmy~3kOl1Ub1XfW z6pifk9jxv2AXdiKzvO8mYO3!5lc_aKT1;Sl2-7|4dUp24EKD4{Oq_QRdx(jZzJsHk zk&CRok%ckUPb37H@4GSoAL;eaSD5}foZW9F)B7Jq_WJ~Ow6k!b|C@P!>cIc>_%+6F zrG;Vh8~wI5<<>7cU;&~JPI5>(a16&W_BM z0re|+1&XO#Sv<-yQ~m`LUqcW5Nn&%#X&!F&!72MZ$z#8ThHh{?vvP7~l z_j;rZlOn{*L{x+olLh_04IKmFm64S_>qC|Y_qS*m$SQV@Mm7*ID>@76{SzcyI8|j9 z3PMaaP8L>Hb~YAvE)Fg&*e%yzZ#lJC)c&qJD;A8FpQ9oDvdq5>kB))-ThCajSsvea zfyW^IJt5^i9h9Q4q$nX)l)rniXtLlUA;Xv&5QGCFq5S*;4@8E40YFeAcj=;6!1CNj z_=a~@kmckawl|tdB{-h*f_?fG9qJ2K78IFm&bZC!Ri?w4#LPk<+CJQLh#tl`V;vJg zBKKyd?;wkB9}5PI2y$E?@D2fv1;7HjzoSARVj=Ls(*l_rkG|jdBI56vjNz`+VJ{<7 z#v+S^!hi%sL_`Jx5ky#oSp@%b&jJi&{q6Uh^qCxfVaNowwq!OkGXU!|+c+9nK)}vM z2Fx(ib#Sz2wg%hVu#n%+M}t7Xg7=qk;1T}%jrv#f0|WvDydGU#re~y_pDYc;WZ6X# z4R&Lp^gks=j&)Bv0z4eD&p*f?-VX=_xS9&N3$FStPwUiFTh(Pu;=COCfJb+Rtjsui zahW@MEVzul1-BwWG8%nis!MmX-R}{qySF0_I{YpoT{8y{$uH^95}g+71(Zab&Y6|S zhB1aG0n*q<{dXD|w={CN31bg3bWPf^M6;Z_RVk&A7E4JY5~~Q|NIc=)JPbj#ih=33 zDZU1cb9up1`_04GPbx?waJ$XrR#+q!P9w*#uLuR67WzxtzS4YUcx>2NxDB6KBGX_7 z&7$`=iyioG6s{BU2%R&|BAUm>#)vW7sCK_IeU#~-xS?239IZhQ0soXX@!>(@%j`-K z6uKMc;O8;*OgDIAVCOtj6D%TNk0yc_iywj;%yJBVTMp#yQkwf zvG4u?ITqo+C@?$*l9IKx!~d1Ju(GnT@WRZ6_qVygZh3y*!p!CWP1E!PKK@(!frtQ@ zX!+PTU=EGUI_faHw2Kd(LS(-R-Ss;*^4SncPHbO(gWrX) z`PBTZYi0p0^zmg!Zss}K(_3T%ezaaxS0mR48j0@(;+dHZ#tAg~LO*}#k$eZIxr4&B zQNo-pc;y{?;9T0c>Ba-aqj*WEV7mOnB#%()tVy=#>b%}JBh659Sp&uGb%C46RbU_= zFk?T*Zh`XCeCuaL&Xn*E1$GW>KX8+hF6%UJ#-`L?eJeW1umuHJfHtPc4;$#$IE;fE z6L7zHmM-dB_BUEhoGfm#6Drf+!8^uhCeCgU&_|OKb;(r1W2;P@By`$_#Wva~)!?jm z26&nhwZMI~hJyzJfSF(xeHN_0+BzZ&Jj`tV&fGO>kMfQ&H^h+8zR=}rePG$96-56V z1N@iX;NE5a)c}Eke=7!<1BUm50|Fd*0^JC)UmU7?AbqKGp68DU=z(;siDH2WHqTUTORP(tpB67P zImR5Qmo5%Ll}DchmZTNUiR&+FITZY&G?G z#_yb#BNtQX*qM9IK+U z_3K6Ja{y)8O0UrHM0a=5i!gni!bZ`Jivk7YjL15_y;y6JZHv#z;mBmCp!jy0Wu5vi z%9aF}+>7>lg34+}k;f{@ zsT8l8Unk;ttIogul>GdoY3MrSZtZJbQf$qgw2Y&U{j>d-J;p8iw6?nnc~qm16uEpO z3e=)x1{^d ziDKkp_~fVuU2T7rTCGDnELZDL>F)eOT~v$p zL+I<=x6*DD?owaBG^m{SqumC1lye19%~5cq?@9|Zm&@CSiE2>e0d4+4J> z_=CV71pXlK2Z28b{6XLk0)G(rgTNmI{vhxNfje0d4+4J>`2P%nbB*VL17$P``=<-KGXicM-C`Fw*Po5y zq{cEHFqErY7#XA?01gy>7r*?s zk~nsDZVnzEV@6&cLt{n`V|F%1UTz~cMgwDgb{1{}4lo;+A&k?S^54V#Z%g97ZvK9O z2X-}l-iyIj7b=;Oi%vgr>MaWSS-8jKU|n)burfC$GaDn5duZ_t zj13I{KP!8fe?R;B-T-1~a5r_g1b8SdE+q~C!U_gqr_2F>yJi433h)$o3J=5vz+nU7 zv4MB908s!E0wNM30umA;5;8Ip3fe<7G*nbHya!kq4+-&zhzRir2uR3jKqRD8WCR41 z&nT&$(9+S<5rY_67@xAxJf(YjKL`*R85s=)4Hpd!_bCYh$2ytr7ieM!-v%D26ld^Xas~r#3VFNXrI#2b8vET^YHSCz7!Lekd%^ER#8<`*U;1g z8yXp#m_p3#9UPsUU0mJ#-v$H*1&4&j#J-P<|L`#(@l$42c24f+y!@|ar1*VeypY;J8I9iN<@onJtIT;B5q1i()8|Ni{q>>v1o zi311+E0jS%zUK=F=M4LU$3{SW#EOI?qKK?-i~E?(7X|M{bVg|lDiyoZA-;j#Fd6|h z$1=^)J!?NX``sdJ$_4R%ArP%MG?YJO{lA8S;HQv(Px=px-aq{d>;J?oosZHz-2@*A9U7>V#@9_x zQ}~W=#jd)|;d>;;o^m9~*nX}mrO42C&6y+h6dzd`S;F{O{Md93D-&QUE9je3ML&w2 zXTE%6w%<2DV|w}i+{bVbzc7kIcmWhGs8i0`{2<^Z1~0`LF|$hL>z7KYUW3M~jBj)2qC2z!U&n*%x<6pFWH z^c$7CCnKNi*2Uj1_YKyUGm^>;IaE9Bk@TQ5JQc@zst#~ZQ*w{(K6u?_p!U>duvLpY zyj;_v->sjC@{N-aAco-flKb$>jT>2bD5N4EDRwyZ(V_j4U}M}$iosRKu!J{7io=^P zfnt63m>F+(8?btM;Ev&u1|*S+Rhhywq{QYfSzt7>AOqBlyFzY9^e`Rzom;h{LY`SF zVcN?D&k2-%2APJq+T3O_Nea4jiK?S&CaCzu2(cH(hTrr14)qt4zj^)V3nPH$9)zC_ z&2+!N{JQ*Zf*XSS)qMXH{W!dx&;ABA*~7RXs>_*ZRsI%n>VI+tKO<7?Q@7Oe#5&0 zNq-tu#gFfVLe2B#dN%N=`WYw&OKy8>>mMbF93e(5+LF&P0x70-meQKN@DmH>riXS1 zS&y(Dt0hj{7~ zrNwM_0LA003A@kHg%DmVPtv8q>5G;|@(3o*x1M(UtTkEnKi&}S1P2kF+l|L2nY@IE zKgkVlWW5$TG-{eEDp{^E6;dr5p~6AzQb1`pAGB;s>x}Vt#~fgtJI2Dk9ph`?-CCYU z>lqMw9&1x;HyAf6!=bXS8|aEBn4D^e@2ISdS; zgG>5kwfsWf=Syp`gIa`W8V-X(9d7JpTdK=rojQ3m@xs|a23b)S8x<-a*h*PGFw|TE zm(uXIQrQmIi_0=!QCEG`e;3_IcuQ?N9R$U0L8{TJ4BwaKbg&vBf{7l)emk~^yO-Ew zjc96LSjHc<$E&a=j_3CX`Dz+amBTvcTg0=dj5hjpU80{vEyFcyn?-Ny1KZ5P^VyZe zC-mRkY$Qq_SDIb2Cvc? zyhalRmo+?8vtL8L;zpHgr3o`5Cnd_ zl{fmOTMuL!6MK~^5=Zt4W~td9Nht4QnkBlE?KAPmP&1&GYhMm) zC5p|YQ6Q>Eme?2i7lU7qZihHlWxpxsXJ(vmN8D0Db34DXOjc;7jwOfjcss*gdieWC zsdZlzWgV1={hu14zbt;JkS~{mt9iCbRTZe}KqNuu~*K zOtMY+5XWN`U9fIR#_A3*Z+jgjI#ZKqF76~QExoz5h37GOG`ZSb zadIuZB$EyKAycHp9t|>hm%6uoQ)mBe0`H)JB~NXJYCXrGPc!71oD?l};@mop4*_h^ zF3nxk*_w==-@0I*nSW^)EAl8}=!#`c2_o2;q)oAUcy%5%S?&}$+3^L_?3?XII`&-p z4gPHq!i8CnN*!ru(+S0yEo2E4Aw-T7^>tf1%=ei|Z*4hkrPs0j)O9X7O5s@;_l0p( zk`Ti+`lJWZlQE8%%g(n=tnnN-r|`Fll-tM`A0o2?iolA31Fpm78mR&dFiFC_`?<9J zv%CK%Mfhu%dtLa8K9mELfpmcKW@*4#lRpT_k(r_=F*3_&^qMC(DcnFN28-dLV1vdX zzu^Y)Kz6zK*p|K7VCJ>VN(tgM?qNHhVsHJa-+1xNUD$E-@8;sNAbf zyKwB|gZ9C2p(jV*ugpUN)3QK6Y$^=!yKXqFN=|vm9FQs_I3gkAc2g&zL*HQHMz~0S z(AKtyDPXcfMBvHLHW~AL)lPxM4#I{=0UB>nlQnHNR9q+>dPN+UE1a;$#br zUl+Gx79DAP;^93}uahB>4RKnWIzJJs{E_*ttj84*zk24aBf0#mRo>uH8GFqMOHB#} zt&gO-M2E$7D`Bz7L8k=;8%p?z)IT2H0m?VfnnLiIq_E;r3OrDuK8)@D;=xVV$An+3 zK#|v8>cb=t<|#VJ-F=W(1PC9*?c=B))78geX> zX}e6;iVSfVjM&w4($GdGZ`l>u$3kv+5<6!b8`(ALjeZ9(y>j1L9<6uAP*bYJc6=&= z&F*lsatA=ZYNJXGMbxKv8YgEdObs7{Rvl7FAIX-_Z1{x}xD|$MxMF`Hm~`EsBBLTZ z1JUjCGQKq9*;m=3GmDC;(BV6g8nb%F$q%u#wp=v)(o?62RefVWM>esQo6k!EnT~t< z@aN+DpH=Jc^${KBc4z>MENDNS*UyOJ!rBLfnATy573`si+m%k&N3cOZ`PNym-RnlX ziYz&o-!w8*rKCX6ebu?6L3nvT;U-{t7=Gvb!)Q^GD5eh90Aq6YsM@p_E}iyoc_YkJ z6eK!pb241>w{aKEoRxKSrrl^?Le z9Ip&(QjMRqqN>x8~DaF8j-F5$8RD0roI*U_B(Y9=9q-9WZWe! zcO9+_e<%VXdBz-t{Kpde2KHZNXSg!DT%-K^cO*WB_3`2E8T zR|Y~vWI+Tju`k9vxQlckeB))adfJtf;s=|}7YKGJJ34eZ#gV*X9n%T#yK&wjvYYB zYYh7+V!rR1*z2wn3Wpc-A$KbqB5)qFdz&5w*35d$E#ezZmYkWKXvu+z`#TJu(chj zC3|Ld@q(eB3N7X$VHs3WT=E%HTVmv8WUXc;w-~&>(Fb?tKK?y4)~)K%D0?^I2Z1IL zUJuQMv34awuGxzPcEFVqrbBHUR2fE;?|KIXc?41V`4`1`#$=}{whrw(i&ni6X157N z)D;5yE2b2E3>6+M2@-3{r&C9cbCt%u{B$ZHd|o(Y@a4!Vsc`mF`Z%TGd*Fm*rC--} zvHvZ+D!i86_o$5J_9fgcHKnnu)#ZJEP(VF?76iptcVXURU+A>xMAG}<(_$c^f&Ey@ znhRn3JXjZ+aU`UNXsV8cNk5<#FjlHDohe)&|H^ZT=wap*I98=xom(y3k=Ht`5g4@` zF&UIIa^_wTHXFqzDm088vC6s}ixAz5J9e6ra;i_9XBJgd&+2aPxm@)4_{y}tx-1Y< z8IHN@Qz`gWR^;uBl9LeRrf^kxHR7>k*TJG3n(dhHvyV4Y1tAr*4pAOQdToPfE(u0D z@?zyDNmP3*l!5vO4L0&aYwjwH81tG>JW7t7mjf<*td(4{+~*%GSGG8)V?<2$zIy=g z*s|Gd8~%_(sWE(lO-WrMMHOT38vSrq^~fuUD+BX9Hb;Z8b-K$oZ|NwgtCiYin@inEFn!{L=7C z8Y#>g#kvw4mv=t&_kZSPO-(g)-CW4b1o{u4gtR58K;&|nqQG0;A-9ObLd;OES*789 z#+hr;?~oZk&q>fp|J5EXrGHOaI~kakz+r&i6#7AJw1gu_SS(w^+gHx|{P zA3H;lVh*{Ua!-A-u?$@1P>lAG1(K!DR_8o~Xx|*(q zs`0@CVS1oz+KZMe39&4w6o)m2ixkJGwe^}7zwVC$)J}N(Qex&D1_ll`0JGD{VFf!!xG1Jzs>>2_>8TypVUmXS@gZrvu@C@m zRTVf|1QOmVCOJi7VF>&`ygNlFak z)R{!Z57a*lRc=x}%q@$cT%%&C%Sa_TCDH5b9wV(nt55ggmgV>?_o79`)WhTxC`_)D zw&S^P=|?RK_YG3bWsEi3El7Kft?*VeZIc~|Dax60%9%1t>^Eg!j9A()?=7T}=D#*0 zQJyUj7IS?>k9yv##QS5+Oy`29WcsSbZPK5kNT2g8l8$LZ6c6=r|znJnDnsiSKg?Z>0Yx` z620YzbD(Qi;nrklh6e`(?rCow8-zBRXLR$(=NR5p+7hPB(M!Aq`s22~bK%`Ivj8g! zIYl9aiX54&o~k>gcV|G1h$K~(GXkm}G%dbMe(+%8oa2(5@LXZ?(xkzxk^68zZUtQj zS7|)GYMjXi9MI;>L;4XjU;a(INtB{UKareF0*Tgs0;Cv1=%$4M@d zg~;x64qTE*rcEeFoxeh8ojroTI5ODp?rHm6Q(IxqIUSS$Xqt^ z$a*PEA-L4<4QmYw6*=FVGof7er#f>J_`IqK_A4E+E}`mB|E!wo5l+n)b2%ch@-;KS zz*kPI^i#w{0}t5J_x4N2UN2klmF1xqWSXh+>LlzfmV38pc<84yhY4_naOIf;qT7k|-L1p@ST7PJC?hke(moKk zzAo;YDddeCK00$C(|=BIYRTuRr}1U<+4)WW`3k>jRWj4Xn}XOW!%*2-#SVLZimD_2 zC5n=zG)$o?%Y4xSt!BJ=`euC>5uQ1q@mzXzY|92ur){#C&UBJoMBMNyXNJ%Fe@KD- zrOj-R-O^G@ zE-cD*jfd`$t4PIc-^G=KsCc!$VjjS|Xe%70h3uXRQd8Dc(=tD56;C%xh)Rb)T5`^N z|6aA{?dy~%lOvPe?)D!AT+G) zvMGr9wxa|x$wkOBhvU+-Pm%A&azTur57{+XS*=NU6+6W#6Q&n%i!`!#D&{Jny5h;i zuoIyWkux%(*v@i+VI#_|%YHLoqn)zzm5)?q)u>Lu#bGtu%s%WnNWrU@t>l{0Em`x& zq>3}uRNF()x3OfNssmEKOFBe zPI26e8``rl+Lq`N*xEuweUehA8r&E2Wq`e0UtAu!gvXuyNHGKCn#g#?XEu%K*w2%E z#>xZRV4hX~NbNuDYOWN58#XMjNGLAeClc)MWm;tMdEryPEG~y6uRJI~6<=g+dL5N= z2Y|4p9hMzPV^`0<(4(kB)@#GNWUs<3#6Igh@9Mv(8xfeKTJ{c>i*dOFw2z3}MdjwQ&%_`J={#V z>!+Mvj8O5mHonvkt{Ji%i4;{v6xoKc;W8Lj?CVv%Pvd*Wr4BuhhlNdk4#KEP(?2Q9#TXF|j%W;voZ6ol$6r?vf z{JM25dF8z-ht+CLUyR8Y7C+aCNi`~9D{1;C8u{>Q6&lc#%+ zdqI%KY8eN{VHp-;p*CKj*1+9j6>#6KXV}UC4%B^#(679oS#ngifBl<2#+$e7Ujr67 zO8n=8td=l@Rnw{Kr5F5?1v~+)_m$ zs-G?duvViY)1khrx#JdZVn~S?M@AO=0sNoJxV{74p_*8+kKz|n^@P*+OKrN|C?-sK z&>XozNxR&fYB-n$3$-(=BL%EY=Oy{=J0%bt23VsL6S@*KYVFpYg~E@b_UM+cbTE@z z-_7Z64@NOErPJYggnwAW?R3$-*`bj=<0CiC&L~)puok&VZv<`gITe7oO{M-Q_<1LmZm&IPW;p$7rFWy=TOS{ z056j|c&L%*4$#%qmU#zIicGss{gkGxHIKzvQI&YSO$y6inTI4xkl7Y%P9+17?X`&Z z3Iq>Y7J*BA?!7C$HHd4UUue&KnFUh$^x)R#QT2k-955(}d^=6R7pPm~X< zLeSdqN3*<~yk5TdF0eS4P}`YZA7C-%D#6!EOvZW*ty-!$Y6@)Z$1T)~D{O|3 zEa0qeRHd}d;)&qxV0$9xUjFMDvkCU+tB*z;sg5@McU?0@2OYL)jT77^&KLGHi%dd| zl>NXq%^(kjSFw?sN8Vwuq?Hl3>`EG9Vf4$Sm!<9hcyf2x|K2 zqZG&LaT^9x_L^3|GhYOq@1ShE7UT*rRZ%N zil(yO#N|0LYFTfp^|=G6Wx1KLw22=tUQS&sBDt8z9!7>d_>kEaJo!CF{JT^dSslg3 zDZFn7a+*>>9z&VRHo+&tq`ikfB%R6*NL4OzMfesbcuGjF)ea{E8P^ou2{JxgKH=Av zc;M{xpzZD6WU>R2znP2cprfJ7L7O~^nK$;e9&G)W7GBY?^4LPhK>zUCfEqMMgeL!K zk8I8V+fI=d2e_Af&=nfAa;1mtVz!}D^JwEczp4CnMh8_II^)~nri1JC#G4Q%fKxLzdNx+rm0 z0xhmt(pQgbRcBPr&~~QIHZr=bd^j?7In|Pq$=U5EZ+WS@mzx4YaM-^skXERw58bkR|D0Xn#?w z9&!sZPqf@SOPPrM+_|zcp8Xm}CDOCYfZso~Ag=&zBxirHjFE{WD#9COjR?DFSDY6w zJV_?I1!gn{3Tn2wGS%Xv(2Ji)hq2j8ogRGbVjZg6xm1N97!1; z?s!^V$C~&gQz)u%>oO%rXw=A-yiYrbbl4x`mQrDS+>dEsV|wB7QD*`yrQ@T^Fn(&w zVH$5QBA`@ELif_F!+z*+=iAw3==ZYl!htTDr#c{1`CBFmE z*ta&FT{e9i8-vO|y*53QpB26py(PK>lxW@oPB}kkL0JND)qNox(yzkW3fT@fC-B}=<}Unm@_lslF` zo9TRRemJK*ujdlE1)pSm#aQee_#(Z|^Tk)++bgx8=#Q%Fp*gi_B33!B>H@K=lRo<% zV&Df=nX~mX0f|K418^BRGzWXPd!$zL5H0}t;GyOfJP>uIfd?iu>Za5j6jagOv|vsXlOCE^0-+&62sZhspUSNL_5EO0v%1ci2#u8%y+^ zMDs5YYlny?E6EG^d0K-Eg5>A3MX@l1T1?QQTGx9-qfZwiSqj!ET zD$Npx`ik&H02X*u==%}ws`$8I(fS==NS3>F>4om)nUMEQf;G5wOhEhsrwjAzOxLp* z$re?(GCQeFz?0}LaPcZ$RgLmWTKm-jkuGdb7nRpc2~Xc|2!JVvQw4crdZvd(o zd|5TwO>1fuP|TH(qSYAf6oUC_5mqUIfOnVVrE!Bp(PF-4$fKW@4|Qs1clFz+Dope2Rws$?p!k``uEx8D77pY#$YS3l3g5GopWOk1gi=Qf zmqt0R%t0GON`F&=eij>T-BooW#In^B6 zGra9uJ0%^g;0ko9@|zdmd$yeBw55l>2@*>w3A30A`Era8?|I`KP>yOZWuHy;R}@F( z4nFO)3kDnC01K(kBWsh|{a2iW1XwMPkaY=bxg)G;8`l(!55$oAkjf6&ztYk9qlY{pBmkyqs$Q?N* zds9QdHp~cz!-4J36nf;Z==n#onfyyYnsc5Zw#G_ct zX?znKEI*HG{O5y1_rI9IJja98CFkq7L6~oz+`a=)DJm~>WFBRXdt2NAeqgzPZyR9R zIuw%=oo&BCKemAe*s3R962^f}?wPcaXzQWNrrMrl20z)|Tc5VSkbgDSBhCMT#7diN z?MSfxSoG;EwS}S&<&wYux216_88s*3R}v$4fKt6{PnWivUf~T+eRT(iq3Kk?qmoJMT#7Xls!)nR7e4w585yIzl~gRK zXOV}fpQqWC3QC|dVVYwt#8AJx`IPu~Tf#u#u z$>Wwqs<4r$W$dFi3S-FxthmXedpHx3!JeXw`BGn66e`r&(x`Hzr#J4W}W4E zBaxr#<10(y#1>SVR#(Qn16x?xGjvS4T_ETa6n;#PUtomV9x^@sgNhK(f zwC^x=APFc=S-~XVE1~kclB<1g`|jJeD@K-=zV8K|Mh|-&osQ}7iF{-|sL+FBGJU*U zrXcFekF?FIytejs(0q3!d-xU0Ao+8NiWl{)tn22wpNDS}h4jd_VU9lib=oB#3Bh;Q zu$xJk`^h{{;T>_nx;)^%^?NVa$2M8mDB;s`TO;%-R#17b1iufrZDusqr!uxw=%aYP zJBU|mA4OO5kY`^AmN6Q|3YQG zmvJzqUZ>a`L{M*#DC7qir8G9ho;9;1BVOYW~7UJ_q7Lbr^lCdB0=d~td+S`Lj8(kor#3#^z6?PP$cli_Ko4pO^oy6G9O}%OH zo9MY~r#nEj-m>#e7}w$@+=R-7iKACwQ=kWUMUT)0X;$X&dyTir$~@BJ(iu@+(2SFh zH`+x!>ukZ(eK%Ts!s0e1`^YGzsP+RQXpq#QiV)hwnRe2i(_Z|6y6cn0bEBm$Gn7>x z;NqNb%+qjXXKge)+bD*)qaB94U2DtzJsQ(u%Qa1dXt&I~o-Y>&@LCm~7`SCM7izUb z9*R(WM_X$^qO8m-_6{^qot?jp$Y~tcEmDno?ZC#tODK;W8=tynvnT#x?yaoe3f7J1 zYwyiq22>A|SHgiFd)mpZO8;~+?Oz5Zu=8HO!w~D=VTj7FFhuV@3|SzAg&`1F7($(Q zABOZ)@V5F0l|yZs4vU+NWhL5y9x39Ns7&KW-(0ccth~~;XKxX_Dh8R|)c7Cmzu4#& z^^F`KvJHEMm3;>=Xo6lI1zp8^516&)jfxt(Ty!@5U=X5%&9KEF?TyA(aKx^>DsVVI zu*b<%nLxoLdWjEW@CwJ^m^R&WNmJ z{KMIE{)ynD6MBImRYLjRTi~7$^Wj3;N&|WMo~q$-RS5RVn-bD+pB_o7461i-?G4K+#tL)3j#;kORJ^y0p+j1?K6V{6 zE1-C0CXJQItlaFOyxgz7tR8~f?nPvrBw=3~*J916;ivy$TnZj@8`%amN#p$UWFQ;G zK+YXt;+s|@}AEMXZ8TJ#A zJEOfi#d3uG1_Za$&i6hQ`%t=KxW?FTWrfLOca6i;4WZLnILF;EetwV{JwW9{Wl?q$ z7L?ZVaAWy4Y3Yh*-B2dQ=)=XNp$SA#P2gsHFEzI*9YW@k{JMajk?O`u9on`E@t{g? zuOzx1Yc!5T(vQaZOqxcHO8Oq)o_ykma!P^zpg^|9B2svHu#MEyszX3@m6x`mx{1O~ zyS$LC=$k7Md3&@UfC`>?zy_h%(ZIGi>0G6}>MUa`u_BoS%eTVZ^T7hYO4XMd7aUff zlJzq9eft4f?oT{){o_T1-0tPB%)9riubKHI5im25sEcelAq2MMB1#LA4e0Kwmz+UU zp<17hify^|Fg*kvR}P?(IodgOCu;V{9|Z#6ficvr_S4C%I^DscYJ95^c_d!_-Ywh$ zdMgap7*MwZl{)&D48fVg#}lF#3ZC+7Z0^c##0ptEvLYa|xk1M9zDdFdhN&iOk{boA zytF5rv?EzDUj^k?J=ZI`f`mxK5Zl?hu>$wvRV6SKb`=BRb47os!F-pP0+J zb%jx>H6I>AP-A5|L!IW@s*~OfC|zzoh;Jr;ZDi6rq#VWey)rjmEeCl#t+XqIWcB4l zJum;-bWfGj(jCASY9r|XR9KyJP*rnoJA&pl;k!I&7y++<`aMq;TMi%QONAa$w{gq-p1qGBh%akh!yP};SI#+&PjF|TtEq6mh85)^C^P=mU>X02G zz?1a~AGXyT3>Tg&yS1Odcjhy-7$k?nwzV`S9eQUsG!Xe^aaAuaTbuS1>1a_>sb}H% z*m&^AksdLuttL?##0~FXP0#I4n zl~e3B-8|Xi^!Sz6)6Bwa@Zk!?S#SEl+1ANGA17EkV$C*Ys(DbiDT0tGRYyI+UXv>F zCMhRGK&0ULYgFBF9hD2TCD09uN|${JM_o=@!YR^rS(}jCO;!R{X!(%v1f~G)>4{<2 z+2`o}b@g-W$?K?eMxvXz#l)ds35k3Dn?1xj_y zgPwXQ9L~7tbrPznErrnmsw=w(s4R}4EJm>1^@OFyB-^x52VfoHs!PY6r!Xlq{iJ_z;pVnodqgl=P;mm#rU71H7{wC{Vik=uT z&qGOxu`hQ3pwfk4Vad{myuBGx=5waBFA-_RQLz6SW!j-MbxeP4cV;L=8;^H5Q8>wl zvUEk=0!yl)VT(>VSZ#~X51$OSln_I1vBx->_w-r(_Bq77jEF2U|(1ySJGq~usGRn8lh^N`SXmNJMtbd!V zuhSa)gCxN;Vzof9psThkVb#+4mYL@KJG5al1YIZ{KS|Fc6MD`M zrsA!^?`S7SiH-{!Tbgd(0SL>p7%Ry|sK36uV%t}|19*N?b5tF!AcSb_-2p5bK;1{6 zptJY7Ohvlm-*&;4Z9*IU!WV-Tvb42KwbKz$)jPnGk|X%r#$w@9u?9L1{omd|3HbEC zMKky9u;Ppy*m-r~s4y>>ftHNlihs&&?WglFJxiMv=OU?kyH2%c%A^9a8IHXJWS|X1 z7ukQ`p8C$O=a*=GUeb|*5~XOa?jbNn6rS?j23PmMi=8-kKF`jNuerz4oAH z&@Dc$*h$}(Q&mzFmJoxc+8?U7)PjP`8^m{BmvLK?^^%zx$FTTYN&O%);XT-rVn~5r zt4gy;KUkbh*g{@*_G{Wi5k6#trMn_k?K1tZM6s_IVW&u`daw1DbhMjm^UW6s;$1D$ zg-qXJj%d3Df!aR~@^rG1j`gaIo!UTaT|QsY7pOxoU129r56Yv$5;401XJE&!-_7c^ zSI2aV7&~`S=zSL2h`b5$=)!+ho1fQ9uI_yzaMD&Qly@ZB8C7KV<>P6j zpd4%LEOn|RB8`*tcmW1JvkCHnx7Hm%H)u#J?o^G$bN+1D`tb~Hs!}GcSsvJTZi%F7 z?ogkQ_bKB-5c3i<#T2w_4|Xz-v#6sIUE&dDjhu}LNKT@9M~Xj%r;z%~x#c{&|4kO- zP_eHQ@&UWRD^H1U66^8TTatS{Mn_$vX98Laj|AIoamyuJP)`T(G0vGShsYluNQ|~*j*x0po zNY%{^Lc5ny>ypgIFeda|GeDyVl1v4J zS8~nO%8+=NXq31DU~9M>pI>$JInk2u`;>CN(rQ}nJ&3vI9iZP^*O)oNL$<&}YC>J? zu%V%CE4p&8$$0>l6xF1?P_gy#YLEnS+gk{tyjk9(Z}2X{UVxpW0tH!cj74cy-HtX= zu}K?6KLou*Ym2h)KHp^cP}8E$RzT;T$Q=E75&fD#C2CiU%#l#}=nfDy+!GEv!pREi zhcX`v#4hdo=4|WojX&emR;jP7Dvyh%xjpVD30!SNz23&D6MXFm8U2)tY&>(Fa4M7p zHp!l$DNZp*Ec$v(7042nx&hzRVCur2N7o49FQe*8MDTig*zi5E*>$(ksLtC-|3ZFs z=n7Y=AoDe+H&{_VS5I^;ctO%gUEFm21+nDv`^ekQvboEM1n+jO@r&S!x*~10Xqv{_ zHzT#;rGbxLY?%45`>=P>CgObkN|v>@-(||TpPk<8$`os7xmH&Z)1!`(^)ZdqhnhTV z$)gRyi6dG0{>*5nk>Zm(K-=u+T@UZ&q?&GQk-V9nHOHB+dBW*=F~f1l5UOo&m}<)r z>S0=xyofm0dTXJ56C|M|eDEnPPG9z_OV!9F8LKtz2d8&1=a|Dp3GYFY2Fu6`OI^Q{_jXcepVXPEUi~F?)gYif!0XA2B+HPw9KqgN1hhb1bYB>*a>V zQe%XYY`HQ5`6L!eu2N7`y!|GozU*|0s_Ke|xehJyF6e8@=Nf1e4 zE?#(`_HkjMUH5#Y`$03c#x>l!Temwy)ub8L8X|-|Dy5&)@mBAu3?2Hbw$RUt|Ooki9gR==Z|-E^HDwyL_V@DKsX03Y4amGe7DYni;#L z+u}0`doo;7v`-aEh~2P(s2YqMN47`2&E}bRVg|-&%$AnU(!F_b%&Vjkz3S*PFUmlN zs42PRKZmViBS@Zb;@l~WF%5NYx8?dMP-i~Xw;*r2Nd2&B_mt9U&7s41JmJ*U>#=Iy z)m7#u^8+!=V&9w=bCNDNZECfgLQHSe`2 zpS1AwvKiryReHp@WzR~YU#9Z+O^^9j#$j1$BKs)tZm6qO$ zIa3haEJR*mrUo z2rRZR%*;ILY1g(8t@eGwiS4conLIb_+hp z+g;u2$sxC6n9hZ=57+A-$w(gVovPW2&%FPEq;LJ$7wyIsv1xjBE;N^c!U@EjrzJ2r zuj}c(MBWjx%U!8<;Z)Lyx~d7b0Mj==^nOeqNi5b<-Rs~HyRsRNMPP2zbwSmbLbyr& zhJk8(v(Ze^I$tk3P9$$r7XzxA2hDs@H8!d?%rWfF(30EY?YJ)Gw)tG2sAZ5Aq}x_x zLN`4%!I2!dZ&Mo)H<0xC_0(ePkj||1P(QAtgt8yjkiS~W89OA`SRJFs`O%{w%E-<@ zbaBtYqaBjTW=rE0n&$Y0g)Na?gwm#C1a%G}YNs(M@tQE2@Y;kBC2YGh-gO)7SFA_; z{#PQX<-UsLSMlTDY^46Sgz;y&;;*xUZ#)aG_+2VTyZ#@_-a0DE_FEqx1qGE*LYh%P zQbf830cl~RTck_6a}=awq#HzH=#Y|-PU-IM9(sUb{64<#c|YfT&N}P-&hHP_;+bb= z7K`V;@4ff6uj|@kcmn~2AJR{hg7(Pldj`{N)e1Pz?)a)6WM7c>3mjKer`CS+t~!D? z&jfw+R(HsKC%rK|o&IYL9`9b!GI$aA%5duXq0&$SmtcWpT)Z!#`!$BNEA$0#R4%^4 zK!q2SVa`L?O^9!QR`)uwQ~2zg!^VB5H8ah2I}-i~5$k+Zz`j({PZNkt(#D4elwYaJ zxLdF8JHT1X5HHM~k_(>fLr73KZ&Cg$?v=Z|?t8{h4{e(--@_q4`DrC0H>Zf`RQ}c^ zW;Iz75>LC+FBjMNpDLEk88oxghY-G;VZPt~8`N-jz;hjLtkvSg{jI3h*u>ihI3o|l zDh6_kvv+2+pNOaykHFvVkYL^cDaWF^{hoVLB|G!jCCtEM0xgbIObFXoPM5UFYtAwJ zfkjW_DsWJXmX@PwvE>&)CiWPn)j%^hC=FWrjjVI^<uN$r;u09Wr(BZvzijB9e(I)wzfmGg%WK1`FpeK&z0s(5Pc^_CsyE2~-08zjjrnFno-oGKJ69dlFHeS)%Ry$?dGHIuf^JgnFkCT#gtHRbWEjnT zh{}<>yJn;wly|`9v`RNK4i-jv_ahfqRNC^R~>ee!qhK^<1^>^p-gB5Z~n?O>Xon<`f$k2XC;|G@V@Zsy*fHg9hg zKm|HXes1_c=&W%hFRX3IE}M3pw)TZ4CKb#520BUnCP=5LEr(?;dj?gM6s@hnyn??R z9b@XvQ`{Gq-%xgDLb9^-b8`Cj-pM{wF)|m`db#fCL5~wNn(JBgDp7MEt{AWn)JfU+HKDLPwsae|Mw2DzDfZD1&zU&MnQVM|m#d zT02ZF?-`N2XR!DQIt6K@&~mBdv#~F341OtnL3@1Ql~lgbPcM%;Gmb&;67P|yX|irf zy&7~zX|C8nI0EY8vq~%;T2-JPuPp4!8FRn>b)lMmk4B=q{t`#T{w2OK@1eGfkY(>& z{g(S;aFti-L+hHW>Tkbn56vvsW?p_R9{`=w;FJ}sd@mnl>N_wGH4@G0fYBVfWCRVP zR3@eUaCLsMDTF1NadGdfV;6k9eT>Mr>QSkvZ79^&rXM^tps`No_pdU*)9NSMri|g9 zlODd^{=FcTU-?U@*!>#p`Mz=K1eV_Mha{lb|E~u8-x-O7qirG4hMVEL+ZqzZV z`!I<5QOf~a8sf1lV=kQe2)bAASTeY*@5%Bo{mIyuOe{>@6T#o0#ydKNb3H?Q4#wxs zN0^%?^HGOX+iR_^$y}Ixsa421kudCmZ*Rq8IT6j$&H}>zyQu-+MYHWWe}lX!6Ew@^ z{dNYGkH|tq$dEFv4pY-DB#!&+c8FKg>C1yhwSoex33hMrkgPbJI~m zD2GeG8V0l6s5KT{{$yF%X^OCK?TmMr{J4O}Ck2|*4Cq-f5L?a8<(>ZYO*cD81%*I6+*X{$8_P&{Z58cIY&~2edW0aFl>*n`V zV?M_vb9!5^%yQhfZ1kBtv^DAWn^vM!5xr(!Wx7mfk(-)*5RlHO5gAq}Qtko`PUm!O z7}406=}vu86J_&-(9Gz;b!xhgkeXNDS(?aWviW>7^cf6^1E85M#UK22$JVZ2+DtVx zSvFtXf8ccKW3m1L()2l}SYUUp7$cMK&e6u_OERLEmcmoAzo94`&J!_;c#k7Ko4%G@ zMMW#kMEv~qWzGdD+G|-DMrK(q{ycYKV?M0qrT(m=po*~nr^DteBIR1GH+p3wHf)I6 zr5S(slvd5}miT#Ad{Q2dX7z<+o-hUKJ;W8kd|mQmW7h~8mYgy&-Y0^Nv!zEZH3fWI z*btTJcu_+p+|XuzG3j>0W49u>gG22?A6iAQ85i1jP|Ivl{~MHGw`)A!I}sG=A+`^i z9_2B(+ULOdRizFZGocX2H&F7h8>1U3GcUvxQO%*j&8j|5dvQ1inY(RUhmhU03wB$s z4#ntU`$E$*4FXnZ8*L_e9vsiOkQz)>x`oYdQ6|5M!2p(j@4BuA+^U%ey1m*d9@5NV-pBJ56$pKvVM<3#R8P$v9NWB2{#W{^e2OS z6I1N)bcaY$hvxpa@;$=}UUF8KxJlRv7hzx{qizYR%6fXr8M-e4lX=ggBMnrh%?j>7 zX9!T8M!!I*u4rWCT1mhWEaDi92!= zi_qdi$S2m7t{hp0Tx{V8dDHj=dH(%{QoPuTvb*_l^*oGL-F4HAwjP=TvF^d)cuujR zUf$;nxrL0+TD2q5v8a;=bE(#8JH+`tk=~|4V2KJxgVsWm6yo%Li1$xj&9;eQH{4n( z7A&ngtr>gwv`)8QJN8uu66^RD<{bL-{l@e-r9+4f@1Z}L3VTq}(!^WW0y#TeI9!^o z<}AmO)P2vX>5-Uu2BGx?6t>i*$cpM}6o?C(8E}Z|ddA(w*5#91z)Lw7GNLkd$)-7K z$K#{4`yZl_FCBn_PCe-4DiU{1V|!7}k!NM^mox7F*d_e;7ysbyfIr0J%6^Fx`Nq(T zH+AVF2lR;>eiD&Q5`x(yUJ-m%GL`O{=dnlc5{M*=XQr){Inb4cYj1pNm}dcO$*jUT zLDFK<2l@@(PX8Np-ycJqu{Yq`b6#5RlXX*MbHazIhu!a-ncCX8@PMbF)vskxZJGf~ zBgWr{jST&e94Y)a=V$^^60qmAih@(xq@8hRY3U1>2R$W+2aI*~Ni}jj1Nw7U@gm8? zY!>0Vb{cMCSPi1t?kQagrln7R1hAW?Q$6K~wKIFm*GffCft{XpaHTe8!;a6wu#nr- z#X(?sB?=EXTpe0PE>z^TaT{1{J8a_m2|VhVT%WtQIy=Uz$af~C9xBKEi%k`)6d8zE zF(9y1+0_wB;>i$cvybHOXkbnK?jN@tYfFAQXf$fA=CHytRLU!l=&&xi0s7ALGOy$s z8N4O=Df1rKQ2RPZu~FlG`ABbI)W?lEp{<;3=qu#?*rr3Zf8qlxrC%ieV3AK*K=-kr z;3WwG2&?S87@A^xu-ASB4Xqr+n<=VG?QeW@`Bs`=j!_hc+AA7oRjx7uiLy!zvf#*& z{1~(P+Hgu{`NCxIPN`qa8Lf8Lrt;vLr#0iDD!?N0bEUm~6zltG=AW4DESUFRC3-<{(Ue~g(bc93hlelK5IW_m7^DI z^^@z$aRw7r$)urqkJb-ET~e-vXD#TYKF_tSo3m!dxt23!G!obgfj^kv<2w`8^Sw=O zWu@%%0mz7={Etu@yOO^_j&>Wd1-6l?8Ni`(CaNpJuvKS4qgZKh1uCX5U)6v$BovB_ z0JJYkNe>>^I+l2B$3psfn-{lsBZ9zhk_TrzXe+r~S5gt?+rL5BqriW%BaKbDR+g8_ zlBd%tAS#=vBjY>;R60q1MwgttW2(!VulSBI1qmzN@MJt-ll&zB4Qr%^Ya#dQKFfc* zR*J|W9QBq=Q1J=W^70c49#gb*8t!#?5ocg_p0GKJZd!(Ojffboq(r;`*zv-tAB{r3 zLKovO2gkmEO-uN#$=en6)3iU|Fw%0n?Dz`%EFv!i*=9X#I9{-q++_-sjucN_j{V|s z6)Iz5f*^fXLH9MQ48CF>Zj3~r=`Bn3O2X-mv2PLE!>`lL=C2((`JGo0q|{MA`$db2 zjjfwu$5Os*usLAA$|vU<5V3->L?)^@A>B9e-h$T4hk=f$(7oqwlqn*|@@;no=${ur zGT8XhxSpE4GOn&F5#PK|j>tNbFFN3qGWg%2>MwTD=jy8bBfz|mW&xdZ&~PvIGL&~z0@7*2s&%_>W?1p zN*#$d1-RVP(Wh5&j9*U7sDS!OFG?A=&}M`63Zh1~oXrk@_5TLVQni+gJ7uAAXI{eX zJ3F@``O8#>GfDupM`&YgKE%J2=7sn8ALhiLg7|O4q5nAd{(H6jA2wA9i`5 z4=k=25l*n2nVWRW(cbsearb2zm_@nNeD#d-rP!6*G|4n7NmzxmZEbU%(uo}`FfUL) z-7NDSTU(UmgfxFJB3A%qjS4$-xiXfcvVG{1TbE*&f5res3Q|-ZAkLM&MoHT`RrPNiu({%ZeO?9j$2eT zB@!h=6R8=sL1qlk<9dJXuQjOQL#s+`0Hj`B zU^Nf^W~T@lEnvqh!}#(Lwfmc5*brD|*3sIg(l9{6ENbep$RFxu{3}7CfrpUoYSZpQ z%9;ctm%Mmgz>f%mg3-7FN9u<+{y@)HxgRSIrDmd}dh+9XkbM@7V98lZ+fZc|Y}u?hD~^6bTz)pYLnHbYh(L9al=uJ7u54 zW7FO=GTHj1-1-sc*$~~L7@f{N-|X<=U%`=dMWk7L2{GoW-g?ON6wAz#!W?ZW>*w68 zeNU<0c1}~w2w?LKH-kODImqeLmS~6P3#I?cE_KPd27qN6j#fn_8<`d$6j&G?TC?dK z*ygC+Zi+4g2dL2oF`6r?whOyVUR_7l?U0ugo7Mbyg;b=Hq9eYD3&dR=qb#K6j0scG z&Ejrrq#i+wQFUd{Jclw7K7E!}yQOskw~dWenVM*1&2jULJcrmHVeh(>?j$@)&7M^0 z&i3Sv7E6170r?)TXDQ9`%^+&bop^bCGxW5uSVLb^ez-Ev{ITDzN=C0X6FnX8Y6&jW z)Wya()pb`PLuiuT23j%G0A+6QbGXXgJLQ^xn$AC}8~dS`A1?h=sO7vqF+i&3u1C4x z)fnLTvd+#*k183DtRD}VRzGX2s1_x`ix-A9P8!u;s))63zUIq@Zyc0C>#eQdEM{c}z%P?lj ztR}g^Suh`>ZRNA+l|MCY>A0imW-o>4B1^r%TYB=w-1Q)_!-*!SwGqbvCFd(@nIQC< z>gkWk4z#lIjUF3kVz_H73%c-|j-+a|&{&=5#d&8s1Ij7qRfqRBubQcfM{}TF#u#B| z1>%TG0|kW_eq9AL^Z$z;=HKrDjO|urB4+X?$`*^|*EU(^D~g_w_1Vik(!SHAS(^9W zUiwTARj{mEswtK7SA>OWe2;eqI+q(Ncq=7jG(HpzDZG#|K-VY8mEI zsr%HeD{*=WD=Ktz;tH&*sOql8IM2bg=YBD$+IHaZgzW@r7T?%3Fj>t?u*fpzpoJgIJ=_aqk`6vlspQiP#_>DWI; z?KCwe>D7LSW8ii_I3-{a<(&>gUYmY*EXiHW(-O@%^TDQa+vAuZuN8$KMQG9dLHlKT z1xqeyz6$6n`W5X)fi8D%TgO0=G0g#-3q=xf{?qIgL`pU`!_fdx)2Ysd3_I z8P`)!vE5;K*-=xZ3zNy{fvxSd^oFhvgawxt@xh$LNp6q0c`4tTC!r|$M!xY$(@}9} zirD#@=XWi>MV?*@Blsbn?bBD+Q)matjU9d5_p7{nwH`l#>Wa@3+`*Upe?kp#AMba*;ID~oih8`>S0vudpywXPg5WeZL|6_Q=?~0Os@QGGYdJ(^E&uY zsfPHGbK*Dvf^bt2A{A{}8XB?cqh}&>cEzv*qVu-48VKVk?V$M4vs&mrKKSX=`W~!- z>Oo(}o-@dPa)W+)XY_jVhHl#79^&XR4ft(Bt5AEZuUN)WkqXNKiZzHh^6SHBS^_M!duVQ0PdLw6p zL0-&Ta->xP(^iHW-UHpoI~9-qy#o6muYj`bFYCUqw-dpJm|kL;VsDx;o}|Qpz=M_X zKt~DL&}poi7mLBX{i<>_v1u#bFrZaE+Jn7YZIRfyI{c{xoaW4~+&!Ka_?CX+wCV9X z6x*^vz=5-_BKJQ3?GfPieF?KoC8!xX9r$_PT$snu&rKbC9?zzvn)Tr%|;+W7mKsJ(lqs$xCufW9iBL`t#p^{j4bkH>{j={<|b7|M~y1M}h0oQpi|@4GQS z_5_;2lZ+*t>oRxQNS`Yzd3Z-{G*R-Z*G<^)Y|YXQa1HvS?fl^_>QFT9ggR}tXli;` z1i$i4X%DQWcJsB#L$5K~mebO}D$c^K$7Idxxxr-T4sC=jpGt!33p2<7B*4qBQF^tGz>})FWvJ1{HJRgfZd)A^-hRL2-n$CyKf?HUFAg1`(s50k9nt zvK3uk#F;Z@l7}8;N^;@Zqo^8FH$%tY&7`xdld8z4)HSC2yZqF_CsRnr>`1*1k$VeW z^tR6$i;=5mi<1a1>{o>w>})2X@oEeq#SqAA*({u~=&mc@sx$^K?YZ%#P9l76;bC79mEl_9a zI>-!XRR%q&zO}CSh9SB_=tNIcdtCLiuEtjB__+{`^$LN1Ex4nHe(LN zhUHXDP+y@MB(jp;Il&F(>$sm0|Ll|&F?MkUy31aDFqqY5 zm>C$v0I{ou%WesSgJAe*nbqr%gjdz!y3G>3ZuaX>BjCbLesbq;WmiR|Ugu`jX0z0$ zK|`C&e}kyqy%d0@-BUJB7ydYkXZxKTsfr4bnnev2pIv@A(TG+3;(-IZne=Ym z4e8*>uW^7v)mTk@rFP9|P$LtCRz&rz7|^zUIG`03mOV7Jk|lDxS*0~dpCiDb zpeT&srFnx;@0IMgmVEku@X7m^$!HsrSxeXbjZW1 zs%=|lqq%1x8F^pX$I5dT`Vm%-C##FFhh!PvoOX*6mTy^1g~qO`5D-mgNV;3MKYsUg zG+;ao-F90m5k1VGi3!R??|$P_k?C5oA8mui!DX)}Pwc{M zkyOF-wPEhpM*?$^qQTi|=j^#PLhvBpm$bA=`y3a1DcrWtq~AbqmH<3GY7h5RNJ0;h zkoX?*y>|JCqw8w>Mt7#@VE@p@xVAEh(N8=!ia@+Lrm?GUfC#}vQONV`YVcV^t9Ey} zUgeu|*|w+D{*_UC4w64B@7uD<_3IlLNcK!F1NN&T!_jMS)!5>#yB^D&a z7w;vk0VjUc$`7=p7vAG%O%?m!)yi6;1~s}2BXN8ie^4mtbq%dgF$IRjVwg}b7B?KK zaI&rNvD6?`LRZuE7AtGhRlmM}`M!@|^-+-eQ4hIbj*A!Rul+vLw{jESFOb>qc#o>n zGUu!wO-TwqTQlN+sT`e0cxOOha5D9MK1AJdyF+d|!v|$8G3w3xO=nw(y+CJb_QhBP zOa-bUw-(dG+gm#m7a?@l``*#6Le(&a!##cg@J?NEPNYMU^bpB56SO&{v*o5-D6tld z2v7oPc+)gl>*I@LvEZ{boq-1_3P0<-9R|r=Tny6R_`Ot%0avR{kiM%H%9ByZfVg+A zD%BsEl|q8-Xc}WLRH$TE$(0|k5MxzK6Nv6=EzG2z)Nq%>)nxxqT(sxr}d9{EJX{$@Z1$vaQqC%s-RTXPK5X~+X>9bp8STM_~0U|@@Q!{QmoUw z7?ojq*-qsNsAMym(1jNsUP%?Et;3Sl_^~j*1uXCzbfz&fwGnm^316*RA7AW%JqoK& zLOj$LQNBlA7IAA?QxvBx2fF;C(0hWb5m3bswx`ou`{*1fh_a4MSYJY zj~Ku&=@TX}&#WegD>WWzmDodv{+-#x%H1UlAHp=$8 zbKynB@N+}}M`^Oevs$y+IO#9(Pl&r!XNyf)91GJMp1S>t^rrskV-*4bzTsG85W)*& zbqc_KD-`%(t?BF(-$>O^hYZYIVP3dpZ0bZ>6smQ|{=^8Eyz{Q$=1Sq#18*E!T z2U(c|rlYnxFO}YL{}Q|I9lG(nqO6>mS}zSm1Z(7#UZ!ni9BH=(j5+6+9h@J>fiHTo z09LPh!Oua)T-m1eIn3D=5bPO#qKe7G!`NBE(j$1LurRlA#1awva)Gjkhl2+OlWX>X zz8jLif&;e8xL|cGd(GF0n4}r3Wtgy4Jn;PCP4k@V;_*-5i{1sY)8{c`eM2^d*)@nE ztaY4~+njQDCOQ{3CYFc-n*7B5aGgc`0XYpFwOzhLN@&^O9hA{-hfrD7$4iZ)`>?Rtfi}J}D%oexH?yU1U`+9fb2y*$}DT(}jHPkn& z8q{I2om=GY>?B{7KgjQV1xq+9eYg1)(C`0rI7c-+J$e*S@*`0}ck{`!DG_GlQHQ;G zDg^#yWDY;^?#rn>&Cpo=fx%Ud4t%lYiEsja|IC$t?}wNEL2SM!E5OkZx)>1 z>SW+q>*Q?I6fRhKrgnPG*6LVhi`W`Dy6=hN7# zcSn(b@RfoNEiO(CoG1A$I5UYKd z>nQDcK=?1{X2+X0Hc{hHsrgV?>bcE0jne%LdvVf{s<9QTf%atI9G~pDu%E2w8=c!E z0m(BOAw0Nu3vO9$O1}am)XFphJfKLP+u(H1%#2@CUPku1dm@)BR}fk-f8~ zU|R4fuYmV1TVeM~vglrYY`V0XpBR=VlZg~hYP1<&y){jIZQhJz2J6CxR*XZ>3_uN9 zVkr)Z-_$q!W;uc;9_Ov8#!(N_4V`A1bEJD2tx3_zkQn^b^ zc5v@pP*#7ta*fK?uG*g)mN5O2Cvd-TcQSn{FSXW{2SH%djtX05gW^NrZdp4Vd0R6- z5i|RY@nF_h+<`KBXE@Z6wcm&umsRcyWx)ZgJ!2`XJ)N>?7A~?tgQ@qfoV_}{vDN{U zw5c`wSu=};fF8vYOV(PltG2~kFF_X5tW`xipGTeYDscf(E4Jr(b-rdIrJ!~8J;P?- zjxeb7Z0;CeRi$yU07FxSfPg0F{K<8ak)pBsCh-4uyn^S~aqtrQEGqNURlFMSavYIZg?E3cq9$dIhflq`pcT1%FGaV-4U%*auW zDO&DOhkAce!!x59`oNm)oKa4|e>;Tfs=JY?Y#L0$gCoY^}*JeooR(O#k9oTvt|5g z{0hzJG(x;8h=Y8UdAb|qdb=W4sC|M|NcI52y=bWk!Jk;vm}p=tSWt9(gj})M%C)w( z{|(|#{KZAm)kz@zYArqH!J?#mJYXT@T0EdSf?)-kqzTALO!MJyP?pa3z`cdiHsWDl zT6e;>x+ebyK_QD7n}aYH8+**t3G;?&2ZVfq{Aa4bW?XQqICUyk3{gz2L%4^l0O53x zF*LFfEc@)lNVD!9<9z+(-st<)Y9BWFjC*MuaLHcH19*;w$%QE4Dihk<9q=ntDQ4iRo$^`u#iRi;ik|$vet*?_y;M){*6+5!I2oxrSDB36cXy67Lf&7@ z)C8RgEATww8JR6pAAFPQfSL$(@Z#oIQgGHlCWP|B?pd`d583ut^+*!0OJ)aq7P8$Y zw->qqoskG2vPeu;3&5)Y#g>+1>?t6O(J=RWip@f8P3<5p#9HtX=kk<e5U1hl*P2r&^wHw-2cDk3H8+G}K~zA9+WIA4h)V@+vu^ri0_G$)KI#* z$;_oc9CvO440Cd7##%!*!}e;rznVP=0ELjaZd#YFc~WjzwxpF?IY8KsAR!*hO%Hb{ z`LZ)@_i`-^XsBq&y&n0A2A9MhlsNnnDd`;aZ!p0Sjhu03YqcleOwa|XoAu5}h!fE3 z8S4L_y84t+{3fgKjFos@$JQ~jpT45IBQ3Q6oj zT{am-MFp)AUQ$&J0*T}gz-lH!t(sByi>1y$epY2fww2oi{*$&8-Jsx_NlS{%>A-^# z4alm1&NPHl0Z2?1ZN*YKzw(~=qullz|3x0~r)vCfomc0X z-pQ%K6wy=PvKioYZYH|HlB~xggCGDR}#Iz zp8J~X1^F|YQ#R>Jk8e(65di=fi1zxL)ms!ZGpXB=oa!-p+QT=)MtD|3K5+Q$HsN(U z%z1*>bZ9G!u(IcmTqXEH!R{k>8HE&=^mL5rF3a*}*S+-RTL4MY;;NV=Ys>|4u6#28 z!Rg-r&ly4g6rr~)u!b-=Xz`fki*TY1GuPom&O2y@m}B!05RLXdrn$#7J501D*7Dw^ zs`D_5rl3ctNy+M?gwN_P4p%?vNY%9YR4-C!>iKLakJi2uYz-YCT6Z-YH|#5cM-_fu z1G;~=L<6!fF3NOtq)mRLO$ZFZh>1V4#IP_kv3!WIBSQi9KCN}(uAWf=GqUaZ40zh) zCXv}#Uu1IdwR#DI1L;JDfZE8fk-U8DG{R_CvnEuwq-iLV>&Y`;m4V*$ptu$qzT~{Z z1A8;Aq|sPo#r?t?Lbj&L6lh~@MV)@dZ1=D%;GTnXM#_{=!IHzg_v@6z+L{uRS)^sj z=XPA!lKaYL|KqEix8)y*gpRG$RBBaXqUBD7;P+rXPf@^{HK5eQgeT{qEqv&uexCUbkM|N&YxGuOrke5^-T1LVmmbSZ)o^_o?7% z@G7*Zk_+vzjLSn_RHaC$2G>TeW2CB%pGs@vu#*IP$bkI)$DDSs!b`K}RD)g=8b=2* zrCY27xb@QCQ6J!vYbKR89}{9~9mLbJcwh)awD~w6t*mVK%nisqBUGc<4tJPj;`K)O zi}+|lEb8eEbdE}coF7b`?rUnu+MbvG+BvZId~B+6*YjAWm`t{l+_Op(@Z`n`ZlKC^ zPrnl0H@o*@`pLugZ_Cj<6zo4f&@&wD$dO}(+Ay+e6~r3%;zMLUd8;FJ+{H9%uBiuK zq`4OjT_!FB$j%{X9BO4nT+Vv}i@dZ%pc8b5bpoLT6*(xMrFqpZ2t&;XPw;?NV7en$ z{L$L&{nJ6L+Lc_Db*WZ@H&zb1SeXAVLV%0daFvd>G^N^WyvD+*pUG~D5I zsng>u%&$@3JxtOq8PjE=Ey?TaqqP%LqvdwwN+Kfp4htz>`TaZ9<)1C|HwWgwUHwgX z`G-6Wj3@YXny}Y$r2RY@eAhkDzWSiuvWCESml%@+&t!;$G`PKenNN_nou#_>onyve znW8Ltvy+yxhH*f`WX#6c;Ox0)-&fc@42R^Pg#Gql*8R%EL;6itK#|LVXSsm;V|X>8 zU1uTFIxqe`vWUG z%{I~~&>{s-KC0_L%^drq9N=tIqMqNYZd}+k{p%jnjhmTWn4Q^?U0WfIr#CMq&4c~t z#PFwT33Bk)J}XFW%(&hp;hmuNIyOs&$=<6E!$*&EnEbt2mI@yjh9$1)%R6t$UC&aD z5!08VZ>J2?vp&=+7|%UNXW=j?F{L^R=Y=eAMpOP&ZJ#>d3y;jJSNt* zsU7-3)uDbUnS5Ll-?H%6iwR7l^_mGB*PYqtkRtOp$dwnc+fy~2Tin$uy*zbz$N0T$ z^em+KH0_nuV=I#EW!FvCd*DyqD^au3PN~GHAFgRMKLZ?@<+tcp-ZX)$Z}iTY`V!C> z-W1gEIQUai#(lIhp&!~O8|Ak%qmcN#FJ&eCV;?OOJp8B=jUiQmbCvU~|2h~@lm^j` zzZO-hUwKhuTB5kzHM(a0Scf$3^X!+BX`?p+n|Xr{9j}R{;~3J4^oP&VAYlJ=y5aR& z^|2COVeOTV{s~eVJvij6XcnH!QEHuY8*25m{*JgYO+KeyJ11hCNUhYYEP?B1&UCTj`-X)AhW*|jFnqhg*z+)EgNGfADbKG&MT!o1!Ob|)tW zmOzkwLHQTX9cZq6VB-mmu9PGFuT{6u*U@~;Tas*8-SnBoZwP&ncAadBuXVMpt4C&c zxP;mnKS@f_6MvK)&@2U{!rN*&0GPHu60xqhrF+!XdTmGI9&@ejBFK){a_1Lr&EZU@ zxN218KFC>=dtWl5uk11`3mVmVKDC90uKc8L`LaD^1@V;R;u2raMPeID6ABJcSkBYm z*YZqEV4}^)UlJo0G4eJnl6=l7!uPm91$V7;HTnU!@e|@t%}ihOY&UB@xB0w#Y`cG8 z~($r)WegatZDwiXl)N(<;|Pr?zCjr=5fG*Q2B+O z;HLX3`rw0ip8u)(9vAe8a>J%SEd(%--&`RJD@8l3)b~57-eO33KmuT2osbp7IP5vI5bO-eJl!$-L%VB1CDBeQDjI|4! z-dv?bMdCKFuWXO)>@?~Z_xno^8-p61J}=uSPbwk!;7)-zUoj8B1iW1# z-b{C$B^2hh5xNqv5FGT$IR<>;yDtIw+FJT#yW@Xw3VB7FfV5JuKAS*`<}pVvoRh|~ zY{v-*TwKNi_#bO#@u*1AU~4Hs9Yh=#imUU zC#asgyI<~J?4z{Cs!>5}-hx8pkxu!+{RN7j$|Srt1-n%%@mz6uE`QFFH#DM3ZD4L* zfX=;b$75V>J5BRr1C7HY8J*u$%I$;rN{tTT zXak#kU0sw{>-ix9CEe1i+YCK?k-cThB-XxJww3kiwXw~+btSh8jjm_8Q~En@!`j;u zqx$o|T)Xf9tMThwJq5P2N!bg*=N$N$ehl~cQ@JV@o|~uS=Dq2v3|XV=uVgTy8CLz{ z`uK5oFZd2%ru{C4jI-@JCf`>BqFLzmZln*_6=vX59_jk4O@Xw}k*_RWesVUp6Wm#^ zJuwv1pe_Zd?;5#Dsrm9uq#9-v$t2$fK^%hRXh>F3(}w&&>c*2l*6jUxi|qYS>J z2rh`Hhp7vjjQYZ66#Dg%cO%CH(dsXY=fz`PcEr?Q?yaZXWOXUs1#MEioS)uZe%VV% zpgaGwFXO=$B~U~5+AzJYwocg%Z2h`)Yd-P(tsrBJC0oUJPDfXnY0Pb;T@d8HJJ+Gw z_`%Axc|7IyTZhRJ<}N++k2udA(wm*+mEP=yt35hi>;#8+2DRIG4SW%;j`|>5Q873V z2Kv@|7kfBZwZg5`2wwTrLCL|L@IOHkh=u=5ocnKK@n5m>&;7rD{>%vd4?DlxiFcm- zxp>TPG5?Ow)a7Yh?2@0*LkoO(KIERa2W89*%C74}y7NcLyV+|t31!-!R+(}Sf_@x0 zqzPL^7Pxp+8bdgI2ezNoj-zkimY0hdkaW90I$6XCAfHzr{B#n@U+!n@Y@HR5 zdr_nKLe%}K_<5TTRA*S_z-agU_)gVd!S#?|SXzi+c=0{+f8NuvwMw^Y-3PH}=_RC9+M`dJW$N9(K zXqqu6#weL;d%?WeF~z5f-B&TtVKfC2tCiS_yJFDi&Q4f^-1T52Ke!n$dFG|EAVRr&xuCB- z`_Ih9|0z6Ff@1#x@&5@Jz*~XoLH~|s{F$-$XVlgCp??!CFUP$iN@&REne@OPvTHcp zGm$NF*IQzB9yF04onLB)1^fZlmh|&z-6a?{+H5FBqr5htMB7!eV0yJrMa)l1)FEBH zOva`vIwp+YA$<5aqrE8rLx+O709lm+tkSY*D(r0ycI(2YrXP!Y8Q#R<6GwoJl8_P; z{-1*m_%p#0zFm}*`tGH=6FC&ucfO00i!H=OYI%L403%sD3#VyF9`CI;S!R$!SD?Wc zo{qm@70zaSUpfizioo3iqpFZ}TBQ^OnQoTs;d?T-m!%&=+xK9dwaM#I za~UGgpqDauxb%6VQZCdS(off%UfpHJ@A!Jph8kjmVlj@g&n z;z=0>OQWCPq?*?ryKsO7{Rk+WyTO}=+idW9%+ARHA!&Glv&?JeS#8>&BeIpn01Sm? z#?(9NnyR{S_OY(V8P)-TW4}S85(3mGmEK*A+{uY8-6Jj}kB<4nz154{+jL^oj_$0^ z&DGo&Vo*r^EVWf2cD2cryuhifLmizGGuBqX!18C^{Jp6DdL(}q$X~zwgLM6u)$~`E z@#nTG2uM@@ZDIX2HfX zAQ14*LW`}W*zFBcO4(#D$~Nlqq|WGJO~wxlW~IU^JvE4OC%V*F^KHetU=>Y)BGM7C zWo!7JZoc%HmQ0d0qsKD$v47XR0C=89I!l~YIqGCG97Bj2Z8crEkc~bVhN6A6%-oN5 z?D?55Oi2s!l0N6l(fW!O^!X)%)i9mJ(lh*_PjD`JLl0OV(B>#l+(L)&v;5=I zeI~ahYXou`d4H>bMDM2bnhQG&9ztRDW=Eo@ zP`(>_M9BCk3gstuf1tG8T4os{fAoOf`YJ_QT)HkcpN6wxr6#g_J)!*<>Fb13MJm-v zyF0lNi2232RNsRc#xHQENdLJbxyl+Asb1sRh6mTY)-y5By25N%hWDLf?Cufky*%x{ zB-@R@(oiZjwiv<~&n#7-9FS0j6TO+KxjIVt0>0YuQUYmT;e@cOkzIl`uoNxSLu5qD3|TJl&k5YVyzI>`Q> z^7v<^{k_`$P@euuX#dNU-~X~4|8rszh~&?36kr1F=%23wQf6TN2|;mDtL=@C(oBF+ zz%CXa*P5xk+0P=rBX+~belXQKK&2M*|adM)&?YiJ zvd!=;m`JlvIr8IAzjZSyUslvJJ2W#FlAn}$bj^y2;}HunYTYoTDJi{GeJk=-BF*sT z;vw^eXF;Jtl!S(>FnFeLIj5%)Mrl#Kp+$3h$Dva&Jg+&0W)gJwv|02Xon>#TvfWJ?M7CXXfx$=$srfa1S(r^_F;`R2YxFr3t6_12^$IMx)x+S zFRA)AhPaSC9lQ#IFK`_(CEd*svd~~}j%?51fqOvvGhAkM3M_36S^M`qc>7NDl}_dr z7)EP*d*~mVL9){o-_26+Evz}WlYEr_lU@EV_8k9~ef~?0^e4dtKKZvz5b&1&bV>W8 zYzOYXe+mkJ6eWwlFWgDXFj}-$`F+wwplB_;{k(O(?@ji5zt8*IUGjQ`!X7Sq>(R|hj0<|pqsPdb*;*oWo>yD9r zJG2}@I-S$0G5xJe%2KQDbKEm_@GB%oO9o-TM;#S5Tea>iV$s3gbD!EI9kPPw)*)&8 zW|+AJ{M_3XRp@p^rXg!Hyzl%#hH+xL@uUXI_XhTe21g1zaxE>BKwrCG1;H0)95Muy z%-4wcBnUw2MOQbFccH>kr+PDOVBv!?)lno!DsvxOW-TVATduzLRq?KMkk z3`2}k&j%*P3$~#rxwrpA684`D=?}^2kE_aG5ANT}g8w#6{m+Ebe?Io#=CJ?kIsTE8 zv3#098Lx{Px}{-pZqU7- zy`OiV_c_1wopZi_+<&;a*Bx`tYmRZvG3Oj(4tY1a1I!gaoX^S9J6TS;W94~U2_N@# zMp*WCm98pk#^BtV34huL058KdSuQl;8tO{AnJz}Se;?DpARgEl77$1Y)MmMV zic_0W7oXSlgM)Q@x8kzao^>auvMyvNhG3b!j!ZlYR)o-_v9)5j9O!aD8E^IH*6xsj z{}m2+=Ux97CB5rb!24ZidXrRWe>84ep1Y_o#};+4T3RYjg5iWbT27B6y)gRZ26V-6 z0|G$?3UVOx%uw$B-o81R6O1!;QefR9T~85M{7^a@>}`n=3V`Awz7Sd09B$f+g>t#F ztwb5!fC9x9FfMQ__AXa$KoP{f{8SU?kdu`C@6n4$ z)@YCg+ACC5@)uAim921FP>7P|Tyj|_85A8@Dh2CAGQ{wir_3>kG9J-)?|UyeIOdP2 ze~!onf{TuoIwC}#Hk~OfDeZv6vp;9fi0+KiDf<-VlraaMqDp%=3kadV%UaIcCvi)L zk-5_WkZ<56F{F!Yv}v224mfzIcGE{%pX}8k5N?S9m5T%d@{By2et?hFt2j&QIGQZT z(5--ttpH!sC6xP)JJ|9u=3&Y*=rpeoE*2C0xHfs>UrN%>_Gh~}`ZvNg4(;w34=_Jk zO`?5L^XkC?J3e~DF=DD*&$|!kn7$anSMnKiXRd}#gU5VV^*szvRna@{wkk2wac?u~ zFi6Ku^nR34MjT6p5k_5)IU^*|YbSiFRXr6?7sh{dndp3oYFPkRbBRk*fb^|8eOxg~ zUXAP|ZJ#daG3$Z?&r!<-cTr$(Qj+-L6LdNJY#J{ijx;FFM%6?CV3_-K=q0BE`%{3v z14)k2_jl%BKUOeK-}t20;pN#I{kess{l4nV8>ID|vb@+;Ek^e5?t;KcaPSTC3y$cr zMOzP(xT>N%qvI-*G=0jxEM}@)jI?Jsw8vyDmALj4NMKq6W^e^yQ@s6h4R=NZY&6C; zLrySWpKDQ93oe!&jCYirKOzOhssvayPGbg3Eb;-!-%}U8Q(7Rc$k#oz>8-lik&AE? zp@`&XnTLeZoyyW5;Zk#PowY1e6PIYDl9b&YfgMSzvDB}Agk(qeJ^_Nrq^RzhYS0Q1 z1Tsp03_uTDQaPcIXClgdRYrL|O0{ZE7SexpU(;37vNpkl#M|I#6k<4@-mXrvGz>Ri z(S&S;WeqrjWleEK!P~XwP{+Y1&5CjPe6Vw;3(hRR2)KQJnX6>%Mw>^>Oic%$9%Q1m5vO*h z{*`vSr+^NBmW&nH-j9H6@>iNSFy7P zpzy$Ew^nK74%e%SFi`@$UAKtNW2RBRS8%c;GTBm37k&7R3-mpcy8A_sAXQHn?Hlr* zI8Y<{7t4SS#wqhEZ9h?_a>oM)Tqq9vv3D)XZdhswx9k`^N58MeaDW%f{kgtsq*k0dFzVwmHLNc> zMx|=fbAs;V%-U{^H@?CDkt`qpS%7cJ;^7IfNg9)x2bmyrye7NHSdSjGeTh>F4=eh} zNoWf@>wN8`!3TpdyvP`*5hL?ANzct4{ehe;5BEO4|xmMLvT zh-rcBMR3$(R~+85hl7Qnn$JIsQ)7Uji3;fz!ty*ODqZF89>Tl#9uykoC;Q~{EqG&e z*Y>qEL+l{uv{PEwfy=7y6(!sHV3yEc*Fo|b%TlAwk^gs_+yIB_e`xzqA zE;vwxY#Z5CKLi5pCs5q+Jq0}zy z0_i__Qo8b^he6P5dxADkfrCa-g3X-A3oG_XX z?LkK{l+KEa@y%*5{8~Hjh~Vvw z<*h`CZ;l@)%LoqF>hA?tcjEh1rdCR&G)s#B3D*Nsc=n58=WGbYQo7j_Qu@R=a_V7@ zV0NX1Hu6Km)U%?5icq5ll>7}3WgpW4!^c@uoQu3`BM}+%mGr)0h>zt#bz3}?XqdLa zYB%^jIR#bJiebaHc;uBO9Wk7qlpOoW_qW7Z+X}4Pi_0UGSozkfB3B3UPtfw#>@n+Q@F3)7R{pjbhP&d=d9OWCSb& zGHTwM*q-tt3dLq%w4%-LGmfE1d_NLsIIh(k9KHfPyv7VMztV*lgE6Bxh%{2&At5Ph z&~r1#zWj@c)p&wJfs)zji}RT^DDwuD+I~d>eQiytuy@KOAG&bjdD8;d$KqngxbYLW zT7#is;GBm>%YZSu;ZRXB`Smp@^%Ug#xghDEz|ubZa{|$ zTqT#NKsgz7dD#bqw{gx)uHmQs6U$IJ^fI6qssQOP8`E&-O|KWu9`g~**&=L=&b3j_ z+Q}~e<`BtIzyyN3R)>pnO-a+FlWnm9H$W6lXb~Cr7+dS)D37uT_aqW8a#5Q zv!CfZ{G&KF)WNqa*T-gGDTvGVz9Y9`l_7J*^PR$neMau6{w*trRVZ-JW+FbL_j$J2 z7)?TlQ_xa&Oj4D`nbS?9_!lDlqcl+{MBZ>4^ogGg3cXZ}UYbV>c0t_b`$xRb-ZznJ??# zDD6|;0ny-@66bgR??6+6}U`?m^Pg=0)xiOj{uzeDq6+^vnj`y zqG$d`&5g+A<6KKX4zfJG&U{6<@KQ73-mJV6?qrSGi0|hbeLZ5M;C}ow)oJBQ6xWY7 zn&0|EFg791n$toW;E2V1%vDYPCZw|! z&+?P-QSc>$$A+$Olu(5kDRn}BKrf{C9@*~NXLO#3uX2ZFA1+OS;5MG2rfpU-Xh=$a zYOAEU8Ql9Mr{@1Ig1Iq6ZroG_=_tSUR2){caG zuroJV-+++1+^OEnj#Ioy_WH>8o^(~>$Av|~CDTuJgFcpvfhm(|BR}+|uo{Y0 z)%oEcc#(Vs(!Cd1mVJyML-9OnDcIjzDx7-$j^0*I02$Q(xSw=f#9HaT;d)(QvVdU-p8RVs zO4R|e7dkQo*L#XK*U9166-x0}{Fw%x!TO~`T%9d*26CnC7@|t9>!2>W0m9jOrt)~e zIusFYfLoX)`{GCRT45+7l3NnZ)#VG~hc7@RgAW);BD$k@4XC3z|7NhIC$ zT+e;P&E!>3d^3*K*Aq*(+2dzX-q{G9ZYC81kYGdH2G->@PcGYc#!ZrQV;j z@C6w9S<8)lSwP}im8AHNE?@v8p2Mg)*dFqvf`1@+5GYz@U4EL;@$9JPWkrgVi-Nu4 z$;kJj9$$>2M!{l( z@RvuT%Wxm*WqXX?zV+Y$LYVr$LfJ<%hMCPi5AS`nFKvThAkK(JvU32YIj75^^eFBj{qIFBnjBG^Sfs2T#X{FM~_aE(;>MaUCF6xt*7cq@Gr`K(| z_Mg5z97ShzVlHU=1Y_!b>qGB{&9$aw(HXI7b@GVO==f6IyI*{tm@AbN_91Ui0Y{>y zACQ2PrCs+0p>p$qO&2NBQl0YOVtdPV}bLH!M{2O{jliN z5K$P7Etr_&68xZb#W4n~9!daHo@*e>Xx>R-lQH&0BcZ3b2<(|68Uo5jiIKl7DL;*J zwnUjp4aq0jD;uKv+CnYHvcvuzm#`+>B}NeINAYjF9-Sg@a4VT3Z7x&F{>IT6Ijz>x zi;tU5T5b)@9KbD_l=YfKNP{_iYd7#Z@|L(a4Nnk&pe5rnNDo8cg5l(w}5OJlx%rQr%$fy3y z$4U##4_i|h_MuI=&AO-3ZyL1QCk1mM`X#}n!NMOuDHNdxZ49|U{AyUv zQ;?@E>9G`{0nTwwEo*y_BuTczvykr_v{z!&HM;FcNYa-BC9stSRx4s|K+r3?vyn?p z!_v?#5#$E6hb{AHJ(<%s*z?Wf%uXd7fef|kxFGlL*ke=WdCuA_)9%8kcYxRD`lv9& z6vqpc4dwFZsXWG4FN*T)T*qgCMGecQ^GCOtrizCk>+cvw&SbI=$mIP-QxB#0M7DMT z2VRN7yenx*!&hhVb&8xbO=ip-f=!_w9PU=-kqL^vww(lKj!kvgIdO)C(e9CE3(eqDCsWBjs$xr?U9`MSLJLMwBY=$f*7 zXM~~VB@NR?tyss_v*0v8E4quy3oYG=qt)6?GB~aPo&v8zxzzefC0a`9s|rYi^q{B6 zUf2+dUW$~xUOaNl)@|tjRg~!2YrJf)#pmyZ2xoI@YniY?oAqi1#AR@AcmT=CUvn>v zqJv{}D$LQCWbMBgU-A69j~Lo<)f@$d2kgDJF`t<2=YTn=ZMb$tc23&0Na0Hs{D^!s zoo!BxEM`+jkHS;!jiO7MAAeE$a~q#A_F=bdM#YUSC?pgRzlT3cK5ZRrVwUWdP!UC4 za~WVj1uHI(bksFHgnBcog&r#GkpV-@*V?Zmq-8&X-awWV0DT*8fLwrz6St#+ORjXh zn|cpeLz)f+Y*P0C3CkENO>OPZ?}5x3A6-rMsgr#D>oVnEc@c3yq^$ZX@?!ovpy?!E zQ^T7C-*5uOzcae*LXJlQ^03-q3@hBv;lZq@Uq9n57Cy|0EC z3Q&JogBg9AwB$6$@&cwZA5zZ4dj!jmnE06LIlW_6BL)v<<{vazKPsW}tZ$`ATzNI} zQRNKu1*5roCCW5*O1}1lY2)IW88z+RhG+T?&(mc2^~rgmXnjr3ICq9 z;`qQ;j-S2~%yo&#N`W5GZWgj@0%luzQ{>B(qJLt_$8RCh1US&mjn@=iH^XZ;y2^S)wx+O;d+3OnzX!vGVs61FZCz+(dFjc&0(mn zW5GSX5=;FbT+)-8n{9Jn5}cn>dtGJO)YTIV=%$K62UA!_uZZ^d4bFVdwGw!(tsHm| z*qE5gobFSJkQ+cgZ-sRu@me^lDzeuJ3nwgLgs(&c84Z^nXs_(t^~nTo6ZLcA#v%Rw zB8d4$Wlw)l31o?BYiq+{FDrgZuWQcoP&@;K660L^?B#IsX(65MI(WD~Vsa_9>fu!! z5ys`M4rYEVvbHld1f1_v?~@Vuu*iNn0$6d7RYPr&GNIL1=u&w~-fiDe(@ME1`Vlr8 z95sEMm`IT8k8h?JAshK6*o#ved{JiCZ!2pmQo}-Rofg&9Dq;pXoF4ZUz6NHFY^2*v zj0N)V2i)C-{jW2xu-%qLf>*4S-&HCI7<-_~30tefk|5S1l6x>BdUs>3T8vWl0!b`4 zRo-din)8u|Kk!8ZCu^2fE|Q@DVL79b?-wt5>gzEpvc-^b)h(%05REuT-Z1df@2Z=u zmPI?G0`cBoor&5WE2_%O%6($vBM%q|XlKaKExUl(mxs#Iy#kK=B71mPtmEL(V!E6f zWq7E4m$_Kt1|+Jx9^CAreijLTJ*;jKHDrhk=`6|w2qRepAPk8CJ+k*mr-(y!V;yia z7g}Gul}^ZB6*80X^mVN%3Z6%GA>g5OLhfMGJm$=*ny*9Kx1C{Ii8Yta^n=>!?K0rK40q}4geu4{Yi+q+fhNk z2+=Sk6(B^&9U;clt^pJL!#}LUI7FwvZ`ScbdY!3fK#5uw7(yN8 z)Lj&L={#4R>=oUk2t;7)I!$3jT(ODrcsGXnl43|plR#iG2K)svpG}h_afX(i5$&(Z z*4v9!Xt;&EgPon}qE>miSvWy;y*=t$C6|Na0VJVEh+7gQZ~zm9?AjT zmuLkB5s@wjk!~_scf8YXPOjBC1!H?cI{fgMiF9o)Xbz2{8X|@6Z{lMP``_P|bhUH0 z8f?||K{#_W_8bqEw#F1T#%-I4!ZIDfTY-Fz*65oQ?qgD`*-vT8u&qjvU#t(I`!t+$ ziDc{aINMy(K35tZw8_D@GnJLqA17kRdd|p0c5)x!4{0Sm;3$NW+7)5EvE9e~OA4Gi z!84p?qd3&O)OITPVg?L`Fz1Y(EvscCaK2c)l;qfk3?tzFu@a%L%HP2Rw&M+Zep z3Ssb(AD_Y#ez%$8tOasDhXCjP`XJ%g#EYP8$n1u5uE0K|$`5Fco_N7N6=}hu?t^IV zDwO^0^JrlSS})6|Hb!C&fj1IxoA(jws-we;Wj^go;1A|(aRRh!;>YBIG4J-}x^8&W6= zb5?TE2ySjdzY^ivzcF^7n&UFC_y!ad%9R}bun8v>tjKDlO{dTtoFmdlvo&K>~!_Vj= z4VnjEGlmad$S*3LPjs~x3j)zuwmonMj1c(C3Ya- z5UFLRu^mN3qBo)XHvW=T>-yOR%gJ{^J?mWu?LxLpc`9#U(e@Cbj%VbYzO7G=eRkca zKF^>hcavAE{03B16PInAyinGMSk2w%n@pb9CN9W~Jc6e)%t}3cOk~^X6*H$1C*>T2 z?)*cDUe`ua&L)ePv|nQ5UNmhe2^)~lkAMK4a7&mV=b>foQGY17C39=MijRWw&AHcZ za2$|7LZ(==aND<-u(~>v5b*vKZVKHaok@~&QC2jZ4oTY(>8+pJnqG7I$;zeZFOaI+40hzn#&`O#Lk940k z&@^Vte4~w>$)>HM8@*B}v1PmO7U8NfLV-vrSl>mfa>j`{6^Qe)Psv@q5(q?&V^ar*myL!w4k*ac1)9~?aX zW+-WCPoy!z^&Qe+w`+hkub*WRE4!;2tB1#Jh;tUKRdp#`RI+(`a_v)4Fllbsl^BMj zy3WfloJ}MochSvB@?qy&gV`<c?E?D z;u(hPunYV01$;2b54; zkjG2M^>l9UdY2Q&ipf$J1`Xl=F$cR_koucT$el;VUp(dh^rK_L1H67|ZrwORo?B1v z0?6I~H&eU^K-MpAQ=#2C)BLf?`_mQb*KvmbzyW`Al>%P+>3{QczxbC^&0P^cT{wO^ zS79ieVSkkND6!#9z|li=L$tz!TiG+Yd<0Si~sbmL)PxVy>%)4N0fiw z1==c#^W~R+5fEX_Q_H^1cP!`c>f9VXb2*{=Is7p=^;BTBlOGglotQ=v1U3idw*N^pxc` zeI3<7c{|opzT?Z|2VC4G_iP1tf*tecTJWphvaD*-EY1#lb`Wf|J1L@L;LPZ1S%Awb zY}LUT$A(eq-&6(se@1uQO4=QmxBi>|GOGW(F8JF$;fLBYoGrvHm&Mu`SKt8Aq{hB^ zk1ba@X4P+q-xjYKl}@wjps~o1al<1HaMlfIbs4Y@A?H{t0?_1CNb`l*g{uS@*2p^Dk4%ItC_r)a z-5-tun{NGM+EMMg9LM_>Zy}i1svpKp4A6mLKcWBPJQjo4DgbI0K?fX22%KrJ?#j}7 zEmaL{UqYhJqeuk@09#*b2y#ev10u|P2cd6F*MmZOfEmC_Fr@i;I%ME=7G#AL$|=nO zRq++SeJ|m*{^+Da1JBPeWPn{z!z+tO^Q-h@^kGt1qDUO2XnDi?Z{Kc%N&W>qlak%;Le|lFuIQB z%p_OYLl|WrLk{K4j zH7NDF>RCZyozIgnEB5-Q+U_vJPQs2yMk2^+eg|Im@cUH|Kx9@gNc_qcU)$b*LXb*k z-a^|V2U%(2pj&nRIAr$ug}y<8qcw9{>rSd|-6;SyYiOy5SCDh^zudhFxB<1(e>dzVn>+?YlJZWFSpSrjKV(q(BJfXHA@qTyrKG?P zb}T-;0TBSg%X)l@IKl+!Klc;4dNaJd19-6ahGs%lAO}hO3C7p|l3r9tl66a{nLW85 zCNLD_^CuWxL^$4w;8o}Q_9=#qg%9MAd9o{q*Trp*a2?ODS+~B6LfHnVa{|EWfS1k* zm%clLF(aUNYu7%VdTqKY8;i`3e07>WGU&TAZB~k`ZC%}`IiO8mjzZpmgCdIjc%$MH zPnZEHPYFP2Hz3Nlb>CiNN1<75-GJFI*3G+l*CEgd4Mhy3WF z$0&4U7diV8mlXQg z=Ba}I)rzrl+O7<=YQ9zN=K-l-qUVy$yZfG6;F=islG(LRcQ zA`O%&A}X9i8??J?8=R4=ramq)afRWCSGib%G%wfUmpGJ;>J2KvU)v9d;$~?K`9{GJ z@QN2{vsO9|-hkdMK`BQ>Dl2!yuPp6b_bA~eWzVG-*hG-K>NkDw5&Cr}Tc1ezQUPfl zvA2?Z0G}Ygg2$L$*}db+1c~(bCCtK4RrgX)18otiECb&StvN#T zzS>Nhy}kjFKT|x+6=}{6h1n08P3>D5VSy!xAw z^2@Zj_tU>P@h;+k9NEYnihq!-%jETOU9-x$?|jVI5~>jS8RIh*ZfYn~63` z5c8#5*@MEQPnA%`HB41+irZS<8d$*41$^U=n*M8K`;S$-Ys=qUng7;0;Ol^C0<@Un z#b3OkZ_9k~zxL_>1w-!lBYzD7_zf$dUAO9XE5raz2@d=;%iMo~1ROhaj~wULCHz-V zp~t_W2lp9Jh+CUZ?w`~Y{l_0{_%9YEyO{)m?(N#R*_(hsphv*}%}h-kT|k(i2QNUN zd=TGzXE;+1Cu0_C2TK=oGi!4PFpE1U@aVm|+vjraT+Ho^!Pbrru2$Agwx*8uPL2-1 zGfEa#W~KsQYp|WUwY9ymr8$d}gQYd_lZB&;y)oDnxN>$kwzD?7dso%m)y)p;aA0^nDdpg+}1Em2Cbh|5@{Lg#jclG~OGyH$6*{`;l zoBjV;DFS0xS96!!y0cgryIPr>X{gGw+@f!FS1W`66HxtGgzHb}ZhH_A1{QaYzhdVp z{Ide&ZZ6j3cQr6K6CnRf`FA4rKmXP*l>bA6^#Ag~|Lwm2_e$JWoCOe5=zpg@ ze}3u@q4~3{y8>ixOZr#${J(3B<8AZEZ)^8crtPgAeyS+!?ErOqVFTzJ z*x13;T=t3QBTsuL0c&eB0Sk5>UOs+PQ)Yg4GcIN>Za}N}IXNwuIZSxDIL*1ZP53zZ z|6Q-|#83GDTW^^f+gVz;S{ZY2^O)UMU7MU|Iy+zqAN;A48zzlOfYpGNgYtpY3Vich zJrI)E(>WrCzw2n`{{_|jua(;HdF%POUG;$Y{Q0-?r=xFfR6v9@c#x{)LU;#P#0FRhH%f9c7qaG%|eWypJw<^pZ-%2e|@(20WxzdSkyFZWV*&m z^Mss$q+WTR@#$O4KA0lEhU?LPFgyMtgCG#c^)Gq)Df}F!uK!h@{_IFVpg6wW3e?am z9mKC0Ftqp-{yK2HZ2oYZZ2quBX>hPGu&_7|#q^oGZ8a;5JQpP2#c+#F@Q4K2&=8Oq zgJgnE(O_Uu?}6Cl*a_M25#Ti7;ZQNP%uOWzuwww^B*fU!*idfop`gM)HFt1jf53)* zdx?ySsP5us?qqGsj>3j?`wId#tcDsJ=|eOQZZ>vyP7XFs9xfhT;F9OhOKx2@&A&a) zjseu=?rR82PUa3`vVVLY1r_m^M6*+~QQkfRhf4ITK=RvqkV`z3CAW4U|Me7`4jVQC zBG9NlAy^oM`*(l9!63qkgWxquJUbYbF?@I7J8_N+vfQ7)-WkrM5*qy|&N=y%0ZE*l z?Y?|AciejPGRyu{Qf46x@-FOTs3Gbob3F@Q5-)HBP(RztUN%&q5+v9#FgNh9Y#=tW z+bb$~d^WrnIJ#uE7Q=7XO2qcmEJTOJKO z9vjXd-+_bw^DpY3x6$G8;BmSQuvs1vac9_@NGfnj+%wsZJ!8DC(K}HONwm&yO><<44id-Nt>?3q+}1MB;v=6O^L#5=J5BRRLmk~xJRX>C!^o8^GF(a!}2}*;0cxlo&lNTbp`(^Nowvs3U zyUSK_iA{R$N8||R<-^DHg#j|oPj#M}9h$WlZo*}j$bYsu%VG?$iS7Gt9gLjPjx_C-VfE z9*Srph}?tZW$uNpo%Hr`JS(foD4uq2SZ+eM%o|vpt@}J{C9K&(myp;!kFv&fZ@x1e z(kBm>)1vo)mp68_CQ}N{I9T|9AV*LKror6 zY{qODf9m=@HaI|S{-*BQbq9HeXls%P$fXQ9x(RHXbV4Y9QNVv>gImh{QvqRu{@M)y z0mJ#j!hqcPg1jGMitlUrAe7d7%nC*Xc3Zcti0N{MQ+NkCLnL=z`=|}%ud&y-ig>6Q zrx~YyR1Dla+V2#a4qtntghLXkb#E08j5KZ#QHOdE62~mEUg%?o`%y6uD5LzN=kiE_izCvJeq-vwN zjNvSJSpL!I0jBHxXW`eCz2&vDn- za%8ce*5*=uD$9pvkIZ+EwDDFy4xJD#FYc3dd}`Mv^L*<_C2~G|eAovxV4cX3{gypG z@hj~b1riD2TD7hd&%!7JR%%wWV_2L0ay=5mjenS@MzL`yWBv1u)NAFNlxI&&s%HJ^ zHU`sgZA%@-il3I{?|*+I@Ed{O2>eFiHv+#A_>I7C1b!p%8-d>l{6^q60>2UXjlgdN zek1T3f!_%HM&LIBzY+M2z;6V8Bk&u6-w6Ch;5P!l5%`V3Zv=iL@Ed{O2>eFiHv+#A z_>I7C1b!p%e-D8ZZP7{<^we5KYL?FIS*B(8D&_E32YR6;)2+dZmJXZcJQ}V~$ICvD zKXA=zxcD$wQ_5(67JT8L()79TQRM{Bm|0Z!lNve@3Z?+3tgVJT-ra9hzi` z3EsZN&86+bJ;Y~l=1L!gM|Gk}cd^J2@M9kT5V>KJm1DqB{RqxdmqDH#k)0ioU5!?a z$+#(jzSuK3ZgWe0tLWs)klBQPcr)gxb`Z;wnsZ1uOBzJ2pPfn~$DoSo!x3ztHFbt70>W^#B#i8^peE?tjz;rp?Nh;2Wt^Qfc9Mq%C)#&eCX^pCFM@2-nh z7=i_**T=w-KbV~rnff`xEOcM6+Dqq6%D3Z^Hyj0|$hVoxJdE zSwENh@#BbocgE~h5P#s5OM7vRXt<&DyLd2Uwfy6!*1XicWkF)D6nR=*9<>DLBMyD% z*re^+I+=wjZ;Z^(Vagwu*v@DKbmX$P)V)y?or#KW@*1aSCJFP_3|3W~3WzSuMR>0C zQK26dul1W{KMZJ53WR-9X96M0Fpsw4*RtY2Urx#6`3@2_^H9Su(wp^5Rz*Z9W36tr z8_MImU>Qb26@2S4V$43JIAqa~ERMeu-f39TiXP;PDT+!wTM(f0-DRhSv;JA+1EaL# zxd$rou~CD2LkCybOp_ z^ddLLwBdx>>y!!@aPnA>V;ik5YpY>$c3qirbr$yE1Xh??6^YZ|YC}~A-7octY)q&J z6BwpL5qxAAVSOc$HiwZiMm2{Q)1|x%@Qv~yRbFe&_E((-lk<%8z2}-?`({j)>Z4&y zm8AR6`jo^^H%}#mC)W0!J}7&$CB_}wp_UjzQc-k(3f;5P5J-9&blG|TofX9wb}$a= z7oD;l{zQvMDyL7Q`e^Lh!r79&+0VmXoJRF%`Fst>wnLr1xY)tZ8gOIz{C1|#7@o;y zGe(_&6)PI%LMTs(VU>U@Pc?lO!>W-<*UGwjSEpTFCLsx9*?&8f6;qN@Z>&pw_?>r^ z{+K;yTy@)kpDGJ-+6=LiwIIsICahQJ<*33^oZWr_R0!@t3=SbOgJVBUc$T{(gDRq) zYz33hs$9Q+Zb<>vi$~Kzgo| zRr+4TkjI9f*GnCpYbIt;%{)ll$t0*2G9I0lqK-7UxyOhK^0ulRHK87 zJ+)1Ub9~xxs7gQ6*Vg*h7;SW3R{i=ZhGl*h;YyPfNpHPyMd!#>(HBY)JSc_5FM7zV zs{`L%STEFUvkkP-`*`UnT#>)a!%oik=d9x8hv6V|wj4uv^?^xXjh@S@fR;haTdtTE12#b8PwwNU4|p!LLS>p}@%Qp(K4ulSi0I zdAMUCIL$haz1enmqnqc=QyRy(+!=8@N*SYmm=yzL)9D~QhT%?4ydLZhMK+LhY+XML zobC(_x0YS7<@mi=WSN|rTrzqPifY1op;^-QKvV+GQ@@suXP{J%zAwt5bE~?E5 zec~3L^{mzHHOlT3{hl&&y#~pYMU&YNZ&C}2@nG@Mj4tp$pvm$p&IN=aW#sYX!?3E% z^1r5(-r)F_-TWza0{ccm)P;2A!C^4}7MGQm`U3_u8X>62*GewW+BNr=t(zm*74+?$ zOt2+y#wLx)eZcxJM#=cHwe1Vgn7)g3$aU%TR0%d2)_%ZGw?9MJ;N#IjU!p96Cv}g# z+-#02Z=Flt(~j~4Ul6{}#Szu>&9PaQcqBWHZ;|Dcos!2~iuE@2Fmfi}G9E-GW?d^K zBYm#YAg@%{Pniv18V;_TKq?cYc^s%pT@KOKUVn37&y;3F>t27p- z8U+?G9NKFv#la}(MSVg=-g2F}A~F-{!*d(zPAgMcpVQRQ!bKh89c@fZ&im}g-@4<` zJM*kQmCz-si+P)Lh;@brhIbg}*0V2(z7e&6Q8cGJ@r5z0%3#B9zt8!g4NbDpXMy8O zk%{bBpAF&2{Svh+Vo_{f@M2Px**JxRTjV36E$`hoHKwly&s%s?yPF;%C=}%4gJf67 z%lZ3!OjJL7Jrdy+W?t*Vfjo9F7iRW^RhSTF?tO`GlT=41Ir$XJ zhBJyrvovo?qM>Wsr<`QfbstVIJ$0#aq9_m664b*v@sZw8zRxExi(n*a_;FqbdZfZQFAFqI?#H#c#{tni1qvLDjcB??1f^tW7`{RmBr*euu}% zFp+HA-NKjjqnqYB`F>Wi;i`*8qYZAa6Jj_X)fQ;MFEFup-?%!}rQ}dCcHJiaM|fas z9mMxXe})K*hddj7dh?9ewcA_VrZP5L-37y;P)IktQ~Sp(1vNAi+f7E zK9Pnevb=v#goNd5uN%~p66;F@w!JY-c9{H9+F)^+g~AbkJ%RtRKgdf-+^%aLPmv`? zVsm}^Q<&ws9Ll^!x#L=*M+Z(9As)6D%vTWwIOO+XTjRbM;wpq3-IiMEf(LFJRp2p5US*!NP;e5 zPechPm|aqrp3T@c>ioW<4S`Hdm$lGgn*pbZ)K#d58$vn@XXvJTsNqvAI(2MRU=apKAX{3C5oj^I!n)SfCfJoV#qbYC?=FqsX~J$| zA}17z$+E1-GmsiJKX(@*R-^PtFW4VAkw4ho86hd|dgQN?ID2}iE7WU};g5%XWYa~W z`QAvpi&ziSgOpl2b=s;aZ{YCl`yM~)w&jL4n(S}f4~gPR5q=P0A))rwGdV0y=Q|2E zPH&vd2N(sX)4i@#oA%f=oUfvJ_-ar;lVsq7HGDE&pM-MkX@muLi6jln;XQ zmFe;3b8&GeiHb@$D@UE>#~P53vp!|G6s;lto#wA4Uv}TU#v9f1Bf-*+R6O>Z;`A-&KRn)-@l2Qtw ze#qeGuYV=ff$+jYvwTMO)ZAMy5kW!$fj<^C#c&YO9bq{lK{bYE}GU0LbFMOS` z7fxPLrQ(;P-e<20^nGaW#gxZiTpq5cv~}ZRW&3neD7->BbA2q#IazM2QZ~`Q9)v`* zd4!EJ`QBL0cW@R-&HTNPjY={>+&z3$*3YlV6UIQ3@Sn=RkyU4O=$xEC9}d|W|Ga>u z$DjgvWsp#qvi$Iw7w!vap=Q{iK4KNsqr$;0Ne{vE=RMI;bax=0_~j)=ftTom&}sE zD31s`739lrNWR;hwAqMXTWE`wSXMI*fWTgpB;>spl>X!bew*%U^hsxg;?aQ(Wzxpt68WPHvJji>nn23s_R$>n=h4y; zI+QHNT9*#v@=CScP`_C(I~`zFLM~bD`E}P1`8!45QvZ*Y(Xa zIJSZFV%^&Gwe^p(G)JaG(UWl8I%+55uxGmP3o<&1ldDzY{_)rsohqX5W=m>}xuW^U z;fsxWc-nWor`}4n2w(}a>%66z8NFic3EM|6G5mqeuH%1>rR%#|h0p=xPaKK2Q&LyZ z8g7z;byN60RgR$#l|vjx% zK?)X}!}-I^E28JGmtI`|4*)Je(Z5yfxrFb~TPisVYlb-Faf#j9!VfE7wWKYArCTdr zKRtem(S}#ns%I+0VpVQOKd|Mb?w@@K*#B`pdg%{PwuOta9IC!$OXf5IUQ-wxaKm%I z%+Xn3|9vq_cUKpGbF^5@6(nk{Le0AKLgQqO3Ra?S=pbGHd42W(0`af@JH!BaF}lVc zWOT|I{7~}C4e`$Qmj@4x%%^uVcM^8miVW@MS^IJSUCtge@$?3#u?(z>qN{l2Tpfcy zt1Rj%a_7fsTr}*Sl{!oaT3(q{dPn2k^<5*04577!l$$uCc%~3K-s8)tR?M3Kr-c#$ z{^TD9hxF8jdLhm$CB4*vDg7wVdg(m(2}7klVsoNK1C6tcusl6BpwG^|(&_D=t!3fb z4vt0)#muy2<@TK&R#L)nExA?YEcbP@z0v~=inp5DiHY(x9x;G$wxppO{47^ZEt~A` zn*YwD`xuqs0uy)RZh?zCEba?dqiskB5>d)+aB1K34j}o>HSV;IA%i?(4 zm_x<#RG0Neu8w3(EEtMj)*)O2s4X}t#2iL#^ogbuw-j(t18B6;+*X<#`kt|gZ6AXR z+3r!Z_|$EbA5qW|MNl}#DFx-Yu%0`?Ny3^}q>p%gJ3A4tZrc5~MKINZ9&WWM7BcUo z5ElWa84if;8uQtd46Q)(AKUZwwH<3cv7YW-iTBKz06{)fZW-#HyG{1;T%i{y>j9~r z-*RbsGV%JPQ0R2P4a-5Jpr-Td7%)4@{-oOGV;sX=YUbK(9sl_o6WZ}BQK02z(pME7yUl{r5(*aYIuNWpu>}R8TT=Z+e?4<@ z_d!X#pz{fMDT^hM>UC&5R4GAryL%v^ANvj3Ebp=?^{rY@7ZzX7e{v43QGtsY0n1{( zrM2W4HJ5JOC&6QxX^^QT)@Z99AX1k=K6)W`w_#g5*z&jo&vIIp3kt?uNjHOPK}4Kb zhG%T<@xN85tf@OC`k=vb;hNd!J@L-xcwD9F_Yb?g{C9`KTH@So@Myaky{K#WLY@Ow zHx)+|n7v8g*xNKQ9R6k!v@#@lm$T!7m+B$761y?HZg^Rg-}_LJS0E&wSc-d z-*9cseyE#+9-FD1?Agkuzho!$Hv!nTV(A`0?XnHuD9MAQ4lq7QPTqB-S$yVib<*I> z1MBS6&4Ez;&#K+8>&`pEG0&>H%or3?xJwTlPhi8CCN84ID3tkucgufvHqTre%3C8> z_t(H-Ji5TssV1heZ|S0WTwC^v=k;A;+(@ib4Hx(1UUiM5mlKXyvlPeRlzftdUn+jP zm?_bHHJcv>SrKAaQyXgpaKpSF#QUd(VrXuStmfcmdfWx-DJ+g;kVOj917}>|m~7^u z&J-_v$>hzhS}7)@5^)6OG+I=B2k=d;_DFp(JBRkUrCs*8&u-LMyq5q?FXu(2x?*X{ zEAx`DR>90 z%V~hvNw`SJ#r6ed1~@rYGy-3U*f^H+V~e6N`UmG?5@-uY2GZp$MZ{c>A9mSgp za+_mwGG|X`S#9aD9J%jIej_JdK~nOTG?s%fY$tz;dCEi}q_b-YB^$vFuuFb_&|BD8 zqEHLaDsF+e8u01E$*dH4%g(>!U8i|Sr7Fs?eSU#|2xcM_;4-j?ChR;8UiMBN8o;n=7i6^>G z3BC<2h!@|zR*-1;JYMZE7rz_)d6!3yvC&Q`@g_96@j*5@f7!N?R=kw#$tF@WkS7Xg{-$G_Q z3E@&8<%0YomZ_BLOLYdIAY6RE^XS?W+wzt=lW938E6k-#-QNPtwJg5T%uiVqK#8TQ zXctj3YkXQA2H`-DN!rsRf%vXx`MmE&V4SpUUdW-TrQg_WtDcEFU8|&9Y>y6m`z$opU=9Gex>*hLJ6ua@8_Q2Lhzyco6!KF zb-G9rsKohJkNxq_ASH6SGlk%4uXJh^9k5HgC)R$f>|j=f^5BTebRKK|tkn-4tJffe z{*I*ItN>|K_#mDMAstI@=e15iJO0P>+~7B2vdPmwTrSrbjH(WSzM`~#zM&a<){6oO ztwCauvkKWdUb_^ei6VoxM*oF?Mu%&Edo#I?YHtNB=!$XgkYl$NOQfLSN{I$siyC*D zAWat7oA>W51He}#+M~x2h@p-~?7*7iAUsn)vDUOqA2~Wju-)1Qf^cgg_$gu*p1aRd zkUFz$`BW{^bXy<2;HneC4MeY$TW557_rDO`StVSek;!jXh!W{_tX#o3=yRXy zZ=<=EZ3nZ~lKin`0ywf5-#=TtohQ){_X!)DY&(RLsT=?_Z&P_72q+hb)Q+4TFK4AY zYv=k7##y4B3oWb}@e7$cG%Z?^_@nGgyzhOfGr3O?!s4bBlHO)}|3B^Kh9QVyn&gc!A71ofeX?`0Qu4JC`HFF)k}LDBjq zj)PIpHr9Jdy5*MMy0p+r3vf;TRpxO4(8Th5c%O1j*e=S^Ll<5l38I4nZH80fiKc3- zIND{mPeHNKcrYQo@0Urch4zqGb6+l6*1S&`s27&?5iv1dk-^eK&7*U5<@y@mKbqG` z1`sw)-#NP}AxjJy-alaNh2ZLe&B{V8aHnCEsUO?q4J$1QpX`p1g`LDwu2z7VV31?( z^F9~r<;;5t^q(YPn^rB|yUJP=SbpVhOfSsvu-BV?EaZd{875Tu;Xi!R%uk)`guSFes!pnAtAdG5~nR`hjrPy7E0=T`J)>+{Y{%yp$h3qh!# za_01#2>sTe(&3YP_8owdB)w>R;917{R&L?i?MGxjm>5K+_7tC)IOAwH@rp#P`(Lr5 zjHBOM1%y2pxBXv(i;ZW;ie(a$qF9!@^oJR+&j|cN+@QoeMlci+Jff z*raon%G&j$&-JIIKhC+)z5#PUiFt`aw8YXJmR1yt(XZt%2OVUa#0!tmUSAAfL?1t5 zLZluc`wLn&`QW0s*jvU}J=M2ZejAe&4-ym4e zmDzLjyEnu6kDhac+zZ;6RO7vMen3cj506K+u-)uK$ChmSzU6)2(i#|^7Mhnktdng& zevoFB+Smn^>b3;epQaeno`sZL!H(C1mKo#J<(rqnV3h8rCC?2HK;+Fiw+KSX<7*|T z!!a1{T?A9k(Mv93A}PX!+_aJ_asN6)=}PCUESy@p?&*_7`z9E9?kGT*8xInK4OC!y z6fJz5PnbDkNn(Uzxibk$x)OF0Yq9`~EM+Z5b>*v4`aoGlcbQ8uPN(dWUHva89J&kP z=eznMjqi(G{L>a}-wwrDtB@@ntq1H1*bE$p5}4&p@}Xfv)e?M&UUlnme!eS_5@4M} zqq@~7!eL_vY@97MJ?4r2Pz7J#&E@7)nNIRhs#oA#*KO2)$!_|zI(#xc+-Euq*EF!^ zG!@pNww>|$KK1pI>}qq^Ib%x#b^y>$s=O(_lxyE`d&jMh$X@v;dkD-&Em}S1lPpX& z^M&1DTFYaisfQ#z09LjFCvREeR(Z0_FG|^j1ne%PIka?xr`fh{UiV=nd8F{=$(FqnFkv29=wE4kU`NPWRlE@f$ zM$#$(R2x;^Hg#hcptPTx#L!;eY>V@l`%Wz26b#6+!wIje7!x}Ly#7`ism?M1pC#zf zF!6`%_J>87dqx)-z4E>&`Jlzo|MW2-L49r!-Ijwl?Cr|Xy0+WemeP&u=s3RLzf|9{ zH3kG?|M9CfjRtBCUYs4W!$fH2+mdnlQK~%DEgD^qDFzYFk8|RrcB|Qhspc#?7q7KO zRtiNznte958#k7gFDHm-rG<%*&t9MWljYGSXF4?(Bb+Q%EirQC>`LddKfQ%{o2O%w zk(S~0_|J1Iham@})ES@@Zrt8@=LO?ZZ%lC)+vbwkgcgXOI~@&IzzO+R(r+X+ei?=J z)NNA_!bI!ln~C?rR%h*we~CqAaz4hI@+=Bmp-YQ-od6S^d?b<2 zLZ}M6#!!9Ox}afYYHbAz@(f{hx5CrT%tTOJc3)5~jtaJSA3!-BF`O;zegeMB zf5_uc%=m@R2p-D=NIR_!U~%w)7df*uQt#Kw3NJ0Aoz%HT=MCQ+qM{WtC;0K88d5#$ z0HaRI8|g&23PM7{XlAFjGLCPQPlmLdD_tJwJ@S$hOPoqhkxcM*C$!;)3+_%%GzAguz|5=FJghU89 zDqKp+j*Udz;ZX=lKn=_}8KZS5bu2fg#mZok z8pAM{cU14d-^+guI6113!D$mK?`pKV%V9l3kCV7)pbKs?_Ib$Uc)Fb28#30}!RB;Y zdh2nLe$+6rYMx<&jar_RF*yf_!U1BpK0=xOYKTMYrj$7A#6(^WbtQH)$0B;msT0pq zc3Y;Jlbv|`ls3Z6*u+xD7~wKMVGko}S1E^*J8=YJYx5?Bs~;X69U05sp0zQHGae9@ zB72*J!&#{5ylehzSwd@XF*PCSTRZh_+js6+4>i~01xNv#8>hJ{uc~*tVtaA!luNL8 zOFJ#={_!{&jq#C7y&?50hRliv8Ds!tHeIc!lyUB4X=i$oW6e|K*WW~w;TJRn^B!_MR-)A2>e6Pm|>?5taEq`jBS3uR=3?eoY>eVeQp)?jO=1CeKOW9?hi3i zxHNka3LiW0BW#qT9+qKb-?8)Hy@_+Tx2RBy7-$dK<152>%~~W|LVq(`_83fy1dOh^ zm7eB;l^u%vG=~16UWDsfsf3Wk+%2Da+%z$RkbFAZP>xjVd3SkNGM#p$Zy`IPo2OG= zdm`rMwVLC`CQ(B89d%B;f~T}{_5nK_@I2IGr6U0wgug}1E!r_qq8u;vyhT9-LPPNO zaAd!dNJQ;2&r1lju*Ni`w$NPQ(j2tXpQxtEnd-k1m#I*#9h^ym8(6zhOd5<(Ostw9 zT7z6OmCLY?{;4|CatI%KAo>x4)yQ?9&eXBt0+GS}@o;|dOI3;yx5hDxTxxA=s#}qu zTiVH}_G_Ca&b>*Phv$B==9&Fa151LfA3$N{it&`i)!5)iPw(Y4h`o4xr-d%DbxZvh-%VebSm{8FylY?p^%qEHXk-RjLmEMkKqyrt}7s zD1^$7&hk?$U@}Xq44Vm##h5C~PKtK7BW#+W{thF2*b1-&qi)UU4ES5oKg$`xUXmfv zOdB4Ns9^?u%KKQiy^HWe5<`+{={mLc2JEx2a!pF7n^!!be=yqk{FQJe;;en0P^3`&8o|0B zdmBY}qj*Mw6*)hQh1(A-VEnDJg{z14=R3hmkJB;hzS}~`#2kHsB`U(}dps_=e=W&l z;|DjK@5Nf?oj^o`QZ!H6paG^$t=Mc7PGvz0KJvPeD*fD8S@B>~da-g5nX6+p;hbZT z?}`OXFi5HY#t{OBXWn|Gg*t=5$vb`I6=rFJ!&OT36&f3P)o;|(GW~|~wZg1{{f-%x zKrVJ~&p&@`7ql{6VbnqGlk^*jb*sQHL7LR zcV$J8`P!P!VQL2kJzzc(-3jN{;w*iW1L1l+>^0!N{;u4@4ZE+0YRRXd_66mpYHc|8Sh5?d-Tl_PH~^Ni_ACx5r#xylVqnxV)s>Gd%$Y zFuL~7cV6@2>ah*OD9u3v1Bs07+ddUNJMWsE;~AjgJfw!o85$9U%-dYg<(d+^Q<-2Q zEBioSCBQpc_KXDYu!WQF6l5=>tlDQG*uM--Lk6v9>01T!yArjtk#cI*kerzEauCLZ zvHGn9rneiab8Al z-U<@d+zLrEHWBss*%jJ2^vVz(Ew2S;v3kf!;hHGj8ux%p@7KZ)!UWhNh`)Ko*q<&s z(mU(UJ+}Hh8z+Z>Jze=1Zd-jqcRf9y|4|S96yiV&^yN`S*$l&WJ#a5IYW7SIt9#h| zcGl$8zpGgt3LT4bY;x(+pHD3%Mf6+K+xndlP?03vx4}VMn|JK3O3Q?OXnZ5q-^2FR z&?u_vojdMwq+k83Zl47Q!fZmlGjffK+H(#kxCcyLzld8_Mn4{q)(V!NKY2JNK%q5_e5Oy=y zy@H#wFRkR@rb=Zq4Id2EeH8b0l@?S0^MM!InF6wc>JDT$*B#WycO z3*61qosAHB|0ZcjQJa-o?@THv9unuZ0NY1gDXnC55}Q=2&(C%$5Ib3SGy#!-v>B^O zO6{{Hf|wW!rNzXr6diifE6S{Ki2qVYvdFVUEey}BUJ@3cD4=HX3&5Swcsb$_4H}c% zwI;o}z+J9Ljj2sEp2Iqx27~KOJvR#?x-^TC4 z+omhvLd!5V%eG79wN_i^?4e`q58m-PI|^(+cR=RJJy4}BaBN^vWb2D00&0X0*8OlSf z8gs#d*wPQMiIo*PllAs+Ukah697^5@J?sm^wq@HU?&9!by=*VRvgMZ(Dvd<3q_^RC zexVnwCGKep3mR~KlTKikTIq@ITdWibssD86(w(t~(E=P;B zo9T;16B5qX4Qrvcm;IPp)7r9fXa@Q`BJ=vk*@-4dIC%J&_K1Q0aB)a`Q%J*gdmst} zr0a0c+CL0pAXu-#70@jTr?_1dDf^TjN0aeiOVW;?4FzIszHPYT;!uRi4hx5k(mAzU zyAp+5Fil6c;>G0{|!@`8k82c0}onkroM39<`*K@1CA`sqj z%^Y*0?p#?;e@iP!Inw2dq=cKk*ly^`!G__o7RB9l08yzssX)@gFI!q;h}Gh5=FaPF z90-tDn+h|!Zr7}$w+v%cypUh9e&&h9rD>rL%B^G|7Fjv#Z@7Bge31g-5WpS7d)17G zIsXOaidm09#d#FJS>=D%vW>dGE&ms^$JJ^Q?$FSY%$gG|+xCDC@rG%WIJ4tURw16F%0RXeuY{eR!xgOZ@=bJ25_NYko?nnC}R_W$>TH-*=uqCAjv(_AI7fXekk`6qg#~_M1 z+AROBhFZ(&w*m-n9+jKs+0NtIw+i~EULI6i@9HZofX8jK;Lv~|i}EnQX_^~*pIl@Uo-kzX?Rv}<;7&@~hv`q{I;WyVv0~vEKq3}Eq;;Ep&%j7BXSCrK{hj&N&AV^A zLTqt4aU1+geTV0k8{05k-&;Jgz!7zyQMmNdJin-;kU$y9VR@TRlMwm6J2~&LC z>pF8LlJq?ky*6Wv-@{q4wn+%&m0GPWN1Em1cdeYEPdeDchLKV$YR+V}7}~F?&6}s?1J* zkD<@&WH#N-oMd*&Va3_GIyD(O1Bgp3Bt@ZKUINz1%i@hZnyOx=tJfl^?faEN-FW(n z+o~OCOLUf11JNoVCn4nK$pF$?Q}cg^IFh$b@iOG*whhVZvYeU$HHb5C;<6Kma3Xjw0D zxeaVDPg-k-yhJw4u`;UPN_M@j-A)lmApUq_thY%7+CQ!Fe!p*ZZO=+b*79aKd>5Ih zjytt`q)g>#QYHDH;oMPntUO~b&%x-8$W8%SXrwdXWeC2e!+oA9KG0#+`&}?K*$|K* z&yBo9_vVn`T|CqA(k0J^OXr}-&=E*yOxyzwnob5jSHM#9k=+tq(dBqNEASK_My7|i zYu5jHmdEGSfUtf??<9ZUKulZXicsKamo6*1RcXe@G(ooj+I8#(D6fvHVcGnbYvPmE>?eCQUg-dRHd7P2T zkL&>p6w|Lgk+rF@y51MHS~ye1C9&KVduHt%myFnN^pfQu9)$>OK_OT8@0&pL*Y&l$ z0E z*2663)pf;65egHYQ)u@ZHm25>Clrq}zi0*7qoua(_J8cEn4>iB?yulG?ISVyoO4!7 z#&mMN)^gvRTRzy0G5!h_Az4R$R1ux_Wt-C!IU88~Nvso5s8=6$bFIAnDA%Xjk0wv# zB7_p<4=*-31L2^))qgv(0KDeo_HMeGLdJ;NgAt2rI_j+#u{9~fdy1+si*?hc7hO9B z0Wp-P;bjtKrjdZWHE3ODiTztvgxF`jgY(zhS}21LW_Jm%g@>*~K2zFD&gE16>MrcP zW$0xv#6@Q~KKmqXPRXJm$FpHy~7I8n((;+vpl8Z>UN7Pz;v2oPIx{$N6DsNN36RGLBmAK9e2tq#kq;H~0 z!2QkcM|`%L8(n0c(Et4Jf2U@Let$+Kb#*K;9jA$4YasWk5$DgD!)-(ynmDnr*oBTE z#=;(UP@n^M(*nc_40nAi*HoW_FLS{0?mp>aM=XSfZ2iUepj2q`d&$t_PjWa%mp!kE zh1@D|X{Wg{vQP&7(d@x*#U&ERSpUw!*<5-ICj`;JA-kvsG!rvQy+q^gm*faGw^3m# z^}D}P9sKJt_uzBT)AWPb53T*g1Y(kPH91mEzPo9OM<$jAgTFLbMwkFuY%UGs@kBZf zMW?5>cB{JFyfZ>WZQ0~+mbx9{O1sADR_)-F7=w*R1gBsF?q&--i&iKT@znDDq%#J# z0*_xxHLDSK+&AB5W@~ioZ?)Hdn<4&5gqfdVDWzzZ zy(fVNEw=%XHD7Nz7?E<>G^3V*&$AYaB){_k*m8+(f7#w@3ygJ>=&ELH(uaa;YSeAp zTZaCvNG6DgR)BnYJVRfjoB&? zxWZZD-47jGk<#PT_=t!L=7zWQV(kIgFc((dI??aCPWuDD9s)PX%g%>4Mg&Q)--tZ? zx4n|(Oe3JSp@m31a=Z+ErGv;au)0Zqc62J6IWzLGckf_fO~s>YPt-QQk8EBHDal+u z>JY}9%kX^vIh-H{aF&SQfXh%0$M=O6Q)@6pdUCASf1J_cT3Q?5!Fh^WZXEXF1;P8H;UE6b7#g7ejyF*eRUIf+V?VoXk8CUcPTBg8T*QRLI<@ziy*|x-J zZQ<>7F(9e!P)p7ZtizR*IAhEpVS!_xKmOX2tL5U_9|Ul{ZC=R|_)iF{TispbA%v1= zN6-7H)q^}siA`agxwB*6a3yLOAJa9xORDqW;q9eCXE|>YoyR7P#+Rshs0fFdODPve zxMrf{NIPKx*6z{)p?Kt2j(wQF&9v{iqFT6K7hx$Lee_`9id^EqdeM=pVTu9!r z)$#IxT+5M6uFIkpe2i0hV;PC#fvO)H2xbukCw_a*l+HD^S>kD@#hi|Lcgqd>vzdOc z&PptGrvXv%UR{~fJleNaI!!^_@v2#HS zkX7Bi^vk6@cCk~6R9BB>V7-_RA;%vFzRKv6!re&}@n9YhikODjfJHn%rTZxhE3F9J-&-bM?F zyM&~yBjh0qZ5vwmOeC|j|C0G=$2Y{6eMZXhIG48$F>JJ4jhD^d86d7rG#VR|d3mGc zQ6IhVr@)ZfUuxxmoUWOEQfC!q(r1~RFt%XWCG%WfY`WBO_rJ_;d$&Vmbj0;?e;F-} z!=mO1DJBecbOTs&VNSZ;u?{ix2|UKD9R;LLXc}5CS3)inetKh4B`BVs7IAL!UOqDA z_H@F4!}^B?Ri77W^?8u$QP~Ou1;qmDi|UOJE%x2(hy^STb*PdiB^X$w9h(1?J?uXCBypAJ&IU!*_Ene%~LQh zrRX%yml#U^{dFTJK3=f4iwC~5Vi5deO=K1tB&t8`vaS0%k8vQM7=YC}9F|v~g_0X* z>&xNJ0ID7Avl|9$JcfF{l;rw6N{1zB0<{ijl6eUams*{*fQ0zDzWn%V4XF= zTWF*{>G+L0)Q+P2TY=x(b`u&8#JM)w7{(~|(CU6xBcQDm94ZM18tGfvu)Xs>r*X8z z+7^2`3L|Kbc5!8202726h-00?7;?v#`?%;>kszfHEt4Pgm9}Kh+GEoQr)G4`wuZ#2 zm|ev7It}q>1+y+EmmKC0=zN~59a_}5RyuXA;9rI*J;1i7>5IW+SBaGhH!=r~smAuF z&WTCV%>^F_;-~-Y@)1o7J^*1Lh_sC@^SS z>3{qDF+-?E{x1ARY%imCX6QUcGtJZ^=Z$Q+K)VARwc_aLw1XscY@+=-Ph5U)qm~zo zExBqFF)40E)p&gFX9wT41$m5TjoEnXg}x(s#+=n3_95Nb2GG~W;DedIBYLFqK$!>Z z&~q(J0!j#MHz6fO=&X&7#ef zw7}U?8N?yG$~6%=ax8?M`a$@>D7-CrQb|i-<>(R_s#mu7yp**!!0c4SWEj5{Jj^WG zEn642&F}&rL0T;LPaH^+5OwFFC38ob+;@Pv5tfR|TMI)`Yqf*?pSonXZ#<^8QpQ+Z z$X;>b6xNwpVsc)-H5o~C!sm>{C?k;pV}YWVVi4Rs^v{AiYwulP+r9~+lkLhjlW?&) zY_7BCpZ^&nSR1pQ)PKS?InOfQg^8Mxkh2ld>F(~m9 zqF$;_KfQ#*?)Ioxl-SGEVe&X?n!!R2(kw3ONta&gl2RX=?Z(Bjl`fCRKE-ldtDy1* zo9}G1@o$+}=RJOhz`=93b_$N}Sd`2rnvTJKb^~ObqOM$7>OSkb!TgS!+#K=x&zw1J zS_j85AEw=iNDQ0EZTHza?Nf=@f@XulL8{Zqhrtcc)WEeXAG@=wh`n-MGmAj)(qbrRzQMTo&$^?}|Hgwrwfq zvRGRoRm5YKfU|qZN&DI_Jq*n|6T0l=jWog6t<7zIlY#B=n5kXPQkmIdZPGuzr8^+D zB9h52Zp-zCoVPg5b?|j<2{ryBsVGsVxAKSbhe-n|?eo80Ti+XS6I4f`)>pT)cAd`~ zd}S6@=>GQlf(uc5cCyES?P$`d`*61jyQsihm~?sn#8x;`Yv#9w;sF}+%3(_1+b#WJ+i|(>>Of!X44)q&9AM$~1WHZ?>79idmDmXd{c|)v zxgy9C?za2E3`y)gV*CMA82wu$=F--|kyW%gqYVqhK(@&M>>J_Ff#Pk`i=(aYIFML7 zRWe?UKs?Tfb^H-j*;HT1ZR9M-GX@usi#=4oK}kSucJ!()id+OA?!nR;^T%e*Ewo?u z1l>}wi2T!8La?lox9i1vC&|66P66yfNq-|!Hj^BWW^l{LPx+HBT9RTfdOi z_IU>dF@RO2e0WoOMp_pKKWN@z66{yqZ)W2c9b@<8dYGFHToOaXO=P(!UA}EG=7eiel>?WRMLeQXdCYl>3#g`}k>Ug9`{ZH(@oM_FS>-WQfwD zTA)H3lWjk4K9t|x*|XjrN|J#pAUNK-x}C-@EIjn(fNnk`@6WvwAm=Mntp)7c>C|?p zkWJFnH6QQTwmrbDlrZw_xlxUyzN*+mC{%+t3hOy=wtO$MPXgPDbj?Kep z-;%#Gcd0$%YF>R9YD?HEd|@J`2&-B2t&cM;hwR@TX;F-nr{!TG8RDa;?05;9hH-n_nA%MFvU-v%Z_K z@HS|l8J!aAse;C1BiL^|!qHP_e8lF_fhjvu$f0d92d8QOlaOnReiDHR`_}>A5Jz}xiM4H43~fetblH=N6{=mcIXb%fmrW2HZ!^XpCgP%n4TxIM<6HeX(WsvrJt~ps z#R6iVtdT3g@AEFpc!FaSYqTzGBFE6rGB8+P++XU=r{yNNq#)d`}itS^qb_cE|t zlFS}_0AYi13-3JNKt9GOEtXoseR5E*va!bpH5ymwkkB9QZ{6DU!jHC1WqU_E+M@lO zQqN@z{aa&YFsHT9mgCZTRTK_Fq1Lhso6s1TuoeNGCV1K_e*@EjMG1^D(KHjMa$A;8 z+*-jVL7+mvw3IevyXpWdLL*oa3)|$*45QC1(gft8LOfYv!*u)|oE*k1{11#u`)qJ$ zHJ{fRe@d*A93+t#*riwQje6@ouD%X%ojYC2F(Fy+(eXlDAl%B8s{JVW zq5hGv(7;12B)R=p4aTRe1dprxRO|oSbrE-#$xeGK&=FW*ctiZ@$At&BfU89fng!bp z8|avOF7Us;&&s_72U!N(2c!b{=@Gh2vMHhnU-{u;f$_+D6W^VS6`=EQTtN)%v^_7= z-PCmn{8>!Jw~UH^Q&NJj7-xcs_1njtg=$D^t}U<{{%1@mHNL6idc0tgBs``1vh9xwA7!IX+2GPYYsDI=&CHkWDcBfoMjt@JDE%6hLW(&(+jB4&jTan?s&TWHD|A*?mQp%t7kMS}ZjxO}a2+D6~M^de_I|J6rqa4~I zCn2eUx>FR0qP}~?c7HqjO4z!TJabHz;#rO2csh`^gj_b6(JMK?{g@-tU2%pKzj-@! zy~xvqfjMI_!;*+2hv8B#G#%8X)6cEFL|?t z?)5Nj#J|PKIi*nNQumIt?O;C`c{U&io2GZt$U?JRV1Y5 z6E6sxwb2lD%Aw*~81EUNHTuc(1cLhl$A3_)V8Wb7tn}Tu+{Dj$AH@2Yve&cenLqIW z08OMfDUrJ79K66w0(SFROLt$wo+K}Tj03zXJO8dx-KFk>zYKNZEG_z;dvWtrQy5TS z7@kqAaprws;Vvy?zV0JNotwvfpH9%I!!W z);N14Zo8WZOSb)~k<@w&*yu_A?r7qgRrzq?MFS^DWy@>?URc@#Cn^^*Jn4wPs9vdZ zk)-!pq2X7N5&O5zLN+}|r6muV&LU)#^lI^JN;+`Q|c z>ZNOu-=uqt09`^k=%&BgPs0FBZJ?x3A%W0puE%#(%#T2!J zU(7hsP5%a222sx=If}neZb*N4VWEqLJ=GxiUVGv_93lGKJ@!5`$?EkFyI5xs85BRt3_#Lrm8rc^|sl^Gf9&61={ z?bmk!Ch1DQjQO{yKvb-lSR?T5;P3UVf~=3wUm$#W!IYnz)*Ut(=3+wOqhT$P8fKYY z+N={3XZfis?Cp>alY5P6k{cOBtZxr!gIY=Xu2i$H_j_0XaZ?Vm6|#%}!n92+v8{VZ z7^rqKBvOPsF-&^*lz9Bvcbh=Iql>-9>H9`NL|PYldD)rIo?K^!%7!-go;t9304CMy zx6wx)l?nFyv?&tqY07^JYm|6Fx}+^|{9+U~JO$Lzgpe3BsNwZ`p5R-Opkc=Dk@Iw~ zN+!H+$!1*nVvh$dc3LZ1SpsNcudENh>;Z%=N6#6TI*%U~C^)olLv6h2nX>2|GqV%|D@tuL%= z<>$K6KV+G?T39W1VsJPznZmy_!MahbFHUOi8?MfhrDP8^aXw)?XC(b45Iek#-lqrR z{>9Xs^`IY8t*h!?o@2dr&!XoorJM&@3pL2Y!169y!ObzRRYQ6gpQ_)LEzOqPZ^cU^ z#ttIFgeXN4QPl9X0-I2fwcB`A92TGWppuE2jNG8wuQ485<5!D2knz^XiRSP@p5i3m zr(>MipSiU)IP+k`8_ZYWFP}|rxp1z5#_}wAce0}oS8kKGp@lktYVnB2VQYiNmChUt zWepZST;`rD4IQYIE^Ea7pjOHq6WRr*BVYs9U5_&$*yZs3w0^7JNH$*zi_++8+&|Z7 z*V;crt4XVbTMb!lsKbBw`8sEC8grYcNb4oYeeW2#aX1K+JBr;!7tXKL&{uvGIl^?K zX2>j?s0J&vUXLxYnr?Zei{8-WLV*MN#Yz>niat1=k>8mEV$?J*D~?93_wTx_?$iN& z>2*Na*4v?q_aGVV3+oQfGN;14d0lD*Zo5s`^otjVl#y+UW~DjeHuNkCXv4PO!N3Ne zhtUs{Y14{PN?z7oQ%G9^raZKBY)RfRxH9K(Z*jLR>Y`nl33#2e@Tj+(ob}^{&qF31 z9420w8al@{;HZw)t5~;DQX@{cMe~(vj9RsaGtRt>vXahWO~?#n)C--TzU-wz9%s#> zRlT?H<4&Ci*L@CsVI*ln)C)N#+ulJ-9Xb3f&)QfivXdt$)@AO8rj+ZwzZ?y_f!_R$ z0ovZ}rync&jP~0k?DppEJi?{WaNSt=at4~aZbrf-)9`6=j$tex?766&xsr)5$ILdD zvn#^`;*qs&9{BHN)2J1^EmTj411ozt&VLVrn8YCY|$S3D4aW}ut3{=}Fu#q9jszG<(Sd{ONFs8C*B<5uy$#;_P-~OT6*V&=d{53mHJ3VFwbY@N}HnS9JVHq+mBJ zlbiFT3Zkw&Cm8dq#At)S7hIV<+T(Pw(I1?VdBvTF11`zI#d^dh(>*T7Wo&C~)m;%a0W5eT>#lb(n(Of+auSc4TB6y2 zZT&uqYK){EGkl5Q~07*c$zwNc=jo+RagRI|PQxzI8ycV+Kta$f@z5A?v zVm9(o=Acd8FxRX{B1;bP9>O)#PNg_9p;$8?7kdep4w{0{k<$j_e+l_}bb42S?)j=O z^OC;=XbxJ=MF%LFLlI1eAKGcR+X#d+%g}oZ8$C$;3{#06J~3|L=alye*)8cb8Whe8 zKx2|^Y>nP$jXY}8+R;t`10=1tk@daeaiMYiY{l5h-DQ@IcqY>K@B460#a(<`yNBO_ zh4uJ}_0Y)4bi4rO`j{P}mtICcL2BPFaIjH;+9$&fhPdT}fIPdxtWpUt7{UNc=lCZu zG_}5G6|uQMYPGqM~wqoXf1Qr|)UHnZRb z3&jGi_}wv%-&%3fguTQb}E~UJXT@#t2TI4I=>P@RZOp9?g zbmj!_i2<5ebsag3T%M^5GegPxV+!0Aom|qaJur4L=R!E)!!kN~+IKcpTzZ@yuJ6O& zc976q?;hF+mgzXs7|?RXp0Ne0Ae&48(BfMIFF7Ns7}>U;`bWdZi(JQ8l$KArq%sGu%i8mv*35wN#Zesv`!-BvLYwk_Q);<%O9_}g4e?DqZ z1D*`)c?+h0<@kNg8I`qeO4wre1EtqjueMf#h}E?@+MwrBkM>1`n_x;1(v?-dc` zcjBkL(2Gbne2u*-+ZX~Ev~5_h+wz|iHJF8ulbT%oNnE$Jad+beDSGmM&$7j!Xr<$8BpA};(<>u!?t>$CL&(Gt(-aId(Jh>7KhFp9f14HxbK~{CE@XTRpp^=$1N|5P`&c9Dg@QieBNxI zB#{v;B(Q-}Gbv^~7oxE#kZd0w4heyXLU4XTt05c}R_bYuo8yr)br92D?dDE6lBM#S zcUZXcE{m@XTZbT7>bO8*`#&N700hcu5u`(}R>t7WX3^)ZkguKd!L=3SY+-}!U(es~ zL`zWPPs!U>i7w{6n-jUuQcnX#6bA{_%?(# zbakC?R^EJG;n-mSgpoZLgn3)pX~C3SPpN0HqL&xN|4BAl4>ELsM$3z3;<0jo0RV+tiKu zKJo}2W~8%m>EIOC#5RjHEZa)Md?seHZF*!y*fo#iO4}{C8Lg8FXM0;jvGjrqmx!)` z0yhaF~W8`y3m6a{d=D>~yoxvm< zpS(BmhdWelbC&^6P|*asfD+og^^P?4q2tgw-H#o=P;0rq@>`LV@n9d&?Cm(5aquhVf+mjp7^IYeduyq#$Ab5u8b4F%Is5M zYklWb1(KxiJhPj$*c_oj88fts3!5$#V7N?Y?N-Nt(+o|21scA-H9b4d@SsBstA6NzAG%B_z1@|@Z%nE1ebK0uS8 zZOOzWdgG}%5_^Oil@c(q#oCEd^B@~!jjH}WcI_4HF9B~51~&8%Boe}Gj*j6h-5TU2 zR$Y5HKGW8i%GBpqZJeIY$Ne2#XGfP9f3ys%Ol^tTe^;J2k7X-laDOw0~#ME%rXg=2KQ8ZiTJ}-^8r)8dEtxb|ZjCC@a3>=V`}exWzivo`FcETVQ-$y)tD(pG4Y1y93ZL63Lt=2JX1R&?o zj!^f{j??<>*9a_BueGDeVbm?$FqmVgv20^pEXfA1f|pRqCbx=ew?qyem+F2_UEHkM zLGoC8X#Oi!eL7UMA`}0uB;0+u&3e}nK*N@@$um=*6n;PSl|uJhi~f0hq0>zfAPrvX zj9dU#I*DgW6Am4f9VF@|J5&s!WamK9aNMSb%F6<-Spi-i*>Ta0u;`zUNeF8ydfP`X z$LP}x4Xkz8A1PM4h?1I%0OF!E8b`9B)^8UV+KmC^6W%-hopLPobZw{aBbNf}h{^QW?yV zNCL3)3OyGkTO_ufLZrYT$irpZ)wohJVu=yAlpSG`*ys8I}cFb`9=jL2IE?}7u z>@Th@1Fko@5@2lF0)K2^&Tl5A_8|f0<~&zrqfa3mlQXA*4=bbQ}_~Q0Ays@!2p=*bBI~B=l-A8tnzP zIs#2Bb@vEYy;>d@4nQ8yCrST?o}>Vf?;gbO1`nCcLt#$)xO$2H`SM=kAwW{5oyTX?Gk?&8sMHW9b-w z{ki(x30P&QcfAqKiw2i;)LHitzMA`&g#ToTh|yD&p)v}HasuP7HB}{xTxw}GpT1k0 zhY4MfF`R+}DAMyTuoB#10ccZ$U~4e2bizj|S!N*y+|&^nSbCWDfYno*MJ zo;hopVx$7XQf1G5f}RPt&5iH2B(u9jJl#?=HR zMZe&%uIMmaQRO#+YI5tK)>zPN;&U;4B6!TNvRxo@AX|TQ5*@fpu`?)97zNd^!O8^00l1PO8-Qy2sE zIUwucWSspL4cz2Ao7*0#df$w3Uq&gKF*#&PD7{a*U$ zA3GpD2ZH%zcYyw1hl=d?w1f@*46g1|#(x_?=fOSD&*{$4mhRkI zu|W+EOn1no%bwn%}Tb ztZ`SCE0dK@H`|`ef3JqJah!@(y4RzhmnSgVfSHnQ!@dbtRQh+x&b2t8#MtEB3!;&N zd>llKy^$-1O7}NBxuaX-wkxF-Jss%%s)U`aT4*)Y1B;iqtx#yPDs|kPwn^zI@dA^i z(dMW*o6IrQH%-HR^w(zHJV#nM8@wJ;P7Mbn*AljHi-?*NJARL5n~Rr_J*Bk z&#zfu48p0iOkVl`*18#%n7o0qzCWyw4bf=p`X0N{uFH{p;qSM5;-oJJ)SlAWxL*Zi z%uNbnI`w~7ZuCXv((5$6Ni?&`0Bvb63aw;*R)Ea8C8^AcPj%1FfC6|WSwgIl+uppp zE=j`NRj}UsE20QVkQfR!9meqOB>PW?>f;74r45H9;ed3lqM291UJSwXj!jof*t8%H}t7V+JM>+0am zOKbt*B%wXb?u+U3w95k{Vatg%DW6*F-jqw1Kp6k?|KQ}J3$m_;StVZ(@N99rO<6e` zHaC$Lg{jC`;9!3;+t%*gx1!O zeYJar<5Ss6L519(YQamGEMZwV93WU$8}!A7F;!2Y&5XHQ#E&qA7iwzR z(Y6Q1qV^!`Wy}LK6ALa~m-=yrmofe` z-d)4cUE|5eJNo_zsx;-GwP8nqTli&&?mDhe(Mq9cdC=hUrb&EfR=rc39e=(#f`!r( zO>=D6A<%|8bF@ilsx0$Ov7S;lxh}eXz0!lohCN_5GH~T9B1U`g>ye4)8#4=(i8(DD z4Y$oC2jfi~)bM_z<={phn^}??!{rF$X8li>cK&17aezBEFo#aM&_;5Ht*}8YJ9IxS zNv(QUI<)H!J;LnMmT)@YJ`wPb=+?1XGm-j%@R0_Jl{m`7Ue2jI13me0bk(&H_MmCU*tgGLe70%+dQH;jMGySK6Q7q6jd4}tj+CB zt?pn7_Dz=`3~YYsv-0A(n-E%-O@3XCOvZ>sHM%%b>_QzN%3amu3J~^g%?(Em%<-^$iUo55BqfiS!yn%9i zLOt~ZF1H=rw;K{z&!J~AFB4$BS_cCy8rw2OCC5Bmu5s@oX^WNMS_+Q6yexR*Ni_Ic zLl##}_PBtC_wwqd2JU61R#-Sdx(l)LFxin}tra^n=F}V?UL0_H`-KjnZ4##~qiy%J zyM{HD{kXQWWutewR>wU57aWG|ZxMu2`dHrMvUq$FLriu%^e@g5i?CfAy&ckA-FXmj zzG#c0Z57htFxg$`r&|ixiQ6(e(4N)7d^Sd_4PbDV$9IRpw&X&$uJMM1z534AL*%rP z=eo`QS?r$%vK^Mz;HE`TIB4qeIpCSjl8eI*0A6$y>)jWox`P!CCTQJhNzC5zS!qWP zZArLuJ`C@o%`POETDW4lt&}*uO!@fG2~2Sp2d69gr&n6yg#Ec&1hLHZ5Bgj99?vq| zo1L0y5egDqltWZJI-Q5G0qKuf4%wN_fJQ0wC>IxCZ}q@(@!};9!(bl_dOUWzo76(R zm=Ho*N)p3PrFh{f3Ab>){G5rqI$IAXi=;JEjR@_J_0x&si!fDr%WZYP{@k=;}aI3 zUq_{Q&UrK0I;zK@jSL$`q?wVU$rCa_5}#1y{3`b8Jxh9qg)p!$o3xICrm98lTlrYh zaQVbRu}MI&LnVcip(b~wgmxy23ra+*h6}Vbm}_1^Ea-*$ccPV{&vL8B6@y>W{!Jme zQ~CX1oF~B!r&eFg5N$L?nP0-^ioxYNb+%8BSz)05__&FF zP`+bx3yA@QV~p>qsh-P!GW*@1vnuh9Op{z;8lZtcv%!Dz%ijZYyQ|Ru#WRvWuvJ>W zPPv@S33ZnIc~wM6_t!~Dq~gN=q2;Khel~YIE!H^*>6{+x84Y?(A>Oi6pIo2xCZXsG zB<;q?BzTLeXBT%}hKYLJj&i1BmoRCRIdbS3vEApIpo(_>@wBoEimU#fv4^~{T=Z(X zfx>9D;+ca-qH&(lejfOg;(6k@_orA-+2L@sz&G4Ln8(F57Sg!jcuB~2&b=MH{C%Hr z6;^A^D5f4W)I}Ezv4US?5Emr3ZA&9po1lw3_@KSKGyY4vqwfn%yWfLoMADrxl$b8h znlYT#W&w9FwTl_=rIYirShIb9g3UX-WrB_d!(zzxT+iB@VOHVi_od9mzX#ugK?ZFT zpJJqqt26c$7x#w-(wyiLuf}yaLq;uOrUgQ8pV5f31IA-PS!dl%e<0N=ncW}^|betLdfIGim zER4qQC(efbgDh&2b<0LtF32hK54sIOIU;k$EYwbM#-^^$I$K-H z8KlgY#Jc%iPr^CFq%{J`m4DbtI{2|O)l;jlAD_l})>#LdKr)3&ydQFOPd}Y{{hX0= zCB&Bbw$7B;F1NM^eWRD*&Qqc|iEo{mV1Qd<&$aJIdc4l-91O30ryTG#5tSN7Hj!t5 zIAKWI0BTF~VhK#bXzorz6n&p>1X_SzANhnFap%TCGn93~nUL3_pmh_tx~w=JvmbiM zpTY}LziF-ZPChT}fpD@(CLOb6=TqSI7E7P$9{7$!zVj7`#xQ7jI{w+}Hj747upSfo zAc{@M`EI$Al@)VusPveaao6!L7#jcdmf4VQA1ZJ)r#pv3zOfNhj#YXEt$^)u9_kSA z+5^@6iIGp)m`|e<8IRVHGOldP&JzZ7Tix}GGdYMXrJHT8xu#&ylk?FelMe153b!*Zj3XmnMR)-SJPKbk^FM2#u==t}e#=UG@GQABRctt_A1dv3@E;X}^T`_Qi4n|tusU0D_MpB$ z!*dST6Qrv=flur09Pq47N7m1V)8vUx@6_(rB4RRWnJ?g-vs0N}2SI1dZ&$?Gn{N>& z9Brj#T|mu6SuOvSEf~M|Ne>aE#ekmBSlu(O&JQO=d|a_FH%u2^e^)@O)gVAPGnb$q^`NSI&Ro{M=}Gb@oUArLyW|SzIG0YOIP2P$-E_-p16f-!kUZVS9)l4fGU$c6UI^wqVxq|1W zp5ue&xofv*f%45~PqUqFZ1q#r5;e6dD_6@mrpgN%J$RpaqCT^)!@!@^p-pYAQ(yd_ z3k>Uy0=!2Ucv;>2$z_Qvb~Nd^UYw6?(~co~+SzAPaI&jNF8sh_s*~rL^;n z3Oe+%l0?br+Gs>{64GMCy3(hbGSNe*+I@-4P7_;_R@3QNVnHbo^L4rB8yvOoL8WFf#gZ!jOsv?3;IyY#xlS5D35 z?{4y*6z#ZfT++B8;koRD)(Agxo>Hu??d@Yv;N?Ld6|9Wai(0L<#J@9;ReOFmzhI!b zz|^_=MSm14r>aT)%hi*idQTLukV|rg!XmE-*id{m_?%!`+6&kcHrX&9&m@RH!I?rEb45oynfOrz!`4CHhMa=N;>Fb99qS=&~Hw7-Yqh@){4vk`hz8^K=>Ya&BAKq&hg| zbNO7=_A2lZ7dmfKp#^UFQ1;|ydz>08X9$bxoAGe?qveqM^+^Ct`NqK(k5xmR-HK>^ z&L?8!*>l-`f9EQ!MQIngzOwY99Cb|XYEnj+WDwYG=)064O`@kAR` zNE$9Cp?=E~n;gCCi3T*!XfaaB`S*W#ECcp^iLoJ2RvHm=Yb~h^bC$7=Rj}zUBaGC? z8yhzISr^XOmdVbPe77M%pvy8JxpffaXWv73;-kizWi7ttL-rC7LVI^yY(w%s*fx;oUBx&hw z42iQ&9}y|+c_cm3-Y&U}Qy58k^o2ADY}?ZNtAeXMx>vtg{Tx4N@mym|h+?cI2j$|` ztOK+#_;%Hp<7IkCxa0^{3xbveLhMV{8s17;B52(>oxN-C*#^)0j2&V@W$PNIR*y98 zbs3Va(=ep5qAk6i6d@_^n$*rSZI+FLVY@j z|Clsvyuv-FJXlr{LD${cS1i4Ig8v;n-;H?QX`8PJon^o-jbs91o%Leac`Ttg8_?4o z4>|x0@lZbYm-&?-KX%kV?ynh}uH=ZWmWZ_ag9y>-mpR3t+dC!ouTRcyTiJ(Z_=o6= zkNIy(>RdUZw9c!d;@s`;6o;%~m&w>l)txm$9eMHA0Lodjh#tv=pHR>jt}%2mv)?ok zy`#~USU`=`^m|~rik$jQN|X~a8pas0t zwffFp=8=$vQ+>reqQ{Uc`8IBd?SrhII#^6C|Lb*7>N~`i1CZ)BB=m>t6_r7-si@}D zNL(X1`Ac;_Eqx$CE?8p#GX{GiBMbniCGSORE5_UEP<7vG?ypHP&6is*xx6)Tx~P{J zpn@e?pxCsQ1E2ijYPj-&u!#XoEbj z8l0(Vf$bmf)&v)OQ~pU`xVR^NB=uo}wrg9gYuX@REQ^iMFZyjckGgT0bT}^bomN{T=Wznq-SgkF9e8J3ww4F&;xKLPppDkM zBOK6um+P^v2{we*vm9YxzZ;dB_d%_;w_Ijy1(n$Z=UG`SU3WoFPi)OmytB*;ZcHS? zW^KS;@32ucAq#?K;_>U*-8HH3ql15frBAk9VyjnfkxKPUIbB0oNRZyljDWkiy~%T6 z|MaM&Zjv;%+Y5dmT_4W7}fOT-qqlWTEG%rxU*D&Rw` zh|tFV>j4NUwHV-~+npk^@!HEOZ@WT$!1C&q z3yYbt0)hepwlnO&;I5p4r2?+J?K5-9+5AbLq2Jpf#v^fMuZR}u$fx1%kba;wfxQu*gZnXod zlXWSjdwRFr{;qIud$qrNjFK3e_Q*Y{m?iZkpKDW3HVj$sD0CQ(cw|_*bIWo*<-+nq z7xb|vVwKgOUg5Sn4DEdZQSnlteb1Lw-B%pm%+f0mN@XFbm*~i$R7f(Hb9r!BREEAg zqLUsuC|S1y*F13qQ^PM zwGk;CP_&J|)&?K}E6#<1i2z<$pvg{*Z%cfKGa@SqYv_#*w0?BZ7xkJ4IhkhG6LguZ zjBl$X7-?(%*dDsds&P8cP(M)|5%K2?Q27nhsb4659b&X-yCJX~URQN(Dq1lC=q{V- zU}~EI89WNNm>NI4ht-}ELsu1%RQEKa8Eb)`Pmf{VeG?zDDOWX1I0m#DkJ~%#N1Q{| z31#92&>uD5K6{=sOeK-+9XnZ&_I_G^xWqFMjJ-1LZYTqryvF^Nz$*m4Fnl&$u+7GQ7XT&=S`j#*4cS` zzxyRpVEneLv-0&H%t-FGEf&)3kEALUkZ?w4$$Lpc8G}R8=CZlRDs|LGGIs8I&;ICz z83ma8Ky5Yu>$@lD8a%!^L29aHN2gKg}*LDy-3+>^=b55 zZjzAVBQJy_4hGTb$Xd^>sFUk>%|yTD0_`sh?<`Qe76r<6+y8=_fpDt+IjiFB39_WS zQXf}(jn^w&i8Y#K+g4va`h$$zh2q(c5QsfH66}{NH|B;!6&-uo%nE&}8Baap2YN1a zU#o*Wm&679iUUD#Rsr@&r;iV>-~Ki!5K_zw>Wv1Q5N*}q3*+*PEtefyYe`z{Uk)bV zS$^YQ+A=}Na#El4m5gV;zTdV%IaJ1D>fth&`uE2O6YLsb$F90aSZ*>viVNgQc|}|= z{0X+-2o_1iZ{yfxPDt;7$Tcv_vx$}Zicbhwr=_)y7VleEdbAI8_}x-5ZI(8hg5w{$ zQ*Xyi4xYL%=W2vJ=y7Pv1f$%fS|((3>Dhm9H1#bve^ydrvgR1ms%-FDa4v1`e9Jal zEIV-_2^pu0r9|`V!#)ZSlQQ*b=V9iWPBIn8=kon04;lro84Zzh?TWelc)me)iLH84l5)23x0smSrBgJ&IoOZxrpA zrTI!Lg3rq)`-!(tF44Mk!@iKlVw%eZyumu06=02WN~R8N!K7qy6})yP zr0&Ie-`eogYizC`oK1BcF}@us`?!${qiV?{7BzQe^+#$g7P6V!f9}ZH=|O@~=2Hj- zQo`}4GWG9SVaNxj2j8(3B}qcfmmiwCQO< z#>}BY?}47FU&K~S*fw)uBaEb zHpZvlomeZNP-IjGY5zfOza6v1lJkffR-Zw3*SA)IQLYt!r^f1RM2E#m=*Fb{dj=;UOEYB2cEs}B60?{$K3>HXfhbE}U+<*bTj2p;pkG0Jksw#*iE;<>Ex|X4%S> z%$sBuB=u`ek0BjkZ&*09Ty`FDI&E!RxDz#`HxL7`CFdJ67{gH*1M%@1hBfYgIvr13 z%#1_Y+84-aM`8bGg23lFn(YxWXx{sMhr)op3;Eb-rC(9RPXeN4H1lNr zuag=3)a~4+t-@Q*T&17@uN#l0O@V3M`>Mlyf1{2BjzoAhA6h2oQwN-1g;j2kIJ1H} z>p-nk@&@0q*_%L5zKH#F@tF@#Q5OVxV86%7IFqa#A%iWa@D{i5Z~OQXbEJsKhmja*i9L-HPQltRZz`^02y>wLZN7a}Z74F;_is zO%n?F*Duc4wxeTR`ou*)4qZIiA)aI4@%n`Rv(QkQ6<=3#w>px~0qL$UrpN63CNa5^ z=VreB@=I_q9kB0W@!4$S&>NHxZR51j8_;d%{Oum%Wm%zp2Q930&9#b1+5IO+fazJU zIF|*rkQ}=v(R~cq79uCa4vi@R>oXpEaRtTO!W0~mYw3jw40%~~kCvm866(4P%r-Mg zlIEQI^YzzFKb!bz&$^uod$c!a0M^JX?NhIb%FTpHDhDZ7`Wgn)6bzy(X`{9d20t%# zs~z@GGrqZ(1XiK72IzCPww&!3XX zovlzdp}gE}l(o)+vk;5d{Yty^(*>0)*djRTW-*y*BH@F?`t?j`JX}cR62f{{ zZi|s_t!TYE+;q13I^pq3(i?kLHPM=4uwS(E;5dF#NPT zlu-$sk*l!MRRc1Djjq3gLIz=#3rt2G@&QKP*~{}|*2n7eXu`@*n>!P|Zk zWeHSIt#vq%FS%exE5N0r??@fHt<`;ZL0NRYBy>^rx!AAOT*+@jTLX?yjylSZyc9dH znVoo-Ks(B7`r-1VV57Q%QiqI<6~ojB8#eg(U=_^R^R-j>Pu?@YErY_+dOiCf-(O6V zw8E-zv)1%&c*=#Om=+^*qG1vu+p2oZxiF&sW|iIs*%`UUhQc7VaoMIo22kG86)?rw z!88S*l-x>=to#Wcx4RJai=^2a1i!L=qhwkfTYtu7^!lS^qy2~_&z4n4oSPmn{i8~; z#MuXKY>(9dXw|F@_ui{b4EE18i~O3VoxH^VU!fv-?p2%10Yl}tnLg8!u%Gdb9Hp09 zXTw%XP9N!=c>vz`(`X)&O&d_rMQuj(>MREj zM)aRRZn3WxMCX)CU!gv-pj<4tbFebRv#^2HZyV{p#dUcKF%DI!+jGW6d4vlRQUo96 zZX>A}ecZSs?=*6an`86W@8MonG`$FokNeTX4*CMx4t`;3MW7}>&LWf4qLwj-vduqi zJn<6VO`?=5)l%|93N8d9MmYN%$b`z0TM;GvAA_MO+lGfxI(Lt&pId1VH7)%WEi2gejeQG8T@YK(FcGd-Ui z130$V9M-?2=e@seX?H0Egq#vFA6spAX5#MR4q>s+YjQ<_0m#ZKyK-$)7nPTJz-p75 zTHPM%n3Ss#s`V^TF0srV+C)&u9q}1hTliU`P-j`ON`kgPW1t$MD@E4sLFs91HdVx% zwvw==mHPMHP)boz*HccUA1j$Q78#e$q=IEU+iZg5&>*kSWi9220o8PhyiPJm4~7Bv z*@>t5$`aZ>7IR9A)3n9$Z)1FUM7rpS_-4_md@$zPQh3)sv8FaSMOwMeo-(#a>%C%7 z5%X27K5yit57Qd+j=f z7wefIigyK4P_CctS3Y+icuV`%V(6z4BTCPZVBH)+r8yhK9#X~J?s8r{Cjq{6ijUn~ zj3Dj*JGk<={`+)jAwu=2jtk{%UhppdBiE||<$l?4&i$Yol{Y_?ZwFIurnwAj$2R8W zPD0foKi;bwlVIoe?w#p zbqCIhv2l;GeEK_zt0dc&7Iu#uJPiiZ$Z~kf8fw>v7}GKF;P@nV3RYVNWsRGdN3@}? zfV5{+6DZE04^?CrhY~u6#Q?|pO>%UvY~J@I?m8g3o^+g zjEg+mHt4QqDF0m(6sa49(_PQKJkDL?bix#p<>|gCgjV}Kbe((+cHY(-Bgu^6`NX6Y z%C+h3z_fL~avSu@R)7C#)^*2H{oE+h2S@H%Cn1C^b{1fefcAh9=GkqU?2!-FF^0C; zPv@dIwUA@8St3PV)l2e%0+W9o7c`R3+q_2jZ!EBSv!>I=Wz<9wtuFHFkCdZkFVDrAIzDEQr491qllFBv{Vs+Tdfp z6#?sk>7y^Ov@(xKcKI(@Xd#eOI>GALy*9p=B-^?CVYbTfk{+J3$^MzR*-B zf8&xkYt{J5-)wbq&q_K+-_9&g4{!2Xf?6FCdYyVzCIB^HCaz-#@0Yxe`rMX%Zi~#U!hnl$8k$v9hQ!COT z8hnjk8&y9y)G*)aod)W@V=(6*w4BOcC!mK|AE=|`b`3r@p5+m2eC1f6T&%IWFQ&oC4{)+b-qmoY)p5yR{&I+#95B!dU%7>{j(saI-{y?+nOz2`w&QjypJe zd%k`3KS_`MM2-!~s%Ts5nV(Bsy{-B5w*o7yG;z1K>xN}O$55z2!<+t*|13k!j+i{m z$rHGCoUM8Z+D^NBxDQ+3#t<&}dN9GGWkwlXa0WApNF8!~aWH4wXKL4m{>3r)PkI=* zP$K`<6h0Ot4P&Ba|6M7GS!h(2w%Z!%wH--fL7L{~{aogI+56Gg2gZXKcdb<;@p{3j zNqkbRoka|fuoP&}x0)FW`!N)Hf+D;fot!sQmeS`X9$J1M|xyh}9gOY4TPxv$uUjP1Q%0&k`Pr?3GGQ3AR>~Yk~rSZgBIqBIskmV}y z7L6y0lODhsZ?(VJN&{Ctcuok8^5}9f@h|68;#?I)Pb-0RhGg(DRsPtR8j$<(w!lL) z48|X%^?rZZLgTQ~kx5b?8r+N<4UDyg5m0J*u3D(RI84z?F{VZ2IqHq1L3H3KYSY#B zY=7=3?4mSCcP_Uo!ev{XAg8`%5_hd?h_L>ALP{K%qMb4QhU9`;lD4hm$r?ZSXNj)5yv5KbsL_yC`kFi zQ*1iFEMcuhkt6sz%_0y%8fw*UnaiST6?>tyi?OlfjkH9}T%tJVS^H2NWnFMlOuFx} z95#4ulyLko-HDMKIb#vTV&AQsR}$$QEb|E(COHX=4*(eaSyoqkf17vA31ij6>~RR7 zAi?Y3Ku@%HN3$@OEL>VssEy_9BNseSa*>AnMOFp(j5Ps}jU3nI2ct|Xo~Ni` z4w`G_0lC^M(hRAEi*8E&cfaK5jKyax>&GsSP2VUJ&8+tw?s(?qTdgh4qkY>XhF#)N zG4z}C4My9cdgY0QLTA4;1iNXhe+@So%y24NCN_qH?lS;K zK)An8U%zXw3&@zHOx;$L7+Blw*ImCMhtx&+gk)6Z@H3HNjOK0iU_3pYLZY*H9mg$U zKhQb#$%QlUa~n0-wlD5HkJgk5j|?|<3~azs7-ttEk1!F)XE@MMzakrOrrw(M;}#$U zE@J?4wJgwZn7mDZsju%rUV5fxtbID9VVX(RnCH|Kfo=!BnXb_FAPI6EuKZ6p_`p^( zSgaLYiB$;i87pLTje+QJ=v-f4 z<=MwmmNNzfS!xth$vKY0J!cxsi z-(`>_DX`BHwGU7dsHh)qXoI}Xv3h%V3kP$%qc_|Zo<%k`|H@ECyil;DIU7`6EPAEr z_3MTL00~9v{Kid6H-^M8;j&vFt)DSYCkf%D+7$$AbI~0n@!{7-;2o;W;Iw)H>cg+5 zsmB%PK_nvN3!c zq_D}Pf7@1iyF*y5Y3tp$as^w!6+XIMvv<^HCKJ9FYfoS|!I&VRPOHN7j~&w1iNgmB zO*&~nsl|G_(ooI>Oe|en3HxdM=50HKn-z0lC{<}7R`bUV$4o&0v>W%Gqulw5=j##X zO8wi^vM(7Dh(RWlN#BN+^pxEfot<`Uua~HSZ|Jv%6#WX%9+Jz3=zVf74c+nAOAeLA zeCPF?g^9z|<}m$U8e#UO{f*O0gE0q2ay-+Q3L^bk+hxqnb97h#?C8RMJ~uR0Z!U1W zs>?g@UtZ#PrOgv#53(xVBJlew5ZX{9=6iNZu^J;~w4EtxK2L&#!*=JaY8yzvHx{VH zY7_?YNm--wI;7^t@DZ)1%1%K_+BMn2kvZQG;}<$&hUE7<#-p{&8Ba~~q9ZN-DUg8l zcbfGSyUfICB<~Xfth;$)Hn$P>Yp+a*<@;VZfk%j#VJy<3MSVb-X_C8lBr{<9i?@_G zvD2AH^ppkjL~`sgPwxA%p%YvBlM2Y!pIH;EWr13QFRKV}$?q`IZQJ|%=YY30;Ga_M z9q}#NIK~srmIaSX;g3hoPNo3k?8vZ%xbnWA}#qzC&+Js%u^1c&q(-MXUook(Y^)NwVhhd20e|4A^!D3Zz${{YL*^{QO2F*h-BFCx@w^ToJ7G=@kW@8zamnO8gS38P88>A0X zE#)mLx^cmF`7P-a>}x)UVYHGe|MLm!3;Q}}P0snQNBu_De&2+x^RBnpYH4l)o1GCk zXx||ehl>BsLD3?rIjnkt&_C+?3_ZEuT8gV29vVmbO?25qD$b_UzPqGngvCWZlL1&v zm~pg4B8T6y*Qug0IP0ga!gLyhsDqG?W2y*OAaxDU@}y}iQzlH<^7y{UE~Gdosk4bzn^ZvCQ+^L??@GJTB-00 zchAFIj?r(<%#gVJ%cd3lkPA7J&2g}JLvuu)?QMB#fBg{aBM0|tUTthK5=b)mp4RQI znk6q1kApj#k1u;Rq-aqL&M)P+2H9L)q17t5Rp}Y-f+E)A9CQNSoqpNo8;yMo5gSHZ z1&5o{mzKly;swr`#zGniR|l*lyWoO1}=f+Gj)AVzMo~ z?sMn@T_#>ekhI#$E04x83-_cs5=usO;$2XpC?7^99RU$wXsx(&jvL)z*RCxI9HC|y zy-8Q!I8mC%JnU&qW$LTV{Rn?x_OkSg;!4r4zicNu9Kk8T1S|c_>*J(B(Jn8svq+<1 z-%1e`Y`tUnFhP0BKKRJfUoFtH7VDbujj#)v3N`MpSmL1G8if)wblMtne_f>MMpb9e zF(+pkM1o1C`7q2yPM7Nri_0|7D7v2*1UB!{?ubt8yk5&i<{gZ<(n=GDK|*FNmI=<` z&2|94V?_&(1kV&byfz*uf23Lcz8G)d02*#QIyqF9Y4Zy5i69y!xMO}!t+j3ukT7-I z7t1SPok|^n=nnYC%F;{{XO4=e-&A=FD49Ih)M&r1+9eZ! zg~-LXt3TE&=EZm0r1?2^en#+fnP-F1UGZ{rHi)hVM&;dd*yN343|CHoNpuk{PuCvT z_G1RxZePOzc4hyv4`%-=QH?F6mYozD_zb@Otw!SkI5yF89$c=Qm>DwaX+=1582Ovu zihl8dH5XZeZ*F2z4u{!gk_(}vqZkV=E=oC4Eid^4YrBr>o0xauxydU+Mg5sfP$V41 z_zGl84A|#42ar`yyM#$ooHPIr9^JaYmg;UU)dR?y zDp#zT!RF^kM<3c~U)E!X(vw)1PdQ2rGF%2p+&ar`XTH=4^@vWFqnFnQD7wkiLhOJE z9zXzyge3hZVkDox1xlLt(p>ZyyZ+o$zKc_k(kqBIgMM4!&S(=ntP{#hzr|2Gl!O;` zl(xSqS?}#LCt{D8nVwvlie5B-90dSgmqYz`&hnmQo?!-X(c@{&?&YaVww0Z`@7;)0 zU;K^1Ct-06$%M|v6Ng&oh*~R5773hW!1iL#*T*$Vc!B#Z8lFY2HVOTX{<|LV2EVE0 zn25uNzj7>d=6H6eDBGArFKfPhxdVh=hs6nheBKZBcA7FdaB1uDtfybYhnMT9H=3V2 z*Vq379Zdq`gL?1chO%A$x8|5jypFA%j;_;U>OFDkX2{qb;e(wFKELFwpj<*oW}0Z^ zIvxQg)}t}jrSgTx6tB4yoU*Ou+qTN02Fun}u5d{Spg_gcu#06-3qPY5of^JO7ml{q znJz);wP&prfTB`HtrLj1u{y1{i6>arzq%yW?3SppluwGCmt~`&IlI8PlOUSb(ndc{ zWM+c(F&&Z)b%u$`@3D--c${X<*DD&?)^2CpQD0GBI0~BiuC33dS^8EN zm#)W8^M?{ETokEgwH2yAWUc2;vhL}|nS+g|qE*YydQ6*{3uUL627LzRfeZ0^3Sv*2 z?KT`0khz;1=4-{oC$)0&O`>e|`3K{mQ_sv1!j7!Io4bN&2ORCXLwVvw7sSctQu%3>x=T5;IUoSJ*#&7F&_8E7C9NEv!1-^3&(9O2g zxBaI-cU!XT;d(VZt7t|65IM$*p(jfOhYe0X0+KvK`dj~7_4V6XImx6tc2*X5mqk!Y zrAS0Bckr?F-t*)8?A%%n?&)9<&Da@-ZN_c7_61iU(Ry!5pJn7~exWRLHUrdPSUNnf zCBd}=EqA<-6y18YpnS0~7_&mTN+3Cy8I$=z3%g7i27`2Qr(e@-W3F~>lVO{;_7^4n zyH?0(E#O{hUjjkef#$a?M6FPxUptW-L~J_rk;+XpuB5X>=dwHqVSN*>Yzc5U$t{M` zRk4RuqxssRthU5L#vTY^F1*L^#M;FrI%}}giG|+bbNLRZD*J}??dy*TZ|hRoJ<8Jw7(MPq7&zg|+7%jq`Q_z?P`#uomIY-GstEv{Ijf`ISP<9wZwl(Y{v)`0`O ztq%_g&v5))Ia`EnrQ6<|RNRipNg5-(CRX>Ov$Yyh_B3rT;}oau!&y*$%NP}!bAh!e zV_VL6O3dGFfw8Dha+on8aS%cY!RzuJ1e5-c!EMz@g3}S+be5uAX)-Sd|`+WA{8 z)DyY52bVn9G0XsAk{Bss6GqRS!K=+{4qwmloT>!Mlp|RV;le=e8;&jQ&mw{IUgjL- z{VS0d|#b5D1};~1U%J@1(z88 z&yCNG;G~rj6p)&B-R4lfDrOM|KXp3+3(819-YKCo4PCE zSO$OJao!l)DEF+L1DAZRZ@uz1zgl?u81}@|Ou6@5{+NiOmpRQpg?!vr3Mq7cz;tw> zZtH6Ew)cHfPS2|Fu5FXGF+MY-(0R5QG4dyP2)6qS5*^~%&Tg4R_o+(-mssfYi}#}N zm>=gqXXWQnpyT-pcenE2mhV_=sbn7W_ zQk0lPWe=idHHh#EF8Yi9WOCf)zai-~Ul>evEN8uTpd#)TZ~Ognt6vmVj%@!O^h)QD6Vs>%Cfm`eR}A*9ESZM5kgT{8txE2q?WrW&NtZ;w+_YhF#h<<$|C-RcR5}!|3g# zz^0DGGUs@okn-O(ySia^jxMaO8)El)hjb$?bpGfvr>K}$ZCGpMx*bNr7Q=$s%$n7d z<#>&wVafl3!$m8Xc+cwV1{qF2#NcdVeQiOEGbG(nzgs{Q{{_;y>_j2`PWKe5cNRYO zXpJ~wL;JfQa^%c}O?h@)DW7pAM3E#1c<{YxfOR1KaJqHdGsj4^I&LRYK4vR5Y1ds# zQDarK?TtOeIkY>i_RR49`i@sdZmOPK&DHgpE!e@F^ z`gMpL4{fl8lgh6LfI}_&kpw@Qw@>?a6ff`Ed2McsazamN><7B^jk!`sA2$rY-g5P| z{I{d{KJ__PC#siG5`8^}#0K0h{4^5onW`z?3L8_duot;Q6gb-g1RI=hrPHtIX%4I` zc1mPL`CF@3vt3mj^4m%LuHsCDSX1j*h8owuNy^B@w`un_@@CgKJ<#jmwG$&`b;Owx z=*xdxY1i(nKg$*Bx99k?MtRf2L`(&OjU|~)#aX{1E;c1&U7T(^v;!`RBt+AL^216G ztv8%Nsdi}2i8NJ!d5?#&r9I2bJBdcU7^!|HnqKsq8rj~<)+{7*Sl)UWd@}uD8TXdI z)@^GRA27Q!@5DEywN1?k?3buu33Yw*#CMp{vD@=Zr^_dwV90cGot;oxa_ZazST%-E zf(op~n$nWSLyKaZ%T}<`x|;WXIQdRIeZ;;@agKP(miETOJ`p^ITWM*S%B>{(PIFB3 z7S1|A&k_#H+3Em24YL)96O%LhE)B>yJs4{#=Z)T;G%S^I*qqUlx!06#I_%QDujRXr z2%r7bphSV8m`@%fvb*V{tndC0~tnqTg3r+r8 zBQvGt@N~SgafPAWEva_}OD{>Vj->bjYf`YLx4&xQQqt8~FQWNYNi%sVMs@E%gj}=X z7iR&8+)h~$f7f^d)k|D;&2T!l!;oOE+lg%aXL7KR#!$fXq?R*QRF+aZ6V9Ub>+93; zXy>5=&}ul-eAHT^q~*!y%;4IZ8M=E+$qbF@5dg;;O|CtW@-A$gT-0-i;g+){=bCF< zCk7gpHMM*=X>(yvFQQvO@6X$g-&asgypI-oZ~$53=~BNShU1Rsm*P#dR7%m5k0wRv z-3vT-Gd+o`oE+0>Ogy}xPExMsQLYmwVns4a_Q)kUFn1C=h?zfxnFZdNhtsLl=V>zX z9{gQH!cyzcakSWG?eM@gidV=hiq!Xx83l@vG(}4AOYnER-yU>KSqV zDV2k(2%BUg@C$I*o_jFH9RtDrdm?IJ0J4*Nny582qZ)?ejAoNlk}8v~y3V5RJM7(x zI8@ORq32>psc|UCEf@Q_9Ndm`x79Jz@MsZ8NuzrRT$6?c=N3r5$Lv)rT(GM?6$!dZ zCPn+2ys*tyt@j7I@J(A9f!RY`|J>|`53C5z72VKmvzZ5`!moG8DQ5Z#ug>Bot`htA zsb4WTy9+l;npX!*X|Y-dXNj~eGoKcAn3xPj>a*|UT0i5Hk@+Oo!hN?gF4ag>gHi1u zsX4wnH({))9t+PmXx~;Ns#!JpNKai^_IUg%9DKOfL%hgCB!^B?aQ`FY)m-;s6iMHI-0{q zo`&Hz;CTFNqCeWqS3ZrFi@YdYx+7Y^p$2(IhOHgbkrQKhD50%CU&K&*(pqWOMBbeN zTa_IRwT@a}bBPtRd<1i@#3nbcGG9@FnAfwOlS$c)96+a0W79RfFG0m7t&X9L#qkP2*I-w$w@p4hvx`A@j=`>hPA< zTuNSScg7hCn&(tdR~oAXFM~4`w~g|+%t-0?97SjNlPQ_qnB&fsZP?kY)2UK4<17Xx z=oGtNPk5;j<>}QggM(#H9&II{-$c`D1&%)>>i)q2jYFnY9L7Q}!AUqOltCzUeq+aD zx0sjIz3gRjERo{Qws>cOfv={+56d>nH0wl>U>0Hik`n_YoYtp#c+no+2FIrWn0mts z&=O+5@@h3Uw$^DXM2w(_4<1n(G0@H(jJeAtdcM(54>xuLybzLsONhnLj4BgX0;jtA zWiIpR`XuIMH)2sx05OjA4e>bIaK<(ak(?PrQLyLY)t`S3LP>03lA*KCA0#V1wZ`Mj zyn33@jfrrE0z{GmB1cvT!IfuAh7+CZRkHK47%W7q;>tTyIEb|Vb7*&j$Ytd9M87qn z|0Iw?4gY_n8kCyO#tz0DKy%&yTSudgor%(MC8O43gV>$1IEC^#Y4yo3lm`X}a4vV) z60>i*E|M1>sB?PTr;N;)dXFQ=68zT1JR{`uEgeN$wUeZZQa=sxe`?)bGz-{W<kTDE#UTm*elYL(tpXng!yS5*mQ4UmVH_IC60wox!cXelD-9G3q*50WlN= zlr`~T1W|`$We~6jh*G*_NLOc3;PydjotcJn*}dA$FR{LE2?z{ikqq>TSx<)?pgXi0wS_bT&ev<>*YVb0Ib%EK>{|*RC?Tay1auTXSaQof5YHfJ`jsy zb5t;@aLAZAK}_+)Prq}rO@fwqw^p)&D;6FG5$CEiV;oVT4)hj6NZ$(R#_;|Z+RYr> z=uU-gRp2U9w#>??zMR)M_7uL6L$fMcJ&H9Fu~1E@CIHy@@GRCCr<-iVg4X3(X@(kd zYj}kTCOYNvK8A=HqvF3!P2SKC%ZX3tx5BHsf(;<9qsCeeZCD;)wB2&NUYj|P)u*>< zh?q{kb5hD0a4!i9RB6L9tg!?xyuyMN8Ta;fk(y>T3MOG7)*OoJ`r|BJK8Hq}s$^Gb zis(Lzl9kHeGE+4r<5S5?cImsiaxnB06qB5wy~0gHfZ%Fqk z*QIYGW{Jqb)jPw2iSKP*ld^Ntiv_re>iHF{UftmU(5?B8#0U%$Sy56TX=$^oYA3k< z;^IPfobzv|iSDZM660&ps>#$HP;)_#|4;@PH|vFXxx@|Pj?>v|VV?2y5pwAKVB=P8EPmVn@{4tdR#urOF0VPMYwl8?D=QrE zQp0%Up51siUL331EQfU$ZeD|f8Eg_ktP&i>`9A6>>;!8DTyitWFH+zVbHyC*Yp%<< zW(wngK6SvBlh9jCy^B2y|IE&uiEb7Z$0+6E5RFuqO|CPl`W3AM$0_;HBuA^AMYv7| z#F7qY*^+qrx1zwn$C(q%W|vX4b_7`vcQD7!(ilY){yA3;)NP?4ps5n+>4i_|TG40p zf+ZK82LZ0Zbx|Q!f$iT-5|3F>%WW0E2Ip_VRDLa(+|jCpdHay%Yh$o?aH6;Cy~NIA zz0cH%jW*qu(nq2QKj^G1z{yMPwD&{LspY;K;s|xcSh?1xu3c++SY7PSe{%3>9S`H+ zSU(&h&NR&y9^BCB;DSLUV6^ua8kImP1vvnC+N?_da=hRnVttnn!?$k6yxxiwb#ic zof`Do7M5Kwn3L{RC_e7fZoE#Nvr595idG-v>&*C4KFM1H1*|Vav?6qeDT!R96jpMB z&QYvIv53z2exW7mi6+l-MWe7HO!NF^Qj+eOqBfT#eFrOaxPM!o6u}`ab+=f$xNW0* zc4Ld#v7{r)0<3U^UWaMKI)hB9@60O~LW&=C??Nb z?C9V(af<+Bxp`Np@|lYunNo{6Fsz3?nGUAFAhx=eQO)pts9$*j2bo){cG6hk%?;D= zo=A%#$HLR3fac{vawd_)!XNCE<6QReY_8IrM3H1LB?L3sU2N>C7_@cGwL73@4V3e~ z8##eqg^eSh-xQJIT~!lSOP)Q{#fg^f)x&qLc^FThH0LZKyKlBD(oP3~+#xbINb*A; zOpz->prb)Hh_3Wek}d@GEMi8HD=O=$c9N7ODV&D*h#n93SarhA-e}5uV@zvfWn;E~ z=kWoO1miSz9bhL`W!`T#h?(HnSa!>+AuAir3QUr(h=DlUyU2IfP7}^Bl8F(k)i5Fd zGzl7Bm;q}ph@^U`-%_lY;}(qJ4OR!nYCD}PY6g70Ke$|AsZXe&A=LX-@bNGo9PA;{ zC?a3Uhnp2H^8^g8>Z0K&N7U_x2kRm-niDlPhK8&RjpJyY%92`ow289d$`Cr`nX|wP zW;+jo3T($TlDL>$97LUf7sNH!iW3*I7i9W1Qe!mr=*89*)9<}l#*-q~``xBsRM^hQ zV|wu1zs%le^x2Wi6o$z{<67t8{7I2r)$B#fBZXM;@wUyk^Lm+0Hg|dPqr^yLo^d&Q zB5ixU%%GhaKmm326+g8_S~5Eq^&*ZMkG#tNLOo*)!aFKO^s0njhqK~!&s~%UD?Hhu zG8eRxR|~92##7Ubecp_}v=)oz3T?HZ)WM?OX>dRN(-ZFdUnwHaHT+q%mdI*jC0U~^ zecLoadcFwX)48m9!CX$|w!+1dM5^sro(+ZKD}e&cP+Qr#Fq$l>ddczvP+;F6L#+jtA!NH4ayFVgB&1|20p@Mpaq}zn!HY-zvUcd`RByi7~Q3@565;x%30=* z?TI$XQ5Kdhae6e^8hR1%k3Tv-nQL^$5N*k(%!lkR)A|v*qDABe-biOCU>jLpes0f~7X3O{LR49~YGamYW+M5gW!EdYyBpGR~(DI*)%@Fn1t z#t$%>>(ryrOxDa(=ey;?zn1W~HHgjEEe_b&UP&4qLeX{&akdx%-kVul*Tla;-DL?n zyelI~6bN?_|z>n?_e=)J>kU?H_YBLHo^`_znTCN&KO`BgWqR zr#<>g|E~7C=ZokDgc(d_dv#z)!{DDC-q{>n^9WvO!gwn2?WI%nOzH-MdOJdB8GO$be8_WQz|te?dTI2aMr z@ZUGMn^rF|8l&35$-EKAG&BOIm@G(u>e`p+l>`F=*$OI-HITE7yfGoiNn2kdO2RQY ziP5>R`f8n&D#_eDwjqc6B&`*?5W?rlUDd3O>EhMtvpNy63zFA?GEL5|gHWZ8q0?~+ z9k0JY=IvaNoAu9QB4&}ENyI-!dymIFqdFC-&%eb2<3X9>)cLmG_APA7sLI*7;3tG3 znsxIoY^S!L&tbHg#>~gCHHU%jHt0z2>7NFeZoFtn-7#r3$FJQ2-r`a!RSlirh|I=2 zu9DDrAbyLBD1C)~9nNPgIjYFfskJo^DgA=emv>3YNHa%`?|m z*mrR;Di?L5T&;k;Xp-jmiJf+esjTd47oLfDP>|P(IPkT%Yat_m!(rw6cJ>I}IzZ{8 z)D3iW%nhKy8y_Wy-V(v};LU6;RBefP z`z#hX=T0OqA+j}UmIGU#$(r6>OOkXZGHv1cFj{zQ&dCk3qn{4gZ&$mZ)yj+S> z$8g%Swn2WQ<=UGY>u{>4tTk0kk&}xKkSj)0{!5rod0?FiRMfEG!!x=y@#j_nS+`_T zUz8vz$mg!S7^5K+JE@zU)d)8w$P>dx-YaIzYwoq9k^~>NW;! zvIaTtJRu5;xKn9{%XlW*oNrf;L4HuX83J50@f6&*&2Il4(wRdECxO;+t4f)plny$J0i!XI>gNLD`L$fU_68|5wjNF*>O%H1upoNn6DjSw z<1jH6qvg-iq|t$=dCJ~08*EWOHg0oE1Fk(PF=eM>Gxrsk`h5`PX}DthVZx`X9fnR? z=gKp;+ZAoksRVWS9*wXx&#g5=8&a$|7yNblhxWi6mDQB?_IcZ3UF^D1j?=MJ;QMH% zd@%{3rXctQ(I}BsinGj?3r*6z){tmrkh$dFy`@CsKE9go&Kf}TJT;qHLZ5TNC~>h10{#S`&&=y6So>hi9@a!1hJ_+*T)uW7 z&T%)b&$ksdUvOIQA)0}vVcZ^FTzlIC!LM=u%>C{7hmctlJl+*ec6*m}ddDz2N=?_u zxyAI~Mouhlj-^>*RBF~}S=&CPKrobYuA`QWPg0MSVwUx~dFY~Oq~x*LJh1RdLCg;L zWO`&M$1^y~8lI20ngfe%X}5O`1zmM5aQoqC!N9HqM6{M|zLuU)!SlJ=NLpj7hB=yi z(UqzfQ<;0}w8nV594+y(!&43f%{*ES2iFE1`jwnvrXmMJ-kMA)`}*A!qzFEcOMk=^TSW zilQrRv0PTlDg&#}5Bsl%0$*L|7+sEhrZx}#Kz^s`c8Ve0JX*JK%V=5AB$tKM|IQYS z)kaaP)X_npqQ{v_3mwHy7Z2w*Pb}WXxnOsJmPv05xBE1Q4IorPDRt`q`z--!a{9n* zA{GK@_MnRj!RRsXPIj)%BdJ z$tla-1jl3r{}ePsWu`4#Th&eQ8!L~OM%V!?bZXGj>&XGTt!A%Q6eU#E->D_M4-aI| zd(}WcXXGoSH6)SHm(}j5i9#4{Vf~L5yjMzyrt`AbAgC9M+41!*`}++{1Xg>NgllZ2 z<7Y4!rHi>S*2PxJO^HngYb6235h=eu^Gj~N`_JuD8gk{?X>(thbRL)hF$*@2HkXO& z(@dD%H3xIs4MTc4i6@$JsrL^I%S9acdb%IuTxTS^zY7f}TBa_M^^TK*8sH&#?52)VkpO->*@u<1x)z-E&L!2vA) zt<6?3aIGVD!sWh3WX8AE7x?B+EUjFud~70c`Q{&jEjP|&*AJ4CQ@5|J!1h%3qd5lA zg7WoRG*F)hN;luJIahfm0&oY>wS`Osj;6bu=ka+h0uIW&1CH5qySYK8*pI`~yclU@ zv~F0BIrI(E>ZqT8{W6m_&TXidlc0AX*g)jWo7y!sus_w#+R#6xky%v@Q|tI;rZapu zoXBBF_7{yP9=^a7@|!bR9fAbCSE?PNmtf%@*M?%f&~$N6IGvyAu)5+R5kr%G2VW~B zj8*j37h_4xZ3jbBth&MzzTP(D*)0Y$IiI7y!SbFlArhOrG&MM|@64Z_eb%kYk}sz+ zjsyxbERp)J$-^pi_`c z8*}cmw+Q7i7X0(#P?T!Ak#&U&bIifOmcmSEE@g4G6$&Cvkqle+dVI5@b>{%aK% zx7&*aTotV9u8Q_vu-UE+~)P4FvVRpJb@XSpn`LXdnEVRDG#$ zziZ#~wh7h_0VmMc;m2?1Fx!n8TNfw0x3)uzG}z)a#Y{nxD~yYIQrR!F3y(ov zgqOLufvt+A{%Ii6s)Pr}_-^D#CMbt4;}Jtm%G#i>+j3Z)mKus>7)$szr(`)QSHScrf3-6z&Qpv)BO7NMuiFe*7lr1I#c%{MfKflyS0yO z3wK{@8Bzo_zYS*LSe+0u2iG{ssOfL-2$sZ%gb9twmWI-k9=>CI1;R2pXKx|GqT01H zo-@HG4PY)|n$MqG&^93+oR^&vi;-`pp!SlU#P8_@9Xn4`|_-)A74y$m1nlzoHJ;=)2uv3PMW+h6OV|<_*_SymGR> zcc5hjw$zC__Ai@S8yjYvL&^y7r?$v%YL0Z}7QQ|x}UQ<_}i-c^tTWr9T=>D)!R&v;xJ z-ZjB8n;y(6)JGuBVHSlt>7^9KMRM+QeR9^ZT1KZE6Vwh9Pokk*%!H!5Bz8{HGQ+Nk z$*tg)Mb*SVfS9MoGV!!Q`@smPdAqvv>9VzVGqAQveBuFIo@E({Fk?H|HT9=q)>sAbI>zKw+ygJY3l6=Jp9h)42bk_A0= zt4^eH@Ws|JICa`M{Kl@_5?H`A)D)ljbv)sVi5Vkse8v=J3pNHydV?JeI01s43LFkv zZPJ#r0#=pi0=4f5hw6XHhsUkskK*w9Cv*80GGcU^b=@BX?waZ*36{&Ah0Zerb>u+Yn9GrO+*0z2u>R+%5*`15bWCpIB5}-*2~) z-jT=Bk%8S$Jc!7DoEqA;hpot_buJd}h+E1!(C{AESvb}sbA_`UzYM9L64Dt(cUTdQ ztXZg5v8Fm{V~Wmu?xb-Rd^**rPu6PKL=;|0AMR1$`@_~l#M~U0Hx;;p{xmnd_soLL zIf-a0e8<`B5HEzB`)rw*nT9=oSx78_3u}oLOzSdRWnFo8%P|&OqA!W+D5XnxWkHWc zmv&PA`O{LII=-?Ghoiz zVt?2JIP^x$bA{M+WUE8h)^8u~>_#GIJwKoV!{waHXdJmf8}HWTO)2$(!XK%va8L04+dlXO4>ePz$@X!s8HgZGSOzlrm=ps?R`T-j3HjIcuFf& zp6WeMt|GP|+n!e3HIt`UF63k#)@uIP?GLq)BcHiv4Eoq8v1Ly5A=UMLc1^XzDRFK3%=n#3U$ z-NG7=AWkPhY%LhkK0IMMiK|SVk^@sqGXb7tG!IeI>$qj><&tDB;qrrweCUunG(&DV zCJ|_vdV=YF@uxiWXK;|Q?CA9;%2AV{|7uyn*0PU@Sch3DIRk0+5EXpFfIINxhC7g7 zJ;3c6=1WFXA6$Lk6Q_d>moih3;}rI$evR5r!9f!7m8;pa-iZsxsCDdtrxzvb^&U-) zkh@w~uf>=H+84+=33KM*!9QzZU2-6;BDRO=Xjx81sIv#Pbq)FWO5tNFV7MSJy9I)m_ro4$X?bQdu2kaXi6Y=aZR?k>?Y7>=fZBlWe3>3qONek@C3AV6Tyu z0Y@yiyU)>2HV^xq{6(sTaHF0Rv?bj-x1CKg2d*%;~*%L4tU#U zYh3zCl@qfp)^O43K0ERib2{af?wK?IqnrFtW*B3r6HB;^_PXAV2Hr=HwkY)xeEM3U zVM-_^Rt|Y=GnjBsj77}cyKgZWVa?ualI$SaW1X}HbKmbm z8|KeZ)Z$z$kw6Dm3&Axel6@@k`BNZfzjNW>NY{-B2cG!Lm$Wgh@EhxQW=i@40&Rm! z4vPITM_(y!TrOnUmC3qZvT;ml@gLlYMdr~?9@beg57O6bCoG<`#-l~i87A!M^P$<+ z<$+`Ja8Wgpi2lTJ!23(2UgsKXK}B8Z28b}TkJ}1h$?7%)Bb6N~MwKFou_^2nwq*fj6;LLz4Z(y;*_8@KjN=f; zsZ;?4R9poH19s$8Y_PC_q71UZ7Barb*!Us~$+~n)>Lc}4eL3g!*?WJ_n)xy37;`-D z-bW4Lt5f@Y-}^q7wdQ5a+gfwUwso=P>_@qXg%y;8)>j$`W%cMK2TjPFE=+mQIALxO zxJYBm^Gg8Mrj}t$C%iR0dA*<{P(?yQ#o#touOPuCR61^^8G#0`R0J+lhnY^jEO%RX zKMX|!&|r!wobCv4FlU+kViAkQDV6Crdl!}fY#PY88nEETvfx^*pjWrGEt`iqBt{>l zJFs$1>xeoMlE?zO<(XzWOq#oZXi!2jqdiMxr8Hf_IfzUb3fquG3DiI`xgNGtXn;!` z<5I>`Eu`vOb7+cmp(ij)+I&~~+0r*#9KjGu0lZw3AssrK+mgV|>*7F@Zp|l65Duey zP^9uiBvcAp40(cXF*TN+${rsbG5kUf4YweanG0ZY|KMZyo^84i@sKGU){3H=sl?Xhw6D>^Yj zX$iT}7Jev?BR4}Dx+N-`r7$r29(`6RJWamnWJ}{1d#o!5%L98%<+m?#$Cs7E|z$9}RauH$eljM)vUkQne(y;GkXDMd>t?Bagp*0xlZ^(^s;l%j#drm9=w}X&XheyKJxZxL-xFj^kU4Dh`m&bq#U$_^D1 zXfRSJfqNgNlI4S&Fq+%!bkNVK$<{Ro%cC^CBYv>tS&1>zX`pQwY0>Xz2hz=G;_qNr z-ruC8-8`05y<8g1-^>U6yzZc#4rvN8Cp?ZKaLFR}1^gE*9h4J!@y7O4EKB7n$QMLy z0VAG-4N~n;1T|vk7=kcmuP+x<+GwGg7)XO$IIqTr}>h0b7g8Sa>w1pfxHdbplCVS41Q#T%fM&M#X@*oG>^R>L|ZV5 z1Em!6z~LMfS#{ZVgd$Cejp==#+o}5~m)~w#V zXR=9#&__RjBe@%m1`(B~U#*p?oXc)G92@sM`x-=OcNCUjf~CG(HRL-4juw~_vq7hz z3gi0NY;U0yQ^$ZT=1<$}v!!&U+AW79b;}e1LEdTqxsjVkfMp|puN>KfT3|6V11Dp@ z1|M5-qhw{zLd|*8GDO+qfh^26F0yc%yrrd@u(0;vvqCsIzhEv^s zag8En(uOD5w#H3QgTM|<&r9#KvKhmYV4Mv*goxP}r3#isnMszoI!TrqlsSP>17@(A zUP;G=jOk>ma90dV>)c{}ZK2M`XeY9zXHUo!1j<@-xry~ESuBHBu%J;^VbM(H)qX4O zI&i=H-k~bUnlO(ffZAkJcb%7jaI!MwvYyZqNCB1n%Sd}?$tq$@?;wcw5A~b+`6mYn6G9L- zLo~sJuM?}YvZ2C7#ZEGoVG1s*3~8-^0!IR!tm$M` zHB(AUXYmCf2NK+C75)6OWHsPoS+GAN+#K?g@)(kxuSU8IT7%*w?u>j!k3j{uw#Pb% z<7o9sWa7IQ*&QrpqMv?;c9yNAP{VhG|B?= z8u`#oed!DcnO=O1v=yx`1B-!^+N8fhGGtMf?+yIrJKQ`N*7V-*A5Qz zJdm2K`v%Dk!AZk(hZvy&CpX4ONLX)-HI;A~m-?fF*lY<@yX_j`q*lp>q@SZaND{Pb zU`yR5+DKrT7je>pD_K)!y1QO3MgkVCE$yh;!$&aVsmp?LHIii31a=5_m?Wf39<@)a zkMzJK=z$`!j}h+;>nu$225d3a?#sgR9l54mN2tX!nvb%EEms0VPP1#>YapoTv-vvE z;?zTvkrJ}qlHfo?;R>Ar5Eu{E%-x8T7PQE5&n;ro=tYH-^z0JxIVZP(R;hBA)8KJ4 zcU5x>9!jSSQt;oBT9G_yFYD&WF|o<*2usV~bz{ZEoUMEmO}Hkxl6CFm+Ez48E6ck{ z`cUbd&kq?S83rY=fnYNMX;*OBF&Lm<`g!x;1w*>40!$ZwYUV-cR7J&?f4JKu2^LI4 zp&q|juq&#G4HGs=Q7Z*rh4|M>Q-vSR8Uu7W2Vr)r-XrXgB-C8mF=apd4Ymd%7s91t zae<96QO>7alaiCBKJQgF3+B5Miwf%#b7n=!PsrG^uZ#GVaKk{h9(d>zzIu~@ zGPHH0oJ-~Z775;B?78#od}Ij3Wx1UiVCVoxK)AmvPm8IAq}-09d98;halz}Vmr{v9 zN|uh_G4t5m}UAHWPSIPumQDpe+3* z)5WnVILQCdLZj7Kx(Qhm8c{)lIWQ>Gxrfo?m0DVETbX6l#N3q1g6j|!DXflZOFnSY z!;H^`&zojxF^KJRDljES5fk)Uq=`vWYM1m1lSay2%JSve!evbV^bm16R-U15le<|-p6nv9(_pIe#ZzK3=J zEXy>(ElybF_mJs*tNMDYldpI!(rtQL26SQS>F&OY!|B@=wd7JDLr+UtLeG-O=j)40 zmdi|=x--*kRXa#?TXLBHK+o>yq8~33|l_N<$N(F&>s35czmd^Ddu7S7* zlLyJI=NVaJ6rO`7pnS9N1ft{Bm@<{fcS8E&42nk)K zmWSe0{eQD->K2hm0UFDQQ7{l+BzwN!E-8we{{0vmQz|L(fICJKl5Y3NGX}z{TDPeV zF%zPXr5q}&ev`ODFO$1Fc0?QVi$q7vt5=o$v{(Y9hU7q4Og@%}m$c2bLUBrGBxX~X zPPSa$;9O2l6K0$wMF1x&>cw1E#3`RS2Uc?FFaSGC zSoXd~5;9kGmxEFl#D5huKobZvhXpn2Z03n-X-cOv!Bl8Hicls~MeBmO+ek6oE?rP7 zXO*&_yRr>A&FUO;#({0LT-A(Zh85u?|LoGgKwfr)iV0u`PSych2CN%T=SPHD9Ik$C z5b#c#!CYxQ&=Lm_-84=vpGe~BK5#D6FEA%!N#gWMKCwNow~UdC{wJtJmsll7??!R_ zPf(1jZ77@S2DsB*>E|T1)tzsdS>fwi%ueJ%VOBk1Tce121*?0>ezhP_n-LoBZ;W^g zQIk&q6A;zWMX|bSvq?ck%!lAc&&y2VUUgh_yd9ea4)%&D z;+H>NCwR!?b#rDDZ#lAVwvyGBYS|j86+3Y)W(|5v2Gy{~Mju#D!!?9ka&qV;9>%O0 z=c@GzgvCvHRd(TyM&QtwW!#eis~FaFA&3VbHTnSB@2eNGZ58R%4CLht;L1Pq;uLyp zcYQoGXXN0>Y#jr4m|8ph1n|%YF4l{dfwhDw*F3pw_fmDAz!aR<_%Uh%pcBfZbuzeC zuRvgNgl+6q58-It_i74n3iP$FaB?ra9Q5w;M7y;XTo1%PFzGVORG7z-J(y&S$hF44 zHd7W*rWMto~1MYZqZiS?7)uj*-~f=X8lfD6yajHL2Mrv8-UbVr!HnIL>4q zv>9QV+!93yNP^&E)<*)9R!Iozo)2=-PHYJebt;*Y&KUZ~GQ?q(Oz7CKhz{`TlarOx zR3Hj&s0x-Z2%1v%20=7JfqGgaSv1dS-qdg;OqqMpc5ce z?XZUwkcF0OF=0Gk0k!7Ho}fJA4qDDO63b+1^o}|XV|}LOWlapzRyBlcH;JGYs2A6q zCIQq7i3I$2GRPm>tLd^+w#`yPbjYrYECOD;rlmS&{OyHwqG@v2tyWGhiu9?8^O-q( zY9s`^^>winCWO3klkZ;9QtUTQ8^&^o8Y#|Ja`9lmph^Yoc0)WHX)BtBvB=7iD~=>= zi&|PPKwhsPWbPH6ui5&b!EUo_y?}#N6v^@r;X-Rqz8oGZB$0D$7P&dX{Z6t1VxKgnWNa_GF@%8RQjHqnX7(^N zYqWXI8MP&+vaxGx0bY5iX-P4Ry=j!kUvJkmR2S$h>nX5-OGVU2AWwh6jt`3p1CPzh~6@)p6{uw z$L6sKoTEfY&(W5u38kW`Co3bs53aWfs+E>zbmf*#j8 zgv*jK3XTO6?Ojw3~ zVAj{kaIu6wx%2~#*?S>b@v#win+1N{OG@iI(i zl9ZIaX_E1QiOF9MQ;5$cFmnJ)c6mz9UK!mAo|8rSS#Kaf<94)B3wNx`E3Kv2Nycyr zLCVZBRyVd10;fUrE`l^~8(d zN~1*`X+omCl@QVrhl>}R0sxDOVfmwIi*8O5qp@J*a7V?#itLm@7zJQGPf9!{cW4<_ z`)nrF>>#HmB#uUf2~BzN@DXO|Jk>4GGj2jXdDNOh$#OldT2eYtkRwIC$)2*I))-b8 zc7cgP&yUDJgN!z^%UGvzGk8m+sjaXSU3gD0zH(6~=lU7a6lV|n1Qnq!L)Yz}2J?23Bo-OlUWUap^uJRx-ioPg6ElL7ft; zLmkW0HDpRo42T-&)Le-A*ahCU@~h_=S`b1^B>hQouj?u8s*zdq6IeQJl6I_>NcTXd zW*AqF`!twFGO?+H)C3v;dVfPGg+L_?MIfLdTx`s&cP%EBEk!YIQ`HUBzC!|PCbQ%_ z6+*Gf6C&tliYW^AsMw1= z(Q1&=f`K-^3$QaBXm8ZbUA~UO52b7`sbcC^>?=KK(!}4?>uf!4l7gWoW6{D^0vAg3 zGNRT&5CTIvvSmV+t%2#H9AWw-m^RyNv}ISi%8`Q@g8yEVjcSQ7aZaMcwoCmwF9Zxe zty@8pgP~H7(#%0+Cy5Z&_l#PWr4C^#;C? z-fIerS+JmFVGv1LnbNZD0_|7Ecxx_78G->QNxn2|O+WOo{BA!%CW~}f9Boj{#sIC>5uHJnIlvAp z9cyf*I~!~*iZ+FEQ7YRgUIq2KrHI0rOgt@4a7l`yJ@~1sq_YEy*_6_K}q0Fp3WpA(lY#99m;)urjzQ8%wkfAl3{K$n{WxERJGt}ZUO1xzCtKMQqq-IX0(KRj$Wh9j-1geKf0xg;)-&m z*@8aVi#172VF#Qb9NV%cNG+X`SH*b(2)h>xCx;7WpyD#@Q?L%+syP$+<@J z*A>v^-DXgq(}qitYv)xqig;aiWv|f)k!3tQ!mC@aLa}Y#dD}!K)=3ST6%`U1Dr`(q z2uebfJgb3bwyD;DmkmHdl(d(iSkC!?a`g%XtU$SaV9~(TkENu^p4R{5J|^=8q}d!# z*m#;mW0ipJ$Y2xns`wZuj$z?)xS?4j@?9ul2ODo$XuUlt26aI)W-eX}Tg>eUiXv<^ z{P4OKt<_orj%pE|5i?R9wlKn3-<1(v{I#TlOI@|%+>f(qmxT{mlK>caNersPj&NSE z$}n2+nqLOUcgAvzblNf}dbfQU1tkHTW1B0wD2&Ru(BFkYpwv%G8m84kRnF_$^i1k!zi#;eL9H_g3`wcXgQZ#{dYS=tBVVe;|4!gT)ERz}ukp2!i2t4$iSL^n)guH*c=ZEDlrh(Pmq&MNX~IvEhxn~#W2i< zs;tybG%ibFBCSlYyV~O|SpGN&;agss_Ngm0qDY9L3K}E&T|ux~6c{jCSQPuw z1+XzXh4Uorgk>1jz+SjSbZ(7PrnN`QOqq}&a#Ghq@A|!@akEC(s~c~mH{0M)*E+^H zDPZ=%&7GD-hgtgyiyS1?!2+5|Lb|KKLKztUxRLGbz|p`f08zZ>>C`Rxfz6sfy@#_} zO)7}BI#Rb8UBsWt+m?ag8tJ`lcu9OuHOU6;R!@z9C7INri9|*r0=R*4Vf3x`w=K>G z=ADnzOj2rXQ~RLI7m9h4(Kn2iC!t5Ruu+jpw04JDiB(3wl~@ii)<(f0yuq z175to8O&@%sJeviUzFNq!A-Xh++SNOiFdG{eNB1uoFG_E5rmkW&q0`wXihnpn3bSi ztaeepQa^ebSWBTm1XDoVWM7cfVPc);0h9=>#pUJ_Io_pLfaGe5t#%N_JBRyDRvm3- z0#th{q0SBM#3v7Yty#z}X3j9?T)CX00m!(vVdw`+w#yhVF0AT#?a>_s`xWxxDfu+X zTrdM4v(YLf*z)*kvqN;?stM07)HK_}P`LxZCemp-CaXyi4Q@L*=&AHIn3O!siJUl} zh4`ZIr1V%|OoMDUlY)D23Dc5Eu#hrvt%P6-FXY%vWRq*MpnVbfs}uvwrI_O#WTBIn z1!HVVPWxMgm5fOvNez3)zmSCKC=hjf6bAIF!Z$bfSj5SDnGz{WRKgQ1m`K`}9YaxN zwB9SpyjKuQCzv6-!#q(L?64JUg^k)xgf!9-e}Xk1a2UPtW^pGynX;Jg+-7>}-?~0P zeB*$t5!q?2nZQl7;gyOU$${k&rpmF+8#Ad4T~8sKZ?&IWf-D_e!`$@8ZQ_Qq!qV%O zJS62%O`q%c7Qg7xg4W^gr#R&eqhW2MK|M$=4@;s@wIxua2=xYS+f7;pCmyu0F%Ruk z-Q!`z(4P*(5F_cOiCYLWA5@mP9GHpiEho=QlXq?}-ZZM!{1&tu3N>f#u4{m^Q2 zn=)Nz_aam@3(8?(jymhhf-f??bx?9E6yLT`Dq3uWFr?ZHFVOMxSz|kU7)97E^G)0k zH%A7tHykehiR?x!urrlqci?zS37Ez7tgR(g!1Gouh1s3%lua&rD%CP4)kp?*Usm)~ z{esN|avz=`oUf(0umFre_4>`}SJatb$?PnB4txivvBtzQtm z|Fx7^@BuknL3s-1*tp6{qnD{D2dw=eVjt|F$`)nmTLR?*+A&OI7loTTv#73HqO2&T zga$J(_0#l{7F0R`5y6gMz4$Ae@doKosIin>iJ5yHMIQ26=q#o{hno=K$ttOk>0xB| z^b{siB>62>D+234o>$99p`78#X2@sK*y^u}3S?+0?px!(4zk5&n+t^|zQz#BV+me^ zRt*UDgWDU zn)5E1=SY#GdYzaQ5(p1UlepVS<=rr344w=%t%9rR&^h}ELCFsld0aOc$~O4QbQvHv zYs_UyCJqPPXeLFUQA}qIAt|m}(`x`$ciDTeBz+AzV-lPxjV3y!@&yV!F!XFSr+hAn zK_WL@nS+lKt%O}U#k89B+9Q7b3MHaIxNwMPz>v(-xSN!^3-oJg&kDg?Ws)Maxk+&& zk6}~2C{@s?l>=-lpB%hL<50nezT=XTf-GAj*!2)2@toJ&BT&NI^gS42^^3C8|1pNX z-_;gcOSCCP+w#-GC8wm8mZibhpkgp$r`40lrCB-|m3psSilpU|B^qODmj!`$q)!cP znJ}Sk|A8nIZvGJ0q|XL>$db%Zib=ZhMH;Cq_{y@VyQ^7xT7swX_Kvy%q}T8 zh4tu7d{*w(j|Y)gaA5-(U4PVWIxg`&Ypd(x)R>2E;xLKkoM0ekvnBX;5LZK~1Wd9oXvIML4ui67te2xwJ!6vYwU?w_!lBNPZ1Mwk zmV?!4uBN_ zrcPiWEwG&5P+T@!Wh@L%xg`z&o88%IGXPs&wm6YwXvOJGJ8eTfa2xR%I0%tdfIAFf znTQ*A@X{G@brLHm(7FlKx`j*ey}XTbSqcI=@Q7{?UqHF2^CG(_Q`j`Mr);1cc||X9 zPo=EL+^WL_-7+ve8Nnld(4>YQjy6Bix}bW4+9JC(_`;272bx4X*~=B?XP}K1Sv@k) z$JYtbFzGib?PON6UBH$WM(2{BmSK0x(5q})8LX3CiK_|-TJ{F|%E_Y5#KZJ!mj;$x zV@h}h8LhSk&SJS8{n#~XBEPMtiH^0>cWMfkm6v6B8O+<2c@A|BrBZ`wv(|S`c7cnP zU4u&AD9n>X6{(rZN?h_TASTp+lUR9CD;TgCZBx~fvxyu`;H45R>msGe(vWO0F!tc` z!#q~4?r2axCN9+}BGQ_fuO1a#kR3f#okUjK>-!)r37BY$*^#f@L`xvmK`UVdo7WHiq zuI2JpBssNE)+mnE@D&8!kibj2FlU~GO%~!scCu``JoD~NSe`EIg${^cZS z8$cT`QPNyh9eOZ%+>w;~nuZ49*|gCV{wxAlayvL|g^WoepT?}>8Zd?~m8UC?gc3}2 z$15qYr28~R*hW<@ZK@#!+e4=Hy12ABlNjtFKz+LxKm?u~mSl#;Yiie?o6AwIX%nAK zk)5KPg$?o{U=_g~p%^CF9UXmO`hTW(CHhxRr%ihuyR zb9qhCE~WgA(T-J1_O+#x*b;iFg?ZiVl@_Y`qEdW4bI&Tul#p*O43az27MIQe<)r^j z^BN-kU}u)yTon);yiC4wZ_+Lpo4#a`AJ zm?R4tlD3)@#IbnlWHRb4qNIkvG7Kh?NWmq3NP5hmuoXvS0BVmBD6}{y`E=juIrzHOiU6WB$<_|{ zG-rqzh7hOv%}cR+@Y?lDJ6EzAw7#m9pUJ|VLFyHm*n>4jH73)~3&dRie9ZYZ&;mU< zL0iY+uzyY0(qX|c*LPCZGgr=KMWU+D&Ym3GNj7VKO2L(y<fs#4t zVQ5VNPGwK?0=U80KruGJGfWb=>sPy-Es%dxPgs^l4f7QU_|u*o46ZHGx_gptP&GhBZ(aPgwrP*=rVC| z1!)ZcTqM>rl1A{Znr~ZSJ(F;u{3|vCQNmYTk0mbSIQbV^SfC>iVNQ?Mz#k_6OL#7P zfDKiMM1t2USee56cLvN^RrtOQ1RRrN43r6@bQDfBi3w+y-aY)1FbrMPHbz>@z#sz-U(H@ zYoao?iKSNH%Ib1`MCV@Dye_E=TMxx0HP-z)$(^-%D0?ssq*-7R{McOHla0Vs8_rRn z&1GHnmNEhAZ~!LAkF?`!r~=Eh5+uu#DmGzbCWGLHc|Yd9tDd;} z`AM-(nv)=vQ#!e5Fz95|8^@E#29&0iIkoj))i(!FIE&JRw!~{tNs&MjP?BhS3MhqN ztJCdCev}&;G2Tq0234!If^r9!c*|@aAXSDkh;-P(l$DGl}jdxnK=sL|QA2@X1{0Sf8eiq(Jp3 z4%TM(lGu|-t1amivz#Z9_4|^nN%}@%+9&G}q=58m$RfLdCc<3e#@M4xU6Gd|fggAH zy^%+=;B;>rHX}|f320g-Bqf#LC37pt;ZCFOnsFxmp>TP%Wn;k+rsn0|4^b=7TfBn( ze;m6uFPP~NxI~1sZ7{*cooPc#=2jHeHa}B#YB$<(p3BShxeuIiNmbOIqOo9?ZWW-X;&GPNSfU(HYLDzBk;tx z;AnM&*8tAEv<_G1qQGjakW1HegipO&fD9bAatulk6BDWe=6AO)MD9ccM{qKWd{FZ* zQNBMyeyZVA$~)vTsi2d$to*8V4nsrgkD|14UdL2K%kJP5XmxT7cCdhuT)PIjqzmBY z1h~ecl}AG@miKs$9{Hk$STe|%01MLF1l*bz2fX4+MrjIDgTiYGRWoY? zYG8*E&RISb4R;cLB#V19J#N~LPS|w)(>Oj<&3UX)D{0KOoh{mCn`#0*iiw{@Tbd-@ z!$Q7Lnhmp5da>D@0(h;sxc`xv^n!_lh8g=LfI=O^ zwflk7Y}GrI#3k|vO@s8M+=aza0h2onSxVVgR{86HcL+ay%Bc%2qO6~H!f12h7KP1W zurXOH7T7}~F+x?+zLd0+lUMxO10Z1!l$}y^?FGyX91<$?{1g%8NHhyLIXYNR+77cp z&7}BY8H`Za4uvklG2&J6eUK?|pu_CJ6iHz804_7%fT~i;Q=nHO;M!ccm+~rvwnr(p zY49YvE~x_zG2}+GdADpwFmtB?1{Whp7xWm=n`}{}J_g0F7;#36Ws658Q;tbjsd#%S z;Pa;z_jXdioYATaE#P1B zYrac+M{NO5>@M10e3dm>m8Fg~yI*=pe=Qq0R5ff@BB`mdCZel%bpX801I)>jVzpn? z&8)JIC~chFOtS{^#6k9ja{olUATNtz4JKSmqWHG6*!)Y&JC)=blB${klCB+ETVYw> zZ}TS8_zmTcbG+pFe$Vxj2+2l-Hhdblo}A31V@8aHB`rPaNKyJXfo!4$&^++>ZK<|$;oD$E9I~t)v~P(Rs#t%@4kTS-=9|HWgIe}l4~QX}XSJ2gXe)BI z^8rh;Hj33Sm&HOQ{aWKI@)};WTfnzWCn5}Ib=eR{rZJ|Ul`8UK7lV|aoF7NkPm_w$ znl|AXr{y&=0f7~AWVHeqow@+VLDH*1a~f%8+1<<&d$L z(E=qwaNob%6-mp`4!S}G-Xh5n{grnN);A;soyp)qNFnJJ`lGd}>wyOy7y4&iR24Nq z!Ly|G$u~9-(b%?xOAf?m`L%V+W_(gmevS^-4GpQg`LYy~C~LSmY|M<5VDm^-nzho0FwQ)g95XqX!6fE z$Os!@jQrgtcR}OEKjYh2s1|V1FQ|#VL?uBKQrx!uo03n z(()O(g-CmW`jG6qSqu0cT&eCM>0uHd&C5dK$pJ5JYbroU*&#Fk+4yC7A z?K!AH$}E5pNGBs0S9nD+iT~2X5zaKyk==6k+Nddaz@wl6qqAO76^8crY$ieJl-4y% zXoZ%5RWc1^*oqfU0L1;8M6)vn)!QOcWTAd)>k>cVpd*#7EtNOwbeEvkznIYLPqzA@P#uRB*TyB6|F7iTBOg2j`?9jF`^(Kc{aj)!EL zByK%MCB?;+wFhIHO-(3za_fRBiTzzpfVk2I%*kq0$uvXF{fLgi>gzN^D9MvF_p9yf zBF)(tvVd7H!K}2>?9pfomp^F#VGK)A9q0Ph@UE;s=Sg z35hADGh;NLtbWljRq=eZNmJNX*9Rq`Wn;Is8$)R0xj>&O1w2cN*?0pbnX=E2QpT=o z+&d5_2eW&co6Y@M0Z zxkAfZu!F6BlF?l!2)2dRd@tzqUnG+tmNXw}N)+^=wE$O-odd_q^xrtzzoMPF&OS z@!ZIBrkv(l0a)DdGq|MKDVj%WEQaU?9&I?*+>#VI?Q{}1C+9-ME+Ti&4+H9uM(=*t zqQx0Fvf~T1LZ;GKnHGmLomAcJn#e36HW92TkW??I?^|(Tk@pzwZnU_j!=?~HY1yoA zlmIkgG=CavsbmO()LD_2CF6l0@e_lhvUe>Hnr2Y1$uG4Q4LzUZNs>z)UlL8>rSmjx zb^@*?+hO3}MIm#5JH4)&A@d7GO|3EM9$&j-c!EvSd5hp&7F+gc1S z8I(3DTV|IXRShitfs!{HCnbC7aDeEi^+@oN5SY)p86&Aftr)Xeic*u%WOPe)94+lo z!3!@78Qq+_LSB~vl*i(ak}F@fpFtE>2Z3VxgrG_&s<4`*n6lThA{c>$RE{!GmZK)P zwG3KL3=Cg_&J(z9%Ir{5DZnu#N%~N?a2-^*^&(B&{Y{HML*~}ov}IGEr;_Y}EwDgi zy0jx`!_qENXVp>`z{tg_j;a|7Jaj6UM!*2BZLu8F^+eu6f#G?_#9C{ zpoHMzJ|Zml6t#h11GmD8pg=0yC;3lnK#5w_c~FKuHOp&KD~5N2(lXrvMNWb@W2F5u zMY{i2dBGZt{JfMn!G2VnDT!tJpzV%78LgYceN17*z4lrPGI! zW}iSHrLiML4tmgsN<+}&pS5I1dp2M%?1EW=Ug>x*o~gx7v^DkKNxvNJ*>BFV`{2pc z2J5I~;wWiaXt)^oiQu$5L1UMqp7Pl_irnt|8YxZm1@h$7kZ}=Y7P>=Ju|RvW6D)>D zr&Z2?*-w&%*GCMCi~FgtSfH;(?KFa55~mqN#0Yyumpk0wb-QdrD1+!)bHPRszzP1b zI-8jqGw%(hFfe@C;MT8V+9HHRQ*xMS$Xy?{s0Y1p`g_56W=aI4q(q&?kAZVvxm0kwryvS|3&XS{M0CNH{l>CI?M?8 zYG2pH74BOQf*z-04{AmxPHsA>a@!*3BnQgX)l@TCttN1UNoPx<)mIeR z5O8q%yOtOVFV<`!-F{A|NJL#NF2fiNOjs3caGuv%ZBRLP^KD#qiNRhZ*XqniixyEM zX{(a@-@?g7CdpDy>g>!b7=g4(>Ow_Xy%%TO?t(NM6J2D0O$18FvHrH1FHG~*gvH}f zN_um6Ck5ORDkf7!oG`ycCQ_E5p_WloDeN)%I#Pgyf@$Rh31pvMloX`OKrb3arOGO@ z9fQP+lRb+yglz(_RFLl}WXHMr(It3)*?DjY(j#us3GVc}+scLCaCXQ%9Hb{?JdOsbNqNon_{)Q194;IYtW5E<2LUDN0J(k{V@X1oh-~l0+7tC%bzI7}G=!(nR4l1v@0z z+1f3uq-Tu-k^lh!07*naRO|ISU=JiE7fF=sq56UF%A}p4bA*d*qI3>kx4TF>ePYWc$p3knh7htdMaWPok?B?6IE%I zmcsBNReRxRh+8xeew?}f4Hi#Ah$#6a>^I-n=YTQ6oQ86QyWmmhHGqM;gEU| zse925CM_|WarxowGh-4R;4+l}vJU}Ja4&V*d|fhR2e`jPMML@PWanavu3ZEwd~n!M zek-P-=SV6iq6&5k3V|STt)vG~M{dc4WvhV#B($%e%%}x(T}#{e3~@HiZQ3pz zWnRaSjw0%u zhp`GYy4~&A8XfkkGpRg@nWWFWSM;yTf>Y3dnU$$AZ%i;>6)jcZgtNg2yp?@e+J7#- zWy$f^5xAy;6H z-_r;oa|0lIt6$3-F(LTCums*{4Z}`pM30D?(o83SKm&lQ^CN0+s_hL4rl%Vd-QLxwUsAU~2Op2r}7Y^@l0T8fc_?LyG|*HFP6 zR?~LRJzL$M2&AnYT-VTQvc@)z4w4ar2wJ-N`5?+ROKEdGK?D|JlSW^|hV zlqJ}14Q;XyX8Kwx5_!^LkQXHtUcI=#=j-K^xZrThOnrTlt!p%E1TTm!^=ig0)1Hom zl4MOLMo(Z|E#EH^ak87Lm@7zBGrAyrNeh^xSG;;?ciHN*1++*Bft*^2d{%U9s+sf> zA6hk6LL^S&8a%bn!ARk&*KfpVbtsxwe_Xkq>WrBbi|iN!RNzfPEVpk`JF-~vkjk^+ zfCVLbzI-^`BCZb4=LV*DD|jU0be zFOMAfkjLpA*6LB?YbLO{1Btp?$f5*);G4hr)04?w`rPL$IQX7e*`I4?y%r9&zMOm7RK6ZDT zGbE3He0@r|@-$n+z`Q-Ep&K*WWTv3=Nm?I8U07UDQ3RaqW?X!%jd2+RGrJLZDrq|t zJRN3im<$r9mUe!El5k={*t}ZJX_Xt7C>|wX4Le3d$Pvd3b;+lp*}KFrK>A(<1J9b5 zP6G&fZ*mTjzH+a|rv9i|X9#v|8=?@hQkz>7)OY*h6=~v4D+Lt*V&EMjJF_Yi1QukS zM4kc%*65Q~{4g7r447r(XONf^66N-97a zFMqXoQ`V;5wa^VY0@$0fR9~__P_+e}+ogd;;sFFku;@XR85sb>39_{*Z?dP%ae^lo zG5M9EJh&+~SyfIXrEat%NBOlRX{%2QI&IX7Mz`dsP_4$lt@AoNq>TWKS-Om1IQQ zrn>T!Rf_3;Gsjn%B}%O^Htj36F1G5b_jY1sw?_AC%Xm?#E3>{?Ee#?Gz*@Zto{YGw zSe2(>LE5l}H0L&1dIAb@iFkUE;=?hluxoY$<78pH`jKtX2FB@nt#cl`CiXr)`jjxp2dHIfqMvjsQix0 zk&{%LaZ=SIZ2klSaIa5)r3?+T&TZl7TL=`C>8WWYMd74N6y6(H33V{zqL-QrHCB@m zOYuzWER!PGFiT=av}AZAP&T@xmlU3M zlM-*+;w5lM|1X*j6`F44syXY*GmUNrRgAYUP8^u3W7*MzCbPo>^z@@}-WF1KVu~%m zK^ds8YwpSLPhAct(G#5)tf6-b>1eBIdNYvTa-s$CKn9!23kDfVNjnyLqtS$jNB6S3 zQ!7amHoH53=Uyd|vuLu$fevaJ(A75mM3~2*u$-%vAPb^t2DOhg+}3+HUB5sCrd^Zn zC`UGx2aHlkrxqKt3c<_uw5K#$qfPW;i3&J3Q9?Ij;bb7% z!c!2jY-&bo5D($i3xzGYe;tBEoT_w-C@^U ztGGHX$9s|YrjhKbnyeBC&Uqk#a{;T9ay7h@f}QfosXMcpre(5>2Mg%Sy3zGTUWYQT zG?-q}!tP2fEXCh~tTk{9txtxR9yEYlaO2qxzjqMG#Y~ z%8}$gEn)#{T^573jZsN~8_%oQ_=39qfLa2~!x(kT@I6E=Q$X zi2h5Lfx4^=v7vn3cuQv1_0E?YL*9bCQ8YwN`;pPSLXydn{s1i*f&a3t3i#HRE^OKiPl9C)b z`I-f;C_6|B!yl#11nI@W2retKaJP&aa!zP==K*v$CK^-<=^Rln09-IeP+>#f7+24# z5|Wlgt1DF%84%cA7YZpIm}!zGX3wbW;kF(f&JjXiu+&h4NfpTh*u6BX##i5JR|XX3 zMQgW0;$rUMU%{}*17Hw=b2tm~NCdn?Y_VgY$V0dqn=K3uWi~xM#E~dalnbG3cP1%7 zO)v2f&KFZAsmB`;eb^Q(>Kk7c4aKKF2;+4XUS-z`+cZu7bhX@SduuSJ5+vq`>=>+2 zJ~0Puy9mQBkB45tgp15WbwxCoXX!9aB5LnG+pYho#P%A zkhPS6a8EM^TfydvT{3YpnItzQ1-L_}IZ&g-F}csFWi(COHw`cs!zln2iCUEDzHbbW zLB2QzPCy_8O(mh_qvZI4-E%GbFuzII2q`!WRp;GWhx{i?mnN%$61y#Es9{jI$3Nqr z@*;Z8gWGkw7sD^kyEvjH4WN{6%55ioxfx(;9hiSpE(?9EAS1^1WRokrKlLdJ%9UF^J0ZtpwkIHi1TPvU^&Pvn)1V^NqX#J!t{H8bu}Rsc^-#AI zGRWng6tjSV8IqK-!re_Zkx}nb7)B*)JZ{9M2$r+(A|(SLS(1=dZ&^%OCONM3B(DSk zP=Xgsis=v%@ZKQ!C%IgRy0r92BE&|n3J5{>bQuMLqEgl-Skg(ehDjMx@LV4zBPFQD zMW{cyX<~3DLh${SoEKT(y%it1i30`+@S|JfH82Q z4>i3GNm5_@G>%`3OI_+phIM_@jVdD$*jfb&K0)g*$U9HxClyDEwg?v` zgb!%&nL?bBkDKLC*h9>%-_)s;Y-iWIHseE?p#rN;L?#_7;eWqE$DvsW*49+Zwz!Ay zs%14`u9+iIlS2<(L_yS@n_^^BL4RSkQ2mS*kb&lZp_li8{f~lkJ~6qjkqN3_-3~^d z(lBMUg9NRs+erJ-Jf7Sl7F5Ltd+fIaYs+p~(r&`aQUpIgoQ%|A1x2g9Miy0*O8Nmo z-w{mM6p9_Yi66|o3amQ@<>%52Hz%N1o!06R#E}g1S8(a_Cg}%r9s*?u9)Iz%`$!2jU zC6EA3K(fCL?lVe}oifR?#|6hvi4X}D6xvETH1Mgwt@^A49xaf`4T!}xrAg#kZ5Fs2 zI>h*BV=VL+>iI0{XNj9q6M}f^x*UeK-?mIpCEj)MwR#q6ta+LXF1v`!fifFhPNVWj z&SnM#*M8&_pe}viRsPzxs*+Jzm&mQ|RKcgZ^c11CQ%5FB<_aAPDa{uCRW#_Og+t2f zb+#-n+vA1{QaXiC_E=Dz>$b+XHN?LQlkADa2VA5fMJ~`t?9S7N(k^k&O;8gTu=b?E zlAN!H1siUT>A60^%}P)QL6K`T6C*4=S##IMRt+=dJ5rdX!l7s<=D$d+Z7J|daGXQ{ zjfYSMy>yL@fRuvx*&pu99Fx}v8Pq=FwI)_zUY1d|-z{@ zm$u+BFF~JY^3D{AG3a1guq5rgOtS#LVKW#@ZX*j_mqMo?m6FXT?jOQi?nVxBP?fjI zwxA`lQTJ?k%$$czjO}V0ouE&x3(yuRx#HPaD^VQCN<^{>SyCk2kxUeOmct(|2&)97 zc&0c*QYGsi%*{*(mEcgKtL$8Qz$FCW(cD^>8I9x1@@EQ{d$pxv2AfVp_L^(Df+0!e z&k`QR{40;-xQmJTCjvK9+G6=4*ZZ3_@=*(Nz(qBZEiLug&1y`Swzmda?57z)u8-%*vgwAP1tmd(CO@+C86sCrwLP=SeXNSTPF#rw3cr!7v zE^Jv#YxH4s!v%bFJBTnN&zRInWurDF*E0nZ+gSEJrJ>nR7#m07-@LLGH|m;^&$w*e z-qhSlepeu*IApUK)Ir6^Yyz3>4FtUrrEL3>=5R>kBz1v#wbW;zbpwlQ{3z1N8m3;B zmL03R3NXcv8uO*=e9jwH)CwKCL@yjnwFtLmL4t<0Rv$k@_U_-QtIBd)gfowJZRGqx5PGqD%4+K)V+JnL2} zdm0#t#QHtuK!ANJ*^sBF5mrVZT-Nwb^05g@#NW*7MGljacqg8f>h_`_vysj5H3+U< z(h~h-b2RTLH)02%65E0R`6x`xSLH#Y@1}dZ=MI_AAoW?|>ou=Repvc*Qz-jIM7o;A zt|*H^OHIEma!z8n?p=KN1{X?YA6X9|50Z|%@4@g!xr7Rn^6X>a91DD7WlgaaTt?bf zwp7A$Q`S>EgSi!?NL?Bdyek4nUZ6p00#4cC44!$~G{zE!b6k@o*kwVLq~d55I7L`9 z&zw?QyRGm*Ih7cMRf02x6u~q}GmLU!3m7(^hTs~N1QuNin(B~xMyGZ>4P1LM%WJ9p zRDVpY87<+~PFp%9g&-j>-u zhu3_x1Y(qzh7jCxy=kf)VN-pwHPcNGm>gMZ7@#re&?2I1zgkF0vPcw_#;UGvn+C9m zEK}V$HWs+C5tecmz=8s!lvD9Hg04@tAxQRz=}ZbJc!7Pk0GBF(7y^p!W&^GwSAR}C zDRa`oZ^36>)?-_g)dZNNh&y&`3?$L8iBO!yucWf8PPiK7WO+3^#6Xim#~_jvx*~wZ zX5wIT5`oMfC`hVCBUoLZt&hpk7JPY9U&+4Y0&8WUAdr{cByEe@WiIu`7DyR=e%Jz) zI56RgL&5L`vv9PDMvHLLUGW5V1shsANJ~X;Rbf?*Hw5Q_B<7hBlklf7+l^4n)jLn^;OnaPnX#K(JOogXkp0?Dq;54P;sKqC!63_B@nN zG98$MB-W+fl5nIyke2fHrP@6`s@}3(7p!U5BYz0}9ztZj_Z+jdTtJ!htzJ}N`3ZgN z3lrga7c^9j+r63#wXn6=R5omD%rq)goY8@_n7*?_9DgS{ys0bMp*-T$wlMnKzBr$= zB=_16U7?YZ=mgvr3|6rQBN%gnlH6dw=9(FxrLsDqLTwLzdqF*P8gD6=kBLlD@d?b~ zvW(YWQ*oYl6J%(u$6K=fybIJsNtfLHqKPQe#PgGt$WUx9A9vl1x=h;25r0jUGLD;c4{50@aP(DNkIE|xeOWYjKJIkrs~K^+D~v9?mg*>ONw zuMG0ESy}5cnWW%k$Rl^Glk5%-o`Fq4w$}dYQ&oG4m7%(dVo0`Uh4a0hu}2dnRL0|R zn(N~>SCrB+`5;h_Y*U={(&Emtsn0N&mC&Pb&91?WPS~C6Zg^&2QjaRV-lntB5#7RQ zA`~0kVLqu*&^qo~kdmD8IKITC313N&a4Q)TgalPM{OzpoZ#oU_yMuEvqccLN+>j}F zCMyiIn_W5C_m&Hig}!2|Clu4?*@A=*R;If^q`E&7hFTueqlHo}|%D|WUCRsp#TVx#mn zPSw;cA+6_wVqe6meeFqWn8v0cIW`F;ziZC_Ixdb@dkCv#55V4iH28|%W7;cPsbZas zOB}$tTOVgFDCp$S#|UYV0#`J;26Mp*Ed~%Q*l6J=K{rKof^Z60$#cm=5~e1=0|I?2 z$ihHPug)b_s~tgEn0TdmZ0a zY|;+u+D22C>gP&Vb zH6aIiUwX2M(RJlvNEP&YkLc%vAiLE^jB;NfyX_N@yPK|9y$hQsT;y0I5Ryu&B;U<1 zQaD+{t5#F>;vp2h4egHCTKtd)KuZ=*4NUg8MNO+n`KZgcoK9$*nEFzx27;F04fb7? zQG~7OoHubIV)Pz40>eKrM>~#&V0T7pAL!v6IoPc{IbhjNP(&v?!s>?}EpI05;VIvg zNo6GoWQWwNK^M=E>Iw4NJ);0?`>3>5UIqiYJIlmC8lfE>AlQLMqMQIHnGgUV5Yx~m z{VMqiRhKKdRWrWibH>>%F738b(xkB{HMZyi{pKCWhk{8mO$PE5*AlDiPJNy*XferzvGVDdFh ztP?|OY_@%~oYPo6BR*hucXNtFq47m1Gsu~UYB&jd8jQ|nt6;kCKBYeOT5JWe`}WA4pgz`6dmla%VfDJSSf#{fZ6;g@7m4wJs|eQf z+En)PwqvY5u0z#+ttGh%js!$G&#zr^t#iYe2ZG7kGQ{fme(~)Dn+u38)}^mV5#R%n zI1VJ=bvbH=3Q~qIVP`N?>nlAJt2-o`; zRV$nuv?*HUlC@+8t0lqdADl7`QztuiS2Ba5UZXsyo-;P-5zksl;$*olAxk7gxC&~M z`edAwZOuzW_dq~PBC59`qt+Tj5~jASA<;59wVGya+FUxu;d*?5s*8cq{p7B(kwGTH z^mE31+ zOCT2}f;${Gbr@;wGD)VyOt7B6Y0FdLHJV3ZKGvd*-!dUg+b4lury(xPX7*HM7>z!g zm|IAi%uLHvE5QvOL8Xx^`w~(ij#*}G`Zi=cg2;})!-l=3JQTLH-$|#*1T@{z!jM99 zx~CDtVhLL5^NNdnwn?DX&rv3(z=H)YvPSh;jjFU#b}O>CAB9|DCco?H5x|K&SnA>W znIjPo6U!xwPKxjckI5z_Qj^!ql&YKL7|a4Mns8jbjkb%-{RbD?l{P6ylB#GILRGxM zKCNLeS9+fG)g}W+VM|)^O$b6V%|UxmHuW?Wc5Z@5B3P47)z~h6nDx0A_(Hr^u0#^P zxP4z)Y2Y|;J8-+<_6WDf{ok?1bFGOiPBu+`1{P|DN9$=ATMfviwIs4N!UuYDQQ=-P zya}2ZIk=lSkq)Kk!Ui=x*#{yBdQ0^{)2veYIS0yQd-NBBJT=a?Xaq*_)oGq~B-2=@ zprxmHUtmPn9TZxEUTNkc*+Ek!3)NChrRyAxkzJN+nHDGM+=Vs4h27XDlBDUCoB}8i zqbL^Xf-d8n4QoM7q{w!{&z_{TghJ4O!H<)nAX55i$_!lWRL$SwsQQu*6cYAAr&P!DrE+*p+P>UrDwStav+!c;&%PJu`__Pvr zJ+`x@InJKU{ooaGb@YOkD9Nc{)@G=(kO+L>!vk|cN{PE*{i5}jA0EJinT?bb(*E@w zQU=g|ke$gJG4q-@GBNLhP?A%HN(9uXNgO6cM~Jzx7wf-kYzAPXRVtd@4<~^~_j*(L z>&n)Fn)unex34{s3c|KfNs1I5yEk!y>5aku7X50O-$V$4X6W(rXV~j9aBv}`fR%5a z)I!f)RZLyayON(vQRP@So0Ro;fw9n5c171iZij*sNkY|UwD6|nWSh=o45hmO`g0Pwa61~zpG7~vEfzE7v4*E&Qx7|Ankn*+Nei*tFr;qoP8UQv#L#e& zv&nM7=sO=0n0%yErm3E7!dv7P6Z159d2P)GAAB}>6-_yRP0sqR(OC)}_!hyMidq$% zt74`n%@19lJb;a*O?btuqxasd1N#9RxE&oG?Euc(8_yn|d>&7}fG5v@2R`%0-vg0& z>w9kReE)ta_Ol1%T94O$`n16?fb(oGpi)_904MoK2eIaOCLSF)&vo2(1|FWYmw!Is z=RS{z*Kj_;`Sdb|1>D|=uXq=3H>?F5I2P8z`GA#pIAbB#fehf`lFdzE+hT@oln;tJ zXv~xh_Ouo-{iFQHp-Cz;fKQKhIlSP)=tdLj6*cm#A!bsM!Rf>rQ#%l6 z=1(Jm4M0X@`QGA~a)-(YJ=43C{~c*AV9(c4yrqvJLvU5|P*iUSbD=y5?(}PtvgHw! zSX|^+nYgPojz%yZDX9w(ynw19WT~x zq?1@t(w?|2+aW_++~!~;tB2-+5W;X$*jq$q{%BLp1Cz<#oV5rDR${g3qDWT?8SIr; zbf`p2#?;etUx#7SEN#{46EXrY9S@20RSqR=FR(1MYs)AG+LUdmzReQJ$*wjb!74%6 z!!M9dJ1cN@36?FE0ZJzFe9YcR#zpb@>C{(i(TyaFovLlKSP!|_U-{>ldIjVnSD^yH1{=97Q5G7Ny`LTLG4w=$wHM29H{uBZE_Z}+&RkG zdvh^GH-Pc|#FwV6V+T@4Pf#BO_uv{H)p}f|S6E3qh7`$C6vAFX z&MBfTIT*i$1JJ9L_H)(_Akl|&|WyAS87!@E6%`yr%&>YC;0r&ARiFx7yi$F z`EUBie*M>f?bm(nH~j6lx4!+!)AMtm`^*oj{V;}vAAN=b-_y_;!fBe~>_+dOe0f3jk5^sCQ@wTr# zGjKk`k$6zjeG@k*Ig463Cf`ITDMBs(8Z_;NP$3d|-1h|+D2?>evAe@7caM~>ozqjtUixiNG_A-_B3tG+ai2bau%~-tz0Y<1!htEq`J~ZL*mNL zDkV`DyK`e!eC%L2FkTHMC`%WMz)w8ir!xl~dFq+V66dZ#DJ0j+Xdh>?RJxQgBA8q} zaww)zUA|)(Is<=S}DXKX2``G6fVpuIDU1r{3p4CeG-z zRGIj62jfK_riiAu#Ko3%h^y2%znxSp5pSk{7r#+9%rG;XpFM^}?Ck*vzyZW)c_moD zZRi5|VxP8bEr!aOQ@QFgf<(wd6j33YqEcObLALhs~m|X|Jp3d^3#D zdW_NbU>uLJuj!&sy8C*PriG$#lY3435|O!UJWP)+w)GkUe%t2Z-{?fWZpMrAD8FGrVTuBAh_e za7>Bi*W1;ILI1Knt#20=nGKT`(eNY~SW2-SCTQd*A4Bv3bE__#@Oe>zi};n>s3|N? zd<^H<*m)Eg+brvdf)x)@!{6Amq!LMDodwU!aLM5!K}ZHb{(Ux;7AKX8)7;X-GN63; zj?15_(lp&v(ji-+~@FxpN`|DzwbM~^Lzfk|MpkJqe=!~gX>`eID270 z02@E@vmgKM|HpsfPyCTT{P6HP-tmEW-`C`4KZ}=MZu4`pZc~oq{lRTPAV2cq0qZeV z;Pua~pZlo|eEWC&SxBPi2H%s)o1u-cZPWwTX}+U|KOWWshNMvU`^QP5#?@I|i9v_yBO- zuZ=(0y|+6(WG_6B;Y+#{%RISO93EB(%MFEvF}2yilcq>Jm{t{Uu)@qN#-PFOj;I5$ zNgOcM-b}Bo=z4gMhlv%HWfsQpmD-+|jA4z0s?nmtXUtC}fYdZo)=lVWZH+CYa`*SD1A zt<@#aIeNJGKZX{gN3a&a+v<=-@RIXMJ92_O9CaX6n(R5>K#o}#TVk%+vZx>YCX!gb z0xw!RW=|PVO=HpzIqCW59rwxQtl2XMK&znocT3v`WcJK>7v$|} zT^uebyrr{lZok0_mqOBP*I8yh8J5-cg`@{P_`Iu}0I9>I>d)OZgh7XmIB;@(5zTKC zGs#Y!Py-cz`RBM17}N-=&`i^k>*;S1#27rNt^#Y!DiXP=o5I#23LhMu3O=5`vLx}` zTgkA)a$vX=@-k+!O*c>HP&n^bH(d|~U{uq_-mj#8S*3%#CcisZckN6%#JncagUEFm zIjGF4%vuWnuGl9_AF`=;^@jpti#L+=T)bX312J4spg6S%zO>;+%#8u2Vtr8BE9)@! zlH4?S(PtyTDzgmUDG|O}{^8FvtC0R8K4;;%A5qVwG_JXrVGVT|R8Li?F5+tDA+E`- zzQ8=Wc}-k0DR;bUO3H1PDLQa#`*b|TxnIL4K88ofzxxON-@oxU{Dv|!JNH`a>BF;i zJYM_EBO)UZd!G@p&$w|dX#&6F_xzsU^E-YQ^27(e@i^A`>;dZ~!~>9s8$s2|SsFg_ z*l`{=oKNwye+#(%pZ~Sr`@4VZZ$?-HKKt1_*8&jxOduBb^L+B>KKskQ^SgfhPk%2S zeZ}z=?>*o47Cb!b_a00HcyyX*oG&a@VWdl=ve02{GHC%JC2T(96Rc5KpMt}Ygdg_% z`0=u})USCG5qr@;9-k6(`;uc#BQgbN8Bib(#KY({KxZ+i-AV&t@Igsy0aPP)TDr~j zRGDub2JZSF8F&K? z@n~d>S&1@~p1#z8D@LuiFGW_O0I1h=IaR*`#W*g6=98}mB{0AaWswX+(;PU#j*?CF z(BP7}!AW;%?y`g=d*kq3Wj9@D+W59?wggKqByb>z1^hPeGlsIpIZzjVzO&9fJ~Bfv@?dv6O9(0{{sm0rqGK zbL0f5y&TkpVydw=ROJ*S@LU1$LSjdDx51bJ2_^)x;FG5>%DUXEkT zc>;wiBQfO?RXvwJem1;CKS z{ho)!ZL=a6$epnQ*=*?1?2U!o5dlQByqpg|{+UmI!#92euYVrz`~`UXTk!A{>rr>j z?+RW}A4lxkWPmazhtf+fEy+CDRMmN1KSq5456By0k8_h|^~4l0GS1$rabJugRwSVh z>wbMj2j{AeXz3QMlCOue?pUF@&s+Xao2 zXp@)QRcj69n*_Ys)}iaqvgvLYqy^WE@0l&4%a;%MFn71&>DdqsY9V#FvuNm{pTK0h z@2*Kb&_*~jLgUE}W-1MAL8BS$;J&V+C;%*ZbEurs1Q{1ZD!7DL6-Xf~h$O(+z7~l! zCVOTid5$qO^=%KqS3QV6+uRI#bWYQ`B}ew=6TzltM}sn}&PbU%vo}>BQdqE1^4}kt z$xz~a3dM1KwZ-aUUnMc)HmTCw*J>4~6Rc)PnB8lFg@|c6=-N2$_0K^S5MK2_vPoVO zn3XOtS@Nc&{;V9TNCjH_At$AJBk+N58YKi6-^lI)&@+=U83jG(Y1i^7#U(6Mg4hOw z&bW+k=^z^h;+uLRxty{{w6$)EQuHsiIZBdZvT`&#!y#T$!cf_%(q3gOuCh4H3xG^* z3OL54F*w^QRO$2H8>ljCrNq`Hu>pFP4h~>IB|EoZB~HeIIcy#|klJ@+qPtY8Zt-#f zQ9kHMDT}X@G9(a}Oo?PS0fM!U1h`reN`iEtai2Axk*Ms5VpAqni?{&2k-B{pc~3cN zSrnXl1xX>Rb9a~Q+?}=UyM!YIN4Y75=BJK*U{il3I~}t^RB{~TODEBy!rhgCcS0-G z1I43BM*}vn$XWNOe77QXVN&CybFH_juYxs-W6#-YNp22)>0apTflkEiy3;pZWp(dg z=_?XnNL@bDDNU)d+d6@9A4~hBJ}&d5dD=ST&H;lVs7gt+(}RZ~C57zLEdDFw_w0%iX-}@`h zM}e>YM!Xbwcmf=K%jWS_B?GsGjJVzMm5<`ttAF_i|K_*+9lr>(g@=*UZHL{sc8S~kPPX|$n%ISL(p(c#OSIIZ?dC9P~QGd1H`Q?Zfu z)=d44`mp{LjQ1V#C8$;o=4}O%tzfzDYnNQnFpaWEPQ(LG*hRZ~2S)wisAJ99$ub1Rz+^owINy?)jhWOeS&5$42nm}RE=v_9W4}cN*2GQRM@L}M z#D+L6{Lz5F1fdsG0lE z*A@1x&0VkqLkeNXo$Lk`@nY>Pso?(BC00OJ9+siNCZJ0zRNRm{5vWXUK-%KM#MHX4 zw1SetLS~D*vA1!ge1)w@olhG|6fd$RFnoA69fi$X`=SmyMxv*~3Lj_!Wa%G;!6wX_ z`(xY zWr9<%#$#n8J0O|t0~zO;Ji+la(74j45#MdOcw-+XV-?T$7b7$haPAKaFE70IYJBRa z-~V@f%a8uGKl|3>hK{QiS*~!sX)zh*oJ_pvw1KrVS45tl+<5=XZ_isC@BX^;w(!7A zNA50kHM16W;Aejn>!qjX7axtj<%u{-a}1E`&4FYXFzH8O;#rNypFR8+Kk%1-`M3Yi z@%DG)UGK&Dl=fv?7EOdD#kM!y5~a|i*7oTU-+nOfd( z;prWJg*+jo+Q`76Zni`Nt#~PWH?i^9Bme-{F4x;PJ-LIEI%(a)DA{mCOL5@|Et=sjeGMo>x5jxQyIg- z`5}!3C!EjB0+hF!4qK!swwyevq7EUgwGeG;O8_v^V(t!!Nw6*0IZrGdvylDOLBr8| zd_{bWQ3EqO!%zj}cdOn_2Fih~h`qWs_BGY-ZqaZTFSLM1g<`3arfCZ}rQ`An(v%bn z2h%H(oQtpT-k^}@P6b?;Wx*Gay*aZ{^qOdZxu$ckc@#W}V<>55L4Fz(S$Ub8oYexA zw1f>v9R;09@tua4nEU}15Ml2UQiGX~`n@N)$tpQI0#vQ1S=3nOp=;W8X4WE-N{u~M zq0Ch?NfEdew|Ob_yms;DeFORH3@JsawX`= z(6izto!UFcZv|tX-JEKYa&}mk^qX>}Nt(O&pK8Ay%&P^U9L63%Xw_wrbWFIgdo>M1 zAy#2W%p7$D2C`e|q=7=pyFwolq_32gkQG^U98=JiEfUkF26Os>Qij|7KW_^dJdA9_ zI0p^sgY+CFel_cUM$VO!nX@E~AAJQ3ugleFXN4W3`xP9C$`@O%RZf;78M`KBPw3-u zX3=VqBjr^ux*&@ho!}XVNuFxVeC#sVX%|1}$uYctS zf8ed_@reYmc+enCE`SldNp9C(023MjEBCoF@&UQtdmOJmd;Og+zjXf0$K<7l(l=o& z_~ehj>ubL*&o4fb)b?o%;V~&yI!rJV1ctpekags_06e<=ul}BI{h^QjM7;W0eCE@L zI&K9muF9>z9Cx5k>PZs0xw9G*K!wGc!ZqlJZKk2+>koOvCh4qle!(8Q>4#d6%JQF$au@vbKarMINIQV*hj(9WKO#6{)O1Oo&9%@P75>R_3o z564+Mece!|A-{`vE1=|G>12KzoTOlL^C%lRAJXVW?OQy}?Xnus&`-H7WkaB*mYb%W zUQSa&=Qfi6MPAQe$QJ0v;#bH651Jm$PIOM5>qo9>UYmwV_<5qwV*x#f;^|(Ea!pUm z{UwJeJD5uFQ4S|nZ0XLx@FIA-;)Dj(G+RKUKhMNusk92iPlwz&!@e}1aqTTIH=37( zZ=U(n1Fkc1*X)sq!-$Wz{@cJIX{N&h!a7){oe(lK{jU1g&hD-Ers6c^hSCxfn*y_% zdOougaA_pqi_ zgeE=$p+g)1Mmah_!3bTW)`t2;B>@e8T~c~J$vkSWD&`2B0wz01d`UWK*GC&IwvLTF zFT;Zmz6W6dVcB0f%HXo;^4iA&!)1hTNRkyJ1dBXtIXmab8(aq?qtoxLP+Kby_@eum z@9L`s2OkvW4vy)5i6C;qs(=vuN(HsLYs?|_d-6 z2o`eQ80L*hJlk^UR5BW#K89lTHAi+AwkGK@`2s!#I9T~fialQ%9*%-MMMJY&`lbfw zh=nt_8nArpjoZuk#E<^{zu|xT=l|FrE=C_XCY3|RH$?_8r97l7uLOWt2NvR1ba*TF zCqDHly!;5S{8TMCBeSiAT{aL*B3SR$Ww?c3FFC1vrOz^;GM$FlZv}67GxJpvcY;0UMqL7|C ziDINKXe?41N^6?cm&r-Y^7>){M^dD`1Jtn~Tf$+y~ zDVz)UJ)M-Bt7K4-rBZ2~s#rvW#L7M(Nn}?tZlbK<-YQG4fOww3T1IV3hR8eq4JW&p zM9{p-0QJG8)+nZ9=`_PZ6xz`f2`VoLj}Q(6VT%Z;qZDT4m@t6W1&82VHlmb{)zVgQ zVq=rna^X#}#HxnZT3QwWNnOTzF$9sxZbA_^g>U75tHFH2vTTb%pgAyF#C2!)mmsv< z$JKJX-46yLXwZdVf`hdD3k81m1GsM!Sj@L356Yy-a$dfLnr_e%fyvgw(gA_6j+Syf zcv&bcM^_9E^E`{8W0^31VDgQ@fIp7@d=n`4)l6uzZP3+a!~rJ>ZgRB3@S1`F_J{0( z2{&CefKV(``!+qq0@+=&u+mW7D`fibVB}$dGi_ey4^F;?Wg)D8U`gtMOAH~5zOi20gdiLBUlYIC>){* ze{YH0oJO>Wh{01ZWmT?s&+vl6^vx|DL8MM?S&kN+W3%2wUQ7t6#fZ3!6VfSVYXpeT zu_M{BLF;7F6B0BVQ-_TPcbGfAB<{&u#92~lOxmX5-}Ar*6cEwa;u^b`trI0$Ff_@a zxC?9ODolsXx^oV10=Y?3mlz&RZ+NiuMB+ z)th-T(82Z95mLkFe?q#D6l_qBlTG*iDC zMh~DG)vNok5XsmrruRX)l3^s3w@0H)a|WUqs^`PFlAp+UYhf z*0LG^9uR>zuoJf%e(Hxl^lkr(AOCZIl9S8pqtP=F3<{(C_q(6#SD9zzfrWVd67VwK z`#~UaZrl>_C}QPL|Hw=4_^Q`F{mK!~a^2!hpX+bP=Pt9ix|-ktIEn%P!JqoRf8_7` zd)L=|(*qdUMqnR^)216-;$#YyVds1Bg4XN1E;lM=FOwE9W_V72U7`lHqH^ zXg+ao<5+UoI4=na9Lbd}0JOG?Vthwe=k@$g%f5wa=)nh-E;($aiX!@~68#kYx345o z(oI|E1t4N;4cqJ9NuH=x6y1O@9o!;FOzkc%ENb(y>>Bu@9rJHGOHK19ND=$$p5CE^ zk%2*emkP7mkjnGDso5!v@npH+fzCkC{Hd8ly@-UdTVT8+hBVESbC2ub<9bA9Ty`Qs zRI-ull}ZL(I+eiyHi3;ius3`7I1wn=dM=H*b<>ybQ&vm*wdAP*U(TLRSExskfLrs9 ze$45H(v-W06K&%rBb*m)s!pJr0@;h5vXh1ev;aZ4$9y19iqn;tEfrh>lwbleUt~2# zk~k?#Bsr^O6KVTrMimuw{g%oI$Fagg-=xm3MuUJ1+Nv@91qU@^^%*3~C*MX3IwgXW z%FNnOY6))+JZT)MhN)y&nxND`JHVx$C-uMnQF_=@efkg7ieQ~FP1GPq&0PGxH#$q2 ze*ALU>bKR?=}e5+%&@Yb$8kc@0;N;gh(hGGx;_95l?svXf{j{ImW&N*5TTqpa|z9& zW^x;e8to$f&Kcl@ut>zl-jn7j`d7T0;0_X7%%gOLSYPiwl`IFzf_~=KjWJ`B%ii=U zt&_dkeD%Vqh>L>PB~IQuIJ>R13JO?`+npSu`_Lu%izSY(LM*0O__L@5O(+#B(6o|5 zmRf}ZOHoW^JJ}l*Ta&5i5oLyjLIF-;(y%VfpnRgUFCdyoHcGoMOAAy{wIvoc4KY0# z!NUC79!vt~@VZ~OW?fz|{@D~f=}sEb$=G{>dhLpvXUO-eB zs~{oiaAjXXd3VAU4mCzZ|3QdrbmIdIzdEk5&06z7xb$iE;{kiW&o+%)0 zs=BqYRJ&Lc&(#U+hPf^gwT3_Qm7nsx?8JZeQIte9C5kt=QN%4=Gm zT=^zRaCsYHHhch8byKiM@-?Al-Kd!F*LXzXTr;YavqyvCI}U@UZJUsHHh^wlWrCFt zmK{l{K(u?b*1#z^clp^VZ6bFPy(&rKQ3RAeO1vtwRtd<>h&@@^0PUSvq{uDPNbLy` zCO*{_Cv9w7eBsCz*;+)Lw%`Gno8CJgwAh`b)3S|bagZHyPsJnppvo*LUD|@Hpgmgs z+ifqMFX|XWu<6qn;b2d zCl_imL4qemy7;~nxykvdhcj|&)3YxbKy7P|ZR@U5iI&AYB`aKkTEb>-bY2ipI+-RJ z?frYXWNv5$Q;jJYKk1qpcjhd02tHpc1Y&T}+$mND)h$GpxT(1Yq$HXJH@*6kBS%if z08Gt-;Y#Z8W4^a4I4aObNhk9$VWpqK+-+zG>T?qMl~<@qRH3#`k&NAmcKJq1!&7>D zts6{Up}Lq#dkjUk_90l+wP&$OJ+7QlZCx^Vc{mVMvwF)u+O-9@b10LYN-vQJK>{k` zYU{{as*ECphE@mzbBaPVB?&^}Z61IuVrW|r(I z$%N#eFkK%mKCq)HONz7-G59QbNbbh&?qa-ts!zaCm__QkbRD&vS^a|5^Oisb-@uMx0&;K1W!;3noNv%uVjB) zqU3T+1SLEMf(yNa8NL<N*T2P*%Fl<FXRy?PX(d{CvpC?1pTQu;$Pvh+~>>vXC-!V=C~*Wgw+*2;!+9A1sK;gMEv6Dqf|s!ADfvLHR7k>)&h z^lncv)032%+=#4DD@hhYsMZC6^v~-md3{(nZt^i?<#Q~Erm5V?xF2X8AK2e*Hv_#< zeY0g#(gQ0`cTGB!>gowfdMA5ijsjabEG65-G0_u4m zBV-K(>gH>9L*i9C3btUB6%FO2Gi+WMJn;!G80$(j{L^k#0C?Bjl zrK6R!LJ<)M5IHAWhytw}GEqg+Y~e2@%(IIjX~nBx8Z3w%W3k*0$^0;VSoa1qA2Mwr z@RF_aPz{rKYjLt>AZba{Jlf3-nnoo=i@CMjJRoRniuAkqi=ZKWlsQXxB-jC9bN7qM zVTyIkZB*hGQYG{iI=96mlOS%$v}keK-sB>!@+L>b1@+(>UVyol?B_#1AM5f;jA;yE zzl85njSKUNXbiqayGuiLz*7ng>z6JSW<=Z`;qyQB+x{Q_(z|YN2_W8?j!xeflSV;otRb|KvaX9kaBz>5LpZG>?4l zmAdP>KYToAAdVFgnZW+jfAP=9mp+TvUd7{=@C7LSnCvGcqx8{4(tpW3@%bR9HVfljBeMLuWOcNJI=i{gY71JEPD0WKu^+eM!_7=e zYdRkSr6$X953V?xsSl*IMJ}W4aee~awY4yE*ztpBpybf!MK-p{MyE)k2N}xrmDfmy zN?d|IK;h@&LUu%Fgj@dQ^@+JdVm{0OpoA*z`7i@2PAL>zm=9ZG?U}*nw0pKLC=r-w ztp?vpp+RaqCLGBun6^MPE9H)(Z6dPm-9fSpXVC^%wl7>IgG=oA(x7?(QdC0FSMU2kwE?x}FeiP-HfAwpizFReXktu2($s0h<0fW9 zWX-nC?&`;?);71B>UO<`20+!-5}J&mNMEcJsiLlW=*c&ND4hLL1WykU_+s{GLO^WO z4|1Unx?{?w7e+&_16fjUUpc%<%GS20h1^hd=BaL9^5Cg*gXTra(;z^$gcYB=R=Z+B zXpNl~bDOhUkK4A7D(zpvqQ)af4XPB^)jTL5fu%l-82FByH#Sq~nSq{hDFd`7m`_W= z*698HXhBJU^hetgY-*af4&RBKdPqNK_e?i|BYA3AOR=ho(hCd52sRz=F9uh7wL-^5 z0nURppBzA0%JX^VjG`W*WKhDDPxZq=s8E{*W}ct|;+nbC>d8QFR@oX!3*>_h8h;$!cLKi#E{T(NLHGoz#(oFq_5(^wibgy>uCtu&6g~ z3vya9wdh<&QZylZN2aQ-p{yiVu-pRAHg1pc`A^0dKfm`IfKY^67c)0D9NzzR@v!sUcmzDKv<1==>c1Wxw_iLAb4>kxvk-q>MT?g;bh!Me z`bwOXC6pdMy)Vu8EYuxb$6gx%ofHl90R?Fw7~|M*cxq~O0SlVIRFvF|FL~~ zI2El$f-ZF(^5tCJO0UuZ5U@zPN*50P4tf!j%-&2l*rVMNwF=vO-TF(@1>G03NcxjT zedmTDj64C|sEaw6<*%08bJv5Iw4JET?T#EFqVYhqr4h&0QzV+ow7HZ2_H(=VGtRv% zEP6DskcJfV_lx_+#N$KU7-Ao z%_T7fKcfq~ZTIMcO8w?x2Za+NCOJDfI7y=%0}j|*M+~*EIvFf(jF{Of?#Z7gR#k^6 zImzKcOB-mI=6oB>DxEabYbJm@OJ$mAsa2D5XwdbB9 zNrLfrJjc`eQ~lKL@In$r0Z=-*llS(tWQDifHI-k0aW#T0m~0aVFCStnc2C4{u^(D4 zRgs&BLx%NuWOzadZo#v(DbQk^=#-VnUIW{lpyVMaPYU$g9tUf5GVPnl&Qi(HvqBng zmnL>cV|`s!2bswuLCh^$oTi-R4&y~lZ|NqJRYt9gg?JqIU8hER^FmdigZwbSokh%4 zgrMFjO`yt8izn-ojcE%ItkWkbsvfc*W+_{nlub0VguuD+0A)a$zpw#Bp7_Ei|Je8a z8DJ+fxdX2e%LA|%{Jh!cAjaBXmoEdkzUC{x>MOtDBlz^s;B$ZLxBkxG^YY`z2w>e> z3gtIkUJ`fz@=KfM^8+D*mR-8V(j)%H-}<3=@+zJ@$=IkyL`Sjp?D=hq%GhHJf5YC= z1M!sqb8)hYRDMn2z?jt-C>t?0+-vQqZxRoqKZPkqJR=Hh5;Oph)$1L=5o2YR9l4@)Gg?q(lO{5U|tPD zqBbAL%=Dzu)bKL7IhchwrCk>D{i$Bqls);=dCgUUNk%n60m&Qcb&koW$o@u}1)-S} z;P*^f@u=~il&>icqyblwk4eK_pcOm<)&2w82LMrJj6O5774^*l3zXHqaRa>)mW*(h zKzmSOFiPXA4cuTMtMA41OAWy?XEpafRLF zm4b%kvbLad7E!byWb#e4sYS=uM(zl7UjYI-J0}O4wp83=_hgZ!IGt*z=o+qvzz)`R zT+kg`-W<{h3tdmSAB-az+bO4zO`iBlw<77fdIJqQR_@rAIWA@&8%Uf&CEi`65LiQ! zr*keEdKnAJ%#{A?*q7`zOQBVRe8ET*8PsZ~2l`~AVZ|p{##mkOWP{cEW=MpAFiEK% zf*j#YDp(z8z>BCedLsD+K@|hbB3i44&9P_$hN(m0q>NdL9ntGGHRj8tM*d!43_3EA zbX`TOeeuOkQxr4tIfA_xEt0J3BvJN0S~6a$9JZwQIzG!?F&no?w+_8X;G%6Wlb}B> zBPVa5D?d_ss)^>S0k}qhXgl9w%%_BHDUo9~z&k5Tc;=8PLYCL=iu*@SH=gq$VdGBkf+F0>`xP9&m&))UUmu~C$#A{!C z_scKsj0_xj0B$w$ycsPNW>JG7pUG)pI+qX*NFC*|Qe7mmnpdITi<Ck#_P3iFnON1^+=6v2qniW~NmbcU>GZ~;h??tQ;4Z(Ce(2>`%(& zRViEe*$*dnfkmDfo}f&eCAQ0yH;mhD^@>sCF(90X1s;di3stRhH^Frl;Q+olRfEZ# zsTUbk7zFcu;*_cc?N&11-!w3*v;ErGT|Tt=^nh&!YId@bm?0)=2-N60yyB@*|hnP@-L z*Q3-)%nA#VM(4t$CT-%PSTgddw=W{qL@%NZ>DgU+3X7!p=AEWi*14@Qd#4$y_MYaq z=n$vNm|NiL1TnU|DJ35(C|kiKF-XBqA1af&1{o)bi_7bU_(3N_AOM(2=I{0JRX1w! z6CbXeLEWWDH-$1+gi@kq-k!)k%CE>CdtwYZVNDq|Ox%`z$ytO@174(|RIbMic9jvl z#tgt6^vIzP{FCBeFT5C?4B~QRFHI{cFC%vX`{=QOmLP1=d`SJwTOE{N{5;4h{u0bT z>BEEU9)zOx0&pgiHdV^lHZ@#wLWqV2B$rfeZayn=Q5&|TnZpJJCL~%0ZS{&?%%|)u zx?ZH_bV0F6lBEbm+P7Q{A{)-?E*KmH=FB+3e>=p{LZ0M^$SXuk%s87}G&3r31kpA@ zkC}OW$h7EQe-tL4(PR`7aj@X72`Ht??*xu5;d~4j?Z@W9C`Ei_^$e89s*wl+;y%zm z+H8ok(C>@GkY*{9t|N58{{0#~>yxF(!MRkOWcEP~K zwj&ZNkK4=m+{gae|LgD0Oyn6c;2UntU=Q#=Ae8&xIeem!4 zmUqAW7#pik)4nx*)153cuKt4im%O?64`c+r|J=Yn7J&cuFa23OdxCYw!z~`&04}_4 z*jM_-=bUp0Zld?!He+oWY1l$-`VDp#20*7J4C za@&VSvn?_1GuH-rN?R81=}+jP29ZH4cuUR)zR=RHbH0?y709%@DQn2pFJYUtiWkaX zbmI9K*QXzH0NfP=3}r@sIDXi6QZcqEpL2UFlu~TP1-;w>vz{B=Mk27C{`d5~BJ4xSm_}0cq4a8aLOkVt-OE?9S;Ul;4?X89Ua~kz zDOK<9QHq>L3Vu1d;oYv?ccvzYnQSU}#u!Q{o z8iKEr1<5^nmrRUm*AOTtW$9{>vm2w4QmU00ms&y+-7R{Jq|#Xh;+Q8WaVeX40hy%r zXOl7i2du$LZo97_jrj413OKAw`H=Q1vnfTxh<2zaZ|CRb#|XYOQw zr+)XO#!jQ@2!T;NnQ0i~1m&n=8==>9NVdcJtZf3!Mfrss7EoH#$yCAG*`BB+Ulb%${NZM zf3nLmn}VeLM`bLAg9Aq690ZqIYVmOa!Wd&9%SADE*P}|^!Xy@y=b4?@ebTZ@Z6({< zwngaBPb3l%fweM$hbQ>iANx{1yo>|)KQ2i2p(WQ1zg~Fp^TPJx@BfkC_**{mOTPJE z{Ad2@2b@P7!k2hqBHsbz#ZSI_>zBJB6A^J7c=^3}$2)MlVV|R7^9*$ln2#Z6;uxIY) zjG$>&XFabX=D?s&b%56((jL%DEhyzRs&h7>U<<6}R0#=*QIWG{4sI!kBu&p~pqO*4 zj5{uqBR_YLD~o9b&nj!kWk2lnXiY>;0>C_xn^)?K7*|CAS!&I61@aua!5-yfn^?jV ze0ox}RA?1Ru|uX=qBxNNZ{INosDY7KL4AvX71}P21jatjP^fol6z*&InYo~4Ad5q?xi!;V9sZgE*EM=3q+U*0v8U=;7RUn zQy7USX*7|5smGdE2#!}ywx)ixe|jtBkW^sa<#YzCz_3tCbdx*c=0qOhxNhjw)PS<9 z99NjMuyWdtn@Kt}H7w&If@k8W-9KFLGq12CC&Ct}X)rVbJ@``KZuXz|QeFdEF^PXL zMhePqf`L9pCxex*CgYkJ1y2y`)L=CJDwqaufo_SR4>+&-W6=q`U=synj-Xnq$C6gp zSClTa$+yL(8O9iDfs`dTa7<^ku0dPu*963bLt{b`IDnJ0yR(iKY^W$%G;bo8GqDHD z>bc(Z2IgDnXC_3KG?rPUHn4UhtCCRKc#~AfavD?dd<)gSg%~wBn#x3H7TYX*l=GQxG_&@UJqo4f5 z``-KBmjRp+wwznWa|Uqv{eRfc)l=i+c0S8^ocOi>#BciJ-~9*i^&i2rQ+jm)L*N3B z7aPYvl$;KW=VAWMlB?%_2@PETL#ZA>hud z8N#hOcYH>dwumL?C15hX-538#M5pQ{+hh;M7zis<4pO)dLP|P1qS$ziZb2{uZY=;J z`#>&fA`OzEqK7)@!+?Di1X$S+>+iWHBbyhDy0i6T{P^c)St*QCuCd#F(rBc84Tu=MoK~}vd}JINP8 zBzLse4GprTRC@$B(B2j7eU*vPSdr%T)%z01^?XpEJJh-%spGzzAHn0L_U!BJ+C7J^ z9BRZ24-QfZSb61n>}%pLF7Kgi^)L>;YY#^QV+R*H^F7ig_(tbbgRWS;xQ`9m&HlQ6 zUogiQUFLxeu*0sIHP8py?XT;kcyhNb!Ecom2-9w~<@XhO`! z+~xB)u}khvPMD-gH=4N3E9%N6-IRwU6(bQQE0o-$DODnETc{`}#h0dubdabLlv@a; zVwW5~JUgDf{!jiNemnBEW54-XUWQ+0!fc-ZV}Jhk_rC8fMUL7CnhBBQGJw0^-{j{_ zMzj*OWT_mzb8spr)*u#%N`$l%l?z$F~-{ z7j78slBv3XE8rb(axxe7K)7MHY#LP2!X$v5l))OT&sQ4MD?(*-nBY*5lL&oxrTz^+vJ~_~Sd^2i;CNyr z?$J*AQ^qmJNCj&SV!fslwx~>YYKvJi3Wd^nF}s&$bTzM5qXhbWUGq0Bi+%;i0tMgXR_=s-hl#1ol4%7nzanK5@9tAMrEfw z90P&5KKp>C+SL{$o!WEt9eV~8?2+9ToJUE>F1IjRb}!_!QRFtTwUwwY)2fqm5`s9H z+uA^N{yo?RROOx?*Yuz=F^wzOSG{pmEWq{%^cbTJdRpHlcu znCon~J4qz?U4-4wxAJJPe_%mgpN7aWuZxUxoRW+v)nnd20o%n(v9*-^noP-H6GoRN z8%On&LLo<2u*k5BGRD?oU=ha1oLgi zj(tr_bm9Tnlq(t6rLrSwbwPNgqG@8&-WAE}YKx1dGcQvdow~Ci0W*q(Dp1D85docV zYgnd?SJ7u<)*7~mk^)H<>uJds!MAF}Wz3VElFLPDoN)1)!KDwwQf7fHw^D_>hOV|( zm#Ya+kQpJd-OFOlza62Wr=(Gz4?3odwp31+g**qEduZP20S|KDnnqu zhhI`o)|dmy>L@rSxD7%<*n^VI_$Ged$YcDH$&3myO3~D+p9)oK8GD8?<=-$^&Jhg6 zC4=TR7oIh%SL~Uja9-lqS=epkSvFIN>)mokQ8hY5(WC4$D!Z@_raNBf6F!5hccjaP zS&55(92{+Bg;is3$H)ZAv(&@WFcsUArs*anWRs>@*09XbHurr@wghI`>?9%Xe$ikh z`zbGu6G5YpJ&UU?B_FS2PU2Fq(2=&@c-=k1^W3K4DI1{FiFkDl!-cwoW3CFm!QoO%|V`0i-8i}YJHp+$Q^S@>Gdj##BE@fV3;|c;bP~X#T!)m zkh>zlO*)ENKfIZ})p~(tbv#WjtW%J~#R!#B0A&|W#4+us;j^Fz+jOFYv_Ni~>AEQL#Xt$OEDA)JUdnWl&-+2Ce_ubOoSLo=M!+iUk-^+IANMn6qrI%XNS$|Hi=s zFC_84NUp0YwyRJ3(^G6?lDG>6)JzD!Jk}(Eq`<-P9K61sS&a^*`BK6SYa$e!ntCtR z8&;cyu#H4LhDEa5;lTn)kfd^mVM%mF(wAh_VTQ8?ppC_h&H8C4C?Nx{QXUOpwvzBq zVW@&*5jjcog;^g`xW8!+#x1T77Z&4nNP-pVq6N1U=2UhHEhM8kVXmjk!}T=8lG2tF zn|Lt09MlD{g1Jac0aNR<()oKvyXd4YK31AJ`3Ww;nix-v;NG&u{B(ir6z>SuAP~#4 zwz`?%j7jz|o5I;p!g~_;k#@=dR%`I+0DiiTMiGbV1~aKbwo$bPdbU>v?NYa0m4^+OJZ^)Fu1@#i51V& zZ>BzwlM-_9fvilhsCZqM;(>h-&%2PWoD^A*q*!m2-c%fGwWkItU`LI{pViVIoBJ}XA_55VB3)R9K3a;z{hj@7nxoQwIVT8J)dG=LqxO;Wz5Q6J ztvi{ntl0vSJk=3ON=^dg&h(8Xtx>6nEyA`5YqQ$t4s~iZS__Jao3v8m6*R$8qJt^< zIyZL7h-f;D#Wt(7oqRdbR91F&C(8%F>) z5}XDLiP+X-M^c;ArH&W(CG<=!pyxGU99+^I0h~DbXL|{0Y_tHea1&JlV1L|37FB8} z6UkJl>#ZMcEzsYFI1Mq^Rm-(v!HrGPyQFqU_ZbLK4PtH&ML`P)#5ryd2=U!-c=vQ_ zzEXpxdFhhgOUtf^vy^8^!h@hs7e}~XbKabOaAnJI3f(y*ebdjEwgcwzDb;C zGgn3;b?zhD57>e~p(@GPKNd59$(4zJ6!F)SH)k4?TZ$M(0M#B>XlTA{K!IPv5Yu_QO;nfHAQ+;+thlhL?1i<4D#jdpU>DSY3CsWv?8d3{ySLn&}3m zCsVeP)h8Lv@x}Rx$%=Z*1}8PN6$=y;WxZrg`mAq+ZT zs!kN(3nY~`5=yj9&tb|$D+&pAQ)#o}QLv_k1EnuIBtAGuwMCJ-%7LzbCn>fjG#-0R z4o)^_vm&&qBRM4U!L-=#Zf2^Ccwf!1x!j)euX@d!cb-zSV0)${wuZXc5Uhu!2?&J~ znSBOAZZ1m>%8xSOyU(;v+82)ilZ&jHU-YFT*#+lpQq<6TvF@6ZNU=VYFP3#9Zb(z6 z(oP9?kPP!tCHkoYpJn9QLE-eYx-qC}z2r+uLMcxw=iaj$RgSW7R)dBKcXGtDeG^?( zsrj^8YMeB*0iNKyhlo%Dl~S0iJ?x3aS;~P;u#zjYV$Y1hAT_vgg6$@gwrad#3fwdw zBE;(rp0tzTCi;07gPt3F_4;|4MqgcvkwDmjVMBK!A4IC z9R=lPEMeV#3bmE$Q2e14?UOe&WPezV~bK>>=~);u7qXz`AM+8!5e+V{SW*!Wdq|kh41=OwA2~ zd2xSv=G%(81G5-mKq!1+=}#tyEqA7H!NZk;`a7i7!goo2whO+f8p&C7y2s9}1QVGe zajP@&ArfojltK5Pg@jEyqXlKM4nkmnd1#ZPpdVb8F)$LPaLc2VR+C^Io|L>CYRT&r@)4WW)qMBgOR=E?&=ZCG_ z;DD|`fbmO$7?OlRgi*=(6)Hc5J&^gw5>a1lrs7gk-Wn&@pm&8Cv(#zFG?*2@nl}*@00v46@|*~$(d^%%Wm>5))~v&ScCwA1fg6I!{N!93zgmk zyGPGag_~_ysqkQu0p(Dt(7Y{VkCvNEn_affgra#2kF_;c{DPeb4Z>o`jkD`PyCox( zJjJkxR?H3QGsmlZd{W|*3^h6#>x+!W06A^Bu!2CQ!Bl;LVZ zB^LpDh$0`b0Wn&-8UYQvaqX*Jqh0Knt|C~lq9rU&l3HLI9O0zXv^e1eq7SIv)W@d7 zMlL*XoJIEFHuUoujw2pDTE`8!u+KUi4;o5j8$SRz^U(`k)4s_Az-2{%e&WTS z<%>Ri!L=cxz3@kJA)1?{yx{dYvhZbog!c2Nem$ErxIL_n7-KJXgW&x7O$(0>+-~bw zIG?t_uUkBN{OBET!X5Ge%0xHiVhBCE5vlF_8do5x#NlUH;ClG|?u&tI#rs{~R05em3Y+$M`VZxm9 z_4)SNE$w~|JVGd53%3CTmU}qp$tv{H^0T0cED8i&3nh9|ADEObH}LUc&axa!PaSMuOo%W z-`$qv7I`h57PwM4sPaJsP`xXyVXz(|@nEf%Jn4T^F1vz5k<^TkKNDO4(7BwX3E`pZ z7c-#31^UCH++nITCf0t!@@n!hTAq{hsgDjsMR7+%*0Tp3kFZwv^*bJ6KLF3LH(q`T zxZ&Be+e?ogUVDl!elE{f^XV6mZ^u`?8(4VxF<(T!mDa3B8ym-4@$dJrqgKC@;8W)%umGHLs^C1O^; z86djeRlt%p2URl`tEpiDVU6&numK!)8k_mKBVu1^33wJ+yNCzoS?d|+)i(&HjW*|V z$)+21g(vwO1`3CZdQze@x&kn3aTg+S79UMgm2iQI9@;Co4HY$D;U@{5CzyQ|8Uoy0 zp6m{(gW;5tsCJ?~JdV6=WzML|xI+e!XV_1ojR|AWR?3a({>3qbRR(Ihc&~2%IMUz< zS>?FJ)4nL)5QmsbQS=as|6>6%Ndi7#T8tAPGTa_$|#q4GiG!|f$W9vwV z092Q=efc$iIY`URA|0(npX60L-%hWvdEJ9F01e`niKM4A6cDW_=i9~~6rWkVpamup zGh4qz5u5UO_YyFF;~>q01@mDYJ-v*;2S0MjxRjq4Xzyf%-Ys`f)Qq)ZK2!2lL#+CZ z>yVP~Q-h@B1KsgzWn-TQDNGWf7U+&=7yf2fDf-?y5+eID`)k~By&dMwqygMOvqRu& zArNYxJR&!9Fs`debk}-K6lGEJm1G{2zmbeGjjb|P#;_nL$1?DvjjM6+G<0aytWqpdM{%0+Aftx-@bHY>cnpn~J^Q&EP(*$-?mGLcA~gRz^5ptwprW`LeG z$R=7xs;+UIY-6i0W*}LlO~J~zAWw8_8H=_VZEmWjv9W<;^$vkp*e7D)wsE|4dlLEZ zaAxA^6MXUG*iZQ0+t+{O7ym>5=yx6Q=>PdU|2e$>8?c|+(E&5gb*#Mu&z|8EKl0>! zc(jhaAC9=eC-EjfHn-~^Z}$6(@BI0mkK)87`}N;rF#e&7hkun9M)kXP=86E~E$_hX zop|RvfYVxR5xOH0c)ZrrpZxEB`V*gg|GVFbb^Fmzec{i1|9|zL|MCCmkAC;RMd=9K z-iDXog15g5FFnEr9um)<;L!qZmqTqga65n#=LT*BQm*n5FoH@XfNi+0WIWpR2u~oa z5IC3O9LRGtG4E0>M*F^t%BXp1`9u&@Q&`~{R>GH{sgc}X0n0VaL&6}=ARQPN1avhn z%L&L)q54=c;pbIG!i_lnfpEW2@6s(WzXIcIWZ1m?bJ1Dr_%B1i!GJ_RVHQN_n(n`9 zNWv(ayHT+XiaaH~^ulf?6X!!(a5bH5Zj!T?B22y4e6xCB($uQ^a69n|>Y_p30lBB| zDH0*DU8CvAILZ)vSUbG9N;|@cYy^}|FKy}^HapHI*V5p6Fj+D*QfYm;zeMxYB_{J3 z)|GCGT7!HanM$Kc`CW`8$2BtQHT#rAP-ZHpXGs%n_g&*sI*oIVX#>S+v#haQacuN= zwm~z3`S1l>TMc6}@PTh)mtRSM1$GS(bXD&h;>bx|fG+qtC<; ze*HybjE<4RS1@m}mQ7W57Z*4vZ(y<%dj4TKbqopwW^5Dp?+de`m`|Bn%|QA?-b^GS zhg60Bh(oBmYG6(y7)stF}4QT?1y!e(@f?YbL~aPGfgT?aogr{}gj$Gg@_qI~=EQ zf~yRb)pH3~KQf;*;$A9BFhpGu6FNY*2EYY!lhT0ES^Q-&aN1qFOpj@$7#KSOh@;P) zO^qr7k+taS+|{||(WBe5r?|cG#fL9_2@jvfvl9Sr@A$@F@~z+T>;J*u@EyPI8$R^4 zZ|@9X0ud4T&^P1BmwF7rS!ccAmcVU4p%K8{@TKmjl|=}c47&uhvj@DbZ2YF6E1D(j(-jbCl2aq|kV1Hq^=7|{wSjfH8&>6;J zzTCiP1BZnf)g`mM#?#moRLmZ#`?YqBCwD+6FQU_VmwGQxu!^`Q#X;YRX}(y!TsbLH z$<@ofj%W>+p~c4Lqc0iI7}v9CsI=7l#`zO1Xq;w<&Rcz7+G=fu5m)Xz81Q;!>mP}X6$ol;ge?fS|O_vvyQTWU`hY5{Yp zA=F~n_LScZ-gA+{%B64nxfi1@qRrTtCoMlJV!FQeed4|qtVV7z7BD!$GSF@Axw|!) zj^r?O4glQ?#e9VqrGB;8w~<02`y!bb@zhj9zG?RQoMR0G6jdh^Y@JjNRY4l&!fGhs zs00}zdjBP8V;gm6eE+c^g>Jy21}f#RTP6%xLuKiSvOy`xR-$@OloIYs`2!j6D%6t> zBozskZAzs)C9YPEycmCtkQ7=H2$R1{EnDhm`-4L@P0GfmN{9kO7XE}4(TW{|<1o`M zRvH=oD*%gBf~l(`bx*v)NDxwmeR0VRx0PChs<;C_*KLli*P@W%3+)t!%viI(EwsOV z#+V}^prj?=8>HGL@(JTk$%fPlbIZIAZJ32C;=aH!xZXe$t-Q;is_Z>3=G>)M=A;=X z1+WtHjLC4k31$><^^r-aC#xDG?e@5(D@(#qW2Gq>)gf8cA=#%gCS$gzZ$T_z#qE}O z7Ux60{svxu6>ogD9{iSfyysW{+F$oO{>6X(7k~ZN$5|4-kw-fsl(C4oz3;;hkFGXD zbiM^1&PRCp*~kCdU;fK~gl|@y|2Ny8+DARRDMZ9>pWP?;G&aV?29$wT^w?5x4X6pFQH~!>2!u+cV(E zSO_{hRi=+pv-6F8`%{1M2Y%P@{9S+bPyT1mY9a9PR=n*kc-IG49Q)x3o;|~H10Jv! zZdDysBY~KKYP|$vw7yk?6DqNf7dbuf0u&8mqaXTRD%=fcJj-PWl(u9^5HH;jJf7(wIwWWLj8hYQ-nHX&#!|CQfHY08RUvM`QH zulisLX>%36M;wFpH135A!M;ygJCrj+BBZ(@`+|rV8p5FFvf4yYOn;yShKyEJCf7NA z8?oDqnzdC73I_MOu)g17H%=WMV={u^e@RO(;K9m4B>otPs}u%5Eb6J8qT-KpQRUpw zn9*f1Rm>zjEiE*@zQ{AqtNABPP-Qhh*3qg$z{R&K`vQ(LEMHzjI<9@tU88)_h5jq_S@IX7 zCk{q0c+Rn2f}k)sJX@raLNMm%&imZ7E6F+ocozY2Qj~;=R83qUSmJonY7(1z7*{W3 z=`QflH`t>#k(zoa9-n(iA;X|3e4d`PmpSJ_g59;rZ@$qT?rb{Dq7Giy3YJKgk$~y- zp<3al0INMV?6K2YJ{qhSHKo}-tD^>SM46D-@R{H>iC!>TE>4>K9DZ0bn1Eyj$t)ZB zB69K-N%PiVM>!9R41?mK`@4C6V6Rq8F+Hej8d%*T?<8n7F9Zo)XrrWOldh`L7XYjA zCj+;I$B)-rUcO=B)z9R|e*z!-oB7i}g3rG4)$e=nzw~>5-^V}u+01 zcYpoY2KGKqEaX}^HitzP950fnWWr z9=-Y{eC)5qNB;_b_Q!GVM~{zndl?IO8pzdq--lB+E8#y}(kNh~DQFuJ{A$8)-ZE3; zhwZE|o366367#YP3d>7hHdi~0Ps0o3`2-DF+E)SrO|MrfbJ0tpH@%eI$-Lfc4-DnP z_K-p9pL~l6HxUEoW1!!q42~b+3`@aG5Ta+YG5~`JXlo|gpSf_;Y9K}PDn;!z4{r`` zx)w8SGEsJu?PX+zfo_>CF2-pdMX+zI9b?iN3b42x{5PjuAW|cT<73W%;F|k7Nv2*c zw;R-LJtQe?dS}lCFr^IL=f|}AL~FH*I3m|L9BAU~HCq=bo0O%*Vl0%@(x917>f~T? z7)D#Y$VyV z$e^TEmmW#gY5?2u1x>Cb^)d%@dlGClIM9jC0blZw7)7q!r(NyV7bCxJm z;9FS1R*ADatu8oN$J5CV8{+duYK&yW8gzWC{H`LeH?ALDK z*jTG}42yXYah{392^^7cyf%C9Bv)y?^K5-Vw2;>Age#3x4e5oDcH_ zSK|J|ltsMA)eC=K^gx>7c+rPn?m1#;=N&SEb)t>w`TPFBcPC;mU_Ub)EACf*D>t6u z=^MY~m;JJx`E+l@t)Cm~+yLT0;lN=pjRR|8|B7$_*8lX6|NBqR*Iv(u|NFoB`@il( zAHk=8^4UlK#{S74!mF?0Eic^`4YpDeN>2z#OKu@BNu;kYrz4^jkFs|v1W8bb&)MgH zmvAQi_=pkvqMKITEc!{Uk+gSd_Tu9GZ8)|S z1?BkqutSuFEMinp(*=*_`6(<>-2j_eGHnd4N7*K>dhce}&YnB{vqgs?)!R@MAYuCt zuHRTP>+aYzL1 zP6!&f_F>#dqND|SU9p>t8vn*e*A*v!HWvC^bG6RbBsE+{wlHWpkh)i5Y5d<*>n>{uoiyqpLDlAqVI;*Y`Vz z%6jR6_DEV|F~N6AKvzFG7^37JKnXRbg$)DkaQCcvx{8*0jS}(%R?fL++B`|Mwwf5R zCS8uN_C-LFvAbT;&>-oF9!Xl7N~4uLz?1G&W7)7|YF}XI&M`-U&1M>%gpf}uqbn9~ zLjg64r5>Ew!;nTPs+LtOnVj5)W@OG)4napNp#DM(Q&S=CCU&4v4@!L%N@6~oYL9Re zB(;>E)0Z<5)x%CRqK;{Jim?kamLe#F39XWnVQY(`1=p5-D0-^uqJuN#LKU^KFwEqr z1k?3jsD{RUz`=KI`x87$qQOxBO@U9tamjXFpRjJzN>b#=()9a+oe34(iDfm16<7=V z0YCQ{eC%(=$A1t%_Y>drkq`ggKlD9cI5W>@f9d=Gi|_iizv}IekCL{%HlU^E2h>=( zQzk&2t$iG41aN-noBk(w_QoJ@3w2zQln*D~`qtMz`AXr(<>&ry|7w0U!HO4ropJqJ zg8t&CU4Ndtaz2YU{m`FQtl-z_*9WKr2g(HF(ZBky{L47rhTJ$FQHi2)m{w`U2I7NX z_o21c(M69{PdL`yYkEY5;w#q5K7R8pIQ~z+<$v?BANebpPyfrm_!s`3U-`erv(LoG z{@aI7|0G_0wFPg*j9nr35d>uO34$AehQI>Yn4!2IKLlzT*+zB=Okp_v#UW^6hUngsUI1ovu8Q*|*n$H%tgOEQ8Cl7$^xaP=PmtiwEGa?|swY1Fug`U{h?(in$LD4orHShqcOQ}{1%LlMbu~K8u@g0(iG)qy75!TFQoD;G@v}+vf(ShZHcGMIWOGGx= zqf-y~r$}EHbXP2~WHG^P;#mA%@+uVlfb~j)V1Z-bCE3-X7?kgtUS)KaG?`_!jy~D( zy+R{JeiP*r0#yWn{-v;v*Ur}g{d}++U6X{8F%d=4N4}1x50=An;5Y!Bi0B2fo|ysKZB0+kkrxv9_>tqwfJ&iJ)%EJJwhN4oWMSii6>8MmB@PZ zw&T&ucsz-~3B|8TK1JT37bcf`=13@N}T?&?sTTWY0lkwGR0<3JQ97>vMJpKUPF0)zz!5W$3d!63k3Yz&v+Ym*V_ zBVUj)U<8&yLtWr{1E)YEBm6VKThLoLK7*mOKObxW=$`*0OsC$?;OBjt49C_NB7MzMI zF3ntk2JKN79?rBf%n%3EEDL}O9Hu!59H5C2on6*;&N7Im-s(f7w*}!$`3r5;6)4oo@5c4qa1WafHX6yZiHr zFwY%6!k3`l4c5=|qWU3K8gvoVNP68d(|U%M#rS#BQzZL~e8ioG#tdlF5Q||0n8T1v zxRL;9C{8muCBn&T(X)IInMs=mr zw8%}b?^O+IaKsnC#k`aWHiC=bLy9C3>MCe*B^<;8F$JY!%emwkaGpYCN(%w-IHc33 z0P6rUs(RFvY7suW37|E@I$Wm=n{NVC3QnVKKgF;vrU{t#Wl{eV_arlN%Ex0za9Zn*y3&O9N=ioNz_ zQfUBSTkQDVD0vlWkq!dcVdWJ=Z=Keb4_AWOxsNbSU(g)BWAHhc9rLC57DoM@Eh9G{JPEv@8K7^PwEo*a=58k1)^qKhAs}17=bm^qNF2 zkawua6Wp@)X+f&hZCXE4!ScD3fQvj6PD}%!rvP1EqQ<%dSIIK~G>1L5G2= zOHBvAf&v_jYC)x8e6w&=lsb={b!Os~+$=UR*hCVgStkId9Q1K{kiE-|uBm4f*g<;W zK&0S@W0|FlprPTW+W`+iHjmw=#?2C-q4_Q^ghLSo>z{EkrAiqQQ=*zrbgEY4fX1(5 zh~ZrgR2}m#XINAnP%1)iX=T4yQ#qmlR?tPEf6bl0NpvlrB5scU{??;a zNxfzD$m<>2f|ylzzm6(WsXPkciZCt$t*%KSToTbl^3mmJdIF{R*bwC;lK>HALPmvO z98#}+`L>v#M%oS2GIwGm{!sWlr=o)>sQXOLe~A2ACg*BD-t%ph!4aC!;K zVd+JcU&bdp=gE$|O32Kx58M zMbu0J3R{HvrYB{lymL8b?k!<4Jm^u;GM1?pX?vXjEUk8R zrHZ+T=`^Jadz9`ct(^4Y7gd&#EDQ2_PF&`odOKhaUQ(3EY|NB15(@$rsSt7WH{`dJ z0q8|3z=icFj$Bm`uat3$d#M0u`kJHY;KihBB7W3HlPsDA3SnKx_=wDm-s4(%eY{MY z&xX90LX9!DWEL;?Y^mL{FG4r61#*B(YTKi&8#U+^0e+qv8Q!DCHMN zISdPt<&vF)5RGHA(ih}~eW1X^8h57WJB3hZGrPq~3FkIYV!DzF=_4}9?Tbl-bqP3V zd9r%Q8&y}s(_ONZ3(W$homMb}r{~1ovQ!F`#v55&Ms7oibWZ!YN6`hzk>oYWLt}>$ ztDhOAi2g_=N-*cVyo7cs2kiMorm0T89ek9{m&(1;>u}PZfv3 zumZ4m>Xczcxbr~U1cVN2*jr<7nyxwt;6MGhA9E~dvv{rH$R||NFL~k4^?vlZyPut3 zF7d)A`vh8@7CuzgUBHFma>7a@bjQH-Md@rXC)Pm_YsI z$sA&fz)&O-XnY5{flI<+Im~!Nwy9e zpIKVWV@gICG1|c~VBr{bQ}~lEZ^dEB3jat`r6dlbp|R001iCgZA!Cs}!bE7&l7dGYyL^B8~pW zm}b**0`eWib1&lu^KNQ1wel8O#^%LwZxn0~SF=|ol5H(CbuV6c3ly(VBl9#0Tp7o* z2-C{2tEVKht0t83&xvDj^|_1(X$_fz2l27%tk?1-i>Q!1~N zZanE+B-5Fe1BIv23=btA51$1F?6&MOnZ(LmrI*hm2Z?kc0Cet$Fm!6upjV^PK@EG; zLW;(nbt>Sy)XtQ!LP;|MiZi75(v~2NARG8l0US4v)9liIlmTQ&02(=tTi-qbTh7e zct<}ww4;6xW|(8^|KW#z%(2Y?$!qlwXw4j$x3=BR+YPR`;mbekb4<8dGdqr_{#KxdqB@NKX^1m|vr!(L%$dzHTbJ4Yxq4U!^%f zBZ6uHJv;!TMd(vOPGhm1c3)^&wOiu>@jrl;Yj&MZc3L_TByQ~-pi=v^6vHuakC*{! z#z1)RfxWzkYzw$nR=$-T=!4yqV6U%6USZ0f(0$Y`G6%+zyM$yIm)^L;4CNMM z5|O~m%$Jo$12_JU3D%&7lDVQGIjEHD*l!g4-+=ngiGY~w%>Bjdl+BcWIndBph>*}_ zVaEZ_bhZ>t_72Q9$@>a%DqV38>SH9VbZ4r;4Vf$^WlkXQNa8WGkJ zg4umvR%#RIUsMZ?GwZI;F$ zDa28s3cSWlaY}A776q+uFUJk0xRS6HNyB{yNRoX_Yhun}2$T^W6Z z5=G@u;ZGFNxW=Hm1KYXnb;tVT6}MdI7jf0~Tp3lSCIEOI0W9&$K z$w#54S7_I|B|@Tbx=Oawils4Ho`TZLbejGt!;JtFC~sI2F_|@IPr+=l`L&qfWu~Cj za2@npi?Qq|PLa?Lc@*?Q*@+o4Sg3ZN40E1p zFIWzvW)Wb>U^OLx#_VQjKjIzULH8DmAYM!?Ng31UBDSzsytXB_N1UdAB3{=?v1&ey zK3F6ciwTZ6U!g*|QR7Iwkr0YU1%E@fEt2RG08?Ph(W1!q(2l9haWPGbT)GG3i%g`v zCa+phvAK{AdV9+g&_KoUsrVH|H6UVIEYZ|1Dd1%w3x+8QW393S<-D*|Qqjt0=akwO zh{Yu0GO!NvsjBFT3K91dn3I#5;==6|qY?++#fJl2Mop(Id=51rl5=C&89E!}T8)fC z7shERB+F99842}bf>OMK#qz?XNJ+}ZRHe3wO^(4V0a5X#mwyHey?n#+h;aj836xRV zl=$g|Yw6h+G*mLlnYYLqoX+p?2v|d}JRUf>)<})WuSjZ%=2oL&#Nir)XtNlq1{L9c zFB324%5_4jP#~hL9rqmxlnSgRN?ySff!!w2nPFJi8_yn&EMd8hYPL*osAV%zz!zn- zrWIq%P63JF%;Y8XXYzpC-Z_)~Bj=QczfxvMV@x$OH1X=0;@$J7WUejF*mm)e)Xu~| z@{eA`Owg0%K7|}benKgz(URfdOXq&!h{Lmo4#paERu1D=QMDO1Xp^nim?oS(gSWn} z-}O3c_G3T$^X~ro-}v=sp1u~=u$nr6J{z!_8(6+tnqKN)8v35l8rPM76&bRCzW8ct znD!d5{+Lhvj0=z7i&Ix~*g8g3Sx<+}fMeC0H`t65SAE$F|GB%Pl$3T%@R5(b1K+&; z&*JgBGxtk9@ey(8v8#_%U2@r8S4OJ|Lx)4EnGOlfm45##J}J z@@IeI{XgM_uX^<#9ULA^-5oYtYtyQjdGEbH1>ug4(^H1aBq<>c9h(lDfK>;c_w3u= z@V|eBNYD1M_9q z!w_o`r=Bq6?P$J3ehCtVs-rBQ12m~46YQRbrY3QWpdD+nnJtQ#fh5(Ts!-*Sgc`D= zExfFl0I@1uL+-mh?7oxBLklC%RpZc}qn#D5Al(lWfO~Miy31h0$@tUSa=kUJsuac8 ziSAT(W3&+KJ8P@DTm_-JC3uDuIlTpia3$|KEN`1)x6SyS-hAB?Ip$mvi{sUubjt=U z8lYAvuMrNwSAr?EhO=uDEdxel50^YuIX5*I(9$XO5-x|4?hC|CqA7xcmjh(Ujv*f7 znaU$81{)w(qicY|lTsmY z;`l*?405rKG)$+nv3YoFO#~#}M9X1<%?vl+zSwdkl|eIiCgku(3@M340Vuj4nCBMH)M1(IDU}4UL>LtYQbQs*6t%X*z?R9(p22#!s+_w-VN6YO z3|;KN3cf9+Auai37?JgwS}`lr+!40%oDt9}iB;1QL0AQ@#ro5Z9v2c+kly+DXuhZ= z9OHu>xVSm|jo<&HpZc+%{cr#Adw?f!!?VzO9Nd`MK9#x1h?PZFvaj*LpZ~Kj`1~LK z_HT7<|Gf~7xAS>Nu6g^Pr=r5{*UNvW`n@Bg8rpmBqmSKm^;LH5b9|a?uX|s?9lgha z6-v+;bE4faJGO^-;$dvg0)VYfUUAL4zW3jG;b(p3r#%0|uD$&7`s(qq`jwSGcDXOm zxv$01c_u@-)=pAWqCsbhd!Uy9S9W zkXkX##D8Uo#QH`q%hp$z^KxSlnQhh13mPlK1AFH=6hv0fdj={BAhSwb6X(UKCAuCl zUio4A$;f)6L66WyRqpCeP&P!Y+GXI(=!f+zcZmq<6mV^H&iiF^gGU^LQ7lK~1{QqA zi*naW&5Jz(D3=XyHZCc}3MW-}RG_oQwa^sM7aIR;upS!S4Q(!G+qFFUO~nxGlu$~a z+u)-W+d9Z)Z0HgV7vm{CBN&G4mfJD6a2>L!r>D?jH7f~MR=c8KO8O(=^XRycR-5yb zqGB)N2~~^g;y3NS@ZNoTBsaNg@2smloZaptp2tbRq(Zl=Cb1v9mCqT!H8m{E0 z!MAKE>{L_L60Cl;i(drwpN|E`4Ga5>^Nv?!cdLcF5+l~3i^Gy z&9m+b*(eFEDyvoqu7Zs4%alA=in?I|0#?|UwU^pPRg^0;f+|B%=2IU>gwx7)MjdU1 zc}81DQUt)ZV{f$rwvRqwk3ZnRt8Llqa-^ykG64O!7GtaKXCG-@QH)3P^m6FtK}FUiVC^Re*K)ZdQ}1TOR7Z8@rtWb!2*)CxTj zrm3-7uDsaLxby}~BTi_Xd?Xa#U_9ccJNPX*S_9cdwS_MG;7aR7VvtcLxT<4h_)=T~ z*B5e=6!atzmU&+Zbnum#K)n<@PuQVs=h1GKEKf|KWNV*PttiNDR0Yaq@Z&8t;aUv^ z8rrZv+}FQ_s(HBVPYq>-^L-7 zJ;w~}iigx7M>0@`kq=n6NpYkmYj(zDwi)I^qQ!xWh!!2GZgsvR_~F)7(gu;m2;J_* zx2^_}vMN;>!>A>K@kc6KNdjdqYNQ{kxh07jSFLnSoP#i?4H7YtC|1!~iFQ!1ttb8C zK|%`YI4R~uqTrE$H?pawG>kY>!45m|d6DzR7C!x`@l<%xuxsVS4eo8V>ON!kHtqT5 zqThe7`QvVTpZP^!{C(g4f1tx#vw0rJUV3@cP7=LWr$S>HyY&L-eH=d3ySJ$UWq;7P zr^8$C_{)bM`p)n9p`ZGJ|NP+HcVRw&!Mr*4aq3!JetDd}xt+;wszxNnbUNcw2nBuX z)#`z}e0}-$%-tzc+P&(jK6P5V-yHpo-xjsK)Fp5C9q-5|?&{dOuO>dAcUb$uAAiN? zeA)}Px4cuV?QRqLT%_8Ueic&odS4curuAywJ9^*v;Q`J*fQ#o~eeG>?^2#s#*I)2C zpZ{6!bn7jF)U#un959NAyPHyI>0!mNpMvt$6X915vp@NZH~zy9{;0DL-n&_?arss4 z@>AIKKK#f5UwwufFva$9^T-0yO);d9NJ?B=SQem8?D7~8_& zptN*940+O18X$Qrg@EJ7MxUoum%RXf++v*a0LH+v%r2WVZHhEDJAi;?ks*f71!lok z?wwjKY2$S zijUfzCEul1DEYYHJJ${x^)wx0T5z#R0ZjF{P@g|u%QJ14@2&`7xbcoc%5hD}<9c}| z#xmrh@JiuVbK;WDP@o8C(%;PiW|0fa0mQ~hb!1Y@@fIUa6LK2c+FGaMxJ)nvCt7p| z#?z>-hB#3|;$lQY!LjMML{B^9`l;O88?(_JC~4r7^5Jcl6TgK8(59<)i9Eqh3}7?> zi-2V406nlSdnwyht4O6PXWZ1kmV+cQL4*=G$zq8|&cu1+4w8^AHP{@ygD-wEy(3fN zX<@_WF(07BvoR4>p{EIXQC2K;%9YSfvMQgxrWQE6RIC|j`D8E|uiR424Ft74%7~eO zq4l!D#PanLrpvG6yG8?(##p*QG0=Ej(oQjx>4GjUg$tuT4gpBOvP3H-W7?6DcMho{ zK4Dj{H3?x)Ld69gFihhRU&pFXZ9PBsD9+vu;L4ky@$0|wYwvUWv*9yrN+UDSBhG3d zXHBG8aMHcI#g2gCrEk5hZ0_^aY}Cuj7L)#muX)`Ue(g8D>Q{aV^I5Z%w=JeCarxDD z`PHp&`{Yye?Zs`B+N5Q$ppUZOLd76R$?Hg`Ho*OV^(Eio@ra(a zOm#l>$Ek#Phi^Ihh~gPP=^J+c){A>bn>xI0;VUzDZ>{0V>v8gGdbdQRyj{p+3otZs z&Viv3BQR)K*|eVKK4S|U9^&DP0X4+?!4wZ%hif_ii@9(6Pb1 zZaS}uOD*lG=5g^hj?(OwfNPR z-3LgUwK(6Zz^Say02}ZLA=@LrYtiYESW3H-idORC@)I=j&dzv+TZUL_rKv^ro1v*B zp#Up@vhG#{pVLdOXe7&J5-N(st`Ax$<~6k^a?yQ~5$U#T2ZQ-4u#{ofxM)IBQqDjS z+;bgTZaTkw66!b zV5F+$^R2j5O3GU|+;qn>RRGHL5|SjcwGe}n;14k+hf=rYvhaZ*P4)1+O(;{lLDXef z-6bcVENLyGfMoKL)gGm&ahJ}%m4Y?x=T+pmdQ>Q`ss7u+@J=KqL8KuuFeT$b5k#O{ zFI6PzfcONYKufjcv&K71%m7hx%Wg#eP z>y0@u5v`RHC)4?^5(KAED>KnlO14Her6;Bc+FIdhqNp-JNRuW4W;w#R5w&p#2{jrb zg|O8_D5a+yHau0s><9si6;JRgn|uR#wR0A#y2Q@M9UW%P(ak1z#}kj@!V@?=_c5RJ zX|MQi-+TPTalmG`i8z~n(UZHTV{F}W?=h>#Ld=dSqWQ+z-gWogFZ;T0{IQ>WML+Wh z_J(!5VmftAJ9fFxo9*cEUO5hj*%*xOvETVnZL);U1a%>60)?RhG+*J|<2ZBYUq5*N zE!SSR9>ecFkMek`&m}2vX|lMy8her}-jR|E!kVqMCZe3SzF3(b|j7qncY zLO^V!on73e?2iNL1*(O2FMdBEg#i-`Xuxckn1PP#`@*&A9vfBD&Xfz)|8*#lic!&KpPS+L9;rlUBB1x`)H7Dgb8 zYITXGjEEYEC&3N^x))nHkvQVr?#%gEFRK?ozi1JK=|Hy@cXc%jEi;B-{wVH}?o<3~ z2D9~C>ykVDSJ_5#KeLt~GIK7TentxRqWOux%5IJYX*IbX1LiseL(WSPpqH$%a(S85 z^Jx7y4k=A=l_EW@_y84pjEm)R_{DFr;tW(*0U-A~o2(4(hMVswsneqa;@@qlbyWn* zutUhC@PkjrUCahTO-Pql<|q?m+DjFLkE&+HdN$-^vEZZ3&Z2^8q($|j0yhzd_9c9P zi9NNipu9lh--^knYc=$IFi(wARvXlLfVRgj~WplOIKg%g4YCd$3r zC6lM2b&(Y5%tfj3Qphzfp82BjZ>tR8yktT~olZxut5KuI9wX@2sR%>R;tfRrMx%y; zt`L%CqS_4IFflAiA6^4cal#Jc%<#CCplg0HIkgtu+(PPRNoamx4Ie&wx@~N32~<*hn-0T4jq3 zbLNJ<37d{b?!o4Xb=&)#ullO*`r4Omt*v7EM^?yoce4z3j!=qRjh{oKX7s+D)+?#- zXBK>@a09lmk=t9@ z{@R~7hx2D~{w(@Ac)R+>Tfg9IzWODf`{`GVs#i0hdv~CjX#QkEb@a>by@#Z_&t^kh z*FNLhzyAln%GV-DU} zOV0&kR5$r1W@)w(maU{$7S2a{3n=ir4ovbjb_ z-{o}_s*OOXlV2Dat}VQUW01>NQ1XDI9SfP69n>BMrA909@V3t9Mh@Vkm{t?dhEz0gHgZ7Q9khHSYBHYp!A8gdvjbOESmiEXfZMr;G;q=0(gg=JMrM**Zz z^9Vr5NS9p*z!<<9<{52qfGG=Tl+_BI;=>@jI{9)VRMsC*9Aam~$zs8GRQfnAQL-X? zL9qc|A?nO0MWkI7TTWQb10R9Qa4fWEl*hykOvQHqnA*y)-2ji=gM+h}F8^<@_|Z@O z$IoAnL2u^1ni{;jH|@B(AZ7XD=r4kLV0*Y-?-@^Ou!kOdNekpRUK@QqhHw6r>8`6%3$gQSn zHQ)E9=f3X;yx}*0*;gxGeRQ6e{OcX~ED6<%0R4>~^NwEc-fgV5uo?LMKYiT?yvMuZ z>StrUhZR#TO}kh!ogaA4<=I&*rH*?s0VAW?9p(*VFHr|NW{b@wZNhArfO&&e!}=r+ z4smb}XCAQ46Aobig0zBFQ#?mkKZ^L90@o?_-6&mE&Rcem!<(X0Vm$7-xJ zvCZ69)6f0t|MN-D|0n=Bas71Fm2+ET-eR@Fyj|FJFq{=8D5BO+pmhl79t(?ky~2jN zvyq%&c)1eP`Z}w6V2;P)!f1NdX}d1*U8G21>9T;zo>0jog7Vx3hQ!N&2Q>7#hOozf zZOT0T(SFW|UcjVYMQQ$|O6<6$_US=Jf!5a9i&Awqbw*ZoSh1yt8r46Gtid4ikWYC* zDtaWMmTFJk#~Cs)&M9LF;00HAOB_Hm%*Do4w3PcN2{i7X6WOkk8Xi8FI;ND}$O8DX z?lkC@R|2qHR-tU{uu3{Y$2CnAz{x%Z!0F-8;snR}6gdWqoK&GnS~PyCfsw)CQAmc< zzRO2dbSl-L2&La>ImeVVMzgXDpwbOt=q+RW@#>xCywU1c1)P4b+odXN{y|a9tgQEwT<-ypxQ|Wx=wpN8ZfrZD_12EG(Y<4EbzT z2vqNvG0x2$k}%_q%E~L3xVzq;AyBrLSX%v%PK{yaKI_0VHmFd;pW44{F^iOVE3O#7 zbgp(aWOhez>16g)BZ`vgF(Q6jf_2Pn$XT^C@_O0C0!x-g66iA44n_jhz2=xLMGm#pC>lz%sFUN~4t3>jy-Rftl7b(XK==Gt$opX-vrniy>_Zb}VrytJjk@;}Fb@u2rU6 z++HX-kk?B(K!K>2GZR#r%!d~}mE_a3H(&Mb1w3{?4xgCTm%Zi5lnS;M8T zT2rExKTq|fztLNK-dbDD^O-)M+B=RDr*Y~k%nhrazLZt^pr9X$1(Q|N z1{%c{j&6Z@jvblj5m(Pxt*p-;MtX*=+Kg@;&CHJb-pVeV_s8yQ7oO<0!SPcse#uL| z>Fd61-Bzp6qdxYizr=LQx7{7E7TP^t&2`4hd;iCuz4jlx&->!w0*+se)7QfshjfLd z$l5PKNTPT^+9yYCJbvtT16e4F-w;I@I`@lQlp;$O8A7>bYDx&-3owr1Mr2FD^PRKw zmhBT@NmeVL`ql# zDApgeO|f-ej~aUt!`PUF%yC3*iuT31igZ|K#TA|Z$nL39*w2reHl-RxDuhDAh)m04 z5ab~wOz{sdl+=}wa4IVbx;iLMMJW#J9IhPyG9771?@^)<-)GYu1)GuQPG!}X5*Qqp z%+ou{pBNWGE+qvo%Q6Dzs%vFib7Lyjxf@EX)-oo$$7JP3d*HvT%BLsOL9OIcuFXXa zFVyo$o0_t{#D_8dxzxU@ZzU8mw!bfhA1gW}Pr)Q^%wgf?<$ z9&P`vu=q*YpMq8W>1R2V4^N>WV2=vjBp1uA8)($-)N2M2ic zL2S-k_sn;F)o;J@**9Mg48O3!F}qKKLh}fP3l2Hl++d5WnJDR_lVdw$HEsHQ@nHV& zkALB-fBhA4!HH{*ow^#U>EhPmQ$z1ZEJL9JnyG_z0|h<}1Mx&lI`r3j~iIXj@I2_k>eHhoI`W$KzxepM0JXc+RX^fRBlppR1f^kY8Zt`%|)ik6e{h!CDPCy`R_(q0vK^IXRYl! zlOSF;^_HNi8aCH&gH{O<(qGZDBwkV4VQTA#pwG0jMG{_wFnvGqwgf^^5G&bdA%Gjq z4Wk`XFLrSML<8#S21T;<&%v<4iqtnrHkO*NS_y|6eGa|2u!^^2a!@KP3`G_UAVFt( zNU|c3@2Hwo5q(ij8P@T}7(895WEkOc7dH!=g`~TdvW!O^U`EN<$!89bwp{V)n!X&vB5Z+q;46~Prt87k&D&52&= z6rq|hmS^t*mt`GE8%3*IAl1N9J)DWd&fcL~CrJymqyS0)td18Er&@)u95tu|HOK-! zGQZ)#1fNMF2b4b}s%9#Jq#o}|WhAX!wL%B95k#@9HWmgf_eGV3)12c)@-0y3NwFln zHU&2PNkB0?_%WEMfzJR!GLP-yqGNM_NAJSCdHTCN@3pV~t&^9Xi~$hp7oVg0bmTL$ zQ!MQJ*iQrg)(hvp=nKE*XTJYC4Dhy(%dWAjubP1E>=^#v0;c&Iy{?u`^p`l|%Pq!d z(ntDR>DOq^P3bGr4RWvs<2s%=v-kKzfByJ`&$#R=SnHUZx(Lelpp`H(-%m!WBZZT9 z_#=fX8y)O^x_h$)XwBXyZ}3A*R~*0Mz&oycCgwwU$7&V9VMi%*%g%W?Oyk{F^kxU6 zLRN)i%f05DIadQ_R_z*r$i0a4@Hkg!j?ESiJ%G()0QOEj?Wce7CqL=~-gnguzC~}C zn)^JvnYBzl%;A2t*?omYw#)%jFuM5s>6_mCy!U$E{KR9p?5g#t>o+!I(+w*hTcAu6 z9C@^#9EEJIP~wn0kw(kRTkVb*udPmogr+1N^Ij`!(0x}sy3pGrQG#OHP(V_Dk1?yU zA*87R)!XBktjyFk>{`B%?Hk`u+-#H^5JMdbwK6OZk{BqLMovr36^{SP@6@PNl9hHV zJ=7Q*Sb1Y^wOKnCG(6!sf}W7Uk~dQAj*JdvIMt(8&Zz|kHq;eI!iYJU925)6N(`5x zSzgs?e;e%`8fzEGfTzk#n6&~Ba$rI%%jGGS$hH<|j$o1A^;k@go{t(o4PE8AqdEWX?T&mwg-DCw)vt8q<=ywj0WSyboq6AxL_Q+;fZD0;02 zgGPdki%sRm4^0_3(5m9}vIuw~G!~-)?Y+kCoL}RWau?*2Nlc`=Nf`bug~75&Gz4g| zGKPc6;|0b5==~T{Ap=dO=sdCI>VlYBtwL57RvI|kq9u(Jm!;`E&dozxx`GD@G^Nei z_g4B#;<2@S>B9OYfOgAZ5fV!7m9d+EXAZg6$RaSnB3&V62sV`h-xgRQBnHTum)in3 z7VR<1&kpq0e;5x;nM)vS^BDXGO&^g{D2&3`xt znu{kuggvP3rv;`_u~K@$SsN1RqFs9?Kzpo$IDd#o@5H=)zYqP0-}sGRIMLQcTu9Q| zzWfxQ4#3A5PCY^#j1}UK9c;h)tG?zxe%s58o|XnzlC( zwNc{dMdzCp)GkFHP-v45HDAE0ZYriM_aID%P0VGofZz>}-m`b^(Yu~Fcl~9@kGSr& zBPz-E|F_Q(gAxCn9kET*AjfQ&aPs8U=Pn-Ny4%dQ-b!d{RR=wVv$}%gGon`6vxO=# zsiB5x!D;-n0i(~5m>GtXe!v(&cTA-o+knH4Gxy=b8351!q>umUpZd9D}45Rb}(Wh8QhNcnnjRF3z*S_HcpZEU0Ifr9ctggFxyY1K>pzUGha2^^E&+AER z#f|E?b45Fa2!_)BA%J2cX29UQbWL_~gMz9nWY>hHIbCH;<=G1&N=0!|5GzJdbTV#h zk(;=)`Vn}m9-A@E##Yj5c8j~AWk|E~zQfdNc~W)S=uTM4nyY~)3mwCt$HI}In>@DM zD6{Ux=}~Y9!K2Vd7+go9p(~F-yRV>2%C|@q()!eWGf{qB7-j}kozgNCN)4AT^E8x* z&ecFm$XzA|4qvNcIavE0T+8lOgb$Nz0?V*-QpMOA1B`6Ms-6H!g`uYb6-|%&W>#<> z(kuYOY>g{hID6xYRy-(hh2&s&x;MokS!_F7L6ba{pPX@^TtsBaJ$Op32ZvE%I2B4# zS{^&DsObYUI1D%4o={*>B#M_fiJI285&=XJ(71E z$qM)7Mw8Q4h*Cr91>7J!6{m1DZh%n4E#(G|SsqD(O8((g;DkBx31w4ZIZ`^NmxIiM zQIS9i?OZneCr{g_t|Ygp8cSF8mheuBt6>)1X$4;5(qR(D(%9b098oTnhgTw~R_iAy zy*)LeYm4_*A1h^7mPVwoL<%QEy;I+Ij0YmvtLxr|#6lS+gwrNd0g9+gbUn6txkO5g zw?ml#>8kXqaDTC4dwGm`^}Hn~Mpxb}(JIj6U z$Gc4)49#TjK*E(vkk+Ui2Y|b!Ikz0?j%gnkH>>&l_UzlR?N}fGo*(|<&wjxtj+brW zZKUfB(>PMN_$_W77zb5XN;-wyBp-mi;#Yp{Q=b2^jzjEUHQjXEeEuxV&{k0qGY2Nv zmMbMtrZ8US3p#i~8{4@!G;IMOuD)%>w3fAci16~&iYvb3NGStoVxL~UL~MbW0X?Xf z7@Ouv>SJMUygt#=<|4r$_0nsXNJ*9(^6$oky-$>!;sMK+MHRg)U`yg~BCfiVsJ4UE zM&cyu#Z%IU5!Cfu+h;^7lj)h^7U&^$s2Of3f58#POFOWF%`BlKGiyp}Sg}D4TDn?J zDHITGhh;H-1Lf?NM3ALhj9Hg~G#pdV=5K@oFXu$1&^Bhiy-Y;RRKDLAZk~b!D>AJz zr)$e8%2P$@oK#&TfMDMU6}4L(}vQ?&Y@G+4(Q@v;$w&tynDCOL5MD#=VU~YFV_k0vSpbi1*NnrJ+DH?$I>>}iy^CTfH>z24VkqzLQ-ca95sO%PNUu#^^TFZYWqQU z@^5KY!h`?w1w{ka!=VW`$*AN@#NA^0v+f%f|+f>5SO zpO!j2Isof7c~v|dx#TOT#Fq^yuPcKqv|8;rEIW&h&StqU8GV)87l7};NPRKLOh_sg zF%h=Ki|Ru%09c}-z%k_0;2qQ0m}QL_*fVT99=r#eGq>IT9_BTTx+;%@U#^p|~ThVRkgf18;--oe$jo zw5v`zI=Y)pvGk$5z%NC)OMjm9(s%e7RoLvvmjHYVtYBzYp7JNouWxzIW^1sK!YGRc zjaiH!>Hu4%pJ?jBHaDP@nnm_TkwYuh$daK<#U7th+zV@h$iik?YCL%crU^E$R_oQY zdHez%e;5}Yf%gx3{>T6PPyEQ$CohA~-6r(8wMkEfC{YA}4^1`SE$RT@^}XN!g`f9% z@GVY1qwVeY0UE6vn!BTKF|Cp&j?%&*vnBIKq*5t0^4Tg5_g#%P4l7&)Zd+*_sQPcm z_xU20t^~Zh>066laLGxGM+tr@f;5m+8@~!$YI>`xQq?aMm&;_ce3$48yTg6o6_+Y8 z2PNiYFUr6c5e^+nqX=X_638{Wvz=RAJ7WJw-Q_tlK2~h9n8L6E9Sd3|6qhOJXXl)) zlvu@xVRmD!qel`@AyeWZ60c%NilTkd1Cv&gTLL;^Q_3r%0fjrAo1GX?obP(2WXTyK zMMa&k+{yGts8Nqlv^Fi{C{cScD$+`?dp0xQ-3uX~n%LMkkOpAp&CZj@UOw%IpR5#$_f|2izl& z5@zKdy2STz=-Iy&xW;qrYQn~Vxh1Ls*}f@V4c+$OlZznAtZ?uN1gZ@5Tz1?j7GC)^ zCaSIL5MvnoNjqI?k!!fNos6)K$@2t3i7Z4k(qB}yMmm#-y--Q#uKIFo;Vw(*7%ow; z&qB8cWCx;g?{MpUvLKh>6|6+au>67Ea~Qpd0X)Mtfv@W!h;7}R?n_f`u7-Bw74j`e z69@O@v^ab^VBKQO@`c@!``LzPp>85RIL<{$4M{F*SrT=9Z$a36-C)zw`(J!WII|4( zoxyqhZwt81K%1ti!8UmCzIM+WuDbl>pWk)Qo8S0H`^WdaX&SDeObwb@>PP0`vRa2y^?BO~HnE#Ek5 z1)7e)%DC-=@Ch_>osUh$AqK{CES9BuatsdcIXz&Vb^=^!(*T=r{d1@F`sr6+{o2>P z5oqQUc-)jg3K<|TJ%CGoc6s`wKRoHPEdN-Pm(jQ5)Hz#q^W#_E5jjd_4W?u}f4#rbGlEI+!fR;Nrjfd+YF-RqYm<cxW{t(f@woIrR|BxJ*R8k8n3`&Dfm2j)st^ZUBhjFqHy?`iQv8Yi-b z-#6uwjHy!kQA0;M7RI{nwLf4)qyX7BzL#|a)eTJAj@x}g*ntxNpl(1i2SMbyTFd9? zV>Hu4ZELoBOwgBO)_ljWke{#wmkXG48z-DHOdnEM|( zizJ~GC1EjaiZ`C}ttMlPdB$v8=Rc7o7QhYCNBU&B zj}Tbp%kqt9-B0`PHa=E8c5%JugEHe)D6h-%dZp(}!ptRbywOe2igfkm2-}42>uI%l=#lBd-R=0PKm4;le3xfFJvw%}TN_J2 z76h-fFSD-y@K9v$u>QcAbMO0sAAaZS{{YhpC$GoJQ&Sqm2yNW`(mFBjbxu@D}q)rPz%$?e8l;`THm!_ShBnfMEJYJw!)?7oB9WTU$DvcI&@PbappuoyQP?88C;r$XS z;1!fO45#}c91~Lp@?@K+ClRbPk3p2(xSOJ+a$7$0i%6hoc&Wa*R~r zMnqq+^KvN;_hS1Nm|SYV@GSN^pP(Jp;=Z;RaNzK`sbOM;VZ<1*83xmBVXSSjw?}?T zuC4K(D1*$MRhMlprkzzQ3ySqLOt~v}O04Vv+P^x+Y7dM@?5eZ;f_u)WAv>FdMLX(XV6|@k9 z`rnZ+63}b(#rkuqe1%b4~EX1o9mB-#-4q^3>sEMKR(6NQ@UdLZ8 ztFt0O%L>K8e5UgT12=v0+@CIIArP$GuNw~JNU1R8q==M7z_qPynXDjkI0w!>+82FL zs>&5HKKeN-oWm4#Bz=r6>dHVKqzr&%SD6H<%8FdBpN7p6zi%r|d>d8q9lUUtuX6`;7HF7OeDi!bpeGzY^Ep1n-MI*_;_D)8flcTc$VeY&u5)7M=$_OP9+T3+6evfkJ|v0bG-E1dZm* zLZ0Qfh5NF!w#u#6$PKzcWdp~ZzAq>|nSU$&Xmpq0}A#IMDb#c8Q?G3KYnLvltIZy&RhQ44Tx;kOuR zIPP+uHPI~k3?)lY3`4g?e~Daa+MGWzrKo+MyIPSsP5~xp_?m{QUnIlyyYfVcfyp(! zRm_>!ii)!=*10w1PA1Dl8$L%aM`3{uENVqx1}jxRaiql70f6CgSo3nAs(bXVr~AY) zfC@Dx)r$I5-!ep^PDvxtIF~-2^73+xD6}dz^C`Uq)5ckK16tVz)lv{dQ;hmrOC1;! zZkF|w5Fn0gJhpoOuCjZ~Z? zOhr4raOJK#JyfTp#nU)K@gUqGvb&X6bOZ>F3%o6s=$VyGng#mK%Kj2BMu4X&M~$Uq z1VJM`cij8e_Q;(teCgMC_ZNQ5M-SDIIT)V#yx>`3CdoMzyda((_W4u)^%pf;eawe_ zh-1Iq{7yK1D~=uSn=Lkn@GT~fJq+5EMRPZ_RUm$+_b=g;_b;4PS~{{R?C}dlpcbfA zeTa=QuQT>g9?oKl(-5;#l4{gwkr9Z?dLt+qyqPtu48Fyc*W=1tKj%|F^;^E@2lH6! zgj4?8aLLb;M6tVsfAX&dyE}a1XFE4r{rNrj-FW;s)*ZLp0iR%od3GQIupZeqlMpV< z6p7r+V1*}62VGNkbpwtE=x`rGy0N9IqW~rX34shVOrEIBKapfJlw!gb*mi6;js~|4 zd~4gye2A-0@89~K?b_Ra>vw+nnq$W=yZYK+{LSAsVCoHyKD#SW2STRB`r0!xw0g2Q zJ<9#^y<-pE_t$^$S9i9}dEEU5J9i!@FAGtWy9UO_Lam0J0*G=T+KA>A#>L)78#?T! zt1jxmlwSCFqxM^KDw-Et5ETXs=osz+crd6tcle;;fajm%qlzn}8eVW%9tC{{E5a|! zn>JUs(9cWLV^JX-*SVyHcXaYg>9A<3Y~gzhx4{XFagEX_B9yA}NbFVHa~M;OQ;j7? z%Vk3TV!uq|2WHYUNY``BhU~a&#J%40C|{QjdT5qAi}MJ_V6N_sMr-6L#mVcLah^f~ zb_9T4wUI0m(XfM*BAukBq@iS+bd3vS^anVr^UV}JGFK(9BLv$D_>{-ysE~{>_C6(^ zlvsL%!FhbDvDcLGA*3Lzym1_awE+tj-4hx%G#>ghy^}{qUzD;ZAwmH|6u%m2=*LOG z1x+LY5ET$Ngz7c4IfMq~>H1_Av*ceJMFDinQh+#EFGX0$=@}daPenbV$-y4-Afa4& zTm-pCFO#eSD6ENtBYRPTcnP$CuL7>9>9iJ^9p{X|;VJAH|A_{T7q{$|5!W(hzEmflW5W$Y3RM?| zTHKq$(UZb8-4eRJEL_M==Y)!gXOj{ICPP*}%9Mij7}z-XX&mX78iJ*C(PLIVxU;w+ z>;TbC-Jc7Tq0^ZQeUJnngF#&rToRe_eD0N=MVKN&=!r*zTsls>YN(_=zLs#dg&u*@ zi#fJ_3%wre7FOs7XcN$24StBe#uE?X@dr*_ef{0{+<9VuAA^CWrmXVL#fOPaj>lnh zpB=Vt4ZvfY%}0FNXZ-$8{U`ujbt_I@&K(kaPcB=*o+gW> z70Iesf_m}BN^PnV-6;&|HWV8dcBEQK%jsD0q-#=qkk>5flRPW?hk9XO(pJ7u(V*b3 z#!RSmP!;6Y%X zh@Pg%Y&mp!5*$a)w!ks!KskRNTkBH$X)$Phv^d zb6)kc7-eyY0aKfPy}f8oJb*b}FP9m|>3oz9M@yQC3*{TH11K<^T0tduW-&vadWezq z%IGN97|BYT2gNca&A|orwRR?d9l<_ZHvP*Ifab)w9!0z2IF7i>z|q#|hBexmv;Ev#SKBLp=TCm~ z{od`}Lo|DJ6n2JD!a03rY$rgy6Tm^=JpGRMxc^OW0D!BWj^ig`Bk0|ho~1I&3OvHZ z_^EggwgapM_?78M)vM7yBezLut@5t8OkA_l*`hIcXl2cx8PzXwe2js$ud!-y==I?i z55DPrKl~G3{cAsi+2_fpZ9@Z^?U3_t^LhJ^aEF00-Nt<2^Gm+qbATCGd55*`gHOm~6`zvQR{k-+=kq@N zPygsQF`dLsH^CdQvhHqMs;B;oTokml_dpRX?l8F^l#M+V6!41zJH1y7rFK+Lo{f33 zJA)gU24<$boS`dsBHX)*V-;!3`>ZfbYHM;Qr1cc7inxhCMu;v_6gThy9A#v{5<%MB zLKZ95FeC)DcSW=!OC^2;b7H;wYYxBk~TV*kaWkYq0jL~RjVlE*;Uo^{dp{OQbr42tKb!g)|DVh zgTh6g$Bax9thuwL?c0g*DiiCGHLl-kCAJs^RJbdjg#{@bMx7&#loe7aGN}>>FDa7x zj`~bPGt3wPz!KN2D4|BLaLo$OVn{t3SyZ75E34NlEGvopRBx^&-Elq?Z?sarjM@;_ z&RU7%QHU%1Jvi40b3+5tNP8-YNFy)}Z0d z>%;fI)2+9kyKoj*;rd&#T1RKd)Sy)j%bZ$Da^@rXe$5!f&GGL{Z77?fbfPgaPj-vo zDMbvGRY|vMFhu-f&HQMlgUlO*S?DRsjV$l9hRp^Kzxjq+-~Fz?{)08zMf79Jk}L`0 zm!!};{yP?wi!a75qz*?nvkmNHUhx0?HhiHkKp{h06y<4zV<)-pZ|8U*|s(}wAK>2ld>gxp?~H+n$pm?_u>POp1Jku&p3Si zFC>_eC%JI=jvg9SC;Ou-OUh3(;E&6&R+kDW{B zMz!*yrIE^R38WFo^++xZlO(m0kEKKOOp4hkmrH9KD|VLX3S*3IF-NBm3dv0aE&e4m z{!~=7TB=&AO2zpddz6pz%wfx6$mMXwZpvK=Cl%>8%QZ4Kc{UI1a;8UJ`{HLu&Jh>E zi>WF(c<-g7tYDfd=U5t!ahuKPQ&iPD$8U3Va3s4KON+L{Ih0R@y7H=$mBX%9*l2>S zFj4%f$+AT`i|?u?)fb#gs5dM`F8sYBPLK?i(fV@O)%v7F$k`@M8rMdfXtm>441Ab~ z7|W&=5RQV94H$bcjP&aqTkK#Q0_cXD?vU8WUJat!LbCmc@YUHGH@;jZUE;$cMJtpQ z^aRh?8#~@L^2B*IRxz0}3{y2BSdyTnVkC$h5&e(`Z2+>=)#O~szNf1{3M(3L|S{q{u4fK4RtevnaBhN88<;^T6m3@I_taptS5i;{&wb}8*Y84KYQKpUVZtgtz)vJ%dRHXf7I+| zMKSaHAAR&`&w0mq2OeSi7EgpL0Wt+iTF#2 z1(nox?jm3Gc1MxDs`zA_MwNYN9BQo?D0YPudwv?;eYFlN`hjNhxal4a>YXvaE= zuG6k}st)ARc?k|sc-+|fhEQsh4Z^DfVQMZNZ!8>F?)DPIDouK*UatY;fn(R8;dD-R z?wp^!3z)z7>%RV5zvipa57GC01;@4>Hte;9E-c>{@0`0$ZMbA(tl$4%fAq8da2nn>4O`WawJvvytJj!V=j7%Jq&-`PlB{o9P7f3IwGi`t*_#v8D(f%qz(HLQ|?D5|w{ zFZmxs5EfK{SY|I$uLi`|&9=wu=#331k$H{>>>!=6a))8q9q=$Gu0=Mo@zjJIaDfIP zvN#mjL?p_oAzSET*6i-OLXk@V-5QiI zNhkm+d8<2r7lY*VqH6Ra>s2LFY?J-SpNib>eDXP#E<(*}EJ$4>B=MRfgtih>(W5Qi zxDcumGvqU?a8?(j++J)b=|CJG(h|7raErZaTvvM}Fkw?&dt6tr~<&eS+Z**mm|+8%DI<^Vr$v-2NWtAASpP zV!H9Rc|Em`K5twOD@jdj}%*ba+Z!uLc=nhj%$8d6(U7i)_Y#FxB~;$6#G zeEuROSq!|`ZKY!AOiTHtxTD;^m#1kc3%gTcd}QAz*mmRu_AnhDT*Sj~G2q2t|Ly88z7Hw6se45xUhk%eeH5_fXhwuKu|KJU;eiinvYu8`j=PmjiCxywR=G+Sf zDkA17MTLq3sMU;-U{$8yiy5Ilm$A}9?Ftt0YT=62Uw!fSfFPB-6V{4pu=18jA}o<# z5n4rW;YJ7~II6VGyynJ!~>1Cmp}>Kw5Fpzss`d zlvwIlVwXgyut_6SCPgY-bC+U+Yda(4+hK;Ao?8NRUpA{PxuwpTOYXWD(u0BpwlIB( z%QdK=04ZT#-|K45L2icFDGI@9MVaNvHMxkAegoKTQu?hU{;PXy7RqW3U#3zh1QO^) zA6UubW`U1`@v^DE1ToJj7?+jkU-ZxPEq!sPWlCrUD+Z*`&dD@Vp~Ws^U}9TyCnH*+ zc1}kCI;KAbIL4bO{i8Q*Y;TVxN2)E6>pUK+L|ru}0YF8H47rQHI3+m@c(Ssmm=vj4 z#GEWK!l)-5InBkemm|+D6lfsBHXx$hww!goLOl#19F*Cno=dlhYqcg&X##CiTg+SX zr3?TiXixO7*`onQsyj9K7SkHu(L1ohe2B--;M{}n_YXh(w}0&yF|YR4R^;>OXGcaC zGl0#&wAtX)({4L|-<_DQup4e$S=(&Sp*O4ybH@a(KIilY^^{9v%R_ntWANgy_uVcX zS21%bX-O#KP94ic-6C^2F0+zqWem{kVC1JNRu@K(IMYf&*%!B1!ZQapcGNMO9Q&8~ z+unrDnYZ5i=q)##QgQt#G+&Y{Z617oe19bRmM`&oo0vsddVMR}kD5_O1 zHH9%`YjVsT(+a&?2W+x=)1P=0Pdp5pU;aHm^rFvx;c=>P+RRH91H?3^p$Sg=8}7OL zoo~Ax+Y7k%7VMuaiqJ66iK}wg;0v@guHUUjD%^`AL^{TGr#K+3$sSPt<)jm@#t5{OP82W>d&fO%x{F=nL$d^}m0$7!D#+Q+>IEz%iW1v|x5bEONKBrZ z&}kuDVMlW7c8~mWvjsj#_M)oO3IXM=h{Ezh<+l`8Sc#DoXl0{H%`Fvyk#^UdzEXr% zg7b2A1E;M`R2sNU$9X;((N=8|<2oa<3o_&xhZh3CiO8ZIWovw|pmt&&XykHaTA(AG z1S`gUxQd0Ybd;om4qq>`NRAp{EIZ2Hiz___X52b+oU;()9oB`lA(z9=8jw5yjb&5` z#$1#vcPvJgB(e~s@lEd;21GV%{GxM_Tg1LFpban)aB+kqYO=(1M}qZie3ZxDrY?ly zbA%X;BB&sK$X_t1@q8}jU@GM)(8hEHItNUegjjk^2U4Em8LJWkidk-dHlE+&E|bXz zP}Un!c4AH5p#<|_%fj3R(9{gXg`J?~!%3s@SdwbJBd7Z)G z8q9I!CLb)#4KGJ}YOIO|Tu{b z#PP=HajrBR=+x1GX?AztJYm;8%Z^=h>y20a-s|4jFiSLr4VU`p7k{!Vp6Z7Qe{t7? zPrvF~H^;5dh{!Nf@7qBuA6fiuE8~#iQSQ9Ro3tjxu4DOjP8Y-sDE2tV`R_Zm-8IW1}eLPKqF$%NJ;$NFc~&8x;f0}O<&vosnfXbIoP}D zOF!>3Pg#4#ul`0itCPEg_b*Nu(99j!ZqQ(Gn7z}Dw`?z-|0kdGg?Q*~c;Ie$gH327 zY~~rIgBp#~9Em{Tr*gV^I_&tBhA#{XXx*5HHe#b&H0}p{)9yDSmB6I&nW)I4d@6)= zh1q(n!#z$Sl0{DR8zY%h%p#DW;4KKd2N-+5gtiD&>M-Ew(KHUB{2Lw z#evjZYpKO1<5-3y^iC;dcVY%Jh!b+1Z=swrF)_BFF07Xf8#Q20C0&`6|LR z(RtdnN)R37SE!UaK$V=eV*O$8;l4v@BZ(%(C=?^6m7~qk&>PlovcAq-m#fG)C5Iwn z9v2iQbxUA%k!D=X;G_$ToOx(Ys?tlNi5<8cM#HbtK_EEO|MDATyxkU*88p%MwB|_} zjTCIv1UK=>=TLw~>&1c}9CRybd#AG^%u);^g^b8jr$}haC#t~=!XhESiCnRZxhHlv zW`ezjy>F6A5}Oz7d%(p(Mb7;J5Tp|>2{ z(6bPgDzxSFfDBd*O}%Qocf7rJ(Lp5g$i=~vSypub@j#~rMP-0uW+ar7D;)uLV_+`9 zL-Mp^@j5RTq(oVcL8Efc*9q&U{S#Xre9%>syb% z2$iJSvl2r&2ha))y`;W6Y-;e8PaC`X2AsU*1K;(zKl49do%E@=@}!?9z354QaQyP` z{jWQoemzcJJ6-=wc#nW&Jv{P;HhfUGCYJ~lek2ful+yhQI?=K2a_?AHN+u6LQ>qo| zk_Pn*rlV?m__9JyP(iB67>{ipzVdL4bSz0&1Y~`3yjlpH)^otxD!ig?1Ax9Y>sU>g z{Q%weSGfKfTyyi`{#Bp)(I2*V>q_1(zE9zNI@X&$_^@pWJxCZL+V4T1;fCouAvr4lvW~P zQ2!h}N);|)`C{_S)XLxnvdME8V=ia9LwhI4zF5B0I1#68DP1CNW_ZtyWfogtGwW1S z<5rkg&!9x1a~7in1;QWQ;t_HBpg z&C`pm5u8>E==4vs-IBuiqfd#zk`pUnJ0z{uiR@JKJaV;SgoGq)T*-VHLpATPPSXa0 zIYHYI0emZ?R!SOtLTmhqbJUQ;cBL|HS<5p<<1oygM2008)`Kr(zZ74MGF=B6{c4UT zhL`wLWYxJC!xRt#Gv(QG{S$5fFgY^fW~qu+kFO`)ja$?WO8}~_jvRtg3#D%776K|z z*0@c@M9!@-e#mJPfSf~hkA*%)yDP7B$dT->HoQ;icQjxs9YHSXm;T6TS-uonQL4l_ z0%zkUMRIJYfK-=OUwdXLaW3`Ce-<0l=&dFfhRtKZZ8TI~l2z5_bx9tlFOMHY*q!*q zC1HF{0(3!DP;;!uAtL}u^n7l4!SSoz7kraQh`EDC!3tZ&|qACLkXxl!vG9@me5*ER$00+2BV#& z`&=v|F>a#%yO>)6NO`!TBjZ6M`3Lq0Hl_o{!C^kZ);N2i-T68kJo;yUeb+C);`>Q5 zvuOg*reWWj0dd5a1K!?@cWe&(!3OIU zRzTliGWg6H(C=@hFeQ)K5a1ru^emMGm{P?eLZJ+&A|q>f-n^*9AgWZgoec zMu`N>i*c3JL11aToN>Dn84@|rz*v!%an01c1DG)%cAIg<30!f*C;iuOTXpcee4H*fSrCet~@=@hvZSmybYrDKF+LljEt<13iJ{(rMpav zIA_W%9VEg$#$@RANN}j+<;8XeYO!>qv^S7^4t=`(%E(8IGD^Af2&nV8a5Ep z9hiY_5MdB!f_JLCckdg_8|?4l+Uxzs=gd#^ce~^ED{p+}UqA4`fTVHAPDL08;2pEu z+yOL9MYC-fm#1BO^@R)PKkp@9Wsly42j7N^7qA`6W`G$yRgh+SCRr3-0&IArO-Z^T zs2A2*4xB|dnlZ(eRbo&2q;`P4F_xi7eRvudZF&Z}N}j*g%caL(Ng8ICN5?fZhCG;)x-7CJBB8E zjp}+1$T%$5izPKB9ML}OgQj3AA~;IQ3VLLiUBYK+3)5_i)^dpD!j2($5n|<{JdS0S z7P0#;pH`k;!bdgvl#aA|r9`i>oJ~8Ek`ZNxUPh%8>Bq?X0`Els9GzT*MrE_b+`X7v zy~0cQE_#Y%Vq)x^sIDFck)8c;aSO3t?o{=6#~iKa2%TNmD*qX?aj~LJZ=54@pztrO zG9kWGSGC`QDvGroe@sfAabNoRB2j8=3D#34kLGn$@vv+U2q9@yjinr>Nb_kx3HcOH z%h7kHx(6QhxGbi_v&{n?xN%t5z6zGC-<4%g_cSh${wmMJImTcN^A?!!;C-0Se)J3f z% zl@v1Qsn^Z;q(s@FOHx31!oYh-(d-4*#4LIzd4^XJ;~XT_ylPXvkG4VNa2f-6`BE$> z1BMI_@}&XATJy&*ja{Bw$Hg;v?7q+ahHv`MU-{)Q%#I0tMw{%?OnY)Z22FjQ+r--7 zq5tF0{H$O2p&yv9dnVTV0OCLf$vJ3X;JM4YAL-bx*Q5GRW$}`;!+5HU!C z8;9c52ER0=dV4+dP71~LJn*N6A{azD{bqHSQezgTq|#Kxs20soo?yU)`M~bI+j0Iq zKHx+D_;-I3Ku2%hw!N>W24HrdvdHixABS5vwEG@@__iCLanK*f$s2LvT1=gb0p`&3 zF{y>YwQxp*i9P8PJSvEtz$ki>Vzw0W&Hzk`torBTB*bzCnOwAmA8^DXi-b}WlqW!G zyJ|WKv#5KwTjZO2TTUURCSIzs#4d_lwGwC}lYz8Jbzl`A^7%c6n!^)NEb~5C62rze zS6Z4<5Zg;0vkHrJ!~tuO*JvKQ+>9Abtt4a%TfwmjgiTel9(H!IsIoxlcvs_iR3d=G zCOQB-VAK)WWaCsxp=9eqJiNTR6?v`@!5Y3eYRc0MvdroIk9(cvCNC6B4i*yW3#mrq z^s8g(5}}c3vsgP}b-;RE2~oluA>HEJz8oR{kk|}rhgizw@yQyG8M+y6zGER<&g$5t zgOe0dNk)r5Co=|1sqM>7oA|1zmw8Ufm{}h=;F`T#oXRP>a{yY2tA)#jA*o9saBDXJ znNOj=X6ML_5yq9;*Clj;2d&9mWfUvVc&V?FJ#)+rlkB1|Fmxw?ak?qaX%6n>{07ob`{DV%S$wVpFve;~!!;}Br+2s<1ExVzGL=6H;+_Ch!5Z?zn ztJF|jy(SrG$Jo^FQ=o)(-B@e1u;ar9BDnVs!#K&}Q_hzxM}y z_#ge=Z{Wt;F-`Dsn$Oa3EY5;O`UeTNHS;QGw5JhC}Lr_poxkB9{??TfV0-Qhfbh|YobqKq_ClaV=qrvHD@W9YFjDC+WQZLQ% zBe*69L&~T^3fO3qX%ul#mb4hq$mv%nmd8Mu8E(EkX+2D=ilE~iUSbqfcbU1Caed=L z?42~^7*L$o-Af{^`deZ-H4RG&I71|cgW{gdKRjqOLdP#q( ze_V`QJfT`u6*M&#$v{a(LxGu`Gha|<3@r9TX!%|-6vA#woP5yGIA&5!0AcCcX2Waw z3Ccy0DX9eoO}tL60drt+vp~;>@0%_>a``QHJbc&dTgbL|SQC-UBlPh(mcWJV!2rx# zzy7)J`tV=Mb55wj!e0oC4`K=%b)(;(3BjE2xQgPw`J% zcw`ERa>Y(awB(K`A5m~(X%4H|L`<+|J-plnq53l3Fktb5wEm@LNdb*Df(=`1?*0BZ zeCYE(@s+>y)2oiTp&jw|(*i!lCw#Mhp|z)7b=yOa-D%g};U`v@H*hv`Bv6#aFa{=B zeUbmJK6j=(wRaIQT$!E95qPY)5K4?~VY38OWTPhd<6UakENqnl_F9YM^RryD6P7#Y zUQM#{K}VufFGCxjMM=cqX5Jl!euxW)IQuqW?ug_d~{Hl}Jx^Hp)tyo`yd27wxH`)N1aw9JnxAJDZuo+CBl!YWmPIT zY-!x0ro>&X$DPskOxYM>mIpj(vdn)gm>D@!r|^$z$zVZz$z-_|3u46yQLfX9YB=RQ z_EzueE&u@l07*naRDCMKZ*>uxr8$OzF|ubzs)0h8qN>JGLED8>ifV!wMB|LU)HPrU zgF9|U0#32uT3L)WyVX5JN74xn9crVeKbo3T@wD-o;}RBRV@N2B zL=ajec1a}r=Nv#sN2-BatcW*0(0H26U~Ns&X>qzjrh$&)#}EQ%=wF{H+0__en3M_? zKo1FEcC&e|HIZa%fylUVP+*)4r&UcRHLxJdpe3lBiUXzL>4xwLfdb8*nlHtmDxr0PV^Q4*J9(E98y(rf zY0P+;<&`QTHBio3!5Cxch2!b{YY`Zol59vAbYNqj(U`%xfS5VyP&EBZ*&rGiAmUG- z(Du+fHZwL`-1}x+c;u&l_xB#X>(84tx4@~AMnKWe@(J&M=IiVQU--qV_4M$aZ?n_4 z;f9;~yuqr&x7ZeTR3Vf}mRFWgpqFzShe4bH!Lua6QE8xjp4W$1stE@|$U=}MZdqE3 zK&{5rEW&NZ|E(nTtyrC|C_?-ocI%v)g{$s_GEZrd)-WW4d-x*V&|y>Wd(+;H@BCZ8 z{4?+Ro*(E9Q}!IDP*i}}`6>SFK4u?P4d^@!zAz&3t%|*emQ_YWC~b)|IlLkXSXvOP zl4D`8B+1Dpva<^s{jC)TeyRhn+fg^W9IJgU_pdTe-oP z-hTzXU_k5=guOKkR~|pv`@yGt=I7%6JMq|CF*P@16E?ML{J#}bRe2;c2b#RFO*G$Q zwUsG@UQR7F?Qzas{3nC+xZgDK#lMjhHDpswa)E}gQIDjLAt8;^K>)8B1VVWypp<$v zO$ZxHDL@9|2%Tftk}Duyt3}oCkt;EPg0P3F8HFiM3%n^x7VX(pAWDH1{nrL+U#2&VdznAw_K8iXnz^D8aJ zrI^KJ>z3r4g*c_T50^{sk@lrY5nrldn=sGlz`+GPde`N*-f`y6H<-(EsDxBCWI^xo z*}&JmqfLPS%J07V`G5DrFmLUK+k6_Ty~6e)+7$lBWX$Puj$Qy4D7;ppt|V8IR79Iz zR9hQx)dvnLn1W%1ea%F5F>wY~_L$&wl^@yG)eFwZI%sd-rhf`g$bBe@)r#pYGfm@K zGV2n{S}2oZ4kIxe)`s&P54>UThNnG#@11+Tg{{c)qx^f4Pv1UtZgcvI%h2|w8{T>D z2Ur{C&La4cz2OtsN!X|Z^b|R#VxlAzprO@5AGtq<>`D!ao3_ltRv{4@7@d32G?vZO zrLB;4#A0d#mnN#e9w`qZ4^5dsg1el}g z1^kU_*gGo>MY$x;ImaEzFy`#Umtv2M3H~^`zNNFWNNrStBLpUw>{Imw6q3ep3_Q$n zJ!MENmggBmasq-)j;xGx#ZmBR z=39`#vzRD4!;>j>(NvXZqqu?qJ0v*{Xe#|LQDSiBOH}EwrLVA)q6>&5|BO4ix-#zA zExEc>i}V_M`vl7yFW{BYhd`?-Jpr>p5*ofB@X-Nf7L$vfrVKo9`Rk``a2l{!OS zUu+LN|9=3SWX`B&b$F8Plo3$mq<&GmJE}w$GnOeLBrj4MYQY+uZJ}JQ-UeDzA&GVePi6F|oem+1yx{Oh zTWk?61eb<(Aw!))F*(Ww4v`z1tZ&>L*vz&9ZhiN|2ktv=C(hYQ)uoz{7HwvU_MX~qS#!54~U*3gtWQ!bW{yU+uO!zfZzM#VZ7DqgTGnAqK^yi9U1)&M3`i8Py15OfR}YuMcRB1 z9FbIE-*{Y%@h7G21e;OiR$Zcp^;d>bp0Qy;qN(^5F3KpLp>hpMHOff6Y=&;R9&n;85@$YCa(n#BTZDp=(WaAWDq$8RRbw=RAmMk&VhKkVKu4s(`eY zU&kJm%@z?j91ia8G+`lspzZ0x#Og3non)WJQJq$@JDu^9kvgCV>c&p38&u28F`|qj z39f>e>09dXfM8=%4JccJ@?8>cP@W_=`UYUinbW64liYH`sKZ{&Pf9l6GaK?Gc@{26 zZZGYb;u09ChXfR_JSKzEtYeQN+)`VShupvys~WRPV z^sk#ZwZhO;juOBl>q|z13eTeh2U|xlGx1Tu6q3nl5+H1$Id3vzWnLohc(|4%3Z*4` zjoF9skZE#rOz>vdY;pbVed;I8E^fB*Ea}80*~ib1{?hNg*X_62-Zi-8Ij}7nu;vZU z+=TF9A^5T&HTBMk2qoMw6^r8(>_O7N^r4;l$K_{0A0>8CyCiNozvbBzoDT6E)B#}>Ap{qEPl=G%Y#$JS@=?hoFL)hdeQPJx$O zV`YMdjG2e#N+>g-AcX+|Q+B5gYW!adoE+)Z+QA5FS*I;KdK9aZDdJk7rDYi{lxq;b zoKhNuA>ViLv-CLBUo{6WV&I(PfONe@#>#&VnY5iBZQAs5O2y zS?Zm8)PZsAUPGEtxp5NbYiAHR%I7MfzvqB|vsa01V6# zFgxH?ceJ}EiBQCf1Yrx=IIm#5!qgT~#YxAH$Rb#d3Nn9#+U#spZ59+o7mSWwfV3k` zov+kJ1qfLt9mkyjSMD4Ik%@`PP^2DisJEPw*C3MVJulVvCIKqEftMRg0SM)3@FN0; zJQZcoD}Y9=H7y-4&mvXPe9^=*%$3}jc2_{e%Jtxw3X!fLo9d)OK_dm6Se)y9W%;V| zSqx^ZG_5OyV!&hpxlh6J@QG)SZ4;`-0`Squq4WG0(d9?XO*G}C=m3o-htZhPz}g(C zk^1HVc|%kpac&FQ1NoZ(Jw#~P{Ipwgan#OEBXg7f4)0~*D%VIUl-0AG?1KhbL{Xy% zITS&5B$jtI!?s~kEmeY1%@1EBEigs!+~q*2j^0Z%uJUaZwxo7PTVd;HK5czI)^K6M zc8f>fc+)f9`7M9>htss5C!tB?^VJJNxX1M-~Wq0dGBXE zJ0;p;pC(Ys+uSjAV0y{dzWlqs?#s59--Ii#%m#zGV-m57Nnvz zN_V25Z1H31M*yAF#(eO?i;%hGoU;4cViz(mn*}*lBYc%~GmG((3nb1KZ+^(Ou}7n6 zU91qy5?WI-TdWNm`YVkbFRf;Lbh^o#ij=v-9DQQ!(qiyaX%-sf3(YG9Rj1tv&G($I zO_>fe?l9gJQP$L?E$E!a+7og||9Piu#H@Q-y)kB!&$)v?)SbjMW{A2L@3o{%D8e{U zf;o<^ZAA*>Vm!Xs@PHixq)7};`B4uUjkP{{pPtCNvyAKbp%*$sNjqB*0%h`p(D^7X z-?Uo6=Nq8M>MIWh1JOm}748co8yA?8l7;9kwrWa~#=2)`X5A=@t>o98&q`O7jaB1s zV`0k*#<>jPpnq{4I!%-+Rylp%Z=8Fu04Z}yRS(sE)TON2*IwoQH_a%#_B03VCV>Dda%$|J|?|~ zNNKms5{(&%YsMi#!IIX;Q{9~4sSr1Glp{Cdj9%PT72qqpeaobWGV;=5C?`;D}bDUTCe_Q3@O4;bVAn8D0Pp!|5=2k{=F6SOHsfR4NfB z@T}rA5HH25c7heXb`~3reuEe~yo#ye=BL}~XT0pipKzW-6CEw2!q}CXA+9GNfO;VXhZn-ii{dx%a!`E@EXzEie@_^)JTTr# z)+pmBe_Z?lD0N7)C50Ws8&kGr=Sjvnbh{NvR)Ze0+82F0#v!Rtpa2QtV2Lh#*n0Vh zEiI|+=#bl4vdwi+ln=hW95y=iBHeBtDI5RuNG6IqBW#uh4A9^b}!*cqXtr=^GY8 z^X@Po=N17LD_e&wHhTQS7^6ok%UrYt9H-NwWHzX!wu1x4iiDN_N`8Yg3Ue#J(@S~F z3WF`wBTU_pgJmS3B)SjpkUC?`6h=%>!x{5s*2kAD1}CD;&W8M?FBQrX*c~ct;ZA|w z9WmE2ozfWvd2+^RkcgS71tOr;d}=YPDx|naVO`8hD@(n~_g29ctdzu_I{Tf{6~?T? zM=PCP#ED1nFkY-4$Kk^*pC(#4h0}@-ns#k!S)-7tL&>Z-?Gp+Hjls^{d$*y>zHMh7 z>W@G4o3DAzcYM{CxM#*m!>mFX1Md!CJ^nFygZV1y{Ld}0UEM}T4aydPlDuOs+Aay%z}lq z$FTSfWMyf{m0dEc+zylP3Tfo&7MUD+F}CNjLVhoCK14K6sc?!}i0JS(A{a#j(Cy0W z=94G?_W4L zuB4EYkINdPMHgAuWkN;%(V2J-C(>YZ0x6IqcU^z{L=2j@ zMdOxHM{*XPgvysQT9(Jzl=Tp3BWzjtTa-M|S~XrA;;nUP1&VZyVn`IGYte;*C?TYA zl|sDBV|`T4!^$6?J9?#|0kZ}rmK!0pauZ&*i;ziDGCOp$VYU3Hl;(}|$QUIl@jm)kpM2Y%1@C(N1XKrlsRB>$|@ zo*@aFB0{!=h%kq}lQrqwW3*R162Dr8yn2-0BlIzbsycB-+o5PwIS~bH7Uvrb>~6(+ zwMMZ3tsiw+oocmKN|`Dg$0*Kz#x>h$&7*?~h=zzl}y14Q+r!Y^P(d6_(m>LGZ*2rZ=x z=9Z&M+s3*oIJ$(gid2?l2PHXV)l>VNh(FW1Bpam~HOG;9naMU^O5@^F5XS1;iBZ|v z<>igz9m}?s7;{fkk<7A$JHTwR#~$hD?)}(*`WZj}qdzccJU2|}*4ugCKI=K}e&1W( zfSca~^I^oRKBpEB2S|Ils5VtqI|fFmL5w&1sRGad8=IySWV3?F5@sO3jBr8~3FMVy z7(+)|!DlNL3Weag*w+^PlH`CdsyT&PJg<@%)`~dLOYcM_kr#*n8Km8-()?K%k(y5l zA~(3L+_nc#;E_AAf6b$hz4g?wV}Q-!<6J_}>euC8{jCo_a>woOe&LY^aq31~b~!L& z6(rPnZGe%NOhMN~Kz#xAOA`bc7uOHS^|XwX^0=&*b4(4zND&f+z+&i*p;Va;vT@FC z0u9g7C<`|-kXHSNBBY0KR>@geSa@=CfyOeLvXsizr`}?f|#Pi>3w1PV}za?Miu=l$Tl83q4lf) zNDDeor-c=Y(OgEasnNF1OcVFmXiG=9j=8IZlAdijWfIj|@pYqLT8EK&-CM;{0A#Rg ziJ*3T$>AJsn0~4Nr9V9N0|uC59^LiQLFFQaGctTmTPz$a-X;uDq;ZD$#zd@?A@f*@ zP%Y~q24G@l7e)Vtxt@X^pJJcDVFgSxo#`B3N9zBWp*(eC@m;~LQq9k+ z;>g%$3vi3w=#~8)50^w@N$~V;4VZ$1BeOL!gmSqu!f}8l-65}9D_m94LblMruBuV_ z;Sm=95vNe>)vv66cO;Ek)wI7vq`A~IFVo)%dhk9CkiRx+=S*0M}7My;d1 z;`xdhWKxwsBQ6i#jksT4h&&9>Ac%Pv(hvkzNXeOSlB(-^C%FXN(l;~FX;8Tz9012x zkDtfGfBB&w@yTZ&ym!5xHhXDhm$h+Q{26C;JKPQS+kg6owH^DjSN#vW@pfEs?bf#F zTOBbN6Yty!LE2=X&&_|59w{pNUXl#%m!Hauz);WW1``K!6;y;>EHzf;v*Ee8ycb>% zb~|=Y)sUAdp~V7V5{`v$nyH{KYeeNPAsd*%f^z(xNiStX7I=lQtSWEn%7GLOnD)JI zarITW=GnjSV?X%LANeT&tYHNh+7rIL?8K@2?z+crco+07Yz6nI0H{`@0j6@509!7I zH$jao1B z*OK^S0FojX&VZCec*&g_rxky$8Flucmns%|a+cCoyifH4aJ6@Ufl9LMGY<>cS+)h! zl$@Q8e}y*bMwG>hU^3X2?dWuTJKQiyl4&$^b!;_oO5|HYoSyIOu~Bg>cu{1aW~))~ zX_!3YlLsTvq8Y3*D~88+jbU_Q6|u1+0aja38s94m;%b)=H+5EBI8=t4?x06SAsf`3 zmLyy3BgtpQl;Yb=foL3(=|Su9WT}ueZS+E9_+<=yORBNcpU`P2xvwy}k@ktGk5UV(2Ug3}bvkfeR>D&BW9Zzj9wddU+^Ha5 zWap$@vcjrJHI0lgc`?&Y#wn;u>s(4@IUFjgc8R7))NDu)p;7-WB`SkaiBn&44H=b6 zk)VYyQY4FQxpY!vN7V6alB14ITsE36(`c8!TKOumtZ1(!YKNPkN>}@Va&eVF@ufT0 z-Y_X;s!bUeu?SBAAT$fq8X&Pa<3mfm(@eGMfafN*cC0`27F;;<@4o8?zU=cq0~^O0 z$&97!?0$+`fAB|q@~eLRr*Pt0Tz$RujXSuz|2BB7Oj3-w7Fc&)Bj2dbr8A+TCluQd zn8*z)cCzVNQe)*IsxGwmdZ0iCys=87{Dw?taO95iy{3@#A=W7tTAtpmTjnB2S#v7| zik`_IX5Ct}v@PToDI5Bv&#Jm88rJ>b0v`O!)s;72c*5@Vif)qIRz{_iO#>XW!8=yK z2DX39Hy3f=U+i6R?frlK#>=m{+ThI#fR9&PN~PVqv6S@n-~L_y_KUx8ef;XpRX3n_ zOcnHqW+}|2MWL!sOiHFx6p+@_j!)H3um#X*n&Z-}8kLk{80Bhxipo^c%x#fdPRG4K z2T@wk6e~E3yJC|37F(EjNm~?-QtE^}V+=B*7Lwn=b1+M(+$h*?%VGs**O?Ks+Bcy@ zUL_01BW5KkkefDV0xNDa*jyHq_ssKxfa&A7n0ii*FT4)HU6pezmkfESw=ZDdfpUzr znj}H*LWdyrqK27G=OM?E`Mj%T)u_mC$(>6$IsPD{m%aAougc>`+-0RWFH94^20OBD zz*h@-yttZ;E7~2)xu|qg5{RJ7jhYojPA6kLkC#TPg1lTa+;RtF4%O>XZYw5Pd@?4? z3|Y#To`el1jP7*5EOb@b5iI4n=BEpHE2=tWx2^%V>hBio7{e|$JCU)NeCNc6kcr|H zHUOnoNYR&_lf&n%>NY+{<|OR&j%FH7y8+`M7-a>fjhp;Y05(38KPR6`+I2ZV|Vl^O16$NETs!-WtY?9#QA)gSTDRn+Itw?F* zY#Ip(iH9fZO#C}d?1+U%zhFGKXm#RC!Cb{QW6WOQqgMr9s!`2wRF|k}pZ#ijc^MeN zc9vF9UJc8e#w}Ke>_B%+4eog8ZXBHZ-QWMi4|wl)2Y?xvig@Vb3=WTc{_st2`8&^f zE>><=+~Ozqu-#yF3|qiAXnXL(7?=sIXf>O}sO$tF-I4ynb=6X?di2MOnkn0I5%gGD z)4~n|H|H(LV1SKtk&4$cq;5o;Lr0_w5t*RyNO3PRVj2G#JB)!FKGOcuZ7KtHkMqvS zfCRDXPcOc7zN(C5p>8Q10TGj72KM&tVD|gpusU|?kKXu4@Alm1*|~H6jCaHK37Da8 z;H%hK0t5$?riI9xumw&6qYO?Rj)?5aP0*hP4>(6d8*YK2P2uiGcD4Z>lNlzrj_u5* z-jEfRon|PPysFGQdDNLMUxE z>!leh3b9w%UchP(-Z6J<9D8d#csDkWfAfF(ftUR2&zR(GB@$Ly$W%nt_}_o+U%cBjblKV^|@pcDkWBA2Bf=>KVs85${$XjP?2C0-u zx8>NNel1I(HA)@IHH!D-HUoLW)pF1!cT@9F)qe45ikfOz2o7?hezhW&R70Kw>{LZ) ztJkGIHws*6Y!4baYo-}t7t1|nl1i&dl6)>ek=57Gi2~!U$uO6q0ZOPaY(X#h>m}rp z{Ap5M|5cpDaUiv(_?;^yD9h z+iaNpv%mb`e&08LgY93ry8h{#8L$mHFwfXq0UjkRCub$G3-j!NvLhDGTr1pEb@Iy1 zg-55o4XW966ipx3Gv7>br+1; zjf@@WpgY|uplnM(1@i*wDSnm?*|5Jcj9M2pdJJRZrn#-weI#P%88GY}!$XhZi91i< zaK}CO{`qQ0uovChp*4^;UE*5LME4>dMYWcCy<9xd)e^&| zj#?EN6KN&ooLVWqQ$y=Sjm&9B60g+_aGfee)7I(g=m6j`9v3|eq@biDV?3;=I}?rx zAjOT#$d(*;b%iJ?CfMPmT-^|yqp9?bacDWQddFKUH9Av-EDe&1iM$|>dU+Sg>bzHb z4G#}iYf}?T83jSCmt^y42?$3OxtQZ-m?<+(EVWVxt_p6lCKSkCY-qLbV0bg2HMUei zED=ep)_9l7SzSaQCBU2RppX?|H716Q?5{%+LP0=4o=dPGaq+0brY%8v+5)HeE{bfe z9zb5^xK#mqgU`{y7WXn!yU5!h6wVwoiKw_7l$dnOT8MZsyTC+Dq~JaZ%D6U}UdC|a z@X^*INzj%yRp6*u4+f8st6UTIsrc(%hL$AIdyt_;ViCuCf3K%W^5U{ zD{-}(6D_k&CUP!DU6aP3R4_1sr_^^mgo+A3WjnjK`nA#e=CI%s7naPOH7P?!9m41E^RHU|M7U7_K;t z%df`v02j}rH|&jUNW*r9%~-84cQgmqF;gSt)+8llNIZGAz|!izdrmVS*wGrcbCgmg zav?%RpRKfYjeAq0m#4do|MmuSG@#iq^pjzp9UWM$_xF!)&Ytb(9>Mvuz@cI7mtS_} zO}D(~2Yu+%pZnZfZ@lKFYfoQ!>hk^d-rP4A&z^hJ{rA4=H~#w{|JLt3dd~wm{}=#Z z5AEdY^flZ4HGB)Kad3#eeawe#wcmX%o{o74#@PP2ZX2&6fH0FnRWo+#E^rxOPSdCY zsCftF%QXaHpj4)$nIyW^pw#hX@*9gz)C8P{d4ospSskAHj-U9c7k%<4#g^pZJoko{ z{^1Tn7ZCW65C4SU{jFcdWv6lFwb*X3*{)V=$96U(?089UO9#_cLTKC|^$>kI7&VxY zX{gYBR7p{_nRM~x43yEYHHSEKNdAK_7Rtj)`MM_E5O%q-(N6r0Iyp^zDu@26l`#s> z7+K=8WtbNIoPSX2)P@>R&?q+5z}do6heSy7>kEOX_sTDt$H|E$F0#tU zLPjIEcZC=UkgM-SI4cA=6T5i+YhHFol5vZxsXz!ZaS&lv1Q}kcTvO%8x<| z8XDxNiEeRz! z@G?P^`8sz}%PayVHK0o12#UBMuS~hBS=RfgmuW)8LB{A!{AKP$elg0v90JEK1;c{E zzMPr_W?|h685fWt;ioRxvgBucM+LV9rjKr=4y?klyLf6 zqrN~I2FJ#*#y5S-e|XuKy%?)KT=Oifn!!B;z9_O=!aY@oegMA=))(VsBnYs;CK-uP z{GRe4Ci zfQyG%1K3B~0DF-NmCeorwk^cTG{@Q^0t#V0oC~E%fTUCUM%g0SO{n;=8uT(j z@Pr*PMupD1e<*OBVGS2A;*q;3H_KO-;bojvnl!+Is;&=BWLOR*GV04~F4EvLQ&FJ03M(wO&odr9J6H@IRbPdBEquU_(68NO?@VM(uPWP{k3uDFdf`Yy6?&1GO>@1o`Xb zG)AGB7Pg9kJ35lIR=$!^%EIL+fl3roj#|@_x-wQ;th0HkgthVyjo1QQiu*azf}gT~ zY^WKUQnv&hcece0f;(!*QWvq)UO4T=q|&!1iOdxM(3VReLX>$-+NFJsB1yI6l#T%} zHk5Z$o_4GJ$j2I2D-Z5Qj%3ic=%^J2@3!5j)mzKtNx|&XEsnB#5O4fnUYaD!8GNsP!UMc3Byo*CZd4R-<9A788v18UF!gvV@4M}j`l#QZ$kK3 z3>c7gfUdY}JX7zLD%Kn2XNbiVl5kDrO_x|U;KO3yuC8oKiBScz)d9`CufpFYpo}*f zN-AyyLPQE>l!uZ_z*M$U+|Tzcvrx(saWBH?3v6jKnk8RQ?WiQd(+pJH8O(KUy(<4~ zXaRJU$3w|fHf$nCkh6A%Karx1!m$4aEtN+7U5%fke2yQFT#*R6*1MsS?XiXeCvz8LM}7$X5NKFkW>=iXWqS@_ zGXu?5=GM@+z!U|RR)*_XR>|c=S^^`OdZ?+;>PaYIbMmX;L8{oeF`NA?vi^{>LR24= zA10>*8^>r#S)IVSv(qDQadba*?aROGKY#iQKj~_iqhCZj4?MovUhIb#w;OC{+n=Ux zX4bn;2JhIerp@8OYJa+7ef)Tvt^yjSJsjS%X)pMk&wtf_`QB-o=9Aa1u0HJt^E@A7 zwJv7Jf}6YDo=&^qImh}jrVkVj(_nEmkYI+dY5LrsJ=@_f5~e_S%iDCYCeWQuk7oZ1JyG{qNU&$osuF_D-yB zc*gePA*MBqH6l$RK(#_(0k>-UQH`@La6qN<1t!VoW@}|F0#+{7wUrg^1=kDP=fnqw zcJkQ#5>$aBWEh3-JLVf$aI@aqYKFM(310kTuj)h6iO$CF7eR&0S&=u*(M#Obq?OAM zG(FUD5w$}rE#>DVCriBK>SEz&N-qtf%nA$*o%VOkoRCNPKoGuL16cn{Q8Lt_HX|>-mlJv(v77{4^dJ8MWH3 z-NP}>W);elWCavlAoii3z-Hp$0GTHsD0lTT0G+4@flHM+2Hz->q#~>&!|8uO^?_cP z@nkAQj`kv;uma_Z_>nV`!0FX8$z38s`g1BYS7X=CmO?=Jfnfny62!%s3}gBVkPtF$ zJmYK}j^;)I>N-p$Zf(bO^W0!n1+ zjyMRtXV}vUc3ah7zB}R~ZPkT{08tHUu>tu}+7D?9$4JC4kk_4Mz?3m%M0P^54y;Od zO`PMna%|Cnd3yALd2}Ga zgahOo^X8$#3+5MlW@#Y;XV_({Jg8AtD+oxaB*r3limO_xl!Pn1h*#H|!+_!mQ^T42 zarPm=KK_foW;QcH6hp)K|9ZGp6PS_}GxZd{jRiwrAaazBmJh zL-gj|ddD=q%kh&dOb-8w@BY8O{Y9U*u?d%5J6(0nJcC^tJr+I+wB>At1u!@;6&c8_ znM5BM1(7=7uy`YN`wj-HuC8vXCp;IGrhrr66N{GT=O{=(8GJ2uf?zvzvo$>Omi2}6 zU;o`d_~oDXFR?XTqVKOL7e5`{(I()5haS29h8wUxhHGxc;Q{v6^d2fk4Lz!94#eqN z`X`n|tM4@equLcZT@xh^tfR{SEt?bsymb;4UF2OrA&1j+%8_DD%4uq~6v2r(Rx*9A zfq5)S1e33|ZiW#&G_;uXsbKOpz$5WXRQW09G8W&V?3{d!^xqJkKYw zttl1b@1ANU`h#1{&z=hxA$@lyn>;%O6xV?vx)9PzPD(O1=GoX*AP;tUgYlx$HM6vt z=-f)H&e4{ZwQ#1Sg0zJolCYEzK9QJ~ zZihnuz&lrT(E!Wj>@4n%;g&?QB0Q~6HRRws(mom2Pe>*-DU_5dBr(fXp+oxR@JU@w z@-0g4R0C;XO}oZAeI4F4I6NY}%3h@|+ESyk=&2A^yxR%HE0;Aj3gxbQiZb{je;H|1 zrZ3Imc*4ZJ+cU>gUfoqv1Yps4p0DGR6ZK>o6+CcBmVm%X2Q3>4jji>iS{N;KLrH5v zNQ&k8AX3*-O%sq+OgEWlfqva$f?AM!P*S04(Gbg^A6WdF+$Xy$Qfz@o?#1Tu2hKcn z`iiUOQQ~G;QnDeQ%HM(Jj*i)E!ppz^M_&3_pN{<#xcoHsk5fo`l;9G`^lGI-tK`&$ zG@2&U%(HP%z}ohJu!7?v-Al42F;#p66|H97@*&H35|kn^gcwX8d;}8B;(-%Zz+uND z_wOA(y1C+pUwPHT#BQ#KQ6+46PD}vd5h%CFyYLvY@6y$Ak{FHnr`1_ADN|7ijcR%Bu-v5oS z|K0W0uu?kV$v<`Oz=asY{hEoo4(ntGbjWq_O{8plYr%#k9=^{jF~ zh`JK6$d_pnh4@3%V}>=)RlJ{^-Edt%8|2Z+3E?)F%Ny^t$bGoZ6e|>ic485iE3ivg zl!_`jCfzmM#7=K2)tM~MJsd4(F~9}2wXbl+5KgL;*~?K@BATpQjJ!x@mew_qu{WCM zq_R&$u1;H^>%#bYq3zB~%P<5=jp20t$!d|r8Gxa@ZV=zHDPJ7(@_gq^QC-AAn^I=i z{i^4rLqgND^A1_1aj9yLJIEROUV+8v-YA<;@|Dhf@i;|MDRqh5!d-lzBLwCbX z&jotIpCfiV8M+Zq=4ASkj)wBGVmTzNVV}I*qVQU!4Jy2H;k{!jwaRq;i2+p!W3F*SPNGy#`cTGeJvkC8vw82^eVh7f<=ca)Pd-iVn7yxpO5I?+dv7za z=eC*JdYbzd-kTj<@GCA`Uo%bDp`)+<HEIw z%MSa+i|yD$vtQh9V7>YFz%z#Z> zTd&;Pv4(EGy?pQ3b-tb5p8oeg`tINUb*xY0#_O@!zzoe=_inO?SXfHlUfHmyQ#33^jQEzQ%S07#|QZcFiRgB$w1c5EJeBl_|C&)j?6 z<;Q$(HcgAL|56_xqym8U9)Is+|Ma(h5jWh9_1FWR4vPGnl#OCR<|<(2doOA@&Xml~ zTS*-fOS7h`Gy$<%K0sHyi&B=wALuIa(MHQ6q(7&ZspHh5C?trDv?fD~?CAwJjw?po z>b$j^CqhF<3N~0t@E?DUO-({pP<#N(R1{creX?k7fn;P*WK_!TsAK%mLEz~Zp^!c4 zj~K0i#XWgM5>z@2~OETu6fKtSG*Y)uqOz zBR`}EOET1qyX1fuH-r%iY3~0oU;iC%X>yc@<4;w;=iWPcW@mHID(*@MAtaEDKnO$> zQDh5az=&jn{RLw%UmLLfHMX$<1IB<&un`!6k;p*^1Tr8bqEJA)EA49IY?|Gfop5Jv zIOpwpet&dTb)OOb9qngy?m6#y-|p%PPlc`?>Ock{nCf>;JLFc^AV^!GF8o7ir%}L$ zBrg&cuPY-6Si88cJ#nl|Nb@t8ljLxw4N3nptp)nv5qIW5KnxyQGBn188yGG}=)9QT zkq#^v(2DuST$VZmAS%)dkh}5Pf{xp}qaUygI+5d97&*J)=D?5%86xqxA|8oBPC|9c zK%8!cN5e2`+ayYpg`i1SE@M0(wS4-YDSgAO^1}oZSjP%TwIxvX?We@B?nCksX*JtM zRly_gmqXXoOHT+egHzY#|Np{&1}f~~C(k|Y=4Y_7oP2tnOl2~gQJSd^$}r5pTD}54 zhSWib+H@D9VJUHiZ63`$+_SY%CK9w_+VAjwtw90y`Eh+Aunu#PX_hYkj+Ge{Hegb~ zu&R&=7ao?K?T`8Lul@bk{b*5n9J;?hR~k3OR?8wAl_s>MsDdIO4FayTOaf67Vl*X4 zr5OMf6VXbAs!AcGfS4$@x7;h!rcJm_%NC~hoxS|>4}a12Tt+ut49m?VV} z=ZRu%EjnO|@7!Xc>zU*_i9fq#9fCbF5HoMs-Suux0H6@naQ>3+Ja+4+zxvPK^vfr; zJO!NITdnGTSuB)un=p&jilQR4wlQTU7bXxG3Q(1Rh>3vJAQVv=Scyg3O{0(vo#uH7 z(IS`u)_U`SgImCF{Pi7Q^ieMW3a)=977MHlttbogTIJ!$Ey%Mh(^#w%VWcev6jeTi zlby)w;YkUd)1H)8pTlh>l03lB5EE+^fPJ*7e8v??wG!5(617eTj?CvD!S<8C_B(HR z^{0JOKj6IGcg+{b!XwO9Cn=2=Uh{ST^o>9HLw41zIC2M}e3)BW65mnI{)#~tII3?-|K}c)TKF_cy*Dpf^;5|Sd>4Hv}W__$H zUcVvZl(7N5B)2eTjRZLi#2=dmiM}EdCu1~CUc%RE%C>FWyRwRS2mmJyxlW1y@T+IN~ZN*fnz)IIcf8X+BnhWiT=SY=OUay%S%;rVObP|3QSbN8O&pVPG>v z+%_?Ek2B{W(@3@NA`H4_%R;~zjGBw<_I6h2L_Ui(dqzw9ezX|QGaf(brKd` zxH_sFJOqi=Wb_|z-D#U`Rq^9oGM(ndV$&pZw~qz)X;umqsap!ASTa7~o8 zFe%<9X6tszhVJPpDB%*g{6v(cH^k7+3S)%Zd1I)*??Ol~VQ)^`sC+S`JGw8@+_hLS zjnaa2q?&q_K#*O+(K8Q-2wYNudCGzMs^qUy`Le}UugGByj9Zgj45iO2CzYdRX6{k} z1-Y{+8v!XkawoVt{WB6TK%PcUfEp^e-EFMAGAE;l5?#Yh~2gm%ynHYTPQ zSBtI%;y|S}R+9AuXmp$9dJlEUfI%7+>5ofW(wpss>al@OI9Q;3F{E9FkPkx0-4f>= ztpC^*2L)K*BIM%UQBa2zv}% z5GUF))^SLzWltyPu~=(`|9DL1BB<@AXw>q6%~(}T8+hWO1M~d9-}k;h{Mnzltc$z$ zmzVeEl~^rmD~fJZBZ;{sg&>uNwqLS{fhL3))o8UXxGyJFV|(a|+^@Dt z%e%JsKfvWJCl5XO*xmo_cmMccS=#;Y!8}73sKgxJb^Av~HXau_sXCh8;Y3AA-VRkG z!A`9LRYD|l?ZyOVn@xNA92B+*k3NW<$NuX({`9^#|Jp*!-OK$`^DGOSwl*u5L|M@c zq|qTOVO8iGj?@H{D$uIIoKifGC{kr2Oh^?PIMQ^ldx(0p=H{3fKUvqHkzTHg&x@2RYb%W zB)0oEJLr%%c)JTi*o(Hg&b6}mz#3PSBAW;1d5L4!;mFfI?=wF2OaA`Xugkuq4QVe0 z>I?xES|Bt5SpWA={NVTh+|S8V4`O!@Q-KtR7pkthI|T&^DxhxfG7Jp#mP(DJ9ZV0( zZPZbjwn{|qiP^9Y&X7^SBLjJJX`K1nK`z$SenT>OG3wCS5B{yMa_wPhO@d3$glGsL zhM^*y@HYFlQY|Q%;Lj&+KwOYmd6Y^gS1h)rlKmv@x z!@t7hb;>jfYrk9WV|2M_gUO>3%&+%(6Kw51$2h{6sR$$3hNOZ1u`XqucO!1tu226b z=a>qxb4Vz$>;l5kyf$@H;;XiNjK#&!CM52lh+VnE{=@b-9aLyM8!%rf3xmk@lQ-AE z+mP=c?H9ucx{c$oCiE5X9{k5uIraPVJ>yL1r)>J-*>?a1E1{T7igcY zMsSzoUZ`}fWY`>xA*H}>znh?%d7`Q@2#ZJTES~87t!jvC(>qO0)II)j88VWZ%EH$s z={w}a8!u+e1`()kV#&5Gvf=xPc4(;eZV(#h)xMVwgJ^Yqlvyz8W+2P^QvS1Vsj!c& zOD_gG2OYc34sqoWOdYc~NeN%vAYfMw*2yS&4SS>^w{Riy+OAyCPi2>2S)Xs_1UPsX zaPf1LJcc(02OaD3Gg3WQEos%vu*BKPBmE_ahS5$BOaerZW(dTlPe@t&t+P_bTtn-l>=`SZW*_kZQ*#wh$1%i8v&X_Nz1 zut0XO`qWSR;&;5|*KzVz95@725Pm52T4fHpY^IF#C(%O*IsOdtCI95Ar4#7AK0>$V z{nN8@77Cap;}QoaBO;Oggv%H?!cq!5KMdq_W6)H2T|x`WLaOqqQ)QE<&pfqQlm}OP zoadrbA=X!SF` z^ef-?hS%fhwK#q?c6P9_5M6k4(l#kGFY3!gT$YypEz1;=m|Q0zn7HD^y^!?Lnb*)l zl%xk}vNE2z_r!<2^snCgr?(Wjf8O6GgcK-PjZEHG@dPN(jYT zH&kr~h2jd(DNdnKj0LdPG*vL|+qFlI90OkPs#o9nyT5^(ZWk%6%_5Aa7EmZ&!|Y;i z9TjDvb7~<+gj{1n4jh}uZ6?vuu628Xs%u$4#xYp2ALWr& zILjZnZb#No5aYx>0z=J(v)(Yyv}IvTh5-!1jtuG#Ihi%su%2NXQzdCb^XCa32G!_u z&oFgYLBkC(#I@Te4IgG1g5&3gJrbp~Qkjg3#wEWtOqExiY8+c26%*G~Cdgr45fu9p#+q9kck0ZyT;4jh&~1wQdEB1RICz5c`& zGaEbLN}zvc{2kGgPb(y!Aq^A+ujF&>ah#^KpI zNOfoCxSI@t9OwV6Lg5gaO>G-iQ=~sy#1??UxWL{{J%7(veABo6{;&L8oKl&pn|KX5N%deNKo`%gW)G8J3P+6p(WS}fl#^aUVa-KHT7?OlVS(>D(36CQ6 zSElKt4ahu6!q_E(Ko2rJR1nQ%wNtDySX#|o#kJOC!)mT~&MjLTz_i#XeC+O%PrLcT zg$sv^p0a(^l}u`|3YwT1O;AOkN;EOGrukNm&Xf}Sj?DuFr1#Y_Si{A%Hd6}32%^q{ zYK{9R1@`Oe?#mZ0ivIpD{_GF^`tRw*C-Be*ar78C5fyVqtu7R<0R$jwl49hyoOmRr zQs=ZlX+Ljuo%tm>&;)`apg`3Xpo9s(c!p>0{lf3~{xf&{`N<;hyL4%%iqOnhZ8iqV zYcFO*U7JU(R8gUj0-?b`Y06X~Vo+0I|e{@w+%_q_Sn zKl0UIS|0fT0n`es5Q~CCK$Pvr&JWRz3K5Gz24d69BjRf5=X1~iN$RZe4J(ss)7M11 zonrW(A*2x<#1N*17mXymBi1wOsgteufoLY11gxs+P0u}d`qZZAV`nddRjr1W5(1pA zSoj<&s>rK9?xXI0_+jjvlQR#=)>Wtmt&qAF`xAh|2GLT1BTNHAGayrZ7|=g^wO$g! z=Lpvf7@}9~!}FJffD@hJGvwT!rQ_+jahcP&-9M5xdAD5pu0Y11GJBS+5mEx2_;0hI zi(v#~>0SE;^3m8E;KEx&^(oLqI}SW$+^T7_HYBH2^k7P(4jO7wGBt6*b(E+0;^ZP1_YbxKDXoKv~5dy+k_{3`jtYbz! z=(f(vKAGD5-*A}o+8m+uxeNQ9!_0dS!KAB&WLpQQjQTzLbe!LkZQ7zMB(gYJ?+1hn zl)ykj#1iO_p~-Oyp*~X3q|LoWkC_r4M&JqqB%uNGbxxdNZy^rl$w@u2Fkzuh!T)Z60D*K)bRI=?h?}ehdzF zL|EJdv4qZf(oL!ojl~#~8=-EPV@pero@oQQYcfMJ zR3Z6;7(BKXlNiR}BMghnJiccfKb+eeDRte_G#RdmGUNU&1-zENh-ot8RUfhhOj5)~ zu}+*!r%D%}aY0=R)FN6hU&4h)|M9>5kN@?%zTE&tUEl57S&IOSBI0XOaq;~5V>et2 zIfNru$>tUb6ku);viL^5ag{R|-1G10y5}OszvF0gU2@hvwii*Ej`fo(lHZ!V42EoN zWizl5ghhxO5XTXQQ-LsV>%?) z_J4ls|M|zSe8rPko}On}v51NSuxuvvn`D54}|7oPJ)?Bz`W*YXE| z7#Xo7Aymss>(c7e^}tn=-THB#{^*~-4Oc&xx(_M7Ju$@@u>=TH!W`@sd^j?n_&>SD zGwoN>ux5kEfz&NBmmvdTXKT0U@g9RgN#SZ*qIa@ydMu#xSbHr13hLZj3Qh}fh0~8> zb@{jd^iMzYV_rJwXz!_ZrHzOnPD4iLcXm%4Is`0m<8vSe%#bM_Enr|)4ChNG0XzGp z#ulJ$=85x48*=Z3z5_;`gQD70WJt zB3HDcf`B*-sc0wIEt< z1fRSAsomx}Pll?Lam=C7Z5`YA9cpNvT%f-VdvwJzibg=D=EEcc>~bgTBW%Bl7({2S z@H5v$H3F$3Ya|`5PaCk?aq&_yjUhD_ZRH*eA#r-b6R-^{D%QJSrX*^B$ZULvH8a|T zEbR$X-ZKLrF_m@HeUc7w4j|tHtIy z(maRl?Jq54I8FOt)D4|Q8ucWC1lh_4Ly-W`yL!3eXc-~#lu^?o`KrNrf?P9yFUiK~ ziDK9{EUrGT&=*-_*U1u&vc=;1s)afpl!Wt@SC|YDj-I&-eTU3P0hl|*m=4UaK^Z-+rK z59lA6WpIJ15t`yG#4r8s?;gAQgvcRWbsYdpK(xO$CYFLy0Yec?(xc;EK}a6}LN^h; zTNwfdIXH{YlLF4?X>JGmD#LkU;}g5d%oI}+0i6>deQa$7g=+(r!7}UcXr^Gmm$EGQ z=-sk)^zQfn)eO6Txwo^WGZrK&j5PIRs!{}W3qT41vleTmr34B^=;2B+D{x#+02Ch> zg+hpTy%&g36s*p;HZMhZQFlMMxBIjsN6#(KV)L*)aW4)YfB>a<8?;UbbWNKqfaJK4 zO(ks1*A>raYD79ZlQXEAHQ#~)%mUqj6`XyXdzXLleRqD-D_?%^a{I~Esv2!lYX*Q& zGq&u65y3dapb3bD4Ee&e9Dzqf0SGDDx~vIf2F-^cK@$=Nk_uBSx!T~gX*ji7o;KX^ z$G^LE%d>d;9xNt+m=oowblo+wH#*-+jL~gsT#F1+B5P{9z%fd&oY}1Zu!(ld{d%l1 zSvo8ogCYBWL5YS5GDr#Z=eC=t7e|S<{;ghLq;;je@tN4T>a$+`C#Pd=tL9`YD5&bU z%AL^d{yEJegUkf$paokv>#e5CnD?DG-e5CTzYVjYLnzwgG~(I`8AosWD>S13Qhc(W9}6ci6k1G)p>qds*41u&)tg`h zWpZ`gatFg>K*kvU%vo`aS_xDaXV3Ae5B|rW`swfffB&gC)u(}gYX%+6^zRBXef#(P z;1_?^t8n-RUVBr+2VjM@D#=z#9?Qo-8@V?WAyrw0h0qlihkH0{W&TPcnHvOb3nyW- zed5CrY?;&R`ZqZLk1;GGwrI3)GduI;gI z&YX2_-d5YrSw)m>YrX<=h%h}pkYsPa5!67@3Q8pa6Enb+M$k-*A|OZ!$AthzTFjfW z0vAhePdK%=QrOPk*>dOz?td>93qeIupomPNC?sebG|}k3lA63NO#?=$hY>){Rdnj- zpf%$^1vp_LC@NF6k3~v*T!IicfSd6UBng&n43%P?`SxlRP$5;ERi@WZ4FR;RsXHYgA_DKPa z5~0CCA9c-R!8|hR^Dxg600Po4Za;6Ir^1)i6=9EkwFcwc!g7*!5tNtL2}hHSbI2ey`H%JfBpCGf6hmKqQ?QHV*S;D2f`;*fV5ILU)nf$ z5RcuX2ex1{WQy<&A_pRa%1x4{q6-pn&@B#Nba+048TUpH^%?Fl z+36!`LRfQ5v()mGq5`gJp zGp5_Tz!u1FKOhDh5RvbulDxW|VZ-6S9TiXpkW$9_+Q$S&UFPqtuXk?R$omL}jHesh zz_sWFd<{2P5+XS~GJ_KHb>E25c_wvq%DfKeGLFH1x@h$PLuiw>>dsZ^cZPf>hh=P4gD#~hALQt`zU*r+KR;v!7N7GKU;n+|@h!Oe*>dcppT(2yM`*s0QHSNo+dDxt)?(Pb z-BhYXphANBBUfOkz42e66Qn(fvUc7r21V}+HYgk?HQnTl{&SL-ExMMJiC`6mpqDE4 z_pvL8oLIP6N6aqqwL`wu10JGLds0h`HYOPCI-MgIkfxDkNee|Yh;=#LUrF9l3=CF1l zIGqmS?z59HD=Hb~g@Y}Z1pOR@u>k@BAyibrL`-n`BKM#Ag}?fnSKj{YJNGVKT&-qu z1JjDF_0in6N<+m|1r&jah=?O1kOC>KY}}Kuq{naC=3YSA=mNlK0LbW?E)=yw5f@!( z%cD>hlW;MwYbZ(9Q{tJp@CDDlK3_B?-lt&@G6AjNoQT z(z=^Uc7^ZXs^6y!sya{635H^@Bzuwt4Ngkg94!hs_P?7sKNv^5|EI6`nxF`k(f`xm7xT}BB* z#kDa9Ab^Pd2{-7u3Yo`tj>BeBE8Xj<@4D;Kt$Yhz92&Thl_2*lwRuo1mr_Zqy;Qm3mB^{*8LM1X-Qi zM<;PYFk)B(l7S7;z-BI5!lC*sS_su5GY}e~XMp-E72}YQkpxr&L3B_lElAxcphME2 zS*`{$HH5THNy177`2(4VBT`2o=_N;qtuasL7Sb#>``)4@it+TK;GrhKB_X)Qy+T(> zXdH%UG0keIt-KZJl_Zot2&a+yO`MvskK4~27|!ZS2_a%20=<%rt}zMsdO*5*njrjv;bBA;g`H`pwLlauku4q)zWBtM_D}Rr(Agx2VFs?5Prr@ymLTo}r0YAH2dv|&FtLo~?t=}D z;L3e)?%U@jo<*$5aPIRq@eH_=G`j(sUo3zsE;O1w!y zZh7z8AY=TgRflg=j@Ha=+L+*+97&hKT#MxPoKUxQaR=h@2X6lKFaD~JeeoTryBoIJ zT^Xsm2hN}pMNEiRal!^#4TMPON;mL~1#arVXsrasr$o}%*dmUp)y&}e11ij=5=tda z3OG|pF+p9Os`YBf-4EZhdGZ9FdO)FAEdf!@*phT^&pG#{8FZR!(XqlR&=Lnd(3aaG ziZ6mmq^@xGp>O}iH-64XJ^$3+?p|3)X^Est*TNn#V>E_oZcT&sB#Z(xqZkwdBLNc% zO+dDy{#uUlESq1KS(Y%=u>(a48J1J3@au0XDF4!ElLHAWoc740rJ+<^gCU+08lruY#L1SI zZHZGS>L8f;s)*fyp&qLZcOKZatzYhtWMJHJBAw;p9nm>?Eca-`P;@wJ84c%LSmSV>%<0n4r^-B zb*8Vc4EKSvQ(82ST?W~cft@T0D2zRE&7cDUZ2M(h`Nf;YmJx!7gpD3aoR_8Z6Y2t4 z|H5z=8x}R$r6ExbfT$K0v{m?I`fU9Xt)EoKwWHb%(3wKTWX&`)8D^6; zItaTGXEZ-$-g=lR24UzQM_wt05_1fP+XY@dw4lAR2IE5zKG+ysVJh)3McrJr2PsfH zs3p3*wU^~dVIjB7@gUIuy3gvQ9&!u)D9xb+1vV6Wpoi#O>@(Lia&lbVRBh+Lm{-~= zgxio+Pkm81OfTP${ED@oXpSF!DH-cNy2lyz&>;>~fii)__Sv%i#IL;d4?p*npMdf4 zMre1%VwQc7E8xJf8|$UVaPoF+Zh$iY?**y^i#x;X&Q>Mw zDy^j5gkmzGR556UDMX2_Y4NND&SG(+OgM4`M{foUtU;^T6Umfr`X05B&UxUG7Xd4z zu4T!`@K8St5kOt&v^sV7M}N_m{NWp4|0w43ySs`4rHByJ3QSPdd`?Kx$71OqQGi?BY?G8;98K5hjiqyr-S$WImp(XT|=`ap# z;;QQ~567UU7>?XabPjaBLTKsGPDo{lKn4kD0LYc+l>4`Xs%a+4*sanSP)BN7#7NSG zZZebyrDuvYz5<~N6O`6HPsDRk0y9}CO{D@>xcwM*&b;m2?|u0TUx2^ml>->WFur)n z%Rlp-Z~qinEVmO zJ(C6&jW?VigEOERwiwj@8b8Ox%{m)2&QYKOlc0)kV_kzw5mD-V5_j&c+mrE-Mj@nI zylA-%f|+CsOWp3%MI$sumzNAaHn)v#I@=c0WVUV!2ZNjI?y+X`mQ5nV1Y_^G2IuFn zyIUJPFMYYQ-C-K_*iJfHSqwx(X8ecXw?ufupBlHyJCF40z*l_LF_1|C9d0WlQ4-M% zOvYr5DAWC?LYgQ-Xf1WuKS87cvEw*#4MQheQFxMjy5kyoG zARH&c+bMGh*k@dPT$BcZ+IK2_{9VMu+jiG$@Nq4d2J6@eqCw{`9Ydu7Y5NJk3+1YP3UxFPFsXG^O-Se=e;1Zy#ONS{n#F-H=9@fr< zB?i+t+)vKd7y-Ka!x%3aR7$s4HV`nrZGULqYIt1AOINi?c}2;!E6@T=uA|cHLuf67 zq%nhu7NFRp5B&Y_`!87Fp3B=C8@g}vYTlnkXKJC$td%sQ!ALWh2`exI^DK3)pb>Sh zW=28{rB-1Tk_POqY`LlS>my1-HBru_K!mzrDO#!k5V1+v z&KusTdw+dt2i4wl`8+OP!lg6N>PI7I3rN6wHzQ1%gvCm-$CC6kU4F$8e!-Ct1*ljo z>Z4EK(4k-Y-~aQ>s&3ci24n(?iJBFosOaoxZh;VG>_0V#i3$~~6=suaz$7-?WL)hn zckABy<=*aUf1b^jd&_0rucj&!AQS~;Rjf{BNu>cR(!|<#X~`f^F^Ehm*t9xTP_aRI ze1Ca0>KFX;e=57@Q3WI{v#E{QS}v3olQ+He6`zSSrwRd6U4b={5)f}(DClLc**#_q z55xR|jEf`O*Ipwq1}I~xeI)BqiTnvehiE1r0wlFt3H-dL_A7y(X^=s>T)V7vU}#hc z9q3DsK8*3tA(I_NHFT(x20b-Y4+%GP+jN?S?uzL+A{@8Og_dK>t_&8{&0Oq|bakCY zK8RY3h?jSV6CRawL#OfExb;|HEkO`hATpRa0Em_Y2qO-!w?V*wngh-#ZQ_lfU|aVL zS!y8frr77fC^HZOhb$apDbv05x{vs(y-Dv~GA|Ssyh$;Fg&ON}urg`vm?McW3I{?l z8b~sa9L=;<(uDq@uTcPCwo0dfa12ja0vsad-sq6B;Q%JVh6!$bZuop5Er>dbHrsv> zgCa|8$JlVYxeZ4%B+rdZiPT>OQir`hVf9BJt51MKxOxoAwreD!s_5FYJFLMp2ttg_ z*RXzEOJiB&hDExMyY?*Uz*j;xMygFy3%*qCYPX5#nkyMl58*R3V%A|_tR}V7R(YM-6($3)9-;I_ z8}1?r<8trOpdx!iH>|zK9p|Qz9U=#HVO~s&jg1L*ZhuF)*q>*ebfKt~5ZRm-b6tV0 z84xP8kWdv80ty>dK#71Ut6|o~7V52An?L+Zzy5E(_zUIQXLDl%^U9t44Bm6p$#9{g zbPLf}a6BY6c%c26g4sL-5A%q=9*@3OVODkU3Uu|v3Tp+7jA!=4di+~Uj zLpx$1!Y-5;yZ{gyMT9~%HQLDon}_y!^`S#JcnywSqg+O$kAAX&C$XysN-Q|4ZB#JB z)H3)X>^*B2@00gjMKcx#7cVt-3K8>l#7ao+5he z*jg;y;mD9|q4Y2Mrcz!x42e$MS7`FITnII*5n6V7r-rwvZvhCeV(O|7feHr5r~}CB z!yL4wMBM=fl|CBuB>On6lsghdMjja~_?jd~s4>i$VrbmQZp1TkjDQwnEMEeC^bEr~ z-(uvJfdP^UB%@>5gmg@COGF04i|$G(H4nQ=Pe_s1=a$yq6ShH=j6x1Zv?0~ew@fwY zqs&B8aDGQ_q3g!{+sIMfMh}@545zbYI{}9G*g8%o0&!I!-LLQ&4_tQz*zQCQ`X>ik z@Fy}DA>m6~aQ+(0_;g$yL2%>kAw1S`2}dIlgv<>eYmC^4k|P+{0wd?OJA|C~p(I$0 zTLB$2NfZ^>Fdk$^qYq*DJjEMs={Z2{_Ja=JQ~ZKX5-Kvq8#0hSmq)sg_k)TANZ5@? zX04;2t_9jy*eTG(A=3yW85?B~BC$UHWco3UmHM;;+<{{G5!v}H$JUrBAAyMRXUkz% zB4N+^l?dt099(c$f;pd59tj+g#lEK}Q*1f++@Ct|TVvO(@sMzG{HTGXb`n{JwT`}E zN!T`PgiS)E3sVnfE6I?!D=FD{hAr9@lXa01&%5Ok=kM3pBc0w*!Hl(-Hc=}soyUd8 zfAS4)_?j>N0-&Fe&A)AV35a`H`q)!vZ#;P&77JYWj2?$z42)s7`Wtm4k)#-HaOz63 zE2Azup>W64v#>u7gW&g>vfsZaK;q@+d5@+g(LX?yVuWHAXoWzi-r}s9C`j=>-0c8| z#-C^=L^n33<^6Yl>No%M*Z<&mKeV^g0?MRNEwFcQF5P*g9cF9Bf@*cr!dZ%l6i&c` zn@6_F7H|+|m_Ss_o1zLcOfzr}IKSMvXsb!fVwM@s9ie7Y}~#%eahec%D2Da^?cg%v06GOH;Ps1k)(l7JEx>F&$7%>V|3M#VK4=?JaXsl zfA2Ma@%q=_z1-io8N`ORaRDHON=@;lOBjLX8kmr#r5ZP_UYdFHv17*|o4{q_f#vR* z3+L~?<6c|n!RgTRpZTI4JDL{w*77FMs|g>(gI|YPww*QqZFkMixo3OQMUzuo#T{^q^z@E8fhXff&Yeiz|4*9q&P{L1b^qbN7Ab zYhL@?KmR|v^sVWrwO4!cOim&%`qWpy`wxCYuDXpAMZi*qhce1V*rzjMAir!)t9C2w zT4?<=l?E1NxF$7No84G5BdP16F;RnP7A~&DpG9D`o2N8JiDbGEi4$Bf(y%Moq#mN9 zS`Yalv`|yCrLzYDgRNO^4v!c#qz=ZYFUdd=i866P&q60BNY<}MEV+ag&eJUS&=JBO<2iiXq&Na^cq{w6Jadsa44O=>X1 zZ6O*XSvrzoOcsu3sDhhr8@yrhy7P9&Jm?X@C6dcObPH|vCVOj+XpG?)tqmyodwf3% zHu^MLpsslWhA!>t!?hobagJPWU)?cdFgluXhwjYfO2>hGDKiW$+_Z+Dc@fcNL1Z>0 zoZWGbV|HcWAi08)BcE{CAw5DX33j)tk2t9uiyt ze(P=Tc-;^D$UEQkYby#?JHRH69zSy3O<(mb-||&o{>9HcwAe*Gy|hd7-sUt}tp!qP z0xe>55hdDj8`Az46*`1jEfk~KLiEtVgI7VXJ#rkoz>T+HUV0!PDVZ)zkLjd95y&F) zu+!^{9SafA?c7DIE^MzZJY?9}-=$8~RvWzqIP*b`<*haT0cuNH69V0pc{01{;K3WP zaRK<*xBkiZeaF9g0Gj2H@)3U-&uUe0;fL<%+hDVp1)S zd;viSNYbQLS5*2IE-$1g!X2BQe_(3|xIqLrJ`WI4vPOeHWvJCwVz*sOEQ9ZW!M;<|G~bF63Jd0B=ibfGuld~YKmb3 zz1)saENr!pC-3?APx-vJzU5aZgV99w|APPF;4=0if9xlH!Jq!&Z|IHBwNz-5`+S7#8_&GPh)G2$XYoCG|co-2-vB?C-JpOE^lwA=k6 zQ<`xBjUXUeuFQt6aq$qq&pda2h@fFdJu=)p7ifrcb*_ka9fS~Q_9(OZA^Qom(vibx zXwuwdW?-OOd)9~(+66L>UmUM@Y;y&i2&LB+G&yALC2QffkszHV#w{h{=%}NeAq<_! zL1LkM$wq>xAspZjvc98IS{dw(w{>M9u{U{bR_GV_OM{>MJgqema%Kw-7zNnN{I2*s zr^<3YL;XePFvPc>l!=dJbfmNiY9NHf5v+m z1DVMs0&uX$nKY0AGNuefNC07vv#=x=A$8UmdF?4qM3htW_=I~X8M6mo1~Tt_t{!!*XwwO0qR2QvK{cH7V; zKW`N?0)~Y^S4RWHZP0tH%Hy2xu zotFlKAqY@{U~hJsTM)b}NdlP47Ej&rpMLE(zy8&)y7Tf=8;h;|N{B9eFQEtx>TQ46 z{H12kRLQE)l~gg@eDL5kC=bu|TfXgI{OW)EVc9q829BOATZe_!ibzqE%{o(`I%j)l zU^~ZeedfC#xc7wN9O@H0ds`b=wSGc|mRV_$ep1?DPD-IdX##C0T?si;4{mNgTjkI# z&#R{&!wt{CY9A(;LXB&I%~;OZ-p2k#pknI)4jjYgK`bU<)>>OiXK1$Fd8MntM$go` zN$}oIdH^vYY`~Cd1l$~?chSv}^Z@O+M58`P2`hq{Vlvu0X&sry4~t1HS|-$o?mT|o zGtNGKpEB*>-~J*Et+6W#faibAC*AqyZLng z{S29*tiXRak|5JrX+AQ^ADX3QZ(1WAk6Yz=y6I2_9$;j67@`3c>^*N@=h}4Z&o#h&hP%6mYn5v8O zD3a?hNkT>OSc|EN3>8W_5q7KOq8j8K`8h4DWf4a{Za~Y4EjciJ_5et9f$%4t6ZjC? z**jw+g`rGh0<6s>B7&Mhm)N_LD9SSl=48d7_(rBlkg5rfl5i1|W*iyTd=;42#wQLt~a%_4U@cK6!UY&LmQJAV!Lfz;~f_>_Y&^D z`*Rexj^DUCbM`wvdGGXXgWY?3YmG2*P={*~~h zTf|6W$yDbj@3XDrU;XM=JpwV^*pK*c%aSxIwN{*@5G<{jLd9rgFLDA&-&=|ryhB_$PfI^ z@7|>4y3NIo6tP(|3J&KG@1ZI}b*N<>K8e-+<@W9h_<#Px_hNMklV|_E4yY)sLML2! z@*}?FbARlQ{_wV!eX`JS?i3#X08ZV3Cm*xr3M8fyhZChej{hK?Zy9;5cFe_ycN^!o z>wAK9Y@AQ8M(~#5u~JP@XkRy1ec7&F#*jyJvBQVN8Z7oxwSftttQ!IdtKg;&KY#ks zV^=@(GUy=w|MC)1q4*Zwiue54Tc7!okK?KLl|u_3%$gyImJ?$zSja;U31|e-o0esmZ}FjOV9=bw8004VLz{N(>B{Pw zU$g67s@IPcKV zk-HY+>~zHj3`B66VLrwvq+b@(cWUHs(+vnuOo`Hp;yhP{gseK~vBpJhU?Yr{aMFZ< zqZ;m#wLWPn8a`7Uzysa7b?+z!lkDoiKpm_q07VUqm#`MG^crdwa9HRD4$i~fGzYEn zB_S^ocW~!3QZX__auvfayMPSdrPswxaO3Tf6;JvhE zkhjz(jkg$?N`!1%ufJFuJmdPF0Z3qn7#oMn1}w-JUKtjv7v6B~%ry*HGu2RXTAxlV zWzN{*SU0pr0VP;}h**zBrHny%T*Uef+lotdYnm|b3W(mzWU2v^JUMw{`l34jYGh*U->!r{pp|My6dpo0}B?4 zS|J9ONfz@X@B7)mc;{!l%Q90S!M>clP*fT!jUGI7OjYkeV zwqLioLakKYsA3ZVp+J~qC5$VeQdB5K0A23Sw;esQ*qd)SusL7zbd&|89a1h1amL1Z zYYTeC`li5!Of^eG!UU7z)LlRM7w>${OJ49ddpkw8XiHTzeJC;{8NFz!ZJtKaV#X!w z(+(Wo0DtILe(OK{y)VORg&Us^Y+`wNb8};9hDo>z&=b$qxkAKHaAXrtZR5;+|Lk?I z|94;cnhz{@t1e{TuhgQXwCYO<>qKI(7l4o=0+iKUZ#i_}k?sAL9zBHXZ*%^f6w;dO zK^6As!`FZ0OHcjfADjn{0Q#*Q89Ps&!gbHaMgeEApe8bgGh_*dhc-w+ zfv)F+_=$ofqQJh^!=j{#>BUIHPu8Z87muttaGiwp{7~u*7j-%(J7M6cyx5UmATIxA zJui)bCGBs<7?NEj)>*G8>&P2Q_k|qUCJIgNl^!NQ&>uFCH-M1a=&1N2eX@P$cQ7*s zwCP5qxA1A3fJZ8iYnBippB*z#=cA?11Rca=j2yCd&rb2!e4Q^2tJ|3=9K?PSFyha+ zvO_m?l+lgAAmnC)Q`0V$*v?qq_?Inw(2sIruYzbW{%1?jqTi-k?xEY)f*62#jM?ik;jlcGdU-J1l zd;^Z3gb@p(5?p#?$gV^N>x)rxQ%j;VQfeQK78Yqy*7U|Yqo+-3VFmBQ9Vvxe!3@I`R`;=zK)&OdU2c6$F3q!5JJOl&~eif%|Y+uu$& zsGLK@~7VO=Qw=h;;JL7Rh6>Ih06Xu+Xg<{K#9$TZR-XFHe)I+ zsW{D*r|3bT zpVd4~6D&+vxVyxG1|rp7pW?)pX*_=2voD-`1lK+bHoGtC zA{@&EUa7-J<$=)EuEt}(+!dCqF?Lp{%P^gGfkyt;U7(>edY?O-GPzGT?~^Xan4SfC z8KHSZCIONGNcViq?lwH*)-Xf z-G3TaaLw70A!;6i)G?WMcg==}wqQR)Ij%h=Wq1st$5M?soy@Cd^m=Vy+n#-X??3n{gOZ=o~a)XI7^1c38VCW#33qMA6a^x})HmRM}`MF%qRq0g^ zW?myMo{Y<^m6GAPA2KftOMrpkK3V!KvN1W))%37b@hkQZd(vtQq7P_Bf{(j6(g~8= zA=Z$$^hBqmJy=t{ov<9BC(_Cee~NZjq-%C`O`W6avJk{cUFQ+*@S@wTShXx@Z5;i)3ZO~p%1)Aq!ro@MhnSEvLY5z!G<;Er{DN1U-OzTwBxtn(2?McVXIljV0>z0 ztKT$rncGPX8zhoZExp4>}kyIbbwB#Rl#gx%ePCy(yj zcR%Kf0ABu$|M-Xh)Av2|;9?fJ2%K5&a#@#TRW2Y0wLJI0p_@MH6;J)md*!;D0b`5O ziB1MiTAz3l$2TrLcIuAh_Nq2RL!+oyg+ioZ?bd2W+&(IVRLW|u*Bm%>VzIdH;LX^5 zQf_z_rHX8bm`%jocyEGLkgBbgCjf-Qkw*3fc6V_0zL$LV7ys68zG0j5>E#|cYuS+f zS*FIq%37gn%2JETEG#S#h|nhTh66_{=36!n;NVFdy$-10j1{q%9C)RWcGH_7y-{Bg zm6+5~7Y)jd#ewAm@BQxI{Ee^s?9YB=cXy@{5Euxmwn4Jw~VDhw^=z^S~QwzoyGe1dnUSe8^Ko-RwKaIW1f3th`+O0zm zUcQJ)1WE&GMWsPe$6$_n3Y4vdfz472518G2=-5kN@#*)!y1V z20F6zoa~w-o^m zGmDPcw4Eh%I$)CIoROq%n&~P9<7C@~GK{~ibqQ$GC5EfQ8*#7%aODPPi|0bckUVPz=bKf;85+B4Iw5MMeQd zVqnJ)>s5k%1$6z-VNvpi$vL*_BAU(CD*zuAlLk^U3?*hOT|hn&jj{j+m$ql{(6Gkwf0 z-qSeSjR!mh#;CzcwnXqyXJT(A5p!WDYGc7r#Ua??$&NMv!$d5uPEOTXNt@J? zQ7S5>Bk!n%^XuClai5n2L4%QcU@7Ln&`0@kdt9$79>e)L9qW0UhLD&BQim%uj4?2w zzg1rdkBH_zwq;~ea#ozv72$|Fkr*Zr%d1! z*PgC&gLH;Y3ap>hF*2KAO;vT65F6If8MqxVY_L|YLoSM< z0DC)ke*p8&=l;Ln{RH{jKk{D}hsyn{{X4cVow~HWT-6zng)UGa*sC^!x^)0HQ(Gf_ zf&{H9Dg<@^$kU&55ZIfmuowwL>mJ_@U}LNA^mU6}07eqk=34B!h5oDW|6%MtGTr(- zstJs%6)REawiiQf)tpj85s7LOm{f(SGiqJpz?NR~?7#f&H-6kFyz012#}}Knw6Zr> zfm8ruG;4j?XYasgVyrNlnXN=0-`hQj>BV3ATDfob@%S&3Ha?F`ktruF2DAN{tM4Ofd}uHSG(9+U>3-RfmpVYi)3u;3jE_M z5^4&eTJ=NaJle3NA@5n=xU!WXi-GhLky^c6+J&ZSB!zqk1~qjm5_`805(=>5`kQd* z=*^2G=P&J6K#DZImr%S9B$b5e2I}J%P75bJbDu5><|S%z%Yx86EvC^#Qu1Ewc*B5T zt!@tbexA%?4R9wl>e>KDLmzr(+=eHe-0?}nVM(zpcp5+jMsy`zv*jZYcknQCl3YNb z2F~+Y1X){9xt&tdjCDm1hPJun_EQYa@{tz=ot=#FU+dE2;jj!q!WSZKK;jvRl)eQx z^dF{$H6%9>5nM-S;~uw^AbX%XOU$Za;v+6htZ6MtJ`X6Y>Dw5<=usZ4pU}B|<;FMc zT*Am^VkGUmK-z9q=@*a24(Kgn8;@zEWdO7TH1m4R*#!>qZz3tgkh_jUBF7@b4-rwz zHIZXq1@{o*xEli`y7nXH*azQ>Ry1SF9qN&t;^}rIh)I0`?Ze8?n;~yZAn|O!105zN zwCcQ?{bh%8n)Xop5Ye(o-y}K4iq$U0>dI6G>}9E8VFSVuZ0S0CygztUV=W=RVK>RlA+gxjqFp8fwSlfy@*xpwz{5pn6w=@tk zBE@d<+gS5}x{PYOKb_AGE$P}e{goJVI=&1_=Atv_5`Riw2IsEEDuSLJ%2eY(<8?49 zk-G@pkuSMINimdQ3hIypk-=VCFtB6-h_G;Jd;p>G{lgqmuv0R|6`}ENbO=&Z%mB!I z=AlA)|EW8+k_f})x!Td|0TiOh>wf7?-}v{x42Q4B;lrW4LTZ56<(4QshL^b)30pOG z_Uxlgu1K=1TUl4K>LMed;{CS_tr`{5lBIyDJ%V(tGh>rjN;^JXOzn|-aQ3lJ{DyBh z&DAe_&v$Hd{_9H@&tKfxUd=LAe}YwRI46iPj*J6;!Cws3KThy#Ds* z>|-@AYi;;mg^*?xst9R}LsJ+wu`zcAPHY_(lpp`Le~M!_&zzxPS)h;;loM33f5}#} z!ZtR50}FC)&1=9ycj*-nlm)EX)+SEgcK@IJ-itr!({I%2+M`$P38zvxfmDJpnkQx$ zq5&~N)QDZqyWIOYiQq?EC)DZ{4+X`Rc<*XI6M>1xQohTk?9a#*A!z zfacm1)!+HFS116^sHhJyVkKpkK@c6@+2{CBFVgi6_oKis8MYly&bWjcq6NUi_q|P*~)$mvZo7~eDfZ`$c z7PP9~Nw0~s459ISM#h*rwipzXt64#{a^ePV9X)aU;Kl77Yb~(HYX>#fhE28E%0ZQj z+fUejou7PE78`!ZZbqydN^at{HU@;EkinXC80cKu*)+!4)-Hqn9KKH@&!-W@mnQby8X@AGkXr!!A2l4-)-E2N6}ByrILMKhCXWx zu#`W9Mqq`G0RV{ke|a=SM@{+36)>+sd36)%0H&F_T*SzJG$XEYPmS|N$Kt3lsG4q- z*8)Y3S}-8gG=n0Z@6*ukU%JAG2Tl6NYaoet0mXQ`;KNLmNQNdaPWk176TX+cxX_#mb4OdS^vQgA8i8UfJg>X3JH zZ*^eJv|H=k>NoeFhYb)8(d_{xrxaxt55rzYgkvD+qS%_u_WW#ctVhn!6?g84bpS!BlN&ev-{n&U2YK@QDHoBMc6I?~mT`RbTvBICL$JUA=BBhoSnYGBL%NLWa;nyX7Mxof-%&%t(^zK5tv>74XH+a^-|R-x08&xa>!q5)H^+xY!o(;> z;+C>_(_Qc162pN_ECEhYgVDNQ&bYjdryj9K@2(HsCHLMBBc=%o6cHGv83J%6wL(=` zv88s+vmXF?K!(5i!?%3-cmAtuP>&oqXe*m5W-+xQjgl%5Ws5AM8ng7^R;9A}C>Z6GOP;y6($0@2f4!OjHQ=|JA?!m#4{ju2!q5NTr%L{B*5q z1bh!b=>T=tY;X2y(Q4L_`{RKwe35f9Ffs{*Eb>)r!sG-a;g=l>(1TF{R?&f$N$OKy?pUAw%O@mB3*Ac zXD@E+rC)&!+$>@+UZE^zfQ--#eStI%;w@p*8*EK0lP?{y&=}_qBBos~ z32aJO-i9~CW4^K;c#=pWA!yt24|?ycfi<0rn5;g)fW}2>D6<5}4<*0a3eR|ho{tu9^i)ojKzk=M*_{UjiLDf_lPBHWb~+6kS-w&ugLJTaaRJD#sn>k zk+R=C6K zp8D(W_=`{f#E+AsH{j^WC@dSJiRe!U2Ri?4y=XJ6m`{`xs0c*$C6(BomEL|D!eMG0 za!_sg+B-`RGkzihp`rjL)j(h_c;fV8`^;;9`sW{h{M5CZ2k%*~F79pH#I0#lDp_cp z4RxkbETW@U$+9SbZX7-g)TlI2pp}#eiUK%%^@$mnwHjff5kn-6HB*qaIRa#xBb9{A zTtMFRn{Ocn8wXGXvtX&HDwUXuK6U2!GjF>v?>tcLn}6%g<@RUd@%wS=Zk#(a%`;0o ziUpwelq4%=N?DXcH~rqf|99_r^vsQAA*hvs*NQ!oCaulVze z7gt<8asKSv-t@+Q_qAW~nP30)SnY0h<}WCON(C@&yydOGKSPR6R>3A=)(!$ADel}; zBn}85h?%q1212hsdI*57mY7O}LJT^A0#!lPF0U;QM5*onQEIJ4WM0WEmzMR(z2)7P z_YW-O!S}xNpZw@g)pL*H{CN}s4Rw}UKt$AB+{9*-hr^;Yyv_j?xtdBFn&@G014vYZ z5eE+HVj%|(pp-Igfa;6LgnFL1j3`e84v_~$O#7P@$73LllI#T-*iL~8!_9rQXG)jpawHIm{6?6VtdUeU0V{vz%s5U9d-B;r`wR7 z(AHr|f*iNY!{@44tGo7!R_I>10s9vh!pcfd(rwEFd!G z7^AR2Ye{n*FnTNN(j>L`@O@=832FmoX zXwF>RDo99g>V*`!KCs}n96#f3iSlL49f#uU?xPJ$tP$!9=8%!wGWwFM&wj2rB=?fL zB)5gj86^&8=r|d~FH_rHDstlMU9N$yP#B?QkKe>5mL{UG;r)<1?(;)y{qX6P58EDV6Skjp}vvgncJO=~=XFtK< zG+5Vw$(LhhAh|UEO#zgoaPoXBx2Qm2QHbL7`wK4p)|03I!$0_v2Ug2__O|zJmP$3T zN$jx=V@P?+rMRjTCx9cKI>B-yX&vtZOd=@ng6k2 ztNF1H;L%60Bo|wNQcWtM3luZ6dh)8}!4seN{EsfiqX)NS+E`3Vp~DJ;vuAZE2d0JSJ+g`{2A;Q|2k+-5?D zQ2kxvwhm%t^4Mec(EEAc`|!}+^~~v_69H9RMPu%0$#VHohPR}_b{l#!P-RsQtQ^%n0(TP%YK;}9KB zaFx&q39>t%4Q7#%!%-kMJ?HuYy#qS~On0t>{{#^y&2AYs+$wps@2?0iN5dGomCqcS zhFuG=*9?$XH)Nt_2ub($gA&V~@|QqM!nY5pL0~G${x^eb5#?Hei;|lxpcEXQktqg) zkcx{aql!UnjUWiFjt*-9{KQFmWmX8m_YzgYv9K}2pjV?v`!Ktz`@e0(*1ND{2sBz0 z2U}2$`4sxB7!(<^jH&yY3>$!mL2xLsKyIszHt?F68hW71#UO=&P6r=FMvI3*B4BZ! z=@`Av7Hp|6;za~z5}3v^i?>UQg&N4bj(j;t5i%Gp_=6RfU#?VC<5rz)UK)BmQMv)Ig1t-hPA#$82w| zPH=A-vkEypb^^AGTXMqyEkJQ|>vGZJcI)1w>yu0eo8yd>YmPc3Xc)_w!g_Q=6`jDtio(T^pi?9_5nYyN&%+q3ZG-FWOFutLBVFfI#Bg1tQ)IXRzy z_(y-^cW)`1Ht+AV8emc=)nVZ#-ObGcVzRRW@Q?rLw_U(McsmiiGMIuuNY;<~7lN!wJP9SI=(Q869{=%kHK> z^t%I_W|$&|#Uav9L`B(P;F<;0B%lq^K&Ex?fHQG&Oa34oJj9(NZUX6BQZtT>0Yf4% zs%7|0*63r>M~;A|%|~tMi^X$^T{g#Mja}gF@JF|R0a=_r<}ojX<3XQfl$|7IYM=KL z$Rl`}1|AHCMsy5d=l(YH-h*}w&o^#EsB#28Krek0u6bHAB=!8}DJQ`;5|MA`)NBeC zW3~|BbUoXHWJrfKxR&DQG@+yCu?Wije(8g86d0VE1nFZI&yy&+OiI*-_KC+5Fo9Gg z5V|_atw^cL+Z+c!s-=C?-AX!imlwd${U9GLIlEDvsV@)&Qk>T-Al{@qtVD$xwRyGORLV3Z7;O_Vt}T(wRyIu874PJjvWYKqq)ls)QnL*ui8dlxwS_ z5N*-cE+B}XOH60ff5{=Po`xfVELb9yd$WHqVG{xe$W5rjY?>sg?D zM+hFfu=~7QZ^FS7Jb4Xl1+6IRI40Zs_)>Ft-;8;1CV~jf5wgq+15*JM%YAHbV|NFY zfX1n65*+d&5janLacEOuoq9cn7uX{6+HQNm0xboP-f{RN|IYjFyi>LO&ECH4Tv8F4 zbVWs_)k-ykiK#)*7+*k&5d@{uj1@S3)l~qbMkJL)U4m7l&VcRh8vv~=t*s7>Xr50~ z2IftG!u+avl-#g|#gSvzK@|lAtTbOuF_X&`Ah(=6wlprRE-&w`X5O>C^TEB#ckf-g z_2`kmxbv^x@a{W=J2?BWt70jbfw@8`2M%NN#J~B*uTfxQ^T2{dv7%MqJ7K_aThF|;c@5IrYfEBEU>t19MEWiiv5bplb<@4Y3+An{c z_5Iu1d-L8_os?3_3d>~$Hs)C&OIu-5K(GQJP(dZi^vv6zvjT`(1+&4ZCSr=_jfnc; z#4xt)$|kC&D%cQJ(LI|DfR^ZYIiQ(JlxYHHGcy79+LSuahPf@nJi}BtQ*F=8 zroY<0w1C{Tefs8)ekC8fSG!RQJunp7hHProg{P`%I5Jl!f)3+G#-cFd@dvKG`TEPN zOWTj$|J(ojb-(vZum6KzdHoajyz8BJyl-ox;IUJ#y)7(Pv(8N&Wptq7(RhBGWtK={ z!dx)}W>y7PKMjYD-*nY=7xs7Xx4lFIeM|rFyT1M_Kke)O37)*aKOI9}jvNw|@#rzO zf-nJN%vFMcAwzAIhC1S4TO(SBunsgYoo|~WvRy%zeIn8hYjdHO5zBCfG2qb31x@-P ziR~-#y2NhGJGL3BYI~g+JSd*FGL1|Ro2F?-l%42ciz4!(nZJeW>JEi6rfIIFlM~va zSYU3Zdj_YfTk7hdD+@h*RO}sGGVkQS9r{2zXbJR^URmRF#`0zI!2_((E@d=2eMMrX zonnD7`syUeNn?!;9fQ~Uj!)lf&4&TDqX(j=p<}CrB6SedZXM(Z)I_QsR?>&tQF7c-!nZ~X$w#TEsAp#^Cfq`yUJ02`SA*O&qy-LnEIAjbXWmW_k-AO@8OOWSPhmPnr02u*w(qaAEV6JY={FBBE z6-H$NCMl&f}xDdi(D0u#;@zIgH8-SaPb;dAe}yp3CK#3T2L7Hp_)01Jgm+1o8AuH|EAUjN?r-85}n zSk8NUOPg)hc_pj_X`~s=OcX|Prp*hhT%Cq}^*4Uy43yO>dU=IHMzkF1O~4{N>5-jA z023NSrj3H_OUIx6;S(_L%qC_=FSa*j2+<5w)GD$xlDu5&(>6AK;XQXM3@5IF0Y#-u zD1ynboN?;T8(;k5i>uvR4jz8@&q%r2O(Yxn|nnn?L?T*L~QF@yK03Q8U;KDc+^3X8^QgUq&P`mU4)W1?plLeGLrL3UoD6k&YtZ zjij>RuxaPS4-#m#8;-<9K)M<3DTzC5xipZzSd5Hq#=;zf4%d(HBS+|V%be_%kRZ*m ztYJQZr^OsHjbsnJ!HDrofFBty8~d0C1nY#=90U6BGS(^Rw@rtKf$`QBh-)FCtO)26 z$(W}2zc!SL46ETX;s`h$0|^VBVvpGM!~t^-s309Y1lD4Nq@6g;17~Lv2NiUNL1ZD) zL1Ikb1EVpX?xhSoCXD?p;^Grx11YhE9X^F*6$B!(pk5oYMvJP1HyDV65g;Xc=?yfm zNKN*7im(cnl#2j71E=QQ2Si@ta32|nt{HMC5OM29S&ePxJ)95cJW9|@!uw|^%H)hj zh+u77$8*|EfeS{HA{%akh<$<)1`8LnM=r&Ms)0h)ehsq!0J=?WN#+_H)1YeNZw&cd zU(Vp9C|V;G)q z3jIiQsgq1$qw|alMy3dcGqGK+2#E85h>9}a{BRmWPP6b8mHBu z{yf(c2d|#7iL0+g&C|m3Sr)suTP};S7UNnE*2s$v4Yq>JD1~PqTwLa_{r(?txx2T0 z;ncnF*}MG2Ugf=~AHMEsPqR~Za&He4u&OP!LWNizxL5rC5~?Rz6hp#Li!=E`A%e02 zBZ|sncijAnSO3|c{r*#{y(hOX%&LS{lA7h0tj;^E0zxdB08v{fdLfC;tr_})k9mm# zrbSA@G(lQAt2NWd_SrKB0J2fhsnq(&P#|b`YI9M5LTe636>fnqd-bOl(w(fi9lQW? zo@4?r@9j@zp_L*Effbo61+rKyR?r7_E|#f0e&_pTv9WRfB3884f<{YK)M*0vU0?dz z!=M$#hVDyCP>_Dqm63q7L%CFeS)?pBo;1Gb)~BKE%$3Pw`58C$U}P*%+BOXFT2_jH zW<{{N`0B5C?LKh6E`^{HZ0?pxE142b0ufONRac6Y$tLuF{pb%?9D-^)R)W@CMB$l7 zaO2G%c;}y9sPhLeUB>2Axgxl#2AI)MIh!i5zqbpRnTZrE08|kHL`Btj&9iUahoBm( z4aPvkYjm}>g7w_FCy@V-hA@f8*uInrs8p;w!tIOo~z%~ zR1Oo?;2={6MF|82C$GiE;^bnn=P(hqwL7tmzg3F~F;O1AFReJe@4|~1v&z6##Gl=uw7&p1wPs@z5+yvW&_uC52mq2&B?^?Jb4uSl!+B2)3?jm z`sw*)sXJRXJy%^K>fiXx_dl^eQ4#)nP3;@USTI&DVR{sqX?pV`+l}scJ3?82Xe!z? zpwKr6BIFsth)sYsZiU!n*<3)6qgWqOgWXLXjGHX`A+=2lK+?{9!Cr*>sm`wf(>s9hCpmgfYk@@GS+5q- zRYP3c=NeuULg%)Tr=#c-8J1F#frm&uvU(%pG00r-a3pGzOp6gpk}-^84_yTNg?#m? zN$B*>IZ20P{&0#IoFanS8lf1TdKj0Uc=*vrwQS)3{z}8t%7YGG|7_@G+E08i3=!8@E9J=bdOY;+-^NF8G*yhH>dA50PQ}FbwuY2s? z_xArdL=!5IU<{*j$Z<{Zbn=Cb#SIS+_r<0w7r{Fl&=donVA)Tz=vS z0gIN|6f^@VYSh+I##N6H?Gs2PAVQjfJDflMr5{~Etus)ez+Ax!6igFn=t;|F)@iiEpb(f1rdVv)&JI@FkDWbJ z6f8wypjGm%Z+rXR(kt%T2?TF?^KW72EXo4&K9qiBSVtrh0DxUzWrGb1Rm@bj09$uL z!L`rSX>nlds#yzUF3lE>c(p46Kv;>X$`eoA$JG)~J#3W#>O6OpHWmb?%Eb`*!Vo2N z72R~&c>bWdlY_*X8NtlCgt3qW!I=R=_YJc2oCz66E0A?r=tr?;kxi>C>L@%PT6+eb zXdMgu0b!!UMCO|agJNjtZaJhlQ87(S(%$35=y_m|^tWeZ^^x@D2G{Q6A)CY%vFke5 zR^s2}pT=D!U_`bYNL=B4?#*|JWHcE>)40r0#j$1W+bq*ygu_#nIkprxG!n(e1Df%; zwq;3DGDEB=W3rmXvDt<`*D>D^R(mZ&UuDKnV{DC%f+${!dhE7jYQ5~%=^7w21);rh zMs4YWRNdjVI{kxt{3q3QewHEih_+>ERQ3MQYyL5T=#cTzv3(i;zIZ*hbhb!QYyp)3{!Th(#N)Bq?Isu}iP@ z#btl2N5>Ism#RVXhwAQZW8bwq3~b6^T&5Prpr#Q&U)KcPg>0Km>3ML8us!;` z&k;xSW7i12NLkOkp8rYm#&6xi_T}snl0;#66g}$D24eo)X7~IuTPxzqScL=;RG?+C zAj$$eJJ>$+hTr&|8?HO48G8AU7j5Wqruxw@`=r&`2XVs-K&-`w+}(;3)EWKk`nL!j z5f-ccL>IsUQm7LiyZ4scUwG;92R5K6sIvmVVxhVP05TK!H{bjKM8`PL^PXLt5%tyKhbU9B1)d6OQK zHghqGsF+xlR>nunZBr}=q1nZ1&uP^WVufhc{W8HVP}#Wu?z<|8Qlz*6Bjz}|kMIDo z7%X+GnKcGnir)J4X9Km?CCorYDVPP+=BHn{xFba?Td$l#g$OB}0GY}@D8~Dj7hn6b zkHMj9dG^s()dW=(a$c1K2WQyZKk&h)FO|)>#7QCodH~P>oc)? z8H*B8nAnDqiCIWP`D<`c0f-a@6}9rx9X!)-gEG@>x1%|a8<$k{~f zur40FD5w?3j$pNfHq9>tarTL8pZ8JMPSXdsFU+$*sS8z8tGa4Ymbp0>#V9*FdxS`9 zMnnR$ug7c(Tz%~gbBGkP?p4K%fEY2SbdXFVGKp0RG|LBlxu$APhgkOkDh%8O4PI(pr;R~?&B420=>-+$jU=_h~U#~;`_cKX6a%m$HS zeCcyqzxpl_W41l{GsgwLh z0Hmlud1SHiz6U;td0#G_g{spbBR&#>me$y9YX*kU^(sTF_rZZd>Hk-^7^bIbT)AP*@3{6rwfBn?DG9qjllSLvyI0w||P;Z`!B z@aQV|^sTR56M^<^p7qfa8pENvX*y-VNQmG1ZW-+hhbZGoUbb)v8tY~pR)N;LEYmVh zEW|2nuvv0pyy=y(;;Y#1EbI|v1cq@I8m2#@FGdwj8ThIh#F8QzI6(rdNC=L^Xi2ZA zL>3*vuTLMZJ-+R&9eJ!RnT`HHj7^7L`N*(u6DIW`jmTWkn`^a)Hdjq@;n7{_pkda- zWdtwGJa+r~Wwhj>v2MfD;QnyesrpQaU7opv~$>1?lwS{bmI2&2QYYTZ(K;yI&jh#jk zsum~`iH_I=gla4tcU#jG>6P%H(D4%bD=%m%Giia@|JZ7z3K=Ydc8#&5*MC%JXN#Mc{UID8no@#FvL z2aZ6uSGFN4B1Qpd(uUejiSu9vbP{s8S{3RGKj#ZzdqOEKuu&*hiWrOrsh2Na0Jvzon;>o}#Ua%3W5)(<|F-Adw$*f_Ntgv`dLGvQ*NqX&8~H1)Q+D z{Q5Wjio#~pQspx13qRt+aq#+s&wL5gKK#R9+ICK_SOHxBoDaj!Q`p?VZ0nI}xIXLy zh(;w29fnqn2{>H94I6^8z|GIvz4XvcH$Q(b*yGAq*l2+(+vnfNon>I1Cl}hF#yf5zh@s=zvv*J45@;vEC*UgXe(MU;*5jSH^#m z8I_obL@$R9dD-E9qt6;*?vDy96C`Z5TLLmMKzzDJ&ZEr<(e9#fsQ+$o!bZq0E~oi2 zL@h($oF4m!-=_^sa=pYsnuD>NSDO@v%LW_GSP_JsYUskk+K#93Br{MQCv+GV7P(cw zf`4ZC9_2L_)?U3%jGGZu~^ysc@rBeT#9c_ykXUBGy-Ax<=u z-mRrS7!J{V0fw3Z#-g@qFsNM8`y5uo$4PM9_Z>g6puU8_ucdg}T*_b+uh0vGwB8>Y zP8dCzKmkgSB|@9IX;`pE3Pjkx1U~Lxg)s6U5WN7 zfnbcxuDEt+WUW|9(M?=_@@1d+X-Bvr5TKyos#|XV+RuO0sk`6x<*$1A3t#a$C<`@h z*zOy@^}Dch8Y=^qy|Gmax`bS(i<0`NO-bM#;>5remYjAU{mDOj=T(OfK78>hD+V^vxMP!)Js7dox5|^|2od=!62`r+?v>G4D@@PVQXV!_gbhJaX^S0OO)e z0ABo(kHKn|{Mrl=T>HEy9=Y=+FaO*R(OjcK z3yliYI)C1$ef&55^M8#q_kkM$83!O9;CaAT*-Q!E4L1MGP8%3uqV)ST#nF_cA3!!F z5ST&t2J*7{B4DG1xpBpnnmjb^hyo=H5CyCOR2mQJu+{_Nn{r;;Z#tZc)hFJrt`Li! zPNDx310<$`tl4NsS(!;xk>blX5(GMzPH);6#CUQC*+7$fw-iU%{)YXq2 z460_McEmjsHe_m@=0$6Xypy9EWi%xnj_DK2_1uWM^=C}B!D~MtXmB9Mjwuq8b?-%^ zYk3Sq9p5send>t$c;fR=fL7Fy#|4o zk+sYEL2=@~a*N#5amC=&Ojzm6YB9ngp=m>YgRw~23|Ooav1Hbaf#>pM0}Dl!o_)+h zLNV1~nl^Jk&I5fs`9lJQQPUEiGi0W>Ct|-tFkyJ=35OZP%;-hvH5smH)6bJreDGl* z8lPpz&_@;i0}&a+h#=Z97{pBwmHq7z*$6o`tglWis{pJq@~GQ$jn-5~Tih&a8lp~u zVIOn2ZEdWK)}{S8;b4*!IfU*;q>M1~Ot!`ge(<^XWe*x^r=bijkCHd`SReo3*5PaJ zf7c&@#H0ZKZ#}i+|M|g(AN!)u`Ai(T8XHAepi{4_!MLo0+Db(OpoW4*){mNdS1Q1& zV8-gwcm03ghC+cD@g3jy1Lq&UyIgxaZu)RNdh?xcd(*B}6rJlnfbab7f3W~iXOvA4 zkSS;1hk+n(A5y*)(*z1^#RWMf}Kr>bkv%pBu z7$-_qG1B0*{19x{)zJx%1vx`CxJ5A=D-}3@@!S%yswRTjNF`wfAgzE>4V9wjfal%% zG4R6w|)*xSAO#+wDDVxHRpTdn|t?rg)ziNvE zFaxSYzO6t2Tz$j!6SQbSg&EB%rB;C$E35BGp;g%az7bUo;>bp!Gy}{C96x-pnu)0? zDX3(q7$Ja}REg3Z*RvCC*2RX%3OM)Pcj541GxOLp0|V~w1NelGdGSRvrI`7gNy4N> z{af9SAJ`)_jdS9(xEgB*HAriSFK6b<_uBpseZ`kQ=aW8V_2dV2B`7m&xfU>LO1|ad zG;A&gJqf_r4yA5ONt<253vR#V=>YUVfe`abwzf7>*BPGo!si0sEK8)gu|viS&>5g< zHd`;Y&iGxnG?iwNRRov`C9Zka``-SWfA6dQ;T3wTTSf}eBnYJxnEl{?`qv-*%Fo8> zJA^YDAd$>Xg<`82SyRwFj;`<&V#5+WHy(VBG4jHwM+ca&HO*OoiZP{-7QCz005)q= z8!`iKA_GpiX^SRu8j+Ul&A^1k@n?4rBA{!Lj_{aQ#0@+0gM&Fn(MTdFN}prP=X*3G zIV#s@m~R8tOw>mp3U4@0HeA7EBsZX8BE#zTj6q_CSRb$P?zLES0LDm7G`wq396@+^ zB7sC>$Qn2I<)ClJN{rO@RT_qxh#(Y`XL6k4qIU%YGb)V{dplEjvwm2Ho47s+=23}F zvm6l(hg{=oCPn)zHBOBoM!5)IM1^vAxquJC_K+5@Abqr?Z2_ zwzv$IiW8B#Qy9x@@QfZ(qLLS4m?D0HhWpCRBn~eLSB%Lz;_TQ&TG2b;HV!k1rmd~1 zC_@sGrqVT6e-l1dqq*d^+C0-61A>R&Uvf7>I3Z1RHF0E|zbFwa6i@zxHHeUCH3sIa zCXmv(zb8O5t{(|9blb7M6FgSL*^*)26ouZ}(tV6LOwIEcnOvifs@Y9tBu}kVW)0yr zzBIoQ=rdxF4jE+uP#oE3DUpPF@=2uHNC!2D?<`>fU)V(*5okd?qOEmvU=V`pD-a4U z6Txl^C6p6;O2paTqBb;ys*7UhR1hvc#L$FMJO|x$+-~?N0+@CVgsq!3f>Lna6E$ z@MnJZzu&vsxv(;*D5+Y(>S0%}->0bKy$ z&R-@7oma$6Z%0WZsbU1xOaQwG9G^A-sFpS=R0S(+*3C@-m*&+b4xsLvs!WB1h(KsS zWxx{>(po#fP>vitFavdE9)@&ll+lL}VMz~v1W5paX%n`0^657NwyM>8em5Oy9$jp8 zHT&uqU|HuAn};rQIY0IgHm?GRwuWL5R;2(Zjvt#*_eq0APf{^Og@}mRY^+68AeUGB z0IHIX(E%eSpwfU7D67!n&Bjy%NdqWm3RaNHqO9n*YdJ;W>CPjcM2M+-_^~70*A^Ox$cqulIEFXRV+mB=W!NqEK zm8SqJ=JV$;9h^`x71TLww*t}<9Kj*lzhb}?h6?RD=fD=l2%=C0)5c*Oe)=!G?#KV* zPyGyhO+xR7!4-%K6{wJ^6!I_M`kUq85k7GWWzqC&2N($C*L7i-B#(cW(D~?iqXSv= z09HS(C3R{_MEq6;Y}5^I`&FWm*q`mA3U|o$L*vq6{{REASxB4%rDkHlsWWM%3oOwwHZ4bO1{$y``{aZ3^*6F@;@a$$@h(t zYYlT_KSrWEr%x8f4CG?ebhz2GzP|a$&Vj=kwI(hyG$69vQ5wX^>EyGdc1*%x02z~b zxfu_LB~N*vJ6nz*V^v(>C2&Im_mrQ3aE-VLml2-mxVIyRn((8jFI&B#ij({vA`q3!+c^Koue|mDTz7c04noZj zd6R*FS?kG@SD|d-+8fAKxF@+x3F8nXl}_p86HkrA-)V#ZiU5_1O~TIY@1dQJ3cTuN zFT*6*dsxaIRe|y+@A|78-2}zPalkNbqC%MN8G$RpQA1+Tb%+6!h2X#@$^q=3`~J86 zfue5jUE0{7sFEPcYywIp>MX58kAXmK?O6yy>68_rs3@Yfs2a+?%~JU2-sRg*oM73) z?nSI-P&h9E!#tyGRI#`IkDoX2kQ!AQj&7<~q=j;gW>#So6Ej#9n5-&r2z3|0)+R2` zP?a*lriKz$djxP{HE%#xEU?vFXfRVDKp~+lswyngWUE=M09frp7j3gEq+lN=n*iSN z=;MbMS{74XwbP4gwN^jXvH>)q2^F#d+h3@Gn@b}wSzYtSTY_S&IAf}&^l|~NAedGw zfXAQy^nH}2Rp>-mt&IW#KWM8Rlb|zKGgM5rCVl7G^8obV7EmBlB)+AP1z51IAY}qn zWHP9=LNF@;NL858xCicCKDPi?tt(Emf1-dWy+z#$G}tV;J)@v>? z;z;ozLaJhkeTnV6u>6CGWT##lwWPzE;bRnQ2@-rW)4zd{8hC3m;-HRetHw;}C%+}{ ziC26gH~*l&7!Pu_)M#i$(03f67W)b@~TJl5qSyEt27ag%IywU zI8Z~n`-dbKyRaveK-{5a3@Z9DpjwG_r-u4AiG##5UqM-W z5JFv!WA-OT(LZ8HeJ@mqO&e3Dq5F#GmBDg(^R;k#WW*qSgLn%_G;YkWhco0bR1W0n zt%3u^HgQ0fQUvW?)i%|fpvqVUFrIt(Q$FuYKlha{Gu9HhX}Y%SE5P=s+3IS4u{a3> zuDj7W(4uulwk^>4`xP~sIJ92rwA$tPD+$F{Mwr#q@n=VpE!2p+UMfJj7`*&w>=M+_HgJR zwD>9)V70{ItN-YA|Lp>FV`B?uHPoP2`!vN-q@4#$Nb5V<%5Q2rl#Qi@UMP~POcw>f z=?CsDs2f%mWh#jC{s7-#z;@&#MYWg_Fj>G>SQKZpg{n*n{N9^>`@}+7A!0P8iHT8L zoxbnTZ`+plQ7W(iWMk7gVo=krw~>OA(VSeh_V23HX$*Vs5~hdP%y&$l(pqp2SeL15;*lCq(T-+%ot0$K!8iWT_j$fXbp%wO`Y-@1g- zXhNeAtyl>J(K<|-nzsT1g=SJkpxjSHn0Ie3Jz}R-S7V6iQVpW8Xyw_5H}Ww0o|aCgA>1(h48%}SKo9$aDuy68Y9{`8Py&Q#)kaKfDPkU z67FJiu_P9#1%F#ox6MH#7AfJ{A+=I$eC=6QL}gbVxRLEEhx#`SUzh58sU=M+BbII9 zkcU(f(9v-!o&~ajJ)}v6&oJo{CSmlV(ofd-zc!29)sB2#%ONN_3hdrS1c_rsGj)=B z1QBih|MB(T@wR3~nK=Gbt#|JeZ%&{2y{luX&AL12nQzF(b*Kf9!Y+P?Qrjhgt}?D(O}kmw5=qsHQR$E zOR$2}?L;D}E#WEj7Dwndarj-Wqa9;npUb^){*df2d8vC{)=wrwTFS;d@Rz z@q^y@JFkTb5hp>(*Xq;~sV>+9-+0%DVY-IvZ%0`H6axj@l#tU{MoZnIV>3G$YH}Ss zkpx#RAYcMEkA3Txe?`)634Q2Ye|zxQ@$uaKDvNJ=#Sh)}xLc%xXaM---}5~LC>01{ z6tC9xj}JHAE!<;*H_mBNNG@CfwtnUR`(I~hzEf3~vSgnuEMnzNEXp?CONdoS4crO& zJy_7BBn0dIu2u>If!0Y;34%#LFZ}QS4aAN zII}UTp1x85rI8N^IY2 zMe+moIEaFBbfBG*LdQ-Tq z1q<;kUnjNCbX1l!u|H{dM)3G={}_LHhgIT~BFaX|I88wzAZP;m%pqv{B)M$+>Tk_< z1taa#!~GzR@Ui+?NN`=of<@baXQw~}cqscRk&Cb(u32mMIdS6Fyuk0BW?4j-nHE{L zO-Oh(UAEuO-L5rro>yA=n2CgN@YFWhL!y>?NQ{Wb7Sf=P+;W_a(dKq>zDxbg zg7WRaC~axhB*cFi@%2i+&Z*D@ZOPF6U$tTPWSzcEtVp9iqoq*@?WC39m!)F;?xPo9 zJV%=#OKwo7vfU-=M_QyTrB;fw_diQwil#4|&UqGbW8IyW{G5mfQ#yq}EupVtgGpNr z;grlRgeJ}XYR4|=UYk$Jh_|FwfKyvTiBNh|fy*`aVk^lfB5?_Yatx*-fCQY~^rX6o@dYnT|qW2on(qjIa2vS3df_H{*sUKr7XeOpli=)io}XPW2>J zWA6b=_VfjFM$g|cq+q#?14nfC;wOIISK97}x;(IP;Nt0%|MYKfnd$FaOHIVb}O3$}hf)$6}s?k)Haq-L@pZXb3+&u8e&b2atnZYDfg-8pk zvfadmb#x?<&0T^B5Z7}F1XY_2tfJN`R3^eCGKv(zscHGS&;O4AW~e$YLq9MEwG#QS zeeuf<3(>VeRds_cF+PB__$Yxg z2MB_k3ElXkNuUO-%wV1yT?YG=-}$UefxjYmpp}WN`6X1rib2Lv2C)`3moHx#fU3&~ zLjVfVvb0B!OBWA{Ol~BP$ilD!C@Yucg-e1NR8a_8bg(QRYh?h-$xLMD0l+geO78J{ z6gBia4J*f2<_}DZx_ur84q+0|L{uP{s!q^y{?Yw+e!wR9(Zv>*RaLR;ysnq6=wDT! z=9P$|ifAPPd>XZq5Gq)!F^Q!usMe(jEqQ#`vVP=kH*ehW6gqPb!w^8QL&T01dY>&0 zNQtW5HUUPFqqqIscYoVA{KRVrfOUFcp9l58ZPQ0kdffD=RJZMqx6N85|h| zuQU*uHaE01Yg-t4dr{3W%}?Bh0mpB?%PpY@fy4{9Qs*~JBfx+C@-KSwhdj5Oxfd$n z0-AZBpWvSs_f5OM$4*gOp8q{yXoes;N}dvg#a!{dZx0RGKyZRE1?;YZnW}j=Jd`n5 zhPi;qTUu)_9$_MT7)ufN%_v?zGQdz)2N2rA{NT97!Z^d&ezhseZ#u4`y+!t!E_S<+ z02Dy6g_i#3L;M@&0-u))-0iq0LIa{!H=7484=cO84~uroh&(cGd9)k z>G|=k7Cj^=9T?=S2?Au#j1-IOYgeg3=~`ro1Ob-YSI3t2f=E6>;awcEC1QdhBjny>eAr%t>tQ#r~cNS6BmG)GF zNiq|XOQm?UgceB3aS$1Ch@AI{$>WK(j5Y;17C=#n)E`Ku)nubF<0}mzA26HY>gnJ9i@(@hSwZx!QX()DNYt&69ieghZ~y6E{mi$2BM#hXE}SyE z4iWNP79t42om$M(*i+(X?44vu$%@|_P?06(NB;EJe`;q@RRx#Zn3&IQZQr`OiTURA$QcL30AvCe62a1%vIsR48;tRNfr7((LQ%=<#CY`34=m?Ao zR#K%1aD=I*%mt|*y@tqJO9PJ~K?efB!%zVftEv*HC=rXgH>3~}h7=Hs&IHSfm3^B4 zNEj1mdj>+a3ZQ+*4o^TORfF%!6^L28rcs4xQebBqfy&man}I5+KN*-a)UNt?vmaN6 zq++uaObW#Gj7lXftcO7_`@EMZ=9tY;gfLjl9;m3L*6o-7%ug<{yNf!GBVa);QDSA- z3Y6?0U@UC@QM3%oQ_>3IyZ0a|QAnfBq*@F9QXlUH6+*)YPVNxnktd z_X-jefEFmLSUd4UU-jb66W9OOANZLc{*~W+?eG2ZD}V7o5)_N&E{;5Y_mPKgfBJ`4 zYmgD{x#N_w6rY*4H!O{8`jJ72F| zOx-^-GYPrFgjNhHsDjy?hQeG>7nmv*JE&7x+Xr3+&!UCh5UMzVX)4|bRON3x;Se^x zA9>b{P*;6mki&ZGx%-hv5QY_qh+%*kL?j-GXbIpJ4KZhi5aw6{4cZDLgqq}c$_tpl zwNbC7U$BR~6exm|)IBd`c?dbQu=kf3q2P{0_-x6*6u>XT%^sWXa+^+^F2HY;;V@E8 ziqtLyWmvBWQ=S$v%z_0<0~ZX#dB4K5Hb?;I4A~8uV1~f^k5NLPfEp631$n&RO?i#X zQnGZARFjS!YSFz#4S4M55AAsRG!3P2QhQs&wf1wMrKY8_7$(kx30m4&`Jy`~UV|LQ z&_%t}$vaGizoFEYW04)~)tD5kB8dW|%JeMkQz#UStKXT?@utx$LDiw$INeWKc zLq{J|yf);yt3tCwH6Ci-QT&NCuDxrE`ZrCX&iYL4)Dh`9BfImlh7ys+8BRRL7~x2FBweO57(v*X!Qzxjetk8J%wINh>R{W>RUk5q(B?{<(yAImRc1Q zMODZGOW8bp^JhKhIY3oWuyh^iU}JzOepguUedNsNeBwv*#tB(H1c=`#;Jl@Wy&H^m z<|K{SS+issgzDwmK?0KqFzUHWsF%O&tG{J!r2t{FhcW;d2Cd4ah>UmN{n77y_uu2X zJJs9ZQk(mhQig0k5W2px3P40GdhQWC`I&dE?|aMD%d@q)j=LhL#D!H0Gi>Cp;Z9c4 zsL+RXS|?$EL#N5K&c{6(t4s9XhftldpgjtPoXVRoLsQ6aogB#_a`RR#8AoqG~}6 z2v8YN#xy~cC=#%$>Q!}CY(=X6XMh+|4-9e*<;}nS8`wC3Ng(D!5o7|*app8uW}opf zAMu`XXCRtrnkk4BS|mEn6G253L@GokuLOk>gLPDoOiacw{y(5jN?e)enChgb7P}vK z>x~!&oOuLCkGa~Xtl}V#SW)U&G-c?~tLhDrjvmp)!L2JNf9jjRvUnR=V788NyP#aW zdUfCC8c<*Ns-OImzxb>3?|Ub1xf8WIp5P3x1RLa7CG9fI)Tz4!l%{!FOJ%edlVX@d zmgBM8ANaSwf60IQwqO3i@0C)xR{^~yfR0jaUcrU44nJERm3Puh zQfT}>=;OOc^A~$et%!`Z+jkQ&34@YmH#Z(Q#Qos#1L$~59j-E{Cdn* zsftnsb3}g-HaZ1O9U&MkxCeXzJTg9*6)Z{}52zQNQ_Rq;>Nk%a!b+>T0D#g4_+*Y9 zndeF4l|Uj1mc;5XiCJy3;$Hit(w@~KfU&Rk#u#pud_!>%IrT_2O1lZLSQ&f18iDTG zWzIA)X!bW99{<4LAL-3s2HF$GNJoLka7z!5wH=&4o%guwnouowsqw^sC6shiP!9g{ zReCo?E2q~8VRJ;#yzWb(3NElV4;rX?&p8G&r_D*kNPs)3=uoM@0#U1-fp9{JU-|>2 zJH^mk8v4tQv!!g{2g8z#*I2x*H4jp{{dCnq8f2AZT)6APiTNT3-2_d?;>(08c~^+c8vA6v{bhpWRVHH z=1&-dc78LEw$pWxRTyVVCke$60fuOs5IA1*yb`kaXfjlr9j6JEyZdPC&$LFL_-jJN zEz_sHL!5HhP*Z%5DjJtVv}{Q#O`j7ijnwvjw|v^-67k+f9 zv=G6xTm>%(g|(8hc=Je76%Z3dg@_HaDJhgKGXNn{h@-$t)q~Yg8ZoiXraCg?bd_)X z`fvE1Z}?`tbOrl1LMRkObEV~c-}isc=Y8qbvj-BJ4SCQikgc+Adq^xi3xhG)&)Svo~UQf;=oP19HEtk zM1bXT0$%tz&%Y$PWSvWuDk#Ny(MFYt!dgs;fLRArSi%BvOCmIITE2$)0{``}!0oqA zs9LFjm`PL^U{X;fQwu^wnv;n|Xd)N}87>!Is!y>#-O!_7~f zmfKK5&6Hj0>IhdRn5J$SrW-B%XZpvr^j>pdaf(SXo8idgU-P4{c;V-K)+avW>6n*h z(^B~Z01e~?=?8}4H~#odFZ`tEVCTTFu`*!{8)4tGkzj{uJa*Qn3m7UMX;N)^Qu?xu z(0;A)Q3K1q)AqUmf5MOj&ONxczWUlfeA8!s>_^*C?E=5^JFkDq=f7le@;z8NtS4^3 zastmhTGZAbIH%cDbz*YJnE@L2f6!U9+>sxy z%~SHOsy-&ADTDx~(qrxpdpIbMqc4aASOTgZ#;ChXc8(JC)|`(N_`Z*^qPt3g?uR{I zpP>$kP<1aa3EvSx>Yo1sme}5ky7B4@9MXhwBKyZg3DJBTmkU7ACR7l23(r8aaa8(g zI&PpBpCk%tF}SWo)xS;i6q<6Ngv5ekLU&`~Gl9BuMK|I3x6RSrHv7n?7)TYrYdVf@l{qNq)~R{+Y7S%*clm-0*9!*MbQwyqZy& zrikG*Da|o=;cUJyg|W$iu|Tqj&<@nXx3;fLVxS8ixXCscH?8#~LIAB4UUL zDOTt6T_|=h%GxHDm5Q&)#@`apb$c-ZrBGE75n}Q@vwCn?MToIf+S%Fu)xZ0j&%5Q= z{L=pA#wt)SBUIqjL)YE?%%>kd^6s6>D_VpUmQ*71j+og>UhLSlh>0%Cq-tAiu6X47 zGkU7QMj8PTV`JB)s=zcYDrY9xn43TtUI8x%^YL_-<1fR~Rh zmS6BWpYwe$cmbvb><)<+W2M`S&@chVHIK%kZw0Iv7(%)nw|1AHB?MOCv%t=9;+fAX_G=*;;`#}4oJp(j213jV9m0R$di@QEMu>KFXyKmE;LlC>u`tceNva@P z1wQ}zpY{3A|E#}z+q*vU>37M4TR46LFbfMCcA-JxEb@tL4|1td=9od)-aeYu=J>0I zWwiB|h+!e(u*pKUk&Hk)REv+b=x3(=(OK%mkvaM*H_-q_1k_3md_vuA)G&t{w#Jj> z@q0%`wP_?~R0#-^*dVs-tPs%4I+9aYYv9xU5_3mfChl?82#rOxS`h)RjJ`szL^U$+ZkL0^7lqNJ$oO)GCoR01ip8 zMUw2fZXaWMTJ{PFHFD}IJh`l~J8SZlX_4eLTXQ8qz|~KbGKJJJFoLo<_zgjjln2+3 z+WymUA1Ul>zQtHpgA^Q^(fCH*roL0X>=l zpiDc&$N6c-QY9>tYNKB27mW^RxdoRQ4iykY4#p3agy>oji=h~bK^eA5I=sJ8(aw0- zuI)kn=_FKboAZ+*yU!MuFVjk_-4k*Q0=4)JW$Y1dq}?tu>JEkhhfmS4)+MfB2VQvs%^)@pVTJ{qVPc^Vaqy9J`rr zdOQvs!(>k{&=@M@A5M+8o9X~j)P1^077PVj=kEN7kJ^WNZFiTY&R78OP=@(Ttm=nE z$;!Ev0Ad}KW?&}Fl~{FmDf{+s+%R7|xW2i6|Gv#K=an@gUC5+L;>Sys0IfXeqbjd_ z-T%Pi0;m8Jl*}H1%UA{buYctWUIgIizSRjuh!sqhXHZOP0dFeBXIn62-|GA=XoE*?fXPRb=8)z}6{-pdcu#GJ!;9vU`s#o^|ululULTvAlRcPQDAL z?vqm|@!-E>efx1vA_rD8g@B5T*`;KpV(F@+Oyta^0>lEp31^F$Dkx7KA3acz2Wwyd9ER3;6s-02C z$|S)5`KLE;fW}%>*`28>lV}yGqSGX(3eusfh!W||!`h3#=D%ZH;_zW8q!1>-L|`2X zaQWo3zUCYE@yg=Tj)sNS@IrglfgV1Y_gHGuaX$x*3Q zA%bxirGf_x0}5dd%*!$4`VML%2F{*rWjQ&^2E8qu+S- z{J;r0cM80k#>=q?8-h$jV|@LX6lfG0Xy%83ZqeN@BOXiNn`|@awyt50%a=j? z=)eEHOOr?8GEyra_S7d|+uE5OJBACVFbo)G0KB}O&_S9w-%PMr6Bt-pCM}yb@BlMF z0*L!L>7rz)rH|4kluTsYe@+^^K2X?Kc=XtbgJU%y0Y$1Uw<e?|tIjjf~N9M*k|-cKyidep!x9J)*yb+PTpC`rg_ zYbeX{l=$9-4FN`hcZxKsQ6~vbeFYem!Hg1jXU$Q|)jF-!yMXmw&ylAB4;A;!mm-wt zAF;s%z7i~Af3lE#{{m1GZ$ThejTLHpWy?buf8_L*42_4-+7l&8{59BGa#mWz=_&IA zacUNo)&SGg#qXON8Ld%lgOw4T3H?4F$C?Rya%AYUSB>l2DO0!vb|U#s)utBr{ARCz zkm*$PGM^Gf?e!F&lf|3}hX--J1lrD}$z=Bk`_F9lB&aq1n;;b;m;|Dz71M+|VL4(F zNL(?u|2TKqWg&7qine&SG`&L^WEF)@AWj+x$L_$*cj5Y5u(FCOY?EbEt{Xu@_1JGDttr$*jEYAxq(TML?l=AT zD^Dub<#K{nvaa?l8kr75{%$i!72qOFgxNxLeP!jDM~_}lD`jPquk6aj#q}He5AmR7 zUgj%1G%hEuK!uWwq_iyai`ULS@99s&{u}V!J$Ps#R1(iG`G)BDxT%bt*+hrK3Fjub=--1@lV5m_6?+3M(ll!hjXe*7F2WiR>?# z=$iFqhSsY0EVf?uvM+wagAYCLTfhCzPx^!#o^kho`Q_KXdFzs3xOnY~b)~ObVZG&} z976%CIIb#U%1x>O%*9zlI*E`F8Dpf>B)V7CAVwAtWFP`Ws|bNfAWEXJ8CYZh9%5s0 zJ$<@0?LJhepZ&R?`=tl|{bRr8zux|7pZd%%{K8*)_xry0J750DVsT|>0UD}`UCdR_ zH7HcLLTMr*0Tt9)nTu-}kWo$)i1VEta{3Foe)!+Z!_d>^+g1wuK5GK1}Fw7P@yKdi+4?TGB zaG96IbbVR9ZU5n0Huvvnsi*{6YE=RTkX<`aA@ghq6)I$9YAQq^)@i&7dhvIC#|-0$ z5jw-nP}k6%LRbOw$|*xFO)E6e=2j-l7YV@P@>aR-DSz|(ul=Fd{+iX(Z>;Uxe&p1A zbB!K;FSxp{o<%LC4XSUq4EI`UO^6f9Kj9Q2D5I)=vC@*v1xh$^gVe>1cYZ*1&2K$@ z%}g?=VSnRG7QJ%m6c*QT`3wfdK*%C23o4m6Xz!q4U<6zPMW6?fpbpL1;`;VIqRv^~ zj4*r@7D3n}R^x=7bKm^k-;=mVz4Nj0Bm@<}+RAL_%>89;6DQx*TA8~NGvFRM0ZrQ> z@LmULPveyRNnutz$Q`!W(L%h1yLY9rKvzBC&+Ws~;@?`)MDGctmld!?BWjRoAMNSS zkP3-ber^Y;sT$v!8AS0NdF^zUcA&tru7eWcWQbXPC5g^+v*vCYZ6!|HDcOeO`3qRR zkT}gH2N5`6n`2RUP&Er=T6{J{)d`q(xu)d>5E1asSo@N7j|K1j!&J_8UTM#329&#f zWx$jIg|6Ws1xo=f=MYFDyqAP8`LrnBG*>Lkb#{NN`F%1~#|_eg$f_83K>@hl^6CQqylD>~x1rskk_*mx5^&bCwOadHDB zM!=SwN`?z&6*S+VnSqW?{pcyoHc)CKtVgW9$p%92#gc+_!I68@AR1Q}xK%OPmT9kW zW=RA3b%y_)?oD>%O2;}g3~n|${--D|qO1Z6R!>eyETx@#vJG+XA&0Zn9HAsm9&~QG zKmFuS^}{t1QEV!gK|yCI>_Vc%D+M@z28+w@c-MV5-+Uvv`rz%|&jrO}EsZ9f_GteF%0x6Sr0QV_9k4S3c;@Z5U6>X!pUDK+)dmQW z&0AGfRMzSpFKq3)07UBz`w#42-S@I@`QAIJd$A8*V%JswQVteFa zRiuJgph^Wqv^y=QaSQcF{^$*5alu=P4U9sl0;y7EI&|AxUi+HY{n?*C?Z81|8lh4c zWq@L!p+YB8;sI0^yVLcD4lF>w^c63yhmOf8m=DgY0w3keii#1sAOfjsAt)5#kpr;d z1}asgU}v#-V0-Jdj0i3`@=u*=WqC(UwqBa-}%H_Pi8>mGe5uV76tdtU53$qwG$%Z*C~~xgYnb zcM?5oZS6@!&$#mg{{6mFPuZ9&#;dxRdlcBxB34pCfT{vM#99=rq7@MEsd4ACpZ)9+ zz=ew-g%0i-Ch*FXO{kvYF%&x1L z71^gQzDKF;3h1YQ?YHRaBUntH@JyOyY&etZi4g2_qytilMvydWnvaZNN}t+w3WUYv z(6{3R)NlOimvs?8*Xi-TLE-Vnix*D=OI&=^CxvD9o8V2W^FaqeOx zJ2kY!{>qHXQDCY(^cLq0yXF8={nU&y8rCrF5h&NxjHc%A60B!%B$Rnh`^vuO8ph7U zivrlCufQIZro4~FcHov1Q6>keA@d9)NH74tOr)ml|1=sdmMXl1S`QH>}PVq(r ze)S_y%pDI+c}O&gJe@wI(I?JQwu4h`xeXcy+)f83GX@mPK&Wzr#3GAKGKhUyGh)oXeczV3w8<^hbtetjHnUHKBus=97XYByS8o+pWBCX9ACN+ zt)vH@2XA^LoYg%}a{u(;Qs;r-qT~$<;g3vQd(ECB=8ibj_K0944GuJ(Zys76aU8U3 zrSR3234$x9uzUWY`%d2Zgj)d+ld3EPkGtcp```EW*^PHD2Fo=^rIyyF_$WBpLsRjH zRE}YSgMgvnlu#6d;OYfBaAZHQb9I|k7(yyq6=A*!P_kw&Du5bLCSED4$M(;;&_^7< z=}%tqZP+|MyY4RB^aLD#()s`IjUTuFz-+#s z<@il_wkR4z9aiLHl|7Ha#^X;q@|AALc5Et)zytB zA3e4Y<&!?(!<3cRk2gqB0AdW*s8Px=6HB;YM%AX?vZ{waRn?Lll^9E!YP~is@7uci z)@x_pe&x)2&z*nh>eZc{?ZvWIhJa)eQA`RY6;(yG@=sMoT!tpKtShPr0HK`O8E$jW z9;q!Ua@oPsg$M%)R741sxYM1QKkw9PXbaDFK7ZLE?U&8vJ^C%%|L^ijo_I}LlscP%1|-;gim???aF6& zmkTbeb*A7M7s$jqPRpHf_aJXPYyXk=K6?3M4;`5%!SNd~P7qdWc0?7!D$YKFm3_bR zbzk+qX`#ep8AeqhE?_AniWSUnIlOPi~Afwk!A-l#AHY^gTF#s)TSdB)@JIJdQB=4b;rJ6>7gRk`#q>K29>C_YmI^}hm6 zGXMbq07*naRGR8GaA~?F3q0%vk11o&C?xjZ`#e2V!B9{b2d?|x@A#I7Pd);jH0lmo zd!G2%uxIpNKKJ=g_>hmpl~cva3zfa8V9P~wr{6+{k~q4e2(_fXLZ~Cps01F>=y#c_ z7irlt*aXxH%+_a#`#U@t`ju=|5lG?P38b-<}oKU1C z+Yz=&;uGS!i~lK(G7o@4LG@{TJ3bD-qIGVhX7V&6m}w}}=gHSlS9_9l*FdtdU?YzI zD+a4&EI)_;vv(m(rejB8@HC&LyuuX8BEC>5I1{*0j&!NGjReQ~Zo@ZikXB#0v%z_BA{g zAy{)i@~%&|O){|1T$en~07Dc%YtT1QSL!drDR%L^xpaHPv7NC7BuW8jETTwiI!dMh zPn}Gf#>uT|UfhItK}EdA9-7{8=g7zD>`h-#`$vaC?FSD}xu&z#a>#e6u2$Kl*h4zc zwA2P+6Y+rdV7>^Z!{WpUNkcM!zBu2Q#0>M3liQtK5pg#m$yJhi%tMnW(LIO(#MDN1 zrJ3tg1&Z&Y8&DHUDnB1BGlSp@;|F6`p)TBomIb1YhDca%ypikZ(ntMsVQ-9q3)%%& z(o`VP0NVAe-lNDh+h&bDtnWve^XXH#w)N2E^EcgiL|G>Q)3nXHzIOENsr&i5CycOq zyw0mZApXpdw3tLnM@q_Lyda-_W!^6h0~VJ)Us-wGAN<)<*AJh5+rRSlw~LN|Vp3qR^|HY-(b@Xu98(>kB;M&n?OLje zk`PxSRR$`!5~HZrah&Tg@r>v5s-#3*lvJ72gNa}j0!WmgDkK7`7P2Qz+Z9YLl=79) zptMyk^%+=c_P&ZjgdiBo1W+OMU^e?OV1k0w`e-VYSON8s3{=V>khR&cy1KHuzP2(S zh*T#jJQHQ|b(%e}Hak$otO|+3dJk#kHD*wu0%GXop;IPMVOE^D_4J?q?vMZ0@7#Ut z$OjxeaA5y|ee0{tG@H}G&3#Wfc;u;vkKDMi@}=MU9nZh+c%7J!p77RZAXszyI$#p) zUiz^&{n1JArE8ZX6cVnaIYz;Fl*FRx8c-v3E@cBRR ztN-in)m0h>tx`$FYPAGPOd`qBPo|3w}% z(r9r*A>b0>@WgPcD2!6T1&1~T zoqGNe0Dg##y~9XElJc zdIUpN0+FJ7W$>iN&zbq*Zg1{726)hP|Fl~kx2gdT{`OEaA)ytAS!rLwzX`m}Ygo0v|{>m`n=<+@q zpfg3zH<{U};I>pK8LiYPnKH4l=Vk;^x_GKnu$yHAwDAIdOtFR(gA}9;Jtk2ML~2$? z#p}IpjNQg)fYGcVYNw8Nf5j9>OLA#+VC;|(_1e6HeWg1#MA(~?IKjJ=LHEX7zAyw$ zG>DFp2nCDPNkEy3P&O|NpiJ+h@WSuT|<8P0{?{21@1Fcn{t3anX#mDOt4lO2ojrceg-S|H{?bfEAp*x0dnB*43Lf z4*~;$2hjx&`!g#6)7l2W%B3eH3 z(?9(hR9KW5g9X9~WPKr3ZO9ZL5fQCYukMZ~=Cl9xM}PU~KmM)Wa2qhM(*!2W3FB@7 z39tUvtA6|lXd1_XYXMC{stT?mDl*Q>@bJa+A9U!*lRo)*xb&bYfdPuKg4AYt*7*uf zJn1+8`&WP1ffHZ;6<>GHL#I~C{HFQJP*&c1_1f3|$gA$Y=}E7A-lt%;f#WxcEdWv8 zrp0DLfq`YE85pQEi5Q*~C8#&&t4>3W&@WL%EzAn#aRN<%SsjK{Kn1mu+Fd_O$5fl& z02CrB-g=bmzJV$LQdYCsoB^TKLLKAvu_EW&Vpy{-Cu7yIMzv5Ex*|}Xyd^XoH;Z__ zKxLZ7DkCXGrHTNPs^=>!S>H}lVqdN0VHKphLWAn)b!(yUAb!aKROrBMuYBQWf9kWJ z^V&c9bJ?Bt^U6)D8|(9peKOp?v-_>z`(sbqSo^*2{Z87riLSpzRtDIhv0^u08S@o9 z@~-0__%WaU>}S7o`?B)9QbmDU+fzoVv%1tn8*9J&_y4r}&^!6Y$3sRI8L)$a>SBq5 zhwH}ipLx;e|HC7X9$q=1Osb@mm*-S$)R&T|3`9^Bpn6h6w^2X-(?1#5ArO>BtK&J@ ztI1Qw5tp{z#0(lwBLM_>fMU6=^P|A*_~V}fMv=)dh4fZCKHBWz z9QdPucq_Ip@Nx?ZXazBq2y=4xQiRoLv9_>l6bOU@r`k$6)D$8>llmDMY6(NeggOmt zt5LMnfdOOju*b{g8S&bf(9q)>gVp-+1n`^RHIAjOcZWQlxA^Kx^A`IP{#Q&1kQ&v1Ae z#C$z9Isgq9agsDXRw9ii+~8vKKaB|S8pM@rMBLe7m^dSGAUY!NMAXCP+%lux7qutm z9UEh_?9P{QSjT>7?N5wFGp&&e&gwHHUhPY}Bb-ecCCt&|07*X;PdiskqXaF)$^Pl0 z9?Z8V$d`#2jhb?4D^B7{M4c&87zv9ly+B<(UnIMbSwa*0<`@LIa~w%i3dx-@+c{Z0 zzcL5sPw&xu+gPUv(4B$$P5g@Xu9iPRP}w{Ugx7`0oS62c*nWKYp2|y&)I{WY^MHLX z#b0KJrk+C_M3ZE-mYIch5RP=%VT8G#eqQ3(>c-Obe|4(@cAVMJp9lD3f~xa(C7 z`3&IL(%d1yEgzKvE}=0yL*Wop{lnAw$#@OuXz+fGYTRonyj^zWF(3G=}VeUzoYDI zEtXsR)@ER`!1WfeI$z=41>JDxw7dqbr~ro0p@38X!8{QWMAYmeea_B_q&N!+c?ZCX z5xNuwJ?+jruIVUJMa2j1O4TZCMKW&A6e?o%(@I3sVU$;V(Tg!Z;6||us9;*c`Y#?n zbouS?*akLcD}tc{Og4FoxDYW_#ZD;?>f$wj_`BG*QZAq2*?a;}fJvYuEd;{=Qr!Fm ztQ`3JpZW0@-*VGO&-Xp`;0+&D4t~zT6TkP(U$?w`4L3iL4jiD>IacRR2Xe}&pA=&# zn9T@91f;d~F16WEC<=x`G!(yzDhpMWs)ZoT5Y?)pm8{8)ci|TTft1L@$)polstS{U zCRBC$WD%o!Bir-&sNf^fbw9`zXB40lB&(-B^6TR9~*rZ`5{q=h(Niz z6Jt$Np-|EaQB{UQtzo7WM5!n+Q6&XfmJkt{@t|c8jVXQ_RRNX21x$2cb9Ukh5B$TM zzvojv>7&;6J!7`|bY6Qltv+*@ebV~oZ@>KOFgsLkdYT^GBoSVUcht#=NSDt8^|#;r zriU@=&h`LItW{VDMs}uJMOL71_>I>Cz$!x_Op}oJ;2Njl#4Q5(_AmL`jY2cOh|D0C zzz0f1Oi-%o12oONkE&;7`N<#u(ExOJ1PR!hf`?`{`SEyJ*gFISr?k%cerFo`VNo$H zF%X6#i?Q5z$71WkY~|=KKtq|T&MMybFMs>tpZt7z^xnFCEfi)d+UVh7ixD(Ss)4#P zs*>7Xt;w6j73);RRC&VfcVD>weJ^?WcPa+N#Wj0W=)r_f0^pOL`P5JOyf4x-_tR_u zF+?;we6%`;h-*H!`?38a=QKs^$ybgRs7_NzX_Cl23Pc?Fwi>q|984BJD_EID2T`UbTRN`&ykXu;C=~Z}?HC$vw$EvSk=D@0Pa;$*q3y-d z6+2eej8DT8UKH^FMAn-2_TA@@-elrbH=wSrJp-trgOCRlTFm(-*j*Fm2E1#M5FKY* zx(zLRW0c=h9Kv8l3IDCe8}lB8n~>m%Dd1*8gtmUTvS_>^(Sg`|tNU|nV$)Dn`3OyU z?pO|JiKb+++|iz7NMvkMViEp;EzG;n6kxAAp+Tr-VinbjwW63u-p`aGjynjw=g24` z8SQBLmB%(I)l4v9N?>CQX-TIP5GPL5&iNK7h{@rNcdSmaLR)~H-MM?qqzkQcFi-?a z7%uKEHivcSNqzy3mTmk!obvIH-NT*h< zpi%}^9V$Rt&GiAS#f~;4pw$|r0wUH+LrHZ~0^5fZ!7sNWrlyd;InjWmlHo8>HSCt@ z+5%RfigjgDRa8~cs*{N7px#1;0BF&wepRCy0Aa3}M3gJo+w&V&i%nCrl$(m@EJRhH zLRc165LHOw`NlfxMDtj@=M*Gj93ste(ZnTjC$(Im0AYDWcNi_l%#-I$i{f-jVF#_wk}#w zCycJ^ct%)U)8!Hyhu`zZzr9@0FdM3;+tr9u$+%CnKw0ce#g3Es+@c;|+W-o7wjpDh zx2AJiL|=NWsr*x0X7|Z9{3xJX!s2EXLYcdz3S{Qr zT_I1Cck9&lMq6o^ixePMB0T*=o(Aj?MNNU1OHr#)(TKbG^2E(_eqtZ8)G%#G?HX{X zM7z?w#OQJXc+A)@Rz*@4ZIy(@CG$9`6lcUnO=S~uAkhdpB z+INI_QbQCOo|6Ed=}zPu4JEcB>d31&x1{5jRz5Rtu|nvcwMjB%vO;jK0<7U!Xc%%z zpA0~EJjlRmY%jmE<&YC6&ckOLvFEKQp(OiOHSi6^DwC6v`9vBIxn$Z=WuxL=3@uZG zz$+3DMXX(J?h)tkvJz5g@EE03lOK0> zgiJ2?k3qYYR@=?C4&4H8o+F%m8I#0Chl$zkOSet&>7j zZ9OUK#_g0_AW%U;VFuGo38x;!xP5NgE%9_#T$HUN>xWPV+;B5y1C&q;m@oh|#Wo`; z;h)(xY|TtXP&(okS(KdSXR?ZXFk`WlVRnG$+v8%O{5aA=syrIBB$*%rsorN2lgey; z<)H^21W@)L+3W0d{-Y>T#4`(MNxp zR3;U{2wEG~0f1_Z@TA7fpa=w@DH+Pad_Wc9N+N_oMHIS=GSVPigaMGqWUW9|7^LDN zPCkQ~q@s#~ShXk^D8xj{q|5_@*(W_X{vjn&0hNlf1OX^?jmj-gxov>zQatKu+|GX|J&-%fy`qK9; zc8l_itphZQ5(rWhgvCriSc0DZ37>#*8#GZFFfax{NtS~7tm-a~ALEL*Up;$xWn+Q| z1;}tD2!u&tS*|KnNkz0mRb)0T1`r)Q44J?KSv^MWU{?lQng%5oM)&H~Nx=xc>cVXb z&~JvgtH5C3`r9vGy0FGP4VYs>K~enCYhLvYulO;Xe;+QLp@Bex3Y+g>qY^wC$QGoO zHY!U~^5NFa=V6CNDyF~z(y5LB$?7T&-uR5C-fgQNz2&S;l(r#%-XPK&ZiqZ`@*ym) z;@WvkggQeBLjd^A5KXm=?u*gDHyo&RZBpY0LuOXp6PDc-Z)OYtW?5SavzpereMz<*Hnjxzb5uOwh(VUYUlEskOvXk+iJn95}n;s$VV zd)rIE8R_Hw!I_!QG0Pru>X^ho+yqwQjiDGHbJUsXqQqD7SOnsGDPa@i(eAc9CTSMb z!`?!V{5|bOt?lfnp}6+Acv+G?&9m>?h?iQ(YNZ zvK5hUrM+GnWyi_H4apTP{iUch*2#psbWcfH4H?UVHjXr_roVxXG~FrmNsl~fjk_6$&(x?< zv0jyda%9Tds>U04Kgw4GQyx4L@_HR2BfE9=EuS(F&%}DJ{q9GR`26{epn04(nwVSdL4O z&``88F`z17f?X74g(`6s6%n6zs3HUX0;L9n7IXeCvxRmBKIA}Yki@>$r` zN=|V0!dC4vpZ0N{CD6{0DBvSjh=4-k7_zcdArbPJJ&`CNBwp|?5D_7&A|m23Q(|ab zMo?u)1y}VD2>E3Jg;G_3L<{qLK$XHg2VHmjof80xHheWoD6Qzxv_avfUPx4-(-e5i z##&6Qgi=%q%)`J~9dPC>R_DL>cYkw!TwGgh8PBU#=d-GnlPLyODFc9wgBuK>s*+-< zFo#7Z6a~D~una!!E&NsWzKZ z?Mz9^qsgq{LYA({y}zE1KM}ODwsv4^mqU@&ANZ!PdfgxVF}5$@k#nHpcxbNi3GAH` zy~ZN|3Pmdp7x5^lK-^;NGri^sFk^Kc!^+K1`(OrU&W+a0*4WbDt8NPT#No}C|KLyJ z(rL^p7TZx_0=IM=@qS}+?c!_3-Y&fC4vcBbtU|HR;<#jtMko(g#pf^u*wp@Y|CcW! z1+Y3V0JV+=`K*Kr-5Y%GNWqL83+44oIHXZDG~)5Q9-KHmqxLu-MNwsq077t7P_(@` zBXoJb2y2xV)}y!VZlQTHEfgI_t?ic^le91;Fy+R>MyNKnm;Mwewi!hq6m`zp(anU# zE7k3ZSvO_p9t=R#n#UlxRHDt4S4Pwb>~?IB$}>6Nb*Z?$qcGF?$$ql=xU826ZA@s9 zL5?=jn!ad2qp(5EwkBnKGGKsbjYH9(ZDNd8(QWHU#BcR@6b8Ppz(G)-I@FSIDw8G| z({0KqK||EZd*&z>5MQo{pG@d?H zR0WryQo8AjF3>{1PVyeE3DLRsbOvVHd5Lxp(+Wgy0R8vR7@Jz zE#gqLOGo;-OkLVUT~j-i5bz7_(H_{7?gDpQGtkFKWrhG*#|ed@bBxRS@VjPf2Txyo zcw;sPcmimklaHRe{?HK&2j|Cbck4o3xGT4uU8N;r{%%(woVxKLcswr}1 zQKI>x?p~Gg^m6e(|L4yi{lE{$gYO^|DxbkK`FCMdv! zQ7kp|fgkyt0$EDs3a+d`^`a1s;Jv7_sLQyO(NrNDlw^f5)?Cuv7YM4T0wPxL-rW%}AP=zu< zReiLh;~*m6p$ds8NR_E637K@7rou|h>!7#))&F74KraNtp*^GwT*a@v5m1)vx-^yAOx0!&T zLLie|QX&95SGPt{8%wOltkjhQ`ESh8C6!u5cgH$M+1xyYaTgq7l~cXZ8OM}L$0AXy z)AX7)FqHl_0b1PXwBsgGncegxU2bizubtnWfJ!L9^rBDx_;=j*pf1ng(T7n0sn`|F zN`qDjBYHcS4w#}fuk*)sO2A|v44FWJ6L*|^+rNDE_y4efKsB2*hcfgXGcWesc^lLgv+VOJ z0eUDXVusoN={hTy-g%QQ736k^lDLY34xMAq9a-cjRGV?=iO%GB#DnrgH4$(k!sPxu zMGAFEq2}TYIKZ3(GwsriM!fE4@{X;C;`RNF@>wnc*Hno8}hml?(^8oG(SOV2VVNl!7djYRJ5Q3SFE_5I?Ur zFIN4(Dh~I{e3-3b7%(4D2!&B*PzxI<6yDS_^R~|7jlaVRbkb;#ZY+`iN^OGJOKvLe z%1hV-^PJ7yg+hg?&}=B1tGqFr5A)f|dYKQX0$sYZP>k#aq<(w55gM*ElYkmUS?Rc& z0B658O$LLLt|^H4K?t=l0p}ksE1TO_Pancye=LG`KYHQj>yBe(eRlNNGM%42N+-^p zf=a1U89{*_0dzBo_UulhWJ|nu$k$m%Kt)N7Gn7dEAEXvE8-w*l#Tv|y(D~XX%Aiug z13`&IA$}{A2vvACE1;1`w0Kg(!@CNo3RR`CPBU7mIz6(zb!yuAy*K~Ou@Ctueems= zCd?T+LKP)y&831$L=72KU=4Q=?i?zJfdRs<9EO5AV)MYi{O#YbgP(Tb`ZcNBB21~; zRS8uIcEbU%8CFzSDQftMlrSkN{NAHlHGUW!A-ismiYi{Ksv>prn*#vA*{0T`C%vKw zNp$^_qQTw+lSx4nQ5a;a{vm76q=2|VrMM6bVP=pBM5wA~hlNm8Clhg~*WcMFF;E4w z0z^cptSdA}86LmB{=T~NhL^uwHV)zHcI;U^789L1*t>vR=xa*Ts4hVhSb-uSOj>w` zrQpncApMQg_uO&ap@*+ssWX|tU{Vsql~;i(s{$C63QwvVoBIVo6>tUw6tJ5u)$VGH ziwUs&kP*~|J&*t-ZV80l8Y__!Vesg>pD4#=9v2*K;*S7iu3{sRkP?~_mmwb0-sVL2 z$dUlA?o;6ZL}9|Sw!3oP@iDw5QQ5@4oeyf$S>0^ zk-d&wmckD=uRz3}srowY;9D&|qP=MhChMr$e$0HeQy{z=d%BM`%!vVsTas?toPiV# z$-)6NFlk`GEpn*CX6d>ri6my5L1emHI$WC1MaWUt&nH=~Dd%Wf;5jRbksazE(js(` zzObkGS&?_6X}HwhWj@)S^Xnj>lRCoT2t7V*b9504Qb+VD_kK>}PdbOB^_h<$t%nKNLZEHGp zFCM-Zryj()hjHNyUAxLFt5_RS?mP&jA;aMI+&nv1wP?R=%ZRn7waEAch3dA~Q>X)t zv#`I6%d)b@D*DJn_1<^NJ#Sw=@V4>(x7PdLOXJpjzV0YNEL+<7foVljg`p!_FF3vU zP)G!YJm-1YN0CCoixD#hL?3?7uz7IWxiF{-`$^n?`O1^8JA&B?j@~iOhpyZ(&nR~q z!6%~vP)g1tOLYF2?|mnQ6HA1fr;6MC|T1OG3Q=3 zH};`U5QbM%Fj*BdGk6XzG9Lzj2Sk{~@0nUa9V`SPB9&1qipbfmohxfzb_6`)x|@M13Z@Cw`s4^O!=g$R=mai4(bfJ@Na?%Xc3;_RdS^i-?S<@ZL?;$ZQ>*Y}q6Qr4lyR zW`t0i9tfkzj}^DQO2l5!C4gamOOV(l4OS&lz=l!~38=~h)VxuqeLOXO_JfPClzr9E zZ0MpJd*D&v%e*m3VXuX#%%P-Hr5kR>tR7!m-9klm0lDqg>#pqXU^eKz-`&aE!BRu4ec#xC@u{w<=xo<*q~(9yj1YmMRer12iU$Sli?9W zPi>p1l$u0F|ILn&=z_SC5%Gx7QC75TV}USS?P-d3g3|F!;z$Zm#9hG{^>ae}D1xM! zjSr9z$L^pDXqkUEQk~m_SieQb+(d^#WJGb1c8~4~r83TKfAWjufGK{&+7L4k6dpK` zL+eKzpd)9BXAAl%YfE#|j`K2lg=bW>WdfH2FX`Y#aeof+(h@)4-4w zZgxnE)9F;N#A=>;wCtpaH>dc4yZEBSN#q+9q*08N(T;@9a4*o7+T<&_v1h9)9<|N>FX;qy?jRQdn-<#0u3PZb0X41h;lu+it#0d z8uF9sHtyQl_L3LrGEEex=9a*YSUm7H5J1DQhUHlAd+T)ao%>H5d&$>)&5yqNHNWud zzx5qI^5eHX?WubH;pGGWhAWr+_JVzmbgj2^Z<@kSjhr}rrlRpr;_^%vSYbE%+uG zRHRxbH$_D?@ll|9<4Ilx=}fCk=dWBoxpnn_y#94x_WCzMfP3GLd*4M{7f~zbq_crY zF;y%9QPdIRgvAnDJ6K#B7FQS*^MV456^7!8SSkwRmfJ7C_kGV^-TzPLu6*F31H)|9 zN_8rE#2!REsG=x2v8-?e7_9ZFLK8>YgaNyKE99y{E#ypAJPv3Tq6u2P-6U&C|1AVu z^El*DSR zyrq&kXHubH9YxE^iqhOQh8PkQ@L+cwLkkN-t7ZvrTpP1VY$Q`>!3Zj(m5IQG3A2>| z=y5+g^;HH7k>iTOifQPORN&1nn2}>I1<}yYMs7=G)CHD;BTvG7-vL^ANR~`C8-@4H zitJvUZ_IJ_VT?Pjml~6#h7a&z{>Ee4ZCfce5RQ}OX{#sd%b-)mv0I?>8DIRBX4e6L zDu@3C(+x_1vMQ5)$5(yvu>S^}ekfF8>`M|s1|+q6rLK-7?-lq8)ydOv1kyH90HJtq z7#FUJ;Q5C6LLKIp!u7dWINGgJ8p=-7Qp6u!J0?C0G*7vlBzT}2jaqhzOM|T&W{0>^ zV_W#u+Aua(q0`mQev#+N+tMZ8k}uwa8zTmkeCT@-kHJ&FhJ0vJjeOobsRycUvn__0 z`S2d^?L9R_3Y`O%Bp|WlV-ANoL;*-f z?$vk0-78&SIrt_Dx;XKGE!dN({>iGoDkjgOAn;qOcZe*3X&mi#?TkS~q!==8Y6Pd~ zd(~YVZC&$&$L(GzqEy>n!daDbVVv(JYsP3UyO0`6TRPV`} z_j|I8Du{_ZNOH<(;4r^6AEIJ}wR#who3bs&PkyF0*U1<-+k=Y0CH^t_+>l|8mJS&y z>18|QB9C;-zi z(9U9d_|3!W+Ka#Y2VV8{UqdT1Q~~kGm~o*@>Dak~>mLVLnMwt- zH~MIqG&GZ=`9p@@HG&h#IcPdGadz4X5ObAt4?p+wUiycx{YlgbWf+PAbalCNVr?I0 zn|l2dFkUIctYSpvR?OCHYUm|%X!|Ool=nSU?RplWdx77&v)QGh0t~>ghH1Hjs!Bj5 z@s5y0Wc~DQiWG=dD}l{NU}aPpcmNE25uE+1kyouVU@7{bOMwKm{baB zEu>Y5bfGlWYwx|h`=6ixycgFifAp4r`{^%u(b<20I|{gZ+9TDbc2yt%rl?uK%27Rj z0#Y$CTTOEzEQM~keLQvFR~$S3i9h>u-}+y^mTD6^@K=)Pz^(^`pVI!%L$oLBK_LxLC2~^Ms8A1d`S7L?> zr)dW3W#c5)`2R|5Jx)Z`?)sV$St+YPofccJU}XX$ZnB|C9HJfo=uRqvEZPAor6!>n zu|lS-~Xu3cR}czEahSsc6G%?eWL zQzUYE6v@~)lB`TH9c)%i!Vt>{Dv*lfx4hxiKmE^N`&A$El*gy4S8@k80#jrUDXKdc z?pqmFrps4w=m1qHl_*^{{zR7(PPNu`)zq+wnK?<$*WO5VO=F;TW4+eN5EyAh+>u77 zV?{?hQ45pE)%9nbo!ZSc@(~b*xZFl}P!Dm+cKlR)kM>3{^@GE1?nbs z1lnZRX*Prl2oT#DRy>A`X1=B42Xr9TzVh;VtfvpEqG`CcasMO3;ve?;$cQ<`2XaeH z8T2xMl(sfojHI!lD2k!{xx0I#`8{E0aI64ag2HeZoF{A46CDCRdfLP zH{=~8ZTY)U#F9S;=RKyT5CL{Ut?G^<$VA<9DbmM|HABCf>`5dg+=Jk*$d5v0kxvf15FeVV{55r-}9lL@~MCG z2fsh)2$}(ypah}CRA(~+als2e_2XZtTX)>~^n2g+HXOedD~wuEqo7>7?|WxSMuIh* zXU?BP$`EdVrj`lvGRwttt4D5q!>|6#3{t^G0iugnw+`>$2W;Zlt(dMtxM~FmrC^eH zZt`2FT&%`JlldDz`nwu7=%GRSsL6XwTvaR9Rv5T8?G9Wu{ z{L{&M4jexE$scg{^WXlq9pK7x@vi$Gl;v{Yu_OED>qif*Zc<^C0&D>5z-6ES7oorW zTfg`7U-X63!}sF4o3J{Qkw6t=1w%z}+Z{V+FZ|w1zx1BBzWEn__Gd2-!?~@i&`O2H zt~67gE^%d>nk8vfL5QGZcq8iCN14U;;d5jwqn0v&RjLAm^<`@vGm_IJ>`(_~l95dovS$W06{%aLczwhO1!`cWPAO&Rsoq?7j z3&?E3$*pVec<=pZPMyAPhG%}*hd%z$p*7$=)9$-2oz|fMWigqHMPRBjGDrvzQfRR` zW8_#!M6^z99*8K)in~y*;R}RVtAcrDMJx-TtzjHg)yE(xKte)(p%W@PTV36PY(4rY zRu7=oh5{Wyc1BPm$btx(5H|sI6s4}mi1x}O`GKb<5%D4-Mj01%rQoL9^pX2dY;5dq z?XIk^0He~3AeYWOy1ucmUcH8c`!EG8i}t1+XpYLLmMV|mi#C}KaE1(k0=-Ue*2NEvxFZ=!<`RQ-^S{yi_q#lFoW8RLb0{u|zogx(Izv}YC z2z&x+3b5gOnD~iI@u%EUJao^O6K7h6UbQFo5xx9%Qpyaj{Yiqz33P~q3flB40%#^K zG9^KK;elJ>$Gj{)p2Ea)cUVaiNgK+!Qvc+ZrbzY+Zfs5KsllXFFBH}d@#xHuH;SXx zs~`3hlcT;f;B1D&_glm3PsR$s%kD-2ADh1La?2^sCG}! zJSLI}I_lf!^iq+MfG+LjnvCMPp{z5_lx_gTYr;s{=O^b;>dr{8WT+rnB>TnY+Dw?8 zv$dmPY|Z67le3vq?)yu`E0gIhUP5_eJtY=hb`M>yYHx-lje-3q(P9``_cfIoeyzz|% z3YytthEfXAurewc6aZ5#?vbR^9R?~r%^<$*CZ))B21*_m#RWZ z!6XE+T9;B*X;}cB5t!H$0}LK95Ts&tj;oi?0W0g9t5D%u?NY507)r$kH4IEE7_7w) zR|_JsDj!_mq}`o&Up)KP%V+MreD=b)b?Xyue&SQ_IC|{B%D&<3V*7nt7v6L2?AxxK z{<}+$yy?=JH(xya)}3-Oh<&VTsJo%0|6-QR*!@10#dSIUZY5F!Ff#d5^{{c_`7 zZ+q3xf66mH>fnIe4jdRptyNHX7zR_ycBNHVMYSqq)VL-iAo3P9YVA@91VjBoCg0rCu4O5Iuij@)ml2O ztYUW?XYRlL+0S{?G=AeNzi(nWv)DSfynJ%|^8MG&oxF1H!L19Yw=Z1Xy}C`yBL`NW z_sqLr^68)O37`52`wwm2vvchquAV)A<#M4in=qgj1uJH--v32GN~)F@B2|#JhC{&DWs>eD1Hb{7ghS6-}3dGi?oISHK9s zWga6jEi06UGDx?my^yW_Ay5NVRiKdAz5de10TuQ*DFSF20W&sgA;m-^fMZRHU|)-f zhxzU&QD!u@8G4Edxcz6^S2XQF)SG1?4bXVTF_^Z0I>e9Yy9T1*aH|~p2mUeF1?ipI z^6c%BziMl4i|nGt=x_)kw2@5SgeBhJI2H}=N|dWn6sl3+92;NLTh+E5_){cJA;lJA zc96ruhy|PCZ7yZHppmck-*ou1W&grc@^cKza~?{HbLjTG>*ydbT(6oArxmTZq8Q?1 zZ5*iyHyd zMCOWCkfR;7Q#=AY?d|;%;>~&Lse&acTbh*khnVlE>K%$GA|jfM67t_1_k1Gn`6%Zw zY0{2tiIeFzbUPJ*!Gy_T=R!m}RGdGj+vhDIEdXc$aO+b(=r8~5e;J($2TSx{p^h1K zwam4SL~Gc&tQ*&(PE{sv6)Ih;HTO=#H%o4}ZDx5`QX>;YoTW{j9;_n`D|+s}7k%Y7 zzT)LyA0p8$wF{re^GT=ryTAFG`R~0!9(^ASeXkwH${MY1(y&sYz@(FcCoeIo;+=vt zGP#@vEMpZWt(51}XrzGX!;jo20**SdXMNDe5kya1hs79jlu{6D^{}Eue?v>;<`#SR zDftjBWMzM&$Z7g#hQG=J3k@rHC=A?l&&kJ~xY5bYfRNpEB|>N~f~aKc8^u)Fwb#Jd zt-=vR@EVB1CK#mugk1Te~{|6;@Rq z2!<5RnYQs#iydC>T)B!1`-c6m_?B<{jL-k9FMr%quvqeSx5#3t1A~A`K@(_>6HmDK zuYdi_qqqL)1Mhjlu_N!ka%H(3rOcF-t(89sseqxv%7qm+FbfbRffg2@B>+;XKq0Nd zOr%sz1yGr^3Y2OEP>ram=bdrF$3vgd)i^KfxFCRa{9%UADKoiNJ7r~sk;5*xx@x5Y zsb0+$Rgji3kOHY-C7witmCGPI%Uh2hzVE`d7u<9mc9wkW-J&~ggA0IyiLgpIeG*$| zzw9?&|I!zH`uTBu$JY6|4lI)caUzE5R0$aCavT>`=~C>Dpz7G$j<2$?lDoLpl~lZB zm#bDYy`B(YnW{`o*Pxgd;6Wz=fT{YOJO)%`bxy#6Lu)%$0;_;=5{U{C?D8{|#5$~6 zn^Ax;n{Qpb%+nGZ1H4)-f=3#@eI8sIg%rQyKd|983<7Usy_3nPX;C`s>?LN)GN9cYwv@&)Y+E|e=0idYW9c$-65G>f7d_# z-5>wm-~RK5efS3}Cgsw5KYPAZXH@Td_@V0#AJX&Zad-pUQ{1M_XcQcg|vW?X4f#C1dtMd>baly`=a)Lsvx_=S8d=&G@V3<9s+A=TV0xd>M&S>2J_@8 z@RctzHk%-UBiy-%bNVXZEcp&y-S7ta!V;OJ+Lx}X+4FdCDWDoyuFnJ5eOB@M&&&ht zssG_9T1JDQlq(2zl$JW7g`qwdmT2|cDw%DY5{#7*S`eu*j@BiCbM+#b1)dLiMs3DC(@&+RQi7b2PL7ljlhdUl#-Jw}HqU7^I8NeU!9cOxMdxg|s+ zB=TH_GekRhcBXG4gos{Kr<;-q&~z5^=@gAtDBhhAS=%BFhxKZ%FOTyk+8W+`+}9f}^Y;9k@ z|84&$3T~IAJC&W}@vi|;srBby`)X`on2|+*YH0k_Q)qj!_fv8^!0h=Mgi6v>!%YSG z5xY-Fx_b@4>we<zxMhs{BPfS%bj=Wm2-0X z-Sv^T;leoxu(pD#0As45eXOTsUso1uOZxZMiE^n5Fc#N#m=K+exo+;)*#>HjjRle0 zId;OO(Uq)diRM1Du%!KpTECik!^;8D^*n}1kpP| zA=Y)?xlg6m<>C2?AiJP2c!CJDfF@G#07$)Xd25D2mTI-x&eIA|1hC0kHJY&$3yWB5 z77(j7bFnGBJPcHr7=%fSkf}~qs7w=K7-?WG1+$%T`@Ws4PrLcHH(a~4f-0vT0METx zo{ia-Se?sFckAU#pLFo>@BigLK7Rkk%GcK~IJfs3k2WwGBts}@+2k*ko(KuVXGye+V z(bL#E`+fiT=9j+UKfd?Mm4~-3&!iC4Iss_h?N;a%>mh)`DL;xY;)c(IKTJ03k-sQRJ)5!CK< zGWVwrcWi*j9&41DB@Q8H(#)SDV*JRMG=-9nPtK=E*Z7+|(oulDL`KxD-xG=X`-tUx z`Yca}0tCi3{WGKQ5OFL!v0`j34Y!L%I1G{t%5aqe-Gx}~w-APm6;isgu>f@zlFxqn z641eC8waPj*SFW;8tBsQ1f6+f7u+3?He#V&1|UBpdwQM}0x$$gf_XUWI5_;mK%!o= zkwgrKjKWvm%jBK>z#V1B#8HRTP*iwDlp>lz@!&I1qmC_!Yn((!#6G8KPoeOwO|U_6 z#!>s#E7R7)tC!qNkH+sQZDa(K1uiz!b!N~6+;Q)Fk2W9_1sElc#0PUmhEyXviOArz zgpM(s_;xb6gE(pXa=$!57{x&VNC(UmM~!)EvARS92scS1dmC!AwJM?}j9tR+{Ygo# zUQjU<421a%Ae?@HPQ7D8r*HfIS4^sPy7aa``<<`@!{>hDb6@hp=fCEMzVrTn`D?A)7p`r8_J4XAZ9jrj z@4~r9F)x@V3?*u@?3#Zlf>Z&NDubKkBSa&%TO*%mf81Exz_joK)wq40;s2DNJa_v* zO)gEjh_OTn&&Tuwg;G;Q|3P(*YOI5h%~5BYZ~M*PUIh`TR%@Iyc!ZLntYYvVfKOHx zQJ~1I%m83q0>Z9;&2$wN#e5CGyH7p3Z^jF@cl)GTFsW1_nm7utn8n6Efs`Run;~K& zo2)x60oD7t6LW=#dZ!msf@m!|O)^!PmMpuwi~BBJJhHL&8)xn#*~R&Lu_SO&nIObv zpjxReaq|=F+L3R2&PV*zYkuX4>j&oZl_jKBEbCH9Ypu|#ML;ZowMG&*#6n7wszN6a zk@|2rhc7HpRY4U3O|_CM`Q-VSrpE>aB53MX9FdjH^tuYPRu)$k6c~sACRKqFDdM)I z5@3TFOws$Wc_9!41O}^+QYkW{`E35=)qQ{Wo>MQq^-dYq>86`N1zp5$|3JEd%hNmhR?h&cE?y5?H zLUe%VfArhGGL=<PW((A>DgDOhb$S)NUI!kQA}ajFv_CGA)bf2o@ZV8QR~Ez22H>aH<33=Pa@YwPP(D8ka5F}`+I zel!|rAv;MJk7-`-jPLe=d4h(RCG~lHxFmE=GtrsgtYWf%rgP;n+`#3~ZZYu*lyzBg zD2d9tUHMzHUM%TASw}}+52E>;q)R*IfIaa>bg_S=Aq$2#H-ji72!Q3c0ho@p1zY`3 zvPpIt>;k?TvXjh4$t&HphkS7Z0};X|MDaz&j^oQhif97PPUQdpMLE zZ^06cBSE*XM1&euLwVTAGpRTnIR#lAUG^EbQA$&b&HaF%u5we> z>GC3^JwbdDp+)6GmXtj4>gzX-jMziADAq_0P!u;!pJmZ}4^mWuj64y}ox|z( ztR39^>wkOewX0{p^XtB~2MAtq!MYR#~{k{~a)4*uYKN4W z^ozR0pI85DJ1maWO^=2=;{<5&i;DDFOK+Sq6JSyO)FJO`?0v4cx4sERd z)-U{osJ`m;zm4%K9(WIS7hLB)6N;>5P}XMju>?Y+69tu0Z2?rsZjx5N%~Wg-7t-?# zfwkdlNfwt2Kb>wv7=yKVu|$~xTPnf;|DQMg)he;I$P{H38@|gvoYrd82~}<47^#OR zAS9|JP_YOwk(vt!GF+%cVmnq9qFU>uBMUIhiWDJ?pnEQyJ-Gkis~>p~TyXgjsDS6F zq>E9Z!Ua1!*ndn8-|{Q}=?h-=?caX;>Vb^|2f!l4#xfAnsi==d29yk#TERXQfRq{H z`3rN$3zNotQmG!LAVP$Mol8>tA+8c~Gp?@X1O!$Ek!`&yRF&BS3Tl9v3B;l*FfW&2 zz}6-fdp^Yy6y^@7M`_0iQl7T9@t5zq=fB?dM64gg;p=p=cEF@Q4UmW#r%ti#{OYAM zH|;<0jtggmFseB~)jFSQl?kLounD`C6j4=Z6(2ihGnK87ir@=W3*!?|gRrEP)KeP} z(|^peT#RdF_=msydjKefXkc@{t$DE$2vwoL!L?zm6N5x6)F&l)1VGi3PY_5YKuLyS zHi6#qYp=(~A&e6W@i2I_STcU0uEaFr^cuo$LXnvq4v{puE1g8A5=$(YRyi#`0FZKl zOu%eDn^m{@-JI6it>2R1jl` z!({befwn{ds@C?@WG(5F5PIgAVI*$sWCfci; zn&Mmub)?XSpHdftVDTW!jGW;IxT1Hc7mu*Nno}VI3V2uL%mdiH_y=$L z>+Q3Te)v=G)>>ORyBP^q0SXm>qJD%7kv#@kH$HPbsWb_I+0moGQcFzjMg+)v=A;Cm z5(|hw_xvn1v`JTIrSV>36)hMx2L^fNfks7^_A5++*#Dc7B?iC)o24$I0;-}D@MWL* zeBHVBqL+LLUwlL!y?2;^YFNRFlv*ASa@m*WyLMv%bv7->3W z8Y=Q6{$Z)Atlw8?fbJDdGid6EU}^1?Bc)D=p0+Ei1i9~_hY#*M#AOf#l!YN+jZw4W z_p`!+5tcg(0GQ9QwFN3-SLK)h)CmNcq=NVT`7ge914FHBG5vUdL_5^(A=*4DSNw(^ zYlX5}DS?Vu(JhgUbRkkv5ufTx0#)LIGB8MLowQOVs!GfcojZ5KvE#pS;bHJD&OB0N z0;|pkpIT4~W5UYnc*C9l@?GEcqR)QOaazCe;IX30Qw0xF2wDpOVQ)Y~{Ai{jd4kxBj;~@5I_+95_zKT^59AKqi{6>Z1?v zTz~b-h3gLNJ9+U@Vj`;|LscSCmfC85)uE~?R8U1>8Gvy8s~5^tt*q5NSyJmZ1z3Mt zkFpDhZ8M^yGOd;Y<@bK{N0rvWRcTa%K{f3oV|N!kUkqh2TA4h#Hw0J*Ak_@~0K_V! z;ElDlv%5>|T*2XkRt6)}1lDlW;ev@Sl@Dqme}tZgwoG5zwJaaqW1$mkhS!IdHvz1* ztPq3>gHV_N4F%Jhhxjs(kSM`G8t+iKEsJaaE)7of+M@!qRhmYutYbL*oV!18(ZYG% z2gF9$dK|KR{6{={{lF1Caz6^FME4a0n4>Nxoo1IhwJB*Olg{?VxjM%@s^CIZJ>jPQ zk^pA!w_4X)_KbKm!nQD44Z4^QU|>wziTk0m2j*<}v1KNyK_3^`UMG`8;wX2KSb`(8 z7tD}N?lpBjH7y~b*{x#ScSe3!jl$7NZtU{_8C))5jI%*a+RQ91ai+?gyfoqfUDutk zN+}M$WqW&kTH6c9CG1ls<_e zjTBgN9?^VsVn6kVQq~lO|C6E2WID-=iiE)=&!}fGx9!zSwlXoGK(z4B2T&|dyLMyN zOf<)!HuV(T-ax#ehXPSh^+&jG)CC?0F+xb4`tJP2WeDkzC6b%tDID-1RiVbfwuajh zsYrZO{Gc7I*>ev)sUmURHi&JH=1ihRK)qF!p<8FLjs^fS?;mi_kNejr-=~uxzHvpD zevNQ~Wp-`=t4zC@AEEzzZeA$^5eN6a= zLa=j3O|MW>;>p9gPUG7G>|CuSMibadQhV$@`}beAs#@^R3QNFDKw%o9n)Y?S@MDio z+eG7Z`h6biunPbsQM>Lrg8n~b;?7n(Oye#C8h7@i4|{0R48t@61$%V=3K~*~7@BU% zmu5)DM_sC~kW;v_A-1^8dW8u7=gNo<2p8XNH zcA1BQG0NDc3aMHrl?fZ0*WU7X3+TS}xl|>EGAW_5e{l8KG=<$HB>_-vtbo4x zfru)Bhxy|-4!-Vp|MG`F;zO``6As^q0hky(fNZM5fZ4j9zK>{p?U_f8uCCvE`MfBA zQdK;wO_fwg1O%~XfZX|k`t)Q~VHL}5lQk| z$oTF*d?OB@z*JGKpd9I+qCURcfT`l!$HIwP+Q>p<(?` z|NKowL9-dO`Up~G$P@xjovsf3jF|6(fCy@R!zd&-=bR+6qX=Y%{8DGEQ`4yq3@8%; zwHAdb{ek217$QtSilXga15x*BU68m_?eTLa;sdKOfxrV{T52g6N51|B!Q!*OO!VZLhan3rx74G^_LUdX!l)(1GTU#j6*MHBA&(4PhMori8p!AGMe3#3 zp^r@hB+Xb&2lkOBdqjyvNMIFH(Rq{_F-l4~Wsjja^lIS|52E{t)P^zb1)Tg7-Vp~t zZ-_kBkUwW(g=7F-K%&1QS3zAc+n9Vs3vGOzH6Ph*e@L_)Wbxrt2_M{rfW9oTK>8qp&WL(v^)A>TdXD+<0 zmaof1!^)kAJh^U$jHgM@-^QcB2KdZyyt z5l<~9O$LY>_n1)j`Atr_P1Ow7<{4mCKuZ{jTtB&6k06L9OiVQt_hzg+lQMSC;L5{4 z`75t~+n@dkQ*8GAkg@gBHgS+RLYsLMm*4;2U!n?33f;L1DPot5Q%xiT=X0emHVe9N z<{UM&r^X2)B)`)~%Y}IkVndGhoc;ghtN$wz!DiMlRGTAca;{Z@a;q#HK(02PT=UdX>M$j zJ-ZOV$V2976*MFwbRsEFgw-Q&__-e+P-f#)<}9Q_3~=>iiTEZ+NnlkQ%PPC5pZp~+ z#_~!L8w3M@fr429&9JN3cNnUF`JQ*3*tgGOTq+81Tm~R=Botn)s)yjL7~E=nh`^%u zR#K2wKvXkUQHfQls+wfUXyJjB)kgcp3WdZs!)nu{ME#;E6l{~WNG0#Fs{3nR z-xcF6U32y*En>hF>R5vxhy^1FjX;Hr5Zkr-iU^8og-UD+8p0G3rd1SeOeMfrn+>&dFq^(*^-=?!mW04p0{ zMX~HuaqWSD2Ig`5W54`ME0%sGTc8RNLgY_~Du@LY3Wac)DatzV(_jD16|1_aC=96> z2&5ReX=x)|8U+_may*wYORrOnnnu-5(NP?3U?%Deq8o8PBvA!eKr8|k(g~o7_YcKr zT(Lt77)yt-D3s?OTazzFhXnzvlo|-iph-w^rbz*^^~$=8ws7I?bwdXg#$hB3S17FyqY~;_QLlP!{8k5CDpS*uEsI@p`|7Vp0Vv zJEz*ss{rDmWgV>AnxEI^m$%H zNepBWWi`OqyHX18TfoirLa>36Izv|oxTUcj`)apigK5$XNiuRkG9Ye6Q(LfIiSk0V zKz%QRLAT4oQWSQz(|O%>Tmk#9lv3T<`IN~2@9E2h5Qi2w@U7tsT! zGvw`|kpi=Gr0zzt-0N;6QY6Ps#?uUx>J2LaV1f!T;Oa$OJonH4_KvUkyw8NH z+r!4?@!gB7W0OrF(TavU{jle2RAnlVfv`GX2cs+&s6&?#vhxpB&H$GHuTFgwL_|E8 zDtOANm#QBj;p=lu=m1P8v&`-jXsLhxoMIJ2fkX3MY&?Dv>|NY}X?Er>Vo=;;Li%haaB@t1p z#8y?YxlfjiP!Oz}rh-AHLd%P{A;Dr0=_rSsSC zJNO%?PoWI;!FLYx6;a_zTn6ZjdCnpr!F5l-u=(QauK%ld-gD={0~po>1Gw6V1XY1Z z6?NT4P*gF8gjE%yT6I$RwFXcrz|tkEfU-}39eq?1QW$3K)JWJf@|1E}O=!Z+y*5Us?~}fFnmRju?ihDw(Ef zsjG9Gdl+@==gyoyyl?&fYv;;XS9Dnj7?_x;Xd!?Lp_Eb-Hs{P_2wOc!5}_pC#Ap4)0$8Kl@pqBm0hkCU5*@7kJAIwPHzn>WpCa zMW6jy7k8Iht%eX45Qb>2s4AjTYMmyciG?7e?q0XK@$PH8JMVl8u74cHiV>g!RS07N zltKzz+lBx+m|GW|_xOC=`SmIqh1pTClS315O-k>#Gu63*=e3(coAA z#47=oD`!9jqCoXBDvmpZiHA&ywS0I4eM}szI7j13tK-6eumkI*%U-GDjRzvWO^<>9 zPMf+|KxgLm*|hVn8pL#)62><|5y2I)HTOm$X>9c^nW5@gn9bP^ zl)^!chR|XNU7Bpp>z#qDv@44Cl!aC4bhbK$f}?PQf)p%mU~@yr0TTQvL2x^i2A?_< zMgd459)m_4cjut^x0awtvC{DF5LP%kgxX>xkz{NT{;K z?h$ZTA|@?R+I$iN@#f&#)4kp)kbO?FK(Jaa+otNUwzF4cM{Pe;j$>1e85S{n3*lTc zwV##T#N|bn_WRVo)qP)}+i$QVxVhRU!_sX(;h-iDM5Zs;#E$@RWcC98kO4Y*+zta| zz{S($>gl(<{a-)msZS;%5K;4mQU?6907|C}1g~cXh@64YP7ZA`fX=7_QxyPLFPy}% zTB~5l2^AR{iG#3t1G!(5B7-WX@ewID#F+-#g9ZaDFsuPMed)45!3>5Lcnlej`FiZa zMSVS`c+VgoMq+%y0ECznGSm9DfBfIqKjnjP>K>jKO<_sR=sGd}X_8`k*W)4R+z!EEowcN|K3l`(qG=481`I_ZD;q0Jz{&gY(7m{Fg=PRL zSul}=X95;249tJ=EB@=jGF$GB<1mA$5KSZiRe`F2+Dv95RM5qp#nF}Ft}l8C&OZoV zgJfcmod}h1{3bkj&!7C;du}^;v_Q%z;F%bkYSpP4G_;cw6)Woy(rN@#cvXwVL`jrb z3N*^P0g6N6Dm5|*cK?->3P{9m7*G1Zl?#XVt-W#UblHFX^x!*rHVA~rr4|ttVFD(U zO2<#IuD|@QJAdyV{`JZG4y?^LFkhuw!D2o2%RmZM77-#V&Q2azH}c|f3#riJ;k_EL zmtv~pUU0*qm*VDiC<;}v_~cL_%mNk=)f5;O7bP-uqcGIvW|n6aXhxNab)wr zOF#c}|M!o+ayW1Y)>k3q^~V|SoHHK1ceWf~bNcih#|}Sy?V?Dvd&VFVRjCSrH%0Zp zl`5%-i>uR|qRYNt2_TTFvI0t4Nvf@tMadzr;Qz+1d$}DhzS%0RD3}RCPWN?0Toc>HGrrf1`tF+5EBLzP$Was-E^*;(~W1Z zHOKFdx#rsY_UrdN-+iFFy6!o9uQ0=y*<4b?r<^4dVK?IyvgKtj`#GUvX)oxG9`(uR z6a%JMn#1z3uY19d?pU0^u)eNIjpo(k71u(ndV)m>$)(rSQ@3{uZ~yJzqL1QnkCpj= z4nqgbvYfqV+to`reh9~IgKfxU9_-j9a3(NFmKxAfXoiHScO16a9T)hfdHS2~XcCpp zegg#FKdR2_ZIz!PwOiIebF7ZgS``$+K_EKHsT!&!AO+mia3`U;iUAsS9W>xoum2-) z`ISU#C3oahRWVJXz~tQ@{1DHc5KR#E#A8vZ54MnCp|A&C-2AK!mmAPBBiK$xKw>fl zX1AX`B_=fwj2QWi<9zET1b`K*0D_}~YS5|a+_A{5_$N+dfJ4n)8y`R@Ye)_LRH3vP zK)17PYKlP_44Kcsvi_(|DFE#fF2_v=?-Z)A%F@vs8mQ8gsip@f(|9JbU3n( z(6o=As)ZA|Awzd&+u+w5pXU(F8IyTUzNzUO!vO*{=SPR5tEn=vAp(|Q&CY4bBNz^rR8>$UW~!%Po?+R*AcB?`_&>bX$I=8V9O%s9&6l z)GUYw9u*N;YpWXVlg$Sy{B}^cfBHHf8s?FUz2NI1?D&36y@xEF_ zhtu}4cv)S4eQ)q*Tzb7!hBLR?f8i=X$YMl~HW@(fXfN%)1X9AaFyh-P9BUKC0N&AO z$xm5Ys7r%38gH7;1O>=5teyU=fBx4m{-OtNLcnda{(l1y<7Jrvz&um8QWChS)GdC7 z2iEr7lrv@4tuJF~J0#U+9R8v@?<`ybjUW6u8hl=bvW|!lRjXBwz+g+5H_}Oe`w#!A zg50QB{-2d@+H+l%)(}tyEdbP8&C4dD5NMVp;L*?i_ri`HcJywU&PN7kEO9I#nrg9d z5fMlew?YMQYr|5=DT{9*7_HIp;IwF~k&xh0opy+aRK?I&9=C!b)EU^Lq>bA@!{fK_ z{IV~5)T@70&fml3HK2n|JcZj#YoEu(%Rcs&H?L(oxNlD`J&PrFo)l2k2MCga07aKezMeANDYA^jmiA%sq{zs1&PxFbhy!#8J8m zgSR{JH)lesDNlOdNbPy4-s;iBi-CRGQ(dG{Of0cDEA=!5Y&N^+%*jsho-=pP?b>Vi z+=h+ytVEe16;P2AR5&B{9kd-+zWOU3{?@ns<@H;(F0u0nMG=(Rokj^T6&8@U2=I%OsD(7ro zl~KePwx@tnC@ugF6-Obps$#2s6~($=*?<3s;KZFgbPFs)1f~R0gms9b zhWtl>GgS50Tt&@GiWsrcgiXU+Rgb4OVng661G%z#0cx&XjYy9rw1<_dqcQwM2;tc< z^dJ@kLfy;h(Bw}NEbag4=Ra$$DSd@`Daq!y`gWf5)eqOjtvq$8iX(y~vpdwf_WAa( zK_OO6hX?{UrWko7T}Y;cH2=G=`vWMvCf5~~4UOOe_zFDtE~Vt06!p0A0S$CCoME_8 z9P2l1Jsgw`{`g_!P6}l$qoTyIw-|A-4U{`!l!`m+mn614mJ%55(J=!&bREH%cDaJu zg$AK3(Oj0Lu0#USIdN)`t5bf77Y&%ZSv5MW-)T>p25cQ!N1AJl%iFa`Jlyxy27}hU zS2+>zDek>Rx)2qE^)JI#@tE5Hp#z?wfv9F0Nqn8{vla1MH+( z4q|Je^~RWNQL+(dF`@)v2520(4CaX6s9Qh8uxO{_aAen?=5-FNFJ2n0V+-sqH?L$^}4jF>-IvGOqL z!s<==KZCLdnhzV%&#K8IH2#SCI0I_Rw$5}z<`alHIz^>Ne#u(hlS># zzptRn9xW}a=gz=Zc;+Z1p=2Nj4M=QIDk0T>M4PFgXRG>~ouqmd+GN5=B{R%a1o7`G5eH);~+z61h_G>1cnaq^a3U-Q_vT)gcUihM`9{*&VK7u67>qtpl zF{nTdyOscb*^7R0XX=tknMf`fSzi@h<6GoiF&oAKksQw6uHAh9$FJr637W%nPv~5JrENKqyI!0#KKvA zS&a>wB4I;0j7#_PtBSx!rscj@u&9VBy)CN1T`~rDqKk@m4f1MSVWtAe=+fMEbK4iY z#m7DD%kKEc_v5k~G3}6Zo!se&Ap@A=+)-fdt!GbPu`qY%rHgcFTc{d?T`sX zfWC@lPe@29uU_cZ&b{E>f4$wx`Spvvs-U)pVYLN(<$zhS9tBKd6FIOj_s;kJs}^9} zcJ#SwuGZ}3(lUTwd(&(4M%jJM{oe8E|NQM+Z<$_yO*(NKj^Cr5!a6S{N9sb&m7xtN zF(Ac89hIF^gw_vh`Yk~6>Qv9mMFpD@bGw?rl#tYDmJTZ|h)SIQ+S0>o|TM!85@ym#G2odcTb`IozYaix~MUy^~u3qPb#~ z{XxU@dFm3;`yjS@%WV>#TN{ngD{hWmHIKf(z;S|8@Fo!>!)Fl4)#58?U^*_ojhJm} zyZN^3QVIyvK&0njN#)xnx2kJFtC8RscW4dUnre-V+GfMBc{f?%um7`|h7!SnK{Yn+ zlTjYjh#(lpUB8s#eEjX>I8F!8Z1FdCtv{tx#09Y)13!i^>aVv-Qzapp|U+rNF&PxDXC

    q<}HTD>7S{8~iC79|9p7AWEdBAPaF4#V_sRm7I(=@RiMuS&r zWRH638aK{Sh)e{8^~A!Kqo4aoDFBLUE012;ZY7Pi0o_ue!sMQWx_ zrD5N4_2ea3a&stw_D>)B@3e9vG;SLFc})~nHsuhU36Cgh_<0v_rBS&pmevQ z6PxQ%ixZQkU<$e1%!--d+%eq!nQagHqTf7rv^(R2l ziz{FUFYl0ooPmVYVfz&ydHt*Vk}un~cg?Ig2$+C*Jdp=lt+Xu9%Fwsr~5aHodXU>%M_uu+I`@iJj zcH;BMW-98DeNE^TGnE7^ZNt9nKlH}me&*Lbeo5x`Zre7+L?q4V3H~s%qDC(aru)am zgoU9Y2?9mfToi-<&oRefBZP#h3N@spDi{Kh-3%ZjUq=vAegRaMdl3#yE2+kKpx1BN znkS3jaMkr^KKU_Rb|WTCNGel-RCiYaI>E`q$@({)I&sq~DCZ39@ z*LT|7Hc*ii1UetagoG(B9DeLC{NllG+udvD&YwQ=nN!DZxbE72zvVN3dgkJu>+WZV zKaY!Nt6|q%kF#b_{9I*c1I~RkD87Y0Rei;XcGvo*tvA@ z`Ul|1?NGr)pa~{Y-PN0SDa|1m+|e8>40zL|r!?g*SlWiN{_)%H^5$D=`v3Sun*s<@ zkx8UxIoi=!&j`ab_-(2!CPlFIvWr#JKu}xK7_d5?X<-B#Qic#~P&cA= zKrQVao5yF|H3Z=p9b*Z^19Sv$B%G@CgUz_o5zPR^XfQ(SF(`wl-zooI+2GZFbBR?# zAyyKpTk!6E!_Xu^Br59y?@2R^8v#TY|8diHSWOmcynvBtt<7>UGixLWjRl+ue zTAjz^m}9U_OT_`g@Et#@3gn>F__IX6_Azk}pJ~TA`sXI=0`+esz9sRT+QD=5aD;({ z=G$mDHBz6}d>FAz%4RXwcr`vStklV<&5gq-)D<>y3yKZy_Ta$E8@B11oH}bTMB=zm zpU}caEJLuRMv6yBj-yRUyDbidP;IHThs-F*AdX!X1(1S`P{U0KOO5#Ns;C6Kl0JlOQ*2+DyUC}iByob z9Yz)q27xwo^F?#Upt21@NY%H8{AzCViRg~q3jM0@c^051ESncLzWFgFyyg%7{M?~i zFhBp3&wb8(H`%hZWAj$+(Z7Tgh`3ys@Nhk?97+_%#*1~~is`gT3BNWUib68u)@mmthbN=ar zfAQ%LAK1P0spE&wo;$f*Hr7{{w@v21@ppb77w$$UkPcGNC1`>HYiroM2i*AKCqMo2 z`EG7HFN(hOj?9b#s=HGu=n51%NmG=RH`b2LR$uwge~;-RE}pC#Dd9JwzzQ^B>s6nA z!)spsTYtD`amTJXwMmE6NlHc*L$N}u=5Yznq*eNdqiv~eI>?%C;I3sBk_w-gm5qde zUa|`)b8RKBrj%TY2qAM5IeKa3^!m!5edIqbf80}W@)pUoPGv?ELm?)aX0kEEq>}?T z-1#5>_|&g{OgCNJv$PXEq!jZ~B%zoVA&XE}vn)gGh^Nn` z^JE;KpWrs9h2WwXAsG@f*@d`Cr`n|i%+1dq+`9C#7yQhfANYIhzCrS8bA>8MCO|PK zcK2-?^Sj^lPk(cCV|kXkz9Vy?(VMgy#DrAOzwjG7F>DIF+K6Unt?&yB^rjLIA-@X$oCvf~Opx3zxkZL2? zmXM`^`KW`QMcg|vNQ_GA!QJjnF9lw6QqKocs?7_uS+J;QqLJc4sSYg9>}=x;8?>qd zGQQg|lQfYTnn+t-3Nc*-c76E+ADWU!na0r5AK)Xsi>ssCZ~Zhd!}&`nNoY_bM$X#d z%gs~SFhl%mfK~z2S_Pw7nl3;WzxJVD4kVzU6F_Bfu~(zG9wyveHo93=^(^CF0;Z?U zs-q#!ro*&sTHD}&Yo7}E)SydSONA>T0d(YI7erEk)|XbS5|5D3{t|!5=$M26c;WYm z{~SS}cK;#~vKU=Nb8P!tIr_6TcvdaY*v058LlYDZ>#1Jsph?^d&~LT_89Dk!NE$ZY z5P8J|jXtXg2p|!0gYg3gJI4N(zN_t~fT-AtD;(_4hDF2nOQZGZ$fBs6rIGCC=dZ&S z{6NIQfsUFGLDbS`Wz1J=?#LDy)VRIoinj1L)~=fF53;!9h#8IRO&hllP%==3AmmOE zs00LeJ!>t?pMbAEx*s;`Y2NC=xMW1HMr<%F&jFK-y4bdDvc-}yd|v}28VICjzv@6+ z{s$ciwXs3ZI8`0Ru>95W@wlx>cO-EA@zuNky5Ii&PUOd* z_0%)R4`JIu*>|JvzplIN#?qB8&1;)JyUB34*N>psI@TZmRbPwgWte)piww=MhX%Sq zhwVyR5)6sHc_Si8Y#b1%2?ZPly99l<8SJwA{rB7c@bCWn69P%2jM|Z+8~tRSU0Hqc zbDoK9`zM!OE7v`Ydv91>#gm`%1WD-~fB&yKEVxN<4=i*_gUXpZ@0el@=Py;VL2JS= zx+d2QmFEGaMVrz}OkI+(s*!desB~USMMKueAoS|a+TeOng(wA5Fj1U6j7vuz^20Cq z-L=zC_=YdP?Z`bRF0OWy&XmBc2u_?k``qU~i#reCm~QTmJShAN1Wnl#YKM{fzS+Qtc86f}Lv4B`L4C z{=$bo_-zNTPu*l`+hRveB^L-y32Mapoac)xa;iezSn>AbR_7f=shnTA*KoUJlgJ!x zO2`BvH1SatEa>2T$w3QcI)=nz2U9@@w#8p9amz@9MK62tN`APDytZd zoS@F$b>{AF)}LIyD1^+cNDJkOQ!FB1tYCm3EL4 zO+z(i54|vSibH(S*Y2(Tz45<`g%AR+VP%wyQY?xo1)5|!flLNa)pYkDNqk`=jfU`2 zjg&>W9SHzsLodIQ8<&3N4S#|{-5hHj(3dw*BIhN2`D4Ec7mlO!WaI=k%5R?^(007B z<;aN)Qd}Cks1D;|8T+nUT|V{5?|8a3aXMO5(|px^kThVBRL4Yx+~KxE3~?JzG-|7= z_(~$TyX7Ybb{xE`R^fqvSHrv75Oe+Dm>#75cHG>ℑx-qk$HT(2Fm+f{KxMRpL4; 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 `LbM8pfO%p^w%rXXaKnw_j4yYJG6fvSG%8ZJl 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�Z4q88607s5!ErJN6`Ahv0k% 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 z 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�!z@Uzq5fvp;Mb%{HKo2Ty9)e{?3Zv9^ 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�%lge?hDrv6lzPb&8yj| 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 int: + parser = argparse.ArgumentParser( + description="Build the TrialMatchAI system (prepare corpus + search index)." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--trials-json-folder", + default=None, + help="Normalized trial JSONs to prepare from. Defaults to paths.trials_json_folder.", + ) + parser.add_argument("--processed-trials-folder", default="data/processed_trials") + parser.add_argument("--processed-criteria-folder", default="data/processed_criteria") + parser.add_argument( + "--concepts-csv", + default=None, + help="OMOP CONCEPT.csv to also build the concept-linking DB (optional).", + ) + parser.add_argument("--synonym-csv", default=None, help="OMOP CONCEPT_SYNONYM.csv (optional).") + parser.add_argument("--force-prepare", action="store_true", help="Re-prepare all trials.") + parser.add_argument("--reindex", action="store_true", help="Rebuild the index even if present.") + parser.add_argument( + "--status", action="store_true", help="Print what is already built and exit." + ) + args = parser.parse_args() + + config = load_config(args.config) + + if args.status: + state = build_state( + config, + processed_trials_folder=args.processed_trials_folder, + processed_criteria_folder=args.processed_criteria_folder, + ) + print(json.dumps(state, indent=2)) + ready = state["ready_to_match"] + logger.info("System %s to match.", "READY" if ready else "NOT ready") + return 0 if ready else 1 + + # Fail fast on missing GPU / extras / HF access before any heavy work. + preflight_issues = run_build_preflight(config) + if preflight_issues: + logger.error("Build aborted: resolve the %s issue(s) above.", len(preflight_issues)) + return 1 + + build_system( + config, + trials_json_folder=args.trials_json_folder, + processed_trials_folder=args.processed_trials_folder, + processed_criteria_folder=args.processed_criteria_folder, + force_prepare=args.force_prepare, + force_reindex=args.reindex, + ) + + # Optional: chain concept-DB build (needs user-supplied OMOP CSV). + if args.concepts_csv: + logger.info("=== build: concepts stage ===") + from trialmatchai.cli.build_concepts import main as build_concepts_main + + argv = ["--concept-csv", args.concepts_csv] + if args.synonym_csv: + argv += ["--synonym-csv", args.synonym_csv] + if args.config: + argv += ["--config", args.config] + saved = sys.argv + try: + sys.argv = ["trialmatchai build-concepts", *argv] + build_concepts_main() + finally: + sys.argv = saved + else: + logger.warning( + "Concept DB not built (no --concepts-csv): entity->concept linking will " + "degrade gracefully. Supply an OMOP CONCEPT.csv to enable it." + ) + + state = build_state( + config, + processed_trials_folder=args.processed_trials_folder, + processed_criteria_folder=args.processed_criteria_folder, + ) + logger.info("Build done. ready_to_match=%s", state["ready_to_match"]) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/e2e.py b/src/trialmatchai/cli/e2e.py new file mode 100644 index 00000000..4d3b32b3 --- /dev/null +++ b/src/trialmatchai/cli/e2e.py @@ -0,0 +1,69 @@ +"""``trialmatchai e2e`` — run the whole pipeline end-to-end in one command. + +Ingest patient inputs (any supported format, auto-detected) -> build the search +index -> match. Every stage is idempotent: re-running skips already-imported +patients, an existing index, and already-matched patients. +""" + +from __future__ import annotations + +import argparse +import sys + +from trialmatchai.config.config_loader import load_config +from trialmatchai.orchestration import run_e2e +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Run the TrialMatchAI pipeline end-to-end (ingest -> index -> match)." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--input", + action="append", + default=[], + help="Patient input file or directory (repeatable). Format is auto-detected. " + "Omit if profiles are already staged.", + ) + parser.add_argument( + "--format", + default="auto", + choices=["auto", "text", "phenopacket", "fhir", "fhir-ndjson", "omop"], + help="Input format for --input. Defaults to auto-detection.", + ) + parser.add_argument( + "--processed-trials-folder", + default="data/processed_trials", + help="Folder of prepared trial JSON files used to build the index.", + ) + parser.add_argument( + "--processed-criteria-folder", + default="data/processed_criteria", + help="Folder of prepared criteria subfolders used to build the index.", + ) + parser.add_argument("--no-entities", action="store_true", help="Skip entity annotation on ingest.") + parser.add_argument("--reingest", action="store_true", help="Re-import patients even if profiles exist.") + parser.add_argument("--reindex", action="store_true", help="Rebuild the search index even if present.") + parser.add_argument("--rematch", action="store_true", help="Re-match patients even if results exist.") + args = parser.parse_args() + + config = load_config(args.config) + return run_e2e( + config, + args.input, + input_format=args.format, + with_entities=not args.no_entities, + processed_trials_folder=args.processed_trials_folder, + processed_criteria_folder=args.processed_criteria_folder, + force_reingest=args.reingest, + force_reindex=args.reindex, + force_rematch=args.rematch, + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/cli/main.py b/src/trialmatchai/cli/main.py index f5393719..ef6841e3 100644 --- a/src/trialmatchai/cli/main.py +++ b/src/trialmatchai/cli/main.py @@ -37,7 +37,22 @@ def main() -> int: help="Import patient data profiles", add_help=False, ) + subparsers.add_parser( + "build", + help="Build the system (prepare corpus + search index), resumable", + add_help=False, + ) subparsers.add_parser("run", help="Run the matching pipeline", add_help=False) + subparsers.add_parser( + "e2e", + help="Run the whole pipeline end-to-end (ingest -> index -> match), idempotent", + add_help=False, + ) + subparsers.add_parser( + "trec", + help="End-to-end TREC CT evaluation (preset over e2e)", + add_help=False, + ) args, remainder = parser.parse_known_args() if args.command == "healthcheck": @@ -52,8 +67,14 @@ def main() -> int: from trialmatchai.cli.update_registry import main as command elif args.command == "import-patient": from trialmatchai.cli.import_patient import main as command + elif args.command == "build": + from trialmatchai.cli.build import main as command elif args.command == "run": from trialmatchai.cli.run import main as command + elif args.command == "e2e": + from trialmatchai.cli.e2e import main as command + elif args.command == "trec": + from trialmatchai.cli.trec import main as command else: # pragma: no cover - argparse enforces choices parser.error(f"Unknown command: {args.command}") diff --git a/src/trialmatchai/cli/trec.py b/src/trialmatchai/cli/trec.py new file mode 100644 index 00000000..f81df383 --- /dev/null +++ b/src/trialmatchai/cli/trec.py @@ -0,0 +1,69 @@ +"""``trialmatchai trec`` — end-to-end evaluation over the TREC CT tracks. + +A preset over the core e2e orchestration: converts TREC patient topics, builds a +per-track search index restricted to each track's NCT collection, and runs +matching with per-patient resume. Idempotent — re-running skips finished work. +""" + +from __future__ import annotations + +import argparse +import sys + +from trialmatchai.trec.corpus import DEFAULT_TRACKS, TRACK_KEYS +from trialmatchai.trec.runner import run_tracks + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Run TrialMatchAI end-to-end on the official TREC Clinical Trials tracks." + ) + parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") + parser.add_argument( + "--tracks", + default=" ".join(DEFAULT_TRACKS), + help=f"Space-separated track keys to run. Choices: {', '.join(TRACK_KEYS)}. " + f"Default: {' '.join(DEFAULT_TRACKS)} (sigir has no official direct source).", + ) + parser.add_argument("--data-dir", default="data", help="Base data directory.") + parser.add_argument( + "--results-root", default=".", help="Root under which results_trec/ are written." + ) + parser.add_argument( + "--processed-trials-folder", + default=None, + help="Prepared trial JSONs for indexing. Defaults to /processed_trials. " + "Point at /nfs/scratch to build the index from there while data-dir lives on /nfs/home.", + ) + parser.add_argument( + "--processed-criteria-folder", + default=None, + help="Prepared criteria subfolders for indexing. Defaults to /processed_criteria.", + ) + parser.add_argument( + "--index-only", + action="store_true", + help="Convert + build indexes only; skip matching (e.g. on a CPU node).", + ) + parser.add_argument("--reindex", action="store_true", help="Rebuild indexes even if present.") + parser.add_argument("--rematch", action="store_true", help="Re-match patients even if results exist.") + parser.add_argument("--no-eval", action="store_true", help="Skip recall@k evaluation against qrels.") + args = parser.parse_args() + + track_keys = args.tracks.split() + return run_tracks( + track_keys, + config_path=args.config, + data_dir=args.data_dir, + results_root=args.results_root, + processed_trials_folder=args.processed_trials_folder, + processed_criteria_folder=args.processed_criteria_folder, + index_only=args.index_only, + evaluate=not args.no_eval, + force_reindex=args.reindex, + force_rematch=args.rematch, + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/config/config.json b/src/trialmatchai/config/config.json index 8e102601..7f38af8b 100644 --- a/src/trialmatchai/config/config.json +++ b/src/trialmatchai/config/config.json @@ -113,6 +113,15 @@ "unknown_is_neutral": true, "write_reports": true }, + "query_expansion": { + "enabled": false, + "backend": null, + "model": null, + "adapter": null, + "max_new_tokens": 2048, + "max_main_conditions": 11, + "max_other_conditions": 50 + }, "use_cot_reasoning": true, "rag": { "batch_size": 4, diff --git a/src/trialmatchai/config/settings.py b/src/trialmatchai/config/settings.py index 92ac56cc..73429169 100644 --- a/src/trialmatchai/config/settings.py +++ b/src/trialmatchai/config/settings.py @@ -197,6 +197,19 @@ class LLMRerankerSettings(BaseModel): batch_size: int = Field(20, ge=1) +class QueryExpansionSettings(BaseModel): + """Runtime CoT query expansion (legacy keywords.json behaviour).""" + + enabled: bool = False + backend: Literal["vllm", "transformers"] | None = None + model: str | None = None + adapter: str | None = None + max_new_tokens: int = Field(2048, ge=1) + max_main_conditions: int = Field(11, ge=1) + max_other_conditions: int = Field(50, ge=1) + trust_remote_code: bool = False + + class TrialMatchSettings(BaseModel): entity_extraction: EntityExtractionSettings = Field( default_factory=EntityExtractionSettings @@ -214,6 +227,9 @@ class TrialMatchSettings(BaseModel): LLM_reranker: LLMRerankerSettings search: SearchSettings constraints: ConstraintSettings = Field(default_factory=ConstraintSettings) + query_expansion: QueryExpansionSettings = Field( + default_factory=QueryExpansionSettings + ) use_cot_reasoning: bool = True rag: RagSettings vllm: VllmSettings @@ -246,6 +262,9 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "base_model_revision", ), "TRIALMATCHAI_MODEL_COT_ADAPTER_PATH": ("model", "cot_adapter_path"), + "TRIALMATCHAI_QUERY_EXPANSION_MODEL": ("query_expansion", "model"), + "TRIALMATCHAI_QUERY_EXPANSION_BACKEND": ("query_expansion", "backend"), + "TRIALMATCHAI_QUERY_EXPANSION_ADAPTER": ("query_expansion", "adapter"), "TRIALMATCHAI_MODEL_RERANKER_MODEL_PATH": ( "model", "reranker_model_path", @@ -308,6 +327,7 @@ def apply_env_overrides(raw: Dict[str, Any]) -> Dict[str, Any]: "unknown_is_neutral", ), "TRIALMATCHAI_CONSTRAINTS_WRITE_REPORTS": ("constraints", "write_reports"), + "TRIALMATCHAI_QUERY_EXPANSION_ENABLED": ("query_expansion", "enabled"), "TRIALMATCHAI_FIRST_LEVEL_ENABLED": ("search", "first_level", "enabled"), "TRIALMATCHAI_FIRST_LEVEL_LLM_EXPANSION_ENABLED": ( "search", diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index bbee0214..aec62f93 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -311,9 +311,15 @@ def run_rag_processing( logger.info("RAG-based trial matching complete.") -def main_pipeline(config_path: str | None = None) -> int: +def main_pipeline( + config_path: str | None = None, + *, + config: Dict | None = None, + resume: bool = False, +) -> int: logger.info("Starting TrialMatchAI pipeline...") - config = load_config(config_path) + if config is None: + config = load_config(config_path) paths = config["paths"] create_directory(paths["output_dir"]) @@ -334,6 +340,10 @@ def main_pipeline(config_path: str | None = None) -> int: require_search_tables=True, ) if index_issues: + logger.error( + "The search system is not built. Run `trialmatchai build` to prepare " + "the corpus and build the index, then retry matching." + ) return 1 patient_inputs = _load_patient_inputs(config) @@ -407,10 +417,17 @@ def main_pipeline(config_path: str | None = None) -> int: completed_patients = 0 failed_patients = 0 + skipped_patients = 0 for profile, summary in patient_inputs: patient_id = profile.patient_id - token = set_request_id(patient_id) output_folder = Path(paths["output_dir"]) / patient_id + if resume: + ranked_path = output_folder / "ranked_trials.json" + if ranked_path.exists() and ranked_path.stat().st_size > 0: + logger.info("Resume: skipping already-matched patient %s", patient_id) + skipped_patients += 1 + continue + token = set_request_id(patient_id) create_directory(str(output_folder)) try: @@ -498,9 +515,14 @@ def main_pipeline(config_path: str | None = None) -> int: finally: reset_request_id(token) - if completed_patients == 0: + if completed_patients == 0 and skipped_patients == 0: logger.error("Pipeline failed for all %s patient(s).", len(patient_inputs)) return 1 + if completed_patients == 0 and skipped_patients: + logger.info( + "Resume: all %s patient(s) already matched; nothing to do.", + skipped_patients, + ) if failed_patients: logger.warning("Pipeline completed with %s patient failure(s).", failed_patients) return 0 diff --git a/src/trialmatchai/matching/query_expansion.py b/src/trialmatchai/matching/query_expansion.py new file mode 100644 index 00000000..0ec4cd68 --- /dev/null +++ b/src/trialmatchai/matching/query_expansion.py @@ -0,0 +1,199 @@ +"""Runtime CoT query expansion (re-introduced from the legacy pipeline). + +The legacy matcher ran a chain-of-thought model over each patient's narrative to +produce the expanded ``keywords.json`` (primary conditions + synonyms, secondary +factors, expanded sentences) that feeds first-level retrieval. The refactor +dropped this; this module restores it faithfully while making the model a config +knob. + +Verbatim SYSTEM_PROMPT and generation behaviour are preserved from +``source/Matcher/pipeline/phenopacket_processor.py`` (main branch). The model and +backend default to the configured CoT reasoning model but are overridable via the +``query_expansion`` config block. Disabled by default; the TREC preset turns it on. +""" + +from __future__ import annotations + +from typing import Any, Dict, List + +from trialmatchai.utils.json_utils import extract_json_object +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + +# Verbatim from the legacy ClinicalSummarizer.generate_summary SYSTEM_PROMPT. +SYSTEM_PROMPT = """ +You are a specialized medical assistant designed for precise and accurate clinical trial matching. +Analyze the patient's medical description carefully and extract clinically relevant information for trial eligibility assessment. + +1. **Primary Condition**: + - Determine the primary medical conditions based on explicit patient information and overall clinical context. + - List up to 10 medically recognized synonyms, aliases, or closely related medical terms for the primary conditions. + - Include the identified primary conditions and their associated synonyms or related terms within the "main_conditions" list. + +2. **Secondary Clinical Factors**: + - Provide up to 50 clinically significant additional factors, including comorbidities, concurrent medical conditions, molecular or genetic biomarkers, prior therapies, relevant medical history, and clinically notable patient characteristics explicitly mentioned in the patient description. + - Provide these factors in the "other_conditions" list. + +3. **Expanded Clinical Descriptions**: + - Based solely on the original patient-provided data, generate semantically accurate and medically sound statements resembling real-life medical notes. + - **Crucial**: Expanded descriptions must strictly reflect explicit patient-reported information without introducing new or inferred medical details. + +Output: +Return a JSON object in the exact following structure without any additional commentary: + +{ +"main_conditions": ["PrimaryCondition", "Synonym1", "Synonym2", "..."], +"other_conditions": ["AdditionalCondition1", "AdditionalCondition2", "..."], +"expanded_sentences": [ + "Expanded note for sentence 1...", + "Expanded note for sentence 2...", + "..." +] +} +""".strip() + +_EMPTY = {"main_conditions": [], "other_conditions": [], "expanded_sentences": []} + + +def _resolve_settings(config: Dict[str, Any]) -> Dict[str, Any]: + qe = dict(config.get("query_expansion") or {}) + model_cfg = config.get("model", {}) + return { + "backend": qe.get("backend") or config.get("cot_backend") or "transformers", + "model": qe.get("model") or model_cfg.get("base_model"), + "adapter": qe.get("adapter", model_cfg.get("cot_adapter_path")), + "device": str(config.get("global", {}).get("device", 0)), + "max_new_tokens": int(qe.get("max_new_tokens", 2048)), + "trust_remote_code": bool( + qe.get("trust_remote_code", model_cfg.get("trust_remote_code", False)) + ), + "max_main_conditions": int(qe.get("max_main_conditions", 11)), + "max_other_conditions": int(qe.get("max_other_conditions", 50)), + } + + +class QueryExpander: + """CoT expander; loads its model lazily so import stays base-deps safe.""" + + def __init__(self, settings: Dict[str, Any]): + self.settings = settings + self.backend = settings["backend"] + if not settings.get("model"): + raise ValueError("query_expansion requires a model (set query_expansion.model or model.base_model)") + if self.backend == "vllm": + self._init_vllm() + elif self.backend == "transformers": + self._init_transformers() + else: + raise ValueError(f"Unsupported query_expansion.backend: {self.backend}") + + # -- backends ---------------------------------------------------------- # + def _init_transformers(self) -> None: + import torch # noqa: F401 + from transformers import AutoModelForCausalLM, AutoTokenizer + + s = self.settings + self.tokenizer = AutoTokenizer.from_pretrained( + s["model"], trust_remote_code=s["trust_remote_code"] + ) + model = AutoModelForCausalLM.from_pretrained( + s["model"], + torch_dtype="auto", + device_map="auto", + trust_remote_code=s["trust_remote_code"], + ) + if s.get("adapter"): + from peft import PeftModel + + model = PeftModel.from_pretrained(model, s["adapter"]) + model.eval() + self.model = model + + def _init_vllm(self) -> None: + from trialmatchai.models.llm.vllm_loader import load_vllm_engine + + s = self.settings + self.engine, self.tokenizer, self.lora_request = load_vllm_engine( + s["model"], adapter_path=s.get("adapter") + ) + + # -- generation -------------------------------------------------------- # + def _generate(self, narrative: str) -> str: + messages = [ + {"role": "system", "content": SYSTEM_PROMPT}, + {"role": "user", "content": narrative}, + ] + if self.backend == "transformers": + import torch + + prompt = self.tokenizer.apply_chat_template( + messages, add_generation_prompt=True, return_tensors="pt" + ).to(self.model.device) + with torch.no_grad(): + out = self.model.generate( + prompt, + max_new_tokens=self.settings["max_new_tokens"], + do_sample=False, + pad_token_id=self.tokenizer.eos_token_id, + ) + return self.tokenizer.decode(out[0][prompt.shape[-1]:], skip_special_tokens=True) + + # vllm + from vllm import SamplingParams + + prompt_text = self.tokenizer.apply_chat_template( + messages, add_generation_prompt=True, tokenize=False + ) + params = SamplingParams(temperature=0.0, max_tokens=self.settings["max_new_tokens"]) + results = self.engine.generate([prompt_text], params, lora_request=self.lora_request) + return results[0].outputs[0].text if results and results[0].outputs else "" + + def expand(self, narrative_sentences: List[str]) -> Dict[str, Any]: + """Return {main_conditions, other_conditions, expanded_sentences}.""" + narrative = " ".join(s for s in narrative_sentences if s).strip() + if not narrative: + return dict(_EMPTY) + try: + raw = self._generate(narrative) + parsed = extract_json_object(raw) + if not isinstance(parsed, dict): + raise ValueError("expansion output was not a JSON object") + return {key: list(parsed.get(key) or []) for key in _EMPTY} + except Exception as exc: + logger.error("Query expansion failed; falling back to no expansion: %s", exc) + return dict(_EMPTY) + + +def build_query_expander(config: Dict[str, Any]) -> QueryExpander | None: + """Construct an expander when ``query_expansion.enabled`` is true, else None.""" + qe = config.get("query_expansion") or {} + if not qe.get("enabled"): + return None + return QueryExpander(_resolve_settings(config)) + + +def enrich_summary( + summary: Dict[str, Any], + expansion: Dict[str, Any], + *, + max_main_conditions: int = 11, + max_other_conditions: int = 50, +) -> Dict[str, Any]: + """Fold a CoT expansion into a matching summary (legacy keywords.json shape). + + The legacy ``expanded_sentences`` map to the summary's ``patient_narrative``. + Only non-empty expansion fields overwrite; otherwise the deterministic + summary is left intact. + """ + out = dict(summary) + main = expansion.get("main_conditions") or [] + other = expansion.get("other_conditions") or [] + sentences = expansion.get("expanded_sentences") or [] + if main: + out["main_conditions"] = main[:max_main_conditions] + if other: + out["other_conditions"] = other[:max_other_conditions] + if sentences: + out["patient_narrative"] = sentences + return out diff --git a/src/trialmatchai/orchestration.py b/src/trialmatchai/orchestration.py new file mode 100644 index 00000000..12db24ee --- /dev/null +++ b/src/trialmatchai/orchestration.py @@ -0,0 +1,519 @@ +"""Idempotent end-to-end orchestration for TrialMatchAI. + +Chains the three pipeline stages — ingest patient inputs, build the search +index, run matching — and skips work that is already done: + + * ingest: a patient is skipped if its canonical profile already exists. + * index: a stage is skipped if the search tables already exist. + * match: a patient is skipped if it already has a non-empty ranked_trials.json. + +Both the general ``trialmatchai e2e`` command and the TREC preset are thin +wrappers over these stages, so idempotency behaves identically everywhere. +""" + +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any, Dict, Iterable, Iterator, Sequence + +from trialmatchai.search import LanceDBSearchBackend +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +# --------------------------------------------------------------------------- # +# Ingest stage +# --------------------------------------------------------------------------- # +def ingest_inputs( + config: Dict[str, Any], + inputs: Sequence[str | Path], + *, + input_format: str = "auto", + with_entities: bool = True, + force: bool = False, +) -> int: + """Import patient inputs (any supported format) into canonical profiles. + + Skips a patient whose profile already exists unless ``force``. Returns the + number of profiles available afterwards. + """ + from trialmatchai.interop.exporters import profile_to_matching_summary + from trialmatchai.interop.importers import import_patient_path + + patient_cfg = config.get("patient_inputs", {}) + profile_dir = Path(patient_cfg.get("profile_dir", "data/patients/profiles")) + summary_dir = Path(patient_cfg.get("summary_dir", "data/patients/summaries")) + profile_dir.mkdir(parents=True, exist_ok=True) + summary_dir.mkdir(parents=True, exist_ok=True) + + entity_annotator = _maybe_entity_annotator(config) if with_entities else None + strict = bool(patient_cfg.get("strict_validation", False)) + + imported = 0 + for raw in inputs: + profiles = import_patient_path( + raw, + input_format=input_format, + entity_annotator=entity_annotator, + strict=strict, + ) + for profile in profiles: + profile_path = profile_dir / f"{profile.patient_id}.json" + if not force and profile_path.exists(): + logger.info("Ingest skipped (exists): %s", profile.patient_id) + continue + profile_path.write_text( + json.dumps( + profile.model_dump(mode="json", exclude_none=True), + indent=2, + ensure_ascii=False, + ), + encoding="utf-8", + ) + (summary_dir / f"{profile.patient_id}.json").write_text( + json.dumps(profile_to_matching_summary(profile), indent=2), + encoding="utf-8", + ) + imported += 1 + logger.info("Ingested patient %s", profile.patient_id) + + total = len(list(profile_dir.glob("*.json"))) + logger.info("Ingest stage: %s new, %s profiles total", imported, total) + return total + + +def _maybe_entity_annotator(config: Dict[str, Any]): + try: + from trialmatchai.entities import build_entity_annotator + from trialmatchai.models.embedding import build_embedder + + embedder = build_embedder(config) + return build_entity_annotator(config, embedder=embedder) + except Exception as exc: # pragma: no cover - optional model stack + logger.warning("Entity annotation unavailable; ingesting without it: %s", exc) + return None + + +# --------------------------------------------------------------------------- # +# Query-expansion stage (runtime CoT, faithful to legacy keywords.json) +# --------------------------------------------------------------------------- # +def expand_queries(config: Dict[str, Any], *, force: bool = False) -> int: + """Enrich each patient's matching summary via the CoT query expander. + + No-op unless ``query_expansion.enabled``. Loads the model once, enriches + every summary, then frees it before the match stage loads its own model. + Idempotent: a summary already marked ``query_expanded`` is skipped. + """ + from trialmatchai.matching.query_expansion import build_query_expander, enrich_summary + + expander = build_query_expander(config) + if expander is None: + logger.info("Query expansion disabled; using deterministic summaries.") + return 0 + + patient_cfg = config.get("patient_inputs", {}) + profile_dir = Path(patient_cfg.get("profile_dir", "data/patients/profiles")) + summary_dir = Path(patient_cfg.get("summary_dir", "data/patients/summaries")) + enriched = 0 + for profile_path in sorted(profile_dir.glob("*.json")): + pid = profile_path.stem + summary_path = summary_dir / f"{pid}.json" + if not summary_path.exists(): + continue + summary = _read_json(summary_path) + if not force and summary.get("query_expanded"): + continue + profile = _read_json(profile_path) + narrative = [n.get("text", "") for n in profile.get("notes", []) if n.get("text")] + if not narrative: + narrative = list(summary.get("patient_narrative", [])) + expansion = expander.expand(narrative) + merged = enrich_summary(summary, expansion) + merged["query_expanded"] = True + summary_path.write_text(json.dumps(merged, indent=2), encoding="utf-8") + enriched += 1 + logger.info("Query-expanded %s", pid) + + # Free the expander's model before the match stage loads its own. + del expander + try: + import torch + + if torch.cuda.is_available(): + torch.cuda.empty_cache() + except Exception: + pass + logger.info("Query-expansion stage: enriched %s summaries.", enriched) + return enriched + + +# --------------------------------------------------------------------------- # +# Index stage +# --------------------------------------------------------------------------- # +def _read_json(path: Path) -> dict: + return json.loads(path.read_text(encoding="utf-8")) + + +def _iter_trial_docs(folder: Path, nct_filter: set[str] | None) -> Iterator[dict]: + if not folder.exists(): + return + for path in sorted(folder.glob("*.json")): + if nct_filter is not None and path.stem not in nct_filter: + continue + yield _read_json(path) + + +def _iter_criteria_docs(folder: Path, nct_filter: set[str] | None) -> Iterator[dict]: + if not folder.exists(): + return + for subdir in sorted(p for p in folder.iterdir() if p.is_dir()): + if nct_filter is not None and subdir.name not in nct_filter: + continue + for path in sorted(subdir.glob("*.json")): + yield _read_json(path) + + +def build_index( + config: Dict[str, Any], + *, + processed_trials_folder: str | Path = "data/processed_trials", + processed_criteria_folder: str | Path = "data/processed_criteria", + nct_filter: Iterable[str] | None = None, + force: bool = False, +) -> dict[str, Any]: + """Build the LanceDB search tables, optionally restricted to ``nct_filter``. + + Skips when both tables already exist unless ``force``. The backend (and thus + the target db path) comes from ``config['search_backend']``. + """ + backend = LanceDBSearchBackend.from_config(config) + search_cfg = config.get("search_backend", {}) + trials_table = search_cfg.get("trials_table", "trials") + criteria_table = search_cfg.get("criteria_table", "criteria") + + if ( + not force + and backend.table_exists(trials_table) + and backend.table_exists(criteria_table) + ): + logger.info("Index stage skipped: tables already present at %s", backend.db_path) + return {"skipped": True, "db_path": str(backend.db_path)} + + nct_set = set(nct_filter) if nct_filter is not None else None + trial_docs = list(_iter_trial_docs(Path(processed_trials_folder), nct_set)) + if not trial_docs: + raise RuntimeError( + f"No prepared trial documents found in {processed_trials_folder}" + + (f" for {len(nct_set)} filtered NCT ids" if nct_set else "") + ) + n_trials = backend.index_trials(trial_docs, recreate=True) + logger.info("Indexed %s trial documents.", n_trials) + + criteria_docs = list(_iter_criteria_docs(Path(processed_criteria_folder), nct_set)) + n_criteria = 0 + if criteria_docs: + n_criteria = backend.index_criteria(criteria_docs, recreate=True) + logger.info("Indexed %s criteria documents.", n_criteria) + else: + logger.warning("No criteria documents found; criteria channel will be empty.") + + return { + "skipped": False, + "db_path": str(backend.db_path), + "trials": n_trials, + "criteria": n_criteria, + } + + +# --------------------------------------------------------------------------- # +# Match stage +# --------------------------------------------------------------------------- # +def count_pending(config: Dict[str, Any]) -> tuple[int, int]: + """Return (pending, done) patient counts for the configured dirs.""" + patient_cfg = config.get("patient_inputs", {}) + profile_dir = Path(patient_cfg.get("profile_dir", "data/patients/profiles")) + output_dir = Path(config["paths"]["output_dir"]) + pending = done = 0 + for profile_path in sorted(profile_dir.glob("*.json")): + ranked = output_dir / profile_path.stem / "ranked_trials.json" + if ranked.exists() and ranked.stat().st_size > 0: + done += 1 + else: + pending += 1 + return pending, done + + +def run_matching( + config: Dict[str, Any], + *, + resume: bool = True, + force: bool = False, +) -> int: + """Run the matching pipeline with per-patient resume. + + When resuming, the expensive model stack is not even loaded if every patient + is already done. + """ + use_resume = resume and not force + if use_resume: + pending, done = count_pending(config) + if pending == 0: + logger.info("Match stage skipped: all %s patient(s) already matched.", done) + return 0 + logger.info("Match stage: %s pending, %s already done.", pending, done) + # Imported lazily so the convert/index stages (and the CPU-only --index-only + # path) do not pull in the heavy model stack that main.py imports. + from trialmatchai.main import main_pipeline + + return main_pipeline(config=config, resume=use_resume) + + +# --------------------------------------------------------------------------- # +# Full e2e +# --------------------------------------------------------------------------- # +def run_e2e( + config: Dict[str, Any], + inputs: Sequence[str | Path], + *, + input_format: str = "auto", + with_entities: bool = True, + processed_trials_folder: str | Path = "data/processed_trials", + processed_criteria_folder: str | Path = "data/processed_criteria", + nct_filter: Iterable[str] | None = None, + force_reingest: bool = False, + force_reindex: bool = False, + force_rematch: bool = False, +) -> int: + """Ingest -> index -> match, each stage idempotent. Returns a process code.""" + if inputs: + ingest_inputs( + config, + inputs, + input_format=input_format, + with_entities=with_entities, + force=force_reingest, + ) + expand_queries(config) + build_index( + config, + processed_trials_folder=processed_trials_folder, + processed_criteria_folder=processed_criteria_folder, + nct_filter=nct_filter, + force=force_reindex, + ) + return run_matching(config, resume=True, force=force_rematch) + + +# --------------------------------------------------------------------------- # +# Build (setup half): prepare -> index, resumable, with a build manifest +# --------------------------------------------------------------------------- # +def _now_iso() -> str: + from datetime import datetime, timezone + + return datetime.now(timezone.utc).isoformat() + + +def _manifest_path(processed_trials_folder: str | Path) -> Path: + return Path(processed_trials_folder).parent / ".trialmatchai_build.json" + + +def _load_manifest(path: Path) -> dict: + try: + return json.loads(Path(path).read_text(encoding="utf-8")) + except Exception: + return {} + + +def _save_manifest(path: Path, manifest: dict) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(manifest, indent=2), encoding="utf-8") + + +def _count_json(folder: Path) -> int: + return len(list(folder.glob("*.json"))) if folder.exists() else 0 + + +def _count_subdirs(folder: Path) -> int: + return sum(1 for p in folder.iterdir() if p.is_dir()) if folder.exists() else 0 + + +def prepare_corpus( + config: Dict[str, Any], + *, + trials_json_folder: str | Path, + processed_trials_folder: str | Path, + processed_criteria_folder: str | Path, + force: bool = False, + log_every: int = 500, +) -> dict[str, int]: + """Embed + annotate normalized trial JSONs into processed_*; resumable. + + Streams one trial at a time (bounded memory), skips trials already prepared + so an interrupted build picks up where it left off, and isolates per-trial + failures so one bad document cannot abort the whole corpus. + """ + trials_json_folder = Path(trials_json_folder) + processed_trials_folder = Path(processed_trials_folder) + processed_criteria_folder = Path(processed_criteria_folder) + + all_paths = sorted(trials_json_folder.glob("*.json")) + if not all_paths: + raise RuntimeError(f"No trial JSON files found to prepare in {trials_json_folder}") + + pending = [ + p + for p in all_paths + if force or not (processed_trials_folder / f"{p.stem}.json").exists() + ] + skipped = len(all_paths) - len(pending) + logger.info( + "Prepare: %s trials total, %s already prepared, %s to process.", + len(all_paths), + skipped, + len(pending), + ) + if not pending: + return {"total": len(all_paths), "prepared": 0, "skipped": skipped, "failed": 0} + + from trialmatchai.entities import build_entity_annotator + from trialmatchai.models.embedding import build_embedder + from trialmatchai.registry.preparation import ( + prepare_criteria_documents, + prepare_trial_document, + write_prepared_criteria, + write_prepared_trial, + ) + + processed_trials_folder.mkdir(parents=True, exist_ok=True) + processed_criteria_folder.mkdir(parents=True, exist_ok=True) + embedder = build_embedder(config) + entity_annotator = build_entity_annotator(config, embedder=embedder) + + prepared = failed = 0 + for i, path in enumerate(pending, start=1): + try: + doc = _read_json(path) + trial_row = prepare_trial_document(doc, embedder) + criteria_rows = prepare_criteria_documents( + doc, embedder, entity_annotator=entity_annotator + ) + write_prepared_trial(trial_row, processed_trials_folder) + write_prepared_criteria(criteria_rows, processed_criteria_folder) + prepared += 1 + except Exception: + failed += 1 + logger.exception("Prepare failed for %s (continuing)", path.name) + if i % log_every == 0: + logger.info("Prepare progress: %s/%s done, %s failed.", i, len(pending), failed) + + logger.info( + "Prepare complete: %s prepared, %s skipped, %s failed.", prepared, skipped, failed + ) + return {"total": len(all_paths), "prepared": prepared, "skipped": skipped, "failed": failed} + + +def build_state( + config: Dict[str, Any], + *, + processed_trials_folder: str | Path = "data/processed_trials", + processed_criteria_folder: str | Path = "data/processed_criteria", +) -> dict: + """Report what the build half has produced — used by `build --status`.""" + pt = Path(processed_trials_folder) + pc = Path(processed_criteria_folder) + search_cfg = config.get("search_backend", {}) + backend = LanceDBSearchBackend.from_config(config) + trials_table = backend.table_exists(search_cfg.get("trials_table", "trials")) + criteria_table = backend.table_exists(search_cfg.get("criteria_table", "criteria")) + linker = config.get("concept_linker", {}) + concepts_path = Path(linker.get("db_path", "data/concepts")) + concepts_present = concepts_path.exists() and any(concepts_path.iterdir()) + return { + "processed_trials": {"folder": str(pt), "count": _count_json(pt)}, + "processed_criteria": {"folder": str(pc), "count": _count_subdirs(pc)}, + "index": { + "db_path": str(backend.db_path), + "trials_table": trials_table, + "criteria_table": criteria_table, + }, + "concepts": {"db_path": str(concepts_path), "present": bool(concepts_present)}, + "ready_to_match": bool(trials_table and criteria_table), + } + + +def build_system( + config: Dict[str, Any], + *, + trials_json_folder: str | Path | None = None, + processed_trials_folder: str | Path = "data/processed_trials", + processed_criteria_folder: str | Path = "data/processed_criteria", + force_prepare: bool = False, + force_reindex: bool = False, +) -> dict: + """Run the setup half (prepare -> index), idempotent, with a manifest. + + Each stage is resumable and recorded in ``.trialmatchai_build.json`` next to + the processed data, so a disrupted build can be re-run and continues from the + last completed work. + """ + paths = config.get("paths", {}) + trials_json_folder = Path(trials_json_folder or paths.get("trials_json_folder", "data/trials_jsons")) + pt = Path(processed_trials_folder) + pc = Path(processed_criteria_folder) + manifest_path = _manifest_path(pt) + manifest = _load_manifest(manifest_path) + manifest["started_at"] = _now_iso() + + # Stage 1 — prepare embeddings/entities (resumable, GPU). + have_prepared = _count_json(pt) > 0 + have_source = trials_json_folder.exists() and any(trials_json_folder.glob("*.json")) + logger.info("=== build: prepare stage ===") + if have_source: + # prepare_corpus internally skips already-prepared trials, so calling it + # whenever source exists safely resumes without redoing finished work. + stats = prepare_corpus( + config, + trials_json_folder=trials_json_folder, + processed_trials_folder=pt, + processed_criteria_folder=pc, + force=force_prepare, + ) + manifest["prepare"] = {**stats, "completed_at": _now_iso()} + elif have_prepared: + logger.info("Prepare skipped: %s already populated (no trials_jsons source).", pt) + manifest["prepare"] = {"skipped_existing": True, "completed_at": _now_iso()} + else: + raise RuntimeError( + f"Nothing to prepare: {pt} is empty and no trial JSONs at " + f"{trials_json_folder}. Run `trialmatchai-bootstrap-data` or provide " + "normalized trial JSONs." + ) + _save_manifest(manifest_path, manifest) + + # Stage 2 — build the LanceDB search index (idempotent). + logger.info("=== build: index stage ===") + index_info = build_index( + config, + processed_trials_folder=pt, + processed_criteria_folder=pc, + force=force_reindex, + ) + manifest["index"] = {**index_info, "completed_at": _now_iso()} + _save_manifest(manifest_path, manifest) + + state = build_state( + config, + processed_trials_folder=pt, + processed_criteria_folder=pc, + ) + manifest["state"] = state + manifest["completed_at"] = _now_iso() + _save_manifest(manifest_path, manifest) + logger.info( + "Build complete — ready_to_match=%s. Manifest: %s", + state["ready_to_match"], + manifest_path, + ) + return manifest diff --git a/src/trialmatchai/registry/criteria_chunking.py b/src/trialmatchai/registry/criteria_chunking.py index ac199463..5ce7f0a7 100644 --- a/src/trialmatchai/registry/criteria_chunking.py +++ b/src/trialmatchai/registry/criteria_chunking.py @@ -3,8 +3,9 @@ Splits a free-text eligibility section into individual, typed criteria. This folds the domain knowledge from the legacy regex preprocessor — multi-level enumeration hierarchies, varied inclusion/exclusion headers, parenthetical -protection, and decimal/abbreviation split-exceptions — into one streamlined -pass over the text. +protection, semicolon splitting, long-criterion full-stop re-splitting, and +decimal/abbreviation split-exceptions — into one streamlined pass over the text, +so chunk boundaries match the legacy pipeline. Public API: ``split_eligibility_criteria(text) -> list[{"type", "criterion"}]`` where ``type`` is "inclusion", "exclusion", or "unknown". @@ -128,6 +129,49 @@ def _is_useful(text: str) -> bool: return len(text) >= 3 and detect_header(text) is None +# --- Secondary splits (faithful to the legacy preprocessor) ----------------- +# Each assembled criterion is further split on semicolons that fall outside +# parentheses, and any resulting criterion longer than this many characters is +# split into sentences on real full stops (decimal- and abbreviation-aware) — +# matching the legacy split_lines_on_semicolon and split_large_sentences / +# split_on_full_stops, so chunk boundaries stay identical to main. +_LONG_CRITERION_CHARS = 200 +_FULLSTOP_SPLIT = re.compile(r"(? list[str]: + """Split on semicolons not enclosed in parentheses/brackets.""" + masked = _mask_parens(text) # in-paren chars (incl. ';') become spaces + parts: list[str] = [] + last = 0 + for i, char in enumerate(masked): + if char == ";": + parts.append(text[last:i]) + last = i + 1 + parts.append(text[last:]) + return [p.strip() for p in parts if p.strip()] + + +def _split_long_criterion(text: str) -> list[str]: + """Split a long (>200 char) criterion into sentences; short text passes through.""" + if len(text) <= _LONG_CRITERION_CHARS: + return [text] + sentences = [s.strip() for s in _FULLSTOP_SPLIT.split(text) if s.strip()] + return sentences or [text] + + +def _emit(text: str, criterion_type: str, entries: list[dict[str, str]]) -> None: + """Clean, semicolon-split, long-criterion-split, filter, and append criteria.""" + cleaned = _clean(text) + if not cleaned: + return + for part in _split_semicolons(cleaned): + for sentence in _split_long_criterion(part): + sentence = sentence.strip(" :-\t") + if _is_useful(sentence): + entries.append({"type": criterion_type, "criterion": sentence}) + + def split_eligibility_criteria(text: str) -> list[dict[str, str]]: if not text or not text.strip(): return [] @@ -139,10 +183,9 @@ def split_eligibility_criteria(text: str) -> list[dict[str, str]]: def flush() -> None: if not buffered: return - criterion = _clean(" ".join(buffered)) + text = " ".join(buffered) buffered.clear() - if _is_useful(criterion): - entries.append({"type": current_type, "criterion": criterion}) + _emit(text, current_type, entries) for raw_line in text.splitlines(): line = raw_line.strip() @@ -181,5 +224,6 @@ def flush() -> None: if entries: return entries - fallback = _clean(text) - return [{"type": "unknown", "criterion": fallback}] if fallback else [] + # Unstructured text (no markers/headers): still semicolon/long-split it. + _emit(text, "unknown", entries) + return entries diff --git a/src/trialmatchai/registry/preparation.py b/src/trialmatchai/registry/preparation.py index 3ef99f56..05b06e91 100644 --- a/src/trialmatchai/registry/preparation.py +++ b/src/trialmatchai/registry/preparation.py @@ -10,6 +10,7 @@ import dateutil.parser from trialmatchai.constraints import extract_constraint_set +from trialmatchai.registry.criteria_chunking import split_eligibility_criteria from trialmatchai.utils.text import flatten_text @@ -100,7 +101,14 @@ def prepare_criteria_documents( nct_id = str(doc["nct_id"]) entries: list[dict[str, Any]] = [] texts: list[str] = [] - for criterion in doc.get("criteria") or []: + criteria = doc.get("criteria") + if not criteria: + # Trial doc carries only raw eligibility text (e.g. normalized JSON that + # predates in-normalizer chunking): chunk it here, on the unflattened + # text so line structure is preserved, keeping preparation self-sufficient. + raw = doc.get("eligibility_criteria") + criteria = split_eligibility_criteria(raw) if isinstance(raw, str) else [] + for criterion in criteria or []: if not isinstance(criterion, dict): continue text = _preprocess_text( diff --git a/src/trialmatchai/services/preflight.py b/src/trialmatchai/services/preflight.py index d14d8384..903c9142 100644 --- a/src/trialmatchai/services/preflight.py +++ b/src/trialmatchai/services/preflight.py @@ -120,6 +120,14 @@ def run_preflight_checks( "Transformers CPU backend requires transformers (`uv sync --extra llm`)." ) + # Verify gated base models (phi-4 / gemma-2) are authorized up front, so + # an HF auth failure surfaces here rather than after first-level search. + issues.extend( + check_hf_access( + [model_cfg.get("base_model"), model_cfg.get("reranker_model_path")] + ) + ) + search_cfg = config.get("search_backend", {}) if search_cfg: _require_path( @@ -148,6 +156,86 @@ def run_preflight_checks( return issues +def check_cuda(config: Dict[str, Any], *, required: bool) -> List[str]: + """Verify a CUDA GPU is present when the build/match needs one.""" + issues: List[str] = [] + if importlib.util.find_spec("torch") is None: + if required: + issues.append("PyTorch is not installed (`uv sync --extra gpu`).") + return issues + try: + import torch + + available = bool(torch.cuda.is_available()) + except Exception as exc: # pragma: no cover - torch import edge cases + if required: + issues.append(f"Could not initialize PyTorch/CUDA: {exc}") + return issues + if not available: + message = "No CUDA GPU detected; embeddings/LLMs need a GPU host." + if required: + issues.append(message) + else: + logger.warning("Preflight: %s", message) + return issues + + +def check_hf_access(model_ids: List[str | None]) -> List[str]: + """Fast pre-download check that HuggingFace models are reachable/authorized. + + Calls the metadata API (no weight download). Local paths and non-hub ids are + skipped. Gated models without a token produce a clear, actionable error so + auth fails in seconds rather than after hours of other work; network/transient + errors only warn. + """ + issues: List[str] = [] + if importlib.util.find_spec("huggingface_hub") is None: + return issues # dependency checks elsewhere cover a missing stack + import os + + from huggingface_hub import HfApi + from huggingface_hub.utils import GatedRepoError, RepositoryNotFoundError + + token = os.environ.get("HF_TOKEN") or os.environ.get("HUGGING_FACE_HUB_TOKEN") + api = HfApi(token=token) + for model_id in model_ids: + if not model_id or Path(model_id).exists() or "/" not in str(model_id): + continue # local model dir or not a hub repo id + try: + api.model_info(model_id) + except GatedRepoError: + issues.append( + f"HuggingFace model '{model_id}' is gated/unauthorized — accept its " + "license on huggingface.co and export HF_TOKEN." + ) + except RepositoryNotFoundError: + issues.append( + f"HuggingFace model '{model_id}' was not found (check the id or your token)." + ) + except Exception as exc: + logger.warning("Preflight: could not verify HF model '%s': %s", model_id, exc) + return issues + + +def run_build_preflight(config: Dict[str, Any]) -> List[str]: + """Fail-fast checks for the build (setup) half before any heavy work.""" + issues: List[str] = [] + embedder_cfg = config.get("embedder", {}) + issues += check_cuda(config, required=bool(embedder_cfg.get("use_gpu", True))) + + entity_cfg = config.get("entity_extraction", {}) + if ( + entity_cfg.get("backend", "gliner2") == "gliner2" + and importlib.util.find_spec("gliner2") is None + ): + issues.append("entity_extraction.backend=gliner2 requires `uv sync --extra entity`.") + + issues += check_hf_access([embedder_cfg.get("model_name"), entity_cfg.get("model_name")]) + for issue in issues: + logger.error("Build preflight: %s", issue) + return issues + + def _require_path( issues: List[str], name: str, diff --git a/src/trialmatchai/trec/__init__.py b/src/trialmatchai/trec/__init__.py new file mode 100644 index 00000000..7560b7cb --- /dev/null +++ b/src/trialmatchai/trec/__init__.py @@ -0,0 +1,17 @@ +"""TREC Clinical Trials evaluation harness for TrialMatchAI. + +Provides an idempotent, end-to-end runner over the TREC 2021/2022 and SIGIR +patient-topic tracks: it converts the legacy patient topics into canonical +profiles, builds a per-track LanceDB search index restricted to the track's +document collection, and runs the matching pipeline with per-patient resume. + +Exposed via the ``trialmatchai-trec`` console command (see +``trialmatchai.cli.trec``). +""" + +from __future__ import annotations + +from trialmatchai.trec.corpus import TRACK_KEYS, TrackSpec, resolve_tracks +from trialmatchai.trec.runner import run_tracks + +__all__ = ["TRACK_KEYS", "TrackSpec", "resolve_tracks", "run_tracks"] diff --git a/src/trialmatchai/trec/corpus.py b/src/trialmatchai/trec/corpus.py new file mode 100644 index 00000000..f6cc2f97 --- /dev/null +++ b/src/trialmatchai/trec/corpus.py @@ -0,0 +1,71 @@ +"""TREC track definitions and per-track corpus resolution. + +The per-track corpus (the set of trials the index is restricted to) is derived +at run time from the official qrels — see ``trialmatchai.trec.qrels`` — not from +any checked-in NCT list. +""" + +from __future__ import annotations + +from dataclasses import dataclass +from pathlib import Path + +# Officially supported via NIST download. "sigir" is defined but has no official +# direct source (CSIRO portal), so it is not in the default run set. +TRACK_KEYS = ("21", "22", "sigir") +DEFAULT_TRACKS = ("21", "22") + +# Topic id prefix (topic N becomes "N", matching the qrels query ids). +_ID_PREFIX = {"21": "trec-2021", "22": "trec-2022", "sigir": "sigir-2014"} + + +@dataclass(frozen=True) +class TrackSpec: + """Everything needed to run one TREC track end-to-end.""" + + key: str + id_prefix: str + trec_dir: Path + profile_dir: Path + summary_dir: Path + db_path: Path + output_dir: Path + + @property + def name(self) -> str: + return f"trec{self.key}" + + +def resolve_tracks( + keys: list[str], + *, + data_dir: Path, + results_root: Path, +) -> list[TrackSpec]: + """Build :class:`TrackSpec` objects for the requested track keys. + + Layout (relative to ``data_dir`` / ``results_root``): + trec dir : /trec (downloaded topics + qrels cache) + profiles : /patients/trec/profiles + summaries : /patients/trec/summaries + index : /search_ + results : /results_trec + """ + data_dir = Path(data_dir) + results_root = Path(results_root) + specs: list[TrackSpec] = [] + for key in keys: + if key not in TRACK_KEYS: + raise ValueError(f"Unknown TREC track '{key}' (expected one of {TRACK_KEYS})") + specs.append( + TrackSpec( + key=key, + id_prefix=_ID_PREFIX[key], + trec_dir=data_dir / "trec", + profile_dir=data_dir / "patients" / f"trec{key}" / "profiles", + summary_dir=data_dir / "patients" / f"trec{key}" / "summaries", + db_path=data_dir / f"search_{key}", + output_dir=results_root / f"results_trec{key}", + ) + ) + return specs diff --git a/src/trialmatchai/trec/qrels.py b/src/trialmatchai/trec/qrels.py new file mode 100644 index 00000000..666461b2 --- /dev/null +++ b/src/trialmatchai/trec/qrels.py @@ -0,0 +1,159 @@ +"""Official TREC relevance judgments (qrels): download, parse, corpus, metrics. + +The per-track NCT corpus pool is derived directly from the qrels (the set of +judged trials) — replacing the previously-checked-in ``Unique_NCT_IDs`` lists. +Evaluation computes recall@k of the retrieval against the same qrels. + +TREC Clinical Trials relevance grades: 0 = not relevant, 1 = excluded (the trial +matches the condition but the patient is excluded), 2 = eligible. By default a +trial counts as relevant at grade >= 1 (matching the legacy recall evaluation); +pass ``threshold=2`` to score eligible-only. +""" + +from __future__ import annotations + +import json +from pathlib import Path + +import requests +from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_exponential + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + +QRELS_URLS: dict[str, str] = { + "21": "https://trec.nist.gov/data/clinical/trials/qrels2021.txt", + "22": "https://trec.nist.gov/data/clinical/trials/qrels2022.txt", +} + +DEFAULT_CUTOFFS = (10, 50, 100, 200, 300, 500, 1000) + + +@retry( + retry=retry_if_exception_type(requests.RequestException), + stop=stop_after_attempt(4), + wait=wait_exponential(multiplier=1, min=1, max=20), + reraise=True, +) +def _http_get(url: str, timeout: float = 60.0) -> bytes: + response = requests.get(url, timeout=timeout) + response.raise_for_status() + return response.content + + +def download_qrels(track: str, dest_dir: Path) -> Path: + """Fetch (and cache) the official qrels file for a track.""" + if track not in QRELS_URLS: + raise FileNotFoundError( + f"No official qrels URL for track '{track}'. Provide the qrels file " + f"manually at {Path(dest_dir) / f'qrels_{track}.txt'}." + ) + dest_dir = Path(dest_dir) + dest_dir.mkdir(parents=True, exist_ok=True) + dest = dest_dir / f"qrels_{track}.txt" + if dest.exists() and dest.stat().st_size > 0: + logger.info("Qrels for track %s already present: %s", track, dest) + return dest + logger.info("Downloading official qrels for track %s from %s", track, QRELS_URLS[track]) + dest.write_bytes(_http_get(QRELS_URLS[track])) + return dest + + +def parse_qrels(path: Path, id_prefix: str) -> dict[str, dict[str, int]]: + """Parse a TREC qrels file into {query_id: {nct_id: relevance}}. + + Lines are `` `` (whitespace + separated). The query id is ``f"{id_prefix}{topic}"`` to match the imported + topic ids and the per-patient results folders. + """ + qrels: dict[str, dict[str, int]] = {} + for raw in Path(path).read_text(encoding="utf-8", errors="ignore").splitlines(): + parts = raw.split() + if len(parts) < 4: + continue + topic, _iteration, nct_id, relevance = parts[0], parts[1], parts[2], parts[3] + try: + rel = int(relevance) + except ValueError: + continue + query_id = f"{id_prefix}{topic.strip()}" + qrels.setdefault(query_id, {})[nct_id.strip()] = rel + if not qrels: + raise ValueError(f"No judgments parsed from qrels file {path}") + return qrels + + +def corpus_ncts(qrels: dict[str, dict[str, int]]) -> set[str]: + """The judged-trial pool across all queries (used to restrict the index).""" + pool: set[str] = set() + for judgments in qrels.values(): + pool.update(judgments) + return pool + + +def relevant_ncts(qrels: dict[str, dict[str, int]], *, threshold: int = 1) -> dict[str, set[str]]: + return { + query_id: {nct for nct, rel in judgments.items() if rel >= threshold} + for query_id, judgments in qrels.items() + } + + +def _retrieved_for_patient(patient_dir: Path) -> list[str]: + """Ordered retrieved NCT ids for one patient. + + Prefers the first-level candidate list (nct_ids.txt, up to ~1000) so recall + at large cutoffs is meaningful; falls back to the final ranked_trials.json. + """ + nct_ids = patient_dir / "nct_ids.txt" + if nct_ids.exists(): + return [line.strip() for line in nct_ids.read_text().splitlines() if line.strip()] + ranked = patient_dir / "ranked_trials.json" + if ranked.exists(): + data = json.loads(ranked.read_text()) + return [str(item.get("TrialID")) for item in data if item.get("TrialID")] + return [] + + +def recall_at_k(retrieved: list[str], relevant: set[str], k: int) -> float | None: + if not relevant: + return None + hits = sum(1 for nct in retrieved[:k] if nct in relevant) + return hits / len(relevant) + + +def evaluate( + qrels: dict[str, dict[str, int]], + results_dir: Path, + *, + cutoffs: tuple[int, ...] = DEFAULT_CUTOFFS, + threshold: int = 1, +) -> dict: + """Compute per-query and mean recall@k over the patients in ``results_dir``.""" + results_dir = Path(results_dir) + relevant = relevant_ncts(qrels, threshold=threshold) + per_query: dict[str, dict] = {} + sums = {k: 0.0 for k in cutoffs} + counts = {k: 0 for k in cutoffs} + + for query_id, rel_set in relevant.items(): + patient_dir = results_dir / query_id + if not patient_dir.is_dir() or not rel_set: + continue + retrieved = _retrieved_for_patient(patient_dir) + row = {"num_relevant": len(rel_set), "num_retrieved": len(retrieved)} + for k in cutoffs: + r = recall_at_k(retrieved, rel_set, k) + row[f"recall@{k}"] = r + if r is not None: + sums[k] += r + counts[k] += 1 + per_query[query_id] = row + + mean = {f"recall@{k}": (sums[k] / counts[k] if counts[k] else None) for k in cutoffs} + return { + "threshold": threshold, + "num_queries_scored": len(per_query), + "mean_recall": mean, + "per_query": per_query, + } diff --git a/src/trialmatchai/trec/runner.py b/src/trialmatchai/trec/runner.py new file mode 100644 index 00000000..4fe35ab2 --- /dev/null +++ b/src/trialmatchai/trec/runner.py @@ -0,0 +1,146 @@ +"""End-to-end TREC runner — a preset over the core orchestration stages. + +For each requested track it converts the TREC patient topics, builds a search +index restricted to the track's NCT collection, and runs matching with +per-patient resume. Every step is idempotent (skips already-done work). +""" + +from __future__ import annotations + +import json +from copy import deepcopy +from pathlib import Path +from typing import Any, Dict + +from trialmatchai.config.config_loader import load_config +from trialmatchai.orchestration import build_index, count_pending, expand_queries, run_matching +from trialmatchai.trec import qrels as qrels_mod +from trialmatchai.trec.corpus import TrackSpec, resolve_tracks +from trialmatchai.trec.topics import import_topics +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def _track_config(base_config: Dict[str, Any], spec: TrackSpec) -> Dict[str, Any]: + """Clone the base config with this track's paths swapped in. + + Faithful to the legacy pipeline, the TREC preset enables runtime CoT query + expansion (which produced the original keywords.json from raw topic text). + """ + cfg = deepcopy(base_config) + cfg.setdefault("search_backend", {})["db_path"] = str(spec.db_path) + cfg.setdefault("patient_inputs", {})["profile_dir"] = str(spec.profile_dir) + cfg["patient_inputs"]["summary_dir"] = str(spec.summary_dir) + cfg.setdefault("paths", {})["output_dir"] = str(spec.output_dir) + cfg.setdefault("query_expansion", {})["enabled"] = True + return cfg + + +def run_tracks( + track_keys: list[str], + *, + config_path: str | None = None, + data_dir: str | Path = "data", + results_root: str | Path = ".", + processed_trials_folder: str | Path | None = None, + processed_criteria_folder: str | Path | None = None, + index_only: bool = False, + evaluate: bool = True, + force_reindex: bool = False, + force_rematch: bool = False, +) -> int: + """Run the TREC e2e for each track. Returns a process exit code. + + ``processed_trials_folder`` / ``processed_criteria_folder`` default to + ``/processed_*`` but can point elsewhere (e.g. the prepared data + on /nfs/scratch) while the index and all run outputs live under ``data_dir`` + on /nfs/home. The per-track corpus is derived from the official qrels. + """ + base_config = load_config(config_path) + data_dir = Path(data_dir) + processed_trials = Path(processed_trials_folder or data_dir / "processed_trials") + processed_criteria = Path(processed_criteria_folder or data_dir / "processed_criteria") + + specs = resolve_tracks(track_keys, data_dir=data_dir, results_root=Path(results_root)) + failures = 0 + + for spec in specs: + logger.info("================ TREC track %s ================", spec.key) + cfg = _track_config(base_config, spec) + + # 1) Acquire official topics -> canonical profiles + summaries (idempotent). + try: + import_topics( + spec.key, + trec_dir=spec.trec_dir, + profile_dir=spec.profile_dir, + summary_dir=spec.summary_dir, + ) + except Exception: + logger.exception("Topic import failed for track %s", spec.key) + failures += 1 + continue + + # 2) Official qrels -> per-track corpus pool (replaces the removed lists). + try: + qrels_path = qrels_mod.download_qrels(spec.key, spec.trec_dir / "qrels") + qrels = qrels_mod.parse_qrels(qrels_path, spec.id_prefix) + nct_filter = qrels_mod.corpus_ncts(qrels) + logger.info("Track %s corpus pool from qrels: %s trials", spec.key, len(nct_filter)) + except Exception: + logger.exception("Qrels acquisition failed for track %s", spec.key) + failures += 1 + continue + + # 3) Runtime CoT query expansion -> enriched keywords.json (idempotent). + if not index_only: + expand_queries(cfg, force=force_rematch) + + # 4) Build the per-track index, restricted to the qrels corpus pool. + try: + build_index( + cfg, + processed_trials_folder=processed_trials, + processed_criteria_folder=processed_criteria, + nct_filter=nct_filter, + force=force_reindex, + ) + except Exception: + logger.exception("Indexing failed for track %s", spec.key) + failures += 1 + continue + + if index_only: + pending, done = count_pending(cfg) + logger.info("Track %s indexed (%s patients pending, %s done).", spec.key, pending, done) + continue + + # 5) Match with per-patient resume. + rc = run_matching(cfg, resume=True, force=force_rematch) + if rc != 0: + logger.error("Matching returned %s for track %s", rc, spec.key) + failures += 1 + continue + + # 6) Evaluate recall@k against the same qrels. + if evaluate: + try: + metrics = qrels_mod.evaluate(qrels, spec.output_dir) + metrics_path = Path(spec.output_dir) / "evaluation_metrics.json" + metrics_path.write_text(json.dumps(metrics, indent=2), encoding="utf-8") + logger.info( + "Track %s recall: %s -> %s", + spec.key, + metrics["mean_recall"], + metrics_path, + ) + except Exception: + logger.exception("Evaluation failed for track %s", spec.key) + logger.info("Track %s done -> %s", spec.key, spec.output_dir) + + if failures: + logger.warning("TREC run completed with %s track failure(s).", failures) + return 1 + logger.info("All requested TREC tracks complete: %s", " ".join(track_keys)) + return 0 diff --git a/src/trialmatchai/trec/topics.py b/src/trialmatchai/trec/topics.py new file mode 100644 index 00000000..cfee4a40 --- /dev/null +++ b/src/trialmatchai/trec/topics.py @@ -0,0 +1,275 @@ +"""Official TREC topic acquisition and import. + +Downloads the authoritative patient topics for each track straight from the +source (NIST for 2021/2022, the CSIRO/SIGIR-2016 collection for sigir), parses +the topic XML, and builds canonical :class:`PatientProfile` objects from the +RAW topic text only — no LLM-preprocessed fields. Demographics (age/sex) are +extracted deterministically from the narrative, so nothing here depends on the +old gpt-generated ``processed_patients*.json`` content. + +The runtime CoT query-expansion (see ``trialmatchai.matching.query_expansion``) +is what turns this raw text into the expanded ``keywords.json`` consumed by +first-level retrieval — faithfully reproducing the legacy pipeline. +""" + +from __future__ import annotations + +import re +from dataclasses import dataclass +from pathlib import Path +from xml.etree import ElementTree as ET + +import requests +from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_exponential + +from trialmatchai.interop.models import Demographics, PatientNote, PatientProfile, Provenance +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + +SOURCE_FORMAT = "trec_topic" + + +@dataclass(frozen=True) +class TopicSource: + """Where a track's official topics live and how to label them. + + kind == "nist_xml": download topic XML from ``topics_url`` and parse + ```` (ids get ``id_prefix``). + kind == "local_raw": read verbatim raw patient text from an on-disk JSON + (``raw_json``); keys are already full patient ids. + """ + + track: str + id_prefix: str + kind: str + topics_url: str | None = None # nist_xml + raw_json: str | None = None # local_raw (filename under /trec/) + collection_url: str | None = None + note: str = "" + + +TOPIC_SOURCES: dict[str, TopicSource] = { + "21": TopicSource( + track="21", + id_prefix="trec-2021", + kind="nist_xml", + topics_url="https://trec.nist.gov/data/clinical/trials/topics2021.xml", + ), + "22": TopicSource( + track="22", + id_prefix="trec-2022", + kind="nist_xml", + topics_url="https://trec.nist.gov/data/clinical/trials/topics2022.xml", + ), + # The SIGIR-2016 collection (Koopman & Zuccon) is hosted on the CSIRO Data + # Access Portal (no stable direct-download URL), so sigir topics are sourced + # from the verbatim on-disk raw patient text — the same official admission + # statements, with none of the gpt-generated fields. + "sigir": TopicSource( + track="sigir", + id_prefix="sigir-2014", + kind="local_raw", + raw_json="processed_sigir_patients.json", + collection_url="https://data.csiro.au/collection/csiro:17152", + note="sigir raw text is read verbatim from data/trec/processed_sigir_patients.json " + "(raw_description only; no gpt-generated fields).", + ), +} + + +@retry( + retry=retry_if_exception_type(requests.RequestException), + stop=stop_after_attempt(4), + wait=wait_exponential(multiplier=1, min=1, max=20), + reraise=True, +) +def _http_get(url: str, timeout: float = 60.0) -> bytes: + response = requests.get(url, timeout=timeout) + response.raise_for_status() + return response.content + + +def download_topics(track: str, dest_dir: Path) -> Path: + """Fetch (and cache) the official topic XML for a track. + + Returns the local path. For portal-only sources (sigir) the file must be + placed manually; a clear error explains where to get it. + """ + source = TOPIC_SOURCES[track] + dest_dir = Path(dest_dir) + dest_dir.mkdir(parents=True, exist_ok=True) + dest = dest_dir / f"topics_{track}.xml" + + if dest.exists() and dest.stat().st_size > 0: + logger.info("Topics for track %s already present: %s", track, dest) + return dest + + if not source.topics_url: + raise FileNotFoundError( + f"No direct download for track '{track}'. {source.note} " + f"Source: {source.collection_url}" + ) + + logger.info("Downloading official topics for track %s from %s", track, source.topics_url) + dest.write_bytes(_http_get(source.topics_url)) + return dest + + +# --------------------------------------------------------------------------- # +# Parsing +# --------------------------------------------------------------------------- # +def parse_topics(path: Path, id_prefix: str) -> dict[str, str]: + """Parse a TREC/TREC-CDS topic XML into {patient_id: raw_text}. + + Handles both the flat ``free text`` form + (2021/2022) and the TREC-CDS form where a topic wraps ``

    `` / + ```` children (sigir) — preferring the summary, then the + description, then the element's own text. + """ + root = ET.parse(path).getroot() + topics: dict[str, str] = {} + for topic in root.iter("topic"): + number = topic.get("number") or topic.get("id") + if number is None: + continue + text = _topic_text(topic) + if not text: + continue + topics[f"{id_prefix}{number.strip()}"] = text + if not topics: + raise ValueError(f"No elements parsed from {path}") + return topics + + +def _topic_text(topic: ET.Element) -> str: + for child_tag in ("summary", "description"): + child = topic.find(child_tag) + if child is not None and (child.text or "").strip(): + return _clean(child.text) + return _clean("".join(topic.itertext())) + + +def _clean(text: str | None) -> str: + return re.sub(r"\s+", " ", (text or "")).strip() + + +# --------------------------------------------------------------------------- # +# Deterministic demographics (no LLM, no gpt-preprocessed fields) +# --------------------------------------------------------------------------- # +_AGE_PATTERNS = [ + re.compile(r"(\d{1,3})\s*[- ]?\s*year[\s-]*old", re.I), + re.compile(r"(\d{1,3})\s*[- ]?\s*(?:yo|y/o|yr)\b", re.I), + re.compile(r"\b(\d{1,3})\s*[- ]?\s*(?:M|F|male|female|man|woman)\b"), +] +_FEMALE = re.compile(r"\b(?:female|woman|girl|lady|\d{1,3}\s*F)\b", re.I) +_MALE = re.compile(r"\b(?:male|man|boy|gentleman|\d{1,3}\s*M)\b", re.I) + + +def extract_demographics(text: str) -> tuple[float | None, str | None]: + """Best-effort (age_years, sex) from the topic narrative; None if unknown.""" + age: float | None = None + for pattern in _AGE_PATTERNS: + m = pattern.search(text) + if m: + value = int(m.group(1)) + if 0 < value <= 120: + age = float(value) + break + # Female check first: "male" is a substring concern handled by word bounds. + sex: str | None = None + if _FEMALE.search(text): + sex = "Female" + elif _MALE.search(text): + sex = "Male" + return age, sex + + +def build_profile_from_topic(patient_id: str, raw_text: str) -> PatientProfile: + """Build a canonical profile from raw topic text only (no derived terms).""" + provenance = Provenance(source_format=SOURCE_FORMAT, source_id=patient_id) + age, sex = extract_demographics(raw_text) + return PatientProfile( + patient_id=patient_id, + demographics=Demographics(sex=sex, age_years=age), + notes=[ + PatientNote( + note_id=f"{patient_id}-note", + text=raw_text, + note_type="trec-topic", + provenance=provenance, + ) + ], + provenance=[provenance], + ) + + +def _load_local_raw(path: Path) -> dict[str, str]: + """Read {patient_id: verbatim raw text} from an on-disk topic JSON. + + Uses only the ``raw_description`` field (the official admission statement); + every gpt-generated field is ignored. Keys are already full patient ids. + """ + import json + + records = json.loads(Path(path).read_text(encoding="utf-8")) + topics = { + pid: _clean(rec.get("raw_description")) + for pid, rec in records.items() + if _clean(rec.get("raw_description")) + } + if not topics: + raise ValueError(f"No raw_description text found in {path}") + return topics + + +def load_track_topics(track: str, trec_dir: Path) -> dict[str, str]: + """Resolve a track's topics to {patient_id: raw_text} per its source kind.""" + source = TOPIC_SOURCES[track] + if source.kind == "nist_xml": + path = download_topics(track, Path(trec_dir) / "raw_topics") + return parse_topics(path, source.id_prefix) + if source.kind == "local_raw": + return _load_local_raw(Path(trec_dir) / source.raw_json) + raise ValueError(f"Unknown topic source kind: {source.kind}") + + +def import_topics( + track: str, + *, + trec_dir: Path, + profile_dir: Path, + summary_dir: Path, + force: bool = False, +) -> int: + """Acquire a track's official topics and write canonical inputs. + + Writes one PatientProfile per topic (raw text + demographics only) plus a + deterministic matching summary (later enriched by CoT query expansion). + Idempotent: skips when profiles already exist. Returns the patient count. + """ + import json + + from trialmatchai.interop.exporters import profile_to_matching_summary + + profile_dir = Path(profile_dir) + summary_dir = Path(summary_dir) + if not force and profile_dir.exists() and any(profile_dir.glob("*.json")): + have = len(list(profile_dir.glob("*.json"))) + logger.info("Topic import skipped for track %s: %s profiles present", track, have) + return have + + topics = load_track_topics(track, Path(trec_dir)) + + profile_dir.mkdir(parents=True, exist_ok=True) + summary_dir.mkdir(parents=True, exist_ok=True) + for patient_id, raw_text in topics.items(): + profile = build_profile_from_topic(patient_id, raw_text) + (profile_dir / f"{patient_id}.json").write_text( + profile.model_dump_json(indent=2, exclude_none=True), encoding="utf-8" + ) + (summary_dir / f"{patient_id}.json").write_text( + json.dumps(profile_to_matching_summary(profile), indent=2), encoding="utf-8" + ) + logger.info("Imported %s official topics for track %s", len(topics), track) + return len(topics) From 78394b8e7cf1e90751d06487afe04a2ba23d54c0 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Fri, 26 Jun 2026 18:06:52 +0200 Subject: [PATCH 36/64] chore: remove obsolete example/ fixtures Drop the leftover example/phenopacket.json input and example/phenopacket/keywords.json run output (the example/ directory was cleaned up during the data reorganization). Co-Authored-By: Claude Opus 4.8 --- example/phenopacket.json | 343 ------------------------------ example/phenopacket/keywords.json | 53 ----- 2 files changed, 396 deletions(-) delete mode 100644 example/phenopacket.json delete mode 100644 example/phenopacket/keywords.json diff --git a/example/phenopacket.json b/example/phenopacket.json deleted file mode 100644 index 0172bbfe..00000000 --- a/example/phenopacket.json +++ /dev/null @@ -1,343 +0,0 @@ -{ - "id": "patient67890", - "subject": { - "id": "patient67890", - "dateOfBirth": "1965-03-22", - "sex": "MALE", - "karyotypicSex": "XY", - "taxonomy": { - "id": "NCBITaxon:9606", - "label": "Homo sapiens" - }, - "description": "58-year-old male with a complex cardiac history and multiple comorbidities.", - "timeAtLastEncounter": { - "age": { - "iso8601duration": "P58Y1M10D" - } - } - }, - "phenotypicFeatures": [ - { - "type": { - "id": "HP:0001627", - "label": "Myocardial infarction" - }, - "onset": { - "age": { - "iso8601duration": "P55Y" - } - }, - "severity": { - "id": "HP:0012828", - "label": "Severe" - }, - "modifiers": [ - { - "id": "HP:0031796", - "label": "Recurrent" - } - ], - "description": "Patient experienced multiple infarctions, requiring emergency stenting and later bypass surgery." - }, - { - "type": { - "id": "HP:0004322", - "label": "Type 2 diabetes mellitus" - }, - "onset": { - "age": { - "iso8601duration": "P48Y" - } - }, - "description": "Diabetes managed with metformin, HbA1c maintained between 6.5% and 7.2%." - }, - { - "type": { - "id": "HP:0001945", - "label": "Elevated hepatic transaminase level" - }, - "onset": { - "age": { - "iso8601duration": "P50Y" - } - }, - "description": "Mild elevation suspected secondary to statin therapy or non-alcoholic fatty liver disease." - }, - { - "type": { - "id": "HP:0001953", - "label": "Hypercholesterolemia" - }, - "onset": { - "age": { - "iso8601duration": "P45Y" - } - }, - "description": "LDL levels >190 mg/dL despite lifestyle interventions." - }, - { - "type": { - "id": "HP:0030654", - "label": "History of smoking" - }, - "onset": { - "age": { - "iso8601duration": "P20Y" - } - }, - "resolution": { - "age": { - "iso8601duration": "P45Y" - } - }, - "description": "Former smoker (20 pack-years), quit at age 45." - } - ], - "diseases": [ - { - "term": { - "id": "MONDO:0005066", - "label": "Coronary artery disease" - }, - "onset": { - "age": { - "iso8601duration": "P55Y" - } - }, - "diseaseStage": [ - { - "id": "NCIT:C27970", - "label": "Stage III" - } - ], - "description": "Advanced CAD with multivessel involvement and impaired left ventricular function." - } - ], - "biosamples": [ - { - "id": "biosample-heart", - "individualId": "patient67890", - "sampledTissue": { - "id": "UBERON:0000948", - "label": "heart" - }, - "sampleType": { - "id": "NCIT:C13302", - "label": "Biopsy specimen" - }, - "timeOfCollection": { - "age": { - "iso8601duration": "P55Y6M" - } - }, - "histologicalDiagnosis": { - "id": "NCIT:C7278", - "label": "Ischemic cardiomyopathy" - }, - "procedure": { - "code": { - "id": "NCIT:C51886", - "label": "Cardiac Biopsy" - } - }, - "description": "Tissue biopsy taken during bypass surgery for pathological analysis of ischemic damage." - }, - { - "id": "biosample-blood", - "individualId": "patient67890", - "sampledTissue": { - "id": "UBERON:0000178", - "label": "blood" - }, - "sampleType": { - "id": "NCIT:C12439", - "label": "Normal specimen" - }, - "timeOfCollection": { - "age": { - "iso8601duration": "P58Y" - } - }, - "description": "Peripheral blood collected for genetic analysis and lipid profile." - } - ], - "interpretations": [ - { - "id": "interpretation-1", - "description": "Genetic testing confirmed heterozygous LDLR mutation consistent with familial hypercholesterolemia.", - "diagnosis": { - "disease": { - "id": "MONDO:0019391", - "label": "Familial hypercholesterolemia" - }, - "genomicInterpretations": [ - { - "variantInterpretation": { - "variationDescriptor": { - "id": "HGVS:NC_000019.10:g.11200068G>A", - "label": "LDLR c.1444G>A", - "geneContext": { - "valueId": "HGNC:6547", - "symbol": "LDLR" - }, - "molecularAttributes": { - "aminoAcidChange": { - "value": "p.Asp482Asn" - } - } - }, - "therapeuticActionability": { - "id": "NCIT:C80153", - "label": "Statin sensitivity" - } - } - } - ] - } - } - ], - "medicalActions": [ - { - "treatment": { - "agent": { - "id": "CHEBI:9150", - "label": "Atorvastatin" - }, - "routeOfAdministration": { - "id": "NCIT:C38288", - "label": "Oral" - }, - "doseIntervals": [ - { - "quantity": { - "unit": { - "id": "UCUM:mg", - "label": "milligram" - }, - "value": 40 - }, - "scheduleFrequency": { - "id": "NCIT:C64575", - "label": "Daily" - } - } - ] - }, - "description": "Statin therapy initiated due to elevated LDL and LDLR mutation; continued post-CABG." - }, - { - "treatment": { - "agent": { - "id": "CHEBI:63638", - "label": "Metformin" - }, - "doseIntervals": [ - { - "quantity": { - "unit": { - "id": "UCUM:mg", - "label": "milligram" - }, - "value": 500 - }, - "scheduleFrequency": { - "id": "NCIT:C64575", - "label": "Twice Daily" - } - } - ] - }, - "description": "First-line therapy for type 2 diabetes; well-tolerated with good glycemic control." - }, - { - "procedure": { - "code": { - "id": "NCIT:C17107", - "label": "Coronary Artery Bypass Grafting" - }, - "performed": "2022-11-15" - }, - "description": "CABG performed after recurrent MI and critical stenosis in three coronary arteries." - } - ], - "family": { - "id": "family-001", - "proband": { - "id": "patient67890" - }, - "relatives": [ - { - "id": "father", - "sex": "MALE", - "phenotypicFeatures": [ - { - "type": { - "id": "HP:0001677", - "label": "Sudden cardiac death" - }, - "onset": { - "age": { - "iso8601duration": "P62Y" - } - } - } - ], - "vitalStatus": { - "status": "DECEASED", - "ageAtDeath": { - "iso8601duration": "P62Y" - } - } - } - ] - }, - "files": [ - { - "uri": "https://example.org/reports/genomics67890.pdf", - "fileAttribute": { - "attributeType": { - "id": "NCIT:C16444", - "label": "Genomics Report" - } - } - }, - { - "uri": "https://example.org/reports/cardiac_biopsy.pdf", - "fileAttribute": { - "attributeType": { - "id": "NCIT:C47885", - "label": "Pathology Report" - } - } - } - ], - "metaData": { - "created": "2024-12-15T10:45:00Z", - "createdBy": "Dr. Patel", - "submittedBy": "Cardiology Dept, Metro Medical Center", - "resources": [ - { - "id": "hp", - "name": "Human Phenotype Ontology", - "namespacePrefix": "HP", - "url": "http://purl.obolibrary.org/obo/hp.owl", - "version": "2023-04-08" - }, - { - "id": "mondo", - "name": "MONDO Disease Ontology", - "namespacePrefix": "MONDO", - "url": "http://purl.obolibrary.org/obo/mondo.owl", - "version": "2023-03-01" - }, - { - "id": "ncit", - "name": "NCI Thesaurus", - "namespacePrefix": "NCIT", - "url": "http://purl.obolibrary.org/obo/ncit.owl", - "version": "23.03d" - } - ], - "phenopacketSchemaVersion": "2.0" - } -} \ No newline at end of file diff --git a/example/phenopacket/keywords.json b/example/phenopacket/keywords.json deleted file mode 100644 index d11e5a8e..00000000 --- a/example/phenopacket/keywords.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "main_conditions": [ - "Myocardial infarction", - "Heart attack", - "Cardiac infarction", - "Type 2 diabetes mellitus", - "Diabetes", - "Elevated hepatic transaminase level", - "Liver enzyme elevation", - "Hypercholesterolemia", - "High cholesterol", - "Coronary artery disease" - ], - "other_conditions": [ - "Recurrent myocardial infarction", - "Emergency stenting", - "Bypass surgery", - "HbA1c levels between 6.5% and 7.2%", - "Mild elevation of liver enzymes", - "Statin therapy", - "Non-alcoholic fatty liver disease", - "LDL levels >190 mg/dL", - "Lifestyle interventions", - "Former smoker", - "20 pack-years", - "Quit smoking at age 45", - "Stage III coronary artery disease", - "Multivessel involvement", - "Impaired left ventricular function", - "Ischemic cardiomyopathy", - "Genetic testing", - "Heterozygous LDLR mutation", - "Familial hypercholesterolemia", - "Atorvastatin treatment", - "Metformin treatment", - "Coronary Artery Bypass Grafting", - "Sudden cardiac death in father", - "Father deceased at age 62" - ], - "expanded_sentences": [ - "The patient is a 58-year-old male with a complex cardiac history, including multiple myocardial infarctions.", - "He has experienced recurrent heart attacks, necessitating emergency stenting and later bypass surgery.", - "The patient has type 2 diabetes mellitus, managed with metformin, maintaining HbA1c levels between 6.5% and 7.2%.", - "There is a mild elevation in liver enzymes, suspected to be secondary to statin therapy or non-alcoholic fatty liver disease.", - "He has hypercholesterolemia, with LDL levels exceeding 190 mg/dL despite lifestyle interventions.", - "The patient is a former smoker, having quit at age 45 after 20 pack-years of smoking.", - "He has advanced coronary artery disease, stage III, with multivessel involvement and impaired left ventricular function.", - "A tissue biopsy taken during bypass surgery revealed ischemic cardiomyopathy.", - "Genetic testing confirmed a heterozygous LDLR mutation, consistent with familial hypercholesterolemia.", - "The patient is currently on atorvastatin and metformin treatments.", - "His father experienced sudden cardiac death at age 62." - ] -} \ No newline at end of file From ff730c29ce4b4cd145d0c851317e91f31ed2d491 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 13:02:36 +0200 Subject: [PATCH 37/64] fix: crash-safe resume + single shared vLLM engine; correct NIST TREC URLs Audit-driven robustness pass (adversarially-verified findings): - Atomic writes: write_json_file and prepared trial/criteria writes go through a temp file + fsync + os.replace, so a crash mid-write never leaves a truncated artifact. Add is_valid_json_file; resume gates parse the marker instead of checking size>0 (corrupt = re-run, empty-but-valid = done). - Completion-marker ordering: prepare writes criteria before the trial JSON (the resume marker); ingest writes the summary before the profile. An interrupted unit is re-done, not wrongly skipped. - save_ranked_trials re-raises on write failure (patient counted failed, not silently completed). - build_index fails fast on zero criteria instead of leaving a half-built index that can never become ready_to_match. - run_e2e propagates --rematch to query expansion. vLLM engine lifecycle: - Cache built engines in load_vllm_engine keyed by (model, adapter, params): the per-patient RAG path and the query expander now share ONE engine instead of rebuilding the CoT model repeatedly (was a per-patient reload plus a second copy). - Fix the query-expansion vLLM call (passed a str where a dict was expected) and default its backend to the RAG backend so it shares the cache. - free_models() teardown (gc + destroy_model_parallel + empty_cache) at every top-level exit (e2e, trec, run). TREC sourcing: - Correct NIST topic/qrels URLs to /data/trials/ (the /data/clinical/trials/ paths 404'd; verified 200 and format-checked against the parsers). Co-Authored-By: Claude Opus 4.8 --- src/trialmatchai/cli/run.py | 6 +- src/trialmatchai/main.py | 6 +- src/trialmatchai/matching/query_expansion.py | 19 ++++- src/trialmatchai/matching/trial_ranker.py | 10 +-- src/trialmatchai/models/llm/vllm_loader.py | 67 ++++++++++++++++- src/trialmatchai/orchestration.py | 79 ++++++++++++-------- src/trialmatchai/registry/preparation.py | 30 ++++++-- src/trialmatchai/trec/qrels.py | 4 +- src/trialmatchai/trec/runner.py | 14 +++- src/trialmatchai/trec/topics.py | 4 +- src/trialmatchai/utils/file_utils.py | 40 +++++++++- 11 files changed, 220 insertions(+), 59 deletions(-) diff --git a/src/trialmatchai/cli/run.py b/src/trialmatchai/cli/run.py index 6adf147d..be50f1ac 100644 --- a/src/trialmatchai/cli/run.py +++ b/src/trialmatchai/cli/run.py @@ -9,8 +9,12 @@ def main() -> int: parser.add_argument("--config", default=None, help="Path to config.json") args = parser.parse_args() from trialmatchai.main import main_pipeline + from trialmatchai.orchestration import free_models - return main_pipeline(args.config) + try: + return main_pipeline(args.config) + finally: + free_models() if __name__ == "__main__": diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index aec62f93..e82b7b40 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -27,6 +27,7 @@ from trialmatchai.interop.models import PatientProfile from trialmatchai.utils.file_utils import ( create_directory, + is_valid_json_file, read_json_file, read_text_file, write_json_file, @@ -423,7 +424,10 @@ def main_pipeline( output_folder = Path(paths["output_dir"]) / patient_id if resume: ranked_path = output_folder / "ranked_trials.json" - if ranked_path.exists() and ranked_path.stat().st_size > 0: + # Parseable (not just non-empty) so a truncated/partial marker is + # treated as incomplete and re-run, while an empty-but-valid result + # is correctly recognized as completed. + if is_valid_json_file(str(ranked_path)): logger.info("Resume: skipping already-matched patient %s", patient_id) skipped_patients += 1 continue diff --git a/src/trialmatchai/matching/query_expansion.py b/src/trialmatchai/matching/query_expansion.py index 0ec4cd68..c60cd1cd 100644 --- a/src/trialmatchai/matching/query_expansion.py +++ b/src/trialmatchai/matching/query_expansion.py @@ -60,7 +60,9 @@ def _resolve_settings(config: Dict[str, Any]) -> Dict[str, Any]: qe = dict(config.get("query_expansion") or {}) model_cfg = config.get("model", {}) return { - "backend": qe.get("backend") or config.get("cot_backend") or "transformers", + # Default to the RAG/eligibility backend so the expander shares the cached + # CoT engine with the matching stage instead of loading a second copy. + "backend": qe.get("backend") or config.get("rag", {}).get("backend") or "vllm", "model": qe.get("model") or model_cfg.get("base_model"), "adapter": qe.get("adapter", model_cfg.get("cot_adapter_path")), "device": str(config.get("global", {}).get("device", 0)), @@ -76,8 +78,9 @@ def _resolve_settings(config: Dict[str, Any]) -> Dict[str, Any]: class QueryExpander: """CoT expander; loads its model lazily so import stays base-deps safe.""" - def __init__(self, settings: Dict[str, Any]): + def __init__(self, settings: Dict[str, Any], config: Dict[str, Any]): self.settings = settings + self.config = config self.backend = settings["backend"] if not settings.get("model"): raise ValueError("query_expansion requires a model (set query_expansion.model or model.base_model)") @@ -114,8 +117,16 @@ def _init_vllm(self) -> None: from trialmatchai.models.llm.vllm_loader import load_vllm_engine s = self.settings + # Same model_config/vllm_cfg shape as the RAG eligibility path so an + # identical (model, adapter, params) request hits the engine cache and + # shares ONE engine rather than loading a second CoT copy. + model_config = { + **self.config.get("model", {}), + "base_model": s["model"], + "cot_adapter_path": s.get("adapter"), + } self.engine, self.tokenizer, self.lora_request = load_vllm_engine( - s["model"], adapter_path=s.get("adapter") + model_config=model_config, vllm_cfg=self.config.get("vllm", {}) ) # -- generation -------------------------------------------------------- # @@ -170,7 +181,7 @@ def build_query_expander(config: Dict[str, Any]) -> QueryExpander | None: qe = config.get("query_expansion") or {} if not qe.get("enabled"): return None - return QueryExpander(_resolve_settings(config)) + return QueryExpander(_resolve_settings(config), config) def enrich_summary( diff --git a/src/trialmatchai/matching/trial_ranker.py b/src/trialmatchai/matching/trial_ranker.py index cd9dcf24..db20aa03 100644 --- a/src/trialmatchai/matching/trial_ranker.py +++ b/src/trialmatchai/matching/trial_ranker.py @@ -70,8 +70,8 @@ def rank_trials(trial_data: List[Dict]) -> List[Dict]: def save_ranked_trials(ranked_trials: List[Dict], output_file: str): - try: - write_json_file({"RankedTrials": ranked_trials}, output_file) - logger.info(f"Ranked trials saved to {output_file}") - except Exception as e: - logger.error(f"Failed to save ranked trials: {e}") + # Do NOT swallow write failures: the caller treats a returned-without-raising + # call as a completed patient. A failed final write must surface so the + # patient is counted as failed (and retried), not marked done with no marker. + write_json_file({"RankedTrials": ranked_trials}, output_file) + logger.info(f"Ranked trials saved to {output_file}") diff --git a/src/trialmatchai/models/llm/vllm_loader.py b/src/trialmatchai/models/llm/vllm_loader.py index 7166729d..566b9e34 100644 --- a/src/trialmatchai/models/llm/vllm_loader.py +++ b/src/trialmatchai/models/llm/vllm_loader.py @@ -61,6 +61,50 @@ def _as_float(x, name: str) -> Optional[float]: raise TypeError(f"{name} must be float-compatible, got {type(x)}: {x!r}") from e +# Process-level cache of built vLLM engines, keyed by the resolved model/adapter +# and engine parameters. The RAG eligibility path builds an engine per patient and +# the query expander builds one too — without this they would each rebuild the +# (multi-GB) CoT engine repeatedly, wasting minutes and risking GPU OOM. With the +# cache, identical (model, adapter, params) requests share a single engine. +_ENGINE_CACHE: dict = {} + + +def free_vllm_engines() -> None: + """Tear down all cached vLLM engines and release GPU memory. + + Call once at the end of a top-level run (after all patients/tracks). Idempotent. + """ + global _ENGINE_CACHE + engines = list(_ENGINE_CACHE.values()) + _ENGINE_CACHE = {} + for engine, _tok, _lora in engines: + try: + del engine + except Exception: + pass + try: + import gc + + gc.collect() + except Exception: + pass + try: + from vllm.distributed.parallel_state import ( # type: ignore + destroy_model_parallel, + ) + + destroy_model_parallel() + except Exception: + pass + try: + import torch + + if torch.cuda.is_available(): + torch.cuda.empty_cache() + except Exception: + pass + + def load_vllm_engine( model_config: dict, vllm_cfg: dict | None = None ) -> Tuple[object, Optional[object], Optional[object]]: @@ -132,6 +176,25 @@ def load_vllm_engine( if requested_len is not None: engine_kwargs["max_model_len"] = requested_len + # Return a cached engine when the same model/adapter/params were already built. + cache_adapter = _as_str( + vllm_cfg.get("adapter_path") or model_config.get("cot_adapter_path"), + "adapter_path", + ) or "" + cache_key = ( + model_path, + cache_adapter, + dtype, + tp, + round(gmu, 4), + str(engine_kwargs.get("max_model_len", "default")), + str(engine_kwargs.get("revision", "")), + ) + cached = _ENGINE_CACHE.get(cache_key) + if cached is not None: + logger.info("[vLLM] Reusing cached engine for model=%s", model_path) + return cached + logger.info( "[vLLM] Initializing engine: model=%s dtype=%s tp=%s max_len=%s gmu=%.2f", model_path, @@ -240,4 +303,6 @@ def load_vllm_engine( f"[vLLM] Preload adapter failed (safe to ignore): {e}" ) - return engine, tokenizer, lora_request + result = (engine, tokenizer, lora_request) + _ENGINE_CACHE[cache_key] = result + return result diff --git a/src/trialmatchai/orchestration.py b/src/trialmatchai/orchestration.py index 12db24ee..28c815f7 100644 --- a/src/trialmatchai/orchestration.py +++ b/src/trialmatchai/orchestration.py @@ -18,6 +18,7 @@ from typing import Any, Dict, Iterable, Iterator, Sequence from trialmatchai.search import LanceDBSearchBackend +from trialmatchai.utils.file_utils import is_valid_json_file, write_json_file from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -61,20 +62,19 @@ def ingest_inputs( ) for profile in profiles: profile_path = profile_dir / f"{profile.patient_id}.json" - if not force and profile_path.exists(): + if not force and is_valid_json_file(str(profile_path)): logger.info("Ingest skipped (exists): %s", profile.patient_id) continue - profile_path.write_text( - json.dumps( - profile.model_dump(mode="json", exclude_none=True), - indent=2, - ensure_ascii=False, - ), - encoding="utf-8", + # Summary first; the profile JSON is written last (atomically) as the + # completion marker, so a crash between them re-imports rather than + # leaving a profile with no summary. + write_json_file( + profile_to_matching_summary(profile), + str(summary_dir / f"{profile.patient_id}.json"), ) - (summary_dir / f"{profile.patient_id}.json").write_text( - json.dumps(profile_to_matching_summary(profile), indent=2), - encoding="utf-8", + write_json_file( + profile.model_dump(mode="json", exclude_none=True), + str(profile_path), ) imported += 1 logger.info("Ingested patient %s", profile.patient_id) @@ -132,19 +132,13 @@ def expand_queries(config: Dict[str, Any], *, force: bool = False) -> int: expansion = expander.expand(narrative) merged = enrich_summary(summary, expansion) merged["query_expanded"] = True - summary_path.write_text(json.dumps(merged, indent=2), encoding="utf-8") + write_json_file(merged, str(summary_path)) enriched += 1 logger.info("Query-expanded %s", pid) - # Free the expander's model before the match stage loads its own. + # Release the expander wrapper; its CoT engine stays in the vLLM engine cache + # and is reused by the match stage (shared — a single load, not two). del expander - try: - import torch - - if torch.cuda.is_available(): - torch.cuda.empty_cache() - except Exception: - pass logger.info("Query-expansion stage: enriched %s summaries.", enriched) return enriched @@ -212,12 +206,17 @@ def build_index( logger.info("Indexed %s trial documents.", n_trials) criteria_docs = list(_iter_criteria_docs(Path(processed_criteria_folder), nct_set)) - n_criteria = 0 - if criteria_docs: - n_criteria = backend.index_criteria(criteria_docs, recreate=True) - logger.info("Indexed %s criteria documents.", n_criteria) - else: - logger.warning("No criteria documents found; criteria channel will be empty.") + if not criteria_docs: + # Refuse to leave an inconsistent index (trials table but no criteria + # table) where `ready_to_match` can never become true. An empty corpus is + # a data error — the corpus is unprepared. + raise RuntimeError( + f"No criteria documents found in {processed_criteria_folder}" + + (f" for the {len(nct_set)} filtered NCT ids" if nct_set else "") + + ". The corpus appears unprepared — run `trialmatchai build` (prepare) first." + ) + n_criteria = backend.index_criteria(criteria_docs, recreate=True) + logger.info("Indexed %s criteria documents.", n_criteria) return { "skipped": False, @@ -238,7 +237,7 @@ def count_pending(config: Dict[str, Any]) -> tuple[int, int]: pending = done = 0 for profile_path in sorted(profile_dir.glob("*.json")): ranked = output_dir / profile_path.stem / "ranked_trials.json" - if ranked.exists() and ranked.stat().st_size > 0: + if is_valid_json_file(str(ranked)): done += 1 else: pending += 1 @@ -273,6 +272,16 @@ def run_matching( # --------------------------------------------------------------------------- # # Full e2e # --------------------------------------------------------------------------- # +def free_models() -> None: + """Release cached GPU model engines. Call at the end of a top-level run.""" + try: + from trialmatchai.models.llm.vllm_loader import free_vllm_engines + + free_vllm_engines() + except Exception as exc: # pragma: no cover - teardown is best-effort + logger.debug("free_models: %s", exc) + + def run_e2e( config: Dict[str, Any], inputs: Sequence[str | Path], @@ -295,7 +304,7 @@ def run_e2e( with_entities=with_entities, force=force_reingest, ) - expand_queries(config) + expand_queries(config, force=force_rematch) build_index( config, processed_trials_folder=processed_trials_folder, @@ -303,7 +312,10 @@ def run_e2e( nct_filter=nct_filter, force=force_reindex, ) - return run_matching(config, resume=True, force=force_rematch) + try: + return run_matching(config, resume=True, force=force_rematch) + finally: + free_models() # --------------------------------------------------------------------------- # @@ -327,8 +339,7 @@ def _load_manifest(path: Path) -> dict: def _save_manifest(path: Path, manifest: dict) -> None: - path.parent.mkdir(parents=True, exist_ok=True) - path.write_text(json.dumps(manifest, indent=2), encoding="utf-8") + write_json_file(manifest, str(path)) def _count_json(folder: Path) -> int: @@ -399,8 +410,12 @@ def prepare_corpus( criteria_rows = prepare_criteria_documents( doc, embedder, entity_annotator=entity_annotator ) - write_prepared_trial(trial_row, processed_trials_folder) + # Write criteria first; the trial JSON is written last and is the + # per-trial completion marker the resume check keys on — so an + # interrupted trial (criteria written, trial not) is re-processed + # rather than wrongly skipped. write_prepared_criteria(criteria_rows, processed_criteria_folder) + write_prepared_trial(trial_row, processed_trials_folder) prepared += 1 except Exception: failed += 1 diff --git a/src/trialmatchai/registry/preparation.py b/src/trialmatchai/registry/preparation.py index 05b06e91..4f9ae72f 100644 --- a/src/trialmatchai/registry/preparation.py +++ b/src/trialmatchai/registry/preparation.py @@ -2,7 +2,9 @@ import hashlib import json +import os import re +import tempfile from collections.abc import Sequence from pathlib import Path from typing import Any, Protocol @@ -158,10 +160,27 @@ def prepare_criteria_documents( return rows +def _atomic_write_text(path: Path, text: str) -> None: + """Write text via a temp file + os.replace so readers never see a partial file.""" + path.parent.mkdir(parents=True, exist_ok=True) + fd, tmp = tempfile.mkstemp(dir=str(path.parent), prefix=".tmp-", suffix=path.suffix) + try: + with os.fdopen(fd, "w", encoding="utf-8") as f: + f.write(text) + f.flush() + os.fsync(f.fileno()) + os.replace(tmp, path) + except Exception: + try: + os.unlink(tmp) + except OSError: + pass + raise + + def write_prepared_trial(row: dict[str, Any], folder: str | Path) -> Path: path = Path(folder) / f"{row['nct_id']}.json" - path.parent.mkdir(parents=True, exist_ok=True) - path.write_text(json.dumps(row, indent=2, sort_keys=True), encoding="utf-8") + _atomic_write_text(path, json.dumps(row, indent=2, sort_keys=True)) return path @@ -169,10 +188,11 @@ def write_prepared_criteria(rows: Sequence[dict[str, Any]], folder: str | Path) if not rows: return 0 trial_folder = Path(folder) / str(rows[0]["nct_id"]) - trial_folder.mkdir(parents=True, exist_ok=True) for row in rows: - path = trial_folder / f"{row['criteria_id']}.json" - path.write_text(json.dumps(row, indent=2, sort_keys=True), encoding="utf-8") + _atomic_write_text( + trial_folder / f"{row['criteria_id']}.json", + json.dumps(row, indent=2, sort_keys=True), + ) return len(rows) diff --git a/src/trialmatchai/trec/qrels.py b/src/trialmatchai/trec/qrels.py index 666461b2..48ebe7e1 100644 --- a/src/trialmatchai/trec/qrels.py +++ b/src/trialmatchai/trec/qrels.py @@ -23,8 +23,8 @@ logger = setup_logging(__name__) QRELS_URLS: dict[str, str] = { - "21": "https://trec.nist.gov/data/clinical/trials/qrels2021.txt", - "22": "https://trec.nist.gov/data/clinical/trials/qrels2022.txt", + "21": "https://trec.nist.gov/data/trials/qrels2021.txt", + "22": "https://trec.nist.gov/data/trials/qrels2022.txt", } DEFAULT_CUTOFFS = (10, 50, 100, 200, 300, 500, 1000) diff --git a/src/trialmatchai/trec/runner.py b/src/trialmatchai/trec/runner.py index 4fe35ab2..ccaad55f 100644 --- a/src/trialmatchai/trec/runner.py +++ b/src/trialmatchai/trec/runner.py @@ -7,16 +7,22 @@ from __future__ import annotations -import json from copy import deepcopy from pathlib import Path from typing import Any, Dict from trialmatchai.config.config_loader import load_config -from trialmatchai.orchestration import build_index, count_pending, expand_queries, run_matching +from trialmatchai.orchestration import ( + build_index, + count_pending, + expand_queries, + free_models, + run_matching, +) from trialmatchai.trec import qrels as qrels_mod from trialmatchai.trec.corpus import TrackSpec, resolve_tracks from trialmatchai.trec.topics import import_topics +from trialmatchai.utils.file_utils import write_json_file from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -128,7 +134,7 @@ def run_tracks( try: metrics = qrels_mod.evaluate(qrels, spec.output_dir) metrics_path = Path(spec.output_dir) / "evaluation_metrics.json" - metrics_path.write_text(json.dumps(metrics, indent=2), encoding="utf-8") + write_json_file(metrics, str(metrics_path)) logger.info( "Track %s recall: %s -> %s", spec.key, @@ -139,6 +145,8 @@ def run_tracks( logger.exception("Evaluation failed for track %s", spec.key) logger.info("Track %s done -> %s", spec.key, spec.output_dir) + # All tracks done — release the shared GPU engines once. + free_models() if failures: logger.warning("TREC run completed with %s track failure(s).", failures) return 1 diff --git a/src/trialmatchai/trec/topics.py b/src/trialmatchai/trec/topics.py index cfee4a40..004611c4 100644 --- a/src/trialmatchai/trec/topics.py +++ b/src/trialmatchai/trec/topics.py @@ -54,13 +54,13 @@ class TopicSource: track="21", id_prefix="trec-2021", kind="nist_xml", - topics_url="https://trec.nist.gov/data/clinical/trials/topics2021.xml", + topics_url="https://trec.nist.gov/data/trials/topics2021.xml", ), "22": TopicSource( track="22", id_prefix="trec-2022", kind="nist_xml", - topics_url="https://trec.nist.gov/data/clinical/trials/topics2022.xml", + topics_url="https://trec.nist.gov/data/trials/topics2022.xml", ), # The SIGIR-2016 collection (Koopman & Zuccon) is hosted on the CSIRO Data # Access Portal (no stable direct-download URL), so sigir topics are sourced diff --git a/src/trialmatchai/utils/file_utils.py b/src/trialmatchai/utils/file_utils.py index e5054bb4..b59698a1 100644 --- a/src/trialmatchai/utils/file_utils.py +++ b/src/trialmatchai/utils/file_utils.py @@ -1,5 +1,6 @@ import json import os +import tempfile from typing import Dict, List @@ -13,14 +14,47 @@ def read_json_file(file_path: str) -> Dict: def write_json_file(data: Dict, file_path: str): - """Write data to a JSON file.""" + """Atomically write data to a JSON file. + + Writes to a temp file in the same directory, fsyncs, then os.replace()s it + into place — so a crash mid-write can never leave a truncated/partial file + that resume logic would mistake for a completed artifact. + """ try: - with open(file_path, "w", encoding="utf-8") as f: - json.dump(data, f, indent=4, ensure_ascii=False) + path = str(file_path) + directory = os.path.dirname(path) or "." + os.makedirs(directory, exist_ok=True) + fd, tmp = tempfile.mkstemp(dir=directory, prefix=".tmp-", suffix=".json") + try: + with os.fdopen(fd, "w", encoding="utf-8") as f: + json.dump(data, f, indent=4, ensure_ascii=False) + f.flush() + os.fsync(f.fileno()) + os.replace(tmp, path) + except Exception: + try: + os.unlink(tmp) + except OSError: + pass + raise except Exception as e: raise ValueError(f"Failed to write {file_path}: {str(e)}") +def is_valid_json_file(file_path: str) -> bool: + """True only if the path exists and contains parseable JSON. + + Used by resume gates so a present-but-corrupt/partial marker is treated as + incomplete (re-run) rather than done. + """ + try: + with open(file_path, "r", encoding="utf-8") as f: + json.load(f) + return True + except Exception: + return False + + def read_text_file(file_path: str) -> List[str]: """Read lines from a text file.""" try: From 83a50c6ccdff9c6f39a24278303362784066a52a Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 20:27:44 +0200 Subject: [PATCH 38/64] feat(trec): tie-aware nDCG eval + deterministic ranking Add McSherry-Najork tie-aware nDCG@{5,10,20} (order-invariant over equal scores) and P@10 (relevant>=1 and eligible==2) alongside recall@k, condensed to labeled-and-retrieved trials. rank_trials gets a deterministic tie-break (eligibility -> reranker -> first-level -> NCT id) and main.py threads the score signals through. Mirrors TrialGPT's Table-2 metrics. Co-Authored-By: Claude Opus 4.8 --- src/trialmatchai/main.py | 6 +- src/trialmatchai/matching/trial_ranker.py | 40 ++++++++- src/trialmatchai/trec/metrics.py | 102 ++++++++++++++++++++++ src/trialmatchai/trec/qrels.py | 84 +++++++++++++++--- src/trialmatchai/trec/runner.py | 4 +- 5 files changed, 219 insertions(+), 17 deletions(-) create mode 100644 src/trialmatchai/trec/metrics.py diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index e82b7b40..bbcc117f 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -496,7 +496,11 @@ def main_pipeline( with log_timing(logger, "Final ranking"): trial_data = load_trial_data(str(output_folder)) - ranked_trials = rank_trials(trial_data) + ranked_trials = rank_trials( + trial_data, + first_level_scores=first_level_scores, + second_level_scores=dict(semi_final_trials), + ) save_ranked_trials( ranked_trials, str(output_folder / "ranked_trials.json") ) diff --git a/src/trialmatchai/matching/trial_ranker.py b/src/trialmatchai/matching/trial_ranker.py index db20aa03..5c094293 100644 --- a/src/trialmatchai/matching/trial_ranker.py +++ b/src/trialmatchai/matching/trial_ranker.py @@ -59,13 +59,45 @@ def score_trial(trial: Dict) -> float: return met / len(decided) -def rank_trials(trial_data: List[Dict]) -> List[Dict]: +def rank_trials( + trial_data: List[Dict], + *, + first_level_scores: Dict[str, float] | None = None, + second_level_scores: Dict[str, float] | None = None, +) -> List[Dict]: + """Rank trials by eligibility, breaking ties deterministically. + + The eligibility score is coarse (small rationals), so many trials tie. Rather + than let ties resolve by arbitrary filesystem order, break them by the + continuous second-level reranker probability, then the first-level retrieval + score, then the NCT id — a meaningful order within each eligibility bucket + that is fully reproducible. (Tie-aware nDCG further ensures genuine ties are + scored fairly regardless of this order.) + """ + first_level_scores = first_level_scores or {} + second_level_scores = second_level_scores or {} ranked_trials = [] for trial in trial_data: trial_id = trial.get("TrialID", "Unknown") - score = score_trial(trial) - ranked_trials.append({"TrialID": trial_id, "Score": score}) - ranked_trials.sort(key=lambda x: x["Score"], reverse=True) + ranked_trials.append( + { + "TrialID": trial_id, + "Score": score_trial(trial), + "RerankerScore": float(second_level_scores.get(trial_id, 0.0)), + "FirstLevelScore": float(first_level_scores.get(trial_id, 0.0)), + } + ) + # Descending eligibility -> reranker -> first-level; ascending NCT id last + # (negate numeric keys so a single ascending sort gives the right order and + # the NCT-id tie-break stays ascending). + ranked_trials.sort( + key=lambda x: ( + -x["Score"], + -x["RerankerScore"], + -x["FirstLevelScore"], + x["TrialID"], + ) + ) return ranked_trials diff --git a/src/trialmatchai/trec/metrics.py b/src/trialmatchai/trec/metrics.py new file mode 100644 index 00000000..9040994e --- /dev/null +++ b/src/trialmatchai/trec/metrics.py @@ -0,0 +1,102 @@ +"""Ranking-quality metrics for TREC evaluation. + +These complement recall@k (the retrieval-side metric in ``qrels``). nDCG here is: + + * **tie-aware** (McSherry & Najork, 2008): trials sharing the same ranking + score form a tie group, and each member is given the AVERAGE positional + discount over the ranks the group spans (truncated at k). The result is the + EXPECTED nDCG over all random orderings of the tied trials, so it is + invariant to arbitrary tie-breaking — it rewards only genuinely ordering a + more-relevant trial above a less-relevant one. + * **condensed**: computed over the labeled-and-retrieved trials only, with the + IDCG normalized to that same set. It measures the quality of the final + ranking of the trials the model actually evaluated, decoupled from recall. + +Gain is linear (gain = relevance grade), matching trec_eval's default and the +legacy evaluation. +""" + +from __future__ import annotations + +import math +from typing import Dict, Mapping, Sequence, Set + + +def _discount(rank: int) -> float: + """Log2 positional discount for a 1-indexed rank: 1 / log2(rank + 1).""" + return 1.0 / math.log2(rank + 1) + + +def tie_aware_dcg_at_k( + ordered_ids: Sequence[str], + score_of: Mapping[str, float], + gain_of: Mapping[str, float], + k: int, +) -> float: + """Expected DCG@k over random orderings of tied scores (McSherry-Najork). + + ``ordered_ids`` must already be sorted by descending ranking score, so equal + scores are contiguous. Each tie group spanning 1-indexed ranks [a..b] gives + every member the mean discount over ranks a..min(b, k). + """ + n = len(ordered_ids) + total = 0.0 + i = 0 + while i < n: + j = i + while j + 1 < n and score_of[ordered_ids[j + 1]] == score_of[ordered_ids[i]]: + j += 1 + a, b = i + 1, j + 1 # 1-indexed ranks spanned by this tie group + hi = min(b, k) + if hi >= a: + avg_discount = sum(_discount(r) for r in range(a, hi + 1)) / (b - a + 1) + for d in ordered_ids[i : j + 1]: + total += float(gain_of.get(d, 0.0)) * avg_discount + i = j + 1 + return total + + +def idcg_at_k(gains: Sequence[float], k: int) -> float: + """Ideal DCG@k — gains sorted descending (tie order is irrelevant: equal gains).""" + ideal = sorted((float(g) for g in gains), reverse=True)[:k] + return sum(g * _discount(r + 1) for r, g in enumerate(ideal)) + + +def ndcg_at_k( + ordered_ids: Sequence[str], + score_of: Mapping[str, float], + gain_of: Mapping[str, float], + k: int, +) -> float: + """Tie-aware nDCG@k. ``ordered_ids`` should be the condensed (labeled) list.""" + if k <= 0 or not ordered_ids: + return 0.0 + idcg = idcg_at_k([gain_of.get(d, 0.0) for d in ordered_ids], k) + if idcg <= 0: + return 0.0 + return tie_aware_dcg_at_k(ordered_ids, score_of, gain_of, k) / idcg + + +def precision_at_k(ordered_ids: Sequence[str], relevant: Set[str], k: int) -> float: + """Standard binary P@k over the final ranked list (hard cutoff k).""" + if k <= 0: + return 0.0 + topk = ordered_ids[:k] + if not topk: + return 0.0 + return sum(1 for d in topk if d in relevant) / float(k) + + +def condensed_ndcg( + ranked_ids: Sequence[str], + score_of: Mapping[str, float], + grade_of: Mapping[str, int], + cutoffs: Sequence[int], +) -> Dict[int, float]: + """Tie-aware nDCG@k for each cutoff, condensed to labeled-and-retrieved trials. + + ``ranked_ids`` is the final ranking order; ``grade_of`` is the qrels grade for + judged trials. Only trials present in ``grade_of`` are kept (condensed). + """ + condensed = [nid for nid in ranked_ids if nid in grade_of] + return {k: ndcg_at_k(condensed, score_of, grade_of, k) for k in cutoffs} diff --git a/src/trialmatchai/trec/qrels.py b/src/trialmatchai/trec/qrels.py index 48ebe7e1..92db16e0 100644 --- a/src/trialmatchai/trec/qrels.py +++ b/src/trialmatchai/trec/qrels.py @@ -18,6 +18,7 @@ import requests from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_exponential +from trialmatchai.trec.metrics import condensed_ndcg, precision_at_k from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -28,6 +29,8 @@ } DEFAULT_CUTOFFS = (10, 50, 100, 200, 300, 500, 1000) +NDCG_CUTOFFS = (5, 10, 20) +P_CUTOFF = 10 @retry( @@ -122,6 +125,31 @@ def recall_at_k(retrieved: list[str], relevant: set[str], k: int) -> float | Non return hits / len(relevant) +def _ranked_with_scores(patient_dir: Path) -> tuple[list[str], dict[str, float]]: + """Final ranked NCT ids (in order) + their eligibility scores from ranked_trials.json.""" + ranked = patient_dir / "ranked_trials.json" + if not ranked.exists(): + return [], {} + try: + data = json.loads(ranked.read_text()) + except Exception: + return [], {} + items = data.get("RankedTrials", []) if isinstance(data, dict) else data + order: list[str] = [] + score_of: dict[str, float] = {} + for item in items or []: + if not isinstance(item, dict) or item.get("TrialID") is None: + continue + nid = str(item["TrialID"]) + order.append(nid) + score_of[nid] = float(item.get("Score", 0.0)) + return order, score_of + + +def _mean(sums: dict, counts: dict) -> dict: + return {key: (sums[key] / counts[key] if counts[key] else None) for key in sums} + + def evaluate( qrels: dict[str, dict[str, int]], results_dir: Path, @@ -129,31 +157,67 @@ def evaluate( cutoffs: tuple[int, ...] = DEFAULT_CUTOFFS, threshold: int = 1, ) -> dict: - """Compute per-query and mean recall@k over the patients in ``results_dir``.""" + """Per-query and mean metrics over the patients in ``results_dir``. + + Two complementary families: + * recall@k — retrieval quality (first-level candidate list). + * tie-aware nDCG@{5,10,20} + P@10 — ranking quality of the final + ranked_trials.json, condensed to labeled-and-retrieved trials. nDCG is + order-invariant on ties (McSherry-Najork); P@10 is reported for both + "relevant" (grade>=1) and "eligible" (grade==2). + """ results_dir = Path(results_dir) relevant = relevant_ncts(qrels, threshold=threshold) + eligible = relevant_ncts(qrels, threshold=2) per_query: dict[str, dict] = {} - sums = {k: 0.0 for k in cutoffs} - counts = {k: 0 for k in cutoffs} - for query_id, rel_set in relevant.items(): + rec_sums = {f"recall@{k}": 0.0 for k in cutoffs} + rec_counts = {f"recall@{k}": 0 for k in cutoffs} + rank_sums = {f"ndcg@{k}": 0.0 for k in NDCG_CUTOFFS} + rank_sums[f"P@{P_CUTOFF}(rel>=1)"] = 0.0 + rank_sums[f"P@{P_CUTOFF}(eligible)"] = 0.0 + rank_counts = {key: 0 for key in rank_sums} + + for query_id, judgments in qrels.items(): patient_dir = results_dir / query_id + rel_set = relevant.get(query_id, set()) if not patient_dir.is_dir() or not rel_set: continue retrieved = _retrieved_for_patient(patient_dir) - row = {"num_relevant": len(rel_set), "num_retrieved": len(retrieved)} + ranked, score_of = _ranked_with_scores(patient_dir) + row = { + "num_relevant": len(rel_set), + "num_retrieved": len(retrieved), + "num_ranked": len(ranked), + } for k in cutoffs: r = recall_at_k(retrieved, rel_set, k) row[f"recall@{k}"] = r if r is not None: - sums[k] += r - counts[k] += 1 + rec_sums[f"recall@{k}"] += r + rec_counts[f"recall@{k}"] += 1 + + if ranked: + ndcg = condensed_ndcg(ranked, score_of, judgments, NDCG_CUTOFFS) + for k in NDCG_CUTOFFS: + row[f"ndcg@{k}"] = ndcg[k] + rank_sums[f"ndcg@{k}"] += ndcg[k] + rank_counts[f"ndcg@{k}"] += 1 + p_rel = precision_at_k(ranked, rel_set, P_CUTOFF) + p_elig = precision_at_k(ranked, eligible.get(query_id, set()), P_CUTOFF) + row[f"P@{P_CUTOFF}(rel>=1)"] = p_rel + row[f"P@{P_CUTOFF}(eligible)"] = p_elig + rank_sums[f"P@{P_CUTOFF}(rel>=1)"] += p_rel + rank_sums[f"P@{P_CUTOFF}(eligible)"] += p_elig + rank_counts[f"P@{P_CUTOFF}(rel>=1)"] += 1 + rank_counts[f"P@{P_CUTOFF}(eligible)"] += 1 per_query[query_id] = row - mean = {f"recall@{k}": (sums[k] / counts[k] if counts[k] else None) for k in cutoffs} + mean = {**_mean(rec_sums, rec_counts), **_mean(rank_sums, rank_counts)} return { - "threshold": threshold, + "recall_relevance_threshold": threshold, "num_queries_scored": len(per_query), - "mean_recall": mean, + "num_queries_ranked": rank_counts[f"ndcg@{NDCG_CUTOFFS[0]}"], + "mean": mean, "per_query": per_query, } diff --git a/src/trialmatchai/trec/runner.py b/src/trialmatchai/trec/runner.py index ccaad55f..2aacd9b3 100644 --- a/src/trialmatchai/trec/runner.py +++ b/src/trialmatchai/trec/runner.py @@ -136,9 +136,9 @@ def run_tracks( metrics_path = Path(spec.output_dir) / "evaluation_metrics.json" write_json_file(metrics, str(metrics_path)) logger.info( - "Track %s recall: %s -> %s", + "Track %s metrics: %s -> %s", spec.key, - metrics["mean_recall"], + metrics["mean"], metrics_path, ) except Exception: From c654983f273953e65b0079bbba737f62f11ce588 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 20:27:45 +0200 Subject: [PATCH 39/64] feat(concepts): open-vocabulary sources + one-command build-concepts Promote the concept-dictionary converters into the package (entities/concept_sources.py): OBO + NCBI gene_info parsers, a source registry (genes, diseases, chemicals, cell lines, cell types, phenotypes), idempotent download, and build_open_dictionaries(). build-concepts gains --sources open (download+convert+embed+index in one step), --concept-cache, --force-download, and an optional --concept-csv so dict-only builds work. Co-Authored-By: Claude Opus 4.8 --- src/trialmatchai/cli/build_concepts.py | 63 ++++- src/trialmatchai/entities/concept_sources.py | 242 +++++++++++++++++++ 2 files changed, 292 insertions(+), 13 deletions(-) create mode 100644 src/trialmatchai/entities/concept_sources.py diff --git a/src/trialmatchai/cli/build_concepts.py b/src/trialmatchai/cli/build_concepts.py index 6937a34b..3be18d7d 100644 --- a/src/trialmatchai/cli/build_concepts.py +++ b/src/trialmatchai/cli/build_concepts.py @@ -23,7 +23,11 @@ def main() -> int: description="Build the TrialMatchAI LanceDB concept table." ) parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") - parser.add_argument("--concept-csv", required=True, help="OMOP CONCEPT.csv path") + parser.add_argument( + "--concept-csv", + default=None, + help="OMOP CONCEPT.csv path (optional; omit to build from --dictionary only)", + ) parser.add_argument( "--synonym-csv", default=None, @@ -42,6 +46,23 @@ def main() -> int: default=[], help="OMOP vocabulary to include. Defaults to TrialMatchAI deployment set.", ) + parser.add_argument( + "--sources", + choices=["open"], + default=None, + help="Download + convert a bundled source set. 'open' = genes, diseases, " + "chemicals, cell lines, cell types, phenotypes (no licence required).", + ) + parser.add_argument( + "--concept-cache", + default="data/concept_dicts", + help="Directory for downloaded sources + converted dictionaries (cached).", + ) + parser.add_argument( + "--force-download", + action="store_true", + help="Re-download/re-convert bundled sources even if cached.", + ) parser.add_argument("--db-path", default=None, help="Output LanceDB directory") parser.add_argument("--table", default=None, help="Output LanceDB table name") parser.add_argument( @@ -62,20 +83,36 @@ def main() -> int: db_path = args.db_path or linker_cfg.get("db_path") or "data/concepts" table_name = args.table or linker_cfg.get("table") or "concepts" + if not args.concept_csv and not args.dictionary and not args.sources: + parser.error("provide --concept-csv, --sources, and/or at least one --dictionary") + + # Collect dictionary specs from explicit --dictionary flags and bundled --sources. + dictionary_specs: list[tuple[str, str, str]] = [ + _parse_dictionary_spec(spec) for spec in args.dictionary + ] + if args.sources == "open": + from trialmatchai.entities.concept_sources import build_open_dictionaries + + for source, dict_path in build_open_dictionaries( + Path(args.concept_cache), force=args.force_download + ): + dictionary_specs.append( + (source.vocabulary_id, source.domain_id, str(dict_path)) + ) + if not dictionary_specs and not args.concept_csv: + parser.error("no concept sources were built (all downloads failed?)") + vocabularies = tuple(args.vocabulary or DEFAULT_OMOP_VOCABULARIES) - rows = build_omop_concept_rows( - args.concept_csv, - args.synonym_csv, - vocabularies=vocabularies, - ) - for spec in args.dictionary: - vocab, domain, path = _parse_dictionary_spec(spec) + rows: list = [] + if args.concept_csv: + rows = build_omop_concept_rows( + args.concept_csv, + args.synonym_csv, + vocabularies=vocabularies, + ) + for vocab, domain, path in dictionary_specs: rows.extend( - build_dictionary_rows( - path, - vocabulary_id=vocab, - domain_id=domain, - ) + build_dictionary_rows(path, vocabulary_id=vocab, domain_id=domain) ) embeddings = None diff --git a/src/trialmatchai/entities/concept_sources.py b/src/trialmatchai/entities/concept_sources.py new file mode 100644 index 00000000..41c34182 --- /dev/null +++ b/src/trialmatchai/entities/concept_sources.py @@ -0,0 +1,242 @@ +"""Open biomedical vocabularies for the entity-linking concept store. + +This turns publicly downloadable ontologies into the concept-dictionary format +consumed by :func:`trialmatchai.entities.builder.build_dictionary_rows` +(``||||...``), so the whole concept store can be +built with a single ``trialmatchai build-concepts --sources open`` command. + +Two source kinds are supported: + * ``obo`` — OBO ontologies (Cell Ontology, HPO, ChEBI, Disease Ontology, + Cellosaurus), filtered by id prefix. + * ``gene_info`` — NCBI ``gene_info`` TSV (symbol + full name + synonyms). + +OMOP clinical vocabularies (SNOMED/LOINC/RxNorm) are *not* here — they come from a +licensed OHDSI Athena ``CONCEPT.csv`` passed via ``--concept-csv``. +""" + +from __future__ import annotations + +import gzip +import re +from dataclasses import dataclass +from pathlib import Path +from typing import IO, Iterator + +import requests + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + +_SYN_RE = re.compile(r'synonym:\s*"((?:[^"\\]|\\.)*)"') +_WS_RE = re.compile(r"\s+") +_DOWNLOAD_TIMEOUT = 1800 +_CHUNK = 1 << 20 + + +@dataclass(frozen=True) +class ConceptSource: + """A downloadable open vocabulary and how to map it to concept rows.""" + + name: str + url: str + kind: str # "obo" | "gene_info" + vocabulary_id: str + domain_id: str + id_prefix: str | None = None # OBO: keep only ids with this prefix + + @property + def filename(self) -> str: + return self.url.rsplit("/", 1)[-1] + + @property + def dict_filename(self) -> str: + return f"dict_{self.domain_id}.txt" + + +# The default "open" source set (no auth, no licence acceptance required). +OPEN_SOURCES: dict[str, ConceptSource] = { + "genes": ConceptSource( + "genes", + "https://ftp.ncbi.nih.gov/gene/DATA/GENE_INFO/Mammalia/Homo_sapiens.gene_info.gz", + "gene_info", "NCBIGene", "Gene", + ), + "diseases": ConceptSource( + "diseases", "http://purl.obolibrary.org/obo/doid.obo", + "obo", "DOID", "Disease", "DOID:", + ), + "chemicals": ConceptSource( + "chemicals", "https://ftp.ebi.ac.uk/pub/databases/chebi/ontology/chebi_lite.obo", + "obo", "ChEBI", "Chemical", "CHEBI:", + ), + "cell_lines": ConceptSource( + "cell_lines", "https://ftp.expasy.org/databases/cellosaurus/cellosaurus.obo", + "obo", "Cellosaurus", "CellLine", "CVCL_", + ), + "cell_types": ConceptSource( + "cell_types", "http://purl.obolibrary.org/obo/cl.obo", + "obo", "CL", "CellType", "CL:", + ), + "phenotypes": ConceptSource( + "phenotypes", "http://purl.obolibrary.org/obo/hp.obo", + "obo", "HPO", "Phenotype", "HP:", + ), +} + + +def _open(path: Path) -> IO[str]: + if str(path).endswith(".gz"): + return gzip.open(path, "rt", encoding="utf-8") + return open(path, "r", encoding="utf-8") + + +def _clean_names(names: Iterator[str] | list[str]) -> list[str]: + """Normalise whitespace, drop blanks, dedupe case-insensitively (order-preserving).""" + out: list[str] = [] + seen: set[str] = set() + for raw in names: + name = _WS_RE.sub(" ", (raw or "").replace("\\", "")).strip() + key = name.casefold() + if name and key not in seen: + seen.add(key) + out.append(name) + return out + + +def parse_obo(path: Path, prefix: str | None) -> Iterator[tuple[str, list[str]]]: + """Yield ``(id, [name, *synonyms])`` for each non-obsolete OBO term.""" + cid = name = None + synonyms: list[str] = [] + obsolete = False + + def emit() -> tuple[str, list[str]] | None: + if cid and name and not obsolete and (not prefix or cid.startswith(prefix)): + return cid, [name, *synonyms] + return None + + with _open(path) as fh: + for raw in fh: + line = raw.rstrip("\n") + if line == "[Term]": + rec = emit() + if rec: + yield rec + cid = name = None + synonyms = [] + obsolete = False + elif line.startswith("id:"): + cid = line[3:].strip() + elif line.startswith("name:"): + name = line[5:].strip() + elif line.startswith("synonym:"): + m = _SYN_RE.search(line) + if m: + synonyms.append(m.group(1)) + elif line.startswith("is_obsolete:") and "true" in line: + obsolete = True + rec = emit() + if rec: + yield rec + + +def parse_gene_info(path: Path) -> Iterator[tuple[str, list[str]]]: + """Yield ``(gene_id, [symbol, full name, *synonyms, *other designations])``.""" + with _open(path) as fh: + for raw in fh: + if raw.startswith("#"): + continue + cols = raw.rstrip("\n").split("\t") + if len(cols) < 14: + continue + gene_id = cols[1].strip() + symbol = cols[2].strip() + syns = [] if cols[4] == "-" else cols[4].split("|") + full_name = "" if cols[8] == "-" else cols[8].strip() + auth_full = "" if cols[11] == "-" else cols[11].strip() + other = [] if cols[13] == "-" else cols[13].split("|") + names = [n for n in [symbol, auth_full, full_name, *syns, *other] if n] + if gene_id and names: + yield gene_id, names + + +def _iter_source(source: ConceptSource, raw_path: Path) -> Iterator[tuple[str, list[str]]]: + if source.kind == "obo": + return parse_obo(raw_path, source.id_prefix) + if source.kind == "gene_info": + return parse_gene_info(raw_path) + raise ValueError(f"Unknown source kind: {source.kind!r}") + + +def write_dictionary(source: ConceptSource, raw_path: Path, dict_path: Path) -> int: + """Convert a downloaded source file into a concept-dictionary file. Returns rows.""" + n = 0 + with open(dict_path, "w", encoding="utf-8") as out: + for cid, names in _iter_source(source, raw_path): + clean = _clean_names(names) + if cid and clean: + out.write(f"{cid}||{'|'.join(clean)}\n") + n += 1 + return n + + +def download_source( + source: ConceptSource, dest_dir: Path, *, force: bool = False +) -> Path | None: + """Download a source (idempotent, atomic). Returns the path, or None on failure.""" + dest_dir.mkdir(parents=True, exist_ok=True) + dest = dest_dir / source.filename + if dest.exists() and dest.stat().st_size > 0 and not force: + logger.info("cached download: %s", dest) + return dest + logger.info("downloading %s -> %s", source.url, dest) + tmp = dest.with_name(dest.name + ".tmp") + try: + with requests.get(source.url, stream=True, timeout=_DOWNLOAD_TIMEOUT) as resp: + resp.raise_for_status() + with open(tmp, "wb") as handle: + for chunk in resp.iter_content(_CHUNK): + handle.write(chunk) + tmp.replace(dest) + return dest + except Exception: + logger.exception("download failed: %s", source.url) + tmp.unlink(missing_ok=True) + return None + + +def build_open_dictionaries( + work_dir: Path, + *, + sources: list[str] | None = None, + force: bool = False, +) -> list[tuple[ConceptSource, Path]]: + """Download + convert the requested open sources into concept dictionaries. + + Idempotent: existing downloads and converted dictionaries are reused unless + ``force``. Returns ``(source, dict_path)`` for every source that produced a + non-empty dictionary; failed downloads are skipped with a warning. + """ + work_dir = Path(work_dir) + raw_dir = work_dir / "raw" + work_dir.mkdir(parents=True, exist_ok=True) + names = sources or list(OPEN_SOURCES) + results: list[tuple[ConceptSource, Path]] = [] + + for key in names: + source = OPEN_SOURCES[key] + dict_path = work_dir / source.dict_filename + if dict_path.exists() and dict_path.stat().st_size > 0 and not force: + logger.info("cached dictionary: %s", dict_path) + results.append((source, dict_path)) + continue + raw_path = download_source(source, raw_dir, force=force) + if raw_path is None: + logger.warning("skipping %s (download failed)", key) + continue + count = write_dictionary(source, raw_path, dict_path) + logger.info("converted %s: %s concepts -> %s", key, count, dict_path) + if count > 0: + results.append((source, dict_path)) + else: + logger.warning("skipping %s (0 concepts after conversion)", key) + return results From f437155a28efe1a3afd375fc6a62eea6b0d05d60 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 20:27:45 +0200 Subject: [PATCH 40/64] chore(dev): gitleaks pre-commit replaces homegrown scan_secrets Add .pre-commit-config.yaml (gitleaks secret scan + ruff + hygiene hooks) and pre-commit to dev deps; point README/docs at pre-commit. Remove the 4-regex scan_secrets.py (weak coverage, false confidence). Gitignore scripts/*.sh (local operational glue; the CLI is the shipped interface). Co-Authored-By: Claude Opus 4.8 --- .gitignore | 1 + .pre-commit-config.yaml | 25 +++++++++++++++++++ README.md | 8 +++++- docs/release.md | 2 +- pyproject.toml | 1 + scripts/scan_secrets.py | 54 ----------------------------------------- 6 files changed, 35 insertions(+), 56 deletions(-) create mode 100644 .pre-commit-config.yaml delete mode 100644 scripts/scan_secrets.py diff --git a/.gitignore b/.gitignore index 7862acbf..e089064b 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,7 @@ dist/ *.bak *.swp *.slurm +scripts/*.sh **/tmp/ .DS_Store Thumbs.db diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..acd7ccbc --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,25 @@ +# Pre-commit hooks for TrialMatchAI. +# Install once: uv run pre-commit install +# Run on demand: uv run pre-commit run --all-files +repos: + - repo: https://github.com/gitleaks/gitleaks + rev: v8.21.2 + hooks: + - id: gitleaks + name: gitleaks (secret scan) + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.8.4 + hooks: + - id: ruff + args: [--fix] + - id: ruff-format + + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: check-added-large-files + args: [--maxkb=2048] + - id: end-of-file-fixer + - id: trailing-whitespace + - id: check-merge-conflict diff --git a/README.md b/README.md index 85ef1034..c1b0abfb 100644 --- a/README.md +++ b/README.md @@ -399,10 +399,16 @@ See [docs/registry-updater.md](docs/registry-updater.md). uv sync uv run ruff check . uv run pytest -uv run python scripts/scan_secrets.py +uv run pre-commit run --all-files # ruff + gitleaks secret scan + hygiene uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 ``` +Install the git hooks once so secret scanning and linting run on every commit: + +```bash +uv run pre-commit install +``` + ## Security Never commit real credentials, private keys, datasets, models, local LanceDB diff --git a/docs/release.md b/docs/release.md index 873558ee..468963d0 100644 --- a/docs/release.md +++ b/docs/release.md @@ -9,7 +9,7 @@ uv lock --check uv run ruff check . uv run pytest uv build -uv run python scripts/scan_secrets.py +uv run pre-commit run --all-files uv run pip-audit --progress-spinner off --ignore-vuln CVE-2025-3000 ``` diff --git a/pyproject.toml b/pyproject.toml index 187bf177..a94228f6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -72,6 +72,7 @@ dev = [ "pytest>=8.3", "ruff>=0.9.0", "pip-audit>=2.7.3", + "pre-commit>=4.0", ] [tool.setuptools] diff --git a/scripts/scan_secrets.py b/scripts/scan_secrets.py deleted file mode 100644 index 5cdb21ac..00000000 --- a/scripts/scan_secrets.py +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env python3 -from __future__ import annotations - -import re -import subprocess -import sys -from pathlib import Path - - -SECRET_PATTERNS = [ - re.compile(r"-----BEGIN [A-Z ]*PRIVATE KEY-----"), - re.compile(r"\bpassword['\"]?\s*:\s*['\"](?!CHANGE_ME|change-me)[^'\"]{12,}['\"]"), - re.compile(r"\b[A-Z0-9_]*TOKEN\s*=\s*['\"]?(?!change-me|CHANGE_ME|<|\$|$)[^\s'\"]+"), - re.compile(r"\b[A-Z0-9_]*API_KEY\s*=\s*['\"]?(?!change-me|CHANGE_ME|<|\$|$)[^\s'\"]+"), -] - -SECRET_PATH_PATTERNS = [ - re.compile(r"(^|/).*\.key$"), -] - -SKIP_SUFFIXES = {".png", ".jpg", ".jpeg", ".gif", ".zip", ".gz", ".sif", ".so", ".a"} - - -def main() -> int: - files = subprocess.check_output(["git", "ls-files"], text=True).splitlines() - findings: list[str] = [] - for raw_path in files: - for pattern in SECRET_PATH_PATTERNS: - if pattern.search(raw_path): - findings.append(f"{raw_path}: tracked generated secret material") - path = Path(raw_path) - if path.suffix.lower() in SKIP_SUFFIXES: - continue - try: - text = path.read_text(encoding="utf-8") - except FileNotFoundError: - continue - except UnicodeDecodeError: - continue - for pattern in SECRET_PATTERNS: - for match in pattern.finditer(text): - line = text.count("\n", 0, match.start()) + 1 - findings.append(f"{raw_path}:{line}: {pattern.pattern}") - - if findings: - print("Potential secrets found in tracked files:", file=sys.stderr) - print("\n".join(findings), file=sys.stderr) - return 1 - print("No tracked-file secrets found.") - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) From 07b012bec925f4f096db9238e483d6c35c8bb9d6 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 20:40:30 +0200 Subject: [PATCH 41/64] fix(ci): sync lockfile for pre-commit dep; gitleaks replaces scan_secrets uv.lock regenerated to include pre-commit (was out of sync after adding it to dev deps -> uv sync --frozen / uv lock --check failed in ~13s). CI secret-scan step now runs the gitleaks pre-commit hook instead of the removed scan_secrets.py. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/ci.yml | 2 +- uv.lock | 296 +++++++++++---------------------------- 2 files changed, 84 insertions(+), 214 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b2af2fc5..7fab42bd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,7 +65,7 @@ jobs: uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-finetune --help - name: Secret scan - run: uv run python scripts/scan_secrets.py + run: uv run pre-commit run gitleaks --all-files - name: Dependency audit # vLLM 0.23 pins torch 2.11.0; CVE-2025-3000 has no fixed version listed. diff --git a/uv.lock b/uv.lock index 7b6661d9..e0c71dc3 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = "==3.11.*" resolution-markers = [ "sys_platform == 'darwin'", @@ -57,17 +57,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/26/dd/bf526e6f0a1120dd6f2df2e97bacfe4d358f13d17a0ff5847301a1375a51/aiohttp-3.14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:aa00140699487bd435fde4342d85c94cb256b7cd3a5b9c3396c67f19922afda2", size = 765225, upload-time = "2026-06-07T21:06:07.957Z" }, { url = "https://files.pythonhosted.org/packages/8f/e1/a2872aa55495a70f61310d411541c6ee23812d9a884e000c716e1bc3edbf/aiohttp-3.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c1af67559445498b502030c35c59db59966f47041ca9de5b4e707f86bd10b5f", size = 518743, upload-time = "2026-06-07T21:06:09.749Z" }, { url = "https://files.pythonhosted.org/packages/5b/e7/c60c7b209e509cc787de3cea0550a518538cfc08003e1c1e14c1c63fff71/aiohttp-3.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d44ec478e713ee7f29b439f7eb8dc2b9d4079e11ae114d2c2ac3d5daf30516c8", size = 514139, upload-time = "2026-06-07T21:06:11.26Z" }, - { url = "https://files.pythonhosted.org/packages/5b/8d/614ace2f579702c9840ab1e1447fd8509e35b0b904f7196418fa2f57b25d/aiohttp-3.14.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d3b1a184a9a8f548a6b73f1e26b96b052193e4b3175ed7342aaf1151a1f00a04", size = 1784088, upload-time = "2026-06-07T21:06:12.887Z" }, - { url = "https://files.pythonhosted.org/packages/49/e0/726e90f99542bf292f81a96a12cc4847deb86f3ccf62c6f4014a201f4d33/aiohttp-3.14.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5f2504bc0322437c9a1ff6d3333ca56c7477b727c995f036b976ae17b98372c8", size = 1737835, upload-time = "2026-06-07T21:06:14.564Z" }, - { url = "https://files.pythonhosted.org/packages/0b/4b/d176d5c4db9d33dacf0543102ea59503bc1d528af4cfd0b719949ca49389/aiohttp-3.14.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73f05ea02013e02512c3bf42714f1208c57168c779cc6fe23516e4543089d0a6", size = 1842801, upload-time = "2026-06-07T21:06:16.228Z" }, - { url = "https://files.pythonhosted.org/packages/dc/d6/5a99b563690ea0cbed912ae94a2ce33993a5709a651a3a4fe761e7dd973a/aiohttp-3.14.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:797457503c2d426bee06eef808d07b31ede30b65e054444e7de64cad0061b7af", size = 1929992, upload-time = "2026-06-07T21:06:17.947Z" }, { url = "https://files.pythonhosted.org/packages/76/7f/a987b14a3859094b3cea3f4825219c3e5536242564af6e3f9c2f6c994eb2/aiohttp-3.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b821a1f7dedf7e37450654e620038ac3b2e81e8fa6ea269337e97101978ec730", size = 1786989, upload-time = "2026-06-07T21:06:19.677Z" }, - { url = "https://files.pythonhosted.org/packages/f1/1a/420e5c85a3e73349372ed22ce0b6af86bfa6ce16a4b20a64a2e94608c781/aiohttp-3.14.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4cd96b5ba05d67ed0cf00b5b405c8cd99586d8e3481e8ee0a831057591af7621", size = 1640129, upload-time = "2026-06-07T21:06:22.558Z" }, - { url = "https://files.pythonhosted.org/packages/a7/80/18a592ed3be0a402cc03670bd72ee1f8563ddbe1d8d5542dbf868f274136/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d459b98a932296c6f0e94f87511a0b1b90a8a02c30a50e60a297619cd5a58ee", size = 1756576, upload-time = "2026-06-07T21:06:24.8Z" }, - { url = "https://files.pythonhosted.org/packages/ec/0b/8b3d5713373858ff71a617daf6e3b0e81ad63e79d09a3cf2f6b6b983939c/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:764457a7be60825fb770a644852ff717bcbb5042f189f2bd16df61a81b3f6573", size = 1754668, upload-time = "2026-06-07T21:06:26.528Z" }, - { url = "https://files.pythonhosted.org/packages/9f/49/fd564575cf225821d7ba5a117cb8bc27213d8a7e1811162afb43ae077039/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f7a16ef45b081454ef844502d87a848876c490c4cb5c650c230f6ec79ed2c1e7", size = 1817019, upload-time = "2026-06-07T21:06:28.297Z" }, - { url = "https://files.pythonhosted.org/packages/ed/1b/e850c9ae6fc91356552ae668bb6c51e93fa29c8aef13398a10b56678557f/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2fbc3ed048b3475b9f0cbcb9978e9d2d3511acd91ead203af26ed9f0056004cf", size = 1631638, upload-time = "2026-06-07T21:06:30.242Z" }, - { url = "https://files.pythonhosted.org/packages/eb/94/3c337ba72451a89806ace6f75bddc92bafc5b8d53d90115a512858024b63/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bedb0cd073cc2dc035e30aeb99444389d3cd2113afe4ef9fcd23d439f5bade85", size = 1835660, upload-time = "2026-06-07T21:06:31.943Z" }, { url = "https://files.pythonhosted.org/packages/2b/9c/9c18cf367a0498212d9ba7daf990b504a5e8ae064cda4b504e2647c89c03/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b6feea921016eb3d4e04d65fc4e9ca402d1a3801f562aef94989f54694917af3", size = 1775698, upload-time = "2026-06-07T21:06:33.72Z" }, ] @@ -189,9 +179,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/75/aa/abcd75e9600987a0bc6cfe9b6b2ff3f0e2cb08c170addc6e76035b5c4cb3/blake3-1.0.8.tar.gz", hash = "sha256:513cc7f0f5a7c035812604c2c852a0c1468311345573de647e310aca4ab165ba", size = 117308, upload-time = "2025-10-14T06:47:48.83Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/33/9d342a2bf5817f006bbe947335e5d387327541ea47590854947befd01251/blake3-1.0.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:58ce8d45a5bb5326482de72ea1969a378634236186a970fef63058a5b7b8b435", size = 374859, upload-time = "2025-10-14T06:45:35.262Z" }, - { url = "https://files.pythonhosted.org/packages/a5/67/167a65a4c431715407d07b1b8b1367698a3ad88e7260edb85f0c5293f08a/blake3-1.0.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b5573b052777142b2cecc453d022c3f21aa4aba75011258410bb98f41c1a727", size = 507519, upload-time = "2025-10-14T06:45:37.814Z" }, - { url = "https://files.pythonhosted.org/packages/32/e2/0886e192d634b264c613b0fbf380745b39992b424a0effc00ef08783644e/blake3-1.0.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe1b02ab49bfd969ef50b9f17482a2011c77536654af21807ba5c2674e0bb2a0", size = 393645, upload-time = "2025-10-14T06:45:39.146Z" }, { url = "https://files.pythonhosted.org/packages/fc/3b/7fb2fe615448caaa5f6632b2c7551117b38ccac747a3a5769181e9751641/blake3-1.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7780666dc6be809b49442d6d5ce06fdbe33024a87560b58471103ec17644682", size = 387640, upload-time = "2025-10-14T06:45:40.546Z" }, { url = "https://files.pythonhosted.org/packages/7e/75/0252be37620699b79dbaa799c9b402d63142a131d16731df4ef09d135dd7/blake3-1.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c63ece266a43014cf29e772a82857cd8e90315ae3ed53e3c5204851596edd5f2", size = 554463, upload-time = "2025-10-14T06:45:43.22Z" }, ] @@ -260,12 +247,19 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, - { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, ] +[[package]] +name = "cfgv" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, +] + [[package]] name = "charset-normalizer" version = "3.4.7" @@ -273,17 +267,7 @@ source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705, upload-time = "2026-04-02T09:26:02.191Z" }, - { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419, upload-time = "2026-04-02T09:26:03.583Z" }, - { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901, upload-time = "2026-04-02T09:26:04.738Z" }, - { url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", size = 222742, upload-time = "2026-04-02T09:26:06.36Z" }, { url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", size = 214061, upload-time = "2026-04-02T09:26:08.347Z" }, - { url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", size = 199239, upload-time = "2026-04-02T09:26:09.823Z" }, - { url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", size = 210173, upload-time = "2026-04-02T09:26:10.953Z" }, - { url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", size = 209841, upload-time = "2026-04-02T09:26:12.142Z" }, - { url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", size = 200304, upload-time = "2026-04-02T09:26:13.711Z" }, - { url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", size = 229455, upload-time = "2026-04-02T09:26:14.941Z" }, - { url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", size = 210036, upload-time = "2026-04-02T09:26:16.478Z" }, - { url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", size = 224739, upload-time = "2026-04-02T09:26:17.751Z" }, { url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", size = 216277, upload-time = "2026-04-02T09:26:18.981Z" }, { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, ] @@ -331,17 +315,11 @@ dependencies = [ sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e6/8b/43011f7ebe515a8aa20d61f290a326cd890c2e738e16e59eaff8d9c3a412/cryptography-49.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e959b578856a3924bc0cbb710fc12c387b9412a951389f3ca61704a9e25f325", size = 4716422, upload-time = "2026-06-12T20:01:48.566Z" }, - { url = "https://files.pythonhosted.org/packages/62/99/a2c95cf8293f07491e9e27c20cc4dcd18176d944e674679adeb1d0173fd6/cryptography-49.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2eda353d8a27bcbcaa4cbed18994a74ab4d19a2ca897db188ea269ab9b71419b", size = 5309779, upload-time = "2026-06-12T20:02:08.987Z" }, { url = "https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6", size = 4749683, upload-time = "2026-06-12T20:02:03.335Z" }, - { url = "https://files.pythonhosted.org/packages/a3/5b/c5246635d5fd3b64e0d45ae10e99fd32fe9676a79915ccfe5a61ba9af1a5/cryptography-49.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:0b82e28ee398a386f0807bba7884d30f25218855690f45115831bcce5d90822c", size = 4337874, upload-time = "2026-06-12T20:02:54.323Z" }, - { url = "https://files.pythonhosted.org/packages/c4/b6/d7696e4e890d6ae1469935164c9e5215c557671cb78d6e3f458ccceaa632/cryptography-49.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:d0527ce944105f257f605a827d6ebead966c752038b6e8656abb9c5edee6fc68", size = 5265844, upload-time = "2026-06-12T20:01:24.09Z" }, { url = "https://files.pythonhosted.org/packages/a9/3c/f3ad17eecc1a57b0ba236dc01f90e783c51f4a2f35f64777cc4f47a184b2/cryptography-49.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:cbc77da8c523d5abd028635ba850a6966fcee2c82e2bf65a41d1d8afe0f98be9", size = 4749290, upload-time = "2026-06-12T20:01:30.848Z" }, { url = "https://files.pythonhosted.org/packages/71/fd/577302e213a1be9468f92d1afef66fcf1ef83d516819d9992ca547f592bd/cryptography-49.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66ec79c3904820572d7e987abdf304281f141d37ad9a489b8e97066e7b9b6459", size = 4980804, upload-time = "2026-06-12T20:01:42.853Z" }, { url = "https://files.pythonhosted.org/packages/2c/99/2d13299eb3dd27b02dcfaafcc91d6b5cb3329f7cbd6d8f51921acd566c1a/cryptography-49.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:35b151772baff2c74cba7fa290ceaff4c3b11c0c881eb93eb5dbc05a7cfbba18", size = 4700968, upload-time = "2026-06-12T20:02:45.383Z" }, - { url = "https://files.pythonhosted.org/packages/24/01/186c825898477d77e2324d5360fefe622ff1d8d1963ec0554e2cada8ec77/cryptography-49.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9e82dcc8e56052715fb18b2429e3bca4823b1629136a2084fc45a9a5cecb9b64", size = 5298863, upload-time = "2026-06-12T20:02:24.579Z" }, { url = "https://files.pythonhosted.org/packages/b8/7b/62cbbab75d0659865bf0273790031544a0b16c8072d258f9428dcd8190dc/cryptography-49.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6f2debedf9ca60cf1d5bd466475638af5130f89965605cd818484d19987d3a21", size = 4735983, upload-time = "2026-06-12T20:01:50.14Z" }, - { url = "https://files.pythonhosted.org/packages/6c/72/3e798c064bc39e471008075d0f9bc9daf77a80879c092e4a8e170c585ed4/cryptography-49.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:8c25ceb16df5b9435f3f6a9829204985b0e0cbee3b48aacd432c7d2c850b44d9", size = 4334173, upload-time = "2026-06-12T20:01:44.743Z" }, - { url = "https://files.pythonhosted.org/packages/67/d0/a5fcd3515f0bae49a7b6d0413cc1bdccdcc1fc0047037a0d480642cdc5d6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:6fc361c34fb6aac015ce19435876635e5c6d21db31998b0920f675f131e043b8", size = 5254338, upload-time = "2026-06-12T20:02:22.737Z" }, { url = "https://files.pythonhosted.org/packages/a0/84/84fe36f19caf857d61cb7fc9c63035a47ffabd84ea12d1d393148efa3615/cryptography-49.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2400ef9c9e2299a25614eb1dea3db54a69b1349efd043bfac9c67630d136df36", size = 4735650, upload-time = "2026-06-12T20:02:41.389Z" }, { url = "https://files.pythonhosted.org/packages/93/77/8df9eb486495979bccecd1062e2eaf435250e84437040295b57d09048b0b/cryptography-49.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:42b0684e0e40cf26122427802486f6d93aea593612603a94fbf260c7eb1e9c1b", size = 4967968, upload-time = "2026-06-12T20:02:12.524Z" }, { url = "https://files.pythonhosted.org/packages/d7/70/2ba3769dd0ae167e2f33dfa9592d45db6ff9a61d62ca1a5b3d1bdd09068f/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b39efa323140595abd3ecca8529d321ae50f55f3aa3ba9cc81ea56a6011953d5", size = 4715584, upload-time = "2026-06-12T20:01:27.495Z" }, @@ -556,6 +534,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550, upload-time = "2023-08-31T06:11:58.822Z" }, ] +[[package]] +name = "distlib" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/02/bd72be9134d25ed783ecbbc38a539ffaefbf90c78418c7fb7229600dbac7/distlib-0.4.3.tar.gz", hash = "sha256:f152097224a0ae24be5a0f6bae1b9359af82133bce63f98a95f86cae1aede9ed", size = 615141, upload-time = "2026-06-12T08:04:52.847Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl", hash = "sha256:4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b", size = 470628, upload-time = "2026-06-12T08:04:50.506Z" }, +] + [[package]] name = "distro" version = "1.9.0" @@ -680,19 +667,9 @@ version = "0.11.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/03/0f/0aeb3fc50046617702acc0078b277b58367fd62eb727b9ec733ae0e8bbcc/fastar-0.11.0.tar.gz", hash = "sha256:aa7f100f7313c03fdb20f1385927ba95671071ba308ad0c1763fef295e1895ce", size = 70238, upload-time = "2026-04-13T17:11:17.143Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/cc/5491e2b677bb841f768e3aba052d0344338a5c78aa5d4c18b443831a8e8d/fastar-0.11.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5b83c1f61f7017d6e1498568038f8745440cfc16ca2f697ec81bac83050108f6", size = 759232, upload-time = "2026-04-13T17:08:08.864Z" }, - { url = "https://files.pythonhosted.org/packages/4e/b7/643630bdbd179e41e9fae31c03b4cf6061dbf4d6fbbae8425d16eb12545d/fastar-0.11.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db73a9b765a516e73983b25341e7b5e0189733878279e278b2295131b0e3a21e", size = 926271, upload-time = "2026-04-13T17:08:23.68Z" }, - { url = "https://files.pythonhosted.org/packages/09/5d/37ade50003b4540e0a53ef100f6692d7ab2ac1122d5acf39920cc09a3e8b/fastar-0.11.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:625827d52eb4e8fec942e0233f125ff8010fcf6a67c0a974a8e5f4666b771e3c", size = 818634, upload-time = "2026-04-13T17:08:54.268Z" }, { url = "https://files.pythonhosted.org/packages/c3/ff/135d177de32cc1e837c99019e4643e6e79352bde49544d4ece5b5eebf56b/fastar-0.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7f5fd8fa21ec0a88296a38dc5d7fc35efd3b26d46a17b8b7c73c5563925ca15", size = 822755, upload-time = "2026-04-13T17:09:25.01Z" }, - { url = "https://files.pythonhosted.org/packages/27/cb/b835dbe76ceac7fa6105851468c259ffd06830eb9c029402e499d0ec153b/fastar-0.11.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8c15af91b8cd87ddf23ea55355ae513c1de3ab67178f26dad017c9e9c0af6096", size = 887101, upload-time = "2026-04-13T17:08:39.248Z" }, - { url = "https://files.pythonhosted.org/packages/1f/fd/776d50a0897c01dc6bfd0926772ee913436fdae91b9affaf0a0cbd09f0a1/fastar-0.11.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f2994bb8f5f8c11eb12beae1e6e77a907173c9819236b8a4c8f0573652ceccce", size = 1036696, upload-time = "2026-04-13T17:10:28.502Z" }, { url = "https://files.pythonhosted.org/packages/f8/9e/21e4701aec4a1123d4dc4d31578dc18875582b5710e4725f7ceb752a248b/fastar-0.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29c9c386dc0d5dda78845a8e6b1480d26ab861c1e0b68f42ae5735cb70ca07f1", size = 1032336, upload-time = "2026-04-13T17:11:02.364Z" }, - { url = "https://files.pythonhosted.org/packages/99/e3/74d6859e632e8fb9339a14f652fb9f800c2bd6aa53071e311c0be3fbab8b/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:878eaf15463eb572e3538af7ca3a8534e5e279cf8196db902d24e5725c4af86e", size = 761375, upload-time = "2026-04-13T17:08:20.669Z" }, - { url = "https://files.pythonhosted.org/packages/a3/e7/cc70e2be5ef8731a7525552b1c35c1448cf9eae6a62cb3a56f12c1bf27ea/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0324ed1d1ef0186e1bbd843b17807d6d837d0906899d4c99378b02c5d86bdd9c", size = 928189, upload-time = "2026-04-13T17:08:35.663Z" }, - { url = "https://files.pythonhosted.org/packages/3c/33/c9a969e78dca323547276a6fee5f4f9588f7cd5ab45acec3778c67399589/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bdf9bd863205590beaf8ef6e66f315310196632180dceaf674985d01a876cac3", size = 820864, upload-time = "2026-04-13T17:09:06.366Z" }, { url = "https://files.pythonhosted.org/packages/84/bd/6b9434b541fe55c125b5f2e017a565596a2d215aa09207e4555e4585064f/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59af8dbb683b24b90fb5b506de080faeab0a17a908e6c2a5d93a97260ed75d7b", size = 824060, upload-time = "2026-04-13T17:09:37.377Z" }, - { url = "https://files.pythonhosted.org/packages/24/8d/871d5f8cf4c6f13987119fb0a9ae8be131e34f2756c2524e9974adf33824/fastar-0.11.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:9f3df73a3c4292cfe15696cdf59cdb6c309ab59d30b34c733be13c6e32d9a264", size = 889217, upload-time = "2026-04-13T17:08:50.884Z" }, - { url = "https://files.pythonhosted.org/packages/99/94/8bbb0b13f5b6cbe2492f0b7cbba5103e6163976a3331466d010e781fa189/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:a8c7bc8ac74cb359bb546b199288c83236372d094b402e557c197e85527495cd", size = 1038492, upload-time = "2026-04-13T17:10:41.939Z" }, { url = "https://files.pythonhosted.org/packages/ec/6d/56ef943ea524784598c035ccbd42e564e937da0438ae3f55f0e76cb95571/fastar-0.11.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6a1c56957ac82408be37a3f63594bc83e0919e8760492a4475e542f9f1828778", size = 1034886, upload-time = "2026-04-13T17:11:15.617Z" }, ] @@ -768,14 +745,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, - { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, - { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, - { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, - { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, - { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, - { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, - { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, ] @@ -863,7 +832,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/b0/b5/1ff353970a87eda4c98251e34d2dfd214abd4982dc89119c9252a2a482d2/grpcio-1.81.1.tar.gz", hash = "sha256:6fa10a767143a5e82e8eaab53918af0cd8909a57a27f8cb2288b80a613ac671b", size = 13026582, upload-time = "2026-06-11T12:46:51.673Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/ea/1c2fa386b718ff493225e61cfc052ef400b4d6ffc54cbe261026432624b5/grpcio-1.81.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:d71d30f2d92f67d944631c523713934fee37292469e182ebcd2c1dd8a64ce53f", size = 6093112, upload-time = "2026-06-11T12:44:52.131Z" }, { url = "https://files.pythonhosted.org/packages/23/d6/abeda5c2b896a0b341584fe5ac411bbf72e197a9a374c355fb90965e08d2/grpcio-1.81.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a37165cc80b1a368384b383e63a4c38116a10467ae44c904d2d7468c4470ec2", size = 6842229, upload-time = "2026-06-11T12:45:04.76Z" }, { url = "https://files.pythonhosted.org/packages/f7/b2/524847365122ee509ca17bcc4e092198b700e94af7bfd5bb5e6dd9f3ee66/grpcio-1.81.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1b22c80559854b789a01fd89e8929b3798a156c0829b5282a8939f33ad4115ad", size = 7873989, upload-time = "2026-06-11T12:45:13.102Z" }, ] @@ -886,8 +854,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7a/d8/5e54cf37434759d1f4f2ba9b66077ff9d4c4e1f37b6bd7975da5c40d94ab/hf_xet-1.5.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6abd35c3221eff63836618ddfb954dcf84798603f71d8e33e3ed7b04acfdbe6e", size = 4077794, upload-time = "2026-06-08T23:02:40.656Z" }, { url = "https://files.pythonhosted.org/packages/35/94/4b2ecfbad8f8b04701a23aefb62f540b9137d058b7e1dbef16a32676f0e9/hf_xet-1.5.1-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:94e761bbd266bf4c03cee73753916062665ce8365aa40ed321f45afcb934b41e", size = 3845354, upload-time = "2026-06-08T23:02:42.702Z" }, { url = "https://files.pythonhosted.org/packages/de/cc/f99f4bc7295023d7bd9ebbfd51f75cc530ca262c1227666268b8208f4b77/hf_xet-1.5.1-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:892e3a3a3aecc12aded8b93cf4f9cd059282c7de0732f7d55026f3abdf474350", size = 4514864, upload-time = "2026-06-08T23:02:44.497Z" }, - { url = "https://files.pythonhosted.org/packages/cd/6e/21f7e5a2381278bd3b7b7a5a4d90038518bb6308a0c1daf5d9f8268bb178/hf_xet-1.5.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a93df2039190502835b1db8cd7e178b0b7b889fe9ab51299d5ced26e0dd879a4", size = 4303784, upload-time = "2026-06-08T23:02:46.203Z" }, - { url = "https://files.pythonhosted.org/packages/35/0e/f992bb6927ac1cb30ef74e62268f551f338bc32b2191f7c96a44c6f7283e/hf_xet-1.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0c97106032ef70467b4f6bc2d0ccc266d7613ee076afc56516c502f87ce1c4a6", size = 4500703, upload-time = "2026-06-08T23:02:47.628Z" }, { url = "https://files.pythonhosted.org/packages/fb/d1/90a498d05447980b977b1669246eeeeae4cfb0ea3e7a286eaba627f91bf9/hf_xet-1.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6208adb15d192b90e4c2ad2a27ed864359b2cb0f2494eb6d7c7f3699ac02e2bf", size = 4719498, upload-time = "2026-06-08T23:02:49.268Z" }, ] @@ -988,6 +954,15 @@ cu13 = [ { name = "nvidia-cuda-runtime", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] +[[package]] +name = "identify" +version = "2.6.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" }, +] + [[package]] name = "idna" version = "3.18" @@ -1044,11 +1019,7 @@ version = "0.15.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/66/b5/55f06bb281d92fb3cc86d14e1def2bd908bb77693183e7cb1f5a3c388b0c/jiter-0.15.0.tar.gz", hash = "sha256:4251acc80e2b7c9b7b8823456ea0fceeb0734dac2df7636d3c711b38476b5a76", size = 166640, upload-time = "2026-05-19T10:09:48.361Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/2a/e71dea19822e2e404e83992a08c1d6b9b617bb944f28c9c2fbd85d02c91e/jiter-0.15.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:773b6eb282ce11ee19f05f6b2d4404fa308e5bbd353b0b80a0262caad6db2cd7", size = 366214, upload-time = "2026-05-19T10:07:17.259Z" }, - { url = "https://files.pythonhosted.org/packages/c4/59/97e1fa539d124a509a00ab7f669289d1c1d236ecabf12948a18f16c91082/jiter-0.15.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2c0c44d569ce0f2850f5c926f8caeb5f245fbc84475aeb36efccc2103e6dbd", size = 459527, upload-time = "2026-05-19T10:07:18.741Z" }, - { url = "https://files.pythonhosted.org/packages/d1/7a/4a68d331aef8cf2e2393c14a3aacb635c62aa86071b0229899fb5baaa907/jiter-0.15.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:032396229564bca02440396bd327710719f724f5e7b7e9f7a8eb3faa4a2c2281", size = 375451, upload-time = "2026-05-19T10:07:20.208Z" }, { url = "https://files.pythonhosted.org/packages/7b/7e/1c445c2b6f0e30a274dc8082e0c3c7825411cce80d726bccd697c98cc8d3/jiter-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3d37768fce7f88dd2a8c6091f2325dea27d30d30d5c6e7a1c0f0af77723b708", size = 349428, upload-time = "2026-05-19T10:07:22.372Z" }, - { url = "https://files.pythonhosted.org/packages/00/94/e20d38984fc17a636371bffd2ae0f698124fdc8e75ef969cd2da6ba7cea7/jiter-0.15.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:2c9cb907439d20bd0c7d7565ca01ee52234203208433749bae5b516907526928", size = 355405, upload-time = "2026-05-19T10:07:23.916Z" }, { url = "https://files.pythonhosted.org/packages/e7/2c/5e07874e59e623a943a0acf1552a80d05b70f31b402287a8fc6d7ec634c7/jiter-0.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8020c99ec13a7db2b6f96cbe82ef4721c88b426a4892f27478044af0284615ef", size = 551016, upload-time = "2026-05-19T10:07:28.846Z" }, { url = "https://files.pythonhosted.org/packages/34/56/55d76614af37fe3f22a3347d1e410d2a15da581997cb2da499a625000bb5/jiter-0.15.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b15d3ec9b0449c40e85319bdb4caa8b77ab526e74f5532ed94bec15e2f66822c", size = 345606, upload-time = "2026-05-19T10:09:40.727Z" }, ] @@ -1134,9 +1105,7 @@ dependencies = [ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/62/a149b47dc4ccf3c569eba722b805cbba1b90566976ff1d459f20f7f00ebc/lancedb-0.25.3-cp39-abi3-macosx_10_15_x86_64.whl", hash = "sha256:1cfa4dd97b33ca8f73288aa4b1baaddc9545ce0d3c8e5d06fba8feb77f42363f", size = 38425074, upload-time = "2025-11-07T05:58:15.763Z" }, { url = "https://files.pythonhosted.org/packages/b2/94/ae3e74bb27dcca321ccf1e7a32ccab09b1062ddf54f96376221ca8610e7c/lancedb-0.25.3-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8a7bfe0cb2146f6e78e9f376673ed2f906b93dab84df97dad2ba9fa52f97e152", size = 34506539, upload-time = "2025-11-07T05:14:04.901Z" }, - { url = "https://files.pythonhosted.org/packages/6a/07/b580d0e002eaaa3d5216699fb9f19186c37861c3fa11ac3be991fa7d6d03/lancedb-0.25.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25a395d07d31da1e13e2631fd9911b15e6d4fb903d34358cea0bd450006364e3", size = 36149261, upload-time = "2025-11-07T05:23:13.002Z" }, { url = "https://files.pythonhosted.org/packages/c1/95/32ddb779a01cd0d349f391e7d5f4218d045f9848c1d757f5a8ace4c63b09/lancedb-0.25.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500beac161f73e3e6826a711efb1d24397d892d07dfdce2c9fb1da73f8de506c", size = 39145675, upload-time = "2025-11-07T05:24:40.813Z" }, - { url = "https://files.pythonhosted.org/packages/f4/33/fdaff64a111f86dbb99f3ff09136df93b441e350f4953884a9fc21c49283/lancedb-0.25.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:2d0fce4187582e48b69430d204665e164002f1b49b03e67747ca8ec2c3083481", size = 36165492, upload-time = "2025-11-07T05:27:13.394Z" }, { url = "https://files.pythonhosted.org/packages/ab/15/f0d69acc5e06892d19e09c127cd928cf20f5d2966a069e93693fc389b132/lancedb-0.25.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3035665fb8e4aaff8dff2602747cc77aeba6bc39f1a95345abc3275c97a044cb", size = 39191458, upload-time = "2025-11-07T05:24:38.047Z" }, ] @@ -1168,7 +1137,6 @@ source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/da/91/6bc8bb503dc259e46d253b5424385a54fe06c38a4c7a12befe69a3c2455a/llguidance-1.7.6.tar.gz", hash = "sha256:db7febbe412ed2015501904646750071d7e00e6df7f85c4b956ad4f206fd2df7", size = 1156574, upload-time = "2026-06-03T20:13:25.316Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/1a/64/d74336f22242ef94356a456057d4ff1be7c1bc9c7dbc867171c6982a5512/llguidance-1.7.6-cp39-abi3-manylinux_2_31_x86_64.whl", hash = "sha256:ceec951d29a74309984e3be0fe7f5f56c1362434cd937abd517b259a60908b1e", size = 3074809, upload-time = "2026-06-03T20:13:15.498Z" }, - { url = "https://files.pythonhosted.org/packages/47/e6/6b61cecced5233739bc85e463d68d67d4b4c29fb6f91bd12e6b6a65647e3/llguidance-1.7.6-cp39-abi3-manylinux_2_39_riscv64.whl", hash = "sha256:e9f68206e0f3f89aceabb90aa1f8ed570db22fb7cb1fd9ebf96fa7727a65af55", size = 3603845, upload-time = "2026-06-03T20:13:19.473Z" }, ] [[package]] @@ -1224,11 +1192,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95 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" }, ] @@ -1336,11 +1300,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/31/f9/c0a1c127f9049db91 wheels = [ { url = "https://files.pythonhosted.org/packages/f4/6b/e9b1cdc042c4458801d2545ed782a95f3d6ba8e270cce8745b8603c7f748/msgpack-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:29a3f6e9667868429d8240dfd063ea5ffdc1321c13d783aa23827a38de0dcb22", size = 82812, upload-time = "2026-06-18T16:12:45.022Z" }, { url = "https://files.pythonhosted.org/packages/0c/3a/dd518a1bf78ed1e9ad8afe57307c079a00eafe4b3068932a27ca1ea56b4f/msgpack-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aded5bdf32609dc7987a49bbbd15a8ef096193f96dd8bbeb791de729e650acf5", size = 82739, upload-time = "2026-06-18T16:12:46.025Z" }, - { url = "https://files.pythonhosted.org/packages/70/e0/7ba9e1542bf0771a27b8b37c1316e3f95ae9d748fd765284655c476ad4ef/msgpack-1.2.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:146ee4e9ce80b365c6d4c47073da9da7bcec473e58194ceee5dd7620ace77e06", size = 414233, upload-time = "2026-06-18T16:12:47.029Z" }, { url = "https://files.pythonhosted.org/packages/03/8d/671d81534ea0e2b0e8a121be100020da09eb78861fe3aa8f3ef7dcd3bed1/msgpack-1.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a28d076ca7c82b9c8728ad90b7147489449557038bed50e4241eb832395169b4", size = 423843, upload-time = "2026-06-18T16:12:48.19Z" }, - { url = "https://files.pythonhosted.org/packages/d2/b6/e5c737515ed1f166664b87601b532f58cbb73d8aa6a90b99f7c2c5037e8e/msgpack-1.2.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7d31c0ac0c640f877804c67cb2bc9f4e23dc2db97e96c2e67fa27d38283b41f8", size = 390772, upload-time = "2026-06-18T16:12:49.624Z" }, - { url = "https://files.pythonhosted.org/packages/a8/46/62ed8c2e87d7021eab19921594d961ef3aa3794eec76c716dc30f3bfd433/msgpack-1.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8ff92d7feeaf5bc26c51495b69e2f99ed97ab79346fb6555f44be7dd2ac6503b", size = 409559, upload-time = "2026-06-18T16:12:50.936Z" }, - { url = "https://files.pythonhosted.org/packages/70/ff/59aa3887b860bbf43532835e192b1c388a17590d6068ae4f8b2bc74c906e/msgpack-1.2.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:779197a6513bab3c3632265e3d0f7cb3227e62510841a6f34f1eaa37efbb345e", size = 387838, upload-time = "2026-06-18T16:12:52.161Z" }, { url = "https://files.pythonhosted.org/packages/09/11/f8563e471093420cf6478cb3271a0175d8402b82d879783d4035d2d03360/msgpack-1.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:67f6dd22fa72a93752643f07889796d62739a13415ee630169a8ce764f86cf9f", size = 421732, upload-time = "2026-06-18T16:12:53.556Z" }, ] @@ -1363,17 +1323,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ce/f1/a90635c4f88fb913fbf4ce660b83b7445b7a02615bda034b2f8eb38fd597/multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d", size = 76626, upload-time = "2026-01-26T02:43:26.485Z" }, { url = "https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e", size = 44706, upload-time = "2026-01-26T02:43:27.607Z" }, { url = "https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855", size = 44356, upload-time = "2026-01-26T02:43:28.661Z" }, - { url = "https://files.pythonhosted.org/packages/fd/d2/0a36c8473f0cbaeadd5db6c8b72d15bbceeec275807772bfcd059bef487d/multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3", size = 244355, upload-time = "2026-01-26T02:43:31.165Z" }, - { url = "https://files.pythonhosted.org/packages/5d/16/8c65be997fd7dd311b7d39c7b6e71a0cb449bad093761481eccbbe4b42a2/multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e", size = 246433, upload-time = "2026-01-26T02:43:32.581Z" }, - { url = "https://files.pythonhosted.org/packages/01/fb/4dbd7e848d2799c6a026ec88ad39cf2b8416aa167fcc903baa55ecaa045c/multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a", size = 225376, upload-time = "2026-01-26T02:43:34.417Z" }, - { url = "https://files.pythonhosted.org/packages/b6/8a/4a3a6341eac3830f6053062f8fbc9a9e54407c80755b3f05bc427295c2d0/multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8", size = 257365, upload-time = "2026-01-26T02:43:35.741Z" }, - { url = "https://files.pythonhosted.org/packages/f7/a2/dd575a69c1aa206e12d27d0770cdf9b92434b48a9ef0cd0d1afdecaa93c4/multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0", size = 254747, upload-time = "2026-01-26T02:43:36.976Z" }, { url = "https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144", size = 246293, upload-time = "2026-01-26T02:43:38.258Z" }, - { url = "https://files.pythonhosted.org/packages/5a/a4/23466059dc3854763423d0ad6c0f3683a379d97673b1b89ec33826e46728/multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49", size = 242962, upload-time = "2026-01-26T02:43:40.034Z" }, - { url = "https://files.pythonhosted.org/packages/1f/67/51dd754a3524d685958001e8fa20a0f5f90a6a856e0a9dcabff69be3dbb7/multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71", size = 237360, upload-time = "2026-01-26T02:43:41.752Z" }, - { url = "https://files.pythonhosted.org/packages/64/3f/036dfc8c174934d4b55d86ff4f978e558b0e585cef70cfc1ad01adc6bf18/multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3", size = 245940, upload-time = "2026-01-26T02:43:43.042Z" }, - { url = "https://files.pythonhosted.org/packages/3d/20/6214d3c105928ebc353a1c644a6ef1408bc5794fcb4f170bb524a3c16311/multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c", size = 253502, upload-time = "2026-01-26T02:43:44.371Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e2/c653bc4ae1be70a0f836b82172d643fcf1dade042ba2676ab08ec08bff0f/multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0", size = 247065, upload-time = "2026-01-26T02:43:45.745Z" }, { url = "https://files.pythonhosted.org/packages/c8/11/a854b4154cd3bd8b1fd375e8a8ca9d73be37610c361543d56f764109509b/multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa", size = 241870, upload-time = "2026-01-26T02:43:47.054Z" }, { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, ] @@ -1408,18 +1358,19 @@ version = "1.13.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/56/c7/ba22748fb59f7f896b609cd3e568d28a0a367a6d953c24c461fe04fc4433/ninja-1.13.0-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:60056592cf495e9a6a4bea3cd178903056ecb0943e4de45a2ea825edb6dc8d3e", size = 202736, upload-time = "2025-08-11T15:09:55.745Z" }, - { url = "https://files.pythonhosted.org/packages/79/22/d1de07632b78ac8e6b785f41fa9aad7a978ec8c0a1bf15772def36d77aac/ninja-1.13.0-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1c97223cdda0417f414bf864cfb73b72d8777e57ebb279c5f6de368de0062988", size = 179034, upload-time = "2025-08-11T15:09:57.394Z" }, { url = "https://files.pythonhosted.org/packages/ed/de/0e6edf44d6a04dabd0318a519125ed0415ce437ad5a1ec9b9be03d9048cf/ninja-1.13.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa", size = 180716, upload-time = "2025-08-11T15:09:58.696Z" }, - { url = "https://files.pythonhosted.org/packages/54/28/938b562f9057aaa4d6bfbeaa05e81899a47aebb3ba6751e36c027a7f5ff7/ninja-1.13.0-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4be9c1b082d244b1ad7ef41eb8ab088aae8c109a9f3f0b3e56a252d3e00f42c1", size = 146843, upload-time = "2025-08-11T15:10:00.046Z" }, - { url = "https://files.pythonhosted.org/packages/2a/fb/d06a3838de4f8ab866e44ee52a797b5491df823901c54943b2adb0389fbb/ninja-1.13.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:6739d3352073341ad284246f81339a384eec091d9851a886dfa5b00a6d48b3e2", size = 154402, upload-time = "2025-08-11T15:10:01.657Z" }, - { url = "https://files.pythonhosted.org/packages/9d/70/c99d0c2c809f992752453cce312848abb3b1607e56d4cd1b6cded317351a/ninja-1.13.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:aa45b4037b313c2f698bc13306239b8b93b4680eb47e287773156ac9e9304714", size = 472501, upload-time = "2025-08-11T15:10:04.735Z" }, - { url = "https://files.pythonhosted.org/packages/8c/45/9151bba2c8d0ae2b6260f71696330590de5850e5574b7b5694dce6023e20/ninja-1.13.0-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:3d7d7779d12cb20c6d054c61b702139fd23a7a964ec8f2c823f1ab1b084150db", size = 642420, upload-time = "2025-08-11T15:10:08.35Z" }, - { url = "https://files.pythonhosted.org/packages/3c/fb/95752eb635bb8ad27d101d71bef15bc63049de23f299e312878fc21cb2da/ninja-1.13.0-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:d741a5e6754e0bda767e3274a0f0deeef4807f1fec6c0d7921a0244018926ae5", size = 585106, upload-time = "2025-08-11T15:10:09.818Z" }, - { url = "https://files.pythonhosted.org/packages/c1/31/aa56a1a286703800c0cbe39fb4e82811c277772dc8cd084f442dd8e2938a/ninja-1.13.0-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:e8bad11f8a00b64137e9b315b137d8bb6cbf3086fbdc43bf1f90fd33324d2e96", size = 707138, upload-time = "2025-08-11T15:10:11.366Z" }, { url = "https://files.pythonhosted.org/packages/34/6f/5f5a54a1041af945130abdb2b8529cbef0cdcbbf9bcf3f4195378319d29a/ninja-1.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200", size = 581758, upload-time = "2025-08-11T15:10:13.295Z" }, ] +[[package]] +name = "nodeenv" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, +] + [[package]] name = "numba" version = "0.65.0" @@ -1723,7 +1674,6 @@ dependencies = [ ] wheels = [ { url = "https://files.pythonhosted.org/packages/d4/e4/5353d7e09ced4a8f473f843223fc75d726b2b5519dcefc12f22a6c92852d/onnxruntime-1.27.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:8ba14a38c570087f3cdb8cfba33f7a38a1e826c1e5b29e17c28ceda0cc910016", size = 18416484, upload-time = "2026-06-15T22:43:43.894Z" }, - { url = "https://files.pythonhosted.org/packages/ed/1f/a2117aa3f144fce88774efa37440d0ca72d0c9144854dfc0961f2b04c6fc/onnxruntime-1.27.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2eb083321af8a236a84c7c140a7f4cecbfa2a987a18c07c78db471c20cd390ef", size = 16419330, upload-time = "2026-06-15T22:42:37.58Z" }, { url = "https://files.pythonhosted.org/packages/e0/cd/74bb804170ceb622fda9111df31a07b3024f7491472256d3a90b5391a4d2/onnxruntime-1.27.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e4f7b0e90d2d212e2c2deaa6c8291616183ab815d3ec558ea12d3ac8b26d36f4", size = 18636930, upload-time = "2026-06-15T22:43:01.584Z" }, ] @@ -1755,10 +1705,7 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/3e/92/2d038d096f29179c7c9571b431f9e739f87a487121901725e23fe338dd9d/openai_harmony-0.0.8.tar.gz", hash = "sha256:6e43f98e6c242fa2de6f8ea12eab24af63fa2ed3e89c06341fb9d92632c5cbdf", size = 284777, upload-time = "2025-11-05T19:07:06.727Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/4c/b553c9651662d6ce102ca7f3629d268b23df1abe5841e24bed81e8a8e949/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5cfcfd963b50a41fc656c84d3440ca6eecdccd6c552158ce790b8f2e33dfb5a9", size = 2704083, upload-time = "2025-11-05T19:06:50.205Z" }, - { url = "https://files.pythonhosted.org/packages/11/3c/33f3374e4624e0e776f6b13b73c45a7ead7f9c4529f8369ed5bfcaa30cac/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4d5cfa168e74d08f8ba6d58a7e49bc7daef4d58951ec69b66b0d56f4927a68d", size = 3427031, upload-time = "2025-11-05T19:06:51.829Z" }, { url = "https://files.pythonhosted.org/packages/25/3f/1a192b93bb47c6b44cd98ba8cc1d3d2a9308f1bb700c3017e6352da11bda/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c007d277218a50db8839e599ed78e0fffe5130f614c3f6d93ae257f282071a29", size = 2953260, upload-time = "2025-11-05T19:06:55.406Z" }, - { url = "https://files.pythonhosted.org/packages/1d/10/4327dbf87f75ae813405fd9a9b4a5cde63d506ffed0a096a440a4cabd89c/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:cbaa3bda75ef0d8836e1f8cc84af62f971b1d756d740efc95c38c3e04c0bfde2", size = 2932931, upload-time = "2025-11-05T19:07:01.437Z" }, { url = "https://files.pythonhosted.org/packages/60/c3/3d1e01e2dba517a91760e4a03e4f20ffc75039a6fe584d0e6f9b5c78fd15/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:007b0476a1f331f8130783f901f1da6f5a7057af1a4891f1b6a31dec364189b5", size = 3205080, upload-time = "2025-11-05T19:07:05.078Z" }, ] @@ -1950,9 +1897,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca wheels = [ { url = "https://files.pythonhosted.org/packages/a8/44/d9502bf0ed197ba9bf1103c9867d5904ddcaf869e52329787fc54ed70cc8/pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", size = 12602222, upload-time = "2024-09-20T13:08:56.254Z" }, { url = "https://files.pythonhosted.org/packages/52/11/9eac327a38834f162b8250aab32a6781339c69afe7574368fffe46387edf/pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", size = 11321274, upload-time = "2024-09-20T13:08:58.645Z" }, - { url = "https://files.pythonhosted.org/packages/45/fb/c4beeb084718598ba19aa9f5abbc8aed8b42f90930da861fcb1acdb54c3a/pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", size = 15579836, upload-time = "2024-09-20T19:01:57.571Z" }, { url = "https://files.pythonhosted.org/packages/cd/5f/4dba1d39bb9c38d574a9a22548c540177f78ea47b32f99c0ff2ec499fac5/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", size = 13058505, upload-time = "2024-09-20T13:09:01.501Z" }, - { url = "https://files.pythonhosted.org/packages/b9/57/708135b90391995361636634df1f1130d03ba456e95bcf576fada459115a/pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", size = 16744420, upload-time = "2024-09-20T19:02:00.678Z" }, { url = "https://files.pythonhosted.org/packages/86/4a/03ed6b7ee323cf30404265c284cee9c65c56a212e0a08d9ee06984ba2240/pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", size = 14440457, upload-time = "2024-09-20T13:09:04.105Z" }, ] @@ -2073,6 +2018,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] +[[package]] +name = "pre-commit" +version = "4.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "identify", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "nodeenv", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "virtualenv", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525, upload-time = "2026-04-21T20:31:41.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472, upload-time = "2026-04-21T20:31:40.092Z" }, +] + [[package]] name = "prometheus-client" version = "0.25.0" @@ -2104,16 +2065,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e7/f1/8a8cc1c2c7e7934ab77e0163414f736fadbc0f5e8dd9673b952355ac175b/propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78", size = 90744, upload-time = "2026-05-08T20:59:45.799Z" }, { url = "https://files.pythonhosted.org/packages/c2/f4/651b1225e976bd1a2ba5cfba0c29d096581c2636b437e3a9a7ab6276270a/propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959", size = 52033, upload-time = "2026-05-08T20:59:47.408Z" }, { url = "https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7", size = 52754, upload-time = "2026-05-08T20:59:49.202Z" }, - { url = "https://files.pythonhosted.org/packages/7d/fe/b3551b41bbc2f5b5bb088fc6920567cd43101253e68fbaa261339eb96fe1/propcache-0.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511", size = 57573, upload-time = "2026-05-08T20:59:50.778Z" }, - { url = "https://files.pythonhosted.org/packages/83/27/ab851ebd1b7172e3e161f5f8d39e315d54a91bea246f01f4d872d3376aef/propcache-0.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660", size = 60645, upload-time = "2026-05-08T20:59:52.227Z" }, - { url = "https://files.pythonhosted.org/packages/95/7d/466b3d18022e9897cbda9c735c493c5bd747d7a4c6f5ea1480b4cec434b6/propcache-0.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66", size = 61563, upload-time = "2026-05-08T20:59:53.866Z" }, { url = "https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b", size = 58888, upload-time = "2026-05-08T20:59:55.457Z" }, - { url = "https://files.pythonhosted.org/packages/0a/67/bb777ffd907633563bf35fd859c4ce97b0512c32f4633cf5d1eb7c33512b/propcache-0.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67", size = 59253, upload-time = "2026-05-08T20:59:57.075Z" }, - { url = "https://files.pythonhosted.org/packages/b9/42/64f8d90b73fd9cdc1499b48057ff6d9cd2a98a25734c9bb62ecf07e87061/propcache-0.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f", size = 57558, upload-time = "2026-05-08T20:59:58.602Z" }, - { url = "https://files.pythonhosted.org/packages/eb/02/dba5bc03c9041f2092ea55a449caf5dfe68352c6654511b29ba0654ddb69/propcache-0.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c", size = 55007, upload-time = "2026-05-08T20:59:59.837Z" }, - { url = "https://files.pythonhosted.org/packages/14/c0/43f649c7aa2a77a3b100d84e9dea3a483120ecb608bfe36ce49eaff517fe/propcache-0.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0", size = 60355, upload-time = "2026-05-08T21:00:01.144Z" }, - { url = "https://files.pythonhosted.org/packages/83/c0/435dafd27f1cb4a495381dae60e25883ccfe4020bb72818e8184c1678092/propcache-0.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6", size = 59057, upload-time = "2026-05-08T21:00:02.401Z" }, - { url = "https://files.pythonhosted.org/packages/53/ae/6e292df9135d659944e96cb3389258e4a663e5b2b5f6c217ef0ddc8d2f73/propcache-0.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27", size = 61938, upload-time = "2026-05-08T21:00:03.638Z" }, { url = "https://files.pythonhosted.org/packages/0b/42/314ebc50d8159055411fd6b0bda322ff510e4b1f7d2e4927940ad0f6af20/propcache-0.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f", size = 59731, upload-time = "2026-05-08T21:00:04.881Z" }, { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, ] @@ -2127,7 +2079,6 @@ resolution-markers = [ ] sdist = { url = "https://files.pythonhosted.org/packages/66/70/e908e9c5e52ef7c3a6c7902c9dfbb34c7e29c25d2f81ade3856445fd5c94/protobuf-6.33.6.tar.gz", hash = "sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135", size = 444531, upload-time = "2026-03-18T19:05:00.988Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/ca/25afc144934014700c52e05103c2421997482d561f3101ff352e1292fb81/protobuf-6.33.6-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:c96c37eec15086b79762ed265d59ab204dabc53056e3443e702d2681f4b39ce3", size = 339381, upload-time = "2026-03-18T19:04:54.616Z" }, { url = "https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593", size = 323436, upload-time = "2026-03-18T19:04:55.768Z" }, { url = "https://files.pythonhosted.org/packages/c4/72/02445137af02769918a93807b2b7890047c32bfb9f90371cbc12688819eb/protobuf-6.33.6-py3-none-any.whl", hash = "sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901", size = 170656, upload-time = "2026-03-18T19:04:59.826Z" }, ] @@ -2154,8 +2105,6 @@ wheels = [ { 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" }, ] @@ -2188,9 +2137,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/91/13/13e1069b351bdc388 wheels = [ { url = "https://files.pythonhosted.org/packages/62/c9/a47ab7ece0d86cbe6678418a0fbd1ac4bb493b9184a3891dfa0e7f287ae0/pyarrow-24.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b0e131f880cda8d04e076cee175a46fc0e8bc8b65c99c6c09dff6669335fde74", size = 35068898, upload-time = "2026-04-21T10:46:36.599Z" }, { url = "https://files.pythonhosted.org/packages/d1/bc/8db86617a9a58008acf8913d6fed68ea2a46acb6de928db28d724c891a68/pyarrow-24.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:1b2fe7f9a5566401a0ef2571f197eb92358925c1f0c8dba305d6e43ea0871bb3", size = 36679915, upload-time = "2026-04-21T10:46:42.602Z" }, - { url = "https://files.pythonhosted.org/packages/eb/8e/fb178720400ef69db251eb4a9c3ccf4af269bc1feb5055529b8fc87170d1/pyarrow-24.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:0b3537c00fb8d384f15ac1e79b6eb6db04a16514c8c1d22e59a9b95c8ba42868", size = 45697931, upload-time = "2026-04-21T10:46:48.403Z" }, { url = "https://files.pythonhosted.org/packages/f3/27/99c42abe8e21b44f4917f62631f3aa31404882a2c41d8a4cd5c110e13d52/pyarrow-24.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:14e31a3c9e35f1ab6356c6378f6f72830e6d2d5f1791df3774a7b097d18a6a1e", size = 48837449, upload-time = "2026-04-21T10:46:55.329Z" }, - { url = "https://files.pythonhosted.org/packages/36/b6/333749e2666e9032891125bf9c691146e92901bece62030ac1430e2e7c88/pyarrow-24.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b7d9a514e73bc42711e6a35aaccf3587c520024fe0a25d830a1a8a27c15f4f57", size = 49395949, upload-time = "2026-04-21T10:47:01.869Z" }, { url = "https://files.pythonhosted.org/packages/17/25/c5201706a2dd374e8ba6ee3fd7a8c89fb7ffc16eed5217a91fd2bd7f7626/pyarrow-24.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b196eb3f931862af3fa84c2a253514d859c08e0d8fe020e07be12e75a5a9780c", size = 51912986, upload-time = "2026-04-21T10:47:09.872Z" }, ] @@ -2201,14 +2148,6 @@ source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/aa/b8/4ed5c7ad5ec15b08d35cc79ace6145d5c1ae426e46435f4987379439dfea/pybase64-1.4.3.tar.gz", hash = "sha256:c2ed274c9e0ba9c8f9c4083cfe265e66dd679126cd9c2027965d807352f3f053", size = 137272, upload-time = "2025-12-06T13:27:04.013Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/64/15/8d60b9ec5e658185fc2ee3333e01a6e30d717cf677b24f47cbb3a859d13c/pybase64-1.4.3-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95a57cccf106352a72ed8bc8198f6820b16cc7d55aa3867a16dea7011ae7c218", size = 71370, upload-time = "2025-12-06T13:22:55.517Z" }, - { url = "https://files.pythonhosted.org/packages/a9/00/8ffcf9810bd23f3984698be161cf7edba656fd639b818039a7be1d6405d4/pybase64-1.4.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:9fe9922698f3e2f72874b26890d53a051c431d942701bb3a37aae94da0b12107", size = 56652, upload-time = "2025-12-06T13:22:57.724Z" }, - { url = "https://files.pythonhosted.org/packages/81/62/379e347797cdea4ab686375945bc77ad8d039c688c0d4d0cfb09d247beb9/pybase64-1.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:af5f4bd29c86b59bb4375e0491d16ec8a67548fa99c54763aaedaf0b4b5a6632", size = 59382, upload-time = "2025-12-06T13:22:58.758Z" }, - { url = "https://files.pythonhosted.org/packages/c6/f2/9338ffe2f487086f26a2c8ca175acb3baa86fce0a756ff5670a0822bb877/pybase64-1.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c302f6ca7465262908131411226e02100f488f531bb5e64cb901aa3f439bccd9", size = 59990, upload-time = "2025-12-06T13:23:01.007Z" }, - { url = "https://files.pythonhosted.org/packages/f9/a4/85a6142b65b4df8625b337727aa81dc199642de3d09677804141df6ee312/pybase64-1.4.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:2f3f439fa4d7fde164ebbbb41968db7d66b064450ab6017c6c95cef0afa2b349", size = 54923, upload-time = "2025-12-06T13:23:02.369Z" }, - { url = "https://files.pythonhosted.org/packages/b0/73/d7e19a63e795c13837f2356268d95dc79d1180e756f57ced742a1e52fdeb/pybase64-1.4.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:56e6526f8565642abc5f84338cc131ce298a8ccab696b19bdf76fa6d7dc592ef", size = 52338, upload-time = "2025-12-06T13:23:04.458Z" }, - { url = "https://files.pythonhosted.org/packages/5d/b3/63cec68f9d6f6e4c0b438d14e5f1ef536a5fe63ce14b70733ac5e31d7ab8/pybase64-1.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:62ad29a5026bb22cfcd1ca484ec34b0a5ced56ddba38ceecd9359b2818c9c4f9", size = 58055, upload-time = "2025-12-06T13:23:06.931Z" }, - { url = "https://files.pythonhosted.org/packages/d5/cb/7acf7c3c06f9692093c07f109668725dc37fb9a3df0fa912b50add645195/pybase64-1.4.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:11b9d1d2d32ec358c02214363b8fc3651f6be7dd84d880ecd597a6206a80e121", size = 54430, upload-time = "2025-12-06T13:23:07.936Z" }, - { url = "https://files.pythonhosted.org/packages/33/39/4eb33ff35d173bfff4002e184ce8907f5d0a42d958d61cd9058ef3570179/pybase64-1.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0aebaa7f238caa0a0d373616016e2040c6c879ebce3ba7ab3c59029920f13640", size = 56272, upload-time = "2025-12-06T13:23:09.253Z" }, { url = "https://files.pythonhosted.org/packages/19/97/a76d65c375a254e65b730c6f56bf528feca91305da32eceab8bcc08591e6/pybase64-1.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e504682b20c63c2b0c000e5f98a80ea867f8d97642e042a5a39818e44ba4d599", size = 70904, upload-time = "2025-12-06T13:23:10.336Z" }, { url = "https://files.pythonhosted.org/packages/bf/44/d4b7adc7bf4fd5b52d8d099121760c450a52c390223806b873f0b6a2d551/pybase64-1.4.3-graalpy311-graalpy242_311_native-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a492518f3078a4e3faaef310697d21df9c6bc71908cebc8c2f6fbfa16d7d6b1f", size = 43227, upload-time = "2025-12-06T13:26:21.845Z" }, { url = "https://files.pythonhosted.org/packages/12/d7/6610f34a8972415fab3bb4704c174a1cc477bffbc3c36e526428d0f3957d/pybase64-1.4.3-pp311-pypy311_pp73-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af6d0d3a691911cc4c9a625f3ddcd3af720738c21be3d5c72de05629139d393", size = 41294, upload-time = "2025-12-06T13:26:44.936Z" }, @@ -2263,26 +2202,14 @@ sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f wheels = [ { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, - { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, - { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, - { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, - { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, - { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, - { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, - { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, - { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, - { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, - { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, - { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, - { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, ] @@ -2386,6 +2313,19 @@ 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-discovery" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "platformdirs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0b/1a/cbbaf13b730abb0a16b964d984e19f2fe520c21a4dc664051359a3f5a9e7/python_discovery-1.4.2.tar.gz", hash = "sha256:8f3746c4b4968d22afbb97d36e1a0e5b66e6c0f297290f2e95f05b9b8bf18690", size = 70277, upload-time = "2026-06-11T16:10:42.383Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/82/a70006589557f267f15bd384c0642ad49f0d97b690c3a05b166b9dcbad3b/python_discovery-1.4.2-py3-none-any.whl", hash = "sha256:475803f53b7b2ed6e490e27373f9d8340f7d2eebf9acdaf645d7d714c97bb500", size = 33886, upload-time = "2026-06-11T16:10:41.192Z" }, +] + [[package]] name = "python-dotenv" version = "1.2.2" @@ -2430,10 +2370,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa wheels = [ { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, - { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, - { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, - { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, ] @@ -2492,15 +2429,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c2/dc/c1f2df4027e82fc54b5a473e4b250f5139faca49a0fbe29a48668d228f34/regex-2026.5.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ccf5249114cc3e772ecdd88a98a86eca0fd74c61ce32a94743758c083fc05d48", size = 489445, upload-time = "2026-05-09T23:12:06.111Z" }, { url = "https://files.pythonhosted.org/packages/03/d2/59f01110660081cce9c0bc30ebd0b5ee250dacf658e3248ed92f01e0e8ee/regex-2026.5.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46f1326ca6e65b0879d23ca302c0f2415aad42ff0309b9c818e7949fe19a41d8", size = 291271, upload-time = "2026-05-09T23:12:07.731Z" }, { url = "https://files.pythonhosted.org/packages/58/b6/14b2c84ff90ddb370c81d27503f4a0fcf071496416f4855f6cc8c5d81c35/regex-2026.5.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef31cbfe458e21c6122ba8150ff060e0c7789ed0d26eb423f25472584920b555", size = 289212, upload-time = "2026-05-09T23:12:09.266Z" }, - { url = "https://files.pythonhosted.org/packages/03/d0/4db86529117320de0c84afd90e70bb47434625875e34fcef9d8c127c5b16/regex-2026.5.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:992604d02e6d9c6d786c24a706a71ecffe1020fc1ef264044474cd81fa2c3919", size = 792310, upload-time = "2026-05-09T23:12:11.416Z" }, - { url = "https://files.pythonhosted.org/packages/07/78/fe4800cd322f862ecffd2d553409b20d80650e5ed71b9d178f853d020b82/regex-2026.5.9-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c9411dd64ca95477225734a93dfc8583b51916b8d5942f99d6cac21e09965451", size = 861721, upload-time = "2026-05-09T23:12:13.681Z" }, - { url = "https://files.pythonhosted.org/packages/b5/d0/b3618a895dd8feb897c61bb2954edd265e1767d82a01d53065d5871127a3/regex-2026.5.9-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3dd4a3ff360dfb836fecdb93a4598f9d6e2ac81e3e397125145c6221bf58cf4c", size = 906460, upload-time = "2026-05-09T23:12:15.443Z" }, { url = "https://files.pythonhosted.org/packages/33/6f/1481597e859ef19508b345eec4afd1416ed6e6b459c75a64026ef193aecf/regex-2026.5.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a661a7d270a61f7cf460caee8b9fa2d5ef9e5c681234bcb9e0fe14f488e7dfc", size = 799843, upload-time = "2026-05-09T23:12:16.892Z" }, - { url = "https://files.pythonhosted.org/packages/73/59/955734c803f59108deccba3597ae440c76b62a652733c0006e6243758420/regex-2026.5.9-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f079e50a0d3cc3cd5091fa9ff45869a2e6b2cd35895731edafb0327901a8d86d", size = 773610, upload-time = "2026-05-09T23:12:19.127Z" }, - { url = "https://files.pythonhosted.org/packages/68/8f/70c04a236d651c81881dac42ef8538bddda6121434509d0a22d9e601503b/regex-2026.5.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4ebe8f0b5ec5a5024dc4a4c59f444c4e9afc5f2abdbb8962065b75d27fb971f9", size = 781645, upload-time = "2026-05-09T23:12:20.806Z" }, - { url = "https://files.pythonhosted.org/packages/1d/96/05c7434d88185e5d27fe54aeb74df86bd77cd79f52f0b4eae54faa8fea70/regex-2026.5.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:97cf3bc1b7d7d2306772ec07366c80d9df00ff79e79cea32898883a646d2fae2", size = 854473, upload-time = "2026-05-09T23:12:22.465Z" }, - { url = "https://files.pythonhosted.org/packages/4e/c1/6e3d8202d981f3117004bf341ee74893ba4ba8a9fbaf4b94615846550a08/regex-2026.5.9-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0f9eede6a5cbdc02d4978090186390936e1776a7d1359b21e41014c609880bcf", size = 763311, upload-time = "2026-05-09T23:12:24.351Z" }, - { url = "https://files.pythonhosted.org/packages/93/c7/e7737f1526b3fb32bd4c337fd6c71c3ebb5c8296fc34d11197e0955d2e35/regex-2026.5.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:01f0f5f55f4b64dacec85dc116d3c05fd23ad3ff037bbc73a2085775953c2611", size = 844593, upload-time = "2026-05-09T23:12:26.341Z" }, { url = "https://files.pythonhosted.org/packages/a5/27/0daffb1a535bb39f422c3d200f4ab023c71110ad66a32b366bee708baba0/regex-2026.5.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1268eddd8486dc561d08eee1156e40aa3a8fe10f4bdec8fa653b455fcbffd12c", size = 789167, upload-time = "2026-05-09T23:12:27.975Z" }, ] @@ -2552,17 +2481,9 @@ version = "0.7.6" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e5/f5/8bed2310abe4ae04b67a38374a4d311dd85220f5d8da56f47ae9361be0b0/rignore-0.7.6.tar.gz", hash = "sha256:00d3546cd793c30cb17921ce674d2c8f3a4b00501cb0e3dd0e82217dbeba2671", size = 57140, upload-time = "2025-11-05T21:41:21.968Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/c9/390a8fdfabb76d71416be773bd9f162977bd483084f68daf19da1dec88a6/rignore-0.7.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ba5524f5178deca4d7695e936604ebc742acb8958f9395776e1fcb8133f8257a", size = 873633, upload-time = "2025-11-05T20:41:06.193Z" }, - { url = "https://files.pythonhosted.org/packages/df/c9/79404fcb0faa76edfbc9df0901f8ef18568d1104919ebbbad6d608c888d1/rignore-0.7.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:62020dbb89a1dd4b84ab3d60547b3b2eb2723641d5fb198463643f71eaaed57d", size = 1167633, upload-time = "2025-11-05T20:41:22.491Z" }, - { url = "https://files.pythonhosted.org/packages/6e/8d/b3466d32d445d158a0aceb80919085baaae495b1f540fb942f91d93b5e5b/rignore-0.7.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b34acd532769d5a6f153a52a98dcb81615c949ab11697ce26b2eb776af2e174d", size = 941434, upload-time = "2025-11-05T20:41:38.151Z" }, { url = "https://files.pythonhosted.org/packages/e8/40/9cd949761a7af5bc27022a939c91ff622d29c7a0b66d0c13a863097dde2d/rignore-0.7.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c5e53b752f9de44dff7b3be3c98455ce3bf88e69d6dc0cf4f213346c5e3416c", size = 959461, upload-time = "2025-11-05T20:42:08.476Z" }, - { url = "https://files.pythonhosted.org/packages/17/18/162eedadb4c2282fa4c521700dbf93c9b14b8842e8354f7d72b445b8d593/rignore-0.7.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5991e46ab9b4868334c9e372ab0892b0150f3f586ff2b1e314272caeb38aaedb", size = 1139012, upload-time = "2025-11-05T21:40:29.399Z" }, { url = "https://files.pythonhosted.org/packages/9f/22/1c1a65047df864def9a047dbb40bc0b580b8289a4280e62779cd61ae21f2/rignore-0.7.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aaf938530dcc0b47c4cfa52807aa2e5bfd5ca6d57a621125fe293098692f6345", size = 1128182, upload-time = "2025-11-05T21:41:04.239Z" }, - { url = "https://files.pythonhosted.org/packages/55/e4/b3c5dfdd8d8a10741dfe7199ef45d19a0e42d0c13aa377c83bd6caf65d90/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53fb28882d2538cb2d231972146c4927a9d9455e62b209f85d634408c4103538", size = 874843, upload-time = "2025-11-05T20:41:17.687Z" }, - { url = "https://files.pythonhosted.org/packages/cc/10/d6f3750233881a2a154cefc9a6a0a9b19da526b19f7f08221b552c6f827d/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87409f7eeb1103d6b77f3472a3a0d9a5953e3ae804a55080bdcb0120ee43995b", size = 1170348, upload-time = "2025-11-05T20:41:34.21Z" }, - { url = "https://files.pythonhosted.org/packages/6e/10/ad98ca05c9771c15af734cee18114a3c280914b6e34fde9ffea2e61e88aa/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:684014e42e4341ab3ea23a203551857fcc03a7f8ae96ca3aefb824663f55db32", size = 942315, upload-time = "2025-11-05T20:41:48.508Z" }, { url = "https://files.pythonhosted.org/packages/de/00/ab5c0f872acb60d534e687e629c17e0896c62da9b389c66d3aa16b817aa8/rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77356ebb01ba13f8a425c3d30fcad40e57719c0e37670d022d560884a30e4767", size = 961047, upload-time = "2025-11-05T20:42:19.403Z" }, - { url = "https://files.pythonhosted.org/packages/67/56/36d5d34210e5e7dfcd134eed8335b19e80ae940ee758f493e4f2b344dd70/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:c081f17290d8a2b96052b79207622aa635686ea39d502b976836384ede3d303c", size = 1139789, upload-time = "2025-11-05T21:40:42.119Z" }, { url = "https://files.pythonhosted.org/packages/ce/8b/a1299085b28a2f6135e30370b126e3c5055b61908622f2488ade67641479/rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d8955b57e42f2a5434670d5aa7b75eaf6e74602ccd8955dddf7045379cd762fb", size = 1129444, upload-time = "2025-11-05T21:41:17.906Z" }, ] @@ -2572,17 +2493,9 @@ version = "2026.5.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459, upload-time = "2026-05-28T12:02:13.232Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121, upload-time = "2026-05-28T11:58:55.243Z" }, - { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026, upload-time = "2026-05-28T11:58:56.788Z" }, - { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865, upload-time = "2026-05-28T11:58:58.298Z" }, { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012, upload-time = "2026-05-28T11:58:59.589Z" }, - { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111, upload-time = "2026-05-28T11:59:01.104Z" }, { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053, upload-time = "2026-05-28T11:59:06.837Z" }, - { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899, upload-time = "2026-05-28T12:01:58.212Z" }, - { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618, upload-time = "2026-05-28T12:01:59.888Z" }, - { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003, upload-time = "2026-05-28T12:02:01.482Z" }, { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778, upload-time = "2026-05-28T12:02:03.197Z" }, - { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359, upload-time = "2026-05-28T12:02:04.817Z" }, { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326, upload-time = "2026-05-28T12:02:11.47Z" }, ] @@ -2592,19 +2505,9 @@ version = "0.15.18" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/74/98/1295ad5a5aa9bc85bdcdfa5d82fe7b49c61af5657df4f227637ff9de0da6/ruff-0.15.18.tar.gz", hash = "sha256:2698a964c70e8bf402dcb99c8810472d270d141e7aa8c4e13599fd52033a2f33", size = 4761437, upload-time = "2026-06-18T18:25:39.224Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/d0/686e984941269621e2be72612d5c1e461f8f7b38415a2a7d7a81c8ae6715/ruff-0.15.18-py3-none-linux_armv6l.whl", hash = "sha256:8b6850172348c8381b8b3084c5915a4393c2373b9b54cd5b5e1ea15812bc10df", size = 10887308, upload-time = "2026-06-18T18:25:03.062Z" }, { url = "https://files.pythonhosted.org/packages/ed/21/bc4123e3f5515ee99f8ce1eb93a14a0628fe4d1678663cd08f933ac16931/ruff-0.15.18-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3fccc153a85417dcd976883160cacce486997b0a0058dd18f54b8aaaac7d1ce2", size = 11281305, upload-time = "2026-06-18T18:25:30.026Z" }, { url = "https://files.pythonhosted.org/packages/51/93/4769464c25cf7ab2acb3c7dda9cad3d867eb41c59565b3e2a9d17249c90c/ruff-0.15.18-py3-none-macosx_11_0_arm64.whl", hash = "sha256:08d4c86a68f2c3ec2c9d56380a71fb4a4f65373055cbb8caabd645e9102f38d4", size = 10641215, upload-time = "2026-06-18T18:25:15.802Z" }, - { url = "https://files.pythonhosted.org/packages/6c/42/56926d17120db2c208d76bf60a1a019644dd9e91dc27f0f95c9caddb1366/ruff-0.15.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37e5108745c2c0705da916d7d4de533ddf547051ef45f62888c31bae73f66318", size = 10957224, upload-time = "2026-06-18T18:25:36.955Z" }, - { url = "https://files.pythonhosted.org/packages/22/4f/d43fab8d8189afde803103022d000a8ef9f230616d436d52a8b2b8d63b50/ruff-0.15.18-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:56949a6ce8b3abde54c0bcb22cebfe57e8771cadc84b407ae8b8eaf67ebdcd43", size = 10699024, upload-time = "2026-06-18T18:25:05.707Z" }, - { url = "https://files.pythonhosted.org/packages/63/42/1e3e4c68bd408b9768cf3e439acbe2c78245225faef253f7028a0cdb63e0/ruff-0.15.18-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01a754cd6a1b630d3f97e33eb452cf7a98040482318e870f8bc52a5a30e62657", size = 11491458, upload-time = "2026-06-18T18:25:20.275Z" }, - { url = "https://files.pythonhosted.org/packages/20/77/47a3484bea8521e14a203d98c389c5c97846675e4f02734672da4a69b52a/ruff-0.15.18-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ba7a07e03a44dbf10bb086ee06705b173625014ec99f73a7e6836a5e5590a0c", size = 12383752, upload-time = "2026-06-18T18:25:22.535Z" }, - { url = "https://files.pythonhosted.org/packages/0a/ca/054159590787023d83b658a1a1819c4c8910114e7015069340b71c0961cb/ruff-0.15.18-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a2c40a41a4cadbcf5897b548ab29dfe248b20c540961c0247d98a3973c70403", size = 11577923, upload-time = "2026-06-18T18:25:10.702Z" }, { url = "https://files.pythonhosted.org/packages/6d/ff/d353d6b7bbd73cc0ec37f4463d7540e45e894338abdd9964eee0de332708/ruff-0.15.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f0480ce690cbb6c4db6e5d08f19fce98e10ba131a8b60c1bcdac42771e3ae2d", size = 11583925, upload-time = "2026-06-18T18:25:32.391Z" }, - { url = "https://files.pythonhosted.org/packages/c1/4a/891f89b9c296ed3e5f3ece1a5629badc989d9a8fdaa30431aaf4774bc1c2/ruff-0.15.18-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2330215f1f393fa8733f55edce04fcf94c36a2c460fcde31f78cc84e4951e9b1", size = 11582834, upload-time = "2026-06-18T18:25:27.309Z" }, - { url = "https://files.pythonhosted.org/packages/32/a3/ed9e370154bf85de360b93c03026157f02d4943b2d01ff4945f4429f8e8a/ruff-0.15.18-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a6aa6a3d979e48ae617578183674bf264fbe7d0114a796a26bd678d67963c7ff", size = 10927328, upload-time = "2026-06-18T18:25:34.676Z" }, - { url = "https://files.pythonhosted.org/packages/f5/d1/5cf5909329fedb5d39d555ee818ba5cf4638e1a301b89785d34f2905bfcb/ruff-0.15.18-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a81beadbbff2c9c245561ae3f77b16709d87f35eec650d0501679239d3449b22", size = 10693187, upload-time = "2026-06-18T18:25:08.245Z" }, - { url = "https://files.pythonhosted.org/packages/fd/44/ff6c635cf2c4f4e7b618b6640da057376baa36014695487d88aed4794268/ruff-0.15.18-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2186d9e940ae332ab293623a75b5f4fe49565f449954d50a72a046683aa6b809", size = 11208721, upload-time = "2026-06-18T18:25:41.327Z" }, { url = "https://files.pythonhosted.org/packages/88/d9/5baa2a30861adfb7022cf33c1e35b2fc18085b08c16f83eff4c7b99a5f48/ruff-0.15.18-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5c2abf140438032bc77b2284a6c9944ecd8a19e5f1c7b52b1b8e4a0a80d19a7a", size = 11678599, upload-time = "2026-06-18T18:25:13.607Z" }, ] @@ -2616,15 +2519,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/ac/cc/738f3011628920e02 wheels = [ { url = "https://files.pythonhosted.org/packages/4d/b1/3f5fd73c039fc87dba3ff8b5d528bfc5a32b597fea8e7a6a4800343a17c7/safetensors-0.6.2-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:9c85ede8ec58f120bad982ec47746981e210492a6db876882aa021446af8ffba", size = 454797, upload-time = "2025-08-08T13:13:52.066Z" }, { url = "https://files.pythonhosted.org/packages/8c/c9/bb114c158540ee17907ec470d01980957fdaf87b4aa07914c24eba87b9c6/safetensors-0.6.2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d6675cf4b39c98dbd7d940598028f3742e0375a6b4d4277e76beb0c35f4b843b", size = 432206, upload-time = "2025-08-08T13:13:50.931Z" }, - { url = "https://files.pythonhosted.org/packages/d3/8e/f70c34e47df3110e8e0bb268d90db8d4be8958a54ab0336c9be4fe86dac8/safetensors-0.6.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d2d2b3ce1e2509c68932ca03ab8f20570920cd9754b05063d4368ee52833ecd", size = 473261, upload-time = "2025-08-08T13:13:41.259Z" }, - { url = "https://files.pythonhosted.org/packages/2a/f5/be9c6a7c7ef773e1996dc214e73485286df1836dbd063e8085ee1976f9cb/safetensors-0.6.2-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:93de35a18f46b0f5a6a1f9e26d91b442094f2df02e9fd7acf224cfec4238821a", size = 485117, upload-time = "2025-08-08T13:13:43.506Z" }, - { url = "https://files.pythonhosted.org/packages/c9/55/23f2d0a2c96ed8665bf17a30ab4ce5270413f4d74b6d87dd663258b9af31/safetensors-0.6.2-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89a89b505f335640f9120fac65ddeb83e40f1fd081cb8ed88b505bdccec8d0a1", size = 616154, upload-time = "2025-08-08T13:13:45.096Z" }, - { url = "https://files.pythonhosted.org/packages/98/c6/affb0bd9ce02aa46e7acddbe087912a04d953d7a4d74b708c91b5806ef3f/safetensors-0.6.2-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4d0d0b937e04bdf2ae6f70cd3ad51328635fe0e6214aa1fc811f3b576b3bda", size = 520713, upload-time = "2025-08-08T13:13:46.25Z" }, { url = "https://files.pythonhosted.org/packages/fe/5d/5a514d7b88e310c8b146e2404e0dc161282e78634d9358975fd56dfd14be/safetensors-0.6.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8045db2c872db8f4cbe3faa0495932d89c38c899c603f21e9b6486951a5ecb8f", size = 485835, upload-time = "2025-08-08T13:13:49.373Z" }, - { url = "https://files.pythonhosted.org/packages/7a/7b/4fc3b2ba62c352b2071bea9cfbad330fadda70579f617506ae1a2f129cab/safetensors-0.6.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:81e67e8bab9878bb568cffbc5f5e655adb38d2418351dc0859ccac158f753e19", size = 521503, upload-time = "2025-08-08T13:13:47.651Z" }, - { url = "https://files.pythonhosted.org/packages/5a/50/0057e11fe1f3cead9254315a6c106a16dd4b1a19cd247f7cc6414f6b7866/safetensors-0.6.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b0e4d029ab0a0e0e4fdf142b194514695b1d7d3735503ba700cf36d0fc7136ce", size = 652256, upload-time = "2025-08-08T13:13:53.167Z" }, - { url = "https://files.pythonhosted.org/packages/e9/29/473f789e4ac242593ac1656fbece6e1ecd860bb289e635e963667807afe3/safetensors-0.6.2-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:fa48268185c52bfe8771e46325a1e21d317207bcabcb72e65c6e28e9ffeb29c7", size = 747281, upload-time = "2025-08-08T13:13:54.656Z" }, - { url = "https://files.pythonhosted.org/packages/68/52/f7324aad7f2df99e05525c84d352dc217e0fa637a4f603e9f2eedfbe2c67/safetensors-0.6.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:d83c20c12c2d2f465997c51b7ecb00e407e5f94d7dec3ea0cc11d86f60d3fde5", size = 692286, upload-time = "2025-08-08T13:13:55.884Z" }, { url = "https://files.pythonhosted.org/packages/ad/fe/cad1d9762868c7c5dc70c8620074df28ebb1a8e4c17d4c0cb031889c457e/safetensors-0.6.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d944cea65fad0ead848b6ec2c37cc0b197194bec228f8020054742190e9312ac", size = 655957, upload-time = "2025-08-08T13:13:57.029Z" }, ] @@ -2637,7 +2532,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d8/15/46afbab00733d81788b64be430ca1b93011bb9388527958e26cc31832de5/sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987", size = 1942560, upload-time = "2025-08-12T06:59:25.82Z" }, { url = "https://files.pythonhosted.org/packages/fa/79/7c01b8ef98a0567e9d84a4e7a910f8e7074fcbf398a5cd76f93f4b9316f9/sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7", size = 1325385, upload-time = "2025-08-12T06:59:27.722Z" }, { url = "https://files.pythonhosted.org/packages/bb/88/2b41e07bd24f33dcf2f18ec3b74247aa4af3526bad8907b8727ea3caba03/sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a", size = 1253319, upload-time = "2025-08-12T06:59:29.306Z" }, - { url = "https://files.pythonhosted.org/packages/a0/54/38a1af0c6210a3c6f95aa46d23d6640636d020fba7135cd0d9a84ada05a7/sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e", size = 1316162, upload-time = "2025-08-12T06:59:30.914Z" }, { url = "https://files.pythonhosted.org/packages/ef/66/fb191403ade791ad2c3c1e72fe8413e63781b08cfa3aa4c9dfc536d6e795/sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63", size = 1387785, upload-time = "2025-08-12T06:59:32.491Z" }, ] @@ -2661,8 +2555,6 @@ source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8d/48/49393a96a2eef1ab418b17475fb92b8fcfad83d099e678751b05472e69de/setproctitle-1.3.7.tar.gz", hash = "sha256:bc2bc917691c1537d5b9bca1468437176809c7e11e5694ca79a9ca12345dcb9e", size = 27002, upload-time = "2025-09-05T12:51:25.278Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/18/2e/bd03ff02432a181c1787f6fc2a678f53b7dacdd5ded69c318fe1619556e8/setproctitle-1.3.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1607b963e7b53e24ec8a2cb4e0ab3ae591d7c6bf0a160feef0551da63452b37f", size = 32191, upload-time = "2025-09-05T12:49:24.567Z" }, - { url = "https://files.pythonhosted.org/packages/a0/3c/65edc65db3fa3df400cf13b05e9d41a3c77517b4839ce873aa6b4043184f/setproctitle-1.3.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f8d961bba676e07d77665204f36cffaa260f526e7b32d07ab3df6a2c1dfb44ba", size = 34963, upload-time = "2025-09-05T12:49:27.044Z" }, - { url = "https://files.pythonhosted.org/packages/4a/18/77a765a339ddf046844cb4513353d8e9dcd8183da9cdba6e078713e6b0b2/setproctitle-1.3.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:db116850fcf7cca19492030f8d3b4b6e231278e8fe097a043957d22ce1bdf3ee", size = 33657, upload-time = "2025-09-05T12:49:30.323Z" }, { url = "https://files.pythonhosted.org/packages/6b/63/f0b6205c64d74d2a24a58644a38ec77bdbaa6afc13747e75973bf8904932/setproctitle-1.3.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:316664d8b24a5c91ee244460bdaf7a74a707adaa9e14fbe0dc0a53168bb9aba1", size = 31836, upload-time = "2025-09-05T12:49:32.309Z" }, { url = "https://files.pythonhosted.org/packages/73/02/b9eadc226195dcfa90eed37afe56b5dd6fa2f0e5220ab8b7867b8862b926/setproctitle-1.3.7-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f1704c9e041f2b1dc38f5be4552e141e1432fba3dd52c72eeffd5bc2db04dc65", size = 14286, upload-time = "2025-09-05T12:51:22.61Z" }, ] @@ -2823,15 +2715,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/1c/46/fb6854cec3278fbfa wheels = [ { url = "https://files.pythonhosted.org/packages/bf/33/f4b2d94ada7ab297328fc671fed209368ddb82f965ec2224eb1892674c3a/tokenizers-0.22.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:59fdb013df17455e5f950b4b834a7b3ee2e0271e6378ccb33aa74d178b513c73", size = 3069318, upload-time = "2025-09-19T09:49:11.848Z" }, { url = "https://files.pythonhosted.org/packages/1c/58/2aa8c874d02b974990e89ff95826a4852a8b2a273c7d1b4411cdd45a4565/tokenizers-0.22.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8d4e484f7b0827021ac5f9f71d4794aaef62b979ab7608593da22b1d2e3c4edc", size = 2926478, upload-time = "2025-09-19T09:49:09.759Z" }, - { url = "https://files.pythonhosted.org/packages/1e/3b/55e64befa1e7bfea963cf4b787b2cea1011362c4193f5477047532ce127e/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d2962dd28bc67c1f205ab180578a78eef89ac60ca7ef7cbe9635a46a56422a", size = 3256994, upload-time = "2025-09-19T09:48:56.701Z" }, - { url = "https://files.pythonhosted.org/packages/71/0b/fbfecf42f67d9b7b80fde4aabb2b3110a97fac6585c9470b5bff103a80cb/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:38201f15cdb1f8a6843e6563e6e79f4abd053394992b9bbdf5213ea3469b4ae7", size = 3153141, upload-time = "2025-09-19T09:48:59.749Z" }, - { url = "https://files.pythonhosted.org/packages/17/a9/b38f4e74e0817af8f8ef925507c63c6ae8171e3c4cb2d5d4624bf58fca69/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1cbe5454c9a15df1b3443c726063d930c16f047a3cc724b9e6e1a91140e5a21", size = 3508049, upload-time = "2025-09-19T09:49:05.868Z" }, - { url = "https://files.pythonhosted.org/packages/d2/48/dd2b3dac46bb9134a88e35d72e1aa4869579eacc1a27238f1577270773ff/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7d094ae6312d69cc2a872b54b91b309f4f6fbce871ef28eb27b52a98e4d0214", size = 3710730, upload-time = "2025-09-19T09:49:01.832Z" }, - { url = "https://files.pythonhosted.org/packages/93/0e/ccabc8d16ae4ba84a55d41345207c1e2ea88784651a5a487547d80851398/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afd7594a56656ace95cdd6df4cca2e4059d294c5cfb1679c57824b605556cb2f", size = 3412560, upload-time = "2025-09-19T09:49:03.867Z" }, { url = "https://files.pythonhosted.org/packages/d0/c6/dc3a0db5a6766416c32c034286d7c2d406da1f498e4de04ab1b8959edd00/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ef6063d7a84994129732b47e7915e8710f27f99f3a3260b8a38fc7ccd083f4", size = 3250221, upload-time = "2025-09-19T09:49:07.664Z" }, - { url = "https://files.pythonhosted.org/packages/d7/a6/2c8486eef79671601ff57b093889a345dd3d576713ef047776015dc66de7/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ba0a64f450b9ef412c98f6bcd2a50c6df6e2443b560024a09fa6a03189726879", size = 9345569, upload-time = "2025-09-19T09:49:14.214Z" }, - { url = "https://files.pythonhosted.org/packages/6b/16/32ce667f14c35537f5f605fe9bea3e415ea1b0a646389d2295ec348d5657/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:331d6d149fa9c7d632cde4490fb8bbb12337fa3a0232e77892be656464f4b446", size = 9271599, upload-time = "2025-09-19T09:49:16.639Z" }, - { url = "https://files.pythonhosted.org/packages/51/7c/a5f7898a3f6baa3fc2685c705e04c98c1094c523051c805cdd9306b8f87e/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:607989f2ea68a46cb1dfbaf3e3aabdf3f21d8748312dbeb6263d1b3b66c5010a", size = 9533862, upload-time = "2025-09-19T09:49:19.146Z" }, { url = "https://files.pythonhosted.org/packages/36/65/7e75caea90bc73c1dd8d40438adf1a7bc26af3b8d0a6705ea190462506e1/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a0f307d490295717726598ef6fa4f24af9d484809223bbc253b201c740a06390", size = 9681250, upload-time = "2025-09-19T09:49:21.501Z" }, ] @@ -2866,9 +2750,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841 wheels = [ { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, - { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, - { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, ] @@ -2904,7 +2786,6 @@ dependencies = [ ] wheels = [ { url = "https://files.pythonhosted.org/packages/ae/0d/98b410492609e34a155fa8b121b55c7dca229f39636851c3a9ec20edea21/torch-2.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7b6a60d48062809f58595509c524b88e6ddec3ebe25833d6462eeab81e5f2ce4", size = 80529712, upload-time = "2026-03-23T18:12:02.608Z" }, - { url = "https://files.pythonhosted.org/packages/84/03/acea680005f098f79fd70c1d9d5ccc0cb4296ec2af539a0450108232fc0c/torch-2.11.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d91aac77f24082809d2c5a93f52a5f085032740a1ebc9252a7b052ef5a4fddc6", size = 419718178, upload-time = "2026-03-23T18:10:46.675Z" }, { url = "https://files.pythonhosted.org/packages/8c/8b/d7be22fbec9ffee6cff31a39f8750d4b3a65d349a286cf4aec74c2375662/torch-2.11.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:7aa2f9bbc6d4595ba72138026b2074be1233186150e9292865e04b7a63b8c67a", size = 530604548, upload-time = "2026-03-23T18:10:03.569Z" }, ] @@ -3022,6 +2903,7 @@ llm = [ [package.dev-dependencies] dev = [ { name = "pip-audit", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pre-commit", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "pytest", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "ruff", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] @@ -3064,6 +2946,7 @@ provides-extras = ["gpu", "llm", "entity", "finetune"] [package.metadata.requires-dev] dev = [ { name = "pip-audit", specifier = ">=2.7.3" }, + { name = "pre-commit", specifier = ">=4.0" }, { name = "pytest", specifier = ">=8.3" }, { name = "ruff", specifier = ">=0.9.0" }, ] @@ -3163,6 +3046,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/75/be/f8e590fe61d18b4a92070905497aec4c0e64ae1761498cad09023f3f4b3e/uvloop-0.22.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:535cc37b3a04f6cd2c1ef65fa1d370c9a35b6695df735fcff5427323f2cd5473", size = 3723105, upload-time = "2025-10-16T22:16:28.252Z" }, ] +[[package]] +name = "virtualenv" +version = "21.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "filelock", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "platformdirs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "python-discovery", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/a5/81f987504738e6defeed61ec1c47e2aefab3c35d8eeb87e1b3f38cf28254/virtualenv-21.5.1.tar.gz", hash = "sha256:dca3bf98275a59c652b69d68e73433e597d977c2da9198882479d1a7188009c8", size = 4578798, upload-time = "2026-06-16T16:23:58.603Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/02/3623e6169bed617ed1e2d372f7c69f92ec28d54c4dfc997055c8578ec148/virtualenv-21.5.1-py3-none-any.whl", hash = "sha256:55aa670b67bbfb991b03fda39bd3276d92c419d702376e98c5df1c9989a26783", size = 4558820, upload-time = "2026-06-16T16:23:56.963Z" }, +] + [[package]] name = "vllm" version = "0.23.0" @@ -3253,11 +3151,7 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/cd/41/5e1a4bb12aac5f1493fa1bdc11154eca3b258ca4eba65d39c473fe19d8e9/watchfiles-1.2.0.tar.gz", hash = "sha256:c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838", size = 108252, upload-time = "2026-05-18T04:32:04.251Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/6a/cc81fbe7ee42f2f22e661a6e12def7807e01b14b2f39e0ff83fd373fd307/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:772b80df316480d894a0e3165fdd19cf77f5d17f9a787f94029465ad0e3529d1", size = 461379, upload-time = "2026-05-18T04:31:29.292Z" }, - { url = "https://files.pythonhosted.org/packages/45/7d/f60a2b19807b21fe8281f3a8da4f59eef0d5f96825ac4680ba2d4f2ebf91/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d516b3283a758e087841aedb8031549fb41ced08f3db10aa6d2bf32dc042525b", size = 575255, upload-time = "2026-05-18T04:30:40.568Z" }, - { url = "https://files.pythonhosted.org/packages/bd/49/77f5b5e6efbcd57482f74948ebb1b97e5c0046d6b61475042d830c84b3ff/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53b2290c92e0506d102cd448fbc610d87079553f86caa39d67440856a8b8bba5", size = 467052, upload-time = "2026-05-18T04:31:17.942Z" }, { url = "https://files.pythonhosted.org/packages/ee/5a/73e2959af1b97fd5d556f9a8bdba017be23ceeef731869d5eaa0a753d5a3/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a711b51aec4370d0dcda5b6c09463206f133a5759341d7744b953a7b62e1100e", size = 456858, upload-time = "2026-05-18T04:30:30.182Z" }, - { url = "https://files.pythonhosted.org/packages/50/57/1bc8c27fad7e6c19bddee15d276dbb6ab72480ec01c127afff1673aee417/watchfiles-1.2.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:e2ca07fa7d89195ec0865d3d285666286740bfa83d83e5cee204043a31ecc165", size = 467579, upload-time = "2026-05-18T04:32:15.897Z" }, { url = "https://files.pythonhosted.org/packages/30/c2/d8c84a882ab39bbefcc4915ab3e91830b7a7e990c5570b0b69075aba3faf/watchfiles-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d191c054d0715c3c95c99df9b8dbf6fd096d8c1e021e8f212e1bd8bc444ccb5", size = 660713, upload-time = "2026-05-18T04:31:24.62Z" }, { url = "https://files.pythonhosted.org/packages/e9/f9/45d021e4a5cc7b9dd567f7cbb06d3b75f751a690063fb6cc7ec60f4e46b7/watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a88fc94e647bc4eec523f1caa540258eb71d14278b9daf72fa1e2658a98df0f0", size = 457771, upload-time = "2026-05-18T04:30:56.331Z" }, ] @@ -3299,24 +3193,10 @@ sdist = { url = "https://files.pythonhosted.org/packages/24/2f/e183a1b407002f5af wheels = [ { url = "https://files.pythonhosted.org/packages/3b/f4/7bd35089ff1f8e2c96baa2dce05775a122aacd2e3830a73165e27a4d0848/xxhash-3.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fdc7d06929ae28dda98297a18eef7b0fd38991a3b405d8d7b55c9ef24c296958", size = 33423, upload-time = "2026-04-25T11:05:47.628Z" }, { url = "https://files.pythonhosted.org/packages/a3/26/4e00c88a6a2c8a759cfb77d2a9a405f901e8aa66e60ef1fd0aeb35edda48/xxhash-3.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea6daa712f4e094a30830cf01e9b47d03b24d05cc9dab8609f0d9a9db8454712", size = 30857, upload-time = "2026-04-25T11:05:49.189Z" }, - { url = "https://files.pythonhosted.org/packages/82/2f/eeb942c17a5a761a8f01cb9180a0b76bfb62a2c39e6f46b1f9001899027a/xxhash-3.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9e6c0d843f1daf85ea23aeb053579135552bde575b7b98af20bfc667b6e4548d", size = 194702, upload-time = "2026-04-25T11:05:50.457Z" }, - { url = "https://files.pythonhosted.org/packages/0e/fd/96f132c08b1e5951c68691d3b9ec351ec2edc028f6a01fcd294f46b9d9f0/xxhash-3.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:363c139bf15e1ac5f136b981d3c077eb551299b1effede7f12faa010b8590a60", size = 213613, upload-time = "2026-04-25T11:05:52.571Z" }, - { url = "https://files.pythonhosted.org/packages/82/89/d4e92b796c5ed052d29ed324dbfc1dc1188e0c4bf64bebbf0f8fc20698df/xxhash-3.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a778b25874cb0f862eaab5986bff4ca49ffb0def7c0a34c237b948b3c6c775b2", size = 236726, upload-time = "2026-04-25T11:05:54.395Z" }, - { url = "https://files.pythonhosted.org/packages/40/f1/81fc4361921dc6e557a9c60cb3712f36d244d06eeeb71cd2f4252ac42678/xxhash-3.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3e1860f1e43d40e9d904cf22d93e587ea42e010ebce4160877e46bcab4bc232a", size = 212443, upload-time = "2026-04-25T11:05:56.334Z" }, - { url = "https://files.pythonhosted.org/packages/6a/d0/afeddd4cff50a332f50d4b8a2e8857673153ab0564ef472fcdeb0b5430df/xxhash-3.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9122ad6f867c4a0f5e655f5c3bdf89103852009dbb442a3d23e688b9e699e800", size = 445793, upload-time = "2026-04-25T11:05:58.953Z" }, { url = "https://files.pythonhosted.org/packages/f7/d0/3c91e4e6a05ca4d7df8e39ec3a75b713609258ec84705ab34be6430826a1/xxhash-3.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7d9110d0c3fb02679972837a033251fd186c529aa62f19c132fc909c74052b8", size = 193937, upload-time = "2026-04-25T11:06:00.546Z" }, - { url = "https://files.pythonhosted.org/packages/4e/3a/a6b0772d9801dd4bea4ca4fd34734d6e9b51a711c8a611a24a79de26a878/xxhash-3.7.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:347a93f2b4ce67ce61959665e32a7447c380f8347e55e100daa23766baacf0e5", size = 285188, upload-time = "2026-04-25T11:06:01.96Z" }, - { url = "https://files.pythonhosted.org/packages/6c/f8/cf8e31fd7282230fe7367cd501a2e75b4b67b222bfc7eacccfc20d2652cb/xxhash-3.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:acbb48679ddf3852c45280c10ff10d52ca2cd1da2e552fb81db1ff786c75d0e4", size = 210966, upload-time = "2026-04-25T11:06:03.453Z" }, - { url = "https://files.pythonhosted.org/packages/cc/f0/fd36cc4a81bf52ee5633275daae2b93dd958aace67fd4f5d466ec83b5f35/xxhash-3.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:fe14c356f8b23ad811dc026077a6d4abccdaa7bce5ca98579605550657b6fcfb", size = 241994, upload-time = "2026-04-25T11:06:05.264Z" }, - { url = "https://files.pythonhosted.org/packages/08/e1/67f5d9c9369be42eaf99ba02c01bf14c5ecd67087b02567960bfcee43b63/xxhash-3.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f420ad3d41e38194353a498bbc9561fd5a9973a27b536ce46d8583479cf44335", size = 198707, upload-time = "2026-04-25T11:06:07.044Z" }, - { url = "https://files.pythonhosted.org/packages/50/17/a4c865ca22d2da6b1bc7d739bf88cab209533cf52ba06ca9da27c3039bee/xxhash-3.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:693d02c6dc7d1aa0a45921d54cd8c1ff629e09dfdc2238471507af1f7a1c6f04", size = 210917, upload-time = "2026-04-25T11:06:08.853Z" }, - { url = "https://files.pythonhosted.org/packages/49/8b/453b35810d697abac3c96bde3528bece685869227da274eb80a4a4d4a119/xxhash-3.7.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:14bf7a54e43825ec131ee7fe3c60e142e7c2c1e676ad0f93fc893432d15414af", size = 275772, upload-time = "2026-04-25T11:06:10.645Z" }, - { url = "https://files.pythonhosted.org/packages/b5/ad/4eed7eab07fd3ee6678f416190f0413d097ab5d7c1278906bf1e9549d789/xxhash-3.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ae3a39a4d96bdb6f8d154fd7f490c4ad06f0532fcd2bb656052a9a7762cf5d31", size = 414068, upload-time = "2026-04-25T11:06:12.511Z" }, { url = "https://files.pythonhosted.org/packages/d3/4e/fd6f8a680ba248fdb83054fa71a8bfa3891225200de1708b888ef2c49829/xxhash-3.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1cc07c639e3a77ef1d32987464d3e408565b8a3be57b545d3542b191054d9923", size = 191459, upload-time = "2026-04-25T11:06:14.07Z" }, { url = "https://files.pythonhosted.org/packages/54/c1/e57ac7317b1f58a92bab692da6d497e2a7ce44735b224e296347a7ecc754/xxhash-3.7.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ad3aa71e12ee634f22b39a0ff439357583706e50765f17f05550f92dbf128a23", size = 31232, upload-time = "2026-04-25T11:10:21.51Z" }, { url = "https://files.pythonhosted.org/packages/4f/4e/075559bd712bc62e84915ea46bbee859f935d285659082c129bdbff679dd/xxhash-3.7.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5de686e73690cdaf72b96d4fa083c230ec9020bcc2627ce6316138e2cf2fe2d1", size = 28553, upload-time = "2026-04-25T11:10:23.1Z" }, - { url = "https://files.pythonhosted.org/packages/92/ca/a9c78cb384d4b033b0c58196bd5c8509873cabe76389e195127b0302a741/xxhash-3.7.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7fbec49f5341bbdea0c471f7d1e2fb41ae8925af9b6f28025c28defd8eb94274", size = 41109, upload-time = "2026-04-25T11:10:25.022Z" }, - { url = "https://files.pythonhosted.org/packages/bd/b1/dfe2629f7c77eb2fa234c72ff537cdd64939763df704e256446ed364a16d/xxhash-3.7.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48b542c347c2089f43dc5a6db31d2a6f3cdb04ee33505ec6e9f653834dbb0bde", size = 36307, upload-time = "2026-04-25T11:10:26.949Z" }, { url = "https://files.pythonhosted.org/packages/e7/f7/5a484afce0f48dd8083208b42e4911f290a82c7b52458ef2927e4d421a45/xxhash-3.7.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a169a036bed0995e090d1493b283cc2cc8a6f5046821086b843abefff80643bc", size = 32534, upload-time = "2026-04-25T11:10:29.01Z" }, ] @@ -3334,17 +3214,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c5/c5/1ce244152ff2839645e7cae92f90e7bafcb2c52bea7ff586ac714f14f5df/yarl-1.24.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:36348bebb147b83818b9d7e673ea4debc75970afc6ffdc7e3975ad05ce5a58c1", size = 128971, upload-time = "2026-05-19T21:28:20.543Z" }, { url = "https://files.pythonhosted.org/packages/87/5a/00f36967203ed89cb3acd2c8ed526cc3fed9418eb70ce128160a911c8499/yarl-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a97e42c8a2233f2f279ecadd9e4a037bcb5d813b78435e8eedd4db5a9e9708c", size = 91507, upload-time = "2026-05-19T21:28:22.556Z" }, { url = "https://files.pythonhosted.org/packages/31/d0/1fb0c1cd27288f39f6974da4318c32768d72c9890984541fdf1e2e32a51d/yarl-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d027d56f1035e339d1001ac33eceab5b2ec8e42e449787bb75e289fb9a5cd1d", size = 91343, upload-time = "2026-05-19T21:28:24.092Z" }, - { url = "https://files.pythonhosted.org/packages/03/ce/d4a646508bed2f8dec6435b40166fe9308dd191262033d3f307b2bbcaecd/yarl-1.24.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a6377060e7927187a42b7eb202090cbe2b34933a4eeaf90e3bd9e33432e5cae", size = 105704, upload-time = "2026-05-19T21:28:25.872Z" }, - { url = "https://files.pythonhosted.org/packages/4b/07/b3278e82d8bc41485bcf6d856cd0433262593de615b1d3dc43bd3f5bead4/yarl-1.24.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:17076578bce0049a5ce57d14ad1bded391b68a3b213e9b81b0097b090244999a", size = 97281, upload-time = "2026-05-19T21:28:27.352Z" }, - { url = "https://files.pythonhosted.org/packages/17/5b/4cee6e7c92e487bebe7afc797da0aa54a248ab4e776a68fe369ec29665a5/yarl-1.24.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:50713f1d4d6be6375bb178bb43d140ee1acb8abe589cd723320b7925a275be1e", size = 114020, upload-time = "2026-05-19T21:28:29.458Z" }, - { url = "https://files.pythonhosted.org/packages/5c/82/111076571545a7d4f9cca3fbd5c6f40615af58642be09f12328f48022468/yarl-1.24.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:34263e2fa8fb5bb63a0d97706cda38edbad62fddb58c7f12d6acbc092812aa50", size = 111450, upload-time = "2026-05-19T21:28:31.262Z" }, { url = "https://files.pythonhosted.org/packages/b6/ec/08f671f69a444d704aeecebf92af659b67b97a869942411d0a578b08c334/yarl-1.24.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49016d82f032b1bd1e10b01078a7d29ae71bf468eeae0ea22df8bab691e60003", size = 106384, upload-time = "2026-05-19T21:28:32.856Z" }, - { url = "https://files.pythonhosted.org/packages/e5/86/ce41e7a7a199340b2330d52b60f25c4074b6636dd0e60b1a80d31a9db042/yarl-1.24.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3f6d2c216318f8f32038ca3f72501ba08536f0fd18a36e858836b121b2deed9f", size = 106153, upload-time = "2026-05-19T21:28:35.222Z" }, - { url = "https://files.pythonhosted.org/packages/c4/5d/31be8a729531ab3e55ac3e7e5c800be8c89ea98947f418b2f6ea259fb6ee/yarl-1.24.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:08d3a33218e0c64393e7610284e770409a9c31c429b078bcb24096ed0a783b8f", size = 105322, upload-time = "2026-05-19T21:28:36.642Z" }, - { url = "https://files.pythonhosted.org/packages/47/9b/b57afb22b386ae87ac9940f09878b98d8c333f89113e6fc96fcf4ca9eb64/yarl-1.24.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5d699376c4ca3cba49bbfae3a05b5b70ded572937171ce1e0b8d87118e2ba294", size = 99057, upload-time = "2026-05-19T21:28:38.386Z" }, - { url = "https://files.pythonhosted.org/packages/a3/4f/06348c27c8389256c313e8a57d796808fc0264c915dd5e7cfd3c0e314dc7/yarl-1.24.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a1cab588b4fa14bea2e55ebea27478adfb05372f47573738e1acc4a36c0b05d2", size = 113502, upload-time = "2026-05-19T21:28:40.091Z" }, - { url = "https://files.pythonhosted.org/packages/5f/1c/284f307b298e4a17b7943b07d9d7ecc4151537f8d137ba51f3bb6c31ca20/yarl-1.24.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:ec87ccc31bd21db7ad009d8572c127c1000f268517618a4cc09adba3c2a7f21c", size = 105253, upload-time = "2026-05-19T21:28:41.987Z" }, - { url = "https://files.pythonhosted.org/packages/c8/bf/0de123bec8619e45c80cbded9085f61b5b4a9eddb8abe6d25d28ee1ec866/yarl-1.24.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d1dd47a22843b212baa8d74f37796815d43bd046b42a0f41e9da433386c3136b", size = 111345, upload-time = "2026-05-19T21:28:43.93Z" }, { url = "https://files.pythonhosted.org/packages/90/af/0248eb065e51129d2a9b2436cd1b5c772c19a6b04e5b6a186955671e3319/yarl-1.24.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7b54b9c67c2b06bd7b9a77253d242124b9c95d2c02def5a1144001ee547dd9d5", size = 106558, upload-time = "2026-05-19T21:28:45.806Z" }, { url = "https://files.pythonhosted.org/packages/fd/4d/4b880086bd0d3e034d25647be1d830afc3e3f610e98c4ab3490af6b1b6d5/yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9", size = 53576, upload-time = "2026-05-19T21:31:03.909Z" }, ] From a8ab33a76b4bb0367c5dea16266e5f95dffee3d1 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 20:42:37 +0200 Subject: [PATCH 42/64] docs: new logo + cleaner README hero Replace the logo and drop the redundant

    text title (the logo carries the name) for a cleaner centered hero. Co-Authored-By: Claude Opus 4.8 --- README.md | 2 -- img/logo.png | Bin 758820 -> 761605 bytes 2 files changed, 2 deletions(-) diff --git a/README.md b/README.md index c1b0abfb..9f89698f 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,6 @@ TrialMatchAI -

    TrialMatchAI

    -

    AI-driven clinical trial matching. Import a patient — text, FHIR, Phenopacket, or OMOP — and get ranked, eligible trials with criterion-level eligibility explanations. Local LanceDB search + vLLM reasoning on a single GPU server; no Elasticsearch or hosted vector database to run.

    diff --git a/img/logo.png b/img/logo.png index 15a654b8b0a5cdc36875076fe6b855eb20a4e8f9..35dc671372a8b9cffdb62d69ae6b6b19d2dbc9ba 100644 GIT binary patch delta 745371 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

    e7i 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�XW!b%GcR#Ktudg9eM4$)BT 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

    2W*XG(19ObiDlfQa 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

    =V+i1 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

      W6S(e5W?vyrFsjIrG?PxqbaA@U@+xPCe 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
      ?7&dy)o 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 R?XVSIj5q^~Pn*PgT!}cT(P{tkt+3h~y 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 z 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%0DbgBF=e=k13ZA85W$QxDADv$kTo} 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 Date: Sun, 28 Jun 2026 20:43:44 +0200 Subject: [PATCH 43/64] docs: enlarge wide banner logo (220->480px) so it renders properly Co-Authored-By: Claude Opus 4.8 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f89698f..66e97d23 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

      -TrialMatchAI +TrialMatchAI

      AI-driven clinical trial matching. Import a patient — text, FHIR, Phenopacket, or OMOP — and get ranked, eligible trials with criterion-level eligibility explanations. Local LanceDB search + vLLM reasoning on a single GPU server; no Elasticsearch or hosted vector database to run.

      From 78b885c32bc6d07520987f7c1c9ec35ebbea8336 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 20:57:43 +0200 Subject: [PATCH 44/64] fix: resume/ingest correctness hardening (audit C1-H3) - Retry trials recorded as {"error":...} on resume instead of treating the failure file as done (eligibility_base). - Clear stale per-trial criteria before re-prepare so changed chunking can't orphan old criteria_id files into the index (registry/preparation). - Scope final ranking to the current shortlist so stale per-trial outputs from a prior different shortlist aren't scored (trial_ranker, main). - Source eligibility criteria from processed_trials (always built/bootstrapped) not raw trials_jsons (not downloaded by bootstrap) -> no silent all-zero eligibility; fail loud on missing/empty criteria (main, eligibility_base). - import-patient: atomic writes, summary-before-profile marker ordering. - Legacy index --prepare: per-doc try/except + criteria-before-trial ordering. Co-Authored-By: Claude Opus 4.8 --- src/trialmatchai/cli/import_patient.py | 16 ++++------ src/trialmatchai/cli/index_data.py | 31 +++++++++++++------ src/trialmatchai/main.py | 26 ++++++++++++++-- src/trialmatchai/matching/eligibility_base.py | 31 ++++++++++++++++--- src/trialmatchai/matching/trial_ranker.py | 12 ++++++- src/trialmatchai/registry/preparation.py | 7 +++++ 6 files changed, 96 insertions(+), 27 deletions(-) diff --git a/src/trialmatchai/cli/import_patient.py b/src/trialmatchai/cli/import_patient.py index de0587c2..242ea77b 100644 --- a/src/trialmatchai/cli/import_patient.py +++ b/src/trialmatchai/cli/import_patient.py @@ -1,7 +1,6 @@ from __future__ import annotations import argparse -import json import sys from pathlib import Path from typing import Any @@ -9,6 +8,7 @@ from trialmatchai.config.config_loader import load_config from trialmatchai.interop.exporters import profile_to_matching_summary from trialmatchai.interop.importers import import_patient_path +from trialmatchai.utils.file_utils import write_json_file from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -73,8 +73,11 @@ def main() -> int: for profile in profiles: profile_path = output_dir / f"{profile.patient_id}.json" summary_path = summary_dir / f"{profile.patient_id}.json" - _write_json(profile.model_dump(mode="json", exclude_none=True), profile_path) - _write_json(profile_to_matching_summary(profile), summary_path) + # Atomic writes, summary before profile: the profile is the completion + # marker downstream resume keys on, so it must land last (matches + # orchestration.ingest_inputs). + write_json_file(profile_to_matching_summary(profile), str(summary_path)) + write_json_file(profile.model_dump(mode="json", exclude_none=True), str(profile_path)) logger.info("Imported patient profile %s -> %s", profile.patient_id, profile_path) return 0 @@ -93,12 +96,5 @@ def _try_build_entity_annotator(config: dict[str, Any]): return None -def _write_json(payload: dict, path: Path) -> None: - path.write_text( - json.dumps(payload, indent=2, sort_keys=True, ensure_ascii=False), - encoding="utf-8", - ) - - if __name__ == "__main__": sys.exit(main()) diff --git a/src/trialmatchai/cli/index_data.py b/src/trialmatchai/cli/index_data.py index 0cf2c7fd..fd932c63 100644 --- a/src/trialmatchai/cli/index_data.py +++ b/src/trialmatchai/cli/index_data.py @@ -140,16 +140,29 @@ def _prepare_from_trials_jsons( embedder = build_embedder(config) entity_annotator = build_entity_annotator(config, embedder=embedder) trial_docs = _load_flat_json_folder(trials_json_folder) + prepared = failed = 0 for doc in trial_docs: - trial_row = prepare_trial_document(doc, embedder) - criteria_rows = prepare_criteria_documents( - doc, - embedder, - entity_annotator=entity_annotator, - ) - write_prepared_trial(trial_row, processed_trials_folder) - write_prepared_criteria(criteria_rows, processed_criteria_folder) - logger.info("Prepared %s trial JSON files from %s.", len(trial_docs), trials_json_folder) + nct_id = doc.get("nct_id", "") + try: + trial_row = prepare_trial_document(doc, embedder) + criteria_rows = prepare_criteria_documents( + doc, + embedder, + entity_annotator=entity_annotator, + ) + # Criteria before the trial marker so a crash mid-trial re-prepares it. + write_prepared_criteria(criteria_rows, processed_criteria_folder) + write_prepared_trial(trial_row, processed_trials_folder) + prepared += 1 + except Exception: + logger.exception("Failed to prepare trial %s; skipping", nct_id) + failed += 1 + logger.info( + "Prepared %s trial JSON files from %s (%s failed).", + prepared, + trials_json_folder, + failed, + ) def _resolve_path(value: str, root: Path) -> Path: diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index bbcc117f..2b244004 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -238,6 +238,21 @@ def run_second_level_search( return semi_final_trials, top_trials_path +def _criteria_source_folder(config: Dict) -> str: + """Folder the eligibility model reads each trial's criteria text from. + + Prefer ``processed_trials`` — always produced by ``build``/``bootstrap-data`` + and carrying the ``eligibility_criteria`` text — over the raw ``trials_jsons``, + which ``bootstrap-data`` does not download. Sourcing from the latter would make + the model silently reason over "no criteria" and score every trial 0. + """ + paths = config.get("paths", {}) + processed = paths.get("processed_trials_folder") or "data/processed_trials" + if Path(processed).is_dir(): + return str(processed) + return paths.get("trials_json_folder", "data/trials_jsons") + + def run_rag_processing( output_folder: str, top_trials_file: str, @@ -304,7 +319,7 @@ def run_rag_processing( rag_processor.process_trials( nct_ids=top_trials, - json_folder=config["paths"]["trials_json_folder"], + json_folder=_criteria_source_folder(config), output_folder=output_folder, patient_narrative=patient_narrative, ) @@ -495,11 +510,16 @@ def main_pipeline( ) with log_timing(logger, "Final ranking"): - trial_data = load_trial_data(str(output_folder)) + # Scope to this run's shortlist so stale per-trial files from a + # prior run with a different shortlist are not ranked. + second_level = dict(semi_final_trials) + trial_data = load_trial_data( + str(output_folder), allowed_ids=set(second_level) + ) ranked_trials = rank_trials( trial_data, first_level_scores=first_level_scores, - second_level_scores=dict(semi_final_trials), + second_level_scores=second_level, ) save_ranked_trials( ranked_trials, str(output_folder / "ranked_trials.json") diff --git a/src/trialmatchai/matching/eligibility_base.py b/src/trialmatchai/matching/eligibility_base.py index eb2aa00b..0d47534c 100644 --- a/src/trialmatchai/matching/eligibility_base.py +++ b/src/trialmatchai/matching/eligibility_base.py @@ -20,6 +20,21 @@ logger = setup_logging(__name__) +def _is_error_output(path: str) -> bool: + """True if a per-trial output is a recorded processing failure or unparseable. + + Used by the resume worklist so a transiently-failed trial (written as + ``{"error": ...}``) is retried on the next run instead of being treated as + done and locked into the ranking. + """ + try: + with open(path, "r", encoding="utf-8") as handle: + data = json.load(handle) + except Exception: + return True + return isinstance(data, dict) and "error" in data + + class BaseTrialProcessor: # Subclasses set these in __init__. tokenizer = None @@ -30,13 +45,18 @@ class BaseTrialProcessor: # ---------------------- I/O helpers ---------------------- def _load_trial_data(self, nct_id: str, json_folder: str) -> str: + path = f"{json_folder}/{nct_id}.json" try: - path = f"{json_folder}/{nct_id}.json" trial_data = read_json_file(path) - return trial_data.get("eligibility_criteria", "") except Exception as e: - logger.error(f"Error loading {nct_id}: {str(e)}") + # Fail loud: a missing/unreadable trial file means the eligibility + # model would silently reason over "no criteria" and score 0. + logger.error("Cannot load criteria for %s from %s: %s", nct_id, path, e) return "" + criteria = trial_data.get("eligibility_criteria", "") + if not criteria: + logger.warning("Trial %s has empty eligibility_criteria at %s", nct_id, path) + return criteria # ---------------------- Prompting ---------------------- @@ -225,7 +245,10 @@ def process_trials( items: List[Dict] = [] for nct_id in nct_ids: - if os.path.exists(f"{output_folder}/{nct_id}.json"): + existing = f"{output_folder}/{nct_id}.json" + # Skip only genuinely-completed trials; a recorded processing failure + # ({"error": ...}) or an unparseable file is retried, not locked in. + if os.path.exists(existing) and not _is_error_output(existing): logger.info(f"Skipping existing: {nct_id}") continue criteria_text = self._load_trial_data(nct_id, json_folder) diff --git a/src/trialmatchai/matching/trial_ranker.py b/src/trialmatchai/matching/trial_ranker.py index 5c094293..8b88b1ce 100644 --- a/src/trialmatchai/matching/trial_ranker.py +++ b/src/trialmatchai/matching/trial_ranker.py @@ -7,7 +7,15 @@ logger = setup_logging(__name__) -def load_trial_data(json_folder: str) -> List[Dict]: +def load_trial_data( + json_folder: str, allowed_ids: set[str] | None = None +) -> List[Dict]: + """Load per-trial eligibility outputs from a patient's result folder. + + ``allowed_ids`` scopes loading to the current shortlist, so per-trial files + left over from a prior run with a different shortlist (e.g. after the index + changed) are ignored instead of being scored into the final ranking. + """ trial_data = [] for file_name in os.listdir(json_folder): # Only NCT-named files are trials; skip run sidecars written to the same @@ -16,6 +24,8 @@ def load_trial_data(json_folder: str) -> List[Dict]: if file_name.endswith(".json") and file_name.upper().startswith("NCT"): file_path = os.path.join(json_folder, file_name) trial_id = os.path.splitext(file_name)[0] + if allowed_ids is not None and trial_id not in allowed_ids: + continue try: trial = read_json_file(file_path) trial["TrialID"] = trial_id diff --git a/src/trialmatchai/registry/preparation.py b/src/trialmatchai/registry/preparation.py index 4f9ae72f..8c8a864b 100644 --- a/src/trialmatchai/registry/preparation.py +++ b/src/trialmatchai/registry/preparation.py @@ -4,6 +4,7 @@ import json import os import re +import shutil import tempfile from collections.abc import Sequence from pathlib import Path @@ -188,6 +189,12 @@ def write_prepared_criteria(rows: Sequence[dict[str, Any]], folder: str | Path) if not rows: return 0 trial_folder = Path(folder) / str(rows[0]["nct_id"]) + # Clear stale criteria from a prior prepare first: criteria_id = sha256(nct:text), + # so changed chunking/text yields new files while orphaning the old ones, which + # the index would then ingest as duplicates. The trial-completion marker is + # written only after this, so a crash here is simply re-prepared on resume. + if trial_folder.exists(): + shutil.rmtree(trial_folder, ignore_errors=True) for row in rows: _atomic_write_text( trial_folder / f"{row['criteria_id']}.json", From 56ec030cddd83bbe44bcc9957288185db812e030 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 21:01:38 +0200 Subject: [PATCH 45/64] test: cover tie-aware nDCG, qrels eval, concept parsers, ranking tie-break 19 pure-function tests for the previously-untested new/changed code: tie-aware nDCG order-invariance (incl. cutoff-straddling ties) + P@k, qrels parse/evaluate, OBO/gene_info parsers, and the rank_trials reranker->first-level->NCT-id tie-break (+ load_trial_data shortlist scoping, guarding the C1 stale-output fix). Co-Authored-By: Claude Opus 4.8 --- tests/test_concept_sources.py | 51 ++++++++++++++++++++++++++ tests/test_metrics.py | 57 +++++++++++++++++++++++++++++ tests/test_qrels_eval.py | 53 +++++++++++++++++++++++++++ tests/test_trial_ranker_tiebreak.py | 47 ++++++++++++++++++++++++ 4 files changed, 208 insertions(+) create mode 100644 tests/test_concept_sources.py create mode 100644 tests/test_metrics.py create mode 100644 tests/test_qrels_eval.py create mode 100644 tests/test_trial_ranker_tiebreak.py diff --git a/tests/test_concept_sources.py b/tests/test_concept_sources.py new file mode 100644 index 00000000..89f10662 --- /dev/null +++ b/tests/test_concept_sources.py @@ -0,0 +1,51 @@ +"""Open-vocabulary parsers for the concept store (entities/concept_sources.py).""" + +from trialmatchai.entities.concept_sources import ( + OPEN_SOURCES, + _clean_names, + parse_gene_info, + parse_obo, +) + + +def test_parse_obo_filters_obsolete_and_prefix(tmp_path): + obo = tmp_path / "t.obo" + obo.write_text( + '[Term]\nid: CL:0001\nname: T cell\nsynonym: "T-cell" EXACT []\n\n' + "[Term]\nid: CL:0002\nname: dead cell\nis_obsolete: true\n\n" + "[Term]\nid: HP:0001\nname: seizure\n" + ) + rows = list(parse_obo(obo, "CL:")) + assert rows == [("CL:0001", ["T cell", "T-cell"])] # obsolete + non-CL dropped + + +def test_parse_gene_info_one_row(tmp_path): + tsv = tmp_path / "g.tsv" + tsv.write_text( + "#header\n" + "9606\t7157\tTP53\t-\tP53|LFS1\t-\t17\t17p13\t" + "tumor protein p53\tprotein-coding\tTP53\ttumor protein p53\tO\tp53\t-\n" + ) + rows = list(parse_gene_info(tsv)) + assert len(rows) == 1 + gene_id, names = rows[0] + assert gene_id == "7157" + assert names[0] == "TP53" and "P53" in names + + +def test_parse_gene_info_skips_short_lines(tmp_path): + tsv = tmp_path / "g.tsv" + tsv.write_text("9606\t7157\tTP53\n") # < 14 columns + assert list(parse_gene_info(tsv)) == [] + + +def test_clean_names_dedupes_casefold_and_strips_whitespace(): + assert _clean_names(["T cell", "t CELL", " ", "T-cell"]) == ["T cell", "T-cell"] + + +def test_open_sources_registry_well_formed(): + assert {"genes", "diseases", "chemicals", "cell_lines"} <= set(OPEN_SOURCES) + for src in OPEN_SOURCES.values(): + assert src.kind in {"obo", "gene_info"} + assert src.url.startswith("http") + assert src.dict_filename.startswith("dict_") diff --git a/tests/test_metrics.py b/tests/test_metrics.py new file mode 100644 index 00000000..5b95a3be --- /dev/null +++ b/tests/test_metrics.py @@ -0,0 +1,57 @@ +"""Tie-aware nDCG + precision (trec/metrics.py).""" + +from itertools import permutations + +from trialmatchai.trec.metrics import ( + condensed_ndcg, + idcg_at_k, + ndcg_at_k, + precision_at_k, +) + + +def test_perfect_ranking_scores_one(): + ids = ["a", "b", "c"] + score = {"a": 3.0, "b": 2.0, "c": 1.0} + gain = {"a": 2, "b": 1, "c": 0} + assert ndcg_at_k(ids, score, gain, 10) == 1.0 + + +def test_all_tied_is_order_invariant(): + # Every doc shares one score -> McSherry-Najork averaging must make nDCG + # identical across all orderings of the tie group. + gain = {"a": 2, "b": 1, "c": 0} + score = {k: 1.0 for k in gain} + values = {round(ndcg_at_k(list(p), score, gain, 10), 9) for p in permutations(gain)} + assert len(values) == 1 + + +def test_tie_group_straddling_cutoff_is_order_invariant(): + # Two tied docs straddling the k=1 boundary share the averaged discount, so + # swapping them cannot change nDCG@1. + gain = {"a": 1, "b": 0} + score = {"a": 0.5, "b": 0.5} + assert ndcg_at_k(["a", "b"], score, gain, 1) == ndcg_at_k(["b", "a"], score, gain, 1) + + +def test_zero_gain_gives_zero_ndcg(): + assert ndcg_at_k(["a", "b"], {"a": 1.0, "b": 0.5}, {"a": 0, "b": 0}, 10) == 0.0 + + +def test_idcg_uses_best_ordering(): + assert idcg_at_k([0, 2, 1], 10) == idcg_at_k([2, 1, 0], 10) + + +def test_precision_at_k_hard_cutoff(): + ordered = ["a", "x", "c", "y", "z"] + assert precision_at_k(ordered, {"a", "c"}, 10) == 2 / 10 # denominator is k + assert precision_at_k(ordered, {"a", "c"}, 2) == 1 / 2 # only 'a' in top-2 + + +def test_condensed_ndcg_drops_unjudged_and_grades_gains(): + ranked = ["a", "u", "b", "c"] # 'u' is unjudged + score = {"a": 1.0, "u": 0.9, "b": 0.5, "c": 0.0} + grade = {"a": 2, "b": 1, "c": 0} + out = condensed_ndcg(ranked, score, grade, (5, 10)) + assert set(out) == {5, 10} + assert out[10] == 1.0 # condensed order a,b,c is already ideal by grade diff --git a/tests/test_qrels_eval.py b/tests/test_qrels_eval.py new file mode 100644 index 00000000..48ef347d --- /dev/null +++ b/tests/test_qrels_eval.py @@ -0,0 +1,53 @@ +"""qrels parsing + evaluation (trec/qrels.py).""" + +import json + +import pytest + +from trialmatchai.trec.qrels import evaluate, parse_qrels, recall_at_k + + +def test_parse_qrels_prefixes_and_skips_malformed(tmp_path): + p = tmp_path / "q.txt" + p.write_text("1 0 NCT001 2\n1 0 NCT002 1\nbad line\n2 0 NCT003 0\n") + assert parse_qrels(p, "trec-") == { + "trec-1": {"NCT001": 2, "NCT002": 1}, + "trec-2": {"NCT003": 0}, + } + + +def test_parse_qrels_empty_raises(tmp_path): + p = tmp_path / "empty.txt" + p.write_text("\n# nothing parseable\n") + with pytest.raises(ValueError): + parse_qrels(p, "trec-") + + +def test_recall_at_k(): + assert recall_at_k(["a", "b", "c"], {"a", "c", "z"}, 3) == 2 / 3 + assert recall_at_k(["a"], set(), 3) is None # no relevant -> undefined + + +def test_evaluate_end_to_end(tmp_path): + q = "trec-1" + pdir = tmp_path / q + pdir.mkdir() + (pdir / "ranked_trials.json").write_text( + json.dumps( + { + "RankedTrials": [ + {"TrialID": "NCT1", "Score": 1.0}, + {"TrialID": "NCT2", "Score": 0.5}, + {"TrialID": "NCT3", "Score": 0.0}, + ] + } + ) + ) + (pdir / "nct_ids.txt").write_text("NCT1\nNCT2\nNCT3\n") + qrels = {q: {"NCT1": 2, "NCT2": 1, "NCT3": 0}} + res = evaluate(qrels, tmp_path, cutoffs=(10,)) + assert res["num_queries_scored"] == 1 + mean = res["mean"] + assert mean["recall@10"] == 1.0 # both relevant retrieved + assert mean["ndcg@10"] == 1.0 # ranking is the ideal grade order + assert mean["P@10(rel>=1)"] == 2 / 10 diff --git a/tests/test_trial_ranker_tiebreak.py b/tests/test_trial_ranker_tiebreak.py new file mode 100644 index 00000000..e12a75d2 --- /dev/null +++ b/tests/test_trial_ranker_tiebreak.py @@ -0,0 +1,47 @@ +"""Deterministic tie-break in rank_trials + shortlist scoping in load_trial_data.""" + +import json + +from trialmatchai.matching.trial_ranker import load_trial_data, rank_trials + + +def _eligible(): + # Identical eligibility -> identical Score, so the tie-break decides order. + return { + "Inclusion_Criteria_Evaluation": [{"Classification": "Met"}], + "Exclusion_Criteria_Evaluation": [], + } + + +def test_tiebreak_reranker_then_firstlevel_then_nctid(): + trials = [{"TrialID": f"NCT-{c}", **_eligible()} for c in "ABCDE"] + reranker = {"NCT-A": 0.9, "NCT-B": 0.9, "NCT-C": 0.5, "NCT-D": 0.5, "NCT-E": 0.5} + first = {"NCT-A": 0.1, "NCT-B": 0.5, "NCT-C": 0.9, "NCT-D": 0.5, "NCT-E": 0.5} + ranked = rank_trials( + trials, first_level_scores=first, second_level_scores=reranker + ) + order = [r["TrialID"] for r in ranked] + # equal Score: reranker 0.9 first (B>A by first-level), then 0.5 (C by first-level), + # then the full D/E tie resolves by ascending NCT id. + assert order == ["NCT-B", "NCT-A", "NCT-C", "NCT-D", "NCT-E"] + + +def test_tiebreak_is_deterministic_regardless_of_input_order(): + a = [{"TrialID": f"NCT-{c}", **_eligible()} for c in "ABC"] + reranker = {"NCT-A": 0.5, "NCT-B": 0.9, "NCT-C": 0.5} + out1 = [r["TrialID"] for r in rank_trials(a, second_level_scores=reranker)] + out2 = [r["TrialID"] for r in rank_trials(list(reversed(a)), second_level_scores=reranker)] + assert out1 == out2 == ["NCT-B", "NCT-A", "NCT-C"] + + +def test_load_trial_data_scopes_to_allowed_ids(tmp_path): + for nct in ["NCT1", "NCT2", "NCT3"]: + (tmp_path / f"{nct}.json").write_text( + json.dumps({"Inclusion_Criteria_Evaluation": []}) + ) + (tmp_path / "keywords.json").write_text("{}") # sidecar must be ignored + loaded = { + t["TrialID"] + for t in load_trial_data(str(tmp_path), allowed_ids={"NCT1", "NCT3"}) + } + assert loaded == {"NCT1", "NCT3"} # NCT2 (stale, off-shortlist) excluded From 0af219097fb8c1939db609ac1cbed77379869143 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 21:05:20 +0200 Subject: [PATCH 46/64] feat(registry): --watch server mode + robust criteria-source fallback - update-registry --watch --interval runs the incremental fetch->prepare->upsert loop continuously (server use case) with the embedder/annotator built once and a sliding lookback window; cron/systemd remain the alternative for one-shot. - Eligibility criteria now resolve via a fallback chain (processed_trials -> trials_jsons) so built, bootstrapped, AND newly registry-updated trials all load criteria text; fail loud only when no source has it. Co-Authored-By: Claude Opus 4.8 --- src/trialmatchai/cli/update_registry.py | 44 ++++++++++++++++--- src/trialmatchai/main.py | 28 +++++++----- src/trialmatchai/matching/eligibility_base.py | 30 +++++++------ 3 files changed, 72 insertions(+), 30 deletions(-) diff --git a/src/trialmatchai/cli/update_registry.py b/src/trialmatchai/cli/update_registry.py index b1bf5971..999737e3 100644 --- a/src/trialmatchai/cli/update_registry.py +++ b/src/trialmatchai/cli/update_registry.py @@ -3,6 +3,8 @@ import argparse import json import sys +import time +from dataclasses import replace from datetime import date, timedelta from pathlib import Path from typing import Any @@ -57,13 +59,25 @@ def main() -> int: default=None, help="Optional exact path for a copy of the run report JSON.", ) + parser.add_argument( + "--watch", + action="store_true", + help="Run continuously (server mode): update every --interval seconds.", + ) + parser.add_argument( + "--interval", + type=float, + default=86400.0, + help="Seconds between updates in --watch mode (default 24h).", + ) args = parser.parse_args() config = load_config(args.config) registry_cfg = config.get("registry", {}) paths_cfg = config.get("paths", {}) - since = _resolve_since(args.since, int(registry_cfg.get("since_days", 7))) + since_days = int(registry_cfg.get("since_days", 7)) + since = _resolve_since(args.since, since_days) keywords = normalize_keywords( [ *args.keyword, @@ -111,11 +125,31 @@ def main() -> int: embedder=embedder, entity_annotator=entity_annotator, ) - report = updater.run(update_config) - - if args.report_path: - _write_report_copy(Path(args.report_path), report.to_dict()) + if not args.watch: + return _run_and_report(updater, update_config, args.report_path) + logger.info( + "Registry watch mode: updating every %.0fs (Ctrl-C to stop).", args.interval + ) + while True: + # Slide the lookback window forward each cycle (unless --since is pinned); + # unchanged studies are deduped by the manifest, so overlap is cheap. + cycle_config = replace(update_config, since=_resolve_since(args.since, since_days)) + try: + _run_and_report(updater, cycle_config, args.report_path) + except Exception: + logger.exception("Registry update cycle failed; retrying next interval") + try: + time.sleep(args.interval) + except KeyboardInterrupt: + logger.info("Registry watch stopped.") + return 0 + + +def _run_and_report(updater: RegistryUpdater, update_config, report_path) -> int: + report = updater.run(update_config) + if report_path: + _write_report_copy(Path(report_path), report.to_dict()) logger.info("Registry update report: %s", json.dumps(report.to_dict(), sort_keys=True)) return 1 if report.failure_rate > update_config.failure_threshold else 0 diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index 2b244004..a7028e08 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -238,19 +238,23 @@ def run_second_level_search( return semi_final_trials, top_trials_path -def _criteria_source_folder(config: Dict) -> str: - """Folder the eligibility model reads each trial's criteria text from. - - Prefer ``processed_trials`` — always produced by ``build``/``bootstrap-data`` - and carrying the ``eligibility_criteria`` text — over the raw ``trials_jsons``, - which ``bootstrap-data`` does not download. Sourcing from the latter would make - the model silently reason over "no criteria" and score every trial 0. +def _criteria_source_folders(config: Dict) -> list[str]: + """Folders to read each trial's criteria text from, in priority order. + + Both carry the ``eligibility_criteria`` text but cover different provenance, + so trying both makes every trial resolve regardless of how it was added: + * ``processed_trials`` — written by ``build``/``bootstrap-data``. + * ``trials_jsons`` — written by ``build`` and the registry updater. + Sourcing from only one would make the eligibility model silently reason over + "no criteria" (and score 0) for the trials that folder is missing. """ paths = config.get("paths", {}) - processed = paths.get("processed_trials_folder") or "data/processed_trials" - if Path(processed).is_dir(): - return str(processed) - return paths.get("trials_json_folder", "data/trials_jsons") + candidates = [ + paths.get("processed_trials_folder") or "data/processed_trials", + paths.get("trials_json_folder", "data/trials_jsons"), + ] + folders = [str(c) for c in candidates if Path(c).is_dir()] + return folders or [str(candidates[-1])] def run_rag_processing( @@ -319,7 +323,7 @@ def run_rag_processing( rag_processor.process_trials( nct_ids=top_trials, - json_folder=_criteria_source_folder(config), + json_folder=_criteria_source_folders(config), output_folder=output_folder, patient_narrative=patient_narrative, ) diff --git a/src/trialmatchai/matching/eligibility_base.py b/src/trialmatchai/matching/eligibility_base.py index 0d47534c..f9549173 100644 --- a/src/trialmatchai/matching/eligibility_base.py +++ b/src/trialmatchai/matching/eligibility_base.py @@ -44,19 +44,23 @@ class BaseTrialProcessor: # ---------------------- I/O helpers ---------------------- - def _load_trial_data(self, nct_id: str, json_folder: str) -> str: - path = f"{json_folder}/{nct_id}.json" - try: - trial_data = read_json_file(path) - except Exception as e: - # Fail loud: a missing/unreadable trial file means the eligibility - # model would silently reason over "no criteria" and score 0. - logger.error("Cannot load criteria for %s from %s: %s", nct_id, path, e) - return "" - criteria = trial_data.get("eligibility_criteria", "") - if not criteria: - logger.warning("Trial %s has empty eligibility_criteria at %s", nct_id, path) - return criteria + def _load_trial_data(self, nct_id: str, json_folder) -> str: + # json_folder may be a single folder or an ordered list of fallbacks + # (processed_trials, then trials_jsons) so built, bootstrapped, and + # newly-updated trials all resolve. + folders = [json_folder] if isinstance(json_folder, str) else list(json_folder) + for folder in folders: + try: + trial_data = read_json_file(f"{folder}/{nct_id}.json") + except Exception: + continue + criteria = trial_data.get("eligibility_criteria", "") + if criteria: + return criteria + # Fail loud: no source had criteria text, so the model would otherwise + # silently reason over "no criteria" and score this trial 0. + logger.error("No eligibility criteria found for %s in %s", nct_id, folders) + return "" # ---------------------- Prompting ---------------------- From 90c89de0bbc75555b8c5f718890d84f1d4ed8183 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 21:08:15 +0200 Subject: [PATCH 47/64] docs: fix inaccuracies, document registry update flow + add dependabot - architecture.md: trialmatchai-run matches already-imported profiles (not raw inputs); finetuning.md: correct merged-model config keys (base_model / reranker_model_path, not 'cot model'); release.md: smoke-test all 12 entry points. - README: document update-registry as a full fetch->prepare->index step + the new --watch server mode. - Add .github/dependabot.yml grouping the optional ML stack to cut advisory noise. Co-Authored-By: Claude Opus 4.8 --- .github/dependabot.yml | 27 +++++++++++++++++++++++++++ README.md | 17 ++++++++++++++--- docs/architecture.md | 2 +- docs/finetuning.md | 5 +++-- docs/release.md | 6 ++++++ 5 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..60c5be42 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,27 @@ +version: 2 +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 5 + groups: + # The heavy ML stack lives in optional extras and is intentionally pinned to + # versions compatible with vLLM (see the CI pip-audit policy). Collapse its + # frequent advisories into one low-noise PR instead of dozens. + ml-stack: + patterns: + - "torch*" + - "vllm*" + - "transformers*" + - "accelerate*" + - "bitsandbytes*" + - "nvidia-*" + - "xformers*" + dev-dependencies: + dependency-type: "development" + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/README.md b/README.md index 66e97d23..d36644d6 100644 --- a/README.md +++ b/README.md @@ -141,13 +141,24 @@ uv run trialmatchai e2e --input data/patients/omop_extract Results land in `results//` (ranked trials + eligibility explanations). Re-running skips patients already matched. -### Health and maintenance +### Health and keeping trials current ```bash -uv run trialmatchai-healthcheck # validate config/paths/deps -uv run trialmatchai-update-registry --since 2026-06-01 # pull new ClinicalTrials.gov studies +uv run trialmatchai-healthcheck # validate config/paths/deps ``` +Fold new/changed ClinicalTrials.gov studies into the **live index** — fetch → +embed + entity-annotate → upsert, incremental and idempotent (unchanged studies +are skipped via a manifest, so it is safe to re-run): + +```bash +uv run trialmatchai update-registry --since 2026-06-01 # one-shot +uv run trialmatchai update-registry --watch --interval 86400 # server: update daily +``` + +For a one-shot cadence you can also drive `update-registry` from cron, a systemd +timer, or GitHub Actions — see [docs/registry-updater.md](docs/registry-updater.md). +
      Manual / advanced control (the steps build and e2e wrap) diff --git a/docs/architecture.md b/docs/architecture.md index 685e6374..8466aa15 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -18,7 +18,7 @@ TrialMatchAI is an installable Python package exposed as `trialmatchai`. The sup 2. Raw source JSON is written to `data/registry/raw/.json`. 3. Normalized trial JSON is written to `data/trials_jsons/.json`. 4. Changed studies are embedded, criteria are optionally entity annotated, and LanceDB trial/criteria tables are upserted. -5. `trialmatchai-run` reads patient inputs, queries LanceDB, reranks candidate criteria/trials, and writes results. +5. `trialmatchai-run` matches already-imported patient profiles against LanceDB, reranks candidate criteria/trials, and writes results. (Ingest raw patient inputs first with `trialmatchai-import-patient`, or use `trialmatchai-e2e` to ingest and match in one step.) ## Storage diff --git a/docs/finetuning.md b/docs/finetuning.md index 3c58b5bf..60177407 100644 --- a/docs/finetuning.md +++ b/docs/finetuning.md @@ -39,8 +39,9 @@ trialmatchai-finetune merge \ --output-dir models/reranker-merged ``` -Then point the config at the merged directory (`reranker_model_path` / -`cot model`) and leave the adapter path empty. +Then point the config at the merged directory (`model.reranker_model_path` for +the reranker, `model.base_model` for the merged CoT model) and leave the matching +adapter path (`model.reranker_adapter_path` / `model.cot_adapter_path`) empty. ## 2. Fine-tuning diff --git a/docs/release.md b/docs/release.md index 468963d0..2db6181b 100644 --- a/docs/release.md +++ b/docs/release.md @@ -18,10 +18,16 @@ Smoke test console commands: ```bash uv run trialmatchai --help uv run trialmatchai-healthcheck --help +uv run trialmatchai-bootstrap-data --help +uv run trialmatchai-build --help uv run trialmatchai-index --help uv run trialmatchai-build-concepts --help uv run trialmatchai-update-registry --help +uv run trialmatchai-import-patient --help uv run trialmatchai-run --help +uv run trialmatchai-e2e --help +uv run trialmatchai-trec --help +uv run trialmatchai-finetune --help ``` Wheel install smoke: From 7fbdc2aae892ae659b642dc0bc208ebf023fbc9f Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 21:13:48 +0200 Subject: [PATCH 48/64] feat(build): one-flag entity linking + document resource acquisition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 'trialmatchai build --concepts' builds the open-vocabulary concept store (auto-downloaded) so entity linking works out of the box; --concepts-csv adds OMOP on top. No separate build-concepts command needed for the common case. - README: 'What gets fetched, and how' table — corpus + adapters via bootstrap, models/embedder via HuggingFace, concepts via --concepts; only gated base models (one-time hf login) and OMOP vocab are manual. - finetuning.md: state plainly that adapters are bootstrapped and raw training data is not published (bring-your-own JSONL in the documented schema). --- README.md | 20 ++++++++++++++++++-- docs/finetuning.md | 7 +++++++ src/trialmatchai/cli/build.py | 31 ++++++++++++++++++++++--------- 3 files changed, 47 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index d36644d6..3f72ab90 100644 --- a/README.md +++ b/README.md @@ -122,12 +122,28 @@ uv run trialmatchai build --status # see exactly what is built (and what isn't `build` fails fast if a GPU, an extra, or model access is missing — and resumes from where it left off if interrupted. Bringing your **own** trials instead of bootstrapping? Put normalized JSON in `data/trials_jsons/` and `build` will -prepare them. To also enable concept linking, pass an OMOP vocabulary: +prepare them. To enable entity→concept linking, add `--concepts` (open +vocabularies, **auto-downloaded**) — and optionally an OMOP `CONCEPT.csv` for +SNOMED/LOINC/RxNorm on top: ```bash -uv run trialmatchai build --concepts-csv data/omop/CONCEPT.csv --synonym-csv data/omop/CONCEPT_SYNONYM.csv +uv run trialmatchai build --concepts # genes, diseases, chemicals, cells, phenotypes +uv run trialmatchai build --concepts --concepts-csv data/omop/CONCEPT.csv --synonym-csv data/omop/CONCEPT_SYNONYM.csv ``` +#### What gets fetched, and how + +| Resource | How you get it | Automatic? | +| --- | --- | --- | +| Trial corpus (`processed_trials` + criteria) | `trialmatchai-bootstrap-data` (Zenodo) | ✅ automatic | +| Fine-tuned LoRA adapters (CoT + reranker) | `trialmatchai-bootstrap-data` (Zenodo) | ✅ automatic | +| Embedder (`BAAI/bge-m3`) | downloaded from HuggingFace on first use | ✅ automatic | +| Concept-linking vocabularies (genes, diseases, …) | `trialmatchai build --concepts` | ✅ automatic | +| Base LLMs (`microsoft/phi-4`, `google/gemma-2-2b-it`) | HuggingFace on first use | ⚠️ automatic, but **gated** models need a **one-time** `hf auth login` + accepting the model licence | +| OMOP clinical vocab (SNOMED/LOINC/RxNorm) | download `CONCEPT.csv` from [OHDSI Athena](https://athena.ohdsi.org/) | ❌ manual (licensed); linking works without it | + +So a from-scratch user runs **two commands** (`bootstrap-data`, then `build --concepts`) after a one-time `hf auth login`. Everything else is pulled on demand. + ### 2. Match patients — repeatably `e2e` ingests the patient (format auto-detected) and matches in one command: diff --git a/docs/finetuning.md b/docs/finetuning.md index 60177407..468ee5e7 100644 --- a/docs/finetuning.md +++ b/docs/finetuning.md @@ -11,6 +11,13 @@ checkpoints/adapters via config, and train those adapters with the built-in | Reranker | `google/gemma-2-2b-it` | `model.reranker_adapter_path` | LoRA adapter | | CoT eligibility | configured CoT model | `model.cot_adapter_path` | LoRA adapter | +> **Where does the training data come from?** Fine-tuning is **optional** — the +> ready-to-use CoT and reranker adapters are downloaded by `trialmatchai-bootstrap-data`, +> so most deployments never need to train. The **raw training datasets are not +> published**; to re-train, bring your own JSONL in the schemas shown below +> (`data/finetune/*.jsonl`). Each line is a self-contained example, so you can +> assemble a dataset from your own annotated patient–trial pairs. + Install the training dependencies: ```bash diff --git a/src/trialmatchai/cli/build.py b/src/trialmatchai/cli/build.py index 66cfe36c..557c590e 100644 --- a/src/trialmatchai/cli/build.py +++ b/src/trialmatchai/cli/build.py @@ -7,7 +7,8 @@ trialmatchai build # prepare (resumable) + index trialmatchai build --status # report what is already built, then exit - trialmatchai build --concepts-csv data/omop/CONCEPT.csv # also build concept DB + trialmatchai build --concepts # also build the open concept-linking DB + trialmatchai build --concepts --concepts-csv data/omop/CONCEPT.csv # + OMOP vocab """ from __future__ import annotations @@ -36,10 +37,16 @@ def main() -> int: ) parser.add_argument("--processed-trials-folder", default="data/processed_trials") parser.add_argument("--processed-criteria-folder", default="data/processed_criteria") + parser.add_argument( + "--concepts", + action="store_true", + help="Also build the concept-linking DB from open vocabularies " + "(genes, diseases, chemicals, cell lines, cell types, phenotypes; auto-downloaded).", + ) parser.add_argument( "--concepts-csv", default=None, - help="OMOP CONCEPT.csv to also build the concept-linking DB (optional).", + help="OMOP CONCEPT.csv to add SNOMED/LOINC/RxNorm to the concept DB (optional).", ) parser.add_argument("--synonym-csv", default=None, help="OMOP CONCEPT_SYNONYM.csv (optional).") parser.add_argument("--force-prepare", action="store_true", help="Re-prepare all trials.") @@ -77,14 +84,19 @@ def main() -> int: force_reindex=args.reindex, ) - # Optional: chain concept-DB build (needs user-supplied OMOP CSV). - if args.concepts_csv: + # Optional: chain the concept-DB build. --concepts pulls the open vocabularies + # (auto-downloaded); --concepts-csv adds the licensed OMOP vocab on top. + if args.concepts or args.concepts_csv: logger.info("=== build: concepts stage ===") from trialmatchai.cli.build_concepts import main as build_concepts_main - argv = ["--concept-csv", args.concepts_csv] - if args.synonym_csv: - argv += ["--synonym-csv", args.synonym_csv] + argv: list[str] = [] + if args.concepts: + argv += ["--sources", "open"] + if args.concepts_csv: + argv += ["--concept-csv", args.concepts_csv] + if args.synonym_csv: + argv += ["--synonym-csv", args.synonym_csv] if args.config: argv += ["--config", args.config] saved = sys.argv @@ -95,8 +107,9 @@ def main() -> int: sys.argv = saved else: logger.warning( - "Concept DB not built (no --concepts-csv): entity->concept linking will " - "degrade gracefully. Supply an OMOP CONCEPT.csv to enable it." + "Concept DB not built: entity->concept linking will degrade gracefully. " + "Run `trialmatchai build --concepts` to enable it (open vocabularies, " + "auto-downloaded); add --concepts-csv for OMOP SNOMED/LOINC/RxNorm." ) state = build_state( From a3cb8411ee2c5b5fe9bb691a3b01c603ebb80dc0 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 21:27:08 +0200 Subject: [PATCH 49/64] feat(bootstrap): --finetune-data fetches the published training datasets The fine-tuning datasets (CoT/reranker/NER JSONL) ARE published on the paper's Zenodo deposit (record 15045515). Add 'trialmatchai-bootstrap-data --finetune-data' to download + extract them to data/finetune/ (opt-in; safe extract + optional SHA256). Correct finetuning.md and the README resource table accordingly. --- README.md | 1 + docs/finetuning.md | 14 +++++++--- src/trialmatchai/cli/bootstrap_data.py | 36 +++++++++++++++++++++++++- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 3f72ab90..55fbe613 100644 --- a/README.md +++ b/README.md @@ -137,6 +137,7 @@ uv run trialmatchai build --concepts --concepts-csv data/omop/CONCEPT.csv --syno | --- | --- | --- | | Trial corpus (`processed_trials` + criteria) | `trialmatchai-bootstrap-data` (Zenodo) | ✅ automatic | | Fine-tuned LoRA adapters (CoT + reranker) | `trialmatchai-bootstrap-data` (Zenodo) | ✅ automatic | +| Fine-tuning datasets (only if you re-train) | `trialmatchai-bootstrap-data --finetune-data` (Zenodo) | ✅ automatic (opt-in) | | Embedder (`BAAI/bge-m3`) | downloaded from HuggingFace on first use | ✅ automatic | | Concept-linking vocabularies (genes, diseases, …) | `trialmatchai build --concepts` | ✅ automatic | | Base LLMs (`microsoft/phi-4`, `google/gemma-2-2b-it`) | HuggingFace on first use | ⚠️ automatic, but **gated** models need a **one-time** `hf auth login` + accepting the model licence | diff --git a/docs/finetuning.md b/docs/finetuning.md index 468ee5e7..749805f4 100644 --- a/docs/finetuning.md +++ b/docs/finetuning.md @@ -13,10 +13,16 @@ checkpoints/adapters via config, and train those adapters with the built-in > **Where does the training data come from?** Fine-tuning is **optional** — the > ready-to-use CoT and reranker adapters are downloaded by `trialmatchai-bootstrap-data`, -> so most deployments never need to train. The **raw training datasets are not -> published**; to re-train, bring your own JSONL in the schemas shown below -> (`data/finetune/*.jsonl`). Each line is a self-contained example, so you can -> assemble a dataset from your own annotated patient–trial pairs. +> so most deployments never need to train. The **published training datasets** are +> available too — fetch them into `data/finetune/`: +> +> ```bash +> trialmatchai-bootstrap-data --finetune-data +> ``` +> +> (Source: the paper's Zenodo deposit, .) +> Or bring your own JSONL in the schemas shown below — each line is a self-contained +> example, so you can assemble a dataset from your own annotated patient–trial pairs. Install the training dependencies: diff --git a/src/trialmatchai/cli/bootstrap_data.py b/src/trialmatchai/cli/bootstrap_data.py index bdf2eb6f..4a13cbef 100644 --- a/src/trialmatchai/cli/bootstrap_data.py +++ b/src/trialmatchai/cli/bootstrap_data.py @@ -15,10 +15,15 @@ DATA_URL = "https://zenodo.org/records/15516900/files/processed_trials.tar.gz?download=1" MODELS_URL = "https://zenodo.org/records/15516900/files/models.tar.gz?download=1" CRITERIA_ZIP_BASE_URL = "https://zenodo.org/records/15516900/files" +# Fine-tuning datasets (CoT/reranker/NER JSONL) live on the paper's deposit. +FINETUNE_DATA_URL = ( + "https://zenodo.org/records/15045515/files/finetuning_datasets.zip?download=1" +) CHUNK_PREFIX = "criteria_part" CHUNK_COUNT = 6 PROCESSED_TRIALS_ARCHIVE = "processed_trials.tar.gz" MODELS_ARCHIVE = "models.tar.gz" +FINETUNE_ARCHIVE = "finetuning_datasets.zip" def main(argv: Sequence[str] | None = None) -> int: @@ -57,6 +62,16 @@ def main(argv: Sequence[str] | None = None) -> int: action="store_true", help="Do not download or extract model artifacts", ) + parser.add_argument( + "--finetune-data", + action="store_true", + help="Also download the fine-tuning datasets (CoT/reranker/NER JSONL) to data/finetune/.", + ) + parser.add_argument( + "--finetune-data-url", + default=FINETUNE_DATA_URL, + help="finetuning_datasets.zip URL", + ) parser.add_argument( "--force", action="store_true", @@ -72,6 +87,8 @@ def main(argv: Sequence[str] | None = None) -> int: criteria_base_url=args.criteria_base_url, criteria_chunks=args.criteria_chunks, skip_models=args.skip_models, + finetune_data=args.finetune_data, + finetune_data_url=args.finetune_data_url, force=args.force, ) return 0 @@ -85,6 +102,8 @@ def bootstrap_data( criteria_base_url: str = CRITERIA_ZIP_BASE_URL, criteria_chunks: int = CHUNK_COUNT, skip_models: bool = False, + finetune_data: bool = False, + finetune_data_url: str = FINETUNE_DATA_URL, force: bool = False, ) -> None: data_dir = root / "data" @@ -124,6 +143,17 @@ def bootstrap_data( _verify_sha256(models_archive, os.getenv("TRIALMATCHAI_MODELS_SHA256")) _safe_extract_tar_gz(models_archive, models_dir) + if finetune_data: + finetune_dir = data_dir / "finetune" + if force or not _has_entries(finetune_dir): + finetune_dir.mkdir(parents=True, exist_ok=True) + finetune_archive = data_dir / FINETUNE_ARCHIVE + _download_if_missing(finetune_data_url, finetune_archive) + _verify_sha256( + finetune_archive, os.getenv("TRIALMATCHAI_FINETUNE_DATA_SHA256") + ) + _safe_extract_zip(finetune_archive, finetune_dir) + _cleanup_archives(data_dir, criteria_chunks) @@ -196,7 +226,11 @@ def _validated_target_path(target: Path, member_name: str) -> Path: def _cleanup_archives(data_dir: Path, criteria_chunks: int) -> None: - for path in [data_dir / PROCESSED_TRIALS_ARCHIVE, data_dir / MODELS_ARCHIVE]: + for path in [ + data_dir / PROCESSED_TRIALS_ARCHIVE, + data_dir / MODELS_ARCHIVE, + data_dir / FINETUNE_ARCHIVE, + ]: path.unlink(missing_ok=True) for index in range(criteria_chunks): (data_dir / f"{CHUNK_PREFIX}_{index}.zip").unlink(missing_ok=True) From 03ac89b50ced6cd20e07bcaaefda40f25af50ac7 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 22:26:58 +0200 Subject: [PATCH 50/64] fix: idempotency quick wins (concepts, run, prepare) - build-concepts is now idempotent: skip the re-embed if the concept table is already built (unless --force, or folding in OMOP via --concept-csv). Replaces the always-True --recreate that re-embedded 603k concepts every run. - run: resume by default (skip patients with valid results); --force re-matches. Previously re-matched every patient (resume defaulted off). - prepare skip now uses is_valid_json_file, not bare .exists(), so a corrupt prepared trial JSON is re-prepared instead of silently skipped. --- src/trialmatchai/cli/build_concepts.py | 38 ++++++++++++++++++++++---- src/trialmatchai/cli/run.py | 8 +++++- src/trialmatchai/orchestration.py | 3 +- 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/trialmatchai/cli/build_concepts.py b/src/trialmatchai/cli/build_concepts.py index 3be18d7d..ed2d8bbf 100644 --- a/src/trialmatchai/cli/build_concepts.py +++ b/src/trialmatchai/cli/build_concepts.py @@ -71,10 +71,10 @@ def main() -> int: help="Create an FTS-only table without model embeddings.", ) parser.add_argument( - "--recreate", - action=argparse.BooleanOptionalAction, - default=True, - help="Overwrite the target table if it exists.", + "--force", + action="store_true", + help="Rebuild (re-embed) the concept table even if it already exists " + "(default: skip if present).", ) args = parser.parse_args() @@ -86,6 +86,20 @@ def main() -> int: if not args.concept_csv and not args.dictionary and not args.sources: parser.error("provide --concept-csv, --sources, and/or at least one --dictionary") + # Idempotent: skip the (expensive) re-embed if the table is already built, + # unless --force or a new OMOP vocab (--concept-csv) is being folded in. + if not args.force and not args.concept_csv: + ready, rows_present = _concept_table_ready(db_path, table_name) + if ready: + logger.info( + "Concept store already present at %s/%s (%s concepts); skipping. " + "Use --force to rebuild.", + db_path, + table_name, + rows_present, + ) + return 0 + # Collect dictionary specs from explicit --dictionary flags and bundled --sources. dictionary_specs: list[tuple[str, str, str]] = [ _parse_dictionary_spec(spec) for spec in args.dictionary @@ -126,7 +140,7 @@ def main() -> int: db_path=db_path, table_name=table_name, embeddings=embeddings, - recreate=args.recreate, + recreate=True, ) logger.info("Wrote %s concepts to %s/%s", len(rows), db_path, table_name) return 0 @@ -142,5 +156,19 @@ def _parse_dictionary_spec(spec: str) -> tuple[str, str, str]: return parts[0], parts[1], parts[2] +def _concept_table_ready(db_path: str, table_name: str) -> tuple[bool, int]: + """Return (table exists and is non-empty, row count) for the concept table.""" + try: + import lancedb + + db = lancedb.connect(str(db_path)) + if table_name not in db.table_names(): + return False, 0 + count = db.open_table(table_name).count_rows() + return count > 0, count + except Exception: + return False, 0 + + if __name__ == "__main__": sys.exit(main()) diff --git a/src/trialmatchai/cli/run.py b/src/trialmatchai/cli/run.py index be50f1ac..40898e99 100644 --- a/src/trialmatchai/cli/run.py +++ b/src/trialmatchai/cli/run.py @@ -7,12 +7,18 @@ def main() -> int: parser = argparse.ArgumentParser(description="Run the TrialMatchAI batch pipeline") parser.add_argument("--config", default=None, help="Path to config.json") + parser.add_argument( + "--force", + action="store_true", + help="Re-match every patient, ignoring existing results (default: resume/skip done).", + ) args = parser.parse_args() from trialmatchai.main import main_pipeline from trialmatchai.orchestration import free_models try: - return main_pipeline(args.config) + # Idempotent by default: skip patients with valid results. --force redoes all. + return main_pipeline(args.config, resume=not args.force) finally: free_models() diff --git a/src/trialmatchai/orchestration.py b/src/trialmatchai/orchestration.py index 28c815f7..8eeeda36 100644 --- a/src/trialmatchai/orchestration.py +++ b/src/trialmatchai/orchestration.py @@ -376,7 +376,8 @@ def prepare_corpus( pending = [ p for p in all_paths - if force or not (processed_trials_folder / f"{p.stem}.json").exists() + if force + or not is_valid_json_file(str(processed_trials_folder / f"{p.stem}.json")) ] skipped = len(all_paths) - len(pending) logger.info( From 7e683808b1f475d9635e79c5892bfa4318805767 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 22:30:37 +0200 Subject: [PATCH 51/64] test: TREC reproduction regression guard Pin the tie-aware nDCG closed form (+ value), the qrels corpus restriction (corpus_ncts), and relevance thresholds so folding trec into the unified pipeline cannot silently change a benchmark number. --- tests/test_trec_reproduction.py | 46 +++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 tests/test_trec_reproduction.py diff --git a/tests/test_trec_reproduction.py b/tests/test_trec_reproduction.py new file mode 100644 index 00000000..b79b81cb --- /dev/null +++ b/tests/test_trec_reproduction.py @@ -0,0 +1,46 @@ +"""Regression guard for the TREC reproduction. + +Locks the reproduction-critical behavior — the tie-aware nDCG algorithm, the +corpus restriction, and the relevance thresholds — so the pipeline unification +(folding `trec` into a preset over the one e2e pipeline) cannot silently change a +benchmark number. If any of these change, that is a deliberate decision, not an +accident. +""" + +import math + +from trialmatchai.trec.metrics import ndcg_at_k +from trialmatchai.trec.qrels import corpus_ncts, relevant_ncts + + +def test_tie_aware_ndcg_matches_mcsherry_najork_closed_form(): + # Three docs tied at one score: each gets the MEAN discount over the ranks the + # tie group occupies (McSherry-Najork). Recompute the reference independently. + def d(r): + return 1.0 / math.log2(r + 1) + + mean_disc = (d(1) + d(2) + d(3)) / 3 + dcg = (2 + 1 + 0) * mean_disc + idcg = 2 * d(1) + 1 * d(2) + 0 * d(3) + expected = dcg / idcg + + got = ndcg_at_k( + ["a", "b", "c"], {"a": 1.0, "b": 1.0, "c": 1.0}, {"a": 2, "b": 1, "c": 0}, 10 + ) + assert abs(got - expected) < 1e-9 + assert round(got, 4) == 0.8100 # pinned: flags any drift in the averaging + + +def test_corpus_ncts_is_union_of_judged_trials(): + # The per-run index is restricted to this set (the qrels-judged pool). + qrels = { + "trec-1": {"NCT1": 2, "NCT2": 0}, + "trec-2": {"NCT2": 1, "NCT3": 2}, + } + assert corpus_ncts(qrels) == {"NCT1", "NCT2", "NCT3"} + + +def test_relevant_ncts_threshold(): + qrels = {"q": {"NCT1": 2, "NCT2": 1, "NCT3": 0}} + assert relevant_ncts(qrels, threshold=1) == {"q": {"NCT1", "NCT2"}} # relevant + assert relevant_ncts(qrels, threshold=2) == {"q": {"NCT1"}} # eligible-only From 1987b06a315650fc8d72c734d9d80de4ba370729 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 22:33:43 +0200 Subject: [PATCH 52/64] refactor(index): route legacy index CLI to the idempotent orchestration trialmatchai-index now delegates to prepare_corpus (resumable) + build_index (skip-if-exists), removing its own non-resumable prepare loop and the always-overwrite (recreate=True) index. One prepare impl, one index impl. --recreate/--skip-trials/--skip-criteria replaced by --reindex/--force-prepare; the index consistency invariant (build_index) now always applies. Test no longer imports a CLI-private loader. --- src/trialmatchai/cli/index_data.py | 157 ++++++---------------------- tests/test_preflight_and_indexer.py | 3 +- 2 files changed, 34 insertions(+), 126 deletions(-) diff --git a/src/trialmatchai/cli/index_data.py b/src/trialmatchai/cli/index_data.py index fd932c63..a4965d51 100644 --- a/src/trialmatchai/cli/index_data.py +++ b/src/trialmatchai/cli/index_data.py @@ -1,3 +1,11 @@ +"""``trialmatchai-index`` — prepare + build the LanceDB search tables. + +A thin entry point over the SAME idempotent orchestration stages `build` uses +(`prepare_corpus` + `build_index`), so there is one prepare implementation and one +index implementation, both resumable/skip-if-done. (Historically this command had +its own non-resumable prepare and an always-overwrite index; those are gone.) +""" + from __future__ import annotations import argparse @@ -5,7 +13,7 @@ from pathlib import Path from trialmatchai.config.config_loader import load_config -from trialmatchai.search import LanceDBSearchBackend +from trialmatchai.orchestration import build_index, prepare_corpus from trialmatchai.utils.logging_config import setup_logging logger = setup_logging(__name__) @@ -13,7 +21,7 @@ def main() -> int: parser = argparse.ArgumentParser( - description="Build TrialMatchAI LanceDB search tables." + description="Prepare + build TrialMatchAI LanceDB search tables (idempotent)." ) parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") parser.add_argument( @@ -24,145 +32,46 @@ def main() -> int: parser.add_argument( "--trials-json-folder", default=None, - help="Folder containing normalized trial JSON files. Defaults to config paths.trials_json_folder.", - ) - parser.add_argument( - "--processed-trials-folder", - default="data/processed_trials", - help="Folder containing prepared trial JSON files.", + help="Normalized trial JSONs. Defaults to config paths.trials_json_folder.", ) + parser.add_argument("--processed-trials-folder", default="data/processed_trials") + parser.add_argument("--processed-criteria-folder", default="data/processed_criteria") parser.add_argument( - "--processed-criteria-folder", - default="data/processed_criteria", - help="Folder containing prepared criteria subfolders.", - ) - parser.add_argument( - "--skip-trials", + "--force-prepare", action="store_true", - help="Do not build the trial table.", + help="Re-prepare every trial even if already prepared.", ) parser.add_argument( - "--skip-criteria", + "--reindex", action="store_true", - help="Do not build the criteria table.", - ) - parser.add_argument( - "--recreate", - action=argparse.BooleanOptionalAction, - default=True, - help="Overwrite target tables before writing.", + help="Rebuild the search tables even if they already exist.", ) args = parser.parse_args() config = load_config(args.config) - backend = LanceDBSearchBackend.from_config(config) root = _repo_root() - failures = 0 + processed_trials = _resolve_path(args.processed_trials_folder, root) + processed_criteria = _resolve_path(args.processed_criteria_folder, root) + if args.prepare: - _prepare_from_trials_jsons( - config=config, + prepare_corpus( + config, trials_json_folder=_resolve_path( - args.trials_json_folder or config["paths"]["trials_json_folder"], - root, + args.trials_json_folder or config["paths"]["trials_json_folder"], root ), - processed_trials_folder=_resolve_path(args.processed_trials_folder, root), - processed_criteria_folder=_resolve_path(args.processed_criteria_folder, root), + processed_trials_folder=processed_trials, + processed_criteria_folder=processed_criteria, + force=args.force_prepare, ) - if not args.skip_trials: - trials_folder = _resolve_path(args.processed_trials_folder, root) - trial_docs = _load_flat_json_folder(trials_folder) - if not trial_docs: - logger.error("No prepared trial JSON files found in %s.", trials_folder) - failures += 1 - else: - count = backend.index_trials(trial_docs, recreate=args.recreate) - logger.info("Indexed %s trial documents.", count) - - if not args.skip_criteria: - criteria_folder = _resolve_path(args.processed_criteria_folder, root) - criteria_docs = _load_nested_json_folder(criteria_folder) - if not criteria_docs: - logger.error("No prepared criteria JSON files found in %s.", criteria_folder) - failures += 1 - else: - count = backend.index_criteria(criteria_docs, recreate=args.recreate) - logger.info("Indexed %s criteria documents.", count) - - if failures: - return 1 - logger.info("Search tables ready at %s.", backend.db_path) - return 0 - - -def _load_flat_json_folder(folder: Path) -> list[dict]: - if not folder.exists(): - return [] - return [ - _read_json(path) - for path in sorted(folder.glob("*.json")) - if path.is_file() - ] - - -def _load_nested_json_folder(folder: Path) -> list[dict]: - if not folder.exists(): - return [] - return [ - _read_json(path) - for path in sorted(folder.glob("*/*.json")) - if path.is_file() - ] - - -def _read_json(path: Path) -> dict: - import json - - return json.loads(path.read_text(encoding="utf-8")) - - -def _prepare_from_trials_jsons( - *, - config: dict, - trials_json_folder: Path, - processed_trials_folder: Path, - processed_criteria_folder: Path, -) -> None: - from trialmatchai.entities import build_entity_annotator - from trialmatchai.models.embedding import build_embedder - from trialmatchai.registry.preparation import ( - prepare_criteria_documents, - prepare_trial_document, - write_prepared_criteria, - write_prepared_trial, - ) - - embedder = build_embedder(config) - entity_annotator = build_entity_annotator(config, embedder=embedder) - trial_docs = _load_flat_json_folder(trials_json_folder) - prepared = failed = 0 - for doc in trial_docs: - nct_id = doc.get("nct_id", "") - try: - trial_row = prepare_trial_document(doc, embedder) - criteria_rows = prepare_criteria_documents( - doc, - embedder, - entity_annotator=entity_annotator, - ) - # Criteria before the trial marker so a crash mid-trial re-prepares it. - write_prepared_criteria(criteria_rows, processed_criteria_folder) - write_prepared_trial(trial_row, processed_trials_folder) - prepared += 1 - except Exception: - logger.exception("Failed to prepare trial %s; skipping", nct_id) - failed += 1 - logger.info( - "Prepared %s trial JSON files from %s (%s failed).", - prepared, - trials_json_folder, - failed, + build_index( + config, + processed_trials_folder=processed_trials, + processed_criteria_folder=processed_criteria, + force=args.reindex, ) + logger.info("Search tables ready.") + return 0 def _resolve_path(value: str, root: Path) -> Path: diff --git a/tests/test_preflight_and_indexer.py b/tests/test_preflight_and_indexer.py index 52cc0281..0e384265 100644 --- a/tests/test_preflight_and_indexer.py +++ b/tests/test_preflight_and_indexer.py @@ -3,7 +3,6 @@ import json from pathlib import Path -from trialmatchai.cli.index_data import _load_nested_json_folder from trialmatchai.config.config_loader import load_config from trialmatchai.search import InMemorySearchBackend from trialmatchai.services import preflight @@ -214,7 +213,7 @@ def test_indexer_loads_prepared_criteria_docs(tmp_path): (trial_dir / "C1.json").write_text( json.dumps({"criteria_id": "C1", "nct_id": "N1", "criterion": "cancer"}) ) - docs = _load_nested_json_folder(processed) + docs = [json.loads(p.read_text()) for p in sorted(processed.glob("*/*.json"))] backend = InMemorySearchBackend() count = backend.replace_criteria_for_trials(["N1"], docs) From b4ea5c6c3f09d0bbd087c1195ddd99505d1f01ef Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 22:43:24 +0200 Subject: [PATCH 53/64] refactor(cli): single 'trialmatchai' entry point; finetune is a subcommand Per the unification: collapse the 11 standalone trialmatchai-* console scripts into one entry point. Every capability is now 'trialmatchai ' (healthcheck, bootstrap-data, index, build-concepts, update-registry, import-patient, build, run, e2e, trec, finetune). finetune stays a distinct subcommand (training != inference), now reachable via the umbrella. - pyproject: one console script. - cli/main.py: route 'finetune' to finetuning.cli. - CI smoke + docs + src help-text + tests updated to the subcommand form. - (resume slurm updated locally + auto-resume resubmitted to match.) --- .github/workflows/ci.yml | 11 ++++------ README.md | 34 +++++++++++++++--------------- docs/architecture.md | 4 ++-- docs/finetuning.md | 16 +++++++------- docs/interoperability.md | 12 +++++------ docs/registry-updater.md | 16 +++++++------- docs/release.md | 22 +++++++++---------- pyproject.toml | 14 +++--------- src/trialmatchai/cli/index_data.py | 2 +- src/trialmatchai/cli/main.py | 7 ++++++ src/trialmatchai/finetuning/cli.py | 10 ++++----- src/trialmatchai/main.py | 2 +- src/trialmatchai/orchestration.py | 2 +- src/trialmatchai/trec/__init__.py | 2 +- tests/test_import_patient_cli.py | 2 +- 15 files changed, 76 insertions(+), 80 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7fab42bd..3e31cf69 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,13 +56,10 @@ jobs: run: | WHEEL="$(ls dist/trialmatchai-*.whl | head -n 1)" uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai --help - uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-healthcheck --help - uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-index --help - uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-build-concepts --help - uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-update-registry --help - uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-import-patient --help - uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-run --help - uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai-finetune --help + for cmd in healthcheck bootstrap-data index build-concepts update-registry \ + import-patient build run e2e trec finetune; do + uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai "$cmd" --help + done - name: Secret scan run: uv run pre-commit run gitleaks --all-files diff --git a/README.md b/README.md index 55fbe613..5fdbd5a8 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ patients many times**. Both commands are idempotent and resume after disruption. ```bash uv sync --extra llm --extra gpu --extra entity # GPU host + HuggingFace access -uv run trialmatchai-bootstrap-data # fetch prepared corpus + adapters +uv run trialmatchai bootstrap-data # fetch prepared corpus + adapters uv run trialmatchai build # 1) BUILD: prepare + index (once) uv run trialmatchai e2e --input patient.txt # 2) MATCH: ingest + match a patient # -> results//ranked_trials.json @@ -91,7 +91,7 @@ pip install -e ".[finetune]" | `entity` | GLiNER2 biomedical extraction | | `llm` | local embedding and LLM dependencies | | `gpu` | vLLM and bitsandbytes; intended for Linux CUDA hosts | -| `finetune` | training dependencies for `trialmatchai-finetune` | +| `finetune` | training dependencies for `trialmatchai finetune` | Installing the package only gives you the CLI. Real matching also needs the trial corpus, model artifacts, and LanceDB search tables — all produced by the @@ -114,7 +114,7 @@ export HF_TOKEN= # required for gated models (p ### 1. Build the system — once ```bash -uv run trialmatchai-bootstrap-data # download the prepared corpus + LoRA adapters +uv run trialmatchai bootstrap-data # download the prepared corpus + LoRA adapters uv run trialmatchai build # prepare embeddings/entities + build the index uv run trialmatchai build --status # see exactly what is built (and what isn't) ``` @@ -135,9 +135,9 @@ uv run trialmatchai build --concepts --concepts-csv data/omop/CONCEPT.csv --syno | Resource | How you get it | Automatic? | | --- | --- | --- | -| Trial corpus (`processed_trials` + criteria) | `trialmatchai-bootstrap-data` (Zenodo) | ✅ automatic | -| Fine-tuned LoRA adapters (CoT + reranker) | `trialmatchai-bootstrap-data` (Zenodo) | ✅ automatic | -| Fine-tuning datasets (only if you re-train) | `trialmatchai-bootstrap-data --finetune-data` (Zenodo) | ✅ automatic (opt-in) | +| Trial corpus (`processed_trials` + criteria) | `trialmatchai bootstrap-data` (Zenodo) | ✅ automatic | +| Fine-tuned LoRA adapters (CoT + reranker) | `trialmatchai bootstrap-data` (Zenodo) | ✅ automatic | +| Fine-tuning datasets (only if you re-train) | `trialmatchai bootstrap-data --finetune-data` (Zenodo) | ✅ automatic (opt-in) | | Embedder (`BAAI/bge-m3`) | downloaded from HuggingFace on first use | ✅ automatic | | Concept-linking vocabularies (genes, diseases, …) | `trialmatchai build --concepts` | ✅ automatic | | Base LLMs (`microsoft/phi-4`, `google/gemma-2-2b-it`) | HuggingFace on first use | ⚠️ automatic, but **gated** models need a **one-time** `hf auth login` + accepting the model licence | @@ -161,7 +161,7 @@ explanations). Re-running skips patients already matched. ### Health and keeping trials current ```bash -uv run trialmatchai-healthcheck # validate config/paths/deps +uv run trialmatchai healthcheck # validate config/paths/deps ``` Fold new/changed ClinicalTrials.gov studies into the **live index** — fetch → @@ -180,9 +180,9 @@ timer, or GitHub Actions — see [docs/registry-updater.md](docs/registry-update Manual / advanced control (the steps build and e2e wrap) ```bash -uv run trialmatchai-index --prepare # prepare + index from trials_jsons (what `build` runs) -uv run trialmatchai-import-patient --input patient.txt # stage a profile only -uv run trialmatchai-run # match already-staged profiles +uv run trialmatchai index --prepare # prepare + index from trials_jsons (what `build` runs) +uv run trialmatchai import-patient --input patient.txt # stage a profile only +uv run trialmatchai run # match already-staged profiles uv run trialmatchai trec --tracks "21 22" # benchmark: official TREC CT eval ``` @@ -264,7 +264,7 @@ The importer supports: Importers preserve provenance and unsupported source elements where possible. The matching summary is rendered deterministically from the canonical `PatientProfile`; raw patient files are not consumed directly by -`trialmatchai-run`. +`trialmatchai run`. See [docs/interoperability.md](docs/interoperability.md) for format details. @@ -326,15 +326,15 @@ Fine-tune model components with: ```bash uv sync --extra finetune -uv run trialmatchai-finetune cot \ +uv run trialmatchai finetune cot \ --base-model microsoft/phi-4 \ --train-data data/finetune/cot.jsonl \ --output-dir models/cot-adapter -uv run trialmatchai-finetune reranker \ +uv run trialmatchai finetune reranker \ --base-model google/gemma-2-2b-it \ --train-data data/finetune/reranker.jsonl \ --output-dir models/reranker-adapter -uv run trialmatchai-finetune ner \ +uv run trialmatchai finetune ner \ --base-model fastino/gliner2-base-v1 \ --train-data data/finetune/ner.jsonl \ --output-dir models/ner @@ -376,7 +376,7 @@ The full override list is in [`.env.example`](.env.example). ## CLI Reference -Every command is available both as a flat script (`trialmatchai-build`) and as a +Every command is available both as a flat script (`trialmatchai build`) and as a subcommand (`trialmatchai build`); they are equivalent. **Build the system (setup half)** @@ -384,7 +384,7 @@ subcommand (`trialmatchai build`); they are equivalent. | Command | Purpose | | --- | --- | | `trialmatchai build` | Prepare the corpus (embeddings + entities) and build the search index — resumable, with `--status` | -| `trialmatchai-bootstrap-data` | Download and extract the prepared corpus + model adapters | +| `trialmatchai bootstrap-data` | Download and extract the prepared corpus + model adapters | | `trialmatchai build-concepts` | Build the LanceDB concept table for entity normalization (optional, OMOP) | | `trialmatchai update-registry` | Fetch changed ClinicalTrials.gov studies and upsert LanceDB | @@ -403,7 +403,7 @@ subcommand (`trialmatchai build`); they are equivalent. | --- | --- | | `trialmatchai healthcheck` | Validate config, paths, optional model deps, and LanceDB tables | | `trialmatchai index` | Lower-level prepare/index of trial and criteria search tables | -| `trialmatchai-finetune` | Fine-tune NER, reranker, or eligibility reasoning models | +| `trialmatchai finetune` | Fine-tune NER, reranker, or eligibility reasoning models | ```bash uv run trialmatchai build --status # what is built diff --git a/docs/architecture.md b/docs/architecture.md index 8466aa15..76534f18 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -14,11 +14,11 @@ TrialMatchAI is an installable Python package exposed as `trialmatchai`. The sup ## Data Flow -1. `trialmatchai-update-registry` fetches studies from ClinicalTrials.gov v2. +1. `trialmatchai update-registry` fetches studies from ClinicalTrials.gov v2. 2. Raw source JSON is written to `data/registry/raw/.json`. 3. Normalized trial JSON is written to `data/trials_jsons/.json`. 4. Changed studies are embedded, criteria are optionally entity annotated, and LanceDB trial/criteria tables are upserted. -5. `trialmatchai-run` matches already-imported patient profiles against LanceDB, reranks candidate criteria/trials, and writes results. (Ingest raw patient inputs first with `trialmatchai-import-patient`, or use `trialmatchai-e2e` to ingest and match in one step.) +5. `trialmatchai run` matches already-imported patient profiles against LanceDB, reranks candidate criteria/trials, and writes results. (Ingest raw patient inputs first with `trialmatchai import-patient`, or use `trialmatchai e2e` to ingest and match in one step.) ## Storage diff --git a/docs/finetuning.md b/docs/finetuning.md index 749805f4..8f9587dd 100644 --- a/docs/finetuning.md +++ b/docs/finetuning.md @@ -3,7 +3,7 @@ TrialMatchAI ships with capable default models, but every model in the pipeline is **swappable** and **fine-tunable**. You can point the pipeline at your own checkpoints/adapters via config, and train those adapters with the built-in -`trialmatchai-finetune` command. +`trialmatchai finetune` command. | Component | Default | Config key | Fine-tune target | |-----------|---------|------------|------------------| @@ -12,12 +12,12 @@ checkpoints/adapters via config, and train those adapters with the built-in | CoT eligibility | configured CoT model | `model.cot_adapter_path` | LoRA adapter | > **Where does the training data come from?** Fine-tuning is **optional** — the -> ready-to-use CoT and reranker adapters are downloaded by `trialmatchai-bootstrap-data`, +> ready-to-use CoT and reranker adapters are downloaded by `trialmatchai bootstrap-data`, > so most deployments never need to train. The **published training datasets** are > available too — fetch them into `data/finetune/`: > > ```bash -> trialmatchai-bootstrap-data --finetune-data +> trialmatchai bootstrap-data --finetune-data > ``` > > (Source: the paper's Zenodo deposit, .) @@ -46,7 +46,7 @@ the LoRA adapter natively via `LoRARequest` — no merge step required. If you prefer a single self-contained model instead of base + adapter, merge them: ```bash -trialmatchai-finetune merge \ +trialmatchai finetune merge \ --base-model google/gemma-2-2b-it \ --adapter models/reranker-adapter \ --output-dir models/reranker-merged @@ -70,7 +70,7 @@ Data — JSONL, one example per line, either chat or instruct form: ``` ```bash -trialmatchai-finetune cot \ +trialmatchai finetune cot \ --base-model microsoft/phi-4 \ --train-data data/finetune/cot.jsonl \ --eval-data data/finetune/cot.eval.jsonl \ @@ -98,7 +98,7 @@ Data — JSONL: ``` ```bash -trialmatchai-finetune reranker \ +trialmatchai finetune reranker \ --base-model google/gemma-2-2b-it \ --train-data data/finetune/reranker.jsonl \ --eval-data data/finetune/reranker.eval.jsonl \ @@ -137,7 +137,7 @@ structured JSON training data is useful for GLiNER2 adapters you call directly or for future structured extraction integration. ```bash -trialmatchai-finetune ner \ +trialmatchai finetune ner \ --base-model fastino/gliner2-base-v1 \ --train-data data/finetune/ner.jsonl \ --output-dir models/ner \ @@ -160,6 +160,6 @@ trialmatchai-finetune ner \ `--eval-steps` (defaults align at 500). - 4-bit quantized loading is on by default (`--no-4bit` to disable) and requires bitsandbytes on a CUDA-capable machine; `bf16` is default (`--fp16` to switch). - See `trialmatchai-finetune --help` for all flags. + See `trialmatchai finetune --help` for all flags. - GLiNER2's training API can vary by version; if your installed `gliner2` exposes a different interface, adapt `src/trialmatchai/finetuning/ner.py`. diff --git a/docs/interoperability.md b/docs/interoperability.md index 4e38030a..cf952bad 100644 --- a/docs/interoperability.md +++ b/docs/interoperability.md @@ -55,8 +55,8 @@ runtime summary fields: - `gender` - `provenance` -`trialmatchai-run` consumes canonical profiles from `patient_inputs.profile_dir`. -Import source files explicitly with `trialmatchai-import-patient` before running +`trialmatchai run` consumes canonical profiles from `patient_inputs.profile_dir`. +Import source files explicitly with `trialmatchai import-patient` before running matching. ## Commands @@ -64,7 +64,7 @@ matching. Import a free text note: ```bash -uv run trialmatchai-import-patient \ +uv run trialmatchai import-patient \ --input data/patients/raw/patient-1.txt \ --format text ``` @@ -79,14 +79,14 @@ uv run trialmatchai import-patient \ Import a FHIR Bundle: ```bash -uv run trialmatchai-import-patient \ +uv run trialmatchai import-patient \ --input data/patients/raw/patient-1.fhir.json ``` Import an OMOP extract folder: ```bash -uv run trialmatchai-import-patient \ +uv run trialmatchai import-patient \ --input data/patients/omop_extract \ --format omop ``` @@ -94,7 +94,7 @@ uv run trialmatchai-import-patient \ Then run matching: ```bash -uv run trialmatchai-run +uv run trialmatchai run ``` ## Conversion Limits diff --git a/docs/registry-updater.md b/docs/registry-updater.md index 7846d450..45cd1025 100644 --- a/docs/registry-updater.md +++ b/docs/registry-updater.md @@ -1,11 +1,11 @@ # Registry Updater -`trialmatchai-update-registry` updates the local LanceDB-backed trial registry from ClinicalTrials.gov v2. It is command-based and safe to run from cron, systemd timers, or GitHub Actions. +`trialmatchai update-registry` updates the local LanceDB-backed trial registry from ClinicalTrials.gov v2. It is command-based and safe to run from cron, systemd timers, or GitHub Actions. ## Basic Usage ```bash -uv run trialmatchai-update-registry --max-studies 500 +uv run trialmatchai update-registry --max-studies 500 ``` When no keyword is provided, TrialMatchAI uses broad default keyword queries covering oncology, cardiology, neurology, rare disease, immunology, infectious disease, metabolic disease, hematology, pediatrics, and precision medicine. @@ -13,7 +13,7 @@ When no keyword is provided, TrialMatchAI uses broad default keyword queries cov Use explicit keywords: ```bash -uv run trialmatchai-update-registry \ +uv run trialmatchai update-registry \ --keyword "lung cancer" \ --keyword "EGFR" \ --since 2026-06-01 \ @@ -23,13 +23,13 @@ uv run trialmatchai-update-registry \ Use a keyword file: ```bash -uv run trialmatchai-update-registry --keywords-file data/registry/keywords.txt +uv run trialmatchai update-registry --keywords-file data/registry/keywords.txt ``` Dry-run: ```bash -uv run trialmatchai-update-registry --dry-run --max-studies 25 +uv run trialmatchai update-registry --dry-run --max-studies 25 ``` Dry-runs do not write raw JSON, normalized trial JSON, manifests, reports, or LanceDB tables unless an explicit `--report-path` is provided. @@ -49,7 +49,7 @@ Changed studies are written and then upserted: Run daily at 02:30: ```cron -30 2 * * * cd /opt/TrialMatchAI && /usr/local/bin/uv run trialmatchai-update-registry --max-studies 1000 >> logs/registry-update.log 2>&1 +30 2 * * * cd /opt/TrialMatchAI && /usr/local/bin/uv run trialmatchai update-registry --max-studies 1000 >> logs/registry-update.log 2>&1 ``` ## systemd @@ -63,7 +63,7 @@ Description=TrialMatchAI registry update [Service] Type=oneshot WorkingDirectory=/opt/TrialMatchAI -ExecStart=/usr/local/bin/uv run trialmatchai-update-registry --max-studies 1000 +ExecStart=/usr/local/bin/uv run trialmatchai update-registry --max-studies 1000 ``` Timer: @@ -83,7 +83,7 @@ WantedBy=timers.target ## Healthcheck ```bash -uv run trialmatchai-healthcheck --registry --require-tables +uv run trialmatchai healthcheck --registry --require-tables ``` Use `--require-tables` after the first successful update or indexing run. diff --git a/docs/release.md b/docs/release.md index 2db6181b..b88da6c4 100644 --- a/docs/release.md +++ b/docs/release.md @@ -17,17 +17,17 @@ Smoke test console commands: ```bash uv run trialmatchai --help -uv run trialmatchai-healthcheck --help -uv run trialmatchai-bootstrap-data --help -uv run trialmatchai-build --help -uv run trialmatchai-index --help -uv run trialmatchai-build-concepts --help -uv run trialmatchai-update-registry --help -uv run trialmatchai-import-patient --help -uv run trialmatchai-run --help -uv run trialmatchai-e2e --help -uv run trialmatchai-trec --help -uv run trialmatchai-finetune --help +uv run trialmatchai healthcheck --help +uv run trialmatchai bootstrap-data --help +uv run trialmatchai build --help +uv run trialmatchai index --help +uv run trialmatchai build-concepts --help +uv run trialmatchai update-registry --help +uv run trialmatchai import-patient --help +uv run trialmatchai run --help +uv run trialmatchai e2e --help +uv run trialmatchai trec --help +uv run trialmatchai finetune --help ``` Wheel install smoke: diff --git a/pyproject.toml b/pyproject.toml index a94228f6..465f1f8b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,18 +54,10 @@ finetune = [ ] [project.scripts] -trialmatchai-finetune = "trialmatchai.finetuning.cli:main" +# Single entry point. Every capability is a subcommand: `trialmatchai ` +# (healthcheck, bootstrap-data, index, build-concepts, update-registry, +# import-patient, build, run, e2e, trec, finetune). trialmatchai = "trialmatchai.cli.main:main" -trialmatchai-healthcheck = "trialmatchai.cli.healthcheck:main" -trialmatchai-build = "trialmatchai.cli.build:main" -trialmatchai-run = "trialmatchai.cli.run:main" -trialmatchai-e2e = "trialmatchai.cli.e2e:main" -trialmatchai-trec = "trialmatchai.cli.trec:main" -trialmatchai-bootstrap-data = "trialmatchai.cli.bootstrap_data:main" -trialmatchai-index = "trialmatchai.cli.index_data:main" -trialmatchai-build-concepts = "trialmatchai.cli.build_concepts:main" -trialmatchai-update-registry = "trialmatchai.cli.update_registry:main" -trialmatchai-import-patient = "trialmatchai.cli.import_patient:main" [dependency-groups] dev = [ diff --git a/src/trialmatchai/cli/index_data.py b/src/trialmatchai/cli/index_data.py index a4965d51..49c23d1c 100644 --- a/src/trialmatchai/cli/index_data.py +++ b/src/trialmatchai/cli/index_data.py @@ -1,4 +1,4 @@ -"""``trialmatchai-index`` — prepare + build the LanceDB search tables. +"""``trialmatchai index`` — prepare + build the LanceDB search tables. A thin entry point over the SAME idempotent orchestration stages `build` uses (`prepare_corpus` + `build_index`), so there is one prepare implementation and one diff --git a/src/trialmatchai/cli/main.py b/src/trialmatchai/cli/main.py index ef6841e3..f0f5ae81 100644 --- a/src/trialmatchai/cli/main.py +++ b/src/trialmatchai/cli/main.py @@ -53,6 +53,11 @@ def main() -> int: help="End-to-end TREC CT evaluation (preset over e2e)", add_help=False, ) + subparsers.add_parser( + "finetune", + help="Fine-tune the CoT / reranker / NER models", + add_help=False, + ) args, remainder = parser.parse_known_args() if args.command == "healthcheck": @@ -75,6 +80,8 @@ def main() -> int: from trialmatchai.cli.e2e import main as command elif args.command == "trec": from trialmatchai.cli.trec import main as command + elif args.command == "finetune": + from trialmatchai.finetuning.cli import main as command else: # pragma: no cover - argparse enforces choices parser.error(f"Unknown command: {args.command}") diff --git a/src/trialmatchai/finetuning/cli.py b/src/trialmatchai/finetuning/cli.py index 55bacac0..dcc85c03 100644 --- a/src/trialmatchai/finetuning/cli.py +++ b/src/trialmatchai/finetuning/cli.py @@ -1,11 +1,11 @@ -"""``trialmatchai-finetune`` — train custom GLiNER2 / reranker / CoT models. +"""``trialmatchai finetune`` — train custom GLiNER2 / reranker / CoT models. Examples: - trialmatchai-finetune cot --base-model microsoft/phi-4 \ + trialmatchai finetune cot --base-model microsoft/phi-4 \ --train-data data/cot.jsonl --output-dir models/cot-adapter - trialmatchai-finetune reranker --base-model google/gemma-2-2b-it \ + trialmatchai finetune reranker --base-model google/gemma-2-2b-it \ --train-data data/reranker.jsonl --output-dir models/reranker-adapter - trialmatchai-finetune ner --base-model fastino/gliner2-base-v1 \ + trialmatchai finetune ner --base-model fastino/gliner2-base-v1 \ --train-data data/ner.jsonl --output-dir models/ner Plug the result back into config: entity_extraction.model_name (NER), @@ -108,7 +108,7 @@ def _lora_config_from_args(args: argparse.Namespace) -> FinetuneConfig: def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser( - prog="trialmatchai-finetune", + prog="trialmatchai finetune", description="Fine-tune TrialMatchAI's GLiNER2, reranker, or CoT models.", ) sub = parser.add_subparsers(dest="component", required=True) diff --git a/src/trialmatchai/main.py b/src/trialmatchai/main.py index a7028e08..4e59d869 100644 --- a/src/trialmatchai/main.py +++ b/src/trialmatchai/main.py @@ -568,7 +568,7 @@ def _load_patient_inputs(config: Dict) -> list[tuple[PatientProfile, Dict]]: if not profile_files: logger.error( "No canonical patient profiles found in %s. Run " - "`trialmatchai-import-patient` first.", + "`trialmatchai import-patient` first.", profile_dir, ) return [] diff --git a/src/trialmatchai/orchestration.py b/src/trialmatchai/orchestration.py index 8eeeda36..2025e2f6 100644 --- a/src/trialmatchai/orchestration.py +++ b/src/trialmatchai/orchestration.py @@ -503,7 +503,7 @@ def build_system( else: raise RuntimeError( f"Nothing to prepare: {pt} is empty and no trial JSONs at " - f"{trials_json_folder}. Run `trialmatchai-bootstrap-data` or provide " + f"{trials_json_folder}. Run `trialmatchai bootstrap-data` or provide " "normalized trial JSONs." ) _save_manifest(manifest_path, manifest) diff --git a/src/trialmatchai/trec/__init__.py b/src/trialmatchai/trec/__init__.py index 7560b7cb..d367c4dc 100644 --- a/src/trialmatchai/trec/__init__.py +++ b/src/trialmatchai/trec/__init__.py @@ -5,7 +5,7 @@ profiles, builds a per-track LanceDB search index restricted to the track's document collection, and runs the matching pipeline with per-patient resume. -Exposed via the ``trialmatchai-trec`` console command (see +Exposed via the ``trialmatchai trec`` console command (see ``trialmatchai.cli.trec``). """ diff --git a/tests/test_import_patient_cli.py b/tests/test_import_patient_cli.py index ae165e91..b3af2efa 100644 --- a/tests/test_import_patient_cli.py +++ b/tests/test_import_patient_cli.py @@ -14,7 +14,7 @@ def test_import_patient_cli_writes_profile_and_summary(tmp_path, monkeypatch): monkeypatch.setattr( "sys.argv", [ - "trialmatchai-import-patient", + "trialmatchai import-patient", "--input", str(note), "--format", From dc2b81ca95e10ee7c24c662da2a0b22611265058 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 23:00:49 +0200 Subject: [PATCH 54/64] feat(pipeline): unified stage-registry driver + 'trialmatchai pipeline' One ordered registry of idempotent stages (prepare, concepts, index, ingest, expand, match, eval) with a single driver. Run the whole e2e or any slice: --only --from/--to --skip --force Each stage wraps an already-idempotent function, so finished work is skipped and the run 'just works' from any starting state; GPU models are freed once in a finally (fixes the scattered teardown). Stage = the unit of modularity. Also extract build_concepts.run_build_concepts() as an importable callable (the concepts stage + build.py call it directly), removing the sys.argv shim. Additive: build/e2e/trec unchanged; migration onto the driver follows next. 11 driver tests (selection, force, ordering, teardown-on-error). --- src/trialmatchai/cli/build.py | 25 +-- src/trialmatchai/cli/build_concepts.py | 84 +++++++--- src/trialmatchai/cli/main.py | 9 +- src/trialmatchai/cli/pipeline.py | 106 +++++++++++++ src/trialmatchai/pipeline.py | 211 +++++++++++++++++++++++++ tests/test_pipeline.py | 96 +++++++++++ 6 files changed, 488 insertions(+), 43 deletions(-) create mode 100644 src/trialmatchai/cli/pipeline.py create mode 100644 src/trialmatchai/pipeline.py create mode 100644 tests/test_pipeline.py diff --git a/src/trialmatchai/cli/build.py b/src/trialmatchai/cli/build.py index 557c590e..4c99cbe1 100644 --- a/src/trialmatchai/cli/build.py +++ b/src/trialmatchai/cli/build.py @@ -88,23 +88,14 @@ def main() -> int: # (auto-downloaded); --concepts-csv adds the licensed OMOP vocab on top. if args.concepts or args.concepts_csv: logger.info("=== build: concepts stage ===") - from trialmatchai.cli.build_concepts import main as build_concepts_main - - argv: list[str] = [] - if args.concepts: - argv += ["--sources", "open"] - if args.concepts_csv: - argv += ["--concept-csv", args.concepts_csv] - if args.synonym_csv: - argv += ["--synonym-csv", args.synonym_csv] - if args.config: - argv += ["--config", args.config] - saved = sys.argv - try: - sys.argv = ["trialmatchai build-concepts", *argv] - build_concepts_main() - finally: - sys.argv = saved + from trialmatchai.cli.build_concepts import run_build_concepts + + run_build_concepts( + config, + sources="open" if args.concepts else None, + concept_csv=args.concepts_csv, + synonym_csv=args.synonym_csv, + ) else: logger.warning( "Concept DB not built: entity->concept linking will degrade gracefully. " diff --git a/src/trialmatchai/cli/build_concepts.py b/src/trialmatchai/cli/build_concepts.py index ed2d8bbf..a4b88e79 100644 --- a/src/trialmatchai/cli/build_concepts.py +++ b/src/trialmatchai/cli/build_concepts.py @@ -79,58 +79,92 @@ def main() -> int: args = parser.parse_args() config = load_config(args.config) - linker_cfg = config.get("concept_linker", {}) - db_path = args.db_path or linker_cfg.get("db_path") or "data/concepts" - table_name = args.table or linker_cfg.get("table") or "concepts" - if not args.concept_csv and not args.dictionary and not args.sources: parser.error("provide --concept-csv, --sources, and/or at least one --dictionary") + try: + return run_build_concepts( + config, + db_path=args.db_path, + table=args.table, + sources=args.sources, + dictionary=args.dictionary, + concept_csv=args.concept_csv, + synonym_csv=args.synonym_csv, + vocabulary=args.vocabulary, + concept_cache=args.concept_cache, + force_download=args.force_download, + skip_embeddings=args.skip_embeddings, + force=args.force, + ) + except ValueError as exc: + parser.error(str(exc)) + return 2 # pragma: no cover - parser.error exits + + +def run_build_concepts( + config: dict, + *, + db_path: str | None = None, + table: str | None = None, + sources: str | None = None, + dictionary: list[str] | tuple[str, ...] = (), + concept_csv: str | None = None, + synonym_csv: str | None = None, + vocabulary: list[str] | tuple[str, ...] = (), + concept_cache: str = "data/concept_dicts", + force_download: bool = False, + skip_embeddings: bool = False, + force: bool = False, +) -> int: + """Build the LanceDB concept table (the entity-linking store). Idempotent. + + Importable so the unified pipeline can invoke the concepts stage directly, + rather than re-entering the CLI. Skips the expensive re-embed if the table is + already present, unless ``force`` (or a new OMOP vocab via ``concept_csv``). + """ + linker_cfg = config.get("concept_linker", {}) + db_path = db_path or linker_cfg.get("db_path") or "data/concepts" + table_name = table or linker_cfg.get("table") or "concepts" + + if not concept_csv and not dictionary and not sources: + raise ValueError("provide concept_csv, sources, and/or at least one dictionary") - # Idempotent: skip the (expensive) re-embed if the table is already built, - # unless --force or a new OMOP vocab (--concept-csv) is being folded in. - if not args.force and not args.concept_csv: + if not force and not concept_csv: ready, rows_present = _concept_table_ready(db_path, table_name) if ready: logger.info( "Concept store already present at %s/%s (%s concepts); skipping. " - "Use --force to rebuild.", + "Pass force=True to rebuild.", db_path, table_name, rows_present, ) return 0 - # Collect dictionary specs from explicit --dictionary flags and bundled --sources. dictionary_specs: list[tuple[str, str, str]] = [ - _parse_dictionary_spec(spec) for spec in args.dictionary + _parse_dictionary_spec(spec) for spec in dictionary ] - if args.sources == "open": + if sources == "open": from trialmatchai.entities.concept_sources import build_open_dictionaries for source, dict_path in build_open_dictionaries( - Path(args.concept_cache), force=args.force_download + Path(concept_cache), force=force_download ): dictionary_specs.append( (source.vocabulary_id, source.domain_id, str(dict_path)) ) - if not dictionary_specs and not args.concept_csv: - parser.error("no concept sources were built (all downloads failed?)") + if not dictionary_specs and not concept_csv: + raise ValueError("no concept sources were built (all downloads failed?)") - vocabularies = tuple(args.vocabulary or DEFAULT_OMOP_VOCABULARIES) + vocabularies = tuple(vocabulary or DEFAULT_OMOP_VOCABULARIES) rows: list = [] - if args.concept_csv: - rows = build_omop_concept_rows( - args.concept_csv, - args.synonym_csv, - vocabularies=vocabularies, - ) + if concept_csv: + rows = build_omop_concept_rows(concept_csv, synonym_csv, vocabularies=vocabularies) for vocab, domain, path in dictionary_specs: - rows.extend( - build_dictionary_rows(path, vocabulary_id=vocab, domain_id=domain) - ) + rows.extend(build_dictionary_rows(path, vocabulary_id=vocab, domain_id=domain)) embeddings = None - if not args.skip_embeddings: + if not skip_embeddings: embedder = build_embedder(config) embeddings = embedder.embed_texts(concept_texts_for_embedding(rows)) diff --git a/src/trialmatchai/cli/main.py b/src/trialmatchai/cli/main.py index f0f5ae81..8e1d1cf3 100644 --- a/src/trialmatchai/cli/main.py +++ b/src/trialmatchai/cli/main.py @@ -11,6 +11,11 @@ def main() -> int: ) subparsers = parser.add_subparsers(dest="command", required=True) + subparsers.add_parser( + "pipeline", + help="Run the unified e2e pipeline, or any slice (--only/--from/--to/--skip/--force)", + add_help=False, + ) subparsers.add_parser( "healthcheck", help="Run deployment health checks", @@ -60,7 +65,9 @@ def main() -> int: ) args, remainder = parser.parse_known_args() - if args.command == "healthcheck": + if args.command == "pipeline": + from trialmatchai.cli.pipeline import main as command + elif args.command == "healthcheck": from trialmatchai.cli.healthcheck import main as command elif args.command == "bootstrap-data": from trialmatchai.cli.bootstrap_data import main as command diff --git a/src/trialmatchai/cli/pipeline.py b/src/trialmatchai/cli/pipeline.py new file mode 100644 index 00000000..860c3b28 --- /dev/null +++ b/src/trialmatchai/cli/pipeline.py @@ -0,0 +1,106 @@ +"""``trialmatchai pipeline`` — the one end-to-end pipeline, or any slice of it. + +Default (no selection) runs every stage; each is idempotent, so finished work is +skipped. Select with --only/--from/--to, omit with --skip (handy for ablation), +and redo with --force. +""" + +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +from trialmatchai.config.config_loader import load_config +from trialmatchai.pipeline import STAGE_NAMES, StageContext, run_pipeline +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +def _split(value: str | None) -> list[str]: + return [v.strip() for v in (value or "").split(",") if v.strip()] + + +def main() -> int: + parser = argparse.ArgumentParser( + prog="trialmatchai pipeline", + description=( + "Run the unified TrialMatchAI pipeline or any slice. Stages in order: " + + ", ".join(STAGE_NAMES) + + ". Every stage is idempotent — finished work is skipped automatically." + ), + ) + parser.add_argument("--config", default=None, help="Path to config.json") + parser.add_argument( + "--input", + action="append", + default=[], + help="Patient input file/dir to ingest (repeatable).", + ) + parser.add_argument("--format", default="auto", help="Patient input format (default: auto).") + parser.add_argument( + "--no-entities", action="store_true", help="Ingest patients without entity annotation." + ) + parser.add_argument( + "--trials-json-folder", + default=None, + help="Normalized trial JSONs for prepare. Defaults to config paths.trials_json_folder.", + ) + parser.add_argument("--processed-trials-folder", default="data/processed_trials") + parser.add_argument("--processed-criteria-folder", default="data/processed_criteria") + parser.add_argument( + "--concepts", + action="store_true", + help="In the concepts stage, build the open-vocabulary concept store.", + ) + parser.add_argument("--concepts-csv", default=None, help="OMOP CONCEPT.csv for the concepts stage.") + parser.add_argument("--synonym-csv", default=None, help="OMOP CONCEPT_SYNONYM.csv.") + + sel = parser.add_argument_group("stage selection") + sel.add_argument("--only", default=None, metavar="STAGES", help="Run only these stages.") + sel.add_argument( + "--skip", + default="", + metavar="STAGES", + help="Skip these stages (e.g. ablation: --skip expand).", + ) + sel.add_argument("--from", dest="from_stage", default=None, metavar="STAGE", help="First stage.") + sel.add_argument("--to", dest="to_stage", default=None, metavar="STAGE", help="Last stage.") + sel.add_argument( + "--force", + default="", + metavar="STAGES", + help="Re-run these stages even if done ('all' forces everything).", + ) + args = parser.parse_args() + + config = load_config(args.config) + ctx = StageContext( + config=config, + trials_json_folder=Path(args.trials_json_folder) if args.trials_json_folder else None, + processed_trials_folder=Path(args.processed_trials_folder), + processed_criteria_folder=Path(args.processed_criteria_folder), + inputs=list(args.input), + input_format=args.format, + with_entities=not args.no_entities, + concepts="open" if args.concepts else None, + concept_csv=args.concepts_csv, + synonym_csv=args.synonym_csv, + force=set(_split(args.force)), + ) + try: + return run_pipeline( + ctx, + only=_split(args.only) or None, + skip=_split(args.skip), + from_stage=args.from_stage, + to_stage=args.to_stage, + ) + except ValueError as exc: + parser.error(str(exc)) + return 2 # pragma: no cover - parser.error exits + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/trialmatchai/pipeline.py b/src/trialmatchai/pipeline.py new file mode 100644 index 00000000..d11786ad --- /dev/null +++ b/src/trialmatchai/pipeline.py @@ -0,0 +1,211 @@ +"""The single TrialMatchAI pipeline: an ordered registry of idempotent stages. + +Every command is a *slice* of this one pipeline. Each stage wraps an +already-idempotent orchestration function (it internally skips work that is done), +so the driver only decides **which** stages to run from the user's selection +(`--only` / `--skip` / `--from` / `--to`) and which to **force** (`--force`). + +Because each stage is idempotent, running the whole pipeline from any starting +state "just works": finished stages are cheap no-ops, unfinished ones run. That is +the "one e2e workflow, maximally modular, never redo finished work" contract — a +stage is the unit of modularity, and the e2e run is simply "run every stage". +""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from pathlib import Path +from typing import Any, Callable, Iterable, Sequence + +from trialmatchai.utils.logging_config import setup_logging + +logger = setup_logging(__name__) + + +@dataclass +class StageContext: + """Everything the stages need, resolved once and threaded through the run.""" + + config: dict[str, Any] + trials_json_folder: Path | None = None + processed_trials_folder: Path = Path("data/processed_trials") + processed_criteria_folder: Path = Path("data/processed_criteria") + inputs: list[str] = field(default_factory=list) + input_format: str = "auto" + with_entities: bool = True + nct_filter: set[str] | None = None + concepts: str | None = None # "open" -> build the open concept store + concept_csv: str | None = None + synonym_csv: str | None = None + qrels: dict | None = None # provided by the TREC preset -> enables eval + results_dir: Path | None = None + force: set[str] = field(default_factory=set) + + def forced(self, name: str) -> bool: + return name in self.force or "all" in self.force + + +# --------------------------------------------------------------------------- # +# Stage run wrappers — each delegates to an existing idempotent function. +# --------------------------------------------------------------------------- # +def _run_prepare(ctx: StageContext) -> None: + from trialmatchai.orchestration import prepare_corpus + + trials_json = ctx.trials_json_folder or ctx.config["paths"]["trials_json_folder"] + prepare_corpus( + ctx.config, + trials_json_folder=trials_json, + processed_trials_folder=ctx.processed_trials_folder, + processed_criteria_folder=ctx.processed_criteria_folder, + force=ctx.forced("prepare"), + ) + + +def _run_concepts(ctx: StageContext) -> None: + if not ctx.concepts and not ctx.concept_csv: + logger.info( + "concepts: not requested (pass concepts='open' and/or a concept_csv); skipping." + ) + return + from trialmatchai.cli.build_concepts import run_build_concepts + + run_build_concepts( + ctx.config, + sources=ctx.concepts, + concept_csv=ctx.concept_csv, + synonym_csv=ctx.synonym_csv, + force=ctx.forced("concepts"), + ) + + +def _run_index(ctx: StageContext) -> None: + from trialmatchai.orchestration import build_index + + build_index( + ctx.config, + processed_trials_folder=ctx.processed_trials_folder, + processed_criteria_folder=ctx.processed_criteria_folder, + nct_filter=ctx.nct_filter, + force=ctx.forced("index"), + ) + + +def _run_ingest(ctx: StageContext) -> None: + if not ctx.inputs: + logger.info("ingest: no inputs given; skipping (using already-imported profiles).") + return + from trialmatchai.orchestration import ingest_inputs + + ingest_inputs( + ctx.config, + ctx.inputs, + input_format=ctx.input_format, + with_entities=ctx.with_entities, + force=ctx.forced("ingest"), + ) + + +def _run_expand(ctx: StageContext) -> None: + from trialmatchai.orchestration import expand_queries + + expand_queries(ctx.config, force=ctx.forced("expand")) + + +def _run_match(ctx: StageContext) -> None: + from trialmatchai.orchestration import run_matching + + rc = run_matching(ctx.config, resume=True, force=ctx.forced("match")) + if rc != 0: + raise RuntimeError(f"match stage returned exit code {rc}") + + +def _run_eval(ctx: StageContext) -> None: + if ctx.qrels is None: + logger.info("eval: no qrels provided; skipping (not a benchmark run).") + return + from trialmatchai.trec import qrels as qrels_mod + from trialmatchai.utils.file_utils import write_json_file + + results_dir = Path(ctx.results_dir or ctx.config["paths"]["output_dir"]) + metrics = qrels_mod.evaluate(ctx.qrels, results_dir) + write_json_file(metrics, str(results_dir / "evaluation_metrics.json")) + logger.info("eval: %s", metrics.get("mean")) + + +@dataclass(frozen=True) +class Stage: + name: str + run: Callable[[StageContext], None] + help: str + + +# The canonical ordered pipeline. (acquire/fetch live in bootstrap-data / +# update-registry today; they will join this registry as `fetch` is unified.) +STAGES: tuple[Stage, ...] = ( + Stage("prepare", _run_prepare, "embed + entity-annotate the trial corpus"), + Stage("concepts", _run_concepts, "build the entity-linking concept store"), + Stage("index", _run_index, "build the LanceDB search tables"), + Stage("ingest", _run_ingest, "import patient inputs into canonical profiles"), + Stage("expand", _run_expand, "CoT query expansion of patient summaries"), + Stage("match", _run_match, "retrieval + reranking + CoT eligibility + ranking"), + Stage("eval", _run_eval, "score results against qrels (benchmark runs)"), +) +STAGE_NAMES: tuple[str, ...] = tuple(s.name for s in STAGES) + + +def _validate(names: Iterable[str]) -> None: + bad = sorted(set(names) - set(STAGE_NAMES)) + if bad: + raise ValueError(f"unknown stage(s) {bad}; valid stages: {list(STAGE_NAMES)}") + + +def select_stages( + *, + only: Sequence[str] | None = None, + skip: Sequence[str] = (), + from_stage: str | None = None, + to_stage: str | None = None, +) -> list[Stage]: + """Resolve the user's selection into an ordered list of stages to run.""" + if only: + _validate(only) + chosen = set(only) + return [s for s in STAGES if s.name in chosen] + + for endpoint in (from_stage, to_stage): + if endpoint is not None: + _validate([endpoint]) + _validate(skip) + + start = STAGE_NAMES.index(from_stage) if from_stage else 0 + end = STAGE_NAMES.index(to_stage) + 1 if to_stage else len(STAGES) + if start > end - 1: + raise ValueError(f"--from {from_stage} is after --to {to_stage}") + skipped = set(skip) + return [s for s in STAGES[start:end] if s.name not in skipped] + + +def run_pipeline( + ctx: StageContext, + *, + only: Sequence[str] | None = None, + skip: Sequence[str] = (), + from_stage: str | None = None, + to_stage: str | None = None, +) -> int: + """Run the selected pipeline slice, freeing GPU models once at the end.""" + stages = select_stages(only=only, skip=skip, from_stage=from_stage, to_stage=to_stage) + if not stages: + logger.warning("No stages selected; nothing to do.") + return 0 + logger.info("Pipeline: %s", " -> ".join(s.name for s in stages)) + try: + for stage in stages: + logger.info("================ stage: %s ================", stage.name) + stage.run(ctx) + finally: + from trialmatchai.orchestration import free_models + + free_models() + logger.info("Pipeline complete: %s", " -> ".join(s.name for s in stages)) + return 0 diff --git a/tests/test_pipeline.py b/tests/test_pipeline.py new file mode 100644 index 00000000..29ff5986 --- /dev/null +++ b/tests/test_pipeline.py @@ -0,0 +1,96 @@ +"""The unified pipeline driver: stage selection, force semantics, teardown.""" + +import pytest + +from trialmatchai import pipeline +from trialmatchai.pipeline import StageContext, select_stages + + +def _names(stages): + return [s.name for s in stages] + + +def test_default_selection_is_every_stage_in_order(): + assert _names(select_stages()) == list(pipeline.STAGE_NAMES) + + +def test_only_selects_exactly_those_in_canonical_order(): + assert _names(select_stages(only=["match", "prepare"])) == ["prepare", "match"] + + +def test_from_to_slice(): + assert _names(select_stages(from_stage="index", to_stage="match")) == [ + "index", + "ingest", + "expand", + "match", + ] + + +def test_to_alone_runs_the_build_half(): + assert _names(select_stages(to_stage="index")) == ["prepare", "concepts", "index"] + + +def test_from_alone_runs_the_run_half(): + assert _names(select_stages(from_stage="ingest")) == ["ingest", "expand", "match", "eval"] + + +def test_skip_removes_a_stage(): + assert "expand" not in _names(select_stages(skip=["expand"])) + + +def test_unknown_stage_raises(): + with pytest.raises(ValueError): + select_stages(only=["nonsense"]) + with pytest.raises(ValueError): + select_stages(skip=["nope"]) + with pytest.raises(ValueError): + select_stages(from_stage="bogus") + + +def test_from_after_to_raises(): + with pytest.raises(ValueError): + select_stages(from_stage="match", to_stage="prepare") + + +def test_forced_semantics(): + ctx = StageContext(config={}, force={"match"}) + assert ctx.forced("match") is True + assert ctx.forced("prepare") is False + assert StageContext(config={}, force={"all"}).forced("anything") is True + + +def _fake_stages(record): + return tuple( + pipeline.Stage(n, (lambda name: lambda ctx: record.append(name))(n), "") + for n in ("a", "b", "c") + ) + + +def test_run_pipeline_runs_selected_in_order_and_frees_models(monkeypatch): + ran, freed = [], [] + fakes = _fake_stages(ran) + monkeypatch.setattr(pipeline, "STAGES", fakes) + monkeypatch.setattr(pipeline, "STAGE_NAMES", tuple(s.name for s in fakes)) + monkeypatch.setattr("trialmatchai.orchestration.free_models", lambda: freed.append(1)) + + rc = pipeline.run_pipeline(StageContext(config={}), only=["a", "c"]) + assert rc == 0 + assert ran == ["a", "c"] + assert freed == [1] # teardown ran once + + +def test_run_pipeline_frees_models_even_on_stage_error(monkeypatch): + freed = [] + + def boom(ctx): + raise RuntimeError("stage failed") + + fakes = (pipeline.Stage("a", boom, ""),) + monkeypatch.setattr(pipeline, "STAGES", fakes) + monkeypatch.setattr(pipeline, "STAGE_NAMES", ("a",)) + monkeypatch.setattr("trialmatchai.orchestration.free_models", lambda: freed.append(1)) + + with pytest.raises(RuntimeError): + pipeline.run_pipeline(StageContext(config={})) + assert freed == [1] # GPU freed despite the failure From 1f9d02b4b80a2777d59c45e5440b9fdc25ba3b81 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 23:06:54 +0200 Subject: [PATCH 55/64] refactor(e2e): run_e2e delegates to the unified pipeline (index..match) run_e2e is now a thin preset over run_pipeline(--from index --to match), mapping its granular force flags to per-stage forces. Same stages, same idempotency, one teardown. Removes a duplicate stage-chain; the driver is the single spine. --- src/trialmatchai/orchestration.py | 44 +++++++++++++++++-------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/trialmatchai/orchestration.py b/src/trialmatchai/orchestration.py index 2025e2f6..3227016e 100644 --- a/src/trialmatchai/orchestration.py +++ b/src/trialmatchai/orchestration.py @@ -295,27 +295,31 @@ def run_e2e( force_reindex: bool = False, force_rematch: bool = False, ) -> int: - """Ingest -> index -> match, each stage idempotent. Returns a process code.""" - if inputs: - ingest_inputs( - config, - inputs, - input_format=input_format, - with_entities=with_entities, - force=force_reingest, - ) - expand_queries(config, force=force_rematch) - build_index( - config, - processed_trials_folder=processed_trials_folder, - processed_criteria_folder=processed_criteria_folder, - nct_filter=nct_filter, - force=force_reindex, + """Ingest -> index -> match: the run-half slice of the unified pipeline. + + A thin preset over ``run_pipeline`` (index..match): index/ingest/expand/match + are idempotent so this resumes from any state, and GPU models are freed once. + """ + from trialmatchai.pipeline import StageContext, run_pipeline + + force: set[str] = set() + if force_reingest: + force.add("ingest") + if force_reindex: + force.add("index") + if force_rematch: + force.update({"expand", "match"}) + ctx = StageContext( + config=config, + processed_trials_folder=Path(processed_trials_folder), + processed_criteria_folder=Path(processed_criteria_folder), + inputs=list(inputs), + input_format=input_format, + with_entities=with_entities, + nct_filter=set(nct_filter) if nct_filter is not None else None, + force=force, ) - try: - return run_matching(config, resume=True, force=force_rematch) - finally: - free_models() + return run_pipeline(ctx, from_stage="index", to_stage="match") # --------------------------------------------------------------------------- # From 4e57ba55c6337df9aa19ecd95b0f43a37ecd2c25 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 23:10:32 +0200 Subject: [PATCH 56/64] build: PyPI-ready metadata + trusted-publishing release workflow Add authors/keywords/classifiers/project-urls so the PyPI page is professional (name 'trialmatchai' is available). Add .github/workflows/release.yml: on a published GitHub Release it builds the sdist+wheel, runs twine check, and publishes to PyPI via Trusted Publishing (OIDC, no stored token). After this, 'uv pip install trialmatchai' works with no clone; data/models still come from 'trialmatchai bootstrap-data' (Zenodo). --- .github/workflows/release.yml | 44 +++++++++++++++++++++++++++++++++++ pyproject.toml | 30 ++++++++++++++++++++++-- 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..c225b296 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,44 @@ +name: Release + +# Publishes trialmatchai to PyPI when a GitHub Release is published. +# Uses PyPI Trusted Publishing (OIDC) — no API token is stored in the repo. +# One-time setup on PyPI: add a Trusted Publisher for this repo + workflow + +# the `pypi` environment (https://docs.pypi.org/trusted-publishers/). + +on: + release: + types: [published] + workflow_dispatch: {} + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: astral-sh/setup-uv@v5 + - name: Build sdist + wheel + run: uv build + - name: Check the built metadata + run: uvx twine check dist/* + - uses: actions/upload-artifact@v4 + with: + name: dist + path: dist/ + + pypi-publish: + needs: build + runs-on: ubuntu-latest + environment: pypi + permissions: + id-token: write # required for PyPI Trusted Publishing (OIDC) + steps: + - uses: actions/download-artifact@v4 + with: + name: dist + path: dist/ + - uses: astral-sh/setup-uv@v5 + - name: Publish to PyPI + run: uv publish --trusted-publishing always diff --git a/pyproject.toml b/pyproject.toml index 465f1f8b..6a2f9cba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,11 +5,31 @@ build-backend = "setuptools.build_meta" [project] name = "trialmatchai" version = "0.2.0" -description = "AI-driven clinical trial matching pipeline." +description = "AI-driven patient-to-clinical-trial matching: hybrid retrieval + LLM eligibility reasoning." readme = "README.md" requires-python = ">=3.11,<3.12" license = "MIT" license-files = ["LICENSE"] +authors = [{ name = "Majd Abdallah", email = "majd@physight.com" }] +keywords = [ + "clinical-trials", + "patient-trial-matching", + "biomedical-nlp", + "information-retrieval", + "large-language-models", + "eligibility", + "healthcare", +] +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Healthcare Industry", + "Intended Audience :: Science/Research", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.11", + "Topic :: Scientific/Engineering :: Bio-Informatics", + "Topic :: Scientific/Engineering :: Artificial Intelligence", +] dependencies = [ "numpy>=2.0,<3", "pandas==2.2.3", @@ -55,10 +75,16 @@ finetune = [ [project.scripts] # Single entry point. Every capability is a subcommand: `trialmatchai ` -# (healthcheck, bootstrap-data, index, build-concepts, update-registry, +# (pipeline, healthcheck, bootstrap-data, index, build-concepts, update-registry, # import-patient, build, run, e2e, trec, finetune). trialmatchai = "trialmatchai.cli.main:main" +[project.urls] +Homepage = "https://github.com/cbib/TrialMatchAI" +Repository = "https://github.com/cbib/TrialMatchAI" +Issues = "https://github.com/cbib/TrialMatchAI/issues" +Paper = "https://doi.org/10.1038/s41467-026-70509-w" + [dependency-groups] dev = [ "pytest>=8.3", From f1d80d343804141e8c53e6e028365a2dd2d61f72 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 23:11:30 +0200 Subject: [PATCH 57/64] build: use gmail for package author attribution --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6a2f9cba..f1ae92cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ readme = "README.md" requires-python = ">=3.11,<3.12" license = "MIT" license-files = ["LICENSE"] -authors = [{ name = "Majd Abdallah", email = "majd@physight.com" }] +authors = [{ name = "Majd Abdallah", email = "abdallahmajd7@gmail.com" }] keywords = [ "clinical-trials", "patient-trial-matching", From 74ac109994686641e78f1ca1ed1d2e61f41595b1 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 23:18:30 +0200 Subject: [PATCH 58/64] docs: professional MkDocs Material site + auto API reference + deploy Add a MkDocs Material site (mkdocs.yml) with mkdocstrings auto API reference from the docstrings, a home page, and a unified Pipeline & CLI guide (stage list + --only/--skip/--from/--to/--force + presets + ablation). Add the 'docs' dependency group and .github/workflows/docs.yml (build --strict on push/PR, gh-deploy to GitHub Pages on main). Build validated locally (mkdocs build --strict, clean). --- .github/workflows/docs.yml | 28 +++++ .gitignore | 1 + docs/api.md | 53 ++++++++ docs/index.md | 54 ++++++++ docs/pipeline.md | 85 +++++++++++++ mkdocs.yml | 65 ++++++++++ pyproject.toml | 4 + uv.lock | 248 +++++++++++++++++++++++++++++++++++++ 8 files changed, 538 insertions(+) create mode 100644 .github/workflows/docs.yml create mode 100644 docs/api.md create mode 100644 docs/index.md create mode 100644 docs/pipeline.md create mode 100644 mkdocs.yml diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000..7b340991 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,28 @@ +name: Docs + +# Build the MkDocs site (strict) on every push/PR; deploy to GitHub Pages on main. +on: + push: + branches: [main, deployment-readiness-audit] + pull_request: + branches: [main] + workflow_dispatch: {} + +permissions: + contents: write # mkdocs gh-deploy pushes to the gh-pages branch + +jobs: + docs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: astral-sh/setup-uv@v5 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Build docs (strict) + run: uv run --group docs mkdocs build --strict + - name: Deploy to GitHub Pages (main only) + if: github.ref == 'refs/heads/main' + run: uv run --group docs mkdocs gh-deploy --force diff --git a/.gitignore b/.gitignore index e089064b..f5c27f2b 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,4 @@ scripts/*.sh **/tmp/ .DS_Store Thumbs.db +site/ diff --git a/docs/api.md b/docs/api.md new file mode 100644 index 00000000..b8db898a --- /dev/null +++ b/docs/api.md @@ -0,0 +1,53 @@ +# API reference + +Auto-generated from docstrings. The pipeline is the primary public API; the +orchestration stages and evaluation metrics are documented for programmatic use. + +## Pipeline + +::: trialmatchai.pipeline + options: + members: + - StageContext + - Stage + - STAGES + - select_stages + - run_pipeline + +## Orchestration stages + +::: trialmatchai.orchestration + options: + members: + - ingest_inputs + - expand_queries + - build_index + - run_matching + - prepare_corpus + - build_system + - build_state + +## Registry updater + +::: trialmatchai.registry.updater + options: + members: + - RegistryUpdater + - RegistryUpdateConfig + - RegistryUpdateReport + +## Evaluation metrics + +::: trialmatchai.trec.metrics + options: + members: + - ndcg_at_k + - condensed_ndcg + - precision_at_k + +::: trialmatchai.trec.qrels + options: + members: + - parse_qrels + - corpus_ncts + - evaluate diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..3f495894 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,54 @@ +# TrialMatchAI + +**AI-driven patient-to-clinical-trial matching.** Import a patient — free text, +FHIR, Phenopacket, or OMOP — and get ranked, eligible trials with criterion-level +eligibility explanations. Local LanceDB hybrid search + vLLM reasoning on a single +GPU server; no Elasticsearch or hosted vector database to run. + +!!! warning "Research and informational use only" + TrialMatchAI is not medical advice, not a medical device, and must not replace + review by qualified healthcare professionals. + +## Install + +```bash +uv pip install "trialmatchai[llm,gpu,entity]" # full model-backed runtime (GPU host) +# or, lightweight (CLI + base deps only): +uv pip install trialmatchai +``` + +## The two halves + +TrialMatchAI runs in two halves — **build the system once**, then **match patients +many times** — and both are idempotent: finished work is never redone. + +```bash +trialmatchai bootstrap-data # fetch the prepared corpus + adapters (Zenodo) +trialmatchai build --concepts # prepare + index + concept store (resumable) +trialmatchai e2e --input patient.txt # ingest + match one patient +# -> results//ranked_trials.json +``` + +## One pipeline, maximally modular + +Under the hood everything is a slice of a single, ordered pipeline of idempotent +stages. Run the whole thing, or any subset: + +```bash +trialmatchai pipeline # run every stage (skipping what's done) +trialmatchai pipeline --only match # just (re)match +trialmatchai pipeline --to index # the build half +trialmatchai pipeline --skip expand # ablation: no query expansion +trialmatchai pipeline --force match # redo a stage even if done +``` + +See **[Pipeline & CLI](pipeline.md)** for the stage list and flag scheme, +**[Architecture](architecture.md)** for how it fits together, and the +**[API reference](api.md)** for the Python API. + +## Cite + +> Abdallah, M. *et al.* TrialMatchAI: an end-to-end AI-powered clinical trial +> recommendation system to streamline patient-to-trial matching. *Nature +> Communications* **17**, 4472 (2026). +> diff --git a/docs/pipeline.md b/docs/pipeline.md new file mode 100644 index 00000000..9e671d64 --- /dev/null +++ b/docs/pipeline.md @@ -0,0 +1,85 @@ +# Pipeline & CLI + +TrialMatchAI is **one end-to-end pipeline** built from an ordered registry of +**idempotent stages**. Every command is a *slice* of this pipeline. Because each +stage detects and skips work that is already done, a run "just works" from any +starting state — finished stages are cheap no-ops, unfinished ones run. + +## The stages + +| # | Stage | What it does | Idempotency check | +|---|-------|--------------|-------------------| +| 1 | `prepare` | embed + entity-annotate the trial corpus | per-trial prepared file | +| 2 | `concepts` | build the entity-linking concept store | concept table present | +| 3 | `index` | build the LanceDB search tables | both tables present | +| 4 | `ingest` | import patient inputs into canonical profiles | per-patient profile | +| 5 | `expand` | CoT query expansion of patient summaries | `query_expanded` marker | +| 6 | `match` | retrieval + reranking + CoT eligibility + ranking | per-patient `ranked_trials.json` | +| 7 | `eval` | score results against qrels (benchmark runs) | benchmark-only | + +## The single command + +```bash +trialmatchai pipeline [selection] [options] +``` + +**Selection — run any subset** (the unit of modularity is the stage): + +| Flag | Meaning | Example | +|------|---------|---------| +| *(none)* | run every stage, skipping what's done | `trialmatchai pipeline` | +| `--only` | run exactly these stages | `--only match,eval` | +| `--from` / `--to` | run a contiguous slice | `--from index --to match` | +| `--skip` | omit stages (great for ablation) | `--skip expand` | +| `--force` | redo stages even if done (`all` = everything) | `--force match` | + +**Options:** `--input` (repeatable patient files/dirs), `--format`, +`--trials-json-folder`, `--processed-trials-folder`, `--processed-criteria-folder`, +`--concepts` / `--concepts-csv` / `--synonym-csv`, `--config`. + +```bash +trialmatchai pipeline --only prepare,index # build the search index +trialmatchai pipeline --input patient.fhir.json # ingest + match one patient +trialmatchai pipeline --skip concepts,expand # leaner run for an ablation +trialmatchai pipeline --force all # rebuild everything from scratch +``` + +## Ablation + +Stage flags double as ablation knobs — toggle a component and compare: + +```bash +trialmatchai pipeline --skip expand # matching without LLM query expansion +trialmatchai pipeline --skip concepts # without entity-concept linking +``` + +Component backends (reranker, CoT, search mode `bm25`/`vector`/`hybrid`) are set in +the config; see [Architecture](architecture.md). + +## Presets (the same pipeline, named) + +These are thin wrappers over the pipeline that add their own setup: + +| Command | Equivalent slice | Adds | +|---------|------------------|------| +| `trialmatchai build` | `--to index` | build manifest; bootstrap-aware prepare | +| `trialmatchai e2e` | `--from index --to match` | patient ingestion convenience | +| `trialmatchai trec` | `--from index --to eval` (per track) | official topics + qrels + corpus restriction | +| `trialmatchai run` | `--only match` | match already-staged profiles | +| `trialmatchai index` | `--only prepare,index` | — | + +Every command is idempotent and resumable: re-running continues from the last +completed work. + +## Python API + +```python +from trialmatchai.config.config_loader import load_config +from trialmatchai.pipeline import StageContext, run_pipeline + +ctx = StageContext(config=load_config(), inputs=["patient.txt"]) +run_pipeline(ctx, from_stage="index", to_stage="match") +``` + +See the [API reference](api.md) for `StageContext`, `Stage`, `select_stages`, and +`run_pipeline`. diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..7a566fec --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,65 @@ +site_name: TrialMatchAI +site_description: AI-driven patient-to-clinical-trial matching — hybrid retrieval + LLM eligibility reasoning +site_url: https://cbib.github.io/TrialMatchAI/ +repo_url: https://github.com/cbib/TrialMatchAI +repo_name: cbib/TrialMatchAI +copyright: "© TrialMatchAI — MIT licensed" + +theme: + name: material + features: + - navigation.sections + - navigation.top + - navigation.tracking + - content.code.copy + - content.code.annotate + - search.suggest + - search.highlight + palette: + - scheme: default + primary: teal + accent: teal + toggle: + icon: material/weather-night + name: Switch to dark mode + - scheme: slate + primary: teal + accent: teal + toggle: + icon: material/weather-sunny + name: Switch to light mode + +plugins: + - search + - mkdocstrings: + handlers: + python: + paths: [src] + options: + show_root_heading: true + show_source: true + members_order: source + separate_signature: true + docstring_section_style: spacy + +markdown_extensions: + - admonition + - pymdownx.details + - pymdownx.superfences + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.tabbed: + alternate_style: true + - tables + - toc: + permalink: true + +nav: + - Home: index.md + - Architecture: architecture.md + - Pipeline & CLI: pipeline.md + - Patient interoperability: interoperability.md + - Registry updater: registry-updater.md + - Fine-tuning: finetuning.md + - API reference: api.md + - Release process: release.md diff --git a/pyproject.toml b/pyproject.toml index f1ae92cb..9acbeeaf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -92,6 +92,10 @@ dev = [ "pip-audit>=2.7.3", "pre-commit>=4.0", ] +docs = [ + "mkdocs-material>=9.5", + "mkdocstrings[python]>=0.26", +] [tool.setuptools] package-dir = {"" = "src"} diff --git a/uv.lock b/uv.lock index e0c71dc3..5438dfb7 100644 --- a/uv.lock +++ b/uv.lock @@ -157,6 +157,25 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, ] +[[package]] +name = "babel" +version = "2.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, +] + +[[package]] +name = "backrefs" +version = "7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/a7dd63622beef68cc0d3c3c36d472e143dd95443d5ebf14cd1a5b4dfbf11/backrefs-7.0.tar.gz", hash = "sha256:4989bb9e1e99eb23647c7160ed51fb21d0b41b5d200f2d3017da41e023097e82", size = 7012453, upload-time = "2026-04-28T16:28:04.215Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/39/39a31d7eae729ea14ed10c3ccef79371197177b9355a86cb3525709e8502/backrefs-7.0-py310-none-any.whl", hash = "sha256:b57cd227ea556b0aed3dc9b8da4628db4eabc0402c6d7fcfc69283a93955f7e9", size = 380824, upload-time = "2026-04-28T16:27:55.647Z" }, + { url = "https://files.pythonhosted.org/packages/c9/b5/9302644225ba7dfa934a2ff2b9c7bb85701313a90dddb3dfaf693fa5bae2/backrefs-7.0-py311-none-any.whl", hash = "sha256:a0fa7360c63509e9e077e174ef4e6d3c21c8db94189b9d957289ae6d794b9475", size = 392626, upload-time = "2026-04-28T16:27:57.42Z" }, +] + [[package]] name = "bitsandbytes" version = "0.49.2" @@ -290,6 +309,15 @@ 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 = "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 = "compressed-tensors" version = "0.17.0" @@ -778,6 +806,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b3/bb/d71d6da82763528c2c2ed6b59a9d6142c6595545a4c448e2085d155e88c2/gguf-0.19.0-py3-none-any.whl", hash = "sha256:70bcd10edfe697fb2dad6e40af2234b9d8ece9a41a99761405121ebda1c3c1cd", size = 118475, upload-time = "2026-05-06T13:04:02.588Z" }, ] +[[package]] +name = "ghp-import" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" }, +] + [[package]] name = "gliner" version = "0.2.27" @@ -823,6 +863,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e7/c8/e2645aa8ed02fd4c7a2f59d68783b65b1f3cbdfe39a6308e156509d1fee8/googleapis_common_protos-1.75.0-py3-none-any.whl", hash = "sha256:961ed60399c457ceb0ee8f285a84c870aabc9c6a832b9d37bb281b5bebde43ed", size = 300631, upload-time = "2026-05-07T08:03:30.345Z" }, ] +[[package]] +name = "griffelib" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/e4/8d187ea29c2e30b3a09505c567513077d6117861bde1fbd997a167f262ec/griffelib-2.1.0.tar.gz", hash = "sha256:762a186d2c6fd6794d4ea20d428d597ffb857cb56b66421651cbba15bdd5e813", size = 216234, upload-time = "2026-06-19T12:05:42.278Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/d3/5268aeabf2ad82658c4e2ff3a060648d0f02f3926cb53247c0e4d0dab49e/griffelib-2.1.0-py3-none-any.whl", hash = "sha256:cc7b3d2d2865ad0b909fcc38086e3f554b5ea7acbaa7bbb7ecaa3f5dfb7d9f00", size = 142560, upload-time = "2026-06-19T12:05:38.742Z" }, +] + [[package]] name = "grpcio" version = "1.81.1" @@ -1172,6 +1221,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, ] +[[package]] +name = "markdown" +version = "3.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, +] + [[package]] name = "markdown-it-py" version = "4.2.0" @@ -1229,6 +1287,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, ] +[[package]] +name = "mergedeep" +version = "1.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" }, +] + [[package]] name = "mistral-common" version = "1.11.3" @@ -1253,6 +1320,124 @@ image = [ { name = "opencv-python-headless", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] +[[package]] +name = "mkdocs" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "ghp-import", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "jinja2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "markdown", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "markupsafe", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mergedeep", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs-get-deps", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "packaging", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pathspec", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml-env-tag", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "watchdog", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" }, +] + +[[package]] +name = "mkdocs-autorefs" +version = "1.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "markupsafe", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/c0/f641843de3f612a6b48253f39244165acff36657a91cc903633d456ae1ac/mkdocs_autorefs-1.4.4.tar.gz", hash = "sha256:d54a284f27a7346b9c38f1f852177940c222da508e66edc816a0fa55fc6da197", size = 56588, upload-time = "2026-02-10T15:23:55.105Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl", hash = "sha256:834ef5408d827071ad1bc69e0f39704fa34c7fc05bc8e1c72b227dfdc5c76089", size = 25530, upload-time = "2026-02-10T15:23:53.817Z" }, +] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mergedeep", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "platformdirs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/25/b3cccb187655b9393572bde9b09261d267c3bf2f2cdabe347673be5976a6/mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1", size = 11047, upload-time = "2026-03-10T02:46:33.632Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z" }, +] + +[[package]] +name = "mkdocs-material" +version = "9.7.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "babel", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "backrefs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "colorama", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "jinja2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "markdown", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs-material-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "paginate", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pygments", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pymdown-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "requests", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/45/29/6d2bcf41ae40802c4beda2432396fff97b8456fb496371d1bc7aad6512ec/mkdocs_material-9.7.6.tar.gz", hash = "sha256:00bdde50574f776d328b1862fe65daeaf581ec309bd150f7bff345a098c64a69", size = 4097959, upload-time = "2026-03-19T15:41:58.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl", hash = "sha256:71b84353921b8ea1ba84fe11c50912cc512da8fe0881038fcc9a0761c0e635ba", size = 9305470, upload-time = "2026-03-19T15:41:55.217Z" }, +] + +[[package]] +name = "mkdocs-material-extensions" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" }, +] + +[[package]] +name = "mkdocstrings" +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jinja2", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "markdown", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "markupsafe", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs-autorefs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pymdown-extensions", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/5d/f888d4d3eb31359b327bc9b17a212d6ef03fe0b0682fbb3fc2cb849fb12b/mkdocstrings-1.0.4.tar.gz", hash = "sha256:3969a6515b77db65fd097b53c1b7aa4ae840bd71a2ee62a6a3e89503446d7172", size = 100088, upload-time = "2026-04-15T09:16:53.376Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl", hash = "sha256:63464b4b29053514f32a1dbbf604e52876d5e638111b0c295ab7ed3cac73ca9b", size = 35560, upload-time = "2026-04-15T09:16:51.436Z" }, +] + +[package.optional-dependencies] +python = [ + { name = "mkdocstrings-python", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] + +[[package]] +name = "mkdocstrings-python" +version = "2.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "griffelib", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocs-autorefs", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocstrings", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/b6/e858701499d57eee8b3fd8e78168083956c6683ddbe727b46758b19e1119/mkdocstrings_python-2.0.5.tar.gz", hash = "sha256:3a4d92556ad39637e88af94a5374213af9a8e3040c3824ceaed04b486c017594", size = 199578, upload-time = "2026-06-19T10:41:08.868Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/fc/10ab7e80650a9c9e8f4f1105f8c8e73567f88ed0c06ada589ab81d38687c/mkdocstrings_python-2.0.5-py3-none-any.whl", hash = "sha256:30c837bbff016549f659fcba6539ac351303f0fd7e713c89a040611072236e9d", size = 104951, upload-time = "2026-06-19T10:41:07.378Z" }, +] + [[package]] name = "ml-dtypes" version = "0.5.4" @@ -1882,6 +2067,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451, upload-time = "2024-11-08T09:47:44.722Z" }, ] +[[package]] +name = "paginate" +version = "0.5.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" }, +] + [[package]] name = "pandas" version = "2.2.3" @@ -1910,6 +2104,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/42/32/658973117bf0fd82a24abbfb94fe73a5e86216e49342985e10acce54775a/partial_json_parser-0.2.1.1.post7-py3-none-any.whl", hash = "sha256:145119e5eabcf80cbb13844a6b50a85c68bf99d376f8ed771e2a3c3b03e653ae", size = 10877, upload-time = "2025-11-17T07:27:40.457Z" }, ] +[[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 = "peft" version = "0.15.2" @@ -2277,6 +2480,19 @@ crypto = [ { name = "cryptography", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] +[[package]] +name = "pymdown-extensions" +version = "11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/67/f1e79672a5f91985577c7984c9709ca110e4fd37fe7fd167b60422e6ccc2/pymdown_extensions-11.0.tar.gz", hash = "sha256:8269cef0247f9e2d0a62fcea10860aba05c1cbab5470fd4b63230b96434dc589", size = 857049, upload-time = "2026-06-23T02:27:45.146Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/b6/1ae53367e28b9cffa3be7574e13fbe4589694272fd47710fbdbafd3d63c6/pymdown_extensions-11.0-py3-none-any.whl", hash = "sha256:fbc4acb641814fa9d17521bbd21a5240ef739a662f11c06330c4b78c93e954d6", size = 269415, upload-time = "2026-06-23T02:27:43.826Z" }, +] + [[package]] name = "pyparsing" version = "3.3.2" @@ -2374,6 +2590,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, ] +[[package]] +name = "pyyaml-env-tag" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, +] + [[package]] name = "pyzmq" version = "27.1.0" @@ -2907,6 +3135,10 @@ dev = [ { name = "pytest", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, { name = "ruff", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, ] +docs = [ + { name = "mkdocs-material", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "mkdocstrings", extra = ["python"], marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, +] [package.metadata] requires-dist = [ @@ -2950,6 +3182,10 @@ dev = [ { name = "pytest", specifier = ">=8.3" }, { name = "ruff", specifier = ">=0.9.0" }, ] +docs = [ + { name = "mkdocs-material", specifier = ">=9.5" }, + { name = "mkdocstrings", extras = ["python"], specifier = ">=0.26" }, +] [[package]] name = "triton" @@ -3142,6 +3378,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/72/bc/652f889cde1a20585a0ee0b1b6d36109cd8177bb60020dcb8ff477448440/vllm-0.23.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:71eae985c79ddaa999328cc56d206a1e9b785e079fc6da9e2359ec56ef1c842a", size = 274070208, upload-time = "2026-06-13T09:28:16.037Z" }, ] +[[package]] +name = "watchdog" +version = "6.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" }, + { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" }, + { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, +] + [[package]] name = "watchfiles" version = "1.2.0" From 19423f774b74e1dfc37fa2d30cd03c35f0b03a3c Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 23:19:44 +0200 Subject: [PATCH 59/64] chore: align LICENSE author email with gmail attribution --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 940ec502..0a521cf5 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ MIT License Copyright (c) 2024 -Majd Abdallah (1,2) (majd.abdallah@u-bordeaux.fr ) +Majd Abdallah (1,2) (abdallahmajd7@gmail.com) Macha Nikolski (1,2) (macha.nikolski@u-bordeaux.fr) Mikaël Georges (1,2) (mikael.georges@u-bordeaux.fr) From 2f350f491313ec0000b971d48b1bda20f79afa5e Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 23:21:03 +0200 Subject: [PATCH 60/64] docs(readme): lead the CLI reference with the unified pipeline command --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5fdbd5a8..9f61b0c3 100644 --- a/README.md +++ b/README.md @@ -376,8 +376,16 @@ The full override list is in [`.env.example`](.env.example). ## CLI Reference -Every command is available both as a flat script (`trialmatchai build`) and as a -subcommand (`trialmatchai build`); they are equivalent. +There is a single entry point — `trialmatchai` — and every capability is a +subcommand. Under the hood they are all slices of **one idempotent pipeline**. + +**The unified pipeline (run any subset)** + +| Command | Purpose | +| --- | --- | +| `trialmatchai pipeline` | Run the whole pipeline, or any slice: `--only` / `--from` / `--to` / `--skip` / `--force` over the stages `prepare → concepts → index → ingest → expand → match → eval`. Idempotent — finished work is skipped. See [docs](https://cbib.github.io/TrialMatchAI/pipeline/). | + +The commands below are convenience presets over that pipeline. **Build the system (setup half)** From 71ab76abca3e630ddb50b0d11ea4aff4aa7160f6 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 23:35:48 +0200 Subject: [PATCH 61/64] chore: clear the merge-review minors - build-system: setuptools floor 68 -> 77 (PEP 639 SPDX license metadata). - ci: add 'pipeline' (the headline command) to the CLI help-smoke loop. - docs: correct e2e ordering text to the real slice (index -> ingest -> expand -> match); behavior was already correct, only the help/docstrings were stale. --- .github/workflows/ci.yml | 2 +- pyproject.toml | 3 ++- src/trialmatchai/cli/e2e.py | 11 ++++++----- src/trialmatchai/cli/main.py | 2 +- src/trialmatchai/orchestration.py | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3e31cf69..4ecf1987 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,7 +56,7 @@ jobs: run: | WHEEL="$(ls dist/trialmatchai-*.whl | head -n 1)" uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai --help - for cmd in healthcheck bootstrap-data index build-concepts update-registry \ + for cmd in pipeline healthcheck bootstrap-data index build-concepts update-registry \ import-patient build run e2e trec finetune; do uv run --python 3.11 --isolated --with "$WHEEL" trialmatchai "$cmd" --help done diff --git a/pyproject.toml b/pyproject.toml index 9acbeeaf..85133a79 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,6 @@ [build-system] -requires = ["setuptools>=68", "wheel"] +# >=77 for PEP 639 SPDX license metadata (license = "MIT" + license-files). +requires = ["setuptools>=77", "wheel"] build-backend = "setuptools.build_meta" [project] diff --git a/src/trialmatchai/cli/e2e.py b/src/trialmatchai/cli/e2e.py index 4d3b32b3..4e4c335b 100644 --- a/src/trialmatchai/cli/e2e.py +++ b/src/trialmatchai/cli/e2e.py @@ -1,8 +1,9 @@ -"""``trialmatchai e2e`` — run the whole pipeline end-to-end in one command. +"""``trialmatchai e2e`` — match a patient end-to-end in one command. -Ingest patient inputs (any supported format, auto-detected) -> build the search -index -> match. Every stage is idempotent: re-running skips already-imported -patients, an existing index, and already-matched patients. +A preset over the unified pipeline (the slice index -> ingest -> expand -> match): +imports patient inputs (any supported format, auto-detected), ensures the search +index, and matches. Every stage is idempotent: re-running skips an existing index, +already-imported patients, and already-matched patients. """ from __future__ import annotations @@ -19,7 +20,7 @@ def main() -> int: parser = argparse.ArgumentParser( - description="Run the TrialMatchAI pipeline end-to-end (ingest -> index -> match)." + description="Match a patient end-to-end (pipeline slice: index -> ingest -> expand -> match)." ) parser.add_argument("--config", default=None, help="Path to TrialMatchAI config JSON") parser.add_argument( diff --git a/src/trialmatchai/cli/main.py b/src/trialmatchai/cli/main.py index 8e1d1cf3..df526399 100644 --- a/src/trialmatchai/cli/main.py +++ b/src/trialmatchai/cli/main.py @@ -50,7 +50,7 @@ def main() -> int: subparsers.add_parser("run", help="Run the matching pipeline", add_help=False) subparsers.add_parser( "e2e", - help="Run the whole pipeline end-to-end (ingest -> index -> match), idempotent", + help="Match a patient end-to-end (pipeline slice index -> ingest -> expand -> match), idempotent", add_help=False, ) subparsers.add_parser( diff --git a/src/trialmatchai/orchestration.py b/src/trialmatchai/orchestration.py index 3227016e..f2fd4964 100644 --- a/src/trialmatchai/orchestration.py +++ b/src/trialmatchai/orchestration.py @@ -295,7 +295,7 @@ def run_e2e( force_reindex: bool = False, force_rematch: bool = False, ) -> int: - """Ingest -> index -> match: the run-half slice of the unified pipeline. + """Run-half of the unified pipeline (slice index -> ingest -> expand -> match). A thin preset over ``run_pipeline`` (index..match): index/ingest/expand/match are idempotent so this resumes from any state, and GPU models are freed once. From 7d896ce15e50d6bb3dce6ddcb4cf71d31f2d3c50 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 23:44:53 +0200 Subject: [PATCH 62/64] chore(logging): debug-log vLLM teardown swallows instead of silent pass --- src/trialmatchai/models/llm/vllm_loader.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/trialmatchai/models/llm/vllm_loader.py b/src/trialmatchai/models/llm/vllm_loader.py index 566b9e34..7f4a6ea4 100644 --- a/src/trialmatchai/models/llm/vllm_loader.py +++ b/src/trialmatchai/models/llm/vllm_loader.py @@ -81,13 +81,13 @@ def free_vllm_engines() -> None: try: del engine except Exception: - pass + logger.debug("vLLM teardown: engine del failed (ignored)", exc_info=True) try: import gc gc.collect() except Exception: - pass + logger.debug("vLLM teardown: gc.collect failed (ignored)", exc_info=True) try: from vllm.distributed.parallel_state import ( # type: ignore destroy_model_parallel, @@ -95,14 +95,14 @@ def free_vllm_engines() -> None: destroy_model_parallel() except Exception: - pass + logger.debug("vLLM teardown: destroy_model_parallel failed (ignored)", exc_info=True) try: import torch if torch.cuda.is_available(): torch.cuda.empty_cache() except Exception: - pass + logger.debug("vLLM teardown: cuda.empty_cache failed (ignored)", exc_info=True) def load_vllm_engine( From 8e6413432c56b7801cb56212b147969dc14eb959 Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 23:47:15 +0200 Subject: [PATCH 63/64] docs(readme): trim deep-internals into the docs site; condense data section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move the first-level-retrieval, constraint-aware-ranking, and bring-your-own-models deep dives to a concise 'Learn more' section linking the docs site; condense the data/storage layout. README ~415 lines (from 490) — front-door, not the manual. --- README.md | 116 ++++++++++-------------------------------------------- 1 file changed, 21 insertions(+), 95 deletions(-) diff --git a/README.md b/README.md index 9f61b0c3..36c43536 100644 --- a/README.md +++ b/README.md @@ -226,31 +226,16 @@ The generative LLM stages, reranker and eligibility reasoning, run on vLLM. LoRA adapters are served natively through vLLM. NER, reranker, and eligibility reasoning are configurable and fine-tunable. -## Data And Storage +## Data and storage -TrialMatchAI uses embedded LanceDB tables by default: - -- Search DB: `data/search` -- Trial table: `trials` -- Criteria table: `criteria` -- Concept-linking DB: `data/concepts` -- Concept table: `concepts` - -ClinicalTrials.gov records are normalized to JSON files under -`data/trials_jsons/.json`. During indexing, TrialMatchAI prepares: - -- one trial row per NCT ID, including text fields, metadata filters, date/age - fields, and embedding vectors -- one criteria row per eligibility criterion, including criterion text, - criterion embedding, eligibility type, entity annotations, and parsed - eligibility constraints - -The trial and criteria tables each get full-text search fields and vector -columns, so retrieval can run in `bm25`, `vector`, or `hybrid` mode. - -Patient inputs are imported before matching. Each imported patient is stored as -a canonical profile under `data/patients/profiles/.json`, with a -matching summary under `data/patients/summaries/.json`. +Everything is **embedded LanceDB** — no external services. A search DB +(`data/search`, with `trials` + `criteria` tables) and a concept-linking DB +(`data/concepts`). ClinicalTrials.gov records are normalized to +`data/trials_jsons/.json`, then prepared into one trial row and one +criteria row per eligibility criterion (text + embeddings + entity annotations + +parsed constraints). Both tables carry full-text and vector columns, so retrieval +runs in `bm25`, `vector`, or `hybrid` mode. Imported patients live under +`data/patients/{profiles,summaries}/`. ## Patient Inputs @@ -268,80 +253,21 @@ The matching summary is rendered deterministically from the canonical See [docs/interoperability.md](docs/interoperability.md) for format details. -## First-Level Retrieval - -First-level retrieval is recall-oriented. It builds a multi-channel query plan -from the canonical `PatientProfile` and matching summary, then searches each -channel separately and fuses candidates with reciprocal rank fusion. - -Channels include primary conditions, linked concept synonyms, broader disease -terms, patient narrative text, biomarkers, prior therapy or procedures, and -optional LLM-generated expansions. LLM expansion is off by default; deterministic -concept and patient-profile expansion are the default path. - -By default the first level hard-filters by age, sex/gender, and recruitment -status (`search.first_level.hard_filters`). Geographic **location** is an opt-in -hard filter: add `"location"` to `hard_filters` to keep only trials with a -recruiting site in the patient's country (country-level, site-aware, and -recall-safe — trials with unknown site countries are never dropped; patient -location is populated by the FHIR and OMOP importers). Biomarkers, phase, prior -therapy, and eligibility constraints remain soft signals for later stages. - -When enabled, first-level artifacts are written under `results//`: - -- `first_level_query_plan.json` -- `first_level_candidates.json` - -## Constraint-Aware Retrieval +## Learn more -TrialMatchAI parses common eligibility logic from criteria rows and compares it -with the canonical `PatientProfile` during second-stage retrieval. V1 supports -age, sex or gender, conditions, medications and prior therapy, procedures, labs, -biomarkers, ECOG/Karnofsky-style performance status, temporal phrases, and -inclusion/exclusion polarity. +Deeper guides live in the **[documentation site](https://cbib.github.io/TrialMatchAI/)**: -Constraints are a soft ranking signal. They can boost matching inclusion -criteria, penalize violated inclusion or exclusion criteria, and leave unknown -facts neutral. They do not hard-exclude trials and they are not medical advice; -the final vLLM eligibility reasoning remains the final judge. - -When enabled, per-patient reports are written under `results//`: - -- `constraint_evaluations.json` -- `constraint_summary.md` -- `top_trials_explained.json` - -## Bring Your Own Models - -Defaults are starting points. Point the pipeline at your own checkpoints or -adapters through config or environment variables. - -| Component | Default | Config key | -| --- | --- | --- | -| Biomedical extraction | `fastino/gliner2-base-v1` | `entity_extraction.model_name` | -| Reranker | `google/gemma-2-2b-it` | `model.reranker_adapter_path` | -| CoT eligibility | configured CoT model | `model.cot_adapter_path` | - -Fine-tune model components with: - -```bash -uv sync --extra finetune -uv run trialmatchai finetune cot \ - --base-model microsoft/phi-4 \ - --train-data data/finetune/cot.jsonl \ - --output-dir models/cot-adapter -uv run trialmatchai finetune reranker \ - --base-model google/gemma-2-2b-it \ - --train-data data/finetune/reranker.jsonl \ - --output-dir models/reranker-adapter -uv run trialmatchai finetune ner \ - --base-model fastino/gliner2-base-v1 \ - --train-data data/finetune/ner.jsonl \ - --output-dir models/ner -``` +- **[Pipeline & CLI](https://cbib.github.io/TrialMatchAI/pipeline/)** — the stage registry, `--only/--skip/--from/--to/--force`, ablation, and presets. +- **[Architecture](https://cbib.github.io/TrialMatchAI/architecture/)** — multi-channel first-level retrieval, constraint-aware ranking, and the LanceDB tables. +- **[Patient interoperability](https://cbib.github.io/TrialMatchAI/interoperability/)** — text / FHIR / Phenopacket / OMOP importers. +- **[Fine-tuning & custom models](https://cbib.github.io/TrialMatchAI/finetuning/)** — swap the NER, reranker, and CoT models; training-data formats. +- **[Registry updater](https://cbib.github.io/TrialMatchAI/registry-updater/)** — keep trials current from ClinicalTrials.gov. +- **[API reference](https://cbib.github.io/TrialMatchAI/api/)** — the Python API. -See [docs/finetuning.md](docs/finetuning.md) for accepted training formats and -adapter configuration. +To bring your own models, point `entity_extraction.model_name`, +`model.reranker_adapter_path`, and `model.cot_adapter_path` at your checkpoints / +adapters, or train them with `trialmatchai finetune {cot,reranker,ner}` — see the +[fine-tuning guide](https://cbib.github.io/TrialMatchAI/finetuning/). ## Configuration From be1252fea3d97e39b718069627468da44eb05c3d Mon Sep 17 00:00:00 2001 From: Majd Abdallah Date: Sun, 28 Jun 2026 23:49:44 +0200 Subject: [PATCH 64/64] docs: add CHANGELOG with the 0.2.0 deployment-ready release notes --- CHANGELOG.md | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..d94ccf1b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,69 @@ +# Changelog + +All notable changes to TrialMatchAI are documented here. The format follows +[Keep a Changelog](https://keepachangelog.com/) and the project adheres to +[Semantic Versioning](https://semver.org/). + +## [0.2.0] — 2026-06-28 + +The **deployment-readiness** release: TrialMatchAI becomes one installable, +idempotent, end-to-end pipeline behind a single CLI, with crash-safe resume, +faithful evaluation, professional docs, and PyPI-ready packaging. + +### Added +- **Unified pipeline.** A single ordered registry of idempotent stages + (`prepare → concepts → index → ingest → expand → match → eval`) driven by one + command — `trialmatchai pipeline` — with `--only / --skip / --from / --to / + --force`. Run the whole thing or any slice; finished work is skipped. Stage + flags double as ablation knobs. +- **Single entry point.** One `trialmatchai` console script with 12 subcommands + (`pipeline, healthcheck, bootstrap-data, index, build-concepts, + update-registry, import-patient, build, run, e2e, trec, finetune`). +- **Entity-linking concept store** from openly-licensed vocabularies + (genes, diseases, chemicals, cell lines, cell types, phenotypes), auto-downloaded + via `trialmatchai build --concepts` / `build-concepts --sources open`; OMOP + (SNOMED/LOINC/RxNorm) foldable via `--concepts-csv`. +- **Registry updater** (`update-registry`) — incremental fetch → prepare → upsert + from the ClinicalTrials.gov v2 API, with a `--watch` server mode. +- **`bootstrap-data`** for the prepared corpus + LoRA adapters, plus + `--finetune-data` for the published training sets (Zenodo). +- **Tie-aware nDCG** (McSherry–Najork) + `P@10`, with a deterministic ranking + tie-break and a TREC reproduction regression guard. +- **Multi-format patient ingestion** — text, FHIR, Phenopacket, OMOP; patient + location populated from FHIR/OMOP with an optional country-level trial filter. +- **PyPI-ready packaging** + a Trusted-Publishing (OIDC) release workflow. +- **Documentation site** (MkDocs Material + auto API reference) with a deploy + workflow; `gitleaks` pre-commit and Dependabot. + +### Changed +- **LanceDB** embedded hybrid search replaces Elasticsearch; **vLLM** is the only + LLM backend (LoRA adapters served natively) with a single shared engine. +- **GLiNER2** in-process NER replaces the BERN2 socket daemons; concept linking + moves to a LanceDB FTS+vector store. +- **Crash-safe resume everywhere** — atomic writes (`tmp + fsync + os.replace`), + completion-marker-last ordering, and parse-validated resume gates; every stage + is idempotent and re-running continues from the last completed work. +- **Two-halves CLI** (`build` once, then `e2e`/`run`/`trec` many times) with + fail-fast preflight; a Transformers CPU backend for non-GPU paths. +- **Official TREC sourcing** (NIST topics/qrels); the prepare corpus is the + judged pool, matching the published methodology. +- Faithful domain-aware criteria chunking + a hybrid genetic-variant recognizer. + +### Fixed +- Resume/ingest correctness: transiently-failed trials are retried (not locked + in); stale criteria cleared on re-prepare; final ranking scoped to the current + shortlist; eligibility-criteria source falls back `processed_trials → + trials_jsons` (fail-loud on empty); `import-patient` writes atomically, + summary-before-profile. +- The CoT/reranker vLLM engine is loaded **once** and shared (was reloaded + per patient). +- FHIR importer hardened for real-world EHR exports. +- `concepts` / `run` / `prepare` are now idempotent (skip-if-done, `--force` to + redo). + +### Removed +- Legacy `source/` (BERN2 daemon + CRF parser) and `utils/` experiment trees. +- The homegrown secret scanner (replaced by `gitleaks`). +- The standalone `trialmatchai-*` console scripts (now `trialmatchai `). + +[0.2.0]: https://github.com/cbib/TrialMatchAI/releases/tag/v0.2.0

      XH_ zOKP;(L-P5gbKlQkZ2%|3gN7X}H1qEgcq^-}k>~Ta0ygsZ(=tKi#(_AT5L6bXb+wm! z2CEwFl>J>E`jW&WEw$9lN@^XD&bvc@Nx2sCq*{}MV`%$Z(mAU?NRX1Wtf~9I1_*r- zV}Wl=p-%plTSLOmzd>5=V2}g-iLKqCj)`B zK#N0;Hf|9(opi3*I()>naHv~V4mq7h!>JWG{y;6~G#UjGrO3pr>8E~ihNEYzuq?Dxbm(h zEOG6PTqe2@-I9NfxXY&paOV(HIZyX_7b#noFi*yvIq=nh;cOd*7(RfH?_P8LLBH;B z+hG6?GCPf)Ea=WAMB~F1+HHe>TH|FC9k=YEbn7O42fRqsta_L0!&m|C|HFktan~MJO+>F^YkA^zSN~B!q^NU7+iKwv zDxBvm_)x`T&>0pKZ-S-%-F#s-WwQ16J^y%mP739SM`F2&!EB%|q6!LsT}v)zC94c@ z!i|MJQ7P|QhFxE^6{4==BB$;--KzN#A=G8~*>smOA-s zkq@&!nc-SwgmdC=y*#9UuP$_N&)^0HEnzMEyd8&dH$XAXX&kADtZHt-f(>a?b$?(Y z4PN-vRG^oq3$#t{*m!g)zkOJJKHy?uovKTB{Ohl3LKY=Mt%vO{cY&>jv=w=M0m-@& zfJb=bCW8k^1Zl0gc>ej6FWz~KpL6uYkas_MI`uy&#{vHcM8OV!7|;K`41g`1OVHS; z)F+)^h5-PZkm){0Bv){(pNOXn(hratw>e!9}ow zuCFD*jZjL*k0?%mlHO}}wEciju~K-U&aJ31&FsaC(!tC`9%QtGa{yeWN$2n1I4i?>iREP?@<*gaq-GJGD6^&Kv_KyEk-A(ot{Aoi|A?Q1rKW95)?B9?aQFkyg$ z@aM|Y9K;VuMV6|ucjI!LG!>FgMtxrb_T@kAWN;fgC6;XcWhExlMX23RI+$4Antm~F*jFW=R5Q{ zO`?>q*BQcp|IwzC3EJ`8gh$@*^sa9T|7_BmkRS)$?AC}*QcQmsS!>GvL^}W;SY)yf zVmXYL*ix1jv1BO{hP%|DDRa#ZDA^5~Vy;f5$WoV8cl7MBS;k6+p`6yL}e{2MW7^v6Y#v z=hUO#(V7Npw|&OjtuT^DNeBAD8^D;qquF@sPKCi0)F?vyvj1x2Zrf&x!DVPMOMD3; z+XDM7MhRN;-C`;F*WM}En~*n*K}?xrz+nLTGKhBc?51+|z!kz!E#IN9HywkRwW_;-v& z2?k9=4esdK*;>AnLW*6lSyB!kUjN{3_{jO)Eta_?5#6O}7Kbg~{~^3cWn#$BEEQX> z&W{3Nh-PNip7ig_R#Si&-vQrE~(!#g1u!c*Q+D30V#QJ)yJiG`VQ14uCJ5MxG0`yp!QsMU!xt~t%|U1 zcWr0P4pU_-c=UK*$zlY@Hfe!P|2vkeTaMlPRG=EmLl50?;oS;!B*lXkG=aDjPuw7r zqx%o!d+;z2Drqd)w!Quo!yFoaNBG?#tr&v2r(2R9Cl7X29^5c~w(!}NXX!f#k$HBZ z7wm$)y}C4gQ5T|Y|5h^JIOmKi_SLzK(4?c#;y{`}wM_dK?M1$A&qMJJNOQ$SCq|}F zx!5?2MvSU%g~9pBp?SQ6uMFL0{h*QB9jI~^ItNKxVNv@iS@{siI#L6F#FKzcbKrBM zRL|hHy@#w{Lbv2mvTk*%ayOYk@QhM*W zzv3hF=N8zeWXldbj+j$_(VZaC_2TzSzv!EvVOE|o_^?T&Jk`;#jEx-U*^=>nd%*w5 zBy9?b5kO5hy(ocyapBYj5>_t!j>2xiM#Z-5HuXE zP*@EsTwLFjrxX69Q@i1rUo3++>bHYgH$caVSy3dxoW;ZgIoS9PiL9m4gIiQ`#;>G#(27r#0W zCAO zvs@HME|mwYvp+^AE;zvsv~wBsFu|c#@jFV1H5X%n1lvbM?b&$(;M=O5WL^_tXvO+Jmp_6s@-+%vq9S=+6J>kQ-+Q5o?lYWuob@Ta>vhkpeodE9fOY zHTeY1*f&HGr+&@z+x1&F5hNK26POEk%_!S7QkSZ_Q@85Sml!j$!@v^0GeBEZ4IdldD^9Ll2ZyHXE`v~+G;T%3W=aLsW#1?4 zvQP#}YEV049O9W zRe>U%tq%-Q@h0M#C1>%nX^h=j6s5OLwl1De>7HCGr>$Ex6&n&iV2#1LX~&R%j+MS* z5G7I*01DVW#mY`|=|Kcn*bz;(F`H(icW0RHHg$w1;GjVk-3$+8UB{x5@q@vN;HzY{$ps)2z=kYRm9JK)k$t$26RIY+LJ3C{!I<`1|h>nO22u3C#kBB@BHCL*@(lB`WzbYD1c zmi)FsB7Q9(yWLv~Q0Y~FD;Zc$uT$@J7)z$ohe*cpO=0(!I`@20{PWTKI-|VwRe*N2 zKo6vMac&ytK-a6zx-@~;#W;oPMf}f9IOzet7F(=#*yye3-aWcm&Ky;z^>g|>V_gfqd9ohle4L>><3 zMC{G^WqkYVP~k^^oK_a;DvP^mcbIhk!oXLI_w@C&Oj+Utg-5FK*BvF1?7GTqh&paW zJGLtDWWt6yiQ4GnG-Ap}yWNJ6FvaNob<%lq*ULv?pxx|Ez6m=}mvE&Ra_O>%_{62j zIhk{&S+wZ$Lewon5yoVWL!_Ltm#BKS;$y(uAU01SIyhI~ zAQqL1U%{4t6~%RuO6xsGtiQNx;*Dr8+!dV0#xS)S9zaPZJTW{L$x!3-)Sa5t78ZoD zWXb$=VO%$%CWa@t@$=Mp8>$&VwbH;eGi9Jco7?SXca_~{Im_}eR1ETC)!0gvZcCuD z&*s!gJ!liCuw19Wqse=00~2riV- zm!H1EHSmN>U3=9e5s@|{W^95m&6k0>bfn9z2zlTUp+-~vsh)r0@n%DF*DV4TlnoC( z^%A7Mxcu2M9H}H5i@;W|rL)&Z9ig-bmig)%_(V^%+qqV5bP^RP<80aLuu}P`HqOGA z-`6^S7n9dMAUj*a1e0AE03(5-uJ)CrD%)~P;fRa&R&J6l@y`VDUzqL`G-}*45^f^^7?y=lPfB>C?M_(%IMvJ<0^6b z*#1;gWi61=>UCt5*%63D#CI3=c4W3rn0ifr@h^Mlf*;O+Tt+2sk1vgA0v4(j&*LUq2Qauk&iXH<${Nj`m!gPHikskW2m16X1?`aFI1LpH>Y=k zqUYYOuz~d3*G?b1%68mw1c8z5hK*Q94MqBky24Fi7#67Y_(4&NS_SHgUmMD7eUA}; zBKNvx5plhDyTT-u{T|>Q+I{<(Q^Nm|lgTL146PHBc&ax`th15V#YaH#*SS*E+6C7z zpANrC3iAmq-7;lov^G&hrV86&>6r zmR;%?_dP*S$GU$;g>a-jyx^nUP)AIEYowD9Wbj2S#pP_J^I~R_$`}Vim2?07Mk@bt zQFKvtNVX-o?`6YF?yKnd;0>Ia5jFQe5=;2%%swBE5Vr5)EhVwfXYxTuJFU@_QFKYR zl^ul1$mG`9!Pp&FRi5%E!Okkn3aMj0Q0xHcX$$L>J?aGdzMC|213weYhH+qjg-K%c z$r0`}rJ132<1pkbwHkeIpHXn18j;B5p3`Mz^sF};k!`%oK)v-2G7d>g7QoNlx>(;1(OUuzR@FDqKI*fbMfoP?l190s5t3{LSsAm1PC(!VC|{^-1Tq z&C^f}B#T#Th6DZBkmT{G$tQt-`8df*9osM^>)okUT#ozYCNM<5=+*E^)a2(KUm45B zC(1v8>YuG;qFv&}xCY*=2=X0pIx#lC!D=6Le(AmF5zs!+^i!H;dnLyGVob8>YHeT} zZe*Hr@5FsCq4GR(;t)^h*B5|`TG~I!7 z8Chm0EvPII6ue|1-*{)hH3&!EQVysWzdzLFF|Oe57vt$VIzB$Rs}yqm#kAEBjXbqe z_gI)o6wnL^(%;h)6Is@Y0!4 zZ~@>|6+d*x^{3!jX+Pu-2`b0=)BX}smYXEr$6h&mXJsv00ABKcx6X1l4qbVcwoWEv z@qOhiO+LWy$2G=Sm7ObOb68W_|8fcMUjxc>26&^ySykZ^!KRgZbm|OjSZXD1(w$C`a8b1=*uI8KG zWbhh#uVub9UumA@3}w9mBFuS_Vk3jh?yOJDg}$))?me^+F~j~^!{ZYT!Ff z%Wui(i=XnS{wQ<<`C9q|zAvB8c|<1pQG{!jiM=+zSp<77$?_2*o_0_DlFQR+S|tMP z-;1yLHW5`;0Y)^NzMJ3-?D@YryGh=EF-S<7EjViUJk?^8n{o~J;XgUaRnyYd% z&|%T0$D(qU$@%K$k`Cc#D|!PkGTRAHMe`A}%19P}Nf@l7b8VZY0l<*`gD8k9fIZRm zF(h%G(d%o+RLlH{kA~-18b<1?th}lz3wBpHgGWT7Yfi!QA!qIlD*rD_AAIE&wO-A} zNIEN;_fkG`3X+-gwArG3?JJqqt*Nl{?dJZyBS0&gflFi%4pf! zU5=uEg6FndMJ#oM^MQ>rIj+fOFtJbuw@VA8(kz2tZcj445ouMMvzVBu3K~6qDDRlq z8>#KYX&+5hZMdt3dcLcgJ7HY2aYOTuW&6x$zRHT{cAFEVmW8Y?g+L6QF+n&RRY@hn z9@FTQTyB*cH>^rPmYM_v+lR^Pj_S>ln)CaAG+!IK$I7%P0r#lR^I1}y`dL~eRY<#V z+bZeY77g@~%?!n2Wu#Vj{nNI=ZJaFqa+xK!s9(~4&9GmRc+5}fwlsCj!Y`wp-k!KS*gy7v zd6V_{FUk!JXu)1nk|y+(qqIP4oUk}2&CRx#KMGIA4>=?rND&Fo^Mw> zbCIlrG=If)U7AJ;#%a!rs*h8=t5n&iO#I{#nVZ7)5YLz)U;X5@IUv7k&KU0KxJA^h z+trQI`49*HlL{gLnM^$Eq>QQ_%5>C!FJg~JDPpd+%X`vgR|jFwuHdw(2=nDtST=;^ zSumTB7P#FuGj&cj=Ccw}y9wL1`tRgRoM&aB=IWO$Kn8ol80(-w))AE@0&jEN|3x{r z?f?nOtDzHG3+71>1=)*pR!^hJW95m&z8?~Y0n)!(a(_P=GUtg?TkMens>tMjWju>h z#ytJ%=BrZU{N^sFF5zmc8WYD7Q}C_<+KmEih>p6Q!Ve{1%8k0WNvSEFc^i9cWtw`S zqckA@8^gwU=MYA=+#q)Ix}gns0L_4^hptq=FuSORa#Gua3?$iB=>}S-O}&O1UTViX zTQRwSTACVbXjq5VS0y@5BabD2C@)s0yPjap4L;^G71-U_CznPBM^@$A0ljt4Iw6-^ z)+cp`vNyQ81)dg>EWqF>dcstV&SJ6-lmVU;lAA>HikD{^B95k_>j6%tLn=F(5;`?OaNglA(nlB}KpEsWI zJk#A0xWwzlMT;v1_yZ+I^OKb&w_emQ%NUlOpbtFoYLi`czPpXGW(eW_suB^vC3s_V zjw}0M)O6N`-5Bsm{F+pMredcGoQ)o1HOQ7weP6DXNWlc8A zG1V0w@@Hv@TX7C~7E{+BuK7y|GPAN&VC5V?EluGg@(~WGlU;eg&0#}BuhYfc!N&6S z)7+{2HVuS0LAikab@i#7EV5P`H`fIQX)rj6x??Ycaw9mT>p(z%<(kb_0!6hGKYn$F zb9h@^i65o*cw>E-?&64#C@#K^Xr!5*%$VbpDo{oZ#p6qyz5;>n9L4qn?B(sGm`IJeMnTp&OsI~!vQ^`zESKslj z>q%x0EUZ6M4fe`^4xk$6+euIF>CF(%F_o&?55-T^qASd7o{q2~eDYoI%anO7Uo-LI zpgq}X7fGt!V2M!FrD0teAp$@XzpQ&QZclp`fJCt%0F3@oRL%MG_pFhzHa%;4AutaG z6zpN}vOy2<3=%z#D{yD6#ZFi7yoDnTi^R{rp6es%3pXEsbkB~$N=V>%j^zzKLPyIm z0nTwv3ZkxTA~LXYlm*A*Opkf_dLoBQ7@WUeV?z%|+u((`oopu&RvM4ISLB%aNIdo| zJ+ux*z?|&PB70KOaql;ALc+~^Hc&LX#X+gpTZ=HiwdKw*E-i!%!og#G@(ppn87>LnCyi5n=W>iZJOO`dS;orbe^dhaMarQbk>P(1vI&PCnddzx({zR)#Bve z6-k@|R26rjr*9!b7P*lDv{bw|6$~DBL&^3ZOH6Km5*xBRsGQ00r7_nf6Kw86c3mHG z@lO8ExVi2U9OIQV@*&y&l;gV@IBpw1_dHkK#HM#Mntv0;RA7!HJ@5O>Dtpect?KUK z`DXIviOX=YgO8^nvF*4z>__&CkLP$nw_ z639(UhIh=RIJ*R#hklnaB(VsYVAgHl#TcDJsbJ_+y@03^<6Z~sM#KD z8!5OM$k1AiNZiUQp+*I2y%kbsW;-qdO1TM*DZwak$Gaz{SRMGq+buN18mSVA8^|iL zF0mxzj>Mi2??B=Q{OL^Vl*3s{dL!GJh0HTi@gRkMgIrxSf_0du2-8lB(7B7UKW^`T zpwYfvAf^7&Ul#<2Tq(30kdZPII_Ty?u-Grn};raTFSqZ8_o+gT2YZ+uKq=IY@6E7K5+1_)Z8Dh$ygKN)C7`Y!A@ zFQA)&G&eN&fYAPe?a$_bWs z16yUgU#=b*vA{rvhgjtUxGlYdPWCP{F)6jQ%57cXP$>&PW=?X)$`Ai5$y&l=`mSbe_g4?tgu}c z>?)ujVt9Ra*24_mc!11Li$C`+ow!rRGZm0@c7uvow92STT~I^D&toHhW>idxGgV)r z@X|*Vlm%R#TcfjWMZodg&-pnO#S8ja&T!_%i(D}c2qArstO5{nti=*nbE0gsTE*@> z7DBG@1E)eFd%|h*pq%^9A`StT!dOV;aK@07v^-({9nQ>RI$e}amb)xIk)-aP8i{pc ziDxt4;XNn9u?8+*I`D^o@*2!)7#^d~r!n)wF_VZ!RZrzMyN1F!CH)`q(FfGIJTh=Mvot+$-deaIJ5% z<)XgQ-@wz9AEy$Dt7<5nMY;4khwS1Ew;Z#O{-SG_{^Y=8|6^kIHXpLAgdMf^#GTLf zTrg?&O`fMk@l<4g6OM0$5J-_%cEujyr9)U~4uo9;7v$2ozTEha>i52tw(qX9PA`jI zix4?&&T2ZpbH&=^+`wF9+oW?_P#y|*^-@;XWoJhoCR@=C9}DJ{L37l+we%}R@-v*( zb$BQY#7vo1cgNDr0{!%trmeg+~Xn0xM_f-DSU3GtVC<2F8NY<2mjZ_#g+Ix`LaMGWB(QRpfg)c>$ z%<1MjMNp3Aq5ilQiF;x@EVmF+o^$CVP6JEF$V*!s(i#nWN(jvj)_Go4XG@Wzvo;y* zyqoubx8iohkATtr2ErQuW-_q0X(lTOzY>y%~S5J5@R>2S`O`X^ILezV;mjoZ6-%pY0j2r z=)@!Z%cA2GDD~lmqSS~sZ355vez3)3?EEHw{W(Dpt$b9%O$I9o4l5>d?p(^buqMGt z5Ddcm(Sqyr8AuPy$)fu4bwA9H>POYN=mC?DZ^LKA5x_n5FGwklZnfJ|OI4C>IVie= z=7MI{DoK&ZL=4p*-79x460&lj^&TlYJXc3|wpL1_Kfw}rN1KIkJ>%Jfp12k)IWG2p zm_SV~&8=vB@$Ll{R8|ZippvwyCftRW()W#!_VsIxu}y+?i&##+f#=>PClJEwEL%$$Qy1F*xXb$`%3S70|co1Hp`=p0|nN-s%UP9LER|D$$z zovrf|)@Dv0N?Dz>gzeY}Q-mVib>xkIcCMt@X4f>=lLMTE$|z<3e_CLjWF=R#2m~ZS&sc(RvhJetyH>7d4Wz$$r9YH1^h&%c-g@}ob+We*BpBXR z)$ZQuj)UKdHQjto8_k&RzfoQyYQRa)q^DBqp#2u7!WkDR#r zluY!*9rGh!Zs1ht)CoQQT%=8i8R5Ca>@1q|ZP4)lN=w1fN1hGmb8$67`02{7mc`oG zb3&p5clpkvGt_Dap`UAr?OUtD&+-HsqC6Wu#h zF{}WmIqf-o=1&)hd_{Bt_d+i;G^&(l1|GVSBny z35|xoV4d8p$WI!0E+7orxj9#2nauh4_uofOl$QkolDT%YtJOTl3VIR`HJTbl%{AM% zpqF#myT*i*mQ}IIz@LHbID){%;*Eh2;%yVtn+bHsr)uF)E_z8ZD9+J;C^|#SahJm) zSFR*&Jr!}Ptp{?~-y(<>dC#PRB{SwLY!t*W>|BT1c2*fCWL2K{LkjH*D)3t1<4CPF zyF&7%?|l9u;OJDw5J~##aKPt_#GOnpVv-OOfJV z#=6rC9*Jq~169D~4*Xz$kJ;`H%_oEqhk%P`e5%FUPq{!hkTFrKdrPG~S7z&42d^t9 zw(JwNmbbr`R%Ozuc&XE2 z1N0>uuKvkl4PQL&Q@P}WHVMiXf(UwC{FMf|<2W;J__NOI}kK3|K+ zi0^=6{^?qR5M&{0vTLMFJuA$XRFLT9?+7p}g`sna821@erc*l3HoESCcvk@#Y4JuY z+h4jPI}DU}?F>kNe*o1N#zaaQ(Wtw~T6I1;t8jyR-JE-@WfztcS!MnXwJ#9DD~R-Z zq2%^i8FPuV5`mGX-~x?IC5gJk3LYX-Fu$2{3*unNt?>!HYYSaa_*yy@V?VFD{uI2t z*=Z3YiH0qo616gZFgb_q)b-|wrbwocLbgQGDOqZx24WR|8!{EahVoF@QuBi+on2B~ z7Jt{l^q5z7THRacm1&6V<_LO^5VTS*~*f2rY^iaLsigz2%L5i79I1?fKyiwljHS z#;)%xKrfF;jPzT?d0&vw>BzL))`)OO9+pww%`B|W$c`!167DKY_27u>J(P!?XaloV z)4niga$+liD9H)>KzEo~b2h}W(MW)t4X6IKO*6B9F9(6!ot2j13HoqXy!UsKxM4%+Bw&<{Zh8j8Y7A?ubE;Jo6&f9Ie*Hh!w+Ejz4ad^NMkvjRKDAf z*E>T=`T8fPy7KIkZJjqINXYGBptVAD*AQDqgCb!=W(Qd zUO=J0m$9uxjE|!~QAQy3oIYuzm`IsUI%mO%iq_krf0sT{F}ij^`cz|z-b5>{e`Yww zP;E(k>&whWGM<^tcpd_wLhFkmtK-{C=-$R4`=V#0KwQ*xx&~q4pSzx#LxWMUnLRxU zl!q4E$JuC?<10_DJ1T$<3G3tqks;-8{5{>{Wq|OpJc*`aDyDk;-dXqxP))Ygozb4_ zVI6iZe@~~52PU^=2j+6x0Z*q^QoiO5YB%>f=?OzW!@e+Q+Q_%{X>Jy5-n)wW!%Qlw(~_6cqT#S0ET?zrm*2bXKEvO)mDpHo z)%p3KR zyquG2?TM(Yx-0GD>D?zdl83>QjaHy@-Ioi9M)|Z_F$m8*%xt^gkfo37fykEvVNdf@ ze-ZdvgvTNr1;s>O$l}V_sY@Z%V(`>}`(jxIfX<7nhmzwWw6Xaw^<4)``4D^^ zm5F#h9URz#6GsXnu?RN%fXY>P{&}C?8zs{~ZGvzl-WG80D14JHn=Rza^`p4SJO*eAGm}{7 zfj=_`bnET9INCxCDjyV=*kFE={nY49xK&Zty!-%7X7|vKMDg^A3?ZEmw>IB`j}?e;aj? zuScG0+Z#ck?-Z$FUYk2|=hY~_NSuy7*io>8oTxIlg}g%rX%v%%3Hx(yT^q^F0$V3N z34Lv5vy`#s0QiT+!X=SMK(Gse;f7|Lx}A&L`;wTN13`=UTCP+V=-IX$m#|#${QNWV z>+7G#XnuY}3Xe$MY|@GodQvUze}(7P%zn&_WdhH_v;PW5kP+`I!0=-VTkpVzga82d z?b6-MNYlB{&RAfteE0XLv6yv&$jO^ z^(#i8c^Iw8>WWv#W84e5%WnGzlVvAy2 zC+1tb|9Ewtx1_qe!MS^W-QEH4y;Gy*=%ABV>c9800ul7KEqdPkydBs+`-iVXdy(F#l+8LM0Qt zVA$gxp`_@SdrliPjot#h38?*A!p#8m1VIb=uunlUmO}3`*aMaKnh&n*P3Z!AbajOI zc6hv(r2O_J@AMDye~(J5g2N34EckfLPkqWZ4oqUI22PcNm#HXQ5WlKCqgG2Sd~}}J zOE)JDyk=OoAx)qc1;a+vEDb)1Tg^&=@7G#qa_*FRX=sETJIrjQ!Of_UqAiwl!+u3_ z&078w=OrJDO0pWn+hNSUJLN^{nYTS@E-<$}&I;ZuuJ(20e_o04xrh{Egp#bG>o-j| zOAA@MW{z%Zb;JEg=PX>qXFf?*t%5x@<~-*N9Lg#@Lf}n-&-84;k^9xr%f_5%)$-;U zH^jV}Ius+p2b;6W5>lu4{5B^4ckZ7e%Vz`($E34PLW)SbRFWblkBTx7&GHN> z(*W5CqeSz}f0Cr?-8aE$?P^2k@#N82u(xg2qc2*pe~hVhtku-0YS-{RV;_+bCEzgV z;_Jq;j~*Ml)7~%;A{_#M5Wc`!>sS>qJu)bat36ggA z$i^Y7Y(b6Bbm8BV^;#U5(!W9g8!s01*722i#M^w+>H-X7{xE)MF6Sck2MNJ?NJ)G$Pb2|gJN98~%AE_)lRnlM zCUo001B6ZZn34AZfI>RHDU_Vws`4sHXp8Jrj@1(H$za0LW8~IXu0oulBv;B zNrla`M)xI3v+quNrF#Q%#e`pxSc5xKN~*W3e~T{X>q(!l`?~CbatBPuGcGlnta@Xi z^$#p({dPK^Z6|xS?+Tju14>z>CNTjRs?%@c2TsCCXQ~LFcR}> z=;9uix-y>UYagxrg_^jHuJIw*C}`Swn^y{Rig4@+ndgW882W__aStqZQR5h5>^h(I ze`+-K^zvEDD)dZu(`8byyE*@rKguoPA+N&55@vW33#H5agh%vJjVLdDSW%i;*0rPy z7a|2NTNmaa0=ajZDA>oWIDq}dhC2=o=tv?5-njY+LfajPiydP81omk1 z^ZZ&-kewfrm7X13shRFE{2vvL6p~j}e) zrIXI^yTxC&d&3yMR`^ofFKovYrL&MeC!=z1WYr<@B_?5m=XW6pHe->m(Qu-2?@7(p z4+$RsHVw(2jl=Ytzm0$|oXL=mr6+)WH#LS1ca+4WOOEbOkvGb6i z?5!wfNEfm)FOuVI*zyfrr&TrYi#yc2*-Y)+0zUNyRTB2R7508R(8c_Pe`C^3fwnE; zonV`V;jiwmgFZ=Uk%95n6vRUTE)5;=T%;@$dHPMG78E#u9eIF)<}gQVj_kTWxtcc+ z&32KRrO*jp4Tg~n0(?bkiG@$i?2%is6Y7*{PO?OPlA6Qx=rqEgJrzP(bCpo?hpIO`8g2C4Pmo!D&yy1T{EHW zU#Z7r7ixkv0g_pqMslkvOXlyyGIcn}k0J z!7ev&WC9+-N|-njPL{~f?y~6K;nwMHe}1u%;7XD3f_3&Ef4KB=fR&w0FA}o026+?Y z5+^qCE^;>BEw2a$ue4_F?!Yde8=L#s61$3|zsf+ypZho=BKUh3r#NG+uqloD&i$uA z<0km08i{XCGH!1jB?ce&W~sEhaISL17FAxjqnvKlpv6}bE2XjDJlizClr-twQNDo- zp*%*+bKpO0e-F*_5M7$mtAO#H2t`yj#vl`S{eEXe9L~lp2i{6-GylWMe+*F_HA1v- z6>1c=dI-|*B6!BMsYs*uEFx8b*|rxaFw2GiWK0fgPK&*m2)WI?0(P;aQEzpN!F>bS z(dMXBmyx6qmX-ps_I;Tp`O_;kSFuOe(W#Chi zvh9u$C%|)p7#_3IoN5%*mqf)4x3(P1H^I^F&o!RA%{1=0#5IFcG^uE z(I%bET=1Wz>LRz7k#JF@Ls{v_>jiiky?-NR@8kFx!|~Q}jJ={vJQRk^ilxjrMzTAd zuYeQff9z_SEl^R8+kKA_P;^_7I9RS8`vw!_S!s_h&f-z3B*2j+BF4;I^kF_`)8L}0 zd0&{n_iwEBWyq#bBHkl{PBBwNRh7w{@7e@oY=KO?ayr)C^%J|63b}dzItUaHUA7x1 z`I4J|k@tiriJHow_0lT#5;%7b~r#2(ig zo)Py?^a7a!^gZvlIkf!6&;`VWGRIs-fDuBKetoLMe7(SF%c*5?v<0mzD|ZU@5=4l{ zAocXIsRL3Aza$ae*7B@FvW>Bdy4^K?2G z7!dB3)x(9X1?Duj+#W~8rI+zXVtdog|quZS74Cbc~f0ZJYggp z%O)@Cx#5d)h&NY-V~Nm+qdSaUi1P@Ue=p;9iRboEI56L5NLx2BZ0ytsEO)lsfjb#e zt@O0!Y_vm2xIXP25(@s2+>Vc>%N$>wA&DD1hwJW#YXt3=I!^u9DC6l5)N#{rY0)f2t&g( zTaz}yfwN(tHFbc*XbAyoC3Oz6XD(F--auK|>d4l*&h{H_2|m@O#QV!^h|6@`Vq?vH zvt5*zn~>w@qGMDCx6zn%vt)5;f1X58fkFNc;DInKxiS`%$O><(e*);@FW@90 z*-hOo2J4H{=x9K0Bsxo#h>}bx4Ow;OuGF2~h#%e_`vNANFGl1~%l8zh87(Yo*-RHZ>A>u&xg)v>OL3J2-HcJyz{wwiNBOe^QKp{`qH&Bll-v-)q9EV#g=pO(Q+4ckHrnZ>|Dq6Z)uR zJ=>COQxndH6U5LH5FhS)sL&=jP?RsM5~)kfHH%GYNW%py((tLQjEFN+E6CQJFBcve;^@}vp@zjfK`-Q zg~XdH91Wh2?G9?Yvt@-ePEmpEDuf@n5_W;oVt2o-pyrH=lyX`WP%B+Qty<=p(y7>& zVYTB!7=d|Q`o*Vs&B1{Gt0JS#kvy4;{$+Db#+k6j7R_PsaeIL;wvH{*Q9)cFLF6jx z3xd6K+4$(4OD^mEe{do)qzsaX&eM0KV6tXOaFd9!hi6ag+Cbff%9@kWDTS(hJnVBd zG6|M7VxjYK9(yCYTb~JON`|>1nz7bBEvYyi`Sp;~Rk%?ZfhblPdZodb@JkZk4?FYN zt>C*t=-VP2diIn|qNcD#Rn*q+h;9jwGD@4oqPsKFvG%*ne`q^7v;1voZJNNGbF=)# zYUKp)Sn9iLY#qQGWxi%M_j4wcyRI`=1t_cW*T|LDK}f!|sJl?u-I;-0W#~l?Fe^Rk zPMSf_f(=})lnqq>vf#VvQW$pcqY+aiA=^$8wUB^`9xHk!Y1sa$RNS&?fn&jcl`{ADV^eQ ziNj_%9g&g17f=rU8jJ-(&M}snSTg@Jkp~}GWkUc zzz8Q43@De5yBI)V5`DOXWflW%<)Tu=ifBrJ(&b_ zf>=C4KZzMUtbRTSdy9sHGg?zUF3om;c`0CsnOdhY)T=_&c8A|XNc+*|NOVo=(f~8S z@$TLSe@m(#egT7$zPl&JpULYTv$W0&o=*cB*s5elai#4uK0muzA%f6Et!z?+)Tc`l z0H1g5D)3IZkk&uingBp0_}Cq^$7f!7cEiaEE%9N8JEYO3FNezOjQ!94>nu{PgJ-24 zH*2Rk4}`9eP0j!-XPBPbV&1kS03!RZN-r=;f8_EnJQeHR6B@^r}E2mh5*_>jR-Q#z^#5`hKbQo`YpNBk6K!YOW$H(Qd8 zdx(qscs?(nq5;m9LRHT>S|G~Tz>O@iqCyTkwg-M#(h|AN7`AS%63j3y<_$Vf5pUIe ze@dI+VgN5Q0jbBni~gV&GdYbI(kHB@gA!efV^)|4T($V?yYTa+2~Ix46!LmqdCHR} z;OHN(6n#yWk8oEs+;xcEH3c0MPgJ>Tt&x1PwrjLxTRbIhmtF62wMarjpnIbo=1K)4 zBYmx{;*!|IUQ7lr1GiX*&Fk&R7Q*FH3J3&s_7_io*AeztL<&^pTGw=00!^$r z<7CY-SWoW~61awYoM`KCg&fnam&e)-61&Jowj~2hgfPSvCOcG*nO6K}wOU`+cv2EQ z{d?)LI}a@X{dbZoBq&5jl~B0}e>+(mPtBdi1CqW37has_h5Ad$M&L<|@ewrrA<#&BbZt@6!P!7~PFs_qz&b<3o4=m?XWO1bYq(rV!=e>!Eb{@HyHy^d6>d0!))5Z*`Zq`>w>^<=NjI6W(J27 z=@taou8Tlh+WonPKu0XQe|I#wt2^U|xxcjRQL|uIk{P7kpC#!`N`&#bG#dG9hy0jk zORZtD-GWHVSz~ffhaW>p`4F}pcI|x~k?T0%BWBC1KVDbEIQDw|ow35odx{<-{rg=9 zJo9^sP^EwbB(*vP;3I)^z2$irv9TG=e0Nop_LW^HWNtDMZ--Yuf8v5iQp6jCCe|C+ zEY_i83dymi*!tnGT5FYtdn-eJOhcU-!@J7Vrvn_M@~9AL{7)lNikQK^$PAhk7k0q9 ztaAfbVLsTCi5Jg2maZY@SiK?8a6RCxp3~Fbal8A?STy-^Hk}|qmP)2Rh7VPOBUo+U zrZT;Y%SSs<;Gx0gfAp4fNDNEH?~4vdW^#hqESk+x+Y0lU28{;8hz$Ee*wel6SD=yf z%;AcyOo(v|@h&GhGuQ+BYy-Yis;WW}!~L>lqY4ThzdC zfmGy-G!V5ef5)}?)*00#nn*i%O~c%XT6C+pfL^l+pZYUS2tu+DJcpi+X)_iryl%BQ z=02S8SAL7ngKR^4si0>HT^HK`A&yy1<{2K%vjZ{OS1pEJ0Q2lB?nIe*^VFk!NZQ#)??g|aUp6~y2{hWrg=UT0$dSoxlTp!avPu|#-Y)kA!ZgZN&cPk5fQYG%kI9wOHSWc$^ zLKm{1S(}qMK#%tJ5xmGa6YhJbCDH?+DXy^^*cmw(M<;_U7tyH`{^t^1{6a)VCF|CB zannPzeFD%H1?Iv;Q*E-SCP%* z_a+?-UiZ9pbq0AG%sMGdX2IO&b1q`Q9e>#gkRiH6mq+>!UMRS1`TI&ia1Ug~q zj{)gC?>v7a$j96KSRvboeRuBv4vhn0Lg-o*5)=qgk;`|ONmBmcCAW4DSlq-E^3~Ay48f6QiBVq^uBaHA>M5vKiIn`!{|{UXj_zJm}!Gv$I0r?f5JT z%yXnI#_mwS=RK8N#eXZWPeD6))FL?3f9Yc`_?lM6YujPNiiO_iNT;+GSAmsEH$`q5 zrEx#%SN-}?vT9B+p|8mwc7lkw0oWAom>Ak7DqPut!^*T8SPWri-RH(o3>%7PUXcns zAAuQW=cF@m0uhPcb3lU#6@J*UByYryFsTmR#pN5c(&G8Yr`oPh_ulRqQ=FDFf4Rd9 z9IDNE5J$T!@wgWHt?WQwBCNQU`+t%nx!n0cO8#ku)f^_SbkHXSg)ajBOB;SSaoi-y zk7yE;k6%U1M-6*bI+g`N2C9ACJaLEY_m@C-zLP4b(9Tm(&Q;1&G06=mnX1-BxjES7 z`00+h$*W&}Z%qPxX|fBrf8KP@OWE3lwp^JEl~P$dJ&O*6j?FY`1#|srvn)EC&(+R9dt2p@}f1{&ncHzr< zFF<77CMnlc@{qvG$P$1mop|Rqj8DFSFO%^#2*BUYp{*%;Z1qcR}Rai0^G6p z0C;8+vneb1!+lcDm%+(_Xu_(5I-SnbwnyRSk}RjE27TIL{sEm>&70Pm?B+CH8|EJ{ z^3*;!7q&2YeBo00uExI3e^_o4rDg5SMUvl7fm5c8QF%dN2K16z(a4peA1h3CaW|t( z0rFPLKH9F4oc_ztEd_UQQ4-6m)pVRV3vwhkouX4}=UnjPE-B%`<0==$Ph&BAc@!yZ z@|TjCF@I>3IeC!Jr|5tvD<^nUV5hL@x)srFAY!vDn2H-SXBguMe?`;kt-fhAh0Lsq zJCbHF5Hxh|Siw&rQq?U2dPQ45-IxJd87ZjBH<4mfI)^^^z_OLj#cizqAF$KNYBVNJ z(D&c1O3wKvyM%~=8wOpg0x|mf@L6`yvQaIKi%%2iIR5?j-$(hjvAUR%4f4FL|N+}=Npb#VZ1sirYSeR!#wUp%~&W}#Ckbbx?Dstd|Vv*@c z_!M4(yu|}?n}zh*c$q3Nf#;wr_+QX|SQw)PrmQk^X(i_|$P7a;9 zbVI-)zRpDy_hPCj-Xj$ySk@@&jA982M{pq3z|M3r!~7+aj9@M@giW1eyJmp-b7R`Y^eE1=H>SJu0Nw#0(D0Una%u?Hwz{fH}W=4=MJa{?}~YC z2^E~)2dr-h0%ZV;>f0VpK^7;C51Su>Gm?P6IL&3&dUw!nMY5toWw)*aZwBx1B|nuRE3C2a zrWPsBKgM1@|aXrZ9HM@G1AD! zdL)<#sBiwI-=-7^saPjellkA=_c**7e=KPXlN5V$yz;z2rP?{NsRIa+-#mXfBrrc3 z*HLTw^&AGNrCDdSYhL{Okp~j|c3CoM*YP zlo)v7&_HsJJu#F_MY>HoV~py;U{^UE_zd$;9K`-bx!J}`TZOlsBn@*}jYCVa0Jo@s zL2MQ?o1L|GQ4MK%$*{7+de&!te|;Axio~R6!MpERWJYYOqN5`#>{VdX`qm0igeXkK z{7V4=lCmT*5Ob+CA0t667b+f4v0Z)TE>1lg?Y_Wx$A#E|*p3?8ZO;{9~YC{v7y)8!Ac~ zx)(@m)mHc>!!9qE>H9TvoE>j{imAR8jihA7b#lSP>}jBRkk6nyNief(f7q!AeTEw1 zH*kG(faa3GAT4 z0s3rS0A(F^E__z!P+Dl7Y5L0~{{3d~F)1cetC7{3L&um4A(S1yw;O*guu)|WGp`Eo zty?rsJiZZQI%AmEWJ>PupA;4l`C#_)|%3r6J zD)(HQw>r|nODKPuPbq;V47({sep45P;UkeP5OLM0@>=C**(NnT)Z)8YGTVDz8-f=h zGvVf$xIM0me+DeBVTYYfMBLsapt;%QqGU0V+klT2{@5O83j=%fYJ~zUL+7dHs!>yzy7K1+Hs! zpogbmSkhr>UFeF|;+v3P(HhsQ9y+UoQ|SI_f=%g`f2)oY{l#Upnl3X5pM6T`(TaXc zHJ{NY1Wv|3|NJwCt)Is;Y>*wQJ-J=Z8_rOf)WZNhOQuonDJqav{5bIf4%h5Fcu=)f z&%9*Z>a2e^3|BFwmjTCFjry}%`2|CU! zHjI2ae?JjDYvFonB*2qA*PLt=o0c!xFyr4;f1irP6GNv~X`We;E&5$t;^i+h>FRT` zSXs5o^lLHY?N7U!8zp$?a?Bb#1GQLWM(R@#ZlX*7;?T}pe{$Dh1xK=iX)w?^IW6R< z5D7nWTX9O^ak-v-3zwT`e#YyjX9i0@SZJS(e@jxk1bMo05URSN^WW`A5A#M(YLoL( z`4LJTw%th+Ds37?O-Hl5JD&4YW|N9^5D}X3^VGU`%s3oQm7G7r5;M~m+3E|0UU(Ak zGh@x1`Fr6p*1;n)vX}iDq_{v}saq4F)h$7{XfBbbSTm#iX*RF|q%2S0BOaMg7&bmj zf1wvEu{@J1i1~y!5H|xczk;37%Qz(V1c(Et#QE~6z!e7(|Zf4?yd_uk%_&;-%MwBeT zg?)2~3v9BWOle9qV=ZvfQGDjyD<>X$f5`|gYLES{By$YgKgyVxEHs98zRbC`n$g1f zFmRUy=G3P2SsvOWN{y>x^;;Z zu-t?{jhhap*mv>ozyJCMfx#2?ExtSzGdBSZ>tfAggkFj%j7+`JHGDt#7uGqTjiSgc zg}xl0$qc<;J$iVos(WFj-aTg1f2mW|+`x^caSrTp5L;+`O?H3)wt2Cu5BnxA+g&Gncbbu{0ttAKZ@e}^{UQ;{ z>sxgP_?uH6Js{cK zroidlqC@_F_1v#mMwJS%&$%$FtF9l(>Ct4;_5K+0+-U!2p?7d)D^$}hoHJw?A`1BN zY)`O<$2MD6Z|u>>ksBK^)LO68Gd6CUG0flP(|%N#Cx;q}W) z_8)0{btjpYVKM1kmj^oqQkjgW=XT#eeRPz~GWLkuUoMile-VhRyDKDAgvw?cjSYW+ z>$Fc0Gxhfw3QD{dvyAh-|*ZH=3sU5oeAE!#ueT{g@lEWht zPKDpZ`DMO4oivG4T^`fHW$a?XxYkM1(G}>Y)>BC#D>3csnyi>Zkk0HR&=d*SPkEJ> z3UL$c^TYN#rCj|YG35E4wtmvjrGOk7e3n6u7P~tAvjakNrRjpXOE&x+7 zjL`l5=XK~{L&1s#Iir5V?{jeTLwRn6y)p*^Cx0*XSqH7fs^)cnV1MrR4}?WkzD8!7 zGhC4xf0k&Poep|__i2*E!{&+RwcD`3(7+bu+(x5Oq}oFn#*4St_Mw0fV)|`J0cD}z z3hE?a?2s4mSvxi}spXxaN!HQ2_rDpQcEz)~ z$8&*VM0uK^3ofY->5kRvu=c8Zj)e0~|AR10lt5KBFUhe`a(m$ehTMFae3ZaAR5Y=2j?g17zZNHK%ED zZr9w`M2DTvup??R!Q-9=-BaD6UM)^EZ{QM$f|?E7XqyW%E`0Wk3bD&!G{FJ<5X+G| z!bxbzqNOBI1qR|!om*@UBs%6brq1``&Ltz`Sr>Cljy%jcQS#yQZpLYw&MdmEfBkn* z7uZyw(B=5dqBu5$aVN+P{+XV=_L(Y)9=+vMRb*~AnJtnc0P>-O)ST+kzhm15KextP z2>rs7F)Uke)j7Rn$puxW90WyiZ!gCJt~m`>G@%pwc+6FFl+;QEMIcr06w$9+>=^p6 ziFyz$j4NnC`MWKG13%#H#^+vof8^c$@Si#T8Qi7W3PJZRiFBin(Cp4R;FTsmuyo!T z4M93*+u^ZA)_xGd2HC$rcC{uK#MIKr3i@S_cf9tH`?iz$evU4|b6u0`9!4}LaD7hL zEED(jqA}U0dA1I^Ov5wHi9^@00Qm<=OqX_Ll*O5?Mvj9l^vUxqDJ!Sdmi`mb>%|+w+2b2=L-i z84Spr8^u>_2mj{O9~m$Pe_q2NbHsZcPDjxOG#9fe;>LC1zkJ9U(^15TfhK+zI^cFI)w7w&V?&udq~;@8%_mqqQRMRmd5QMr}#z z3r!x(H(vX)P0UiwF~ApJrE zRs=Eu=&MPm!9G)tYu{I9mQ5>CUY|%w*}iRMRH!?Vc3+4NSmj~wTm)n2>FRMMeQz_w z0#JC;@dAkb^=PTXG4wF}JcjP7JQfCE$uopGDeJRk0SsW+_xLU zy5#~-6FNDfUP~4*e_iy6U?k@DiROFlVxVc-WWxLmdJ}B=I<_kT{(4P7V@0Fn5|qO<9flygKpywzYOtUTG9M;+}&qtpUX2f%ch;lT|nWIaB`F$ z_h%F#Y3<{=e<3ZGoVeWo53r&RpTkniQ+EG%p*YG(4G6L+pK z^hnx~e`o|A!eVMkcM}?VT0W(PjBQ!kw{Pb36NJ0ijF;m|=G-yySJ@>70Q#=${rtCP zRx_&R5ONiHxuW07IQGKNpHaA~3 ze5L)R&U%z*vQpWwVQ=zhQUi8x?+rale?z#(_Eeo#OG4=2IQNDCk@iQT6mcSjnG9yJ z1{s_<&_x((_mE-U^x4`U8)+Mv=t(h2CIdmJXiD`VotL`l3uN3wj^hzmT$Cb77YiD2 zp@SEe5RWc;*4#)81P9Yt6?0~2Ve?{T!;e&18Rv~Hi{1e&tAmru(4aIf7zqs z8mp!XU#LwEDDF(+L)yxPLstQf0@@bxJmcqVbKRykCXwy1tD0o43n2*@4Mo@af`;tY zLvU@9r8?z(a}0u7kL4{6S=wxnUAtAQuqB$oG0diW`VQ5`jVG5{1{iG)*}%Z;6#&klyh|Fe@5pI5lj4|ib6|g=XJ~N!2_{}MZ!Y`!L=(KrZ`T5 zG~DI2cI5?!f`B=beiPqm+E~{ZwI|esi*NnIkwj%hW%EbmTtjAkE8u_3z0e;YLGy?=t)(jh3`bWXNT?D`7Pa#9mu3B2?d=NOMX-WTbNMBdhO zoqMRUC?H`lK00oK|NX55hvVJX?1_B+D6Gw?Q;*Apxz=i2nkI3?5NQiBKAjv2MhoG= zKrW5NG(z4iMh&8sKLctWe>gej!?;eQgRS0(Ol$G8$}gV$Ul^if_;eLD`J@ldtV!MJ zZ2c6ga^>B#l38zbThdL+PMz;Qrs%T|yDe@lwy1ouyjfZBhVan3s`pRmqITOw>g{P57iGfH@hikR{MTVadL~^4f3728#5AFkoSSG$ z7>;vMZ@;_pVrIDK@;sd<00`hdFC>;j*yVV32)$+{X)$pS-5c|uIkfdy+@J;_%&V6m z#Npf6dZ{$a78H%wu=OsCjez}7w!95`5KKAvWwVdBf?Ba{yu!XiR|d}Iq2^!+UJT^l zXH=VnK?nKA+nuQhfA2iI7pa_{1R#~v43?8pOy1jS&l-(`^P#mHy~xJ}P(u9NW|w|* z#G72(sQPzO}|{4P)Fi)3pq;F~mm_hM_IUmr~8u z1-(js62e7l04p+;nx&=W96$nmZzKu^ZbE3P)|Uf3Mh*3W*)LvNL%-=@aItBTZk} z?qVE^6+8OfX$i1~!VNwYG!MEv2IQ^p+ZU2k33Jlh`}|s16j7#w=W-mM=VFp>_ATDP z%FOIN>73;;3qp?RUlc6p$-D0nDF4Prwre4-hpD}(Q}7DYJ>LGu!vF% zcHrR$U2C-!*{J4Ur{xxG7?chWK5 zOlXEq^jv{Ypd_MV&C ze}m7{;!VMUU(V9zX?G^&fqd~tT)O&8%wUUlyoxJ2~9GsnG%$WIQv6Klt0_i-vGDnukZB_w@n^`%@QEu;$ z;Y04}*i+5& zE9ZJE#VEvR%2>OU-ds521a9jZ;?9fbb+Abjz~Ydi37O1^ltB7AH=u9J4_nTX2y!9} zpxil#A<0cHNLlz&kf^5;1SgU2jmj%05(61m;fmUgq8F;Gj%L1%Zk`K_H*y~hY+nSe?KEgEa|SN ziP>v>4VsU{rxa#3@>wNf9C4NsnefUgi~DUXmy5l`)*9{jNaXa6{kGy78)lWW@+l+c zs?}`?V+6a@^n$hGGCD^&;InCeVP5PogIMwPQI!O`p)zhh2(Ka~{o3#!I4W zSuaI}cD!+B2qWEFct#*afAnD=^k^IxdgP`JM<`ZIXmY8O=5r@9QK=f&J2yZpVsC55iODSWrlA+~tRC!=GcN|F%L_ zr$}~X!NM&;A4*L4-`#pX{^EDE?Zqz5;71?8xojzdcRE*^GLl_f$=vjhcB|6*S*}PA^U674D z%x^CTNgFmq916UX%6n#rGWv-Bi-z_S_GE1dMw3G7hfBke>vg5sYe~ou0Cq{L{ zFA!WuS!zDr#n$N6d|r8Zr5zar1kzzC|GT7fwkv#NtTgJnNOnjHb#R;USuA&k?ioOyZ#>J5*Z!-0z94v$S^k=E3{?|XRUm|IpMk!c z)neTjKf}zg-1(5$VSlEOLxpkp{8WZ~6zpQf?*oLoVO=tXz1bkV@49B*spR^bSopbb zgV6w|bEQhtq9jg!d&7&hp~5;Hk@)o3AnT8s0u z_zpX2vtu_&nYsekZa@y~H<)EeTjp}V3p{y{!uVk2dUvp@o>|J#uD*v2xmc6}k3S~D>FDNiq8Rvl?HFnjUsMz@s zSEvsoT)lblpB9%(Aytx^5`d!gQ_WG|M5A@xi=^`zj#7#W$-n>$wDy`QIRiNxS3En< zIN2a(g9;HV?tcVGl-`$%aov|Wm2|7`|l-J@^w5GE#vh=Pq7R9S`(4r@9d?x z3Tgpva&W~i3hwRH!~NuvF{o&bbxZJ%*vP@$m`3q!gFXZniAZeXoOh8W@eBY&xXHi7 zTf4`;uXWM)u9mDw?m2jb!6CecZQ|z|HLgla3qFKhW`DUxOSa9{FAyblBd~VUbq?fWg7*dlXqBDU$k2AtDkhL%B~`x-N(aVtTArn$y(e zs&L3bMq+P5oqad4b^k3^BXk9mKwT$ex#6VVjJ$ybKc{IDa*O#(IMcDzX*J}evtFyvZqW#0|TnKi7p>m%p)!I;BQwaKlr?TX;K zbb1#~FqoQ83PL-e^E8jrSjfqt;I0p%9Q*Zo4L1ADR)PIEaIs7GUB+&3<~>W)DZ_76 zZ3uI?ZO(w>!R=euX+$r~LNKSStYtVin;O-0W`DL$^F4vLvA}qMs(R57Jyv$cf$GzntsWYNtZ{5^ct^%L1gw&}B*Cil#3}hhRoSb~**;R0;LsfNCUPTj^g$Ty& znY%Nxx%^MFv6g=R@7>v+XM-Y*1lSGCIe*EqfR@iD>OH4?{Iy4mY7)@*4Su9F0NOcc%#WvXyUFq)j!e>vgzV&>^`>+o@_)Q9qIAgJ z`ot!XErqF#n9~_0zsr)~C0p_Rk}>LA~rCK%Nj4nXtRJipNc-ykd4<}8M#Kd zUhGZddbD7K&5$MHYA~csCWQE8nB;-+^wr!L_hE}7tf*}-+Uh8NB5NFo+$49j%A=`l z@g{`Qy;W4p?eY`{IDvKx)qh*gMMz*`kI4PW7%&U^lzrav^m4lzW?5i2-UuX8&$Ywl{JV{S3Z5<(sF z?xsJ>nlQi@VDp@$j`DW3x%Yzxy@CEA9WN3QHfA_sxjML_5NZbJ&Ol3~L=@OQcHXg( z&WGo)S_qapm;POnb2^9{Dz8|g5qNx?4SSPIHq7o$I!k36tB;#iek%VL`!l=TQd7nh zDg0$eF^l}u?GEBg7k`QeKC{NWT;v`!(#lemsy~^H(g~Ny8ip;7@|RatFf7d=lV&d~ zj_tolOD+$JPsg5vf+gi)BEE2p~M4wH& zvwIQ;YjA9ok&%P)%W7tYxf|zbJYLlN*Ckp@<@{uk3M;%Rfqw?7W-fBbA_VbvLN+*r zYW2)yLy*gTD)>E@YGv_;>(s?&XmY<=nA#6sQfq9Taub>kEO)Vv?>wKi46yHl?RwyJ zH*_HtbN71*EqvupQ*c6@qTWAvDjU@X1GzK4Z5&JpwWsq&48vJH`|c8{sDn$9yysB`Yh zUlLQ{)B5{sV6Q-(71NajDL%cs1&N)|>Gx72LU)Cm{tO|CWtDzJMwdiRN5W=oe4>|8 zfy^fh-}4qI3*Ig&|JHCX4NiF645p036vCg{y)uTfAb%UJ7i)4KqLUBFwaScarFV8N zfIVq6_9si!LC&GnsZYh>WCY2FGDV6jxP?9aNoOS(Sm&nz{Buz*xKaOY z7)uHLuQZ)X2#t5!hpA64TTFtlJ#$>bHS{<-R@82ervH`ZGPgN;D zk`6GQ!har>=tkq?EKh3~?aQd;+?JKY#V6^UAi@*M6bCNim=IIea^PCsSC-`lPo#MP z=ETvwr(dxrn8|s#i7XCeytQpN%850r%8Xs!IvkNYQogACo#Rl3E^np=I;pb!*V)F! z)mw?SeC^eT0ksga9}WMAtGH{TaC+|o^;qZZ9)Gg{1J8|sEj*I%1#`dY+}=kmEyQ2* zlaZ7>q`QB?=oM3{PanMZ7B?qSFrLNq;DF%|IZ8HlKMbeRP5P z;w>3tqwy$;lldF8$(sr!x^fVK&^Z2bGrKgFcyi6j@l(BkQ&GYm~87HME+X)r(2 z=V}X`t@9T}<(vB0q!41`rMObomsqh1FDboJYObO;6`MkN+C7D;$(aIUd5AO}De2VY ztjc_JALv22!U}q6znc&M3kw^QP=$B*{XP%mh#AOq1WFh&Bg6CQ4ge^gzuOWX#OeRe9?=UZA6^}_QVf=u3e0Unc)Sz zo|(Jl_*%$TBne`T`vINXo`1LZix|(PoILcz5rPy6;7Tp-zN5aI^o>K?dr0J+%`Dao zbn7$tK@juU*6CCW$G zS*s^g2VJ{s&)0QqnP>T3rs-6dKCpwA_oX(-e=PSiLn-MK502;0&wpO7mD@SPyErZEe;G*8=D-v#$49*HNhnINHKKbw5JA0K2JOT&|{%_%$nK?Vk z6P5gbT@p&_XDukf*tj|6x0c43{Yc9S|M_=AQ;5XP%*^R>iPi=WV#*N)oGeNbL^TRn z43luRv}DR>Hz+!jnJ>gj`6*^P^;_co<60 z7ctO8Mw|#^41=&R@kD=(0f{PtL3{ukCKFPCYLP#mjEQIC z_(-k4SR4dVaN`r9M4?oNQ-W|&NC++{k({ies}xE+F$zQ>@<40@UnXNy<%|TTh8!v< z^1~pIphPGO#fK{BY&n;%kO3HpBC;SVPGY4|YH20b_8#-l2qGpvNo~MNcnR1@Dv&ME zaG21NRra~AhJQrUQzO+;n27(74XdZf3IDZ~ys$4d8AM{JQlNst!Xb1XUL4QkhA|){ zB@-KGpzBFVOl7!A9;Z{m*kS>nt45RX@jMYJAyFw!ic|1FJZMBb1`C(ywal=@NHhc` zkg*aGDw-&gA(pa3Lm?3aG?&Gf1H%m(npme|^8BefjVcbMRuF*#NLYf2p$vt`%Ybx| zBpxin36O9OO-qo${rU1_g&5D5(4>+$yoN!HWP_k2xxa=YON!JHLxEfxO$zr%;L$)D z5JLh)sT5Hdl}Mvv;nX~FoPh$wDy2p!5y7M=(Mg7ccpx(g4Wi)q$#959pP)uzMOd0R zIl-ipA%rAI1STvzUdF@%!s%>^jtJ8W6SQO;UkfM5!WmEolMDuG|hPk|-qjc_a>SWliWG^1DYX6=5QQn=CTT@h8b*|%BysLmxBnN>D)Ddvn(%@!lz%duXp}>Z z^hhn*popZ)5OXPTrZ^Ox zqyr^@V59`D3Mv4@*=T_lO`;`yuUL zII#+e@mE20ny65wNJvC7Z~$x=iK&QGg<(jcS|;0{E+NK8Ng-H1U7_G;;*wYxFE&P%Ocyf znnR9KQn@+;kroftAT(kjhQ^{ASS*u@Z$Jpq3PHSt$wOk;U=<===qrqt*!3Q~b1!VM@Qi7C;*=|;Fe4T_AyVUn>*qyi-Xz^O8( zT+ZZB)qF8X00$EV>2f~UUu1xik`fL6Nhq`s zgHKfIB>Zq3l%o~PL_l;B(LewM(eWC(!Ji=pCI}Po0*Voc?60i7QK!v#g@gkdZYLnLNPDM*kW4VI~dCS4RqOO+tu zGD8?%P6NrIB$|dwRqzaaR9GTEK>$mLOh!?`;6yZDq@V~@$+Mso0s*hqt5KmOG#Uld z>m?Eq2PIKxP!enyiXqU4GO*ZxHsXJ9(g-xl04K0fC?=1^7fbjY0aHQ&F$B6~R1#dz zbW=kFGQ|JtzQalcE}KpNq&1B9Pggh?BjKOKa`gZFc`_wJko+IN&Q8F}DQK)7ujdd+ zdJYQ3VBsmDSTqVnz+%yK7#^i1VwpPNmH~+ZBt$|?@nn_UNQBWak~lV5&V(n0M?e4xiQzJaI-C(H zXD|~HL4TaHIFf^Tv6Df2&qbOMhO%CHC@KkLg zj)MdSp>zhaJS>@jRN|sSkx6Pe38^MBwF(#$2;<5nbWo5a0XH! zl;R`(!yzy+5E&|BLW0yBN~C}XrKxOGYRZN+?r6BFhm75m%v6kx7vPP`JXM zqE86J5s54{j}4LelOR$VLY4?8pd{f~8X3j{aS&vrjt$V!qd=iTE*wTqBFBqRKsx&-1DV5_E}Ik->|3mdA}i%a6%yiF2vI4YhJ z@$Wf2!vB+;{|NnGa?(RF|Jpff^nZy;N|N}CL$wMB9+ChKf`tos3~&^IfTD&4K@1q4 zA_yZO8Y2-hp-lEKZo%U)43S=zkRS+SFt`|`2*SrxxQS3OHxkN9RG5O)`hQUm0nHI7 zC(0OLeH_z3iU)#(WTuz}i$W5U6!B6mkje6opeco9A%~ElOAI4GlW`gWH(3V^l0}k) z5S>mGic8RjgJp1W1fQX$B?CY(7KJYpu%lFBe>GnyfCfpxA}#_XqOk;Wxg1O*C_uP` zcoRGV%oE2aVpPfq&_5PNLX*_8NI(=ss}pI}5tw)>7b6oXbqb#BpFc2Y#7rh%7p|vC zQ#Ip9E1$hBjbhf6ahChC|r|>^@m3g zgJ48K7>6iC5=dYj7KTBC5;R%^80H_&q!T1MJP_f}RdY}PGz+Ioz`|KcG%%i}!H3gW z3_-Xe$tWgk0CbI9#MTCpu`r}ep(kKM8KJ0uL62T24;7;%)JS|d1&hOkvLz*DE(^_# zCGB%V-2Qjb{jcW!H~JtNbcBc~LlTZ1BxX`&Q9^mRL@Squs>l&Slt^#Di4bxlE|C}% z2EoPw;y5%tR)@q!ap6d&kt)#9=muf9CKP8#7U}@;45-$i7V~j&ut;Ho6cNfH1!)O1 zs5lhEP#Nh#P$^Z*1Q^+Ti5evf;>!>SlnI6g8l=2PqEbvHli-oqI7|=1Bg!tMrdL9&`<^pLC`1BP3VX?5F~+v@W&=65{x>2 z914XoNL3L~CNYsCL$Qr?5Eg7;;}Yd@K~NqJPUmssK^SBlldCm^v&h2GFj1I@2r#0+ z1eL!yl12;Tup^Od8b5*#RU0Dx;~-2jmIT9-Nug|3A{_wW&_GHeCy7PSFw|&+Nessj zu+qdNJUNLbQ-zbol+a{W5D&rtkP{P=NC-AhPnYNc1S~f~6oQ0=idU(kcpQ>Z7zM_#lc+R<7KNcH!m+AI5Hu)~#6*ik5~YL`MPwK;Y(%ml5k#R% z#6+Mm6ei`FLc_#-It9RGiK!?$S&@v@u>4gz+U(Lb;h!HHPTtx#2#0Xggiy8)18QDrY6KOC? zDMV%x34>(FLCGZno(TK&H%g>*y+-%9g2D%1xp2Qk=jm%+S5oe|bn%Y6%lmoq3)Qis zmZEb{0Qb+?`MOPsk zY?+iuyjlO>y*>9v_#XaKpBoZ2fBeFgZSw~XpavtAW;)% z0GAx{T3oWu$JMvL?*|gJurerPxTR)$b~!RQC2q;r!S_wB)B1l%)6(t!Z@k}s@n?PP z7n3TFzq6ZIa#*w?|7H)lZLp|*Uaa5xgzpU}61%JPJ|!)md^Xsi3V<0-xzlGZ&&Fqu z*_zL=IGEv-{LhqVVQvnZ1GJq!Gd3G|?g_WvMf+M8P)Ot#Vk6H5v} zUf~k+;~$?Uc2K65HBLI`-aG&~TP^XYy(d%$T6AWFe>GXmG}|>}{mIR;z?bvqfq`H+ z5DtceU|=K^vH}W%|0`UeWxBcfKU}U^h0E2mk0x8DKqQC7WmCU9o9xS}kGwQ1Z!9hc zqOuiPj{rIQ>Rv*o@#d)9OXTQJrt5p2+`fD*`3PQ+s*(*;~3_rb`>r zCX4sXoLt=kTmHFaZqZ`a(j!s8T@T}+JiOP)m=pL+=k>nnZ?2@u?^viOOr2Xvr{8hd z_&D{_9@p0mwOjlV1)n#!dq&eUIwIe1mM1Pfu-JMiXG2Nu*{(-k3Qx;Vhc7OZDWX(9 ztqWH~Je{IWFWlX|XGfiGf99vY4Z*KWh7arO;li_fzEErT^n3&$s$u6B_4_P7x5W1G zgO&N5Jqzihr*Cl_*|v7%0ZgpCkv4zM|NL$kCB0_?|DZ&;!6<3JZVX5hkcQ451gr6KRT;X7&o(&(3>tulG`_5c@(KB?NFR% zI5C1|WH)vf+?Ac-V#ZEColuh|$De^U3kp)=>RE7o&cwOsUdesacf`*VjjoZ;_lu9r z4R(K%>pr=K89$MK{jWvEvKL|X!S zZhKmjyVXUB`qYI!_w$2fN1MT0GnM+7`iw`_Nehl`z7&jHTlyS3UEbmQ+-294z*{PJ zY?y+sT3ax($`Q4y^^WOb>tn9>?F~v|aQyMu$%GHZj_Iboze1O0CUqx|8tf*Gq-@*C zDM1N&L&Xz{&$GZ(|Kan+X;WpNbwLLEng?6gv_H^)bs1(rMl*A!{oGh!@$Nz6O7)Mn zya&)jLwf^)BV8}X{T}<<7bZKKu|E4=^+VCbbJbUX-<|!0oF%Db%94i2tF0ALkMAB` z&}9K$=aTyOY?iq?Zw?nu+YY$f_U3s^l>eUggBjC6z>H~u{|-N3hNZ(nOAB)g3wyv! zyS*Pe@C$0NlzS3?o=1s#3Eu?-1cO0f*uV9Ti|s!q{GZDbe}cwzb>LUo&EM|=?@0B7 zvSRx4qs5NVv`cmO%KYB$dh(ky<|a?6d0ln(Z=oWxm0HyC(Ix=1Zs+Xy=seQ7 z@`0V9zaq_SA1q!Pp<3;Dt>wTe9rxEW#eTZ9Xy3x;+@eyuqg&8@8TV@L2%c-^kQUosQQ zlU5zLqOw$e<_L!tSt9Ff{@52B2$^bI)ok5OvwTTe0&VJE--gOkz}M}04b=92A6xrs zUw6*Ew(WN^A9h5G|9V(9O#4>iPEt7iZ!@^0oaAHDPn+@ij4$F>_m8;QuFh+gJ#3kE zNB<*Rnv$6Lj?f|f(=I-LKVCmhUYa`wBt-qOi zQAXt2Ih0DcnNXmkVIPHa>X7Kp8k2WMf>Cs#UlSi|T zx}#ddGEC`^tI~k8j_=07`|~y&xI1}Ziz3=8Mt6Yj_HCM*F{K{(MrBl`CH!uG*ANqMa_^;VX+1m{Zf}2YirkhdB(w%qV9!+~*2<6$cV+5QN z8Pp^B;|*hIBszgXcy|3ds<<;2+k{>x8z(xf0{u)`IVXLe^QCn$!!^!}mrVQd1v?(L zaB^eYPf9?j&*9jn%8^fRTYn^E-XNSWa#{P~aq(7Y6g>OoquZyJTrJ^@X)i;}o&EyV z1#Qy?SKl{nl&*pQ{QcRm{BQH0VU!N^b(z((rn`RVNbLNJrg?iJP48Bjkqzb#{Nm~FE9;kC`qNDIx1G+TQ%uHW}QVsJNli%WhgMNjp`d3eJ^xR4a)GxaNj@AY?-W!^_w!UxCa&l}&SVNyAT0g`p zcF0dpQG{(Z4J-r?I5`wg;DiO9EH^KB$j}F~^QGa}7B4>1_g#70wffOYc;tICtL%E3 z3SY|K=AI6CKK1+eJ;mPC{2S52ABeY=1u2PBPqph!%bFh@E?e8Xp9#RUPGv|SvS>s} z=JR!+_%7FbcaMZuW4;fR)4snYM8!Wpyx6NfFZjrr9YNbdJoaA>b9Hkt|FZV#q)YZP zS91eq(&l!{hIbtDhFwW_j@4ZHnN`Bc%U{1qw!Ndt_4|rlkDMN1l5?Q}=Wn%A=AqYg z&HR{_^<}52tZdh;0r8KKBA~ise0EK(WNF|7{Jl$mor4y17)wfr*!T-4aLLxT>tA2+ zb~*KFBHNQ4^CUXc>`tk7O-%9Lzr9uG`fj%1)D_#HC-6xyw>wt?OS0<%V1g{7;Ka~f zWZCn0Mj(BEGo#A!*VaP2dEONZ;#_V&UboGK+te>7~>ga&MY52HgHvs zSbU^+Jb~%Nbrt<4_UD^z=jXmWI0~|rkNjQ~z!++druKbdI1tV>PhMf7-HvC)RNGJn za%{@Nul*X6Y`t=^HhkDI_JpMi9rC66M)cd|79M*8(=Fy(#m>9?{P^u>!^S1KK^8BP zzVo6pZ#$jt*L}HpJ!Ij^&DP)7pI`K>canGC>h^W=&4mclV(y<`icon*?W}cY<~5bt zNSqcfz3%qmx_#t!i=5XTs9`_tjwLO?v$n>Pnp4%;fdP4ca3?R0&|Ivy&-bWV89S!1)asbvMFx_8dZ(y{Ojg6a)q;_E3?_Q;+|W20it zuwBEJvU6Aeny_2H?f;e(B5Vcg8}xvf9}ahRZvs3_b-tk&L804E@6(=HJo6kacb~_% z&>dfq@z;h=*&}-knMUC&Q0-u0iW$FRhgTOMX6Nb7@i*bgMJ08)*X-6KzCUc-^2Tex z2_bskxGRU53j1}UedFlHgl|f(aLaeE6Ck@s-Umlk7+Ouu;n(J~qU_FlSX~CZJ9*=A zfC%~Gm`AQ!eXUq9q>LrF=8oe$lWp3B26{dl~#%24aaf8Bx z%==cLo8!68GdcBc;llLAcEx@p+itALzWe*-*F53@k@oLehv_M|f4g0H9!72>0N*^) zMeUwJn9#p{Zc+f&d^vd(SE=0K{Nw4DY25v1h*N1Vt0%g`$C%ajSJ&mJK71fe&%WW} z>d^w<5z}9ua(fh7Fsqb${nFIl=~3@El0QvW%q;8kn2FSxmAGuL;ZNW~i}5P+@s}rJ zmo%>G^-MkOf-pVNoSFjrEdF`G$I~3ua-l462kFqd+qSz*Rd1ZfJ<>uyO&Ocxyb1;; zo2t7J9m62En2FJsM?X%vmW=48Zay5`95@o0x2`ZaW%v-Gwuv=ovng=mT>pqqRyJk_ z&^Nl=lijWNDcZ9qtM>WtqpS0*Sovi=P(bSIVbGU>40C+qrtn3Xk6vGU8L@f~hhIqO zELy4|>@VbDP5yNmU$*%v-z!@`ElbO?0RsD$cs`cL&OOOoc;$@bsG#gs?Aetm6%`Yx z-pQr(&3TLNo?Uus%5>^7+1`IX9Sz%k@7fvLS!K@ez6>??1)qVsmHZrt+kpFBaZc z%zwc6ey7cUUKyp78$F}^;o(%HRcZ8>79UY@%R1{lneUFgbSnE{PCEh;YqB?99;!hGUTjA^ zzm+nTRgvy|_0$GwCZ}~0I1Em7_l7+>5#T#|c9*N5WScPA)c7uY)kfGU$GyK3+~E7S zUbB%;QT*RE7=fqunH~9+^Ktj4#6yXM$(`p5%Tp-rs2#`i9B+9p4fFoyMteZI3j4ZH zl1qgpZRORKOL#v6x4&}RnetJzw5LVI9Cu84AH6uOYWjLKVqf0t()x5lDdhd%Vc$EqppSWUVAJ6Ii{UI{!P~E{iNyKqqfZYn++cVQ0J$CBN ze$TLoUFJ1_Z-3>uH3yKU-c&YpaOcSvZNp$1Cxtin!zOnNO#87vRrY(((@srY4j^LQ zKmT|NFdy3cn%!{JII46p=sI4_|8w(u;ihYUQj@HZR|e$4L;tci$d+GEhi{?|n8|Mw z-734M(baYH76yI{k%gB3n6woL_BI|qePq7-%xB{_3w~r=-{n(V*{iQh??y8C&1Od) zHq3@*)E)6Q-I!0%<;-BoIxHqd6iuUB$1BVFbsHVtp0h8U6WRO7w`AMx?xTSz_ZJ?0 zyuYqt?v`vft7S_YX{H9pZTHs=wmx-TkfHaB=GM=`KicE-I=r3mH@VJ^<8lEdHM?-y zQ6n%s$$j5_b$jzA5cJ5@r=Ror_cvwxSoQq9GHrdy3`g%oRY0wpjg>C9n@ZRl|83PA z!v1#@mW)N-_w-2V$`|!Jn!7Hj0)3Did>qNZ_lA%(7LfZr@tTr zxAja1nTFyJv6G+6dNw<)TLE0d0iqgaT!K%F-2Ck7vx`!{>+J`()Zb2LjT9aW!n_&E zpR;Nz>&q>|$-gwUIHGLuY-4`)?&+IuXhAKGLaGHIt`S{zoj5)wG_gmQn z0X9Ny=Q=e>cH({k+uv={ZQJq5QSj#L5cs5E*43^vPv!F@s2tt0OYi#fyNm9&ndHe>`_(fw;O@fL zA^E@GXRdjui0Z7J%vqxKUe0uVYt!rN#F-I59A3DLJGij(Y|=7xtzpUTM#6!lF6gQ^ zUQkzwU0`oZD=U-JgUh(XF15X`DNCN%=m$S7waUu3CqJMz5P!@rJG%Yo_PXuoj2XM% zX$KuVe-xxu9cLxve>P>dk*7V^tS&CPdHY=|_j1~%n9pukr)n|V?t(Xew)nFPlvf%1 zV?+AhP0T0ugAKEvt=pSA`4MvKH)GEI0tyK3~>($$M9iITf@yn+SRxn_Fk`{OOzH#ZmOR^L7L~RM?qE zJ8auoe9k_TV{5+PXQ^ie$AqI#O2Gxa`@I$kw+u9}ZdnDaGP@Kn1r+H!<`pgcVPol@ zQ{wL%xMbQRZfox_Wp`BDGa_RAK=s?&D^INJRtVI@X=f50^y8h*QnBAgs|Y&_-{)%& zsajk!TNWM@w6=d=**hH7P~RIf4ocrNRqzV1dn>#8oOB(hFSzc$@;9-O-HYkWg(8r4TQ6~=9d?&11b>YSG#dBI1cYv@dP zGJj(unE#8lvn0f!t+aVnwy8~VvI{rU*EGIpjhsqT*wOj)s;WT>`iIJNZ8XR zZ7^>fIO2j@VP&%&@sa`}JshHQ4}iZ*@LFd6(Wn zNcpCEkUNXW_srPLPt``L6gluo7_uG-%iQavFe_v$a_S@NO zbC&E6*R&#z7p%99?Xe)(kWCp4h$OFla~}78Lh2yxZgu-UL408BMSU@?qn_kq;NjIX z138(;6ZbR*IAnjI+)JSkKH#Utd@WH=pG$>oM9S+@-Kb&`ubESRKvXEy5g&sR`fUO7HUt-*z(cz8r`6o{^Z_Y zv`+!@heI*QRIMUKE@=_!k1p>X;#i5x9^ZTN>H+QO zrMy?KUl-Kr_({#M#PUy_#k%Gfqx)X}Sd?muhzrks{Jv$ugSf29^Okeb9J#!yarATk zWAdh5Cz$em3A10|5kEpI8K$!#H``g2bq81@8JMos+c>7B@X!51V;9iNa2A@ntE5(^ z3~{8@#{FE7`o5=slV|-+j{c(P-rCNdqowD4e6;sJif$u{9)*T$n;(AABrWE+OfKO& zD$dsIH7`ky2-!NnG`#TX=4X+IjHn4I``FkRI<((qwu@2RrX-8hSd(mLQEMCOFk~sa zw(Ichb2aI=x$Ea-M0gX+6&~JV#5ZxxmWFrx(NrfXq`GD`{#W>2o1ZV0dzN$s$g0Fo zCvKMt^X{9eN-A3hAHV+fx&P(q+gslmG7q_gO#3dARII^)Aa#S>>#zNw1JCBCr+;62 z$tI(CJx}JGSnHX0i}%OmU3lc{aD@N2mhf+j-&>3~xmCa&4bQgBaCVNgwq9JZ=-gT0 z(33jPCwb3K<=bmC=l!mwwZ`WJ@)Gt1Iy=mLWtkaJS4f!f!sJj?nyDnd@OI<3$Hh5e zeAyLQRIYTN)vo)OH#6S867{SPp@O#@A6ntPOO8B}zK_j}pDX>ba@OoxY%(;1%R$N{h~pH-(U{?u{E>%@^MG ztkjRBA29_kx>2{%*w5Q;@?N=%OtGIm6LFuj?v-3!&6LuBEqZ|FMZqTN6eR%@PIaWXP?JG$k?!MHLy8q@M$>LDVqPkV09;=^o8N|l* zqk_!-3xf*t=|>zJ1pX!{ss84{u`|x+=3T5XUdwrPBjb}p69TcB_XHnNby#J6vP`ho z`uh!_(xj9g8vtlwE`&Tr7cP`RN=e*LMEuDW;I=uSD@#L{D?go zKe)nB3Jur{>?mbEcRr*Xi*wz3+7j@7cGcF4$Q8QV&5Jw+W;Tb00ZmJH{S0!w`DnxP zgqc@Qx_BSJ{%PDvsaslJT*3|-19#2bp0gQ{*pb9Xp3gYAn%6PFjHC~l@~(5e3&z%$ zxxXDd@kdaQmVAAdqYZjY8hY~{s?W_j7ELKSA)C6-@-oMh^#DMR~{Bc&Rk@1`4V&A zrbj1gQE`{N1=LfDRSS@o>|d%gHW0P9w@i-7MsGVdk)F5YKC0hTw7Kw3?!wy|XZey{ zmO>nOTS=)Zz-f+UuutWsai6G=)83r{aRm-q^Jm`Gz>|0Uw)Dz&4qtU2NKY3oJ)(af zv?q-c>7TXd^JAgUDSAG08rZjFc768()gi$`^2ayw%CbzRWbP%`+c(3rw^w2NIfrvH z7yJ4>d|mZB_;Fv$sHtBY`^aozn z-y`tzZJM0f>b}K(1XZ~=e>-pZ*sZLsA@o)Gm>sHV>l^5*onAT8BH|$L1?Rqm@-hT_ zJZ{syH3^_1AU66w*|J4A_r~)+QBaEaw~>}RT*h(!W#jTQmS@vj-^9BgKbEv6_V{0f z_n&<(`Xt+SCuK{P$-KQE%Ok+SzO(M9`SolChv3_LvTkj19yy!=va0MjBk}q6?c3|u z)}sp{t&_DA=Y6m4n){gak&&|qPt8T{+eDH3<9`%{9G~1exbnuDhsbMvhufy-pJ?wJ z-#eoagzaCn_C7ZFr1|fj+;8r;SwU^@2G`(oW?rN2R{mNe2njH~77o>a-I1)B=$$yz zT7CTU_oRI@T(X*Wd10HY9q$b{OVfD~&eGacAIXeuTeCfk4p*0bSsT%Ea5DZ>kbP|x zX1ZPFk~=GX^DNxsXKw!rI59ht*8X(bVvZ&2{qzmG;Mq#=xT~ch#ZUH~I|%tU-QUM; z1@FSq)OQQ^_VjxqH`tnr+5-1N+RwdzCK-3Te=_#^mO&rSjfm6l9G6J1tjJ>8 z0U0!41cnAgvXBE0F`E$Q)Fo4#BoEVEht-`;( z;~K2{yL)lcG20kbd7mNDWNo*y(q@2u3an@`Y#zCf=E(^=&Kx~I7kW)z>c70ylXq@S z=!w)Zw#C_O^{93y_fAms1<|h)E7(2O4yw zF41O}^6KM7(>>2r&YjJ^R_m$B_lxm8_5SZM8_D`=WqIbO+xQaC)>*xJE^i}fz_42SsSCD1Wcz!e_F7~XASh-whd0I3rT5D-p}eViARaELtHsc zs6JoMuidzr-~Q&mSpp$#Y%OVsc0LK`B1=9mVST)MF#6NKf$z9cBy;%~l6>c(2kA`P zHTT(zY|TQ3RE2I*R>5IV)*RC3)hhl_7}EQk&7Cjf<(I#mS}}jg+mP+hm4t8a0}N%~ z?_H}dnr=q+!Vf#OyeW!`yl0~J$J^bvJD^>kPN)pqofUg9c3?NaBI?#$>jL5o5Di^Q zB@X1pV_gHk{5>?9ZGni@hw)f1WATq}N9`Z_b?oc)d{*$C+4C>$PGOyE33NW)bGw-5 z6W_5&FbMiNDjxznE}#4B(NS}F8u!lC!U-25Uh@6mwS)>789B7$%?pyLdcRilGylfC zPR-QKMWa!tG2JiIEjG^~J&)$q=YK2TR5f-q$SP*i>tm7ZjZ5G33fqa;?hQ|KcYmng z&GcEme+93jwqJW|U+BC!@6UXlCB*!F+X!jb0_O%B0CN`?>8e%tQf|RO=cdtSZ=BA> zWT*aSdInmhIdrbOgPA!xz0;H_5I5BX*x6nEQ^QCfo)Asn;qAsK*1*yrMXmvlTP+1O zPYGB9F$mq1KR5f)tQ>bSLeG<`B&jhTj(GJ+lp$v@ZyQO4PPs^4xX7ga_`X9PXJYdWD)4y})?{~`PZwWa|?k{NQfK~K+Td`LsAU@4F{9^CoWmwZf%Qq%9 zSZ_Vre7rXdJlgTAjQHeHMuTeCIdXNq*k%Kid*JeRN63oAVWcF*nZCJ*J+Q=XbYI&Y z{_Tguqs%=7Y4@v+xu4os!=MY;E4+kf&ut}xi8rV9yZ%kboDY1za#KyM^%l38PP{iq zKQ$dSYR@0$QC+9HN2*+~*4C#@LBr9j@1OnjW}bYlXV(b-@@nPZJJ+QyJJYUUcfOQP zY%EV}cew{IN?7>f{Gcjx&hea=vgmZ&)3lT-h}GA=)wENE$S2$EmbPxS-`@bM9Bx}1 zybM>oTmU+E`mxA7FAJXk_@v*RJjTxi<_g07IG=@%c}Lg03y;S$p8Do*9Nuq2@Ne&# z`vYpSS6!kmwO&Q zEUZDL2Uj&??6c)C4Po`uXLAF4 z!V0oiRB1fb=FK)v=zZ0q!t9f4=+p?g*+6r{&frqsOP^v(1)~?gcl5MCd*LqQLynp8 z0$b+jKeX!;^SMJ!^-}2gs~@I0zrh>JYEM+d`l=UT#={GFAFOj`jL0m_d(LMy4Sex< z+wqBHGNp-k-$#Axx%C;D=(oXn;+CHW7VbS%zYh1yN#YQ`l7($u zEjS(6cyO5bD|fi*x6P^Lr)RoLa~DN^d@5aI+MkeeBdR51?t1H_nsZH|22c>*K=-X9Bh1$sstF)GES{%JTtrn zW{WHcJ$7E;*mbRaT6$mI#;j3O2xu?|G55_i^)dw7o_CuOtW410s`I(5{(qGB4 zx=+7nEcLyp5p{Vy{^;`5KQZ3_U4831@Sew`1Fm(~s?JzVM%xZ@~1| z9o~9*dARkn_U`wynX`}oUg(|wVXyPR#N)1p+|=EL2mHSkf*ZzW*G+diwP&+wy4dg7 zW2-{jCzKt=3orb>Cg<#JO9ifqpZ$IHL*_lA_jK<23UDdt9qiKzVGa5~^oU)#%T+{m zY|5{|Dkf!U?D5rm`VWP>7RgHW0P&i-$Hh<;gx{ zo=YyJr*o>3%R4$}b%!1B+cPio%D}Y3>w7u-Uv-Yp=?T1cGNAb~PHXYnd3a4a$;9P+-X4#K2csyIwB2Z*zCg-!ALOn#s-MFQM|1k;6mJ&wiqkp7xGb z-^8~+SgsyVbgh!v)s^0l0h}ff-Yp!M8`udbg=q9|n{wO7;H0#c(*#-Cex3A$? zUhmHGp`t8X)^kc5X}RmnF5SA`%)Rt{QFYbytvPeW2Yx#NcUtdS*_JqS*RRjWv!13- zFT;#wV4_DsT)OENMxTC?)$Jj7bNU#EautgYIm&& zd1+~}$JrOP5)wjpEAP*|O>kQYbEkeZD{VRb_iEcH76c*eFc3;G?`JbI&rhqrbfj~8 zV|EpIs7cm)Z1)eJyIz?qcjKOeFZl^f+|b>Z9DmlZoZT6M)~mszT^bPxbyCnY)R&`u5(ujGhXZ`2i-lg=p64?6}mLfMreZ4 z69y&0MLWOM6WcBx+qRncJ>c}M!@Y6wDMG3c9sonChU103Uy4?51tMaUxd)V}k* zJ=zNd!{PV+-ow|M%ZtvfTwo!!1kpaSxcl-dn5`!sqIb6yB#_&KSN=Ziv5J#jqaO8*un%GUbB4TSRX-MtvUw>JADg56 z@ZpG!kcoW>Uw@Cz=-7ke?Y!0T>{1A6SxUt{8=3tLi7kF?aP70I%3a21!2CrSYfO4H z#rwc7>+7>1DKi|ozF*$Hf(WLL2qJm&${_DB7c80OcWXSa_czD9iF@hsps_HIZ&>rj z;ZX1Uu6<9KuqX%m{*@OC?xtt5Ez>B=8dsB`QD>`Xp0OrHPWJmM%AJlr0Cc}Ax_7q1 z527|9u}{SbcCO<0hv`pacbT3!R&|?P;mSr3VV-Za)1@_8zb>ji1jrttLv~-FtWTKW z!T9&g>pa>QAH*Ox3$9%{Hve11z?rrJ!PcrY7q93ABFVg&2glrhK7JT47})iFI;{V| z#o|j&H_E%Fn58c^E0->6%4W(AB_R1*`qODPdm}VSGEg!*G$wXOkLwg zhsT?0J)Fyz9{1GW4SBRZdrM>Qn#HN1Q}>B7*TFZgud1%^MQxZZc^cTY{HkZ%_?pPo z#7XkJqH(*2`V!RNb$yP8?cO`)`eDCw7M8wGTmFasbFy&3&k&33DB>mEievAB#0&SS z-S=Ws{_M50V=Lu%hpq2edZ^;8cFtO6GF9HVjIKIyF{8YM1eSj8w%qvpM)LN6uiC$k zH*l!|j-RhZ+k69EvcB^ZOSM*%M{A%1(bMVZtqU#R8aYBHOzi6Q{>i+nM(fhM>aHL2 zHs7$`Hg6ICV$*^N;EyWH$2AA9nzwIK?AjDkxr2pnbRapW^gT1}m_9-KezXbkD$g{h z-+CKR^|xJU(J;R6z6&h6jXq%!eXEF52(zebYt!7UwsVgN8@pNej0vleZ{k?UXZ+s1 zhvVGMI#+w6K62OX$t?k6`FBoE4%mxlY)d@*sN>NPBuw(TOX5`c@+3K;{Tbd+bSHwG zm=Ae=sm{6Jh}hBiHre+g=b-QR2a_bzojUz4xVuNO7Q+C$AprEtntg=4?M1j{`B-rHb-;vgT9&;GQYO1_DJ(lf|+7C24Dz1K1gtB z405r0Kl9e#K@U=*^BUJp!^w5ptOF@Y_}-a$^6(!yd?Z>nmkfGH3kgI@Nj_uUWhH>_^w7@9X|n+NDDB&ipBq zPE_1NGQ2G;hCq9B<9;k3$a^stw=~Ub-sCIJzR$~$Wph?LBT*j9MuA;NVKINir*=&A(UZZ?66K?JQaG!fjR6lSK&Zrp8Id!%pq_g)DaaIs_9=qxdj@O; zmNGN>@AF^8NWzJa9^KDI_Ea(5IV%y+DJY3mh_cQLREbYR@-3R#!2i;njI?HS-o{fO z$EJTD!^PjUIcwG>H2!|ND>63A;+xLND`XUkw@@qW7^y$H)T)r|IbXKl?J0Q(jyML) zSx+!qPv1_5yv8NeQ#Ar{eK`@P5V51X`E8TGs*}+r1Qt!C+?Y|1RtM<4+Sr`6ty3FeTHKjN&-l>1eg(Tju+b@uR9P(eWMFW}~xO`AjmOv`Z z=t;qrT4`oL2M>^<@j`xx)!yCi8E+U;un0LP_U{a&;zaYDFh$k!yuUDC*~iT>vqP+^ z9wovf+Fnxiz&!V9dM>BAzHNb{`XWq~i4pv@TJ~58W3@Lj%c0>~ zJiE3=&fW`efw~Ij3lnVk^O}k;>XWK`{hiXtXRtCRTw2LiQ<%yhzaTTTOWhGdw5Hx1 zmSFfVp9k&BIPa!&F*UgwCQ`^RD9s213Tb7&ybq7U%m`-&_6k+4EWO`=B8Y!wlOi^p zZWPFGr4BiH^#{MGZ#K)3Syb`)(H7A?hbzu@FiJX>%5BBzqaFwHNbSjS7Uf(=GjZzd zQq5ikXx?y9TE3a+|E_pJfor>ZmIlZNtxUT{6q(gS#{|f~_Mr}7>t8;#O@;oi2rYyq zQTQVgf_|s+o;YJ&>v2GecRGJG<~Kj>O=3pCkk8pp-5h@)FbMA0rWhw}fXE^EH8ORe z`^W>eviGmj89P?f7Bj!B15LX@}WzDP3m~xvOvh;@(~r&7ct?)q@xN{ z@{ydc$2aanrX5U6Tc?Y2<<1;NBCM11jM$Ty()l47{Ac=|G1#_ImC1! zMbZC%5haJJhk%kB7iWLF)*hOZs88~_0Q_B?n(=Wq_oK8sNOjdCPb%LvK>J@g@Rd2H zQ*74%QELMC_xt~st>cpK_CK1v?~wV~_`mC&@YGd39yBBz{nPeZLAy!aY|iL~;Wto( zc5v#$@6qjQI1A?1>6=~`kS2=y zI>uNsXQYpSb||_vP3?afV&ZM@n*Wn3PmA37uTB--W_mz?_PJ7)jYF<_{6)Lk(!T+I zZB?NpT#d%n)`ROi2}CGWG(C%1FO8-uzirN2RhT@=RW3SJ?jslAhQC0t>+)TAimJ!& z54q&#A>~o7KA3;0xRn6j+wXMBeH&+z_X++2;^onQ;4^*rAxT=kR6X9Ci~7Qh* zxed(g!4u|P%1w!ym;JVF=y~6}rl{5!V$c7D1H&0VWkJehOiHP~eArmaeO&tJEinD2_kGLX{dwOc3H`5I%8!+=zJCvsF0PY-VDQaFTwYz2 zw=M}Xhv{Bcv@5`wNh*ep^vj{13Jw?G6vlt&36oEx>hLtJ%zCRw|ryjdS%DrlL;8K-ZI*?_-Cn z*9(79S!04`dV5Zl5O$fYE=OUMJORGvLKXAYBM+;XzTszLlj;eOA95cnz&*S)FhHw1 zyd2eeU&MvC4lm#F!GQU>huDAOc$b~--!vMFP_C5n*9pn(K*s<{0$J%c)kkryh_e=(@$N6j&LjyVUD$t(G3vcstern*n~xICi>Y5*9&#(|ev}1w`27up_EBY0W9@FeDoXljF@1$L8s7#0COYgIku9=hv7zhzi}AtC8e$A4-xFizi@waCqC~jr=bE># zzdpK^9=Ift`vpD$RF@Lyxq!M@Q%!MM(|q{o$jnP@jqlpv`>}kOA-{igA=rGIv5TqKI5pO_3(z}TLbgH!pI8LgoXVO zogNHnq@8b8>)WWav0|p43T(@sAcK|r6=cDf=BTs+qPPsT-b%PRiHq?p)K>(A%HO?g zK_4Ps!;EVzk?&l6t2=*K5hAzLdSggvVO*7E>k`Lee3G16Rj|vnWbF$y=G?F(0Z38g z<0Hm)3Ry$qe8NRR-7|bImgcf^Sh9#suLTL9Dk=z#F|$c=4vn&qST$vSt}LiuBZQoQ zIEI9G%ojiD(63+xO+@~bo&ba65L~9ljU(Ra{mo-baNIW9^bvm>+emqx1zF_fLvr{+ zmwVaJ{Ad>a!)U0Ki@2g%RbXq{!sO}>FJK?%L@z~PFs9Yw@w@hZxPWiN0zSCbf%A_G z0V@ZYn8yJ-Cv?-0a{M*-T$h=E42Vuy7wvV-*4) z;A1FYiRq)~8k;#+l2~cC&oLfkk83y6rL@I2@9E zKemG2M=~k?<~XFM;`zXN@)o6hXqer%)X(#C13GZygSda?QLRD#ziE4!M!ehfe~Elz zxIf2AO>+_Lz3S0F>d{Ueg8#x?rCSnA;Ob7Tb9`VmH3=o{h0QE=q-kGmEINfjRJd>d zm36I3aC_$_^M5<@r!csh(p|iGw*a6nh5wDGds+0y&9-2`ZBxgGC1w!b2=AuOgnu;Y zeJ~!ZbX9+odToQOekf#+8qjlC>#F33598yB_>!->7 z45XwE=0UYA<*u0H<4=m|_TV*iXlk^TLwZawUV4gG!p9A?9%0Q>)g0z67lHpy=?e!^SvbDPEY+)_DnZrRK;elQec z^FvvP!XK1$`f-LuS1%7G)lfsET5~;CvnNef3%4ut?uWr=V%${gL#>d4r8<(Avg*08 zKg4@mRI8iRIZruiM)|k7rtA6WeWhR&#fLJaM|c)n{lZu(;*{O2a^USC_{7=MxA&tH zRTF=d4-|P$=9uI7I$|!Il?xUCtfl%LwR@BbBPaRIqx#cr3ek611ZyC}C{ht^52s`_ z^1ce~U?|U72_#idVe%6i+9;V^AS-+-0%^}Ex61+6b|wcxm8Da`$SFOEe?m^1g2G@@ zX(6LB4t6JmOqmbr`aunIe^=K&G+m<|q(FbC!+{nYo?wLdJHgY52L|wpSYWgPN3A5R z>ABKrBJ0vZ)7PW$a4Re>wFkK3-mDEg)C|_f^?Zvkd7t4}ZPx>anLavL81o>=>3Urn z3HFLODHIuZuzIWpM;jbQY6*hwkMlS>Te#Iq~P=fm$1@%(=l z{UF4gDhb&p*p#5!mG}`el3aG>E+11TN^C%&0ULdaS~h(5SL+!|K{~v}7&zhQNr2_h z)U0Y4J*u<^<9VsSC%c!4z20v+#0Y2Hco+g0O0U9WYO6rD?VVG`ddJ5qm?!J(K2BIL zg&1N@5u!y11cr?I8}Fp$UbCKycK&~D%lj=vl<7529n9UFRtQLAud6%8$aiS;6LATq zD$G)7LRhI@PTUrR=et3Wf`P*+d9yQy)xKCv74A+jK3El*rag)!t#m}Qu8WnjKHAdS z0!9#9KUF;ng!S6t?65O7zGQ37TvlgA;BZ&lnDsH7au9je=A&qN5lwfS+M!5Gdv3_Ytg*RMV^0iK_NseB*FO7N@4SNs*<8K_A|$*UXsx(P23R$-1hzi z`u2uM??ZP-x-Kki^UupTC&KY!uo98Z?1Z2?iGh`bkPxrS@2)dOlB=+i*^Wq&RBe*1 z-obq`FBPWu2!7TdA)a(`PPtuEn$S7tPL-%BPKH`S4A7+F;+X!sgvEcYc;gHF#NExA zR6x_}7qB6;=?!%PIq@YI%A5CKEXcr@z?fs`VQx&k-sKUo0^)hgOHp~!UUk$mK%Q9|w*kpiUM@bv) zIgU_H=D=@q85bQFR4=PiD2%monvm5Ab#Y<5jcf=hJ)@;6_*LBCRRbhkU*3{x_5qE~ zJ{o6aIF!&F70gV+DM#HtDlBAvS&=Y2W@ zxz9~~wdm4{R&Iajt*-X7nj+6-pj6hrdxYG9Msm%j?v)TXdl78d5>G$mXo{=d*HRSp z(Q$kFwMHF0QBcTbXFBe;hZG2Kk;Cw;iL#Vu6?KaIaSfky=9!i(CSj#&2h6ibXPB^P z%7vrOx0q8MB?-X9jcqcqP%x4t7;Q;H^c2ZpXSGnIA&P%nz%wwzTg3N9_|snYakmD$ zgB`(*p(YJTa%h*FDVhC2P7G8!edfUT?uMFoTSjnOY>8i!|GI^sCChd|>EKfSY8dV; z;sr4*sZ~VI6wy|VhCy*_vq@3zbK(N#6gl>>$o z;%~Ez^KYVPf2=(H{^6JTs<$%%zqZM)z1hvPcS@D1TOdO%BrXMO zAjy9p4g2qLY37*m1b(f8kN3waCik`(pyy{;ol0yPe{oSjAvide zehptkY}wA}0wKHrE2@3A5{*u6R{%#V?*xB`+CJA4#PF_iIJSo4I7Q3Y?>sFQG=}V( zSQR-hZ$mtdU#n)~X?s}Ec&88pCy>9$5kN#gmjY{0A}6sAFc%d?9zoS7_Iac6?i469 zF|e<=;V~)QN>Kp`W;Pcf0zLue*H~0N<_vP4z#38F~aw4bPs?dEI~1 z6Gn-1QX#2KfG%iAO~v^6nO4%R*J)>->75s@)P#nYWf6*Qi~wkO5u!lsfZsCoNwSsU z)$od|8fF@s{l<(*r6l=2>h}U+;C=4H7Ha!?yj(QrenSIK*(WL4iioK zJjm+>n@;lL9`&#grd*)%FkpY=_8}y*MekRpxG}RNW>~lLx7hsga^zCn)qE2eXFZa0 z(QIcMOc!V*Lf#B1i4Cl$U)*$#BR7CH!-Gi6=^r%unww`4SNBYztB?@3C9a2b4pd3AFMeB;J{uYy)`A0y{d(iHL#@`kl}(8N=R zLd;QgBI&owx+v@1uaIoiWSND3UiEsw@>8WO#4Kv{xyd_M!g@?ODJwSpb5HOJCiEk9 z`&Ap~tCiU_z$I{lxg~!bOJ2n~3Ow;XwVRW?+t0k_Gws&}f*br`7+Lz@7{(C0@MDYF zn-uHJ;PoF2N7k;qf{%N}-sCy90>D!M`tt6K#+bg?_ol-DChx6y)QckKOZcsSpjPc& z%Z5&Wt~TNnr?ZrJ`a6jhdGIa~@rP1T*$~wx+-v}R!nuxzs^foe#1<7(H*v$og{#(# zU8iuh&TVMpn>e8exc}~q3uuVO>K6ujq>Drm8ssgZ1Wb%SGR!Cp)uUfGmH%46Ud0Iv zouP-%Q;Ab&C)skklgk!CgfgDgzE$MV&fK#Ea*B2wca^niKez}k!+$r*8BY`ml5WI+ zvX4ecEQrCSgX@2EZD%q*f+VW_`1W@QbHlW5!^xxW1`1FLQ6=VA=+;q|O0zcOwXKVQ zEUiaWx_SZV6hfy@*&uw~@Ij z+ZE`V-&pAg#VXR6XJW{Uyz8+j=*Z-6PL$h>h>D*Moicv~PS>uQiYP*BK8lCV3HnM$ z2vezqT#r`KLUsj^DgsHGinOJ4;_15&dG<1o_#y_EBqi6<)BrYb`p+Oy#uzI?M`UE!vl>5ic@>2<|Jx3!#tzz&Dhray3sQs+c&nTwyFA23J9HTXi8|RDM{wmXIz4d?%6WTiz!eCiY{=pUC;r zV6YYVM~<6*+-#RHSKl+$u#>}!Dz8{7%n1S$fZu3(_Wi|(Zplj0Oa=$ysT1LbhRYLx*f43ZCj>Ewuql%Rm##*j8lKE&99z2V;Evb! z_;i0E?0X|BzmZB2;Dh;!pc4Q4Xar#-w{p@Wim*S2^=z5VXZ0O)l6>NWHqD(r!RPn0 z3>Uv>Mno?4i6VRCgQf)8k9E8TDnzhVpl;`1Y<5GZ<@qFtl@bo~ zns}%cM3k5}$t-d;Am*|ULqsSQ^E|}jKuCWnl_(`Ae6-}BODVSCvXgy-9c4Anj3OAK z-b4Tk6w4D(!IxO8d<<(S?!=A9AA1rdJv1ms_x)5xJkTZpP#_1@z<{s}aIyEg>MwCL zDqjXddBkHZ@g=yjY|cjnTKJg8%_8c!CNH{_wI^-z!M+2KboW_~YP4?;W*^6fg>HY4 z>~PL~@nJ=Unt%!a_Cv5OddC$1Vx21O&0wt@F^3HKM~)ejV+Aa9%Wp7Mu!wZQv?yM~ z*}wNQWNPjq6(5fMZc%0hJnTa@0b-`&y_M>e!5nUkV&6WN9=y2h9sswm(v_PzLA?h< zwQV_caPp^YU;DZlemNsKLLX*{rI3HHl+H)^xe_O1qa8r((?SOunU;gnxcpWtVZ!u_ntE}ZqE)4vHxsr%k~9`!_}%hC6r*KegtUW9DC%`&G+vNQ{-$|H`?jBBG*I ze$WITVYW0~H#QU*63OJ#-RFPf(_tCu#3rwf;!w`}0CoWr5%NQ?A(U>|5`o_=&JM|f z&cY*NaLSV)aml7e5|-yKna^yP{t^WK0GV>C1zSwXCTK-#j%N4mXspijltVsv0hNT- zNVd|SY0(7a#R3?=IkwIkzp3Hw;!|Bzr8!MwMFdI@M@5_cy@0Rj;5?5| z>F`U@@H-L4OtC&Q>=+}c^l>e2NRqjI`7vY=ex~u~FfdE(qo`28KY#wX zM`vNN6cQFUV-oLA_n0AQn;{|nFqe6=;fmG829EOQx`vE!l42gEnkf9N%^z`Eb2{oj zy3^Gd>NQi3zuW)JF>BQ312_7dY4*hLz05f`4};hg_G(#CEJ*|cmqg(Z>QV((fyb#i z0Uk*I+>S{G-qU|(WS%vts*p-Tc$7&~@-vM~qjMHY>7r=l9wu38ebM{GQQb$fGpX7) z?0e~0gWxtQ1)v3)Lm!TFO8SEUGt7%(Zydh z=S{pf6bzMT#5r`Zrjg({6z$qa=$Xxvn<8747yz8lvEt(q*nqtRxm`E$C#04vV}6Ho z(uCqAnNNTIsOm)LrIWfDQzR4a+rU3VV;hS0L}3fK^=s&+iE4;j4t<1!%lzlhpMas6 zp!egP*udLYmhClV{8ToKY`9*KE!@XHZeA}ad5kmh4D(fr%jN%#ZfU6jU6GgXRP#%4>=q^ zHZgAF$POKX8NKc!ab4YxR--Z3C)0>A6FC|K7^2Ien{^>wSxaNKY{(eHb{49Z!jY!U zvHk8Cg)XHQ1FQ-Wr8h&((Hoo@(M&ZB@vo$BTwm4iRyH--ds&J zBXWO7K)=epi`TW{U^B)z1>gGcQ7?Y=qjY%l$iU6BUZaPr3ouP*z+D+DFSP-`aCOFI zkT8G%IGcwgV;|1;Mz53^qSAXzP^eR2A7nn3Fbwoeirmqw)Z8mj+7mxgDsrtYmnW1K z#WR=Eu6F*VRV6=atZuLXu@To5QH4cJ(@uX$hsE6x1s)7eHZ0|;xfpvoIA@uxd@1Ln z4y;*Tni@c=e6|@5 zfvOA>(6GqiBDu zKihF%O{Mt~Kf9!*tU%>`ksJeC+l(J};ielh!BM#dgVprO!l^acIj;e6-;}wm*wFns z84i9GW#Jiz5U`;y$eE7kRrI+hKCE&y3^Oikhb}cwn$b%wlvD9OOtaCR#s!BtS!oC= z1hrLfQkIH1BO@+bi3+Z@3H=?09QA)_jG+%b%dukO=pD?#jj?x~#YF-mzdhPxk|P{t zh^6Ww`c3JTvv?2yHfz`HzJwwFjPVDpp{rT47Rs4KnrRv0$1Qv?96uBGbFyB|BpiMb z5V2;D$hEmmh0!vdTlSFtTOUYv%mpe`X@g6862v z`Trl0Gs>^b`S3HNB>(xdeb7dNMY~gPP7#qmhl=9BZP@g~YfI;rR_dl1vzr0;s%h!g za1YE(*$$E0FyurwLFHZl>F$5?sD+8WD^j2bJvPAvd-4VG=nnBBJo0&{7y(9{ZOH&% zOCDf6(K3o56!m}R4|>NY*sZL@kNn7wj4^)Bu26aCz(T#vqP0%~kTc&cq)_VXD*_k+u(G~SajBr`{KNKurbv&BC2b%|4w7vqx-3)e9D zL_9SPv9QPEGv~A&g%f}Znow+iR=3?x99KmI6z6aOVvN-R2vf25{QAaraROHP=%4wc z*5>Eu$GZJFa~ZpNj#PiG!jx2}LYLtc`Olv}(S$-M>tLKxprwM*z{lwb6VCVQo9NW` zS759rOIyLi6vS0#B^QyHp!a5F;SeKd+#}o??fQ#1BmD%>`DpAI_|Z~%4_r@yIcP@J z(E^!c3{X0e9Z(g1|IZ(rXc)|2)CY|Sln_mE>WP+IsSN+_pxP2;|ZwR^5;}2o1mG0k20}AKos**;=u*km3*gnhC&NMD?tOy6?=T!#Q2*SE#p3J7@DqV)=u&tFROHLNVV9^jg zH2$U(O);(_?TF&^J2$j%STExnbuyluO-nJ0Q(H#w$7X*U(vC2vD1a4FWWg$JPHlMwd)pf7}_~lecXTQRO@54Xsa(=V#^R>=M{q7<`$-6 z$-9WJ>Mcf_9`9WpWi95}CVvjntZ?aou6uQ&VKKwuLlI6VljR~IIJh$1^I}9PyDH?< zj7QzT)c-MJWUi#xez$CD0sl-A$8TSM)en%^W* zV&{K*azIILR@Q89LA}IO*Qn+it^}{wwovByMVZp&*swJ{#5+I8ECY|o;&quKHbg?{P-AFYf58v&mtj0NuG;rbG^C4|7%65LHOhtO5zn!qe;^7$OCS zkrrH2%&c$|B3EG?%32cE=)xdDPj4gJgfo^h&+MN8J|RhAYH5esV`)SgBZu&)y`ran8Bu zVT2LaE^r_y7V)Isd#*c`U}q;wgN=&^H(+sWRmahos?w&W+@mB)VsE2U`DRF-E12Fz zf+-p2R`e7jfFaTNi8sm^nAA0d(xxS$VCWVU1WlN8(tKhrZU=>m6qm%FmS2Btjhuw@ zMk6dWezhUD5S2mwNs{T7BvIx>yuSdegkoKOp@XOfTMp~LBTnN$H25dNK@<=|#|OMQ zqJ+nB;0UO(tvpfALvb_Uy>Ptbr_nn@1I>65Nz$6K+odSDf!5MEp8%GTMr8c7i)3A0 zXgXcL=y!am7N-{Q9aTVrT-ARF(=S$T)$+OJ@KW*5+;15;SOL1GU8Ws#f~mGCpdy5(mO+;sY!{k>wPT_5P#xTdnF5w6C?)6t4ayY3WrqCs;g!VGcQy+_S4JUtDD@VptsW=uS zJz;OI{@CK`FSpGk5Pj7z%Crtz@qU3^EZ>^@OyCSh&s?;8+zGKT)Bb-VW(CZOS~a?FZUsA&D?(n( z?gO_t#Drn$yA>Wh#od2gw8N#SdeJcY8LazD-PV5od-pPjjFtIRag1mzzJ}bsAAy>6 zWxc7}udsLHyat6e%}$N!7x`rkH;Jl13RG-$3R0YY!C{c~ES4v-U2Q{%0XxF3AU_6B zK9A;n_KdVoIR7~F`xGfm!)~fU``RXKRJwq6e@9@XU7_y{%$j&nJqOa{&uaq>K7dlGNS+n6Qdl=^X=wcY;tdrpY9?ReK7VWfrqniU8JA#7ytWT z2(Th4K>N!uufl(`nm5-Mc%XvpJ^kMkv3p%c`&>7c=$Bz%8n|WLR(`@o}ixBva$IM9g|t$_5o# z-!qOq6UB;Dh~)qu9=F+!eiw=F>bQ2p)aAhBX@e)QD++&NfBgZZ6IGDnoMGpfkBrJr zjsr;n@JL>bQ|EQEGKF)7ow#nJjAF>@*j`SamjGi6b9JfPeXo)UjJI@*9WZ+%Z{Q zL>GtPgfM^m!c*30$MeB^@~w>QTKs;#D}0>w3Y#0Hs4Js~dwPk?$B-gbj;k=_7`oFz zPK4(o+Bv61jsolJvd6Hq6fksLJ@yjVRc$K)_FiBNfLm))_&{}Lp|c5ONRKN;2(d*K zt5nXyYpW_9?rQRd`&BicW_={;BIp~(j-Q@_-c5hQFI7=~P{L86&~;jav5`R+s6aVw zGMyJw-yLZjO19T5>$c-u@zRLscdS$m~(G>d?^~KZmP8{U|FCpw;?_C5=bfq6% zQP|Lp_G))#ripro&Hhhc4D#lh+(e~121#)SyJ&XUz~pkFHG$9E=9SIIN0J?mTVM2Zm|!(gVMUaVy1-2t~ktI)l?|Iy;jnK|YIu zVT^}$)rR}p<4ZVd%tXpO<{{uz<8W~?UbKILtsqq=A1A04%2l3N`0xRnR|@N+H=}=K z#;`2hFotj*3ivz3$FDN2z6G=YSZMom#t_URNw=HdVjWcQSj3H{FeSZpBou9Em~-wL z|!&u2dSm^WS>@SQ;3uhvj$4z#9U3wI{$KRhH32g1ZX&-mHl9m~}xha3> zBqLoQH1w|wEN^H6zIk4pX5w4dNa2}*AMQ`-iuS`Ex0)exGZ2-r{?N{k;bdgyyzB!! z31l_4a3_Lsq-RaY2AgcwC?d|@4$kf8(`oExDe%OK>sNZ;`4Rnz2jWd-Oj+xJ-FmSn zU2*e48DnTwHSQ4y{L3I|XjP{t6>jI4rR9C9aeN3NdJcUH zE+WDMlyS%icGc3MLu-J)=6w<6$DkBtj&5l<%6PSx^4wtF z6bRp1%Wc#w5D3HN*lKR*4xU*lIRE>krf8bIJ0M?@ua~IL-NX#&S&m+vzPAh=Kq#u( z96UK>v*?yUcq8vF!5J-b0SEhJ|m~mL!_jo!H#-)wrPbM{z7> zj60Lw{^nK3{Ttjf3O5&<#yMT5m*0H3X>x2tU^_@sbrUkr4*cFLA9~Q3c z;Mq=x$J!*N1sgChud-POq%m=LPIvyLO9_&f&l}nfE5*e3C)?m-I4*yC;ECv|i=Mas za#oVL%2zpUqXmSWfe`ndh`{`?UUZKUfn%MxDbv!O^H}N66csJNJa--WhgA1M!EQ%I zMN9v;<3+%P4%B1n;$>qVR56rHCuZl2Rez3B=$Sglg&vF{t-+>BG}p0h?Z5(^A;98{ zkG&%~iq;$iGo2OoC9=d<5R)X$z#74p)8r6jUx^Z4OLzRHPj;Yd2fVK zO81^v#RE_WvgI-zRyky>iYKojgqrKVhK`{pTK-$yWc*h_^TuR&J&2ZvQl8s1f}QNR8pTfOn^LmY+$F zGc1{!BC>MN!EOgf(}bxroRae{AOhD2_9_@>q@ppy8S;t={IPVxYW?A?7alWK4J_JAX&{2`LK+Ddd46OUsI2aKN_MuBPLB| zRs0XK_6QtA-Kyd2)B){i2Y4>3K{O+i$U`NHHl7+J^mq&Q)30F}2IKFIu(&r)Qom&* zWFlosD8wO#o?JM63y{-qM16@kuRXgC%w)V&JtXtGU1EP%0r7EX`1sUVXO~yR>AwK4 zr;sC^R4ZKk@iODLoT3=TMbw9AG<1}5&%fCeD&zZ#Uayv~#pdSzXQmBdI8WKMM}&Gi zGT?%CX=HDZr&#%phI_jB=4%RyV7~3K;8V@lCisExy8J*TFlz2S~?kp;4+WO5yiI?t|T{^kKO4)rNmJWiMjz$dJyG z1j~QlB##M3SCL7!GHe`XbgaWn#y>!NcAdYDsC77&fg%EjKX)~M!{S9s?!}s{nk^Gv zSoF^c&s$XL-I$l!N3{!m4l}y^DpqcMw*0t#6m|-*FyVY>25osLx z{!E_DG?>WK@oqBm9~(G6uUuG7CnRY(<$KbkU7I!Bt@bli*~>t{Qx7mmBtmqP91P)hq(^+$FH=EA%;dJ1!2bN z?#H6rh;SAkE=A09oc2Y~9Yh7xjA@ns`zSh~{o4TX({Vc~A=gFXi36pbOcWH?#Zw z`6?-JWtVehca9F0l5`XIj8A{?q<#Jy=5>||IdfcDjHz%DJRqDa_;<~Ho@lGuApRLm zN7bkxJ#9;eS#k)Z5%QV@Y#kMt62t7{rpS;#8MF72(zRz<3()2tU9(LNqpj*SqWNiG zt3l&V=6^BEo??*enO=wUdBW>bCYKqbGT@8QvRB`v8c63Xo zYnxWnn4=|JrL%u)(+|IbLd@oyL6}|$!|V^OtgU<>e%W?Q?KgIy#l+>AJAd!u)L%9}{5L?~H^{h?sy(~=z@#Wv zJ?Nx=yMwAh%6Im7)AWCzDPw2xVu)uKai`+~dmiUYir1n1q!(Z4vjpRo7XGe{ugm2# zx|g{2x|8va!HZq5s^>Szr3!r8+J5Z&2|G+##}xMaIFJ(OL7yl5Pg=QDPpHIBv2yWu z``)C%_r=~Y`md&aR^DZ0rlY+!Cnxw0L3q_>O(2@Fv?CHa*wcUKv%2&Aa7>=!mn~TS z=k!yWD3s3glDX(aA1(j?q6Jp}AGBNa@(KmpyJ&SF=f6{b7Jk;>gnZfwhZ;oOPs2f2 z<+_m(w>yU3_0_eH#hU1hlb0ZAt)D1x##h$CFwKE)ks0s?voQAX?9Xlovt%2327=A zwm3%m{=9^>!(Wb&;h<$R?R^iaRqHIezKSeONZH+Le}L!eAqQSqj7qldEv`PG@in@| zvEfcumZlKX?1~VH!aGMAaRWyYpk|P)h)T!-aO!9eIpco}pQ4I6)h;L^7;4&^dZm&` z*SwY;1#EkUjW{d=ZOkvf4(aF3yLN9bmMDcf5x+OcRVDxSSu=Fth@3D7v_I zW`dIJ(Xogs*@GJX>Is|~#f*UpwrZD_ygrsNs<1zVp_Q18F_L9sFboptK8C)&vwFaQVLBG)M}b_q zp3ClgPO1Tq2Bh$+F-r8Z@6y!=8>`*I>Rf_MAK{i@!6u`LLsO>q(_n>Z)$L-Y#%y3m zUD1Dyd6Wp^?g2ir(=4xjaHJSmzc8 zlG6XiPELZ4sZ)a<+8w~**Su2n49@|MM96Z) z*CzR?Awbc;F8cW|TV5B{BgT+2bA4~YcaDEL1pJGZ%{Mi6zlDCWNZ2zzZB8BnXYg#) zKDF^&^}wfb3v@D}dT--NO{PE8vgfTje>zl^09O9j^@PBMb@g?{haHcpo``&DM|@i7NsL zXF9-)!IK}D8&T3WC5Ze7z!QJIrDDo;0_Ic0;|%!B%j6H=ch7jqF@XhwI&e zDJ?7_?5T{N|A-YLaJ5=UR3Tu~7HRiJQ!w13PLb+|8-Ls4=5x3!>f>}};T22a(8B@2 z%*C{SMPzMA1|R1QQNX09+OHk+vADl|c6XDZ72PV;@w1-VgbPbN`U0$)F5}NZEUfW? zhJH8xI0%oUmEJQ@_tr-E*#c2#B$IpKA$OQ4GnPo zQ|>v>C1YV+(v@}+qk4q}!)<>7zIikv<^r-w>}Qz(ML@d0>ZDD@jTQ4I&?7pCNH)aj zaX-IrJMM5PMA-8+u-C7@_79Pw(DMhK@AM>Ol@4am#qQ&ej6ZL0zNv8T9W=Xh5T1q* zqVLC+Nl1&EZKvITaVu;qw*>AUmR)u)G98pKwg%m@WD&td`SS-+oF~jwQqqRabd!p} zwbRO80$uGM0i?(qx#N)O;FrHT8OR9$pYn|vqhB`v6$&?&>f7wbF7w_X=0%^xN(?WN zRe?Ad*b4>T&|!#(z_s@6y*7n>#1G^!P?m9_0S_G#hEJb=3as;$FEL{iTLu~@sB;N8 z*9I_-LxAqjgEYEX;tiTW6+_wmpg@KlI{Cu@R#u3C+@C++yhgyeSvast)s7A?3?bIn z2#Pi(XxP6~CVsikRY2ZymY8>M*hXWs^<~H`1P9@HU+jau)#YYMw1ZK7HW3JxgvZ+k z+{L?O*Oc*p^Yc^IMS!GU2b!nO-c9$E*A$r)<|TAlD08TqJZ!_t@={8gdn6Dn1t#Y~ zgA-+``XD$6Q_fIUaFd2vJiKO;fwz$+g?X#eb#|OF1i=l-3874gt2d0Lm8F zG30D9xLhg_KD`(qv?DXk`HneVp%*K3K~dF;ol+YSkAT?pKZM@wZ-fd$+H9G5`7{o5 zlS*L(TCw@vrcg$nP7#3*LGBszgUo_4#13H_RwRC13+o6e=kX+X>w(w?QHPy@7~Y+p zxJPtlP&(jo$stS!iHAF~(#jKdb@>$wh>`ICY+AlUs^V^mN62Y*k`I zJ#wdOx*X%gS!ToxC?jbg+tX`3u-;sY2^3S-fU{_$AE%M#m3 zggUZ18~B_X)M5v3g4CQp&ZC-Ohf=ELBqoLXCxgy#m<4+VYD&WagnNO^^d_nHi$Kh{ zga8BVqxl^s5S1fl6hvZBl4C>CW<1GdN*zHyrIA%n(|W^#t2~>fPE6j|n{I0@m~26NPEN!%9BW)y*hL-bPwwAdoWw z?ITlWOXS?ReG3&NLs8K>1s@WfxNY$0yNmWB?LUssnpb2dSUie!JcJ+-_^}&*=%i_A zB}^dWjCp-OHtK0U(bYGluElo*?DDd#E=s(U+kq@}p*g%n8k^;17D$=wZSSy5B3Y>A(|BOFY znp9o0>ZuV-2&iyNnTVqCXZ%rrv(*IvoLhXM(4s0WXJVg}j%BiB{((|&5L6FZ^v577 zWB#^A6tYg8qZIGvWCc&SB==&gFWqFIZOA4{7g8& z;!Diqw;(?$7^}{nM87=iu70u)_a{>tOLhd8{$f?K1*?SZDul-*HgVm54(v0F?DF`X z_I2j2!v16VPgPx=J3RK-(yAO2@?ZPlAu@k{YCC4uScob#A?%#~8^pBhVg9~m_Sv)K z&!2g29{1LV(Ge$Vsj_nYkw2BO6-g2cC^S{e(#8TFk^&PF?KhZLn&H3PZ6-)3yZwGP zXGWvB@H4mM5r%EI7GmIkUo?KmsYq)VNSV<AKmjv7UR8 zM>KlL8pN7l7Iu|?vGB~Z&JEc*aM3=T1Ls=C@yMUnb~n3C(mf%8cFCe8si!B!V&iM* zaDwb?nJY9H3}*+Nj{rVYQImzXji2=sJ-KG+Ih(IT>yV8Me!YK#a05N%I2>Kexf#Wk zAf}$tw`?l&-e4eLpK>~7ky9Mp69^2pbqRS?!d!trD(_x@WtFSrgapNagL4J0w-I3yux0<~Rth?D*O14KQ{J#xYxyjv9~^jNhr=TceNh%^a%8uxFr-rN z&lP$3tnA6PMb>FBpF=nuQbfGwBd}t7p2?iL=&+PF*#7R2;VtR_oR48odDg)u`kffS zxXuDRCmBR#Pf-5B>vLP>-C0BI)d6{^4wLMNBb)<&o#Z>-lIJ9@6aydCR8@X^>KPO; zDV1*d{jpAbc)Q%^v?SW5%ly)k(wQ~M3OPwU5uUCK-1nQ|_e6$?J5IVELTM%loqFyp zjGZ!ssH0)cMX8QPjeH;LPil?a!J2`f03M$Q7<&C%=*78to0aX*x zN$bIX^xk<5ji-)QPxitMw?;31s8LLd$!LHDoSXx_2P12U#9dJ0Ih?nkM%o+kIp&;G zLRQ?!B-%}?ccC!U`h(nOef;eBlY`VncNYIIbnRMFBuHts&T<07jn9&PjqEbTZ4+77_p3D%#aW1|8m+^M4!Y8Ft^3;ypbnQ5C7L_3@rOyU-|dPng&@ z^knvJS>oQUy%H-f8Hs4yMVe~-qk^5C?@ruIZJ505ee6%hSY z{QUgq=CrR?RSC;+f*)~N06EYB7skfvKW^~k%ObfwW^g2yp8J2}-+!mp3Q7H@$VFf3 zYT>>WeKoqcmO_<*P0@Yuo+TQG7lgSQ4;|%SQKpEiGK4*9hX&F@({(m=wQ-?;kLHLk zamZuEFY~Xr`#3%YgfL64j1VSdEXrRBC^0lp^U^b#=?YZh+tZ}Q@uD?69AIgR$65tY z(b~#6S{sxatG@=k+{8dyh(1Oh@#0SMS&#GSvxQ;!x-Jk&PZ9Sfm(A*FtPXXStAv|# zs)$wsJ&R*q)z6r1V4w;s$aIH)r^L3sUv+rW{ps(Yib**n$kY*MH}4s6tZR(gOZ5!e zz$$K*#upI@qY;8cW+o>tUE+pPT`ifj`6wOZkXv9#Flh|eGPy4NbYSPonAbeDM>tWmkaoZmUhfiKZa-|1bjLa(Om9!-`SOa&q9Q*w*@nk|9vz%MIq~7> z&J;bi=uPYuW-(zQZZ?QVEho`yS4Dq99wfb1+LSPT*VT0`((oi zsU7=dPulzBk(r-^PR+p3Q2exiSgF$O=4}7mv?Mu~u51V*VRzcHtV4q&1-8m0eDe6j z$t4lhFB!KUi*iu;gg)MX$8xIUEdZBe?GhR`CucP)Aw^06@k^BTl(iKabcdOL3bWMg zh%iIL8;2%Ea&}uSH&H$88R|75R*x9Y*ddrEVa%^d^B)IX_(wWR*x|!HwxBpKx!XO* zNe#W``fNwI3yscG$8#k!4GFALKWwJy%=w*!(Efpt$>Ol1DHYq5V%rXR6kg~;P!k_`9%A&| zq3Wp^YTyy|e3oi3nKweZ?7O znWEA8z))1ff=Tp$bovz`;^At7E>4)iw7CLKLe+oH#MrVrQM8oBgFvCm>o!uin}wqZ zYU-4bN8^x0$h_>sY9it9%Gk_>$Xv@zL7TLABzjUw4N?WftaW&9&kl4ydHIE`F0R@joo*_&asBB6QoX$4 z%g5Ezd7&y^d4N+yJ>6sviDH(G0`|x0#|a!G8bu1>YAf{H>1WmAPBO#HbRnPf)yOSr z=t1CMvH)m*PcMI2qjl0*?19tidP4A)>P&tNLS4hRiiK;+8g6(<9Yh=>sDRdf@O<*2 zGVnH>-re=|VJ|)$VTiIi3JeoYd+7A#p#*%`uV9lo-OX?~&YDfC9V7{(t36f5dA#Kh zFeR17>CcN*ek#qr2J5HG5Em8r9X=kb#ApzVm=rvJF$+^7p-*F8V?1(_`LeSZcUWe+ zI3G0#N9v68)oaL@&FP&B-7WqUEA}Cl6Qpcl0W{pcx z(?3F1qJ(la9JXdzob+Rqb~vTEf>8ejV;mA9a*|+pRMk62cL363LbLxFa@=9W+&ayS zTWn2#oZ03xW!(|uh6l4ny)s(BYZ0VJcrC$Zpz{KvIfh%=37BVpeNB=x%%))c7p=1I zxjaP17M1D#z)Lkt$kwu@3y;$2MsSDcQ^Nd27AN#$n+$1|9W0)UybwhoA8Hv&3r|)N z;h9*cBh*}kSk4*g!YFyeLdy1Do(WM*lFQD2w>Eq-K=YhZ_5y>LiHoQvWsmb7Cq!#r z%~&nn3a;a-eTc?1a83vAhbWB_Wgk-{P4&0g>Ng_Ih!F?t?`!^$r{XPGhN|pQnFqX& z)?4BtPFb-;fKs-=vQJ8Kb$@0jgAh(Oc$^c?lpVd*l!F!#=dKR zh11pMBcRR_xOI*`^h;uj1rS9i^e zGT`5UN#hyfjkL!gpDIYM4i<%MK)D>{3k{h>M0oA!?3 znGplly@a6ANC0q0j$yu_`frwDH@H8%=gkq=OZe)iZ~#IO$f&cW4ErL>n@g5PwNYU< zQ-f#%hG?=8BQ)2KmB6a=$WM}S>l4o}_`njtKu{V@A~!6tQ4iq~aLSkgY1oVO-0M`mA*?ycKhlI`|f~U0|G`=5r0`6I< zxhevcZS7et+@1xe4gelrw^1G=&#|c&t=uyv$zF-_SQX%gd|Rm?7-0p)KlM}C$6FYk z>jDGzKS|Coy0KT_fF=129UY~}hnoj6FMa_}tx_j|yE7PTkw{~l9gPxyCB+@A6W*z4 z8kkj;qx>kWCS+n3vir)>nMq}mW0K6~d5|4+gIip(LOs>Hg)m})a0EsG1%EN|HV9dQ z6KFL^ZHupEo%VMem8^s_@6OqxY=k9{RqY}&UEXBa>atcSAer>S(rYz# z+$oSB=5wf%M}Dr2PodF&B+!p4&G1hx`>e_%Sciu*yOk69+#36T93+h-9l|1cjY3e` zBum5=hU^`ns4WWcv-7I<9Z6loN3Ho~$w;V^uW78K0zkw#loHk(G+g8st16Xp;*e@> z5>}wq}XHW}QuT zFq6H0PXMbS|A^QcyyKc{LQb{D`pcYI*M|FZB4NQFZ{2DPolm}cwxLUSl=?) zrKoHwCYYy?FL@e&qKPqEU}U8Ekd|U0wpD5^mk!5jBCY4Cjr&`_E}qB1jUL)fP6B`4 zraLvDn#8zrN82XWxUhKl`+JOENg~W-RMjjKaIFca1ZCF5LpA1FjjA7RbR9!XJkCd0Z|rdRpMK`U%`o#oiqbW}g|09=DuU;snHQE&4gY8& zVl3;{thuUx7DbH~U_>^XNJ2<4z@eI%)X6MYWR#HLYHp6;7j69fOi=a`P`P1M<3V?5$qrRR1B;4K3I{nR z7JUpwwVd%{)ycwK%ibACAGMRy5Y3l**xI3u2=oRY>3ZINEtzcrabgXWvM8iX(|_}8RF<@8 z`RqgRK-g8%0@csAB7O`2!dD#l%d)M`)Nd~S9C%O&fL70lMziZcgs3Qak$+i_|qr4@(Zaf--) zDf&6yAf%pW-d|KCFC}<-XpycvBpCXbTbd#GZM#RDqXD-ma(w1Vale4%0`8^ff|?!$ zM&oo}N2ziC5TaSF+7ZJ04pv8dVO`yGuqAVk&LVlN#R2pLXOVvQ(SI`}7y%+L$xnh)3R-BxD~*QH@4&OOplU*sv=bpp&H z1jLO(iy{p6%`*8kX8&bcA4t~H%>J^;jK4%-YTHEhPSslW2YLu9D?DrZDEaAg}2v!F51I|})8T@GamSf+}jJI;N8TYg&r z$Ax>eo^}nhP}{J86EPhnN(f4SlVs!M**WJJQZ&$VdYyyw*NscaHepJTSb{w$NVog3G%QT#6t$Ikm%dCg#1H4FGD(QG zdtM0fgBi~Bj@}IR#Gfz%M4v2=Em^@m;$`!-Mt{@8gxRb3wW=3HNt)+>SLmp|XEhO0 zEvmG$EUH?ycg35^Gk!`rWde=SHahFoUprF zg6k^0n9dm{cGqAV_w^=8#(wFdfQT4~ZqYxtLuw%Q#?^p)1Xr5Q(9zvDqc?dyi$nsW z5`Zn?C39x-_GMu3-nfK+Pf3~)4VqrKeVR9X@{s6mlIf;V&{WLU(m);v0i*WbfcCuJ zZB?57F~lDy`FILbg5Zr&q7m$yPrEcmF(K5{Hw*UGQtV%Lh8g)nbRi>uv7X*;>W zBzx?d zy`jf$*E3B`Q-ooj*K|T{i1BltYnl3E^=(89u;&xU&CfiRRu%OjzxXyO=6!5ym{8P^^1LOdq1l}b7i z1RT{)XJW6ZQ8o2PK33k{kcZGyqTm>+C^-TDfU|ANo&Tu`O2a+rBbEb7tMxZO+;d%A zmB3@>qD`QGzydxn#D@MBPp7sg2J0ArR*Tq^*{pR=|DuPCeFSaTt(J(gqK_HgcIu{s7671|l69k5i{w8?myVJ0EZ~_-5_2vF$1cDa@gS zh=^3DIl`!X1fZ+ErK(<3=2nPSRkGY#d1i7Jq#kX=V9YVnsZT>-xXzY_h1dXj`#qS? z3;N!w$Y~cib5=yJC*GX0-rYRG_Gy&uGq6y9Hah39rgm6BF0!WpZvqnOzLkk6ZQs3p`L^~9~z2ZcUOYU2)uCMyJhQ_wPqCB`TaNVAaR^4 zG4}H|Sm|^)B7l2z-q`^yYsYYcYzyuZ(ohZQ>oM(=7$~LFjklT($dRoX~6V!nN3hYC3&%uTg z4$hJMWY?UdSt%HZN6yE~qAIxyli+e;<_~kn^8R4d2Um4`WwTg5yVwV(IswBL%E2yX zx>#Vn=nRw<0;UZ2RRMO1h{3<&IPjQ%3ynSdbf%A1xW;Iz9vu3Di8;j>iK-K>P#L3^ z6N5dX87CO_ap~1Z(1%}(t-0#KAy*MBTguhrn9@W2z`+HV(rr_7PFBsIy_Ds1Hsql3 z(#A!9p<{87MERpP`d_A-?s~cwvFxy17v>wjhFM%%d2RIXna1bofMn%pX^+ z%)?$+y<#9q6ZBVIzGfW}kaz!K%3@bjbL?S#T=*WQIA*rCqxsT5 zHSeos*71Eza`Wqn4@o?M-K}39MR_^+K>Is~REhc;fZ}Y5&D9^38=m_vi_Z07KqKu1m9r#0jp9lq=uX9* z*d-w$%)mJxG>gt2>m5&iXU>QEN-I(+W{%Z=A^##I4;hlp8hH&? zU|@5e!u7H#T1 z6-<_>dP`KUa)bEX|K4+|@hThTRNhM1Q52NE2mAI{>0ip1B3&A))RT0E1q1V;OE*r$ zX4aTsRRiqpm}6|SliYwvlNPD|+we)Q!v;<=YLc!=s$-@3j7Jhd)4GfdnsKKF@y1k){a#hEa#rQ!wL4#F#+F zK5aDmo_>LQD^Ua>HrVa(d!bF~tQzW$zhRGE@y*Hc1>4PaW>)fri)D^m&D{Y>9oKI2 zo?z7y$ltVoYt>^;Pia+Nr@%oaq!H%bgP*PS`F;X&tG{>cHFKd;j2t@}E;V45o+AW* ziUiYLA)XY%7ZV%3GdzS5hBR$R3>3XQV{S>qkN!wnDib=G6i&b$DjElmbHV9RrOOn} zgl)8H9OU`?>iY2`szzpDNb8#VJJ;M^&+Kx|3OMw4H zvercPyCU=NzyI2Yy5{8a2jxhv-lckQn9o6;uGZo-d~I!Eaa1pg>I_Qv*xwK&X`v)Z zLb-?-%Bgw`K0IW(R+Pe`S8aTA#mmxE%CU`0tS`!`$CD}}wM#|H>PSEt}q`A7}MEF!D1#HA)iS*aaGM2D`tQg5Mupbg(zDFJXsg=py9V%=I;W(q)$~)6l zFb`2Z%ngcXrp|M7$;z%MQE~Qx-EiEOuJ&UqfE3p}e-jsCW)jgr2?^T;FdeC3hbanK zstijaXxO?y)RR*(+`}30`WQD|V=?*$IY!lgLQIxwu&ml6985#+TsdtvS2Y z*UPBS%2SW_yw5N&D2GT`bmZ z-#kUE0bV9|yzH?s(8qBKse7fkFw14}jG(szsX>+_j3dim*nwr)Yd_?!L&y~qb-f&Z zu9+^-4P3qtRlV9SbdeI#YSD2mLLWdwW2~sJC z@%NYfs3tnUD1)D+Uz_1&6~vx@dau$}^cp%+pOyknAT=z-TKmr>N{^g;+70kpvp%n2 z`DF@)5a-=jNwhvD3wG3^qWFVMDGtX?WjGCbU5AN_n#3%QsY;w-tX4f7ssr>gi*v4e z82Xn(E8RA7!hdgHJM3B~@u_{;k`jmx0}NMd2%A0lc&4mLn@<>2Qv#EJ>DZP8m1zr! z{JdTcf`;DU?iAFATi+7(RQ13|({t0!g*YrYA?m|{0r@M2XwW_ceh>XI8;NMRk(1wk zZ%z(BtZc!Yvs>nw?4^B(7qr2YwM$pM9Y^cKJZis+*;qVuXCLIaD*AY{0flie;@4ww z>(ZikVhQrVUB6U43USi`HS^8L|n|TgK{Q%f&&NIK(GBF|(+Q{ir&Blv~!xJX!tKMXk28 z)U%!L*3$Z=Wa*>|jHh{1k&i+PbWANydlZWZo0;R}PomVrjBMmPemohZU-n4P$r|_cSdZKFYzFtbhL=vsa zOz*G=PhlqbVy+r?7|XX8Iwx{iADpx&KTAa_)ea|?%&K&|pl+y74&fPYScRicnV`@D ze*$Mhw?H^S6}k=Rjikgf1~X030BWo@+$?&_b9K`oC=X|U4Dk`-&(@t^V8I#Clx49b zC7VJQBJi(m9&XeYK8Rpm(BO~w`8ZWrG^g0l$lOBgheq6b`$Ia6F&dGeK*X6Riiy)5 z$gAf#r*oZh4G~A$z8SP5WC%Ky{++H5uHLvJ+zy#xy0i)J5r;GtwZ0&Pp<&XSWAdy2_zL zh%WM^bPaTqwV5JfVl+fotw4Cv+9q_DBCoSKB18UEpstGdq?t{hIro38Cl*1ZScwqG zRxNC~Ot%Ff{?oifMx&c3qVZ_BQn%$%f@;M+1w(>tEDh-maZ}16x(afMJ@txCP_~ge zWSc>MhdaE;m*v7Kr1$2wQ>Zxjo6hb2WLF>>AgEjJDp38q)pS!l8p*C3Xk9m+V(>Ea>iGKO-_^V`-Z&p0 zW!uTXk;_N?+0c8d1p6wD=sxG35v@(~F9}J1v8g{rx7|h%?%}vQ)ylLjlJ;w~ZS>hdziv^rIA>LzOve-SfG zechmn9rnqsi5*13GBV$)u^bPY%l8_L&QAgI}BBXBvzCSPx&9S=Bvqr_XhjQ-BM0FwE77n{M0KjJng z-Qfeij?>ErrVfT1EM7LBB2OM$P7$Yo35|y~_J8>d{GL~$;nlqNbeZt5$`1j^3xZ9b zDRh!@#2BuQz`TYCgUNUvw|v^Pi=wE1EUNaH7l*y_y6K3cnGTr?7HpeD;hPx9+e+~{ zikm21!<$8Dgfn!}FPfWf{4RW2(WU*W%Wc@b6e7A&;Sz8sjqzZuo$s2h=P36NL)HB3 z30S2kK?=8ryE8;m%^1qt&B=~Ud47MBO1T!ufg;l3At$__BR~fMLgq@6!-mj*IIJrl zjwsF7P=4lvJjlfZvpF(j=D@2>wJ1BG^)ys85_edXKbz#O0#XfsQL8278idUp2Y+wF zAFx6^J7yvk4`%sVx~45wvO;;AX6fFYm*qb%O1wjB@I-!}W?#7Ji zXsQtiJDVDI>aMXn>f#mWzCBfcn3{sFq3^Bm_bvTsrhqZ}_Xq|+cJmG!83l^nXEJ- zF9B5$I%K!t?3Ne=U&D5%ZHp_oNl@XyuObRc9lZMkSE(QVHN+RQbz=^e>k#!JU zJovAC6eXiAjhsw(SYtSK@Zo{Ym|-06=BE=U$quHdgGQNmbdj5`L(QDK5b6*$8HW#r z6j+DCr6BNRSWZ7+%iJ)i`f*+1x7cOfV#8?&AjH8zTYcmueci(bDKo%APGU3=ex8&w;jN8u(is8$kWPbZ>>N1DvY7?lL08q$bm1Re-~IduM^!!nc?;n3qg zO)@s?+JE18Er7a1**2+yM5WK}7See?L@-$-MB9kbaC{!No8BCc;lS5gyAbkTs?@uD zIQ>U``dqBB{$}7oy=w@ue%ZGH|4O<}SOuOxZVDN0H}cC-?T8RBT41~%f11s~EJL4c z%@fXX?Q~!c=u#qoaYqlJLN zZ#plWL(N}?0&C1zem^0S<>F?-^s23TRQJz(-c)hJqLCIsU=qO_V*uMv_eXBcjfr9U zW-hSXWofp1wJ64bAhS}0@w(z+;7cv6@E4z2xAAx^ObGISFngbq2$I7M_9VE$X`%_d zX0jekL0J+lq7JF~Ja)wCG7ZFl3K-1|cvP@9S20cP!m85)$`Ixyin=2;T?uw4HcKrD z>;$dZKhGI~uH=hqEF*%|2Wo5Rz!JJ+pO>zE0U|xgAlDeH<*NH5bFrKtU7QbN46JKR zcg$pbVOQCIz{uQ<>RZ&*?tjpe)G@m7&%#}A(u$nO1*OZdJ3VtTXN+J!MTg_n8EN-u z7-@7}+`aah(fQ&NPqmB-=I;*rt?gLiE@i3H0~#?#t)uZ^mY+QMHI7Qhe>NuBEJgsS zyk(>BxV^~g-*5N2y!hXL|E1NkP(7+jhPl7>@G&KSeAm}?b6Dx5BGOk|R`OO<`ZokD zk=jHtIMBjm&Wg07+xGD^e&=3xT;J1!TCQos4cifQ0QeiIKcm#Gg+l((YIg1GA z#=K%kC&2}(bX$qGTo2X~GTCB1I9p{J<=(%(#QNX%c_>P>h>!!^!Cqt&n2adm6lr4D z=ZMOGdFW-?VKM~hCL#DJUduvv2@Vu)l44JZG9b*aJ z-_;DR8nxBSUaWTvHY9;kV&;@FxPju$Ge2-9ZyTzD;1VOxt15ezTj2X#=5;C#K$UIf z`LZIV&h`Z%kS%Fv=;8e+C%!W+g&fVb|Kn|cx0eRoI@QT3oP{EhdV+Ir1~Y-`E(uq? za|92xmMJggfjHvSRx)sqjHh(t5!XLCOY-8d3?X#j#aU#@nQANGIhum;vEmWOkPwm=pv@nJP9QR_>iPM|`XCi3h_+qOPeLcxg8 z!#H_Cb2bQ6Oh4Y+GVSM$q=*WaLLjz60$0~VMI&$k^x55q;jj<91V#==xvdtuF3jZ_ z=0TDB-_ejH3f`sWhMV*I`tWZoQ4QpOAH66;@gWN2aFXHKVx^*`h&40jh|am`rTDlf zMNgN^^oSnEiQ$?7aYdhbB%+`_%xanh~9$wlGunh5kiE)_6 zivpNCAzOLne31RhfsaR);7cf65y97?=#YM;?!ofV269En;Z|7D! z7<4J;3{NT(Q=wAaMO#GspcrU@AhfYPS$5tYMUSmdNaTe09MQ;=Z+1WuV{?2a;>|2h z$fWVy25%^CS1D9IcIb0<%<=|Quy28-k91|u42NwTe8TG$q3Y;K3xSn?3eOY)TT*h3 zun&%IsE?~&_`rJxsh&iUvthv^LbR58Kl~(CW{wSVk`@>JW)K3bYwO@_4MX4T;;%U& zho!^4fxVv1!MS{VtsVF_P2p+Q9%(St8Di|jpcKNo&XEND0)=tNxli8q%qb`#coLt_in|=dRs;%z=GegfL z(68w?hnA2>OwQ+7pAFf13e5bFv{&NVZ=^8TaVZlhXHQX{zwTGmnr@Ii`F#6S#Z??* zl{r|w$}XAUH!2WA(b_yQAH#; zno7cLmbwv(C#B37v}s}>#p~rA{?h@}vu{~GGd@yz#E89@DBqZ^;KdaDi`*hOv*)m2XH5glFho&2 z-pw!xY(q+k89yIlXPg@y-~i5mvqCHo1)9CT_(Z4adsY162K7Xvt_=5DXK~PB)Df6? zav>H(Y9pC3zs3d)`FbCXv)k)dl@ACTjgjFR+2XE$$?=9-PbQ9(7+dxA&lG{{lx$J6 z{Y>ePA%_c1qHzeKa91nX1VhQB;qc?OQkADRi07s|xk`hw%ULrbzfI4+=avJ{YywUQ*3Hlt*AU>t8o!K>(R>T??nMJGAXivgF zTY8g!&Qx?7iW5ILEv9aAHYYgdoCq=?Fveky9k9f)1Ry_hvnB!5o$vF2L0D140oIJ8 zf@vcDE8rNTwA_pcH#^`wvGc^0qMqZi{6R>bB_VFQ3;26`sY7>E_7ka=BxZX&>&q|?x8A_{`D;)t<9h=kXm|COcyC)3!6AMEU z?unyI;3VB2WRNFe!{yf1>CGZuqj+>u$DTMiH@yQu1tuv`)DOf4{w+r502nDX^u6?Nc59$*k6$xZ>=h`k&F9&#k z7j9R0c{?u3rt1=Hf=^v3D0uAdz#z30Zn2V6Y%+@CJtoLbNu{FLzt*-!c3Eh_{6QEqKoN0 zOgjel)PHyK99`85_vs{JgBzxUC=Jq6b7u=b}rv4i4_tC?Nnu-My58TD2p4g&_k*mK=C8FAk z$Sqolq%2RU63%SfdbUGq!7voICUDuA?}u++S1ncwk{QYE6A9IjYg5Z_3gxXUpA^C> zXH`ZVF`rHwj2NppRG527BLjiB*fK2f z9Lp6?h(}_f&AWIF9-PX{RbPgluQ~FP zOC*M#yRT(0^C*)e)Klda;dl`t{_&~v(A4j86Iga;ZD(iruL$z2xS*Y*-i!c8VyKV z_l#jBkQ}&LBz#&)DNtS20iSG}kf2im*}oLhbbsz`;$_?`u;k_`8?;4 z5y({Jg~_LXw=kXb0wH-RALKr@DxyGy-}55+(RX#R+7+@}xV#XPcXmV#Cm|wGHz{!} z!{}w%4*V3b{;om1(Jf(C=+Y#^b8ok=8A36!O~>}wu~QyB4DqRA%fs;o1{Mp9^|cfY zx8*448SO}2VyR}!*)GwTa~p8t_W4rT-M0`3Sa*AW>0X9>hHR3~KQhNkdnB`NZrZg5 zo$GEMJ=W86wTT?c`;OA!o#i;e7|n0 zdw{!k(SF4cZ^kn|Wu#Z5hQCMQ;_5N>s^ahz>XVxZD+jY~v2HG45JIwW`iC6B2G(I} zH?PlsK}I?+roCv%V=-zy9pPNtV6y=CrvD1t1<#`WGxrO+x8c5Iec7>@B{}59cg4Fh zgOBEwwneS~L4&zs=>Y+rj?5Ibx(xZp(dZn53=IcHYeq|qAf5p@1KVn5H}f(1Y{ z8^6}`PT;a}cVg_eI57Irh1nx)>U^##_>mER@d?qeUeEOX3vzy8x*^uHQRBiQ5Js6` z__>k-hk*E6>rD_NeiovJBwX5epCF9EK8}tG{aR@tsvv<;$J7&{Ro34bEHw8v8Ne*a z2MklJmfFc2)LmsD)=i2KnGUIH{}}=S7#1b_#U$`!9-+u=&wLvE_L@@vbt*EQrt1lR z3lkO+(jJMr<(`2>%O~Bo-JDU%v9Fam;72!b7B#meR{6BQ2Ks3basNlT!=_Nk7RrN~ ziD7XgDAoQNze`SIB@u0Mzq}AoMUva`SnIh$;paL_vY+aZN{d=y;AF|TF=k^%Ft@QI zfnp+)P$wY1tB!^`nWs{%D0-7Vk(??eDO&Fz-!6bf}p=KLKJ3k;@-C?dhQV6A-5Qnqm4c;s4Ve=5!7D$7fMwpuCi zKg^!mL8n>h*sC**15lXdGMv<3HwpWpI-66$2H zS8s!v6SpwHI`G}o5Y@Cg8VXM#!jvRS)lLTWL*riJ=G?lwa)B8<2xDg8Fm^ zSSiz1J){BdTLVi{XMKT|Dr#)Vv_nLFEHa`@>jGIRPV@;;B!U&b-$d5vdzFTVGZ)TYjXr%V()M&K~s^3w{y_Pmrq-m2sZ$uw!iN&PaRGnm4@YOiGa zdFhN4ld6poJs34CFKO7{RC$9haSmWQj>SpyUF9f{5WB&r6?rJv-4@&qp(YvHFl24# zLd*+BO8`|ss=tfHCq)beQ~Fhxf43zK8iWz|Y$KuQgwd zRfY*8J2khBgivBYdz+mPN)-E1-rqJ53ezkp=2>Xtae?Rv^9eB5+ z3sco2xNNR0RQAr8gaBV}Cwp#xGMVV<6WZyQ$ebe#V2;#6+;t)E*b}`d~T?5lZr!B2zv#O zO3GwgXXmjlgCB!T2qv&ue_jLeIl2XAjVD(|e@4+KY(oq}%b%F{!uFe|E_Z`8VQDi_--2!iN3rY5 zg8ycXf|rL%N+`IJ1V)!XZgBH9qUx)>G)|JxkD|e*s5x-N8DQ85BKap3s``ROXWWm|23iGaPI*xo*Uj97t z)rvqP;XDrM0;=I&stOL#U#NLZey4KBrnNe)UckX0QWlwTAA9Cnp%;K76++f5ys5-v zG=R(y#Mx3Rf9{q3!WN$r>4(OJKplC}#1*1PPn5&6n~|Yt*r=t;`u#HMd{cylVa5{L zv@VH2uqSF>a#g6}QoIAwrC|BIt5-^Q<~iW1K;X>I%!t{*=2gnGJPQ*FSoSZ{5`n$M zYR)SemtqJT16@=3aYC|6h#KL#VIJKC&Yxf94xy9^e|8y-3)}cd?nlPKzBtau%Ii+!#pKW=Vt-Pob`4z zZ(XP`XvMYOtP8YMyG)^sr)h&Od8nagqF(o|8QTT6KGuUc)`bv@H`^XDkS z4Kcb`d1nQN)QVWJ$-5gYp$Xk#BUd2nmzNmFe-t*~eF$bZZHX4j3%dhmAf;ipON#(Y+@x>1BMGclcl1 zN`Y`Xv|A(gt+-wKrZ`>a#A&-!76!S~C`E_Yxylo{ty&nP80r?8qs}(?yqv4hg9+zEOnyRKd;#UW6 z(om{G(-Tpd_bUDGXW`B9->ve5b4LBn0mU%%To-?Om0Vj==Y#$wK2pZ{&jUEl70K4`2KX`;B`Bb3qk)%{P0WJd99ec+yh^=vSN z0D8*Q+FLiOZJR$bIG!8X*IJf~(tLt})5T#^Y>n9LAo@%CMudLkL)E7wYy3U{3c5`dX^f6RPe+V}%x)8%p|88@3D%!Une`e3hE$i&u9 zDw!HV7Dc*@^66LV)od`ATsC{lFQ0f~Lm5~3WqI(^(V{9GFkjLj!g|ciF48Ui~ zq|-%i&-ge^^@MO&dSAORc{LM+)FJRU&eG#He`L5XnU|g1l68bER6rjdqjsFmp-tU4 zb^M=QVYQ#+-bav&m#3#w*k%^gUr5vOkBWhF7}SV1Y&S93oGrEG4zdq&i=9D!a`z9sr30s_(>dL zf0)nBcEu{H_@Ob{Uif!zXjNigwHTCN4T!f1AXiR!7tp3&_J$nnT0h{1vXWP-XAT~< zFmSY-0l!d_QOXgLL!kMpc?!ZRYk;V5IIXQvfibfYg#1Wj4a3JdKA5gd&41(Nbw&Ui zLi7;D>P1OcFm&X3y<`9Z%F`^kYG|O3f9uGhmSLY+jAXM_J(p+=k>R~V_(*4I9eqS7 zAM`tV zLKJLica#d7JAOMor;)Y`G*xV;f9w44OR2cp30*c|#@A)Pw}xW}nOI;pEK!GjkR(?t zW^%BHT+8!8EJHPMb#<`E`M-Ja)A3Z?aIUE?KNaRWLL`!JsKV#WjGjMOi?My+x=hPw zN52p@sLxheSydI!c1a{qsc=XXFDA%+t4$9;o*O=AnjDw2mc4{i(q|M~e;il`ZzR`( zVHMoT(%DaQ@+SiV>c`K&@7@_o83QyDbLhEyEqgCmC0)sh^Xu9Tc{wxK|c3+7GyJ5@L< z7Uk%2G_UqpkLrkYx|3q9e+xh}s|z|E?dB1vOf~wOCJp4E2@31tLM^uR0uoYhNWzSA z80eu@YCHUapz-on<6E=0Cmhpb8-SH8g)rb|)wKuSnchOWxUmfjNwur;ZnJz#9SpTG zu0yeLeIT!YxGuPsG$QnQFJ->OP63Z-9AH)*KMVXT1p$0SAhh6Bf5@Y{R*V*muhXxz zR>4LR#Vg;2TXq|E@M=?nSsa8BGYu6cO;$w=-5OA7P;wdFqiM77)B{4bOEC_YOdRIc zCutnj!DinMSD%FXKBUwhCPVhf_ly{BzL-2%sWA>5{zJA!+#a%J%5n9tEj3MPd$7SZ z_kl{al=oeqT`i&te{_E-8%}+9A~4Y(3F{TF8;tq2Qy7K=-^=nA$zPuzXg}kz6JgCr z6nv4En1kV?g0oSS!wHe?=B8fv)4Pjkx_Qg^*89odxB=t%0Z?U_L-edTd|5`9 zvdXNyAl!5XZEw?^OWbkG`~5pB}^zN-$`e6z1C9{f3H1t7^eb=X4z{`DKmr)8E=>9p8RD ztxa9a=d7pA?%;>>rkkbp-O@2M^57YoO?M zxp5Q)PgSpK90-p>Wa#(gN71Qjr0S8Tw1kWX417po=m43TdDBzE30?9>F5Mur_s>}NZQyUfV=L^Hhjaey92V$61))^ zHOgOvB_}?r+}g`SBMbDAhV3UMDZXp&6~_ude<^-NMs*u#Fa(s~gbS*zVO{d(w*NAA zMxJ`3*8OZa`$Nis)k>V+8d1F3qJTLrtN}^Mp-@Q{Clq;ynfL=0$fKL(7Oof9SoPC= z%OF&FAv`lDye?^(wgc(vMt{Z36nZ8(EY%y;M;emm|N?vsGe z3agTl>qCfpJ^f2#z9T+TJj)p4EKBTwFXjkVE9q4fs_Yg40k!#{;x)M$bEd%wrQm7PiJke>`s95C8QBNQ;i&>2>5VvUUmq5gHFw6Uu>0V{aS~ zJ9~0FH>(V0EI4PLmZQlyascU9NOKxOr>}jc5N8_nv^P|v?GdV?e|G|*`1yB5k|aXU zVm8mlP&I(8U=Q$bBs@ASy?s&4W-Bs|{e<1#!bW?ge%R*5D8Fk1E_}>ye>S#82t`K1mapzUn%lf$h*)f-AVi;I)~YW^yAq9s4LtnK^+fecQo*7U&SPwF6v z54WlZgpT6PU0Xnuv3Co@f8(M5z-NC?k6ARWQxNVK(wz@R^Z<;kE|A3S++VhoK@pVT z+AR&_FnMT&))-LVZJ1vy&67sgp6hCMp3R&RP}wbs)?zuvtTcyDl1ewznilKd4@Y2h>QLyKTG81;uM(0hW4IF{ zvs>+4{Hjsl5MURAe`xZnds;D4oa`%k{g&NK#@AxdKyxgG&5=M4zu-rtE^j#Se06q#7pB=#tU|C0^idcVe^H{3JiY7A{I+chPLexbA4;19Wtc6fPuas`YirA$X5FNEjQF3m!aG*ps zBe5^X0VNMrqQu+Gm??Wh%-U_OJJcLHG2+@Mtg7K8_#9`tndL2foc^s$;sj&5+hrKg zMfO9`JktJENQqqCHYY`7&G@CRM?A9sHEar6(l&iUe~(SM{<_#Ec2L_;g*OqCX9R*B zNL!5A4z$@LNEO6b^0wuk{q=dkJJZzWA@*-@$Y<6(^kO)TcmwM&uoN&yd{NAz*`;%X zm6TdgcjVc-cE~2S$!4bPSjdBE%z`@+xCFGgA2y{B38wogh6Tj%rk^6r93q#@rC| zLpmRE`v2uy^l5ttVyb~TS&eN($W4h?(TE#F<-6`uq!^}V*VH)PF>F@nvLMlt@=@y- zVA_gLxF)-H)hLG4>E&M_a>ztKVbx+zeOd*Gf6RLEK(}$hoZZYD<4M?#0QN#kkt~K> zq%L=3A{}NQGInAUdQGB18zv@B5{2Y9Rw81^asz$lE%p0!RFS=#WT>HiKtG6l4x@gnZtqi%-0W? z%-U@hGu_eROa3-e0YdFYcz{?{sq~BMpXtqFkUY7EmWe+;JZ zZ|mjqB&#-w+l5koX+Ea30nPd^@Mynp*L58-&eytJRyHks=V^dg4J_WRV!pM{x!uNa zx8XW$o-;^CQBSs((J+uFNmkOzygk53Ti<%WI=m3}({$46H5@Sc?pg6ok&icFBHKxJ zqHG_CmQF)^96*-{InKRZRM}T-e+oC~+S5}Fd!RE6p{9+RjBYcq-4v)~raCoH&g(Jk zrz`h|8T@!?VMfH}FdawBa0d>xe_Be{533JS%7J^q3z#4W+%|jIjy%(c9sV=0)0d-d zo<-lidAG?kr)1{Po*+fNlQt_|pz3#q{a6TY0+7r02wkQrS&5ubiQDZje?5rA4%aY+ zCj8#hInIOi%NT%znfA_tktGc~0Az3j=0^Pt{+9x7VwS0EDox1~i6HmVq)pJ@wBwuR ziLOt~cPoLNO)V!XvpzTOrn`lzJ;vFU2eS~?1vvvACdOuNm4T}qVYb#uh{_fuVHv>X z74*jXd%Am)0}qn*dup&Pe_w7YfJW z+nu6*P48n!1_2MJ&$AR(tNi*2CNCN`P>)Pc#Goe)hE)69Q$p2kf0Kbj4V2_~NKTo* zGb@~FGM`=`Mm^VKyHf4Wh6KQV9VJPl@9U)EgJFT}jQ9wc9RwmeP3)`2e0bAg zeV94AoJ^^Q%sKyfn<7HWWUr0du)vOcJrBF{?fT>xz90!e(l~a{Nm79|mz8<8W#}lT zk#R?Kx@R)?0wD~Ne`&usk_EET#%G2G2vtGOt>dF~Rbg>s$;1RqdwP_LVMHA7m3&rE z{x6!>Q~R4j*wE#ShAJf3?c3pqAV^1k%-p}bD3!fter4v4 zY|E}&FRr9ye9D4gB!r%+DX=N7f7fQlXZuDH6%`+dr|@GRe?^FtIG>x_FkhpCHG7zG z`GLlLRAaBcvMK?%`aV2qC!Soc_<5f8l~R+`EJipSI^o|4n@2O78xK{Fj8FbJrGBy5 zbE~$&Q$LT!k%V^}_-kuvInw&bkepG*T_{}A6#|s&iH5X3VM_v6J)jpzIA>i>dgpu7 zu+Gck`L|ZAf9%~~7Qm87%ehjIoFv@Z7-wG%U)R#~uYiwZi&9`PWoA?H$?bb#2bDUnQh-Vnj)GRpb_|?NKg0iP3OmZw{(ke}MhbyuWPMy7?|@HyyrIJ=|ER z!&*7@++rAVREN*Bm`xWsY`lkF!0l?tt|R~Z@4r~8#AgJ{7i~gg+QO_(Is^fxkrxP} zHyriGW5v^qPc$Mb7D-)|A(_l6{%cO2EpcAId$0Rcbf*QO?Ll>AVOvi}&?bo=%E--c ziP|g&e`m{M?Py9Q6PXao&!OrJOPMf9Jj4yXN;pF?KC=JtbJJqtI~IY4jIJlHpx7^fD58}Z=-u@rB8C~nm8;0^wm~Qw>26gr zvqxu^F3HKa3*A)s)dm7lic0TlDK$9GvGTkwe_?J&S6yresa&$?%$k^(0>^=bkH#4V5`IjKCiz>E*&R*Bog1Sx$8HJt#MkGpu@ zJE(^pkL!LWnL@-Bfz4KL1ql74vCXr=s*#1L_nGgI6C58l&MM9kMpN-*2O$rK+oZwvXl*CMfxiv-h z?~6Ih9BrV(+-#Rc)i}ij`(Q%fL{{Da^2h|HXyPR@um_%`A^=gHc6pfZmh0e_f5}4s zxqdlHubDmutGF`Fvo@v4yqGxOBS)cqq)O$7GW^fAh{D@97qI3JpP1`q6EK0oYjAJ3 z`Az7d)>UC>)9cv{H*LKcvX~3@w`bRs8Gg=C(c}9U2zey5^K^N38f&#ihoIpInDHiU zV+${bnQ6%#;*FvIm4li}N_1j&e>32ceayX*TR(MaQlwfJb)Nlz58%ymjmgw1Oy@%y zOyQa~6K3kKXSQMn`D^=JEdPc4)D^?1;FHJ+RZn+JAfe>^#7m1t2BL}symYz?lLfu>|z15+O>Gv&A8cW3U=x=SN<3Pe)^k+_cW?1KyyP64Y0cA4W`PKpTz$Xbx( ze7NGhZLoVax`1S`-#>BzA{Z!*k<&~BgV_jdm8Kk3BjVwF8Qcpy zVL&|JlJS6I0QJceoiNJZfBjn{ON8f>W1UdZJGQqB?J6P7E9jHV%sN-~5YL7o?#9SN z3R*IfM=6Nb`w|{(;G@c?%iNsQIjqZ-KEF&^8H=EwhQ-UO=2+`PE8SI-?A?Ydle*Feg=MRe{^4APdaw^3Xaby zkK1`Fs*uD1iT0GQ!TW3Ticg*3bzek8#?Q~RZb#*E>~gHu2ptGST9v^KbDuvEdcK9b(f0dkt>jz!ang-rPghge>hY$;X)tYVpGM1n*l+5n;F$ya2Kthu{(f zO6TB14&i5&)NULqMj=}2fL#YQq}pdc^L{+W3|{z;+-L_6>vV&QYexFwm7?xXIEqq# zxxj@777I9TF`?wpX6A!Hoz6IumD7+RrY1(ABiI3o%y~3GBDe*hv-1etteDObO*D_q z76Uxle|ltoW?G26erO@;%Wy2=8ooa~U7QawgEJu2q<+Yn*ZEU%hcTP1p_)ZG_K)kx z)U1J3wi!Vo_SS1m)_D_l{Gdw1#;Kckz$;4;8ff*ZOO;W-A3DTBgrB+J0&9+eqmbTg zl!abr(`>Uq$5ty1W-$Z@;zosq2zJ&ZS*jCuf1da$+Fx#(H9n)Qf6DqyiToiJAq-Fc z9szP&*1r#LTrki0e65Ir|Au+y*?omPVb&h&gvH0AGV%du04u{=E5dQ zrsE6>eV8_k&DVP_COP;km?FJ}>Ef7;q*G+=Lks0q)q^efIOwNG#)}owx}YKG|)XW2J(aEevlR=Gxl!SnWtDad3iQxfF+ zNh`<(0pastJxwYyy|Oo0xkAI-`I{l(b@DN;4w*c4d36}e-lDZ;$1fW9C@2Y9jgrEb zx&YD=P8xM?)`A0Zky z&o72>Cg&Ndm89vzElw*VJ$fGb+7yQr5)<4COjhk!0SwiGUo_QyROFG=AFl8AWMTF5 z^Mk5iMHQi5662D=zdDQj8mU-Ue^$I`?2_<-vXIews=`qbvQUOdE>kL5h+BLRjw?dD z5UBiOv*fiYej$ACo((sI7aFlmkI%3(7ozJW{^n+;BWjNouu8DXI%IY34#IeKlr4-ha5xjxXeCV#d`}Tr7eC#lDc`rTe(*a1jYg3x6}YOl72?y_ z(lQ4KGK09CG`L*OF^q>yv4ZqeR^As|@HpRH)j& zUsfvPxmCVaI*qOrv=l>5fgn~rl35#JnUuqg5SmA_-~`bt-2|-*-zQRoh4$*$ZV?Bv z_fXQZx9XWuy~ZH`e8|oXW31+SHX%(hd&UzZ#C4;jkwiP}gaSdve^SW1vj{=OF%Cg& zJj&KT#1a%MT!=;)5gD8}pBZu%fYt@nsu#KjUCzC1KhaxxK14f)wluJ4Iy6|os)YjyQPyz3 zxYK0^!6u}41{HA;f7(nD59AtMqy>vp%(DZXMe8x&_TZ21&ttPOZA^G}zzrQAhbX^M zL7Y;#;Zr8Pk2qfrCkFd@423F4zi`9Vrv$=~gHQDHPAlo1NWvH*@=qYIkK?;XXfYMb zaN$N4_eHMnGs+bKk)XqCQ`<)g-g6*PBbDn$-Z{5$2;>RpfAefq`)k9`FW8aopo-qX zS4ZYH3B(!g|1~X9lrALs_kq{2kLa0V-BAXPD$q~hw{Zk-b|==t7yxG>SlPw zm4$DzFwAHqe~HSHE;3{c_I_+0gt12P$5n&Ml#LO#tQt-FSHmUXg)6nHM-vLC>DYa# z7Qiv%WTbqiB4gPdvz>jw&@8-Gg+g#V>h*fERoFefzLz3A(gkAPo`h0^9Nq&35SNh1 z3J<3(x}OEdXiX$f2c0pXuj&N}Dv;^pEy9&lOlcyRf2uULAGtCUW7I)iOC(XP09qJd ztH4LQB;a#5KkId;z_AKe$nbu#Xcqfo7D=IJ(beGOij1}|KIm>VGpc+FZz^*FxyD0( z389ra*^n^RZ6AYl{88Ag|A)wOfI)Ft?jwClpmbB{UOu-Bs zvrdZVzL@H&(oEiN?hOl8Ju=H?e~Q6>?SRI=|Ndwhj@Id2Bm~L4JNXQA zU2FgO92fK-YDU7;5lAYpy89&BKL0PoC`=J5tnqMrBD=9r7TwNce}^HBme=pbTkQr) zW*i^Kf|jE0zJ-1fjuwm)+cynL(LA=#Xrz+L>b`N(b2kY)%o|DaKn@xu=4tF>nMQkN zfA_P2<$@qvlx9W^VxaV<^ju&DCABCShYU9)s4an3*m~?4ib{3HH9^vObX$hGiNpE) zLar3h+JUO14JjB)&_Ef>_^9m%;ihGdb773rN_i=YrHpOy;5=00Dw5TWT7K+M@~|-u zPPAxpe@1|w1{z(!!H#Zq?JV;Cq`IKRe>Ls!)!n@O*1%1{Y3E?m8rk+$)ApM_x0R}T z;)8f!6?rk$2Qz1g7Z~sNOVZFa+^Qag$v(@{IS@UX(#suCYJ(dI|E( z)FOskdvwwZaR?B@<*kI)jj{>H*dcE@HU;VS!m>?}(>A5@*~qKr4RxKp1;J zafaim(XtD$nF&(NYKKU%A_!;UOh9V6J?KnOIB-%t>1Ea%`%`Plk$=k`IZT4tp<#Pn z|9h9P5La>4SF5;!%bROR3zT}Me`ge}F)4}i z#Y9J@7LnqRy>=mlki?>4mBx!H$g|jVH>Uk_1Z>PPb975u;#w%0=-p}`tJ&o^K~2G+%A#<_e=klMSQ^w$ z|0Oh?CH73Dxak<7TKMx(P-!FPV`lvdk9PCh8lAmaI2Mp^L0mKvk)B zOe4|e4Ec5-xu_*pj_$DgHnQ^b4af8=E#{?0vQ$;U>x zp0SE<5saV1PkG~Z4m92UgCW|+%A1GmF0Xa(@36w6QKERSI`hF;L}N1az$e8g$R)-j z!tIo;DQ%}h=RR^EXTlx**I7`2Fx($6J?IDF$z9!&e{?q!N;FxT)z8UGV|uZNsoBHOf>XOPB1KrAg6h2P3e|{8mlM=p6YSEz0USmZoGVE(;WsB({n|hkCU-+3q zo$Ffk!9!NnPk|XslQG>zcDE--F&QGWB*YxC%F(z`0Ykv{e;)E8;$CpBVc56q+t2ck z?xM9@ajD4L zo0C0SmnIK(f1Zt;0|eO$akh<`j6dgm-hSn6_`wKDvi6K7Lt%clcPDN*Waw5b2Fmgh z?s%|l(VNnB1;L%=n`B5;7tm1{J0fXrm$ksB`RF8Jf;f#NT5ZEvD%5KGoDH7B+8nbE zVZw+e?6DP8d?I`0ZL<)%%M{3|GVsmP^s8qV z8r=iIl@Ng)!j03Ap=pkHf6;^b7$z`pNpkiG8L#PvH^%crn2S6ed~5@@bmEG#UtB0= zadUwgf2J+EFjua#53OHIVy;6aCyf^4rKqn$Y}VcSGLRvB5b>%p4D6I)=jxVKGq#wy z00p1ntGFLcyTZvHkbDfJHxqdiG}U6;Dtqg*%!{BxO`-`m!?-6!lNcN^^<``-2QxVl za=sw^ttWX=v}5599cfYKoYC}UmBbRm0Lss$f5ra^xS>rHc}l@Zib=FrOJWE4J&{-k z+{V~m4DT7QQ4Qe(mP-z%V`ak@Eul0f{E@g3WMoV4*?(D`agYJ70|OsI46&aNzxu44 zX5)zr0X79k*#OVsM`gpQO$G%pp$a7rKCh0oFP5Lr#SoNE1U_Ny))G|?3TeEATTO5{ ze}9(enFuKB54{gyz{*td1jti^Yo-U4frTGp_m4%UbtXSYzCnJk!SzJ9m%>vL_GN_( zF_;|AuNqrpjeNswHWp2Dh*kr+Urg zq(y%DLdkoL3BR&bNMN%oz;YqNqKr@9^14*vV>WzBrf6c&4cxN|dO~CugB} zc;Mk&wn+HqT}oo8xptwo2&mn_k6XHqo|bmLj#yHVyz^l9yh*%#qfTuHa^6L)PBt=0 zGIPE_)*v?Fs<|0o5ilZ0Q?j&G#sS@mn~pf3M2@iKpg6|hS+95qL0}Y>e-TOVyog4X zO&rDb7GP_D*I0gj>?rAVUr&jXULzJ<1-UK64J^j7->bHY)rO^aN)nP_C>kHO4Marb zADNPWC@7cls%DgDX})o`sbk?{yYNem1@(XG?XGfDa4?}5uWeUqUI-+MG5ip4hjFfe z#SZF_At@R=c?j%)gXvG)e_s2Xn#L35Pqa&_1)A5%B&0iTFG#t8ncm}~ga(3_Rn!R* zI~e?8P!Ru(=V>-$l|5Kjcw~zu`V$U{kV$V4au;QW0Aca=RIzoIB&8P?wXf@o#`+k4 z;^C&x-^2+_SE(Im79@f8DQwg}f&*yt^=ez(BccdLbv~?jF;+q5f5Zz|Wv6s%>pT@V zbMfD{ierN;yH`dvmGF`Dmy7o`d4QN8nxJ}cWdN~{VR)vv%ZX3QFIys4GQY2>a@vMc z=Q#JbMkTrRah@VfdZBwV%`VIW+7!-Q+J;~=OpCtL#s1`u9RY+Kg`f=~%dp+F&&%!3 zKBMZ~T&T*e4kLVhf0|O{z5hA#P`Z@_<3z@pj**}#)Z_aCZrA9`!9KL_@2*zHJH6~Y zoN%d6tC{qy&Xd}{a$1= z3qJS}iRTtm2q8m63p!55>N+5JYbAC9KtPs;88Hpe{9kjc6XswRKK^9d<=zwggMIy zPbit^WbB!a(RzZ2o&+qr8UjHXhc1I#h-&x1?ZBu~6tn0Z0u#i{M+W@#O`N5q*_&{t zLHd3fT`xtZ6puP=?JyC?hY=TZn~PvbL%1j&H@$69grZ-#E1U1(dku8pQ|IZ810u`5 zvC`~me`|Hj{FzosuynO8%5(#-Zk0}VlW>4TH1f{ah5H72X*oK#-E#e&ZTZ_!G0=)r z_VJ?kumM746S_vSf)rJFjsm)I!#5Gf15tQK}UcCido0$Z%YH~KGP3^NaU6X z#sjCr^qL;l>}7|rtIoTAdrDg!T@!ii|&oFkbJ{sjaIc zp=e_a310%%lDzM@X4t9Alqq9L-rX<0MC2Re&=F&c_{2v!55bmOP^1xbYixKG;x zSW*`Z$}bu)1o8UX8X2gfRO8R|{5e73ziQIK$I znAg=xvPyHag@fyjk~B}XHqD{YjmSy%*Okm8$JEYD#-=I z<93Ip49hj-Ng=XaS3jo6gu4BG@_=Y+W3Pf4ZGxlnya0d~!=cLO%u&$0;;*i_r*dFc zLCfm=Gk;v3@Y7CLkl;#|-pL{+cClH);v(s+ku(05Mhab1^fd$e|5*zQf1%xL!)P$8 z0ej_HzVqaB58`?Chxi3m9{70O+|YHlAHwi}Hh$#jgCE@H$b%g+{>Yyo9(}Xec& z8pd8Q$E{frram?mqU`IX+E6hek(rK;kSU5T_!9~tmkBivu$HC=JNR)-lNb|rpF*2s z#t_~GrFU!3-BWTaYq5VIfAjMF)5Yp_QmSsQ18`{zeG28N=~5hqivkSJV#3w%E0M9EXyLH>aQ1SWpShx9mSOZU4}DFe=hdWDVSJbV&uxb zp6mhtcg$ec{9t+XY#gj^!G8`%9Q?G$WF(*alc4+bE-8TfJ7MG{cWlTBeD?>Bt-^6Izvr$d-bu zPB>-z3O7X93E1Mje=WJu)xlk+u&0Wr74~w#9TX%(U|~1YG@0I!c-|6`Hv`EE20vHP z^(g#4V{wqfyl4;MK#j79PNcg6wl3+!$2`!hBV&4#d!pBeh7opC+WBCRC^H%Xehf94>+2+YI)yo39vZYER~ zSML=du19P=sIhScM$X zHI^`kKnLa;f5_rP#KkW+1t{4CFPwd0CC4Y6C(|F?9%Cd)#_CU82tdNz?lgSj5OB@f z*({G|1`n}-A$J)gM+`g+P~LGansP(5nTXjqkr<8V6}VC@L;gVE2P~*;Q}8BogdcDy zeL!86@aD_>{h$GImLlh#kPdhu-T@heE1E>&s$vvle_wbEi(5uA8bYMBH=|L7ZQP1Z z*CULY{_7O9D&!`Iexr8a_? zaMQ<{@j89{5&7|orm%1hMO-iJUq2FY&9TBzty3jh|H7cC4H}r!)c^A;q(L8KiIqh^ zBCur|e|(zElDOZ@f?$-F$kZjt!GG7~UTgeh(!GVEa?Xy%sg3g1yNllIl0@*1suag01*pvIe+HQl%H=VT_zf+fXgRP4jZ&2SnTix5jW${Pq57^NLjvE z7%uZ{A^5rXBiy--(gCV>-_*SZ6`|)_oBrrQ){*Ic0Hy+x&?%6VZu2orXn35yO zE6gA{u8J_D%D-k5)e@V{H~r=qI*T{faT;8?5FhICGz3O-Avl8PY;MNMuMZdL9Hy3a zOz*@E^V!OvPjDQxqj0e-`rPs=xjR&_fAJSDMV^bT26BXC zg1>KHGZ#sDM83)}oj0 zZt2I!qPgr^Q|8;&A;Bh@R)gL5_o-f5{aX2&^B=vD(B|J6d8DFw}8<#qnh?mp1APF`5axKn9cf zp6OpJMN83js$X)OcA(I%t9%VCnoSb28&g%IZ^-khc{;jw8ZMknrS$a=8P%OY2^Mxz zPED!5Sk6*M-Wr$iel!M)+#8eg$j$ZWo_~R9({D)T!mbw1$Ij!@S{y^Iijs@*xs+a^ zstAw{X14MZzfupYL-yGc4&jj!xC}cS@v5^Cgy3W~qG)~K_GW(ZVgf;yf_U&l6W*Vi z;SWOs^?oZLUVjXc$&Y}94mZmakb(sOAlTCnTY@gK->x^|=Ey^E(@*cizN=ywTz{3D ze!1x61!u%sL>ZhS^|iQk2m-fqBnrdLeW30{Q^QU$X-|R*n?m*7BpgJMk`#oiB0;I% z24`nh`g5_#1?X}V-*taF>Vk&?2J6r>#~ZN`FN@L)DQGmAX-EQ!~5{QXr;hQqo)`P)H*irg#sXn*`flGlD#`aL?Y; z5sbsIcczhsL+0(AAk0>*z8~3Hvl=G1(m^2CrM>F5MVHyeoPT`^M~RVyQ-35eFS|7q z22?;=E6lSu*-+J?ix^Lj_qy|;;g|@JS-LaSnDx zZUIDsJ>mj~73eci`|Y^oC@tEI8_oPn<_rOf)W^{IgiG?Q5)G^f3d5k`+%`u;+b2XS z1KOs7pGwYj$fbh2a5%N?#(%bc)`DuP1Y11Lqy4VF3!&bZW9(v<_1ud-%>nHHvTGD8 zjel5;HS|G>*r-i@(eXDM5wo~vtR~T_I^mGa<2wt|sCTr3=Z=`Ol_e8hK!;DoUJ68eE8L+~4+n5GLOV`ySfpO2A_w919e?ca;@24MTrZP8 z7AdFLBPD!s9c_#LOE+g0rFy$}!K_Hvf% zW{wONKk`vNLo2EtL;UNf<= zP`v8lOlXNF!D`m4uWrf2*1ywwKRC)%zyE7`XaW3Uv+PdJYQnw z6Tih6U?O~wmf$0%x2ne;-F2YxYWMXn*1!A^Crb#^UG_3{!Z*WJ{jjD|)qAeBF0I|> zy{Whs(|$C}0yrVg&$Rb^4%p(ydEg8`cCwAT;R#pZXUxPfjD|aIn^B)noY(6Nqw8Y+ zo+XN`j*=p7U4Oz}nVT?wQ`bnGh)>2pnO1X|yvGsT@$Qwa2*J zz?Ae2b~3Bsx$Y~y7z)sBQb*k&h()v$QPSA%>2XW=D}Sh&zZ9KJhhzKNS`QmOWAG?t zoEKXZ%7yCSwrfc zNS-aptev9(64Rd}SC5_TZ!a)Y!R}y-LP9sDb~7al}>m8F9!) zPa=9(FMr%`w+dT*vkAwh5xe2%O&(A*N~(q!U13rw2N0Md+!3%?ES(miix zqU?SN^4M&z2v(&~3YKEk`@9!iK83WQ^JVtF%FBRUYU%{sbH~Thsd=ovn_f++<%Mtf zM-b)Uz33rmF3kEb4;fX}G$e7yWx;2UyniY2pR}DVn}4(i0RhBhe@Y2gIGB)YIy+%GMU=Sa{ zlOeD7x6Rxs^9`TyoF?b{y1}hTfQo3T*P3?~aFBX~^WVGl4kk)}k+be+J!XSSRG$#$ zmTH2U%wfg(zi(+Fi~R80>R{j6PJij?zhQ3n#jhSi&9|3Ma9Bi%S29u>R=qZEwjbN} z&EtP$ery$DZBEf+C=}TtX@Pug|^cYg+RF1zFkKM(dI=YEwB+M+*_EQh!#z>2%$3 ziU=IkacfKKtS<8rjzGlobgWELgVl9E4O^Z)ZLrC_k1sFwfRHFVOD;)S61Te2w z>(>R8qT$6u*(en$>pbs;-G6G7^&-_28q(6vOiez~PBl3ZNIa_p6yv;pzi9eoWZ+W- zw-88MD<4eIXJeH(6Cs#)IdvSip$fzTJ$gArjj8YN*wpyrLV*mQB{@U%Yc&U2@|y4)?_?@3T~H4|eTMI3 zd7`(CJ+am*<>ynJm5gOe4i=u;h$V6z_X z*Q6SCJh<^>}k95?M7Tc{;$ zAy9HA`~CJue1FDiwEs)3Bv0{IvXM+-+3~G($|HYX-m*Ux&?nb)Z7FZ(`1}PM`$Hes zT&RP)tmL~^oeWfCBYadK;gYxTW2o2mid@wzWB3b8GSY=zqTzMLlqnOunCz1;f6+b- z4@YSz1Wnawt5_5`s{eh_nSfPxQ2pwBo@nez9&M3R;eVJI(*gPZ)~pbk|Hi6|l%6rB z2mU^XTiJxvJD=%Y-9pu4%G^8i43l597?e*f%L$eg@-&O#1vk&&n9kcQ)4%ct5c(Av zkIm;T*MQ-dA<&ma`8EO84k(ZT|A%KCrC@J$LB7cq5e~d|DTKSgS*H884wttZ8oiBm z=!Ka5q<^0F+5N2>?Qy(bWdkeo_?y$0to=f$>W7cO=5<cgXz7jQ45Mlk;P32S$c{svZ@NpsAE__v9#_)(3K&se7_U_h@lGoyb{q3@b#FoH36AKeS@8ioV2bXL(FBTp~RU+P0^{Q?2e9QsjYul+<@veJX zwSVa=7BfA)0s#c5`=zy>A(nSohm)NyPGTs)O8!;u;JiqXFk=8dVzUV}?$holoRWWpEO1hsj~fPSF1z+|21FzmNN( z4(p_?=Gjw*Z?h{tfJ~UhRd(Fi!qfy4^pMB|z0MHOc7%zF@Z-pvpMK&%2n6OB;(y-~ zJ2x{*pXeuAKuprI)rv@n^P@^>0B$P0w313EtMLcZYNSkEGK_h{ES)|(gt(C0Z3H4n z4VwXhacyky|U z0mrgv>pG61fs`!;UEmP$u8EV#u1Wc1BrXzIj7rb_Ct}!#XqX%QH6?Kccn>Em&iy)# za-^_c(TtGY1C+5tkM9vX*m?slo8R78CFeUwJX2;!81)o3m?DitV zoUYe(dC{!xw|rWaI&~j|Akob(%dy3|0082^@Bae&+gUu3@150|+<)WbBB5%xt(js4 z6mL?}AWoLa6$)L{^XM*ndwyo|b0!2+S;77_JUe{2*{4Wmfw6s^=l1oS+7517*%xtS zMlKD7QXqtdew4@WwxyA@^3nJZ(tK{c+&&I$1XVlKViqk^RY@EdCJf}{{aeo4 zDk$b`ri$d(s7B|$GJiWew4Cq`>DB-yt$+{q-Rd*wn8%YAh7`9MyF1)oWH!6>QcWs?#aPb z#k7t+=Fb$mKiB^571>+XWgBKb1i5xhXSt;>qSa9GwsE>uTp`0H#&Y{JS~v9te(bO6 z>hjOUg|j(8Mx6(^Rh#`Ct*wsqReZOnnj@9re^lz2bw_N-*Z>5Uz;S^j6n6UvsaH;# zfZd97VTa%2&ws{JQ-uJV?`A{R5lY%|&x)-V`rVC*90t}CxjUvV=ir~J;@Z`#IyIK|kbepDgu=n;s#9yPaU$=)kU#>U zAFs;d4!R7a#(GUMqzX9l>g)YO!qOC6{qTy2Kt56_N6L2h;}moU!xM`O>cFTln0R>G z;uw;4a+GP;+J|+Ngp>ABHy@ofdI%GbYG1+sHtYcikh@kCR=T?qH*)G}{~4BW#1+u{gt& z4jNv(Qh2L$F+Oazv8Buo2=7F)#!fImBdYY8Ie)-S9?I33uUfqD4pk8AG*lWqj73k& zTXJBmapcpsz9rjYXCPuaQxI|Xg#4L!g2YK1ZO2EwtyPpT!aD}yAtV`yZWu?v!ug(N z1g`V@@fK#Pst1beV5DQe`vXGNVs}on^-6?=`EZz>$t0lCO=YMwIMUUsOrFMUav7DF zDSr+#JvvEd4>jwF_v+K?^D*J+etsJoP{<*{W z>hxyydfWyOEA);SsfKF?y3lM-cYwQ@V0WCcNjJsHBEiX6yn z*_4vYz327jG_(K9g5h$&ySe5pyPz<#6Msr;a8L2@Nf5bnn^VTh=?7)s0730e#;hdJ zlnFW+Q*BigROFTXfrr3-=b@k96gW&MR{pl(<57}z_{mGkMeOc>ri)bpR+7Gq>=x3< ziX{H)GWcS~L?eCdB`0)*LR0A+L{qu_j_YFbpS6NkTq27<@`(CKg5Fj#rq{+pkblxl z7UpCf5iAptj>6ld=mKI958(u$*P|fXyoNu;t;-0Sr(!mKsX0LS!bF?j{FP`M-saTi zP%}s5xEQEYHZ#-Nh*&+A0YX>yH%?CRd};eX=$b133vx}2&eYd>U^l^P4gNUSv4Yeq z<;=}&H2Amva6_%iUJh*sS6p?1K!3$)m0~mC^(MtaNEqmUtv4SJV|);u4Lx;Qd+yu_ zEYdKtycAf3ypD9QfEJnov=M8c1XHMjDA{83jo(CySfY?qM8x6Dp-dU9kDd2R%Q6d#3I>-x&S)#=eejeI zvw?3VkNXqrHY!@vf|mx*CEk8)MJy%Dsn;V3Otw8y7emZLp|N#Kq{&>##bySXPTJV3 z$#fiG&pnm#^Yinvo7e4xOn=m##KiZ%v4XUpRtR73fv4Fc$`Zlf%ka$NFtfTO&hfOW zoE#chLxe^tko{22hTkwIP`hJO-sN>S2M`R9na^fsni;F$pzeNv_p3Vq!u?5=PHuhD z?1$PkS{GcEeO{aTiOCN<4td*yMKr96!Eihz$NcurTbW++hK!25p7V0tZcy)2Z)&DYcT$h*Q7_d zWm8b`a?o;=S8EM(8(l z&cz|d6}lgC@oCt{vj}}(Gh*Ck*zNBzGo8b86JB zTPQ#!{OnT2t=wgUey>7BTztW`YiO`w`?dw!`sL2uIk8um@LBJ~OnSjeW)&*Owploq z94Ua$VW3C@lVOr|xK2Y8@`PHEE7 z+OtV^Pz^D^xq2)KhPwcChQY%9r-dwf_`r+<5dnGzpjDHL_d`BXV{k(YuU z)cik_jw!P!Qb&ZpRg)N=yDzj>KjB$gh;l(K*(z!;2WqK8aqOxgxMvNHs?VF9dY97I zT&glMI)SEnD#bc~HZ`wbHvsdXny8M=EROP{8{_sxN+5saY8xjlyz)ZD!~STls&qV?@bo>LP4lM?zfSQ(rn)6y{3AK$x5 z6|$4(7ocJxYGiz`hC$=OOsxs$7l0no zz@($yU4kzJgwb+_L4{rZ3GnK;C zpVwG7`GH%pY&}Lk8DV+lmWJ>-xPPCYA4|UVGZ29Rqc1&#KigA>yK+x5&20QZr1QDy ziIy0EX;Rx9c)b4GH`-R^8Oof@A;q~mE<-*1SrZX;y>$Qr$<@fN)v`wgUm1Hnaya1? z=bU>5VrFxWKYym#A7}Vy{y531KiyJu?GF8cG}fPW9~toS=lf}PW%9{^Uw=0M;pV`t z93Z`WLU~U5MIPGbqO)1y%4B%P1u7=m@PN`{_#612KXtG~b65ZIfil*ki{SADrovcv z>~@9+yr|2@u%8{?Zty)A^DOpmlE-KZGju!ogA)j|+<~*E4)gbKLaWoGF6%@W$GLB|p2~q4t*Ww=Fcr zupbDW)Be~WVTj*o=5z;yhbBI9$c@ZMu4`0ga7tin+Y0{VVPsU6)PDn=VG}6vXhvF@ zFV8<^?Mf-r4XKj5dunBz5I`pW*q^zUD9cOy*iQ`M>*SAN`17*YNAV!JweQwfXLU_p zFxRz&SjstH9n{j0&CI}w%_PPE>XG)i<=Om@H;%SNH{Ii&=Q=aR3He|2A z_5l-QyopV6%PrDmz<+-me-msNpqV{rzwg2LkkL6bbL}BxM^$*#!-gO@ESvV4Wiy*q zL?t{8ye~Rxw0uN*CFA*T)qs6f6g0SBXZxd(-|?YyE&isx7(RFdpG!2mEtncL4{4BhZ#TF&H#9XE%&x(tU!_x2Ta?G@rpU8|$^*hNsv?~(oPQd5RBPg%wp zH9cnI9ppJP|Gy|n#}b64n!f5zM?c8>>$Xl(YQ{CUYH9{kP4TGVqe?P%a%|v79}5Ml zMEqQ#L^V&)M1R^MfM?^@fo9h2t^cPjubV)yCJ1DczqJXcC)HJqfZq70{QTrECw6)1dhlX4$7>#yFUaz(4t)hGS9 zHSz6DyYV{zmZp3SmX-kz?(3y?P4o(HkUkz_H&>8tJ%6c@djUX3VR3A;-V*HWw6jfu zgWEf$CW2aCPHb!XjGJsNYjQ&54vxh#K>hr)83^|qIGB~#nP8`PNCckI+6vA2+AzGECgeX^t0+E8d9wX3?JOR8jDaieZ zGbc$^CVw}12Py&pG#Dckn?YAJlrKH`NX?ks%z*de(L7^2-Ai30R|Q^96&Ks+Y^6A(%!lP)(P|er$rfHSXwoRWk1#v3j>2XQ5Pz-5lSpPkskx&-;-?RV;H)#xQL_<2 zm-P@8a)u}dCDLujqG6;&J3fJX$5oThh`)iADwnf)Xxt|(lCuFhdorYPwZV3fdnI(` zgUl)XW+nzCHT)ht^?_toC!1T6D+2TdH94U*JusqFu$O4el38OpMXXNk;yI(%-Bs*3 zs((Rwg3OIMK_ab%GVu`{mZjQfCb>K{%buWNl9?d5Ca5;I2YrV;86;6M)|_Np5`)D2XV6a>11q9e{xc zW83z9?T4gX8e;4Y_cqytstHLzG6G@+20eQWf!zi6P|!zlO@rSM1ku_hGh@dzn}ZOSZDMA_{;YYx%6hGW zRoV~`^!?lfI~E*Z4%S1h7-_^Rnkxq$y%#yeU^3@zM0^RXvT{iwm1?e94Rtc2&qfr% ztW+*Wcf=%7`W3dPOk!I2eG>}Vj(>XOc1;)SNi~7u4CkJlA{ZYNfBe!c{)GNNx}0ZuKtBz9iXbKxZvlTri@uTgas9Pok8~6YywJb zfEg63VW&yFuzUjp`EKNpQ8_R0BZHsinWiGeFrd%|#^KZS?{&h|CK^bX`F~uhpEG5! z-kCPn54FJLVWhyt6pwU51YR|>SKpDScu`1x;{9Um#;Tj--!3TF;TJvCJu);X#(0E$ znOZXK0-igXm8>rTzA^kUl0qMRthJ4=k1k1b4rZ%Ye()IIc)HTa3sOq(Yq56hDm;GY ze-3T^FS(&1<)V4l^Zn8>0e>&2x|Zg1*c@t1TcXn?GsbY93EaT_(s>!3?dKh~TYEtm@-A6shI1!2UeA(5|JTZods=;XmJajFc_|0-|qRp-BMQ2RIz^K`@E*NEg0glx8*|nlHaw zaZl6sT&FKA?agFXt$%Yye)}#WHQ=VPWRm>q(yMsy2&`S|A{P(J4Qx7 zdx(b17-vuOz+t$V22^;9r&!6M;qLi?i|+#3mUM$I+VzbUWqoyR+m9u1C=EY};_O`s z-bD1w(ISYy0S~U84+kC26m%&7Y}`Kjp4WKz!tYgA&yar#Ie&|^#o1|3`lEUHb-687 zm_Y(jN+4t7fc<&oJ5g1E{3+;`AkuSK;*QK!>1B3y?712A^65kQ-PwcY&jmDI7hDM^ zVDECF2h*6cMXC7&yaTSFaJ6G}RY;-9-25_3WlAqwN=b!&<7cpMztR!mikiBiMTD9^ z-*1z<*ZekV27fV)dmYoDe$J^+{IY|onNqXjAPG^FFk3amYigfZDcz?V)ArYfdj%rG z@*#96Q^I*`&a%YHNr(LMw!P9G8w`opi6_bIuS0Jx;P@7KqQJ*yHi#bwy}0&EhTXxe zy&mu-Uv#?ssBVb@Jf|m-TBZq5Lpk@T<1oc{Ej&laEq^xiU%ocbo1`knC>Eb-P|5{io0R0q&-eg0Ug|2V z^#(IE0SoRPJ5Wk(G2Gb@@5OL=WAvR%9kk0`K*8zmdf4~Q>bY>DyF(ec^MOA<)R;*g z%XY^;DJneQAZhx8hy0v-#9Zc+kNIjhU)V+Mp66N{bh%L3;p;Cf%`z2lwH zd4*sG0RZ?2=b7XU)&a%_G(9{JLLg2M%p``3=P~beu{z+6E1NO84!ShnJlH*&E2v1z zJrdyAp;cGOAK$I=GwJ)1nfsD8MNG%=a(`1EYS?_4+V(p>+%LDy4u&`Danm3v#uEss z5zrw#l$yC!YSN_xYF~<<+x*R@Bhb|4re_f#f~SN_`kp}!gStO2 z2ro5(Ei;TzQU}T4I;$-E-=Hv-;=gRmi$y7e(Sv$eiU&la#4;bqn(JI(T+8vzIe#03 z6spkac`axDPwuMgp+wDDz64H+od}HuUQb=4>SbKewKz%!BzK~M^^e`{T4U~2+slmP zI>jkrojF;09MG>lh9Llm_ea7dIOIKMJ;*tGL%7HT2}HJLwMsO5TKvM1-pwggnrNq+ z4DQrxz=W=j>wlY6JamS{8;tQ{eSJyJYIk?kd_?LS_0R=qNYcO# z9*K!4j9EpWg|nzr2#r zi%SMN^TpisP1`^Ylddz7#fk5TDaQ_cnKHuzhuOz&3LQTOTIr%AerjHoTw*ItKx5!q z|F8xb<(D!Sg_*T6g1)lEe<_rRsXoW{S2G8H_bP+E*5)B215{JvwAjAsfz!M%^nM%7 zU>sRH_J+;(;Xq?p4ppbBQ-66pX}{N57psWX_R{XSj(&kXZ4RQh%KK{iSo1(rYa@h$ z6B;~nLiFa(^e-tNAO$T@%Xf`b(hj#VhLK?~9zr@ybP+0pvI1l(=OSS3%v9Zoa3_pvxx@m%(4Fa|_Wl%F zw>v6`jh$*OZLTL+N6$<8S;&+}u)&BCFj&G7O^jY*ysHk3*Mq4}dDkI{IaA?1w}XJQ z2l+jid2ZF~dsPy|W2X-^WGh(*)R56dHlu#LJ_ThSD;!!+<*Xfwzb$Krjdio=Dx@+M z?*;5t0Gw8*6n}1xiXggE$MMR@a(L~6xQ|Libh9IF zgvT3H&0HEq1DC;W;2Hz`dY;e<2i?4Jh6kH9p2iLjleW+P6iHJ4@U%^uI6P8`p@g8e zew<4Re~F;xBozc3n+=>=#FnGH)L5M97_36vIq9tmg@4w#8aW&>%nHm(q`r8nwCd-T z46QErk_R2Siu#1#9@Dk6Kk@PBr9Bns9*LIg9<(`Io`KW#LS%>XVM@sfS38r@w8<4Y zymRsgKRIpKa95R_YR6R9Hx#sYf@Mux4kVt9kzm&iPxhJX=7b!gJGPl^o5b^@gH28z3bv5heIk_fr z`^^g^1be|{Qo!qj2cB!PxJl4vT-{NsPRezEUw?!*P`W{j+amedy0hT3OCCjAW}^-UNy{fm;p z-hZZq^c>y>aPsD7>J7Sx5wT#0jqHoSSxGTgmbAFDpyPYG}^F1bsUQ17naFXK`7C zFR3HwjIQ;Xjv_+u4@+qFq*eBQ$sshqOMeshIhP^Qon7P0X5PPB7aS| zQCHayU+K+{%Y45K?UY~Wo__YkJAsw^`Pq1KTB}W*YLSc`7~nm|@~y%V2sR?kPG@@p zweCkf`ILweGdLm4978o52K)2I^O9m&?!__o%APKm0Z~f*vWC)s$(|YM^FG)Z|08OC z{)l6wYU5MSS_wq2>F3NjNINti*nf`t54r8$YT!4FcThi>Jg)~5G?_f_#PD~g+4b$z zGHqmKp8e4j6D9WG4UeLa#kGE8S&t|VOr`^spQ=oxn*(*{VrS0o}IqSA&(|>HFwh@vN zZEA?mX08RM1p|~6!c}hNq4>TV*e!%P1^84bkcW0R<&e13) z{DIBLk%@$Atyl%$^|ip0=zrf7paq8k3YPr|HBpiT^+>t($;T)2e5C-ycZ9DPEY+H) z=7E1B56wXd(y~?=0uH>WS$C46*3WVO8r#a*;Y?gkwo7C5Y(LLaCUpb zQyF|_^QnDE$4iK&DE7%Z76@R@7>(dS>s)km^z|YzhAIenV&Q<}5`kq`Q2a=id<-el zMfm2}?feUdA69lUW#QQJ&y~=*k3=0l(jJo!32Ds)lD=wVJ8_KYl!o;Bq+#bI&^1N$ zp7r=XzJdd8mWX7nntyOX;;Z7J&7@=)zrV}EC|qKM$!Q|HP?!N*G(OpLAJdZW&acLFS|5UOX zC+E)qvFQAS|0E)K3l2$)+9V~PsGlD~+HO(yGr7L15wyqH2HlV0)7#=1(1-_K^k#cn z_Ed5QsU}P#uYdQ)HK%j=b{io2Io&E#VHd%jpsAKc(t+~~X&|*X4))q0;I5F-y#%bb zvtc~52|N1*=48!8RNc49(i{}bSroMrc+m=3rgd>3IzkYLz00?ZO|D=3ICq{`VEMwh zh7{dx#Ss{_DwRwVyoj!UM(M9 z$~SSxVETIx=KAng)_N&(|1(MXg>^izt#j-C^ylX%C23CE?=8dd6((Pw?~SH|KAkpl z)#x0P)_=WRNjYsPcL_6W5)y}O9BemS3Q8>P((GxNZW7y&8OX1j|%z-|fHPLCTK;?0+HcN4%D^J>E3xIy5<%!j$B|N2@~R zBmzxwyOD0fHv$`B)n&_lCzQ;qP$7P#*K_xS{le~5@`16pQN9)}xBG;f?GDBvRDtkhJl%IObp5F)V=YGY>bMwQBEa!N@vD_OCb+_g2@xvj@od|d9vy>e%; z)R$NA9!$x$Y|OX@iu@Y6$`*p4&pbFoVt*r*o5}A%lCPFs@GfAMkGuW2DZM3=EsnRs z77>u}aXTol4sY`6yl4Pv(?{pT)^YzxcL5MW?p78z!jBG|!v_m(bTZ9W;#qAH8yvx% zvP~OWV>H+!S5WLobe^E5;{UOT@lJ+eowxLxFd`p99%SQ21c`Uffp)rIXlZi$p?_{a;SsQ3Ld_}+l{ zSQ48k**;&e_^p|aUwSdoZ=ukVe1GoiTLwr2mL@Sb0@T^@237RkL-cB0$>7?}39m6o zSCzdTIhk;IRLH-bMolVZI$SSlyJIFdRG0OUk*zUF8Svk;+^I?lS#8#%8vdl+&Qm%1 zfe_Q&+d>B-$SkLFq!Q+P9y?FU0`W^cY@emh=%XCe9_%O;4w+44^Yl@&_5ZXsJ4u!B5lmPGlg&M>%AfaLty1+}&AU!D-`Kbo#PT);2PfG^$*oh^(ah<;NSx zt4Ug-U1QIc_Vs$Nm?Z_6ltpstH3YVX@< zIEjT9SXf5%XwIVK?tjzp1w(D=9L}PSF*?0{T13qBX?9tUUzEPJJ_fR-!6^lD zOqcW@&l4>b&&j@LBJ^N`p_?1=`Tw1g>B^mpB3vQyb1AsqG@Pspet%ny^TjVqY^#ju zI-p2DPQi;*i6;06Ac#P+ZF(;ky!2MYiH}q5E=g0?oIcQ+fJw-&+YUlPyBA-1BB(DR z@I01o^)ldT+&h|L@FgI4mkbm8u)E*9LW?hE4!nt-cDrf^IgI=b%y^(jGzPwVMy-_0 zEYnQY4oS+)Dy|>Q41d1lnJFZ#gSUY=skC8o+F>|veOSonps}+Vtb_Ht`*K)6LlE4N z`mMz3REmjVZsMSyiGE4caw*nCnW4GoQHWN`a1g34dw1=gTgQN*kq`AzlM z+=N(E&;-vPHGk{&UB3-0(ujOgDIF1!K7TRBb!&LbCIIlm2bBm2*L!Eir?38@7NRA_dn02N|%1zYv!;-T+o{ zPt!LCgjB|`<6>#E_Zyr%%0=|0s;y69*?2Q21s=KR2P8Axp)zw0W_8DM-7(!gk8pK# z`$_O`V=;k68M!kjL*a?s7m2j^P23x-{hst>7JsXGSvo5GQBkxh6!6%Ie!>q?#G$(k|n96h3!*HH+K005wRNf_Ti=Ui2uQBS76uWRExN7&W zDk&Kz3c+is8E_*0ko6!2XZQK@;d@;{;iFPXBPA35CgL|kRD9xv%Fcry&j1YB2G4SFEVz_9312K; zZl&sEWm2+Kw_70m{>^NzKBs_%|0~Z2L4SkDzo%h*$9sw_U#4urP ztHYM@lJ4B3m&{!r-ciyU`i?qzie~ZIisiakt;2z?MYB03Cr?Ak_wCr(TjS%kqV1c< zZQ2)AG?3vXlhQ0uQ&F29K?{uy27iSWTo`O_Fm_iD~Oz|_h1EbEY(HVh>~{RPFsSTnC^^yODZ~&fzcsEK!*wTo2OEa`hX@6L!0%L zRWYn>Xv}ksfT>R16isTNwW4Ts*%z*h!U91yg|BjF=5AIy7?@99;FIPchJQRj(UtGC zh;?sOc*s_$ZOP)#-|Xw97lua``9ar1jqj(~0Il#St9iKQ?;2HH{}0boGi41nOQdRd zmmTT8h`np8GtD(6=gjHZ^QdzZyI?}LE5kE^J}T!;+!$WU;rxP(g(o53HLa6hN>5(JY+Got zM-f4F_7W@06i&F@TYoeU$EBiK_?@n^HV<8Ulq5!T?erfU%Vg0P@NTx$HkNP(KfZ-o zk859wcFWZ*H8~7_q>?DS~hI@)q*^d5;@*$6F)?+<2 z5ojj9fJX4x3~fT@W%d?Rkm3r`-5co=Z%p}+I^Wl0acT<>wSS9k;;Nt=CB09m;6?CK zFBJd&%tvGZ#G}AqzcS$xfUfNQj(#*#;rrz5=dN|~A@@^D>FI>YLMFDC$a|+{d8Wzs zdm$bX?^QZU$gQ$_PYTpJp%mId2mS9n;4ES&alT9;=^jh!~(l?fk`-IqP@ z&LcI!{aX60$Ge}OxJ1%Cv_9Z(%hGVA7=Dp|r3wsi%-9qCQXZHkEE$C@uBQnO)G z>3Ki=hvi6Z(){jT>G@IlPsq(|%%2$>80D*v*ApM@rhi%80xDdzo1ANSrxNV-5#1S< z+q~ke2&a~7@Fr@_k&xOEkjqBZ$unkwY3lW6hPE-6vVXCco7V7uu@}Ts`Dwu0a*p@+ zzO3u?u^Cz(vxMyeX-)^Q!$vdntz?^9xB*Ar)J3~7>+cyK0>!Ux?;YHWt$Y!9- z+0ye4#%I&}+uEbZ6KN?BlXfs-M=|MPUxW+`^BHgh%{qT6#31SeaEVVblTtft*=H`9Y0b>@Y5kpfcCEIqfyUXPy7-jH1~_J+;S)Xcvdu=j3eoHXnh; zU>*?#ef6{YO*5O|X_B0id2Oyth-iVO?c!ZBB_e}|fR4ohhi=lFExQUDCD~Lt_3m!g z%3L3)bwGb*`uEIj>2S6lZkXwCybR50;^+adg2(^_ zByEv31wOxtBGeM)Kgx-Zywi14m0#o?)iBgH*W&H9{8|TkI$%WYGKS`P)@8{{kw-tM z7g&E_T*vpmV>8A;UjpH3)Y*Bbth@WWg!G4hf(k!d(=si-`oSs+@|yku9aeJvqxrC> z;moWX-?^G=Bbo5up9iQEc;@A*E@j$RcM1cb_7& z@T_l0^J%U88{%C@i_#qCXF!h2n*&kJ;|Lo}WUc$gOC}+Ro;X2z-;_|N%B}V7Q@?Z0 z$F^O<_qDH28T*lnZ1=6B1GSR%n6|SXZHt=q7<(;IMf6v(_Pimc8hnvKBbG}SstSLl z0{;!g(K?@*yS5elOR@C32M1T0g?x6Cg8@uUiH?FoS4$RVLewSu->yA?ksxg(khCbs z2PL%RM0d$3{_*_6W5IO)$|arCF5}J56i{)hW7!JxY3-0Q_-T(SmfzK* z06(WM6S4MrM{-#70oGG{>5&PhI|qMXQF?-g%KReQqVY-lRr3-IHzUd&$pSKeb#PN8 zXa=X}sKO+bu+FPDOC<5}FUomk@jxAUUYG(kc^sAJtteCmCqAtB&784@ZQ;6yfD~#u zBx#1NYwJ)GT-*q(HmS{s-jO}pr4i7;Ax|yi(Y>;3nMC! z4WwPF8FRD#Z2*&;4$AS*__En%BV*PWS_6#I(ENT(SC^56lQ<#GV-d=bndPVuWAJ$) zYE;F{CIpJDnls%mbfPj5r9@Q9cHwc38T%dxMjz`5U7|?@ht^`u>5$$ME2M2&AW-64iY+A@7yGNS9hy`O z!HS{iLN#~$&pb1o5o>?%j0ee$BNzG5(8x`Yv$VvxxUc>=04#58T2{8)ulIjk$RJHI zk1U^jl&Ovtz?iJ5eR$~6z{+w6@9P%=KZiFVt}gZpgE^RPb148+;H#b8X%!aD1E_2{ z@S&A@dUSIEfVK!QCo9v@8y|%uu43ZAm--P;=mns~Ha$e+yPtnn4&EJh3=CDDrn%*A zG9EKhKVEneiw>@Wfq)NY7N_s){N}acA!E=Bv%`=H!uSM3A($?d@ea@VD+5I8grKs=x!n&OO$Za1#61E4xu4ttl<9w@AAV!rP^h$s4*yULB)CFHp^^`&8ou%SIt9WJAi2{box<{(>St(~d^h9_fsg@C} zZW|;N{L6K}vA-$f)Z)s9ms7?XBuPp4 z?dhI*eJ<%R4r$@Bp_ImKKF+U&yU{}Ib9=VW4c|?qoeO^q&yO>5B2qA%Tt(Ete`Ye5 zscXih0~GKWk?WKpU$;O9#|p9RmloFz7HYr{&d*g&ZC_6a87LvGdfCa$nr@g!eW;7! zw8$LpQ6WSo647~~ZiI?1x^dB5W}`qG03Vq(;Ak^Kgqiu7ybc=j-WU{%D`@_bki}|` zfk~g6E0lk&!1Uiny}KK^VHMEutpf$Pias({WzI|OyRZ5C=rPQOGc3KnL?(l6)?8(F ztH1NlX$IraQ0*`C8Nu}=t)Yh$xonJUBaeaYVd0w-N`}l1yO| zuGR#IVK$Jlfr7^KR;)?s*wVwpu+VDA)eUFBP|gpfdhfqj_&mj?Y2)YTXYOPzHJ>&r!A5*+om6{TIFxV^{Mb=6Qeoat1}K73^3(ofGIdesQ*EhfthG+P|X8 zJPO$M8`V376Lth?hC+@o+>K)MM*AT??ch}?xH@|enFAq&=5K2;u6JrV|P^-D)4Q{g)WSBahp%5>ojV@0VuYz*rl=% z+%(WRq0;RzE5RgrdaR`6G09Gmrpd=ilc#WQDiNt@9%WS>2&KGRO(d|AH zh(Z{ImNk+(Oacn-n-b6Rg(fk}Mh>kzYT-}unz_OkcSRwo|0#LsaBXcOT(&L)+@84-t<2PSEBjIo zN}DpWR;ZRh1 z@idB2j`%`jb)AE!h+f}Ev4-R@DUM5^J`{;+&z4?3dXz3sw2&A=y1^+SrQ0s~46lDx zWUC}7*XlY(zf+>PnUHpyCg$d6rHaDEoinKZno=;$zt^5qxji;S9h8kgTMfsV3oVOn7>lPlfc)Dxlg?Q_0GEo&<3 zTIxb(HIw=3-nT?+!7L!5gFU_!i5sJH@^7N`)!#P8g1N=^7>=s1t5rEnvti@E|Nf&5 zr~yo?O{&a1?4Ty!f*JWzuwi0L;m6~N-#Es?9tVxDf-U|aCRT_V8VwNFt5Qj`9DD^Re=2b;{ zwG@Gswb<{u#jc4Pr$~x5ssf4V|qrq`3`VjEO6DW@Fe@c}%3Vns;~X>u`4 z_sQs&EKb(cFj)yLv9X!&1=eHct0#_KU+H&)11bsPS( z()2pvEtj5m#50HBRTC-Oo-pFhc8=b=p|9TDz^llJ630?!EC)4W5AU<(qb)Cc;#dIg z1bFUdYGfrBZw=TL(--?)D-O7&gF_XnIX{(1Dm8y*UB-w(Hem^WTwU%{4zcA*GIqW% z%jW!+c=u%3_i0YUANpy{Az1?`a~qncnUYM+n1c%4O&%j%LgwUraS$$PMNX}oGGX%Bd@$~>*vDcx04E6m(g`UaAPGUegQJ@u!bKApFnTLQ2D<*KnN^3Q zX}NzCmOiQGA&67IMKXt)n#mbs$Kj;aqF4$6IQeK!_9rK81mt7i1gY7Xb8akTY5oMB z8pCq(nk4Z8hh$43Bv9N!J zpGriOJ?%(=g&An6oz23!7_9QSm}1C2q?A!-r!UphzDE>6t;Cp*sDqixTLMgVbaiq5 zdsef-E;eT_K@fkm^AXg2 zQpzj&il0XgRc3h$At$rS8|y30j1w*Rhxo?E%hbB)R!#m~_SPIQAnS;E2F1h^QY{Jk z=IQP>a0^l+_sumwla^i@m^=BN6dKY8Es8@|Jt~NX4?wGu6^!w?a?&ad3O_>51ygA# zei zd5rX{E;(1aS5-U?%S^AjJcUp--|sTzWtF(IVnMCTsiPp$oh+B?YaUF8GUc-QEH%Bw z*@jgwIVIU_&Ik&|B88frtPmRJwn4%{@T~XEYLpTHqbVcR)Ct1`u}%u>6hJ?wFNiY0;_&Ns`c#NDU{QYSwj2n>hEH z69y&N$OcJ4t#<;QKPP|vfqoBqE6E}pagY&`4@FpXoKaQnk{E&AF&< z?c&(GC=4~O+PKYO>@TMrl0J#93ke9G+%^24LuEgeon$17M@WB@V+6cis3yd*<_SPH zC1bEyC+F{^{*%RlSdxg^pwIQL8SF<>KlMLddkP{AuEYn@awX0_4&!b4E z_GC>MXK8z3xYf^--nvg_e=ao3#W%ttY=>-yD4LZ7|s5DJ#xzSA1&S%juZ+3d}mal$PbeHlSE#kH8 zc@Azohn1f5sQKl!=Fha|_xZfkeCIW8jhVk&ID{cAmW_WCA1UL7d9}K8o7n(lFQt$< z-)obamB2eS@zKR;QuJfxNJ`C%K2^VvDB!+**Xcd+u{l5Q=V17hWSMUoL3yPqkwhEMD9cp_MEu&zuoU>g5l8IIh=y- z()1-ptjvF}P|g{#8mDZhDQk44VdQ>Y>m*k&dI5kYb6C4L8enA@)pD|uV+L)EA(9JD zlekwqHY3-}yAXv*vy%9z65DdnXsncqTn(g}8#?i!_OzYVKtTRI8vL>JTwlBBYMwAn zSq*w%;T5#|RT}B|GLd~8^gCBE6k-o+5wxh4pM^9AdKOe+Z?!d9fKavxUYkSk)G zD_&8nkn@g)ylxz)6coF~ACW_QfAFL7|i+5XDJMWmG1@d8c&Pn*`o#GE0fcx`0V07DJmRhtT(TuX*tE z*WB54?3p-NV(0c(lNjq-*HrZN-TAQ}Qzt#A&9t2P`IM`?5x+RJz~}pt0Pp~J9(8V5 zj^tpGt1|oLoFaz_1a{c30NMmWXPoRTo-Kcw50JnfX|Sb2zj9oEz6H6gb16Rcw?*8U zh;wrSd+xJ3GHFqxPJ*XiT8`oAV+#9}BC%m+|MyL0cEv;kxICa}oHz@S;BW_X;2dqO z7_!2g>iC%}q!Rt7myxuVZ`CRm@>Kd(v4$Vpcx2nTf`s9@+^eZq(?W+;T#xw=TQq;g z{S_?a7wf*PYy4LbZIdaG&RFho4>dJJK@EKGKnTQbZ>j303-6q(#z0M0CBxaPX;-YR z-lrSir`=K*o2(PT1mrwh%QrIu0&0IXh3qvG2&*nA=uGW(#PqPj=29$L7XSoWu=_fR z)YN#B(-8h)@6k_Gw5yQEf{4obkvk!~N^DBp;(BcC zjAN5u*JIpUN-OzEH)eN{-XD%WHB+w{J?)jjlk~l zMsij`BsC~qrbpS`MZ(3+_kFX7nQ+30dCX>tT%%NuzKBoCGEYjcZ<&uVviIv)>|hDQ zO7e|%3ily0zmBj1uMK8z){Qs25opq9Pj;^^@SEp6>=0H?1_;@T5b$I6gn^uhRAPN` zidM-p&NR5MT|v6HQj$|Ot7d5-!rz1dHL8- z+nl6G?$}wBFWE6k_7EEWz2t0u33l;KRi4mg%Tvre5$H4f*h^G6(j^M9Op{A&PC7*MIHT&)yxx3gkyM+M_h(ofoaadGfk4%dyc(qHKQ}7gY z>c-CP7>N)RKn6R>r=x%BIw%)Ql8Z^MW&6q=8J|aYN+=$ghlX9_&v5ipZ`g%&L?jX0 zfY@QPchcQ|Dt>ZAC0X=FeaTJqS<&KWQb)y`hrN#icW5K2s1ZGQrT)>S>= zZ0gsE#|k_g+ZuxJU|6%UlgqI9(J$L=8Mu%?nW`;~cbbulzMX#;V9vX59>GzX0NLKD zL?M0y)98tI(Fa0o;M~4WtKx++uzF;E*x|QCdI^AE4euP=%ZjSm%^50wQcArl=Xt|C z?r)J1L%Yo(+HRjbP~eICoD)0-#CbdM(UrO#s(9U3!)S=L3fzB$spBCiL^nHR*S__6 zjr@ieHI--2kAr_#z0seGw2tvLZRx{kjJ zXLJf@VaN{z#7;KOs2JthdLGM1LPVV!v$n|OL>vYcO4#UL4e?i)>J_RRPv~O)FAgYm z#A})9oW<{ZS+PD8;h588#`Mk&22`i{O({E;m!(09)Z%}OqMPZK+Q^#Vh$YN2_xzV< zAL7n95#l(O5N;RrJNP_uqF66CE>4cPUDn@I*>9r1a5^io7rvMJa4Sr@`K$z z=f%F?_*|h~Pv-QV({#AriJ<#w7Mh*!aLT0aM&(djz!g~OpRp!-QEZ+DCHYJ&WxEM#4$X2Bs&d}Ryn*lEH4Uxk zAwk$pC%Yg>tXMj}SH&WCj4R`bjkzncd;B7!*gDShwYP=(!u6O2O#z7}XFFAiT$}z^A$Q3@CbJ`4G<2sN>%A{kNo6SB! zCJ1w0(+za)IJ>2R7i0e@m{SN+=QV0l7%sj-tBy2Lz%CFcANp++ezAWnX#O_o?vTiJ-VU2EdAlG*Yp*i#QTgc^+qqFB zR5V;j_?C~$@xaNC)=H@q(fF7o1Lt%mHknZ0UGBlhMa;{SxcPBr-pZH*&wOQ1B4dC* z%vqtxwFl_o%@87zh@<9IJ~{6GYNx`dBkQg7{v0agRG#`}z*J9csdRIAKiq%ULbZ|l zS(9R2?tc!_iu*uP`1jjM8g|;!uO9EPCziL4n?arS{hUHQzK7$gN**R@lh(ZeYFSk} zkoOXms7H14G&R!EC2&*s)As#(^rPb>y32hvL8AA-0{&*~^nih;@nq)&+%TIr8k^0$ zAT213~>&W@y^rGaaaR)>F&M=B5krBV})3Lz93y?U*7_1K+F1TzV?Iqpv@QO^e# zV&MCoRo4Cw@S~{=V`|oJ567Tn(9ckM5BnU5-FaH|ijGYBz3YP`O}!Y-QG(D+Tthfj zT6Bt}l8rA}UHscwQQb>tx%K%|=WogL+dyF$PbfXTx8lUjuCphyu0MYlmnmg1Vk|h5XA()t?M{bUS$_FkpqAX9>TXBQYOF2*n$MWkP*+)zVC!{=D``H#unVPkwW z8f;PTk1?vfkxYKW(cF927d~$TMX|rJH0PLTgXCqY?R4T|a?{Em7WsKlqg*UT_@cHN zx$4Kp0pf6@UduCjpVCH2w&fWU9BFT7vT0Dw!b>Niu1pJtTkn6e;%jz-m>ABwwNYxg z;+h-kJ}M@?S8CNYY@{HKJ+>ek#~sQ32_jaBtrkz)MdzKql;p?Mn1jANQXI>2MElyh z$#u+A>^*AEe20y3e7xESt*CbGt?ALs4=Mx5Wan2;-t2I{c~op)DfZ;!dzs&(dmW5} zrRw(VnRJF)-k)Mw(n?oY}155@V(uUnP;e`c^GE=)2g;}aQqWgq@k_C2*&~>I2dI%lHaagB6wV*rl*|= z9ivrS2Dg7rL+D(VF%QK%^k9iv! z-2rp|a^hAjmUYbeh}ntJ@kKm>=G0rS5A*Gi)i+Lue-PxQv4moD1whf1JXfM#EvArE zc>1!Z(~!8o{4*RVAj`D8@9JYt5rW5(^0Hn(%^j>!?iuuxHo_hSDPhm*>a;;JfiSjd zxLAK$@BuazvQ?E#sf6aFKHkBZ%CpluGq!4|tsM}+VZ z)mJ_M0-Yv>;g!WOIz38#&6x*s^_dm$xcz@J ztDfIUFcq&K7hROrQ7zDW$RiKCDKURBr7bAj-O&aMBbxg=bf0%KP{pbSem})Ztlwd| zbJ0uRXQy$^;^iQ&e!yteysgQ*lMeV!eJLMJGZQzs-4n>%+cS{{WZ6zMo>*mDd%x zorCp^na?1_l&q{q1JrPPMXbjyzR!O+&ORv#T=U?r**DT8 zrV5STR&3p|i@qa_>ZR@W9-DtuEc;f_yoTJQ!neffsD9T z3l$tiEX7RDMuRfipjj)=-O+E9^B?2l=sz|4V_lR_E0#XkD-M?OH`suy)28&%`lfIK z9S5DJSZSUo`UEcz{jKY?-aE&*9nGK>D!aVP8ou9rqDb&h>qK|&BxsH1x$WmNT-Th*nR={6H2zZ_B!m2|)K){_Y z`~?d7nugfokjt%+4$OEoe@mB?t zeE|Z?8vilD_g*@~LEnE~GTLn%?bv%sVVm(gK3Xccu4W?dHUE~eZ> znx!^UXg5;YCT*S12KYN>=c4y3nyI=Zm?sd#bjG|e)8)T&g+!#tXQ(%@4*z}lZJK(s zwBN4hfy7d00urN_h|YG_27V_{#jtPi*hKiKCL=KU#RT0(ZnJ+kMSac9M&hux%@Am( z=ff`2R^-qd^;u|DhBMD~9!mho{7Wc*T@E;Az8$W)(qDnLIeJj{!M39T1Zi8hS^IGp zi)gxffCWXq+$+>Pkz&64D7vFtt%s?bPR=T6W8vnu$p(F$s;D6VaXs& zr_kDOFBe3VcxbNr(@f-`&uc|dp#+P>n8Xs9mvlQe@pgaXR5Lz~_2crmS7huMN7mtX zlT(4W#uWqjfXcFbY}We}7ouvW7VF0zkYJN8+|2TI;9o5AgTat$Vm<|?^b{$az4X{N z7c@h$>r3}_NF`6goX1hVenTjcLdCWfd35Bu`V*pT``kxD4l_vAApTOqv)OucGN|BI z-ZO<>)8v0h!~_+VcHMwRni%`ESXQtySk?IkU&-$7N?2~?p=}i>q6W>ahaAiDRCXmP?G-RwpCTQ+Nap!RHglf*YVoE#)L*2Y`Uaz1 z_jPd-2|4N8iD^#!&oahA*mu>z%HzaiVfj9BhUdmq}u+&#L!Hwq8Y2Z#2G=qQ9@N3ORr4J!oJI}^(bwFHpmwM?Q zNos$?gzlxP)T5dhywm7Jb+tjzFS>NbYkAa1Nf1ElsZKS7ME1x-3Q2APG4LUv(xqH2 zg?ICICnFi)w=e({kYLxHkuk>EC%|C0r3GNRXD3?=QX5vY?6eDh8V>6<_ZLym;bjaB zAume4$!>f-6&&)H0jy@LKPEChZ--{HH`RaITmK*rDG7G%J|<#~1u?fkS%ac!<~mb; zIAiQlGW|z+%a}!wu+d>bp9dwCk#BN^FMM^sLU1TW6S4>XE6uy}(61@{-(26F@tE?y zlZcA~Tvwy-O?emZe0qqa>b2gJXIAH&dC}WQqZ6hNq1_k<51DKbuD=cB1W512vCV&7 zMY;*Xdw&hl>xxg(|M(n@ZT-Gn&c=4V99Bhh$C12#`X$GmAXjW61Gj?xetTjFNqH}K zW>(#a`g6!5BZs2XUlx7hqf2vMbBeqEZOK+vJn8AW?I2=*{!Dz`oBRzE@cYzUNi*e5 zt(o#*Gv-t*Kje)-hes&e&7IWU zfG)Y{TNngjP{5;~m+q(a)E?k^#J(WmaWjjb9^7NJ^20aYT<_^Ey``yt+Cds)cw5*K zyv(4t-b8AJlOj!_Kggcmm(C1HRx-n#s&|_M7a?~VRZpy(L+w7t+R%&HSZF zCb#gKSi~*X>R5^bOiyGa;=6yI&vqsvdLJ=qOz`e>u*QleT_Xl;gU_@o1t=!wHd*z( zEfsDc@ticVFT``NC!H_W=T5^wn8({KfsEi_9ewkQuCLh>7y zPks?XfVOpokH{?_WAwhv4z44OwP$`1L!4V=b!(J-UDGieI1JcOY0k zhb2k3$c)1w09{T!I+3xc+l=br2tbkEmEVmHDcnZ{H>1hHIpeB?Uwh$`D_70oU!O?TU!HTtjGmpQjD^=QqMMXitze&g5 zciq}&dSPalbk=@`UUvT3$x8_ z&4B)OM(woSbl|jkN8x*4ACbyt4DA)oG)(X^LtbA=f8#W{k{N13&%|*fuAo)WEbpJ7 z-!HgEPSp?1h|n@;_`_qeLxc5Q&koW~9#h2zbHmw#xy)A@$Af>Ax=f#}hTcu&>@GcJ zgf9yCoU=I{ax|AB0~Ovo($vV(_6%~oxiKa}0jzmG>>FT$dB2iQoix-7)JSnjD3lPTSST0A<*C zJ+WJOD@3xzb+CWwFB59HD;CRp!4d82gkr|NSaqz0O`&@KG^V+>JsQxMKUH=a-4qH} z$Eq9DHXU9X%Q+>kb!a;_Po+%Ajy{#p!sQ#_A>dHT5zOsM$93LGjf1H#6LF?)>;QgjA z<0b~ZsNG*+deHW?Oh`YHnun0Uo57GDkVJEaC7O#fHFX4^QWa_c_CQc8^HF#^(A=xY zzj5-)*nd%ei5Rh!aJdCzAI>AM`to`UBJMNwHou5^& z<`DU=3uY>l+QMz6jl5#?1oH4VfHX2BmRyB+O}hrY6^Z~*_In>{a1<`29QyS6_(s~= zn~go!v#pa8e8-K=#2`&QBId+fdHVyA`bVC)>Ubr&HxP%6n4(aYe9G3wCd{MT-M2XfWb_LeK8}%z>_Lh{@6)E#z{8wM zFDifdEI!J2=V-3w@*p``m~a6V#z2K<;&a`CkHa+2B9Gvd@4;5b3= zL7FBVX1!&=n=3$XM}p=rmaidOQj+SQS?p%S(|1!hId{EQBo@SA7|xp|>?BNQ;vz7Hdv_}4L`qaG7AUBjm{P8y*OL9a(>vR;`z?M$ZyOSr5Nu$oc|QXd!&rcxzt z=xIl7%Q#RIiQ+NFMnD7ZY*N!)#4#4~d^y^>qki-lguQ#{yZQyxL|_J+i`b%m)Ruq0 z^ptkFmZaD&g16z-Qa3RL5mm7Xw%eK*cnpK!L3s7)Zo7mD7{+^CsHjCU|s$+KV};8vsG z?|5fr#Z<|%2 z=7=nthbcf3hpJAx2`Qvf<8Q}x0YF|$9e9zf#(qUo#PfCBQ+CNqsy~^t|q&crB z{<35+e4BCK;Yk$Oy~o3x1|9WL>xCM$y3*1qILd*@DPtxKbn3A1@Xx@b_~msmia=%i z{Wz(YJ(jcuciEB4l3{&2=*fTQuKRgu4}<)&41V>=&J(6t183WXYG1zrp(x*2PEmdY z{O@X2U(xQ81yHMTzvp4mbe5+8JE1Y5fpok%D4rDb^LmQ3xqCZGA=%MR0dLPs;G3Y?PI{ZmEh z{gNsuup?^wTAxak{8f3-lUE{8Jb9ONEY+DtqWhL2SY_4$?nlshC?r*W9#mbrCT_>i ze?PbgUmg24Ag{WU&eeY$>c{o&XPD79d~z$MX+SM?2SeD8JQgI>UfqWkRRC?PsWREG zb0t|4CmJjuT{j%h94GfAcc-aI9Z@2)#qzsYt9CeX)bILGi(JB8_$j`-68&^0<`ZA- zfjiq}T)U5v6vqd0+V90yq4tb`;iii+n$B5ek;ch36~u=bZ`gkl^X&vVk>dE%;_5z4 zWLP%^!>x6qp&K5Cke6GX@`Dbfv0TkTtmT&ETJ;uMssc}OeHDulhX;Fk@y4mbdjSV) zMI{$?V{c%rgaZwD z(KN1lVxoTs7ac!1UYV&+xDm&mPw~V-m#DI4nJEWNj*o&*zby~YO%{T5<&#V=^%H^E z2^vqU#o4e!IXI>4ehM<7$_#n|7YWi~W@&-^)uyNsgR8tD=fvKv7*m~{VIMj<`( zbpi_SF}NZORf*9?ztI&$ek1dztViNyn$_$ztv9ke(bvBzunuqc>pUcRG;^NY;id2o z#25NVD@DsAO*1|aJaf4xFXVV08`iD$LtOv_vkZZBzEl3++jY+k_B;^NrvnAotcQKV zcjbSq#>-!__-(oDnb?C^M1{uZE9W2v?Q4L)9Mo^@@x`BS^skfkDuVt6cTcMwM6s+( z6gv)s8W(>x7oy0GINF9j8>q1-DID{S!QTV#yOybq=t80h`S!UJ7jp1qpCanpY(e_Eko9o=6LPuwQ_x~`-epRgWb2^T__ zi!rvEvnRxrC(m`%nZ5l=;;_Wp9xvU8_9wI5EMbTn@h6YOX=VY(l7$vp^(1mxU8SW| z%jh>Vqeq^+NV>5&!vr$A2C)JoqF(#L1Kv&982IOJ0tv?tUvhr z>=KJgj4zpzLL`~$FsmtMQ4Y(%vR-Isusuwq<2%+%8OD*K#tV*1Jf9=-8k8bB{`>F0 z8fHYjTc%Jw@=1DtgHCEq-}c@nybOQlrS$ZG_M{woTDbCT89k}t1nktj}QPXxfocYv79R*mt&=u~h z4n`|*P!=+e{-S11iixp(m1jRLua*bs`ypy{zscHsO9K%(UYtPi_~~h~tRsILU((u_ zKvf~pCr*=kvL1bZ)Zn78b%S%~nnNT7hQ`V1s6d<8Sf_>}i*G-M{~d}GK3XD6ClGHn zaf5;l*(WG=I|>8TP1(4Rem>26mwE@xg4P|qqASSkq;nhxPZ-2QL*xXdvCP{+HjE~* zhX7n+oa&;d&?WZ0C``5IW0rpua^{I#!`XMLuKTDsuNo}Z3BCA%lD-#bRbYro_fqq@ z&<~Oe4MAPW6BKH@b*x|5$MW*#@rs_T7T#4%2fF4-XX|xzfC|a|NDxn!#Xdg`x5I)% zeCK6w=UXOv#z*xD$fVGjk6h>+$(%?{mH~T6(9Uq4uV7NKD(}=#+)IBF>8!WE2+?=&E%$)?ssRa5Ci$SgsToqx$Bd%z~((HRNX5O56M05%4Y>mAJf?7Tz zf0BHEOURoj&4UQ>xSzH}WIN$R_%d;LFhyzb9#=2v|Ze6NAL!kN5NOw!WYx4xAPE5lB2@hG1a(hP?H661P zIn+n=5%BMghq|^5`oNwOF9h4ETt8i3SpW@xaRTXhLaR~KHTZeS!)Nj1Gr1$Rj=KR- z&CvJ$o)r6mX>)&$_z5B0>sVXj(dQWWqMsKA9_&|mSJ`aR1uoaa^(ooT;A1QCgEvTw z-8IJzWTs*J$8l0$>if_OVT+{^w0t-)2=T>NBeJs^G8DFOQd;r_1AP-wY0OC$v{u)N zU|IwpN4gx`9_}m%QY_wNfgzm1aY!IVUJ3=;?I(wLUMhclW738-XXpY+x}Ye7nBN-n zZ-C;tY$ujy@2>fu0S;R0oI8y*;=O_1(;?x59P2HWoAXbJ68`mmZ1dFt$w ziEQTNe5dIWLri2kC`+h8k<40Zbks?&dYUWqfci*W5boRAhxrPOE#pizninroR^OOB zWi$XRk-ZFTTPf#jmqSqr8pI$^YM8C7>V00$6t;iY$Gt?2@bv78gyhF;=o(Ae1^yG%TxY;w|ldn^{$LuaNJ!c#S8ha-wLC z^4)c$kj`Q#fC>Jr_6Ri&y_5#K-~GcV?f@%qUJl=a##3xlosa^%DBgI&5GV{~v8N)0 z$*brY1JP|Ko?uF{s(8iklQtsY+Ec{-WIuoDyo%yyWC@D{Yd*F~_emPSox99AV=Fa? zNaEhJgmjGu&aq=@xYb`@=pwRvB;UjJ{D=>7*TIBpSiy_Y8Hm^Kr#m=WU@y!B)R-iU~-Bkp;D+#aA>V(8Z3M898Jxz0FAILH6g;2gZ;l$U!X7 z_8hv_ERUZ*`>R#V4)4JgLhwZj1xJ69|CW=xZr`_Wp}4KrqiFxXD>QL9vu8yiWBBY7 z4q3<&)1%=XA3}`tVWcLN0bq8G-q0967fL4d|yPYgl$BI4m87e7HaJGxyP`?W0W6KaxvmBzi-o4!C!haP{)OGs)J z&;k?4+Iss}44=$Kvs%L+575j1okfrf%y%NBTXDz~E0M0Gxc?9y#(w*{jvVgSwhJ5h zZk}Ot&RPAY1Tq~1p5@<2`8CIGAD znx!xLoB;nZ1dFz?auGQl^cfGqy-s%?GHq)EY*4)7euf~GE|63n2c&xh(=9qJ11V^< ztoF5+o5a?%dDh89Fvk=|bN0!yfrpVn3pR*(*?nB1q{HuuhA(-yLwP;%@%2t=tz%rN z44u-h4XNCA%b_|lFDY|>neLAh&W3h2vr7GL1M4%wvF`to9RA;C_6X_m7ODc2iK;FV;n z=4qw{EpZYiokaBd%a__E|0K5x-cx zCzQ4=VlOeIq3saBBl35874Q0RU<$a1q!m+J&p3N4Y@vGQ9jd;Y>?L?m2K!T7Vhd#Z zuy7t@ZgjD1e?4n|<|UXp34}Cf`jYs;Z3=gk(r`2D@b#QadXy9!Z(is6$nfL}t`4Iy-vz^RwMG_9S5%PX?j2$~f14}&C zG{$_EO1QOum~^R2x@|I_?pO}K2#7qzZWmLa3*@}P3^}U0A@d?R(jud%rD;+pL$l0A zs&GQ5J3`f<0oj~J@q(j^1v$=n8O4d`6{+}9^_FFna=Wy;eaV1eLveWUFsX@yWT_Q7 z7BEDK-=QmilfL^sBm}aA_Z>I5)H2L}@iq;-L557$2onX8S^LtC+iwi+?rXD$A5G$4 zsNgsIw8LDEViqAc0k^tb0@zUb{~(MuC4|YhIXQHspeob@v>yI%94&sxzM9Rt%APw8 z`LP=TdkWm+eaWRkipRSoT@)OC#3RO#=juA@@-KCNrmo4O(?aek5<#iK?>fKG)tGef z0ky*!5qmxG@moO5t+eK2w9)N>XWotC{i6U#k+(5(jfs@MJ9UL$wYu$b*l=^;Se4e; zdDKlF8Z|JVBY4RsB;)Hie~>B8UD9V-bZw9Bl$~~#B%s7|_hZ0*wVD3D+rew${aG%6 zbFq4Vd?|Y%Z3c=Fk8oM@HnTToCjN3~*Q9qWWmYWL?D`LVYfsIkKiV12&I+Z z3I7jxbX~keu^?kpNoJIV$x^^|l~07}4$~Tl=qSt=*PH<=ZbT*^2rF}Vy@tyehH{g& z)74`y?4-$5El`K|dFBn}Qf7r^d`^S*gm>Y8i7$?ezM+%mRk(2}ol!oPrT*^X_>L-I zsbUNZnN-L{=9E!K;u(+VUNK(pJSE8f@{)aQ+BV`NRdnOu=U{!{lb@1t_SMF=oLSqr zotvDLq9K~Cw9JtAbBckd5m3-!jH9lX}f5D*pL!C6tu7ZtD`gP@k)UsV<)E%5*$Dh2bLOa zO`kibKHXN9`GIPV^|MW1n~|vGo3)@;l(q+#Tv5dt%z0Sd*WW~cl2M&S+*c9Kr<|1l zYplPFz;Lbjh{;ZxR0XB{zNLuEd=7PDw(SZag|DxI!`)Zc++FVUvoroS<}o;bo9HT6 zhNzN=JE9cOQ^8__m10e^r;NM)1%?hekSjmTew+kM*%tTP@C~f1r3c>%e~7WwM~ylp zc-rN0`Qvt4Ge6qN`0z1H8-4b+YUU~5KP?8%Z6xC1sXT&i1rrBbxLnNBz1ByTsfl^% zyoBmEMj`96tu^cos!)P!PUOvhWHW-RUjV@spo&L~sZ*!(0M=Anh&qE?br2IKXh?<* z;7^QK?RD%mLr&uK;K;?Caud~|DHT$rqz{y9iMk?%aOrzuyDOL}R1lm)6F_j7O<(*a z|5o)j-I*Z4#bK2J!%*hmaFY9(%|!3ebs+P-#~WjWBLcumMi)ML?BRfauoJTp0|AnE z9t5%H%6-@e;*cLen1lXw3WM%+OsO!otOGp2SZB<0B$BZ^h9Ku+X#=EUcK#Gw&AKUC zX6od`&;{z33xK+A?eqELL^hbD0M{c16&f%W8KnnMGsYrIYjnw36`Gs3eD4s;fQa&1 z(~MVJ&c?^6BtmYxDJkiHmQB9&X`~?}{N&%NLw+qOFuAt(uijhT&#gn{yd-jNs7Q5m zlNV*kRrhgdQgO5KGBxfbyn3qH&FL_kh(;_;(_tXwW))_rXKL>J^h5BECCDaH-*gPK zo$45$^5?^7nWaH-UhEb$nwbnQ7z(6ajIPGtFZWT2*SzGS8Dsf>t;u+k@$>U@hzfy& zSt6;+$P3owRq&lDdmt&np;+DS1*mm__)^MwavUBL53GREM&Tmqmm94`PLNs#vSyaH za0h!dAQr?O)igNix2beuxL2}&r+KA-V^~d$Kn5}sfFq@sb|f~|gip^Qn8oscQP?l+ zNRw)$Kw#&$aV776>IoF|6#i&u-xqJ~z?+y7opvcw7(<<9IRp&VE$%7A3qz5C>R9dg zto2jB*^7U93}LNb=3lYbbm{U>J`l%6t>NZkho`FUHH~sk0RVWzXmfO_0u;H9O%ZDo zZQnBUZnKziPzB=tz^o_$aZQ5CL*Cv)51|gfc&qn3oubchs;w30lER(N4PDNY4!o^1(pDrK zR>W~fa*J$u<fbx%!I z4BWAZ^$Su>UyWhd+MM_8OH5!mZOYLH$SwjRbv^}ui~DixI_h7RZzUDqc~Lqh7T8KX z%re8`4AB*%_oYSe(q<<7UzNYfwG~T0c*SLb%(N-V{VjYvl`A?GFE=eTG;63a(|q|d z%;p+l#_J-~eLPY$wN@mP((jttE+YuzpP!){QK~1a>~eimm{FovQni#b7Pvf*t$ciQ zSlI7>->p(edygkvsyUqv?2xoWhS9-yb*zjIvbp;k#$PM@Rw4mmKjFt=+NisGj^ zd||I07vdY2&-M!m#Kpf*AICf3bjb|nNiwndkgV(oD5C;)*Bm+4tv@d@!{X3y2+OJ@ z)y&x%b%Q)`MU58#0`mQ+AS0a1?b}Ww4OpXpxk|DxpGYUZ-namZb9<}|8*bk}@bcGg z7SMYf0OetLA?iPumIKL!NJ1VH-1?(1|#p=KClepp+H} z#3xn^B`gXf`bz!MlU7}?SX{e+go1L{?b7inYJZcnMG&t3&T7-A&BzBKZ-seRh&iX_ zlU!mT(yw&Jp7Kh#x%!COPZi=EYL8_u(TEr_r@4yBk&q$w^WY>zlD8DGG+;LJtFlszC@LF!ITGRUPvCV!PC?vwYL+ue z04TH-<`htCha8Njse%m~!94O{O0aF@N(I->+rU;PbS3(U*FMSUF2CtZxW0>jGfXZ+ zFJx*=lu=T1)Z@ebu`YtlUQT=%*$L(#dG|xx?E9Mq$-x^)vp5TpXWCx6E~HbgB%dNl z**Ft*5Wi;QNn%lyF}s`-HyL{ECg|M&bLR@J8x?K6k36`;9^HU}%(zu$D90#cSYT6V zj`eYu<_sO2Xl?*G4gt1nTj&b+HU&LST8$FF!+SCB%Xy*q%`X^TULYi zYZr}5zhKRphw8G_3Ef7M^71eo6@R)|oLAgOU&(`T&34u&|15V^$CsdWQYx6Jv_m_O zW@06j#z**{oUa2OwE@D%lz|MAU*!N6o79{A8k?{+Du+C8EbCsFJ@a#aA>jyHF}e@g z%k;15 z66|Gpw!CQ3k=oTP)qIP8nRNzbP>Ac^v@y7(iNGc3Jvrjb85(SM3Q3WKgduZ~CT^C4 zCn(16L6&yG00$+9ks#op=Ek>8N*jpd`=?1R4)$ExuQ;ta+)YD%Smc=PF00g0a{K)d z_r%kT89@1dN=GS=I!6DrTJveRN)x{_+(J2MbwoQFN;P5hu)b@5%T|935GrN0$)GWN9ks=e?R)~6P=fWi@j?+4)*4exx&>a+}hC+I@+vH z6wE31weCmPd{WLm&M}(q)y3GJ>$TuYz+)}U7Id#NEF|G~k8k$vy}#Gb{e5D_t{nuw ztOFY#eNq@9*l9z6o)ZJ3RcvqAinrx!96tWK46CYpDKl1otRDw?c8K~{g@%R@cKTFu zP4Xd)gsW05{}eBop{3|+sr3PfybFBVK;xPv8d-HeayhqPA4RWOH1Fy`FS?36;dmRW z1P!aGr_g8gq6Z=Sbz=Cy{D*)OT0LYvQvcM^oZneXHj6X6NOA6&P)6Z8K&cjYEd3l# zM*n8!r#!ZQ@C$_4Tv3Iij&z31K1xI0Jj_vVGr>K88if~|bK8(&CIzo18&aFpK~)$$ z0~FGN--;`n8%#{a032GA{YD(OL~~Aq_goDAuawpM~DIrSRK$67qNAF>%r4 z5T%2C^0_-?54hGU@i|o$J4#Jl1YY}p4dv5$SnOzjd?K$!6I?PioUt4@dd!Sz8(Qs% z(lWU^k*&{JJ|h?tfd(_<7-Nu*Vrq!%1-<_K{KSy)+|Zf&tkb+WopzB+Z6zQz z?dP;7HeE{sIF_6cXwo!0vNy&EON2(B4SxnXLtk(hqa>IsZ&9~l^^$hO_W=)JOm!;y z#UOzqfsd2L?pNz}RGzu5LQT{;vwGn3QecaJAoZC5?1AW^!iMb5^}T!^H1rCMRV^Ta zeTzB{mwB6NCck}3~tJ9UblwF=}1Rc7+dVIoBT_Oxy z`T#oo)-aqU_TE;QwrS0I@s?Ncb7@{j-Rbb0bkp%z=QFvRoXYY0LH?JM=rQ8^rv!28 z$dWq7$pU=%jVW5wnFV7pLrAze;Vr0AC*6st_l=?@m`CFTN&Q{5)S^K5jPkbFwaa#rLJoVZzk_6cGNMe>~i>d|2;&%|6S-4AD1`>-4CM#>{lc8*QJ!%srNnF zJnZI)+AXO)Swm00D{35apy=Iye_WwKJ5|h({w~w;@igGNvilbWmsO_Udf4`|qsn03 z4%^GavmPL^i*HKZMy`G9Sm`V!HM6lP9jp{+m1|~mjyW4;3CcOymlB-MsQ01@34h2q zcW8bd#_Hk!L$nJpO@Z!jXiT_zT;NH#1~Ub74g0lny-?E9B(6zjeq&01#V{L#h2)1s za+2F)j{kR?T%-%R?Jl01==7mHsMsP+7L63@KF|4D_Ud|~;qk;%Z1q%Q9rffx^>VWa z#f2C5NSb(lFJ&WzPDj?hu;v(}``M{9FQnw8@CPA-igD7ZDak+Y&^x8y&g`*8QxvGb z0;?GfZRoNd0CG<30C3oUQ?HGk7dTf#%d;?tvY_*J!l=wAFd{#(JgY*xGlVQ~;=PWp z8L!e_w@}n1vK@Q$JHf3}&Ieu1#WY$bxrp7=)Ln5DPc-c}$N{9k0>Z&?n5B7TiR%xu zG3WXsOftRwZ>4!QWNld$ihf?JPx)=@+b;b8W^v6TBhDsEy#eZfpop|F;I1XSIce`E zl^{g?`*rPb=ffYr%%5fkM1qo5Chc0*+53wi6+Mj(0n!#74!^3|5lu-#ZdM;ibtI{fad+{ov&1XF7+T z!wo-DG3B=5-|cIES;|2z=Hup(TFygn##DZq*~__@6{ZcG%0xG~tL?7|#;B7h(s$2@ zdYwEx5`xTg@b-1i-kVY$ftHeW<4gTg%x)-GX78TD)nP=!-U)JmAjG*7A6%~6FT`uf zspalOdzu%K!rX0*ueb0;N2Ld}774 zgw|bmze1OS4#y3Z-bI2+H@HDBURT%p82V@Q)8O8AX;EAR$?&?_g54>^*6|QsOPaVs zpp};H;y8nV!qNsp`nC2>J-7|lob&QppZC*A@_36r@G{NDonY6?_s7oDicNTZ2oYxo zq~8>G=1EU~gIbAAiIW$;JwVT@b&HR!6rk!gB<&i(e7aNn{TNM{Aty56frtB~QG(%| zI-mQ^>?Un#iz`TglY)CVw0=akM|2M>zgMmLNXTI>%E;xQ1vQ=!z2&jXUdH3)R7(fDsm z(%~yAJFi4SrtS?As|c%jJV=UqH#lXiv39?FQ;suR%GiueZjumV!Sj`kR9^ipTJi*b zxK1~JM#l}QCVmXKO0YoZujRMZMCDhWR~wdzbwHrO^@a&XpP+V zEa%F`AE^$>uJV^h{tBzrf_$CoogNBXecgC93MM8O&(6STt^v!YYeNxrqEcP1gb4bk z-EZ^hy`;sjTzf4N#BOB|GzQPrBqc3|BBQY<$EqEe6m4N^Az9lF#9(QC;EH@Pq>iC(EI!M7ydg7s*EK=f5qfWZ`yhOCf20%?%C;o z&4Uo0*j;^G3+aGoKsLiyJ|)S9qdlb2s0w(k@x(hcsmI?&wq|3fnqX^Xm;crZ8O7>N zA*pYN?IRO9thpHVi5ihcN=3lny8jm?qJV8r%e_skhL=k3wG2Ck%U+RctNhg%E*8Kp z^+1R2_0V5)Us1!})>4WolRv(o(_t!qOec365p08>Zu5XBt4C*kmcshP!3_G+#QZ{K zJuKr!Vj}m|slh)i@;?^jrG4*XDyvPn?7tU}^hUvN9UGZ=!)2?m3V1xb-mm(%HWmtV z(|MsP3!vw9#A}3ATz@40X8i>uL{||gHw4YLbYoVT%-^S%0>FK$J3!V80_2&P}Xqlxi0wY z&S6508>P)PtBs@Rn7=V#>L{5%dCwP|yBqwj1Y^i+#VSLSA9MV5PSYKK|B=p+b+e_f z&cRXV3G#8%n8eSIO0!x&(4734*kMRvF>eXdWQ9CYCvD%?B9(=#0WnY!|6C(D|BjIBpa-#LvB$X$|(F?WQhHi;u*9A zxohq2nCIe!gXJ+T5*>DbT;bD)Dck1EmhQRQx{lK4w!TMW(HTY@rf3@Z9oOOUo#Qh5E;l7P>cGbQuz*#tMFea)QrfdWXQ#VJBJJW45ckShkd5CC&V9{?T(i z%LL!m=AM(rJongt(;z#qwA&|VmX>=cxCn@zJI6)VHGTd>4zxw9D(iv7f2|yqrPTGOu49~pfXlxzFiSc%4QH=)tZAu(0s&HA zFC+1D0Moyf$mHuCgjB`(xwgMNM#L&jUT>C&JIi%H&a$F^CUAx~osrI1OQY7Yo?2q~ z?iT}pAC-Gq9o9TAy=SY$`lYIPS`4ZQ35}MX87K9}4?62%K7>24iRBgs_0-G4%%H&M zbn|}hzM>sq&U%!K2$?bqmU6Nw)e_x9E$+Gv;yWjM65%21fggV5Gj2=hOx}d2-Pdk%8U#FiStQ8AkzW5+GVgBLekYC9;+ga7Hs3YtAzD0B+jm81)srf-?aeQsuM*Bdg{qt^ z@7Vr2pUL(*oGIjg#WryN&JTxxmFfNOzn_;te8^>-n`Ho(Qq-8;nfyh>3b?y(fYdNU9OB@GxJMILm+jc!NRq@4HR4zk6$n;>6)k<=J6 zi?U|BxAU=7M(DGdh{esTsvYy$=5xK{mv)GfGb0}C}JW4x1 zr3tGmcM3O8z!YYTmN#1)wNvkY<6vfW5>*<1f9D&0qQ_-<3Y%UF>sV|)b3XaCEeru_ z%~WA?YvC^HsP~|-qzZYk9Ach;Md_t}B~mo{EnWeLT-c1R4n&2|bl2LqJ2}blJQpIX zjxQPg4s;=#SFe6J`B*oHmluI)nDGw*5h=`iKl)D^n-uBqQUHbjw&rdCY~^41>F7^? zqm5DA5wWxwvocI%j1`g?GvN~1(KfMl*SuPXb_l`}c_0N8B8BWQVWiW%8c&n31SQon$Jx`K~V62HfcBs z`c@Q###!9^R{^6*w$WcF`fFDH7w2enM9v+IKlJps9NwIxrS~s1>^^$@E(q28h^S;K zk!G5k&453Sr+XIjagWr;dzo+n*L7E!5*El9fpSdkTbJn73>aBpDjx)qHf zI}U=#@+0!$(HHxNVgqe&*zci#{C08p+a}=BI!-dV9<9T*P@CVS{0ID7A03By&U)x= zJ@}&5Yu1CtE4H(q%G+c`E-bH17VulrN);5~Hse%xdRkIK7yPYy`5$II2pOblSL$>o zI_K0w!JE?Mj?4_weA1U$KF)N*-PdVzyYMye`&kLHRBf>?=sh~gZ?I5*8S_4Z;4OJ^ zj?qv2{JzcZ{39^yv!<&(FUith+4dgoWEfY33e}1Pv7cPq`$h_Nl@f*XJ1zc^k7m~J z32hXAs$XXH&|<)wfaLlBu)**^tpZy_ej@?{+|6Hje2KHCOd&*5OC8X{#0H%hFET(JT`s zHxfI^)UM?hH7P*!-(evl(_sBa8q&!riCZ(I7D`T<~LEhgVa&tMR-)Gf7t9z zA&>fU`m_InVfYid9?eNCA4X-HsI4c-!_CU%M-#1;ILA(*mCJaPDy{>E&_GWCV_Y__ z2Yrbh*6JI6fJa)lWyC20k2*Ptmg7qr5}mDZfsZko;Nl!uU)pG<1llr2L?->?=qT09 zOmkFPRXW~(EY-|>cFu5qd+MaM<_?)=AAUP*Ur5&-bPCO1V9^Q^zy*zLB2_Uq&yrw) z+)#^MbfuFzQpmhfp=s60`;q4w?>O6g2#E1MrsPFN({h^srjN0oj5%F3!E>e<;eLa9 z{vVeVm<}=b+&l}QoFl2HHqt@(Jkjh7bKCL`2#leBbTrakE=Y5fxl7wTkuISDWKEXJ z8SdQ`&zbz^G^LZO{f@B@Ur&~Bv-lm-c;`|(@>*Ygse~L>a%5DoeX;i4+91XwO7%07 z+niNX>=OATGajpRadtK7{-5X|+dj7!4Bw!VWpD1CBvd2_!Ttb}rHwc+G3#-R?PrKE zz{H+^Bh7Eh6TCLF(MwUS1k%$>ncM^waPl213VV=cSv;&YiOPCBa;lg555?v8t4#AU zo2oE#dr_bt3DH58M***{d!L!X3D)S=d%>E?k!d{%WY8xW%hEu?KM$*bO67WWGdog5 zjQgV)NA-xpF2r|_6N{VDJ?r6I4Q4KJlt)y59c%f*r0+=Qc>Jp}PYSfU=uD;Htd7$C z6iK1l5d`&EvvACM$mz?YrkUxo9*k^^!&W_*_IFv2uG%kP(D?8{cCsbv%8rz$T4ejc zH`FKaREXwp{f7lP<|6ha&kvMEFNOYqf1~nUZd;$k57C^aw!;`Ng-)&^g(L^`NL@OA zql&IZ8J?G3Cg9-#iH#J(D&?kJPNo3=$v5^CGia{+oTo{9nWGEbt~X+tM+(#p2WCN} z^qTtZ$7?y_CERg%q?372{7jho;;j!o%x6ETmu9EB8;v}l_nV|;)_16Y^I@9K!RfcK z_O-YV;l=Qy#81)x!NdAFN9>m<92+Bl8-!cYJ% zPDY#c$V9yPh|TVV*))TkWRHDKfxsvHw{KwQLym)ZxTC6hx0((OUN*+k4$Xi6{il;* zoLkF3qJE^S_r@tHm2fQ~u(6|vTpuxeU#96n=|+58Z#B%h(o`3i+(##ZUBvo-o9An` zmC{s2<~ZQl$Vv*CZ(64?9eXLkX&}!oiLSOKfnj(YtLYf{qR{Q7qpHXu1lg}9ud8Jf z*rQvmar2Fu!nzTe7|1}Gj&}1fh~;se+NSNW&T!I#WY({+eukoW+xhq}jg|a+&r4r6 z1hGb4Gx6z+$|YKr{%$%iZvsMpmgYwIi650~r#tPpaGA~N|Eig_JrS|VTx^r}I?QbD zJEdfQ^chD`%!MZ__@yI9NYXXy^` z5+G8<4*7gsU%G9F3R#-0P{ff00!E?#y2XJ(Y7J-6jDWG5b=30OPcFTGzy)Ej&ZPQ$ zP1YQz!=68gGtucksSw=e9&Cs5jFpAl7KIua&7T}@Rs<6RM4Av9mZfC{^>9S;K^*}4 zp3?O?GC>v%Q&g1z;?olkk~qug`XI^|BTJtFML`$##Up#8c}H(gBnXZ0F+yE8Z6g$F5d5&y@plhggsq z=D2TlqQ~xHSTUQRP}yq%_HKs#WQN^d!9OSZuh0vfnCes#SrxW0x`{wlsl!B6U?A97 z^)uA~pWZJiiU54OgYh=oK_xr+K_;Dy=ma&n{HdezvH8U{>v8W1-2o&WhOw3o*phk5<+T&~ay7RDK=2Sc7%aEH0V998* zE^XR0GnXX#j+!sI_Jzz|Eo_Ot@4B&WGwNkw!kGfViO8ORf=ezrXjIQOKh?oqsXVPE zsHhx?2 z-a#CUdWWn>MquD#PYre~7_R)#p$2Sz@7csm5NBlN<4t$Wut5UaqqM;d_Og zzjH!|$iicN^(5Q-iYGIUt#$B2YBZw%%+`sM&W)IGtgWk@#6`k~VKl$-wAk-||NSSR z$@UU|-PfXsy%lPQ*GU)tIPd42Ghs7k5@|96bJ~{zPj00kvy#G`)Xi!g;vPo6FiB|V zoN8wJlzo`oBn>|n7S<8$^P|H|5N|3QKH`-9K*a(8y1`spIgHh{#(9=);N#5i%i(xx z1D|C;tP}~OPL(;;#8D^AnHfh#Dp`IwSz&yCQOtzn5;0KhrEAOg-G!)C@s{5<(Otr(gf zY+1gZ1>!l!-gtrM?SYaEFWp_7WUlFzdtW40tES#Z5N*wp$doO_RLVqf%olZFX88+$ z!_&%KZ-w{W-Dp0;5SR;e`40ty9njR{ zHf#rT(Mdb?D};X&$k)t3=goe(C4pvxKvM=4 z#>y^nlq^@8vZSZf;dC5k(T_a$3u`%-3kA7-;!Q8*{! z8Ob@V0hO8WPwWc1GzW9S&V)jSxf*3oQqU}Vvb~GD*)>D^rC=wuO!rCM5yBmsl&47) z|0ji#&T!U)zA#5?xK200^v^7Rovq4B>6?6LEK#)PZ41YhUOWg2&Si8_{5pPEK~Ne~ zX9C+t)l@}SD)fg>bCmOzo%yxmDg5v=8=;WVsTFsI0AjHkSV5;ed1xW_$#q(rELuCp z@No`bgE7sU>x&*kMTefyvHb|#>Xrj*0?uCMS~MdV`Rb!?;bc6oZ{6pASw?d9IkBRy zzUo7-2flwJV?HysS*sdO3{g*|@o_A<6z5*EO9y)B+zd2x?w$N>@~DxI5z_^-p=td| zIo)0V_LD63J`ldd^)8CUbpgs{9!|YT&(k#$L*sQUUW=`v7miXOFa8;?|6=p`#Zip% zm4WK(UH)~oWnAytnO75ksfs>JxST2^T}sbFZ&m;BHJ=NwW&zIr(%%+B<>pZL{W%Gz zl3adooezhlNL=)YhLvkCZ_MU5&1J~d%}5|yIA5!@Fg*acNztxZyc*xrm};4cw-HS2 z5U<9gNzIhPh@0z5K;$_mP0Eb)sLMPkHp589@~z}@#JO4D2|VzB&0d%@(IKr9&Otg> zfZqvj1ScEHXnpJi%F1R1kyco zj4&L>a>WzM+0Qo}WJ0xS_>}d?(?Qp<*EON7k9ls%jE!t#wN-|U44JAh_tbFzNqW~9 zLA*mojIe9+ea=sRC@@>S?G zpkyu+8$qg6$o>MIeAL~h1@JdkbYMuhO%VeN>dfT-u0Sq-I7{2sw?S#CKkS0PN?hZ7A72DG*6(d*QY!pws-OjKfd7JP$gQYMr>3Q$;5+x4f z+GaCp{uxdH&NH;iW-1*XAEaGXXw@m+HKAl&#nmiT*Im|-JuPsM14gLidB7;$hEkiw zHZ%BDluY+8G;>b6a0(vm=PWILZ5J>D>q7EVcLf4}&!ojb;tBfg1JLUK;EV2_r-gy4 z_l_p3Q2#3llRgFUfdWBaoOzqH-&=rCQSF#nLr>+-aKhJRW|g5N>cltQ7$!_HMz>U< z-Y;~4#PvP|DKmOMU2CTm`~WFz`;s+|QG1Tyt!=eHZUC`h1btkWPMXs&x_l(0Lc2}v z>Nb&o`!wFpv&GcAZu$Ls2xUheWI+0X#Mmns!wDL3dM4*n^zhM5d}Gpw5X=z*Oe^#ETex1i?KDb}8OCu_oYrIt zX_eR2F|+@pK8wbLQ^H3Z34bl7($R_Rr$D;-*n`WhGRNwsQ>iJBe4pzRQK+(AGOYvU zg5kc3sL$tl7)>d`c$B^6PUFdxkNi@$dtgg=flUg+ZY0}fpQ2;B6OovP;611I2eGw( zSY`Nk8ty`$$<#;LP<>c5CQgJOCxWZvE7>HvJl;^|@Lw`JLh|+B{lF^*`u;|n5w7tR~q&7yVn=dxN+%lzZh+D7o zUdL)QR@-^AfH@tiR!mS?xk^?Q?lZ?kyv7BS;jGz|tHZ>1iit&aj&FrfLD@)s$j zRPN{;A&9L7NnqmVj=bjcm=#mWEOy0?#7W(b4MpY6({Pb`yQAD62leF+_7bD&bapu~@_>1N!LR``c&DV( zr(|2A79O5N_bcAw5!j#mWto}Yq{8WcH)cW0zEQjrQkhgrrpDqi3G6&&8D_O(cSI<6 zRL}!b+oN*qny!E%$fY~ULCB1h9a#DPsr#HxVO>wxv0}D!QU#z<5KakA6zB$LT>h&(LXTMdV^UM zCP#|C<{@E6_DGfWC=kRHvdQI2%-XfJ&rS8-yOxn^BA=;kLaxPscO9Z$qR@qvYIlJC zy@e0);;hnMW$ZD9AF))ki_UiijxVgVVWoamp_XE&vGbp2ssfcI6xh$;Qnt~IC$JBi zF{u3K>ex>iz|BU15|?Oxm=}l^iP|>l@W_cs`86@8RIIfszmYG!OY#FoY?u?YTBDj8 zO<-SsPkIoTlBM&1lG}t5!jdLcVAlQOP@&r&K8S9U*b?6kA8HQs3>LR&b1U1vV61wK z(|u->!t^6JGNIghjEHC43@;> zX+5hrIo@wHm?K;?nYq@Q#zN$QM>Mj(ET!QUC15=N_&;!(W|=|`8fSbtwgBb5&Yyh$ z#N`e5e97#81A$z=LF|5K4tP%mPCA4%C|ZoD3RDNBGY}9YZFeahZCJ0GP{NWzjWqJo zrvE$Z^Q7ur(>>Te*oows?Cj|Tlx1>9z^Y&^)L!v$*+DN z&eIRhX;8zOsu*QnMZT$_+4wjAFR=(Y$5xodd;h9L>v{fNiBxLU8g?ZdDwE(&KOyWn zDafXO3>e5sR;B)WcHAkCBi4E=m?=DFLE_xNm=E8X}G5(!5xy8^;)F;BzbEBp#a5 zuk7@rm+V-F60c6^;&?^d@B@D9D+ zI#w3fNzLA2W9g>zlbYpwKhF{a>n*F2@6&Ut$ciw>fB*fAv7m~`33&ipjv(8G4>T>z zUbeV{eNXTtr?$IzHy-mPC_{60f&(w0twqXn@VwU*T3%!cA32$~l*N3pnY<6c_knAF zxIdk}v9XXKQnw1P+Yx3HUIH`CkMAymP|uzCTrYBe$$!_Ooy!>YYbm8pMu%l+#-mmk z1O|utJ_PF`9u%ITJDSIvK>B@&s9L#anp^n`t%HueOb`y|g_KJ>Pf&G1(3WiYrmnL& zB>(vtYV3CqwLH47!nt7Hd+}RgD285t2u{+$F{?)xZ+R{Uq%PclDNF8r zPFuDO;~ir(UOkUUZLY3ivW7y8&A=?^cdU+)&cW$@j>3b%l-^_aSOx;F$+k<-I;J}X z{9to#=;lPoLrZ>)8Kx8UpPS_s%PF=p@nC5rX307hqmDv@DdLkBz1UajUFp&il6w!H z4vZ{`$qyBt;@ZI{2m#fBA4lPTF@offO*<=gH&bpwW%d`5nG8FHJTyTreuMw#-kSxsqD?&(Yr^Yab2JzI6tB!JC#d9Q@{STm` zQ=Ukw=>^W^jC7JbDjLfa@4S^sUa_(iURZlzf&4}&p1WOy#i3;B-KD~o!oTw!Toe;y z;m_gk5YIETHKp8e(|9U>FN@5r73kVR8z}66N1Jq~kSuG(&E?n-*uP)D7b=F5!jO-@ zmio0p#B)XM5h;z)$t(xuchDP5+!5Jo)#JI9mqeSWlJT)NL+C;vH9QY`<_c8}!m&2J zUyDph7 zk314lH%L`;+kZprXoa>vj`FQ8Czxg@OuMWwMReS;p!+_8XN$NF-$wDN zAfERHjR-u+cIzRiRm|z4O>qwjFBWCbL1SU@AF5}M)X|I zV~_GPf2AbJn3Z4j>uk9ogn~ckVyy#abI!1n8QA7GN4Ju}iCGXh&28|zcm~N44!~^j zQH`)uS|#&Za~7}))LM6kVGy~BQ_>})bnJyQM8|HMZH(@J+Zn?~yp^ng3?m^MruFk- z3S$nn)WKJ0!FKCg%o6r)U=kLalbgyi4RA4z7e`ng|p?YF3A}}+vKY#v^G%Qz%actH4 zNlC;^GW^cZ{4vn*>X>{OMPqTk)y(jk_PY+osvHac%hXb6Eb3v~#D2`a^v6$vhx_ug z7Z?+83*c3kuT*mLC?Zum(x<3H7>D4w* zMQhjJ)mRvg*Hvdgg1j8f(il<{m)h6OW{hHgbUYdZXWuy+X3N!Z673uMIs1T85tV*^ zlDk`2ClTqhAqm+;G*97kj672{sa_J(tr3@ihq87oc`Rgay4CAvE6}7%52UJKf-&vWx8>H zZ2m!yKG-An%slWVc9_R-1~d&d#1lQKM?ki7^K8L0j%U~Wv(+^@K-9*Hk@-TmZM@aS2Bfvx z{nA8dkR$4F!4=SV5o$m%KBUFK!OcZ~dz+v6V+_60-hf<`%^fggtPJnb42o+XAC9~d z8n!dSMl*$(;x)A5qhgFdTi<>*Q4=%`5eUb9JV7AP<4B({oR9Qt*}&HN`!j!RL!=-3 zG4M`V;DwT>+70Ii^vsk})k3h$%>HbosGQYqL7JzMFU%x2Gy|}a%AU&l$fNXsFq`9# z)gPq-hSrUvLWbV%*!q7PE`5FM7X*q}yID*f%u7}~WpPA>pv~K%4`s5~t}A56>jk;M z+QOFJL^f`i!P~q^)#4cJpixbes(eK5F})LohMf9NFLiI>(Dc$$KM zAmJLPpc@a~U+Q}qdzjOIF~A@Bt<6n)&?)qR0ZWM!c^ka?Omx;titeXs%DIyIh2J>l z4y=sjkiAWJDq!`;nvq208!QacQ?aq0=XQ1AdEun?aEQ$JZfWM*t99|P+{(V`e|Dbwpx)?j?9>U5G^U=O&s>!IX z(i%1xMnj0<&tr%+lHb3Y3Vynpq43hjucQg~EJ8r)F6eaFaZ5}jE?p>&3RwHEex98C z&H>smN*FnK^^YTnuX7N)lBmDPe?!P@f+liJGz}uc4}$I$jta>)XfZD zT(|k;g{u^r=+AI84f}_oO@5+RfUL-pM;w7(X>ew6( zc2<|WS5kv{gzWV3*E&<6cR$v};&iMM{mjT!k|et{oM(+gd1^+I&tC2PxhgYTZXLDA zO7Gc_o)E_yop3O%8zo}Ll+`toCP3E^e)w(ns}u{)CEUsP>qR5w!{vB^vQ#Lu~x@$(awsv}(r4cldBp7;wXqE}aNwBzN) zhsoK(6djTRH-R%<76rOVR6>XY2D8TvRtiXiLd~x4>C&$2s6TA~?zi(o)X^xuGi%EZ zLCHydKeY2v&W7MTWGxopX`5(G{SH)-Vmu=~+P<0khj_olw(Hm6f0UDDtoI~lN5Ia) zfPg*V_sOBjnr(wWI7l@{kQ3?-=rfGkAv+b`_?~e)#h!SYbz8mKAQ@D;Nk4RkA(LYN z*rF1%A6l{3TCB-BELC?e3#|tCyiy$UFBhcsN%85Or;~c+UAvx4K%(epE6zw>*qg{) ziJmVLhJcPRd6E=Kf6#uhmpLIti>){Dd^Zl{V*m(k*L#2!hL+^=r~gUun8s$9ZC~KI z0>u!AnKk;CD6kAB{y029mXsfnI$WofjdUzsnxV!y%AE58NDbFW5PGPlm~mp&tEazs zSqWqoOWpxveGqXhwbgs#dPWU=A_Z21@Rl3lxqf0ai9u|ye__RB4AdYeVSS=K9?tM@ zo0g0c2oxwjh8;mnFypE6hy@`uvG)xX`&hG8Ffn*xa5QiZW-ze@v>ZxGHg&d)-0weOwvAlZ6RWFDr^G&xn#3pA6c&SLmJBST7!{fsq~7c91yy4#m0HJN0Oa0tBODlg-Oyn zNI1n0y$$IcM%9PBY-twn-o@ma;mr9fy_IJ>VyAATXPjo=ue#JS$LEAL&mPW|7shd3 z%R|8WP4hCZuXaD~j(mzCxo4%UhioGv**kBGzd4TIQiCQp@|8xBKzmqgKX0e_U%YLT z%o}4of9Cmcg=J>GRQ|3d&3+_Jbo58~Uu_%kqUHQ5sZNIp_9YJ4ai9vOI%(JFg|WJ2 z4HDtrJFfbokK_=QrskDYQ^qdT7Qy!$dYHT1yTm&6_a@vO3u%3TwTQ^YUR+QE!7bM_ zp&{o|!Q8Ybg->h~%}#Tc2mG5@K{VCm)I}_Wf9eeldZcwO-%i(8bMXFiH;;Ui!`X|1 zi73XwUQwCGTk*%~TNPj>ACEZyHH#^wPR&U@Ifu$hZuJWl=^fmyU9qW@I*I$+Cg!lT_8rfz`qPk@sfm^yzslhjPa}8&IiL zMU7}p#0*&SKjB)lp<~toP(o?iDkND~p0V_(bQcfwQTEQr4f@+&h`~gixmgYY(XK5< zz>d!{Iw`y|yHrIa0egRQbq+zHlMgoPe}G>V>H3>FFP@EO?$C9H5Ur@&DPSyWW@D~w zipC?L7j@C|dF__nkHR6)D@5^&0>XO)|J0gJd<3<$`*rI5SA9l(T!bCdRKdWATp~Oh z`65+7g1o;0ol~o<9o)yXZ7Uhd?u|Z93FmB48D>6M1*tbWNXZL+`k!6E{fG4U0309_nPb8Te}P&X_+U?Wms(zY@jym-M4guUcPq$l zL&mT%TnwPJ{s)!c)oCQ+JGTjy;W)H z!l5DhHU{3@RfjuOWCD^hHEfroH0xn!yibh{tBqu3*=)rP;KEL<=h&`7&~_@7jX zGzz6isg7=rZ}l5lwcJ1^@2U9VQtWy)@!`{}MSw}6Q_i^8XUX`}dHYsuyEme4qQKxH z=TiBg2G||hjD?02(*Ot9e`+{sRLKYD+sOD7*8L$WFPb zQ5@;5W~s#tyON>Gf0o3r{Z7kWTufBf&fCJ)%x`fur!wh)QYLcFi1{yI_8#8lD#Fbk z0M{*aLUTUB)~Ox4n!^wksVmvyoVa*jaac90TMgpiDS?XgGZk8Vf1Ho7K0WW%XG3U6 z?qzW<&oQGyCjYZ#NSPWBs>L{bpx>tis3bP%R66;Y>YWUsRQN@vIRi0=?cq2L)xxYg zPtPmM-_Sw-AOT4~a2(g6PG@@h#D~`7ozV}5nu-Tc(WnjI87dL(5vbfemo??0qkG#* z%*@7^?F+&OdQ0iNe{?INwqC!lX#H-Jti8)YnarDQO7o&BPP((AoZjk18Dc$L#rb$o`c*OhsJOI5KnA9ADc$ zsFtoX*6{kcG|^ddQ`a6Nm-<-1){gZ~-gkSuUk`u${PzRXdYoH)NkN;NTz9>CN<8P>bjB9A@q|`S3tfny5(*YQh<>4gM^&5jGL*6z-p4s?A1XY%C z0w)wNaDce1P3=K4Pbxn27o>HNt~pfeq*mH~e}5miYQBcSPOzV~&@`nDHGU`j9SqzU zjZIF3xW6JYJ<66*d6g!`p2=Y4@03LHnc6FX+F*2F>PJHu_-=wmq^_5ceVKES`u>h+ zO?X0;vLwPGbS^jebk9@f+H2x{+^ubk%i6^mCuMB#qi=SyV81_cIwM6GX1vh> zf4MufrR|h$X)G#5bID%+KRxSUjB#C-t=dTzVJmJs^bIT}Szf8waY~t9P}? zcZe9Vs)&;vP(L=WSY2t#H$Ml*h{Xpn1BQ8)?4>M4?73?!1e&S%G*{YPLn3vb=( zM_M|I7a83%z%FWA39g=@4OYFC`jTr}CA5HJJVMEs+6 zwu8;74@EnWeEwqlqs%a{C-!nVbAoK;c!6a10CR?H4=_)(!P^ZsxiQ8; z-1WF?@(GKR28wqcV9+0piz~VWpP%bitq|v(*%@w1vXZ zxhivuzq5ll@B>sN@u1{CU^A^Mf9(T`5`i4`Bxjfot>5~)u~Q`GN|z?#X5P3l!j_YK z52(~HnKe@kGaU)6>0_N)*E^eTo&Llfap1#mm-4LP^${9HSAA6siM`J7ydM1xHad*M z^v;u`X5np@*lIkbR92 zCgG-}rlFj?d|_*~$Y(Ave|ifNo~PZUdT+9pNf-^(eOuVSYVa|yX2F}#j+JlMg7 zgMTaAX8K-As`Ol~VfY~&zpN~h!};&$C$C?@J+AZs41l5~pP5LY%8l%E-|obbpj9*O zouDt|yAl=ZzE)~Ge}-3WN$I@~7+rHS=f9)YlOld8EUen>y5Lk~IBR8-K_BQ)2AXpJ zc^|2lTA*!6nd8%!GWJ+Vf8eomX$qeqI>)Eql!y#yqRHHj%J!V3%w?a1I{nRWtfsb` zoxG*bi=kPMCJp|n7u*Q)U6H*QT@;rV_-))f8sE>ou=9sLe}A>%dKjz`XQdj9Utp#U zPt#HXckFQ!b>h21c*#L5smZImMmjanxwWk^)@X>IDUb-SJ(krQvP&RZeFsor_3nn0 z+RnX)UwtpBSqcFHvYS4>0iYS92aXm6Vm>KCS*z(y>rdc<#PZuU>(AYPo&sk!&BJLJbyw5x?vN~9KbR`nN4%+N!m&lGdCx^8%Xdx;1m2P7?b+Cqqx}{4xE-E zK8%~+OIn8_JWxM8p8%wDtGTSo1`$6+7SY-P?HFeECs!PCF}@>(tyX=H;OSQxQBdN; zsY(3wP-;DgKRI$7vL3-nc8k#F_wy|rR%Q15e|W(0q2G0#Zq8W{5h{t7b5FE0{UMMN z=Q?eBp3^M$UggqxA=PKw>D)^H>SRmbzpKCb@hzQK;!NOls~N2?R()yx+U+nIhklE# z|F`9uIge9qSd&>+amYglN4#I{`JC9wYTT1U-hSnFe#=wvf;&2`)OwZ{+DIZAr-4vL zf1o_O6?%bU0tAhIUa}rLub0unsq(He{m)rRcHGzS=G5}5@d0h0sd2J}W$(AO#I;Ah zcIM?MMl-g}@UJ^jbezORCsq*KzX<0^fdBM+5@W#pBBt4K_uu{SH)<5i z#&}KrfAxW^1O=aep7?#)_QX#)&XQaGe+FHFn>5t2VQg)!*?pP@6oq3f&_=nyU+VTPK{#3?wDBZC6LB)Ol;$W z7o-l{evL-yM8934Dm01F_jy#7e_Hc=@dqfrJhB(tK!$Pp_OED6s`Kg6DUZ+$;-kr2 zj^qU>3g-6HEbZ7(KBek*{0<29m9ouiOyAORQb^0&r)d~S z*$t7G88ABN3pX~?nGRh1>;oWcZB9};q`luFZfLvOzCL8O{D=f@IMX3>e{PizWTv&^ zg!=_?&2N`%`}NhyEeeXNHOHkiFV zq(h3$cVa`~O^*fmk1J`PoBCLXu8fyQOLJowsoA%IxOb^@#H3p(xHMj_iZ0DXb}n2M zY3hCNILcvW@gj%pfeB0ze*7F0@p-#O0Y(L)krtT4X8ylr#$ z0SAi?=cLlvDC||-EJLFM?f-%^LEt!3NqGjJ>H^~(dA3x2<9LyaXG6wjqf-D2@w!z^ zU`4F8l61$mOwU@zM*6hL>T0ekOL1HMWdUAe4^G<1Ue};sQ4(Uwe+u6;BsF2X<_lOj zgRGFs;Fs61mNTpBEgOatTD=);M5i(4$sKWwr;RzdxmB&6HiOHwuKOFfB)M)dTJF&B z{gDULkmuk!wH5OOsBcmXO=|B^&A#3e_48bf4DcI1P4?BpY*|{&18MoD%m*w zAHRivy2ARl?hL$j5a94Qk6x)=qu$iB`Mt(P_t^9aj|r-Z&Sda|4tp=kMAic-`l{xs zOEa^PJ1ty2#&mMB;`*Xl_jzc=+HvaqXzw@5$_s7!xN6PJ|(Ga&c8DYXxq?f)%;a<5*bU)R~msV<(fm2aXO-xwtAm$Ioq|Wm7RTO{N5n3CEJeR(EKziBMy| zA7ppJPN_i>LMTw`Ej{7>)PW-5sEKG3fFR`7EnYf)Qi-&AltUf#oS6Z=Jlm|qr>N-@ zKU-vz60$C->#lMQvO0!t%a@FY!|55ze?HTvvaqJT7M^gNeh+p=ftuXg)H%V*bz=p9 zLPoAVtFCTlfW_S)i#KiR0%?s{+CB5o-;W+f8Nxz zpeSkXhBBzdXn^KUY2})}mrfd<7_mXYT?b??bIN%;;Xt*ZKrr?g`068NmgH$iOOt#& zZElA!vZbJ)=*R;L|Fn=<7^Jwz#f%m!OZ{7tP-ZcRLgs;cNnzZ}t!dPTmM5XnL zA{2FkmpPiu-OfLBz$r2O&5|{$e?=&bTBYzB0e2f()TuFAV%h?HyH(G(`;wKs!O2zu zVdGfBi!RFpC0A}=KWfU(PRu`JoKnMiJoaUaY7i~Dj@MHkO!yeByyDGSEv#8sehsZ= zvqU6ot`jG|z?R@lm0s@i=xkXI=eZlS+vi&H=g*(9U)a)SJsyfi59pr5ydFwyBQHf89ANh}+m?o7i0$=HK5|9~wNrM;k@XxI4(p^CpQW9MJFOKY@7gJ8OO zW$ACU2+2=$UXoZS{t=iyax$wSUpSN>|NIeIk0Tv%x+gjJD-X1}CHxMy7{XL{69klb zS0r8IG7g!XGo3)l8wGo?f6}!Lsi-zb{~m-tl=YZA;oxsNS1RsLZ2P>=^ELqa9Ltvd^jh-t5JoJ|{dfb6BCHmH0{ABx#H-rCeZD zzfMz{%`yG@D}U_IpR_?fcLeDmU&ru6@rWd;lfpFfOE(F5sb$ZJf0e}8ea=6jRn)Kb>j#-@!c0B+#0nh>s;a z9{A~UyTI(JkPANc&C zvFM7?qc>AL%uyPs7Ri;s(A=#Qtua67rBG|ldPo{k`U>5ifNp{V2W)*zSY+2tO3t3; zv&t8Yw^GJGKNEfxIAg>CCxsG=dq=W-S2IjaF27f_6zM&Ge=z~(l9?Z1AH&{CYvs7* z6}*1QG7i3(=|8ODJ>9Nz?WJk*I7ixTTNmoipnv!BnXXuN?s>tTpP1PthApwNCBuu9 z*bm<=X}tszLm_mU9g9g%?$$c&N2?~;7zVs7zN9!edl(2p3H`qF?0|yR+xnY_(Nzg_ z+atSo9B$rTe{O}@$jYb5GbCpp@ukB-RL2=C+RiS5n7ZEU z2>oY!OuKm~oB`FQ*Q}#PUt01(TP1*n%3PxrV9O_Ue^$ydY)pT1258@;V?WXR?hU|= zHM8#>c=chHUjLs;Ra8mU=P}f!tBS;ZjHO2&BS4~!hDWdD29lj{d_%|@e`uj7Mr`iw z#!7_}hcPzk^X1u)&tzgbyX~kz1sy@K+F{;h`9=g95PD&7(#@S4Y>b*&xTzS62l2TZ zDsD09e+fHjG|cUb(0%ZD0WdgGw6*MUGAt{f|z74!OVW>FeSKNLY8g;d6OD}!6e~@JpQJFXAt69cOI8lh#(tOAS zz)rQgNfdS)#ha7th5e6YX^LL?nmu>Hb;nWurhNxlIIw6|Hp&mi`g9yPGb(90sgoZQMzjKLJpdQI1lELa{ zkCyXc;efCAv;{rF;hzJ!smUHpe_`=F#iIt2*8AfR{mk>6B3-qXF+5l@`8%$|%Q^O2 zf!8w0?!Rx1KJaJ$=#y5vm#k6dFQc`b^w0A+{2$_caAh3P1cz^cPo|;2$2C=#_4v^5 z+0qZiyAYGlX8Q$^XeCoiX+>=S;eKsrnH{2%eAmjS2uG^3{4&=th8$NQf5~r}-hHOK zhQ9)k!+*~)DbGtQ=Hq)J9BX2CgT`IIwB{$?&H=f+?}!v!Wmc8z8LqaZWF<}ztfFN} z`1W%ym42$3EK#ac5M9{UMhOV0(6T)&8H%cR1p!rpZIiIj$M$3u4VDrx%bmcGJAN=A zCg4i6xEqcak0E>f_uo(4fAlV!St<8LFDbJ!=9Z?1gp$Yd`j>toWhEUW=FvyKwfVsc zU{!M1hrE%h^Z9_XrYTDxAL(O));02)#}etxv3&%B35Du1gfc(+u~)6QJ^mP(dVmf} zM-1F$j*{dW30l@JCO?{mc*P2MhgOEZVu#^$gMx7_Gl&k_(FL@Ke@P@#K)ehYQ?Nwd zszCMFrDU+Q=~eecY>u&|12t>XQ**W3bz3p<2=;PKP336_GmAPiV>{L-;E0_}WxGf4KWomNPNsT)7<-P0* zBU#76QPWn>A{73Ee{gCs_Cyo*a;cYC%I?-xT*L{%NAm^EoYP=M47}ln%B!8$I@08y zphFtY4$v{z1-nxahw%n{;t4tdk!B!=7S(~f$%nEzOW!}Atzfw6_5-s6Y}e}N*~zD| zc#4JQAhAhWH@E(rCpUph*v^e8-;M>|VWF{vER%`*S+o>)e_&pBCvFKljBQ)Ahf z>|L`R99^PC+pTRl5Ho&ogqI~0T9AbsViYk!+t$cV%dq62L@8=tN$GZ>y^WPmi{G(g z%z*bx+i7sJZq9xm*ax`Xm#a8EJ&b-M+Zy${JnzBw$9DIbW?wut-~<3U2L1Db4!PnO z7rOvdB6e7F-*sSfNh!A-#BqC8b=QLlF5gr{c@In+@kx zu_2dxULm?Qv+rlvmV74I_^KTgCT!wvSMvFRF6T0V2=$3%!2~)WWMxLelU1?bJnaFv z#?cS>h`pY?6B19+WZ3^vr)A&cP~=KpDVZjS$0qApf69+&w|KkqBkLpZ@@X{IsuX@| zMDKgw&U2*bcJy~jC$yoyv0<(p(%tO)pPcjPnjXYCEUqG3Ilnhlg9C& z*r{Ode_Y!*kgXnyxFX}usE$5zFq^03y5>23UQE*G#L-p;j22C&$;051yNnzzM=!Cy z8$5%+nB{I!({ox7-Ap(ovsuY?Tp*sX3b6Q zf23lwns{1|zQvOG@=zHp^yohV|B=>%I%8nB>khKw;)jSNdEjoa<%_QZ#)?-g9L+W7 zW|{NnFlX!v#=zrgLK-J0Y_wv0ESQ(c(tXA|eEbs`2cJ#5%wXpeS^~uYHM@?M|D3*b zcTuiKWhAWi+9G0GhVy1#0Mv#`>yZP&f{+LX4!*dc;rcfLXsc|93uS#Nva zl7$`m#;l@O=oZyoXg&SHLD59dykB==`@vHVhJ$MM<(e;h3;`UO4Bwd^cuvTSgfR3STf!)8Mt9} z?J#zu!#QCK-8qhhpJy@(_W;XNFMggS&x~-JV_2;FV`vZ2?R6^alFgS(4>fZyF^mmd zQm0;Wkc}2?O`$opcU7?dyXaofX;zWm6+b%`H^;0|f=@TPN!j`Lf7$=P9b265lw8f> z^KW9F;cysX48#ivub`3}3NB5R=FPIZOIRck*^DmwNL-fWt#J`$F=Zl4rSNyEF!wN; z?%Ug`J2-Q-4$r6eqD`B=y36Y#v|DVFzWHxttaTv%;cM(v^u*l+ZkB&&HmDU>TN$RJ zqONljTpgik(*LXLePDbo!c{U(8g#sH_15ueJ;;f6Se;6>8S^C5J$e?I{#cKN15cOBkg_jn{C-(x(aXb*{)#6$kJQF_STiDl2Bh&Ra; zI8hmMy@0bka;IAV&i70;A$;c8-QuyN57*fh&lzm=!UBB-H>)ce?|P1rzIZkBjJqA@ zK3KPOlJl`h2W+5}Ve(~r%>;3kr7IbK z&-EfnJ*S0_GR3igr~?W2m-uNig~oP5F)6W=G6>f?inCiza>6eGZO>;%?J-J zf8)3{d)y1=Ww3KHOwbOtPOm%Cy)WbAIZCV2F7bo7^`P6NpUTqOVrJ53rY*(y+ua7r zV_P`k5Dsz9py3uxD}qMjluG)>>OsF|W0s35ZTpS?8igHY!hOL45oG~xM(UYK7IgYd#nCr!#w zqi&$72G2Cy8DExQ?W#C6N-ymSu40(0DKQWd7`ZKNklESk4`p+`e71++ttJ>ynS+u3CRl!5Eeke#$I>(af7^Gb zxD}}&C^WQCp=&CkmI1IF_0zWYV=xIXp_XS~jU?G_jgWbGE5A~|lq;_Sfys3vUa_wl z*VA|094@h6JuOmxer8Qk9@5@En3R%SN!HrmV0K{~-ejjO%T$?yR{19S-25spXweR* z!+LG2?QK7%^NO~6742^dF5U4qe?@>VrrH*J-A&kaf^j3|>k^HX4Vg}prOhKKv%Ba4G`ls28g`;WO7 zIcX4GGVwW+3(Ku`1HY3}dxGIQ72WnH7P{@PSSzAYy(gy+fXU5cN+_H z5+B&x2wP(g-T!{IvFasxWag_ZODc!eB;1;F4-(v3>OJvuDz}KZe`(TJvw4kr#hk_p z6FuwNJr{)(Z3AE|I}mZ7(1X3MkgXX+0``G(-M!capin(s>AQG*-A-JyJnq?W+Q$^+ z*QXD*{dI7+5nfEyC@dL{{yg_H=e!L8)p0XJCNRp1@&H}PuKno^!(HLub#)*Kj-##h zjo})Vb8Ng-(GS*XfA~y~{_kt={)fVC2^bxW!0gVPya-4PoSap8)=Nryo~O*^L(y)H zgM@PSAEwXIYb)Qoy(s6zn5#~on zQSp~pt{w-^p~-8TAtG*cofT=RP0gF7eE=}vF~)!mF^`D;f0GKyY+t4M9f%fAg75OV}oAK&}IQR~T9}d|M|RL4(2X+Yv30qKYzaF{0BHHtKc?OboGl za_xfVG;|a(|dn(k4 zfJ%}P;TE^tRlScyq{f}ve^mM3@8ne(O#g2<_w>C zpZ+}Ue_zULq2+BpRS#P`J);bE&>;=BN<0LI>5o}=C*zzSv9g|dC5x%-IWKgA!ult~ z!qeO?n!1loNmd3x=-ynay>!%l?qlp<2r^U7pQ!D(Vw-(m9^NwgW%*ui`ujESKa_6k zxXT?va#5@PN6SJ*c0Wv<2Wclhpx+stP>$~?KCNMaCYmos;Gx&7|c7c754IaYd>O(uI+cxOSPFovVA?z3{l$k zVb~aB7EC#|bT<>L>S}H^=$4V*PVQjEdxYABx5sfYI}wfLdathZ(&LR8C=!p+EX;7=ghP&^3@g)F58a4q zcFXHAK2wMHAYSHlM+GAUc3|6vR5aUI3`$c;4bwF6a{^YqWeCVCC3vYN>*OS8y66)Ku_0F>_7y8~TX9urXAG~eNe~hAY!RvROa8eb)6mJC| zlYCt69GS+h8P47bI33xRJ2s1bHl&?O8A2=Dr0uQ`3LOUj?#W^ZkM^>sF9O|Q$v~zi zQJiVhvQ!ukdYhBD9l12&pkt26+a7tF@v`B3=Bi^4fVKFR(5Bfr-|pacE_{F`mey6;!rIF3t_dL;4!bm>%Jvl>Yyixhmgp_3bQ2hT&L$?{c1 zl5O-@+J)LlOmuNa*J2>>F&DM|)xSc%-OkOI40R1iQ3*ggz0yJ zk>7dvYdM`Pm{7^$q}yyxqX(x&Z`bHN0XQ6rU=iKrnEr;d$GE(srBV`bR{-v zgl3ND3ptE)rfKCowZV2GoqLZ^j{>`_f6IWE7+2(GOS^AgSF*DGe5|Hc<-H!r>wX^jPSlcQ&oE#eDgFG50EhY92?w>BQ_>$Nn1{ROy6 zdj!GeqeBNoR8s(to>nuwFwAs3cP8_f;_MbXjnRE&QbmtqdAz^NL8BId@>g`B3oGGw z;zO}s(sGf0ww^iB-44+VWkelhe^D`0^@b=6s@#?xZ@fu~Of%@!w@mNaHR+xt)~{#w z*N{dzu&~GZeLf6AsN!~idtYI1q?Md*x7E|}JmFi};(*DngbjlKUOth>;U?aoxQ*== zN118d7D(9;W;d}aEn25?%X~%ijhoDDBmp*N91v#~ZHJUc?e~+_fWd_RXa^hxRx2{dhCk$10G{Qq5=P^AxJfrC2C>_f?hlu zQkUs8PDS$&-5yI$lw4}>f9z-fuK2mhmZTUU<@KQV8+`wJW@jY^!;z1OK63Q@6GFqk z!s(s|y2EuW2DR8xM?&~*P>wH$OrMa>gIK(IL?RD-fHYb+wTHomr4B1qJ*-};_X$sG zpeh_@utMIX34ue(jQn+>!yt`@JaT)eNl~u>X0)O+m@H7aK=96We+eR8FT(#*wv0~; zeyW=N^Xed2W{67*V-C|9kho+v!LFR_9Wl?jNvb*Zk>Qvrk1B}Yd@Q=B|G{rH1}$F` zLBH_9{AsrijMz%;GG<87&PV~w%;rFB_IXsA^wN9wHE6bVoZW(gK?xA{fhUWVgQ`cU zsB z-}Mw$#p72tf9tH7b(R@+SM&D&w&pn$+D1#gbdvttSzUc~V`;7OXs%rl!796E`$dbh zc-zT+62#=!69CnMC#1$NCWOdP@ zv8TEApOzLU+J9L-sPH(0vS6b8f0FfZx`w~OQS$=3e-OkixrTc`%^KC$93tzno@*!@ ztfFKZmJpNYjmdWQeR|(Qz+YCmGSfQ6CZB7XKpI5`)pDL(#-+7KJIL!{hTfpltvW&B3W{7 z<33ka=TdS+bsdRD$yFCGxpK;W3h%kyS;Khwe__tY1r9uC>f4Gb^`<4|2mnou(2#rke+8+;)8dMm(4J;VrWMC5^7Ai`)h){37WmcGk4a-aA+1P15fUcZu^C2| zCFqEUu%tojQ$gWlcKC2M;fp_q`5NrRYVDx88$k81!Ul+9sKWoqJ-UF)o!@AF|upx20EYnaIf*Gl*h?mte7n{ZGU+N!D%*>4fSVzRtApnIz6iS;?R*0 zS9O@FjRH zcHME?8V;QQa8#0DYCX-WBLXVSuDPly&b&!CtVIQIHJ+-9R79`I)v^CJHW22+4aV$*4{uta@Ofeto?Y22j0LiItMAC3QB9IoGzFHy+VE}xbm;8#*$}D$b$%D zatgocyyq%{iyHFiLRjk!yOJs%Jb%2r^VrD|LyP;&RbKEv{9O0TQMGf{<4pfhTHa!A zhN039`x2~~XGVgWtND=ius5(ID+z;IqQgyCvEi2*5Y2h|_&+S@)e{)xikzy7W^>ZJ zPCkgH_MFL&ow6R@H?LCX)OAxis69MtJVUj?GPxakd6}UeyB1@HJqB%PD1V%nRivV( z8x8>rAD6_Rg&yYVQw%*QPQclkh>PFbRYgZ#@6=tQJ<5la3Sr_Z%TO59)7RYG5JhUI zXp%bZ(`1k32}n=-ze6*zfg@HP=3f(&`)S>(Mlr*`|AN>p`!IMU^FTm{>>Qb?dJCB) z1D%NBB;=I#6_HdVTr=2er+;+L&X8&ECDlPsnC?IkDgR-k`x%U;t+}XYeZp(|_bjC>#Vs)r{`L z9rp>H;f(r~@91^S>9AHIpXq2-*92E9U8*-!~ zuC3jhb))WXneBjr1K}C8B4@K~N3(8G#t7NuIlj~#S2}C(tBnQA@rSop3BJF?342HqQHU2^;Xhv!M0_gwlQg z2mg;QJ8CL@nEPxLh*^Nk{q9Zg4xCewu-D%wsVK;}sc&H7wrZc?x zfw5{k5~J!9&3~+W0f)vIc<5-vcY6TF~zH>tjwjeROYN zX7!ikG6MgaXk<8{#lGSo{?`Eu;o?W+4=!Dwk|l!b$94%bBiGrFE!R|!2+EULvFd*} z#$m1s&BiRpgrqEn)l&6i{h>dzE4&~WbV3Y5s{dAgb$^Wf9Nhp@-xlFOM{Ptx8wW~1mQY2wY8!cR5Lc~?M z#xtUsD;dJOLBPDexySsj=&B5QHoDcL{Mg-pyfzS8LH5ytGYbcMd?|R+2f)wL2h<{| zQMkt<6Ms+b?BpCY|FT1kCiV+^`HS*7(#(GWIsPxFWD)v{lBO)kEtIAj%z1aCLp!VX z1oC7BlNIb(VLjQq4iBmai0MN1!Vhyb>oj*Yb`jWsiGW*TN@)8>bbb zQK-adhO!9;gWm#mb%`tdYhiv8OXuuN-Ew#;)s!aWryBg0H@z}uYx%%^HA8*d13pEw z3 zYpd7{HIZEL+uh^NrdD@COr2xSo9E@bUV|KnNaa)O8Q;WqBCTuzkba=mc3WJJB%~sS z@NLrb)==%OBA$7BZ%cRINW4p>Q_3&3jep+9|0C{g*Cj`BrBPAO-2WZ-;`}g@B0>`O zs_y+BW_p#=1|ft#0zo>@SBr7_yeUbqkJNP&!0(T>xl|{(a38O<-aIcYowfttNL>0l zVq4)edJUmHyWaX9p}uB)*PY%nT1x5nUE!(U zBo3-R)8Zng3Gv+Ok0wPIfo5o-(zP&ut52Oj)^n@gv_`jJ^cLm{3slf*CKpw<n2xoiL5YpayQW4$6Fv5r0Qv3P{L_ zND37A8vcWL0eRjjSH_I zUcNri$jsM(vRVm4d(gplJS1Ujl7A%8Z^46?8png-N|vXXtBGOsy_p&RqGk9E>7FwnHv?%b zbA#Mie|YU3{GCMEhx|h;@ISpoeqVmqc1>$kHqq~4F9O&-esngucL}#qQzGc5$}4Yk zFKb~iXt!>#dx{*KMN45^vmPJIm;DNBr?L*RG*X`mo%Sgh+krch#D8N`Y^V2*-^=G6 zw)WX3Ft=Z+WmEmg$O9y$j#bJ$L6B&k*}%nH$$DtbWwdcrc=)m~dr|l)<~X9{y`)-KOrNI{DuJl)gKlzOo$=`HL zPq^GvgDibfck8(E_kVqlPfH`uH#V&qHU-?ju2mk-|8>{PDRzCo*~Po3#pwBopX~*8 zew@=-05p%_ua(YA;BF4KNX_4ruThWHgSO4PWB`9^to8iGtcM+$3cV06t@>&vWe7CL z{_9Z5$$Tp^`#IPSXzlu?+B-M(+ASJsN*AS9zW&#dKiQCb{C~m)9jsg8-doabt<@AY zV3_V*kv`TsYe`de$ zqzin`d>_`+RbnRd!r$f_+j`0T+gg$D+Ep^vlQWsL@lkW|R%Ytr!KO@YOBQ>-l)dw%0AC932h4Xf0?YjeW|ES!Xsw`fzOBTpb~szEX~kl``GL(r7%fV; z%LnV!-hV@N`fy^P53Qhv(Teoj9iZ%KpnM^XE8G)B@2Z6M}l2JJqA z1X`^FbJhr$>LEKQT?kNSK=CGRS0b=^iW3o=g|S(YdR4;b8C3UWK6RT@d~9**Wym}h zU`Ix6Af4qy2*!~V0FEJ8Um`+_o2%1q_g<0%Xn#d3#d#o*Jd8weVxOMy<_f4|=UD1k(r0h8U;m;-a?%`Uc*MW+Gq72z zZhd2zcn^$y_ab(RIhxiOAL@NCq%Ab5+kJxgd5weJ4)#lI<@@qT+Xiv>zyR@HB&OTr zrGINyE%K{ZvSbw9{6oQ^t+fV6=XDb#x78x*C5H?rFiHhaicboT^=pLgp$n_n7)c6T zA4|gtj4P{Uwz1I?-OF3UR5Y+8e8VvHICjBNeKNumyNmkDfyUZo#L}p%)`igkhop=f z2Y%V}JBt*2VG2WqdOz1Sxgv845EokO7=H_kfU+d6A{p}9m#Lvhc$#Sag~1U7ggn0| zxpHVnT_&3hPLO7ZW*(lU7PL89i0)Lw$ zF=-M<#Q&4xJ8#D+K^DMp`Z|-|8-mm?y8C4lYVD1?XPliA-jzbjCyy)zO}u;OwS%`-VK=eKxJ8{AzEYa(^;B;OiD& z#e`PR5A*vyBcuMGyydS42pdJiL|)_ItZX@H=fdhYB)}FPzlwVj z{Q-(EqAtL7*QZZ5O%2mNv`f-)Dy2D&7lMGihJ`mg}M%y z?p5YJJk11!=2AsxJf(quQe9zuc>~+LEf}&XNsQX!w$-==%3dO)r?A2ID~EMc>*66( z_qa+uj6e)02sdjnq<%-{!em?ZQ;usUf44?M1qYu znoMlGlA25ajejVhj;tFi(8}pp+6BZ8kGpC1%gpEvbijAjVYGa_Pme0N%Jp_aqGT-Q zb~vDIjSQ7pe3(q6b>^ALX38X)Gf!@V$shi=<(sC$d=535tJuDsvK}!432jaI&aoQS z%sim5T4lRYR{3w8)Bq$z^XW&jh>RNQIu9*w;X<(Yc7NI(jx_1irC(WS~u|hR7GILzZLl@bvv<2QGR!(sT8kQq46?D8UTl&#K z%=+K+`BlXC(&pnE97(?zOV`QS0#vkh#%kDZM#ZhZOmOlSfwqvnrTV^i@lc-)poPnI z?#0@H^ndLQJyYZef+c1DO%3j&zq%3w2h>#i{X8lWamP_qd48wx-l%KUlNx}G1%_b8 zmD!%X-`c6wcl&}bkeYF`wQjC^%d+J*1$h7WwfSqP3*y7KrGzWFmLwx|J7iriqCSCt z;J8hMA(w;nV6T$zuu9`%WBaBKriSkYMOU*etA7J_&y(F8Xd^yTl6zL9ZE}t8H^r=n zU8Y91YeZbYRpP2iyIk!*CWW)R(CPuN)L3};i@*S)8rdmg@Ui%1fF%cE-4v{)y9hv= z7`B*#3g&=4qP964?{e|qmCXkz7Vm7Ml%CoatT{3}I1d+ov=WAoQLO+z;VCbtDi7_4 zfq#{o%yo3;6LfLKH64tP`s=z{z7)k=gR?}RtO2<{00=X+&HTGF+^G(&;KO@~xpsfV zJQqB95!%TgY)1|Q9W`9%I^;KrJ6+sE|uNr5_ZSz9}uW&m1XxA71 zeF6cST}C@rXTWmXa|<2YYwgtxMF$FLlSdL`EVjubSX5KEYAt2LV|P=EI#oV1s(&pl z2zk)Ur~}pQ_q9GQrVgmEOQM8f2H>Ja8O*nQWwW9e3DjBpRpFUh|NQe$lM)-atbYjU zdpdkvV$F}59O}@o=s}~q!G*sg>Yk6kJGZYyM9&`aa);dbwr^w+Z|&0_oSZfVvlY zPlO-E^M6lsHY=Gn#G>KE7IZzclYb%^^93!3O$FvqB7Zw7TICf*Ox z$TFau$f(2AvCCo!M)4}KS}?C6O(d;QXaB;j%r!1Kq&wdl)sRYzL8>J(7t>r5ORaw^ z5iTZfGI>2cVGW&TBQ%JV@L^rqygzJ3)bXfYOtx8RX|wC;4?qiWr^m1wA9n<5`jeTf?2i<0=_nqq^a%sX`W z9c6{C;{r`Hj3v0Jy|4^3KZw3idOiIC1-7hO!Zg~mU6t*ZBUDq_W_TD2e8OX&m;k9G zYP$=Knw&t6afpMX``T(v^na~^BGMD-od1S?E>vB}LySn8(G?p)hSTUphUr9o6p3%r zl$?Z*j_-5fnHha%);}hOnTn6{N9>jNPaK1($t}?mG8D-KMfBVhG zEZg;eSsWxT?u$5aenPj~sPVEOiqpz4I?RE(!cc{_h$a*2lRi0VR)4dl#2xqk*ijAl z8U9lHpFc9!-Dx#8NvzxrG%MFU*Hp9dgjJ98#)%>MT=_w$+pkebM1E?u7Px2X`8{fwZIZj}ATwVr!Wk&bAK9xG! zFeB<_^P!ALf-3$fvwuE+H)!Umrfi;M=UxiX(fBKPLWs<6f{JHSleoBp8Yj59ee=cN z6}2fS6X!*`le(BT$!0^7!eQy;30HqRg!f|XSPp7UpOq*Cr1F9gIWiy>-~*yi+Jj+t>12NtveZf zJ8IBmpcb9u5Pvplas<__MXRg5_ddR6krMK#HDBl*EVG@n{5T3}tIiYVt6Rcp|7jx| zo-DGL^oQk5Tg_l;g9GmOwQP zwXCI6Kx1t8gm`UP@dgrX)2|x4o&M~9S5-U>UL}jS&3|lnXP4?nTB79pZl?2uv6@gX z(WVJr@R)iinhrdNQV+%7ow*em)gjc%?!*Wcb6lRfqeY<4s1Sp-m|ObHe$bV~)~$pS z7L{W^{B~mH4RO6XrH^=RK-!mlv2=l^J7M7D=N%vfU*tB?sNZ1*0N1BMw5{p951iQc z+IP<;8h;i28Ggi+2i)9J8HG8F`jvn3+Y;a(tN8i(0e%9_2n*WN7gi)~cFT)zu22Si z+msk+W*}E2((zo~4V&Mm-AgD(>oDVEX2Z`kRDLw2S7v#14aHC|B6^YG=40nqV1#0C z`)xAi758W)8wK^foH3pm#cX3g>NLVgkjC}}*MB~PF#Pu*l4Y=r%)OaG+GTjJTO5_n zt2x{odanpUROg!9!0;66RW*Ig((AA6;-q^>6EP%Q7+gMbA_pC%5R$-m4n;7n5r~4 zG?;;PxCbwhl3b*I*}@4`nb)%+(d1Y0dQz=sM6al^>L(`1uf}ro)y+yteD8MO^A=TW zfL<^ci)*r{y>M7lnOY(AV8F64vfg_)P=7?APIQu?yK!_nmI^)xHpX4IAplM5aDq|_ zA#$|JC)Vf6Q|Z@n00961NklVd3FFOyv~J8I7;3&MPLn~ji7iP&AE(vO@j8?L=!D*!%JWZnvofgq3oh zV%2XHJLOk?uve~8+H@5>v7Lu(cYi8fAODORG~P}0yE3!eU1-el`%bLZUpk75h^DfK zb8fOzM`MvXHHW%+jIh-7xCWw*Uc|gV7TG;GuKB^2J<_~Rda^Y_V_-8aDU(C%YR3GsP~)z z<4>EziE~(SGhQX9AgEA@o7RCaFTMo_@>(WWPz##v{cuc>8aEBTc&$k*N{o2bpEQg-_E^i4VT24v)>M0WA|AzVl}v#O&8S{E z?9!2_J7G$#@Wr{En*3hpsVz3tTzwbIzM`P$u^c6s%19jjNqq=vK)W(?FWMFumX1;& zio$v3w7gsc4;E0$trCv$c!CK9_iMau1HARFE-XgfszRI0lz9Yu$?DiwhGE7i_D_9(z zZZm|($94%*`K&=o2hVph^>Yz*K^He|1Sanbjbz|ynzc?Jr+IZS#cmhtIq;*%;le;P zKEsWb7Y3uETEH>hpMNK-XOxKJqYKph-(`J;kG^NTMqYV>KF7 zVt%smfS4n2eoGm^w$J#LgqR!uNV3oP_W>`yaZ|dU?KYWtnt$Ri!oZZ(-Kr_TeC1JA z*I&vr#T`((L4iw%0#R>y;TeZsF@d@XaDi`X-PyKlQT69@z(BHwb83VV8eb1ivVlaG zZwNCRsAf|{*;_Trowxq@R9J*2Pj?c0(m*k5lnm;otkwj}Jss@5A5HTOoAM5M7Hn)I z=rYVo00Oq}@_*d%65r|#0$R01q)9m7GBxj!4jmvn!-~$&J0U{7H%;hkryY1WBZ-7_ zzqzbPO_O~iO;rxgR^ z9f~`}>cu(N;QOp*Z)5DrXq5@v`d6r^|4emTkzdO!zZ>b~dtVi!8HDgG6cSYPcqDd< ztGvjnbEgE@1YMgO4)K|QbJ7Z|84>Bi*=Skf*>+YoacHb;jV60ck?jh{4RCkn z9AhQK-+z|vP6h*6E@(l`LaCA8stu7G_@~T7oR=F$55v4sGGdjR&^Fnq?;J_}Xog02 z3Je$xe{zZ2EYf99;5b~NDqtXJV1q%IlgWd5T2f%tq|D>ui-wUOQ$*K!sceki+m4p5 zfByL=?oQZl%sO|$AZxl>`IsD8ipN>hhA2n^u7BEw6PY#vF3}g*TDEys95w~zyNk!R zHD7hv1nY+hc}=0I$)l2)5|-MU%EmD1xqh%-;gp~|5vo(qAe6E6adbW=a48`R;7V{` zAG3dxBpOtz^Yx9`Lt{nk-4sO%c0b)(C4y0OtxTotYH$AQYhgs1?UV%2$)nIR~iNZxORbUr##eJ z<(siN-Uh!?7Y(=^%Fb^N5b>@g40av!et(I=-eW@Umf_`~pN1$w7H4^)2IhG$qu0vZ zA9aDUesOf-tI6l&b73d^`cOeR+0YTNMx!SwrPI=&pW?mv^UJ(ocUzUe87G@qv&Hf` zj0ol2F-B)@oiF-G^8!j=qh6hz+I^8Erk*9=`$1)Swc$VF!la`Px=%Fv@(Qni|2YSnnE(sbtuK6tsT3Jv5{;x z9QUh?rPmr1_98`%r++Gon?<0{F{sQ$=Z zgl_+~Y>tJ-@V6QDzG!OW{vL0+7rpuHGJJfx_2$aV*r$SmN>KYP9zSV*|KNYon+GYT zxlXs-HcHp~-aFz!RiJ>;&7j<&P%a7h(O_RHSnGOLGxZ(cNhhaxBbuW@o`3(x$6+?= z%@{HQi+17hXb3G|a5(D*+>I4XLg1qhzeoxI^Tf%+GeF}QOLh&)bD8~ncci~>?t;wf zGW+$B7$z}3Lxc*83%+bV3Xy#vl57GzA&Bzg=79kpEl?KewoS2hGcR7E$HaHpPc|?s zxwR82bU@)VyCEJ%oIvqoNq;AZ*{a;WyXE;|`Zr^@7EOu(U!B0jzEcq&p-;}-g zx|<$Z=(~|}L#(U~Rc7dT&F&#Eu+bEWW~O-7E?qc^Xs7bHX$;Eq}e+R4A zA;k5LYq2M3f8ud)+b?YP*~9TT32#_gYrVWbb$}glSx1Hg`L1FDa(|H2;yUK?K`Z+l zC%2KYg(GTWamyw9o)${g>yMfGr;CR}VcG*Yk!qDTwH+#-(JhS{b);k$=#A?vIJ*X* z?t<7!CUCdbi<|4vwCg%xRx?ysjzkEXYv{R@>SphY|EEpQTU~m5DQvvBm%!Edh0Vn| zh?ySFCte2VBJQ!eN`KY54xjXX-r-iu6IrV`($jiVcWu8#mtV^zF3Z@rzg0b$q%LL$ z^XWc>?{}zh86z&-l>J9T{TxcG&P#vyC;`g%ech4;~f~rfbHO#5+-+$D8oAe>T0pefy+|73! zD)YG9<;b_9j#Qo)t7EFW(t6{b)vf~cJ8f1K!rLa|ACiS%?1!?g5iXM4Fp65Pa*%Km z6Xfdz?&w*4BcQpT+2I+CtCtjMJ$58XQ|AP8?G?5+iEyCMRDf|c8-o$Pz8Q{o%A8?K z>QU+tBAoR{vVS362{B1Wbq1%7z9?{rXv4DS45w(UD%-@*;3QS%Rbs6oVGK5HqJxdO z-WEIg%3-%jQu#0W2J*n0eTc|sqMXbv%M6QZ(g;~v1Nj)*zf^8kJ7Ohl9+D&AmPaCZ zWBHvxISL9}?FBt~ku8m6h?tkRE%?8vZ(V}GbB8PAuX);Z6H%jd(&EmkY) zXOTI|adqZU#&X!O74kz>rg^0g!PMJ=|u&^*=Hj@84&bJzqB z&ncs(umahkDW-_85O!S^f;H_?GewI;LS82qVIXa+IC4k(vRyLI>Jheq!mIA#_ zZ!2baT7L>ULNyRhCjT({je%{m(MN4L_xcDq9#thDoQB+N-AEO9Yy0g??7=g-?#=Za)1#Es{aJ*ZfdP zr$sPdBz@1bNYSk~%^NrgK_OX_ac!=E+zRK}f*`_cUa{}7Llzf)HLWKRZ^p;b}^uYF>M)~N-R%Zxu$W*)5l`iM zv@;|2d5I)V#}|{g?*PKVPh*eq>FNqpqgFR%yR2s-;(|Am-Y-L_zO=unM0WECUDKAu zk067c66=|Pn=xOwSfXXyXJqq>&0%Zg-+u%kZQ&eVjP$yR*H)v-=z#}cWfF<6=269+o@0mD?V)N?8 zR=gX_;Gc&gy0BxIAN3Q)LqfZuTba^`<)C&-HVJ`OQL2R|1NcBpvMvp%{;cQ zU+(7w;%WPm+!*k%!5QHiQiGoCV7uJoZ;gWIFK6QWfnN$Vmn`OzFGL7{K!0aZ9!cu7 z>Gt}Dmv}^iV&M?~gyhW1@GpDF{rw@^9m6v*Djd-szIX<$C=hmf*tplZv`FhT@3g(b zpvIYAk7=k9f*!RqK6**+v5rX75T=?|b?-*RKMD{@BOTreP9?!+qDDN&CQ>0g}l@JN}je(ysh zN)xa_8DNJ&76u;!-c1S}qWq(#x?VVJP4q65O zlZ>M|%wU2%Z_DWB@e-65rty|OjStr8n{}F5q01dP^R1=_2?8AvH0^g4@o=vlj-d4W%fIH6 zAWc>4wXtexn@pk4C4bzHcnK){et9*bQd<5+)sQpzzz@(xd9J8K_ZY68u+2Jk-4+Z! z$H!k-dJLh1TND31waEA^_}CVfVXZmM!gow~AytW>zj|tD?|Uz!SADOdXDw0^W^f6H z;dS$`mDzd8_-)PpTE^Z>`D43pU@c_%R^Bst@oQ)fkD(x|2%z30Aqc=zGXcYd!2U1hrE&|p^)bN=5*ck4Wm9@PIPQ^ z2~``Jotr0VoPYJi?bL%J`5t5GqYm-ExMtcv$tIM--(6G}3xudHfTPCoA&wvoWh?O|Jb&%dHSnpBY;EK=0`oM&yN|bp zJJKg40SvgbocnA0c^LUHYax6>BNFU33!xf&!}^QI-%RsYp_&t05*!8cHAWlK05 zl+nN6dh8Y|=|CZS;{9bE*)GH82l)EH-^UA`o@;kOmpp|DeEd>sV&cPepsL*k+svIp z6~hY4R{c$i^VHO73bnP?`zmh|{yJGiSs4HWTkkOOX!Q&kcRD1XhRpi|ECS6vayRu? zZhvTodYt;6#_{cuSW2b>iyL0oEwBD?P4o+x?_mfTrtQ|2&RiCr#4(cps~wG`=0U0J z+*$MW#0UQ3>AC2POIYf&Y>(Iwyw&rnL;=Rwj3~3p6@>fSz z-2>-=g5Qz|H4r2-)y7WMe}T`GAk}aVSaNLAIbpw@rk$ar8s;~tqPIz}^~=~n4u3eT zWU^NAa(qXt-?mlMor+(Y&WTW-wC;FEop3BZHjY-?ohs5#UXW(Hef2WBTy}KU$9iXv z7ys5f;OJWs@QIx+*dGS6fJ|OXnJ)>5$iHZ^3`!JOs$I+C{=ZTX>xgWl?DCRlzD|Tw z8@Md|rgC1_Aaw~tICcn{6_N!WBYz~&HYtO7-6(2O5*WKKb6C)Oz@f?Tv0USXE~ft|<~y%{-~jP{z1 z`o)grqjqg*yX1x|S$7(;32=zFtuel0h44RDmdZ1}KHmF1>+wSNwIefo^MB4l|B`PL z_tBKHGCb+|#bUQcuvHLU8niIq-u;*=8meuT;*J-`QtOz-S494Woj}FSlWw7fHn#l# z@btx~52~UGkhSQ!Sz30&_*yoe#Cgkly!xf8SKCi3MCQ0v+TFcOr{1Bghnc;78*ye> zAlPbk0v*&S;wkyE^CI`eLVrWs(M{X}cNFIc-SkbZT@18e)T%C#?CH%p$lKIq%>dP8 zhj4}I)FIqwuUpb6hd9rFYa>mWurXe^)+a;L`!7lfk8f%(bJnBd?HXpHMscK=qMgFA zFAj;|#TvIYR`y@)<^GC9Bt0%PlFRL1sE+1CkCShf3b8`6=jbvvd4J9eaCgW!(%SsC zi@2yeUQ=my?{Cas{o9w4h<$&}s!U}M!*3m3v=D#W`6aB=IhJk9bLC6g3M0e44#HJt z_uIPhwfsdsv9{d?$-#l=y!Wxg>f|9HeqiloiJ^=6A*eJf1> zEqC{soxaj3QfhUZ%71?q8NY-!UqfMJ{7R(8@z=`PG2B5}Z{?wGHsek?_b_(9i<&h) zCxvjC{QW$n)(|HCjj3dvt0t-Q-YKz9d$c|EUXF$`dDVvp-sE$^A|(JNi8_8p4|c z+;DbgeK--rGk>~{2XdZ&wbQlopXO)YY1xcaoK+ly)rr8Tq8JhmyLmi%9w^)6J&ClN z3mrTAH|%t8ewD`cd)l}idR85zWxv=lK8hXLw#wMIxEnQ}fqYwwxaEba7@YWc^#+UR zP-V1_Zd}Rs=TioRbeb6d>;RpykPEG+27Ck^Ys0EmP=9Fyl|85pHEZVd7R83+8!NWC zCO8yQ@H)_GrCbCC05LRAgRkt*$gFPpA(q=ccnunsq^y*3*jLV z$u{{n)Mhe}j!R2e)YBBKL-C2N7{H(RFaKGNfg@^JK?0hP}v8U4mF_(YwPJgmv z_5n*Pq?u;8>UX;+oxAC2e#7dQ(qujSy2*M>-9?6C0N~P2gn>^7@?Qtp2mKNOr-KYr z2?MEn@NMm2MxeOe$I=C@*Il$1ukyO;_>KOwOQZ(H*{a{4MGCwY2my7ho`nk1Z@(XCDKWq6-V&|R zL?9@%cyqzlVR&EmJUwPLsi}+2ygKOQt<|##%!w|E$yyoqhUt9N%}_Ut&PIu0(G=ax zyx!!&W`YJ&JeFF4$=x>J(d;fxJO^Kxs-O2k{E0?qu`3x7>hqWpmks<`K7YV8H0^5Q zAqXYH4KI!$d)ejCxbVZI%G!HlqjUU$H&H#vZLITr1Y@5Ih%Q|iXmXm&_c(e{W~dO% zVI=Ahe``0h`8CPgwtt-&a6^B{BdLBrKrrem7$bs50lTh z_wxrmTdYC)-I%mc*cqy2V5DI!=LIr`U5Xx$QyaH73`LZXbO$D72>oR01zhMTfz|1$XVza8<2yO7dnX6oeq5>V* zT;hHkY8U_MM~Vi?_iF>1e0Nd{4>v(W+IJB%EUq~Htp@iJl@^`#$f#0$k&VAmM&owL zt|9`cTmv`nr;VH8j(@&r#9SGjz;jFLC?h2=(;wW3k?p9#!jb2bnPuL@Daxt+n>yf@xY zvd!WvrJ6dsLjJ-=q|EwFyUAm>8nx_Ct$M%nyMm4-N`So+=YKUH6y8^e9A{nT2}?aS z@G%p4=)>gxCxw>Kt=2xXd3kRDNiOqgk|VfncZUiJlJ{UK*By`Qp)O2*C(`7D+sVRx z$Q%8*;sc5pFDqrQ0_b6zoW951ZH?IoSl2@+QYo z$$A(``IAUqm49u2QamEL))Ss5Yncoo6~*91>UE6QzIW@0x5nC!+2^PB?PFK=?$;+5 zqJP6Hd8gWJdQ%{{3`6#^?9r2J z6R-SxXXa#U)`O*07edp{ff4+j%d}p4r77_=E~+7O_nGo&*{Y-MqMJ5Zd=WMGZdVI0 zo0-q|pXLQXaCM+N{uJ6UmK%0|E4N&E)77n75*!(MQ(kmRL;J6^)&li=a|&hgIqt7NezYvwmAO zb@E)!8nO?v(F&83e5&`ezngb_j9p8*@$%7F>3@&e)^schJ%yUdDu09Gw8oQE8R~uP zSo%)E&dKHxeX+(q+vLP6V_(SDb12Xl=-YL?Z`QbZA9&K67lxT1OzR%@+(*OMxVvau zdTGyw*fv#J$nMHU+?0RaxuFf?@U`m#3RMEK`Kbj4TDWV5S?!#*uvU_ib1|s5b+Ykg zG=CTS$AK*P;c+=}bIT3;FwEds$H~|77BTGu+z>(5Le67eUOjR4!*g9;5pS)AaGF`_ z=ZKw=DH%WD%Vg6+{=D_9^YXzLwM}}qnVPtZA?h$D_Gy0g4|Q|HM7(U^&1T5-g21vn zq}z|;`PbMf(``pgDs-&RohN0PN%O#EnSW){YGp^46kBEHBILUNldZsE-W)6^K(Co@ zsXvC`svZ}kI}Kqafz;~GIq!E44sd6aY8vEcwjLFvMZOsL6?PUVK?6w-e?B!1+I?r* zBoLO)a%dawT#^@G;C@JI*b_V4wme1KwrgbIzBP&>*(|55AD$$p1TY0|?M5t%CV!%w zZH!P-aOV!^B1|jDS=yaf?vrP^y@|vXEz6AmD&wAtpZJYTZ`s<@?`TXVN3{8!IH<0# z7+B&I*p%qaKX0wSav;b8PdGFgF#vknO%qd_)I?iCePYUS#5|mI#i0g;`MQ|> zmG_XEcaR)2NGCq*YA@4_%Eyh#-B9rkBoF|Sj+efv@wHUQtNpG9>3+&V&VQIh3)Xqj z^S2(~a@Az0UGuEw0s4|Hd$HSPVgJpMlU-7kwQSYMfo~X^FmcUi&;1qw4L?%wi>!w| z8aq7!INR#OI$^9^e0td1PHKeM9-V^5z;nfs?X}eGH>38Gx{Y~Q_EbY*CQxf6FB=Z$ zB6?pr4W1`1%I5qvIMr*S%709g2wwK#cXkDWIpf37qz?mTwwE|}>jf$si_qS_D#9mVEYqV!YQ8o|NE`En>U`J=QKvt>H?S(?bK zO}4PzO5Rn-WhmC&L2%NtmPp&sZ;r%imR6Z!zRpAvDdvtkn7e#MmVXtYB@j$k9729c z4E4{@A?y4;Cb=9s!-{vA*}g|N(hhf?Q~kQIpXmz2;cf zQ~1p~04$#><98wz}Tt1pFFY6P`!%5Bbl#iPAiY}BEiZlWCF_youVPfED@(+R<+|uf ziH4?&-$nn+*iu9GgGo*}cy$-IUUn|XmCto5U^Bhw?pMs&vNvt;yktG>1>OWy{s<$N zBb!@_q4Vxg6Ec1fk^ipf(E8OwGvjr66+YJ@Qx$sUhOY zdpW)L#9`Hep8lZB500{~aHJPh(^iN%mPgPq7AtcWoABtuXg8y<+~y-_BVm@UTwf+g zy9ggL2*f&>WF2nqdE%bOX&OYi z=XqG};8>;*(5%(rTOoM=i~TyF49zN&E)>|`UO2BkR+F#%yxxCT=gF&@&bhIPu@6Ou zuW^URwJ&?@;b1qjG1yD>fk6io4c3)OAQzpdO(CkJ;4)NQes-;PK`FTHRj)3w9rfZY zc?^CUtd{EQ9PN19G`#0w6K#EX$y?g>rjJ*6qcIUYEH!~th|F;v?HG2Y0&4L<;dh}b zVra|g2jVrMHkE%|53?skOgOP|QeCDp@4SH6+G!tzj~=o{xs#ch7d4Pqyxm;zjEDw& zf}M&l3f1a8OXri(`qdM((HuBOU`$Kgw42+|z_~1#3bC4lKwvpt2G^~3D9AyjmAN`K{ny{}n!+KLa#VW@vza(_R63)?>O>zs#nL5S1!T*G0Ys^Zn< z*(}VS2lz;9t<|ty>`Qc@Ou;HgLKI@zn%qLGMd5!0RtjftV0LTUwb*9Sv3BC&q*MyT zM^M^KSr0;T{l?8FV~5I3>c5P)uvdmjOQzNvucp;+i$uW=ML9eEl?Dfg?MCQrYsl-1 zj2o-!;?7H$`}d;wSU{f(3%@)Ac`5JCxsgYck%3yTh!YD%+e@%OEU}Y;3NcF;7>aHj z)`EY$wU(~;i$j~rgUt^7M(&osDU-=|IjpC8^0u6TkBgk(gZP)5J|giezXXE7@zrvj zDgE8S+kCay?5`M`pS!1ht9dcZnq7(ycY!R{u`P4tA@$B$r@g)iQI<~a$SgNQz>lvH z2N+mSaD)~KsfM+HF1N6zaDG7u&-1;qS_gj&kQ9O+OABCsIC$#%i>F6vD~ zm`iKgl59e$A|`y#ePm|MCt7mx#dqm&h;9?>A7DvDDsd)4LHze_XbLxY#%Hgc${&yt zAWI#D==5}&;}BS=f*oU2joJ#^`iR^93QrP!>xS8d6}HWd$Tnn1UU8*-+Vqg0{0^NJT*C9p_okPEvq%P6M7GwwN8SDW`=YWuh2yCTnP?$QqO~C!B5?p zoBOcY+XXe(#=-_3=wNSoD!j!Z@bkqg#RW~SNdyQrz~Pj(l0GOmYg>b5p`~6C*;xy0 ztk9|fHfhY0AI+{Q0owLoqe*`qi7FgGCHxijm=~6Yu96Is9UwXu!GxnPQa1+`-i)He zojfkEBD0Z$+9o+KZ)6q#CEq`J2S2JUZ_x_t44RXn7^WD_$p4W@mr8-?$tVKxaNJ z?5PP6n>A&-hj9BJg;ES7~BU@hL!kN zQb#^yv4@C1e_{vf*P(xiy+_Uo`)zr%I-|tdso$K#amtIowu5!rEy}d6oqo1GlY*aX zwO%{L3ybuK3qm0+ZoFhXF0IVSnNC_hx!UR=RQjI6Xu;p})s+a^tQF=cLZ}z-79GyR z@AC!MCgaoS%kdoUhwD%D31djG`>D}~+AfKwjtdm>U^u@itGs_aCFMUc15UkT^<`G7 zue54_%;D1tA@W37fM$yumZ8LM>QlkcUe+aMhB+w{<%%O0r!jc+ z!p|TO@5y5`WW+jGDV%#-SJBk1c4%}M%y2`iY21& ztM`Sy@c(yBh!%glN#-KcPo=1BYuWL)+xjnj-2xUXFu7BDB<`LCqF&27QNYtpHT$X; z%PLV`qZ*PYUa;og#=eo0ToWKX@TlPmIU3j&SKQYj2-p8yD2=5uQ@|VZ$Zlg`LvQW! zF_n~o)39$GHTAq0p5?(cOiFxawS>q5U3kXh;+fyhjH`T0TH4y@@tE+nyKKL=w{QJUOQf6WK8H@uBXLG|#f+J*BAsd}7A z6MIO_nEASCIlG}LNv15dj+@Jv*(xg1Y_0GFy}o}0yIE{_FJ~a-JssG~WgzJp&8)l# zpovaX;&U#rK6yAUxJPOheU6)xMzze0YTzcL{$g6LR7uV>zmzGJJ34MW!-k!9h8*|B z7H;{Mqe6#Lqeurhs&km!$l;fx=9HBaE7rjhP^OaPn{@(It2mqQiyW9VcGsU6^#+e2 zo9KVR`^I>(@rcYb_0*P9_i5jQ+KocK@bjVO7(@b<4oj>mSdCCtWRC8)bEmSo7a-Xz z);W#FSI_A?7k4Ge|mQQo}_{x7IhdTI7qVIUDITw~9K2cS z^6Z`gXyM)K0=U$O0GJE@^22=RU!9=wt6pKYDzsrBG#05qoQLb{!A#2rmI;jAt)_pI zb1(bH1H3PMg8vnt#nEw-$PjhCRvF4D8u1Lue8DG)llMISp)^^TE5qB*b&}yc6^cz& zH$E*BWc50S6_|!Zd5bELwqh5}z%-eN6wy>iIWvGP_NhyL>1HoFOi#^8T4>U&X( zD~6T>nTrsq;is{Y&F2xGCH99w;apcmtDo7kS>#xkFJT2Uqdmyn?yQL%X)}F z@S8r2xz{;Ly_OpJgqeEsBJv93fo)uNNheph@~H)(%1MT8-=#LSys#@|nU#7zk7wdApUU0Hc=L2X2$_Uf## z+4&bqA?*c6sH$i9yQ1m=WEY*-LT+<~xllEA_Ak1&3UOY1Hq>NtAMJZp39Ycn==4BP z<+xQA_L&v_epIolu9E_jhY7~~hMf2#&J%dEdhu5c%HU4Ly0EEX3lo1>=@TgAvcRg>#TE%@gkzRh|K#wOZx7w)g>+T_3B4&s%&!k~mx)!(EQp(`N= z-hUodOofx~u8pd^bURwgs24Md|H{2^C%)F{O^n2UT8|4r&Nt< z^`WwNOwt@h$#=vQ1#+Yv{{;Opa@PN}yqWwOCK1^-LA zcN&~bgoqjHX}{L_DqqQfvlQeYopuaRKh5HHDqqxeY+Kg4m=(i0{*sFtc@TePzHX_+ zgN>Rz=3(YiKYWNQpH4R*4D9QfCH>-(^decXvTBSqn4T-SP4R!O2!TMGZ=i)AugSQ* zH>$3!I9jQsaji0OD24K)D8qa7#a2c5ChD<)H@qo!;IkuVlv3qtf*iD}=|Z}@m$E_O z7y8RGYpsQ|_RNuisRu5Pr#oibpZGIkVezm3!qBFGoqRf_z^prXJob~{%BI}@bL4p2 zGWb@u6Jyf7o!)C1XSWD>dk-eLwGiQ7Tsz<&OvzN6pB@eKWM0{YHFNdn|slo%9X+ z#&;yiJ%-YGSYd~Z;U<%J2G|FDqEAP>P6d}P^ks)?bog44WtqB4%Xkk*eC()+3;u+c zb4J=HZsUKn%S$s@)h{!CKPWLoUJGe{Pu6Qv+s*pP4|M6xQp6+Os*-9o9srgzQfINl zxpa_!ebO}*;=?0?>cLh%QuYj z!q4lPS}I^*eRLa6eAKc{((N^FU7U-~>)=QdIn5L#L3omL=(s29GP{A3{w&F*$E<{; z(puOE$v1hwbsO`we9CEU|N9sMzT20!tQnmw#E>(AiLX68?SV@ z|L@*%FZoJsweezNy2guY4k$Z*>guG^(z$;L*p@Me?ihttnYFmG*%nsWGCc{e&d}O$ zzTu>#9FE8mftLl=M`ye)ksrTU^yCegfw3%Qe#R3WJokosz;^Tg4hZ={y5 z^U>vU%vFPhX=>K10S~GV?@V9#xvz4i(+}Cq2X)1S9v-T*cobXbnw;jP8-+ooZn1ys zONOf+b|^Jk`HVTc*=#ROymnT=Re@hN3U3hZ2`jQNKMp~q(IJ@(sjlGYCXrN7__zzo zNF!HW&oitunW1|4wNwrRFABo(2XV+=xhRyx2`)a|K!n_U2`KeS5o`@G2O^f7l z@1*qg6{7#9G>{TZvWoz_*1Tl;romDxK_ht6ky7gvK5aWmzrB{{`r_h(PQ}^!vb&<~ z)5QJnigF8~PM@ZNfIDE!Mk?Fi_@t%hwnfZ+y0I+R1vfvRBZ9U^3Na)5rSyNvT8dMB zbiYJ>J%!=rHN)qOH|icVlejpG-oFxEtaj4F%bnoG7W~zCw`BaB?XH<)p3<{u4ISt? z2`&5pZG(Cm$;7xswh)f#c+qG_bXXbtz2m+6k+##mN7jejVl6)u7bKQ1AibuTXE6b< zBeVb9A6;EQjfW9PYn{}1`R#w|W@sxJi_N#J`1^pDLukFqV9_i_fSBK$&tdkoMOr=u z_u!qr?zq#@I`q!AnZ=s*uy!WPDNS9+`cF&JeVOzU#mQZu$nzqD!Lsvb*^~T!pzM87 zapY=MD%ivoth!u;Ao0!)(U4~EItD8)?lQgIvn~CDTpm{HyrMl~*wTNrX`4{%mi>7@ zU_yqYRIPT0w#~vsOgKZ>YqYrFtK+B14ZSWQ&}(_{qOjl$Z*Il(cT8)B39t^aDb`7y zWiU>U%`plX>}ngomM&L5p`AXyoSE-WIU%%b_FwLfu^rOQ|K$v}Luj%dK7{Jwdz%#@ zT#=F>gu3HMwiBu&aTb3RazY)UA;rNCAlyh$5GiaeK=_M&;<9C9QX7T?7a+B)KrO>> zeAV1(bzt*cBifV(^r_{LsjRgE7Zv>o_s7(D_8XO-xaxpb9b;pj5E1O^HoGAbscQ0n zkwK6ddAAEog}#x!KK5+ecB%KhTM;Iz!F{>clzpq9tMtx$^t*rW7%@wIyNY7oRccV* z-bY-dW;X6XP%=75^0?3`-7{!k_o~+EXzicfj?h4>R9|89`DJPKn0h22om?d6)(Lym zi)ynAnJSq7&#r7>QsYG+3avt?Lq8XM^!RnVp#_u(wpdj8nJ;sq;o8Y#m787QK)q=LM+UJ zDK~5^!+hR7>?5heZpFuPNC$XmB8rT6=OTwIB(KF?1aW^FElO<4D0};crNJk|5$kUM zq0RSIo}EJ-X_Fa|A2eP0?ULwHB0_v>CMB8#x98*euK{gctbtj}e%9h%lIi>#yB~M( zvG}M9@$Pz3eOd%B(lSXKvDt1pu+#E?EoEW$PzBYJCAXVTNLxV_{_1ng^%tfxAp#RC z{Ov>?=J$3ph_H9H~MY*ne(bJ(vW+9oaoy?*v+BI$#FBNKnbR_aZEK*NB!N zeL6%=q}_W`{gUwZzdtYboIPEWK6nqa9_N3e#LMbaYBod|c>IDUhW2XSKeCJDS6(c5 zhe$1vDTAh}Y@tik%J2OA{QTI@^c4A7_NGYOsc>~!+pOEeQ8O@)x8Z;L zu5o93h;Har74<8_CUrUUSOA#wMWhv{?#gG^s@`fU6lB_~wa>*d{Z<+e6dpb9kz%H& zhO*ZVBIg3&W)nnU2((Bm%u`Lw_gT@J!rq_t2S$x-d|dw2;!0A5$tDke|LJU*N$$>m z_Rr7mzmr=W>~zq-+>U*~40$`CHEg7|TGm{D81R{YkNrIq_K&v5TFmaRXj9&Hw^ z&Ni#z$k4PCS+@Z&5U$pDUDT~0DbQ0HS0Bhnbj6s!TKRmnJ;K6r@AQAyXH_1)o-Sr7F9rC{R7bINAoUte8+3y)y{ zsOR@JLYorht_pHv_NHvtr?pA#TD@$SmK{;w(Tdku&;pb43sx_Wd>}+{EAr2s`=aDJ zakwlR)MKsnM;`10blP#n&c=VeOg8?Dr8KXD*3UmbgggR}wSBWDWlBD}EDt@1u7;p9mGHDATo*8Og6n3AR`nTlE_g^ll!EsK0Gx_@5Oq-S}$*A0{4N;WCt#jdj1 zsMK{VBu_UAwBl!lQuAoJ_jFN47Iox^iGJtMbjm98b5=VmI1YR2;j@oK#sZWdB7{0D zR3vY7?9r$t#2QTE*I<8k83=rLw5^OTamSUy#|PZHt(DPz+G=Q1#$CjeogB)KxIgO2 z?zG3>Y!v5+S}}%3;jM{Ujr`Jf`c05J>90FHOu$(!5M}lRcq+}mJOZ=`uN2sm^u??q zhX@s7jCR-R<>$LRV+A`Y-GHHkXOMN*m}bxW&MtU()JtKlWdnaA_;SLZb#MBq3k)}Q z^R%s!+|~?YwkbCCWY~xH2u&_)t?I7F#lucaLfYoLCnliQaJyRIg0z<^tC ztXgAPOly-n;376#WoSP2v?t0SS&$pfQbjVvm~kX9ZqV4M*PXv zstUm~2T|RTsHcB|_x3`6?7~Z{`LAusl*lPJ=C9K5S$>uIua<1P`1be^-QKvGORIA2 z5+ipt5^zE2jQIqQDiRyl)XP`3@CY?+Eghjoj+`zcuig@W?WOq9Noe0iG`97y@+W=7 z+XOWWKikVzq`j3+TvN#Tg(^fZ?F?1oZCkCgjuNDbc-4Q^<)rrB;S`9I4iL9P`;?S& zw9_9af%2n?S?F9~CvYn|7u~&Z_4{(f#hi@`p%3Jqs@Uqc`g1GJ+rhpe!VezbrXl?4 z$IEK0Z?`$)$~*n`(^Dxd@n`?&%ZXhHHAT9B!Y@;#xd7wcs&n3CaT638?B}3YFcGb; z3g3^giyqAkE;{0kxYBh-sv@kGNWYxC(}yWrPgf|^4+(!bN}$H6}#=qmVWeoE`EQy!&Yy_!vPY14?oN^apR1zQ>*1| zUxC%&eLx_q8Imr&bJiXnY3lb(Pv<2hY43voGf;(Muj8^58eyqY=`56<&V798 zz>x=K|f&TSe7$c+azJbH~wRu&kk~E2`JRPk}e#0ZRD$AJwIUfh!)Vv|cuCzXo$%ZI%;t);aW z3CwS!9Cu|t*wM5aT|Ym&P0u|4l+=D#JWGFc>mC0AzR&%Z`|aQAEQ-Fs>(!0Z^JpcR z8m?|+DR{%ctG#^yR+mCqx+|#+&vhWOPx7%qcS}M@_dU$gIu=4IF(v-??fs}gAc;Ah z_D?E@_5NftN3r46JCfSR&|}Q}o2iHSi>@#GAvJ%>W1VN5A3d#ofTOQCM`zj9<`pVbe1cnr&)AZG zc5e~RBIeO?KNZ?IRXo9*0&H*5^2|QE+sECI}cWOl}_5S-(2&^JM zb;K`38vnfVguBFovBYSLa|U%H-YA1V{H#HbCFV(7<-l^Y2o2OdCy9FV{NiW29ocM( zK6x%Moh+!gvpl0o7Ut9LHdud$&2vYLnN6O47Zpr@vOS8tX!UeruBmwm$8QOWX^el? z1X#o&U-D0zn=8)Ta67AB0NLrT{OSr-zDta7Jq;nUTur)bYkelU6j8ilz3*kYPbt*k z_}y^-Jp2tGb!7tA?|I6*wzybcH2Xi1+s!IQu$Zxj7ao7HI;H5v`fz`AI3HN(vu)>W z-nt5|>^`}nIiJfh1lfWU6W$<@zk{2l)wCMG(JK6Ex5dac`~T~spgEOod%+3MH*;Rx zQ&c?LZ*9CxHh&?+TZ;X>Zt1V4mG(WjG)TDA z$nwEAc((3+iZ5xM(-&j-i9&myT;G-L4Y|>+53a=*%&kutn*?0^SY{_h{CeEOv{W%| zBKzei1TNseWIeQpmmwT#4I6JEl{&hwA}3GVe$?FMzlJWb)csw=zYJ$M+w#K3rcY}a zGW$`r;|^i2X>EV_KIAD0@lot<0srfpl+{PJar3~G+oOohUU4&q4t&3QN3_MuAYgjPLrj7Ra zT40H%!$ITi05paQwR9B1t@9<_rj~jYIPbxG{@%c3((yNmo@5Q|s8Es{_(-0i?Q5C# zQ(HjUxO=!iJv|-e@d{?!l^#v)zF$X_GvBAGd?>&cm?rYO*`-lv^k)a<9-yTZyO&kl zbv2GZt`UEeJE= zi?7)2JALJ6>E7H_zo4p)^e~*gB>}qOrWdr{NqG-xDK{$PJQ=(#gew3T|(7G!V+gHPgu1T z2;D3J_ZfA4gWj>nFyv5m@l;^c5_D*vztf7EK9)yv^Du1t7E`-k93Tz?l$oFg^wb}!fS2+}~uAV;! zP~hw22gV*(?o3RG#qd2)JH1;v5=f${D-NVH_Fo2-v>N6!kI*2X#s$&S0`4~SgA8ti z*I>b;RroPbdlX0uA@cr9GF4ci8x?nraK(Sc{^zH>%NLc2I!F^xqO1EZ#zR83N&C_T zk7FK(>YH~M7;9->asjROv_kxtitAbGq$(eOk?QlfH`08{p7}Y?Cn4AA`O4Zze<#_I z*sqeEbFbcuQWH)1zO@)TEwmHWiB~b!V^F#D`lQtpL1gF??;wh0#jCw_{5R!WE0ljx z$(Qfgy!wAsE!<-;c;pll<_>+MuyX@ zb^m`*t!eg;3jKzqcGFBfM>|vBBGP}fSvMAnJF9V95jr81nwz?}DR217%E!~NfVEv{3{JU;nR;vFuWtTbk z4%_g@38}bl(=vTjePyWQrT5x}tNpEuv4=O#?)m*pLy+d0Rbg)U`&@qae&2sxL=nd) z>s#;Vp~j~Aky8-(cprJT$;9e@br<|nKAW0WNvfp)fE@qO0(Mr)*L#eVvP>&eN# z&&tE(m-NI-zl*+QTKPAYOhbR)&M7j)xHZojYMat#SJjTudx(|tCN@M)vh%}VqEn@U z&LhKKaq!C$>vg-k{_v1+K3I|Hz-Lm2oG)4AZ|s?U!`KF@eIAKmL_*+bW>WSTvq_;i2$UPDVWALYhM zZ?+?!9R_)1LS`FoIxXnAkpK&Oee@>ld4*W)ZIe?pAO~hPG(dK-s5^E|PLI5n;S}rl zs2lfN_loZu=H{x7LX&J}oy58Yq{hx6qo^x5?@oV2d1~qb#~#-#$ui8^%dlZct^;~+ z_K}L$#I+m}Z;n);n}C15i6wT<8i;-Pt=*FQs%#kkd;HOfgGhrZ9(hJPjr z=<1!4Pr111x;@p@!AMm0RJCPM7xE0v5EOMQ;YUzw*Qf7cs0LPXcMjER?=e#9rAWU4 zyFsitrSp8)Y^*oeJ`r5h4|J~y?z;aBp@Dk5`yz@Yb6F3ZNZo&&U?_dZYImdmPDH%}60R!0?0QeK%^_@}4jPyjKsL|DJI(Nl2Mf_{Xl8))}!9$=Ao{16v zUEm-(N#e|xnbmz+7(9xXd$~jwWv1Hivr$(9aT6SYff{*r;Z|H+uJ1Z%B>g5){9zhk zTN!|wM49Ab|lQ-&)hne?djH0jqVc6e$1{GZBWgW8o_4Tk6c!LIW9 z>dS9czHeB4Pa{nV@jZd`t4)|&zYTu;CH-CM*QQ-BFROp()Qqn(sq~jEK@3Q8T_at` z$+cRknOTp**>B4&tGcyX`*HGOpZEbg|5UHsW~Zu9njOa*GgF^SMbT&d@ANB%Uw*UG z@Mns@W<98%HTlGgkbB&ZGs!sPdzqRL4q*8yx+w)>h=)x{oWMfa)wS$j>z$i zy}O^#V}^fLr=^m)pq#t#_VK*KZwkw16i!4F8A7}6ZFlL3T3N`o+swxXk9lkFpGv9j zYZBs6dJZ7=)QpyIeI3|X>ou9LZe4R8z=~~a1#oqnaxQPI^)JN$+JFV^!(jia)T~D< zE^P(vyKN^n@HZRm9{y&q66OWp15YMq{V&Sj!Lxr6Lozgvl;YFG+PJ`&{$u&RZM*jl z6@1z>zNPP@_V+Ki+0oE-tcA7USjCQ&kJ(Eb-U`y#euvaB%}2+QpM}N zqYZxygIya6N3Ka{c#VJQR7!E>_MoXU!pk&m+t=^hoglL!+T6C5-|uv-K-A92SD!yG zxbps+lCPhi%{{Y^zYnHMJ9IamW?k)#OFsu4>*6fI)8Nz>egCnO7PH^K3Eb6*q+A3Fgut#O@N#Uac zHJ+%VCr4N&(IHDdk+iCo8KhTJ8au^vo+iVc!bhtEba)|Wohv?+^T0*?yF{zCulmxQ z#W%S!64IThCoSq@$g#lAwdlOT+-bHBZHtePYoELqz?P>OuaE^a@ znU(kO^9EEZHVAoA%hd1^hU=!#L%C0(w)ssLk?L5H8x7MQn++1Fen9;8I~2(Mbbtc4 z@q22ZD&D%BOm8v%CcB^z>O;UUjh9u|$YBu)Sj5_9V1D~b> z?{jT$ukff9UgOBKcb($`jfMr&T84iw>f2b8Hmp?aFi0zd1kUw#;rnn=J&dzNQ;(J~ z88Y&=tiD=EalF%lP9G_4ssPOmnw)8O-e~NT^cpn6TsAU-R%fkX+k05-z{@J-iUU`| zs&<%DM6egSTne_d4lK1#qmDRy-MVyF&@;?tUNPR?k16=#C)tq)XrV4v2=O7;FQB`Fbyk^-mvy<(__FGb~)@`BFUNvcn&B z-+Py)TyS+&t#f}D`Ij&8SKo^uC?7vZIHT3W$pzRW!5uubfVEr5UNy;f3_xl8*8@Rz!msDXTU?t>0MI=n zQN%@ypr+OF>mpi2ar@orKKWY9vytLVD?(-I_SaUx1(VMv6~;#MnL>Ys9gXrm;_l}2 zY)%3{XS{0!vOR}gzapgJQ!GYQ@V4qJXd@B z4v0Fe=UTFxX%gb*ph;_8kw>VH?nMT!ouapD3jn*5o#`X!L_x)T$mQj`4yR(s@B0D- z%!}=AVd8PuTSLG1YB7J4W&JE{tD|ohu8)zw6Qaw3~?ooL13!wQ}O1OU+9Q+5GQ`V!YSw2!= zYD-}N%%tn#3&v2xKl8lbb?fU*T2Ax*7wg;o=wcz%JgZKwc!R8oLI==H6^tvmua6-h z@kZ;03E~V|c)EnF&uZlPzvg`^F1?DedT*pKq}A4|1uX-6RhKwX=8iOm?+Z4)j1=urhi z-&aplLtI5xpeWTYBOdMIl*`0wRzn~N@T55Dt<`xt-vS7zRw-ar5RGvxwTyf&h0 znA>+|!XRc)^&#f1cn_@ysx9AgU;Ldb9?!T%082!Xg3#Be7WuL!Z`9ppG{v#SeQbi#*pm2zwq4d`f2u{bF%kVo}Q*Y`( zVRYlEQEQLyT9PnnVQ0lxR3Hu`f}!yVlr)LNs*5#8GN*zITd&@`bZ#zt1{0Ac7mkL9zEa7zP^nFeS+j`*8kg2OVUl zGm3xY)=h4Q96($4?tiTj1JY?_W(^K`JP;>burdfA*_N;skSboIrQP6ZS)gF1TCJ9K zjt%xl680X?-lEBW3Z@lkE#M{)qc1&D7BQ%daURC6VTGE^8$aRa(=)-4(P`(|heAOt zeS-3Bg~#DPHh|y)9Dsx&ym+favRsuN?7?=`< z(rVQK>Boflz(tdCs$Tl(KYl|E0IH(H}YpT;^sI4{Wm)Koec; zIO~KYV}*6G!iWg|Pl$yg5gfIM?(R!7bozm=dpClOeiH|U0l^P-=~p3ox`N`w(7}H) z$3DGJm~t+y&`9=5{KI9Ybz)IAU{z&;bC7blE0K2bmX8erI(5h5!&*$$ZPw1Jg4;6j z3Te)5U88s2I};xrK&l~3Bw0mwhQI7jTPZt}+4G9eE@em@MgJwX9hyA9b-v|}tk3De zT5ACp5<1`X$?QQ(tU?9LD*syzvMGPH&yZm^L)DTOlzq~MI1Mxr(uK0Ive9yp>7w+S zR3l5Cjk9 zVUm;E({>zQdviIeHkX@Ld~^ZFQLe`6*b@S(oIqG5Tr;;Xo~P-(xtCfRGg5y#H7k=o zmM;UGb)<2Lg_Co;&fp;4##^5HSNo;$PA+Rz;#zf|?Tcp6qS)X>flD*np${FS!+jtXwZzvh8wi zqawX=Wky!;x`3=@)c+Uag2fAzR2*@Z>xXg1Ri`l=?L~R zE<1(iNOu&)9vEi-(dk|rjJAXF#6KR;BXei2q1u*#v6-z74BX3a>;D^?b?KXrAoAHD zr^yB7ZCbAN9BP||>#wX<^tMfX$|GEBw0&pW3y^-y6P<|&vx@Fzk$5Yy`rvhF zM`zItuG!tamS)xY&p&@Z8D-5lgEa`$QjU?@ZgX-p45LMI&A>eYgKlt|ZTabwX5%+k zsoYtmcEcPrmc5(PP_^iIGXdQQ4-gBKXo?gZ-BlEb2%l)on+2ed)QV8-#$Mt)#w zsd+Hce;YjQaG9w`A~$aS{B#$O?}FN>kT9qfP4GKMg+hP$|MM}p1+nbl$5MY{;2WqB zbrd59sTE^i3B}Z+J@bNU>CGSCbsnCE zM{Vf9ARoc|MQN0=v4HtEtFBR{jTZR4mpExg|nD3$E< z&uM>NgYnFv@({Ldq#`kcp&!^|!;F8pOkHl~;4fE&+AWDNZdoO5L7PH3#vBa$PZdHp zgfr+`NkVckd`n=hUJeAluL-c}k$T&!zFe$8*-ORSMGQI;_t!a>NY%_?eMzoKGU~=U zxYn}@i6?)irgOzvV*E%%_9rnw7+M$cnb;^6n_u04 zS%nZ~41SgjC5G%lb*u(0#P`^g3p1qA z-E`vXabFyIQwfQGi8H?}ui&Ou{&i8&5mk!6Ek<8vo6{zq)G#B@&~^Rxt&*(h{w;sj zw~%ogi96SGKkz@EU_n>5fRj~ZF(mwu9r2~W;Gj8 zV~OAoj*LZ-m?s3GBcx54Z|yYVP0tlzUwIHDb(y*p;#X?XyIilLNUu9FVpg#xX?v+3 ze^H7@a+bi8fy1dh*Zg(W!w6CaGlPF}Q;?w)ssN6aW$zq2BI7Le?L+B9gFm#;QcpR3 zp;=2Jh|JEdHu|gn#2>nOWcsx%_#1J5L*tbALV~s7^vu?G7*}t z)z4#WOBEgu2I!7Dy^gB!|Dd-zGX)83-&nn5KbuZFZLiyPZ7L^rOrLLh$nSr;OgjOW z0*MteSg@B8h^uKoyajL(Mf-PU66XI_F{(#4fBe0tCzJFDEW#*?_=f|=AFseQ|2WAp z+g*M-e*f%UUP80v-AG5hL1b`;{B;-Dr1UuI6kgVw(n1btZmOU;f8RFj zdv6p=vnV3eULyqU(v)$P?!4`O3mEOv0y;_t$t7|^{fsFSSU>jjIE+NDAf1gPrM$R} zUf4RJ_4;{sTq}x-X=>yqvs7B1jQU7CD?-LE_mqtUh4B_{^h;d!OA5HP-#} z^U%o^T#19)yYr?aHPnAUfGn<%VrbPF2C2tCA0@|d(*-QFQ@}}&BYjlyTHK@l>4rHj zRDOQynif@ace+#hb=7WX8GFYaPEN0Ezq1OTQ@Hu#_fwNQcbeCc^Ytfoj(pZe+6wW%>U2h*w7R2Ixa{c z#w9CtcpfT$B#{wD@yAUka>^%JWBvQous54K5Z z9Y6@G9`Ix{KY=#EMht#Ws=<@E9jH#50n$!xpZgXbC|kIZ@{|rKWoyh9gD6xect_2uDj(zs$ED&r>V;D{TfPeAQti_9|N0#KArZf zc@b!sP|55Lui_&$r{PF7y8lgJ)JvGQ^OJ;wjg2ivpZG9?FWN4ZTSf58y(XC}w^u|-(l(e? z-`tPh+u|7Ss}W&`wJYx=Cj+%K3gY$|;f}z7wqFdbqRg@?v#G+Yy1Sk1UQgKc8p>WN z61#Ee;B?g#&*dIuc>N{3SXG>s{q)tWM<9o1NJf8CKw&H`>GgN4){?d5DB|*#xaY8D z+n}Ob1isC-iTYB^hp-QiIKFrjud)$tws3x)c4HL&X?cULgQIvjftFxJio#(nuq5@E z06{|fpmliML~6q@n+1QYZKevqI}u+vgQSg>4Gj&ySTnyITFD#=^fkqV&%HAJa%++{ znz?_q#+Wn80KlIrFev3_-2(mk3>}9%Z?|Ozam71!Hn{N)Bv*bc!ZA?7nA>(Tl`%ax z2fN8tRu6E?{T2JR#`>PW&CC0r^$T%V`JZqN`!%Ob00VDK$hwTX!8H47Fg7lS80EE zl5EVZKuyYPHlB7_RqkilXET7mhFYiS=AJOA?<*35L8_x>;wmjF* zbmQ7cAxh+KYT80~xj7wm;x{*yYZdl}Y)rA2wm`_s1!dgN5M-%3fjM zUreK~(?mf5+_4vN%zLF4cBhSwB+Gxkt1^Q@VrCzgR%Zo8w0YVEMfl^}67KmKp{M1a zKQU?)3%b{37)n2|-Is?SPr_V_oTs1xdW8~g4ovtN@c^NCXgAt#oAoE65^+HIFlQQ2 zD=yji8lb>`MNiV=aP$?yEHl6^uEHCRpO~51vt?=!hyI+yS|W!~G1QPIS^j_6HS598 zImefl^(Vt+#&Qy>%!q4DJFO2$c0Lj*XYSRg0M|Xlr;tK@YjDaw+Vzr;#rBF2hTAR`e z6}4bBRy?W<`3@!F`@`$fivoWP?=}LSWPf}$iEk&_+!nGn)BsOFu)iIDXw*8)O)Goz zPy)B1WqYqb3(pS3Ma@AQ!VfSmfk|!Nt?sbJzM$J(x*4PcZXdrYz*T>KU}){=xxp^i zIqGm<<15u-yy_3rIsm%BSga~cK{b&BYU_s+Xae-t+KL+CWwJ6>@h^Z-DwOzG_J1s4Ss7n#|Q?X~T}WaWHBa`ipGJQVR- zRwUmTrjNh?-N&R@hj1*^7&=COTDm*`qjglg>=QE7vJ-W_mwsSMb&UNMc)EP@uGCh& zYCiG=a30r+ROXW5I6pt}{bhE2eKhx@e913@glbUj>K?}eH8H(a;r*ph#t?kFCq7n= z3VPpgwaxOV#h4rWY=N}ED=iwZXib`}PP}Bi0u%qjM1$mGOQG3|)v?lls~RmIBMh+& zW4ZWIbTuKW0|Xn8osHYcl%fNYOr7*hb12XqEfEoffvbq0!-|?he?c4Wcs5CB4Bw%D=Bg~cJXD}Xr zOVreI(YmZtHV=u7;&b{fApSUQ0w9!ZQtg#v+##+bK^IqV3Mh$KyHw$);<*T|{OW`k z?U^W7M6=F*&T-K~@4ju(uu;_SMQ{JY&osT3Z_Jq~S$~AM%vs!j`L~pd?Uu-JZhjii zG-}V_TqFZRjt&Rrn`Gz=vQPi1z@v@R{U;4|gIE`A6Pd3P_2o+0 z6GEDvR)^6Hd@EODxx31XzX!OJVR+Vb-v`IzA)ozq_-L^jgPAI zCHnp+rKU{kOufZlrEuxZia9VW{EGzK|4=cDE2HT697z~|)hm#59n8TMq#Lr9 zB^}z(fYtRnzfO=c%pGpk)%BuO-d$#_gL9n9jsk3zAD`a#lT0z*>AXKqM1Oqr~mg7cZ}_0&VZWpsqT)A=x|iCYv+3fBu-+ zpSq3Q>BXYNgd$BqV$aEdaZ*QcNt(`;ukBxF|K8Q@f~p)5$l>YfYjDoqJAO6LL2pwY!pR{TV(JDhqbBLgEZ#@1T2zXa^I+mmhgaw9~Z z$2XXNror)h!mqxw-6LmS)uTdVoyLmY=#W;p>lJCyCtdtQU-qsWV%?UYWCxDr zlHxVcDQ8a53(f_~87;N!sO!6Ls(eW*cD`$W8N$p&(o)$1Asy9vCl0q@tWSMI`)wN-=Rsin8L!X(Jrmk6x#Bd%XsccsEG(Bz2C{F zdE5#~HBo==@ASe7LGJ!iK-*r@DAFB&-><*fdG}w{4vj^JW_gxdu!77b8O7NX>sIWF zlsw;xACcjV?A$zyyOR6$E%DU8C~Mqabj5C~E;!EBPf?|aoIg>PfEYUE#a z6&lETIK9u_A}d;IHk8)MeKZ_*9>-kMn)l)SCJ`IIi;Q7UbUuu08+O;{9KRHQ$VL&X z@jc!v|Cp$v^(PANLcp_+)5cLYKLlxt2a+F4BI{^+-YdGHhEhL@)Gs_P=MTGObYbV= zzlSC^nPDk1k55Z+YXOCh*D4VhQHhh_I+y(=$4>ea&In%yz|m7v=DU#sdkNbXjYFYx z?P;6M@qKoi3;Fw`fw0uEbU3YlKmS&$^d{{M4zG|v$1?kY1!F<=>VLuSOF_XxRtPgn z_4{>svJ$`qklgWCw|Q7CADy{?jk+~P`wIc0}-w_Lcl-D&+H$pyb z-2^=_^MK0**Ir%DFTXg49QzcZUcFMH(O`MjxGZXL^Q8F+yuI}AjB`k%|B%CO?-pV}OhF&px*E!B!orVS6g_zPtVK=t#JFE!j- zMIl-hUawk?o(%K~x(2Qs$ah{~`eh@&CXi@}j^vB3P2_Y#VcI>DWT!zYXYk0as>g<#ymy2%D}6N%4!TJBM~Gb-6em}?Tp&A!$@;oP zV&an43K^)5!7Cxnh{IqnOg;k@YclD)bJ$K$tvPK1w1`0p@pEiipl{r; zw_~hPSwYn7z8-+%4C2pwCG4;lrek6@HgruKv}WRKryi4k5$)2}X`=U}o7}3>S!<<` zWxW?Jn(lMPa2-{IJxlG#siotpk7Q^vmABy+QCN`!cVeci-0GQ^&I9{f?vvt94PMcA zIAmG4Mq*udr|{>y${2$FiMb;1Sz5@Coad58A44<5quwenMS^wRZ-@#ox*UEh|Ki_n zJ>vZ<+BvnNLTQ^dxH%}F2fze;{kt97{gOHzh6+}HJLxz&OM*S=4V^gnk$e6e$?u<#xbDLN;yyrP;jqTge?v)pq z4I$uvmYHrILvAR{fV;{CYU4~lWRkw`t~KikPOPpJ=3wGt!9y;!ogaPlq&ZX%A0Ju} z2{3os_6D`pD2}^UJz9Mddaw?q$p`f_Nhf3V`x!yRJFTT@qhV@@;oT?bwT8vtm?B)M`fu8p#^!^NZ8#yiEuHK(}!$9rxERZtw*SRRuP0C&XtPq`N}9 z6J8f5P(-9QHw5>v*!;Lw==^q8B_(GO9dx)%ypH;!K5Qn_r1vqC^qGCl2lJE*3l~~{ zFkW&XT(#csyS?M&0z>B}8s(~SbMlI}uyTk<6&&w6=I7N%haC}NjAh)XU7;q4!lHNh zunt?TEAEfU;VO(z9QLA9@nL9A6Iq@bON%7MQaBdBuO(D@MDwSK)<(2k5ny+lPYwJ?suY{hp2DeyjkBYrHOu7P`(i{m9^ z9WmoEWs+-@hBfXf(6PT;j92!4{`segNnRouBM+yn3=uePaKAoMo`&4v_e^1bttmsO zBdQW#X>RpeR@va{yhFz6x-W+r__ex& z8xL!ux+S?A{Nz5BnZcXby`5Tr_lpYQEUaYyR~z-X&kz{Ba)KM1C!2s@;2O5SqB51m zP4=1D*rSlH^`nFx9vH0`UqsWOQv?acDZ`PVBl7=Tn?d)fuIqS@};Mc*9hGMcxtb3L~|m zX237)UM6KX5ZNaB5_a>909(P06WCX^PPM3eRw0R)zy`9}Xobn-dXgePB7UTS?>z#T zG02Cu$^D?+XsJY%WA9E0MptOMsCRchWgmYeZKrj6bcl2f9A63T2L#y^^4Uw3(JaZ1&(&;wCG>phb!`FO87U)e5Ja$7b=QdyJ!sd z!&1Br1P!S*p4=?)MJr%m6B?Y#pKprKdB-`3YR;*>p1XX_sbAO=2Z0H&)+@<~$dEn? z<&`T%L329uU_D!Zn`b?Um*nUI&$|glLw;$*xTABfrFnQM(ZdCH5tw_! zvAY4Oo4^I@uLpLm#=faM?A^AzyJ_er7kUJ|b<>17Aoi`aGQ2dgXFjivNLzVN&7+$+ z+$!)etkk7{MNWS(z|D$1&lW$CehXkmC^d;lbG7CEZPC?~4i?H(YJA}f^oJc1%sjX4 zF~PTp7j(tK=FOC5NRw#5Xo^316cLMr*VlaUX?j3l>^nwh6l_bl~tm z4)mqC9JaXHNZ~i&iuhN8pD~`SwY|5LW>3GC*+%}Ntavf(!xy>oU;PSfPrjH+eRG7- z#!ftcy(YGQy`dpBFBx(16wOA#&W}+c_Z3Sfay-}~DL}*x$L*_ur;L`M(Ihg9A}jn#?aMShZO}l*)sBuDbgbXzwZqJXfu@%vzOpsKtca8o zB!!orY}nBP>WV>wf;-dG0ax(6M#-LvH8mE0z5G=vPGmzv$?}?L&N3Q;4LT1MZgw|R zXit1JMFKoNX~vS&vkPEb%=y?j&}s77fOw+n9B+o?&+@^oTpA6=~#Bs-7}&>oX{(`tFwsgY4f7jlPx zwkT!6GBc2dSvi?};A}fVAxt1ZNzCnyE=()%kv)OFB zZiCFzdFzo_<-8d$ac=^YYT57+>^G^_GY$ivS=~~6z~HA~4J;ojog4Rl3lBM!R|h#U zdH1lvNX@Yv0%u9(ddWGjn}kCM259CteCdnvMVKs7^x!sM2N1Hl6k%~9vj(LjRr z65V*(oc#8IUf{>TAT|-2;RSNmVbLnO?ZCg_Go_JV|C}9pRGl1SJiSmYWn1x z{UpO~$!I>9KqvK5dR>+`(PB+@j0G`&&-GVN`eHSeUj~RTZONmIHv5ZQ@cx~o`Ov+F>=?GatsNv@paOfbAR zXrrS(j4RC>yC;gk+8ii9DEX@Zv1Wj0Xv$Yb=U=lPrI)Wb@~y0L@kSOak|Os?Ui!OD z#BcZQViW5j4ZYmT`t7iPoxgO^zi}rUeXJz)a$UqeL7?^dNLD~A+nOsh(ZyIjH4H{2 z8CQ)a?REV)ms>@Rq?_mI9TAkZ%;pR0SEqIz8WDufqOxSoeup~7#bx*O4HrbV+ z-LbLPV91WU?!c?9qLv>PLC`(|`n{3lYnHq|yf|yh3shhbkFG0!g2gGbvRm{??1BpV zB*-I(BaL-CM_uWQ6V~6T8Oo!>-}58g_4ihPSNOz-neigCM;LLr@=n$aTzITTS&UNy z*h&~^?`Qrmi2qHJm^!-kQXZID{48@g1=%k`1}2v3eaH=3pcdTMGTDVdN9Jzh`;Gyz z;hyUBRo=Z!Vh2%wB%Oo`w5VacKK&$R_^P{w&IeHm z2m&tB(}?Od+XFb7T_(uYupJ@Mfto8t_tNR;#Xgi(oMLrh;pt&{r3)=FiYaAVExoBZ zfL?4XY0x^AUdgvFb`uMKo!6L~Di^ZX5H+~t* z2u64Sp2D1Zm9i^!&o7Yh!GUj>II-<_BG-P$rR*lTPrXbU1)KlP^ULv4SyKM_^Jh+Z zE3h5$0QW?H?c=|2A-OuTc5F|xi#(ABU2Bovn$<@!|u9mHsJC4G;G3$xL<3VP$_ zRC}#|Ic3h0DpLUh*BMooh7mS5H(mT&9cn#b3&+LP9@8sR_2x{oT3xHN7^m#m z7viU^MqTd&Iumd>xX2kLZB}pWYU1jct~?iYKpkUd?reWqxy9q?d9C4`OE4Y(?uJ!= z_|+M|&*N`PGI=w_WWEQZhOlmZQ?T)2p?xr|L z$VOM`JO4fxu||dN(<;`QvL47k_WpO}YunEJ9TzPd)b&@yFA(jeYzGB3(tW2ft?O>x z^3v{F9Wj|MCcVbFp4RYp&V|U82jdknT7g-waxYWa5dKAJvg9?ai`~thx#eIJv^brA zqP6YLxjpB3UQw2?^dSS=G@k0lKR2R(WjKB4EOpvzzxDj-S5PhC>nI@W@i@R%>#jnI$Dl7rX77IyK7P|~UVlTKH%?wwRkhOz zU0nKUBi&f{KLKg$<}n^OsIITB6c&Ad`bGJG9;x%+Wj$7)F~{l`j}ye31k;m4W8@sn>dkqKW{=<{F7V?~# z`O?FRXqpX#&+p67?|^lxaNl`*wFKGAY!d{x+*>iciymK+*?p^>vK1i&!?Zwum1UuP z4R67Ptg+y}A2=J_F@*kRHPEd;>j4vrtcC5SNVR49vmL2NejrJt6qE*Ua*4#P_Nbl! zOF23?-IJrRGEJ|}de3ij(3f#Yx>)9-wA{ ze7(6*?u_Fw!bo=DOB!=ZcM=q4eo;QsHfo!((q7BQdcm-Tj&@=%66EPb4Rn^E`UnQrY1{6L3zk@>aOu74-*n=W-jWkJz3!QF5<+eHiV1GJ`2L_U^Y~J1VMZA@NftFy^(m(N}rTbDq zY3k9hOavgF8{qiIj-=q}jKAA)drg~tNsI3NoOu|z#F}GXCY5A0o@In>%I9gGR9E$$ z-ZUXGN|KIOm40t2u#T}$Wm6N?r3XNr9VXGpR192&y4JZIdQo_@?dNaP#uxV=J={y2NX}kmX|zKw3@G*%cLh(U8C1OK%*=r4+~8RuJTdi>y8#T^W$gq}#?eQ)8z$ zZq!QKPgxJA54U!$&^)=*25)uAdRSxiOguDyaRq<+8*NcT=Fz;&MJBbkBe(s!(SlaB)B#oDffAUExSVwn!OA~5v0M}#_z#?oIKy&In;FMzTj^LC=9m+ zWG({1y_e7o?6Vz0cIpi4o+R(NBpXQA86e8|g~Re{x{+o(Xb#e?joniZq>OnZED0A014uT_$=jglz?z!iit2WPu8oaT-%-s+~A=FY8OXTCy^JQPzFOt=|{ z=GN@&vFFJgU+g;WodSpZjlJXexx3a8lm0+lp?%KU#l;>aSG)9Ew$m=|(->(QX6QS; zB2sHn=c^04c_McGyx6?`m>0v6JYj#2%83J6ku~VzZ&5TrkHx)R9{X;Ai=XO z>T2KYzX2r8nxzQP*9C^z(5}$2O{i-RUK&`Ez+`66flt3)>C*(bl!UM7zZ6Ljhx%H? z!Ll_xMSg*)E9mhKVS}^=GdbFXD8lFRGMw0OTcM3_=pvZ`1W7dk70`wr+(GmibaaA$ zdiqP0S;N^{D`y7Z+H)*=mulKI0ak&yNc{YfJr&G)+Y}BM>@_wu7>gW5xvdRq(n|E< zct2(kUEsxcb(}@V!hjgXnek#NI7Z_CY2_*x)Watq$C>+SOtnN4?*^2QKo8i|RtKx; zjAB|HZuB_9fvIfmo`(&emORwcDAN0X>WJ48*!%CcSDWJVqXZq(1c!NZ<((W|%*9jj z&nG?C3WB%)DsMZv&F~e?&OECn>f#bb3xTXLFOVAvW@JBuZ@ELzdnvl$ri35W(v?_q#$qxGFaGA9YZZ&PeiT%z6Zq_jw@L+zdhRXr0!b zWLErp7Krk7o1M(Osz)qQ07C44wU#)ShsEbP_ESgFWIfF6yqu+!ViZl#D)b)@dg_p5 z;qNcYnbT@w&uCT(s8xyYKn0sG{<77ysp6u~qd@P#dfDT<>ju~-0 z3T;x|rpxn)ha{@S**4N}ZNjTE(T?>iH14E|t~HDe2Gk;uwv$=elnM6OhX6!wP>LFg6A)gMTs-QE^%3KmlDT*zljY|IAVo{%Yp5G%x>gzW7L6}3v!`% zv94&qj->@`fOv+olM0yN4(qwXHpfn54sOmp6g{iG=V?eatb=oZVBIbfTBS*{$P}i`1u?vc z@k(!sF9KH(=B7_@{}wqx-v&!BA-goNiTeEMdWRjhCJ=DL3}F!sSJXJl{IZWEDvhoc zoU`QC_b$if$TkfhHTOmS?Pln+=T_Y2VhXVg+oBa$46)z|_R`p+k^gDRqXtF8CBA+H zqK`T~$Gd8OB7Sxk=(Onvo~Z$@Y&mmLtKAu%mMbv}VL@NKbllf%)zVT&;U0(Bw^RcJ zbwHfNEAHJ`Z@1|te60^%=eHoyNUI5mG^Rk=C(Q?!2MCaR!(7IYeW;*fwKX5Bj9zBr zk}2>!yU*7d9R)2Kg%YONdf)xprmi>$v}jxw2%#~5(5q_lyDj_JR(C$M`b+>5gD=AQ zLDl-86*B7M^Ph%3m$KkgoR2|-m0#vUy*NBYO}GQd#RnOvV;TfjIE^nfttdbXrLbD8 zMVB-*nyhAxSr@1wZFF#}k?p@KPB4H9-&PRf|Bl$;&e-1cg2fzk7c`5*KmB5mr8)s) za86-=T!avMzX82R9b~>8@33b7lGk`$=#@w3{-5AKd)b4h!O(qWrLG|*aV`#sGCcqU zPcrM_Rwn4LN-I#2(Itl(HO?p)Kx&@&+Hc+R4dPGikA-4SGXoP>Xn;?4(J!}#^6PZk zE+6?$27pp@j5ytER>;cd>LlP@REK+7T+K{>LF#Je<(7Ti?*N@G0G0 zbgvADR7bNXooTeBM@)14Iw{+7=<0*}Yo4DZ+S+?W!QXFSCx ze0Q8@^_B%P*FY?!tG@*s*`?WxteTX6{M{ZIY*|-K$wl^y{OHeP2)A* zV8g9&!xJM7<*z_-bTT{W1GnurO1hz8vrpnj3~&K~sD#E!I6yd2r$rd8(60-h@T(jq z&{tbEoQhj6QpoVjSPlcn6|e5iN`9sk+jiX|qMp+nwFz#geF>ZHKAM2ovDLMI-*BB3 zKLO@f<~ED(ef{{ssHV~Yo9%|(gpQ4MFibQ8bc3bTh9Yp%u+h0;ozI2R0(Bs7|@1<8*udKh`I?>di;1#D_{jpb8=>Mbtl1Mom0cnw0xEOmpoId2CPhWu2hP` zSxUx+-;3_Y8^k&Uj}#)0*kIp(67tREL)+ux7PpZF?7Ys6FXt+8!zPCwo2!$w zA@eR$ZN*O+VrDss^4|sU{$vdYUY@}@QCnH}o zTq&X$l;aR{okXMeq-&$tT@Vj%8a}#Ft&O7=)tU!_#@oV-#%x~~O+{MazM>k!o7ave z=COl^;^owV(wyRd%ja?nD{7I;Py&{!HHJCw0vHDM?EFuLRDQYPF6Ys@o=z7>e-`Ur z(WuJ9xIjh#lHPpTIVeLB3dw4-!t#V1o=As*BYT3I;++)2d6UhZ*ZFz};oSC8<|gOK z|IAPc%*>uFTyD=5GmtfHMVy};aPg-^3eC8EQDP~&-oQwI^U)?_>V_c@H3BT}EK&30 z71v&*2Q|%6M-6|d|h)J+K~VTg7gnQL1nO$zP_%C>yodXot6Sw^6D^(46xh@ zkMb-f*7{?er+|ix>8`z)%2KXf|5&VANK+KLahw^QzDlAK58%V z2ex+KS&IyRLey;2>Ym=}`hq5RPdd1@^zIyn$*>-9MiFZ>{RgA)iW-Q$6|J+nkG?gv z=-e;)fL)X@hQPxiov+YA^nMw!)GAdyXGD}qq+Z1@w`9f}y-1a6}EkqQD1I2sm*@^W;7>u?vgcZOp22zJPdCQXWuqydj)j{tyR1u&n ztWs>^Jt||=fn+JA5@T^9)vhlP3-x#!LM?S^F)5OAIWYn5q9mAR)GA7XQeOog0QYnu zIFRUnAJu&Z+_&Nk)XWjsA_q@o_{j_+2{kIHI7&-RRaQJ0|E5_pB(?Td4 zXKLKNL8u*4D+-L=LWc``DIUg=s@GUBHYN!!F>IyyTkf7tv^B?Y%xtOrM}KSDODbWf zc*(Xw+_~sya8!PfDDR_8obNn)g4)%gf6LjoXUnIm!RYz7?sd-EEr~UrZmT1Ztr!bKUpHyX@n%t#G zc(CXV2Wp~zR)7jl<+LmhH+Wiq%ty)e{#JOxjP1g6g?ZIWK*skD6}EvJM?NoJ`n@K1 zI=RYAoyNbF=s=OBp0;R@DWUITrtariUWO^>nl9@a2Jj6w@lh*298P~nk1fL*a7)|C z^{5*$SX44FKpyD>PSb0dU0GYgkWl9FKyDB zHb2yMr=2cU6L$@;_AV8~yr+Ulx~;in>o`~{ohpUKBGMZo{R>TUSZEQJ&hDaT$w_CV z8&3qh|6F>1l)8%vXK}H2!2a2* z?D)rR9>0%S=J%8PP3!|V+sac+@z>oQYG_f@ar4Q5 zJOaNgLCc*+m_6@*^ecls9Gk5pbl~ncUh$}WoZ!}>HXZEUW0RK1xmaMH=x^~$*{$#p zQxd*h@lJ-Muxz2?9TE@F3HaX;O1cB(fWQQSc$+e%NNbk~xmIb#HDy(QOT4|ZQL>ww=Nqz~lxtKC%@MqEGVRe( zTMm)9(9tIRJ0=sUT2g6>#n!f-hM(E6p7S%qru$S_$Csu-Gbjn`?v6ejdx_pPq?Ivh zJRnq3#{v&)@0?$~XME~?(9m;VwEZT-H-TvH%my-lD%s^*?`15O0$_gHfPow(fw4R7 ztCUOTerlV<&*ZB<*Zq@eZv^ly(YzHH*_2!SLM@k??1Co9Rg-R%o;py^%+AIbcHW?t z&^?AV2rgss_XHbx_G;K z=})15@b{qhY%svO&Y8;u$;oiLb|f+|_FB~eZ})Iq^OeKN@6{%&G?{X;Yb{X!p12re zWLvDLR%L(*T!&z0er)Ecs$&u6T^EVSY-@6#`W5DxfnA%tuA&Xx0=E?k8p1%9gt*$Z z%HSkx1>mY7Xs!LOzCw*VPoE$!?iYQ%LyU#p(ct?O8Z;mzU%qfx{* z`!Z>IBHqsHd(1D!s9ogE_0s3G)5U{F^FQ_Tws3S!To{#LkwPHrz(GK}xQ0@%4KLUt3A)!lT!nGM{yQDbN@kzF& zoyjKhcU{|xyy4_Va;^CMqGtui)oTkhm=sd%Me3sr)6|?Lo-=CB-CVILcUzUPK+@8t zyJ?C1F1p7XfWTmX(c~a4N69V&8t1h5sEW6M3e}v>nk9dk52E2`ZW1df(p2^wb~{Dq|&V0E8bmktfQG!lHvdPt{S)5mD6 z6>D}QTGIGcwNN0=`6IMkX?J+TAVD8fi@Omg9bhzZrft5k4sN_YeOsK98U@3DgT0)%Yb=Z~;>-p&er}0@oJJnkYOW`Sw4dCES)@M}&P&U3M3Zbq{8dCTq&(dJwC_z`sOF zAwrqZUxwT2dCkQ#r70ihGgjzA>Eu5jKCFH>n+*5ZzMgOy>Fw;QO-8h<9Pigt$=iqe z<|IK~d3pHQYg3iC#H)a{$+B)2S71&salk;^Qc+_B#%GE<{nPL2mYM&;R z6Yj-p=F2;Mp`s|I^;`FTi^PaXbBc2=2WSGNni&z!>y!z{6#~4*^rBJTVeydPJxS29 zvVLyX+_enrURiQjYg2V}QIpn?H|RM)$>$F^$=OXMK9QIrQwazmhcqhNH$I~)Nb3`S z@G}-%S@oTp8tlfOs}G#;a5b%vZ)1@LzX^GbKd+?@Cm#`^qLPi1DltO4=zj+LK~Ph= zDxglg?LH6kRSjyXprTz>w*I-z-ZqTQ2)yEfi({E0^8`p}!>M?-1hfV5Zu*zAz&vHW z1YQ-s%>JcllJx3zBTd$xnuL0w;W{CI9pTm+S5w;ui+o@t4mvxiI zm)dXZ-*}PoJNs$b7!rchlDsX|Ikd!MivO2ANs1kb!WSLY_CEQ}QbtF5ML*KlP*Kzu zT|=bAQX3wfE455(~3QEy30m*&088Wp;zJ z>h)BTkFR-B0i3(xOr$-Ffk<}7qO{lkhmtH0rm{_k*X=MozVM{FaV3@r_tHg7Ukb!p zjna0o>A|G(%dB2uhgN&r=uw7s+3#P}_>UC9RJNTnkR?zD2zz z!!khFCI>`~$odvbS|LcamxlnT%L*s+WVIZCHD00|%5XZoukJ+dupWGWBi2((B%vJ! zbu+UvI^TV9ED|}ZHGR#%qWm8sH5hS^%?dE|s|}YWFm+rg7@C?)6C|O*d2SLGw3!Jp ziIy(@8fgN=fe`BVe8p#$5piZes|9iNw7kOvj8b+R`fL-##iuWev0a5Z!|Ke-!!|L^389_!mvrYX1y zu9~N{CS*)B;C>j+qEtT0uJbxgd*tWlUA`#i`uX{J%>Yq<%tuUi?oC~74r?kaU(}SX z{c`LAcUoHdBdD5Zv9n1-r-n>M>QsBl5LyszCDqYvXF)f(>R7Zlm5hMw)g)+z$lB|w zFzZ-hH=HKe+azIsGjtru@b44$g^T=g83C%vMq#yADr9{a9R~Zb+&5S0buQ zLR5V87Y=-X0(+~lnvW`v!qx0QpE>pPBy`uE2^Hs@;6D2uO%K+Wbiby+x{+k-JYYDu zZgn-2tNcdjEw{+K;il(dm&(Wa}6pCxDwnU9=_LMF%Ejt=m*+#{lgCX;l2Y*Xn+j z(sIzguaBm!62xVXWQDeJheFFSZ!mY{bpq6jeM2rpfznf6Nw%z4ypk2MtqiMLtjBLy{VF465k7@277a zm99e`n;E~ESt);wT*s&;FaNkAdSEe6xx*AH zBk@v}IQ~HOihfPm{d;-$JmdQ*e$z`RQmAEds-$ev*YgCvC5pQJ8dh#aVrc0afA>zO zEtjWBD%7#c)4uDI4)5qgrjJfIh2vCShO8C36$|#=8Cu&*qYTUFHCPJ>Zs&e!ON7fh z;d0``dh?kIipqG_9#RV*46{6C#tq`{D^H9%HePHa4XL@ysy#dYVb?PvmO4}Lw1EVz zdl4TC)|yjnsH17xd%vKvGD32jf8F!sd}3Kcd3kj4`n46h=xGp2(6JHTIW@;DPyE{u zlZ#==*S!^`Fi;=m?9m*)1M(KP(@j^lbYcU3?ziRrgR{J;{_vf|yg7&zJ*ldPq9Bi} z=jpkIT%OrZ!Hugn2`d+`@*8M$co<$kvCUKoMX?7wra=ULdb+}c-!M8Lf2$6Bw)gMy zai=YJ*+=k~sx|A;UVkqaruOi0J@Yd6H~;dSe|m=1-7mM;;Mr9B zxY;-LTWkDC(IL%bbg(bp?emn7p}g#1Pr|<)m#Y+Zr(+(lkf=?nyWWFo(mn z!LmrjNoJ4Wl;F?}DT+sqjfUe)z z6*v1HgIa7rlB<&Ue#DowvTRpi&%EoS-tCmh{iZPc%`3i?VSDDi9q|B`SCENK9FltO zz~L2&Od(+OGlMQI`(TEjoPW1i!-utwD3|v_2-?>*Q`WELe`_}Xk@aj?n!XNw%z$SQ zQ72DR@IC7R@@qEgx~#`5#u)k$U;Wmgbg`P)*+s5(CYVCc#PC|`k=pIjS)_xnURRSJ zm}$-TZ?~e?^L5kY?ICyhB?S><2`!fh7<#Gr@A%u8i?44?!QNjF4rCKpn~l9}s$CPJ zFYL`b(mBjXe|L0WOu|UH-rl}(VdIQqN=%l~t@*XXP4h0D7HMh1Ua0iM$pD1!J#Ogp z>Lcp;nr4N-2QHH2w2QTRZ3}AX)|WrH4|3tMgteg_fLcpW&BVw&N!-7QeS}|~6qVsB zZCI`YFKHUvU;oiAnfmibfm+M^Df%=p_M3>8g1xR4e?k-Gl?~k_)eW3xtMKl8pwkx+ zhV^Y!>?YM4@!l&4GMl<><2=r_^+ylNszxL)PU#nCaJu+n;B`lL zS_V=rF@`qr=DraAn(@er2ewtmE2Rm1n{{mdp%Zli75cdM7=^rGL_;u*4fDEBx1?LuNEXngR?5jj^v$c)w-83Vt8T^4J(1 zO*}|Ad*=j5eWc^XIz$BqKdgv%T!U#}UzS6C zX2dU^8ipUS&2+rz(M$mbB~#XNE{yGqN|(~^f9E$_S#HwWS!gnTZ0}r4zdG$u{hbW; zCII%Y*r@yb%_?J0fnei5VhF47wb7qLw8fsfy2#=o9+KJrl<;qRNPH2|y~YZ}IeZhN=5`ic6T|8!yYzU)$R z2a>$#Rf2Lmdnj-1v^%utFY%K;$@)THO-saxwA*1p5 zRcYCBZ{2n#Fc6Q5p@c!AC zBrKmUn}hp3<@C+Fj3MA-^EP;$t-bD@O~nIKB4bVGP6~S$hr$z4S0MP|i#pM`e}1cf zZ-w&+gL#b3VBrOB)qc+3cl_LKde{WZj|>a7$$wiQ1)1vv->Hib&|AuPt~AjpWM+Y6 zg}6VvqfhZ~EPp5DvnUNrdbXiw4G8vspY^zG2)B0;tv7-Nx`#rSI%&K6^fYVj`f*)d z$AaHPi&g@pckN!18fA$UfXWaof0GweR)3=vV@-;ozt^%2059*nteH48;1l>q9tVqC zo{(56x^~mxb+>Bs-4FctWv5wIE(hH5ULYg>i#9K%kP`j3J6yT-4BWB;!8bY!+?iqD zS7dbI7TwW$Ke4sjvF}!e+vYd=7Xxn}?Y-AO|NH=UaHmtYd%6x_|hdBy*--k4sD`F$4WRxr6J5x#42oeE65`5hku>XFjD*h0X)R zy~N2)=cw_YcDVs4jS$<`Qw+;CIrqy(@?_Vpr9A>7@`Co|pgV zU26Vh=GFNWYEeITl1(@6!;qU?48||K4^MSRsC5@YHa|AHrBtPBZ`bQN??eJk-HrEc zsL$)=8X#g{{|&`98*7+Tm=%VchRdWKxTw0#diZ5uG*pZDl&KCKe-O7xqG{-4ClX2B zE@H>Na|%`*UXE+pBl`8WRa3ar_$l`(`XGK7h)V#KqXBZ91iLmekN5qL`+iqj)QaXn z;M_thZxSos@1SS)b#N%)Z4}M9i9`b0U;m*VSt<@^inF??`20gKmw`M9bX^y*TUFuX z0syF80(YI?yCNkQf3W3l-E^Z`LNJ=%Y6hb)RiS_@UlIo`j%p-;q|nX9@ZGWc!1vl9 zt|0(CZDdCih!ttqD9k*|pdQ_7iCFuMstx~L*JX#yP@!?2#xPj-nds4?JNe5>t7vsI z=`^C$@UZX-wxMS=SecRU;X~-^82Ql#YUP|E0IE1gQ}Ceye}K8L6hWu1s`3EtuadA! z=D=^39^2OKa>E*ve4(7M45ws?5I$yWbN;^de}GhJ{pZJ`)i23AL6KZYPzm$fK%(H zGL4YNFQ)i=q@8L0-JZ#1f92eez54L){`_qCw9^5MJw0m5 zk3oFfUaODSuN;nD9pf#lkMR2&do zo@3ete_6TMvjI)=B41Ls4-NSHTx|SVz^Q>Xm{~g$C{lLOpAqc3@Ox#qx&4djz32&n zT;G#dtXufFpP;c)pULt3N{(Q8_Sjy0T~4}iYWB?KUl6OFwwDLLV8Ta4k^zd*;hBZ}3#znBLuH}&8f3GJn8*tWAN`*P$h%Q~m(y?Fu*dBJ% zpGJT0R@cuzawH0eIsCM$nU$~KeAx}?amM^j9@t&94MsaGupeTN(Y_$FcUS&~ggmL1 z1oJ>asd+gXfJER1i>_w-0y$s?uI-{`H)~&$<*#CUxCXm!!b95itliw3dg9qY@E%=!n=Kl=5C_rC{OXRD z>td7b7CvKiV%q4-$akYQZYAXjv@0wIu8_U7P2{|Uah+R03&E27TEu&%`6xX(Njm#B ztr!-MB6h&?0l9_bJWn&N6FHX3gxEj{e}rUsfQv|{C8G@jxtpntx|urF{VWW)JE@35QwGBt8h z_tPZwsEEAoUuLX~jntJ;?X+yjzQ<5(-3E=_P1Yg}w=(>uC8$HIKe1F@(4I%EfBc2_ z?6&o8BVlZSGAzfH$8Ez(zJH}u^ld-`jUtt*s8dCQXt`L^z(%kFt*{;^Jh+I_6=X-} zkE5ARP}wRY*oqMJvIl-~M8=#v)GLrdu8ikVbhHFRsOQ3^+Yal(|MJrk79Zwl zM9I|lM$@GC`~gP7|3j$))_@G+_)}$pG!3F z{Kivx9MNUf_DstFR@-&o1cMa>7FW}_H~_KMhZS;A&hG|2SVFh%d*J~wTqP+(5Q8Td zlz6N~2-5)xsmY7AphlULcvfG02G1`Y2CWU|^Uho6`o;qtbB=Wx@2Ub*e~U+LW%!e_ z$)oxdD?E?#S6!O*_|~t90h4`yU(4$K^O(*D0Bx^ds^>UbyZD5_TDZYH$%^RGuAbYBA5?s%Avsuwz=e-R0e*>{=AVQq zto)|iy&vW~+f!;EDbrHwe=Ys@O2K1yAd`e^lS+ML6EG_si{Q|Wapg;CxuWF7>5{@& zK2c5Ju8W4%G`yOs`Jlq%4X%%Ryq4|X-fj8Ru^jKg2JBcO z$C0Fpgs~rm1vQlbzK)6L1C?nb|nmg8x_ypf4i>82tKXmEhIrn>xwMp))xUBwQh4IgVUHwk!rNH@hWhv$l~1Foa#H z2{)hn#M>?Fl#&KJUt<2CZ>jv5IRhsQ3bslV^U3 zVK~!vZ3`UeDya}r|4=2jXR&;6ptNgV*4K@zG&4M*c^C#YfBfRLFAEu|X2O>RR}8@R z3(fIS&+&01)p7jwCQ4BL`T04j*Ezo?oY)AAUUD$;^St8DmP$|)Jl&auoc#?^P3#sb z;M2M(SJ|$0_zZ%p>84g@h1IFd85(5|>wUPbKdABA3-1rp zKRnAA<$E0Pe>_9ti7<2$A*a;k!m(bHO>EH~q}9!mdqOAH7&dHb8FI3LH$&TL*W{6K z1yWYTj(!{4HuWRtQcE|GO^9^KgIAqzZ7uZ|*lbiCgoD?ky8zT4@qdN!CvYubu78L@UR7=fc4oR;^T*MbO0524=cZ1Ci z;0L2D<_a4d0hW*0FF)A~<4Phve29UV1z;5b)+sKo3GU!a*%qJhZLtP?f zk&~sZvcix!)esJ<+%mPn267i;u`RC9gl0Yge{b&;29XulBvM-VUNB2QXtwp+!5?Nt zlw+4xZCGLJeWza$)x+<1_AXT$4iPF({EPB3=4@=HECEDJn4s|rKy8sTd3Qw8d08U8 zE_^DMXw2jtIBU%asV4Z7YBVmfF&~`YH?8}!oYZ|OrufvL`h&I$!Nc)t*pTI0%kaeK zf1g9wuG&rQI?g_L-xt*K)WNN`Z}y!{76+fM2{nt6py|?zFLe?Y;qXw>s!P>w(r;w#|is zyImYhcT3-`g3DLv@pmP21D|_=S*zxdWmCMnC_{VB0{LlTnJym&4p(W2?AhV)-()?ke;wKy zbo3rB?)t;_4H0R#Fps!J9IM;m2 zKc7!^75A+CWoY+z1{D(qpbr3-wbx`Kn2#xIR*!fbi@R&5?-x+`Z3+V$;?qIj zo)Do~q_y|a;Ee=k*|MhPYBL(5e-)@?Fif9`96Oq!#ac9T$@df-TO9Z(r-LzBgk&X> z_D7&XEwX84qo+2^^~X{H(vVCK=ZaI_4sqKTr#O}`>q6DKa3JxqHG!JHxaC7ve_hCq ztV(=at7fP-=pm=-UK|2{N=SJNju*-LO+3X$C~+xq)g znH2lAPrd(^;q}iyKPTggN!%{M(=I}4l7`$CXnC#6G zwTqf3!s$@FCB3sTeF`EV^+EoTMBu{!~cqe_rvqB z;SiDpbp;NU@f`kImIfDiHnPhAp+NJ40M5(0 zWoI?NL6z@GkTW80J-M3nnMa2OG%RX6c6?WT!`%`0D{@ z>7(yoDEd&vu8t;+jQyUN6uV+ohEhas&0Gv&&N?~h5GGZ}5pAt(5iUzCCZ6jty%5au z=K8#QX~K-_o)xApf$B`Tl<4G$m8q#(+I9W-P@AO+VmG@OEE+rO*geoV6RA8mctEb} zxuN8mYJuo-klA+;`{MdSh(cnT!XwA$9V^C_=&(e`@fU+j2|<0EzivNy3}X zAo3Z2u{GeUto#A!(6lDJ&&f^f7nEbyErdBtaRYt3%E+uxh!2d~T_>@Ea4y6{qXWP% zO8HGuwFxU(f!oSA419CKhwb+&z++9*I@@xSW1Tv<(!u(==T}@`ii0b#mm!|l@X1w>qQ`++y$3ErvfH%2YGBcv<6!Xz5j}+GnIb1 zT#GCsaH8eeO5CFB;(Fc{^q|PCSW=CUoXmZ+GkolRIn6QbcM7wJ!_Bj~l9u zaHe^|DhMB|`><8XhVzmPMZ;rQ7aVky`VZd?T>DMdf5VRcbnKQAQfd9crQv#+fxj#g zx2TJ?B0y?nfa`Tm;!qVG$+pMBaFLd&x~A_mB61ze$Yvp=y`oHIYebq5)s}xbANqa9 zQg;QDlNLQIBM2QG zB5ynDf5U5`nm)@a)y`*%WGHX7-qRKm=IZste^vF1{@k-O3`u)Mx>vXb8fzw3SlV7{ zUvWS6b|ttJYAS7xCVL}VebI{jELT5-@9J>GUYenSuXv%p;BCiIcZaHrMvg2#olQ4) z0g<_K7V4kz%+ZvWDnlKHu!md9>#eD6?1nz4By&Nul|2bF(wQh@r%$7QO62 zZ~OTEeU3zi3xh?_o+fG5-eC$xE(QUS=WiaybOhVu@}c8rn&U(Mw4`VsJ{g&iWnv4A?9>#0UgrJUNJ7#JO0*dp$DO?v>3+D2v)YeArN9~_mXF5~+(LE%;XSuP ze~`_W__r6y?DN7s>>@Jnj(cX1o%m$2rFTm+iNeJF&W{)2-} zTr|gsD4B$b&cNc7q~5ni2}X6?1=RAIu%;WMh%3x=e$XuGv{61$q3ozg+nPk%A)7Eo zSHiq=B33qO2a-~m2Ycs-y`Gtz_z;y|2Mh0V!UDs<&W6hjzV+&0!b8;vJMcrYe~KMB z16er&p__INlLy`ep}7Ch*mcU>UA$Ul5&Kj|hz8*1D4VQ6ibIM=jouc9MS*24G{=5? zDF*C*vmqy|?h;^Fp*z&A<=if$*5-DV`51zGGgNOp7}A_0D7&xG{BVQGvbZvupk#oH z%HN87>R8?+sofQ~tc#O*J6e{AviK4n~ObLzTVQ;@6aIKgT<*fvFFI;bjviOEUZ z^?Zkcv?rkE6;Al`#iwt$Hpe&CqQhLI16?G->F84}K)I|@)%L|#)P_+rdnrRcuDq(r z$rhPC7BqyghV!Vl_wF@hN5>TPHLjlPQ2p#-(VZ~xUHWQ5b5L{8Of}<9fBQ2Hz!nen zY2kPG8A7;7+3F9qiL)VcB;jHUX_Mlgjm1$`Bocg;tmxwA4BeS zmV>JzsAh86eeF_H9bGUrl)-2~L)(!6T&$9_m(e1G~Nn=$d)L%F#hD=(p(-vY=fjEE_flQXB{HpSAJ1h@V z`A|>;A40$1%kP)LgW_zjWt*A*7NGdl<&62L5j8C)A$^6{W0$H1RoJ^J%+8Ch;q5n9 zfla;&Znt+pe+Y^eBv_X#+|!zYL+CtR6YS3tH`Jgy1ghy*Dvj-j3na+4a;rrG`mm(@ zTZWn|8huow#o&j{m)>~b@C-{ z<>)>d1yT*U00w|con4fm)1|2VUlm}`y;iwN_n zxm2n(b){~x^iuZ>gDI>Za_hy#YzUEx0&9|cn(QX`91Jvz_Gd&Rk=(^9HO9*2!Ia01 zfKnyn^*lu#q#~o1A$XMP{rK8f7Habc|UWS03t23@3GRkgfo&1Y{VU! zNh11%#j@pkJMtYDbDs1TSMS-24;~jt_dK1fMdu?huI4_N%T$WlP8)8uU#vOhuY0%o z>Jp*f*o2`8Vw&L+C*qZXJD>H@OIBhf!aUFGCG99XR@(6?UEIBDe9adc8H3K zf7)kuZ>uO&{&H$*jtEx8E4UMR1~g?|9L)1k@h$0RUV_}J#GSHWCoh*d4TkdsN=Lz} zeDZNfTAM==MLLz4+=S53W=o56ISztP&`3P%&wxqUgV$c*jTJYQfKISr@H zLrbk(az7ib9IBsFSa|;yj+G7fS_`ZNf5%*1edl<6AoIjY6XfvGjckst5{Dff0d~SU zk4FexE?$BtL(_d4snrn8G74e-HPYq%LQ3#?%@EZl%|OEST{TBs5LT^T>wZMnf6APS z%3-8yhyaL*$~+_*^_L~8l<+)t>mp)(Rv!2qDKj}DYvY`bW?OX?E3_dg?gNpLPj+*! z230w4XeM{t%o86UC}Yz^{E2SOdEHQ}Yx`8|j#Y0|Fc4TF1zl7payN2a48$==VHN`? z&1u50s)%M!{^%Ct6Fmd*2^O>>e>4|J1H{u1R&ShZq}hxmmPvS`kKd|^1VAxbt_sZKDV?^CI zbj=0~P=pyvN*`oJ<0R#N_q*c^Pv11Sy{Z zAvnF@N8GP{hbCMVAgP8^gs0$|7ZBoA2?i;GA` zwhfcrc))z8F>v(&bQ``x9Nb0|L3=PQOCEg(;fW%C58Tgya5iXP=l?=RsY?uUQxc=c*Dw?mzae=6oPMA)PMaRrVRjnEX6 znZZm^W{HhUjBfkOy7xSFbzefVt$hK>(8XDFp|Y7hQ;fQlvG9Y!oO(O;f=dHTrA`^l zSrbxxME10AGl*fVpR&g&3fZEeInkf)%b@DjA}y!PJ0 z(&<;g3=*+poR4@Sr5Z1@sG+bM>Eqx_h>U%2HqS_pPGbKOL+gE<%9LA?(o^*#%~V%t zxQ%zbfA_|efo`NloiC+#$jad~8KbNo+J#_Xj3tVrxTn2d+yt1hhd`UUAx`fB3SLewc4gd_>^So-S05bD~foclst} zZcrYtY1byZc4d{YODnjJ$RbT-gYV>?6A07)nu~g$tq^8Fj3Qn=9Hrpq?N@stTug1p zJu&D#eoV1X=MQolXcDk{m^6@qvlmag1wS;jN-&=zyy>QieYX`K)enKl%0oa2SJjoR zf2zE;)U#Ynu*yZp(mCdCdo3+uZ#ZD$4>-6CB^Ol7*GnE~b)$GLv_0NVWnCwIbBJN( zxcH=?)xpMg>3G@11_GO&NC$)bSI+g(8=6XX+5mS47c}ytCAK4)+=T!8>KwilBy!QF zYNWrtvxhD2d%qt`c)u>S`t$+U2)1}pe>bw^Q(A{f^w4N{&GG-NDoIvXKl-Kxe zxj6h<(~x1#TfLP~GCOCKKv69Sf7Lq&gf@8K(ae6}?9nKv->Nz=7=tCW#y(1zoB&l5 zL(6LLm>I4^bu8*tIYyP3+kb;{}z-f)@Cf4=7CgG5}a zi-nC$Qi>oMK)*xzN4Z%t;6S}op6*{QY3kz6hfqujq26k?fPm|7qk{&e_it^x>|g?v zz!=+LoQnyZ{yC8{Xw;y_k3R%>4F_nx6&>$1e2GSN062#G1mS>-_w{;EzvZ(u5*snF zh1#|?EA7SA8?7niyOwWie{~*j;g0x*)P`AUD99$m=JR=JOBe~bot&NoK; zC#rb)w@IZPY`zWhy=g5k!I&-<+EC|y%Q^Z(#+~8@Pw3l z*M_t45w>b$y?o?gYTaD4DlPq-Eb2a9lti|QGkI!Frgw29{1YuCe^_id!J9gL!qVod z$$1wHPF|-JjytD0FM-0H)d9-&6I`;*$|#a5gyL?OV8fygQDzKVUbCeVxRko8tWWz2 zOD5=I@T8J${f8|nPU_n9J2tp5!CyrF2x#m7v-_O9z;#liy&cdueq3jpq9K`B`QB=NYKQM2-NKxtnQ_=c6tBz}XiL8qL zS8lHE;*-<*a3GyU^&xt?nZ zU4n`c#FHS|3zt4*P(hX1tYUdB>)u$VG44nn3b<-}URKq3917wQ*JN_bv33n5$jsWAZ)QKUoecY_HckaUluR05=Uh72AR5G zf7;d@?R4-Je+ms|My_`QKzmkf?Y+egzn91m=Z&ZNFO_dh&4LRb zRmy3t>Moxl#Jb4)6EU1eASZo}xyc~C_BsITn^>y~2430Qu^OTc;J;p@hGdfUlfBT; zjG}vQJn{_HiK=a*AxLuuQps!x;f>jTe}>lDD*;CU52>HhMk3o4?@+pVTPt&6gC-%z z!jK_9eDesTS;>&%i!_pmRLSfo8o!#cAmYG91KT+mq^ zh3zn+4ysXh?$JNvgF4cu*Mv_-O8qWObjdy^M;#-V%7}4bpe4(2aPQ-%Jl4Hqf7XxC zcD)B_5$x<|-zn%E4dCxzrCJ#1tjE6$)lLR&Fp3i(j1<+x49)3Wi+C+!V-Wv1FQnJW z#x9~`X(Pi4r6+0gb_<$S&y=B9`17$@#FA$$933=s(Yf^Kzhzw&dfzUmr- zkQH&V?fl+*UpAyg9w$Xv4@2Rswf73HPPb`UbnLE!G1Tv{)M;59%cR+BxORe@J-|nY zd*ov?>icbI!0W+&u|{6Nbu)seLf%Xq<*NlV8bLD`yDB91OQR=mSyyvwf1zW+6;0mX zlVYE>Rk6@XAXZ?s!F;K#P=V%%L%<3+_Z0}a@%_N#@LF%dv8|vnVYVP-zf*PeT_a2# z3OjSadCbPeX-6-sOb}w~iB!vzlSM~$ZN-w=UW7w!beGIi>N`Hpz6DYbEfG(*{Dp$0 zhz*=;LQwwt(AO8SfLaC&f0a~FbTpBogGmnUr-SReu5e#?h<9`4Td2f~&46qwlbwsws$auuZJ zA_`pf*>WecZ*nJsHib{8Z!74@2(z%DI-KeWRH~&Wp~As)5Tc~9e{kq5?Fju^nADpKI6++I#1}6IKgUR~R^z#3x|$&uhS!Qc10H>`sd;W-cWU?eech z6w(PX-d@%NZe(Din^P(8K&}D?z#$V-%lYbhS1$o4hQb^+e;TVV*e(HRS?WpRRpcH` z?Aw{ET28yw7*Sh0*;@pAM!5cV9Bg9}r;FVUP346i_4gN?RC*?hvJ#D-C)ivQe@2?0 z7Zg(C9D$h$IM>-90#HSoyO{;$%qo<+FRV~*9k#5$vQ#8siB8RWf#iKzPD+iBpsZLT zf=~4AeSjcZf9LMpSypJlfE87r@Cm}yv3Fi8z4P=|#4a4yQwpswsXrCi#(0mCix=7Q zEsc5UiZrqLmzsa7-#Te8{A>yR+u@!5rpa3!11 z&eM%4j|IAf6TugA*NqdQwqMFKI>o4?k?_TEH10a%7YqAWU^Ob2s-i# zDc_sxM4iK-Vc56ivl&FYtI!rqy+`}JVAR#01+zqoVlEP%Z#)1hH9z!DyUJd=_QZ3{ zVBZ-}f78=_!$#lDsa9yxz!$uw9NJCvdR7z4$H!x;B^uTdbrD^ui)pYEv)3$nS8#%+ zRK@9mMZK?6a3}S(xH7j!pM8C?n#I@m7E9MHm#KMo?5o#yEVz@_Me`14mQf6C-+1@+GdvK2i7*7IV ze?qHu2|yr;`=Vv(^=qJ^AxE?01IYTC_3D!IEQexVnqjs+W;UE;5@8Z$Fwfnu`W$RW z%U%uwBM)>QY-FjC#(m`{5E(C=3AfnU;iI*f@u0!ScG`HP|0NtQ59vUg{roaVeI$`e zCYN#%s&c$-D;S-9VYV>Y`V)cu`)5zDf3W>+2}N%gd()nk6$OpEW-_lTBgzBpB(*Q6 z6(-_ItwJ_-b~vtVd+tVed)}OMs>Anh;j+(|LSMmNx9DlkvrGcnd+U(qvgX(JOsck3 zhMK>;q?XHys(sEO(+%yRn2$Gojnn6w&=;j%v&_ zo|riFswTr)`jxS@R(K>k=rA9`TYKV8aL5a9gv%bVh6U0`Cy@2y8|E>~yG-sGLhp90 zo8SBWI>mPhw(!usW4j`1D$?JKeQAV+g@0KPJdUu;6J#+x^D**Wu4mf53t*naVl+ z6n>jDiJqC6?bW>Cpw0Ha0~Nsh*%6~1=lX>dLYlrZ;Enof40SvM-rm@vo4jg(GRv}L zC9m4cs`N96D&h**KpAWIr}yuvg1$Fp?;(tuXd ztRBP6JW{2gG}~L{P)sJ5f1~8l>f(js)Pg!)P)k1dKm^AsCh!E|&#S_g$W~Rdy?=x^ z?2(s3JSlApwxGB_tW{Z$)#())eH(!~d{7}Ruo5gDQJGLlg zd>)V;i7cv>0byWO7x{2s(2}$pD75sK`A@H7J|5`cw%fXASle-|j9cWC0`{>NE#5h6 z>D}+`C67D|F*0& znKal6vpUH2BJus1$v{h7pVAzU88XPJO$_Bz0SS`*TtZz-e;&4WeJdZpLlNt7)v#g2 ztEnmLA>4u+`3MbH?_Q_k+2?;_gnByf1;rMe&}MZx50%5`klJ$o+u;v|kSj6vEc5C6x zkynmKkZj`xf5s#IG%?HHV*5prlm`mpJ?k+&DX+V>k6DkIqOv_ztE=L^CXzbf0moYx zFPV_ZWK+RK*V2gvA}s!Djq$15Qd9vQIS(jwo2T+4A%Y8VWFv3he1TffLtrwCf)YnL z$IWHW%Mpo2X7Tq zyyYB0vu4Br0p!ZNEZoi~BI`RwG!2&EN8thg@Q%~bxH-bPdiaDv@3KDV4ZHER5s~+3s{U^#k*;Xd#vXR&kAj@?UuEf=l*(BQ?jG(E@qgR&Z7n>u`z$UF& z61zY!`kpwzz68^M6lvwK_BgRo6H*@;9ywuQe;)ekoEp%Br+exa1yZ}5&GdTI>is_R zZ-S66k;tiK@@rkYrW*=y4HqXvbW5Eqe6I4|fmi*hb6s6!!XM0`KQ~IQA>tQJH9X4p z!WY%;{jBH}WYzdStnZ))P&!Iq}@<-CCE{EQM`?*~ol1)6vdgj)6fp+eDTPFFc_ zFQ_tVdH}NJ5IyS1#H}=C=g4>>=M#?ie*$dikr8p8fr=LUbeT9^rUC($;=X1*b{?qS$HXdz zRdVt7*OQ5{9a= zOLW|u4XEg32}R()$f3YoxwfzJf6rZ$*R)YoI1qMIl;*RYhaa4;?^zH0_;0cvAItyK ztcNLV=`r-;I#bwsq4704eiD_1(w(CkxNnm92mN`2iP|4uwVq9yAjhA}W zXQ4NrSGO1SYPMV!TF>&O)H5Qcg}VUu7Ib&>b+t&wkBw$Nzm$#Hf8wru->;_7Lb<+D zr!Y`AV2$+zxWQlc0ZaGBcNSYo9)DCFWKDk03K-l!<5?hE>?k?M@<9)A?3!P{eBTm} z4nAEWf-mEtQCP2d)AFwhXM!u}CJeR$_gYgf|Czg1PwHa)%w8*G7bNjVmYVWOpnz@7 zto&^I?Qql8Bzv>%fAnlp9yp1e`L^^>v4dv?8q5=im9phS{kf!@UibIjS#Ze1aNJKB zW(Rc^|3BvbJnFh8yAQ(lKKFUwZ|YXJderQ;tiiG-Yrq*qh{q^&ndrsA^T~&Md?Ok=xwIpaR>p0}Wrb+QCoVajw+MN2W{-qW2 z8G(@6h;^LIrzx9qM+FUdum+a1-k>arxv-E0d8@aFa?qTf=?nZE`XjT|tZ6|e_shQF zoYeGOt_&GUf6!rMuRl4L5j!a`!6BZ&63|Cgx$1r9!UC3=o62tTf=4i9C7GpaiYkPV zkPX%YiKrzh3z|OMCMg&QUI(B@+kynU)BgZLK)%1hJ>`+tP#V5p;A+h?){io%vou%G zB;!)5)~Z;UDV=z|QYHI?rOJD1H!F?EWC^=SPah<%=6RqzI;7=RQGO=y$cj-uk=xDxYj#+k!Z zPuxya3WKNp8h=aM`ve@4crn5DgP9?FhgQpFpcY3$HY5@*CKKtC1FX!@FsR4L)F~}| zaOF8q6=aTt=FiI$k=dQN38~oPHhlb3SMw>}=5;iQ=Ytuy*)`~6Un?$_q>=8-M1o+C zTZe9G0RfHh+RY`v8C;A*(OJPm)$UxW1$CA6pf--Sb$>AG2(SWLSd z>K0@@)R$+qa;yM6jSHBln~rrb%n#mAwl@vTbV`_#UiF(gzw-qnPfV$!<(@1=1U%Xp zHT8P{vkRNWGY_B6h>A7Id>ZneS=@+1;?a+O|24qbMKa=$ezp2fEf0nWaWf7WRLJ7h zXx0)Ox_?)<3A3(%B|R`eZqy8aZQHd=Dv|nnMl(>`y5pb^3!3f(%34ZeqHWnn=291> zS!te|#%DZ`IRS)LG)1KC!(sk{O>+Toe^ZG9X{-kzV1bWik+xRlX+qyG%w(KOiz}xg zc6Jy#5BM-%7d%fiB0}>kOQ|1ULKauR1sZP8<$tHDn>kDPv9$#+qcL-=b~q4s1TxQh zz=UWje4@X_64a+KUSlbzu4X2EkY}40Va_c>sm`y(lc&iw+ogXE{x*^rPQk~P<3c*l z0i5BDI>%;nbSHppr<%H_$_q5Zaz0&%rGj|aWzzlamCH? zO@GV*SssSOL{m!B5%4IMH7XYO=CW{Ae7#;5CJ&c3&qvme+}2Qe=7gr7*N~yV4{@EzPyE&Gni(lrwX3^H3MaW%yD~ zqAf_K#9}GM9TtE1*#e9N^L7+NjWlZa#(#<31l*bdb&MHX!08xF1c1k4*4HIl-e3f;+y$JgkTE%w|_ks zyRQZ(+Z~(PS-Mx8hU-t4emYjGz_u)JHJiU{w8vj7hfTE*R}dO` ztpk0eBQkq;kTOG5b_TWkskZw->wl$;0`IK{nj#Ca7QDp-3On@#J@Rza?e>|3_uUBe z8$~0UW-urvowBYK@{5#;pAQg2lwTU-!F^wu^^DymjfXW%(jeo3b<2+Um z1iFA$h{M^XHS{7?MxJ12$`?d!=VeLx^llWe)WSbTh9hREkiZ#%ImnxEKj#>o9gqKK zqGjw`7m6s=ZRzkFWso#Suoo4mX~Ftfv<9vm8~)WGWs}o$-ia8`&aELim3T@$6w|iY zS8;SjmhU{fO&aUA#wguDlz*M!JK5?GR1Pz0WX}f1j)@hb(r7c?F_<+=e0*l5yVe1A zzQI^D1A#Vz4i@(?`DcUiu-uCkm=o1i#akQ&2iPOzGRL*Soy~uy9s0ZOecGe*IirwR z9i$iJ?BH-+*t6}blAgV_(;b0~fRyHfus@qb~(YSESAyV+yZ z>D)IFN^;C&Ue^b3wEhWbJ1WPD4lCe?7-jL&NHx`(q+}q}tVM}AWHFjlEJqCL9R~31 zkJO7LHYaX4y_sw%U5*0L9zngomM?oV{}d zc6n49EwyMT6E4KtpMPm(N4`6on_R|#u2wj;WE9NB7or$)YNZttg7K613Xeb`?wZ6j ztM!4m#1CFQn>(EhK7|H3@@WilIO7lti5*$iixJ9oG?K=IMH4F-iv7|q%-&}Axjfn8 zVLv$oVA+Sfpwm}KY-^NFZD?)o$3|zC{hZ$TU^qr!ofs!M6n}?TDZn0>4avf-G417H zkn>rOIGho~CB&@}Xm^6zl9^|d_dlU}Y&>$+x4(IV%c!G+^Io!uK=ZXol5PhaWCNiaxevKcg)gx) z2eRi>|LI&$Q-AmUI#F*-Y?S*ahmKR{b)YD}g9r1TWSZ@!pTCchLS~gXY+O%vq%R)N z;Ar~9`Dqy#k0H!z`eQB%8Wm~84M`;8`)b^}97mGm4(8hqoN%7UquIBiWPt~VCV`ay zzF#a7JDT}l*V3d&VQ4U4$?Noyy_x8d*}FX~5Nw3&Wq;sHvt0n96&KOW0B14`Pm&Dr z+(ReFwj(krd)wr8sq$jbWNojL4e&z73}s9)sHx@od=3J7i76H1p#@rNpMBq1rwrKW zYDWhC+7|zLnKy%n7_2kP_!KQX?pISLC&`2iB4*GyE-_7J3DW5IUcfXh zM551wuz%7_*^VcJa;^ff^Ctx|vfi*;pMpdPwzbK+0M|=()?+mlFsQ0pYLrq6$x|D0 zn6X<|hzz8gQL&W!RBVJCEzI1_i&NzFz;33&{kfNpRY&E;VF8B_(t`ttK#b-p-cWDO zvkuB|4D(Dv#Q0c)(ehQ+A3_x;n&4RuDRD1UI%mlW)}nZY68v{|Z^ae%IZ;vgjv zi7xnrnj8!y291`nr_4hQ&JNr9+^*Vf%vtC#Eq|o|qct8gRdj2zhp+*zy-l5TmL#^NdUl9CHEE{rEKbFlIG1O89}l#XF4sB?OdI?)r>QUBIKD~+IGFd zq<>r5+zbl$0K}Y~QweLcH<#K90}eC7(cC5%B}dLdZ4YuiC?rrNSziZ)fJHKL7dmQO z%*tIfBf6OJ9c61#2da5&I9q4%dMFPACI-k9+?9*%Q0jemY6z0XP>6<98pNv16k%0-d!-%*Ka<0|{u z_UmFtxrb}{C#!4+zEI#o>;=h84tHs(^S%fqn2F)FAX!AMgUmAM6WsXj+M6|PM-;Co zTmGg|Fdnj+jR|wcs+=+Fk+sZb)izH|85a+Lp8yD`N3F^2DNa4hX+hqA4x{gEJbz4n z0tF|92&DsB1(DUz*+5+GS=+UtltBO*VrRlIHhsdY^}#ZiGmA7#n#1QH4mLv=U3)RR zpzYk^gw<@I^Xl!C8R_a7MOp260kFm6$rQi;1@Jz4621OqwPq zRcGI=v(F}+m8%6vGIG9{!XY`vo`0kjkt-So=Ug5krDo7MPJ&xN=;fxUDF+`#Ig5%0 z&cNw4*Qe2yf)X5^VpGJj?p0k~P@A-6_BOm!C#Xv26jo$b_)-J12FIOml+wjJHt zi|uhWy;atO3UoT24LnMwa@ENs9|OOhJ=EJ;xnLTDf-g|vecxv)WWMe{SF@SP78S)D z8k&?X@ZHBNi+vUyd{an42axJ#z_Fi%-ov6l3Pl3lbN{*Pt0u|G!+4`c@+5> z>7*%UUHWv>MCaO$S_TN4voV~U;KWUqEpL`FP2rg3?3^W#2F#3pBYJZ_7Rg za#}<;ADlZ^JPOI%lz-QpEhSzEFyVuRXerg%n?nycX0O!HFmt<6N5-P$nd6}@kl^x0 z!+<~#-KqOd0c}yyRSJjB&*ZQRP8^dFswR-#HffxzQqP*RZvY%aEFG3jlD~4>=?rpH zgpdVm!m9f{|D(8lk>*$!!*$!~F|*%2!BC$v>%Ewev`1$E@qYwFy02B0MK55&23aU4 z=g>VOCnRQ`U_^BNQF2z(1T8=*H4YxG5SIb59_`^_~nT(x?`B8+JXZ=i`lQ6I=4 z9^8lMM46_}^?wtXcXDN+o6NY;%gmt;*xu+p$28OMVz%$IBY=FdCCLo;whMP z&qLE&i{lS@7v4zRP!bz!UB(Qv=k!~bjW(YKrjG+L)_>8|6+DYHwbM?!oozFOLv(sR zVc~$vFx?2_XMAUgyPT$5kR~Fj*>YIvhODtIZYhP5lR@h_G@@Qel!>a?-=E{LMb4c8 zbOXmm5kWpjObu}_&`Uy1Yv+Dx`H`x9K+vY zjB^ipi0Ek1O^cYy^TN2XgcTw9nnRl_QE`L8Ii6i2ucxSGUg(2#Ak@{OQYAZ}jQfRP znMNaXH&KG?v|z$XV;v3*9T6+fG#?$Y*w$$-KYt0BMvFFM7eV@hjZ%b%P}NNzN?`P$ zlNatb5Es#{6dzqLN;X&dE}50gk&A(+!=gu<B<^@W9;Bl`4gV zEp&=QaEAJ+9KRu$QAjgc6E|Cc9vU06DSfAcLRDnRVT!7{(;$)?vbkZuD%iY5}y z(`p4obFr2m3y73SXDs-Ej0|Yg{EH^>21gR4{iuE&KBRTCYr-FcPm2|iJnMm#Zz%>f zSja1@vS8$a>%@nK$o3anw7+wd5O<;rP#jHtFuBZu21m4^b17$XO=o>j2v9{UcSXOekz zDR7O{jyNAw4MTO!C2<1{E$6KL$bVpcI#Y{T$4012BAV{TJRjGrMjd49!CZ9l zm@oNva2e2}4GhQ|hZz4H+s0@Bm5vpIbAZNA$a!0Li(v`-b%ifrn8Ufhlz)j3vbV4p zriA%eZ%mn9tVf93M`tv>*8SxSpD~HB3Z1uU)ds^swd3YVHFaDcmZ{3IAfee94|2pA zrf#7x3xr@K7FngFrawrP@lH*q6I`_J* za?_IMNdcMN=Hv2~_Cx^=jej&o_>S41e&6;NHD8zVa7_cpJhW`m8oetQwnMfT;w`a+ z4aUkSO(`-ii+kr`HH1ii$U$qTerE`IoNYJAxni;nHrzt z$N3d>!ze3gMn|(g951^wOqtbY|DrG#m-`UvQHB6|e>$!?j@irfQq#kGsVeQ!Al|x$ z1+tcodAdbS5;<>V$JjK(jc+`$YFV%88Gk=V5pTnYB4!E#kbht~$IW27kKuNUVLJ$; z)1Us;>4mh{4RkuYs7Y1xb2BVf3}JD@TX_c_K!5C>8g|y^W#Je`+mqWk&DbGt3Z@Uu zs_zt*A9XOPw&bQ=I2hs1K+Zgt0aF$(gpS007iMsq24FnSTlxDFn)zPNSTjof-3efH zto4(xVFtmEntzLIkIpcEiyEKeZIr~(r`=f{#65|_-jmfFQfJ1lqL>YK1|;}iVX>k} z2IAyh8(#C<@o71qL*yJlGD@MEvFI1P^>U>p2>aqI8+HihN(eVmY+IM?vKklIQ}|JE zzZ#7Cg(EN~{Qz1ZK6jgX?{h4@^I#m<)>ew>Jb3nPx_|ZbASPCM&K9MIw@HR4@tbj7 z+<0*WDh61M=jbrjA>>V?0?aF=n$qhFJ9i1$Jn>`dm@Bao(KujyvS7dt&weOTHxsQ) zfHg|4mtc^Igjvp=zs`vu%%fxHoAWujX(aKtU<;TbE%!Qf;-E9f^3C|sd_$oz8DEbc z!4>I*D1UZ|?5?4>1<#AH9Rl`psk92T)Huy*MHTFNuJ*w;Ldo&m}Yi^3hSULftde} z0)S1b%>h#;U(LxYBs^H$g<2kG?wyb&P<1-tm>2@C0ZMx;v5F!VGvl^L=6yEz^CnAD z^HGQ>r4okhHLj;kw9}L&hgzR=tVwQL7zS%DGpcz$XQB(SxP% zQ-2hbl;~8C|1tG%E#(8rn1`?}RyIvEH8{QlIGb3rIUmJs@L1ETLy|#eT}s;oXD+T7 zR9M*rmQ@qLf8|o*MoQM*41lwj?>#u!D5`=Dk7#eXt-w+<*c@kKAb)7tG4Y#JLHr(BsPpBUIC(2YH z;aKdw6Js3iuZ)t`A(G2$tY)>Kzkk4EdcU-jmiP@Bv?-h1@OG8{i12JtTIG$1r0t+Z zk9dYffeW``<>t^?_8P<>11V#s6J|5)HkyU}g+7jIkhG~7J*`{JAVgn>G@_$+fof-1 z4J8v$i5ZPU=I1CnKiYxus)wGBnK9DK8!}vQaxYwUMk@Yi(kH~aWf&=Ojek5s@*<<|PNlPz>q}~fz2X?hKSvo`Ci+;IOE)3zI-je;HKunv zr9N_3(*YNw2;79>!~D19#oweE_mKKmg?C_(6#ivIY%Pot2yPzk7H1#7Y;Q8 zS!dyK4$&<|VLm0^LF6i%}aZ|>xQm*<+Jo=#UT@$pM*5_^MHX>(fI-E z-*n%#O-Plx?-j?oG?69?g1ze|aXl6mA&D8`vMkjB?VH&bS&7org*J}PMx_)5sfiAw zpNk=%`7nmmyJM@&i4Rw9b%4>Z_%kG3CeP=i!hv#?kq@ed z%|d!75=?z*qqv-Q*Q4XmB`8(SJR9B=SHjj}eGpf1Ce5ybhI~WQtU#Pqlbg_<_bEer z-LD9v?&~&c*0o=<(tqi%*;rQ|U5JG4Vo6yo(MW0fT|n-7e+rCksHNaCeoRY&!4e_> zWmW8wieW8IE{zyXS*=XQv}6!)tVz{b`!0dSJR3x!xy8jb$5N)yj5b$pwLFNteO~rBmU>o<3drEou@h zvM(VKZz}c!9Dh{evG1g?SVt^6FQ(NlX0|u#rWv$P=0M>Ku@itPsGRq?smdv73+9;N@QhP2d?mgolik^R2c{O7sl(ida_D4xu@`4- z4iC=>oKItGS1@+&f;VFgQcfADtJsL)N_PllciI}pf`2BMfsK&s)IO`R#Hp?d+LKPH z-kIzM89H-qi#~F)lWlLcM$H|nxmm41hWHA_aG2}UF-sxmB1OIq71(ystDr{hX0mUiM;Ud7Q-Z2Lq}d8>GgI@zkUFrT#yR$_)dSp}XG}p1C~Dd#>NqcH z;c?D92wN3h61pK{|J!0cPL@(!^NC^ALOs zp?_^;5Nw8Dv_V_mHX49js6l-@q0SosE7A_^Ol+kF-*&B8-OSKVVo;%! zN|)4800961Nklh=YEJCn;J50k|%D198?Ik znep^dX>ey86`S5_ukJSU<$oUa68RLY=$kkLG>Hpe?O0YK!Z04R+|*oS zwnyYR$Zd8(=nG zUD+XQEvdw&x(lk2%X!P9i*Z|#!7ytJUOGP>vO{M)XpLKHKMR_}*#Q-=zkh}y-6xtM z^3)C&iaWfDXwB^HS)pj@>4k0%#?484Fsg&B(Db1&SY<$++G4*jd2oa}Vp2P?X-<~Y z(LpBSOcD2Ej-hvqCv~M#^JR!QGm<|DV9ySQj35>0t}$tnGOUjRRY6sl&h9CGWV8d= z=}gd`kVP7K)Yg)8WCkC9-GA9jd-`?wTX{bkZ=i{Z4iX{FE-k1m0C~ApFlN)i4=<(B z9k2K>Pu09Yq)eKXP!@e`GLtDrDclG(dR=XWlH-?qiWSENjx4t_(^T7af-fBPgb{}q zUqQzydQpHK=PFW&7cMJTmAmG-7hCH%!W{0~do7pjKv>1S%aSaLi+=W^gZ)3Nm;p>Y_W6fWo>lJ4tB_8HaEH$4U|xiy+9cANi!QvV;fQ5!(qAAchG~? zOBTvC+m&6vva*k#q>8P2)4qwik_R!wOZf)<_EP6Q1q!g23p3fg)F9hZkLl8z_?gY4 zoYS!TQB?+M@h&{6oPVV!bP(OzT8FI=K&eAF7M*mTEdbO^*`ixI>Dp5alFh~jhgsZ& zFjOK+#t_|@0kzB0S2(7(y%!=H=gyc|FEC9u)O}v}3oytoL_grIa`tF}oBnN#`H{HS z}y3y(|YXyX!Y>ycg%KjfGI)$23;i3f&P>f`4wXaicQsI-cJ{GvnJ# zL~7DTnTPG?78&k`De_$a-t{?IgAa(ner_9&oTnw0r4DKM3`(0>KEaL-n<8($UOY^ZY|ldNNO-zNoiVazQ}PdwS(MJVo{4PP`w#>mpN z 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¶ZnadgP!7iSXyKby{c^Xn_ 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�wP2D zsx@53P*t&Ey5>obJp0^p$%3e2B6g<_#I=5rm#K6=G6klY+IriLxBkP2uKmPURA^yb z8^ZupWKbgKHza@FIZokuuXh}9Hbm|OIDfC;RYldR_W{!3wW(59p60d8q9j%t88wIC z0^1|U#{2sx^!}t^nQ}G+)EyAdRxBEf;AAr3o9>am?-)T^qOU{b z#RL}aRFG8T>0Ny55$Eq&OU^kB1$#SlB>dU0b%4yn6g&&8;dwN>o@HS zo#a~1UPsf6?kYNCuC0Lj$wKuyGm~2lttKXN>^2|{BD56}7$7DG%?hZgOn=+R>gvKZ z&$w#$uAO$hF;&e3Lk{ly6QarS1OZEs6Fy~9!>AQ9X`cD)t6ut?E1RZaCmS62l)5qn zlp-0Kn$kf+qt&L^WFizf9qPxsU%^w@Ys#utRd=ehh$YbGX7kSXeeV97_hX^9)@s^I zCw3gU&9%IuASPxOTi4Z3e1F#~U;OMxwzl1zG(@N>QyJz`=n`z3YYGZmL#draWJQgi zr{TD1Wwy&nw5pN>HT?`%cbZqGU$O=yad$iy4TI5Jve?U==4w_<>RhjS6e%DTq-2yTrAoO5nR{>9_vz2yytFVP3V(YoBkSLSxbVk+ zIO>r-KiuVod?E-<3~>|Ofm2K_X^4>6ru~soyd5ytV8t;Wh7xQHUUOAwG8l;{jh228 zOffi`-CU5mk47dS>nKOBI^Xd1PGY5T4thmN(D0TLfaDnq7Sw2|a1K2k8a z)C5|HV2(}$Vo+kw8rJ)B>KPM`N+dLdJY9e)hERb}wnsT|#fDa{!2 zpxl!!otmoic;{t5R>P<)yodl1i<)|HEfpJ|>=6+)V6F=L2-sEHouGDU9lh9(2lO=H z!(_x{daJB0?(Y#$f|g&U_v6HU3@fB6QZOUWA1gW5tuvGwD)BZ9DVmonuhiu9QfVJM zwPZ@Z!)KQ_Ab$h~u^|BGJ!HqruX*bKy5la(?D3gW81|%TZK`I!$SNx_NJP+XPJZ>z z-tm+tUB0wX83VCm!wyLu@**)^Pqk+tJAJKQ&k*Nbkf9WYJJL1vc+R3>X3l0Hm8qEX zVekAB}-7&J&Vh) z*>i@dROBXV0>Ua8PUT`QA2sf@g^K56gVJ{$7R?xg`P16i5>Ekivpe?!h09pb%{K=IxQthGe^nJ?e^l`q{))Ea6aXmw;Gb2PGn3F7vdKwa6j zlNUey(r@|tYj$rRuWd}~y7mZ;LPI(Or-aKLD}U+Osx#(76Yc(TvEQ(@f$KMS+>FA9 zC#(jO3iz-@s6WU@2lwSd>q7{d1%T87nxBptMuihaR#1egWCt>Y3!RX#TzA|jg5qv= znFCQg={#P?F()8NR0dh-$q4b0NJU0$3L#L%Y^}chxmUgW!=L-dcYMeY)EHGEB?3oA zIDhr59QVNmF${z⋙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