diff --git a/.github/labeler.yml b/.github/labeler.yml index 060922825..fdb0e58b6 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,4 +1,4 @@ -version: "1" +version: 1 labels: - label: "size-XS" size: diff --git a/.github/workflows/artifact.yml b/.github/workflows/artifact.yml new file mode 100644 index 000000000..ce7b47b6c --- /dev/null +++ b/.github/workflows/artifact.yml @@ -0,0 +1,39 @@ +name: Build and Push to Artifact Registry + +"on": + push: + branches: ["dev"] + +env: + PROJECT_ID: open-targets-genetics-dev + REGION: europe-west1 + GAR_LOCATION: europe-west1-docker.pkg.dev/open-targets-genetics-dev + IMAGE_NAME: gentropy-app + +jobs: + build-push-artifact: + runs-on: ubuntu-latest + steps: + - name: "Checkout" + uses: "actions/checkout@v3" + + - name: "auth" + uses: "google-github-actions/auth@v2" + with: + credentials_json: "${{ secrets.SERVICE_ACCOUNT_KEY }}" + + - name: "Set up Cloud SDK" + uses: "google-github-actions/setup-gcloud@v2" + + - name: "Use gcloud CLI" + run: "gcloud info" + + - name: "Docker auth" + run: |- + gcloud auth configure-docker ${{ env.REGION }}-docker.pkg.dev --quiet + + - name: Build image + run: docker build . --tag "${{ env.GAR_LOCATION }}/${{ env.IMAGE_NAME }}/gentropy:${{ github.ref_name }}" + + - name: Push image + run: docker push "${{ env.GAR_LOCATION }}/${{ env.IMAGE_NAME }}/gentropy:${{ github.ref_name }}" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 51d4e05a8..00d914dc0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,7 +6,7 @@ ci: skip: [poetry-lock] repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.3.0 + rev: v0.4.3 hooks: - id: ruff args: @@ -15,7 +15,7 @@ repos: files: ^((gentropy|utils|tests)/.+)?[^/]+\.py$ - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 + rev: v4.6.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer @@ -59,14 +59,14 @@ repos: exclude: "CHANGELOG.md" - repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook - rev: v9.11.0 + rev: v9.16.0 hooks: - id: commitlint - additional_dependencies: ["@commitlint/config-conventional"] + additional_dependencies: ["@commitlint/config-conventional@18.6.3"] stages: [commit-msg] - repo: https://github.com/pre-commit/mirrors-mypy - rev: "v1.8.0" + rev: "v1.10.0" hooks: - id: mypy args: @@ -82,7 +82,7 @@ repos: - "--disallow-untyped-defs" - repo: https://github.com/econchick/interrogate - rev: 1.5.0 + rev: 1.7.0 hooks: - id: interrogate args: [--verbose] @@ -104,7 +104,7 @@ repos: - id: pydoclint - repo: https://github.com/python-poetry/poetry - rev: "1.8.2" + rev: "1.8.0" hooks: - id: poetry-check - id: poetry-lock diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..deb43bcd8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +FROM python:3.10-bullseye + + +RUN apt-get update && \ + apt-get install -y openjdk-11-jdk && \ + apt-get clean && rm -rf /var/lib/apt/lists/* + +RUN java -version + +# Set environment variables for Java +ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64 +ENV PATH=$PATH:$JAVA_HOME/bin + +RUN pip install poetry==1.7.1 + +ENV POETRY_NO_INTERACTION=1 \ + POETRY_VIRTUALENVS_IN_PROJECT=1 \ + POETRY_VIRTUALENVS_CREATE=1 \ + POETRY_CACHE_DIR=/tmp/poetry_cache + +WORKDIR /app + +COPY pyproject.toml poetry.lock ./ +RUN touch README.md + +RUN poetry config installer.max-workers 10 +RUN poetry install --without dev,docs,tests --no-root --no-interaction --no-ansi -vvv && rm -rf $POETRY_CACHE_DIR + +COPY src ./src + +RUN poetry install --without dev,docs,tests + +ENTRYPOINT ["poetry", "run", "gentropy"] diff --git a/config/datasets/ot_gcp.yaml b/config/datasets/ot_gcp.yaml index ebc9fc9c2..566e2ec50 100644 --- a/config/datasets/ot_gcp.yaml +++ b/config/datasets/ot_gcp.yaml @@ -1,10 +1,10 @@ # Release specific configuration: -release_version: "24.01" +release_version: "24.03" dev_version: XX.XX release_folder: gs://genetics_etl_python_playground/releases/${datasets.release_version} inputs: gs://genetics_etl_python_playground/input -static_assets: gs://genetics_etl_python_playground/static_assetss +static_assets: gs://genetics_etl_python_playground/static_assets outputs: gs://genetics_etl_python_playground/output/python_etl/parquet/${datasets.dev_version} ## Datasets: @@ -36,9 +36,9 @@ anderson: ${datasets.static_assets}/andersson2014/enhancer_tss_associations.bed javierre: ${datasets.static_assets}/javierre_2016_preprocessed jung: ${datasets.static_assets}/jung2019_pchic_tableS3.csv thurman: ${datasets.static_assets}/thurman2012/genomewideCorrs_above0.7_promoterPlusMinus500kb_withGeneNames_32celltypeCategories.bed8.gz -target_index: ${datasets.release_folder}/targets # OTP 23.12 data +target_index: ${datasets.static_assets}/targets # OTP 23.12 data +gene_interactions: ${datasets.static_assets}/interaction # OTP 23.12 data -gene_interactions: ${datasets.release_folder}/interaction # OTP 23.12 data finngen_finemapping_results_path: ${datasets.inputs}/Finngen_susie_finemapping_r10/full finngen_finemapping_summaries_path: ${datasets.inputs}/Finngen_susie_finemapping_r10/Finngen_susie_credset_summary_r10.tsv diff --git a/config/step/ot_colocalisation.yaml b/config/step/ot_colocalisation_coloc.yaml similarity index 84% rename from config/step/ot_colocalisation.yaml rename to config/step/ot_colocalisation_coloc.yaml index 4433595ef..f01335514 100644 --- a/config/step/ot_colocalisation.yaml +++ b/config/step/ot_colocalisation_coloc.yaml @@ -4,3 +4,4 @@ defaults: credible_set_path: ${datasets.credible_set} study_index_path: ${datasets.study_index} coloc_path: ${datasets.colocalisation} +colocalisation_method: Coloc diff --git a/config/step/ot_colocalisation_ecaviar.yaml b/config/step/ot_colocalisation_ecaviar.yaml new file mode 100644 index 000000000..d57887c93 --- /dev/null +++ b/config/step/ot_colocalisation_ecaviar.yaml @@ -0,0 +1,7 @@ +defaults: + - colocalisation + +credible_set_path: ${datasets.credible_set} +study_index_path: ${datasets.study_index} +coloc_path: ${datasets.colocalisation} +colocalisation_method: ECaviar diff --git a/config/step/ot_variant_index.yaml b/config/step/ot_variant_index.yaml index 1625c7126..3834196b2 100644 --- a/config/step/ot_variant_index.yaml +++ b/config/step/ot_variant_index.yaml @@ -2,5 +2,5 @@ defaults: - variant_index variant_annotation_path: ${datasets.variant_annotation} -credible_set_path: ${datasets.study_locus} +credible_set_path: ${datasets.credible_set} variant_index_path: ${datasets.variant_index} diff --git a/docs/python_api/methods/sumstat_imputation.md b/docs/python_api/methods/sumstat_imputation.md new file mode 100644 index 000000000..6e64d35b1 --- /dev/null +++ b/docs/python_api/methods/sumstat_imputation.md @@ -0,0 +1,28 @@ +--- +title: Summary Statistics Imputation +--- + +Summary statistics imputation leverages linkage disequilibrium (LD) information to compute Z-scores of missing SNPs from neighbouring observed SNPs +SNPs by taking advantage of the Linkage Disequilibrium. + +We implemented the basic model from RAISS (Robust and Accurate Imputation from Summary Statistics) package (see the original [paper](https://academic.oup.com/bioinformatics/article/35/22/4837/5512360)). + +The full repository for the RAISS package can be found [here](https://gitlab.pasteur.fr/statistical-genetics/raiss). + +The original model was suggested in 2014 by Bogdan Pasaniuc et al. [here](https://pubmed.ncbi.nlm.nih.gov/24990607/). + +It represents the following formula: + +E(z*i|z_t) = M*{i,t} \cdot (M\_{t,t})^{-1} \cdot z_t + +Where: + +- E(z_i|z_t) represents the expected z-score of SNP 'i' given the observed z-scores at known SNP indexes 't'. + +- M\_{i,t} represents the LD (Linkage Disequilibrium) matrix between SNP 'i' and the known SNPs at indexes 't'. + +- (M\_{t,t})^{-1} represents the inverse of the LD matrix of the known SNPs at indexes 't'. + +- z_t represents the vector of observed z-scores at the known SNP indexes 't'. + +:::gentropy.method.sumstat_imputation.SummaryStatisticsImputation diff --git a/docs/python_api/methods/sumstat_quality_controls.md b/docs/python_api/methods/sumstat_quality_controls.md new file mode 100644 index 000000000..dfc5c9d16 --- /dev/null +++ b/docs/python_api/methods/sumstat_quality_controls.md @@ -0,0 +1,18 @@ +--- +title: QC of GWAS Summary Statistics +--- + +This class consists of several general quality control checks for GWAS with full summary statistics. +There are several checks included: + +1. Genomic control lambda (median of the distribution of Chi2 statistics divided by expected for Chi2 with df=1). Lambda should be reasonably close to 1. Ideally not bigger than 2. + +2. P-Z check: the linear regression between log10 of reported p-values and log10 of p-values inferred from betas and standard errors. Intercept of the regression should be close to 0, slope close to 1. + +3. Mean beta check: mean of beta. Should be close to 0. + +4. The N_eff check: It estimates the ratio between effective sample size and the expected one and checks its distribution. It is possible to conduct only if the effective allele frequency is provided in the study. The median ratio is always close to 1, standard error should be close to 0. + +5. Number of SNPs and number of significant SNPs. + +:::gentropy.method.sumstat_quality_controls.SummaryStatisticsQC diff --git a/docs/src_snippets/howto/python_api/c_applying_methods.py b/docs/src_snippets/howto/python_api/c_applying_methods.py index 12eaf61ac..d0bec9edc 100644 --- a/docs/src_snippets/howto/python_api/c_applying_methods.py +++ b/docs/src_snippets/howto/python_api/c_applying_methods.py @@ -23,7 +23,7 @@ def apply_class_method_clumping(summary_stats: SummaryStatistics) -> StudyLocus: from gentropy.method.window_based_clumping import WindowBasedClumping clumped_summary_statistics = WindowBasedClumping.clump( - summary_stats, window_length=500_000 + summary_stats, distance=250_000 ) # --8<-- [end:apply_class_method_clumping] return clumped_summary_statistics diff --git a/notebooks/FineMapping_AlzheimierDisease.ipynb b/notebooks/FineMapping_AlzheimierDisease.ipynb new file mode 100644 index 000000000..8a785cc3f --- /dev/null +++ b/notebooks/FineMapping_AlzheimierDisease.ipynb @@ -0,0 +1,1734 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fine-mapping of Alzheimer's disease GWAS summary statistics using GentroPy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook presents an example of fine-mapping of the GWAS catalog study for Alzheimer's disease ([link to study](https://genetics.opentargets.org/Study/GCST90012877/associations)). The study itself is a good benchmarking example for fine-mapping - relatively large number of SNPs, very strong signal on the 19th chromosome (APOE). It's worth noting that usually very strong signals are excluded from fine-mapping due to instability.\n", + "\n", + "Also, we excluded MHC region (6:28M-34M) from fine-mapping because it has a huge density of the variants.\n", + "\n", + "To execute it on your local machine (not dataproc) you need to install https://github.com/broadinstitute/install-gcs-connector." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initialization" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Your browser has been opened to visit:\n", + "\n", + " https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=764086051850-6qr4p6gpi6hn506pt8ejuq83di341hur.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=2Jvk4c7unAsigRvEKhceIxcrpGmeK8&access_type=offline&code_challenge=84guS6MmOY7qgvNpHLxoJbhRDBUAEUS93teMwQboD3Q&code_challenge_method=S256\n", + "\n", + "\n", + "Credentials saved to file: [/Users/yt4/.config/gcloud/application_default_credentials.json]\n", + "\n", + "These credentials will be used by any library that requests Application Default Credentials (ADC).\n", + "\n", + "Quota project \"open-targets-genetics-dev\" was added to ADC which can be used by Google client libraries for billing and quota. Note that some services may still bill the project owning the resource.\n", + "\n", + "\n", + "Updates are available for some Google Cloud CLI components. To install them,\n", + "please run:\n", + " $ gcloud components update\n", + "\n" + ] + } + ], + "source": [ + "!gcloud auth application-default login" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + " \n", + " Loading BokehJS ...\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n function drop(id) {\n const view = Bokeh.index.get_by_id(id)\n if (view != null) {\n view.model.document.clear()\n Bokeh.index.delete(view)\n }\n }\n\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n\n // Clean up Bokeh references\n if (id != null) {\n drop(id)\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim()\n drop(id)\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"a8e9a6a6-96f7-4efd-a426-b2299499ef03\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.3.0.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\nif (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"a8e9a6a6-96f7-4efd-a426-b2299499ef03\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "24/04/09 10:40:45 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Setting default log level to \"WARN\".\n", + "To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n", + "pip-installed Hail requires additional configuration options in Spark referring\n", + " to the path to the Hail Python module directory HAIL_DIR,\n", + " e.g. /path/to/python/site-packages/hail:\n", + " spark.jars=HAIL_DIR/backend/hail-all-spark.jar\n", + " spark.driver.extraClassPath=HAIL_DIR/backend/hail-all-spark.jar\n", + " spark.executor.extraClassPath=./hail-all-spark.jarRunning on Apache Spark version 3.3.4\n", + "SparkUI available at http://192.168.0.232:4040\n", + "Welcome to\n", + " __ __ <>__\n", + " / /_/ /__ __/ /\n", + " / __ / _ `/ / /\n", + " /_/ /_/\\_,_/_/_/ version 0.2.127-bb535cd096c5\n", + "LOGGING: writing to /dev/null\n" + ] + } + ], + "source": [ + "import os\n", + "import hail as hl\n", + "import pyspark.sql.functions as f\n", + "import pandas as pd\n", + "pd.set_option('display.max_colwidth', None)\n", + "pd.set_option('display.expand_frame_repr', False)\n", + "\n", + "from gentropy.common.session import Session\n", + "from gentropy.dataset.study_index import StudyIndex\n", + "from gentropy.dataset.summary_statistics import SummaryStatistics\n", + "from gentropy.dataset.study_index import StudyIndex\n", + "from gentropy.method.window_based_clumping import WindowBasedClumping\n", + "from gentropy.susie_finemapper import SusieFineMapperStep\n", + "\n", + "hail_dir = os.path.dirname(hl.__file__)\n", + "session = Session(hail_home=hail_dir, start_hail=True, extended_spark_conf={\"spark.driver.memory\": \"12g\",\n", + " \"spark.kryoserializer.buffer.max\": \"500m\",\"spark.driver.maxResultSize\":\"3g\"})\n", + "hl.init(sc=session.spark.sparkContext, log=\"/dev/null\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading the data and clumping" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of SNPs in GWAS: 10607272\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 7:> (0 + 1) / 1]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of clumps: 33\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "path_gwas1=\"gs://gwas_catalog_data/harmonised_summary_statistics/GCST90012877.parquet\"\n", + "path_si=\"gs://gwas_catalog_data/study_index\"\n", + "\n", + "gwas1 = SummaryStatistics.from_parquet(session, path_gwas1)\n", + "study_index = StudyIndex.from_parquet(session, path_si)\n", + "\n", + "slt=WindowBasedClumping.clump(gwas1,gwas_significance=5e-8,distance=1e6)\n", + "slt_df=slt._df\n", + "\n", + "print(\"Number of SNPs in GWAS: \",gwas1._df.count())\n", + "print(\"Number of clumps: \",slt_df.count())" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 15:===================================================> (9 + 1) / 10]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+------------+----------------+----------+---------+----------------+----------+--------------+--------------+-------------------------------+----------------+--------------------+---------------+\n", + "| studyId| variantId|chromosome| position| beta|sampleSize|pValueMantissa|pValueExponent|effectAlleleFrequencyFromSource| standardError| studyLocusId|qualityControls|\n", + "+------------+----------------+----------+---------+----------------+----------+--------------+--------------+-------------------------------+----------------+--------------------+---------------+\n", + "|GCST90012877| 1_161185602_G_A| 1|161185602| 0.0609052805639| null| 4.302| -8| 0.23499| 0.0111181765833| 6360456299763482946| []|\n", + "|GCST90012877| 1_207577223_T_C| 1|207577223| -0.122752564739| null| 1.403| -23| 0.822818| 0.0122652043685|-6742466305250328444| []|\n", + "|GCST90012877| 10_11678309_A_G| 10| 11678309| 0.0668997305692| null| 1.085| -11| 0.380517|0.00984571382836| 3672202482976347473| []|\n", + "|GCST90012877| 10_59886075_G_T| 10| 59886075|-0.0523916765294| null| 3.802| -8| 0.480668|0.00952612570169| 760299597568413738| []|\n", + "|GCST90012877| 10_80520381_T_G| 10| 80520381| 0.0701098772587| null| 2.736| -9| 0.793475| 0.0117897597766|-6168361428432361140| []|\n", + "|GCST90012877|11_121564878_T_C| 11|121564878| -0.186386086749| null| 5.586| -14| 0.037005| 0.0247938672944|-7548659272243096830| []|\n", + "|GCST90012877| 11_47370397_G_A| 11| 47370397| 0.0634588530202| null| 6.911| -11| 0.387521| 0.0097291000298| 1916491992423016132| []|\n", + "|GCST90012877| 11_60328267_T_C| 11| 60328267|-0.0892048800109| null| 9.335| -20| 0.371215|0.00980658024905| 3318332793803757311| []|\n", + "|GCST90012877| 11_86156833_A_G| 11| 86156833| 0.103281644827| null| 5.214| -26| 0.629462|0.00979200684254| 3806751464721795080| []|\n", + "|GCST90012877| 14_52924962_A_G| 14| 52924962| 0.102404628268| null| 3.69| -10| 0.092233| 0.0163413709974|-8640267085448358001| []|\n", + "|GCST90012877| 14_92472511_G_A| 14| 92472511|-0.0762776811698| null| 7.454| -14| 0.339674| 0.0101980809801| 8895835730818824947| []|\n", + "|GCST90012877| 15_50707194_C_G| 15| 50707194|-0.0722934881552| null| 1.639| -9| 0.197469| 0.0119888249532|-4585712009512019667| []|\n", + "|GCST90012877| 15_58730416_T_C| 15| 58730416|-0.0675867539589| null| 2.674| -11| 0.319058| 0.010142839928|-9173595866829505633| []|\n", + "|GCST90012877| 15_63277703_C_T| 15| 63277703| 0.0849598934189| null| 1.052| -8| 0.139487| 0.0148475601067|-6181511576673508209| []|\n", + "|GCST90012877| 16_31115000_C_A| 16| 31115000|-0.0620662164665| null| 4.466| -9| 0.281382| 0.0105807514538|-3612515273077152914| []|\n", + "|GCST90012877| 17_5229833_T_C| 17| 5229833|-0.0849787931131| null| 1.352| -9| 0.875068| 0.0140203927902|-7070596043624425654| []|\n", + "|GCST90012877| 17_63483402_T_C| 17| 63483402| 0.0542810764988| null| 1.215| -8| 0.529632|0.00952697587266| 7171154626284587162| []|\n", + "|GCST90012877| 19_1050875_A_G| 19| 1050875|-0.0772974277902| null| 2.415| -13| 0.674169| 0.0105546077307| 6109438569946056978| []|\n", + "|GCST90012877| 19_44892009_G_A| 19| 44892009| 0.352722374032| null| 1.995| -277| 0.605067|0.00991069396551| 6814727764900576662| []|\n", + "|GCST90012877| 19_51224706_C_A| 19| 51224706|-0.0582180344342| null| 1.295| -8| 0.325551| 0.010237506551|-8288099943480320096| []|\n", + "+------------+----------------+----------+---------+----------------+----------+--------------+--------------+-------------------------------+----------------+--------------------+---------------+\n", + "only showing top 20 rows\n", + "\n", + "None\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "print(slt_df.show())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fine-mapping without outliers detection and imputation using 2M as window size" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-04-09 10:41:57.354 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 10:42:15.499 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 10:42:28.284 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 10:44:41.305 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 10:44:51.854 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 10:45:03.059 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 10:47:04.871 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 10:47:17.310 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 10:47:29.113 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 10:50:32.790 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 10:50:46.191 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 10:50:57.958 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 10:53:22.698 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 10:53:34.535 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 10:53:45.816 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 10:57:23.189 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 10:57:34.563 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 10:57:43.988 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 10:59:39.834 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 10:59:52.878 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:00:06.629 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:02:11.433 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:02:22.101 Hail: INFO: Ordering unsorted dataset with network shuffle\n", + "2024-04-09 11:02:32.320 Hail: INFO: wrote table with 175330 rows in 8 partitions to /tmp/__iruid_20813-EyC6kjgQ1hAjFSiH1Xp7sB\n", + "2024-04-09 11:02:35.350 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:04:16.225 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:04:27.837 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:04:41.879 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:07:09.950 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:07:21.139 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:07:33.197 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:09:56.240 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:10:08.288 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:10:20.802 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:14:07.114 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:14:20.204 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:14:32.464 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:16:41.133 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:16:53.191 Hail: INFO: Ordering unsorted dataset with network shuffle\n", + "2024-04-09 11:17:03.328 Hail: INFO: wrote table with 211068 rows in 9 partitions to /tmp/__iruid_35318-By6CsozcY2JvH6dhwjdBPU\n", + "2024-04-09 11:17:10.133 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:19:10.141 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:19:21.964 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:19:34.636 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:21:47.445 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:21:59.127 Hail: INFO: Ordering unsorted dataset with network shuffle\n", + "2024-04-09 11:22:15.902 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:23:18.294 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:23:32.131 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:23:48.719 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:26:51.703 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:27:02.820 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:27:18.412 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:29:02.997 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:29:19.516 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:29:41.224 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:33:19.553 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:33:32.903 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:33:49.144 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:36:16.552 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:36:28.952 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:36:46.964 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:40:40.837 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:40:51.976 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:41:04.014 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:43:54.259 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:44:05.534 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:44:20.087 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:46:45.605 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:46:59.301 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:47:13.181 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:49:50.219 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:50:02.311 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:50:16.072 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:52:34.864 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:52:46.513 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:53:00.919 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:55:50.580 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:56:02.124 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:56:16.907 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:59:15.457 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 11:59:27.380 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 11:59:40.184 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 12:03:31.055 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 12:03:42.554 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 12:03:53.915 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 12:06:33.123 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 12:06:45.813 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 12:06:58.340 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 12:09:23.153 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 12:09:33.531 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 12:09:43.693 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 12:11:13.739 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 12:11:26.087 Hail: INFO: Ordering unsorted dataset with network shuffle\n", + "2024-04-09 12:11:38.950 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 12:13:17.020 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 12:13:29.727 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 12:13:45.213 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 12:20:03.844 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-09 12:20:13.834 Hail: INFO: Coerced sorted dataset\n", + "2024-04-09 12:20:24.282 Hail: INFO: Coerced sorted dataset\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 1:160185602-162185602 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/p5/4t9crp1563l792qz8xz_3x5h0000gq/T/ipykernel_46905/1319014212.py:29: FutureWarning:\n", + "\n", + "The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", + "\n", + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 1:206577223-208577223 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 10:10678309-12678309 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 10:58886075-60886075 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 10:79520381-81520381 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 11:120564878-122564878 ; number of CSs: 2 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 11:46370397-48370397 ; number of CSs: 6 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 11:59328267-61328267 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 11:85156833-87156833 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 14:51924962-53924962 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 14:91472511-93472511 ; number of CSs: 2 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 15:49707194-51707194 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 15:57730416-59730416 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 15:62277703-64277703 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 16:30115000-32115000 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 17:4229833-6229833 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 17:62483402-64483402 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 19:50875-2050875 ; number of CSs: 2 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 19:43892009-45892009 ; number of CSs: 10 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 19:50224706-52224706 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 2:104749599-106749599 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 2:126135234-128135234 ; number of CSs: 2 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 2:232117202-234117202 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 2:64381229-66381229 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 20:55423488-57423488 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 1199:=====================> (3 + 5) / 8]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 21:25775872-27775872 ; number of CSs: 2 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 4:10025995-12025995 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 6:39974457-41974457 ; number of CSs: 2 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 6:46627419-48627419 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 1403:===================================> (5 + 3) / 8]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 7:142410495-144410495 ; number of CSs: 2 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 7:99374211-101374211 ; number of CSs: 1 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 1505:> (0 + 8) / 8]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Region: 8:26610986-28610986 ; number of CSs: 3 ; log:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "df = slt_df.withColumn(\"row_index\", f.monotonically_increasing_id())\n", + "\n", + "columns = ['N_gwas', 'N_ld', 'N_overlap', 'N_outliers', 'N_imputed', 'N_final_to_fm', 'eleapsed_time']\n", + "logs = pd.DataFrame(columns=columns)\n", + "\n", + "for i in range(0,df.count()):\n", + " if i!=27:\n", + " one_row = df.filter(df.row_index == i).first()\n", + "\n", + " res=SusieFineMapperStep.susie_finemapper_one_studylocus_row_v2_dev(\n", + " GWAS=gwas1,\n", + " session=session,\n", + " study_locus_row=one_row,\n", + " study_index=study_index,\n", + " window= 2_000_000,\n", + " L=10,\n", + " susie_est_tausq=False,\n", + " run_carma=False,\n", + " run_sumstat_imputation=False,\n", + " carma_time_limit=600,\n", + " imputed_r2_threshold=0.8,\n", + " ld_score_threshold=4\n", + " )\n", + "\n", + " sl=res[\"study_locus\"]\n", + " #print(sl._df.withColumn(\"size\", f.size(sl._df[\"locus\"])).show())\n", + " print(\"Region: \",sl._df.collect()[0]['region'], \"; number of CSs: \",sl._df.count(), \"; log:\")\n", + " #print(res[\"log\"])\n", + " logs=pd.concat([logs,res[\"log\"]])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " N_gwas N_ld N_overlap N_outliers N_imputed N_final_to_fm eleapsed_time\n", + "0 7120 10431 6456 0 0 6456 56.839336\n", + "0 7128 8657 5769 0 0 5769 46.149004\n", + "0 9203 12106 7930 0 0 7930 93.531924\n", + "0 8351 10014 6995 0 0 6995 74.174323\n", + "0 9388 12551 8337 0 0 8337 120.602071\n", + "0 6560 8729 5758 0 0 5758 45.064894\n", + "0 5005 7701 3954 0 0 3954 55.229344\n", + "0 7012 8940 5815 0 0 5815 38.824251\n", + "0 8661 10303 7291 0 0 7291 68.802810\n", + "0 8081 9966 6771 0 0 6771 64.327746\n", + "0 8375 11213 7467 0 0 7467 141.808555\n", + "0 7377 9622 6369 0 0 6369 51.198955\n", + "0 8181 10864 7116 0 0 7116 49.033224\n", + "0 7976 10135 6704 0 0 6704 58.357743\n", + "0 3369 6542 2972 0 0 2972 17.138722\n", + "0 9006 12776 7969 0 0 7969 83.551872\n", + "0 4565 7018 3887 0 0 3887 37.801989\n", + "0 8278 13741 7852 0 0 7852 105.623508\n", + "0 7582 10448 6100 0 0 6100 58.572944\n", + "0 9145 12706 8242 0 0 8242 129.442009\n", + "0 8795 11311 7584 0 0 7584 86.336201\n", + "0 7852 10028 7041 0 0 7041 67.886754\n", + "0 8393 10850 7195 0 0 7195 72.375809\n", + "0 7639 10031 6520 0 0 6520 61.900982\n", + "0 8899 11509 7922 0 0 7922 86.535298\n", + "0 8908 11309 7889 0 0 7889 93.595320\n", + "0 10654 12663 8990 0 0 8990 133.390712\n", + "0 9073 10228 7398 0 0 7398 79.774280\n", + "0 8033 9785 6822 0 0 6822 63.950340\n", + "0 4570 5516 3162 0 0 3162 27.943313\n", + "0 5716 8785 4760 0 0 4760 30.024706\n", + "0 9243 10989 7869 0 0 7869 108.898056\n" + ] + } + ], + "source": [ + "pd.set_option('display.max_rows', None)\n", + "print(logs)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6653.3125\n" + ] + } + ], + "source": [ + "summary = logs['N_overlap'].mean()\n", + "print(summary)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fine-mapping of APOE locus" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "data": { + "text/plain": [ + "Row(studyId='GCST90012877', variantId='19_44892009_G_A', chromosome='19', position=44892009, beta=0.352722374032, sampleSize=None, pValueMantissa=1.9950000047683716, pValueExponent=-277, effectAlleleFrequencyFromSource=0.6050670146942139, standardError=0.00991069396551, studyLocusId=6814727764900576662, qualityControls=[], row_index=18)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = slt_df.withColumn(\"row_index\", f.monotonically_increasing_id())\n", + "one_row = df.filter(df.row_index == 18).first()\n", + "one_row" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Without CARMA, without imputation" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-04-08 21:34:03.208 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + "2024-04-08 21:34:19.253 Hail: INFO: Coerced sorted dataset\n", + "2024-04-08 21:34:34.941 Hail: INFO: Coerced sorted dataset\n", + "2024-04-08 21:37:16.576 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + "2024-04-08 21:37:28.867 Hail: INFO: Coerced sorted dataset\n", + "2024-04-08 21:37:44.733 Hail: INFO: Coerced sorted dataset\n", + "2024-04-08 21:52:03.198 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + "2024-04-08 21:52:15.100 Hail: INFO: Coerced sorted dataset\n", + "2024-04-08 21:52:30.553 Hail: INFO: Coerced sorted dataset\n", + "2024-04-08 22:21:27.877 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + "2024-04-08 22:21:40.137 Hail: INFO: Coerced sorted dataset\n", + "2024-04-08 22:21:55.249 Hail: INFO: Coerced sorted dataset\n", + "2024-04-08 22:23:21.795 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + "2024-04-08 22:23:35.031 Hail: INFO: Coerced sorted dataset\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+------------+--------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "| studyLocusId| studyId| region|credibleSetIndex| locus| variantId|chromosome|position|finemappingMethod|credibleSetlog10BF|size|\n", + "+--------------------+------------+--------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "|-6417720984991662128|GCST90012877|19:43892009-45892009| 1|[{19_44908684_T_C...|19_44908684_T_C| 19|44908684| SuSiE-inf| 2135.710824756712| 1|\n", + "|-1158278093713046158|GCST90012877|19:43892009-45892009| 2|[{19_44921094_A_T...|19_44921094_A_T| 19|44921094| SuSiE-inf| 955.4948390766739| 1|\n", + "| 8324745608044585165|GCST90012877|19:43892009-45892009| 3|[{19_44917947_C_T...|19_44917947_C_T| 19|44917947| SuSiE-inf| 690.0307437138443| 1|\n", + "|-1158278093713046158|GCST90012877|19:43892009-45892009| 4|[{19_44921094_A_T...|19_44921094_A_T| 19|44921094| SuSiE-inf|425.33378303492805| 1|\n", + "| 2240477384494621278|GCST90012877|19:43892009-45892009| 5|[{19_44891079_T_C...|19_44891079_T_C| 19|44891079| SuSiE-inf|395.31055398960274| 1|\n", + "| 1029535804909934921|GCST90012877|19:43892009-45892009| 6|[{19_44894695_T_C...|19_44894695_T_C| 19|44894695| SuSiE-inf| 333.9497424582455| 1|\n", + "|-6417720984991662128|GCST90012877|19:43892009-45892009| 7|[{19_44908684_T_C...|19_44908684_T_C| 19|44908684| SuSiE-inf| 261.573648706883| 1|\n", + "|-1158278093713046158|GCST90012877|19:43892009-45892009| 8|[{19_44921094_A_T...|19_44921094_A_T| 19|44921094| SuSiE-inf|186.66554412409607| 1|\n", + "|-7370952295217410456|GCST90012877|19:43892009-45892009| 9|[{19_44922505_T_G...|19_44922505_T_G| 19|44922505| SuSiE-inf| 78.06352464083552| 1|\n", + "| 3925446284512644964|GCST90012877|19:43892009-45892009| 10|[{19_44913574_T_G...|19_44913574_T_G| 19|44913574| SuSiE-inf|55.346197523194675| 1|\n", + "+--------------------+------------+--------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "\n", + "None\n", + " N_gwas N_ld N_overlap N_outliers N_imputed N_final_to_fm eleapsed_time\n", + "0 7582 10448 6100 0 0 6100 66.112839\n" + ] + } + ], + "source": [ + "res=SusieFineMapperStep.susie_finemapper_one_studylocus_row_v2_dev(\n", + " GWAS=gwas1,\n", + " session=session,\n", + " study_locus_row=one_row,\n", + " study_index=study_index,\n", + " window= 2_000_000,\n", + " L=10,\n", + " susie_est_tausq=False,\n", + " run_carma=False,\n", + " run_sumstat_imputation=False,\n", + " carma_time_limit=1000,\n", + " imputed_r2_threshold=0.8,\n", + " ld_score_threshold=4\n", + ")\n", + "sl=res[\"study_locus\"]\n", + "print(sl._df.withColumn(\"size\", f.size(sl._df[\"locus\"])).show())\n", + "print(res[\"log\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### With CARMA, without imputation" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+------------+--------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "| studyLocusId| studyId| region|credibleSetIndex| locus| variantId|chromosome|position|finemappingMethod|credibleSetlog10BF|size|\n", + "+--------------------+------------+--------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "|-6417720984991662128|GCST90012877|19:43892009-45892009| 1|[{19_44908684_T_C...|19_44908684_T_C| 19|44908684| SuSiE-inf|1995.6574121818223| 1|\n", + "|-1158278093713046158|GCST90012877|19:43892009-45892009| 2|[{19_44921094_A_T...|19_44921094_A_T| 19|44921094| SuSiE-inf| 721.2637360279233| 1|\n", + "| 7760477027903907683|GCST90012877|19:43892009-45892009| 3|[{19_44911142_C_A...|19_44911142_C_A| 19|44911142| SuSiE-inf|248.39159334060017| 1|\n", + "|-1172224975892516254|GCST90012877|19:43892009-45892009| 4|[{19_44894255_A_C...|19_44894255_A_C| 19|44894255| SuSiE-inf| 96.16160678286879| 1|\n", + "| 8852802213660052283|GCST90012877|19:43892009-45892009| 5|[{19_44862190_G_A...|19_44862190_G_A| 19|44862190| SuSiE-inf| 55.80518621838019| 1|\n", + "|-1158278093713046158|GCST90012877|19:43892009-45892009| 6|[{19_44921094_A_T...|19_44921094_A_T| 19|44921094| SuSiE-inf| 53.24772075097935| 1|\n", + "|-6417720984991662128|GCST90012877|19:43892009-45892009| 7|[{19_44908684_T_C...|19_44908684_T_C| 19|44908684| SuSiE-inf| 45.65754067281976| 1|\n", + "|-6417720984991662128|GCST90012877|19:43892009-45892009| 8|[{19_44908684_T_C...|19_44908684_T_C| 19|44908684| SuSiE-inf| 39.3840804563262| 1|\n", + "| 6986973025714240626|GCST90012877|19:43892009-45892009| 9|[{19_44873060_C_G...|19_44873060_C_G| 19|44873060| SuSiE-inf| 38.54912041595975| 1|\n", + "| 3640651426400620880|GCST90012877|19:43892009-45892009| 10|[{19_44845920_G_C...|19_44845920_G_C| 19|44845920| SuSiE-inf|35.378479810047224| 2|\n", + "+--------------------+------------+--------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "\n", + "None\n", + " N_gwas N_ld N_overlap N_outliers N_imputed N_final_to_fm eleapsed_time\n", + "0 7582 10448 6100 151 0 5949 783.939477\n" + ] + } + ], + "source": [ + "res=SusieFineMapperStep.susie_finemapper_one_studylocus_row_v2_dev(\n", + " GWAS=gwas1,\n", + " session=session,\n", + " study_locus_row=one_row,\n", + " study_index=study_index,\n", + " window= 2_000_000,\n", + " L=10,\n", + " susie_est_tausq=False,\n", + " run_carma=True,\n", + " run_sumstat_imputation=False,\n", + " carma_time_limit=1000,\n", + " imputed_r2_threshold=0.8,\n", + " ld_score_threshold=4\n", + ")\n", + "sl=res[\"study_locus\"]\n", + "print(sl._df.withColumn(\"size\", f.size(sl._df[\"locus\"])).show())\n", + "print(res[\"log\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Without CARMA, with imputation" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-04-08 22:25:15.739 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-08 22:25:30.625 Hail: INFO: Coerced sorted dataset\n", + "2024-04-08 22:25:46.020 Hail: INFO: Coerced sorted dataset\n", + "2024-04-08 22:32:35.094 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-08 22:32:47.616 Hail: INFO: Coerced sorted dataset\n", + "2024-04-08 22:33:02.484 Hail: INFO: Coerced sorted dataset\n", + "2024-04-08 22:51:33.149 Hail: INFO: Table.join: renamed the following fields on the right to avoid name conflicts:\n", + " 'age_index_dict' -> 'age_index_dict_1'\n", + " 'freq_index_dict' -> 'freq_index_dict_1'\n", + " 'faf_index_dict' -> 'faf_index_dict_1'\n", + " 'freq_meta' -> 'freq_meta_1'\n", + " 'rf' -> 'rf_1'\n", + " 'age_distribution' -> 'age_distribution_1'\n", + " 'popmax_index_dict' -> 'popmax_index_dict_1'\n", + "2024-04-08 22:51:45.708 Hail: INFO: Coerced sorted dataset\n", + "2024-04-08 22:52:00.731 Hail: INFO: Coerced sorted dataset\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+------------+--------------------+----------------+--------------------+-----------------+----------+--------+-----------------+------------------+----+\n", + "| studyLocusId| studyId| region|credibleSetIndex| locus| variantId|chromosome|position|finemappingMethod|credibleSetlog10BF|size|\n", + "+--------------------+------------+--------------------+----------------+--------------------+-----------------+----------+--------+-----------------+------------------+----+\n", + "|-1350283509846281677|GCST90012877|19:43892009-45892009| 1|[{19_44909967_TGG...|19_44909967_TGG_T| 19|44909967| SuSiE-inf| 2310.665662473933| 1|\n", + "|-1158278093713046158|GCST90012877|19:43892009-45892009| 2|[{19_44921094_A_T...| 19_44921094_A_T| 19|44921094| SuSiE-inf| 903.6138342773536| 1|\n", + "| 8324745608044585165|GCST90012877|19:43892009-45892009| 3|[{19_44917947_C_T...| 19_44917947_C_T| 19|44917947| SuSiE-inf| 700.3080514793324| 1|\n", + "|-1158278093713046158|GCST90012877|19:43892009-45892009| 4|[{19_44921094_A_T...| 19_44921094_A_T| 19|44921094| SuSiE-inf|431.79459690536703| 1|\n", + "| 1029535804909934921|GCST90012877|19:43892009-45892009| 5|[{19_44894695_T_C...| 19_44894695_T_C| 19|44894695| SuSiE-inf|402.50010763388156| 1|\n", + "|-1158278093713046158|GCST90012877|19:43892009-45892009| 6|[{19_44921094_A_T...| 19_44921094_A_T| 19|44921094| SuSiE-inf|225.93101254172214| 1|\n", + "| -60207296485035224|GCST90012877|19:43892009-45892009| 7|[{19_44888997_C_T...| 19_44888997_C_T| 19|44888997| SuSiE-inf| 191.4947272198485| 1|\n", + "|-1350283509846281677|GCST90012877|19:43892009-45892009| 8|[{19_44909967_TGG...|19_44909967_TGG_T| 19|44909967| SuSiE-inf|105.04460057482835| 1|\n", + "|-4078755027603845519|GCST90012877|19:43892009-45892009| 9|[{19_44918393_G_A...| 19_44918393_G_A| 19|44918393| SuSiE-inf| 63.30243818120949| 1|\n", + "| 3925446284512644964|GCST90012877|19:43892009-45892009| 10|[{19_44913574_T_G...| 19_44913574_T_G| 19|44913574| SuSiE-inf|54.079307276192694| 1|\n", + "+--------------------+------------+--------------------+----------------+--------------------+-----------------+----------+--------+-----------------+------------------+----+\n", + "\n", + "None\n", + " N_gwas N_ld N_overlap N_outliers N_imputed N_final_to_fm eleapsed_time\n", + "0 7582 10448 6100 0 681 6781 334.328722\n" + ] + } + ], + "source": [ + "res=SusieFineMapperStep.susie_finemapper_one_studylocus_row_v2_dev(\n", + " GWAS=gwas1,\n", + " session=session,\n", + " study_locus_row=one_row,\n", + " study_index=study_index,\n", + " window= 2_000_000,\n", + " L=10,\n", + " susie_est_tausq=False,\n", + " run_carma=False,\n", + " run_sumstat_imputation=True,\n", + " carma_time_limit=10000,\n", + " imputed_r2_threshold=0.8,\n", + " ld_score_threshold=4\n", + ")\n", + "sl=res[\"study_locus\"]\n", + "print(sl._df.withColumn(\"size\", f.size(sl._df[\"locus\"])).show())\n", + "print(res[\"log\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### With CARMA, with imputation" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+------------+--------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "| studyLocusId| studyId| region|credibleSetIndex| locus| variantId|chromosome|position|finemappingMethod|credibleSetlog10BF|size|\n", + "+--------------------+------------+--------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "| 3030414938485808431|GCST90012877|19:43892009-45892009| 1|[{19_44895007_C_T...|19_44895007_C_T| 19|44895007| SuSiE-inf|2680.9099711333456| 1|\n", + "|-2201142982564351776|GCST90012877|19:43892009-45892009| 2|[{19_44900601_A_G...|19_44900601_A_G| 19|44900601| SuSiE-inf| 2103.873956796136| 1|\n", + "|-6417720984991662128|GCST90012877|19:43892009-45892009| 3|[{19_44908684_T_C...|19_44908684_T_C| 19|44908684| SuSiE-inf|1968.8126348567705| 1|\n", + "|-1158278093713046158|GCST90012877|19:43892009-45892009| 4|[{19_44921094_A_T...|19_44921094_A_T| 19|44921094| SuSiE-inf|1089.9033376410644| 1|\n", + "| 7760477027903907683|GCST90012877|19:43892009-45892009| 5|[{19_44911142_C_A...|19_44911142_C_A| 19|44911142| SuSiE-inf|188.55568384844716| 1|\n", + "|-6417720984991662128|GCST90012877|19:43892009-45892009| 6|[{19_44908684_T_C...|19_44908684_T_C| 19|44908684| SuSiE-inf| 83.57344085238768| 1|\n", + "|-1158278093713046158|GCST90012877|19:43892009-45892009| 7|[{19_44921094_A_T...|19_44921094_A_T| 19|44921094| SuSiE-inf| 82.01732099119907| 1|\n", + "| 8852802213660052283|GCST90012877|19:43892009-45892009| 8|[{19_44862190_G_A...|19_44862190_G_A| 19|44862190| SuSiE-inf| 45.92126992319222| 1|\n", + "|-1611304699666037367|GCST90012877|19:43892009-45892009| 9|[{19_44821259_C_T...|19_44821259_C_T| 19|44821259| SuSiE-inf|37.363613067645254| 1|\n", + "| 3556335645959991344|GCST90012877|19:43892009-45892009| 10|[{19_45017701_G_T...|19_45017701_G_T| 19|45017701| SuSiE-inf|30.736039473626658| 4|\n", + "+--------------------+------------+--------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "\n", + "None\n", + " N_gwas N_ld N_overlap N_outliers N_imputed N_final_to_fm eleapsed_time\n", + "0 7582 10448 6100 152 715 6663 1036.467428\n" + ] + } + ], + "source": [ + "res=SusieFineMapperStep.susie_finemapper_one_studylocus_row_v2_dev(\n", + " GWAS=gwas1,\n", + " session=session,\n", + " study_locus_row=one_row,\n", + " study_index=study_index,\n", + " window= 2_000_000,\n", + " L=10,\n", + " susie_est_tausq=False,\n", + " run_carma=True,\n", + " run_sumstat_imputation=True,\n", + " carma_time_limit=10000,\n", + " imputed_r2_threshold=0.8,\n", + " ld_score_threshold=4\n", + ")\n", + "sl=res[\"study_locus\"]\n", + "print(sl._df.withColumn(\"size\", f.size(sl._df[\"locus\"])).show())\n", + "print(res[\"log\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### With CARMA, with imputation, with estimation of infinitisimal effects (susie_est_tausq=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+------------+--------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "| studyLocusId| studyId| region|credibleSetIndex| locus| variantId|chromosome|position|finemappingMethod|credibleSetlog10BF|size|\n", + "+--------------------+------------+--------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "|-6417720984991662128|GCST90012877|19:43892009-45892009| 1|[{19_44908684_T_C...|19_44908684_T_C| 19|44908684| SuSiE-inf| 1105.297844890198| 1|\n", + "|-1158278093713046158|GCST90012877|19:43892009-45892009| 2|[{19_44921094_A_T...|19_44921094_A_T| 19|44921094| SuSiE-inf|1042.0949995382389| 1|\n", + "|-2201142982564351776|GCST90012877|19:43892009-45892009| 3|[{19_44900601_A_G...|19_44900601_A_G| 19|44900601| SuSiE-inf| 760.0654878716481| 1|\n", + "| 3030414938485808431|GCST90012877|19:43892009-45892009| 4|[{19_44895007_C_T...|19_44895007_C_T| 19|44895007| SuSiE-inf| 388.8928142354868| 1|\n", + "| -251577639520141451|GCST90012877|19:43892009-45892009| 5|[{19_44899220_C_T...|19_44899220_C_T| 19|44899220| SuSiE-inf| 259.5645544847559| 1|\n", + "| 7760477027903907683|GCST90012877|19:43892009-45892009| 6|[{19_44911142_C_A...|19_44911142_C_A| 19|44911142| SuSiE-inf|231.66277856324325| 1|\n", + "| 4133344777320628094|GCST90012877|19:43892009-45892009| 7|[{19_44904531_G_A...|19_44904531_G_A| 19|44904531| SuSiE-inf|143.22657752219786| 1|\n", + "|-1764089385585984368|GCST90012877|19:43892009-45892009| 8|[{19_44893642_T_C...|19_44893642_T_C| 19|44893642| SuSiE-inf| 87.72507299242906| 1|\n", + "|-1158278093713046158|GCST90012877|19:43892009-45892009| 9|[{19_44921094_A_T...|19_44921094_A_T| 19|44921094| SuSiE-inf| 71.4171763690986| 1|\n", + "|-6417720984991662128|GCST90012877|19:43892009-45892009| 10|[{19_44908684_T_C...|19_44908684_T_C| 19|44908684| SuSiE-inf| 43.36071977593145| 1|\n", + "+--------------------+------------+--------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "\n", + "None\n", + " N_gwas N_ld N_overlap N_outliers N_imputed N_final_to_fm eleapsed_time\n", + "0 7582 10448 6100 151 720 6669 1229.515921\n" + ] + } + ], + "source": [ + "res=SusieFineMapperStep.susie_finemapper_one_studylocus_row_v2_dev(\n", + " GWAS=gwas1,\n", + " session=session,\n", + " study_locus_row=one_row,\n", + " study_index=study_index,\n", + " window= 2_000_000,\n", + " L=10,\n", + " susie_est_tausq=True,\n", + " run_carma=True,\n", + " run_sumstat_imputation=True,\n", + " carma_time_limit=10000,\n", + " imputed_r2_threshold=0.8,\n", + " ld_score_threshold=4\n", + ")\n", + "sl=res[\"study_locus\"]\n", + "print(sl._df.withColumn(\"size\", f.size(sl._df[\"locus\"])).show())\n", + "print(res[\"log\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fine-mapping of MHC region using 1Mb window" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "data": { + "text/plain": [ + "Row(studyId='GCST90012877', variantId='6_32592248_A_G', chromosome='6', position=32592248, beta=-0.103604380043, sampleSize=None, pValueMantissa=2.877000093460083, pValueExponent=-15, effectAlleleFrequencyFromSource=0.21086899936199188, standardError=0.0131209374957, studyLocusId=5718491981995302674, qualityControls=[], row_index=27)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = slt_df.withColumn(\"row_index\", f.monotonically_increasing_id())\n", + "one_row = df.filter(df.row_index == 27).first()\n", + "one_row" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 1541:==========================================> (6 + 2) / 8]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+------------+-------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "| studyLocusId| studyId| region|credibleSetIndex| locus| variantId|chromosome|position|finemappingMethod|credibleSetlog10BF|size|\n", + "+--------------------+------------+-------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "|-3446214959021623473|GCST90012877|6:32092248-33092248| 1|[{6_32557997_G_A,...| 6_32557997_G_A| 6|32557997| SuSiE-inf| 4323.908142062261| 1|\n", + "| -439738150050389281|GCST90012877|6:32092248-33092248| 2|[{6_32558002_G_T,...| 6_32558002_G_T| 6|32558002| SuSiE-inf|3428.8321277074765| 1|\n", + "| 5831857384024844796|GCST90012877|6:32092248-33092248| 3|[{6_32557987_C_A,...| 6_32557987_C_A| 6|32557987| SuSiE-inf|1699.8680349563335| 1|\n", + "|-1087057043201011402|GCST90012877|6:32092248-33092248| 4|[{6_32557977_T_C,...| 6_32557977_T_C| 6|32557977| SuSiE-inf| 965.9753305300063| 1|\n", + "| 6919234179916081233|GCST90012877|6:32092248-33092248| 5|[{6_32649735_C_T,...| 6_32649735_C_T| 6|32649735| SuSiE-inf| 369.9698233117616| 1|\n", + "| 7781006900918060896|GCST90012877|6:32092248-33092248| 6|[{6_32652962_C_T,...| 6_32652962_C_T| 6|32652962| SuSiE-inf| 328.6834447478274| 1|\n", + "|-7512794333418509403|GCST90012877|6:32092248-33092248| 7|[{6_32591896_T_G,...| 6_32591896_T_G| 6|32591896| SuSiE-inf|326.52393082050276| 1|\n", + "| 4056478719932360430|GCST90012877|6:32092248-33092248| 8|[{6_32621456_GC_G...|6_32621456_GC_G| 6|32621456| SuSiE-inf|263.48518383939836| 1|\n", + "| 8380896542014789747|GCST90012877|6:32092248-33092248| 9|[{6_32648039_G_A,...| 6_32648039_G_A| 6|32648039| SuSiE-inf|176.62947310155317| 1|\n", + "| 9053545161380162736|GCST90012877|6:32092248-33092248| 10|[{6_32700030_C_T,...| 6_32700030_C_T| 6|32700030| SuSiE-inf| 69.83226092797517| 2|\n", + "+--------------------+------------+-------------------+----------------+--------------------+---------------+----------+--------+-----------------+------------------+----+\n", + "\n", + "None\n", + " N_gwas N_ld N_overlap N_outliers N_imputed N_final_to_fm eleapsed_time\n", + "0 19311 22318 13188 0 0 13188 298.784288\n" + ] + } + ], + "source": [ + "res=SusieFineMapperStep.susie_finemapper_one_studylocus_row_v2_dev(\n", + " GWAS=gwas1,\n", + " session=session,\n", + " study_locus_row=one_row,\n", + " study_index=study_index,\n", + " window= 1_000_000,\n", + " L=10,\n", + " susie_est_tausq=False,\n", + " run_carma=False,\n", + " run_sumstat_imputation=False,\n", + " carma_time_limit=10000,\n", + " imputed_r2_threshold=0.8,\n", + " ld_score_threshold=4\n", + ")\n", + "sl=res[\"study_locus\"]\n", + "print(sl._df.withColumn(\"size\", f.size(sl._df[\"locus\"])).show())\n", + "print(res[\"log\"])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "gentropy-krNFZEZg-py3.10", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/Mapping_EFO_finngen.ipynb b/notebooks/Mapping_EFO_finngen.ipynb new file mode 100644 index 000000000..9bd82d8d4 --- /dev/null +++ b/notebooks/Mapping_EFO_finngen.ipynb @@ -0,0 +1,768 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Mapping EFOs for the FinnGen study index using old study index from the previos prod" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook adds EFOs from previos prod version of study_index to the new FinnGen study_index using trait name as a matching key.\n", + "\n", + "The rsulting study index has 1542 rows with not null EFOs (out of 2408 rows).\n", + "\n", + "The new study index is saved here:\n", + "\"gs://genetics-portal-dev-analysis/yt4/study_index_finngen_with_efo\"" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Your browser has been opened to visit:\n", + "\n", + " https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=764086051850-6qr4p6gpi6hn506pt8ejuq83di341hur.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=XHb8Uk43SsVjvFRqwgrX4Tgg2tTOHS&access_type=offline&code_challenge=OkiqDAkHXDGEgJQbX8r0ZYKfZ7gcgfXS8mfZc5a913Y&code_challenge_method=S256\n", + "\n", + "\n", + "Credentials saved to file: [/Users/yt4/.config/gcloud/application_default_credentials.json]\n", + "\n", + "These credentials will be used by any library that requests Application Default Credentials (ADC).\n", + "\n", + "Quota project \"open-targets-genetics-dev\" was added to ADC which can be used by Google client libraries for billing and quota. Note that some services may still bill the project owning the resource.\n" + ] + } + ], + "source": [ + "!gcloud auth application-default login" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + " \n", + " Loading BokehJS ...\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n function drop(id) {\n const view = Bokeh.index.get_by_id(id)\n if (view != null) {\n view.model.document.clear()\n Bokeh.index.delete(view)\n }\n }\n\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n\n // Clean up Bokeh references\n if (id != null) {\n drop(id)\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim()\n drop(id)\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"c92e22c1-acc6-4a9b-8a5a-529fec6e60ae\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.3.0.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\nif (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"c92e22c1-acc6-4a9b-8a5a-529fec6e60ae\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "24/04/14 16:03:28 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Setting default log level to \"WARN\".\n", + "To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n", + "pip-installed Hail requires additional configuration options in Spark referring\n", + " to the path to the Hail Python module directory HAIL_DIR,\n", + " e.g. /path/to/python/site-packages/hail:\n", + " spark.jars=HAIL_DIR/backend/hail-all-spark.jar\n", + " spark.driver.extraClassPath=HAIL_DIR/backend/hail-all-spark.jar\n", + " spark.executor.extraClassPath=./hail-all-spark.jarRunning on Apache Spark version 3.3.4\n", + "SparkUI available at http://192.168.0.232:4040\n", + "Welcome to\n", + " __ __ <>__\n", + " / /_/ /__ __/ /\n", + " / __ / _ `/ / /\n", + " /_/ /_/\\_,_/_/_/ version 0.2.127-bb535cd096c5\n", + "LOGGING: writing to /dev/null\n" + ] + } + ], + "source": [ + "import os\n", + "import hail as hl\n", + "import pyspark.sql.functions as f\n", + "import pandas as pd\n", + "pd.set_option('display.max_colwidth', None)\n", + "pd.set_option('display.expand_frame_repr', False)\n", + "\n", + "from gentropy.common.session import Session\n", + "from gentropy.dataset.study_index import StudyIndex\n", + "\n", + "\n", + "hail_dir = os.path.dirname(hl.__file__)\n", + "session = Session(hail_home=hail_dir, start_hail=True, extended_spark_conf={\"spark.driver.memory\": \"12g\",\n", + " \"spark.kryoserializer.buffer.max\": \"500m\",\"spark.driver.maxResultSize\":\"3g\"})\n", + "hl.init(sc=session.spark.sparkContext, log=\"/dev/null\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "path_si=\"gs://genetics_etl_python_playground/releases/24.03/study_index/finngen/study_index\"\n", + "path_si_old=\"gs://genetics-portal-dev-analysis/yt4/study_index.csv\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "si_old=session.spark.read.csv(path_si_old, header=True,sep=\"\\t\")\n", + "si_new=StudyIndex.from_parquet(session=session, path=path_si)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+-------------------+--------------------+-------+---------+-------------+----+----------+----------+-----------+---------+------------+--------------+-------+--------------------+-----------------+--------------------+\n", + "| study_id| ancestry_initial|ancestry_replication|n_cases|n_initial|n_replication|pmid|pub_author| pub_date|pub_journal|pub_title|has_sumstats|num_assoc_loci| source| trait_reported| trait_efos| trait_category|\n", + "+--------------------+-------------------+--------------------+-------+---------+-------------+----+----------+----------+-----------+---------+------------+--------------+-------+--------------------+-----------------+--------------------+\n", + "|FINNGEN_R6_M13_MU...|['European=253458']| []| 108.0| 253458| 0.0|null|FINNGEN_R6|2022-01-24| null| null| True| 0|FINNGEN|Multifocal fibros...|['MONDO_0009230']|immune system dis...|\n", + "|FINNGEN_R6_M13_MU...|['European=199528']| []| 1804.0| 199528| 0.0|null|FINNGEN_R6|2022-01-24| null| null| True| 0|FINNGEN|Disorders of muscles| ['EFO_0002970']|musculoskeletal o...|\n", + "|FINNGEN_R6_M13_MU...|['European=197821']| []| 97.0| 197821| 0.0|null|FINNGEN_R6|2022-01-24| null| null| True| 0|FINNGEN|\"\"\"Muscle wasting...| ['EFO_0009851']| biological process|\n", + "|FINNGEN_R6_M13_MU...|['European=198253']| []| 529.0| 198253| 0.0|null|FINNGEN_R6|2022-01-24| null| null| True| 0|FINNGEN|Other specified d...| ['EFO_0002970']|musculoskeletal o...|\n", + "|FINNGEN_R6_M13_MU...|['European=198179']| []| 455.0| 198179| 0.0|null|FINNGEN_R6|2022-01-24| null| null| True| 1|FINNGEN| Muscle strain| ['EFO_0010686']|injury, poisoning...|\n", + "+--------------------+-------------------+--------------------+-------+---------+-------------+----+----------+----------+-----------+---------+------------+--------------+-------+--------------------+-----------------+--------------------+\n", + "only showing top 5 rows\n", + "\n" + ] + } + ], + "source": [ + "si_old.show(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+\n", + "| studyId| projectId|studyType| traitFromSource|traitFromSourceMappedIds|geneId|tissueFromSourceId|pubmedId|publicationTitle|publicationFirstAuthor|publicationDate|publicationJournal|backgroundTraitFromSourceMappedIds| initialSampleSize|nCases|nControls|nSamples| cohorts|ldPopulationStructure| discoverySamples|replicationSamples|qualityControls|analysisFlags|summarystatsLocation|hasSumstats|\n", + "+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Actinomycosis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 101| 363227| 363328|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Amoebiasis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 160| 367214| 367374|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas|Anogenital herpes...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 1986| 400197| 402183|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Aspergillosis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 211| 403213| 403424|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas|Atypical virus in...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 282| 409849| 410131|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+\n", + "only showing top 5 rows\n", + "\n" + ] + } + ], + "source": [ + "si_new_df=si_new.df\n", + "si_new_df.show(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "57246\n", + "2408\n" + ] + } + ], + "source": [ + "print(si_old.count())\n", + "print(si_new_df.count())" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+-----------------+\n", + "| trait_reported| trait_efos|\n", + "+--------------------+-----------------+\n", + "|Multifocal fibros...|['MONDO_0009230']|\n", + "|Disorders of muscles| ['EFO_0002970']|\n", + "|\"\"\"Muscle wasting...| ['EFO_0009851']|\n", + "|Other specified d...| ['EFO_0002970']|\n", + "| Muscle strain| ['EFO_0010686']|\n", + "+--------------------+-----------------+\n", + "only showing top 5 rows\n", + "\n" + ] + } + ], + "source": [ + "si_old=si_old.select(\"trait_reported\",\"trait_efos\")\n", + "si_old.show(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "from pyspark.sql.functions import lower\n", + "\n", + "si_old = si_old.withColumn(\"trait_reported_low\", lower(si_old[\"trait_reported\"])).select(\"trait_reported_low\",\"trait_efos\")\n", + "si_new_df= si_new_df.withColumn(\"trait_reported_low\", lower(si_new_df[\"traitFromSource\"]))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "data": { + "text/plain": [ + "2408" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "si_old = si_old.dropDuplicates(['trait_reported_low'])\n", + "joined_df = si_new_df.join(si_old, \"trait_reported_low\", how='left')\n", + "joined_df.count()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+--------------------+\n", + "| trait_reported_low| studyId| projectId|studyType| traitFromSource|traitFromSourceMappedIds|geneId|tissueFromSourceId|pubmedId|publicationTitle|publicationFirstAuthor|publicationDate|publicationJournal|backgroundTraitFromSourceMappedIds| initialSampleSize|nCases|nControls|nSamples| cohorts|ldPopulationStructure| discoverySamples|replicationSamples|qualityControls|analysisFlags|summarystatsLocation|hasSumstats| trait_efos|\n", + "+--------------------+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+--------------------+\n", + "| actinomycosis|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Actinomycosis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 101| 363227| 363328|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| null|\n", + "| amoebiasis|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Amoebiasis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 160| 367214| 367374|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| ['EFO_0007144']|\n", + "|anogenital herpes...|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas|Anogenital herpes...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 1986| 400197| 402183|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| ['EFO_0007282']|\n", + "| aspergillosis|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Aspergillosis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 211| 403213| 403424|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| ['EFO_0007157']|\n", + "|atypical virus in...|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas|Atypical virus in...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 282| 409849| 410131|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| ['MONDO_0024318']|\n", + "|bacterial infecti...|FINNGEN_R10_AB1_B...|FINNGEN_R10| gwas|Bacterial infecti...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 20226| 363227| 383453|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| null|\n", + "|bacterial, viral ...|FINNGEN_R10_AB1_B...|FINNGEN_R10| gwas|Bacterial, viral ...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 2852| 409329| 412181|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| null|\n", + "|other bacterial i...|FINNGEN_R10_AB1_B...|FINNGEN_R10| gwas|Other bacterial i...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 6145| 367214| 373359|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| ['EFO_0000771']|\n", + "| candidiasis|FINNGEN_R10_AB1_C...|FINNGEN_R10| gwas| Candidiasis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 4306| 403213| 407519|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| ['MONDO_0002026']|\n", + "|other sexually tr...|FINNGEN_R10_AB1_C...|FINNGEN_R10| gwas|Other sexually tr...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 2186| 400197| 402383|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|['MONDO_0021681',...|\n", + "| cholera|FINNGEN_R10_AB1_C...|FINNGEN_R10| gwas| Cholera| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 1385| 367214| 368599|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| ['EFO_1001235']|\n", + "|dengue fever [cla...|FINNGEN_R10_AB1_D...|FINNGEN_R10| gwas|Dengue fever [cla...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 53| 409137| 409190|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| null|\n", + "| dermatophytosis|FINNGEN_R10_AB1_D...|FINNGEN_R10| gwas| Dermatophytosis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 3921| 403213| 407134|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| ['MONDO_0004678']|\n", + "| early syphilis|FINNGEN_R10_AB1_E...|FINNGEN_R10| gwas| Early syphilis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 308| 400197| 400505|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| ['EFO_0007504']|\n", + "|infectious mononu...| FINNGEN_R10_AB1_EBV|FINNGEN_R10| gwas|Infectious mononu...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 2979| 400974| 403953|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| ['EFO_0007326']|\n", + "| enterobiasis|FINNGEN_R10_AB1_E...|FINNGEN_R10| gwas| Enterobiasis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 112| 411658| 411770|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| null|\n", + "| erysipelas|FINNGEN_R10_AB1_E...|FINNGEN_R10| gwas| Erysipelas| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 22261| 363227| 385488|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| ['EFO_1001462']|\n", + "|diarrhoea and gas...|FINNGEN_R10_AB1_G...|FINNGEN_R10| gwas|Diarrhoea and gas...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 32210| 367214| 399424|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| ['MONDO_0045031']|\n", + "|gonococcal infection|FINNGEN_R10_AB1_G...|FINNGEN_R10| gwas|Gonococcal infection| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 954| 400197| 401151|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true| ['DOID_7551']|\n", + "| helminthiases|FINNGEN_R10_AB1_H...|FINNGEN_R10| gwas| Helminthiases| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 523| 411658| 412181|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|['EFO_0007245', '...|\n", + "+--------------------+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+--------------------+\n", + "only showing top 20 rows\n", + "\n" + ] + } + ], + "source": [ + "joined_df.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1542\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 22:===========================================> (3 + 1) / 4]\r" + ] + } + ], + "source": [ + "num_non_null_rows = joined_df.filter(joined_df.trait_efos.isNotNull()).count()\n", + "print(num_non_null_rows)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+------------+---------+---------+--------------------+------------------------+------+------------------+--------+--------------------+----------------------+---------------+--------------------+----------------------------------+--------------------+------+---------+--------+--------------------+---------------------+--------------------+--------------------+---------------+-------------+--------------------+-----------+\n", + "| studyId|projectId|studyType| traitFromSource|traitFromSourceMappedIds|geneId|tissueFromSourceId|pubmedId| publicationTitle|publicationFirstAuthor|publicationDate| publicationJournal|backgroundTraitFromSourceMappedIds| initialSampleSize|nCases|nControls|nSamples| cohorts|ldPopulationStructure| discoverySamples| replicationSamples|qualityControls|analysisFlags|summarystatsLocation|hasSumstats|\n", + "+------------+---------+---------+--------------------+------------------------+------+------------------+--------+--------------------+----------------------+---------------+--------------------+----------------------------------+--------------------+------+---------+--------+--------------------+---------------------+--------------------+--------------------+---------------+-------------+--------------------+-----------+\n", + "| GCST000102| GCST| gwas|Endothelial funct...| [EFO_0004298]| null| null|17903301|Genome-wide assoc...| Vasan RS| 2007-09-19| BMC Med Genet| null|Up to 1,238 Europ...| 0| 0| 1238| [null]| [{nfe, 1.0}]| [{1238, European}]| []| null| null| null| false|\n", + "| GCST000272| GCST| gwas| Height| [EFO_0004339]| null| null|19030899|Genome-wide assoc...| Lei SF| 2008-11-23| Hum Genet| null|618 Chinese ances...| 0| 0| 618| [null]| [{eas, 1.0}]| [{618, East Asian}]|[{2953, East Asian}]| null| null| null| false|\n", + "| GCST000436| GCST| gwas|Acenocoumarol mai...| [GO_0061476]| null| null|19578179|A genome-wide ass...| Teichert M| 2009-07-04| Hum Mol Genet| null|1,451 European an...| 0| 0| 1451| [null]| [{nfe, 1.0}]| [{1451, European}]| [{287, NR}]| null| null| null| false|\n", + "| GCST000514| GCST| gwas|Response to antip...| [GO_0097332]| null| null|19875103|Genomewide associ...| Aberg K| 2009-10-27| Biol Psychiatry| null|421 European ance...| 738| 0| 738| [null]| [{afr, 0.28997289...|[{214, African Am...| []| null| null| null| false|\n", + "| GCST000550| GCST| gwas| Metabolite levels| [EFO_0004725]| null| null|20037589|A genome-wide per...| Illig T| 2009-12-27| Nat Genet| null|1,029 European an...| 0| 0| 1029| [null]| [{nfe, 1.0}]| [{1029, European}]| [{1202, European}]| null| null| null| false|\n", + "| GCST000708| GCST| gwas| Freckling| [EFO_0003963]| null| null|20585627|Web-based, partic...| Eriksson N| 2010-06-24| PLoS Genet| null|9,126 European an...| 0| 0| 9126| [null]| [{nfe, 1.0}]| [{9126, European}]| []| null| null| null| false|\n", + "| GCST000754| GCST| gwas|Personality dimen...| [EFO_0004365]| null| null|20691247|A genome-wide ass...| Verweij KJ| 2010-08-04| Biol Psychol| null|5,117 European an...| 0| 0| 5117| [null]| [{nfe, 1.0}]| [{5117, European}]| []| null| null| null| false|\n", + "| GCST000880| GCST| gwas|Menarche (age at ...| [EFO_0004703]| null| null|21102462|Thirty new loci f...| Elks CE| 2010-11-21| Nat Genet| null|86,142 European a...| 0| 0| 87802| [null]| [{nfe, 1.0}]| [{87802, European}]| [{14731, European}]| null| null| null| false|\n", + "| GCST001031| GCST| gwas|Large B-cell lymp...| [EFO_0000403]| null| null|21471979|Common variants o...| Kumar V| 2011-04-07| J Hum Genet| null|74 Japanese ances...| 74| 934| 1008| [null]| [{eas, 1.0}]|[{1008, East Asian}]|[{3634, East Asian}]| null| null| null| false|\n", + "| GCST001032| GCST| gwas|Caffeine consumption| [EFO_0004330]| null| null|21490707|Genome-wide meta-...| Cornelis MC| 2011-04-07| PLoS Genet| null|47,431 European a...| 0| 0| 47431| [null]| [{nfe, 1.0}]| [{47431, European}]| []| null| null| null| false|\n", + "| GCST001059| GCST| gwas| Neutrophil count| [EFO_0004833]| null| null|21507922|Duffy-null-associ...| Ramsuran V| 2011-05-01| Clin Infect Dis| null|115 African ances...| 0| 0| 115| [null]| [{afr, 1.0}]|[{115, Sub-Sahara...| []| null| null| null| false|\n", + "| GCST002187| GCST| gwas|Systolic blood pr...| [EFO_0006335]| null| null|24058526|Genome-wide meta-...| Bhatnagar P| 2013-09-13| PLoS One| [MONDO_0011382]|1617 African Amer...| 1617| 0| 1617| [null]| [{afr, 1.0}]|[{1617, African A...| []| null| null| null| false|\n", + "| GCST002623| GCST| gwas| L-arginine levels| [EFO_0006524]| null| null|25245031|Genome-wide assoc...| Luneburg N| 2014-09-21|Circ Cardiovasc G...| null|3,747 European an...| 0| 0| 6739| [null]| [{nfe, 1.0}]|[{3747, European}...| [{1159, European}]| null| null| null| false|\n", + "| GCST003261| GCST| gwas|Ischemic stroke (...| [HP_0002140]| null| null|26708676|Loci associated w...| Pulit SL| 2015-12-18| Lancet Neurol| null|up to 8,062 Europ...| 9510| 32473| 41983| [null]| [{amr, 0.06647928...|[{2791, Hispanic ...|[{256, African Am...| null| null| null| false|\n", + "| GCST003427| GCST| gwas|Alzheimer disease...| [EFO_0004847, MON...| null| null|26830138|Family-based asso...| Herold C| 2016-02-02| Mol Psychiatry| null|2,478 European an...| 2478| 979| 3457| [null]| [{nfe, 1.0}]| [{3524, European}]| []| null| null| null| false|\n", + "| GCST003665| GCST| gwas|Free cholesterol ...| [EFO_0004611, EFO...| null| null|27005778|Genome-wide study...| Kettunen J| 2016-03-23| Nat Commun| null|21,555 European a...| 0| 0| 21555|[EGCUT, ERF, FTC,...| [{nfe, 1.0}]| [{21555, European}]| []| null| null| null| false|\n", + "| GCST003773| GCST| gwas|Loneliness (multi...| [EFO_0007865]| null| null|27629369|Genome-Wide Assoc...| Gao J| 2016-09-15|Neuropsychopharma...| null|8,490 European an...| 0| 0| 10760| [null]| [{nfe, 0.80529739...|[{8490, European}...| []| null| null| null| false|\n", + "| GCST003791| GCST| gwas|Response to metfo...| [EFO_0006952, GO_...| null| null|28173075|Metformin pharmac...| Niu N| 2016-09-11| Hum Mol Genet| null|up to 96 African ...| 0| 0| 288| [null]| [{afr, 0.33333333...|[{96, African Ame...| []| null| null| null| false|\n", + "| GCST003824| GCST| gwas|Depression in res...| [EFO_0007006, EFO...| null| null|27723809|Genome-Wide Assoc...| Matsunami K| 2016-10-10| PLoS One| [EFO_0004220]|45 Japanese ances...| 45| 179| 224| [null]| [{eas, 1.0}]| [{224, East Asian}]| [{160, East Asian}]| null| null| null| false|\n", + "| GCST003837| GCST| gwas| Chronotype| [EFO_0004354]| null| null|27494321|Genome-Wide Assoc...| Jones SE| 2016-08-05| PLoS Genet| null|127,898 British i...| 0| 0| 127898| [null]| [{nfe, 1.0}]|[{127898, European}]| [{89283, NR}]| []| []|ftp://ftp.ebi.ac....| true|\n", + "| GCST004678| GCST| gwas|Psychosis pronene...| [EFO_0008337]| null| null|28525603|Genome-Wide Assoc...| Ortega-Alonso A| 2017-05-19| Schizophr Bull| null|3,967 Finnish anc...| 0| 0| 3967| [null]| [{nfe, 1.0}]| [{3967, European}]| []| null| null| null| false|\n", + "| GCST005189| GCST| gwas| Tanning| [EFO_0004279]| null| null|29195075|An Unexpectedly C...| Martin AR| 2017-11-30| Cell| null|216 Sub-Saharan A...| 0| 0| 216| [null]| [{afr, 1.0}]|[{216, Sub-Sahara...|[{240, Sub-Sahara...| null| null| null| false|\n", + "| GCST005437| GCST| gwas|Random C-peptide ...| [EFO_0005187]| null| null|29404672|Meta-genome-wide ...| Roshandel D| 2018-02-05| Diabetologia| [MONDO_0005147]|1,497 European an...| 0| 0| 1497| [null]| [{nfe, 1.0}]| [{1497, European}]| []| null| null| null| false|\n", + "| GCST005503| GCST| gwas|Medium HDL partic...| [EFO_0004612]| null| null|29084231|Common, low-frequ...| Davis JP| 2017-10-30| PLoS Genet| null|8,372 Finnish anc...| 0| 0| 8372| [null]| [{nfe, 1.0}]| [{8372, European}]| []| null| null| null| false|\n", + "| GCST005669| GCST| gwas|Delta-6 desaturas...| [EFO_0007765, EFO...| null| null|29246731|A common variant ...| de Toro-Martin J| 2017-11-02| J Clin Lipidol| null|81 extreme respon...| 0| 0| 141| [null]| [{nfe, 1.0}]| [{141, NR}]| []| null| null| null| false|\n", + "| GCST005749| GCST| gwas|Digit length rati...| [EFO_0004841]| null| null|29659830|Genome-wide assoc...| Warrington NM| 2018-04-12| Hum Mol Genet| null|14,382 European a...| 0| 0| 15661| [null]| [{nfe, 1.0}]|[{14382, European...| []| null| null| null| false|\n", + "| GCST006420| GCST| gwas|Affective disorde...| [EFO_0004247, EFO...| null| null|30116032|Genetics of suici...| Erlangsen A| 2018-08-16| Mol Psychiatry| null|4,302 European an...| 4302| 13294| 17596| [null]| [{nfe, 1.0}]| [{17596, European}]| []| null| null| null| false|\n", + "| GCST006484| GCST| gwas| Type 2 diabetes| [MONDO_0005148]| null| null|30130595|Pilot genome-wide...| Dominguez-Cruz MG| 2018-08-18| Gene| null|45 Maya ancestry ...| 45| 47| 92| [null]| [{amr, 1.0}]|[{92, Native Amer...| []| null| null| null| false|\n", + "| GCST006496| GCST| gwas|Glomerular filtra...| [EFO_0006829, EFO...| null| null|30160337|Genome Wide Assoc...| Asleh R| 2018-08-30| Clin Transplant| null|243 European ance...| 0| 0| 251| [null]| [{nfe, 0.99601593...|[{243, European},...| []| null| null| null| false|\n", + "| GCST006739| GCST| gwas|Proportion of mis...| [EFO_0006923]| null| null|30188897|Detecting past an...| Jeong C| 2018-09-06| PLoS Genet| null|981 Tibetan ances...| 0| 0| 981| [null]| [{nfe, 1.0}]| [{981, NR}]| []| null| null| null| false|\n", + "| GCST006907| GCST| gwas|Ischemic stroke (...| [EFO_0005524]| null| null|29531354|Multiancestry gen...| Malik R| 2018-03-12| Nat Genet| null|4,373 European an...| 4373| 406111| 410484| [null]| [{nfe, 1.0}]|[{150765, European}]| []| []| []|ftp://ftp.ebi.ac....| true|\n", + "| GCST006960| GCST| gwas|Inflammatory bowe...| [EFO_0003767]| null| null|26490195|Inherited determi...| Cleynen I| 2015-10-18| Lancet| null|16,902 European a...| 29838| 0| 29838| [null]| [{nfe, 1.0}]| [{29838, European}]| [{6182, European}]| null| null| null| false|\n", + "| GCST007217| GCST| gwas|RR interval (hear...| [EFO_0004831]| null| null|30679814|Genome-wide assoc...| van Setten J| 2019-01-24| Eur J Hum Genet| null|2,006 Erasmus Ruc...| 0| 0| 28698| [null]| [{nfe, 1.0}]| [{28698, European}]| []| null| null| null| false|\n", + "| GCST008154| GCST| gwas| Trunk fat mass| [EFO_0005409]| null| null|28552196|Whole-Genome Sequ...| Tachmazidou I| 2017-06-01| Am J Hum Genet| null|3,399 whole genom...| 0| 0| 16237| [null]| [{nfe, 1.0}]|[{3538, NR}, {128...| [{10667, European}]| null| null| null| false|\n", + "| GCST008483| GCST| gwas| Ulcerative colitis| [EFO_0000729]| null| null|26398853|Identification of...| Ye BD| 2016-01-01| Inflamm Bowel Dis| null|705 Korean ancest...| 705| 1178| 1883| [null]| [{eas, 1.0}]|[{1883, South Asi...|[{3674, South Asi...| null| null| null| false|\n", + "| GCST008671| GCST| gwas|Phlegm x occupati...| [EFO_0007939, EFO...| null| null|30449631|Genome-wide inter...| Zeng X| 2018-11-15| Environ Int| null|1,702 Dutch ances...| 1702| 6274| 7976| [null]| [{nfe, 1.0}]| [{7976, European}]| [{6789, European}]| null| null| null| false|\n", + "| GCST008675| GCST| gwas|Maximum habitual ...| [EFO_0007878]| null| null|31151762|Genome-wide Assoc...| Gelernter J| 2019-04-08| Biol Psychiatry| null|126,936 European ...| 0| 0| 143965| [null]| [{afr, 0.11828569...|[{17029, African ...| []| null| null| null| false|\n", + "| GCST008775| GCST| gwas|Birth weight or w...| [EFO_0004342, EFO...| null| null|30858448|Genetic overlap b...| Tekola-Ayele F| 2019-03-11| Sci Rep| null|153,781 European ...| 0| 0| 378240| [null]| [{nfe, 1.0}]|[{246502, Europea...| []| null| null| null| false|\n", + "| GCST008870| GCST| gwas|Keratinocyte canc...| [EFO_0010176]| null| null|31174203|Combined analysis...| Liyanage UE| 2019-06-07| Hum Mol Genet| null|at least 18,538 E...| 18538| 340302| 358840| [null]| [{nfe, 1.0}]|[{358840, European}]| []| null| null| null| false|\n", + "| GCST009173| GCST| gwas|Response to (pegy...| [EFO_0007859]| null| null|30715261|Genome Wide Assoc...| Brouwer WP| 2019-02-02| Clin Infect Dis| [EFO_0004239]|121 Asian, Europe...| 0| 0| 509| [null]| [{nfe, 0.5}, {afr...|[{127, European},...| []| null| null| null| false|\n", + "| GCST009364| GCST| gwas|Triglyceride leve...| [EFO_0004530, EFO...| null| null|31719535|Multi-ancestry sl...| Noordam R| 2019-11-12| Nat Commun| null|at least 2,926 Af...| 0| 49886| 61990| [null]| [{eas, 0.03837715...|[{2096, East Asia...|[{12579, Hispanic...| null| null| null| false|\n", + "| GCST009391| GCST| gwas|Metabolite levels...| [EFO_0005132]| null| null|23823483|A genome-wide ass...| Rhee EP| 2013-07-02| Cell Metab| null|2,076 European an...| 0| 0| 2076| [null]| [{nfe, 1.0}]| [{2076, European}]| []| null| null| null| false|\n", + "|GCST009391_2| GCST| gwas| Metabolite levels| []| null| null|23823483|A genome-wide ass...| Rhee EP| 2013-07-02| Cell Metab| null|2,076 European an...| 0| 0| 2076| [null]| [{nfe, 1.0}]| [{2076, European}]| []| null| null| null| false|\n", + "|GCST009391_3| GCST| gwas| Metabolite levels| [EFO_0004468, EFO...| null| null|23823483|A genome-wide ass...| Rhee EP| 2013-07-02| Cell Metab| null|2,076 European an...| 0| 0| 2076| [null]| [{nfe, 1.0}]| [{2076, European}]| []| null| null| null| false|\n", + "|GCST009391_4| GCST| gwas| Metabolite levels| [EFO_0004518]| null| null|23823483|A genome-wide ass...| Rhee EP| 2013-07-02| Cell Metab| null|2,076 European an...| 0| 0| 2076| [null]| [{nfe, 1.0}]| [{2076, European}]| []| null| null| null| false|\n", + "|GCST009391_5| GCST| gwas| Metabolite levels| [EFO_0004761]| null| null|23823483|A genome-wide ass...| Rhee EP| 2013-07-02| Cell Metab| null|2,076 European an...| 0| 0| 2076| [null]| [{nfe, 1.0}]| [{2076, European}]| []| null| null| null| false|\n", + "|GCST009391_6| GCST| gwas| Metabolite levels| [EFO_0004846]| null| null|23823483|A genome-wide ass...| Rhee EP| 2013-07-02| Cell Metab| null|2,076 European an...| 0| 0| 2076| [null]| [{nfe, 1.0}]| [{2076, European}]| []| null| null| null| false|\n", + "|GCST009391_7| GCST| gwas| Metabolite levels| [EFO_0005001]| null| null|23823483|A genome-wide ass...| Rhee EP| 2013-07-02| Cell Metab| null|2,076 European an...| 0| 0| 2076| [null]| [{nfe, 1.0}]| [{2076, European}]| []| null| null| null| false|\n", + "|GCST009391_8| GCST| gwas| Metabolite levels| [EFO_0005002]| null| null|23823483|A genome-wide ass...| Rhee EP| 2013-07-02| Cell Metab| null|2,076 European an...| 0| 0| 2076| [null]| [{nfe, 1.0}]| [{2076, European}]| []| null| null| null| false|\n", + "|GCST009391_9| GCST| gwas| Metabolite levels| [EFO_0005058]| null| null|23823483|A genome-wide ass...| Rhee EP| 2013-07-02| Cell Metab| null|2,076 European an...| 0| 0| 2076| [null]| [{nfe, 1.0}]| [{2076, European}]| []| null| null| null| false|\n", + "+------------+---------+---------+--------------------+------------------------+------+------------------+--------+--------------------+----------------------+---------------+--------------------+----------------------------------+--------------------+------+---------+--------+--------------------+---------------------+--------------------+--------------------+---------------+-------------+--------------------+-----------+\n", + "only showing top 50 rows\n", + "\n" + ] + } + ], + "source": [ + "path_tmp=\"gs://gwas_catalog_data/study_index\"\n", + "tmp=StudyIndex.from_parquet(session=session, path=path_tmp)\n", + "tmp.df.show(50)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "joined_df=joined_df.withColumn(\"traitFromSourceMappedIds\",joined_df[\"trait_efos\"]).drop(\"trait_efos\",\"trait_reported_low\")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+\n", + "| studyId| projectId|studyType| traitFromSource|traitFromSourceMappedIds|geneId|tissueFromSourceId|pubmedId|publicationTitle|publicationFirstAuthor|publicationDate|publicationJournal|backgroundTraitFromSourceMappedIds| initialSampleSize|nCases|nControls|nSamples| cohorts|ldPopulationStructure| discoverySamples|replicationSamples|qualityControls|analysisFlags|summarystatsLocation|hasSumstats|\n", + "+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Actinomycosis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 101| 363227| 363328|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Amoebiasis| ['EFO_0007144']| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 160| 367214| 367374|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas|Anogenital herpes...| ['EFO_0007282']| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 1986| 400197| 402183|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Aspergillosis| ['EFO_0007157']| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 211| 403213| 403424|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas|Atypical virus in...| ['MONDO_0024318']| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 282| 409849| 410131|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_B...|FINNGEN_R10| gwas|Bacterial infecti...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 20226| 363227| 383453|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_B...|FINNGEN_R10| gwas|Bacterial, viral ...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 2852| 409329| 412181|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_B...|FINNGEN_R10| gwas|Other bacterial i...| ['EFO_0000771']| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 6145| 367214| 373359|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_C...|FINNGEN_R10| gwas| Candidiasis| ['MONDO_0002026']| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 4306| 403213| 407519|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_C...|FINNGEN_R10| gwas|Other sexually tr...| ['MONDO_0021681',...| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 2186| 400197| 402383|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_C...|FINNGEN_R10| gwas| Cholera| ['EFO_1001235']| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 1385| 367214| 368599|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_D...|FINNGEN_R10| gwas|Dengue fever [cla...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 53| 409137| 409190|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_D...|FINNGEN_R10| gwas| Dermatophytosis| ['MONDO_0004678']| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 3921| 403213| 407134|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_E...|FINNGEN_R10| gwas| Early syphilis| ['EFO_0007504']| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 308| 400197| 400505|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "| FINNGEN_R10_AB1_EBV|FINNGEN_R10| gwas|Infectious mononu...| ['EFO_0007326']| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 2979| 400974| 403953|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_E...|FINNGEN_R10| gwas| Enterobiasis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 112| 411658| 411770|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_E...|FINNGEN_R10| gwas| Erysipelas| ['EFO_1001462']| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 22261| 363227| 385488|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_G...|FINNGEN_R10| gwas|Diarrhoea and gas...| ['MONDO_0045031']| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 32210| 367214| 399424|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_G...|FINNGEN_R10| gwas|Gonococcal infection| ['DOID_7551']| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 954| 400197| 401151|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_H...|FINNGEN_R10| gwas| Helminthiases| ['EFO_0007245', '...| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 523| 411658| 412181|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+\n", + "only showing top 20 rows\n", + "\n" + ] + } + ], + "source": [ + "joined_df.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "string\n" + ] + } + ], + "source": [ + "column_type = dict(joined_df.dtypes)[\"traitFromSourceMappedIds\"]\n", + "print(column_type)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "from pyspark.sql.functions import from_json\n", + "from pyspark.sql.types import ArrayType, StringType\n", + "\n", + "# Assuming joined_df is your DataFrame\n", + "joined_df = joined_df.withColumn(\n", + " \"traitFromSourceMappedIds\",\n", + " from_json(\"traitFromSourceMappedIds\", ArrayType(StringType()))\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+\n", + "| studyId| projectId|studyType| traitFromSource|traitFromSourceMappedIds|geneId|tissueFromSourceId|pubmedId|publicationTitle|publicationFirstAuthor|publicationDate|publicationJournal|backgroundTraitFromSourceMappedIds| initialSampleSize|nCases|nControls|nSamples| cohorts|ldPopulationStructure| discoverySamples|replicationSamples|qualityControls|analysisFlags|summarystatsLocation|hasSumstats|\n", + "+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Actinomycosis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 101| 363227| 363328|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Amoebiasis| [EFO_0007144]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 160| 367214| 367374|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas|Anogenital herpes...| [EFO_0007282]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 1986| 400197| 402183|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Aspergillosis| [EFO_0007157]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 211| 403213| 403424|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas|Atypical virus in...| [MONDO_0024318]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 282| 409849| 410131|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_B...|FINNGEN_R10| gwas|Bacterial infecti...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 20226| 363227| 383453|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_B...|FINNGEN_R10| gwas|Bacterial, viral ...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 2852| 409329| 412181|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_B...|FINNGEN_R10| gwas|Other bacterial i...| [EFO_0000771]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 6145| 367214| 373359|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_C...|FINNGEN_R10| gwas| Candidiasis| [MONDO_0002026]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 4306| 403213| 407519|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_C...|FINNGEN_R10| gwas|Other sexually tr...| [MONDO_0021681, E...| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 2186| 400197| 402383|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_C...|FINNGEN_R10| gwas| Cholera| [EFO_1001235]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 1385| 367214| 368599|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_D...|FINNGEN_R10| gwas|Dengue fever [cla...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 53| 409137| 409190|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_D...|FINNGEN_R10| gwas| Dermatophytosis| [MONDO_0004678]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 3921| 403213| 407134|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_E...|FINNGEN_R10| gwas| Early syphilis| [EFO_0007504]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 308| 400197| 400505|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "| FINNGEN_R10_AB1_EBV|FINNGEN_R10| gwas|Infectious mononu...| [EFO_0007326]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 2979| 400974| 403953|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_E...|FINNGEN_R10| gwas| Enterobiasis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 112| 411658| 411770|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_E...|FINNGEN_R10| gwas| Erysipelas| [EFO_1001462]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 22261| 363227| 385488|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_G...|FINNGEN_R10| gwas|Diarrhoea and gas...| [MONDO_0045031]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 32210| 367214| 399424|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_G...|FINNGEN_R10| gwas|Gonococcal infection| [DOID_7551]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 954| 400197| 401151|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_H...|FINNGEN_R10| gwas| Helminthiases| [EFO_0007245, EFO...| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 523| 411658| 412181|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+\n", + "only showing top 20 rows\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "joined_df.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "array\n" + ] + } + ], + "source": [ + "column_type = dict(joined_df.dtypes)[\"traitFromSourceMappedIds\"]\n", + "print(column_type)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "si=StudyIndex(_df=joined_df, _schema=StudyIndex.get_schema())" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+\n", + "| studyId| projectId|studyType| traitFromSource|traitFromSourceMappedIds|geneId|tissueFromSourceId|pubmedId|publicationTitle|publicationFirstAuthor|publicationDate|publicationJournal|backgroundTraitFromSourceMappedIds| initialSampleSize|nCases|nControls|nSamples| cohorts|ldPopulationStructure| discoverySamples|replicationSamples|qualityControls|analysisFlags|summarystatsLocation|hasSumstats|\n", + "+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Actinomycosis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 101| 363227| 363328|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Amoebiasis| [EFO_0007144]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 160| 367214| 367374|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas|Anogenital herpes...| [EFO_0007282]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 1986| 400197| 402183|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas| Aspergillosis| [EFO_0007157]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 211| 403213| 403424|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_A...|FINNGEN_R10| gwas|Atypical virus in...| [MONDO_0024318]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 282| 409849| 410131|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_B...|FINNGEN_R10| gwas|Bacterial infecti...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 20226| 363227| 383453|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_B...|FINNGEN_R10| gwas|Bacterial, viral ...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 2852| 409329| 412181|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_B...|FINNGEN_R10| gwas|Other bacterial i...| [EFO_0000771]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 6145| 367214| 373359|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_C...|FINNGEN_R10| gwas| Candidiasis| [MONDO_0002026]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 4306| 403213| 407519|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_C...|FINNGEN_R10| gwas|Other sexually tr...| [MONDO_0021681, E...| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 2186| 400197| 402383|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_C...|FINNGEN_R10| gwas| Cholera| [EFO_1001235]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 1385| 367214| 368599|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_D...|FINNGEN_R10| gwas|Dengue fever [cla...| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 53| 409137| 409190|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_D...|FINNGEN_R10| gwas| Dermatophytosis| [MONDO_0004678]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 3921| 403213| 407134|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_E...|FINNGEN_R10| gwas| Early syphilis| [EFO_0007504]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 308| 400197| 400505|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "| FINNGEN_R10_AB1_EBV|FINNGEN_R10| gwas|Infectious mononu...| [EFO_0007326]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 2979| 400974| 403953|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_E...|FINNGEN_R10| gwas| Enterobiasis| null| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 112| 411658| 411770|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_E...|FINNGEN_R10| gwas| Erysipelas| [EFO_1001462]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 22261| 363227| 385488|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_G...|FINNGEN_R10| gwas|Diarrhoea and gas...| [MONDO_0045031]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 32210| 367214| 399424|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_G...|FINNGEN_R10| gwas|Gonococcal infection| [DOID_7551]| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 954| 400197| 401151|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "|FINNGEN_R10_AB1_H...|FINNGEN_R10| gwas| Helminthiases| [EFO_0007245, EFO...| null| null| null| null| null| null| null| null|377,277 (210,870 ...| 523| 411658| 412181|[FinnGen]| [{fin, 1.0}]|[{377277, Finnish}]| null| null| null|gs://finngen-publ...| true|\n", + "+--------------------+-----------+---------+--------------------+------------------------+------+------------------+--------+----------------+----------------------+---------------+------------------+----------------------------------+--------------------+------+---------+--------+---------+---------------------+-------------------+------------------+---------------+-------------+--------------------+-----------+\n", + "only showing top 20 rows\n", + "\n" + ] + } + ], + "source": [ + "si.df.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "data": { + "text/plain": [ + "2408" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "si.df.count()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "si.df.write.parquet(path=\"gs://genetics-portal-dev-analysis/yt4/study_index_finngen_with_efo\")" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "path_to_study_index=\"gs://genetics-portal-dev-analysis/yt4/study_index_finngen_with_efo\"\n", + "si=StudyIndex.from_parquet(session=session, path=path_to_study_index)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "gentropy-krNFZEZg-py3.10", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/Release_QC_metrics.ipynb b/notebooks/Release_QC_metrics.ipynb new file mode 100644 index 000000000..0052a3cc8 --- /dev/null +++ b/notebooks/Release_QC_metrics.ipynb @@ -0,0 +1,1103 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Notebook Title: Exploratory Data Analysis for Release QC Metrics\n", + "\n", + "## Description:\n", + "This notebook provides an exploratory data analysis for release quality control (QC) metrics. The notebook utilizes PySpark and pandas for data processing and visualization.\n", + "\n", + "## Notebook Workflow:\n", + "1. Import necessary modules and set up the release path and version.\n", + "2. Load and analyze the variant index data:\n", + " - Count the number of unique variants.\n", + "3. Load and analyze the variant-to-gene (v2g) data:\n", + " - Count the number of unique variants and total variant-to-gene assignments.\n", + " - Count the number of v2g assignments where the score is > 0.8.\n", + " - Plot a histogram/density plot for the \"score\" column.\n", + "4. Load and analyze the study index data for different data sources (FinnGen, GWASCat, eQTLcat):\n", + " - Count the number of unique studies for each data source.\n", + "5. Analyze the credible sets for each datasource (Finngen, gwascat, eqtlcat):\n", + " - Analyze the credible sets:\n", + " - Count the number of unique credible sets and unique study IDs.\n", + " - Plot a scatter plot of the credible set size vs. the top posterior probability.\n", + " - Count the number of credible sets with a top SNP posterior probability > 0.9..\n", + "6. Analyze colocalization data:\n", + " - Count the total number of colocalizations and the number with clpp > 0.8.\n", + " - Calculate the average number of overlaps per credible set.\n", + "7. Analyze locus-to-gene (L2G) predictions:\n", + " - Load the locus-to-gene predictions data.\n", + " - How many Studylocus contains a \"good\" l2g prediction? (l2g_score > 0.5)\n", + " - How does l2g perform based on different datasource inputs? (impossible to tell)\n", + " \n", + "Note: This notebook assumes that the necessary data files are available in the specified release path and version.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Setup steps\n", + "##### 1. Import necessary modules and set up the release path and version." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Setting default log level to \"WARN\".\n", + "To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "24/03/20 13:24:56 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n" + ] + } + ], + "source": [ + "\"\"\"notebook for release qc metrics.\"\"\"\n", + "\n", + "import sys\n", + "from gentropy.common.session import Session\n", + "from pyspark.sql import functions as f\n", + "\n", + "sys.path.append(\"../../gentropy/src/\")\n", + "release_path=\"../../otg_releases\"\n", + "release_ver=\"2403\"\n", + "\n", + "session=Session()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2. Load and analyze the variant index data:\n", + " - Count the number of unique variants." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 3:> (0 + 8) / 9]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variant index contains 5468737 unique variants.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "\n", + "variant_index_path = f\"{release_path}/{release_ver}/variant_index\"\n", + "variant_index=session.spark.read.parquet(variant_index_path, recursiveFileLookup=True)\n", + "\n", + "# How many variants?\n", + "print(\"Variant index contains \", variant_index.select(f.col(\"variantId\")).distinct().count(), \" unique variants.\")\n", + "\n", + "# How many variants with MAF>=0.01 for EUR population?\n", + "#variant_index.filter(variant_index[\"alleleFrequencies.populationName\"] > 0.05).show(10, False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 3. Load and analyze the variant-to-gene (v2g) data:\n", + " - Count the number of unique variants and total variant-to-gene assignments.\n", + " - Count the number of v2g assignments where the score is > 0.8." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unique variants in v2g release: 5090991 , total variant to gene assignments: 105771851 , number of v2g assignments where score > 0.8: 23176515 ( 4.552 %)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Summary of v2g_score: Mean: 0.5909395615801637 L.quart: 0.29 Median: 0.62 U.quart: 0.94\n" + ] + } + ], + "source": [ + "#v2g_path='gs://genetics_etl_python_playground/releases/24.03/variant_to_gene'\n", + "v2g_path=f\"{release_path}/{release_ver}/variant_to_gene\"\n", + "v2g=session.spark.read.parquet(v2g_path, recursiveFileLookup=True)\n", + "\n", + "#How many variants?\n", + "print(\"Unique variants in v2g release: \", v2g.select(f.col(\"variantId\")).distinct().count(), \", total variant to gene assignments: \", v2g.count(), \", number of v2g assignments where score > 0.8: \", v2g.filter(v2g[\"score\"] > 0.8).count(), \"(\", round( v2g.filter(v2g[\"score\"] > 0.8).count()/v2g.select(f.col(\"variantId\")).distinct().count(), 3), \"%)\")\n", + "sample_size_quartiles = v2g.stat.approxQuantile(\"score\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of v2g_score: Mean: \", v2g.select(f.mean(v2g[\"score\"])).collect()[0][0], \"L.quart: \", sample_size_quartiles[0], \"Median: \", sample_size_quartiles[1], \"U.quart: \", sample_size_quartiles[2])\n", + "#v2g.select().toPandas().plot.hist()\n", + "#v2g.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " - Plot a histogram/density plot for the \"score\" column." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "#The histogram/density plot for “score”\n", + "# Out of mem error:\n", + "#v2g.select(f.col(\"score\")).toPandas().plot.hist(bins=10, alpha=0.5, label=\"v2g scores\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 5. Analyze the credible sets:\n", + "For each datasource and finemapping methods:\n", + "- Count the number of unique credible sets and unique study IDs.\n", + "- Plot a scatter plot of the credible set size vs. the top posterior probability.\n", + "- Count the number of credible sets with a top SNP posterior probability > 0.9.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of unique finngen susie CSs: 13966\n", + "Ingested 13966 Credible sets from 2408 finngen studies\n", + "Summary of finngen sample sizes: Mean: 355917.896179402 L.quart: 316100.0 Median: 392089.0 U.quart: 409683.0\n", + "Number of finngen studies with at least one CS: 1194\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of CS with top SNP PP > 0.9: 1898\n", + "Summary of finngen credible set sizes: L.quart: 4.0 Median: 14.0 U.quart: 41.0\n" + ] + }, + { + "data": { + "image/png": "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tWoVQ0NDO93v97//PYceeuiU22q1Gi984Qt54QtfSJ7n/Nmf/Rnvfve7eetb3zpjj6eJdOT69et363c97LDD+NWvfrXg+01+7v7+/jmfe926dVQqlU5EaTK33HLLTrdJKTn55JM5+eSTufTSS7n44ot529vexg033NBJwf785z/n5JNP3mUvprl+vqu/WyDQy4SUWSCwgpnwm1x22WVTbv/oRz865XulFM997nP50pe+NONmv2XLlkVZj7WW4eHhKbetX7+e/fbbb0pU5LDDDuO///u/yfO8c9tXv/pV7rrrrin33bZt25Tv4zjm4Q9/ON57iqKYcQ2nnnoq/f39XHzxxTMes6vf9bnPfS4///nP+Zd/+Zedfrar6Nixxx7LYYcdxvvf/37GxsZmfW6lFKeeeipf/vKXufPOOzs//81vfsPXv/71KffZvn37To8zEX2aeE1f8IIXcPfdd/PpT396p2ObzSbj4+Od72u12k5idL5/t0CglwkRokBgBXPsscfy3Oc+lw996ENs27atU3b/29/+FpgaDXjve9/LDTfcwPHHH88555zDwx/+cLZv385Pf/pTvvWtb8248S6U0dFRDjjgAJ73vOdx9NFHU6/X+da3vsWPfvQjPvCBD3SOO/vss/niF7/In/zJn/CCF7yA3/3ud3zuc5+bYjYH+OM//mM2btzIiSeeyIYNG/jNb37Dxz72MU477TT6+vpmXEN/fz+f+MQneOlLX8oxxxzDn//5n7Nu3TruvPNOrr32Wk488UQ+9rGPzfo7vPnNb+aLX/wiz3/+83n5y1/Osccey/bt2/nKV77C5ZdfztFHHz3rfaWUXHHFFTz96U/nEY94BGeddRb7778/d999NzfccAP9/f3827/9GwAXXngh119/PU984hM599xzMcZ0ei794he/6DzmRRddxHe/+11OO+00Dj74YB544AEuu+wyDjjgAJ7whCcA8NKXvpSrr76aV77yldxwww2ceOKJWGu5+eabufrqq/n617/OYx/7WKB8z3zrW9/i0ksvZb/99uOQQw7hoQ996Lz+boFAT7OMFW6BwD7BQsvuZyptnl6GPnHf6aXW00vMvfd+fHzcn3feeX716tW+Xq/7Zz/72f6WW27xgH/ve9875f7333+/P++88/yBBx7ooyjyGzdu9CeffLL/1Kc+tcvf54477vCA/8xn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0Ud3hvBKKXdKSU50Hgc48MADueWWW7jsssuoVCqce+65nHTSSVOOmbz+TZs2TVn/TTfdxC233MKb3/zmGdd3xBFHMDw8PG/xctRRR3Huuefyuc99jm9+85t885vf5D/+4z8A+MxnPsONN97I4x//eD7/+c9zxBFH8N///d/zety9xbIKorGxsc4fBcqy+ptuuok777wTKNNdL3vZyzrHv/KVr+T222/nr/7qr7j55pu57LLLuPrqq3nDG96wHMsPBAKBfQIpBEoKzLRIkHEeJQWyy7wgC+WhD33oTh6l6d8fc8wx3HLLLTzkIQ/Z6UvK3d9KtdaccsopXHLJJfziF7/gf//3f/n3f/93oKwSmyxGRkZGuOOOO6bcv1KpcPrpp/ORj3yE73znO51IzXSOOeYY7rvvPrTWO61/7dq1M67tec97HnEcc8kll8z48wnhNhMPf/jDgbK9zgSPecxjeOtb38p//dd/cdRRR/FP//RPs95/OVjWsvsf//jHPOUpT+l8/8Y3vhGAM844g6uuuop77723I44ADjnkEK699lre8IY38OEPf5gDDjiAK664IpTcBwKBwBIipSDVsu0hcui2OLLWU0sUUva2IHrNa17DSSedxKWXXsrpp5/Ov//7v3PddddNSRedf/75PPOZz+Sggw7iec97HlJKfv7zn/OrX/2Kv/3bv92t5/3qV7/K7bffzkknncSqVav42te+hnOOhz70oQA89alP5aqrruL0009ncHCQ888/H6VU5/5XXXUV1lqOP/54qtUqn/vc56hUKhx88ME7Pdcpp5zCCSecwLOf/WwuueQSjjjiCO655x6uvfZanvOc5/DYxz52p/sceOCBfPCDH+TVr341IyMjvOxlL2Pz5s384Q9/4B/+4R+o1+t84AMf4FWvehX77bcfT33qUzsm+L/9279l3bp1nHDCCdxxxx186lOf4lnPehb77bcft9xyC7feeuuUgEc3sKyC6MlPfvKcFQozdaF+8pOfzM9+9rMlXFUgEAgEppNG5UbcMo7MOJQU1BLVub2XOfHEE7n88su58MILefvb386pp57KG97wBj72sY91jjn11FP56le/ykUXXcT73vc+oijiYQ97GGefffZuP+/g4CDXXHMNF1xwAa1Wi8MPP5x//ud/5hGPeARQZknuuOMOnvnMZzIwMMC73vWuKRGiwcFB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eMPwfR4FnmhBdOnSJYwxvPrqqyd+/uqrr/Lcc8+d+pnnnnvuvt5fliVlWT6cDd7iDYv76Y6d5zN3e8/DXMzuKPrutq1aRnGnFWmnvf+sglZrhT0jue5+9u08230/uJ9zWGjLJWfZC2lT3Gmjztze40XXaVyTs/b1tZzr+zqGD+G43e37HgVp9kEKheqMY327seDD7n68luN8r2P3sM8dnDwOG85ReXJk+Ch+7xsFZ/c8HwOKouDd7343H/nIRzY/SynxkY98hJdffvnUz7z88ssn3g/wYz/2Y2e+f4stnlYcH++90X7vk9q3+4W1MvYqCnOu7T1tv86zr6/leDxNx/Bhbsu6UNitHHu125B8192v9e+yVp/7WN/rO58kHud5fJqPw+sBT3xk9t3f/d18+7d/O+95z3t473vfy5/9s3+W5XLJH/yDfxCA/+6/++948cUX+eAHPwjAd33Xd/EN3/AN/Jk/82f45m/+Zj70oQ/xsz/7s/x//9//9yR3Y4sttthii/vAo+hUbLsfgu1xeG144gXRt3zLt3Dt2jW+//u/n1deeYXf/Jt/M//iX/yLDXH6c5/7HPqYRfrXf/3X83f+zt/h//w//0/+2B/7Y7zzne/kwx/+8Bvag2iLLbbYYosttni0eOI+RI8bb1Yfoi222GKLLbZ4PeNRr99PlEO0xRZbbLHFFlts8TRgWxBtscUWW2yxxRZvemwLoi222GKLLbbY4k2PbUG0xRZbbLHFFlu86bEtiLbYYosttthiizc9tgXRFltsscUWW2zxpse2INpiiy222GKLLd702BZEW2yxxRZbbLHFmx7bgmiLLbbYYosttnjT44lHdzxurI25Z7PZE96SLbbYYostttjivFiv248qYONNVxDduHEDgLe+9a1PeEu22GKLLbbYYov7xY0bN9jd3X3o3/umK4guXLgASGjsozigW5wfs9mMt771rXz+85/f5so9Bdiej6cH23Px9GB7Lp4eHB0d8dJLL23W8YeNN11BpLXQpnZ3d7cX91OCnZ2d7bl4irA9H08Ptufi6cH2XDw9WK/jD/17H8m3brHFFltsscUWW7yOsC2Itthiiy222GKLNz3edAVRWZb8wA/8AGVZPulNedNjey6eLmzPx9OD7bl4erA9F08PHvW5UPlR6de22GKLLbbYYostXid403WItthiiy222GKL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55/7uZ/Lv/f3/t5TZfdf+7Vfm3/6p386/9RP/VR+5zvfuZXdvwb8z//z/5x3d3fzT/zET5yQta5Wq817/vAf/sP5pZdeyj/+4z+ef/Znfza//PLL+eWXX968vpa1/vbf/tvzJz7xifwv/sW/yM8888xWXnyf+J7v+Z78kz/5k/kzn/lM/rmf+7n8Pd/zPVkplf/lv/yXOefteXjSOK4yy3l7Ph4X/ugf/aP5J37iJ/JnPvOZ/G//7b/N73//+/OlS5fy1atXc86P9zy8qQqinHP+C3/hL+SXXnopF0WR3/ve9+Z//+///ZPepDcc/tW/+lcZuOOfb//2b885i/T++77v+/Kzzz6by7LM3/iN35g/+clPnviOGzdu5G/91m/Nk8kk7+zs5D/4B/9gns/nT2BvXt847TwA+Yd+6Ic272maJv8v/8v/kvf39/NoNMq///f//nzlypUT3/PZz342f9M3fVOu6zpfunQp/9E/+kez9/4x783rG//D//A/5Le97W25KIr8zDPP5G/8xm/cFEM5b8/Dk8btBdH2fDwefMu3fEt+/vnnc1EU+cUXX8zf8i3fkj/96U9vXn+c50HlnPNr7m1tscUWW2yxxRZbvAHwpuEQbbHFFltsscUWW5yFbUG0xRZbbLHFFlu86bEtiLbYYosttthiizc9tgXRFltsscUWW2zxpse2INpiiy222GKLLd702BZEW2yxxRZbbLHFmx7bgmiLLbbYYosttnjTY1sQbbHFFk8VPvvZz6KU4hOf+MST3pRToZTiwx/+8JPejC222OIhY5t2v8UWW7yh8d//9/89h4eHD62IuXLlCvv7+w/lu7bYYounB9uCaIsttngk8N7jnHvSm/HQsU0y32KLNya2I7Mtttji3Egp8af+1J/iy77syyjLkpdeeon/+//+vzdjrr/39/4e3/AN30BVVfztv/23Afjrf/2v85Vf+ZVUVcVXfMVX8Jf/8l8+8Z0/8zM/w9d+7ddSVRXvec97+PjHP37i9YODA77t276NZ555hrqueec738kP/dAPbV7//Oc/z3/73/637O3tceHCBX7v7/29fPaznwXgB3/wB/mbf/Nv8o//8T9GKYVSip/4iZ+46z72fc93fud38vzzz1NVFW9729v44Ac/uHn9+MjsB3/wBzffe/yfH/7hH94crw9+8IO84x3voK5r3vWu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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# study_index='gs://genetics_etl_python_playground/releases/24.03/study_index'\n", + "# Study Index. It has different files for different datasource (FinnGen, GWASCat, eQTLcat).\n", + "# Credible_set. Please use Daniels’ notebook as a reference. For each subfolder:\n", + "\n", + "finngen_index_path=f\"{release_path}/{release_ver}/study_index/finngen\"\n", + "# finngen susie:\n", + "finngen_susie_path=f\"{release_path}/{release_ver}/credible_set/finngen_susie\"\n", + "\n", + "finngen_susie=session.spark.read.parquet(finngen_susie_path, recursiveFileLookup=True)\n", + "print(\"Number of unique finngen susie CSs: \", finngen_susie.select(\"studyId\", \"region\", \"credibleSetIndex\").distinct().count())\n", + "\n", + "# FinnGen:\n", + "finngen_index=session.spark.read.parquet(finngen_index_path, recursiveFileLookup=True)\n", + "# Number of CSs, studies.\n", + "print(\"Ingested \", finngen_susie.select(\"studyId\", \"region\", \"credibleSetIndex\").distinct().count(), \" Credible sets from\", finngen_index.select(f.col(\"studyId\")).distinct().count(), \"finngen studies\")\n", + "sample_size_quartiles = finngen_index.stat.approxQuantile(\"nSamples\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of finngen sample sizes: Mean: \", finngen_index.select(f.mean(finngen_index[\"nSamples\"])).collect()[0][0], \"L.quart: \", sample_size_quartiles[0], \"Median: \", sample_size_quartiles[1], \"U.quart: \", sample_size_quartiles[2])\n", + "# Number of unique studyids with at leas one CS.\n", + "print(\"Number of finngen studies with at least one CS: \", finngen_susie.select(\"studyId\").distinct().count())\n", + "# Number of CSs with at leas one SNP with PIP>0.9\n", + "print(\"Number of CS with top SNP PP > 0.9: \", finngen_susie.select(\"studyId\", \"region\", \"credibleSetIndex\", \"locus.posteriorProbability\").withColumn(\"top_PP\", f.col(\"posteriorProbability\").getItem(0)).filter(f.col(\"top_PP\") > 0.9).count())\n", + "# The descriptive summary of 99% CS size and histogram/density plot\n", + "\n", + "credset_size_quartiles = finngen_susie.select(\"studyId\", \"region\", \"credibleSetIndex\", \"locus.posteriorProbability\").withColumn(\"credset_size\", f.size(f.col(\"posteriorProbability\"))).stat.approxQuantile(\"credset_size\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of finngen credible set sizes: L.quart: \", credset_size_quartiles[0], \"Median: \", credset_size_quartiles[1], \"U.quart: \", credset_size_quartiles[2])\n", + "\n", + "finngen_susie.select(\"studyId\", \"region\", \"credibleSetIndex\", \"locus.posteriorProbability\").withColumn(\"top_PP\", f.col(\"posteriorProbability\").getItem(0)).withColumn(\"credset_size\", f.size(f.col(\"posteriorProbability\"))).toPandas().plot.scatter(x=\"credset_size\", y=\"top_PP\", xlim=[0, 500], alpha=0.05, label=\"finngen susie CSs\", title=\"finngen susie credsets\")\n", + "\n", + "finngen_susie_fm=finngen_susie.select(\"studyId\", \"studyLocusId\", \"locus.posteriorProbability\").withColumn(\"top_PP\", f.col(\"posteriorProbability\").getItem(0)).withColumn(\"credset_size\", f.size(f.col(\"posteriorProbability\")))\n", + "# The histogram/density plot for total sample size\n", + "#finngen_index.select(f.col(\"nSamples\")).toPandas().plot.hist(bins=10, alpha=0.5, label=\"FinnGen sample size\", title=\"FinnGen sample sizes\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of unique finngen pics CSs: 19967 in 1342 studies.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of finngen_pics CS with top SNP PP > 0.9: 7239\n", + "Summary of finngen_pics sample sizes: L.quart: 316100.0 Median: 392089.0 U.quart: 409683.0\n", + "Summary of finngen_pics credset sizes: Mean: 36.04337156307908 L.quart: 1.0 Median: 7.0 U.quart: 30.0\n" + ] + }, + { + "data": { + "image/png": "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fOQjufvd785Xv/rVNT13JBIJREEUiWxxzjrrrMPu27Zt22GemsWO3bZtG8DcsTfffDNSSs4999wFx93tbndbcPvOO+9kcnKS97znPezatWvB16WXXgocbg5e6bnXwt3vfvcFtzudDqeeeio//OEPlzzne9/7Hve4xz2WNaa/4AUv4LzzzuNxj3scZ5xxxpxwWYmxsTEAZmZmVvcDABdffDGf//znmZyc5Etf+hIvfOELufnmm3n84x8fjdWRyBEQPUSRyBZHKbXo/X6RjhxrOXY5nHMA/K//9b945jOfuegx97vf/Y7Lcx9Pdu/ezY033sjnP/95PvvZz/LZz36W97///TzjGc/gAx/4wJLn3fOe9wTgX//1X+ciX6ul1WrxyEc+kkc+8pHs3LmTq666is9+9rNLvq6RSGRxYoQoEokcM84++2ycc/zgBz9YcP+h1WC7du2i2+1ireXCCy9c9Ot4Vkv913/914LbvV6PW2+9lXPOOWfJc+5617ty00030TTNstdO05RLLrmEa6+9lu9973v85m/+Jh/84AeXrYi75JJLAPjzP//z1f8Qi/DgBz8YgFtvvfWorhOJbEWiIIpEIseMiy++GIBrr712wf3veMc7FtxWSvHEJz6Rj3/84/zbv/3bYde58847j98igfe85z0LhM2f/MmfYIzhcY973JLnPPGJT2Tv3r28853vPOyx2SjVvn37FtwvpZyLdFVVteS1H/rQh/ILv/ALvPe97+WTn/zkYY/Xdc1LX/rSuds33HDDoteZ9UDd4x73WPK5IpHI4sSUWSQSOWY86EEP4olPfCJvfetb2bdv31zZ/ezYifkl7X/wB3/AF77wBc4//3wuu+wy7n3ve7N//36++c1v8rd/+7fs37//uK2zrmse+9jH8uu//uvcdNNNXHvttTziEY/gl3/5l5c85xnPeAYf/OAHeclLXsLXvvY1HvnIR9Lv9/nbv/1bXvCCF/CEJzyB5zznOezfv5/HPOYxnHHGGdx888284x3v4AEPeAD3ute9ll3TBz/4QX7+53+eX/3VX+WSSy7hsY99LO12m//6r//iwx/+MLfeeutcL6InPOEJnHvuuVxyySXc9a53nVvH//2//5eHPOQhcxGnSCSyeqIgikQix5QPfvCDnHLKKfyf//N/+Ku/+isuvPBCPvKRj3CPe9xjwdiQPXv28LWvfY3XvOY1fOITn+Daa69lx44d/NRP/dSCvkbHg3e+85186EMf4tWvfjVN0/CUpzyFt7/97csOv1VK8ZnPfIZrrrmGv/iLv+DjH/84O3bs4BGPeAT3ve99geCJes973sO1117L5OQkp5xyCk960pO48sorkXL5gPyuXbv46le/yrXXXstHPvIRXvnKV1LXNWeffTa//Mu/vKCP0Xvf+17++q//mo9+9KPccssteO+5y13uwitf+Upe9rKXxY7kkcgREGeZRSKR486NN97IAx/4QP78z/+cpz3taeu2juuuu45LL72Ur3/963N+m0gkEoHoIYpEIseY4XB42H1vfetbkVLycz/3c+uwokgkElmZGFeNRCLHlDe+8Y184xvf4NGPfjRa67ny8+c+97mceeaZx+U5h8MhU1NTyx6zffv24/LckUjk5CAKokgkckx52MMexvXXX8/VV19Nr9fjrLPO4sorr1wwrf1Y85GPfGSuoeNSfOELXzhuzx+JRDY/0UMUiUQ2Pbfeeiv/3//3/y17zIMe9KC57taRSCRyKFEQRSKRSCQS2fJEU3UkEolEIpEtz5bzEDnnuOWWW+h2u8v2HIlEIpFIJLJx8N4zMzPDaaedtmJfryNhywmiW2655bhVukQikUgkEjm+/PjHP+aMM8445tfdcoKo2+0C4QUdGxtb59VEIpFIJBJZDdPT05x55plz+/ixZssJotk02djYWBREkUgkEolsMo6X3SWaqiORSCQSiWx5oiCKRCKRSCSy5YmCKBKJRCKRyJZny3mIIpFIJLIyzjnqul7vZUS2GGmaHpeS+tUQBVEkEolEFlDXNT/4wQ9wzq33UiJbDCkl5557LmmanvDnjoIoEolEInN477n11ltRSnHmmWeu26f1yNZjtnHyrbfeyllnnXXCmydHQRSJRCKROYwxDAYDTjvtNFqt1novJ7LF2LVrF7fccgvGGJIkOaHPHaV/JBKJROaw1gKsS8oiEpn9u5v9OzyRREEUiUQikcOIsx4j68F6/t1FQRSJRCKRSGTLs66C6Etf+hKXXHIJp512GkIIPvnJT654zhe/+EV++qd/mizLuNvd7sZ11113RM99nys+zzkv//QRnRuJRCKRjYX3nuc+97ls374dIQQ33ngjF1xwAS960YvWe2mRTcK6CqJ+v8/9739//viP/3hVx//gBz/gl37pl3j0ox/NjTfeyIte9CKe85zn8PnPf/6I13DOyz8dhVEkEolscj73uc9x3XXX8Td/8zfceuut3Oc+9+ETn/gEV1999Xov7ZhxwQUXIIRACEGe59z73vfm2muvnXv8uuuuY2JiYsE5dV3zxje+kfvf//60Wi127tzJwx/+cN7//vfTNA0Ad955J89//vM566yzyLKMU045hYsvvpi///u/X3Y909PTvPKVr+Se97wneZ5zyimncOGFF/KJT3wC7z0Q9u2nPvWpnHbaaeR5zhlnnMETnvAEvvOd7xzbF+cYsK5VZo973ON43OMet+rj3/Wud3Huuefypje9CYB73etefOUrX+Etb3kLF1988fFaZiQSiUQ2ON/73vc49dRTedjDHjZ33/bt29dxRceHyy67jNe85jUMBgM++MEP8sIXvpBt27bxlKc85bBj67rm4osv5tvf/jZXX301D3/4wxkbG+Mf//Ef+aM/+iMe+MAH8oAHPIAnPvGJ1HXNBz7wAe5yl7tw++23c8MNN7Bv374l1zE5OckjHvEIpqameO1rX8tDHvIQtNb83d/9Hb/7u7/LYx7zGNrtNhdddBH3uMc9+MQnPsGpp57Kf//3f/PZz36WycnJ4/gqHSF+gwD4v/qrv1r2mEc+8pH+8ssvX3Df+973Pj82NrbkOWVZ+qmpqbmvH//4xx7wZ77oo/7sl/3Ngq9IJBLZ6gyHQ//v//7vfjgcHvW1rHW+MdZb647Bypbmmc98pgfmvs4++2zvvfePetSjFuwZZ599tr/mmmv8pZde6judjj/zzDP9u9/97rnHf/CDH3jAf/zjH/cXXHCBL4rC3+9+9/Nf/epXFzzfe97zHn/GGWf4oij8r/zKr/g3velNfnx8fMExn/zkJ/0DH/hAn2WZP/fcc/2VV17pm6aZexzwf/qnf+p/5Vd+xRdF4e92t7v5v/7rv1725zz05/He+7vf/e7+yU9+svfe+/e///0L1vGGN7zBSyn9N7/5zcOuVde17/V6/sCBAx7wX/ziF5d97kN5/vOf79vttv/JT35y2GMzMzO+aRr/rW99ywP+hz/84aqvu9zf39TUlAf81NTUmta6WjaVqfq2225jz549C+7bs2cP09PTDIfDRc95/etfz/j4+NzXmWeeueT1nfPHdL2RSCSyFfHeM6wNU2XD5LBhqmwY1mYujXKsedvb3sZrXvMazjjjDG699Va+/vWvL3nsm970Jh784AfzrW99ixe84AU8//nP56abblpwzCtf+Upe+tKXcuONN3LeeefxlKc8BWMMAH//93/P8573PC6//HJuvPFGLrroIq655poF53/5y1/mGc94Bpdffjn//u//zrvf/W6uu+66w4676qqr+PVf/3X+5V/+hV/8xV/kaU97Gvv371/Tz14UxZIjVj70oQ9x4YUX8sAHPvCwx5Ikod1u0+l06HQ6fPKTn6SqqlU9p3OOD3/4wzztaU/jtNNOO+zxTqeD1ppdu3YhpeRjH/vYupTRr5VNJYiOhFe84hVMTU3Nff34xz9e8tif7JuhXzbH7T9tJBKJbAXKxtKvwgaY6bDN9CtL2RyfTXF8fJxut4tSilNOOYVdu3Yteewv/uIv8oIXvIC73e1uvOxlL2Pnzp184QtfWHDMS1/6Un7pl36J8847j6uuuoqbb76Z7373uwC84x3v4HGPexwvfelLOe+883jBC15wmPXjqquu4uUvfznPfOYzuctd7sJFF13E1Vdfzbvf/e4Fxz3rWc/iKU95Cne729143eteR6/X42tf+9qqfmZrLX/+53/Ov/zLv/CYxzxm0WP+67/+i3ve857LXkdrzXXXXccHPvABJiYmePjDH87v/d7v8S//8i9LnrN3714OHDiw4rVPP/103v72t/PqV7+abdu28ZjHPIarr76a73//+yv/gOvAphJEp5xyCrfffvuC+26//XbGxsYoimLRc7IsY2xsbMHXUrzuE1/hmz+8gzsm+1S1oawMdWNj5CgSiURWiXOe0jiUEiRKIkT4rpSgNG7d30/vd7/7zf1bCMEpp5zCHXfcseQxp556KsDcMTfddBM/8zM/s+D4Q29/+9vf5jWvec1c9KXT6XDZZZdx6623MhgMFn2edrvN2NjYYWs5lGuvvZZOp0NRFFx22WW8+MUv5vnPf/6ix672w/0Tn/hEbrnlFj71qU/xC7/wC3PV3EtVca8laPDCF76Q2267jQ996EM89KEP5S//8i/5qZ/6Ka6//vpVX+NEsalGdzz0oQ/lM5/5zIL7rr/+eh760Icek+t/9gee03bfwp0zFadtb6OUJFOK7a2U7Z2MItWrbhrlnMd5jxQCKWODs0gksjVw3mOdn4sMzaKloDIuvC+yfu+Jh46DEEIcNsR2/jGz7/lrGXTb6/W46qqr+NVf/dXDHsvzfE1rOZSnPe1pvPKVr6QoCk499dRlZ82dd955q67myvOciy66iIsuuohXvepVPOc5z+GKK67gWc961mHH7tq1i4mJiVVfu9vtcskll3DJJZfw2te+losvvpjXvva1XHTRRas6/0SxrhGiXq/HjTfeyI033giE8rwbb7yRH/3oR0BIdz3jGc+YO/55z3se3//+9/nd3/1dvvOd73Dttdfy0Y9+lBe/+MXHbE3/eNMdfP37+7np1klumy659cCAm/f1+NH+Pv2yWXCscx5jwyee2X9b605o7jwSiUQ2ElIIlBSYQyJBxnmUFMhN3gH7Hve4x2EepUNv//RP/zQ33XQTd7vb3Q77OtphuePj49ztbnfj9NNPX/FaT33qU/nbv/1bvvWtbx32WNM09Pv9Jc+9973vveTjUkqe/OQn86EPfYhbbrnlsMd7vd6c5+pQhBDc8573XPa514t1jRD98z//M49+9KPnbr/kJS8B4JnPfCbXXXcdt95665w4Ajj33HP59Kc/zYtf/GLe9ra3ccYZZ/De9773mJbc3zQJ8id3kGiB9SCFJB1IZsqGxljO2dGlnWsq4yiNw1hHYx0C0EJQGovz0C0SMi0xzs/l0ov06F/uGHmKRCIbGSkFuZaj9z2HHokjaz3tTG36963f/u3f5ud+7ud485vfzCWXXML/+3//j89+9rMLsgevfvWrefzjH89ZZ53F//yf/xMpJd/+9rf5t3/7N1772teesLW+6EUv4tOf/jSPfexjufrqq3nEIx5Bt9vln//5n3nDG97An/3Zn3HmmWfya7/2azz72c/mfve739zjb3zjG3nCE56w5LWvueYavvjFL3L++edzzTXX8OAHP5gkSfjyl7/M61//er7+9a/zwx/+kCuuuIKnP/3p3Pve9yZNU/7u7/6O973vfbzsZS87Ya/DallXQXTBBRcsGzlZLH95wQUXLKp2jxUGuO2AZ+9EHyEE1jh0ojh1IqdXWpCC7UVKqjVaS7z39GtDXVu0FAyMxXuBELCtnZEoCQTxlGm/4pvBUoLHe0/ZWErjsKNPWrmW5ImKM4cikciGIk8UAKVxVMahpKCdqbn7NzMPf/jDede73sVVV13F7//+73PxxRfz4he/mHe+851zx1x88cX8zd/8Da95zWt4wxveQJIk3POe9+Q5z3nO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dHyHcNZliDo6Ojo6Ojo67koXEHV0dHR0dHSc9XQBUUdHR0dHR8dZTxcQdXR0dHR0dJz1nHUB0e/+7u/ykIc8hDRNufzyy/nUpz51pnfpu46/+qu/4kd/9Ec599xzUUrx/ve/f8fzIQRe/epXc84555BlGVdeeSX/+I//uGOb9fV1rrnmGkajEcvLy7zgBS9gOp2exqP47uC6667j+77v+xgOh+zZs4fnPOc53HzzzTu2KYqCF7/4xezatYvBYMCP//iPc/DgwR3b3HbbbTzzmc+k1+uxZ88efv7nf56maU7noXzH86Y3vYnHPe5xC4G//fv386EPfWjxfHcdzhy//uu/jlKKn/3Zn1081l2P08NrX/talFI7fh75yEcunj+t1yGcRbzrXe8KcRyH//W//lf44he/GF74wheG5eXlcPDgwTO9a99VfPCDHwy/9Eu/FN773vcGILzvfe/b8fyv//qvh6WlpfD+978//MM//EP4sR/7sfDQhz405Hm+2ObpT396uOSSS8InPvGJ8Nd//dfh4Q9/eHje8553mo/kO5+rrroqvPWtbw1f+MIXwk033RR+5Ed+JFx44YVhOp0utnnRi14ULrjggnD99deHT3/60+H7v//7w5Of/OTF803ThMc+9rHhyiuvDDfeeGP44Ac/GNbW1sIrX/nKM3FI37H8yZ/8SfjTP/3T8P/+3/8LN998c/jFX/zFEEVR+MIXvhBC6K7DmeJTn/pUeMhDHhIe97jHhZe+9KWLx7vrcXp4zWteEx7zmMeEO++8c/Fz+PDhxfOn8zqcVQHRk570pPDiF7948f/OuXDuueeG66677gzu1Xc3dw2IvPdh37594fWvf/3isc3NzZAkSfg//+f/hBBC+NKXvhSA8Pd///eLbT70oQ8FpVS44447Ttu+fzdy6NChAISPf/zjIQQ591EUhfe85z2Lbb785S8HINxwww0hBAlwtdbhwIEDi23e9KY3hdFoFMqyPL0H8F3GyspK+P3f//3uOpwhJpNJuPjii8OHP/zh8JSnPGUREHXX4/Txmte8JlxyySUnfO50X4ezpmRWVRWf+cxnuPLKKxePaa258sorueGGG87gnp1d3HLLLRw4cGDHdVhaWuLyyy9fXIcbbriB5eVlnvjEJy62ufLKK9Fa88lPfvK07/N3E1tbW8Axk+PPfOYz1HW943o88pGP5MILL9xxPf7ZP/tn7N27d7HNVVddxXg85otf/OJp3PvvHpxzvOtd72I2m7F///7uOpwhXvziF/PMZz5zx3mH7nNxuvnHf/xHzj33XB72sIdxzTXXcNtttwGn/zqcNeauR44cwTm346QB7N27l6985StnaK/OPg4cOABwwuuw/dyBAwfYs2fPjuettayuri626bjveO/52Z/9WX7gB36Axz72sYCc6ziOWV5e3rHtXa/Hia7X9nMdp87nP/959u/fT1EUDAYD3ve+9/HoRz+am266qbsOp5l3vetdfPazn+Xv//7v7/Zc97k4fVx++eW87W1v4xGPeAR33nknr3vd6/ihH/ohvvCFL5z263DWBEQdHWc7L37xi/nCF77A3/zN35zpXTlrecQjHsFNN93E1tYWf/RHf8S1117Lxz/+8TO9W2cdt99+Oy996Uv58Ic/TJqmZ3p3zmqe8YxnLP79uMc9jssvv5yLLrqIP/zDPyTLstO6L2dNyWxtbQ1jzN260w8ePMi+ffvO0F6dfWyf65Ndh3379nHo0KEdzzdNw/r6enetvkVe8pKX8IEPfICPfvSjnH/++YvH9+3bR1VVbG5u7tj+rtfjRNdr+7mOUyeOYx7+8Idz2WWXcd1113HJJZfw3//7f++uw2nmM5/5DIcOHeIJT3gC1lqstXz84x/nt37rt7DWsnfv3u56nCGWl5f53u/9Xr761a+e9s/FWRMQxXHMZZddxvXXX794zHvP9ddfz/79+8/gnp1dPPShD2Xfvn07rsN4POaTn/zk4jrs37+fzc1NPvOZzyy2+chHPoL3nssvv/y07/N3MiEEXvKSl/C+972Pj3zkIzz0oQ/d8fxll11GFEU7rsfNN9/MbbfdtuN6fP7zn98RpH74wx9mNBrx6Ec/+vQcyHcp3nvKsuyuw2nmiiuu4POf/zw33XTT4ueJT3wi11xzzeLf3fU4M0ynU772ta9xzjnnnP7PxX1uCf8O5l3veldIkiS87W1vC1/60pfCv/23/zYsLy/v6E7v+PaZTCbhxhtvDDfeeGMAwm/+5m+GG2+8MXz9618PIcjY/fLycvjjP/7j8LnPfS48+9nPPuHY/eMf//jwyU9+MvzN3/xNuPjii7ux+2+Bn/7pnw5LS0vhYx/72I6x1vl8vtjmRS96UbjwwgvDRz7ykfDpT3867N+/P+zfv3/x/PZY69Oe9rRw0003hT/7sz8Lu3fv7saL7yOveMUrwsc//vFwyy23hM997nPhFa94RVBKhb/4i78IIXTX4Uxz/JRZCN31OF383M/9XPjYxz4WbrnllvC3f/u34corrwxra2vh0KFDIYTTex3OqoAohBB++7d/O1x44YUhjuPwpCc9KXziE58407v0XcdHP/rRANzt59prrw0hyOj9q171qrB3796QJEm44oorws0337zjNY4ePRqe97znhcFgEEajUXj+858fJpPJGTia72xOdB2A8Na3vnWxTZ7n4d/9u38XVlZWQq/XC//iX/yLcOedd+54nVtvvTU84xnPCFmWhbW1tfBzP/dzoa7r03w039n863/9r8NFF10U4jgOu3fvDldcccUiGAqhuw5nmrsGRN31OD1cffXV4ZxzzglxHIfzzjsvXH311eGrX/3q4vnTeR1UCCF8y7mtjo6Ojo6Ojo7vAs6aHqKOjo6Ojo6OjnuiC4g6Ojo6Ojo6znq6gKijo6Ojo6PjrKcLiDo6Ojo6OjrOerqAqKOjo6Ojo+OspwuIOjo6Ojo6Os56uoCoo6Ojo6Oj46ynC4g6OjoeVNx6660opbjpppvO9K6cEKUU73//+8/0bnR0dNzPdG73HR0d39X81E/9FJubm/dbEHPnnXeysrJyv7xWR0fHg4cuIOro6HhAqOuaKIrO9G7c73RO5h0d3510JbOOjo5TxnvPf/2v/5WHP/zhJEnChRdeyH/+z/95UeZ697vfzVOe8hTSNOUd73gHAL//+7/Pox71KNI05ZGPfCT/43/8jx2v+alPfYrHP/7xpGnKE5/4RG688cYdz29sbHDNNdewe/dusizj4osv5q1vfevi+dtvv53nPve5LC8vs7q6yrOf/WxuvfVWAF772tfyv//3/+aP//iPUUqhlOJjH/vYSY+xqipe8pKXcM4555CmKRdddBHXXXfd4vnjS2avfe1rF697/M/b3va2xfm67rrreOhDH0qWZVxyySX80R/90bdw5js6Oh5ougxRR0fHKfPKV76St7zlLfy3//bf+MEf/EHuvPNOvvKVryyef8UrXsFv/MZvLAKcd7zjHbz61a/md37nd3j84x/PjTfeyAtf+EL6/T7XXnst0+mUZz3rWTz1qU/lD/7gD7jlllt46UtfuuM9X/WqV/GlL32JD33oQ6ytrfHVr36V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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# finngen (PICs):\n", + "finngen_index_path=f\"{release_path}/{release_ver}/study_index/finngen\"\n", + "finngen_index=session.spark.read.parquet(finngen_index_path, recursiveFileLookup=True)\n", + "finngen_pics_path=f\"{release_path}/{release_ver}/credible_set/finngen_pics\"\n", + "# Number of CSs.\n", + "finngen_pics=session.spark.read.parquet(finngen_pics_path, recursiveFileLookup=True)\n", + "#gwascat_sumstats.printSchema()\n", + "print(\"Number of unique finngen pics CSs: \", finngen_pics.select(\"studyLocusId\").distinct().count(), \" in \", finngen_pics.select(\"studyId\").distinct().count(), \" studies.\")\n", + "# keep only credible sets snps\n", + "\n", + "finngen_pics_fm=finngen_pics.select(\"studyId\", \"studyLocusId\", \"locus.posteriorProbability\").withColumn(\"top_PP\", f.col(\"posteriorProbability\").getItem(0)).withColumn(\"credset_size\", f.size(f.col(\"posteriorProbability\")))\n", + "finngen_pics_fm.select(\"credset_size\", \"top_PP\").toPandas().plot.scatter(x=\"credset_size\", y=\"top_PP\", alpha=0.05, xlim=[0, 500], label=\"finngen PICS CS\", title=\"finngen_pics CS\")\n", + "print(\"Number of finngen_pics CS with top SNP PP > 0.9: \", finngen_pics_fm.filter(f.col(\"top_PP\") > 0.9).distinct().count())\n", + "sample_size_quartiles = finngen_index.stat.approxQuantile(\"nSamples\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of finngen_pics sample sizes: L.quart: \", sample_size_quartiles[0], \"Median: \", sample_size_quartiles[1], \"U.quart: \", sample_size_quartiles[2])\n", + "\n", + "sample_size_quartiles = finngen_pics_fm.stat.approxQuantile(\"credset_size\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of finngen_pics credset sizes: Mean: \", finngen_pics_fm.select(f.mean(finngen_pics_fm[\"credset_size\"])).collect()[0][0], \"L.quart: \", sample_size_quartiles[0], \"Median: \", sample_size_quartiles[1], \"U.quart: \", sample_size_quartiles[2])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "There are 9966 common loci between finngen susie and finngen pics\n" + ] + } + ], + "source": [ + "print(\"There are \", finngen_susie.join(finngen_pics, on=[\"studyId\", \"studyLocusId\"], how=\"inner\").count(), \" common loci between finngen susie and finngen pics\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "correlation coef: 0.6244595901320829\n" + ] + }, + { + "data": { + "image/png": "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9Et505vexAte8AK+8iu/km/6pm86tn0uX77MX/trf41nPetZPPe5z+Xf/Jt/w/d93/fxuZ/7uXzVV33VwndP0i8/9VM/xXd+53fyJV/yJbziFa/g7rvv5uu//uvZ2trizjvvnH0vxsjXfu3X8iu/8it827d9G49//OP5/d//fV7zmtfwp3/6p/zCL/zCwr1PM3YPw9X02WG4//77edrTnsatt97K3/t7f4/NzU3uvvtu3vGOdxz5u9POhXm8613vwnvPC17wghM946Me9Sh+7dd+jT/4gz/gcz7nc07zeis8lHCzrasVVjgtuhP12972toXPD/PcZFm24Hn4vd/7vQSkn/zJnzzw25e85CULv3/mM5+Zzp8/P/v7b//2bycgffd3f/fC9170ohcdOK1+8zd/c3rYwx6WLly4sPDd5z//+WljYyNNJpOF93n84x+fqqqafe///X//3wSk3//93z9Js6SU9k7aT3ziE1Nd17PPf+RHfiQB6d/+2387+2y/V+Ff/It/kYD0Yz/2YweuG2NMKaX08pe/PK2vryfv/YmfKaWU3vOe9yQg/eIv/uLC53/9r//19NjHPnb296/7uq9LT3jCE0517Q60no55HOa5AdIb3/jG2WdVVaU77rgjPfvZzz7w2+P6paqqdP78+fSkJz0pNU0z+94b3vCGBc9iSim96U1vSlrr9N/+239beM5/+k//aQLSr/7qry68z0nG7nE4SZ+d1HPzzne+MwHpAx/4wJH3vNq5sAyveMUrEpD+x//4H0fes8N//I//MRljkjEmfeEXfmH63u/93vSe97xnYT6s8NDHimG3wkMeT33qU3nc4x43+/tf+At/gfX1df7X//pfB7777d/+7Qt//5Iv+RIuXrzIzs4OAO9+97sBeOlLX7rwve/6ru9a+HtKibe//e084xnPIKXEhQsXZn+e/vSns729ze/8zu8s/ObFL37xglfjS77kSwCWPudx+LZv+zacc7O//x//x/+BtZZf+qVfOvQ3b3/727nlllsOvAsw8/Zsbm4yHo9573vfe6rnecpTnsItt9zCW97yltlnly9f5r3vfS/Pe97zZp9tbm7ysY99jA984AOnuv5pMRwO+Vt/62/N/p5lGZ//+Z+/tK2P65ff+q3f4uLFi3zrt37rAufrG7/xG9na2lq41tve9jYe//jH81mf9VkLY+IpT3kKAO973/sWvn+asXsYrrbPDrsWwL//9/+epmlO9JurmQvz6Obe2traie73lV/5lfzar/0aX/u1X8vv/d7v8SM/8iM8/elP5xGPeAT/7t/9uxNdY4VPfqyMmxUe8njkIx954LOtrS0uX7587He7zan77kc+8hG01jzmMY9Z+N6nfdqnLfz9gQce4MqVK/zMz/wMt95668KfF7/4xcBBcuNx9z4NPv3TP33h78PhkIc97GHcfffdh/7mz/7sz/jMz/zMI0nZL33pS/mMz/gMvuqrvoo777yTl7zkJTOD7yhYa3n2s5/Nv/23/5aqqgB4xzveQdM0C8bN933f9zEcDvn8z/98Pv3TP53v+I7v4Fd/9VePvf5pceeddx4Iz13LmICDY8Bay6Mf/eiFzz74wQ/yh3/4hwfGxGd8xmcAx4+Jo57zMFxtny3Dl33Zl/HsZz+bv//3/z633HILX/d1X8fP/uzPzvp0Ga5mLsxjfX0dgN3d3RM/55Oe9CTe8Y53cPnyZX7zN3+TV77ylezu7vKc5zyH//k//+eJr7PCJy9WnJsVHvIwxiz9PC1RQTjNd49CjBGAv/W3/hYvfOELl37nL/yFv3Bd7n09cdttt/G7v/u7vOc97+Fd73oX73rXu/jZn/1Zvumbvomf+7mfO/K3z3/+8/npn/5p3vWud/H1X//1vPWtb+WzPuuz+LzP+7zZdx7/+MfzJ3/yJ/z7f//vefe7383b3/52Xve61/GDP/iD/P2///fP7D1uxpgAGRef+7mfy4/92I8t/fe77rrrzO99kj47ioc1D6UU/+bf/Bt+/dd/nV/8xV/kPe95Dy95yUv40R/9UX7913+d4XB44BpXMxfm8Vmf9VmAaNf8xb/4F49933lkWcaTnvQknvSkJ/EZn/EZvPjFL+Ztb3sbr3rVq051nRU++bAyblZY4RR41KMeRYyRD3/4wwvekf3aGbfeeitra2uEEHjqU596ox+TD37wg3z5l3/57O+j0Yh7772Xv/7X//qhv3nc4x7Hb/zGb9A0zUJIaz+yLOMZz3gGz3jGM4gx8tKXvpSf/umf5gd+4AcOeC/m8aVf+qU87GEP4y1veQtf/MVfzH/5L/+F//P//D8PfG8wGPC85z2P5z3vedR1zbOe9Sx+6Id+iFe+8pUPyrTuTkDyQx/60EKbe++5++67Fzbuxz3ucfze7/0eX/EVX3FD1bSP67POG3XlypWF9OnOK7UfX/AFX8AXfMEX8EM/9EP8y3/5L/nGb/xG/vW//tcLulMdrnUufNVXfRXGGH7+53/+xKTiZfjLf/kvA3Dvvfde9TVW+OTBKiy1wgqnwNOf/nQAXve61y18vl/51BjDs5/9bN7+9rfzB3/wBweu88ADD1y/hwR+5md+ZoET8VM/9VN47w9kAs3j2c9+NhcuXOC1r33tgX/rPAUXL15c+FxrPdu8jwpNdN99znOewy/+4i/ypje9Ce/9Qkhq2fWzLOOzP/uzSSmdmONxo/GX//Jf5vz587z+9a/Hez/7/M1vfvOB8NFzn/tcPv7xj/P617/+wHWm0ynj8fjMn+8kfdbxen75l3959r3xeHzAG3f58uUDXqPOm3JY/1/rXLjrrrv41m/9Vv7jf/yPSxWGY4z86I/+KB/72McA4S0t82x1fLPP/MzPPPJ+Kzw0sPLcrLDCKfDEJz6RZz/72fz4j/84Fy9enKWC/+mf/imw6N7/4R/+Yd73vvfxV/7KX+Fbv/Vb+ezP/mwuXbrE7/zO7/Cf/tN/4tKlS9ftOeu65iu+4it47nOfy5/8yZ/wute9ji/+4i/ma7/2aw/9zTd90zfxxje+kb/9t/82v/mbv8mXfMmXMB6P+U//6T/x0pe+lK/7uq/jW77lW7h06RJPecpTuPPOO/nIRz7CT/7kT/IX/+Jf5PGPf/yxz/W85z2Pn/zJn+RVr3oVn/u5n3vgN0972tO44447+Kt/9a9y++2380d/9Ee89rWv5au/+qtPTCi90ciyjFe/+tV813d9F095ylN47nOfy913380b3vAGHve4xy2MiRe84AW89a1v5du//dt53/vex1/9q3+VEAJ//Md/zFvf+lbe8573zDwMZ4WT9NnTnvY0HvnIR/LN3/zNfM/3fA/GGP7Fv/gX3HrrrXz0ox+dXevnfu7neN3rXsczn/lMHve4x7G7u8vrX/961tfXj/QKXutc+NEf/VH+7M/+jJe97GW84x3v4Gu+5mvY2triox/9KG9729v44z/+45mcwHd913cxmUx45jOfyWd91mdR1zX//b//d97ylrfMyjWs8NDHyrhZYYVT4o1vfCN33HEH/+pf/Sve+c538tSnPpW3vOUtfOZnfuZC2OT222/nN3/zN/kH/+Af8I53vIPXve51nD9/nic84QkLujnXA6997Wt585vfzA/+4A/SNA1/42/8DX7iJ37iyFCIMYZf+qVfmoUa3v72t3P+/Hm++Iu/mM/93M8FhDfxMz/zM7zuda/jypUr3HHHHTzvec/j1a9+9YnKG3zRF30Rd911F/fcc88Brw2IjtGb3/xmfuzHfozRaMSdd97Jy172Mr7/+7//6hvjBuA7v/M7SSnxoz/6o/zdv/t3+bzP+zz+3b/7d7zsZS9bGBNaa37hF36B17zmNbzxjW/kne98J/1+n8c+9rG8/OUvnxGLzxIn6TPnHO985zt56Utfyg/8wA9wxx138N3f/d1sbW0tGANf9mVfxm/+5m/yr//1v+a+++5jY2ODz//8z+fNb37zAZL9PK51LvT7fd71rnfxhje8gZ/7uZ/jH/7Df8hkMuHhD384T3nKU3jzm9/MIx7xCAD+n//n/+Ftb3sbv/RLv8TP/MzPUNc1j3zkI3npS1/K93//9x9QLV7hoYlVbakVVjgD/O7v/i5/6S/9JX7+53+eb/zGb7xpz/GGN7yBF7/4xXzgAx84cw/ACqdDjJFbb72VZz3rWUvDUCussML1w4pzs8IKp8R0Oj3w2Y//+I+jteZLv/RLb8ITrXCzUZblAZ7HG9/4Ri5dusSTn/zkm/NQK6zwKYxVWGqFFU6JH/mRH+G3f/u3+fIv/3KstbP02m/7tm87kMp7VphOp2xvbx/5nXPnzl2Xe69wPH7913+dV7ziFXzDN3wD58+f53d+53f45//8n/M5n/M5fMM3fMN1uWcI4Vgy7nA4XJqevcIKD3WsjJsVVjglvuiLvoj3vve9/MN/+A8ZjUY88pGP5NWvfvXStOazwlve8pZjiZD71W1XuHF49KMfzV133cVP/MRPcOnSJc6dO8c3fdM38cM//MPXrfr6PffccyTPBaRi9qtf/errcv8VVngwY8W5WWGFTwLce++9/OEf/uGR33niE594QO5/hYcuyrLkV37lV478zmMf+1ge+9jH3qAnWmGFBw9Wxs0KK6ywwgorrPCQwopQvMIKK6ywwgorPKTwKce5iTHy53/+56ytrd1Q+fMVVlhhhRVWWOHqkVJid3eXhz/84cfqan3KGTd//ud/ft0yWlZYYYUVVlhhheuLe+65hzvvvPPI73zKGTedhPs999zD+vr6TX6aFVZYYYUVVljhJNjZ2eGuu+46USmWTznjpgtFra+vr4ybFVZYYYUVVvgkw0koJStC8QorrLDCCius8JDCyrhZYYUVVlhhhRUeUlgZNyussMIKK6ywwkMKK+NmhRVWWGGFFVZ4SGFl3KywwgorrLDCCg8prIybFVZYYYUVVljhIYWVcbPCCiussMIKKzyksDJuVlhhhRVWWGGFhxRWxs0KK6ywwgorrPCQwsq4WWGFFVZYYYUVHlK4qeUXfvmXf5n/+//+v/nt3/5t7r33Xt75znfy9V//9Uf+5v3vfz9/+2//bf7wD/+Qu+66i+///u/nRS960Q153pMgxkRMCRKUlWfiG2KSz0Z1zfYkMG5KRlVg2niGmcPoxE4ViCHSLwxEzbiuMdpw+1pB5QOjKnLL0GG05tK4RqmIM5Zhbuk5Q4iK7XKKD5pzfcda4dgtA87CVpHjgWnVUIdATOBTxCnLes+gMezWDZlROKPZKWu2pw21D1ijKJzBak0dIjEm+pnl1mEPqxQXJlN8UAxyg1YaZ2A9y6ljoA4RqxRRgU6AUtQh4GOi9oGyiSgT6ZscYyIxanzyOG1YyxwxwaWyxPtE7jTOGLQCrRSZ1mitKH2kDp7MWAqrKX1gUsl7D5xDayX9AVitybTBp0gdIj5KW/StpZ85JnXDlbIBFVnPM6zWTBpP6QOFtaznrm2HQB0CupUAnzSBmCJWK3armsZr1nuavnPUPoKW99+tG3xIDHLLMHNopfApUtaBJkZijKA0a7nFKs1u3WC0wmrFpI7UoSG3jq1extBl1DFwpSyZNIHNPGM9z7lUTtkpPUYnjDKgINMaFNQhkBIoBYW1FNZQh8ik8QAUVtq39BFSwhpNYQ2FsWitIEEdAzElefYQKYNHK03f2XaMe2KK9K1lmGcU7eeTWsZe7QNTH8itYbPI0bMxEdtnsrP29bHrp0jpA05rtnrym9L72XNYpYnIvXfKGh8CvcyxlltikufMrKKwdvZdYDYuCmvbe+31aaYN1mh8iEyahknwFFr6rY6B3aqhiYlhtteXtQ+MfANRsV44CmOZ+EbmgVaUXt5pPZf+Q8tY1kpRNvI+mTaUwXNhUqKA870Ca/Ts3+oYKL2fPSew9/8J6W9jyIxp53pCoyiD9HHfOTIn7wYwKRsmTYNW0j6ZNbN37n7rU8THRGY0fevwMTLyNRbNMM/InCEGWd/qEOg7N2vTmBJWy/OPqpoyeiyGwhkKa+XZFfL7pgZk/ejGa4fuGt27F9bOnq32gToFdFKz33VjMjNm4d+t0bPxU/pIYXU7zxtZC5w806huqHzEGcV6ni28j48yJteznH7PMSmb2XisQ8BqjUaxUzf4GCiMpXBG2r7tl4X3aOdA976FledGAxEmjcydocuIJC5MpoSY6FnpR6tlnO7WDUrJHjRpIsPckhnFTunRJKzVND6SOUPPGC5Naz6xO6EwBmMTZZWY+JqNvKBfaIiaj+3s8MDlmipM6eU9BpmjUQ1NqSibKfd+4hJX6pqtnqFwQ65U2/yvj8BvXd7bE+/+4a8+k731tLipxs14PObzPu/zeMlLXsKznvWsY7//4Q9/mK/+6q/m27/923nzm9/Mf/7P/5lv+ZZv4WEPexhPf/rTb8ATH46UEmUTmDaB7XHJ3Rd2uefCmI9cHPOJSzt89NKYSyO4UEF1nZ9FIx07AHIHRuY8UcOkhLr9jgacgqwAl6D2MPLQcPgzGqAH5IDToCxE5M8gg62eInNiaCSlqKNCJ1BGMZ1MmHrkTwV1Az7Js/ZzQIG1kLfz2isoG6hreX6roV/AMNMYrUkaah9RSkPyBA8eiEEaoKcU60WGzSzOWjIrbRFDZLdsKIMic4Y1Cz5EqpgYVYmgEtrXGDTRKLTJyLTiXN+wlhmUdUwbz2jaMGk8TYjsTip2SohRjAdroJ/BRuEovWdcJkovn7tMsZEb1nPDxMNk2jCqIzGBVZBZMUhspplWnrIBH0A76FvNwzZ73D5wjJvIxTJSVgGTGpRKeBQ708CkSZiuj4AUpcOjgkwrBoXBKghA7TUxBWII7QapcM7hrOaWvuO29YL1fkZKiknlKZvA9rSi8ZEajUkJUqBpIg1idK73cx6zVXDnVk6TNBd2Sj70wC4XJ14M5NywnmvOFw6dZVirybUitwqlNffvTLm4W/LAzpSdyqNQZE6znjnWehajNVWE4APRe3arhstlYDSVcUyAXgbDPhRZhtWJdafZHPZw1uBJxAi5VaQEMQVqD0prMqMYFhaVEtvTmouThjooSAFHpEmJspaxWzjFrUNHYRSTRuZPrhW5SWL0GNitElemFY2HQWHY6DkeudXjcbet0SsyRlOPT5FJ3XDf5Qn3XJowqhMBGFrNIzYct6332K09kzpRxUBVBbwCGxNJaywJlzmGmaGfGXKnya1hVDVcmQTZDHPD+WHBp9064Na1jAu7NR+7MuUTo5oYIuuZZpgppj5xpYxcGpWMy5qqAWdgWFiMSoQAXmlyq7ltveDWgWHcRO7f9dQ+khs4188Y9ixKGcbTigdGJfeNGyZTj9Jwru942HrBufUcQuK+kWdSe4xWOJPYyB0oTRlBp0BIkbptE6001kT6RrFbRXZKMWorH6l9ag8/ivVCU2QZSifKoEnRo1NqjTc5cFaNJ/iAMgZjDME31MEzDZCiIbOw1XfcMszZ7Dl26kAdFMNMc8t6Ts8qQPHRixMujBqa2NBUgSt1Q117AorcWB62nvOIrT4bPYtPiqkHRSJzChMToyZQBoWzio3McttGztBpHphI/0XvuTydcnm3ZuwT4yqCSqxrRdKJSeMZT2u2pxC0rJ8pgo+QKVnTg4fMAQnGU5gmKGWqnAECsL30Xx799/4DcOONHJVSe3y5yVBKHeu5+b7v+z7+w3/4D/zBH/zB7LPnP//5XLlyhXe/+90nus/Ozg4bGxtsb2+faeHMae0ZV2J9f+jey/zRvSM+fmXKldGYP7l3h3u3IzvxzG53YmTIwE6IYbJsIHeGjr/K67cHDAxQaLBO/n+tDxFNWcqLVxGqSp6nRIwav+9afS0Pu5vkGqa9ftXeY6jF+PHIj10BuYJRKdfPWgMpWQi1LMqbfejlBU3jSSoRo3gwjHM4FLtlTRnAJBjkikDi8gi8h/UBrGeKYDTBJ3KjWRtkkCKXxxWTJhE8jKbyTAFo1w8iUChQGuogRkYmazbRy3NaC5UHX4M28qMmgrNynahhLAdatvryHZXkTwLuON9H+8jHrpSMytZYzeV5mnZmq7n+yZQ0vI6yOedO/lS1GJIpgctg6EAbRc9pNoocZxTDIiMQKRvPxd2akAJ9lzNpSkbTRFKwlhl6fYtDk2eGvtMUmaWsPB+/VOJVJEU5RdZNIDOGx9wyYG1QsDOpqb30T0iJS5OSC9sNHigshCgLtrUwdIaisOyOK3YrGJetYdu+bz03ptZzMXSUhr7WYkjlGbmzTKuKiCaGSC83WGOoG4+zmt2pZ7usGFiHNorRuGY3SNv3HRgjRmeMoDUMckOvcKgQ2J42oA0bTjwOu3VEadgqLNrl9K3m024bMOxZQjL0HVzYKfm9j11h2iTO9QxTH9gtPb1Ms1FYlM2oqgZnFU1IVHUADQZNiJH1fsZmPyPGiHWGvtFMfKRsEplOnBvkOOdYK8QbO6kCTQRrFFUduG9nSl01FIXFKsX9uzUPjCqsgY0so4yBy6OaXu542HpGkVvKKtCEgDOGjb54sC5Na2KAO7dy1oqCj1wc8YkrE7QRw9cHCClwvl+wXmiqOmKsZVAYgg9cnHpiCNyx2SPLMq7sjpg2CkisZYY6Rq5MPWXdEJKmZxRViGyPSpqUGBSOvtNM6oRSsF4YBnlOHRsubDfEFMlzRwxePNQhMsgUmbJcKhuqRuZpT4uhEBsoCssw1/RcxtYwZyM3jKrAThXoGeRQUQV2R2N2p4EqybjoZ+JZK4xibVCQW81mP+OWQUHZBP78yoQqBqyxDHOD02IMDQtL7QNozVrh2B6P+aN7R+yWgUGmCAEmvqGsZcxrBdUU6nbOd/8N7ZzQ7bzQ7dp7M3AWxs1p9u9PKs7Nr/3ar/HUpz514bOnP/3p/Nqv/dqhv6mqip2dnYU/Z40YE6WXxWtaex4YNyQtm0/lI0G1J+ebAA901mvr0AAWOz5ydYbN/DX7rUHTxPYeShZ+5ywY2UjbvRsQz49GPuugAG1lU7btc2vEY5Mhmz1J7qmieI2MhtRaQKZ9MWshS2LYRAVJadmRtIKUaAIoaxlkDrScBklgLOSZRSuLs7IZagU6yyiMISqoYqRpAnVSYByZ1cR2RzWIcYGS57JAmaAJ8izOyT2cgdB6ymKUe+TtBpzU3rWmUU5bVsm1nBWvS0wwqeV7A2sJrQFFa7CgxLB0Rtq7/QgFmEy8Vx7ZkGP77lrL57b1mknbKjyKUQjshkAdAyhN1SSM02QuQ+sEymKMPINyhrU8o5c7Sh+4NK2ZVA1Xqoas51jrF/R6OQqN1hqfEkEBKRG1IhLZrYMszkpjrBicziiMag2KCE2K+CbgE1TNntFe2NbAnXvn0Fk8QE0iKIU2BmvAJ4UhklAENH1nMM4yqSJl7TFKMyjszFNIkLFnrabIM3Kn8bF9hpTIjUEZhzYWUmCnCYxDYtDPGRQFWEcv0xituG+n5NI4MOhZxnXiwrQGren1HNpajDEMejllI2uKThGlNVMPmXMkrcUwU2CdhJTKOlA24FBslw1NiGz2HXmeYZxlY2C5Mg3cc7lq1yxN4QzGGkof2akjkzoy8RHjNL3CkWUOjKaqPUopjFVErcmdow6JC+OKMiaMNRhr6bmMiGJn6rk0qaliwliLNoZ+5ujnFpRh1HjuHzds155hLt7VJmmGuSEkzbQJ9KymjgbvI9ZoqigeUJSi9IlAoEziTTNZRpHnKG1Q1rZzO1Em8W5oLFFBaMe5j+Il1FrTBM3Ee1krZ/PeYbUFKwbqlakYGxv9nCYpRnUipch94oZho2/xyuJVezgxYLSmV2TUSbMzbZj4hI8y+Xw7x5ug0FrRyxwJQ9KKUR24MK4xRmOd5tI0oowmd5o6abKew7mcJsohTEWoW8M/czLWuwNtatdOx80zbGDPg3Oj8Ell3HziE5/g9ttvX/js9ttvZ2dnh+l0uvQ3//gf/2M2NjZmf+66664zf66YEiEmNDDxXrgkMZFiooqJuoncJNvmwH3PxgW5eL2EGCAzI6k1ZoKH0EQU7YYUxWvTbbhdOKuDAnF5z30egZj2JmlK8p3OIOlcr53/Maa966Ykf3yKNF7CED4m+Tym9gLiVUlJni8kRdN9p72GD0m8LW3MvYoJ7yEEeRMf9+7bvUeHzpsT09xG2z1XaN837rVfDHPPHdvvtxdtglzHx/aZFVQp4dvPjJHvV56Wx9C+w74/Mcm/hdh6HpB+MZrZu/jYvX8kNIHgE5MmkFKiDgmnFClAiMIzSIihFkOUcFUI1E1kUgV2ysBo0hCD8Ipi6HhpUa7XRCZNpK4C06ZhUgWqytM0YdaeKaWZod4EmHhxxUufyTuEdsDMj6/unX3b3t4nUpD3anwkBHBGkVIixUiT2tNtE4kE2eVQxBRnY7GJyN9DIoRE49ux7SNaJRkvqh2rMbWfi5Ha+IRpjxtjL5wlpxJVE5hWEZ0SNkV2qkAVExq5Xu0TWuu2nRO6a8cgg18naSmfEk0IKAWTdrw4rVDdYUNpmhCZVk3b9p4myvplWmOgbgKjKhCiEiMxJUqfqCJorWQjbQKNT5QhsDOtGZfC0ZtUYv1ZnZikyKhqCDFIODglQsvbk7mapK99IJKIIdGEiNOKRKKqPeNKrj2uPLvThksj+X/Vji+dpE2nladqxE9RNpFp5SVEnCD4JOO343E1kaaOjGtPCu04JNHEdo1oZEwRxEikHduhHRsyviNVEG5fXUWib+dsEwhB5lft5TBETPgUqRpP0ySakBhXDdPGo1Q7xIIYzDLPPaO6YVJF6sazM27YLT0pJYxS1I0nxYROScZ/O0k87Zrbro/dOtrNjbNe+x/s+KQybq4Gr3zlK9ne3p79ueeee878HlopjFZEhJxaOE3SCqUVJsqJ+KEKAzPjpeP6EGQhNxaMkwXZtNwPs+/3802TkA3azH2ukckf2s+U2vsOrcfCavmc9rtdmE2plv+iNM4qtAbbLvSq3bSEgCnfcxqMSrPNoLufNYoUQWshI+ZaYS0YI85e25705l+q+6tjzx3ctQPdcxl5F6v32k+3zxJa/o01e9eyGhIJreRUqBLkSsn3tCxqRkNuW4+Q2Zvgau45uvto3fZLEm9HSHId2nuDvLNzBm2E2JyAzCialFBGvDuZMXJtLQaX0HY02igyCxBxTjhYCUXoLEelUUqJQRADDcLnCEnI0zGmPc+Tko22M2I1kFvhDXXvZGg3pbT4zkZB1vaR6jxMSuOsxhhoQkIpOcW7th0yq7DKzK5ltabl4LYbknB1UApt90KzTQDnxG2rlMJZjTWKEMUIdVYR2h4dWE1hLE1S5M7QyzV1gjIkcqswyGk8JYU1LQFaSZsHFEkpCfUYTVQKpSE3Cq21cGzE4qEOiRgTisQ0iKGRG03ZRMZ1ZFrLtpeSwimNsUauo6IYlErN+Gqd0QgKpcRYSSjqlCgrj9KRuhGDzKEYOIvRhpD2wqOp9dSpmGRutVwupcEZTRMTCvFmNB0NzMqkqaMYxA0SXpRDgxgmKEWKCmtk7U1JQqXGSlKDao0qqxXJKBSyZqt28TDt+IrIoSmpRNRi0FmjxOhqDx5KK5zWeJ+wThFUpAkRZRShPRxoBQbpK02XBBHxPhKCGPWq7VNlFDGKIVp6MVqDEgNs2vL6qtozrcUgaoKQvG2brJBayyWmvTnC3lS4Ju/8JytuKqH4tLjjjju47777Fj677777WF9fp9frLf1NnufkeX5dn0trRWE14yrQyyy3DhwXdiogYZxsCop07HWuByRSLZjn3Oz36Ogln50EBpk0dbPHufEIf8UaaBoPYY/TY9tnqJdcKwFN3YZk5r5LlO9HhF9jAN9eMFiw7YobANO6aZOlPZWDkpWqdZ8onIHkPWOlcMgm0ig59VS1JyKn8dR5ZOqaxmh0kk3BOQMpMg5Ne6JmFi6LCfK0d2rK2k6oo/BcFMKjMUpcyFpD03JumtZgSQmSluuklq8DQgbvjLHcyr3GvsGkPcKwbTt8PIUq7W3w3RhoKtngdZSQXWeQ+DZEFrt+qyG6iFNCVLVaMulUSlgLfhqIRKzLhczdeoBSExjXNZkSUmumDNZZnPFc3KnwSVz5WsnGkmmNDxJGVMETk2LgDD5qQqqYTKGxicLJhuGT9KlVkJJGETAWUss96DwvDXubKchYQMu41CRiCHhtsSoR0CgihsikCYTGkzuI0VJVFWXtUVoTm71xWtWJaBp5Hr3XvpPSk9tEJEjIR8tmN57WaA1ZYZkqTd9qbl8vGPYM46lnkCnOFRl3pxFVnci1ZAFNyoA1MNAwKiNVU2MMjIJ4trJMo6Ilpoam0WS5w+mGMgQKZ5lWnnu3J1gSVeEYlxIWW+9pSq/QwTOpEk0jrrrCyPjSSTMtG6ZlgzXQyxyZ0UzrmkwrrLKMypomRobOkiEeQ6UCu3VDiopbrWZrmIn3xnuUVuw2gRADoUn0hwVrPcOkqrlcepxJGBTbpccQsSaj9JFMJ1JSrcdRDC6Fpu8gRCVJBSnhQ80kwSC36NY/ZgAdPE0NdYikEAitl82oSBUDPkJPJ4wRd1uK4nUpa49tDwrGZgydZFltlxXnC0PPwnapON9m5e2UHh0bdJIwpdbgQmJSVhIq7WWoEFsDVe5bN+Ly8UazM67wQTx2m72MjSxS1YlMw0amuLDjqQIMLVRlYhrEc+URTqJq/6s7r2s7D5j7783E9z7tjht6v08q4+YLv/AL+aVf+qWFz9773vfyhV/4hTfpifZQOPFJ6AbuOj8kpIQzCe894VzAMGZ7BBf8jRtofYQUR5KTK06Itw1z2VLI6V1rcaVO2smyzPiAq8uWYpAIKVK2mReTIBlQdSP3yYBBLouIlfA+d9ASj2sJnwzV0dlSm30voSLajd5Cr78/Wypfmi1112Z2IFtqIzs+W2o9dwvZUpfHbfaXkrh3bmCQa0llrjlVtlRCwiWVT6w1sthqI5vPXVs55wY5kzqw46FRkUdu2oVsKWvE2jJK2i/4lpsE5JlwpAqrMUYxqSFkkhavkXfQRjNwllvWHLesFfSdoY6aaVWTW8nS8TFhnGGrP4D1QF0HJkljtWKjX3DnRs7WwBCT4oFRTWE1lyeSYlwYxfmBY7OwTKNCW8Na1iOzGms0D+yWPLADQ1Mx9nLCz1vOwVrPUXuYhsR6rril79mdRrZrGS+qDckVFgZD6BuLMSIncH7YY5BZMUQj5OvuYLbUWkZhNVWITMqc7amnjHDHVsYjVaQKkk3klJCmN3uaTGnGTWASFIPMcvtajrNGDHUPo7qZZUut9xx3bfb4tNuG9Hv5LFsqt5oYA/dul0yaRIFmLXMMHBTWoa2hCYbaR0KCW4tElhnxrumEto7CavouwxnFIHdcnlTcu13ThEjuLLcMM7aGlluHkp54z+Wy5XYo7toquGVgGdeR7SrRLwybPTPLlrp1PSOEnGk7rhrgkVsDbusb+U0dUSjO9xzneo5HbPXp5Rkbmeb2Ncd9o5pLo4YQFefXHbdt9NgaWurG84ntQIiRIrPcuWnYyC11TIwbOJcPSCSmTeLKWOQfepnmtmGPK2XkgZ0pA6vIs2LmMbFGc5fT9AtLiELoXiNx+8BRhSRho9wyaRpSCFhnsdqyNWhomoYqJKqgKDLFrb2crbWCvtWM6oi2hl7muH3LtCFH4U9poLAD1ouGqffUjTxMZh23DRzrg4yNwhFaQ21gPamXYVMkKywhJJTR9AvFXRs51vTYLiOVD2wOMh6TBjR1oGxlB3oR8mFq08gjEyNJAdGCbcP1vrXym7SXAdsdHm80Hv/w24//0hnipho3o9GID33oQ7O/f/jDH+Z3f/d3OXfuHI985CN55Stfycc//nHe+MY3AvDt3/7tvPa1r+V7v/d7eclLXsJ/+S//hbe+9a38h/9wY4lKy6CUopdZcmtYLxx3nVvjiY9s+MSkJKSAUZpxU7M7CVwcT7g8KklR0e85rIW6ibJ554a6hu2yRinFbWsFZe0ZV5Fzw4zMKHYrT+Fk0gxz0SsZN54PXxixu9OwtZFx61pB9ICBgbH0C4c1sFs2TNrUnUJb+rm4dqdNxGUKi2ZU15S1sGmc1desc+MTjBqPisJ18En0UiaTQNSeO4ZDtInsjiM+eXrO0c8dKSUujKb4EDm3lpNbe0DnZtoEdssalUybvRIIITHoGYZZdkN1boyCB0YlZakoisRaXqCUbKoGdTKdG8TTN60j9+1W5E7Ty2B7Eigbz61rPW5d7zHMHePasz0ucVaxVeQLOjdaRXyAUdUwmgZ2StGfGeaWPNMMnWOj74gRRrWnabVnnFVMq0gTA5tFTi+XFNnSR6Z1TYq6DWcpxnWAFBjmjl5mqX3k4m6FsXDLIGeQZdQhUQXZuJxrdWMqT2YMd272iSlx94UxpETQirXc4qNwKCZNw/m1gioGCq3JjITHtNKMpw2XdytSS5cORAkBadWSohVaGwlDia+GXFvWCkNuxMrrxkWnPeJjxGqJPTmt8SRGdWAy9ZTBs1E4zvdzSu+5+8KYaRMY9BxrhczB0ASuVDXOWfq5Y5BZYjtOnBaC7LiqyYyj7ySWlVvpi6bVTpmGSF15dqqaGBM1iUu7Nd4nNnpO0vlb4ugtvZzcGULLEVMonAWSHDACke1xzagUA9xozebAyVzXirVexhMeGdme1JJKbgybvRyfxBXq2liy6HSJsQ2K+7dLLk4r6jphdSLPHdPKMyobCqfpOccjtnrcOiwknDinc3NhWnJx3LBV5PRzQ0owqQM+BJqU2MoNQ5dTxsC0Fm6JMUbeM0Tu3Z2yM6np5ZZeqwc1qSqKzHB+0ENbTe09KbRhS6sYTz0XxxUpQa+w4t1U4q2qEzinsEn4SlZrrE5My8B9u1MKZxkWGeuZEU+jM0JOVoZ1pxlPJTNu2kS0ilirsEqRkiYSGTdesu10om4SvZ4lRYX3gboJXCxrdkov6ftWs9FzsvZq0RTKMsW09mxPPSomHntrn8vThp7TGKW5OKrZrTybPcuo9mROQ0xslx5rZC58/HJFVVZcHHuZh0YxqmquTDxN06CsYatv8F6xO5lSxcCWVQRnue9SKYfFlueXF3JQuv8yPJBO5+1/xFb/WrfZU+GmpoK///3v58u//MsPfP7CF76QN7zhDbzoRS/i7rvv5v3vf//Cb17xilfwP//n/+TOO+/kB37gB04l4ne9UsEPQ5ciblrOgo+J0VTElgaFuPvrloS5llsGhVDdOzFArST2vP/vy7A9rrh3u6SfGbJ20fMx0XOSEbDZcxitKJtA6WNLIpSQWuFMe4I9+h5n2Q4hJEmfzSw+RK5MG3KrZzFwECJp5SObPTcTHjvJdXtOkztzXd7lOJykrw5D9z5aC2F5XAch8sbIbWsFRWZn7XNU23TXUUoMnCZElFL0nWGQO0ZVw6QJbPUyMqvxURb7XqbpZ5Y6xNkYUe31mhBx1simh2gD7UxrjNVs9TKsVoxrz6QKrBcylsdlw07pGRaWtcId6PcYE/ftTBlNPU2KGKVQSlH5QM8ZtoYi2rdRiCDjfPv4ENmtPLUPrOeOc8OcwhmUUjPdqWXjXCmZTyFGah+pZ4Tag9/xLaPbtmnM3WfTxjNtIsaIoR1h9l65NUv7f/7ZGx/YrVpRv8Kx1c8onKFswmw8kxL375aMS896z9HL5SyqEI9l3xnOte3T3U+yemQehZi4NK6oWgHETnRwUnuqIEbpVj+TNakSEbrNXkbPSf9W4WC7ADywPeWBccWVsWRcGaDI7OyehbM85tbhbC2bRwiR+3ZLKi99jZLwj1KQWUPPGuooBGvf6i5pq+lZCTPtTmp8hM2Bo5cJO6+sw8J62o2x3Cp2pg1NSK1Io8R8U5IxfW6Yi/BmHYgxkTsjpPIgXC9nFP3czojKVltyZ2b32JnUjCtPkRkyo2d8nRgCMSk2Bo4UE+NaDJkmRoxW9J1tx2WcHTr6mWG9yFBK8cDuhN3S03eO3Ml6uDNt8D5y51affs+xXjhiSjxwZcrUe9b7Qr2Y1AHvPdulzIuEIoVIUomyDozKwKVJw6XRlL7RaGe4pe+oU+LCTs3Htkf0nYRMiXDvTtkyhiJozS2DjKpOXJqW/PnlCR+8d8ooHO7p73BXAT/3HV/MY2/dONE6eBhOs3/fVM/Nk5/8ZI6yrd7whjcs/c3/+B//4zo+1dmiWxBKH6l8nBFUc2fQdBuPZAlMm8BtQD8XRVg9R7fd//dlGBaO9Sa0YlYRrRX9zGC0aombas7DdHADVopj73FW7WC0eHtm4byWlO1jak+IAt8urvOKrB26FHzTKiuDhK6mtYi6rWUWY/XChnUjcJK+WoYD72MNubMUZcNO1UDbjx0Oa5v567Q9yzB3hJgks6jN7lOJ2djo2twnDoyRGIU4KgTGvXspJZt0HYJ40pQQsa0Wb5bVmswZbmkZ30v7XSs2eu2zlZFJ7dFakVtDLzOkCEWuZ2N0fhxpLZohmVb0M9sSvPeMy9weNDRSSkxrUaedlA1lI/o2w9wKN6aSjDCl1IJhlLdE1p3SM2nT1rSSkzxWjJ/uvZQ62P9dn2gN47LhyqSZyRdsT2rZ6Pe9XwiiEt3LzMx7CkImBSG0z+ZvZKaM3s0jo0SRt2oCdZtKLYq2ikmVSLnMO2sklNZzmp6zTJv2wGD3DLeuXcqm9QIia1btI7nWkkxgNakVaOzeYz+M0Wz1M3ZLD0oys8ZtumJmApUx9HJLPzOMa3mHzohHweYgkwOQFoNcKRHZ01pJKGlujFmluBBrlJK1sWzbYVx7tIJBZhn2HL3Ks1NK9thu7am8ZMYNnJkZkruVZ71HqxhuMKojI4NKquXyycExRNgciHxAILFWaLJBRoiR+3drApLRJhmWScLDWs/6LTOanrVoA5PG40MktRmQl6c1zipow23KadasQ7XMOu8bHtipwSi2+o5R7dmtAkkpzq0V9LLA2tCSSPSdop+LkaiVaCUR+2wMHT7JYfGWmNiZNIyqyCAXfaUiN9xqM8Zlw1Zviq3gYnN4NlYObA0lw/BG4pOKc/PJiGUbxXZ7+rs0bRjVntzIBhzaE5RoHpy+a+YXDqXZd6LUC6fIq92ArxZHGVXd83SkbDklLXp3lnlAuk06t3tei24Bi7ElCEJ7Ta6qTW8k9r9PSlKmomn/e3m3pulJaKkJMoaGrSF82HXS3GZntZAvu7IGmdULhpHVYoB0svvdGIkqieHQhAXjswmRcRPpOVnsXTuGtdbthiLaK8d5HnuZ5bwSYblxJSTdzGh6mZQWmd8oU5KMGteWlJi/3nHeGmDmGVGK2eY0bQJGqdbTENmeNhgt2VR569W6OKpFMh9N5jTKQBki3ifWC80gd0d66bo+8T5wZSpikrZ9iC50V3rTGnV786SXGS6Na8rWoElICDt3mn5m5PlbY6175xSjSAi0hv1OSpRVZLOv8DGSEgx70rZN+5thLm18pay5b3vaemDkWQonB6QL44pxFcitZivLiSExCJKF5VqPoBym9JHpE11/Xp7UjGrJ3ipc67HxEWcisc3CGxRCQBs402YtydiaVJ4YhcXeaCiUYj0X7043Jnxb9iK0nrnuPbQWQ2TmCWu77cKo5IHdis2eY2uQt56vhsJIyxvEMwIyBnX7Lj2nRW+pNaxcZtjoZZg2HNc9TwiRUem5NK3YmUj5hRAil0KiyAIxRnyQg0ThJBvM+yhjLtf0czE+Q4TdaUO/EG5T4yPjquHCuOb+UUUMkduLgtvWCnqVp6zFOKuayObAEaPFr0cuVY3MJSPp9EprHn6uR0IzahpJ4LAZxnjyTOOMZJ31cksWNM5O2VjLyfOKuA27/qCyvUG4n0UmpVVuJB7cq/1DAPOLujWaqOTEM6o93kd6VhbeUR3pOTlZlT6S27SwWJ401DF/8usWrsERJ6kbjaOMquO8Oweutc/bE9vFESB3sshKW0mIxbXpSjcjVHUS7H+fqt2IE4n1ubDPtGzQVtzjVYjo2i9s4IvX0TOj0Qdp0wQQhWsw3w5Heckyo0QFtQ4k14aqvHgwelY8NCBeySa05Gi9F77qxv8y7OerxZhmG9lJDJcO8yGdziiZN2znPVok4fUE2rIpXWjEaCZNYL2nZ95Ao6COkUkd2OqLwdY9dx0krDU4Qd8qBTvTmisT4dtJ2noizxTrwbTttmhYimcNrkwbSdlWwsvb6LkDYazunUNkLm1dsdXPqJ14CuoQGRSWjZ4jt3vGQOXlOqNa7pM7Lfo6jZRuSDFycVyTIpi+QyUonMUZ8WBZa9jsZwtj8DColoNklWKrl0FPeF+pbIgx8ondhtxa1gtLL0hYxrZEcxBjTkKCenYIGlcB8sUDjFaKQW4pm/bd57zZRRuyLpvApJZ6S2u5hOi00a2eUcLpNkmgTbk3Snh+SoFvdWf6eUsl6PTOtJqtPd1aJ/pQki4+qWIr3SBentRmc+5MPSjF+b6lcI6QZK/ItKaXC7ernzvRBUqJgTUobdie1EybSEiJtdwyzAxKa3brKNm7azm29Sw1QcbcoKcpoyapxLRKJBIDp+llmkkFhTFUPpAUZFbCcU6L2vgtw4Jp3bCWO66YimQdm4OGNIJqn/um0yfb6GUU9sbuQSvj5jrhsMU4MzLcUxDBrEzLRKKNA1stInLdIneS02iHo9zx+3E1nJ7rjeO8O/ux39tDSlQ+YJDPu98aJScdHyWb46g2vJmYf58YpU5ZIrXtIqdoxhWjyrPeklh9TOyW4rruvAf72yWzQuQdNRGDEDy3Bk5SYsPhXrKFsdedgpVkbyiEv2PWMqw2C9ehTY+eNh6faPk+0LeGfm6Xtnlq+25hnKc066PTGC6dUSIepjg7LMx7tCalSO/7JBvYtI5oKtZy02YX7hlisRU3kTG598xGK3RgwSg5qm8zrbgybtgpG3pWOCqlT5R14vK4ZtjLDhgFqt08C2eX8n+Wv7NgLbMzYx448PvZ+8XEtJFijqPSU7ffcxZMVIQY2K4aUIlBIYTvwJ5Gy9RHNrOWsxcP97TOj6lR7bk8rcmspm8NPau53ATGZcBlmvVcSMQ7U08/N7N3OEk/d/fWWtFzhrYe7UzuIkXozR2kuvCtMcIduziquW9azjSdSIpb1jJiSFRBaquVjaFpIpmTbEjXcm5SYmHt6VA2gd3OeBlkVE3g3p1KysP0MjH2jJqFcnMnh9yUFGgh2neGm9OK7fHeejauPEbDbcNcOGghEXykbCrMIGPYpqo7LWKMV6aenSpyrpexPnCoKPHRUdUwrQKbQ7h/W4SyBj3oZ0Y4UClSOEMkorRia+C4NMkx3nKuZ5iU5Sw21elOOaBXwGavuKGRAlgZN9cNhy3G3spE2Ow5Lkxqpo1kqawVsujXbcZGN5mPW9ThZO74Dvu/qxV0paJjG8K4mo3/LI2j04TM9nuqpNKukIk7SLHHSJFbMrO8DR8s6N5nXHmRn2/DMoUzwn0BjG3DMsiGNa49u1ViM6TZqXS+XeqQyDMh9GZtfF8pZuPgMC/Zwthzpj0pG3IrRqhWip2qoe7KILTXKdp6SpNaakSJinFkJzZsDcTlPz+2YuwUW+NCKKjro7wtDXBSw2UeC6G21qNV+8hO5UXgrT1AOK2YeE9Iia1+NqvFBa1x0HLW4ly8JcSOeKqP9FR0yLTssH1rSK2A3HrPUTae0dSTHTF3xDhaPPke984oFrxl+38/f51x5Wdez/XCMmnF/Rov2TVEZt7DOoj6utaI0neUEJvWB71p+1E2gVEphGYfJJxyvxfybx0jUSVy04bllZqVsTnpO+83Mhc4TN3amMszduGqLnyrtaJu2vcK0v9ViBRGipE2IXF5Ilmk69awlkl4uGo9Q4d5mufL82itWcssRRbb8Kt4l0ZVQx0SZdNQTxo2++KZG2Qaq8Tg6YjyF3dLLo1rBj2L05px5QkhkVxiWgWulLWExGKgagJ3bfV51Lk+k9rzwG6FQaFSYrduGIfIrYOcobGUSVE1iV6u5VCVIiZJe5VNjTMW17Z7VcsBp2iL1TlruGWt5nIVCYi8hzEiO1FYsE4yQ28kHlwr+0MER50u6ign8Syz3KoUo8rLSUrJRGp8pF+YY05mi6eUsgkHeDaHbd77jaVl2Syn2fhPY1hdD+z39gycYdrsqXfWPjJqAv02iwUOP+ldTxxn/M3/ey+TRSu1p+7uubvsno4rIy71gNOqLZuw2HfHecGO+vejvAKRvdN/L8rJ2MkBk5iE4xWJrVtduD6DTMIDl6YNuTUMCjcbO5M6cGVao5ViqCxWdxlZ0kdGqRMbLkcR0rvN98q4ZlQ2rOeGOiSmdSR3SjJegGFm8EHSoa0WReVMC8elaZMCFMK5ybXUozrJGEoKiszQcwYfY1vmQtKPnVNk+97vOFwNCR+WjMX2ObSStPiUEsNCaiFNGwmZbPUz1nqOaR3JkIyiURUY9hy3rxVs9LO5MPBydGOqaTlBudFsT2ouTxtigJ7TZFYTAoxrTz93rLeePh8iupW/Ps07q3b+dITtea+VViyEb51WXPZC4j6fWRmfPtF3miqI6vIws6z1JDwkCsoy/tYye8AjNnvv1iDLjKbScdbnPSdFQKtGZBt8kKrm3XiPUVStuwOC0YmdccXHt0tRIveJMkm5khQD9+8GykbWiGnV0KTEej9jo7Dctl4wroUAn7Uh79KDIjIpA3es5+ROcX5gqZM8ow8BpQxlE3HGYK0m0wpfR7bLhsulZ5BZrGrrmWUGh2TPdcV31wqLdZrEyQ4AZ4mVcXMdcPTpQk4mlZfKyGvKMqo8V0qPM4rC6BmPoiPDHbWop5C4PKlnqZWVFjEwo9WBzTtGOU0nEkbptu4SUvwx7ZE1T7Lxdwtk1YRZSuxhnqXDfnuWIbB5joLWex4JklTyHuaLz3LYSe+scZzxd9S/DzPLuAqzkE+IrZx822aVj7OSCNbIIh5SWui747xgh/27D1IgNN93Ct3fbstOxplRTJokGTp6j2sjhOHWI5XZGc9DxqNkZ0zm0nI1wnuA4ze0kxLSCyencFGNlrTltWKPDO1jkjAXi9yv88OMlNxetlQSd/1my31Zhv3j3GrNMHfUTSB3tg0ryBgpMoszZvabVr7nyDlyWhL+YWPNtiGzJoBWibqteTHIDDFFcuvoF6I9Zdq5ReXZ7GluWysY9tyJDjKxDT1WPsy80z5A32pKJfWX1jLHes+ROdOGU2SN2a39jBw/I0y34/Gwd97/vgrxlHSZdfvbzxkpBRLa+/Qyx7ANR+6WHqvh/CBfkGPo1vRuri3tJ7VXnmd2PwMqJaZTT6kV6z1LiJGQImuFxbX7QNaWjgHxllyeVFSNZy237Eylnte4CuxWFfdvV2z2LMpKaQ3nDEOrqZrIPVcmXJnUDKzh/rEYlMPM4azwxh6Y1GxklkdsFqAlJX/SeXbrxB2ZFAq9OCoZTRvq4KmbgHGawll6DnYnBmMkbapvoZ/L3M+1HBxWxs1DAMedqPqZxZo4q8qbGc16YRkWjtyZmYHQc/rYRX1cNYwqT98ZrJEFelKHmbbNPHdnXDVcmUraaeUjVskmllst2g7td4/a+OcXjCZExpWnZ6VC8F5K8XLj6EZ4efZ7ckhgjJ8VvVvWhtcTx4UVj/r3ZQTrcz3hylQhEEJsPXzMFnbVhodiSrP04NMYkTNvShPYrWQjH+ZCKFRKHWi3ZTwpEK9GHSKDOQPXxyTeiSTjrvMMGaWpvKRaex+4WDX0MotCRO5Mz53YcNnfXvvDBClJu98yyJnWcaZR4mPC+0g/N7g2w2uZV6uXuUO5K/vbcNk43+w5LgRRXO5lXdZbYqOwNDEyrQLjyktbacno6UKTy+ZI926TNqXazaWkz2MW+qtFTHF+rPWcppdbTBNooiJET0BUywvr2MjdLPW6GwdOK4ZzulwnGVdVExiVDdvThkFmmNae3CmsyVhLgEpYZcTzF4VMWzVBeCyZpKzvJ0zv7+d5g7IzniV8FhnVIiw6zO1MV2h+zMQI/dyJunMbdq1DZKctQeGQcWqNCCLK/UWk8ah1ZN6IEh6Q4sKoYqf0JCWeMR8D1ihuHWSzdTvExNbA4awRccsgIR9nNVMfSLGt9WZh53LDpPaiN6QSw55o5FQ+8sC4pk6SiauKyGhS42OijIHQaHwSNewqRKzVbAxyCqe559JE0tQRz2ZuYHsi2YUhCAn/nLEM+j1igo1hwfqwpKpEzkQZqZPldGKYn2ycnCVWxs11wHEnKmM0PaPJraTz7iroq+UhrEwrcQ0vuQ5IGmlmREdEKVkAQMTf1nuL3B1R0VQzrZJx1SrjpiQpux3xMIp+RIyJqBYNlPnN2GkRDSubiDWBot3IDjOOTsIfOss+6O5dxNOlmJ8VjgsrOh2P/Pf9acFdxk1nfPgo6amd8QF74YWqCYeK0x2F+T5aKyw7lWd70rDeS1hrDm23+faOMZEpRQyyyRetwd4Jq5nWE9l5JVXLk7o0qigbKUSmEJe8CcLXOaAXBeRWToQdjiKkH+CaaYXSknZbtt6h3IlC7HEkdoueqRsf14b7x/lmPwNgu5SMH2c0twydhIgr0QzqvAxNSJgmEFsvxZFzJEkBxf052PPG6pVxLWnfejH0V0fxbsaIlKmw4kGrG8m0s87MxO8qL+NpPTvcY3VYm0ybSN8aJsozqSUcKTpnmn6myawRsmzV4GJEtTyYwpkDoVFYJEzPc8hCu37VredRPNZxpvFT+Sg6OxwM3/YyI6J7UTyXEy+8k3O9jHHluXenpG8VWUvm11qxVkgG02HzK0YJzfacGBA7pWSk9XPNMMuZNlLdLGt1Z7RSTL0nR7LQTKtPFEJkXHrx4EylrkLfaUofKOvIub70kw+KwolkwG7pObeWsdHv433kEzsNdYhsZFLeolZyyHVa0UQJUW0NYKPvaGJBSpKMMWkiqNhmS1ma6KhDYuwjpgkE71tJAUemI+t9yX40Wg76oh5+urDrtWJl3FwnnOQUqbVCJ6k0a/eVDu8modSOUUuvE6KIzw8yw6TeM4BiSjQ+kum9TKjSC1lzqGxLQAuUXhj8WituGQrzq/YygaxR7OwjGKfEwmYco2RmdafwrPXULPOKnCbL4Wb0xfXAceRHH+OJyJH7Q0dd2nSmpUxDJ17XBBF+0yqdOlQIB/tIKqgLL2yn8mzq5V6BDgc9FpKB4UMkd0JENrrdMM2iV9IZLZWcW5Kv1pqNVpdk3tDLjAj91TEJD6LyBwy3ZaG2/QaHVlYqpysJxRqjZ2TswzwvuZWT8FGex+PHueHcsGC9iLNyD1ortssGpSF6eR5rtFR+TsJnOmyOzL9XZu2hnsGkZIPVWu15BjM7G2vOaSovsv27pZzstwoJEUUUIdJ6aE+v+j3fJmsuI6TExWk9E4fMTSIqCY8rpRhmjtuGOb1MjGs3Z8DGNn4uVcBZSA+f79/SB3amDcMYCUm1leDFADZJsqf2t2lKiRgj47Lm0rRmd+Lp55o71qUos1KagdXiLW+zus63HqBl82vZOPJeyPdbw5x+JkJ8TeulUhEmdUPdxLYWmCYF2Bo4ILFd1mxXnsmkpqw81ipG0VDWUjKm5zKmbY3gceUJEXyM9IyIKzqjCASakFBWjCmnZexO68BazzIJgQ/etyMaVW3ZC9VLjKuSJrVisx7WMsPDNnIujgNV5dFWkznLeqYZqUgdQYXEQCssEqq+0VgZN9cJJ01rPi6EJWJiy13kuuVfJKUZ5HsGUEpJNBHaiTa/yVot7uDdRvgo/UyIbQFa8TI5BeXtaWl+sXRt2KvbjMV1L2nGVRMImSEktfR0f5Ish6sJo5xlX1wLlvGIjutbqzWmJRiehhAK0vbDwmHNYsZTdzo0+vRG5P4+6totM+IGX8vtTM9mGfZnV23qHNuWGulZc0Atej7tPUapcLxWOHqtIFwnfDb1AR8MmTbUIYr3wOyFKU7C8dpvcGTWoHpCVB04Q2aFMAkHN8ruHtNaqpYfZTSeNJvHWo1lL+MtxCRFXbvQ3dxvtGozs/Z5Qk/jGTRKUxnxeCnD7DASkow1CUsrhplFJaklpY2mDqktcyAent5VzJ35NlFKsTnIya2h0IrtSWCQmxnnCQ3nhxnr/WyfAKWMr8qLFAFA3s6BTk26a4eUJJur8oGdaS3Cc0bjnKT5u5YGICEuGU+dYvWVSU1SsFlkaCTMO6nDjNiutGLqE+s9UXSOyDxPOjGqvaR0t/2336CuvZSYCSHS72UzT/sgs0yqhtIHqklg1CR6VvR4+pkmRLg0qtipA1uZlTIoKaFaFeHcWW7PxMCyyPicloEyJB6+nqE17JaBYeGE9B3hSil1qNZyR1l5xrUcVCe1Z1RGdqaSsaW1gRRRSKgwM4qecUQSubM4G6kb6DvDpIrUKaGxGCUZnQFFrhNFfv0pAPuxMm6uM05C6DytMu+y3xqjWTNS3DJFWOvtydHPp8DK+FJs9hwB2Yw3e1l76hf9ApvpQxbLgxygwonGSeXFa2Dscq/IURv9tYRRToPTpJifFEfxK47rW2v1NYXMlhltMSWmPpIf4gk8ikB9WB916c7ATGBvPw4zINb64jlcyw9mk+RWS1HAtg5O2QTWtWWQ25nyblfzyGlNEaIYbqf0/i0zODp+z04l6d95TBRR+G/LDIaYAttTz3rhjrz31WQwzQinSa4RYpoZbvI5y8tsnMIzKFlDmkmrCOzbzV8hBnEdU6v3oki1IrPiUa7ad7sWAv7+NlFK0W9rhQ1y4YmolkDdc3taSErtEXCntaduD25NI8bNfaOKcSNGd2i9gyBrybQW5exR6am8pzGGdaTqu9aJSUtqr31k2sSZKJ9PCYN4EQe58KuaECnL0BLNZYNPKXJ5HFCqoarDTBxTJRi0khP7x5HRCoOiQcQUuyxIa6Tul7WGnrXc0ukYIWEprRRXxjUKOL+WU7bCftO6ISVN4TQDK0bYes+RW8VlpaDyDHuWzFq0hjwzxAS3b/Y41yqc1z6SjOL2jWJWZ4sknt+8NqgUqKLU6lMKzvVzzg8iH7tSMamk5lvPSqHWKnhi0GgV6WdCiXBWt7IRbqVz86mIo8Imx5Fw9+u8WKNnOg4dlBJC3eW2+Nq08e1p1c7SzjOlmQZJ3y308o2RucVmfjPOjGGjJUMvSynuNt7DNvqrCaM8GEQH4Xge0XEhsbMImS0YbfF0qbL7r7O/j5pweJhyQavmqI02Ls8mkc1Ssd5zaNys6OakLUGyU0kl+fWelJjoskM2B/nBexyx8S4zOKomsDP1aKPoWTOTT/B2eahQI2G//UNtWQjxtIeVBcKpEvmCJkRIUDh9qDDcaTyDRsmzFla3Vexl7vQzUbqelp7MSHhiWntGKZG3HIlBZqC919Wcvg9rE1DcslYcKTjakYR3q2ZRLiEXwrl4toS7Y4zGqL3Qea4MhdNkxjENiUkTuXXYFmCtAmst76QT8evqOmmlaLzUAUtAVXu2S1HrHWYZWgdqD7T1tcrGEJWkiSullo6j7tmt0+go+kEd/3FSe+omSkae0jNj1LeHxp4Tr5ZzGm0s54a5cHacYdRm1VoNDz/XZyPPQCtuWYPa19Re3qFnNbtT3xaktdyx7ggpcmG3Jmssa7nmgVEt1eqtoolhJl2gI2wVhosTkXIw7T5gNGwVBbtVw+6kwSkt3ixjCJ1YaD9nmFusXencfEriqLDJYS5ykM3zJCGXsgn4kNBJCrZdHtdcSfDwzYJzQyE4+ri3OBy1MR61Ge+v5r3fKMuNop/phQJ3pw2j3GxdnXmclEd0VP+cdcjsWjyBcNDYqn04NEy5X+r+NEbVsrbbMBqtGsZNgCBSCcO+JWtd+lMf2J7UBGC9NaaXZXAd1yZSsNaTtJCxjdGtYF+rQ8XBOdB5r+I+wu6ye1+NwTorJNowS0nPjCJz5kB9rcPea5lnMA+KS+O6NSYERsH5fsawyGacPKOFW9UEIRcLtygAUvKjsPaaCPjHrRuHneqVkhDnWibevHEtGUdd+CkmGUONl6r2XjOrKdXExLBwEvZphMTclQHRRniOVRNnIn7OiCex8YHSJwqruDiuuDypKevAtMlIQ0kZn0YxZkMQ0T/T6rg4owkpUQchNTdtyLHyUu+uqkVwryjUTJfKp8Raz7LeyxjVe/XbOm+7j1K7KzeSrt9lcmVWM+yJ0vXONHBbrlHaEKJkhYWgmTSeIhNv4CCzrBWGgbOgNakRwUZjhMgOQMtPMmi0bgUsYyQlza1rEqL6+GWpPXZumHO+nzGqPdMQmfrUqmyDcaL/dMdmj8IahvlB9e3rjZVx8yDC/rDJaaXGly0Q3TV8koKGuTFsFJYrpee+3Urq+QzyWToxcOzGeJLNeJlHY1JHBrnc/2rDKDcy4+o4nEYt9Wr1Zhbud0Jv1bV4g+aNLR8iu+2znWT8ncaoWtZ2SknmCQoIiUHhMEZTtga+a0m/TUwnyuA6tE3aeknrhV1ok/06VPPvkSLtuN0rWVG3optr+4qXXo3Bur++1kl0bg681yF93SoizMoPKNRs7hH3SkNcaudVP7eAx/uESZK1tdU7Wnn4OFyLEa+VZNj5EEXTqf1dl/WWaU3UCWfARxG9S1EM19pHUKJZkzvLMLPSFlrhjMGENBPx6zvD5d3IxWlD32hGIbI9blBKs9WXSuT3j2sKrbl1PacOUofKGeEtqrZNO29lrhVXJg1VjBRGwjpaaZyTKgVF+7vcaJqUSPu82yThRCkUG4UUzNQqopRUek9IWYbNQUbfNbMiyZUX8cyoFI/YLBhkllEjYbA8ExrBQGu21h1NSlwZlXzscjkrgZK1Xr9MKdFBcxptRUfrYZuFCAv6gFaaOkoiS2Y1w9wwqQzj2hObhDKKUenJeopbBu5Ivt71wMq4eRDjtFLjh12jOz10OglrhTD8L7ZVZJ0znBvki9L7x2yMR23GJ8kYmcnCnyKMcjMzrpbhahViT4vjxMj24yy8QbNMPvY2kw4nkbo/zqg6qu1ya8C0G/FcnytEhyRruSMnyeBa1ibeCblZUogP9tu8DtX8e3TZUtMmcGXSzLRolhUvnbXhafkpp/zNUX0do2SU9Qs7u6JR4ol5YFyz1sQZyduZtmwGLJTrsEZ0lHJ3Np7Rq22Twmp2m5Zz0xZi9S0XZFxL6QiTiZG5lkl5i8waFCyEN5VW+CZKIdglBnnWtkdSQsLtFZbCGJxRWGuYNg27pXiPzvdyQgj0MofqjPw5T2JhDdZ4SbJIkgCSO00TxWNUGDPjGHWHNq3Fuz2e0+QZZKYtepmoo8b6SD+z5EZTtFXYh7ljt5Rq867UVCEwqQLn+plkxU1rdsqGiZeyF/maxlmHTYmREeJy5S27ZUUwhlsKA20/DVtBzd1SwlpGJTaHGVWQOlUqKjJj0X0RGtytJLysSBSZoTCazb47tHDu9cLKuHkQ4yw2z5kGhBflV9O6ZVGKW9fkNGGtJrd7i9dRi+VJNsvOKHNazSpCa71cHPA0J/6zMPbOEsue/bDT/LVgb+E7XIxsPhV5vo+OMkCP68vTjr/TGFXH9Tu0HBjiLMzgW1XgXiZFQ0+SwbXsXTNt6Kd06L3ndagOiviJBEJjOm2WB0etsmV9HWJkVDYAs9pJsSUZx4RUR4eZkF+/rcg+r/rchIjpwhM3EZ3xGpJotzirGbReiHEVWC8seSbaMzFquiVCKSnwqmhLZtSeBJQefGoWQuW1j2TO8thBTkiRj18q0TphWlG9zGqsdkyqyKRO3DLQmNywWweUF+MppL1xpLTC2Va2o5XnqIMcTLxKknnVRLQOCwcDpTVrhca17V5H8W6b1sOW9d2BUhfd70e1p4mJnrNYJRIHSik5BGlFz1mKvqafOyZ1RCH6P2uFw/uE0o4QpLXy3JArhQcyo4VkPk3UShOSYq0w1CFwMUCKQerdaciM9NPQWe483+f29R5NODwZ4XphZdw8iHGt/InuGn1ruBwSk8az1mYAdLVOMmdQqAXDYP9mcFqeiwJqH9ht0ye7lPFO0Gn/QnnSE/+N8pQsa4PD0D3jSU/zV/McnecihHioGFnhzIn66DR9ebXj76Sn85P0+6z4Zkj0nZmJ9kVY9AAuwcK7toT47qR8Yh2qfe/hfWTiw+xAADfXe3gUai/ZZbblyjU+sj31OA3D3l4tqJgCEx8otKbqKj+oPd2krq/3z4kbSeqflyUY5n6WWVkHCS8OinmFdMH+qujjqiG2xVm7sTwfKl/w6AFFVrNbeQYajNb0nEPjedhGzkYvI3OGBPTbSCoJQogzjlSMidqHmejkpPZCWHYybhfLpRwU7OwUlveH4GNKDHK9tH2c1qgkf0+ZfL/yQtK3SkQvB5mIflZN4EpbdX1QWEKCdTLqEIghsVGIoGCIQsY2KpFIOKuYNlLPantcc/+4JMTEZm4YTSupMF8nRjYxrTwpBKaVZERae+O8Nyvj5kGOs8im6eeWc4OM0eXAbtnQzyyZEWu+I/JqdbgRk5IsAifludRByHMxJKxTkBLbZUOuNbes5QcWwhNrAp2BsXccTm3Itc9+vU7z816w8T4tj5jiTIwsxpNlnJ2Ws3Q9BRCP6/duMwsxsD3xjJKnbIJUDjeGYXG0d6yrQB2iZBLWPnKlbDjnpTL5aUJ33bgYV57Lk5peu3l14+JmeQ8PQ4yJOiaGzlD5NFMd91Fk+zMjHt1xKbL9dYic62eS0pyYKRF34bhp7ffUnRXiClJ7aepHzZGzNIKM0az1spnhoJOkOM/fd1lV9K4IpbPLZS5ya8jcnkfPGOGzXBrVbMfI+X5G7QNNWx19c1jMjCdFqxrupTp4HRO6Ca0ooKyDKMnQq7zwvc4PZR2cL5cyL9i5PwSfkggeThrPbpXYjGLs729zazWD3C6EuLbLhlEdONd3rBVi2KSUqOqGT1yZUjhN7UVLKLeiPO/b2oMTH7htPWcYYXtSU/lE31mcjkxrjw+J1Bb0/ci44mNXKkiJ82sFPWe4OPE0foyx9oB69vXGyrh5kOMs+BNKKc6vFQBcGtcoLVkYRivRD2nTTJdlZu1OPT5FORWcgOfSTUo5HafZgmiVCFZlR5y0T3LiP8vNdtmiezWE5W4jydx+mfhrP83PNIrCYmrpPJmy8ZGJloX8qPtfDWfpRgggHtXvdRDJVU1iXIrWiTaG29cycpsdes3uXTuRNmMUg5bbcHm8V5n8pF6mmdIvtPyHOMuc6mX2qr2H18v70RnF/XyPP9S0xNkuLfzyuGJ76vFRyNqNj2ANhVU4J3L5tjVs5ufEuGzYKT3DQng5h82Rww4KXfX1a3lnCXNrkl7UjIFD+HonDGnPry+DwnH7esaViRh2PadYLwzDXGqdzYs+Tps9j6qPUmgzxEgvE0PiSik1AFFS6qDjsR2aTbjveatuXdLiVeoyrfa3OXAgxLVZZORG9Ga6Ejll7bmwW9E0nsI6qelWemKKrPcdG4XDB7g4qggxsl7kpASbfTcz5hpoRWYNWsGojDTRM3AZvUz0qiyKi5OGS9Pyqvr5WrAybj5JcDVEvP0L5/m1gl5mmfgwS33sTlyHbXw+RKbTsFAAEQ7nuSyokVpF1m6KCqnwfK3G+1lstkctuldDWL6eXKCjyJT9TPRZEOfYscTfa3nOqxl/1wrxRgXGVcM4RJJS9AqLjjCtI9M6MCiWG8sxJUK7oc/3Z+EM4+SZ+EAv2hOFV7rnqIOczBsfqRpJCVbImEhzxUtPgustadAZxSFJmYVuHuYtz2NUe65MagByI96ZOiQqXzPScvp3RpN5tSCc2HlAMitp8d06smyO7D8oNCFyYbfCGuGinPadvRdhQqMUvg3n1HWgbCK9XKqIh8TSUBrpZIkLi+uL5fwgZ1J5Rt6jkIyh7pnh8CQHHyOTKkiGWlJs9DJ6RjNqn3daewq1XM19vv86jaJ5Ur0yitzMh7T22rx739yaBf2gyos3pwkRlRL370y5MvUYq9mpPeNSxDKTUjRNotSBYEQ2YKf0NE1k6iN9p4lJUdaBUVVzeVpJDTTjQNWYpKhC4IFRzaQObPSdCDSGhI8rnZsVrhFHLZyDwtGLdqGysVKKcEidIynKCXVbowS6LIzl1XD382K6TbFptWzOihdzLZvtYd4Zb0U8zbWLYrdgnFQkrvZ776i1OjMu0GFkSqNlcew5Qx3TsQv3jeQsnQViSoynDbulF45LLrV4fIo0MSwYKPuhlcQLah8Z5HvLXMc1S4kF6f2jDAw5JXsJD7bkS6O8ZLRMa3q5ZZjbU3kPr7ekwbIQbkrgrCFzmitT0bTpnjt3hnHZMK48vcLi2jbdrTwhRNbbgp/zBrKUbGjLSew3pJds+iEmqrbWUz+zM+HE4945xsiVSc126WdK6tYozg1y1noOoz2jJhB8nFVR3x9KM1qRYqRd9o4Nac+vL2v9jEF0Sw3gww4MmRZDcFR58tbrnRmNUg2jWp43c/bwbMK5/ltGqt8f0lKJI43leW/O9rRmt/T0MsN6YXhgVBOTeHOKNhQcE+yUDWu5bYnIhmmoGdWB833LJxrPxy5N2Z02hBiomqYtU+EpdI5Rkprf+IQ1acZlupFYGTcPQRy1cBbOUPnlXov5k8JMhwapG5KikIR9kIrjjY+sFZbKLVbDvRG8mGvBYSetlKTQXtmufnLy0bOK1kdt/krtKUCr9lTrtNQFO44XchIsI1OmljQ4aNWoddvnR7X5g71vDiAhmyGJQZvNp5UUA1RAmttc90O3C/KVsplVJg9zBqAzeia9f6yBkZhJ/+dW2mnYy1CqIaXERubIspMbNjdK0mBZCHdYSLHMGGnDU5JUENu2CaS2zEpHNm69Vj7OFMhNa8hYs7dh7Z8j+zf9GEXIrjCa0JKWD/P47MeVSc2FUU3WGvUXR55xFSmsYWtYMGizvCY+4JKEiKtJLbowrXetDhHiXlXxZSHtozx4hx2mjipZkjtNWYVZRfUQRZfp9sKCUsdm+nXP1ZHqO+2e7nMfxSMeY5KSE0eM5T3CcaQOgXNrOd6LNEg/F6HM+3bAIB4u1b5X5jS9zLUlJRQXxw1SaSrR+IACSYVXivt3poSQmNYVa4VBtDg9a8qQa7OqCr7CteG4hfNQ4mkOuTmoZmq1Yqvv0FpzeVIzqoTxv9UXgbVlm8HNqsJ9Ehx20gqt0dbPND6IymlXVyYz5sjNv2wCIYoRKBkcUkxua3Btwmf7MU+m3L8In7TNH8x9cwCqrditNFUtfIVJHSQTTcFmu7gehn5uOecdl8cN4yTj1hnhmWVazaT3DzMwQLw7k8pTeuH71CHSd5IuPqsJ1RYVPKlBcqMkDaSelMG0BkdX2yvGVvE2idibD7FNGvBtVtDeWM86HkmIMzkHq2DiY1vF+2BWFRzc9GNLrlVqsU7Wce/sfWS79GRWt9ymSNaGtHYqz1pbXV0UgRW5kbTty6MaoxIBxdQHVBuWWu85bhuKLs18Nuh+L89Jw2VHHRjO9TJ2tG/fL7YEXzMzHo7TfZkXdsyMmvF6QA6aXZmS0HoWpWr7fNbYEsNRgVGajcJxeVy3NQEDdR3wEbBgrRiETUxYbWb0hCYkVIp8/HLFlXEt41dJiKqZefLFcLxSNmzExLm1gn4uhVfjDWYUr4ybhxiOXDjrcCTxtE1sWlAz7TwEXQzXtSmM3WRpwsEJdLOqcJ8Ey05aMSbGtWThrBXZ7J2qtgrxRuEO3fw7Y9JaTc/Y2XOFJIttm1Ryplh2ijxpm9+IvjkraCWKxSFELo1ryjqSO03PKJIS13kd9sKl+6GUYqutQL2fZ9bVU1o6T1qeTx0TO9Na0qkB5wxNgivThkFbk6lBNlnn48k3xBsQHlwamk5poaCr9zLLQ5TvJgXD3LQKxXvPNMhFMK5uvS+ZM9zSbmxHpdHvL3kRUiL6xEbfzcbcce/soxww1tpn6tK0SYkqRBovhR1Rwh0yWqOShM3HpSfPDEVLNq595OK4Yr1wrPX2yOhHebqPqnvV4agDgzGa3dKjdBuqouMEHawVdhi0lurn1oTZPZp2PBethk9MiUktz9zP3eG6YqqT49BsDTJ2pg2704pLk4ZhpnnYekFAlJVTBKOlrbenTVvcWIzNUSWFlHsZ3Fs2XB5XXJ40oDVrVtF3DmOluvp638l8jSvjZoVrwFEL537i6cxAAKpWvXjYcxilZhM6JFE5tVrs7gOph0ecvK4HCfVaiZjLTlqVF1G8zZ54o4zRZDYRMpH2P0qddb8xqbVqldNTm1Fz44UFT3K/m0EQPi260FKTOcomkFndpt4qNnqOYeGODWkopWY8s/0aLYfNk9pLyrdPiXHVQIIUE0VmWc8tPotMK0+ImvW+cDxOw5mRLDfFblvxPGtrdp1lePC4Ddu2XoQ6CtG3yAxbfUdK0iZWs/BMvczS23egmCfrdmvL/DTZX9Q3t1ImofOWnOSdrZaD2LQJZEaE8CofuDSuMUZR1p4qplY3pvVMteHK0gfWeg7XGjddWLL0kUE8OoMwpcCVSS1aNsekux91YNjfBssMwZMc1A6URVFQZG0tqxBJMTGqPePGsxHSjJez33CcX/+cNZwfSi2sfs8xcJbCSXr75iCjbgIpKa6UnhRim8YOG0UGKXFxp6GqIy43qEm39kWSciQSPip2ypqtgTvpsD1TrIybhwD2T47D3KQd8XR/MbeQEkZDzxi0YeFaHWkNrr7a9FniLIiY+09aWimpXDvnARB3r8LYYyppzxmTVsvzVe0CrJVi4Pbc0CucHoUz+Dwyqi09Bao1ePptX580jLPfmDtsnjRNpGwCUSmckhCWbj0UTQgkRK+j8pHzQ8dasTwMACzdsDrjvGqJsdMmYLWkqZ9VePCoDfvypCa3Ij7XKd4OM1G8VWqPlLrMI7O/DZWSzLHDDhr7N32Fow4Hy1oc9c7GKDIN916paVKABAopKjrIDBMfSaQFYUagzSJUszYPrdegsLKZH5dBGIKQ97esprAnM17n22ehgvkhhs/VHNS0bsuiJCn8CcxkIjSKFBMhRrYn4uXs9HTmsWBw+YjVmkds9GfjYqZq3wQ0CXZrRkSsNQyslLXQOklYqxZvXNNEMiUlHZrWs6SSqDf70HoMV4TiFU6KwyZHN1GXLSK6CVzYrRaKuUUv3ptd36CbMCOTdfo3Rkt8uEiHS9bfiNDGWRExl520OjXQrijiSd9tfpOc1sLLADDI5528+s2S5f9kwWGnVyFNOzbbf8/NYkj0WgzrZeGE3Cp2StkEjdYzw15SpSP93NBExTA5NnrZQS9mG9LyiaUb1rxxvt7PpOpziDMdkqvFfPsdtmH7EBlVXkJzrbdJxqfCWXmP04QsT3rQmN/0DytrcdQ9nDFsDSz378rBwVnNrcOM2zZ6Is7YBKyW/tGAT4meMaRcvM11kPTx3GopiTBHhD4uTJ0bczSHZV8fhFbQrlNQnu///YTaqz2o7U8Tr9qMQKPFA52ApMRTv0xXbH79q41oBRmtF+rUNaEty5C16fUjyK3wDxUNjbecH2TcH0vGZaSOgE5YC9ZZrLFoI/2RtcKCNzr8vVpxP4lx3ORYtohkRmONmhVzM1qx0XdUPrBb1WS2zY5KUnl53vq/2WTUsyZizi+61/JunU7QbtUQo4SxCqvJ2w3kwSbL/2DCUafXlPa8H31nGFeSNaISpzaslxlPHQfHaT2T6fchonQ9qxydWQmJxCgeghATBs2wTWWeHx0+ppm4n2sPGfvDQfuN87zlwNQx0TsFKfmo9st0l1V2cMPOzF4duaMqvJ+kQv3VHjROGhLt7uGc4bzrobQWdWRUm6mlKSwQEylFdqatlIPpiqlqqiZhrcIoRZ0SmZbq30dlEM6Hqeff4bB1Zr4PRmVDFSLDtsxHSMvT3a+2/bpxnGkhGHslHsBO1NAZRVIKFaFqIpPaM2y9i/PoSNTTJlBXgVHwS7WCrJVyDVdsQ1MlopIx5qxl0HdsBFFCfmB7wr2jwDQkCBW1FeMo00KmXj+DrNHTYmXcPMhx2In2pJNj/yKSEK2LfmZnLkiQ2kiFNQzawZ1iQrc6NZ31f7PJqNeTiHkt76aUIneGtcxijFooamf1yUMnn4pYZqCPSs+09iitZxv2fIHD0xifyzb/vEsHDktO10Y2v0kVWiK9cFJGVaRwevbvXUmS/SEtmV/LCftGqTPPklrWftMmolVqNV3aDTuIfMNWf/mG7UNEJ3XicX8jMr7m75ESsyrfZu4eKYk4qFWa9UKUcmNqizSqhLOJSSNFg/uZYbN3MDngJGFqOHyd6fpAtV+3SlH5hDWxVQQ+aLCctv32j2OtQKtE7J4LIf+GJKHUqOT60zpizaLnOKXE5XHFpVa6whmFVolxLVpOw8ItzK1+brmln3FvW/E7N2B1pKkj0yqxO20AKbBKkygD9HQgt5JpW0a9UArjRmFl3DxIcVw89moXl730VWYLsA+S4po7wyAX8tdRqsI3i4x6I3RarvbdtFKYeVJxiwerQN5RuFEFEQ8z0Ke1Z7sKbPWy2YY9X+DwNM+2bPO/NK5JScjzyzyeGz0n5NMQ8cg8OT/M2ew7hkU2I8QqtchP6WWa0h+uFA1ny1s76oCTEvTsXoaTZJ7ZhdADSPih9oFdmPFwTkLQvxEZX4v3EE/YpA6zcGTjJQ08xYQr9gzK7r0Abu3JeIG9VPj9uJYw9XwfKJhlMHUe28ymhTWZyLGKyUq1c1AdrvbsoxivPafJ19qwuA84rUhAbDVxTKu6Pm9YTSrP5XEj5XCchPMiilxL+HUtswsFLrusw8xoLk1rtic1SRnW+w6t4cq0Js9zNqMIJTprcFozKBzrPctarklhURj1RmBl3DxIcVzI6WoWl/0uzc5ACO2kc25vw7geqsJngZsdGjsMn3QCeUtwvUsC7McyAz22XIVOl+Rg+OToSuAL11+y+Zs2XJMAo5ZdP9HLLOeVEvG0EDFG088WixQu2xABfGoO3bCAA3PvWsbI0QccCY/25jIfK3dwwx6XHqW6Wk1qr55ciAxyd+gzXa/xflRyROdFm5QBr1KrxyVtkHlJ7+/6Z754ZmZPtjZcTZh6v3dJa/HOzRs0KSH6L01Y4OLsV0xuQmRceqxR7MxlaB1VFqaOifU2TX7ceOqQZno6efus+5WjJz6QlDzXaNowbgJVE9AazhUZPWcYmsVQllIiXFk4S2ENo8pzpVX6vmWYkVnNA9takjBIKG3IMsWwX/DwzR7JqFVV8BVOHnI66eJymEszzVX/3Ro4QuTUhNobjesdGrsWr8WD1fA6Ka53SYADSJBa9diu8GFM8vdsn1z71YQ7lhpP7Slet//fXWv++lbrmXjacWNhf4aMVbTGy/INa9ncu9oxcpIDzlEbtlKScZO3BV9PWnm6w9WM98Pm10mSI+qQWqVuRROkUK1VikuTmp2plzID7Ti9Vg/SSdeZ47xLIUpfkyIjH2cp653npbPTKy8eNKWY9cd8WZijvPQJ6GeW3Igat1ZKRA0bKbS5Xzk6tbSDsRc+TIgRo2BaByoXloay9hoGUK2Yo05UAak1ZhRRSYkY5wzWKAprON/P2nIlN/6QvDJuHoS4mgq2Ry0uh7o0W9LrfOrfg3Vj3r8onnVo7Cy8Fjebk3QtuFElAWCxrQ8WPjzoRYSr26yWbf6zRX7u/w+7/knH2MLYCbJZ+FqIrU2IBzas/XPvatv1tN6T/eMzxsRO2gtPn6by9LLrHfUux82vkyZHtJnJGLP33MPcst1W3XZmTyiv5/QsFLT/uU56iDlqDCzzhHfepWklNeqUQsjOlSclGQcpiVeNdn1fy6TW33YUakDnaZr3zij2COIzodC5MVt5aSuFjHlSYrtsyLXmlrW5dPD2QNHESEgSejVKETRoo8mMwVi1MOcX2qrdK3arBqM1twwcOxPLxy81xBjILTQx4utE3xpGVcMDOyUP3+wfWWriemBl3DwIcdKQ00kWl6M2rTomenO/eTBuzNcjVLJsYTtLr8XVGl43iuuy9N43gCDaYb6tFwoftmTGs/IiLtv8Q0qzIpJXm3l11PvkrSpt00Qyo9BKrnnc3LtaXI33pBufXebLaStPH3a9o3CcqOBJkyN8OOjFKFqDYbf0VI2EPrQSBeNp2ybzlbyvZj2Zn5vzB8H9nvA6trytwpFZqV+2O/OumIXsqdyZtiaUlGjYnjYiCBliW+tP74UYjaJsIlXtJf3dR5KCzdzSePEWidbPXiFYq5TwalqvXPfMZeWZlAFraMtWJFRS3NJ3ZM6ImnSU2lF1iLNadjNvmlbUtfTXVj/nYRsNF3ZrnHEMcwmD9tcsm/2MEOX5M3vj17SVcfMgxGlPZLPFqiVBzm+Op920bhZZ+DCcpdFxmKF0VEz7RqRx32iuyzLcqIrhy4ztYS/D2UBKaZZxdlZexGWb/7mBSO+fNvPqpO/TtV8dIypygGdwlgbjtXgLu3Vmd+qpUsS3hsFhlaev9lmP8wqeJots2ThVSuGsYXMgZNgmtAVRtWTGza8ZwKnWk2Vzs+PKWKsP9YR3Ho86tno50YhEwFyxUKXUTDqgm/PjsuFK2xb93KGVjOF+ZmlCzc40gJb2CyFyuWzYrT0xwXpupap3G05V7CWEzK+jG/2Mqgns1B6toJcZ1jKHa0tqhCTG04XaM67lNz0rBVbHVSIzsJYbLkxqLowqyjpQWMVGT0KvG/0+RS7ZuLlR3LFR4JPG+7ji3Hwq4bDT+mlOZEdtjtd707qe3oZuUVSSSTjTJblao+MwQ+m4mPb1TuM+7Lk6zZwb4ck5rUF9tf1+mLGdWT0jgJ5leO9IafwzGLtHHR6aICK5Zz33lrX91RxKUpJq1T5FxpVnVHkGTrM5yBcqT1/rOnFYG2kkFBaNPvEaddw4tUYzbsJSQ2pSBykceYpDzP65WYfIlXEjJSmMXbjGfm/c/HtH29V+En7LpA4YIKk96YBJ1VA2Ca0lZFj7Vt3XalF81prNYSaaPT4wTQpHm12V0gLvaD4hhMQB43JrWMCkpmk8hbWoth0zq5hWctAIQhaiqiOjqZf9JzP4qMgyg5korNKs5RnrvcBO2WAMDAuLtpppk4gJCqvwUTLbLCvj5iGP407rp1ngj/NuXI+shhvhbQhRRLHkfrKw5e1pqQ7pVEbHkeG5kK7LJnS1z2U1VLXn/qphkNtZscfr7ck5iUF9kn4/yvA5jbF9ll7EZdc6i+sf9T7O6DPNjrraOTffH7AnjDitveiWOMMgs+SuZtIa1bC82vfVYH8bpZSomsCoEl0VY6XY5Xzm0FHtdNQ4DXHRkJqvn9eESFQw2OehOewQszzbToEWj8h8avNxXqbumSsfmTRhltFURwmTxiiFudaKVjnaB4rcsu4MqMVwXEoSTjJGhPtqH+k7Mer2844GuQHF0lDeZs+xg5DKY/sOmdU0RIzWXB7XEsY1Gq0iu2XNqGrnjE40JLYGUo9vp2ooRo7dMrBbetb6DtP27agOnIvpgELz9cbKuLlJuBrp8mU4CRH0emTxnHVmzbINsfZRKjIrNVu4ukyELh3+xNc/KjwXE3kb277RadzLnqtqhGQbSbj23ke17Vl5z/Yb1MsKIh7V74UzC5uvUpL63M/29FXOIoX4ZnKT9uO495Eq3GcTYjvtnJs3hnwQ9V4FuHYj3ikbnNUU0ZJbzWYvw2rP1EdsHTBWn0lSwf428j6wM/UkjSjXKoUPaSFz6Kh2Ourgp5WEeJoQZ2ujZCzJXMozc+JDzLK5qZVwWOp9hszxXiZmFdmtVqzlko1Xl/WsPERKMCgctY8UzrBRZBhzUCNJsWeshNilfluMVjPekXNm1n4dX2Z/KM9ozXrPsZ47kVdQMrd28BikjIVC9IGmIVD6RG5F8M8oNcs4VDG15S0gpcDFScBHGGYKH2BUJZw+SOq+3lgZNzcB15qZcpI6MstTW89mUzjLzJqjeDB1TAydofKpLUypZpkIG8XhGhzLcJzHoJ9ZrDldUb+zwP7n6toWBbkxc2rHB9v2ennPlFpeEPE4blKMXa0iiDEyrkUVd60QcmH3XFdrbJ/mfa/GAOo4a3C44NsyHPU+ZxViu5o5N28MpSRKvSqCM1A2kXEVOG9le5aQCawVDtsEhrltCySezYbUtdGkDuxUHm1EBXh/361ldlYK47h7H+aNy7TigVFF4xNFZoQsHRMmyYYcwuGHmP2ZQfvnZsdlSaqrHZZm9cGGS+onLRsb64Vsu7u1n2UL5pkmJlHCNkoEF22bebW/tp9SYsSVbR3AfiYkdgcz3pFWanYw2W9cGiVCfqMmkBvN1EaylGbyC0aLp8gpeffaB1HsRirYGwXGafIge4sxikFh6ec554eBFOUBhTdk6GcKp/QNV2lfGTc3AScxSDoly+OqyM7XkTFq7zdS6fv6uPnPMrPmOB5MPz9odLjWfXoaHHfCNkafuqjfWWD/c9G67E27OBzl9r5eujRXxU2qAxMtRoFvCZ2Z0bPn3p362XNd7YZ/kve9GoOvq7NzaVIzqTxKK4atUnH3vIeh2/Bya47UxbnWuXfcnNtfPmHeGDJKMQ6JnpXsp92yYeAs/Swx9ZEiV1jEY9Jldp2lYQN73hajFE2M9KxZUEueF927Wpn+ru+nTWBce3wQj00vl+wl077PvHJzZ4jmVjOt/UGdHaMYV2EhSymS6FsNJHYm9Sy0VIWIrv2xYo+d+rFSQuYlJS5Paqo6kLRiPTOEqKl9IEZmhte8oaSR0FQv17P08xAS/Uyqno/b7MPuPZyWorB1SExqT9lIEdhBZhjXnktVoHCafuFIMeLbsUAIjEvh3GwNLYpEQKGDlBsZh8BaYcis1CzsZY6+0yhrqJvA1iBnLbcE4IDU/XXGyri5CTjKi6DVQSXL7tQ8qT3TJi4U5Zs2EUVk0sRWsVNgtWSFXI8N+qxIyselqSsgJNoMgD1tB63FpTp/nZNskifxGNyMbLH55wqtwmg2l7oKB9v2eunSzEjc6iCJe7/exvyzzU6JyCZp29NmSomYhBR+NQUa9z/Xce97UoNvfsyUjefjlybs1gGnQWlFXQd8iNyypk6cRTNf8HN/1uK14rA5d1j5BKvVQugiRjmZpyDFPW0hJ/4r04bKywl+0gSsVmz0TucVhZPPQdsW7lxWdPRa+W1d3ydgkDnh2STxNvQyK0ZsE+g7xZo1Cx6iae2Xjpt+pjGaWZZSZnV7wJKxbYxmPZf1+ajDhdYKItRNYGdaS5+0WWKNl6y69cIyzB1VTGyXnmEOW63HExYNpWFmZtXH67AnBpla7073Hk2IXBxV7Zoi/x5IbAwchbNMa0/T8neEpxPFyKsb7tupuDhtsEDmFJM6kVvHoH3OFBMXJjU7ZcOwcNy+luMb0RvSIdEzkpIf2wK4NzoJd2Xc3AQc5UXQSgyW+cH5wE5JSklOCEYzVBarzWzTmVSyKSbVKq8iG83NeP6T8Ca6hbCT2j9UPt4s8mBSamu3tB6N057SH6wie/ufq5cZqfgbE1Yv12G5Xro0IUZG0xqfhHDTkZkzqwmRA33SPVvPCTmyjnG2kcLeppUZLSTMq3yuk3o7jzOAlFrUKFHA5XHJTt3Qs5a85XaVQciZ/TyQL/FinLTg51kRwQ+bc4eVT8itmpHkTTvOQ0yzmnIxiaGxlksIY1ILyXWtDRUdVbB3/vMQpPL0fi2Uw975LDhXy7DoqdIznkqBkH9DiIxr0ZPRCYzdI+kfZThPmwhKzbKUuveuWt7QeuFm6tqHHS46z+CVacOo9FzYLXFGsdXP6OWWcRBBvYSmVzgGrXdHK0VXwX1/G2ptcNbQm6coxMTlsl7QVYoxUTURbRSDzFKHRNlECivrb3cQMVrarPGBnWnD5VHJ1CcK1xbijJGPXyrZHESKzHB5UqOV4hEbPXxM9DNL32oulw15HnHaEElobSkyjbVm5bn5VMEyL0LPaao2xtrJoY/LhguTihASziqGzjJur9HLJLGubCLrPbfgFg8pUYVEEa+PRsvV8Cb2GyMKqH1Aq8X6LyflwVxtWObBpuXToXsuo9WxJNTrkeKfUmJ7UnNhtwKtGDhDCBHvNYXT5Jk9sk90E9gt95RPUWq2aUW4ppP5Sd73JAZQ4+PCmJlUnoujBq0l7V4pET4rUqL0gaYJJ8qicUZR1Z6daWBzmJ1qPJ4Upy2fUDgtYY1CShbsVB4VYS0zND4KobfnMFrjjXBG+rk9tAxCNcfD0q1br2wCo0q0XAaZQSt96DvPFH2NhvxsExzm+16pPQNK+F+J7bKmrCPrhcW1Kd27bZkMZ/Sh42bahFmG1byR0WVf7V9aDwsfXxzVVDGStUbntA44I4awVgpjFE1L4tdGQlAnOaR0WkSyFnouT2p6rcHWceQyJxlWCRFMzIxmt/KgxMPYFfpUCiEk+8DIx7aCumVaB3zw9HqJRGJaBTn8KNDK0vgg7zieUrZKzCmDrSJjvWfJrJCdV56bTxEs8yLEJDHwvF28p5XnyqQhNxqMhGimTaSvZALlVk7KKMhaAmQ3Ec5CfOu0z3+cEbXMGInd6bOnTsWDuZHlAq4FV0NsPUnbXo8T8KTyXKk8RWZItOGmBD54PEZqxBzRJ3vaKJFR5clMu+FpdVXPdVQRxaXvG4+uuk0SQmsiYZRui2ZqrIW6Ea6TpL1KZeWQWmXcE2TRxJhoosTlDivIea3j8bTlE5zV1E2kbALOaPrOzLKlOnE31bbteuZm2W7LDgzT2hOTmn2+WzbsTBoSoiqtlZqtTXZfJerDPKzrrdDbWXhQ9xu/uZOD3k7pCTG2XiojGUVtCrpouURuGeSHj5uWQLv/3+Y9YPNYFj6eNIE6SjkGrRW9rC054QOu8dCqZedWzwyA0xxSuj5TStGbyyr1pm1vJaHWTl1Zk7gwqmhCIATxKvWcJbPCG4pRFJWFR6PJTGRUwblexrjlpG3mDpUS9+2WTGsPMXF54mmi0CYKY2alJISLY66rpMYyrIybm4wFL8Lc4mwUTLzEea2WhbhnFKPaU3pxIVdBkyL03fWJYZ9kYz6pF+QwY6SfWxHySulAIcH5++8nGd7IcgHL3uVaa+mcBMe17Vmm+EumU0Al2OxnbSE/4XMkBT29SOJe9mzd5psZzVouFYq7DXSQ6xM/10mKKC5736MMoH6mmTaeK9Ma0x4OilY8bS2zfGw0oY6JwihUa4ytF47BkgyYZV6kmIRsehYFP0+K+ecw6mD5hMJanBEjaC23szm0TPNmPwl5fo766Lk0adjoOZzp5qV4jaaNZPeYNkRe+XggBHmohzU/u4Ks832fkvClxm1V98wqbNtWk3ox5L9besnaOsJwBg78W4qwUVhiOrpMSIiRnWnNpGywVqOQ/imsovRQN5G89azYtu8O0xdatu7s77OOc5NSovYixNfALLt0WnuqmBjmlp6zjELDqA4t6dgyKhuqytP4yOVxw0ZfMh8BSAmvZEw4o9melFzYqTEm0QRwTlMohVK69SgKjyczhoE7OI+uN1bGzYMI8xPUI9wFnaAJiWHRppYCVyY1mRbCYr8QktikPhuhMLhO9ZwOMUa6089aZmen5P28iGX3v1HlAuZxmna5ERW2z5JD1OnaZFYT0l6dsRANUy91a8wJRbiM0az1sqvWozlpEcVl1z3M4BMyqcwZ2/5mXAUGuRgguTVCqkzga9mwN3oSptmPZUZUiMJ5M/p0BT9P00ZHlQLwbYjBanWwfEIbmp4RuefLrcyH2/bN0e5+o7Lh0riim2ad6FzPydioY6TXqgwLyTVi23DL9fSwHvDstX1/eVLPPIfnBhlKSeXwce2l1EenuaSUeLeiGL/Hhcr2/9t8qO6w39Q+iqHXtrVSsuH7ALlV5Ea8Iz6KQTYqG3q5XbjOUevOggpy+2+9TJ5r2gR6TkOStTIE8ajqpNhaK8isYZhZdstGal7VnqoO1CR6GrbHDaOyYa2wonOlNOcKR2ENlQ9sTxqUTvRzw6RO9K3i4tQTfMO4ltDb5iDj4evF0nl0vbEybh5kmNeDSNCexPYWZKUUg57jtkHOWi+buX2VOhuhsBgT46o5kJV1rRvzccbIvK7IYZkL8/e/XsTEo3CaTJwbGTK75jTjNjyotGoF3hYJwzop+leRGnw1z3XStjvsussMPoDtVrBuqCyTOmAVaA07ZYNP8LCtHtYYSu9RKHIntX3SnIDhPLq5NS49U///s/cnMbJtaX0o/lvtbiIyMvOcc5uizDOTv/w8sI0FqpLBQywkS0jMkLEAIxnLDTaiJlCmsZBlaoBUKsnGKnlQIwsJyUKyJRAelOURyEh4DJiH/sYP+3anyYyI3az2Db61duyI3NFl5jm3qDqfdHXvPSczYjer+db3/RoPLQWeVKcbfu6TdSA2Dt86me9SiMfjzwdAcCCCcHYxYNCPAc5L9nfnaGf9sA7VmlhgjSHKMOekOVVJgZjuOXhKbLTnmGv6mSmjS+BhFa1Dm32m5KvEysoVKc2Aj3qHupCIKRl1IWKW7ivicOK87+8qvV8+grylIhZawruAxjlUQkAxhs5TGylwwhte15osEHxEkdhdOY6ZjnIGLDtLrKSUyDIA15XCVaXhIs2ptXXoncOFlpCcLBxIU4vBBQ/rSHHYBKrWMG7xorUIncX/9aTChdaQkkMIDu4DGOd4UmuYAGhJld6mNfjgtocWEVIrBB/QPanTHvW2cvMtHZvFWUALYjH4lJ2vjQMC8Gymsaj1QS2FqcXx0OaUF4zGeLxqCQm/y8p6yMZ8ajJyTmLwOpSX98U51/UmW2YPUevd3SSMS2V8weAiuSwHRDyt9MGT12MqBj/WsxsnQOMNVvKNDH4W7SsEx9VMkxAhiNXBwLDuHbGJ+GY85d8JgfyYbnpH7SgfcFXKJKm/X2U3Pytyg6bxpAUjYHMSVZuXasDd9T4Oas/G+gE8DGDrkLDQBBpubRjaT+faJ4znaIgEEo2R8EmXpUKILLU7CMxsXBhwLM/XBuveo9Ics0S7jmlMPHaF9Y7fkwu4be3gxRYxWhuSdk2MJN637CzmBVUXa03XztjmOg4lzvv+bt+fhwTw5ixZSvQRLzoDKRnmlcBFoVAXBNrN78fy5FGVkpTj6w7p5Kw6Bz0CfhsXUGsBpQRkuo5b6ykZ7z1UY4gJqSRRUEPErXG4LCQuFYHKZ6XC0wtKov5/zy4glMCrxmDZERh5pgVCDOg7jxACXjQGL9Y9WutQKY1SMpgQ8f98skZdKryzqM9+1w+Jt8nNN2hwzjAv1QDOs54oeLUUqItpYbHxJDu3tbTRiCDqqORsUC2tUqb/kI05BBK6qtRdAa2txf+MzW3fKT2zOR6zOnLOdb2JltljtA53NwnOgHXCySCQH08pBLjg6Ky/89mvo315EivqzGRq+zM3at2996hBJoNr42F9hOLUXuksMUKMC1BJHyTTeVvj8art0JmA61rjqtYwPuL52uLZnOGqLiYFOJveEfvGR6ydRyE5LpRCbz16FyFHOJjnKwvGSI6/kBydI88eyRkwYhaOxe9ovXhYBTf/7Mq41NYQqBSJtJnU6mitx1WtUCffo7Z3kIzj3YXEolSIjLAtjPlH97Ybb/aSM7IqcQG99Wisx7NaD6Km3m+YcUoJPJ0puAgwDlwUcuS/dLoa9aHrumsFQdWtpveoCoVZodA5j974JKCnUOjtubK7npwi3ghGqscueU7JJN+ANFd65/GiMegtYW06E/DJykAgYlYqcC5QCMDbACsDFtVGkNJ7aqtpLaEVMa3mhUPniTbe24DriuHDVxYfLRt8dNtRJSgyaEZaSuve4f/cdLiuy7eu4G+D4iGYinMwH/s0IiTDwMqaUjw+JfaW37XYKr/nuE9iMKZDvi4jz3Ou6020zB6K6Zk6EWopwCqGdW8hBMdVpQ6Kk70OXNExUHDvzn/HkxiZGMEibf4hRLxaGxr/nCf/HoZ5SsSrtEFkOq9kxK7yPsJ4Ml6l+3W46RwWpd5axGOMeL7s8Lw14KDWX9M7oJQQPTGXxiaIDMnXJ26YV4UQUJJjbTyK0Ul/PP4eA4OVP0NxDhbp/4uU8JSaD4ycq4ru0RgP44j+vv3OX4+33Xiz70fjr9YCjfVYWw8tGKyLaKwbmGMuAlezAs6T4GnrSL/ooZXeQwk+QO2umEhQnLONgKHggxP3ofXk0LrDEs7KBUpSYtwAxFlau63zeL7q8aoxYJyh4BxSAMF7rH2ElALvXWgIwfGqt3jRGMwKUuZGBEyMqLUYqoEZTzcL5Mf3cm1hvMeHLzvEyCAYMC8UECNuOg8bGrx7OUPTWxjn32hy82ZtOt/GvYLvYFKOxe7GlSmvQrDBA2jr59OCIfmGcuuT67b3AX2iDGbxvHMib4AAhtNHFqib+qzx91sfEGMcyuuHvn/qe9Y9ldYfI869rjIZ1wEYksXHapmd+34nP2P0zrfuE0A/4K3E3s9+jGvYF/ueHYB7v2MtOArJEitv+32QGjRVbMZ/VxeSsBmenJxdJAsDxokRMi8lnKfNLaQN1/oAl9klSInNqsP/etGg6R3hMFyAQ0RnqAqSMTp+NCfywhwiPUfOGWZawPiA3vmD4+/c9WIqpOSYFRIxsYHy98UIzAoJIYh5c2MsbjtHG7xxiOl68/2EhLWoNFkgXFUKl+XG1mLT5tuMl6k/G+4tbfYmAXnz+AuR8CcqVSwKyQZl5ggQsBYkpxF8AEKE5uzBh59D606IVCnMlHfjiGK9KDawg2PrydS6Y5zHqrUwCUaw7h2WnU26RwnrlJIkAoQn6xNJlbYIDik5LrXCrFTQmW0YIprW4UXT46bpSbma0yFnSoriotJ497LEvFIoS4nLSkJIAQ/S1nE+4FXj0fQGMb4ekseheFu5+SaM3VLmUDIFJlVipzQiAGCV9CB4Ki+euzHfF1h77knvTQF4p0TUCknqu7vxOtWQQ4zw6X7DaEM8p3W470Q41k0ax7nl8lPbl1Pl/EOg4HPf8ZRwZCG2ncoFJ0+dzDbJ15JNC4Ek2Aak/+eQSRwOnMGFJBDoA+nmjFhlTe/wvLEAJ/XfkDRNJMicVHASwBubIErOEZBO++OWheBkzsjYGzF3PTQP86bO+UZbZXC/1nJvRfNQ23wXZzTJkkx/dtta9Naj1mKoXtSa2ia9I0HCK9BcKQSxexrjB68pJUUyefV7xQaPzdlj647ifKh4lIptCawCGAQxm5TkCjHtwr77HkxKbgXnUJKjChy3KYG5KNVINZyjc6QWHpDp+5R0eB/BBCXRxnqsjUepFb5NC5SFhg/0e09nxd7xledp8FTN1IIBEbjpHIxtwDgn0UKQqvx9PcPuG2+Tm2/CyBuXTaefvIDEmBQ8obZ/fqJsLwRHrSQBBIvzvWaA+4NDz00M3hSAd6PjkiTnPalAu97tbY88lMm0GzGBUZfGDQDKUnIUSWV0V0Bsn6bJvvbPqbpJD8UVnYLX2QcKHsexdzzVOutdhBREX87fM2ikILmij8C4UpAeTgsyI8xJxkfrHtzT8+qdh/MRz+abllTWDuIAZkoMmwt8AEsgfc5Jg8W4jQmij4S/YQypfYYkeEleQ4cMOsdxDjbp1CRzCuQaQhwShzYlaVThuduCnQJU5/fyYm0QI1CXcjABnmpz6oQpWRmgsdReyoevMfuyVgLr3sOGMICjGSgZK5SA9duJ8bkYsl0a9qDJNcJBDXNMYLo97QEwIDBgNI2Gz6MBiYEFZp3HJ8YhgCrgxpNNzUUh0LkAmQQbZ4UghWUXcFFKuDXhkugZkNVDpqKvXWrtCQGtSKzTJm+0XfuH3eviLN1TjIiRY1Ep+I7BOg8ePS7KAotS4qpWbxWK38bDIy/Wz1c9ekslQsGALkSIhBOodrLoqVPaRSVfCzjUOHK/PuY1cmpi8KY1b6g1kHES7LVo2Ixjlw7c2jCwRJwPWKV/S0HtHMYwOBw7T2B0BqS20cZTZ/Kdl/Ik3aSH4orOxevc5x0/FvOOMYZaCTSJ9l2mQ0LJGbxP+BjG8GyucFXrzfenMV4qgd56UjBO7Jm1Ie2g9+YlygkTxKdz+pze3wXfM3Z4XpyzSZ+bZOb7GieaYzuUDEKejejod77HBSyNGwDVjBFWw/qUhOR3zhkRAyzSJjvC1UWgFGSjUCpqoe6Ov33g6FyZ3k2Mj43J3QSQM7q+dZITyM9PMkArUuQ9pfolBPk+jf3JwIit51L7rCokKkXJzdp4VJpYc8YFLK3HTAtcaIF5IalyyAAkr6/IOK5nGjetRes8nAt4MpO4nhVkOdITTimCrleKTYs2P5stx/XRdRVaoO0dNGOInOF6pnFVSbzqPDoTcFFxXJSaDshv21Jv4zFisGMQdIpinOGyVNSHnSjjP6SNsu+EuLsBCkZl+lWivArhUIaHg37fpObNm9SwmWqp9I5YSxdKobMevSMMRusC3i3vSujHSPLvMQlBMs62Fuypd75PN0mnkvauaNq5QNH7PMP7vONzKnox2RiotDHsjuVSCTyda7xsDG4bg84TiHNeSlwUEheFhtq5b84YhORQIcBzqtSEELE0HgjA00pjXtHmvmuCOCRdZ1RfcpyTON4HFL6baOa1g3OGUgtc7QCqd78nt1ONo2Sm0nKo5vQ2oNZxY2Bqyd9rriV83Ha85kwiJio+kifbePwdAkcDdxl4+80z/aBZcwc0HMniYUzDblzAsxFu5pTqV/6+7E9WaD5UDx1o7jsXYQK1MRmQWHY0/5e9xdNao1Qc7ShRzSKPUgq8cyEGfNhFSW3Zxngw5uEjMB89u91DQ35/xvthLbI+IhqHVe+gFMeTSuHFOuDGRCwqiasSqGcKHqA59Yjr8CnxNrn5BojH1AnJQd4ggjQngK2N61AZ/5w2yimnvvEGuGwtOhtQF3TC8BGPVvF4U5o3b1LDZnfjIZNCogNrKbZUhG1qUXkfyf+FMQjGsHIBLJAH2Sdrj8uSZN7zaTi3qMbXvJvoMlC16jZhsMbv+T4J8X2f4bnv+JRqzzG2y/iZbET9GJ4IhlKIgU7sYtxp9m4SMjIeBWyg6kBdSDytFZ7Oy20zxom5d25b8yw9pnsm6odamvNC3klsptpYhSKsTGZjAjTGGN+Y6GbFXh8iylIi+Djo/ISEBawKYvVke4mp683g6HXv9wosHmp7vmosrODQSmwlgCGQwuN8sGGglqUe0bDHlc5D1a/8nGyI8AhYNgTStoHMhbXieKfWCGCYFRK3naWqvORQnGFlApadBRgb5APGIo8A4S11amPnNToDmw/pI2V/LI9A74jRO8qAccE5QmSYFwqNpaqTDxGKM1wVGu/MS/D8zt5ggvMNwZb61V/9VXzHd3wHyrLE5z//efze7/3ewZ//yle+gr/0l/4SqqrCt3/7t+Onf/qn0XXdG7rax4usnXHTWbxqLW46i3bEOHhI5IU9AFuT/jFbNacwlPJGeaEltBa4mmssKg3O+aOxa8bfM8XIeMwYb5jjeOwW2BQbqZDUR7/tHOlbIJ2G2Ebz42Vn8KIxaIxDYyyazqL3pF0k2EaEbd27gYmz914TdsEkvRBg+j2fy86ZeoZ0v56M/fY8w3Pf8SkMt3NYdvn0XmmJmSYT0WNjuFQC81Ki0BJVUqL9C5fVncTmsWIfC27MXtr9WQ5ssZOmfnbqvk5lA+5eU34viFSJ9CHAhgTQF4Q56ozDbWsRGakjh0iiks6RiedtZ3HbWjS9Q2McjZtR0rbLtpq63krxwUpi37w2CayccVdjVmBrPVyIuCgVFqXCoqJ/X5SK1IInnl++ttwy2poDaW56H3DTWWorhwAfAj5e9vjfNx1uWkOIGUYVsAg6yC5KCZUxR4wN1yklB+PknzY1Z7Ke2kUpJ98leVVZvFz1+OS2xf950eDFqseyMbCOErxa8wSUD9BC4umsxLMLjScXJZ5dFHhnUQKJhPAm41Ov3Pz6r/86vvCFL+CrX/0qPv/5z+MrX/kKvv/7vx9/+Id/iHfffffOz//ar/0afvZnfxZf+9rX8D3f8z34oz/6I/y9v/f3wBjDl7/85U/hDu4fr9N/6HW3as4+9TFSfT3Gwnlo7FULfaTq2JtqgU35/PTOI/iAF40FQMaOUnCEAHCWvJP4hr1iHAGfCyXBOIdkVPHpHS3KxzBPwPR7FgxwLAxgznPveQvAOzI5tAn82Ku7goG7v3/qWDlU7XEuYGUcOD9tDN+n4jSuguWEVKZNcioeOk7PwSYxkILvK7txQ8+miELwg4n6OW3sqWvKlZvWBdgEvr2uNBEhQsTSOHDBUCV36UpKdDLgxdqgSOasOlUzs9iiTGKT4zauHjHjNpXOMGCc2s4N1bpCsDtYM+vCYIsxDskZvCNBwCwOmd99ZtmNn5/3GxJCBLZaRsPnhQgPGmMAYXjAGDjjWBSUHGTMC2MclxUxo0IESkUO8BGUqPJEvR6Dm/exlQ69y9Y4tCZj9zAoUwvu0SdGVq0VZiVJKjBOFg9aKNSSgPcZw/Mth7n58pe/jJ/4iZ/Aj//4jwMAvvrVr+I3f/M38bWvfQ0/+7M/e+fnf+d3fgff+73fix/+4R8GAHzHd3wH/s7f+Tv4b//tv73R635ovAnsxuts1Zy70H8aRpfA61HRfWw37km80s7zytYYQnBc1wTOe9VazAuqZPRpQd1iryDCUd8EPvXZfQK5asFOYi+M33N+ln06XWZQ4bxUJz3L8b1OmRxe11QN2U3wH7LhTy3cGZi67h1eNgaVIiG/PCYOjeGIiJWxqOTGZfuYenJOTA+NwWPj9NRncGryHWPETWsIZGpsxp8iRoaqEPi2y2rSU2vq+47KDuy5JsE5LjQBUWMEuOBEQRaUoGvOEdkG5FopjucrR5ulIhB2CBG1JLFF9C4l+EAMASvjYTzRwq9rjVLR/fcubjG1sn3DTFN1ZwtgX0j0aazfWbckh+bU0sn3lUH+8+Qmn9/reJzPtEBkfKtllL/vqpR47mj8Z0FHKbO8AEetGRTncMBgv1BLDi04mr5DZ9xwkNwFN5/7Loc9StK6Yj3R6FtDa1EpI4KgZ/FsVsB6j9vO4NXKgAsOVMmOxHpcz77FXMGNMfj93/99fPGLXxz+jHOO7/u+78Pv/u7vTv7O93zP9+Df//t/j9/7vd/D5z73OfzJn/wJfuu3fgs/8iM/Mvnzfd+j7/vh/29vbx/3Ju4Z52rR3Cdep9bKucnKmwT9juN1VMce47ke28zGz2vs88MZx/VMDRUYnsrPrQuDTsjGfDWSZg0nIOUGB8VPX/BG79l50uTIYo8CQGsCpLirFXLKvZKw3rbJIYCBoqsF9fgfIzEdL9zZmDWr7fqUDAI0JqbGcAgBrxqDF8sON61DoUjcbF4qxMgOqiefMgb3/Uw2HDznGZySfDe9w8u1JX8lFvFiZeEZUEs6oNgkTvhY7L+payJWPCkzS85gOcO6c8lLi8EDmI/0tThnqHRqzTYGNlHmpWBYtYaSIClSlYQqOTlRXSYdmEKKLfuG1jg0lqqGjfV4d14MonsDKyqNl6l1ixImYhHdNhYmtd96H8ATxGDV04Eg21U0JmBWsAGbdKHlAGKPUZK6cqJ7F5yMVBUno9fLWmOmFZRkg7mx4gyr3uGm6bHqPVzCIIXA0Pi4BW4+J/IeJVLV56Jkw8GG9HMYuOCYKYFVjHh528EHhstawUfgpnfoQ8S7i/K1aTEdik81ufnkk0/gvcd777239efvvfce/uAP/mDyd374h38Yn3zyCf7m3/ybiDHCOYd/+A//If75P//nkz//pS99Cb/0S7/06Nf+0DhXi+acuENZPKOMf2rcJ1k5teLxWC2k+1THzvnuhzzXfZtZBluOqxtTVFaW/j73yPexVxgDCi4gJXlHhUjMoEqdZ6a47BzWxkFx6vOHBB4VyfvsUKVx3706GQaTwyl/nca4gXL/WInp7piIcZNEdJZE6WK4q9HyqjH4aNlDco6nM4W18fjgtsc7IeIzV/XwOVPv04R4cAwC2DtOb1o7iLWd+gyOJd8hRDTOA5w2e+sjnlxwRJCirxTEGHtM9t/uNSECS+MgOe7Yf4QYMQfR4McgV0SGJ3WBGCJRwVOC3FkPYwnHspAC6533GyIBlTsXIBLYVQuGV+serxoLcDoANM7jNiUC42d7TCYg08SN4FgUfLAsWXYOPgRy0mZs1I6kd38hOMkDbLWMGJ7MC8KIhR5KUaXGBqK+l1JApHaPlvQ5N61Faz1KJTEvFGyIeNlaXBQS81LdATcfiq31L+M2YyS7CACFkrT+RKBMtgyzQuG2TQ7iIeCy1mARWPsABGo5ex8h5Zut3HxDAIrPif/6X/8rfvmXfxn/9t/+W/z3//7f8Ru/8Rv4zd/8TfzLf/kvJ3/+i1/8Im5uboZ//tf/+l9v+IqnI28aTe9w09jkvkuaGS5p0ZwbrxOgPBXnWgwcA4Q+9vWfA658k89uCiwsOYPzHh+terxoDAEKk1nldanxpNaotUQ5el5jwbIp4GwMwLNZgUVNIow+Jhn/e5gpVoojxDgAIGcFJVnHwKeHbBpMwkVMgbMZsJUUPJa9w+6YKNIYFpwAoiHGO8/HWo8PbzuYhFXykeGiUHhSK0QwCDACbe9cK+PArbGwqdo1jvFzO2SF0VgPlhKAc5/BPqB3iBExklyE9YFEAzlDDBGvWotlGntNZ+HD+evQKdcEhr1zM0agLuQdkOtFot2vHLVcZUpUGGOoS0GtGuu3PjdbWmjOByyL4Ay3rcWrlvA2tZIgRwZSD959tsfWrZzAFkpsWZZEFrHsLXiad/n787s3E9gcgObbu4sST+YaNjnM14pjUUkITnM9Y4guNOnfXJbkMK4kKVwLzmCSqvYxcDgwvf71zqMQlOxzRglm7zwQgUJRRanWAmBAjORj5RGx7Ema4kKRm/yyJ/+xNx2fauXm2bNnEELgww8/3PrzDz/8EO+///7k7/zCL/wCfuRHfgR//+//fQDAX/krfwXr9Rr/4B/8A/zcz/0cON/O14qiQFEUr+cGHhjnatEci9cJUJ6Kc9ozd6pJJ6jJ5l54CKQpcm6c0zq777O7T5VpCq/UW4/OBgQQhRLYpskfo7IeO10+1ExxVihcJb+x3RbSIczUYWwWqav2LmK3+ldIlk7udze/UwHo+5yad6tcOWGs1LRGy6on/6TLUkIlXEjnA0rBYGMctD/G4G/CSJEGiOYMITkw7yam+blNil0mVo3mU8/u/iD83MrMtgUxkMnksvcAAy6TCWPnAjpD7bvHbGnnazg0N6latT1uGQOWjnRvsvpzJQUWFek73aS1Iif3WT231klxOyVW2gd83Ds471GVihIkzlClxMr66We7l6wwAf4nry2P29ZCgADJLm5+PkaizpcTjuRZduAvPhV42llqcYE0k+7IFDAAjKFUHMvOYm08lCDRSeMCbnqLixME9Patf7UmtWNuKUlyqeqlUxWZGFUktOwDUGmBWaHgAlWVePRYnNgCf+z4VJMbrTW+67u+C1//+tfxgz/4gwCot/31r38dP/mTPzn5O03T3ElghEgOrG+YanafGC+499Wi2fe5b0pc7py216mA3vH1Z1pz50gyvLEe74JOc+dgLU5tnd3n2T0EqLy7sOfvBwMKMXZLP91Z+Vii+dDWJOfke7Tu/ZYlwFHMVAQi6JRayLsCatlfZ1IwMCmhTm1+iNgSFNz6ytG7sUmXo5ZkhLlXoyUZQk5ptPhAOKWQnrMUDPABy96R8aAQsNEP19oah5drQ6dcBtjI8NGywzsxoi4UTKqqXVQbkOU+3ZhKH7fCuM+7zPo7kIC1wIdL2oSfXlCVL8QIxiI+aQwuXNjaWKfk+M9Nfk6dm7tYqc5GzAo1gJ1D0h3y6f0VguO2s1h2DkoSeFdwtvW5WnJUSsCE5A4uUrtXcjTWo9Tnbcb7wP8xUqLogaRJQ9WUzArMCvD7QgiOy1lx8Bnn7+6dx7ozuO3JeZsFaiVpcXzWH1r/eh9xWZLR56JUg+1C/nfecpUUuCgF1jYitgaORaxbCw6OdxYlGZq+4fjU2VJf+MIX8GM/9mP47u/+bnzuc5/DV77yFazX64E99aM/+qP47Gc/iy996UsAgB/4gR/Al7/8Zfz1v/7X8fnPfx5//Md/jF/4hV/AD/zADwxJzjdiTG2GmpN8d8Cm7wzcb/F6E+Jy99nQT62IjK+/H/1OrQUa67Hs3Z1e+ClxCs7H+QBr/ZZ6aUjglOyOvvvsTr6vqerBzsKOSOqsgifl1fRz43cnOT+pSvY68FU5zsFMjem2xlBVqhqJN+bNRgiOSvDJ+5ra/JwLEJzwGvvGYHZCtiEM5f/bYHE9U7geGQGewnYLkcwxryuVKPgutXPont6/FNBawCMO4O+bxgzA64tkdPli3eODmwbzugAHAWNjOsFn/NTuNV1Ux60w7ptcjL+PxYgn1gMg/6pl78BiMmYUgBB3K4mPwUI86z2kDVgpjpqJIXlRjAx+Z5raWJWmhGFeOJiUtFLlcVPxEJxjXhPtvHUEys3YHQRKhO+bqI3B/wyM7DgYAX5tjFiUEuWMbxm3nvL5++Y0Y8QM+z83LT5eGgABqy7CBxpji0JApWR132ecsnfIRHWfeu9kmsnxF5/O8CcfrfCydeCcMEK6kKgLOWn587rjU09ufuiHfggff/wxfvEXfxEffPABvvM7vxO//du/PYCM//RP/3SrUvPzP//zYIzh53/+5/Fnf/ZneOedd/ADP/AD+Ff/6l99WrdwUkxthq0N4CwmrYOHMYgem2o9tWie27o5pyKSr9+4sPU7Lp34lTwOXJ2KQxWNoX2QkqcmebQAydMnAUyrdPob99h3FVdTdXi4RsZwcPEfL+zex+FEuZV0Tby715m8HItj1aHxwrdK5fR5ErET3GOV8BDzUt3ZxKbuaz/DBpAce/1/OkeicNYT9mKmJTrr8aK1KKTALGEmztFoyS2l295hZRwYgGdzjSd1sXWttz3hFSpJ/kr5+o3zWBqPy1mBJzONCGLNMOYH/MY5VhiF5IN/2H2Si/H3zZSARzKhTHiNZUc+RKRRcreS2LvT14J9CdhZbe0Y4awf3qsPAX1HpqRSEk18SF4Ex0Wlj9rCuJTE2ECq3pEBT2YKdXH+tngM/C85w9o6XGiJ8h6fvy8662E9rfmSA42nhO/ZBeHzGhMwd+Hw+k8aADAu7LWnGH/fnX3MBLgYcVEX+PanEfXaEFAaETMtUQiB9p6aWA8JFv889HIeMW5vb3F5eYmbmxssFos38p0hRNx0FsB2hSaDPwvBJ31LzqW7Zorr2NAxJ0qnVjwO0XZvezd5DwCVX3cHrvMBr1pL7C+2vQn2LuCqUlvCUm1SJV31LqmSYuiZZ2bQ+HceyqoaPy/rPG57B5MqRGV6Xlpy6GRImZ9hvi8tNsmYDxGcEQj03UU5LPbH3sWUS/J9392nHQPFmhPVmITU0mlcy8GV+Kq6i2s5FGMn4qU5PAZDjHjRGEpME0MFQGIzOVxWCk9mxVnjZTxOEGhjZ2BY1OquV1Pv8Kcv10MLjrx7gNvGoHcBn7mqcVUrlFoenDv7nkEe61Nz3dqAShN75Zz7CyHiw9sWTe9RaAEg4mVjEH1EXUi8u6i22uWLQmKdFJwPrQX7qtVajhOm4xFjRNM7/OmLdcKBkAs4Zwyt85hpiW+7qs+6510jTzBiENaFREzqwvdZV5wLeNWawccqf88qKYJfVXpYz87Vhppidt50Fi4ErDuHl+sOrQuQCVNVSoG19Xh2ofFti/oOuHzfYaTeqa6O9ab27WOdcYgAXjZ9umZqWc20gBICSjC8d1ntFRI8Nc7Zv/98rJp/zuMoqFIJVIw9mP78GFTrQ7TdU9peU1TCU6tJZRJTa1I1pZBiWAhO9QM6NSHcrb5klsaHnYV3EXVBFZv83eOqUb6vpt+mKnfWw/iIzng44LSKVapYCM7A+d0T+qehD3GfGD9PBlrYxs9Oywgt+aCWek7kZ3TI/2cYgwl4anzAbJR4uEDfj7xxnXERW1U2AIWWk/5TAAmmXZQKq9bBRqIehxjRezIT1IoPz+OUlvF4Po2T+l06u/chgYIjrkJErc7YQCMp7C4qAnHbZNehNVkO5Osb8E7ASWvBeC3RglozL3qPUnHUpRqe4bFkorPkhM0YoCUDGCWNheSQjA/XdE4cEnd8yLrCU2u5tYT3yocmFoBFwlhliYC8Nkwx2k5Z4/K+ojnHGoDkHJelSAeuCME8CgEYSxpNSm37So3fz2WlsOopYfYhok7V1bFZ7ngfIzB6GDSKlOAQDPjIBbSGzD0lZwgRaK1DgDhJEf0x421y8wbilE3+MdoN57QN9qmg7msjGU+tln33wIDJMvmUpPm+thtjVP5/F9T3z73w3d8Zn1rvywrbTTjzSWuemCLzUg4GfpJja9Hm6QT63HoSEUs00whAKTpNIrFvxnGqTP9jCy6+idhWMt5QX8f3HJOfzr2BsCfOo1oK3IYNlX7MwBLysK3AVJxlNcBpo+idx2pNG3BImiyzZBtwyvOYcoTPVgIR28nFgFFL8zDE8+YD+RTRZxWKNrFaCSzTaTyGiNa7AQSd5fSNp+QtP49DLtutcZQ0CfK7CyFi1Tm0xoGl+TO5gafPYRyoFL0D6yN679H5gGe1hhglYOfGLmD5vuvK1vvy5AdlemJMScExr+XQ8ul6i4+XdkhWS8lxXestNt0pEIBBhwZUdbppCeGrJYdMon8AWa4UioDpGx81cWetX1QahSI5hLkScDFumeVqzoAY8Mltj9aRwKYWHJXkWNQas0JhJqkFJUCtdx+o2ic5O/tQ89B4m9y8gbiP4N1Dv+8UqvUdvMKhClOIKPg0bXdWiMFccfezS8lQSAbjI/o0SY5VJDKrZaqK8VissKmNMlebIkOSO6eYqjRpyVGIzeaSS/IsMiyNhdJ8cO8+9Dl3rutTxNQ8JLafJwnONcYPVHEfMiPp/uP91HlUFxLXM4UXrcW6d/SuJBs0Qh7y/bk6uY+pBdBcemdeUmk/BJRSYlFRqb5LwPFjzyPP1SkrgctSAWkzVZxvVcyYYCiEGPRaTpkPW89V0HxXkkNbBhcCXrQGiBhA0EBEDAGv1kkALyU7inPMS5q7xvoBpB9GG5zgfJjT1nncth5Xc713Ax9XJ3rBIQGUiqEOAjZEcHHcB+uUeOi6srW2KgLKdz2JXl6lBAwgL6+bxmJlHC4KQUq+rcFt5/CZyxLXs2Kg4R+7lvzeVp2DCwEcAZ+sLFgAnswlOBP0TpLYJq1EYUvMcHetz8l35/wdAc3WBrxcdvi4cagVOa231uOjlubYhZZYGotVa/EyWHAGXNUKi/T9bys336TxOn2eTomTJu+Rk/Eh2u5t77Y+W3I6CS37gAstadHl7CSWwKGTsg+ntceOxdRGOYiZRRylOwvOMU8YD+M8AmhhCDECLAIBWHcOrLqLofnzVJE5NXafZyFJIK7tA9RoIT5lvB9qm54yjxhjuJ4VKNIpEhEDlXlcZh9/9in4rVPbobkC+T42Fcgskd/2/ujzGM9V7wNWHeGYNGdY9w699UCMsJEo4tYHzAoJD2IXcs7AIs5qeU0913kpYX0EFySCFwA0JiShPErMbCAgamTAk4oPQOcxSL9UHN4TWHVM5bchAhwjF+uJDXxUncgJc+ouUvtzj1bMuXEu23T87PJz211bgxLoPIFtRfqdxnqYECAZ4CP9vOIcrfN4vjIoUpXl1GsplSBzyz6g0gqfkQLek+pxAHBZqy2Q8GCkiWltJRdiauvGO+v5ujX4YNmDCwYXGdbGEUi4ADob8PGyxfOlIeHJ5GvXGId4UWBR6beVm2/W+LTbDqfS/Q6djPfRdsdYiDFANhvbCcEARlUfKQ5TAo+J/T0mK2xqQX8y0wASW+pAEpo3p2Xn0Nlwx5aAc9LqCTHSCegRktnHsqV4XTF+nsbHQdX1VADplHPyLgD11HmUE4xckWQgHM64zF5K2ox7d5p/1blswXEF8pznMSgWM7J96B1VbZyj5KpQfDCDbGzAypKeztP5xsPn0Hw4BPTNPkcZvK1H9ggCIKp767AoFapCw7kAp0ISIeVozQYYf1FK3PYOy9aBLEcxAMzByBhS77QJJSelaOM8dGLX5DVJcIZK8S0H+WNaMafGqevKPip0Tt7GoSVVmtoEgucA4fHS7ynBIRNmSseIyMgWg1SOgS5p8ORxMvVO83PPjur571rrsOocON8mc2ypmg/tyz0CmqPx2SfcU+8jPjPTAGfoeo8OHlpwfNL0CC4ggKj1gjPICLQdmdN+29P44OraufE2uXnD8Wm1HU6dvKecjHfvgdo5wLqzcEnhszUOAkBdqkkq6X0AdPm7H6vFd2ijLE9IJEol4HzAsqdTihRssCUASGDsInk8PSQheR3O5q8j7pvATzkn14qjtxEvTLgDQGV7Et+pyD+37oiFJ8W2R1NrHEJkJ+kVndO2yIloIUmS/5znkefqqqXnwRDhPdB7Uj0upCLrCsbwzkWJQjK0JgyfbX04OB92gb5N7/DcehSCqpFlAoNOHYZ4+nyGiG6EseMMgHEoisyOoc9gjCpWTW8RGMOikNCSHKYjS5gjvkkclp1F7wJ4BIQMQwIK0JrEOceiIjfuc7Rijj7zE9eVfZIePgQIwYe1NcaIdWdhY4QKwG1rIUE4GC0IaDsGZ8dIAp6kvOxgrN8SIpSCI0x4no0PreO1oNZycCjnnE06lm8Mdsn4Uwg+KaCZ1aBtILbjTUNV+t4GlAWHYlSJu+kdJOODdAcHUEmO287B3cNO6KHxNrn5FolTJ+99NijOCch227kBzNY7EqfLp1fgcOvonFPxY7f4JitEJ2yep9gSTDEhzo3HsNV4k1WfcxP4Li3kY+fkl2tLrRgpBgDqfaxEMo34o1U/mJLGSP8OMQ5ViGMJy6lti8dIRDNg/WMfSN3ZBpgQ0FsC0656jwWjilNdEBCUwaYq4WlieDlJ65I5qRwxcNa9R6X41mEojx+XmFWd8bAB20xB6xEYUM3o/eS1RAtOCaoUCIzwd4IzPKkUfMBgKbLsLFadw6KUKLS4M85fd9X72LoyfnYZsyIYAySHMwHGeDhBINvWONx2DvNS4qJUQ2JRMYE143jRGHSGkm3jqYKlJAGrWxMG37a18XjV2qFSd6eCfODQmhWbex8mHcuHscyAwID867t7BWLEbWtgHXBdSXQOWLYWHBE2MPCa48lMo+k9euuwqAhL5BNoflEIlEI8ipDsOfE2ufkWinOSgnM2qBAiwKhHH5IsPjmbA2AMLtF/82K/W54891T8abf4xsH5PW0JcFrC8VCg4yHWzbmn3teRII3ZMNk5OQLwIMOaeUHOySK1/c4VcuwS9iNE0kvyccMYEZwlD6Lt35lKwk+tfD6Wv5uWHJUUCDLgo2UPAQL0Skau1xcsDm3PCKqQ5pbSMTG8cQt5Y3lCXm6CMURBpqUSJEq3TpuU8QEIgBbA2gUozgemIPkhSdgQ0TkCOufrCABKRZt8voZd6nVrPWnolHJgDU1icO65OZ4ydo+6qSfKfYwRax9HLT3AOw/HGayJCIgIPmBeKlykeykUrQUxRjydC4QY8HxtIELEXJO2TJYNUIoo+JAChZLoHWk2ZVPOcRw7tFZaAp2941i+W7Wcabk1Vsd7hXXkQVYqjsVFjQ9uWjxfO/SWWlCfWZR4Ni/Q9Bb//+d2wIB1LsBzhqtKoSyP+1s9drxNbr6F4nUlBSESE+Qi0ahDjKiUQGMdbhtD1MiIBDrc+MKMf398Kh4WIhDo8BCY76GiUI8R51aSzjndP8RWg6odFq0JkJLdYd3kk+CxisLrbIttsWE4fT5YkpUHbagysWFijGidh/MCmp8GTO4cLcBFIFFIShADGkvAXtpQtn9vnzL0vk0kO6YH93j+bhmwriRVNGwgf7EGDnPOIBmDCbTxUAUx2THE/ZSUECKpabON83oeW9k9m+454qa1KCVH01nc9OQOfVEpaEUYETgHIUkrBUAyUeT4eNnh5TJASDbJogKwNV7zemScB49AobfH1EEdrTNanueM3X1JFGeUDGexw5y8frzswRjw3lUNWTI0zuFmbcnX6c69RJRa4v96OseTuUXnAxgS/oZhQ5seXUsWMN031w+tP2PH8i2wc/C46RwW1b6qpdi8G0mWOD4CjQ0otMSzeQEXUtu1UHCBMF+r3sG4CN8R1f2ikLiqC9TqzRMp3iY334Lx2LifXRpwFqVb9xZ9CNBpYSYKLJ3WxqfY/PvWh2FDoj506iWDTnzfqNgTlk5VIl3DsVbUKaf7sSrvuQDqsa3Eq7Uh2wKXbAsSnqJ3AcvObX3nQ643x9nVnST97sKGDcNZ9qci88hCkzFgVnlVnKOO8eh736pSyJjMDAmsetNaVEpCS8Lj+EALesBGmRXYNufc3UTIiymgtRGtSy0k43FRbTvY38ffLSdTvaWKSAxAYJHUfxng0yGCMaDWlHDcdHZyXuzOG+s8nI+otABP1RPGNkyr25bUaksloLXEFc96LAJ1qcgHLd1vBh/bENGsesQAzEuqkI1ZVIdaxpyTZIKQ4WwdrUNjYJzcK8UfVEnLEQFEviH+xEACjbUi1hPnDDOm0KmAtfEo1Cap29VjuqwLXIQ44FE4Y3Bxv1nsvsrHqezSbYFVagfuHg13x2p+N7NKoesd1jYMJrOt8Zgl76pV71Argf/7/UusWofb3qLgHPOZpsrNpyBG+ja5eRsPjqlTrfEBMTK8f1GiLtQw4ayfVuktJcfzVU/uuYrULrsQIXwcTNceq+R/LM7ZoCcTrgMb77E2kxYkjjX+vBgCMh7vFAB1fk6RbRgPL5PfUSXI9DBEagUdqyjsu94QPVbGUWtC8rPbX+Ofb61H7wNmkqOUDI0NSQCQo9JUFVlOqLwCh9/7OOnOi+tNY/Cqs9Cc4TIZU75oLZa9RaklaiWwKOXeZIEwJMTqummJ6qwFgT4ZZ+hsgOAO80oP13Fff7dBsdtItIbAmpKz5EVFraurSsOGuxpTy5ZAnLNC3fGB4gzwwcGkzc34iKrIzDGPtveYFyKJ73nUBbUsTIgoA4nEhRCwttQqI/q3x/PG4mmtsKg3TtY+RDDOkoHl/ns91l7Zp6M1NQamkvs5l+AptSQm0vk+dYOSMyfckElJwExxaCW2EoKZFnjVWvRuW0hyPGfJzsI/aK7vPsMpdilnG7LHAA2ItDbswnz3VS0rJWBdQJHall2knzE+oOkduGBQpYAWAphxqIIOs3MlB++0Nx1vk5u38Sixe6qNoB7tvFQYG5/uO8XqVO3gIi2EnOGyVBCcqLSKh0cr+e+L1+l6nuNYm6kx25YOLpCxas4PzgGMCsbRC1JMZXHTlggxGXVyPtn2O3S9wzOyxLBg6RSX3aunROem2l9T0u9NkuZfVApPa0qI+xDxam0gORtUXulzjr/37Q2TxhjjDAutcDWjz1/3HvOCWqWlFmAxj8/9DCrjA8nrhzgAoBsTCONQCKysh5IeWt5V1z4nYgQKJfDOrECTWHd5Q4oj5kxn9lsxLHyAcwRQzSBYyTlmpUJIeI+cuBAFn+YtmUfSRr2rNE1GrxyXmiNgAxCuJU+sng0+RvB4ctVqX3tlSkfr0NzfTe4ZA56vemqRSTF4wM21AD+hvZlj3AYv1aYF+BJUydmitAui63PG9s7ZznqiySchxACcNddPumbOtsgeWfrAuIBKJjxkxORY3dVBCiHiVdNj1XlUhcC7CwUG4LY1UJHm2UvnUBUC8+RP1doAzv2jHj5PjbfJzdt4lNgtjSICS+7gSadriH2n2AhixsySvPzYFbl35GPyGOJ9h+J1up7nOARMZeyueNb4Z84FjFK7jGOVTui9p5YMUgsiYFv+f6pitXu9nfWpvUOGrz5E3DYWHqTjQlo1hJPZ1/5yLmBlyKB0Svr9slCDsaa2Hj5vzuJ4krx7D+MNs3X0Lq9nCloKLNOGmcG0Wdn3prV7GVQ5yR4DoMfJ1lyLoaV6yuY09cx3k2zO0jUwBp/alGXBB3n7Q1YMLgQsWwvrPLgQQ9JeCKJpC8FRaI4q3J23Ks2DXaVp5wOUIOftjLFDstwwfvudnFO12tdeOclTDJsxvJvcd8ahDwEyUiXR+DBUXpQ8I7nhxGLbtYaRCRw9JhSEAFzXeq8MgLUenyy7ZElBeLNSclKaZuykuX5K7JI9bEpEJSfQOFKFS3OGqpBHHednpQI4R50wPKvOog+AFCR9IQQjewwX0nx/vMPnufE2uXkbjxrj0mgZTtOjGQMdA7YdZwfRKc4h+P6e/JuQXwe2Df6OVWGcD+BxW+PmUPl9Sjxr/HlgOAqg3k1G8qZqrUPXBbgi4kIn/FN6F4ztxzPk6112DsZ7dD0lINYFME4brvUkta8Fw8r4IWnZbX/lltu6J2GvKp0Gc1UnS7+Pc1QpOFTyxRlvQ6eIq41bSYWMcF4MuIixP9MYTBtjPMigykn2GAAtBRv+3oZILJkjm9Oh651Ksn0gzZBCiZ3kc4PJEmyjlMtAVgyVlLiBwSeNwbNZOXzebetQF2J4fvvm7ZTS9FxK9D7PRT78nrIMxtImL2I8u2q1jyhwjnDnbnKvOMNLG2ijSzgTxhiqgsOEiCqctunm99V7qoS21kNyhlkh8XS+X/iTse1WUf6cj1cdPrjtMNMCMyYRGU+O5xyM8y3144fEFNmjd35IiutSwqVqXCE4Ki33emw5Sbg0LTgZBFuqzl6XEkiVnqqQg59UcaI57OuKt8nN23htcYxFtA/oOCsl1I5hppT85GTpPnEoUaHNZrtnnaX8pxbd7Aa8pIrwnfbWofL7WDwrx7kJnGRAa8Jw/VJwXNYFFlUAExwASwyb/ZvpmBIaY4QPAcveYdlaFAKQQmCmZEpiAj5cEwU0MIZScFjhaeMTfGh/5ZYbY9TD94FAvgBVdc5lKR0TVxtX3ejULVBH+nPGMAmmtQHJCXv7me4m2WM7ACAbYcbBDkDKw0novuvN7JZJ89oQUaVnswV0Ts/HgRJqyRlcBN0TS4wwj+QLlTDAB6x+TlGa5mkDHL8TwTmuZ5RUnNNSOdYOPnUMAHcTIfKAY0P7lapDVJ0wSZ8KAXeqK7v2CmNg8qLWg25NITjqggDkpwh/Zk0n66klCDC0NqBOVbRV7yAZg48bFtVDSBO7ZA8Eqt7ENF7zHPEJY6YFnzzkheDRGg8mGJQQKBWD8RtJhQgAqWqVBQNpTjzMLPch8Ta5+RaIT0u2/xj1fHeB5wno2Fk/KHiOF8fX6c916HRofUAMuMu4KDC56Da9Q4xAqRmkYHc22oPKyCcs4sdaGc4HuBjgDbUPqJLCACYRku+MTi2beMSkj9RJA0qdZO5DxK2xuNR8MAX1PoILoPMeLDC00cEGkgN4f1FSuR7Y2rTzwpqvm3O2hSMZxzniasfagwNI15E/kx+BafN7vhxK+NPvICePUpIdwLJ3MDZgUZ1mB3DoehvnwQJRoseRk+xlZ2ACbRp548sJeWNIaykmC5DctmKcwNOM0abDOSkFM8YmT9SnSEbs86LKY+qc9eaUdvCpc383EeKMQSkB5hguKolaq4HYwBm18UyIW+06gKowzgcaEzGiM6TgO+cSkotBt2Zc/dnHQh0zH3NLU3EOrkkLJgaaA2WM+GTZoZACs6gGHzTn+NazOCemBPl652GNBxe05onU+lv1DpXi8JFtYez6hK9rLYk7IjI6gHLSpDI24LKmBG/de7jcwkxj8dPy03ub3HwTx30Asq8jEZqa9FMLvE4iVSFEXBTyDqX6sXR6JrEle06H1gUwYCOshe2Nc1FIoNgsuix/1o6uxNRGO/VcDi3ip7YySkVy7dZRKwEM6D2gJEOhN5LxnFN1ZW9rzXg0PLWG0r1cVAq3HcnDex3gI5kBPq01LYDew0VKnjhApz1GoOHeUwsHwGBRkRfNUothQ556V4dsDM5VDzYhggV61oWM5JPjKBHMmAMCd29k6cd065w8OkPfCxAduzgRv3Hoei1BoiargcvWwKXktJACTnLa+EqZ5oWAFlQJyG0dwoFQ4lEXCi5QRW/AtR04UR+SjDg0FxnD0RbE7oZ/LDE9Z+5vCdCl56w4S+vLxp6Cszj4YOWk6sXaIEZgXikCyVuP4CKAAK3EpqKp5dGWy8DaMh4+UaB6T55YPWfgjKpcxno0zsNaBxsjnpQSM03tHevjnWdxbuw+D4BsIMgIOasUU1vYOnJ9N6A5mjFcEXRYqbRAZ4hQoCXNlcBzWxcQPKJxARWnqmHGhn0a8Ta5+SaOcwCyb1pD5uCGNOqDTzk431en59g9TiUWleLoHfbiYCK2peFDIMXYMW6IMEVJ6VMdFqA7tIjv64VPtTIkB/oQ8EnnEUAMmTmjU2cWsiOA7HRrzQXaRGPcvvdaS1xWEivj0DmquBSSk19QBN6rNHzC5BgfqBcPwqi4uMFMMcZQ5iqWErgq9VYr55zxeB/1YK344NKtBYEpczVr8zI2svSNoVaCVmJIHm8bg4iIq0oP8gfL9rh2UL5ek8bYAJxNrQPNKUEZJ9m3jcHLtYFKjCTXO0jHkhIsHza+eakghd8aw9czBecjVj1R27PS8PXsrqDmuXHuXNx9r+dqA53yfbtziEEN8gpb8zpVGAZj0JRU+tSG7VxAJQUsD1i2HkUg8G/nArSknzsEyG+Nw4u1obkEWvO6pONUSIHG0OGCMWKHWhdwKThmBakay5Tk+VQ9vi9uZfd5FJzhw2WfJKYIG+VcAGcRS+Oogm6A2nC4mAxP0/pYKgnB+XAAFRVJDbxqLVpDBq4zKTDTApXkUBOqym8q3iY336RxLpPnTWnI5Di0IU2Vix8j0Tp2j1OJBQC4aI9unHnRDSwO9yU5JSTL1uK2dyRWFyOe1Hqv9sM+UOWh99lajwBSic3RW48uGfpxTifXMb5lDFLOFasQPSjtIapxpQRMiFv3LgRPMvpUmtac41Wk71OMDffVGwduHRQn7Zdh0dzR8IiJSr6LUTlnPJ6Cydh9fm1KVoQg8A1jbKhmAVReZ5wqULetwcerHqXiuK5LBBkH6i4iEsA0DiwpH8lfaJ+9BWNEl3/ZWrBEw1WcJVXiXL1yaK2HdwQMtj4x1CQlVj5Qu4CDtIaM5IOL9i5rMSLipjVoOr/5PrUR1DzX2PNQHKv87r5X48NZ2kCnWpbszqFK8K15HSIJLxajOe0DMausp3nTGwINc8bQ9B4uBFwk3abe8cHhfAqQrznDTWvQ24BCi2FMtr3DTWPw7mW15XBeKY5ScMSdqp3gDJ2hyuZDcSt5jZqXCk2yuwgxpNYU0FtqYV6UEp2lNlXnPa7rIiU2tL6MD6CMJY8tMFI7Tu3TT1qLwvjBiPXTEFp9m9x8k8Y5sv0P9S+6TxzakKbKxQ9NtM65x93T4Tku5OP7yolN0ztwyVBL6rE/Xxk8u2Bb93KsUnHofXoHML5ZFPO9gpGnT1Yuy/Luxc6pM1M/b1pa2JXguCwlKdi6MAkcfTrXYHzT0hKgFohNlTaiXad2guKbRfAEDY/7jMejuJzR8wshDjL3gvPh5yMItxJB1Q1vI16uunQqDbiqJQpu4RS1hDiorRYjoJUYcDvLzmFeOFykzToEwm9k/RfaPIE6YWKMD+j6iMtaDpuDCREB9F5FjIiMoUw4mXyqDyHgk5VBSOho5cJozADWJTFIF7A0HqXgmBVyAAUb5/GqMdAJJ3PsEHEosTil0jb1XgtJ2kC3xg3VgawSnW0tELDlQ7Xv808BJg/zOtxV/jYupAQXqJXEqrV41QbMNMdlRZo1t71HIQMWlUatxV5A/k1r8bI1WJR6awxfVArLPotDksO5BOncNI6ICH1qg2WcFQJQy7vaM/ddk4XguKr1oLEjGcOrlphPmnGsDc2HWhNWqdQCldqsVeMDaOfDRihRSFgfJo1YgddzSD4Ub5Obb9K4L31yHKf6F913su1tA+2Ui49Rsk+5lofc47lA5gxavWkNGuugNen3lKPNrEkn5pPZPqP3Kdjm/n2MEHK7lYEEAhScmCEMVIngnJ5R7z1Y3PgRtcYjRIZFkvYPkf7pXTgJOJrL/q8ag2VH2jEcZPXAQG2nQgnYVLY5RpN2PsBaP+ByTnlXxzAZ4+fH0ljJwmV5PjBGycraOjAwWOfRWGoVOUHPsC4DuE/qrCGg9wF1QZo4WdJAcAKaeh+oZN8YvGwMjAsDbXxRaSwqnQDbDg08lr2HCR0QgTo5OpsQsM5aP4LaBEjzo+ktVr3D+9clKrXtoo30zoUgMcIQIhxSAizpufiUiF1LjlLedeHOcUricpKlyMQcjJHGs7Uetz5iJTlR3iVH74E2J55JuVemKpfxAUsbtj7/IdU+DtCcFMRayhpQAQGdAa5qDq1kSsA4LkvSYtqXiBvBYGxA1NucNM4YSilxWSgIQa1JEyLWLsA4wuZoweAy4J4BT2YKlRZb1SGG4wa4h9bDLRyO9Wg6CzBACTk8Ozof0UHO8ukDaBZK5Jxh2Tn4EBIeaduI9dPQunmb3HyTxqml+of6Fz0EozO1IU2Vi4G0se2hZGcA6KFrOSfZO+U6D03S7AI8UwIRCrXaLECCA9xjq4d+aqWiEGyrh5+fy5OZTnTn9D58UiCW22C+Ve+SKBwbTp1T3w1gsMlQnMDEivM7CckYOFoJosbPC4fGedw0ZJyXExuAxBx76xGUGJhW4xjL5i97sjaYFxtV4lPe1T5Mxng+ML6pBOTWwoZBQ0aaMST/qAjMS4UYDFpLbSfjPFwMEGBgAfDeY51k9I2PmGlOPjwMuO2oDeEjUAiOznvcdB6MURuJgdoBKjFjOhuA1N5iCdtgQ0Dv/dBe9CFi3TusjMfTucJ1VWy5aDfW05xO7zQEMk50PgyVOwBYG0+mooKer2CAY+cn3qeO36k52FmPpfGYFQqXlYKLEU3nEGLArBQoUgLwsrWoJOFT1hmvEyOs93g2J6PRh1T7Wkf6Tc8u6FmurUcEsCgkfABiGlNXNeFhhgLQnkNTKQW05Gi9h/B8EEDsfECtBbQSZHUxqlBzBqw9ie5Vae5UihzD8zvICuC3PbUtZ4XAO7MSdSFPrmDR3GWDlchtCDCpQkaeaQQmdgzgnGOmBBwweQDNQokMQGQkzkmHOAzvnKWK8ZvWunmb3HwTx76Kw5QC5X39ix6jdXSsXAxsKNkhLdq5epHbP4fk8vN3nNNeOnqdx36WMQjJAUunsLyV+9RuUIJvgIhnVJVSLrrBxqQ8ZzcBq7RAa8OgOyEER60kKk2AxXy/fo/ys2DAsrVwgfQ2xgvkvhBJtbZyaeNPSR5Rad2QXAk5bXw5HlMXpcRt73DTWCwqkvt3yc7h2LvKbSBg28R0PB8AwMWIuUpg6MSg0ZIhtrR5rFpH8yIS8LPm1Op50TnMColFKeDh8eGNhQskDPek1smOgYDeNhKOoeQEBBaOwziq1qx7GneD6F5qHdoQ8Kp1uKpIW4Z7YMUYYgwQQkFwYrQsaoXPLKo7ys1rQw7bWm6P/ZULScAtWS74gKuKQMXrzqYWG4m+SVD1iIEdTRpOHb+kNUQKvyFS62KVPMPmtYSSAiJErOAQQ4RILTjBGVgE2uQ4TerADOvO4ZPewYSAeanONi0dz5mxwKMSHEoIsHSIkoKwUJJz+DThBqzdnkNTACkU2+SNx6m7hIJzXKVrnGSLVnTAu9Abtug4eXTO4/mqR2Mp+X++jFg2Ft92VeHJvARjDE3vBhXlY2uz8QG9JwwZA1HC8z+MMwhQojMTfPIASuKbjCqT1mPZWAQfUBUKl2VSJD/hUPI64m1y800c+yoOU6yb+/oXPTZGZy8l2yZRqBBgPAb8AiItHpe1Pnotr1MnZxzZEM/5gNZYLJs4tHL6EFEk+fKNyuzhqhIiYCyd8uaVIlG2UVuq92RoONbaEJwNlZx8r1mDZZxQ7PvupnfobEBZyEFm/tTkVUrCdqx7ku13zuO2dYgcWJTUYptyQR+PKfIEYlh2Fh+tOpRSQks6MfJ0OtytEMYY0Rq3xdyolcBlpVBIgQgMlPK5FkNLIHsjzQoB7wNCIBxCIQl/0LYOs4K8gpyPmGmJZ7VCAIcQEWARs1JASZ5sCzgKEdFaDx7p5CrSu5aCzEGdj2ishRYSpeRwkQDcfdJWATAANsHYgN0oFFlEzEtF+KidCpjxgdg3bPud5spN64gOLBjDvJAQnOHlusdN68BA7CWfALVVL1FqcTxpONQy5Rvl512FX4CSostKDdU9SkIogR+SIkatvBedx/WM2H6dcWhtIMmBoTV2P9PSXYFHgNqHheS47RxKze6Iih6TkPA+4qrWlGxYP2DZ6gTM3bXN2H6um7mcn4kPEYozvGptSg6pWmoCtYf+zy3p4zDG8NGqJ1ZUEAgybq174/UwzzklORaVJnmHCHTOoW0dqlRhveksSslRJzHMAQPlPAqRxl/MFjocXU9YHBYpcZKM4elcv3Gtm7fJzbdAjCsO+xMTinP9i8bxWFLbk1gczdE1dOJTgk7bPkS0zqMxDte13vqMqWvZl+yFQNTPx9L2yRWIQgm8d1HixdrgpiMX5utZgatKbSVU+xZI5wIEB5bGoXcey85irgVqrQYWCIvTJd9TW2lT321cwMp61IUYtFvOTV7z/TXG4za5Bmcdmynjy90xla/fp/bQvJSok4rxviSrsx7PVwat99CMgXE63a87i1mpqDIwqkApKQZPpbwBf9gYBFB1TTBA8gjPI142DrfG4UlR4P2rAjJtJMQy8ai0SIaaHrOCdGd6SwaycagAJBNKKaABaC4QEcmyIT2b0FvSCZH0NnNFaV5IMM4xV4JsODgf3MCtDxAMA7W9VHTi74zfUvuWQuDdUg0WDr3z+Oi2w/OmR8mJ3XXbWto4VRw918NJQ26ZPl8ZuJScBGBrUxsfqLLCr7EensfhWQK07gRsG1FyTpVaHwgb45OFBxi5b/uUrD3UtHR33dFK4JmkHuahw9ChQxP5u4mh/Z/lFc5pk+efJc0cl9SFgcYRSL2MwLIJ+ER3KBS1CWstECIGhmSpxF0iyRhkr+jnNSOcTWeJECAQsewsXqYxmqtOJiktC8EQfIBObL15EdA5j97S/NaKKpefRrxNbr7JYxdUdiwxuY9/UY7HKj9OYnFCxCfRgGFzfVIwcEsu4i5GjM+Wh64lJ3v5pP9Y2j65HdIYPySPWgqUWqE1DgzAk1kxKc0/tUAKnlyCGSF8m97hdm1xVXssktP2sWd+Sitt97sRyWdmXmwvD+ckr/kdCsZgA+mFHDK+nBpTWR2ZsAdyC1cydQpdG4e1sQgBCOmZ9M7BOmpr1VoiAHdsGfK9LFsC6M7S2HvpPNo+IjJK7jhjYJyo1YRj4eCSMEUhxuHUnfWPai3gfYTpLDrvIZ2HRYQEbfDXtaYS/0h0TwmOSvD03DYVJcYA4zzWLFt6UFug1hy9J3ZO7wPmBWE0qBo7rfadx7YWHASlYgAntlhOjMBYqhbwk5MGxijZTnv4oKEzyZJS2dHcwbqNVYiP00aUWgo8qTV8BJwjWrbihMPzoGSvkNT2OtW0dN+YnTr8HDogHDtIMEbtzN0KTiHITf5YmzwfQLrewfqU4IDwbnWRxDCdx01r8a6WZF4Z6BAYvMeyD0NCPJU0ubCp7rSG8G4xAM57vHLEBNQpufo4Pde6IDmJm87iRWPxpFZYVAq3LeHYtOTkRi84qkJuVZffVLxNbr5JYx+obJ8f0jm6Eo+BXzk7GGmOWB+3ZPF5Pr1NIPqPXctj4YbGz7p3HuveYZEmf6ag1oW8Ywq5dXvsrj7J0jhITuyhPrVD1sxhbRyJfvkALcSDn/nUdwtxuqP7OHbHixSk3HvM+HJqTPWeNECua7V1f5NyBpFOmK0NqLNCs6fKBk9w0I244t3kyLmANumaMM5RCoa61HgSqXIxLzcsklvjUQvCGLF0X52JkILMLUOMWHUOT2cKVS0hEyaBqgEc15XGVdI6ArAjusfxmasKztOJN+vprDt7x9KjMQGzQuBCUzut1nJo72iOg2rfSM+jUBJPagzvYJ2eb5vYajy1rw45nRMDL2JWTrdMJd/v6q1EwoXETTt8yojyolKYlxKrpJZrnU/u85v22tJ41ErgqtIPctTePRCcirWb+rkQIladwcvGIoDmUwuPpnN4MlOYFeKkNnmpBBaVwouVwAdth0ILXNUbVlLBgJVxWBgP6zxerS0cCOjbu4jrWuEvXNdgbHME3J5zSIelkCo/HEIIFAn3ZBP2TApq70pOB7eMTQLbjMlSURLFJLEGlSetrbeA4rfxKLF3497jh7SbDNxHzXd3YjpHLsqSHzcSHMfUd2tOegvCha2FsFQcSkqUkgTnTj2xPSZuaPysKynQGsKYZBVe4PSqVl4gnQ9Dnz1rshSlguAEwvQuoGcMl6U6+WR6LMaL87kmpYfGy6mJ8O6Y4oyAxSLTrCewHJsLIPq6SHgTgtwmAHfe6NLPj5MjFun9rYzDq86CRaLlUoWCKgqMMcxKRRVE6+GdR+ABbecQRdaHAQzImFFLgVqBkiQl8f6lxLN5OeDEdhON3VM/YxtNlz55G4GR2OHUWBWKKi16qho7wmLded8sYUkkh/VUjfIxoOsDBCemDk8HikNO5+Nq8NgFO7dMgQNszKTImz9ny2dtJ1GOMQ4YlhAiECNKlSQWIsDS2WHf/b7JGFsvfHDToHcRi1KiLMi3rHUeN53D+4vqoIjieNzPSoXPPqmx6hz6SDhJRKJby0QgyABoE2kNUoKhVBIM1KKqrd86uA0VG+tx21iygUjO6SIQUzCD+U0IafxtPMmk5FhUCs/XBj4GSJ4qbiD1bClIqHBR8aNr32PH2+TmmzCObdy7fkhTycB91Hw3LQLSPLnptkXhrmoNzo8nOVPf3VoyupNCQMQICCp+Z0fnSsst/MRRRs0j4YamnvW8kLjpqMWh0sn73KrWINGfTlI6bRxKCpJoTzozxT1baMfiXPD11Dtbdg4uVRSOjTdgurzfSbeX/r71LBlQCg7DGW4aA4YIEyNuO4OSC2i5GRPjRHNDsSU9HufJJsM6Ypo11qOUHCEEeADGOkREMHAUiqFzHqveQyuOmRCYlRKzxOjK40gKftByA5gQjkw0fe8B5yN6G6BFSHL920kacL6UQ/7OUnJYy9B5ohbftBa98Xj/skCpNiyyWSH2HlCOtaml4CjHYN1RgpuF+nYVuaeeybjV6WYFAMBGDIDwRbXfDPR1x27FMo8rHynhKFOrqHcBlZYoY0RriHSglbhzvfsOC/NC4S88m+GmMeg9AbgJoBxQKWoxrq1DIQQqRVXuWglIKbDuHSrttmj++ZmGEGEEx0JxBEfA83VPquKlViQCmg5dDNtjihJUqkAJzmBiRCUYOAdcsp3Rn0LC+Ta5+XMS54jlHdu4d/2QpsTw7qvmCwCvGoNPVgZaclykdsxHyx4uBDybV1s4ibuJ0f7vptNawMr4raQp3+e+8vFka+2RcENTzzqbXC47R7YESpzNysobz7Ijc0rniaIwJEnp2byu09BUqyqDIRnbfqbANq01putdG4dlH3FVEcBxUciNYeOBMbz7HmOk02D+chGnqxBVIdFb0n8xjhRgL5REEHS92UcnP8Pd6w4hoomAVkTN1pJhuSaALSNkCpQQ4AyoSoXrUhO+ihHNWwoOG4i9J8EfhD/rbNZAIZ2hzhM9Pb8X4LTk4VhCXSoShwup4vT+pUQMAYEx3HYO81IdHbuntKm3NGUSU4oDW0J9p+LdpODQ6RlUO20w4PCceGxj4H1V5t7TuOKRE6WaJ5PMtH5GYG+LGth/uJwVAk9mBZQQJKDHSGriZm1xVVFVaGksVj253ldaoi7oILS2HlVn6ZCJ7fXeBNJCEozBlAHSevgQcNOT8S1DhI+ACYALQNNb1IWEj0AIwJO6QOcCnPfojMfaeqzXBhzARSG3rGHeVLxNbr7B4z5ieadu3HuTgQdUNZwLuOkctOSotEzI/ojGEFaEgw8guN7f9Y469N2vOg8tqAyaGRkhCU9V+u6p8tCzAwDJgNZswIz3wQ1NPetcYbma8S29inMjX6cL5POiBcdM07Wde533XdQzGDI/Q84wJBkZqCoZMVgy3iOX4xVncGEkwV6ch2XaSnQZlcZlwox1LqBU20l2ITgiOJ7OigGXglikKg7QGw8h+bBZ79Jxy9H1t71LG4lElxIWLThqnawKQCdUrQUuBUvOyRhYSzMtcVEe1+Q5et/jamBjh3GwWw28r8xBjNQ+u6701tqQAfAX+q7v11SM2XHZSX38/YO1QoiwNmJtLJwDZpUkTE/EyXi3rWRKnDZ3X5cx8GTFsnfwPmBRa8TIUCeTTJ3wWL338C6iLsQkeeOUyvtFKYd7kZzat1IKSM6xsB7r1oIxAc456V15wimtFEcMEYFtC6eO24plYk49mxdYJUHFtYlYVBJPZnpItHyIqEfJL+cenywdLIC5lnQocxFKCtgQ33iy8Ta5+QaLfeXNc0Cv5wJ+d7/zIVUNF0in46KgxOZV0tCICEQx7gxaS33beaXu3FOR6Lq73208tQlqzQd6MrBR0p3CyEw9u1XnaOFOfWQXA7yhKtDugnxK7AqTZU2Y/Kz1A04sGxVRjovCwfiNQ++suCuoN5XAHAKWn1JFGT9DxRmWncGq91hUChelGlqGPlCVQTAMGKEIJL0Q0mbZon6fkGyFGLFuLfoQUAiBWhOw1aR7WZRqK8kmRWba+EMyiCwlyQZ0jgQAtRzrC223c/LCbp0HFxyRMxSFwoxeBokZSo5C0PVbHzDT5LQOUGLh0n1V6rDg4aGYSvALJbCoIinTOlIQ3k0ezlHR3vqutJEyECOLTuBUMay0wFyo0xMAhsFJfTda40jszQesOnJPjx1tznWhcB+pgYe0TV+XXx0x4DxVaZTARaVo/Nu0xgVi2l1WavI+71N571VqgzEaewyEzStlgGASIZBdQ/ARL5seSsmtShMQB92a/AxXfYRWAowJXM44Lks9MB5L7Tdig+k6teAkdxDZQHe/rOnv39ovfAvHsfLmuaDXUyb/Y4BAd0Mmuf5c4bnpHASnIrSSDM4DrXMoU+/8Lr13+rtz33YSNDlRTdq38PTG4bb1uJoTlVoKDusCCrmt3DsVuxvylDCZ5ASk22cIeZ/qSVb+3ff7h97j7qJufcDzVU9J2Uj3ZSrZyc+QJ8ZWazxuOosYIpqeYaY3AFdnAqwNcIKqOJTAYBgvGVxKujVxv0FoukcGUqR90Rr6s4IWffKoQqrK7DwnzlGXavB3yveSW5jjxAaYPgSsOyrpz0uJmZawjsb9RSEJG5HaH4F6VSkx4ii1hJYk3sgZw6y4mxCc+v73VQOlFLgEYcy0nMbAnMrsyeOmtx5L44a2nQ9xoPnGgERT90cTgPE4m03oEZHXmkVvA4Rkg0J3bwOWrUWp5Fl4t3OSuccWHc3vMYTpJEQnEUqX5kGpBOalAosMWjHMy43p5lTcp/I+Xu8F57iaSfjgwQRHYAx1QfRz4wNuGocni43R64u1hfUeLgBKUnVYCp7mN2ADCUyOx7NOa/z4NWU2IgfQ+oAYARMiWAIov2VLfYvGsfLmOE5ZBE6Z/IdOM/ctc0tJOJiPlj1aQzLqUQDOkwGcVBxN61DGuHX943ua+u6LQqJP1ZuTKOyjE2lmqZBPD/GbtxMrwO1slOPYlzxQuy1sCZM5n7QdzjQePCX2bVz73mPupY8X9RAInMrTJmRDwAc3PbTkKJScbBGGQG7JiCSWxlMbZpacrzOlt5SkmOoC2U1kX6jxe8rOy7vXmpkw+RlZ59FZD8EpYXYhwPX0fAUn+f3xo8gbjuYM7VDhwhYgdmoD2xprxqN1RPu+KCk5mRcSL1uD297iqeDwHFuYnXFilFkitRYnJ59T738q6bI+kLs8Z4AjFlQZHtZWybieQvI0hhwiA4Sltmq2ulgZB3WA8XhK8uCSWaxWnOjLnNrBWnI0SbcmWy2cg1M6JZl7LPLA7nvMlS7OsOWV5kLEbDA+JQXsSktclmSnkV3ZD93TuYfL7fWevltwMczNQbcISNi5jbhkH4hxdVkKtC7gVWsxLySuaw0tOG57d7LYII1TD6XIKyvEiNuWBEHfsqW+BePU8maOc0Cvh0C2hxckca8yNwBc1RouBPwv42C8h2IcT2bkgpzBoX4ERt29p32JGU8qp8cm/O6JtEiVqLy5arlNSzy2yO1jAmUH3F1hMhMiqrA5Db6OkniOQ++xcR4sAIUWWz+rVQLPGod1TxRozRnevWDgSmy1CBkjg0UtODij05oLAUqwEX2YGEGz1MLRnKE1YShh5wSjUvxOspWv9VVrIRmHUmQOuXIBNsbB1DFEoPck636tBMpCDqrC4w2HM4AzWrh7F48m5eOxZpxHYJtTasaLsRDxqrOkGVOSweMWs3CUhFeKTu3hge9/N8G3zpPOjRKD4vBuZeSUeTo2y83j5kIpMADrniwYTPLwijGi6QlDwyJR0aeSqS2l29F1jOcVACBuqNpacvKySlR3UlnmJ+HIzq2APqTNPv4u0rDafo8hRKw7B1axO2vSuQzOcdz3cJnX+3mpsLCe2ljp/hUHXvYekZGDt+Ae1np6b2AotERVsKH6mFlVZ0EcIrW32oFVmNq9E5jI1x1vk5tvgNh3stgtbz6mWN6pp5lzytw5OOfEigLHsjMIYMOi2Ke+rkomdFmBdJ8y5y49Fjg+4ccn0lxNWbkALRidTPl266X3fksHZes57UkeXKATSq0Pq/hO/b5ggAMpGRfy4e/RelJrHW+odNqn6kVe1PM7F6mi4SLhVy4UaQStExBUCj4kuJoz2IShEZxk8FfWo1KcWkzeg0W29e7mpdoRpqO/l5yh7dydMcdByqiLig/u2IwRELNL11QwShzoWfJBg6U1DsvWgXFsgLaBxPSyCN0uE3Cf+qyWAsptqoN5HCkp8M6FgE7vj/DU9Jk5MfIhDF5Vbee22n2HDhGKh0ntmK2ky3rcRKL05gpB/ozWbip0h6pCu0lgRBw8o1hqo9lA90HcGGpJxRhRJdmB25YSvFm57TNFc4eEBl2qBmSgeW7lcZG9uhzqCEoOfMCtiSgkg+T8YKtm6h5OrYDepxIyVaXpnR+Sy/wO6kKS032Mk8n0fdZP4Hjl/VCCFwJVLhelwrr3w9xYdxaNiZiXNH86R2rE8yhQFmr4rF2rhlPX3RCp4tpb8qUjlhVQaQ7vxdu21LdiHDpZjMubj2H2OD65vU4LBc4ZZiVRf21ynu4MWeO+tyjIe8efd0+ntNrGycSFUoSJcaQc3AfgqpCIYDDJ2HJtSAX3opTolb+zUE4lgSEk/5xAp9xqxHjYfX7j388VpTFgUws6Zd2ntZA/b53AzGQKyQdbBiU4VVEsSbzz9DuNp/+WjMGm51dIDs2pMqMTpTnEiDqxftr0HF2gJLG1Hp0l070nyQri2HsKIW4Z7uV3ZwJt8Dl5yPMhxnQPisMnVpxMthClIlXeV0n5lzGGngeUkm+qZweA1ZzhDutLc/LS6Rxdd5dcshEJfOwjhvf3LpJrdvqO3hGwmjFKXkOqrDgZJqsagu13Xc9jIRuwrg25o1eJbZR/RnKG28bCCErkdvWFMoaMrsWiNQFKkSKw8WHLM4pzhloJ3DQB4JT0RoCAFDGi9wG99Wis37p3gOY6YsRtYkkWksZR4wKeST6IEjJGCUKftIOkFHg607iuFeblcWPFh1RAHwpA7qzHqneQnG21oJTgCJFYZZmM8Zig2buyCIcZoLtjXAoAjA4ofYh4MidRPh9iqsYCt8ZhUW2e/+4adsq6G2NE2zt8vOyx7jzqUpLAquDoEoNuFyP3uuNtcvMNEMdOFg8pb+aYmhQxBCQD4tdioTBeUKwPKLVALcWwMO4qkJ4ah05Du7TGzcma6IiXFTF8XjZmoNVe1wpC8MmFcpx4So6tZMmHgCad0ve6Bo9+3yc7ACFoY/KecFVZffTcyJWFSnJ0lhIml1ylsy1Dpmh2jtygC8kRbYRHHHAiwUcsKgWVKl0mqUpntdxCcqxah845eB9RJtFElcTpWGolHnpPeaPOhntj4GIM5N6dLRryfLhpLLhgqJWEi4nyWsjhWTXGYtk5VHq7VVNrDrYj9767Wa07m3RciIq86h1e9B5KgKwtTEBnPWZaUWITAMnJL2plHF62BgAwSwDm1no47+9ULgAOTFQ1rHXwAQdd1/M1M0YCgz7EwQix0nKoFC0KPqkvdOlI+DIAuGksBGeYc2J3FVLc8YzinKFQHAExVRV5unc23HtjCVQeYhyUhZ0PCADmJemsWJ+ECyVhPZqeHLwLJfBsXmBtPJyLmEmOJ7PiJNzQQ0HBpwKQp/zhAGrRSsZw21oCprNRJZTfVZ1+XXEowQNw5+9yFVMohsBInb5PCR61iknZOFddQpKTmtoDDq27OflzMULp3C5O7vaStHiG9uQbirfJzTdIHDtZ3Le8mWNqUvgA5KLDY1SFdiNGOtkocue7s6A89J6mYqoKxjnRE5UgMS3BabEiX5uER4kRkU/TlXP1ozUOxiVFWDDUpYJP8v359L/7/PJGvWwdGkuJECKZPArGhorI7mn4WIwX+0KN2kCWTkkzRW2U3UWdgapZH616wt8IjsjofnM1KQag1Hxo+/jEeuoDVTJsAGrBcT0r4EI8aXMZO6VLzrA2fgu4mMHZObnPGy3nGwPJMdYlt2KUzEnYhnW3Nh4X5QZXtbsxhhDhElU8RAy4NuspWYwAuj4ALECDKOFluu5VZ2HTicD6Hu+CPqftHW3qqXLhAi3uKkQoybaqGq31eLGyeDpXGLuuh0BVOJUAp7vCiBl4nSnFxiYwa5rEu/pCnXFobECp+fBMB8KAlpOeUU9mGs4R881aal1qwVFyUm+OKZFrjEPVWhKoA7AyHhelRCHFwLpjjJ6t9y5VAkmXqhAChYyp2nQaIPohoOA7UhcTP3fIHw4g4LALAS8bi87mxI8hcoYnlcKJ0/ZBcRBflyojU39nQsRFWu983KaRW80hW4u19bhNiupjYdRzrouqlgzeRXQxJHVijqdzDSneivh9y8a51MaztCz2TgqKfZ4x941jpdPXGaf0152nDYzK55Rc5JYJAMwUh3fYbmEgpDYFBoBykdo/h8wJgWRI5wOWPfXurQ9ABHllcYbG0KmHc3YywPiO8JaWUCKAI6Lt0z31bnju40V9JjjeBYnN5fbP2vgBSHpRykFwrXMBUnIoydEH8rqKkaobMZ6+uWyNPylQKLkFXGQMYGwbp/N0XuzV4wmJ7THTgioB2fcmZsG9Ea4qbjPnxs+OWm2AtR7WE8i6KiQKzdGZiKVxiQWl0PQErr4sJWot0RiP286izFggvoPLShpMSsmhqtE7wrEUBRs8sxjDkJS21iMyspIYCyPmfzfG4abp0WuFIlXelp3FTMstfSHON1o/iORmzhkDEzSutSTF2V3PqN55mEDg4XXvsO4cEFPlKSSPKyGw6izWPoJLjrmicXzbO1yyzRgmjyKg6z1sJKadSu/TerIfCNVpOIz7gILPwegc8ocDqCJCbt4MnffobcBlJVErCR/o9x9KDjgWhxK8tfHgEdByGgMIdtdTMEagtwFSCNSlHIRRnY9Y9+6oNMbudTHQPsYEw4Xk8J6js2SeuqjlpGDh64y3yc03WByqZtwXUHfs1AOGRx14r5MddEpMVcG2WCxpoVzl0zYn9kZnPVyMuG0twPjW9bsAKMYwr9UWlVNyHDQnBLLonsJViISxsIzM7gTpTBRJb+cczY2pxd54wjnIlHgF7Fd9rRPNN4+li5Lo1bWWA8vJhw1eJFfhANq4TUpoYqpYHWScTIy/XeCi5Pwsdl4GsWaNoZUjRg95DKkB6D3FnNM8/W5KNNa9xbJ1sCHAeaCUG9CsZMBt7/H/vmyhOEedKlo2sXwaQ6DM3jpoQdUdKQjTkH8/RKLFt5a0RLK55LKzuCgVfJofEdQm4IxtCSMOAoNawlgPLQQua4VSiqG95kJADBj0hQrJ0PuYtExiemcEJneBWoRkbrjRy9mtBnLG0HmqZATEpNAsCbQN0FjhDC5Sy2rZujsKyoVgeGEdekfAbOHCgD9zASfjMO4DCj51HTrkD3fbWgjBkl0CQ6UVrpQY2J7zQt0RqBx/7mNaPRxM8BgdUg4xa3fXRYbNPNRSDPvLYJvi4wDyPgjYTsDh1gVcVwo3nYUJNPcYJ3ziorifWvdD4m1y8+ckpkCBu8q++ybSY/konXqdjyGYdcxR/NDCsY21mWaxKAa8SAuf4PQsGRhqwbAcMXfy9WdafoiAGn2fcaT/cmyRHgCbLWFilBKwyaSxSm2DDOI96SS7s9hzUCWGBWBeU4KSGjjDcwew9cz2G59ug85NShBze460ZtjQwjqqen3G+Du1VZlBrOue8CJPlEDrPFzCEYhRq2aXOeccEGNA5yKsM3ix9lj1FloJCJARIzdkMBhjxLyQCNGhUAyVklj1HsF7VIUchNGYFDCpLRjihu6sBXkL5URacQ4hGXrrsTIey9TaiclRvEytGsvCIIwI0EHEuIDGB8wrhUrR0p2TsHViTSkQ4FoJDte7AYRdKwnJycYjv5dddtJuNbAuFd4BcNtZuJhweiA7DsU2gprGBSgtsKjkHQVl6zIdmfBUMUa8agykABaFvuOvdGhenwMKPmcdOuQPd7Mmg8p5oegdILXagVFivl29PHQIjRH3TniO6R/5ENEbh7kTg+/Tljkptud8ZlUpMd3WHGxTcPhQyjmDFkTSYOl5NM4huICrWuG61lsJ15uKt8nNN3jkidJYj1drswUKpF68x6vGQKeJM1XNuc+p577xUMGsY47i51SvxiyW3dObFhik+scLJWfAKhm+jWOXli8Y0PQOK+tJMEu4o6JqudXTJoYTQGt7b4HWGtpUSGbrjjHl1IK4ZUboiI66qOTWQiJ5tvDYBrRmtWfB+VC1m2IUtb1F4wI4WMKFBDgAglOFodyxgdj3fgrBtjA1Dx1/pBDMsCglXJITKJWE1CAGVKqcdC6AcaDiZApoQ0RnHZzzsN7j+dLBRD+wnFhkaHsLz9RQgag02Tb0KRkNiHA+iU2yRCHXEsvkxzQr6M+9S/MgAi8SXV0l9d5KSXLk9gHWRcy0hJab6uJYGNGldhZiRJHYYjlYAqNLzpNGTRwYXDxS6+eipP+XINXZSk2rcU8loVUhaZNLyZNPLdgsqJlP/4ITePiK86FFCwCN9Zgn0LUPEa1xaF0AbEQpiUYt+Ab0fWhen9W6P2MdOugPNy8QQJVFkq+wiUq/qVjuJunHbF8eIuR5SP9IpiR63RMDtNSC1pcJc1LJOQKLw30Ldpptyr6otYTiDK8aB6k43qnJtZ2D2q+Cv9W5eRs7kSdKZHESFOh9wLJzuJYcpRR7S6/3FYU6Nx5aJZpyFP9kRcyUJ/PyrJbXodObjRFl+vmxVH9vqbceRp+RF8oxLX/ZWnQ2oC7EycZ/eSN6F8DHyw4mRNSKAJjOBgSe2gUJq5GZTwwYvK/GC+J4sXdeDEDU8WLpAungBB/BBflDdcbheUrK5qXaa9WwTFYEWjDIRB9GZLiuJC5rPbTnaOMKe4XOMoNpVohHG38hEkB1Vqqt0zBjmxN1jBGrzgKg4hrnlKBxcNy4gEJpXC+oiveqs/A+wqXFXDmPkBScSyFwXSs0vcOLziD4iMaRuWaR8DSFItzQsnNwjthDEUBnI1rrsOzpYNI6j0oKXFYKhdLoeg/HAkLIOBRLbWJOLcLMSBoqacLBk8j2ENYTw00LDhcD2tYgJMVfyaldedsYVCM81anKyC5ESCHwfqmoepkqx4wBt61D5NRy8PGun5pLEvzUkgsIxoELhgsuYJPUf2sDOKd5c+q8PqW6d261cN/hLyeS2bdJC8IWsQAsqu37znNhas1pjcNN73Fd6Qe16rfnfMCSAaXefNdFqYAY0aTn7TxQ7VmjxvftWDhom3LsUMoYiQDOQJVtwcmLrU/4xk8j3iY338AxniiCcfSCNroMCpScmCFK8kHJdV/p9Rhz6bHiIVWiXUdxAMnt2+Gmc5hrqmBFFiEYP3i/wLHTG+EBeheTlAedcmMALksJ7yNW1sCGpPnBgCeVQl1IFJ6wM2UhB7ZLQi2cdMoplaDqigvwqdp2WdNJ+qa1JEMvGFHNrU8L6QbYSM9lRFfnDJoL1EMZefPcjfXojAPnHMwzWEduvrmlkEvPu1YNlNRhwAPlRT5jDQSnDa417qjQGRDQ+5hYGPvbp+fE9ubFN4KJdiPI2Fry/ZKp3ZOp1L0hVgjjDHWkKsuzmUBrHQQDXjWUEJno4T2JPEqTsDNaobOk7LzqHY2HlCxkJ3gJcrxXksM5j96SUE6pBAotERPuxkdAaQHugOedSRYUQGNpo/nMZYnrWg8YHQAow925te4cVZ40x5USWLYGN23ARSVwWWmYVHHatQUZx8AMFBwo9h+CMiuPWmjU7mBp97rDFGTZToGjjMC637z3C81xWWkEkJM42DTT576Gi+euQ6cc/vJ910oM4Nnd+96ni+VDHDBhx9atU++PJ4NKOUreeuthHCX2AbSO2KQnRu9++zsHN3frD9qmHDuU5vZcwQncnKvuM00VpTct4Ae8TW6+oWO3B15ITvoLCRTYWQfjA6523GXHpVcW95d7X1fct0o0dhQfRyE5bjuLm7bHbU/mlL0Ig2DdvpbXsdMbASI9blo7UCkrLTCTEp31uO09wJHaN2xgRShBrruZgpvj1NZbBKAkuVyPmUDOebxY94kuzdEYh0JwaCUIHKoIuLBvQZx67oxRC6WSBGJeJ2ViDQIJC8YQBe5aNUQ6GWY1Y4BA5yLG4R6tC1un7X1CZ+PnIlMicihOBWJKBrSGgL0+CTIaT0q+kgE2RtSpOkAMKg5vAlbG4dsuKwQwdIH8xjiSI71guAQtyvNawVqPtfX4eNljXgjUhaZkT0tYkLCfS8/U+4hKcjhQVYKed0RVSPCUtNSgd7jqHWpFBqu9IDD3ykQAVM2D5Ggc4SnGGkh3QKEstRBSQhkCbWqVFgBo8yuSLsuuLQiwv424KOQkS41c6gMa48ASzgOMLDd2K0LjBIML0uoBAxAZLkrChfGMZWPA7Ija97lxsrJuGm8kgjmdfO+2w4DpVvHUmhNiYvDJ82xfjsXud+XDMBgGVlpO6vu0Zux+56YSJPbaphzF1I3aczYCFwVR42ME+kByCG/aVwp4m9x8Q8fu4N1Y0buBYTJPHjvOh80mOcq2Pw3m0jm98XFITknE2njMis1pIVO1nd9YJzBgEDSTgk+eLo6d3oTgYMmIcVGRQi8xjGgznFcEzJR8w5AhyXx+79ZbCHGg/wZswHwAATdbE3AxUpbtEcF5AE+idIcWxPzcFScwNgfDMkYoRWMjpp8pGUNrPOblRqhvbNUgOVVgGuPQOw8tBWaJ7psB1MHfLb8XkrR11sajVBt2xKmnv1PwVOOfoaQiYLV2cEljphT0nv73qxaNtbhIbZ3WEh6mUgKVJoYQB4NzRIA1zqP3ETMmMNcchRawjhLDrrd43vRYG4ErHzEvFa5nZJT6yaqHMQ42Ayk5S2KRBKLMhxNRSPhgB8sRHyIqTUJ3a+shpcBVUm3O72TdO7SJYpyf5e7cCiHidsRkGx+IrN8A1PeNm73rQ7F/fTCenN0ZpxZEAIb20u7vjCsDISXTuY03jA3BhwPbfVrZhyw1CklYq2xNIpP206njbRy77bDxf2/ZeHCGZVqjtSCbGQRAqe11cHx/92FW7a5viHHAMFWKREtdwm9ldmO23tjtFXHO9tqmTGHqGrupztRZUwsACwCTG6sg5u5gxt9YvE1uvoFjanPOVvSVIlrmTWvworVgSdOC+p0c8zKpnD4Cc+kh13/qiYTE4QJYjHi+Mmh6SxUcxtKpg6MsJVRS+WWCAKCr3mGWLAL2acwA06e3fNJRcsOM4jFi7Rw+Xve4rDS0FCiT4NghzYhzvWpsYvbMSkqgjA/oTaDfF3Tq15L0cVq7SUTO0fXI/kG14ugcVSc4kq9UoLGQkzbBGbVTXECbGGYcAAL9+bp3WPcWnjEUgiMyDN5E4/c90wIvG4vee5RMnAUcPiURH/9M1u9Zdw6lImB076i1huiw7BwCko5T0vRgSPpGltq5leZoLeBixNNK4LJUuG3tQJ8mCjBHkaoiMUbcJhNNzgApKSkWMVJbtXfojMfaBDxJytcZeFuXCvOCcDycsQFPwxglDDO9EXG06aSPjCfamUd5bo1BoUpsmGmZJZXHydS4OZVRNN54Q4hY9jaJWW6SBs4AblOVaPSeT60MADi7lX3QUiNjzdKG7iNVl6pColJiEmN2n4Pf1jUkjFyIcRA7lJxhVkhczxR8oHse31+tSWvrXHmPHOP1zfs4sPSy59W69zDOAzHiVRtgDCXVS87vECBOOZS2xuH5ysBFWk9aeDSdw2U6CC6qJHhqyRNuUdGYftuWeht3YmpzzqDAznr4JF3vA5U+jQWuZ3woRz6EufQmIy80l7WG5AwvW4uPVgaLUuLpXA+nT8k3z8OlRbdS+9tsuxOWyhcYQKi7z6e3HsbTD+V5nRc8MaoQPdSrhjPABzeoG0dE1IWAEhKtjYBIQEQX4EzEda3ugBePfUf2D6oZmRLmNoZJTApqc1q0iU7tOUOb8CRaCMxKhVlBm8WqM+hMwDuXJRalSqyjjTdRDiE4JZopKT21JXnKRpuf9/hnOAATPNpu41AuGENvk5pu62H6gKu5huARL9c9Md8EBzi1FueFxLtzjYuC8C0vGkssIEZ4hUpJrITFTWfxhDGUgmPZW1gb8WyuIKWAN46clSXRya0PeNEaPKkUfGAD8DaCGFm13rzDWgrcBlK+zb5g3pOhpNhpZUyFZEj+YTS3JQMaR8kRY/vbC+PxP+Xm7QNVaDqXKlvOI4aIm9YAoDE1K0ic0KTNeVGqyTXl1MrAOa3sSQB857AoSX+n6T06R238UktYHyEsWT8YS1YZhGdkyVB20/bdZ2h66Bqyi3p+1xUnc9BCULKxUUDe3F9Wnr5vgrW7vlWa7BQ2rSqPl41FYyxCYFiUAoUq0BqXqpanA7ZDiHjVWvQhoJIiteojWkfqxqUUQ5syMDp8+hCh1fEx/DribXLzKcQ5JchDJoRZPbYScsPqiUQFjfHx9G2Oac48NLY3NlKvXVQFOusgOcdVrbE0bgCPllpCyzgo3M6K48aTjJE+x/iElMXcdnvWnJOHESnfkNprxkhcVJsK0TmK0rubsk6y81ndmDOGJXeIMWLGs5w5g+YcZYmBSnmOrkf2D1pbj2slcVFIaMmSem7E87VJpzqgVhxCUgK07jyqGceiTJUHn96/JL0PzjkKjjveRKTWDFzV+iBweGr8n0LdBXDnZ0zauPsk4ucj0McAlwCUjXHoelLSNdZh2TtclQplITHXEqvO4aazBLjmHpIBigEuAL0nungAtZIWpYKUJGFP8xIATyasaUwJTttCXTAsewJ3zspt/63dd1ink/2L1lJiKTklNpwPRqC7z40xbFUMfCBdHJUwWs8kH6qe+xKFLIS4z83bOPJYsiFg3VncdA4xBDjnURYSrUvVukKlauBhvadjlYFzWtm74915qjZKQdgi+AilqCoSQcB458OgBP6qTRVYQT5kA5uO0zpxyNB06hoyvqpI9GvjIxZqZOIap3E7N519tMp6lhCoFDE6V51DiAwXhQBiWvOkgPMRhAI/U3vMB7QmmZ6m65WCoYyRlI4ZcNvRWlAngc5b4/FMvhnfrd14m9y8wbivwjBwN5ve3Qzy348BnzJRh++rb3NMc+axYmpjk5JjJtTeNhBJ4tMJGMAW5mgqpkrQrQ3gLCbz0O2e9aKihCnjfTJG4s4GcULr7eDGPcICZCaMEBwXqVWVQadFUq49V9dj7B9kPGFIYtrIOCdn8ICImy7gomSYa4XWeLzqPOrSY5axHAEoEzB16rN3N9ExwyfHofF/aiK+C6C0nnAN1ke0vYVShJFqfUBdEPA7sAClGGLk0J4juyIHABn5GNI/raP3UXBg2ZMbt08tpyczhUWhSAU2tQ5tjGkzC6i1TPdFnmVKUHXsyayAFPyg6OT1rEAhxeCeLOSG9n/I9DarUQvBYS25oo/dwA8lClkIccrN+wlnMIzBhpAsKpK+jfP4aNmjthFFEdEZD+cJh0ZGmQenwvC9++YM5wRGCwmncmy860SzXhuHm9agEBxrY1FwOgQxBqokJND5qne4rBWU4Fgbh9u1w/VMYZaUop+viLX2fqn2GpruXkMh+Z0qeca47FbJx/fufNi7LpDfGeHdDq3TxPJ0eNVatIl1VivCyClFh9FVR8y9WaE2LTrQGpDbaCdX8Nnd/DWmZxEYoCW1oHJbNJun5vblm4y3yc0bjMcE9566GTxE3+aY5sxjxSn3MnUftSZRv5vOHkwWD7U8YiTXXJOSvtyzrhL+oZBEBT61QnTf+wN2XNRDSk6LE5PfPd8x9g9qrSO9G84xKwlz9GJtwFmElmKoSCxKhefrHsvODu3NyDCIreVEcsqb6NQS/tT4PyUR3wVQdtalUynQecJLzZVArem93/bUYuo6YnIVnNHp3kX0CdcSEIe2BJcsGf4FsMhwPVNorccqAJ0NuGl6wh1xDhOJqTUrJJoIrHtLC3rSSVKSo9Abz7FjOiGzUqHScutk70NMvlMbIUrjAl62FrUSqAStG/mdu7hd4Tlkq5KFEKfcvAMDgvUDloWlzzKeNlBq/0V0vYeUDFeFSqyw+29gZwl0sm0LFcGyk7xBH5JVRIiwqdWHSKBmJTkk44ichDmNDOh9QJWSk8571Io0o45RtsdzToz+m6q90wJ/U/cwnrMxkldY7wJ4BIQMBw/AnfV4vjJovYdmDCy34/Jcl5zsOTyZrpZKkF0GI1HKUouT35lM4OEmOdXnOdobjxg9Xi4dPFJ1VQhKGgsFMwK2v8l4m9y8oTjXluCUU9cpm8F9mUvHNGcWZXi0FtWp97J7H/sE4/LP5jiqd6MEqgR6G/esJUdit2xjJF7X/VEyRewOAHuNOO/7HS4CXDAwT2PQM1qIV73HOxckSJYrfotSIYIAhFJwXKbn8tz1g8GeZIwcf08YB6eM/1MS8d0E0HvSCqLKB8eyczA2QAkxJGOZhTdT1EYTvceslMMGGnwcVkLJGRRjcByQikODQwkBLagy8Hxl8N5liVoLdD5Q+0NwzBRtIkKQhpAUDGqnrXTqexzLN1gfsO4dKslRKEquRfoZH+LWiZhFwsMY7yEYP1oZzkKIFxNCiK31CCDWYKUEekbX0pmAQjA4ENaiUAIFGByA4ozxOhXnHP54aitnCxUlyc6kNRG1pqTEGI/GeXBO1Z3eecyTN5YWDFFuHOp7Sz9Xy0Q2GG3Ge6UmxnNOAIVge4UNT13Dx7ihQu8XZQVoTq2Nw9pYhAAEvmHa9b1DawMuZxq14nhuLF6uHLRgmFUSLNCBpj5SGdrdhy4rqv44Tz5sABAZ3WeTpDMQGdadxbpzeHbhcTkr3mJuvpnjVDnwc04v51RlzmEuAYc1Z5Y9GfXJOyYF58ep4mG793FOsnhK5WRo63EGzg+DHu8Tx97V5HtPJ61Tq0VbdgyWLAXqxAzJZXMtOJro8GrdJyG5gJvOgDHgSa1Tmwm4SEBRJojqa0MSs+MckbEkYnb6/Z8y/k8xz9xVaDWJaSI5R6kkfGDgwpFRKjjeW1QoJBkedtbBrYgNtuCA9x6frA1kwhCsegeZKlSlIjXqrPXiA70zOv0LRDDMtYRKGlRPZwWMC+hCGAQzNWcbs9YzNv3xJq84Jd2dDZDCo9QyVWQI/D0rJBQj9tcnyw63ncXVrMCilOBMHKwM8/QeO0teULnKk1vQUnCsO0/eUYLhpvW4bQ1EmieCkbioi0ARNsKQ94l98zkEsipRE3g/LflgoULjneHZhYIUpG10UXLUgSwE8s8LQUBoLTh8cIgALmuBeXqupDSErc34UPVlPOcYY6gLMUguAPsxclO/31ry4VqUErNSnSRSuuwsWpu0nQRPmjbkEVVoWjtIKZpB8AgTAgrHsGYkHFoX0ynAoX3o6bxAYzx8Uk+/TTIKfQhoOo9KEbuw8x4frSl5fou5+SaOU1sT55xe7luVOSUkJ3o0KVuO2EQuDNovD4lzxcN24yzvmNEJKQQPzkht1vu4dW/AYQB3thg4BBw+ZVOe+pnOeiyT/1Bua5xiirr7HZni7lPnxoQIbj20IIZWaxxuO4MXa/KyKgXDXAuiUwtqjeikFQMwaCHAQVRwnryJdMLI+BjR+4jyhM37XDn8o/L6nBRas7aO8TG1Lzm0kFgZh84H1IoBoHt/MtMoJccnyx7WRzTJh+fpXCcgqUfjI57UtEGOdYhCZJBC4FKKgSJufYQL9I4WhcRFrTEL+81aT0lUp4CyIlUVOxegBB062qSQLDjZR7S9x8vWDgaGHy89LiuFeakmN0bCSREDKjt5zzRhd7L8fqkEbAh40VogRBQCCIgwAVgkvaBSSURERM7gfYTg98NW7M7n7Obepn8iA+Z62zpCcI46+VZFUBWyVGRkWuiIq0on7zafGH4BrQ2bNiEjbMyipCQ1a8LEiEGPaLf6uTvHp9iYGfw+VXk99PvGefCIISnJsZfdGpG0gzAA1qVg6CyxMJ9dFKi0QGccCsmghYaLEe/ONAotURWSPH/j3TXp2D6U16R1b2Ebut9ScPQs4KZ14AwohEAhwqDH9BZz800ap7QN7uuofW5V5pSQksDDhLFxA9jQuIBnJ7YiDsV9xMPGsW+z3OfSXUhO/i6dg00mk4XgYEzBRWxtPruslLHFwDFhuVPMPHfflfcE3O7T6a/n1GdnDEdNUaeeK+Ez+EaePz1X0rogjZbLUqJ1pH3xbK5RKUoqyQSUNvZso5A3WC7ohKyloPbWib4z+b4f27x1jCkpFRve2au2h4mALijZsy6gsQExBpRa4TNXZEPS1gTe9QFY9gGzgvAnYGQ62TsaRIIBq85i2dMmr6RArch5uXekTmxcgEol/n1mrcBOu3QiGd4FyvYukIWGCxDMgceA1kYIyfGuLuAC8NHaADEgIiYVXKq+vFxbor1Lcecd5fmXFb7XhijDF4kwkB2sL0oFxTkZZTpSd+5dxGUlUSrSUrntHLTxWBQKyh/GiBx6l+P5nDVaIsjlnTN25xmOxxTj9Pud9WBgmCfzTusDlCK/q4KJLSp6qQTKHVbZkxnJGvR+GySf1499c5yxu2zMceXVe1J1NqmCyhhJANQFYfsI6ycgZDjpAABgYHtZTmtzTElV9pGTgqNSErMi4LKixAYArio9PKt1b2E8tXfHVa2T9qFAGC8lSPDy1rqktcbhQ4BWHEoL9PbTkR35hkhufvVXfxW/8iu/gg8++AB/7a/9Nfzrf/2v8bnPfW7vz796qn4vnQABAABJREFU9Qo/93M/h9/4jd/Aixcv8Bf/4l/EV77yFfztv/233+BVnx/HWhP7fEmQerdveoBc1TTRbzqi0CrB8Wyuhz+/b9w3iRvH7mYp2GGXbtqEiQXVW4aV8QiRNkQXApZdSN4+bD8rZc9GdWq1bV9lpzEkOFfplEyk32cI6Fw8aoo69Vx3tTsaQ5TYuqDTuGQMWgGxCqi1wpO6gHUB83JTns/vhoGqGp31sDEOp2jO2d5y/VTsG/86JVDnVh53MQ+CAbedwfPbnjAVjGPdO8xLNQglasHBUhsqGnqnMYIo8aDPuOksak2buzekhNyHiMuCqOMxVaxi76CEwDxRb6swrcUzHtuKUxKSKzv7WGMZKMtBliAuBDTOIzYRs1JjUaghceucw7JxaA0lySGScrASHJwHfOZqdlC8T0uqwGTgvBb8TrJeKQEIjstSwfgAwQW65KweYoAQcrjf+5AkdqurraXEJlcji4Sp2V0fxmMKIDHGuSJQ9JS+z76q7O68LHf+rDXu4BzftwbkNeVVY3Db2oFBxTjDbQKsX8+KIcE55wDAGRusPdaGnhkYzfFFJVEIasltgM4033LSZ5L5azYJhvVoDeF9fBLDHFdcditIIaYWdklJbmOpAlgIjtZHzKVALQQccFAi4HXFp57c/Pqv/zq+8IUv4Ktf/So+//nP4ytf+Qq+//u/H3/4h3+Id999987PG2Pwt/7W38K7776L//Af/gM++9nP4n/+z/+Jq6urN3/xZ8ax1sT49CI5lVM7FwawW6UJJHnKieg+ct67wTnHk3mJRfm4OjfntJQOxXhhO+TSXUixtem3kYCDnfV4vjaDx9OqM5gXCkoJcs92HjedxVzLHVbKYWG53Z9hbL+/V4zUOlIyWyFQnz1Ej5dri3mhjpqibj1XT0na2m82ziItUpEzXJYaMWQ7AqJHrzoHxRjqUg2eUONTtPUBzhOVXAvCadw0FoXieDovTh5fu+OfITlW9+5e6qy7Y+CmtVgbByCCC2IVZTG6WaHAOEOhSJhP8m3jzUIJ3LYGvSXX61oR8LS3NIauK52EFzvEdN0GlCxTK4QwQCFGeBcGj64cggHL1sKFAGM8Ohv2ujVrzvC8c/AhAIzBeDJuXWiJyBiuKgUls5El0d1fNh6BeVhHNhTGOfSG7vG9RbiD1didf5wzlIy0SRpDiVJukfoY8bKx8DHgVWfRW9IU4pwoy7nlmT2N7qvTkt/lYDuR8GKDaefE+jAeU3MthqTR+HgUt7fv/3f/7NhhTPGw9fch0NhmHGSEC7puqqgRnnFeSDDO8KK1KKQY/MPueIcBqaV0d93lKekMAbhWEteIQxJTK3pvXRqT46SvdwSg7npH6tvJ3NI40jNqewsuiWFWpOpWkcQlx4eZvF9xxnFVK7xYSbJlcB6zgir/KlUGPw2t2E89ufnyl7+Mn/iJn8CP//iPAwC++tWv4jd/8zfxta99DT/7sz975+e/9rWv4cWLF/id3/kdKEUD4ju+4zve5CU/OPa1kcaZe28cOksaLyS+xO/4t0wlMA/R0tkXUvJHAQ8P93kG/gLYn6jteintc+nOVYysR5HxMyYlANm19qPGQKVTFbXgPNatBQsRMy0H2fhjwnK7P7NrMDk+9QlGyUMlOXpPwlrE4CF14Xfm2337QwkgT5/V9AQmzN9125I9QakEApCSrQgtAM5ozKx6j7rYCBTunqK14sNYZKAWFefTi+7R95/G/6HT8Dk4ozwGvCf7jt6QeF42nLUuICgPLSRiYFgbYpJIhqRxhPS8SZxuXtC7FqCNaG0iFgmLoTUt+rNCwiXGiQuEl1iCsBprQ4D7DAoFqKrY2QCd3sEht2bSBqG/Y4KeMT0zDIKBavQMvA+wgQxdFyWHDRFtAKQg9e5dnZFD8w+g8WJDHFqkMQT0NqD3nlpU0WHdJ6YZACEBRHrOSu43sj0Wm3dJ9h7ZGwqgNSBXliZp1ZyBcwElBapHONiN49hhzIVwp5WYrTpWvcX1TBNQOVnkAITXmhcCPmGKsn9YfgbZnNQEqhK63kGnfUDwzZqwZb8QAJGA8s8biz6pVpeS2I5ccNy0NoktRtz0DotCQjCBPoGZb1uLde/x/nWBQkkSPnRUvZRCbFWQxvtVoST+wtMay9bCBLISqUs6EOSK5JuOTzW5Mcbg93//9/HFL35x+DPOOb7v+74Pv/u7vzv5O//pP/0n/I2/8TfwT/7JP8F//I//Ee+88w5++Id/GD/zMz8DIe6i0vu+R9/3w//f3t4+/o08YmRA6Ee9RQDpBWT3a5dOEFoQRXMqgXldRpmPUQnKcWr59eREjQGHXLqBTSVCMDpFdEksrZACgnM47yE4ua679FmlFGgFx03nMC8dLpLNwCFhuRz5ZxCnKzsxerxsDDSn1glL1xsi4F2EB7Ao5Za79tR370YEEEdaaiz/PyfbgLWhzXGuqZXSOWLEVcnHK2+CU6foeRI2Sw4WsCHeu9q8exrOp10g3sEZTS3qd4IBMUQ0xqHpLZZ9AGPUfnMh4rbjeDIroSTHhRZYdh4diyg4sUk6Q+KNV1m8LbXJNOeIIWLZGoDzRLGlasW8IkuMpnNgLNOT6XdvOwdg07K46S0qRZXXEA+7NTMwMMZRavr9bNzaGgf4gODj4FHUOxq3T2uFpSHPtZkUpAEFYFaqIfnKgnCH5l+I5K6eW6TGUbVG8+wwzmGUghQBXDA4S9WlQguYQODy3Aq574YmJbmuZ18klxzfrQvUAlH+4GHtsTGIxw5jJDUQhlaiTON1lYxwr2s6UPSBRDkBwkSZsN8/LJuTCsEgkkL6i96jVASiHq+D42ToprH43zctOkuspVJL0mxiDFVqOdaaA4h41RpiPcWIEAk3FEF4Hc5JpJJzqvS0LuDdUt2pgo2TK8U5aq1wrQm7E8EQA5nVfsuxpT755BN47/Hee+9t/fl7772HP/iDP5j8nT/5kz/Bf/kv/wV/9+/+XfzWb/0W/viP/xj/+B//Y1hr8S/+xb+48/Nf+tKX8Eu/9Euv5fpfRzDGUCjybMkmmJueJ4aycR744wQmhAgT4qMaZb6OShBA5W4nqYTcu+kS8h2vpHSyCCEOZVzghMVHcJQxDtgMyYG1JdGrWlNfOgZgppKjdRJeAxL7wgU01qPWAQE4KCy3m6iBTVd2shT8da2xKCRuWwcDSjqE4CiDgKwUQmR3zPb2AXBDpBbLgjMYT7gOzhkWCbSoJankLntAJiNDLRiq5OA9Pm0fOkUDGMw277uBOR9gLUm1dyOgprGUPLx/VaGUAk3v8LFxUJxhUemB2j4l6tY5j4+XPThnuCgFll3ERysDJYF3pEapyFiz1hyXtaLNKEQsKonrSsGEAOsjTO+2DCEZqLIVg4VDwNo6vGwiYgyoCwkpaM7mCuFMS8RIm8dtZ9Fbh1XvcV0pxGSeyFMLJyvZ5kSOAWisQ2cdTHIlr/WGpj0rJOqChNio1cFwUSkowaA7AxeI6YgYwVlMCrYeK+bAhIfmDHViHQHb+KdKcbRuu0WaNXWMpdbYRUkKzVGQGWupOFxkQ0LYOz9gOx6yoeXre9mYgc11XVMlbGoNeJ1x7DAmJYd2G80dwXk6SHHMCoHeUwVtGajNmRXWY3IK3/UP2038W5OECpMsQ5g4sBof0JqA287COpJ8iIywNVyQ75bxEVezZI0SIi4KhZvGYm0NriqNEEgI86qSqBStGfNCYqbJYVwlqjmZk24YrVNtwWGvKPb7/r3u+NTbUudGCAHvvvsu/t2/+3cQQuC7vuu78Gd/9mf4lV/5lcnk5otf/CK+8IUvDP9/e3uLb//2b3+Tl3x2cDYyBuTbmzVj5FsylcCQ8BZlyuN4iFHmY1eCdpMlBhK/qkdtH2B7gkvOtvBHjfV4F9hiGhyrBOUJ1tgErFV82MQBor7eBo/exaGkTMkRx9O5ho0g0TIpDgrL7QLF86Y1TrxIfItO/4UU2QEAy85i3TpcXRSoSzEw1E7V3NnHHso6H4JzzAqOqwROHzs4j5OVLYXb0Sn61CQr3+NUpS+//8Z6LHsHs/YQCRipOMON9XBps++tx01r0TmPHkR7bdL7qIuJjS0Se6NghE/rbMBFrQBERC5QKQlwht5HLEqJa0H6MJelglYCL1YdXnY2CfARBsG4AMkokXnZOARGFNeqikPrCoInNowfCQNSxVALDg6FCAYTAJHaStYFVAUZPA7JdUE05tZSq6oQtFG8au1QXSuVwKwg+rMLARyUoIYQUUsJkypOEQw2eITAUEtSYV63bqh+ZEbUuP1H9hMBsyTYCBDmgwNY+4DLUoIzjrpQMN6j0IRdcyFZWaTPqfXDdaGyoCXZWPBksRH2rgGvO46RQcaaO4PBcSUxCxyvWodZIXBZSTxfWzQxYFEqVIqqkbtCj7uGpr0LCSPGN0Brzu7g/iLbYI2EoPnTRKCSEU0MuEIEB1WfOafEZd1bakNqSfNQCTrUpMQboGqw8wGvWkOGm5HG9WzksP4624L3jU81uXn27BmEEPjwww+3/vzDDz/E+++/P/k7n/nMZ6CU2mpB/eW//JfxwQcfwBgDrbeZPEVRoCiKx7/41xiHNutC0uIsdwaN5Aye8GEHsSzntJceg9W0G1PJUu8ipAioxsnNaIL3o9+ptRg2xnxqAM4QNIyAYhyLUiOEiELRAvJqbfCys+iMxcergCuvURWK2EOpJH9RyEntikNAccbuVnZ6TyV2OokmJ/JACxaJI2JUcuZHdYzG73TMHtqXiNSaxN12tTxqTSXo3SpdrjpNiQPuxqFKX0wWBa0h0O5MCwJcxpgk/xkx2hJ9tDEWraNxEVn24gp41VqUSt7ZELTkuCxpY36x6vFi1QOIgyXBqjO4nBWDHHwECPCY2mIRgOKUAN8mIbuCM0paGLCYKcjkSxVBrUMTI5wlfFTGORkf8HxFOkK84Cgl6Y98vOzQGFC1wwVYBFyVmt5bQRv4be+odcYUCbExwv3ECEhGwoDrnuT587gRjMxdC8WHDU5yhpmURPtNonY6yQP0LmDZbtpmw4EnYACI1ozAws4HCA7MEvXdJ7yadSQcB0bCdZJzVGrja/UYkd9RqcRJa8DrjGNkkLHmzlgY1DiPi2R8WxUK73CyjCmlgExg3SlD07GVQ0jr+aqzMEk4L6tvz5MmTrbJ8IgwziF4apFKRARQ0jpPSWjWELKpOkmHyoh5pbGoFHygdTon3uvWwiT5jLWh8WATiDwkzNr4HbwOaZL7xKea3Git8V3f9V34+te/jh/8wR8EQJWZr3/96/jJn/zJyd/53u/9Xvzar/0aQgjI5o1/9Ed/hM985jN3Eps/z3GQNtu76QRG0uKXT13jzW3fxnWovfRYrKbh885IlvIEN26bieB8oNOc5Fu/c4pIXl4ctZSQPmDduUHIzfqA60rjSanwoqPWyGXaGHJyoI+cRvdN6t13yRnDRUmVqvGirQUBYHsfB9VYlyoAU0nVVCJBVTB+R6fjlEpTTK27qSrdPnHA3fEzlbyuOofWOETG8GpNasg1BKQgVkefWGmXpca8IJG8m6bD85VFoTl8MmVUFYdg1GZxPkDzzT1RlUngsi7AO8ISgDMoLlAJWuhfNJZUZJNJYozYWFMk3A1jHBeFGIQejfNYdZZaDwVRpEMEjPVQEoNjukOEjoRGijHCp4TDhwitOCyoXWQcKekKyTFXEldJaI9zBmNJVK+Sm/fVO6rO2EBz+qbzWCd1WA4kgDJV7C4qiWfJ9sGFNKeUwLJ3kKk9S4JtdMpfmW3l33yoWnUONgTEXB1iHBe1QKklJVyK3hFPthalEsMJftLm4Z4n+WNrgBDszj08JjZw6rNOIYOQQjFVQ0MgSY1xhQzAwWvc1u+hz7ppDDobMSt48kajFrlxIbXOCZgcXMCrxkEKgBfErosemCuBWcLftL2FSQaxF6VGpQSsJ/mAeakGSQ2R7tMH+i4X6GDEGH1/m1r49z3ovu741NtSX/jCF/BjP/Zj+O7v/m587nOfw1e+8hWs1+uBPfWjP/qj+OxnP4svfelLAIB/9I/+Ef7Nv/k3+Kmf+in803/6T/E//sf/wC//8i/jn/2zf/Zp3sajx6HN+lALhkqEd+0DDm1c+04+57KajsV9VIVvW6Ke1lqkjSQOQlP7/F52F5+ppEpLgVgCL1ceWnMsFC1AMZKx5Mo43BqHJxNtqHNj6l32ihSJG+sGrIUJhGHgHHix7gmM7AMQSevkqlKDoSdwV6bfhADrSHfispR7F9BdCwOA3jUZkNJmFofWKG0sIcRpcUBsxs++5LU3Dretx6wScI7aTjeNheSRWDnpmrRkqLnE//tijZeNRes8fOBQQoJzWsgFgWDuBOd0ol93DDZhQZ5xjdYF1JJaAp2PWFqHOjFTtk7NiZLPGNFfcxgfEDmH88CrhvRvGAAw0g66bXooJgBELDsCMBda4LKQYORLCeMJy1MogaqQ5D3FqazvUzLUGpLMX/cOrfGYpxZUIQV6T9TdEIkWXgqOZaLnl5olx3FKptbWo5AErl5bj857xLC5J+sDrPNAJONQlphfOTHRgiNGEusTIDxWxv6VUuCy0hgQ5enf+zbph+L19q0BGbPUmUiVxEibLkDie+PvygD4c5Kd+173oeoxYxvbmDvCjTt/FgJV3qqknxRixNo6SJBS9svGAAGYF2R+mT8DqbVZa2BlIl51DnMtMasknqaqY28dXjQWAGFuFpWCFgq3ycZBMg8pON7TEqUW8D7iVWp9+kjqzoxtbIIQyWX80xDpOxafenLzQz/0Q/j444/xi7/4i/jggw/wnd/5nfjt3/7tAWT8p3/6p0OFBgC+/du/Hf/5P/9n/PRP/zT+6l/9q/jsZz+Ln/qpn8LP/MzPfFq38FpjarM+Nol2N1KAhMnuo3z8mKqy5yZLuVrQpB57IcXQzz8nwdqXVHHQqUSknj6wcWfmnEEpckM/VrE5NcbvslS0UC97Auj1gXrnBsCqtXjZGFyWCnWpEsjUw/uIZxf0fnMiwTkSkJMSEB/ptP3eRXnQETrL73cuJLyIxSfLnp6p4KikwGWlUCgBYwOa/4+9P4m1bMvz+vDP6nZzzrldRLyXmZUJmD9CQgxqgC3LDWaCBBghPLYxeGAEiE64sGUmtiUsW+5UJSFQSkY2EyYgY0sIgVUg4ZEtLNmyZWQLCqqkAirzvRcRtznN3nu1/8Fv7X3PvXHvjebFy6byrUnVi4y4d5999l7r9/v+vo0W9Oip5+cxE8qQC2ghYvss8nelMtdTwikh7TZaUrdLShxiYdXK3H8IGWfFzG43BawShOKhz9Y5w/nKcT1MHIIUsHPauLUarQurzvJs3YhkuW7UANSx1xwKaPQt1H/SGrxPDFF8Q3qjK89FCqm2F+MyKZAyXeWJHCpp/RAyey+hhUZrjKpOsJVTdSwQmMnl12OgFHFDLvWeGaswSe6XUQpr1RKHImTsxM6LJLyrxn9Xg/wcKQqVKLvkUunrfnFsNifjnoRFisW+cuFE3VPolUKbh9+5+4f0Yarmn08YYL5tPbQHaCV7hvDG5Dt8tRNEcN05nBYV2fYguWGNNe9VWH0oz/CphvQxlBVuCzKtqGRdUdTNSsFP1g1+igyL15TGWgVagjZzY1m1ls4V9l5xtk60VhLQX5x0nPSOnDIHn9n0ljN5HRcfp9kS4+ADWsFaWyJyj7WSd0OpW2NQW6+7KDFNFJ+jH63CBkCV2bP5J2Td3NxwdnbG9fU1p6enP+zL+VLrXSFYIYOFZSOYlxxwmfPePXoQfmy11LG3yf1i6bGNYz+GZZNsqoPvQ//msfuRc+F6DMCt6y7AFNMyJmnqgTTfL58yp70T87avCG7NuXA5ePZTIGUh6Sngs+3Adgh887TnbN2+cU1nrSPmzG6MMk8PM+FQxiuHkPjWabdI1x9ax99DjInvXw98sfOcdYZN1+BjprWa0/42Z6m/953ff34eus8xZV7tJqwRfxwfE1PKHMZIKqWOpQpnKzHZ2w6eVmvO1y1DiNK1x8wUhFB2tnJ846TjYt0++AzmXHi1n7jae0xVgqFkvBRSriMUMW28zwe6GvwydpqfpZQzk4/sp0xRkkCulaJxGgvCy2otUygoLX45CXFwdhL6w34MvD54rFKcrmQM4IzGZ0HldC3SXR0bTUHynlIWdUujb4uY7RQpWRALivB+Vk7CGn2UYNMXJ13liRW2B8/rYUJX5CVXm31dlTxdY2vat+RUKQ2HMVYEgeXvPLVX3N8jtJL7cDNJMKUQg2/tLHIpnDQP89ceW9uD53oSsvf2EGQEU3lwm94tdgrrxuJz4TAGSVNvDd886ymot+4z8/Pz0F4RKkJy9oEhkA/te/sxUApsevdGIvgs4U+p0BrFy4OnZEH/jl2TfcwycupdzQUrHCb5OVnB83UDKC4Hz8oZNq2gNACTjxx84mzd4H3kaoysG8OzVUPTWMnec5qbMUjiN/IMoOS9bqzYK5x09gfCe4L3O79/6MjN1+vD17sSt77MeOljh3O+K/H3uFCZzeXuy1bnxGWlHncAfkpNVTJcrIS4OflEcTIiGVPGIV3Tx1z3iy+txXvmKsx+FiJnzqXQzxyC+veNVqhU2A1+kQ5vp0CKiVV7dODU0YJPj4fV3Y9p2EY58M57Sz0zRaIdE0yKb510Syf31PPz0H1OWeIaVB1jrFsLU+Q6i0zdWUPXKJ5vWnFSTZneGopSbLoGZ0TFtBvhYm35qdMe5wzbIRJTfoPAqrVi5Qx7qwihEI1wR8aYIBWYHZjVm5La2e21kNkNQWJHxohSBVNHgwpN0XDSWEDygBqj2Q8TuymKsaMW3s5p15CLFDrnfcOhkjRzKbw+eFFMVZO9s97Vr0/RVbXKFBInNa16ip5YUbGDl/DXfUxCDFpGF4nz3jH6iDWKmKT4abSW3CsFEckP651ZRlUaQQZPe01rDJMR0qoy8p429q53zf3n+D7SsR0DV4cAOXOxaUXl5tOSfbQdIylK5tPbGqW5cAqV/P5yO/J6F3i2ckvhvZsiMaYaAikIYwEapxcS/LpxRETRdqwSfOPd+Mg8Q3h4XGsq+lQQFK7I10hjJWW9lCO35yoySEotfB4fxejVlwwUfClsWis2IlUiP8RajCM5epv2dhy7HSJjTBQl79yrvUcr8FkKqU+UKCV9LpxUInlIEnMzpoxCcdI5Tjr7pUb2X+X6urj5CVgfY7z0sRjwbyuWnkKKWmseTFx+l/ynx4oq6ShFcnwIclgYBbZujLGEL+3r89Rnui8h1Upx0ji8SUw5s57l3HXsoJRmo8SzZgyRV9u4SMCX77SRTv6xjfh4A583LaXEw2Tvo6Q817/balVHHOWdnp+H7vOz3kkKd0joLCTYdWPpnaZvBLFxRjKvGisp5EEMW2SDV4qLVcN3LlasOrfk2GynwnkurJwUGLkURp8Yknz3sSS+uPFLLIBR4EOs96YqgyhkxIBsvvbvX018vg00ThLTp5C4mhL7EHl20rO2ck0pF/wUeL0duDkklIVGKzZGcZgSIY7ye40oiU6M5WoId3xbZsRIAefrW1VnRp7neRw0BEG81lbUVymL/0wuhZBzHeMJcvfZzShBmkaLLL4VJCDEjFaJVWPf4BVRpAjSWi0F1HwAz941D4kSGq2Y0l0zxlxEETaEsnCNoHpUKfk9bXVqflsG2xRvC6dN5xh9YuXkOemrHUDKhctRkqhXrVuck63WqFqohlrspyJOwpsj9+jj38kD1g3wcCP4rsj5/L65iqzOsnuo46H6/+f6Ts5qPo2gPCEh/JdcFn+jUC0F1q1j5Qy7kLg+BE77grUGrTTPekGptFIYE2uhI/wrQfOlWLk+TGynyEljSTHjS2JrBLVVKLrWcLFq5Htv5Ppbp9+w7/hRW18XNz8h652l0j+g9Vix9LZ59/3EZR8zl0Ng5cyj+U9vU1OtWk1XrcaHIPwHZx8nzr7veuoztda8ISH1zvD59cAUxPa8VM6Bz4Vn69uIibOu4dBH9iHhTMJYvRQbSj2OyB0jeaaOQ2Zp6Kpx9I0QFZ3RbPoGo/UMeLz1+XnoPs/IWirlzsHuY2HKmVNnJRhyjOhSGLMcRCFVHk+BT09b1rWw2U9pIWGnnHm5jRgNwxQlobrRnLTiNJwsbHrLSev4/Gbgcgiss5CuBy9qOa1Bo1i3FqsUWSmenzQ0RvPPLg9sfWQKkW0sZDWxU5pNa1i1mu/tPDeHxKrRtEUzBikNxyjqxZPOoZVi8JIJdd+3ZUoiq/7cj1CEa1SQTl6r22f9rBfTwUN1qT1bNTxfNUxZ3GdbY7g6TLzeB0AagKbAgGbVUrkq9X6mQtB3Ecy+qbEQ3O4VMxI1e9c8JErYTRGf8hKmm0tZDunRi8Ow1gpFYTsFVs6y6W/jLZ7KYFPI6Pg4nd5WXtUQMmOQEd3eR3b1ezwNkb6xlFzwBZySUMk540hy1TLWSOTBQ43H3CzBw3YKx15Nob4nj5lLgnCvfUyCkNZ9x9WfU9Rd5HOKQtqd/2zOPptVsK7ycq5zpm0tJ9U12FQE63oM9DajtEJlTQ5J7ByM4uBvVbTOyigrp8TgCyetNFoSTyNF2MvdRGMNuTYHndU0nX3aKfxHaH1d3PyErI89XvoqVoyi0tD63QLqgMVBdc6MunVzfhhGfkrKadHkoHD24/n6vF3+bt6QkGotrrN9VYfFOqbqrEDL8zJG82zd8vrgaZ0WojGzg/LjG9AdJM9AbzXbLGON3ip8StIhNxZFWUwGndE4rZ9UyDx2n8UiXnPSRnwqlSyb62eW0YZSwj8IMTPETIxZYh9aJ4d+jbJQdaSkKpw/5Ywf42JuqVCMPjEl6ZatFhnuboqMPpEyTCGSi0KrAkpXD56EUdJlbxrD6/3EZzcjPmUshVIENXFas08JPDTG0De120/QN5phiky2cGalQEIpJp+4xNNbUaEcWwCcrxyf34x8bzvSDpqTruGkkdHc8XNz2je0TsaWZ60DBaFy6YSHqjhpDVOC6yGyaWt8h5LDilKWke6MAMxmc6WUO4efNXpB19YVIXlIlDCTfX2VZ88H+cFHQcyyYvTCH4Ja4B0VxE9lsI2VeyRxBreJ6aqiPmNNwlYKvnnakkphO0rK9dz4zEW6UYpUYFO9qub3+RgZmgu2OaMJeHAMPobIq50nFiG6DyQOY3zUXNInIfvnVLBOXqatT5AyrbOkIuooraq02+pFSv6QCjYE8T067W5VbvP79fogDt1dY+80Z6tGGp87iGrneLXLoCTIc+erMtNJKr3PhW+fy7g25lKzDWV//HFYXxc3P2Hry4yXPpaHxP2fM3dC+ynyaj/RWoE8V40caBRR3MwBdXfSjOuIxqe7hcyHyNW/knn7A5C01urOz3wIVXtx0gnykMvyObf+Flpers1oTjtJiQ758SRkuHvfl/iLJEXCxbpBHSb2PmNNEdl5a4mpcLmfUFov46uVFUO3913GaE765s51ADWLKeDJ1SG6KqqsFGzrxkqnniL7QbgnIcOq0YQoaen7KPEA67ZZEJGYZdy0GzzXJfN6H9BKxnDeKFCSwdQ5jbPC00g1CuTy4LkZI9ZIurIPBauhZEDSDQhZUCEJQ1QLF+LgM2vqKKx2ucUJ76c15Y5vi1GKmzGiteais2L62Ej4ZYyZ89Xd73G2QJgLzGOzt1JELWSi5lmGdetoqpQ61ZGMVopNYzmto8vjd1CpuxYSJ0eHZ0xvvnsgHJFGqzryUoSYauiskI+7RpKiG6PYtC1Nc9dReH5Pcyp3GptcUUWrlESiuFu+yPUh1fvKEncwF/2vDpMYbnbiybPdRjorSObK3Y4epyio6MONh6yTxlIod8bgChnjCJHbLqq6IaaHzSVrczOrmWaEyCpF01pOO0eohWZXOUgo9aQKNjqzRDbcuZdFCshjcYRREBHX64t7fjspGwYv429fDWJNRVr3Q+T5uuGsb1BKfekm74ex3nuH+it/5a/w1//6X8d7z2//7b+dP/JH/shXcV1frx+hdQzdHh9wnbu7Qb7Pzznmnsxw9xTFnOzKJ7aDcF361i2W8n11xTyeh88Qrw+SyGxK+WC5+vsQr59SZh3/+UOQdGvF/GxGIPQTqNpxFmyX3+RN5cwbm9ZTZn+zT4hCDl+lFa3RnHVOUoCzdLpzWOPN4Lk+BCH5Il3oTQ5crB1nffPG9/8uBfD9AlsXccNdEtqzED+nmBl8pLtYsWo0l3vJaHK2EnAV9do0aEWrVVWeFcaQQYmfzqaTrva0M1wOgcsh4IwQIo0yPNu0y/gsacXaaV5eC8m8s4rDlEFL0aGUAiW+KkZpVFHVql7CKa8Gz/XoQTd8UgT1AvGdKZXPNQYZh1kt7sevB8/aaUKYCxVBpHyUAMvO2Vv11hGx9yGztzEIP+a8d2QU1wePTzLaUAWcFYTqvrPv25Ddp96NvrW0RjOmzHaMrBrDaSdBrKla9bdWbBXGWO48vzGK4+3NlLk8eDqrORAWOXTMmcknUTnVwqF1smcMFdkTPp4gPToXPt9Nsn84iRvpWsO6ms+VwnIP4eHctyVwV0FMd8fgBx95XW0aZhK/NYquPGwuedwwKato6v1VSPBs11hWSt2550+9Q1orGm1YlTc5cCHmJWR2Vt3N7/wx18hWa5VShDRsUUQyVhtWzuCzjAJfnLR3ODVfpsn7Yaz3Km6++93v8sf+2B/jN/7G30jf9/yP/+P/yD/+x/+Y//q//q+/quv7ev2QlyhKwpIemyrB8POaHHxaXXzfhXT7EPdkO0RikQF3KtBZIyTASRQXLzbCA+msuO5qVeo8/PalNlpzsa7uvo/wQR4yynrIffRtxOs7BVrdACWPxSw5UPcLt/uQ9NXgIRU2veOm3JUkW63fvHF1vYtJ2P3vLpfCMFVeTr2eQ0ioDKe9wiiRYotxOzKKUreFykxklmgHIQLvx8A/vdyzHyN95x707Lgvs36y4KkREMKhqdJ2oxfE7hAyJ1rTtZZPztpb2bwCrQLbEDlrJO9oNyW0mmM7MtcHz8ppkoLDFHi9nUBBTgKv56z4RlVuzflafWNpXOFyTBymRExF3H9PWklyrmojeR6gJEg5cj1IIXHWWtbOkDIMUyAVuB6ECyNeIXKQhwKnjWHTCIn65T6wbqpku35v24PHNzVUNGXIcLF2kn1WPU9o5ZkA6d43dUS5rYaArVVLlEEsihgiqcjnuE8IPS48778jT70bfWNxIZGiuCLPsuSYsnBLCvXPy53n12hIWX5v7wyHMTCEwqqthNV6PYIMyb95vmmxSnE1BeZA18FHhpBFndY6CRvVArXdHCLDJG66IIf0s3WDNfrJZoY6Br2L7AgaN9VR0+JjAw+bS94rCuf7e5zl9kax/w7o+kN7wUlrK2JZSOl2xPcQ1wikUYmp4BpDk+UzXQ6e1ho+2YgX1PFeMiXZB34UPW0eWu9V3Pz5P//n+U/+k/9kCaj8y3/5L/OH//Af/rq4+VW4FtKcl27UB+n21jVgzafCNAb5b6PfSrp9jHsSU2Z/iItra9s5tI/sJ9mAYxFH4r61Qn4swhGRNHF5qTcVPn/oEL2PFlHKbXRH3XiOC7O3Ea/HkNiNUfJ1skDWV2MQi39r7yi2tvXvzZD0zE0IQe6Vu/d3H5I2H6935U3Nn3kIif0QeD14rFFsGrd4vVAzylqnwFDHU3dRsVyqhBpRuCgF+ylyM3pe72U89G2r0c7wen/r2THnK10dvLjbWvO0R5ISldEUMmOSIE0AtKLXGmPUEgp73jfiexNz9QCR+6c1xFhwqhCVkgLIGZ6vHJnC1SBeNZ0TNGE7SLF+3ldZbUiV1A1XPpGz5rR1nDZWPrOP/NPXA32jubiwlWArY8GDj1weMo0xfOus4bQT4vtUSZnKKFQRZYsxwo/RgK6HeqtFmqurUaKqnXzbCIk2VLfgxmqshd0YxfemmtM1WsIxV5uWmAs+S1HYOsOLTYvRMCUWknyoCMumjQ96IT2GsB5njD30blijcZUPo4sgWXPQpSBFMs6cUUYKbH3EaikaUsq8zpkpRkLSlYclGWStM5zey3bbHCG+Y0jyTqZSvW9kPDlMIpWeUqEVYhJVnPTWgg31JrJjtWbtNFeDX0bnMRd8yJKx9UCx+DGNUJdX5pG9QPv4hvN5fIBrNH+P687SZWnMbOVNtUaMMn2SpiemzN6nJXR1cm/Grvworvcqbn7xF3+Rf+ff+XeW//63/q1/i3/33/13+d73vse3vvWtj35xX68f3ppRlsI8zy/4WHBGqv1VIwnGY8z0rRyQT81j7/NZ5lRjse/OTBHarlrAO0PjNJ82LSsnic1KKaxGlExGM4Myx5udUrzR8cyfQ5o4MZS7rkZZLzYtRd0tzJ4qIOYCLeW8OMquW8thiny2m/j0RGS3UAu3nDlMSfxTQNq7VNPGK98CqJtHlTbXe/vU5vFUd338mX2SeXrOBbSYfk2VUyLKM4GYJZCy0GpVUZzqUVMKJYFCvqurQ2A7JvY+0NUudOcTJ0otnh26/v4pZq4PE1MsfPOkZdM7Urkr/Z07+1wP4lIK+2qGN/MtnNFYJbwGpQXdE/Jk5hAiY1TYJMV2DIWupovPD4RWQq5dOc2NgtY11dpeTMmaxvJ6H3m2zlgjjsMhC1LjguLmELBG02jNkBKtsoIO6cCmayQh2Ro+OW05bRybavo4hcR2CnwRMqetE46FlZiEQxD/nKIU402iazSHKfNsbTEaroeJEAvOwBALz53hpKrWppjYx0CuI5nRR16FJD4mnSCcp3VcTIFrxBzO2Vt3aa0UrjYIx+jD/CxNId0ZxdxXDD46ujo6yCcf62iwOu1aXQmpaQnrvM/jcVZXzx4ZR21qVIVSisEnzu8Zai6qLi9ZcM5UiXJ9BzXiybKpkmYZTxpSkWKnyw/z3eaCrdyThZdasAmKVrgePCEkGmdoneasf7gx+SqVqvdRnmPncwUoczelfX7n4bZwa6yitaXabIjL9RiFtCw5Y4XWGi5W7p0a2R+V9V5XN00T6/V6+W+tNU3TMAzDR7+wr9ft+phhcO/6+2ZVikY4BolKZgyZgpD9GiM+7ssB+cQ8doZnRQEgsPw86tJ1Bu7qoSsIS7X8dreyyDkXZ1vVO0bLrPupwL4ZLUops5uk+z+pstfdlDjpJBV3VmMdK4HeGPOUQoqC2NzNqdKUPAfl3R4WjZb7sxsDqYjypW0MN5M4hPoKIR98EsJxlt/xLpvHY911Uz+L0pAjtMaQWzksBKkqHHysKdtyb+Py7w2QKiomf/Zs4/j+VeT1zpOL8FhihqTle3ZWV7dYeSYOIUoonxL431cSYhNzHQuIqVpKme0UxVuoSAFltKrBfOCDkCD7UhZ37VN3y9nwIfJqNxFCZt0alBFL+vPW4ZypsQ1yWF4TRKIcM8pCwXDSOtrG0FtFKmL8N5VCVqLgOqmcioOP+Ainq4YLBc9WDUPITEnx3BqcE+VTYyQVeh7zdPU5vugz5+uGwUtRPIRMzpmQYd3Kwb3pDFYL6pBKxjkhs2oNQwxyvyuqNEXJlkplLiKFnAryHV8PiZPqawPQGMmjsnWkmrIU1+vmFulUhTucuv0U6a2mde5RMuljY5M5LuHzKZAptOauO/Gdn3FvZKOQ8NMeGWGd9g1WawYvQcGL+VJdcyPitPCJCjAZGU1pbv17DBIp0phqk1A4Kuz1owWbUndz/GJM3AwR6wy/5mJFrLyoxmiebdpHi5UfpFJVKcW6dZzXM6M1t+jQ8SgMeGNc5mNhNyZ0dfaOpbAbxLX4dNXe+Tk/DsTi9y69/qP/6D9itVot/+295z/7z/4zzs7Olj/72Z/92Y9zdT/h62NHH7zrSjlzGAMZMTuLMTNOCdWIsiaVIgdCc8vaf5s6ae7qXm5HPr8ZGIPIKJMqdEbg8n2VjJZSoGS2E1gTGK2Wg2aKlEINC3y7B82xUmlfD3ytFNZJN6q0dFMbrdhPkZjFefOx+6wrmdT7RNuYpZAp1bRstpZfUBWgdWKI1lSSbogFawyuHlQUFpQEBU5rinoaBYPHvXOirc9KJSsLWlCIk6iNSsq8HiInjePZ2rHTgpBYo9gFSJWA6Ixi0zbo1nIzBIYwcj1E4YykzK4UuinyfNMS6yGZSyH5gqtkZJ8Lq+YWDm+sFME3h8BNzqQkLrIK2IfINEn3fXkQW/iuEYQujwFbu+J1K5lNL3eCbmw6kVaDYjJJLOSpZGmgaQShm2JGW3HqPe0crVUIrKDotGJKiatBjOD2PjIFVccOhmGSP7dG5LKtFURIVDAO3VQrfJ+IRrgsGVAo1r2TEWh1x9W1iN10BlOLX6cNttXcjJHOKE474YP4lDmpY0rJEbt15FZI0OfiMn2kiBpC4lNg1crYZNPOKJ38jFVjKqFd3tf7Aay5CCHbmrs8lXchkyqlxCW3vQ3cvLVn4M7PuD+ygYLKhZJFbm+UNEMUKdIe+rU5l4X3NoQaqBkSg4+o+m75Ujizt9dxf696qnmci7XtELiaPM4YzrtmQXZmHkpr374nfywj1LetxaV7kuZRVU7b/VHY8b2X7LZI0TLCMkZTUkZbRbn3ud7lWfhBN+QPrfcqbn7bb/tt/IN/8A/u/Nm/8q/8K/ziL/7i8t8/6nO4H6f1oQFuX3b5mBkrLN05g1aW0YtBWu8kvLLaZtCaWuy8wwxZZKyJvZfk2c6ZqlqQkdOmFX7E4AurznGm5MW6qiZ9WqvF0Ave7kEzd4a+wt+N0XglMtV51BByYTcGpigjjTm76qH7rGQ+x/UUUVOQg1sL8rNyhlzUG4qt0+rPMt9XrRXnvUisxyDk1xxgCpLltNOR1qiFd/Ggw/Aj/CUQyar8f7LJpVrg7MbM1T6ImyyFapPCISR6owBDCpLhJXwneL4KPN+0nHYOleXQ9BkZl3gZ8Qkc35DTrU3+2hmUVpRUsFYtAZGzgdyMCraNGKuNIcm/T4UpRaaYWHWGdePEWE5V6XwqnHWStu2UwjlFQYIftRK11BAjPgrXQGkZG25ay80Y2A8B9JzUDZ2DRmlarWSEglyfD4lXY2TVGcZRFFrPG0tn4RAyyd+mUAtiJaPFBHgvh+3KmRqpYKp/TOWIKRnviou0lv9OmZNWZODzqLIgh4z4zwgnqHciS89R3rUpSYjhfgxMqdA3t+7CYmoniMHFqpEYCS1o4rEXEtwlzeY6gphl0k19r97HWmHOyaI+g/M6JurOtgjHI5uU5B3sG3HZnUc4ndM0ztz53Q/lWSkyJeclc6lxms5oXN0HytF72TstSJqXd+ah5lHS2sUYbzuINcBZD6XY5bN1yvxIKogeG4U11Qzx/r2fqlrx9ChOYbaM8PHdbTZKKRymyKHGYczmfz8Mjs57nZD/y//yv3xFl/H1ur/ebv721UCCuRIS+9YITJ6F43LSN6ADZ61j1VjJekGKWdkQ1ZKs/dhKdZ5+1rsq65RuSrwxhBeTk3xOqzWmemgI6QfQt/diXk91EXNnuA2i2AipULLcv1MrB0VIkva86SrRMc+f6030ZAyJghQnuzpSMYinxrp1Eg55T7HVGE1CLWObWXK8HwM5JA5TZEqZ08ay7iTQ8WaIrFrz6EHytB+PBO1NdTTkowQ/jlHMwc46J121NfROlB87H1FKSKZTzqxrmOLVIdRoBA3WcN47Xm4jSmvaRubx/+T1gHleOF/1rFvD64OXg9WKdF/V4mX2A4kpYxWUWrDMxGcFpIqelFJTwa1m5cSYMNaRYC7yfYQiqrluJqPmwhCFW9Q6KaJVUtWUTKNKoXFG8qYQ8udJdQP2KaOq7Hw3JTat4by33IyRyynI81B/3+hzDbwsnK9FQr6bAj4XLvqGU63wOVMyC0FdKeH3bG3Ax0Jjq0Ns69BKCtG+MaxxqCw8iXmcMB/IU5Sf2VpN1gVrNCGLWd4hCK+rcYaQRK10TB49PsTueyGlfPdZmq0KYpIDL1gphkqGk76qbCoh/qHgy7ljnx11H5J9bytCez9aZU753tfnxWqRg5fCok6b10ON3yGIs/CnZz1WKWIRlaI7ei+1EufnKWVeHzxTkuDJVWvf4ISNIfFq55lypm9kTLMPCQ5+GTV9iJ/WD2LdH4Up5J5dTl5GddUUtKkGh9noN7xztK5FoZrHok/bbJQinliXe2ki5kIqRnm2ftAcnff+bTc3N/y9v/f38N7zL/6L/yKffPLJV3FdP/HrqzCUe5/fO0PZsyGXNZqLVcunm7amCqvaVYqT5ZQKcYpvrdJVRTq4B1emUoPeUj3YKoIyhMyq+osU9Xh4o3T+Eas19uiedZWoups8l/uA0jKm8lEQCmvkd6esudyNi7+GVjK33zQGrc1SbFqr+eS0Z11JjEF0rKxbu7jo3odjFwdiMYslZhlNfeIMn8XEFISgWOasLPUGveDOepsfz6qxaJUoRQ6zMcl1N5V0Om/KsYg9fQiJXDSxFDojB6MxmqwiscruJ5/wUXgfsSjIRSz7M2zHxMUGXFVabIdImjKh0axLOToYBUUxWi22/T6KPHqs5ndNPdhHnzEmVet/y74Ss+fRoNVKDtkjnkNKGUhc7ws3h4gyMnLLFHpr+NZpJ4d+kPuiAV0P6M5qxqBqsCU0zrJGQltDiIxJAjV7pygedr56BuXMUAui2Xm3N/qIl2DqISPck71PxCT3Up578b/ZHQqdk2Iw+4xpFU7JO9AYU32IqgNw/dlMkclL4bRqzB1H22O07CleiVZvZil1zlQFWeT1IPtM5zT7MXOZxF+GIgXZee+WQ+s+kqKVqBtn/tYs+7aaN5DozhlCzFK0pswQZIS5bu0dQiy8PYhyLgwdELRI5E8aSYefydLz9mSVNALW3HLCZv7dIaTqDm6WMM48BFGRVmSs1OT0H1XuycwxutxPvB4CqghH0KbEbigYo2mq6k4VsReA29gJpzXPenku3xZ0vB08L/eepqLyklsnHLkfBkfnvYqb/+v/+r/43b/7d/P9738fgJOTE/7qX/2r/M7f+Tu/kov7SV5fJsn7Y/zeWZUyb4izu6k7StQdfFpUQ+/CgbFGs2ks3ifGlOiKbEaHKeJs7cAqL+aYyCiyVUuvBYq/Y1wVEiElriqh1xnNWWc5XzVoLUXRTLJrrBAxYyrspoDV8PykI8Qi/hoxs655LWNIjCFz8JETre+acdWf1zu7SMLbWtA9pNh6DCIOMZGVIEG5gM8Zn8RW3Rn9ODlbPy4vXTXC1fBZcmuaznCuYd1ZDl4KCdm+ZONxtTvzMaHhrrmZFtPE1miSzhxiom0NTSo4qyqxVQrQq4NfLPIbqxlKZhhD5fMY4hwGWDkfckAkxhRxSrEdRfHjnGI3Bq4GUVxNPjG2EefM0r3nUlg3tvrj5IWIbS1c7xPGSDFVEP7MZzcj553lYtNStOakF5RgHxKb3jGFjK9S85NWzOfa6o4s3SicryQOoeRC69KCasac6Y4UOgvXADFpO/4Ou1qcTUmjkKYgxkxWsHaadSfPwX6MIk2vpPljLyOArnJv2tYQKdwMmau952TVSBhsJe/e3yce4nw89iwJj8yy6iyN1ux95HvXE1oJuXoeaaZUeHEiP/OhGAMhJps3ZN9wF4nOtZFRSrhCTZoJsfqNveShxu9+EKVG7hF1FEor+8rMU6oT5jtE55kTNkVxtw5JuCgKKg9Nc9JZbqbAIURWnRTrP6qp2PM6TJHLfRCzwRqCezMGUsr0nWM9x7Y8EDvxlM0GHFmGhMSr7cjeR5pqLyCy+LyE8/6gR3fvVdz8h//hf8iv//W/nr/21/4aXdfxn/6n/yl//I//cX7hF37hq7q+n9j1VfkjwN0E3Ps5QQ/93srvpTvKK/qQsZnW4iwbU65jHVFBdNU0yphqXlbhbK1gnAJXlS9grX6jGwzVuK11MmaYYublzgPwbNMt19k4I8GLPnJ98FJYVGfZnHI1CKxjuSCBf7kUXu48sUB35I5s1O2LTi3Cnio2H1JLABx8oq1doamHtkjkb9Ukj63HCqbjcMPeGXxSHFIixkJnNZd7z5wkTQFdxJflcoqVOKsW0rir19A4S2cNrw6BxiiSLtisyEXRmlKzmvLyXABYY5iC5Dmd9opDAD0GppC4WDmerRuU8uy3gTHWROdG8dn1yD+5nAg5MvQSfvnNs55f+3x9K/FVilUNpByDSNNTEen91Zj45omoO0qRv3tjIj5DKhmTNUMqNEbI0yVnUkzcjJGdD8KhUmDXLWedYwiRjBLisJKU6raxrBspVE4bx2BE9ZZjXJCLUkcslBrQ6UUhNhtenpx25FT4fDfWFGglz7HVy3jypLEPjn7Gij44Y3ixkUL4ZogYWAqb99kn7j9Lqr6rq5pNJZL9mhWvb92rlZKR3s5HNOpRDlhf0bPHkOghyPM5p17PIyurYEqZPt/dSx5q/BZyMFKMjHUUe+yxMwdDzllcMyftGA0vtaC0WkQOVyGyn1jeR6Vg7aQBuuiaBSV+HwLtD5Jsm3PhEJM4bNcC2aga1XA08T8e988o133l2FNBx0XNFh1a+F1K8q2Mlpy3rnl8zP5Vrfcqbv6P/+P/4Od//uf5Lb/ltwDw3//3/z3Pnj3j5uaG09PTr+QCf5LXx/ZHuGPuNklh0WjxZpltzN/FyA5uZdGmhufdKiKeHpv1jeX5hspVAFVg1TnWrcNn+TerOh/fjoH9KFLEi76hKHWnG8ypcJVlQ5+7u77RQOR6jGyaJJtqzDiruNyNfL4duTlEphQ57RypT6QCpYi53RgTikIp6s6YaQgZRWa/cC6o5nOa55vmnTap4845JpEcr5uZcCr3LnNro/4Yn2HedB4qmO6HG7bW0LeGXUi0Wi0RCjkXemcwRj6nMZrv+cTWR1azJ0pVm6wa4Q692DS83Hu2By9Bf1rhtaIxAn0fJpFNd02NlyiZ7Vhq9pWu/i+ZmzHyjdOeb54aDPB6H3g1jPziy4mrIeKMFKO7KeFM4TtGpNVFPNgWYvc+Jq4Ok6jRtEYZGU35WBh9rLyUglaZ7ZS53gfWHVgF+zEx5cJ0nchKRiUbJxEPysDzDdV52fCst4whMuVSOTxSRNrKcykKXu0mpiAkVqNgzAVTvVCGIMUPACExaHHIFZ5QZlU5MilLMdgatciWH3oG7jcVZ31TC69M42/T4d91n7hffOc63pl/fi6CUIlb8C0yYrRCJ0nubpSmsXePkzt7wRNItFIwTvIeHptgjiFXkqt7w8H3fgM2h0+WAsMjHjtwPILTC/l6lkinilitWyONFMJZS1l4WyFnBp84WzlOeoetjt/3k8wbI6PU++7PPwz161ywzTl11qg7yCLcFobHsRP3zQgf/NlHz6JRmslmulpM7X2UWJLqqr2yP/jR3XsVN69fv+Y73/nO8t/n5+es12tevXr1dXHzFayP7Y9wbO42v4ghFUxIZHn332pkByy5JVsfFwO2rhYcbxubzWMiZw3PGrOoN8Yo0Qq5SCLxTDZdrxwXfYNdrMBvu8GIQMcn90IcG6N4vZ/4wol3xuATfhs4+ILPmdPe8PogzsLnvuGka/A2o/S8KcnhMnc1bTX+2o+JYYqMKZOKzPmLM5TyZhLw29a82RelWbdqKSRTzvTVgv/4fj+2Kd4vmELKIuc9Kjg3rRCEfRRofdVaKWorHO2zHJCN0bwePFNN/50VP/Pm+82znikkdqN0to0zQFXueLl+rQXyd0aRtWbVyCa6QuSyUVUuQ827AUnmHqbI928mfExc9JJbddKLnHr0omg76xs0qrrRCsl3iln4WIAr0Cr4bDtwiOJ/82rveb2fsNowxEQeJdW5ZMWnZy0+ys9RWtM3msbJKGpWvq0ag1aOV/sgMRtOE1JhW9FCrYVIr7VCGzlclVacdQ6l4OV2RCtN396mNA9T5Is0Luq8mQASU2aYIlcxcbpq6I8k2/OKKTPFRH/0fCglOVk2JHGircntczH4zs9kfZayqgVHTMJfUfJ9pywP/fxup1zI1IOLp0foTyHRndHskGu9717u85v+NrmiLb0T0vQQEsZonq0llPWLvX/QY8fnu0Tn1urFxdjp22uc5d8oxSebln1NH0fJyHhVE7jhTZPQnRcX8k0rKrXjwuVd1K8fG9WZlWuyN8hIf+Zt5XyXqP2+lIf7o3ohomv6IsrK/RhQVvNs7T4oaPfLrvf+jf/v//v/LpwbkI33//v//j+22+3yZz/90z/9ca7u6wV8HH+ExZivmrs5I94xIeWFWHp/nPTY751h8daKTDCmzK7+X2vMk3D4fB3HjqlVVHsnWiFUePy8c3c60ONu0Gr5GVPMFbGRdXPwbIdIVw2+DlPgn14eOO8tjRUEwGmZI18Nga4xDFMgJiVuyyhWLmOt+HVoLbLm60Hcai/aFlUPjylnrsdI39x1J33bJnW82Ruj2WjFzRhEUaI0N1NkVUTp8i6b4lxw7qdYVSe3G3sqwmMopuDcbVI1iE3+FAVF2vQNq1bGhvCmGqa1hvN1SwGGIAq5TSsjlJg9G+3orSYhCErJ8j3HigBR5M9zFtLo1Ri4Hjw3PoHSnLWay5R4PSaMSZx0FdZORcz7yu3zo41weebC9noIXA+JV/uJL/aBZ+vEdy46rveeKRZ+6lnDupFYhOspcdZYnq1bXu88pSh8yVA0z9ctjVFcHTzBJ4ou7GqqtbNaCLFGSxK4UgvK0dTcLRH1qYpSRXY+8Wwt9gWSB5WZUuJySJyHTNdoYsxMOdfvoSyjzmNH3+M4lH3NjNrU4qjAMl4RNOhNNdK7IgOlSHacD4ntGHFW4g+MlkKTyjNSWdx/Wy08OuCtI/Q7iLBPiz9NYzV2vFXTzSjK/L7PW9BDAbClVLKymj129JMeO01jFt8gnwp9YznrhI83//2cxYk4p8Kmb1h31QQTkeqH+p3fNwk9eBFeaATF1ChY3bpxPzXGb0xeiOIfE9WZ9xlRLN1mlFmlaFu95M19COXhPhq3OEYDvVactW4RWvwwLGLeu7j57b/9t4vJ2tH6Pb/n9yy+AEopUkof7QK/Xh9nzVX2sbkb3BYLWs1S7Vsy3mOp1/NLeuLcYrU/xcQQM5/eK0Yeu45HZczOCCrjzBvSRLjXDRrFWWcrxybSWs3gEy9rUnRrTHUZFQ+acUpsB+mstFakELkaJ6YpoJXmxWnDqnFcjYGbKfHM6ppSXRhTWkzVmqPPpyJLGrBFVwvzx70zjtfxZr8dA7sxAgWVkHGG15z3jlB4ktsEsJ8Cg8/0VtRAMd0eAI2pab/69r2d5bwF3vAeaR75/gqiiPrmWV8NF2fyN5x3DaWqYWLK+CIhnCkVVvpWJnoIiXVjuB49V3txqSYLinPjM74UVlYwszEmdj5y1jly7iiIlYCkmpeFRHo9BCG3h8i6d0y5VDM+GUd+e9UvmVdGFTZO4j2mmKvMXDr3GXG6PHiuhshZC8YImrLqBHmRfCYZu90fucyePLkUyPKsasQhF1hGwroIujibSFrgUAtKg+KkNZx1TUU05Tue4m2Be9parg+BL6axussKsbvVEBtxaP5QX6y5kG6dqcaaiashsG4MP3XeSVJ7VUutqlrq+H1/bJS9SMSrl85BclEFmYmZVTP7xdz6QTUzOvkA8nE3ANailaqKuqOYCf3mvmG0ruKFN/e32ddmcWr2Yuy57hxNRcqOXX7vm4RqLcX7GBJDTJJjRblTgD6mfj3M0Sjv4Wn2rijPHSuAlOkawzc24jg8pfLBlIeH0DhrNOvG0jv9ZE7eD2K9V3HzS7/0S1/VdXy9vuK1bMBVsTLPXxcpdSXSKVhe8IcO55gk+HFWB83jq5TNHdXQU9dxB/J+ABLVWtFow6qUt3aD5yth5l+Pke0UUaXQGcWmNUssQC6FtVVcjwFrDMYqnFJce4i+EFfw7bOOddcsn/XlbuJ6kDDIuUOXA+nuZytAQTbFrETp85R3BtzdlMQ+PrM9TKSc0UYTU8EnGYHlklk54azMxYfW1SNmilwXUQvdDEE2qMYsBm9TLTzPOoGFlZfIgv0U8Vlkw85ozvt5FHM3ofy+QkJRQyarfFsrKQac1RjtsEjOj66Iwklvudx7VClsfcIo2FTi941PHEJk8AVjoFGKFDPXh0jpBcFwdaywaSzaaKaQUOrWTXryie0YxFwwFZw1JArfOO1ZtYK67ScZ8e18JueArQXrYlJXD8IZrXq5HbkZo0QY9E6QSQpX+4nW2cVxWatb9ZPWkor+aueJlc8g4ZEyxvClUHxkPwVBn5AA2sZoXg2eEgvKCIrROsNJjXGYUbX5WlUFMRpraF3ievDsgZPWkAtc+8imzXxy0mH1bHZ5l+D/1IH4BrpgDa2z4kGlFBf1XXsM2XuIAxbT3WI/RElZX3fiYzTbPWiFjII1y/0rR2OTu/wOxT6JRLvA3QDY/LDHzv194yFU+rh46p0YGV4dAjFlTvrmyPyw/pzMHZPQUuM1SimsrMEZtQSUrlv3OOeIW7fpdxFnvC935ymaQfclx2AP8jMrefuHvd6ruPl1v+7XvdcP/6N/9I/yZ//sn+XFixfv9e++Xl9+zaGEcLsJzVW2VtIdzdbmnRP1QGeFAPbQCGRG5Q4hLZlAm9YuvINU3q4aegzytkaTH/CLmF+cQxBXY2feJEpqrTlftWL2VhVgPmfGXOiPDN6yKnx2PfGt8w6rNS/3gULhfGUxaE56UcOECu831nAIUSTwgFIiS/Uh1xBPtaQBayUbrJnDPNXD3hmPQc8akclmBW1FBVIuDDlyNXhKhuIFwTL1II0pcz0GqHyInBLOSKhj76QgWDdGkrOPNr0pJAafMFV6P4TEq30dJ3aOmAu7MYp9feVZzNdZZjVXzGAVBsU+SG7UprMEdWvWFnVm04rM9HLvF/fZ2efmsJvIGcYUIQop+dOTBh8ir3eRsoJvnjZcrKxA20ZGdVbpik7BpKK4IsdUCaWWksWjadM5GqcZfeYQBBm46BsJTQyRWMeebXX9TUm4PzsvI87TVbNECdgBXg1xkYrPB3Zn7x7uSrFkHJVSKAo2reFmSLyqac2NFc8Y7SRIdNNYDiQ55GNm3d7C+3PBX0q5E4dCKWxHj7OCrBy8YtVKIZiKJMyDkLBnZGAOe30oi6zAIqtPMdM2x++XXM8yCjaaRj/e3c++KvPhe1zsd87I+LpIaGVjb+0ejkfSy/W1+hb5OUJJfBKk9H4Y5PxZj0dP74pK3C/sShGUO+XMZ9vAkDKbxi4ctOXeVJNQ8eaJKKQBapyR99JK4bKGRzlHrVWL2/Txekyc8aHO9Qunqp4Nj2Xovc+62+DeFrJD9ez6YbkTwweMpd5n/eW//Jf59//9f//r4uYHuFLK7KfAdhTi67HZ1vJSBpYAvcbIi9g7UcTcTPHBDuJ6CBXSnb0eIteHwGkvVunvMq99DPI+Jt89uIp0wfeJhQ91MBbh8PhY7jzduihaC67RaIQMu3GaTzYN+yiOpZvqvxKrAqur15kKhCwzeqszIYKHZUN11uCsfqt3xmPQs0GKpLbyoACsUbgond/KiVFgVw+6L24mfCq0TnPSCin4agyE5EFrdr5w1t1+tzkVDiGIz4g1PD+1EtFQ0ZpchGy5KlIMDj4KL6W6LucsB2ZMqXIbJIdmVlMpowhJRj3nqwafMiHK5ykAFWm6NY4TX6SiRGJ/CIlQNF3b8K1n4G5G1n3D+cahtZC5lZLx32mvWTuHNQml4bqR6IyVU5y2DcYUfChiv28UxkDJmtYIJGCKYtNbhjFVR2JRkpx2AqW/PgRR4pVbz5SZY+OM8IecEefsVAu5Gd5fd074Fj4SksjtLw8BrRQnnYVS6r0pvNoHccU2motVg7OK7RAl3TxJyOn8Ts3KoTkO5eow8XIXWDuFVbrmh6kZRlzGXY0VfyrxMcpL0rfTkqV1fZgq4ViQW6sq+buOYuYD6X2JpvN7rmrzPhf7IMhbV9+HeaRK5XycdjKSfghJmFHDbS1KDz6Skqjq5mt7l9HTY+t4XF6KIHWvKzFZK+HszCPy44P6tsCKvNwnNo2hs2YpXo4DSp+MRKjq1YcI2ccj4/nff4hz/Vep1tKVVvBUmvwPen2lv/E+N+fr9dWsnG+r5usx8Ho7EVJm3YnE+9Zsq13cUk8794bPTazw6v25sEbQk9NeNnir5QXfTZGbKXKu3y49fRvk/VDw3HGH0lj7xsvysAV7wiiRN8dUDd5yoWkM3zpf8cmmo7HiPQIw5UJvNaqICmcm1zml0ZqFDOuMocycpZojZFAYpxYuEzUM8L53RkripTNWJdj9TSmELCPCuonNyI1PhawUm96J1DJKhxiLZDZ1VUKslEJreHWIPOuFAD36yDZlGg3XjcOHyG6IaF047RtSkQ54OwacrvlOXeWKpIyfInutUNW1l5K5Gjwr6+gaGc/4JJ3+mBKn9+TnWikZE1ZkyWmpivZTYt1CoxXei0S6d4YxZZQqUBTn65aLTcuzVSsybeBmDDgno5zZQ6OxhkYrvn8zyv2tm/bgM4nClET+frFx9XvJtM7SFsVWZRyKi3VDpcjgM7SNFaVOFmVJQWz9+87y6bqjbcRJd0qF3RBAVzPDGnsw1hGZ1QpVFJdTZN01POsarFK8OgRKzviUyEmzjYWLlcJqg1HCtco5s+kc59Xn5ybGJQ4lREE5rBFH73UnJncpF6YsaJEut6oqhaiKfC7yPFdOyOV+5Gonyd1nKzGkxBoUhZuK/MxI3vsQTY/f8/vFvk9SpBbkHdr7IB5JdQ9Y11Gu1W+ONGb7gpwKjZPn6fUQWIXEp6edRKnETO9u/+37oBLH5NjJR753PZJKRosxBGMoNObNAmJGLr552lNUVZ9qIZuvnL4TUHp/PDTvv0o9rCR7KK7CKpZn7Xi9i3P9V5lV+MOKC3pq/eDLqa/XR1vHlfhuDCJ1DQlUoW1EJZMK9Nbgk0hwW2sefekf86LwFQFq6qYzv6SN0QwxcdLaR0mowKI+eBvkfXxNb3tZnM4P/u85F4w19FZGXbF60iglUQqxyG/pnOb6IK7Ev/5Zz7oRLxinFbbImCQVqsOurkQ8iy6FvU+crR2dkU371X7i6uA5X7V3vDO0gsMYOKRcjf/gtEqC50LOakVSYm64HYRLIr47Yl9/0hp6K54ZrRUuzpwVo5QUQVpLmnjvFCFnJg+9zWwHz5gK3z6DdWu5KZ5fuZzYTIFvbFaS7j0FJi83aFaN7KcgZFilliDRMWT2Q6Q7scv97o1mmzw+iPrizrPEXBA7Ntpy8AkJ4i5cDR5TJBn79UHuzWnrCFru88Y4QKTYJ40ESu5C5httJe0ePT+NM5x1lqvBs50CubDcM5SYt607x2EMvNyN7CfJr4opM5wmvpUS5+tWiNAFzlaWUhRBSaF0CJEUM5veLoXNEKTomeMghiBjH6XFdqBUp+nr0XOYEs5ELneZVHJVG8HNJGPZi76RYEIS1hpe2Oo3hVok7sdxKPsaW3HSGA4hY7Vexs9oQVUTt1ypVQ0nHcZIrpwQ76O4VVvFOArK1jVyv1tncEjhZD/AM+cuAnLPKC8XWi0FbsiJVOT+GeRwP1aH3d8/JIHd0rlZbWnYNNV4sxKBFTBFiCV8ECJhFex94vVuZIyRlbWSVVbHwOKkbh4sIJwzfLLpHg0ovT++DPHueLo1ilWj7xB8H4qrmJ81Y/R7Odd/1cXHDysu6Kn1dXHzFa0fhAvlffhXo9jVdOOzlZPuv5ImNbzVAvsh9ruPmRgzrdN3DhaQbnd22H1oHRdfU0zsxsAqGk4qnwEefynf9rLE/DDK1FgZQRit6whKfkdW0BlHLjJSialgreZFazjpGlwjrqNNlbdvJ+GdrNxtZk/vZPPR5ijYMAma8vngibmwaQxWw+gloDGgWbWiVrocAjfDrXvn8vmt5plr0Uo4TzPJcOVk3JUBVZ8nq2uuF0K2HAWaYkzCpRomUWqMQS0k45f7ictxYvSZz24GvncD41nCWk3I4CxQRB0yRcUQM701uJlzowR1yUck0RldmlUtsRSO3X7mTlsjnK/iCjdDqCTiiEUKj2cry82YUEU4SxLUmjHKEEJmrxNO3aZsx6P4DZ8yN0NAG83ZquO0bcS0DBZ+0m70/Mrlgct94PPrgevJ45Rm02le3sDl3vPt0xUXp604B7eWjLjmbseABhqnuPER/3pfDf8ELZkDH4PKhClxvfdcDX5xPC6IF9LlbmI7JpxVPN+09E6hcJRafIdcWGmNmxHQGlwqRby+E4fiRJNNSpl1J+/JwaeleD/tXfUvuVWr5CyIyd4nQQXqmK+zhklLvpCqMvuYiyj0akHVvKf52t0G6U2jPK0UShdSFHM5a/Udj6yHDto7fipW0VTk42LVEGLGGAgRnNML6vGuiMScYr0LMuaaQuZqqDJuLYqwOSV95xOn6/JoAfFUQOnxeXCsfFsQZy++TGfdLXfw4bgKiF7QXrjNgHobuvZVFx8/rLigp9bXxc1HXj8oF8qH4N9VYxi9ZjuFJWcpVDlwRl6Stz1k8ws6hMTNQdKOtULg6oPnpHdLqOXbXqgxJHZjJNRCZAqJq13geUw8P+kEWXrkZ7z1ZalwsU8STnj8v/etcBlmcqI1mme9ky7IasmOSknUGFbTWkNjzWKlLvP7zH6qEQlOFEhGK7ZDQJtbcu52jBUiFv7K1RA56SyfnrQMKWG0Xq5v0xaux8BuEvfOY/VFYyRL6voQSDnXdGuD07A9eBK3KpIUE83M81GwnYSsKnlRcq/HkHm9HWm0hOYZYzjpLM7AYcp8sfOcbxrOWsdpZzC1iCtZsbLClbncT4ufDwo2jfA7Crdy3a4aOJaa7WW1IqTMYYyknLkaQk1bz2SKEIKdYYyCYJz1Laum8PowkVN15lWiuFBaFEMexak1rBsnCKQX/xhfycFWa8aQhByrJGV+OwQ6p7kZE4MPXA+BfQhQNOvOSSFVJBjQZ8kQKlkRs+Rw5VwI1mAKZFsgibfTFLOkwKvbd2VRX/nAbghcVoXN6crhNFz5wj5ETrQgP7sR1q2ozT6/mUDJu9s7u4wbjt1i7zccwo2TsM5VYzm4yCFlOmswWrNu7u43oj5UhEoEl0MWfCn0rXj3KCWeTY0SvpEz+r0Lm/l3HV/vbJR3GBNRFWI2NTdOs6qZXLOT7+xFc/+gvb8XzMhzSIKWZcC5D+OgvN6NfP96xOciafUUYk6ctgbnbkdksTYx3QNxGPN6SJWk1N1AUaXEhqF15pHrlWbxPkXgOLPMGSkIY+GdCdNfdfHxlEnjDytY9Ovi5iOvr3Kuebwegn9LocpfpTtOViz0J6Poq9fJ2x6y+QXNuTBphauH2xQzPsiBddI34mfwxAs1F18hizOm1Ypn65Zr5bkcA1ZrNjXo76Gf8djLMs+h9xEJ4AyZvjVsqux6fpn6xtLnhzeZWGf3U0gcvJiT9Y10TUoJOTRlUdLEJKqYxmp2Q+B6irRWNoOb0S8oynwgGyOExtYZplywSi1kwDmhfFuDEZ0zrBohMN5MUVRKWZQ9m85RlGI3eHyUkUWtMWidYdWYyrXR0q3Hlu0Q+P4YsEoD4qI7+MTztWPTWygKax0XFjYry4tVy9lKJK7rxnLSii/NkEQ2r0rlY6nZrdfSWYux6o5cd05tn4mSPsrzf2adKHR84HtXB0IsKKMpOctIxwly1DeWPiYmlXhhZEzjY8GnSEhJinan+Xw7orSEfE4p02uNcRYfE5e7QN8qLlYdU85CDLaak9YwJYMhYpXhbONoG5GV51zQBV4ePKvOcdGLkWJjNFPKxJj4fD8y1oRqqh9O3xi01osDsBRcCeskWmQfRPqrlGLrEyurUa0jU6rTrQIladcHnym5ME0J7wq6HnzHZNLZjdfXBoEiSqMxZqYcWDnDT60aWmfuGNcdr1VjOelstUcQPx6rxY04ZBiCoBVN3UfuK8HeZx0jGLNRXmMUIRVRESnF64Pn4DPO5qW4eeygfergfF+l0fE6VFfsKWfWTvbmKWRyVuxD4dNOLchYTIXn64ZN+3Y38uOx/+DjnfNgjNIQWa2EOPXI9c7FyNysTLGaXxbZ859V9PtdpwM/iOKjMZpo5Tuf7iFXP4z1lRY3//a//W//RMUy/CBJVY/BvwAXK0fOhV0UU7dNY98w23rb5/C51Hm/vHib1nFQ8gJeKDjrnjZoyuUWRZjNnXIubDqHmRTOaQkGfMIP4SF1wfEc+qR3GB3ZBYmT2HTuzst0n1s0d1X7KTBMkVLE0VRR5eZDoG8t604M37SyS0Lzfgr4WDjvpQDajp5Xu4mT1tK3Qvz0qdDKDSSZTIiJm5AWxcrGyec9XzdLKOIMUc+jxUbrGgJZlhRzY83i5zMXGnAbcJdzoWRR2eQEYxEVybO145/5xPWUcdbTOUOjFNpUp9VSapZVoVtptNEUMnHKpFDQVvhHxigcmr4xdTRX4yesXuS6Yr8u17Ct995qhQuJf3Y5SnxBa/i0twxTZvSZgsfZxOg1N/vAlBOdNWxaJ34xPhFI1QxQ+CYYhcriwJwKhBi5GSORxOVB0LMYM86IIujcSNSEcYpQMs6WijzOXLXCZtVw0YuTqrhQwzhlbibPfhIFDErhoxRW3gs3JGVDKmopOFbOkI1m3QRUEQLtGAufnjnWTWGI8llmy4G9j/SNFLipKHxIIqNPGaM1RktW2HHgZkKRi+FMZol1hKmEg2Hvvt/HoxBjRMlmhljRNUOMmSEliJlcpBDsmtucuXdd90fwDxFntx6MuR2xbFr7KIr50L7yoUqjpzgo+yniY2LT2CXeRSnFSRQRRlFyYButcK3mk9P2jbyot92X++dBawRx3ftE6+yj0QdzMfJyK8VXZwSlzbGQtSDWfWPfa5T0sbMK5/VGvpaCVj+cr/WDXB9U3PzP//P/zGaz4bf+1t8KwF/4C3+Bv/gX/yK/+Tf/Zv7CX/gLXFxcAPDd7373413pj8H6QZKqHoN/hwjr1tG1lm8hD7R7T3j5fmFitKhpYhRS3WstPjBP2WrPaImvyMduDMuITCnoKinzqfXwJnl3Dr3pG5wVldPbiqV5+SSZOG1zCw2XAq9jwFjNBhauiTFK3HhTwVnNppWZ+H6KaK3xGS6soW8MhylyfYj0jWVKiavdyNYn4cxUFOT5puU7FyuRaD+hLBnjrfRzCSs8IiEfB9xlVVBayeipd9XpWbxappi4PESGZLhQcNoZfBH1B8ljleL5WpC4lAq5EppPOkHCxpgoSXHWSXE6ZolqENKkemPcmosUWtZWFReKjOLZ2tFax6ptUCqilNgVdK6QrWFIkm92GQMFeHHSUYoQKRunOfjM6UpTKOxDYt0Jp+yzm4mXN57GinT6cj8xxcI3No6EHH7OFDpj6K1hmGTAl1OGUlivG75z3nO6ahmmyBQTr/aFYYhM1UtFab0EWzqjUdXpOdQDde0MB2cWB+ezlWMfEn2S59YpQ7KJVtlq86/QOaOKkayi1gp3SEvhOsTMxsF+ku9CflliD2gtnB+fjtOzBRGaxQKpju58vk25brR4ykgopFqe3xWWrsqXu+Zx5Oeh9bYR/NxcPKTCfAjFfOqgfdKI7gMQiTkg1Bh1ZxcyWmGd4byRd0kxj9Devwh46DzQWhDeqyEwxbS87w9db2M01oiHWKrf49nKLR4+79ssf+yswnk9NK2Yfb76H7fi5j/4D/4D/sv/8r8E4P/5f/4f/vSf/tP8zM/8DH/37/5dfuZnfoa/9Jf+0ke9yB+X9YMmVT0E/97PSfmQdVyYrKvkegiJksW3gUrK1Vo9OmrTWtEbzedT5PVNJOZ6IFpFZw0+Cdn5frf52M96bJMEIRHPh/3blkizb8l481IVARmmyFUdxfiYqiS40GgxPBtCprGKTedorWI7JbRRS66TL4VnjWY7RK6GKF2MteQiHJ2b0ZNzf3st+RFlSZRrLEUOrmP+hFa37rjzn62s4RJwVnJ2ROGmuOhbVq2M/856w24Ud+FPTxzGalIS7tIsRx1CobHCL4q1IA8p82rnaZ3hW61dNuRZ3dI5KewOMVUpdiKkhDWam0qi1ogXSM4itT4AQ8qcryTv61QpQkq83iW+fz0y1KJw7YRkvRsjndNVzZXobEBrGIMQvX0qElOBorEKtOaTdQtawlOLylA6tlMUcmuRzvIbm0b4UVNkO6XK9RE/oZtR0K5kLNaIBFsbhVKGF6tGfG3qd3AIicOUUI3EI/iQOeRMX8dHjYamUbweIj4UTntDYwt9VTWuOyc5XVXSPKaEj6J6XEiyY2A/Bc5XLY27jViY07NPWsnOujr4xSRz5TRTKLz2mc5pVp2jNZqT046SRexutX6npuD+un+o+SgE75zF82d5fx/YF+fw3PO1XlDMJ5HgI3TovoBhGYfUQ/VdOSjOSXCvj3khoE9BMqVenHV8suruWGU8tR4SkDx2HlgjTdKc5P7Y9RbAGM1JbRRs3dPFDPXDm+Uva9x3vH4UJeDz+qDi5pd+6Zf4zb/5NwPw1/7aX+P3/J7fw3/+n//n/J//5//J7/7dv/ujXuCP0/pBk6qOK/HHLNEfWu8S6riyhpscOHhxcy25VCKgoq2b0VMP7/w7jFIcYsZqaJQmJdBO0bdG0r3zuz/8H6N4nCF6Qrrzc0oRkmwucKok9+cwRfZRCMK9FmmxVeJlIZus4bTTC6JUFJy3jtYaXie/eNqc9g0FGaFMUST5q7bw2GhxVpYURBUTYiE3UgQJp0XQMOAOn2fTGi4PmmIya2fQClI2dE5hrWEcI8oozlvL2bqpCEAGNPkoq2ndGF7vvFjZGxkvvardtfBMbp1l5/Tf6yGCloOm5Mzn+yjPijXoqo6ZfY2sruoqDWgZk50YwxAVmzazLZ7dFEkl07qOzszfhyjCjJbA05KFNN8ZxTgELlaOdWPYT5GrQ0BqHMPNEJhy5mLT8Os/XaG0rgVgwWpBZsYgBN3Gag4+sB0D37+eSJUYfNY7Tjv5bk97cUA+htzP+qpOPGoCWqdxupDRjCGyj7BuNOcriVkYvBQDfSPj1NlyAKRh6e6RThun+ewmcdKVB9OzR39Leu4bKX6vDgGUqBpzfS8PVb1460Cd6fL7iR6ODzVbi4IxZuGxhcSnsCC7b9sXn7KReAodgntkXaiS6rePQ7QWmfy6tWyHQEiJMQjX7qQTU9F3Kfieur7HPnfOcLFq5Dt5ZB9+OAi3LI3FD0uBdH/9KErAl2v4kH/UNA2HwwGAv/N3/g5/4A/8AQCePXvGzc3Nx7u6H8P1Vc01HytI5kiDd1FnvY+Sa9VaLtaOL/Zy0KwbyUoxWi8E24ce3iW9OCSu9h6tqVkjUgzMstTO6jtBne+yPkbxOG9qg49MPlGcbIpDSliNHJQhcjNIkvgUE6ed46fOxQBOEpoFhQqpcNrZmkyecI0osYxWJFgMy6YQSYXqmVLYDqG60pqHR4uTEFdzEd5N7wwJxeglQfykFbO4y8EvHkLjFAkxkbNI902rOOstEXHl7RsxbjztHKvWSdCplyIo1vHJ7KHh7AyHC3Q/hcTGisv1dFTQWq14vfdMQdRbTT2cM5BKYpwglILJMAZQBMii8hhDwhrYDQlVFCjxFlq1hilZYilsjKlRDqJ22/rMzbXnxbollcLl4DlvxNflxaqhcdXNuF7b5Rh5vjF847wjZ6FjX6wdL9b9LdrmE4IRSWOwHwNf3Ey8HoMUJkWk1FOU5+S8b3m2fpN70VWS95Qk/LNtLSdKOm/nDIeqGtRIYVhQjNPIzhdOe0FbZ8uB1mr0pN54K1SRwq4o+c4XJRvUCJCM0nPxKao2GRNC0+pFnhxi4mZInG8aiTPIme0o9+BdRQ/Hh5qgXhUpaswS0XKM7H7ovviUQAN4dBzSvgPZtnOG55sWa7Q4bmdRWj5bN+8dNPqYgOSpzz2PbR/7uUN4PAj3h6VAur9+FCXg8/qg4ua3/tbfys/8zM/wr/6r/yr/+//+v/NX/spfAeAf/sN/yHe+852PeoE/butjzzXfVpC8jzrrff6uUoqLdYvTms8Biri3HntSPPTwzr8jk4kpLSnCBXkJ5nnx60MQxQ9vqg+eQpaONwsZ1/De8/DOGZ6tG66HwCEkydeymv6kI5fCZ1vP5eApwKYTI6/tILEMKRXaOv7bNIj/S5JRTmtvAyfXznAzeAiZksVEcQhRXGtHz9nB8fyke3C0eFp5PUP1OpmfA6WoUQcyinBOJNafXR34bDfRGENrFfsYmVLim2c9L9bd4k2UgVXnhEycRPk2BnE8dnW+X4pEQRQlXfA+JlIlIYeYEat+KUh93Wx1kevb1S7Tp8RuiDROs3Itzz9p+Ox64PvbkTgkzteOs84SYmGoEmtVCoeKHp1Uw7reGfmZMZGsZgoSTzAEMQRUyCjSJ0XjBFXzUUjVSoEzhk0j456QC9eD57PthLOScdXXDKJDSByKIGaTj+xD5KxrOO0absbqfxITESHrP/SsSaGvOF81i7fS9RhYKYXTMlbYtE78a4LkpHWthZqL5aOQhmeS7L42CPO4JOWCL4XzlUMX2I63dg+NESQ0ZzHhm3T1SlJzxIYkrDdWRsohl6VAGqqDdyqFmMUT611IoKKiE5uCyzEIupANXomaz9m7yO6H7ItPjTzm9/b4fzMKQkm83kW61i58o8caOKUUq9bROcvz2ZdJq8X1+23rXUcyX+ZztzVqZEbF5iDcD22Wj/dW4J2u6an9+EdRAj6vDypu/vyf//P80T/6R/kf/of/ge9+97t8+9vfBuBv/a2/xe/6Xb/ro17gj+v6WHPNwxTZTRFbxxbHBUlrzTvPOz9kNqqU4mTVoLVarqGxj3vcHP+OFGfYX3PWGl7uPHufOW00bSMBhzlX1n9VUh0Hrz2GLKk6gsm5kOR9Ei+ekN4ZVj/e1OZxnlaK6ylwtfd0TnNWHKetZQxysA0pEcZMbOHZuuGibzD1unMR7sQQMmMU5UzrNK3WbH0ipbB4vJz2lo2zXE2RvomsO7ckg/tqQy+Hndw7SuHl3pNToWs1NiS2B8957zCq42oIXB0CGjHdaxuDmWTjb4wgSfO4Y/SREDNRwX4MhCRqKSkyq3eNgrPesh2Ft9G3lueteOBcDYHTrqBohBweM63WDDlx8JFWi/uQD4lfuRk56xvO14WQCiedxBwMPvONsw4QBKH1kcEn9iGhdKE1lrO+ISHf/2nvxFwwZM56+T4O1T8ppiS8ohoT8NnWA4Vnq4adF2fuWArbKVCQmIRDzNXD6Laob63BAlcHX6Xa0DhNQfHt3kKNCDjpHM0Dz1iMWdLQtVo8jVTKqCKk33lNIcnv9pHzvqF3FmvMkn4+m+4BnPeOlOT90EkK094YVkZxCIXOaTaNFH9XBykqnYVYihSlk/Cebg5BfKaA57p6Q9Ux8xikmGmsWB7spshJGznpm+V9fupQoxSux4ivIbohSYHeWOGnPehZc7Qvvm08/tTIY+8TukBj7TLCGWNmN3h2IfFN2hozwlutOJQSz6MxiUrwXb3JYsqEKt2/f333P/v7nAd3TAvVHDVSSA8E4b7rutMk16akQG1q9IOf912R/q9qWvFl1wcVN7/21/5a/sbf+Btv/PnP/dzPfekL+nrJmp0zP99NS0dWSllepDEKMfRd551fZja6au2CuDz18B4n94Yk0lifCxbJgslkdgE2veZiLUXTUFVYU8qiVimFjRMl1mMb0wzZGvP+jqRwd1M9nvc3QUitMUsHopXiMCU5RJWlt5rOKYpSS1G2/FsjI5ovdh6fCp1VnPeGzsLNKPfsZOZtOMPBC0lb4ickQHTwqd7DzEnn2Mzjo0nGWttR5Oiv955vnDi0MWL6B2xaybPRChpnCDGxGyU92db7NPN6xpg5BCl0WisjLhEPyfPVW5HDoxUra3FW45L4FaVKjFZVJTRpJREOU2JUicmnhVTa6MwYI1MQXohzmogQwIcg+TjaKM5WDV/sJg5TxFoZGwLspkzfKPaTIsTCzRQYc8JpzWEUVdV2SDRa07UKa2DdOM5XDUOqfBCl2E6Bk1ZSuFur6Z2lIAaNM8qSgIQc+N4nvDacrtziTjvFLEaPR7lH8+a/nyKXB09fi+6Z7C2j24T1Qk7fjpGdD6ysOGenIpJoa2RUd7z6xvLiRFClGaHpjPikWJOJRQrUVBQnraVzFqsUuzFK06Ek3T0hTsSt1sQkhPmEvKcrcxvUKmNBIWan9HB6/fGhlrOY/Jx0VrKXUqY1htZK8+CPHInvr3c9NJ8aeTija5J5qTYBYqeQchHDwiTFujiBP01ufV9vsuPR+3aKHGpxNxcdX3YkM39uH2/voSjplHhMfcDPPf6McrYkiobTej8e22ff5b58VSqsL7s+qLj5m3/zb2KM4Xf+zt95589//ud/npQS//q//q9/lIv7SV5jfXFykc76+KBvnVnUNO867/wys9F3fXiXlzILxLtqLSZmsdc3mhedRWmRQ7fOykjleljs8n1MWKUYUVjz8Mb0Zdj5b9tUV43lpHUMITHFRKnIhnMWg/h0rBshGg7VBM7XzfXzmwOv92HpqDWKoiR6oWvFRM3VyIaQMk01WDx4Ib9OWUjCIWUh59ZCc/S5yrQT12PAGcWqFY+arQ+8HiZKppJ3LQaFj3Ehkp4PDedI5yhjD0drM6+c5uWYiDnhjGJXBB54cSIKmrZyaGZVm9aKF5ummsAVbFZEDTkLXD4GIUtLenjGGRhTYZgSqUCMqZqgWUBh6kjVaHFi/qmznu3oyRlsVWu1TsYpSoM14gvTNoaihPNklKFvZIzSNRobhTitjebTdcNukuLKh8xoIiVrnm+EEzV6CX29GWuR4QzP1q0EX76WRO9SkCJxkjT0Zyt3h2S6xJ8oJbyoXBavKUHjFDdV9dVbTXCKq30mahlTnq2ao1Tpuw3G7Tt3SzrNVSY+y+Bjyqwahav8t76V7Xw/RrKG03XDN6y4koubbWLKhVNnuK48qzkoNqWaYA2PptfPnwvmcRecrRoaqxd1lqtjPhczZ/3DXljvemi+beQBsB0ihxAxdW+IGU57t4zFGluebODeZT+ZP++87x1f/0lnuZki14fAaV+w1nzpkYxSUHLmchAjzabeV6M1m86+9889/oxGKfZJVHilPq/nVsxHv+w++zFVWB9jfVBx82f+zJ/hv/gv/os3/jznzJ/5M3/m6+LmS675wXJW0+ZbO/T5wZrn8NZoulKWl18DPmdKZfwfP3xfdjb6Vgi5/u+Wmq2SMlpJZ9hbi12JN05XD3mQpOetj5x3DY2TrjQVhAvyyMb0rgjUQ9f7tk3VGM2zTSsHRzhw40VR1ehCSLAdoW8CjdWMPnLSOdrGMgVxOtX1QHJGiK2UIgneSpOLWLsPIYlyyNZrSsJ56avtutGaVSPFlfFKFGVOlC6rVlQcgxc34xzl+7vaTxyC5dNNxzBlfuX1yBgSndZc7iYmHzntG16cdCIlDdLV70PEaoOPgjzp2vlqbuW2nbslZu6mQCzi5TKPJ3OGMckBvnKWomRTuR48uSg2nRRcX+ylqHxWR5LD5LkeIs5pQipsWsN534KCvrVL8GDjJVbh1Q5e7YOQt0MmZUXIidgoDtFwUmTksm7E8FCrhu7gebWf8DGzKobnG8fZqhFJflV3aaVq4GLBmsKLTSf39DCJt1MWdOvXXvQ8W7dvvKPzgeG0qsTszG7MS9rz7GacUay7hm8/0wti2FopqsMTKMedAyPfNjPz31TqdpwYooyfYsmQNOvOLE7JMvY1hFw4ay1Fze/LLRKrtSj0fCpvPdSOm6W+GhOOUZyatZ7RpDfHEu97aL5t5BFTZjvdBsmuW1GYHe8HM/fmofv75H5SzTtjufUUarRiSrfXP4fg7iYpls/1Xef2D8kYnJHUVS2Yfcr4ABdr/UGjnuPPOBfFpfK8xihj2FVt8N53n/1RXh9U3PzCL/zCIgU/Xr/pN/0m/tE/+kdf+qJ+0tfxg5Xt3A1KevLBS3L1aSNd0WyGNY815ge11K7sy85G34Z2zP/7EGR8MqXbme5hFFt0YyQ36dXB87xkNq0hRDiMid5KvkxB3DtjEjKk9olJS26MNbeZWG9DoBRieT7GTIpyyMyOq++yqc5k470PhAzRB2JS9I2EKrZVGbWdKscnJD7fTgw+s2mkg71YCypTivzMdau5HAJhJ6TkXApdo7noZRxSSqHMRF2tJGQzJKYUMUqUXKPPyziDKsXOBVbWUnpRAl3WdHKjFN85bzlfN5KSnKIgR1ox+Mjn24HPdwGtCn3N5Il1s0o146Gr3XjUkow+pMR+FFn8PBp1RuG1AhQnraF1FheEfL1uq6Myin1IYikPFAV7L+O1VSv5RUoJAnbSCbI0pcJUN+Cu0bTO8Wo/opWoYUIWA75cMmMsnK0U1ih2QyG04rWjtHAVvqE1n560aGWkW60eTUUL6XuKGVvv5RgzJ63lG2c9XWNpawNx0jk2vXvDrDDVa9ynQopyEI4hLaZrp50o1Jw1i6t0ZzWHKVVDy0ROEmGxbgShIfPoITg3KLtRYinENTuLU7RWJGtrTpUjlcLOS7ZZ39hlrOFM9ZdZNWyHmmBtpFAN1WIgcNcDCh6IB7jTLLGMZJxWbKrL99v2tqd+/rzehhqvW8d5LSBaIyPeg0/EigqmXGoszcMN3FP7iQQNI01mLeZ3NZV9dgyfr68xmiEmTlpLU/ffeR+ajUtXbzE+hSrVDwk0bJy7vWd1Ly818uN91vFnNLWYHmKS8FprMEpxM0lI8Lvusz8KMvS3rQ8qbs7OzvjFX/xF/rl/7p+78+f/6B/9I9br9ce4rp/odfxgHcPWhyBd0eaoK1JKOgchqwqRLwMHn1EqfenZ6BiEKyCOtPKzj9GOGQ2JKS3+L7q6nc6kVedU3UAzV4dISAfWvaNzCpRbwi1nYuPlXjKEXh4UuSherB29u92kOysmeTHl5fPOCNRs+JZq2rKPmasxcNoatNJ3yH85C7oS5u4KtRD4np/0fHras/ehOuBKQTfEhM6lSsYTYxLEbNMYYs4M+4mUM52z7KfAs03DpulIWbEthRJzVTVVWH0KjFNi1VoaI4iI1jLmsFaT20IahcOz95EhyqHeGE1rFZuu5TuupxT45VcHDiHza847Xpz2NFZk3jGL0mc/ybjBx8xphfV9KlVZJGRgZ/RSGMeUuNx6QQaM6NqUsneKZqtFDbRurARdVn5N7+QQLfXxerFp6BrJdTpMiXUnxdAUqqy3FHY+07uCpbDzkSEmrgs4A5NPNMZwPcl3u3GarAxTFuNCIVoKZ+p7V3sS4kq87hwXfbNkhk01qmPtNClndqJRx9aDsHcSY/Bs87S5nK6HxGFKUjQBpUraz1pJMC8FfEr4LCOcnAuFIn5HVZ2jlDhQh2RognmU3Dk/r1YrFIXBz2NpjS2IgWKBVesWgvj1QeIN7r8jcxEPEpC7GyUg12px5A4VCWruBdLeP9QeapZOm6eVPB96aD428pibgf2UltylYzuFeb94DEWKKaNLYapW0DOiHUIl3Fp9pxmai4/7gb0ZltBLeDM02KfMTQ5crB0X6/bBAielzM3geb33Qsg2eVFgGj4cMTkuRLOSPS+FjLKGvpKW1T0P1B9lFdS7rg8qbv6Nf+Pf4E/9qT/F//Q//U/8ht/wGwApbP70n/7T/N7f+3s/6gX+JK77XdFsCGUr3HvcFS0jLHf7ElZA9EvPRlPKXB68bFxKMWl52YwWCNrpeUwGsUjitjO3ibaNszgn3arXmk+6hpilk3FKgxUfmJAKs8/L9T7y+iDjh5PWoo1s0qUc+KmLVfWZKcSSGYZbpOqsdzUtWQ6/mTOwbqUAuz5EVo2pJGTZfKYoSiiKZKEsxmxzd6QUJ23D2An/YqjF5WnrGG3i8uBF9dJKWvX3rkWe2zqDIpISWKXZV54EWrGuHWaunZ0pckjOKqsxiMPw2arhYtWQcsvlPvB6N3LwiaILJ0ZInPsxc7bSPF91orJKiUYrXpz09I08I1oVok+UKNEJWkvy9knvGEOhUaWO00Tt1TW37sPMYzYtCEXKha1P6IoGCMeh0DaarCVNvF23Qlis3JPBRxnZZCpfR8jjWmkmH7ke5FDatAKZf1GL0hBFjl5y4bObwPU+8GxtebZ2fLGf+P71xGlr+TVnHRddw5SkO5fv2pMoXKwszopS72LlOGkcyUoK+NUg6FFMFW3Mt2Egp13D803zpLkcyLNbtFzjEBJFFRptsLV4TaWwG704DTtRvm0rP6N3RpoRrdh7sUsw9cDbhrueM3fQ05i5niLGwjdWHane1/12RJE4N7c8ntNeAlmHKNEMxyjtcUCuN5rTVi8IzpASKUdxZFZQe4A7h9o8bhFzucfN6O6vr+LQfF+n9hlVmdHugqRtt84Iadxo+kYzxjcRrMbqJWFdK/Xg9T8UGjw7vb8egnwXR3v4/P1eHjy7ITDERHGGlVbLeyQj6w9HTOZ7tJ8iBaEtUBtjgNOamXdcPP2oqqDedX1QcfNf/Vf/Fb/rd/0uftNv+k2Lr80//af/lH/tX/vX+G/+m//mo17gT+p66ME6eyD88svORudNao6cPt6gDl5k6Ctnlmydg0/0TqO1IDGSwcSdazBaMcU5fViKl6YqM0wdY9jaYRkUGJafHRAp8rpp6Gr20xRkDPR677koiLlVY1k3duEYKVUdfaMcjsfjp66auyWkIxuKSM5LKcQgfJHPdhM7H+ldDUmsiePO1vTkLMnZm9bSNZZxlwihkLuCrZ1/YxVWS9KzMZpvX3ScrRp2U6oKskxf839KrsWNhtYI78R7iWu4WDnOe8eqEkSN1oSS+Y6VTTWWwmEMxCLjnKvDBEoxRSFA772EEZp670IunHYahSBokxWkJZdITOJ7oqMYhp22lkOdw4coUteE8DoEpi+oIhlUB5/YToEcM8OYmVykt4aT1mK1uPMOQSTt2hicht2U0DUfKmWRDbdKsfOJvsh9OYRI01hWxqIs2En4MT6K4d23Twy9s6QM55uGrBWWQkx1bOssDaX+romkFDsf+ObpCoWMk0afKqlb8eogRPaT1tQip9x/Td58b4qgXGsKV1UlJ122JmVFyrmSgGHTykh0N6UaQqsrsVxQtNYZfEi8PvileJ9i5JunPc6ZBR3VWpCgm4MHpYj1fjSVQzZVVZetKjxrDedamoRjBOr4nfdZFHLH6MSqNVzXpibVz3nW2RoT8u5GoI+tj31ovi8iPYbEq51fSPwF8EEMFLs6GgWIJTyIMPV1PC1xD29e/0OhwfPn3k+RIaQFhZ6vZzsKIX/VWoxWbKe4ENXFRNW+waP8kHvktKbUfd5pvdyveWx6XDz9qKqg3nV98Fjqf/1f/1f+9t/+2/zf//f/Td/3/PRP/zS/7bf9to99fT+x610erJzLAm2/L8x7nyszw9LrVlKBZ6VMY/RS4dvKUdn7xGmvsVpjtMDrx1CzvNS1+ClgFbWoub2uZn7hrV6UHEoVCpZRqWoEJpuFmAZmDmPAOU1jbjfjfvZwiRmntZi6xcy6vX20Uy6Ln0drFfuDXHOpA+yZo3S9m7jSmrPecdJZfJx4uQvEnLDacNpoQpRR0s0QGEPg5U2mqx3bs3WHqyGWn570nKwaUsq82k9cHQpjSowhsW4k0XmKGWMVq85xWtGfVMMau+Z2Nt86w2nf8LzC2fsp8PowkSP4KAUoWrJnzlcNY8zsJ4+uAYunreH5uiUIpUPueTScdkqUMT7RWslEmmLm9d6Lv85uEp8VpWmNIlNQxdQIiJq5ZQxNY4XMWgpJKTaNYdXAF7uJnZdi86RXNM7KAVwEGTJKUbSMow5BFEk+yAh2U/15Ys4YDePg+f5V4eIkclrNJHUD1lDN9zJTSuLirGQ8dHUQme6z3hGBEBK7mHAa1p0l5cLo4bRzdE5z0TcUpehby5QKXX5ceaeQ37sbAgefj4rbqjBLgpIVNT+/cLGSAmM31rDGIoiPVvKZY5Hvf4ySU4WCZ6t2IbDGlJmSoCWzX82rnUcrcFqRkqoePvGOk+2MQN0vTAoF7xMn/V1+TMqFWKTJmEdaObMoNN9HNv3gvXuPQ/N9CLnvgkjPY6VjEv98TbH69Kx5O8LUN5b+kWu7n803r1iLeQp3hA9jzFX9J4XQMto6imHp3YeRie8vazWbxrIdI7mIjUIqTyNnP2oqqHddH1TcgDwMv+N3/A5+x+/4HR/zen5Vrg9hzM/roQfr/iYVYiKmwrpGAbwLzHufK6Mq+jIGSWeOVmbO60aQiPkFz0VGBo0W9KXLsgFYxWITDgLfalUjFhBVQy7yfzetXYjCqwrXJqXQynAgsQ+ilJrX3CGWeo3WPUx2RAkKkrIcOl1j6kYtqFJjDb0znDTyeXc+omKu98Lz2dbTN5pcJIZAKc35ylGKyCZf7gLhZqJ14gr74qRl8AWnFE1jMQSKUjxfd5xWZc0YEiVDsdAj2VEv/bggOUYZ+lbCGntjFyfcY/BAq1sUSiux7r/o2yWssrEai3jcfNK33IyB14dAq6XwOqmS3BbhYunaae6mas3faFQR/xyj5fDaT5FXB0/vFH3bsPeZ3mmKFkTnmytLSiyqvVA5JE1F7YzVbDpHY+ByEFQixkSI0tWurZA/L4cgRo+d5aS3/MrluJAnQYqI710d+N7NRNtoGiVy7Zshc94ZLtY9U4ykUrAaLgfP9RRZO/nOdHHI4yuKmhIz2Wq6xpKSFGSN1iSQ7DCjabS+w8N6aPkkMRe7kOgajTNwNUT6Bi56x36KKCCnzOUhMKXESWMxSooFhXA0dj6ynwuyIhEKGvl+QipcD4FSCptOoi8ao9GtlQKmZEotNBurRc4bEjlHVq3l7PQu0vtG0GUSh2qjI5sj4759Vaj17hYpCOmuK/DssWWUIK8fEpL41KG5eMn4REqChK4a814I0UNrRlU0tw0XVK5NklH8/L2/DWF6kgdUs/nGcDf5u7UKY28FEjPy3mjNpPPCP1x3DuuT5JPZGaksaPU44fxd1synS1n4YhToG4lW+XEZN73reufi5s/9uT/HH/pDf4iu6/hzf+7PPfl3/+Sf/JNf+sJ+NayPAeE+tO5vUlpBylE2tip7fArmXbqFB7gyueYm+XoYoBStVfhUmLJA+r3TdBVVuSUmSuExI0CdM0u44+XBc7kTHkRrNHsFJibOe3fHkK910nl+nkZeD54XddTkoyjFNjWU8iGUSisxl/M5E0Lki10gZwkQ7BrNpmlYOYPRFlOJy1OVeseUuDqIU64BPosT+zHxYtOw6RtuBo/G0DWJDl2t5zV9I8nOY4hcHyYJa7RzUnNk3Tp21eBLa4VPqW4q4mOjlRwkmSJ5TkrGdqvGvJFwbpWM46KWDVhXsuSmrfyOSloMRb6Tsx6e9w2rzi0E81UjMlXpFMU7o3EKrTWfX41c+YBVRuQ7qlrrl8y6TUBh0zqeKweIBDalshwQRsHeR6JWXI5imjfFREJxXg/7l7tJTO2M4nylSYjhY9cYTjuLQrHqDDFEDmNEd4rtMPHZzYRzlm+edZz2lv2UySpyHRTfyVJMfBEzPgnUPoVEqAVXTyZHRSyFfUoMMZGCPHsFUXOFnFES5sDKSvHxFOo5vz9dY1gH2UK1Upy0MtBSWlRp69YuRckYCjdDYN0WrBJVn08ZqwpbH+mNJSPXoY1i5SxaS8Fy8ILm5Nr5G11VhaGO95LirJ9DP4XsaqpH1v1rPh7XtlYK611IOCsjs0MQx+Fn1WRzef60uAKrimbt062LeGvUG3yNL7sGH3m998RcP0NIDD7ybN2wah9WYr3LmhuFgVQLiVtEGSQLbP7ev8xYZs7mez0E9lNcUOM5m2/+OTPBWgjJelHG5lKW8ZFCnpGPcYZIwSgeYqvG4tPtWP/LnEk/iuudi5uf+7mf4/f9vt9H13VPOhErpb4ubup6X+fLt62Z3X/w6c4m1VS/jJzLG/P1B39O7Rbuc2UUMh7qXfVlyZkbn5bAvhATRSkMhqspsEoyI57Nxk479wZ3J8ZMaxVdoyWNGSFAShBcoiBFwolzS9zDT511fLb1bKeAq1bu69ZysW7qWOZNqFgrGXXElFm1Dacpcz0UshKzN1szmQ4+0miF90WUT8D1FPElc1qLkILIr3c+4oypqjW5z8KlkMM9pMKms+xGT8iw6QXmvjoEPtt6nvdiWuiM8GEOUyQXOF/LXP167/n+zYQzgU1r2bSGTVtn60rdLY6ToEkpSSbQ3DUPPnMzRvrKo1HA6yHQW8O6lwNqJpgPQaTOJ41kV00h4owVWXFI1VhPSJZWwavdVDdUKX5vRnHX3azEe0lrtRwQuyky5YyqbtSNUVwfhNfUOI2vh5U1Corm1Xbk9T7yfC3qHkHKDN856/FVhbb3kavB44zmxdqxbi0pK3LJrJwjpAS6oJWEuoYorsClFtg5wxQyrZndm4XDsK0xFJ3TaI2ESPaWdSPmgW9DPW95bkIMzUW+i7O+wSfhaYHipBODu8MkBcPNFCk+8ulazBCvhoBVBVVg62vEhoOu0UQtcRGdNZKXlWv+U8oVYTK8cIYUE8qJb454Y0lhHLO40Ao51j7Kzdu0EkFymEQxNSu6Zi+U+cCbXYHHGBmrQmze026GyKo1jxaD77tyLlzuPftJ4j9movPkE9dDoHMfzj2Z1VWHUYjWXSkL56Z1gg59DHO6OZuvtUYiPQoi2b+n3Doefxmt6J1m7xMhZk46KwG2GazmS58hDxW4x2P990XeftTXO9+dX/qlX3rw/y+1O/jVVvV92fVlnHTvr+NDbooyMjht7WIgBdJZDRVSvX8d97uOpVuoncA8UthPcSGWqVJYNXYxktqNnt2YWLey4d4M4Y608X5mTEyJm13gagi8PnicUVysGqwGonQq12Osf9dVtEc24WebDmfENVOjcM4skPS8jqHi3gmZUiFIlIxEWlprUaa6xybxqLgZA6etkDbFN0gO0bO6URx8xhoxtbsZAr21GKXorGH0t0GGIIfcwUdRFlE4jIlQhDviNHyxH1HKsGk0jbF11CEH7hQSX2xHQKGUfEfbKWKdXows7sjwK0E4hEwyEnhojKYx4mK8y9C7UknVBWVv5/pCoA3sfCJUUzpd+R7OaA5BRo1ULtRIZkyiquhay/mqIRXFGAPXPrLpLaoqafz8TI5BrtFqVlotiN/1PnB5KLzcj5RS6J0VU73W0jkteT5ZSNtnK4mm0CuFUxKbYOp32lvL6cqxHxPONezHiDGWxtQC0ho+aQT98JX4fZiED7OPmTOr8SHhrOaFa0lFEsufrduKUuj6XYgv0bvImWf+0n5KFDP7FYFCDixXx0ShknZPEHXZlDIFzaen8n5d7ie+v/VYWzjpDaUo9lOmczLSXVcCaxlvpd2zm7AzBq2kYZjVVgpFbzX62HX2EQl2KtVHCkXXKhqt2fsoz50KrGtuV0oik5+0ouhbYFFRFWPvtJO9fZVS2A6e72/F16gAufpUFaeFL5Myjf7wEYqkgTd3vcGqfP9jjmaUUkt23FPIz/H4S2u9qOg6K6ia1dw5Q3KpjZfWdxyz37Z+NRjzvc/6YM7Nf/ff/Xf83M/9HL/wC78AwG/8jb+RP/Wn/hR/8A/+wY92cT/O62M+SHcQIKPZlcLVIXChxJOllMJ2DExREpqNzbR1A5uO4OO5azjuFqxC0rF9krm2E0O34IXRf9o3Iu0uYoaVikKhWDfmDWnjcRH26vrA97cTWgsZMSfFr/gBpxGJuBF5sFGK/RiIKXGyainV/K61mhfrFqXVG5vCfag4psx2COLSmnLdAMqSXp6qUqWzCl/k36n5fliDTwmtDY1VGCNFUi6QcqIxMiP3SczeSpZrGXyUiym6Zj8VfLpFznZT4NU28o0zzZQKxshIYQqJz25GxhAZfObZSgIltVaEXJgmUUyFmB6U4WsDCcVpJ26zKMX5Sg4gnzLKi/Hffopc7ieJwwiJ60Fym07q83LwicMUALg8BPZTEJWV0viSOdRRqlOy6TqlOXEONGRVOITA2jm0gt0UGHxEdY4mFxojbr1TzNx48bzpG0NvDYfqvto5x7qzXB4CY4zsJzA2sh9l9LA56UTd4QxGw8td5DAlcpYRTUyFb503hJIxQRDHqIWf0DSKlVU0uqF1mZiE+DxFIWtfrFtyFuTuvBfJ9/sSV+f3R2vFqpFu21c+2VnnmJIEUc5S4L4SxMckBfL5phEJdRbLhBer2dsn01nDptWLJP6kE3S0c4aTVpLRZaQGF5uGnDNXozyPVglK3FRRwMwdmv1z7qOeIcrz3ja3JP2TKlMeYkZPEWUE7WisximR/Mcs+4pYI9g6Ppbk8S/T/Q8+8uowsR/ECTylwBAkaHTOk/qy66Hg3Leh3V9mvQ35eWz8NVtqzGfIsr9WIYgqUvi+64jqV4Mx3/usDypu/uP/+D/mZ3/2Z/kTf+JP8C//y/8yAP/b//a/8e/9e/8ev/zLv8yf/bN/9qNe5I/j+lgP0owAac0S4JeTuI/GnPnWWb+kJJ92lrb6lLzcTqRSOF01C5w5G9+t29sOZT8VIgVtZMNuG4FC94hEONdZdKlcnpxkQ5vTuY+ljYIqiW/E1SgBfRaL0pKPtJ8iv7Id+c7FitFojBKPmjEXbm48XetojWbMBZOECNybhzsprRWq1Nn8wfPFzShFi5IcJ41aMpHGlKu/inQ6J1WZtPeJdWt4tmqYgoQTts5itRieXawcm1WDDwITr1tx+d174TbZOnIS47PCurG0jZVsmFHiAHonxNBUXY2nmmlkSq68CinyKNBpzdWQ2PtIb/SDMnxnqhx1ZekyhJKxWkiwrw+jELWdOOQOkxyWKWfaxrB2liFmMoUQEr9yeWDnM4MPfH51qD40mk2jSGgyiZgMVitOe4sDXg+eV9vA4A9yfxrNeT0oxI6+Svx1IWYZEzZ9w8rJIe+HwLqOgxpr6GxGVWWW0pJ8fTkGtBZYf9NYymmPViOvh8DlGDAUzjuRtb4+eA6jZ/KZ52cdn6wbUi58Vgu7F+uWghQQTTUsK+XWdG0ujrW6lewev3vzYQPc+f9tRQx9LiitOemEZL6qMR6MgcudF/KtlvevZPmOfRLezfwzc4HTlRRZUpirxZX2WCVjjOakb+5c1xQN2zGySsJ70lpTihDrff1c8zU/RJDtnWa65+eilKop3545R2xKmcFHtl78b2RcLHvAwYtnlEFhbP5gTsg8jvI+C/eq+jtOIXOZJzarhk01VvwYS2v1pRCgj7HuF9V3EtTvnSELwTpLA1fK2xPPj9evBmO+91kfVNx897vf5S/+xb/Iv/lv/pvLn/3e3/t7+emf/mn+xJ/4E18XN3y8B2lGgHIWzoTVki6tFVyNgcvDBEpz2t2a+4WQuBxkYzJGk6y8MpJiWzjPha5KozeNJW46WiMb/7wRxurBMb94SsEh5DsW3cfSxljntrPD6Rgyp9W1dgp1XFIdOIeThhPT0FaZachJEImciUrQhTn4zun8hv/OvCFMQbxvpixckkMQ7sDkA12jABkN+CAHujVipmWM2NX7lIgUOnfb4ZqSSTIiZ9U4IYp2lrNeEerndKbwfN3QVM+I086S9kKYTjFV5Y1ck8+1KzSaM6X4zIu6ZpwE2dAmY5XkAeUifhM5SQClQRCkYxn+UCXTwxTJSpFj4SZ4QorcDNJlm6JpG5FZl5SJGZ454ZMMU+B7rz03IfB6O6GNYhg910M1M3SFIWr6Bs6MfH9QM6zGiTHBi41l3QkC9E8uJ37qDD49W9XCVg7KMWROu4beSZBlyYV9LSCV0sQMOhV6K+q0mAslgW40OWZebieMEmPFk77BGMNpFyQQc4gkhfyZhtFH+s5w2lraxjHGyMoaGqNwjWbyma0PbLK4Pk9Jk1NBUbjO8mweI5vAcpDEKGMlo2V0FirRfvYRarSiacwbZnFN9bzJCNE9pLygLbsp0FvN2bpdDrCp8mU2rRjrhSQNwZwNtewH9w7DJWMpC1LkakzLvkrwN600HXOxcR8hgFs/F6NuC7jdFOu/F8RmPwZuxojV4ruUc6nBqJGQudNYfQgnZB5Hfb6b6lhXC8evSBOzmxLnKzht7VtjKn5Q68uoYN9FbHLHWbgIofowRWISNGeqe8cQaqH+DtfwVRrzfZn78VWsDypuQgj8C//Cv/DGn//z//w/T4zxS1/Ur5b1MR6kubCY5ZmLIVTreGY0jdM4NH1XYe9qvKdgMd26OnhKhlVnoRT2U+AqyKHeVZfSYm7nukBVUskm2zlDo4W7ka2WsUnKd6SNcEtOTkpCGGOW2ABrRcXyOhds7ZRaK0THwUtq8/naYbX8nJALROkGUyVQzqoMqKO2mLmeAj4kTjqHbSzWJoyWpGCRscsBVEomJCma5iyu3eDZDoGM+MCsnEjFSy74IpvoqrWEJETlTWs5ayVSoWRwTkjFwh9pqiJGCNitUVz0DZ2WbJmFzJxkFGQ0DDEtG3QxsN0lDIpvrBtiTHw2RpG1h8hJlGvJ1Y+iNbCrJnSrxrAbJv7J9Qgp842znt4ZChLXcNYbVBZSYshZiK1jZAoZY42kDVtH31U3bCO+OwL/ixx+DJndOHAzRH7NRc/ZugGEvKuGwOUQ+MYpixIr1oLhZOVwqmEMBXei6MbIFCM3o6drDCtrmXLm5V5GEGjFbgw1dBXQ1WBQyeXYRryG9iGii6oKD3FzdkoM/JpGCN+lFF7vIkprIWWGzBdDZNMKYSQFCZlsbBb+irp1BC9VFh9zYaycqtZUeTZiVX/ay7M4BEEHnb27mRutRamWxaohV7SDUuhsZucT1ginxSrYh0TJmW2RpqIoeNa7JUfoqcNwzjY6aSM3Q2DvhVt03tuKmN4tNu4jBK1Rd5RJucjnvlg1tHVkFwtVqSWF9hRvfYU+WbesOynCPpRXOAYhtc/eSTPCVhRQFMbCqjH4XDgc/DtnNX0V62OoYN9VbDKfFbtKri/AppH9IBWx30i5cNq5d6I5fBXGfF+VKvjLrg8qbn7/7//9fPe73+Vnf/Zn7/z5f/vf/rf8vt/3+z7Khf1qWB/jQRLoVNAQq0VBMyNAJzXdV8PSeclhqpdCwWrNPsWFATiHpxkjhEio3hZjRPVi/b+bRBFhlJBwx5BYNYZvnXUcopiEWaMQEYrM8mf34dm8bNMarg6RlIMEgCId7//vRc/5ukMbLQGIQEE8blprlrC7L3aTcHtatyRQv9rJprbu3K2pWch0TrrevpHRQ+ssKysJ31Zr9lPgs/20vGj7MfByL8jWWe/oGydcnIqyPK+/cwqJQ5ANfOcjn65bQil3oi7aGv2Qcuaslxc9ZEkRvzg1tFrxeue5GW/hZK0UL1YNISVUKdwMmcYoLs46nFX88tVIjolvnq8owMtx4iRG4am0wqWwSXKRvpgi+ymiKWSjSUpGLrvR83Lveb0XY8bdwXPSWYYogZwRKWD3MVNK5ryzJMRNuqtmdDlrNn0jXXQBpQaMgde7icYYUpFn5XIf+KnzjhcnK5rqX6OVbHAHn+hVxhhRFZ00kpPTKEVWcD0GQk58c90tY86rIYhqJcvnGEPhdOXYtJaX+4nXu8j5yqBQy/08+MB2SpytZdT5z0Lk1RBZ94ZnTUex0iBcjxGjLbHkag0gUut1KwGvB58YgxR/zokseM4rerX3fHLSo6zkVLVOPerxcpyBNhe4M+H9+aaVmIOYsT7ROMMmZwafySkvRUTKcggeZ7g9lWi/bh0+F5rG0JrbTv7W5PJNFHRepZqUawQtnMfncOTFUlVxjTOi/qlvb9fcPcTel1c4j95bZzhpHWPINFb2ThlxapwGha6J2e+W1fRVrS+rgn0fscl8hhgUN84uJGWQ7yqmjM/lvblIH9OY72Orgj/W+lKE4p//+Z/nX/qX/iUA/t7f+3v88i//Mn/gD/wBfuZnfmb5e/cLoJ/E9WUfpFW13pYN4xYBmrkvjVYig0Y4DrZ2VyVT4XDhzswOo00tRGY0adVKgGEuhd0oWTub7ha5iElIjs/WLfsxcHnw+JCJRmF0dfqlUHLmah9AQ2c0VhUZSRVQURRIm068akrlBzijeZZzRRtkpSIxCX0lOSolRVcsIpudHWjnTX8Mia6xi9291Yq2sQu58dQ0pFK43Ae2OTD6iKKwaax45zQWkzJDEMj3VCsOY+DVfkKa2cI4ZFJMdNZwshLew7wBdVXNpSp/pk0if75YCWlU2z3rMZKBm/1EyJAQrkssoF1h5QzfPOuZQmJ/CMQsnj9Oa6acCPvMJ2eGjRHkaT94vth6ply/s2rON0yRcQxcDxKS55DD6eU+sB09UyiEkjjpGlxr+Cev92z3gaLE70gCIYEippA/ddHTGjGbK0VsCBSJ087QOOmufU5cHwKbNmKtWdRCTUX0fNbokEit49e+MDgrVgMHH3m1mzhtDa7mbYXqND1Mka0P6ChvzjCJSWEp0DpxXt6oivLlzHaI4hJsFFeHid2UWTWK/ZiwRpLSG60EsdIwpUqUtjK6HWPmxMxRH5G2IpQZlrDV7RQppch3Ug/vpw7yzokfzXaSwl4ZdUf1Z6sHktXyjHetNB5z8XFclLzLYZgr6b+zd4sNU0UDxyjo3FmXIkjopncYpRa15aVWHEKma26VVteDoDt9HRsfSiFlyT9q3F0n3vfiFR6JL057R8qelGXfCikv9yxR3imr6atcH0MF+yFiE21E7p+y7MdzEzj/ux+WyOljqoI/9vqg4ubv//2/z2/5Lb8FgH/8j/8xAC9evODFixf8/b//95e/97U8/OMsY8RWfzvcyoJvU35nBVQlmxUhLp6vGjkUgqhLFIpzp8jplqQ2b0BGS1GwrmOZVWMXOFqeVyFO9kWupbWWrrm9jt0oeTcZsQlPgM+G83WH1dJh7IOY/2VkJOO0prXQGJG5ds5IanOUTW3dSojdYlNeJNyuwKL+WDnDwWh2IdGHiNH6Qb+KY8+JGy/qnMYZNp1dDi6jxXU1xMz1fuKLwyRollaoXEDBIUR0gW+kTN+6ZUy294mUYO1kbLJqJbBxVjw0RrNHMPamsdiUGaKidYjFfwtdRZ0u98LH0K0mZfmOtVboPI8ZFS9vDnyxC3ROs2oN28Hz2XZEq8wQW2IEo4VMvmkdjTOEWCTiwoBDkxNMWUZh2yBI3SenHaddLZ585rS3nLQOpTVnfYOm8Esv9xx8oDWw9eIPctFaBp95vZ94thIC7xAFmdBKXHol7LRgjWFVxyjr1jL4hPeRWCTgUwjsmVgESXFatvmbUUzM+sZy1lte7zxTTLRGs51CRc4aDlNi9FIYn3a2jlrk+WmMZjtFpuqUPBU5SJ6v2yUCZJa1B6txxuBjQiGyd02NJjh6dx47yGf+Qe8s5+saMnkPTZkJ2HOYbO8eRkDmDLe3HYaPiRh2kzQsq/qMHXfWrpLV20q2ng/VdWO4GsLC19GlsB8Tm84sLuhGaS56K9YGMS1+NO/LKzy+7llVNtSmpXWW56vmNjdLvz2r6ataOVePqSgE/eP1WGHylBXH+4hNtLoNAc6FRSzRzArYH9JZ+6MsL/+g4ubv/t2/+7Gv4yd6vQsR65i/MxMcZ/7O7fhLSJRDyDgraqQpZpwWBYaPQlaV36WXDSjUTkBrQUScEe7OPEOdN/bVTPKtY5lSJOzx5Xbk5d6zbg1nfcNJa1mtGmIWpGWIkRWarpVO9hDEq0dryc4JRczCWnfUOVYYZ35ptVKLbf38Z/NICCXjlFTyg34V8/3tasG2U2KNvq8bxaoRKat0tWLqtx8l1PIQxAPotNUUpdgNkfOYcNYIsbXGNDgjKqqdShQFF/V3pZRJKbEdhEuyrSGam0Z8W8gw5UxrLDFTzfFE7RKLHBJKaQqK004QqKvKSznt5fW93o18cT2J6zABj+TmlJI5Xzd0zqIofP8msmoanBaV2W6UouKit4xWC3fJKTpjyKpgjXjSnK1ECXWxbni5Hfl86xlCYuUsFysrRYVPlO1Yu0pR3a0bwxCT+CM1UqhYXZOOG+isyKavShGDvlK4TIng4cXacd437KZYUTLhwfRJDPh0fUZ3Sfx61o2paeyFZ+sGa+W7ck6Rc+bVQUzyYsqE5GRkNBYuDwGjoHOWQ3UqXtVA1jn1fDx4lBH/m1AK2SdOexmZzHEi83v7EP9AVQJs0vI+xFyIURCkrY+kKF5LMWVOulsC8f+fvT8JtS1r97zg3yhnsYq99zknive+79VrJvIlIigoacueYEu0JyIqidizlWQnQYS0k40ESZGEhETb2rNpJ1sKtgRBPjAbqTev+d43ilPsvao55yhtPGOts8+JfaqIExEnbsaAaMQ+u5hrrTnH84z/8y/Oxe6c4fauYviQiCHkwrRkcbJuz8T9k7W8YzLm6ezLZ8YaLa9LncnOWlLWnXmFP+iM5TCLG/L35hW+ct1c7CqERyQy+HBa3iur6cdY9z/T2MwlUykXntH5Wu5/Fm/joXwfsYnW4tdVijjIawRVrAUh7f9M6MinLC//+QZiv64PImIppYSTcpaiPuDLoLVqgYPyO++myJILn6174RbEwjEWdC48WXX4xiU4P1Rn3sxpSSypXmaoc8yELNeaK5cufYmZF8cgyJASOPwUMsclsuok+HCOiZCL+IlYQWN6Z5mbsqJzBlvbSdJwedBtI4vmNorK9btfS6XirOWPb/wFEj2f6nIRNUxo0H5up65SKkNnOIXEi/3CC6VYeU3vHSsnIYNVK26PinkRF1vrpQE8u4Sex2dTKiwhse4svhPy5Rwzzw/C59Fa82I/89Vh5sUpYLWYvmUExQCFMeCMZWgNYyqJ58cEdSIUuOkc2mpuBscUYkuXLjgqd1OSMeFSeLz2oCq1SsJ4Z8ApQ8iVUhO7ueC0obfNZM47UY15S153dEY+F9qYaeXEQ+mcqJ6C+PJ453g0Stikd1rGZ0AqiadHOKXMdvCsauFuKqQopoq5FrzWmM4KkrdIcvnYWUKuEuehRDFHFpXOFARFmWKh5sSzY8J5jdOGzkCMSczuelFB7edMSoUvrjpGZ5hCkdy1WklJcq+2KydmiUoiGXZT5LQkfnMtpo/Xg2PwnhenSCyFlMRI0VvDsLI4Bd4qUUBViSxYckGHRO/Mg/yDXMThu9R6yZGqtZCywmmaykicpkF8Zu4Xu/sZbu8qhq+LGGpTA54T5s/LKNhPkeQLIWTmWBiaQ3aWSd9lrHpOELf2jOa+Ojobe8fG2zfyed5neaNJtrSkbfkb50OKUu+f1fRjrPuf6dBGjefPavXaZ3U/6fttPJTvIza5/zOXevEOw8kfe33K8vJPorn5e3/v7/F3/s7f4auvvuJf+Vf+Ff7b//a/5a/+1b/6zp/7H/6H/4H/4D/4D/h3/91/l//pf/qffvwL/cjr/ABIImzb/BYpwF2DGrVWDzdBDYl4qAmSaHtRGp1HTAC9r4zeCK/BSeF7HQHyWvEsZqySE2MugqoMnRYSKi/Jy6cghUPGRzKyyilzaIaA25bTMsfMYgViBnkgnNaURih+6EF/vJYgvyWL7ToKbkYJgDyPr+5fe61SGKcz4pTllFWqJEA7rdg3jyBnRDq56eX9vjuJmd1gIEVp8LxVnELlysvZ9ve3C0qJ5b47iQTYKOEExFQ4BUEYem+YQuT5AcZOzN1GZzg6IxlaWlxgbeOPjL1l5S13U+TbY8A3HtL+lJhyRld4shHvlv/n2wO5Qq1FjOc0HGNkMOB7h0Lzm5uewxR5cYqcokhHtYJK4fNth7OaZck4L8aKRVWWU2LjNY9WTmzvYwIsWlfJDdJwynJvPVk5nqMISjhICs3xJCOjlbeoqnl+WPhDOpvnaX570xOqAlWZYsIYTcqCinit+HLbgdLkXNh4S6cnjkshKeGk1Br5010kpcJ6dOhauJsSf7iboRR+82iFVwrnNHMo/Pmu8Jurkc+3nsMs0Qd+LU1p32IkpoZaDNbQeUGfChKTseo0j9cdz48LE+Lx8+V2oOssVMkESwUGqy+jmPNzG0r9Dv/g/Pw6pViiSKyXmIVLpxVWv+SMHKPc666Z7vl7I5jXn5GHiuHrIgYq7HUiVzntn9dpScyx0HeWzeAwOnFoZN11717ZE86IyLnBqvCKYvLcgJ3Xh0iCX9/bFKLeuvgFtfW+WU0fez3EKblvcmiDhMTe/yzel4fyoWKTH0Pp9DHWjykv/yHrZ29u/sf/8X/kr//1v87f//t/n3/j3/g3+Lt/9+/yb//b/zb/6B/9Iz7//PM3/tyf/umf8jf+xt/g3/w3/82f8Go/3ipF4PSQMyXJ/yslzrS7WbHt3CWLRBxly4ex0RWg1IXUCVweKK2liOh7J7Dz8lZLFg8v57pjy5EJWYrdkqqQl5NYoVtjWHfi0bLEjEUcamOtUjRKZb9keicS1VwqcyMK2kYYfuihrbVSl8RJFLQSCqkU207Ix2eZ/HlzPEyh2cbL6zgsYlHeOY1uqJc2MgpY9xbvNLkuxCoBhEuqXA2WzeC5GTz7OXEKkSkUDkvkZvDcDA6jFd8eI3OI1KoZOuGE3KnEalbiqmzFB0QZxWgcV7myTgVlJLtqcJYna0fXRjPCRSr4sSEqVrdiqTBKXu9hyayd4fEoKd0lZWqqVCVE5s/XThRAtXJYIjFV5iXhnGHTWba9o1Y4VeHalFrZekeHJlH5w+3EkgqDs9z0Dq01p1TpSmW0mpgV1liGWHh2iOyXxLo1yavBMljDLkgAqTOicNkvkX/yXHgtg5PNb9VZ8YVRL+/Jc/RGLZX9EjnGiG5mexW5756se64Gz7PdzN0x8GJKXHUSP/D8FC+GivtDYmUNV+serUQqvvKWfUs675zFW7BGCTKnxXvHaYkkWXJl5bWQ163CaEPVElGAhv2c2TZiPLwsXFPMjXf26qaemlvx2DhTUImpkky5PMedO+daFea5MClNsOK/NLT4gQ8pbPdFDK+jPiFJmvnYQlcBUcXZTK2VjbcP2vq/q4h9H0nwQwjHkirWFIZXrCneL6vpY6+HOCVKKRnhNkL4667MH8JD+T5ik4+pdPoY61Ntuj6O1eMPWP/1f/1f85/9Z/8Zf+2v/TX+pX/pX+Lv//2/zziO/Pf//X//xp/JOfMf/of/IX/rb/0t/tJf+ks/4dV+vCUoTSIksT8/S4/vpsQUEqbNL/eTSGPPpwDxkpC04DmVi4Pw6+v+LPT+uszxm2fO6zeh0Zp17xg7y3ZwbFs2Sm4OxaO3AjcqRTMQxRslXiNaMad8iSo4+zE8Wkmm1JKzJHfnQqf1xZDr/Bp0u6770K4YF+pLwTgu598v33daEndTJBXJa5qWxJzyJTn7HM1w/v21ntGWzG6KLEnQLKfVhQt0nBNdZ/li27HkyhQSX2w7rtcdRhvGzlByacqyyGkR52BKEVPBKORKBXT3HGOtNdyMYmx31TvGzrfRXSsISZKeS5bMoKvB82gwFCV+H2dl25Ntx+AUp1SIyLjuZnR8ftWJgV6pXI8d/+Lna/7FL7f85nrkZvTiD4Rsuo9Gz5N1x83K89l1z2YQ92JnNY9Xnt4brkaHs5pnpyiuulrTmWbTrySC43rtWQ9W8o2yjFyEI/KSPxWah0uqkJKQyD/b9DxZ96x6x5Kb6sNo5maad91bcXculeMixOTcELu7OZIrDJaW2yN8MlEECQ8jlMp+CYQ24liPnu3gGKwWLx+rmp2BuRAyz5yBKSRuT0t77rR4iCgJbI0pE6PEQNx/9qzAY+IP1b5+JqDuF1FyFRTWalb+pb2B0tIsTIuYMOZGupLMt0poxX+Ome+7emdYdfL8LEnI3V3j1Nxf3rZcszfUpXMRu+od14Pjqu0N58bltCRuj0EyvNoz/LZrfx3heNfedpZBXw+edS8BsPf//o+x3raPOqMfjJt41977Fy3m4Lxe379/7vWzIjchBP73//1/52/+zb95+ZrWmn/r3/q3+N/+t//tjT/3X/1X/xWff/45/+l/+p/yv/wv/8tb/8ayLCzLcvn/3W73wy/8Y6zGGVHIpi5QLs07RjVXWk3KhWnKrxDp4N1s9O87C73/c9V8F342RjMYfSEvn2Xhxzk2FYqMTDbNBE8phbWGzzY9tqE2Vos3TyiVeYoPnvDeBe16U5hj5pvDcoHfv97NOKtJCWJOeMlC5BATm1Zgp1DELbc1QbLZwH4RxcfzIgjOdZGm6np0eC1kytIiHY5z5jBH9lNg7AzfpMqLo+aqNxiryFWUV85IlEQuIpcv7WRrlG7p1aBUZSm0lPRKUYUpCVq0181F2hq2zqCyyOHvTpFTEM7OTe+YnMRIzCFzjOKE+yePRm42PVprBpqzspUCHVIbeyLo3Is5MC3yGT9atyDGXDG5MChR26wHQ28sd3NscnAIRUaTq84Ccl3WyXv1Yk7s58xnW3Fy1loTUqHzGmelST5HaJzvYwqCDtqX/K+hFGJM7GZBp1QjyZ+WRErSkLolYqo0w9Zovtz6Ri5WrHoZp4Yk2VyKyt2S8MZQVcXqjNUi4x+cYVoShyUSkowbB38mgWpqzTw9LCxRTPZWXZXIksYBMVbGlacgbrK5obP7U5T7R8lIUpoEw90cGVrTN6VCQqTg59cfs/ybUxKMeR57fahR2kOjKmO+O6p63+L7OnJQa+U4R35/e+IUM1bLdV0P7iKzf0gS/KFKm+8iQ4W+/Lhmcd+X/Ou1upDhz43sp8BD+VjrU3Mjfmj9rM3N06dPyTnzxRdfvPL1L774gv/r//q/HvyZ//V//V/57/67/47/4//4P97rb/ztv/23+Vt/62/90Ev9+Esh5nxZkARqZbmcfO+NiYw4qobyKkz7PhvR952Fvs/PncnLRiu+upt4dogoDY9XYpUfk7icCglRpOlncuLSEJmz6/BDY7bXN77zw0SR9+tQ6+V0N3rD7XHhxRS5GmT8cjdHDqmSish+T0vEKEXIYCiUIidUb2FOlTklDLJp5ypIgTaaz31PHOQEZpQo0WotPN3PEkXQewYj4Zh3S+Kx8aw6UQVpJT+TapNtIuqGVS8Ez85ImrnWFWqVwMpJAiKXlPDeQBUZ+XIUgvRpylCquOsahXWOVXUU5PU8WXk+X3c8uRqkEVsyzc8RZw0bNFZDTYWoNUMnp2+nJnZT4G4pfN5p1l7GeF/vZxnNLY6FhWMQgviqs6y6KuqeNjYVukgh6craGNwGtoNDo7EGSlWsO3GNFi5XvRj+6eaxIs7ShlMol/dcigWsvHxPSom7OeMNOKWFM1XFCfhqdIIYeitBokpDay5PMWON4Xqt2XhLTEIM3anEZ5tOOGQFHo+eUKDkzClKI7zqLLfHma/3Yoa4xEIpgWjNZTR7fkaWlLlbJNiwsxp6I7J+BHF0rWFfe5GqH0MiJfGSihR80pe4h6XJ6U9LIhhppL6vUdrbRlU/pPjOMfP0uIgqrqG6U8qUoyjXlNYPe7d8oNLm5zKLO6ssp5jJie9wbODl/qSAkAtLLoSmDPVaMXT2k+Ch/ND1qboRP7R+ds7Nh6z9fs9/9B/9R/yDf/APePLkyXv9zN/8m3/zFVPB3W7HH//xH/9Yl/jeSyu54U3MpHq2mVdYJQ/qJawPcVw9G/J9yEb0fWeh7/tzZwWXd4arlUc3IuSZdLxbEtdav0JOpPAg6fJ1st1544u5XDYWCYLMaCXy7cGapvgS3sngNHOQzS4nMXvb3S2EAv1cWHdC0AxRU0siVdgvFdNCnOac0VWD0uymxLqHTWdZGc3TY+CUkvx8FRfi60GIhUsjZteiuJ0Cj7eduD/Xtmlry9BZScY2hr5lEZVamUJmipElyigmp6bwyrJpON2CN2vm8SjS7H9yO+MNEvJpDL3XjFahjeJ3VwOrVYfWWhx0EeQlF2mgcpHR21e7hc5pHo8SerntO768ShxDbWRN8c85xcK2E1n33ZSoGEYnoZebweGaq+/oYTVI6neKcLPWnKLm+T4A0tSIyWDFu0iKidKaybEzlw3SaEVVmlWn2rgmUwv80fVA54Q30znL41XFtoiB/ZK5PQk6u/IGDOxaqjTt/h2NGEd+4QcxrksFrQpbIDc13pIK25bAvV8S1WqMzlKojgsvTpFtZ/ijq0HQo5g5pQRa8XnvLsR2pTU3g78U6MVbXkyBGCQWJbX7fuykwdp0jtqBa6d94Y2Jz4/Rwl8LRewIjBLzNqPUG92R32d9LBJoKRLoWioMnSBc1mj6rIilsF+SeCQ9UPg+BBX5uczizsU8lCpWFFoOpef97PViH1ti/aq3XI+e0AQHndE/q1vvx1qfqhvxQ+tnvZonT55gjOHrr79+5etff/01X3755Xe+/x//43/Mn/7pn/Lv/Dv/zuVrZ8WNtZZ/9I/+EX/5L//lV36m6zq6rvsRrv6Hrfu+BU7JpuyAfYP874+DrgbxU5iTkBaVkobnfTei70tAe5+fO4Ukxc29TK9OpTJ6md9vOit27W29LxR93vienccAtVwMrKwRbo9RGt0iIm5PEa8VT6fEccncjA6jNFVp/vhRJ/LzVLgZPNFlnu1fkrmvRscSZdy0UprVoABRYuRS2a4dhcrvb7NkQqF4tBLE4vmUQGnWXmOMODLrCkNnybky9JrBfVcmW6uowO6WyO1RPDw0FWMVm9YMOS3E021vmGLl20PEamkGam0EDyWutGjFHCuxyD1zLhbGaEZnGbxwuo6h0DvLo6GwmyL/+NsTV73h8apj4w2DlZHofkksufKbbSf8Ia0ZvMamzO2pEIv48ZytCbarns98T6mV54eF21OkUBl7Q28M1iqJFwBSLDw7BLTWrDqNivBP7048HjxjZzkFKVROwQnJgDJtTLvpHY/XHetenH2ttfRW3pcUMyvvxM+mVOaQmXxmcIa7FCmpSuis1pfGXeGJSST/Tok5m1Ivi653IlGfs0i9P9/0OGdxDrzLpCKGgV0rdvme4d65+NVaUUUyynJNLROspZQjZOJz6ntnNMecuZsCa++E31VFnZhzYWpGh+IDI5/V9/F4+VgkUMk7k/TxwUm2GA2JDlHk0p+t38+/621N1scwi/s+o5TvyMDb56j1d2MxnFYcUiHVSl8q3qpL8nwolaH8fG69H2N9ym7ED62ftbnx3vOv/Wv/Gv/wH/5D/r1/798DpFn5h//wH/Kf/+f/+Xe+/6/8lb/C//l//p+vfO2/+C/+C/b7Pf/Nf/PffBKIzIes8wM8xSywc61YLbDm7hS+A2WKKRwX9EPH/N5w4Meakd7/PSAcCd8Ipq+mVxe2g7v4zpzXh0DR/kxOU012aTVbL+TV3RQJOVOLOP8qDaqKN0YsmbEZq217x83oZUOi5VFlCS7c9IZFZSEgl8r14Hm88g2REBQhpAJV8WQ9oNHELCezeUns5kRvJfDx3Lz07iUxWVKkFSv93ff8tCT2S0KrSojyeT89LBxCYuws173h+ZwIUfHbm47Ha8+LY5TxpNO8mBPWVnJW3EVBBEavyRWcbo1xg9A3g8UqxTeHpamTDMclglZYI0ovpRWHJfNocHxxM6AUTKG89A8Cnh1mXhybbF4X9pPwbK5Hx6NVR+8FZRoHxy4mNt5RMqAVIVacFTRNK0iN6BtyxZrKnDKnKfG7RwOrznE3RfZzwlnDdW+5W4QAPjjdghUNm8Gw8o6K5+rg2LXcI6UUCnGVpognj9WaXYwYnVgP/tK4x1xEdeMssabLfXm2TzgsiZzkfr/q3SvyZGc04WyA2e7b1+/vMyneWcNn22ZbUCRktLOGHeL3c67ls6IZXRaMAe+MGDqWwm5JF7QyN2R0/IHutD9UeaMbwkTjO/XAfo4c50wsmcfWoJBm/qF96n2brB9iFvemUYpvhzF42DfsXcX89ViMlIs0xq3hOhf7T8Gt92OsT9mN+KH1s+NIf/2v/3X+k//kP+Ff/9f/df7qX/2r/N2/+3c5Ho/8tb/21wD4j//j/5jf/va3/O2//bfp+55/+V/+l1/5+evra4DvfP2XsM4PdimVYDRXndjSn6FM10iptVnDT7FgjL7At+8DB36sGelDv8cqueFfciQELThnBPkHivqHQNEVGX90VsPUnDiVONNOKXEM4hvy+brj8ejZLZlHa828JEJufBAlxNfYIgCmCCFlBqd5vOnYnzKdFVdeVZUET1ZIOTOL5Qh3IbLGMnaGZ4fMUiuDUzw9ZpwxdFoa1Krhs3VH7624N6f6ncTeWiunJV2I0CkWjiGSkSJLgMMSqRRMVQy9NC+ratkMllMQ9VcIGQNoJYGG3oqi7HaKrBpqdYbQO6u5OwVeHBdGb8i5NKWY8IymZnSnqBxj4jiLA69SihALm+bGi1L0ncEhI7DTkkBLo72bUiMt20s4ay6wm8SdeIkFa+C0iDowl8KqN8SsGJGsoN2ceHqK9FbQvhsrrsY7JWPb/SK5WxXoTGXVHKpzrYQC25Vj5Tu0FlfsUqqYTjrD4CyLz9wt4rPTO0NILx2GHzLKk8IPvtPEJI3xtAga4ZrKjSLp1Bdr/Xv3d6miFKq1CrnZG/oWBpkqDK8UbH1xGe+94RFw1b08HOzmiCov8xEroMrPEyn0+kFp9IYpSNhobpEWzmqunOXRqmNOFdMiEt70O97VZL3vvvHQIe71UUrMhW93M7mUC1dtbPfSffXVu4r567EY5wasNkuDc7H/i6KS+pTdiB9aP3tz8+//+/8+3377Lf/lf/lf8tVXX/Gv/qv/Kv/z//w/X0jGf/Znf4bW+h2/5Ze7zgqIzpnL6cAbGSE8PQU2qaC0umS8fCgc+K4Z6fsiOg/9ntMio52hycMvrqi1sumF1PnQeu95fxWPk1ppZGTxAdrPidGJ0+23Lbl73Vm2nXBlnh0DS0gYBYNT7OdIiMLVyUUyjzqrKQVWvcEahcua05JbOGMhV1EqrZoF/X5OeCOjGFsVm95zM+Ym5Rf59ecr3/gFIhGdQiIlaWCAZmWfLyqK3mluQ2rqOM1gIXWCgp1CoZLZasv+mHmqxFuDWlBKbOi7zjA0x+fPNxJqOsd0GRGELJwHUe5waZRTlfGmU5LLlarIz71WlAxzSqhF5OtLLeyaMixEGZvUKgnqWokfU+cMMWd+f7dw1dA6VRVeG3pfhWy6SPL5tnekkpmjEIoHZ8m1cJwypcBpjjw1irV39J0VT6SY0VpzNYjHklWVwyxk6b7LVBSdVjxedXhnOS6JmCuuqZKG9lmUUlli4u5Y2QHKiGHi2WH4XKTO92VMYlg3eksxlX1IhJBRIRG0pip4tHLfcf8938eH0HKPnGFwL+MPzsURxXcKtrhvy/NwHuemlkO1HV41sDw3oD/ViflNB6XOah6tPC+OgW8OESpcj04chhtp+rxPKcX3Pmy9bd/IWYw0QxZS+n105nX0RVAv8YF6vPIorTgtgt4+bgdOeHcxfz0W49yA3Z0iuqXA31eafqyRzc+lVPqU3YgfWqrW+rBRyl/QtdvtuLq64u7uju12+3NfDikXbqd4mdEDHOfIfpGT2vXKE3Ph+RS4Hhzrzr/K20iF6wfGPyAPwd0sYwR379/PKEZnxA8kp0KheV+8Br0/9HtqUzwdlsRxiThn2DZL8VgkuHMz2HcSzN70kN7fRE9zZI4FraSginuunIK10cSU0Vpd+AjnrJ5TTHKqNEZSpFPm691MKgqlKyVXlFb8djuwXXlpdqpi7Q1ZiWmg0ZrByedyWBIxZ3RBPIiUIiQJK1WqcpgSg7cYY9h0kgV1nKMQj1eiFBvO7tBtw02lcJwTz3YThyUz59zSrcWEL2Xxr+k7g1aa3hpCrWycatwU2eBvGo/k2TEwdJo/ebymFEE7puZS/NmqI5XC02OgAs/2M6lWpiXRGc1mkNyqkApfbHu2g+Px6DkE+Rz2p8CUsowelUQ4KAWxVpyCOWT+7HZm5TWbzrHpDUPn2E2Bf/pikp/RmqvRkhMcQ0Abwxebjlo1KJFVayUn+HVv2a46FPD7F8eWWi+o2ra3TEFchh8NHuMMBrBasx4cqsKz00IBbgZxuj6FhqAoqFliSK5Gx9XwkvS56Syr3lEaMfTb40LMgkIpJfdlKpVcK1edY3XP7uDBZzsVbqfQctNeNu4xS7N71ZDFdxX7+8/fOblbK2mEzr/npygsU0iXA87rhW3wlhAzz48Lzkro6EP7VMzlrb/jfdb9feP8/r04BQ6LEP5XXiwrSoHOSkN43l9LqdxOgcMUyBUerbqXsvuW7XUzvtxj3/WaX//3mMWmQEItzUdVE70Lhf8pmp6fWy31IfX7Z0du/qKu973R7p8ObAs0fHZcmEOiAqlII/L8GNidIr+5qoydveSrvA0OfBusujtFFoEpOCxJuAXAo8Hx5dXwVnh2OaM4WpJqtRb/lFwqY+/eO+/kTVD0fZTobA2/D4lS2t9wGt8I1dUbDkvi6+NCjgXvDcpqVsajEbv9603HvASRq6tC1YolFlKqPD/MGKcZfM/GS/bVi9Zsent2rC0YpFk4zJGlKp6sJHGbysVEMBfxmHl2SFQFltqceFUjjCbmUKRhsZr9LD8TS8FYw8rIdZVaWQ+O/SRS5HWv2fYWYxRjVax6w7pzdDZJ7AQSDmlUpTeaZ/uFWCShvbOKXZa/7YyQUG+nxN1pYc5iL+C9lfFdG7O8OARCynitWQ2OdS8b97qhZGJKB6oinCerpIkbnaiVtJJRhDkjRoZtJ43ZYB3agtWV/VI4zJltr3DNkTkhz8wxJtSk6L0hpcyh3W/bXoIb94uMua6ba20shTnIGMhbw8pbUq6NOySme2fDzKUZ8E2XjKnz2DfzObS8q/JdonwVXlMB1p2lf4eBnG3I33HJb1U6votz8sqJ+V7+2k95Yn4fMqk1Eph6vubzOu9TVD4KIfX+vjEFUZdNQSTXuqGeq064QKHdA2d0pVQJT021pbS3z89qRcpC2r6PhL0LZX44OkZI+BXa/FAOSw/dKh/SkLwJhT/zmX6KhuNTdSN+aP3a3Hzk9aGd7f2NawmJw5Ivo52CYjdHrNaMTrObM/tZTt4xF3zz1nijId8bYNWQJKCuU+KAHEpl9JZUihixac1n24fhWaNeblAKUMaw7R2xEyRiaK6d3/ehur+Jnk+pY+dwVqDnay3X07WTofiXJEKUB81pDVRW9hwhISjNksF7Q0Us8Ddbz5QKp5TojVi7W6MZjWZKWeTlsXBcIqWIwd4xSlBmKJUQIjebjlqlsBul2A4ebzXf7meOUyaryqNRZLDiUCuozzFkbkbPpreEmNqIojA6w8orfn8bsUYydja9pIOXCt4Yvtx2rL04B8cMygANgQmFSzOlWsGIhQtiNEXYDA5KZecd8yGwS4mMYk1BFSEfm2b7v18i3mk6JzJ2gJWCU4w8PwYANr1hfyo4rXk0it+OFIrCKQj34p9/NFxM+ZwR6T66MnjxGFJaRgUxV/rOsPGWgnxtOYe1GhlRftsat2OQPKzTHIle3p+KNFsbb7CDI+RyGQ3RPEic1aQoPKVnp0AsEhEyOgl9PTROzUNE+VolKNY7g1eapdR3FpH3HcG+i3Pyc+b3nJ2WcxI12f11n0xqW2zIm8YWtLHwxyKkXiJsUuIUU/MIkz1qirA1mgx0WsaZUJDdAXKqWPeyMJ/dhI15NYTzXcX8bdExb6sDH1onzpL7ShU+nVKXxvBuihitcW1E+FPIsz+1CIiH1q/NzUde38cH4GwS9c0SqUoakVAUG28FUamVdSfQc1UCfVYEjn7b5vamGekcZXQzVQQ1UCJ7tkZTSIQip9auESXv/56EwLdWq3aSNZLU3eIIVAGXyxsf1HedVM4nq1orx1xflb1qxWA1S6qvJIN7Y3iydtQq2UIqlYu7c27IVy4iauqt4faUmYuMt1SBKRaUEnQqNNZmThUsnJbM7Sm04E5PSZrb08S3d2Ja92jt8EaBFu7JkmTD8k6Rs3BfTkEM56wxdEaxXzJDkuDEm1XHlymyhMJhyThj+c2VQqHIVNaNz/Rk09M5CTkUrot9mXjempgrJ2qpZ6eARYi+qsLNaMWUjsphCryYM1etufr97STk56XwZOtZ9w6tXn4OX+9m1p27uPLrJi3PPZSGFO3njKe+TPlOhRjF8fl66ISYnEG38UTIGW8s11vLt7eLuA1XeV66xoMR6bmkZV8PjttT5fkUCLn5QSEI4p/vF77YCh8p5sIxZLa50HnLYISQXLOgk96JMWHMUqxVlfvxPOLpGkpzzoh6nSg/BYlI+G1nW5L3u5/t9znpvu2ZuP9vP/WJ+X4Blvc2kUph1bvLc/06evy2Jqy2CJePRUgt56Y+yeHibEuwtIahb5/n6C3WnJt9yeqqvaUoLryqEAud04z+za7D7yI83//3d9WBD6kTtVaOS+R2ChgljeDZGVsDp5jZDvoXIc/+Kdevzc1HXN/XB+A8k191kl59Comn+0A7TJBKC6Ecu4vpmUJdvDXetu5vNlNIMlaJmd0ceXEMaK24Hj0+FxT1kmkVU5bRRGtwzr/nFDK5Cq9m3cZjc8zsmvS5c4YC30k3f51boJQQWF9P/9WteTs0Lohr8O5Z9vpo9JeN6rx5XvWOWiu3pzYeyvJfaDlDm95xbKTaXMQLpjSre6tpDsaJ0TvuZpEDVyR5+m5aWEph4x3WyAhIa8N60HivqVqhcmXoxcLfa3NBa/YhtY028zwmnNWtGVSSSxVl1HLddxxV5LhkrlaOwfUco4zCJJJBEJlzZEPfXH4Ho7Eq8yJFjiFQSuXb3czTY2R0lu1gcc23JpWENZq7SXJ/toMXAqtSnKKEcF6vHN5YllKwrXl8cYrEktFolpRRtdJ5w+dXPRSIJbNJ8nlao9n2vn2OM0OR8VnMFacLt1O6SPKvV1qO0BbiUqkaDLQcMMXjtb1IdXUbI9YqpGutFSmJess0NKBWuXdcy5U6N8XWSpN0O0d8FZ6VUYgfkRIX6SXnlyReq1lCRunGufJSPJYkKME5WPX+yfl9ishDxfFtp3d4MxfH/kQCi+94vGRxdAZY9e7B0djbmjn1AIH6B43XarPEaPvIFEVBWBHRwFWurzwrL72NHMvguJ0iUxBJ5NiJWupjIGEfKiF//d9fv5fOdgJnBBi4NELn0ZfXHwcNe9Pr+dRHUA+tX5ubj7h+iA+ABPfJz607xxQySwuh1ApWzl4StLXWFxffd62zi7BRiuchElJl6BylFL66q0xRDNA6K94va6842kzsWhSEe4nCnKWq3kgMwTkT67AIYrMeW6OSRd58N4sc2xktwYlZvEdKUyzFVNg0J88zypNz4TgFdiHRGYNv0ncqKPfmzVPQo/OISsYRvdF8vvYMnWXTWb6uhW92SUYMpXIoSQIUNcy54lPmOCVqLVSlIFWOp8hSKlZp4l78a3azNA9zyI2zUdlq4dUoDZvesZ8TNRcOoZBK5sUchcPiLb+97rkaHLs5ECJ0XuOTnN6eHyOPxsqjRvDdzRlFxWnVEtuVzPNbYbw9Bb7ZL7zYB5SSUeboDVoJ+1ZXIVMXFJ2XGIB1J87GMWUGq0kx8+0c+fYQuB7qRRF1nBO7KXIMsMTSSM6FzzY9f/JEs+k9rkpi+XGR030uhVzBW8uXo+Nq9IRUeH5cyFPkZhR1kTOar3cTpUn2E5VSRK2Vcr5YIohaTqGdYd0KPI3DdJwjtFyukPIlzLNW+Zquct94I01lzJVSJfvsyUZxewosqbBW8p7dz4hyShq7VMXZOSXhNjxa+Vea8R9SRN52egd+VifYhwr0phdH7ikVbMgPxhCc15uQjo86XlPy/p/z6nor8nwZKTbn69ciY87XNBrxNkqN3P0xAx8/VEL++r/fv5fOn4OzmrWynELGKlFtHprv0eDlQHn/HfwY8uyfmzz8Q9evzc1HXD/EB+BV0qBiOzhuZ1hn4S2IIqjSO0WtcgJ618P4CqwcMl/vFzoj8sjFWn5z3fOHu5mv72au1z2DVUyp0NdC8VxMNPbNw2TVRmPr3mGN/N4pZUqtbAdxXJ1D4vYU2M8RlEQi1Fr45m5uhlZC8hudpndayKFTupDinh5mnp8SRkuI5EIlJMXVIAXxvoPx/c1z8JbPtmKgN3SBbRTS7soLhP7ltuf2OPPtbuFuLmQKo7UY50CDq2IkdzcvLElGLDlnlBEvncMUyAWWXKCIn4fEIggCFEtFF+EdlCqfv7WaKQSenRJLzqzXlt5rTrHgToFDc3ceomG0hj9+NDRyskQwWGvYDG1cYwXpWHIlLYlaCkssTeYuBOavd4FSxZ35uGS+jZlBaXZW03tLrwUVi1FclqcgBnJXg3yunZFNUik4LIV9kgypWKR5cC0VPOTKN4fY0AsDFbSuTKHw4hhYD44na8/16NFaY7Smj5kn6/4S7RCaGWKFS6K8OPiKvP7ZaaZmMRlcSsaWwrGptXqnebLyMk4omYy9hFFqJeTgXZXMptgS6I0Rz5re68vrpCqqqqyaW/B9FOGsrFJV3hBnpTGMZzj1A57th9bbTvenmFu45c/nBPtQgVZKxn+2WS88lIj9rnX/sAWyZ76NcPu2pZUIGs7O5UZrVr1mhXAIV517axHWDWn92OtDJeSv//v9e+n+52D1y2T3UuTrYyeKrPvj049FNv8lRS08tD79K/wFrR/qA3D/VKOUYu0t62bNnqoEJfrmmfE+J537N6dqrrVOa/H8QGSQRlf+n2/KJauohMTjtWc9eNlIK00hU7kuwrE4F6jOGlI2uIYkhdaohFzEsl/B3SkSUubZPtJ5OVm7ViCNrigtZnN3U0QhfIh1by6cE68VnbeUKhujVg9LHmtFRhQpk2JFFUhZHK+vB8cpVIw1XG88eg5461k5w83osabZxuuG6JwCc1NGQWEOQlbsvcVbxWERwqmuojDKteKdbGiqVopWrDtLzpmTFg8QpeTkqxCTvlQqWguErhUkwCrN9dDxYhLS7NoZrJLmcLdktkqx6h1TSHx1NwMSGXE3R5yS0MrdlHh+CBJ94CzJa3Q23GjFnGQUNoXM9VCFnKgVWjv+hU1P7y27ObbPoqKL5EW9mIrIXlN62VSXwje7he1oyUVx1XeMG43S4n2zGb2on3IhpUKulU0nHJapJmj+RSkXnBZpeyqB3TGLWjBVPl87rDYcTpGnU5SMnizkYm0NoxOZ/83o2XSWVCu7SSTTpyVyCtKEnlCsO4OzhpQrWsnr/mwrsSz3vWNWnaCFuyUxdPbSPlutOS0yOuy9IEs/pIi87XR/DBldwWoZBZ3v85/SCfZtBdo10cCHvuZXkIBcLtxBZ/SFjPwhqMD9CBulJeG80MJp38Cd+dD1fUYy76oDDxlGvuleevVz0BfUesm5NXeND6fyRyWb/9KiFh5avzY3H3n9ENj1oZELyEZ4lhS+7SF7PRrh/s2pqnTbKRdMkaPSMWSmKHyRx2uP1YahM8Lt0Yq708LU+EBGI6S2KOZzvbcC/XrL6A37SRQLNGKu0RqNuPQeQ6bvpPm5myvXg6IzupnvaaxS7GJmbIGSozPcToklJk5KMeZCrYqbwV4Iu2eYtGsb75Irz/YTt6cohn6DI+TK7STRBLdT4Nv9whyqpFSrs6xdEJJUCqrC82Pkbo5MKXOaE6rtmMqLSmFOwp256i2xFqa5MDjLzeDZjp342GgFKP6QZpZcWXeGkCTrqCLuzSvpRshZNi1a82YQN1vgQqSOWeO1oAanRWTc3+5neq0kxDNljlU2dm+FsDzPmThCSJbRV6I3HKaM8wqdhF8VMqw64SRdtffLtjyt0Wj2FOaUCTFTqowLszMS+OoNT4+BJWdG59h2Bu/EbylWGRktuXBcpNk9LUFO5whvKRcxyfNWCtu56Qop01t53S+OiaeHQK1VZO1aESl8vQtsB8uXzY9nyZVnh4UpJeYlo9u9P3rDpvnYHFLhiZOx6qazr4wh+tcKWEy5NbbSNGut6Gxl8HLQKLX+4CLytubBasUSRHav2vedm8qfygn2hzgCv77O37PEs8t6Uzku4uq9fY1H8iGowP399jI6eU8rirddq4KXhP3vMZL5PhLyN6no3mT0eJ/8/LHJ5r+0qIWH1q/NzUdeH8MH4PWRy7tuojdFI+RcXrqiWs22szw9LJxixtTCN4dIrYXr3gKKkCqdlRv7cIo8P0XGTk67pRbGzqG1yHCXJF4R685yPTh6p9gvgkII9ApUhdHy8KoqSEiolf0cebLu0GhuBtd4DaJkyiWzxApKGqRURSLsrTRHsbwKkz47BJQSB+M5FSHdKskskk0y8dVu4vkxopWmc5q+SkDp7pSwzvD/6y1zLBgFp5haFIGS1OoiowxlFI8Gw8mKPN07y+1pYe0sj0aL0QZvpDkDGJqZ2HEWaenY3JNDLtSUqYPkLi258PwQ6J24B296x9YbGUUiY8JTSKydoB5z8+7Y9JZTlMZjas6suzlymiPHOWIMpEWRezhGRd1XnjvDl6sO5yQGYGU0Q2fojHgFzQ1hGdvoxs/ibrxfBDUxWszOTC58tZvEo2ZYM3hFKvDiJEaTIVei0eSmuIox83wfLllRm5bOrrSc2lPKPJsCu4bOeGdwBp7NgRenwOOxEz4MlW0nHJ9Ha88fX61EJj8lsq0UJFJhmrMo5by4NDujCUtivkeQf+V0/NrzFpLkj1kl/KaYC4csrtZj79j47wahvs96vRF4U/OgVYsAqZVeSyNwd4qS4r7ufrIT89uVT+/mY7zyPamwby7QK2PFWM+b1kTIuP37pJx/LN+Vt6V7f5+RzP3rus/rOb83H3LdH8tO4E3roQb1lxa18ND6tbn5kdZP6QMwR3G2VVrIkwWRN+ciWVTnm/Nq9OK8ul8k9TkkrNfEJOqkjTdYbXhxCpyWhAE6rQlJjOwGV6kK9kviZvSMVgzVDosQUze9pQKrzrKfBckJQYqvNfIwmyTE5d0pcT2KG2xtXiwohdeKF7FIxo6lJYxbBqc5xMLaaxSqjaGEzKsqdFXcY9dthBVSoXNCxD3Mwo/ZNt7OYUk4EyhFs+6E7/LtFFh7QahizKJO0pXDkgkZ5mDojCVXWHmNajBEorKPhW4KrHuJaoilMhhBt67HzJIk0mHlNeEY2cVMNwc2g+eqM8Si2C0RXWDtDUprUoGV0XglkufnR2nibsaOqMW0b1oyxyVyNwdyyHy9D8wxsp+zvBZbyEgq9UFpul7ce1e9obeC3uWqiSUzLwVjodMWb2EyFUpmiZkYU2t0LU9WHZ3RfHMSWbDTsOmFoLUkGSl1rrlVJ0mMPiyJU8osWUz25qj440crnpzdgEsmZlg5w7DypALPDpHdnIVMjGy0BeisKOhGK/fanArGKnTRDFaRvHB/dFXkVNjliNbSkNajNDpXxZEoDxaUcxzKymq5h4Oog1IuTFok+Pa10+y71ttiC+DVojU4iYNY9Za+CEJUS0U3e3//gBP5j7XeVoDPzrxKyTi4PFD874/FjVHNL6egSK+gAuHsk/MDUIEfut++K937+4xkxJn57Q3g+1z3j2Wc97YG9V3IHfDKyPRTXL82N7/wlXO5qD6UUixa1E3WyGk6tlwjgTPBO8vjjRjaGdU3Dos4t1alOaUsBaC3hFrFydMpSoX9HDhFyVKKSX5GASEljkF8ZGIrDKNTfLuLfHtYxHOlwvVg2A6WbhZZ8tAb+XonKc+nIHk73siDFAqsm0RTqcrT44SqFRX1BR1SFwtQUQvMLaAvNgXNcYoti0lTapsb13IZm+UCT6eFZZb05yUWoKWMNxVNVsKlqRSsllHWfspoI7yIGAu/f37EKTBW0JtOS6N2NXTEco5ayIydY+gtg7N0RkZyNSSiUmirOKWCM6C1BIBqDeTKKWYsCrOC29PCi1PAIiOkuymRW0Fcew0qkmJBxcwezWkJGK15pBQ5QwwaXQUR+GI7UAq8mCLWKLY9DN4TUmLKzZ1Zi0orhsriC5vO8HhlycpyClXCOr1BUTlMMqazWnFozY7wriRjZzM4QEz3rseOY5RC93g0LCWzaojYbpbxm/OK3aJBcTEW7LWgQr2TJtBqKZzeavpixMQtZUrJnDJcddIcV6WYlsS3x+WN1vilShxJrUIWrwiXQ7fNPZXyzk399ZPwu4iZ94tWqS+zz7xV9+TL8vp/jqyc1wvw2Twv5UyqvIIWT7HlwJXKIUgMgWuqyq7JyeM91+BzwCT8fKjA6/ySj5Xu/bEJuR/7wPyu63sIMRq9KCnv5vjJK6h+bW5+4evU7McHL6Ga5xt09HLC7a1u9vLSjGit2I6ekGUU5K0hlIxGYZWiVMW29/Sd4cVRRgW5VvZzYj9HOmd5svZN/ptRFAbvqAquBsccC6clQxU306vBctXZ5nFSySXzeC1jhkdrD+jG6VEolTkFsM5gKzzy5uKDc3taSEWK4tgexCkUUQo19VSplReniD/NUBUZQbBca4JKgVS1RE/kjK4K1WmWKBlJ8xQkx+swsVTNxkIxhkErHq08N6uepWXHOK94snKkCvtT5G5JoDWfrzq8VXxbC52RMZgqCpMU0VW0thilmFIlpco+RmpVfLbpWPWW4xR5cYpMUZCLUyh0prIZLFRNvc3sQxa33ZZxpZut/eAtd6FAa+xuU6ZLIo23SrMdPKdciRkyEjOw6iWBO1cuRPNjLMRamNtIxwyaR+sea2Xj10aTVRG+lRN12O1JMrFGJ7ytgmyez0+RwWkilTnKZ+CManEHEn+QqWx6QzwWdk2V5jSXUd1uCtSc8d6SC/QrCVG9OyWc02gtJ82UBeVIpTClxC5VOmsaYdW0nDBR6K2aC/L9zfycmXY3R3ZzwFsh7/tWnOeYeHaKhBZCet7Ua+WNPA2vlTSI7yBmXopWedXo7vxvMZdPZhxwNs+LuWLvueLOsVwI4ksqvDiFRvgVQ73eag5J7q3BKm6PgSULn+oWaVIfrfxPjgS8zi/5GOnenzoh932v7/Xme0m/HAXVp3U1v64PWmcI3dlmua/EoCxR2M+Jq9Gz6sSbIrVguFxlVGOUhFCeYfeQClejZdM5jNPMIaMQ1U/IEkR5WHLjpVhSic2pWDN0clqz2jTjuMTdKfCbzcCmc4KmdAqfC73XXA0eaw1Gm2akpu5Bry99dM4S+CVlllC46Z0U1ka6TAqOITduj6K3iloL//jpEYXiNzcjv73uiDHzZ7cLTstIyVpFzIrNYKXRspY/3EaeToGt04yd47APzNWwMjA4g9aG69ESooxanDFYY5mWwO0piHxZzXhd6azl22PAUrlZd3QtwTykjFHimNq7KkhYEGgf1TGHwn6JfH2YSakwXLxXMjFVjCl8sxfCrDOGU8qIDlvhtUaVwtxUQudi64wmxIRWhqvR0VnNiymzP8VL4jrIDP/ZYcYmdbGHD6HgnRC8rTJ4DQuV3SlwWHJrVDRdqZI0PhexCVBishdzgQIlVxwaq+R+06aSqqL3kZtezPo6Z9kOlT97EeS+cponrme0hufTwhQKpsL14Phs2+O0+ODoDFlrFJVv9zN3c6Lkwto7TipxPViuRs/V4C4y7jM/Xzb1l5u5NFyloXsKVQS2PyMxpQg66FpROjROkmok7JDke8fuJU9jvwiqth39K8/um1CAH6q4/ElWM89TilcKY2op9M6IImhoSs9TkOLXN+RmSuViA9C71iBCuxd/+vU6v+T8GfyQdO9PnZD7Idd3brA/9Ybt9fVrc/MLXqVKcVq18MjDFCiIz8eShBgKjiW9tOk/tgBFhSh1tG4eLVoM1KzR9FrzdYzYJj3WIbHuHL02KA0lFwIag7p4THT3fHcEAYLOyya3nyWtd0kCY4snTCEnzTi8Jn3Ur/roLEmM3HqnWfeW0GS7IRVooyJvDV/fTexCxunKupcm6fHGM3QeYzLXfeJuzsy5oIyi6wzjYCkFTkvCGsNNI8N6q/niqmPtZGxWmxfH80PEtIc/pMy0BA4hc4hFCn/IHJbK4BROVV4cI50z9M5SqwQ4bnpBzm6PC1OuZGDQit1p4etd4NlxIaTEnCtbb7gePbkqvj0FHg0OZwxLlKamKlEczSFzO0WMKmireTJ0qFp5flrY9BZVNaveMvQOamX0UKsQt58fZ1KFac6cQmrjSXHuDaXgimpSbc3tFLk7LEwhY1uo6H4KzItl9Iqud6x7S60KpQq9N6w7zTFVRqeoxfD8lKml8HiQKA2RvIsRWyqZHDOnWJiXzKrTqE6z7o18n7fcrJwgXy3EM1eRg+dS2M0ynu20RhtFXy2DNfQtEHVZEkaBunf6vhir5ZeusVeDGA+GFqIoYZyazouc3DTrgykk7pbMzSA+PftUKLnSu4pqPI1Sz/lH5ZVk8LehAD9VjtT3dp5VL83zUkOUziqyUoUf1DXS8TnYcY5ZRjvG8MRb5lJYDR6n9Ssp50sWnstPWSQfaii1VnROX/bHD/0MfixC7sdyC/4+1/epN2yvr1+bm1/wOtvHx1w4LZGn+0UeRKDvLLspkcsJbyW52xhFpxW7OTHHRO8kDdpVyVtRLSjQW03XyLpzzJLp5Azd4MTQTIuSaJojIYv8+P5DX6AZ7nHZ0KeoSGdCqQaF5L3UWi8Gfuf1OoGOCnstI5PBm8vXd6eFWkVKrI3hqlNUFEtAVFO5MsXE3SkSiwIqW2+BwvPDzLNDoRSRpaMLvbGUWoQQq8SQb56lIMaUeLovfLntIBe+PS5MqbLtxEH50AJO5z7xYhZkzPUG4wyFyrZzPB49ucKcBK0ZrSa0Qr3kypwSWonkeNoHvg0Fow1Xo2WJkKvCKUgVeqOQHkcxNJ7KFAudVmhTGHuHUbJxh1DY9DJe0QV8r6jVEEvmcIqcYuZuziwpSQ6PUjhTCQGeHiNTTHx5PZKiNIehZNauY3SGY8oYXXDO8XjluR46ClCq4tEgWVHHJRNyxlqDNgmlKo+33eUac60cDjNfHxb2S2HVab7ceI5L5m4WL5TRG8besMTCkoL4LBnVErvhOMt4z1tNby1jZwgxcwyF/hQYraSLL0hG2LkwXBKrEe6I08Li2g5ihIg6Z52pZkAnBe9soqaavD023pp3uqn2zplo+hIkeuZtvAmJ+alypH6o8+zr5nkhtdfWTvS6vZaXz74krkuzK3ysZa7NC+vlSE618flDRfLHjgB4V7r3h/7dj43AfWy34O9zfb80BdWvzc0vdL2Eygu3pyjjDRohVsONk2bmq93CTZ/xnZOcHoXIxAt4R1MoibKns7KlnIJIlkupOC9jopUX+aZVinXvZTRkFOsk6eTiz3EmCcJVL6ql1DY5pcTbZOgc68Hhtai6Dksml3pxP3799Z0dTIWseI8cnStzOXuPyNeG3rOkTD1BkYkIx0VGZHMU/sicKneTICzb3tJ1mqf7meNSuRmbDFlDQaGqbHCdMTw/RdZeNcMsxLGWIkhZiEwxixoqZ54dKiEnrr1BF9gZw3FMGGrz1BHS6Kb3OKWEx5Ezj1eer0olxsw4OFwSgnWuIpedlshxVsScqFlGQRXF51c9xmTuTuKLUpG06qu+IyNJyduxY9NGQKa9v4lMLArrLI+N5m4SpZtRoNB8dmX55m7mboo4O0OBHDMhZE4m0VuDQZFKplbPpneSqlwrS6p0TlORRPcpJOZYuFm5FnVgSalwtwTu5kTf0JabQcjlxhg6DyVIUzR4cWg9LYkKmCbr33TS2P3Tu5nUwg+rlSLZO5GG7+aIa8noFUgpU6yEjJ43c6MVIWX2SYJklaLdz0iMg2mNUyuCpSlhzvEjuVamkPBa3Izv8zRWnZDHQ3nYH+dthevHyJH6EKLrgzJh/V3zPMmDE+L87RTp3MtwR6Xk+697j7XCX3rfIvlTRQD8GIqkj4nA/RhuwR96fb+Ikem99Wtz8wtbr3tH7JZEzDL7j1Wx7S3GKJYkSqopJfRceeytpI1nCRzsjebRqqNvD4ZWSjam40JCgjNzaVCk0UDFKC4PltaK0Vi6UdNb852Nu7OaKciJLScZBXgrD463AlnLyTqJ+3GujN40G/58CT9cWqaPU0LMPEUYnJByB2tYOc3X+wWF8IoEdVAYjZChc+H2GJhC4WbtSEXSg73WVPVyBNM7QX06015LSAwWnoyeqmVDuR6dOOBqw2cby5KEXIzThHQi5sxx1tysDCHAt8eIMoab0TAvmedL5Koz/OV1h0GazaGzrHJhOcpnqmmFM2RyDvz5acYYw7JkxtHz2crxaPAsWfHiFPnNtud6dAxOc9VLeOYhFh5tPIMVJ+iblQUM3huurCHVircyStJaPqta4avdhFGaUCREdOwMyywOzLspsZsCJQtxuSrFYRE0TSuojTQKL4vU6C1aZY6xohE0TaThmSVKBtVX+xmLohs1VmuU05ScuT1mpiyBnb1TXPcSwLnLQszwVnE1OkLKHGbJ+DJOxqZLzNSqxY1Ya5zVbAbHYCWh/bRkSo2Mvbts5hduTa5YJ2PbuVQciidXHVoJD+zcxOf2GSlAd3I/yb0WWfeV69G/wtMYvGV4A/rwU9rcvy9v4l1NRX8PlTkticMSWZIUvNjy8FIb91kjocBnCf2HFMmfOgLgYyqSPlbD9GNxXb7P9f1UI9OPsX5tbn5h63XviFwkLLF3BofEG2glfIBDTCD5icLNaM1KSJlcCjRi5XlzObSU3FXv2KwsxyUxhUxBsog2vWXspbE425yP/rsbt1JynaFUySrSon4pLeX7/DpOQRKqU4FcCk/3iZiznJYVhBg5hkKIRYIgtRCnH42OL7YDurOSa9UVdiVIhAKVzzeeWuGbQyDGSOc1V4Old5bbOaK0kuJ/Jjh2jq3VdFqzHi3TLJuu1yIxX/cWvIzODkthcM0GPcn1H0zgGG3zdakYJRESz46S/9QZyLWQU+Z5zNyMs+QiZeg0zaQtMIfEqvesO8P+FPn9i4WSC9t1z+A1RlViFpXSyihOUUaJV6OkVMdcOEyJlTesrCVlaQr/5MmGTe/Zz4m7JZKrkKSNkVO30QK9bwaPofLVXmIaUqqcYmF0Fu9EOv/sdM4Ms4ydZT9HjAZjpTlO8ZwYLwZ6oVSWJRNLZeMNz4+ZJRdy42AZNIMTM0OVIRYIOVNzxRjNymvWvQNtWDmFakjGthd+1PPDwiFEvFWUBLXtzYeQcGg2g/CWVk6Qwe1g6JzkoW28FNyUxEm5b7Em54Ju24h29LYZ/73kgSkl937iEsEmP99JynRM5a3Bkud1LlxK1O7U+l2i8w85Eb+OvLwvb+JdTcW5MJZSmZWgVWMn8SLHJV1CZKdU+Lz/btr2+xTJn5rA+mONvn5ow/Rjc10+5Pp+LM+dH2P92tx8wuv1OIWUC6eQLw97aUqpusgGNEWx9rdaNWt/6LUQ9Y5Lbid0eVBAcUa8zzJxtJCAz6ezzeDxThqh0RrJ/7nna3Hf5vz+A3Lf4MtpIRcvUcYo1miM4nLKqyAp3RWmnDnNkdEabpfIH3YzXmu0Er7J1aCxWkZZ3SwxC1TJJVIKpphIbRyilag1Sh04LOJJQ5UT9y5ErLV0zmJNRU+RF/tA5zWg2I6GVWdY95KerVDsQuTr3cztvPDb64E5ZFKVnKIlVnLR/O5Rx+gdlcopBG4Gkb9+vQ8sueCVQlvYLYGt77jqRSXy/BS4m0Q5pbVBUdC6MvaOx+uOL7cjcwrUIuTLP98vfL7uebJ21FJ4ug9UpCB7o/n82nOz6VnmjLUa6xxdLxlafZM8d96K03TILDnSW8O2M03eL3LkWirayr1VWtL3pq+ULA3ICktnJbeJCs8OAWdFXTWFSqkKbZSouawhpEwqhcEZYhHn6etBRkJ3c2xqGc0pROGDUYkJoDIviV0RmXEtlYMW7leulXnJGC1k+JjBtEyyq8HSece6s69swEJuF6L6FBKHkHhxWBpfxzBYfYk9OHvLvL6pl4Ys1loJuV54J59veirSEJ/dkGsbWT2EguRSHoh6EHl1yPV7F643IS/e6O+MhM4I6Vm5+L5NxX21ZiwSI6KUYt3IwSsvFgPdAyOk9ymSH6uov6tp+dTTrz9FrstPaVL7fdevzc0nuO4/bKkFzCmE63EMWVxStTyoozPskODFba+5mwpTzQxOs/aGog0hiIR7iukiwfRGIgqueuEonAu/Il/4NCCF4JjE6fgsK3/bRvEmgy9dxX9kUQ1xagTLUmDwspF7pbhNwqtJVeTlIWVKUzDpRnjRVjVEpLRTtUhOtdaYTlyUKbAoqEXs/1MoKCWbcAyVrAvFFGLOUjjnyFAa9yIbem3Ydg6N4sVJYgByLJgCt/sF7xp3Jor/ycYrvtj2/OZqFO8ahCCptSh5rjpPzWLrv58z2x6cMywhifus0DrYhcgSJIH7s9FxvfL03hCTIVAZOlFLKVNRsZkdVmmcrlei8LpZOTpnOCrxaakKMREMcl8420ZRiDy9lkpnVfNCLDhgP0fmUCg5k1GcUkYr2Pae3RSxzcNn3XdolISQrjx94xS9mAKjM+IkXOWkXqgo3byLtBB0e6uZoxSVJyvPbk7EDI96zXp0UCqxCkneaOF+7edECImkNftTJNSCzQpvFTe94W5JaDSP1z2mhTKe781SW5K7ljiPU8jELITnZ8eFAmw6w82qx2kJqr1fPC6y2EY4Bxlp3lf8AK8ES74NBSmlXqIe+nvS6djGf9Tv5wT7xr/ZcRkJ1ZrJWe6LkAvrTrLbzkqoc1NxaQ4QpWOpEmQWklxnZzTLvZRroxU51Yuw4G3F921F8ocW9fdtWj719OtfGtflU1k//yf36/rOOi1J/CIa0nKKGVVg3ctGu5uSFAZvGbxl3RmenSrGGx6vDCFnjDKsR4c3ilvE06RUjXWyaTgNt8eWHu3dhbOilWweIFDxKUjWUncvaPBNm5HYq4srcK6SZ+WNkpl8TKgKN1qRioxQLJp1J4VujkIUzS1A0mpNbxXHuZBSJdRKvwhasvKa0hVSFenzaA2bbY9CMUVBjbIpLEXkvFVXahZppzGGBjSQKjzdL3x9O1ONwkT4Zien/i+uHLF6Uqg8P0VyKWw2HnUsPJ8z11ozdI5SE72TSIJ9LOjdLIZ/g+XrfUCXSu8NBohaszLS0JUs4ZK7OXNcEp2zdMaA0USjmtlcpu8s28GymwJTyu1Ub/HWMuXETW/53eOVvIcht/ewMjWDtdJiKqTfk0LqnRWnZG9Ze8MhZFbesKTM9djTGcNxSdyqyIspMyVpipeU2XSWq0HGk50xdE6RKjza9JfmtyIhpIIQyuacS6W3wqmKuaC08KVKFV8mbzTWGW6M4dHKsx083koUyMpbGVOmQlWCpohzrNggdM6SS+YYBam6Gjzb3vDldiDVymFO7GIQL5rmvXM1WqaiWJI0UyAk8lrFSdqpgLGGJ/csDu6vVwqO4Y0F520oyClmGXs6w5LqJTQz5sJpznij2AfeWJjfhEi86W+WIvfaVeMa3Z7OeV+a60FCT4+LNMCmXcf5d+WGUnmjmI0iVi7WEsmKg/UpFKC0WA8ZT/b+4ffvfdYPLerv07T8Urxbfklcl09l/drcfEJLknIT3xwWSq24rAkxyw1sFbHA6Az7mjgsCasVp5gpVbUIA4HAB2tRWnKhBmcIXeFpI9123spYIMmJNebapN1coHbXnGhvT5EQC5vBEhu0/hBUe77uUzvJPZ8CvdH0vmOJmZBFMmu0NGQ1ixwZtKhrkIIcU2E8b6xtVBZyYYmZlbYUKiFnypLRRvNotBeip8huFXdT4JvdxGEpzDGxhMJ2MFz1FmMNtRrsIAZs2oDag/FCcE614lTFe80uZP706Ynt6MhFzAoPU+B2TsxL4duY2YbEavR01tIbw5ISz44LqlTGwfNZrexOiSUWVCsARcGyZL7az6Juy5Vn+8B+DpSi+Gzboay8x4dTYHcUv6Hnp5l5ySxz4TfXjqvOSiRCapJjKx3blAopJXKF0YnHkDOKWAynWRrIR81QriKqr7GCMooUBB2MpbIZPM5plhaaer3SPL2bOSyZdW/Fidgbxk7jtPjolEY0142rElpgYGclzyuX5kQcK6clsnKGqhRrZVHesO6Eb3Q2ejuFREUK/pSkKDmtGZzm6SGiNBgjY7A5KmpT5Xy+6XHWoLSi1/riR6OqkJqthf0UOS2JrKTZz6Wy9ppSNceQiQhHiDameajAvRdv5C2jlWPI6CpO0daUV/g8uWZCMgzGfKcwnwnQD42canuO7//Ns/PyWZJdFYxWwllv1p7OvGwUYuNJeS2E9SWKkaNRQrCOs8i/V72j84ZUCrs5seoMo9evoECb3v7g4vt9i/p7j9Z+Bu+W78Pt+SVxXT6V9Wtz8wmtOWZRoBRRDoVcOIQkgXreNtt4w1YJNH93CkRkvj92lrsp8HS/SHqxcxxjZk6ZXDKhVqyCiqiUTjmz6i2ukUmd0YydZYkZ74wgK1ZzM3jWgyNXsao/+1ecH65aKy+OCy+OkaIqqkoDklNFKzEVrLVijcEqKU5VQ63qIo+NbXMx0DKxKkFlUgtTFAWRIqZMZxSmjah6b+isXOucCktI/Ok3B24X8ZzRWlK+Qxba5+82vYw5YubZKVwKudcKYzRLUnRW8WjoeLaf+MNJAj97azjMiWenIP5AjWPwYk6sesfY2ebma4glUZSMWLajY92LH868RGIGpYSY/NVuopTKF6sOo5Fw0pSwx+bW7MTgsJbM17uZ3THSe0ffwWpwoKGUwrNjRJsj297JCKoRxVVDa3qrsQ19MEaxxMxxjqTmT7JEIUVfOd9CV4VDUkumAJ+tHbdT4u64kGvl8apj7TXbzjB2EmmQCzzdyahucMLNcloRoozDSiksMXGYxONG8oYUS610SvF48FQqc0jcpcScJcKjUPFaM9uEQj5vGeEpNLq5FDenW2/ZNpNDd5ZQVyH2VqW4GfxllLGkTIyZpRQsMubcxyJKQ63FQ8eLwie3aIWHCtz7FJy3jVac0W0cLNfvTBEO0CKxG84WvC1YbV4hGcvot1wQiZgLzw7LpclVSgQEWsl4bGpIsFLNbVupV5yT7x9WzkX9fM/oxodTWrHxliNJxkJK7tNVL2jdlArOKja9oMXn2JQfur5vUX/fpuVdo6/Xx4I/hHT8Mbg9vwSuy6eyfm1ufsb1OmF4TqVxGYSI562hMyKpNo0IaLQY7W1HRc2Vdfv+UiohNgWUUpd08N1xIZXC2htqkYd2ScLBGZx5xa31bLw3aE1sKpEzfKtqZZojt1Nm3buW2i3y12enQGwnwphFIWRVYYqQGx9DKS5SUNlgpEkalGpRAY7QQkD3c2I7ekavuZ0MKb3MxUoFNr0otM4JyVaLfHx3mvnmEEBXjNIclyRuwlQOMXE4zZwCHKIQSGuFu2lhN0WUtvRWUTAcYyK09/8UK8cU2B8iUyqoKryfzhpOcyBXURwtralACak1lMI0R6ZZSMIhV5ac6a1h9IoSLXOtJITX5Ky+5ButB4vXoIqiGIOlxStoUazlVPgnzyZqlkKzW7R40HQZkAiM7eDYhcxVp/GtAHbWMAdJJd9oOelHBbQCZoxGF3F4PoVEzaC1wSoJOn3iLdejZymVhObutHCrJJMsZPGFGbxl21tWneNm5ZiTpIL3zl74NdpqnIJQQFcYOkvKha/3i4wcBsumsxJ+mSr7ORKa47bSmpLFBdpoRU0ythybmWKuIueuFPYhEWNmvyTx+Gn8nyUJQT57aeYL4BTsp8RqkMZMnHN5L27HW3kj7xitwPnQkAkxcZgzpWV0OaNfojW+md+FzKmRp8+IRCnib6WbH1UBUq6kHJlV4nnLTLPacDW8TBZ/m3OyUtIorby9mNid3ZorLxu+c4NjQ2bd2Ve4Rh9zPfQev63ReF++zps+n5QKRsM+pIs/mHR56nJffGhj8qlze/6irV/f0Z9gvf4QPtTBWyW+NPdty0FO3s9OYvv/aOXJVTbG3moWhGgLckI+pczQoHQxOlNUJQ3G40HCMjVQuspukmJ9M9pXIemUKVmg5qFtep3V3J0CL45ByJ3tBDMvMIXI7rgQq0YpISqLGqoyuMrYiYFbrjBWiYngfN0VUdM0iXpnZaSw8pHbOZKyjK2uesfVKFbt+yZv980GXwiZmVwLt6fEnCJOGW7DQsyVOUaolRf7KmZ0RuOUJsZEqEKqLgUgMQWo+aUE+MtNhzWGr3cTv39+onOagiJXy2crRfKKZ8cgyE0L4tx4jTOKr25nbqdIrYV13xAxI/ygvtfkoumrZBldrSxKDfL+58Jvtj3eCidi7CzbzhGLkF+XlHl6N2NsZuwsf7T1KK05zuIH9NmVY9U71t5yCJlKJeWK0eIXY7XCpcLNykvBQkjXx0U+7wCNIKqAypwq1cDYe7Zec4pQVSVlKcQZeDR4SejOQq4uRdK/rwZPPb/nWnMIibUVT5z9Etn0DqUUUyrULD45upPTf4yFgqKYQq0SxzAtUWTdnSNaGcldNfRxHzMvToK+JKNQiBlj5wynmNktwlM7qwyVgnXnGK1hNycyws2pLfC1SmTXG4McXz+YvO00/7bRyllJ9WKK3B4DziiuBoeyLXPNcHE8zlXskGuVhv58HXOS0VG9l5m16i23x4VTksPGuhM0q1QpsmIQ+GbnZNsOU2dSsPwxMcZU8ErDl0rFWP2jNTavr/dBQD6Er/PQ52M0zRxU9r/9HDnMiW0vB75QCvtZxq7v05j8Urg9H2v92I7S77N+bW5+xPWmh7DWyimUVzr4KRZyEVVSd+9hyy07at3Zy4O76sRKPy3p1ZNJrgSEMHo+aeVS0Yj6yWoZp5DlYff6ZfptyIXdKWCUZASdQ+8OS2J/yuyiwNybZqB3mCMxFV4cFnZzZNVZbtYdpYLVmlAih5DZnwLPp0zfGR4Plv0cSBmuR+FoiOrr5Sm5M0JknGPBoFh709xPE9ve4ZXiEIVYO8ck/IhUcAZuTzNOiVx6CkIUnWPhOEe2K3Ams+kcfW8w3jIWxWg1z1VlDjIKSCoxFsP1IEW0INwV31lULWydo7OFVCAslUwilozXGqsUc4FpDjJCcganLcNgiQlJandWwkiDjKu0rhglRPDnx8DgjfB8cr00mwfgZuXxxvDtYWKOmUedw2pN5x3eaJEva82TtWc3JU5zYhcSWsF179j2HSjFbo5YI0aGIWZeHGemIKjT47Vn8LLx985AqRzDgjcGb2G3JFIVVOP5MXIKSYjURvPIe7xSWGvorXBpcjmHI8q9dB4TpCqvTamX3JOSSosSyRwWOM4iSVdaEMnOwW5RfHNcWEdReOUCtbdYZ1h7y2drKeC7kFC6MrYisu4sd6fIYUlcD07QnVTZ9BbXSQ7Z06P4KfWd8ImcNQ8GOb7yTDcl47mhsPeSwt8WJ3J/w58bZ27dizLKnkM7qW388xJtVQinKJR6ee7Pz/jrmVlGiSnldvR0nYxVOit8pqXJ1t/mnHxWst1vDnKVxl84QcKj+zlUO29DQLqzO7RS783XeTDuJSSs5tIMlyrNyGFJhGYkmZsC1Bv9zhHc+XNy54ay3QOfai7T912fkqz+1+bmR1wPPYT7OZFLaTP2+x08pFCIsYB7aVvutCRzD95+Z2O8L+mMMXNKmcOUuFkJsqOAwyKcnSmUBmU3uLm3dFoz5cx+jqRSmWcJevRJDOMOITHHzH6KYpY3epyVBOTTkqkUEhVtDKkopiD5MSEXQq2YWrDO8htvmXPhn7yYmGNisIbD4ni6WyhF8eVNxxfbkQo8PSzsp8jYCbwegrgA350Cz46GR4MEJ56WSEE27JvREXMhZUWm0FIacLpytwiJ8gsH1liRQ/vMYAyBhFEajSbmjNKa0QhicZwDf54r3hoKmiej4fZUGDrFo/XIFDPaKkZr6YwlpkLhnpEhstE6q1g5y8EEbufAFQo7irx7NydWTnxVjFF4O2AtGGXIiJX/YYp8vQSe7SY6b3l2WLibAtooHmlDiAmFpJV7B7enyO2cuBkc173kiz09xTYWNBxOkd5rnufKcYnkJCqYcxjlUgrbzvHP3azQjYB7jJndQUJCrwbHaBR/uhepuBuFEH6YshgY6spvrnpqU0qdRwPm3pigNqO6Wl9yTyqKF1MQDpQxqJbp9PQ2EGrh8SCePqdFvIzWvRgLWqvovGU9OFadI+WCauTlMxG4c4Z1X7ibE1MSFdIpizu2ilJsYoHfPR65GXuANwY53n+mhUifqRq2Dc3cTZFS6oWLcn+9Plq5f5r3yhKdJLlXBJ3pjW6CAbmnxuZBpds1lJpFmVQKEbjqX0aYhCLRHaO3uFw4LkL2NwpOUeTeV4N7q3Pyw3lLQkZf8sNREh9jnU/9MuZ9NdfpTQhIrZnbU8A7aUrvF9X7Dc/bGrDz55NyeVUKX+VeolYOS+amHUBTO3RtusRm8G/8vdDyx1LmkMrFQ6k/c+HeY/T5S1mf0ujt1+bmR1pveghTEbLk+NoHbbV8X281qfECjFZsGwJwP2DuvM4byoWn0ouCRilROmjE9GxwppHjKvsl45WcFBOi3FmaTDvWyvEU+Pqw4BQX9VXOBeeE+zItkVMs5OZzUStsek1Mhd2U2c2SxxNTZjCavgU2ljnT2cgcxF/k+SmgGz/oFCNU8WlZknjBECKHpTSJuiBbfVbkHrTRvDgFNl5zte5xzmBSZttbTpOiUHh6Eq4BOTdCtsNUeHZamqGhamGICRR8cTNyPXpSjhymQiyVlYF+kJHPzdAxdgZnHHOU/JwYK7/dyPjDeSN2/011pZWgDiAk3tOS+PPdTBwL1giZ+tEouVgvloQ3hpvBiIIICFFxPXZsauWruxP/792CYmHTG56sO4rSHJfAnz1LOGdQGDpTuTsJ6pSK+MP0TlRLf7ibebTpuB4dtcLtFDi0UdTKWxl7xUyeK07BHMT9WGuDo+CMjDatNSL5NYrHG8sUpGn4bK2JSBGcQmZspnD35dKdERuDqgWNXHJBFdgOlqgEOamIsmd/StwugeMcL++Jd4ZYBXEZvJNRjIJOSWPdWfOKUisV+f0hFU5R7iWLQmnIRmIoQkwcF0EAV41If37eXg9yvP9MG6U45krnjTxXU8Q5ya86xczn0Mwl31y07pNez6Gcp+ZJlUtFO+HQDE6/kr0m0SaJuykJclRK2xsqMeWX7uHOUOAVJFiMIhWb7qWS6U2cobchTv2PMHY4n/qnKJL11Mj+QycKz96ZNxKFcy7s58RNM2J8vah+CCryOl/nnG+3XxLe6EbaFu6dN81s8Q2KuvMKuQgPqlb6hpbfnSKd0zxed38hRlKf2ujt1+bmR1pvegh9U3GEXBjuQZmpiCnY+xjlnZdqULN3hhur8Vo29SlmTiExhcqXVz29Myy5XizlY87MQWFMJSFfn2LlFERRURXspszN6DDGwqi46iVX6ekxyDweyIgbsNWKJcIxBG5WjpXRHIO+NEenmJsbsmqSay3wbK2svWGOldspoK0WiXrKHBax/XdWs0SRvCsvULCtkuuzLBmjZx6tO5zR3IyW37+QsZTVhU6DUpbOaQ6z5ExNuaJzohRBC6wWT5ZtG09YoHSZVDK5KHTRGArZaVZ09E54Q2tvKF4Ix/Nu4fNNhzKKec40VTb7JeK1YYqJp6dAzpVTKhzngB48nbOEXLiCyxjw/72d6Zxi1TkerXti+9zmVCgVrgcrAZIhcpwzETEnHHxtJ2zxojlL8AFGKwaBW2dZDY5n+5nTnNktgrZcjVZk3Q1JSany9Bi5GR2b3koBVZreS4E0uvKoE7uB54eJJSZCyngDVmn2S8JOgcFaSYy34ouilGLszCXywxVBKhTSgIgnUubPpxnJMqtseocG9nOSMYrWMg7JlatBsZszuxIorQCtvcUg2WC3QIjCa+qM4smmQynF80m8c1bGcAAeO0u3CAfNLQmQgvg6+fT+M31/zDYHIS1fW83oheOzX5IETL7ltPp6ET03G4clvURr7o2JzksaLsW2d+JLlQu3TSlpGtH4qresvGWKcg+8jgQ/hCy98TrvNT/3uRT2HaOY91n3f9+S8iVBPrd7I+aKibnx4gQNfchh+Rgyzmo6017nDyiqD/F1oDLHwqOxqdHOuWHevEKwftNrnFNh1Vv6NgKspYryT78keP/S1/3n45X75Gcavf3a3PxI601s/QIMTbkU88PqiQ+VPNYKfTtNDEakrIPTPAPWvaQyd0Xg6ykkvjqIx0fVimmWbOuYCvtFVFm9Vi0byjA6w0oJeVdVKLlwCJmiFFe9pZbK7Rw4LJGYpQlZV8V1L2qPlCtLEUlvTEJcXfWO3mti0hilwIqhnq4S7BnvjTRKrUy5UAsSahmF7+KtJtbCnDP7KbEZGs+ISlaFq7UkZS8h4o3iMAuh9PPRMxXh82wHK4GWp8jS4gTulsh+ThymiPMWY8AiPKmlFKzo6YUTpOHFcj6pVHorCp+1ssxL5DAXQp54MWc23vAvPlmRFBzmgleR5MScDmDJUGshpMKzU+Q3G5HTeqPpveGL7cDdaZFxQM6EJHyW7cpxPXquBscSMk8PgWeHxBc3ltGLm/E3+0DndItAKIBmu3Joqy6NbS6SKD5HOdnfGOFnra1h7Q23wBwrg9eiMFIKVQqrTpqAEGWzX/carQRBuJsCGeG8XPUO752o/ZCCDNLYvJgWpiwBnXOpeKtwxpCrImcpejTpsTUw58qTUdqiCoRSGZ1sm3enSK7lYnEQc0FrKVii9Cnsp0iIgvSM3jZ+TeV2ErPG83tQC69wSe4/0+cx29nl2Ft57kqpbRyp31lYHyqi1ugH0ZrL8/7A6Vh4dRpv4Xp0gCh6lFKsOv3KWOmMBL91T3kAlclZfIdCGyv+UC7F69wMBSxJ3seU5f+9NcJrqaJmk/fTfOc9W5J461wPr75fP6So3h/JTVGu6/HKobV+ZRyntdyXbxsr3S/63qoLEqbgEu/xF2FJfAcXq4n7YpnXnb5/ivVrc/Mjrbex9a8HUYnc33RGLwX0bo4f5Ej6UBOlG0m3a/CsagS2VCr7kFmy8BpAeBfPjwsVQ86JL6+H5uQqfIIn6x5rFDG3n00FZWDVHtTjknhxkFykq5VHI3EKq84xJzEJ1ArmnDiGyD5mRu+YQ5ENTrVgQgDVCKhW+BhLyFSlqKUwOsWSE/Mxs+49KUkxTK6QSuar28AhJCm+R/FEGTaGp8eKKhWPpIpv147PrG2SbMPTwyxuysjIA6U4xszdEvnnV55HKyFJn5bEcYl8ezdf0tJpDck0V/7v48LVuuPRaFlyIgQuaclWG7adRRvNoIWU+HSq9EmIoNYabE7UFk56t0S+PcxoI+MDKtweJ77eBVZtnHA3SRF/tLJse0dvLbkZ7r2YM93RsO0FyblbEmtleLqfUQ3mv9Je/I5SYS6ZY6gM3tI7ydfKtXJ7mCmjGDHSxpROwV0W7kuMmaLgs01HLvD8IKGkx1CYU2pux1IMjm0cYg2vFLUlJG5PAaNEil6RIM+QEs+PiULBKrlXnWn5S0hm2RILWy/jM3FhVqDkGfts21+4T701HEPidkls/UslWchJlFzWYIy4ZTujmaJwx9bdqyZ0r7sSd0bxYo6cQubxylEa0be3wkOKIRPeoSJ6iNdyNr97qGl4HRF+XS1ltG4ZW4Uli5rsfTknD5FBu7an3E3x4mYs4bz6B3Ep5NkQiwERBwj3z2k4RomjWJKMQ5VSaC/IZqn1O++ZVoJGvY4k/ZDspXPyeSmVnEEjjuQpFXrXGlloh9K3uzB/Z8zVkLCYy18ovo1u1IfdnFqzL8/+KZU3On3/mOvX5uZHXG9j68tI6buQ7ENErDc5kvbOvLLhlppF6o3Y+3sNu5OY62mkqBil6NsDhlKgNEuGzha00cxJEq0/s1rivKt04lMsxCKNzVXvyKny9LAwBeEzjJ3hy6sOpy3pMjtPUEAZzRIyT0aP04IUPD9GbNvIq6sYI8XpyeiZk6ApU85YrVk5xR/uRH219g4QpczcRlhLn9kFCX/8bO2YUmEJMua4GTzP9wuxFEKWAMbP1iOP1x7TOCCPNpXeW+ZQSDETlgIlk2rh6S6gTeVq8HS68jRXAhVnLc9bIKYqkoBulsTKKnIRw7wQE/OS+PLaURQ8n6KY5IVEbw3euUauFc4IVZKmfa08PyTmWFg5GYv90xczKVWuBtc4GpWwVHZL5k+MxFzcJXkdN70mU/jqLlHJbJ1lNJpnDfn5cuNZ915ciE3k93czKRcerzquR0/OlefHhTkJCpERtPG4JL45idfP45Xj+UFMEu9Owjfp2gjqMEXGzpGyID2lSur16wZ0TituU+YYhAO16R2lwovTwmE+x34ovKocY+HuGHFWRj1zyvTWMvbu4nlUkXT5Z8d6OadbrS/kYlVphHiN08LvOS1JmqoC16OkyXemcOUd3n8X4bj/TAsyYsWegfNoQpRNT/czqQrKtmrqw4calvNo2bSvW/NhhfJNaqn7qIU1+r2Qi4fIoM8OgVrrBXE+O4KPbSz1IWOf0tDjOWSensLFEFRiHWSU8XwRwcH5deyD/H+55zn0EBfovH8+hIZ/36I6t5GmMTJ611l4VrmI8ej7kqn/WcmGKgIXsu4tpcpI0Rrx2Xqb0/ePtX5tbn7E9S53zUsI3zuIWK87kr5OlnudYOiMxmvZ4LQqF4LeFDJfrD1DJ4jOvGTWvWY8GWoVtZBCVEc3g5xEj4ukJnsrsuznx8zTGCQcT0KSGJz4YTw/RG5GOZU9q+J580fXA6OzvDi+TAD/p7dz8z6pOGtYd6LsWXmLUpWC4nqluOosuzny9V2+SMNPi6jNNs5glJw2d6eFQ8x8tUyEUDhMC4dQGZ1iHCxzzoQEJSW+3ity2TEtHdoa5pBY95ar0fNtCThr6LtKLIavdzMhgnWyOS2hkHMiFc3aGZyROXyoVWSjWvH0IG7N3lvuTjMxySjQW8166Okc7OfC49Hxu0cDd4uMBA9zZMmFZyeFrvB4LejSV/tATEL4frwWBVnM8Pm6Z+oyruU7FUBbIIC20uzspkRqqBdGUr+fHwJ/frvwx480N6uO2Bl2S2qcl6Z8CoE/v5tFmow0c+vWSF851xQpFZRlHSPPjgFjKrnCfspMITN0lhfTAkjD5bVmyYWcufBCUi7NEVhxXDK9k3HMrVLkqvhsJX4iOStWg6BKj1eejbNkKmPjjojhnjxfqYpz8+0UxcG4jSzmmBid2A8Yo3m08sxRmujOSxhtTJljkiDIY8pk6nvJuq+DOACXUghZAmpDrhf35nCPM3If5Xhw1FO/+zfvr9cLpaYhLqW+opb6UNTioT3IKEi1klKWZHdzdh2Ww5pvo8t3jX3uI0KnOUoTUjM3g6dAy7MSWwhVxLIiS44EZBkz5yyu7Q/tn/Dxs5ceej+8NahBGsqNt+9sRO+vfxayoUoVyfyml0PbRTmq+JVz8xd1vcsy+20eCFPMrxQE+C4D/TsEw1K5PQagYI1l2xu2vePZYeEUCxtjsQpKhVwVV6PDG4duXh0pV7TRrAeLroCW+ITz6fLb/cwcZVPz2uCtIhQxcPuzF5EYM482Pderjt5bUtvYFZpH647RW3Yhc3taUIhyKBUJ3VyKvP7BGqo13M4R7zVP3MBoFM9PkW/2M89PC0/WPS+mwLRkrtcWCuzmxN0cOUyJW62wR4kK2PQG23c4K6TV//8fjny2dvzuemBoiMHoDMkbeu9ZIiilRe6eDLdTYvQa7xzLnHkxJ5aiWPWGmFQLCqy8OCV280KXC3OW0cTz44K3lj++loiG21PGqsI3dzPGaL49Bpsc8lcAAKlhSURBVG5PkVorV6PHmqayUXDVW6YECmnUBuNYD4bH657nh4XaCuOSChtvyEnui90pc1oiKWcej57OiqrDOs08FXZN+RFzZeUdV4OMNL7ZL0yL+OOsexnXhBA5ZDG+6xoCsZ8jGimgcypcj56NhxeT5DV5LSe3uym1RHABCikvDei0ksLRWc03+0Dez9RSeHqYOc4RXT2VsxWCwRkjgZwa5lApNRFjwTq5NwuQU8ZAQwxFWXRKkjE2uIrSipWV17A0M7vBSRr23BDIdYtdeNvY5f4zPXby798cFlIV35ttL41XKq9zRuR9nGN+JbjyQ0Y99wvlJbok14tn1fdBBR4SQORSCDGxhEzRQvpetcNUzJXQMtfe1UCdESGlBFW2VrEscAq5SajFgFRVuBoszhnmIAaRvdMYrRm8fmsj8LGzl94e39Ay1D7g9/+zkA31Kqr4Ei38ucZvvzY3n8AStUhmnwqm3fSd1c0GnVcKwnmdYefUcpXOJ4ycC3OM3J1kZLIdqxjXOcP16Hl2CoQip0NnFa4o1htPLlqKd8tNWnVW5LqhcGyy3s5Z1oOcNpdUiTmTmvR1sBrvLHmRcYKukiMVk2RN7WbhwxhtsM6w1RqtYIkSkphOgW1Tip0btJzFoG/VWU6LnPxGb7jqPfsowYm7KXI4LuTSE3Lh6WEixMQUCs7L+zdFKQhjC2UsSlQOTzYdj7c9pVaeHYU39HyKzEuk5EIqieeHgjVwCh1/vPUMg4xzDnNkr6EkKbK1VDpjqFRyVZLK7jUBkbbXWplrxlbHtpdxyT+9W7gZ5GcUikNIdDbx+ZXDaMVXu4XRqeY0XZmWSnUBZRxjTDin+d124Lc3K+5i5Pl+4dHakkrmm93MftaELNLaub1/2sCTlSAf3+wD16Pls01HTJVEgVqIJfNo8FytHGPnGRdp7u7mAAR62zM4i1JwdxsYOs3KibR60zuuqMwFxipRGSEXpiWx6SxJ8wr3oLeau1LxSvg3UyoSAuoKaMVgrBhQGs3uFIhe1IHrzrDkzCFkRiSeoBbxpbkaLN4Yppa6ve08KyuRHZ1vBphFZPpPNj0GxbO5sPWOwbUtscj7cTpLzN9SiJQSL51VZ1HUhkKZlm5P44Vw4YzEVNhPEg3yfUY9rxfKc3TJD0EFHuLuhVwkaV0rtl48onZLZEgaa817pX7fR0CUvK2M7bM6xUJnM9Y0l2olAoh15yiD0GxjO+ysOvdexOWPlb30vvENH/x7P9L1fYrrUxu//drc/MjrfWyoQ5bRU8kV64SUdTdHOi3w+X1H0vO6BLshm6Y3irmRM3dzYomJYypcj1Y2ecQ47aqTrBjXfDVkgxXOQq6iPFl3lpvRt5O9+NGAKFx6KyqoOUTikpmrRAbUIm6t3itc1hQl6iZx+CximFYNRigzpCyqJwM83U+ELKZtShu81Tgt6hyFIFhGw/OjJHlvR0udBA4KoXDIhXAMhBAl9TjLJmqrcHNyrLw4ZaqSIMxNZ/HOEArcnhLXo3jgCMda3su7LOiGVYpN10Ej6loPTzZSJPVxYXdKbIxFa00uhZwk2bzvNDll9kUKVoqBGDtcL/lg3x4Co88MumfoDV9sNXbWzEthDoWV1+yOgdgZ1r1j1dk2JoTTMrPtHV9c9fzRo5Gxd8Ra+H3jrsQsPKhUpDl8sRcislJClt32lpuxEx8RK7L8F2Hh293CH3YzJRX+6KYnZ0spRYJCoxgp7hXMufDFpuOqs8xjzx85UNYwL5kvrsTB+m5KbAchQ+8m4VfFaprpnNxPl4ZdaZ5sew4h0+fKDYXnewVas+kML6bIHBJzhKxgWDIKiZRYr2Q8sPby/qQknkKlEyRHaRiMRjcDvPseUmcS/y4k9lNqwaNNudPux9zuh3X/9uJ6RqGE49JsF1oIrKj+uAQxzkk4SOc4CNVOMPdHPSkXdFVv3TfuF0pRSX5/VOChcdcpZDotuWe+jSV3c+QuJL68fr/U7/sIyHn0loqMFHOJ5CpKO2s0G2+ojcx+Loyqqu+Mo36K9akV6l/K+pTGb782Nz/Sel8b6vPJZuwsvauX77dKSSK1M+jmMPrQQ3bOgDktiSlKo7HyhlIMd0F4NpvecFoSQ+MoWKMwQNekwqmC0pqNMzitGqojD/DgDNZqUSe14M3RO0LMzNZw4wSmPizy773VrLzImGmcmGPI1KqItRCXyilWnFWoWphS4jALeTam0mBpi64V52Sjz5Ni9IpaC88OiatB/v7dKUh+U66cYmKJEZSQbY1RVA1LzGSn6JMUEKMspyVhtW0W9aIw+sNhwSgZGTzdB3ZzpJZM1JYYI9YaliKk7VOUzfp3Vz3PnaQrVypP90GUZqUwFiTkssKzFDlWDQq8U9yeMs92C3EUX51V6liPhi/XHUcvqqK7kNhNkTlnbkbPdugkhFJHOuP55x+v+O3N6jK+6K0gUy8OC3ezRGXcjB5nFLenxLf7hUcrT8mVw5RZdeUSo3FSiiUUCkhCOZItZo1ENRzmxJQq/8LjkY233IXMs2Pk8Rr+uccD694Sc+XFKVxCFj/f9ozesA+JK+e5HrtLoONZ1LK0eeV2cAxO08+pjSgLg7EcQ8IYBUSWUmR844ygIRG8qwzONF8nkZ/u5shhznx5Iw68ucJhyYyd+Y6H1JmEKinsosa5bX5EQy8y/YqgKtbkt3vW3CuGWskIJ2aJteibkqm3cg/IYUSz6HI5tJxl5UvOpFzZQ1OOvb/k+oeiAq/In5M4I3+2kdiOkCtaa64GD7Xy2aqjew+V1OujivN7lKgMnaX3hpwrm84ydvayZ/7chRE+rUL9S1mf0vjt1+bmR1rva0N9n2+jjWLddv77HgjvUl15rXjWIPjz/jd2ji+AJVYmKzwErSTtdg6CmsisX/xhUi5QK0Vp9iFjkhiflVKAyiEWrKqsvGa9dsQkCddzER+DP7rpWFLiOGVpcJpnz7PTwmkufLF26JZtE0ug5EwpioRCG7BFUZWYvRETT6fIYJQQjr0hZmm2YpLkcGMrq85x3UdeTIXbU8TUKt43IWF0pSqLM+BQ5Jo5zQm/arB/TsSoOVT49nbiD89PbNeOGBMvTjPf7ma8M1hVuTstbL3hTz5bo4rGKuiNwjrHb7wnJmluVr0YyP2/z08YrXDGsvaVqeswOuKN5nZK5KLZriwWRVWGQmZ/EsnpYBAUqxQ2gxU4Xwsvpessq87w2abnj2/W9N3L+8hZw6ZzfHM7sx0sGsfTY2AzSOE+xcLtnHjc+8u9s1siuykyGM3dHDguBSfGPixZktTdItlPV4Pltzcrxs7xJBf2c8BqzWfrnikWvIXHo+duSlQt5M8lVyyabe8k1f7e87FpzS8VjEkXfxiAzlnGPssIyWvGzuKMoEHUymbwrYHIvDgszFlyl6zRLDk3AmNmjiLDriL6A95M4hdieuT2uJArxFpQSINkjXovVdDF8TdKA5MaouqdoWuKGxp6UeAVZIAqwZjTIo7acp2C6u7jdwMaf4xgwvuFKWWD0zJyckZfHIlz+5vOvl+Bfx0BER+bwqEJBKzWrP3L5u1TKYzwaRXqX9r6FMZvvzY3P8L6EBvqt/Ft3iZ9vP+QeasvJ97jLM3PundcD+IqXIWbKie/en5o9ctZf5O83k2J63XzJ4iZP3sxiW9HZ7lqp/OCjAu2o+NqcELgPUVx3cyVjFyfUZBrISVpiIbOoADjDYc5c8qVsVOkACVJJpJWgT88k3HKKYii6E8+X+ONZa4SavibK3h+DGgMQ2dYrzpyUcwhMqWzR46W4MklgrPcbDylFuZS2E8Lc4TBKiarOLaYh9FrBqOZJgk1nYsYyD3yFa0NSku6+ZQSpXhJW4+ZJ9d987uRWIBaFPsWrhdzonfS6K1c5RAjU0isO8/gFPsJ1qUKh6hFAOxy5smm58nYsfGaVA03Ky/uvt6AMXy26fCvnR51a3idEfStKnAGctZcDYrDMkMxTCWjZoVzAaeUBJEuidtDZDyPq3LhxSEwz4lvk4xXnqw6UX4pIQhvOsd+DiwpkSpMp8ScEikVjNXs50QoQma+pErzkit2zgwqiMX+lCtWiTliune/1gyjNax6h9GG0owDrVb8+W1gjhWnYTt4Yi7EBFeD8GoOIXGlRdlWlYxCvX5plHmfMCoOvvL7tBKnZW8l0FWSs/U71R4vn1Mh8FOhUgmpEEplmiXnrRax4kdBb4VvErI8h0ZJfETOhWNDcWut5NrUbFr96MGEWiu8Noy1vjKmikXMNMf+w8Yy9w9nIVc6b9n0Dm+FLPz67/oUCuP99aldz0+5PoV07++7fm1ufoT1dqb9q5K4M98mpULRoDKcAgxWCK9vkj7eX2foN2RwVgz3ci7EdkJFixnXEiVrCnhl1j+FTEXc0TQyynl6mPn97YRzmj9y4riqNPjmMyIqTcXjdY8Gns+RWBQ3o+fx6DiETF6ERDw6i+SBKq5XDmcU//jpgf0kXJxDFifh3Swn+EKlN5oXc6S/m0hVCvfoHF9sfAvty8xR1BWlFJbUoefE1aonpYXDkjkuBu8U69FjFUwhUdAMToIGv9pJingFhs5wDIVcMuvOUmtlykLE2XTyue2Wwu+sICvP9gFa/ERnDcoYxs7zu8dSmV8cJ05JMTrNMETmJaGnmRgqqMJuLqScUcoxhYxRmkcrx2lWWC0xDSUrjC7ElDHOYCr0g2RHPbTRbDrPzcZxWjLOKh4NInd+dlxYEjzZSoggSkzZtp0Bo5jnQtFiWe+dEUKvErSrcxJT0Hn52ilkpiW2nKIERnPdOVad5GS5ATZOcqMOu8idihSkYe6dWBAIkVy8gXL7f63qJZQ1NE7GmaMypUwslccr354ZCXU1WvPZqFlKpSqR6m4H4VNtBscSC0pVDiFLNpWRgt03t9T7hNFawRjDdrQieR99Uw6KAeG6k2epqHd7ddx/TqeQXrFxiFlcuiVNXO6V3mgejR2dNdIUxsyc5P04/8x+Tqw7Mb37qYIJe/fSuXkKYuQ4tq/VWt+7mfoVAfnlrU8p3fv7rl+bmx9hvS/TXvxrMprKFCN3U6ZUIXCadYfTPSlJAKDVGvtas3Re5waJAuvOscTcNqSEUYrNYJkr3M0JrzWVyqb3bAZR5SwpN8M1Q0iZ54fA89NCKpXpGDhOidGJLLizms+uetZeczdnUpFmrdcKpUUhRFVig09ldBZV4XrViXNqgaux54tV5P+eT82gsBCzwPhWKfrOsekMu2MkJAg5M1YtnJCWmxOSJgFGWWpZCLmidMXYwhTk4eydZug1TmtyzoQIfVfptWaJ4i3zaHAkNLoqDiEwJUVBHJZdhs7A84OEi/bXmloMKWViKRjg/3k+YZQ4wfadhaJwzchv9Irf/X/s/UmMZOmWlgs/X7sbM3Nz94iMzHPy1L2HKwb/P0FIlCgJiVkJpgyQEJNCDJjVqCbcmhQwQFWFEKoJoiQQMxAMGCKBREk1Q0JiiETp/vy3bp0uMzp3t2Y3X3sHa5tHkxGRkZkR2R1f0lGe8PAwNzc339/aa73v82479sHxycL2OU4n11LlzGs6bxkzPDhznC8ZWSfxaVWWdSuv2XHONM5w4RqZlIT0woVGMrsqrTXsxkya0jL+ENr0WSfp5dvOcdY6boaZq2Niu7JYJcDBX8yJsynRNkvYaVY8OG/oG8vVEIHMbph5fAgoo9k4TQyZw8kS3VoULFoZTd8KpybELOvIXPDGoNVnuU25CPF3tZaQQ22e/Z4cZ4FIOiurHZNlVdpqzVnvuZkiqQjfyRnFbkpMITOGyNUAVIEfxpQ5FFlQdd5+Zi0UcxG3VD0lcwt07jAFzCIA/iIX+dMEVymoC/gt5UJIglq46BypVmqRa8aUREe2CxFvDSslOWKyBpJ1qi71awsmVMvU2CrNWaflPQEMoaDUmzVIr6pf5gnId62+TeneX7a+G8/yO1Zvq7QvtTJMkSeHieMsadEURawibLRmoCyY7lMY3nnv0fpZk/MqQbJ3ijYJUv/euqExJ8FvZUiRkCs3Q+ZiFWV8rhSI1pH9lJhzRSlpCK7HKBdeb9i0jqsxEGvh//tgw8prPt3PPDkEnBa6buMMIYtYudYlR0sJfdQ6WYHkpFj1nh+UwvUh8Mn1wNMxMseE1bDWheha7m2EEtsYIZTGkvnFTWI3zkxzpW0Ncy0khIq5blv6BVQ35kJrHY1xXA8zFkVWhb5pxBGTCs44MooUIwdViFFxHAf2c8Aoww+3HqMth3jEV4XVhkrh6ij26gdbz7k3XA8zPxkCscCmMUxz5OESRTCHwgdnLZvWorSsxi5bf5s2nApsHJx5Q82VKQhl9aJ3KCt6mxhlSnHeOz7YtFSlPnOhOV2MNq0jpsT//WSWlaNVrBvDvd6Dlp/JFBO7MbEPmXUjnKJ764brMbAL0hSZVtFbzbq1bFqPAn769Mj/83QgxMxZ77iKiilB7xWNt3zsDGpZm2yM5rz37MZ42+gLi8cSl+btdEBbLc3afpa/N1bT8qyBWLcOa14Uml50XqCAtaJq5TgmmTzWiqawnwPDJLqls9ZjjGZOlcY+awSeX5fkLI3B2olzUKaDYmHXiED+VRf5N43tcykcxyBW/NOENhfOGnvLMmqN5jhFfno9gVKknJlDxmvFEBIpF5w1EtBYJOl99dLh8r6CCU/XFueeMbaWpd43kvJ8V19PfdvSvb9s3TU376neSmlf4WaK3ExiQwUYSuUwJj6NkX3I/Mp5LynPqfBwP5NK4f66e6FBOq3AlFV4K6GFxwlKFoDScUoyes+Fh4coOhALV0NkyoUHq4bz1hFSYTcGai1cH8UWfJwlxiCXjDfimrgeIn/6dODeppXUcaPYTxG7pI97Y2iXXKu+kcnNYY7cTEFAaUYTKqQgF/IKeAW2ccScqUUxTYm29wvzJpFmyReSXCdFpjAsd/SNVtjWUpG1SY0yxdJaDp2YCzEnrNVMoSyTkIhVlf0kmVrHOTKlzDCLnbsYibxonLjHrLNYU2XiEzKGwpwVSgkErwJlLuymzDhnOqclZC9m9seIsQpdNT/a9qxbewvem2JiDpFf3Iw0TqInUi4wVD7Ydpz1TlaJVdD8KOHeJCV8oZMId4yZmES3czVm5lzonGbTaFIxTLnSa0l+PwbFXAoXnTBjlNb0znF/5bkaBSYYU8F5zc0oDrRawTnDtveUxbkUIuSc2QeJjzhrHN0SR6CUQPxWrWQ5VaS5d1aiOJrnJppTzISFxG3MaVrzrIF41VoDoMyRp8dAKPK9zlmYSY019Br6jTRmZrlAxyWU1Z5iCbR+4XE7b24nSt7K85qz5sxb2oV/c7rIjzFTlhXa68b2IRV2U2SOcvORKezGQkyByxWAZ45ZVn1xaWidYZzl9XBOgmQ3rcOaxUqt+NyJ8LuqL7Jev6tvvt6VPub78nO/a27eU73NnrnUSskFELfSIYi+Yk6FmzHR2EDdds9dLDM/u85oNKuFMfGqFdgYEocp01ihRJYKV2NgPyeMkWlKa41MfIxk0lSlSFQOU2JOiVyhtZZUAikVnhwzVlt+cN5ijOLxIQi4zhv2c+bxEOnmjNOKD84kbFMhUQzeah7tpVHaNJr1pkWlwqNj4Bc3kxyCjRURa0o0Gqas+PnNyGWy9G7FBxtLUQqToXrRFQ25YLVh2xqmUni6pJ0rDavG05gqehZThQRrFBaFUpr9nKBUFJnWVLrG0NDgbeFipSlFGqHjEDBesXKGrDS7KYpoeeFxTAHR3VRLqhFbIFdDyJIcPcaKtZmmiibKU3HGcN7J93MYA3/yi8BcFD9aSYjo44McdjkVNBJFUCkcpsTQRpnmpUyMhRQSrTfshyg78igrFqcVQ4gcxgJVMZSKU2Kd3vSe1mu2vadx8h4NuRAStM7hdSUrJJIgw34MTDkzZQG6ZaVZt55dlTBFPYNzisf7kbPkSbny5DBjrOaidRgjEypjxR1jnrNAlyI/o1QE3nebGv5c83YbEqsVqj4L3kwxM8UkNmtv8c5ybyWfu1/ed88nLlutFtT/iwnFp3WJuJTyLfnXaCFlr5vPTkquh0g0wn953URnDJlaxUItQD9NKZlHQ6QocEbAhyA/r9P3f75qOMZEt6TGa6MoS0I58NqJMPAC4fyr1vsC2d3Vu613rY/5vvzc75qb91yft2duvKVLhSfHQMwi4OxU5WoQkeR+iuglWdkbzZjkIHj+QtpaLU1JSMy58HQ3MaUso+xaGUPkyX5mPycu+oaNt/Stxc5ZsoqKQLNWzRLfANzfyDorXBWwGVNh21u81eynzPUYCDnhjePBxrFtLbshchUKrTd8cNZxnAK7MQv+vlS6ZX0hpFa4PgZuDjPKajoHTxe67zgnbFNxKIzyjClLY4bkluzmJCLTKKLcwywkYlNhylWAa0CucHWY6KwmpEJGcz0F4apoGAukWggFCJWLtUahOUyVrDXOJaYcufSOvhV9REiFMSYJ+dyAdUJ2nnOViVKWRrYzcqwaJU3Jk4Q0bUFzc0zcXzs2raxo1o3ho9bTNhI41zUzw1y5mhKXKQFiqR7nxNNhpjWG6+PMJ4eJUoVxg6p0xnCxbqgByUeaFPupsGpEp/JwXDKq5sIPtg1WKdGqKHFXKQUPNp5YpTE77zxDSAwhEVNFFW7pvtO8iL+LMItabxhDpXGSK1WKwilFypXjFLHGCJfJatoiK9tapTl5cpyhVtZN5abW25C9VMRJ9TxA73ktgLUaa4zEQljRSWmtxGkUxRIuJGKZnE4xUxXS3Lzi8H/5huRkU89LEvmpQi4L7+nVkSjeiNj66TgzZ3FBzlE0PXPIlKyY58yVnhmSZCyJeFcef70AG6niTtSLU+75qe/zE+ETjPBmiu9U/HkHsvtu1LvWx3xffu53zc03WNZoNq1jCHJR6hcb6XWUC2LKlcfHSAVWjSMjjpDWWariBe3AGBK7MZMpWKu5tE4cPmPgZog8Pc5kZFUTaqGMIvhNsaK0vJGdUaw7y7hMDDpnaLxCZUO7pPY+OsykXKSRimB1ovMKqxTKaBSZY0z0Y2CulXVvCFGjGqhVLRfliiqFq2GWNO1S8MrS+sScM1dj5FwrtuuOtrWMoRLSiDWaIWSGOXM9JerS6OVSyEpx1hgMIk42ypCVHKrOaj4+txiruJkKJUPrHasWrg6BkCpDiKwaQ9WGvmlJOZIwHDUYJ4yelQK0ZgqJxog2w2s5jL1WsopTik5JltJ+TEBmjpByZrNusLqQc+bJsAjBK6R0cvBotK7cXzk+LYWaKrVqtp2Wn1UqTFNmIPP4ECgFeS+UwiEkboqQgEMV+JzWYA2gDNrAvZUXBo4RkWis8tpfLS66VSN06GlMC2NHs17CGPvGcgyRmAqP9jP7UezuRlfWredy5UAJ5O2il+lNLOJqG1Phvhf7dinPtC5XC03bqAXJDzw5RMkBs5pcKzeL5mvVus9oAU6p0iJWFjaQRUSv/TKdycuK7ThnSTPf+NssqNfVC4GM5UVqbygCm/RaLNsv/D4vY/vh5JDSmsaIDikXaYy7xtJ4CRPVy+sRcubepmFO0oiVKt9Xt4AZT03bqV6XiP0+xJ93ILtvd70vfcz34ed+19x8TfUq15PWAgkbgqOxkVLE8llr5ePzjgTMIbHXCmpFG8NF74QRAi8k8iqtOV+L8PMwJzRwdZx4OAS2nQPkseeQuToGbFVMWYLrNt4I5XjJkemdhrrwTfqW6ykwJQm6XPcNvTWopnKcK1oLd8YZjdZwb+2IGT7ZT4DmsrdMSdxGjw5RuBZKoXPi8XHGK4NCcT0FxpSpSlGUQSlN4ywKxRwz85wJWcimm87jlGYohVgUZ40FpXBaY8hcjZKfFWKhNdBYh7YOpw2tg5ThzFv6zmGt5eY4cTUUfn4zs+kcnRNYWcyZ1gqgL8WCa8VFtFp5fnSv4/6qZzdFdjGx9pqK5tFBRKCdM4SUOAZhv/TeYhQMQaZWl17RO7FiPwzynFeL080sFv4fblt+eNHijOEwRQ5ExjmTtYyOzzqPtxKpsNGSTXU1J1ptqEqIsJtGGC/KWqzStN5wmCP7mlCDrCi9EsR+lY0W68be6lRyqXhr0IiOaaiBsljxnVY01jAn0XVtO49REi/ROL1MXzTHKTGVwjw9myp4Ixb6eyv5vCFmppCwunI9zqQExiiORnOYIz8672kWinDz3O9PYxTHMTEsrBirJa7jopdk4qtlpaZQdO0Xvzi/yg7dWr1oipYcrNPveBGtUVi0RWfKLe4o+d2/mgNrK26185XHW0PvDbvF2dY5zTFIZMamtZz1ThxK9aQh++wq7ascbm+j0bizcX+7633pY74PP/e75uY9VylC1L2Z0itdT523fHTWE6KA0+ZaOOs8K2d5dAgkm8lUDjHz4SKu3I2SydJYjcK9KCpWiq5UDnMCFD1q4YhYnKlMuaDnRLEGvcD/QAS2Q0gS45AytmbOes/2smN1tDweJoY5c2/tMShcWKA8CAfk3srQNxavFMYZWqt4egw8Hif2Q2FKkZIVoUpQ3s0wM4WC0RVnnBzoVdwiG6/ZemmKwnGJBMiJucikg4pohGpl2zr6RpNRDMfAzRQYQyaXzG4uqNbQxUJyMOSENVCLonF6ObArZNEz7MbIzbEw2YSzcpCuvabR8r2FkJhqYtN4DBIDsG0NbWNpvSWkjDGawxSZUybGilOgjSbFxE/HQKoKr8EqOEyJH5x31FJ4uI+sp4xWVSZbyM90mDOdF4ie1YrrKrbkYcrkXNgtacpWKzbOkNBsWkOplZQzMYnLi1rQS7L8yjtSyjwZIveN5sf3WrRRHMaIUbJimmJhLAkQSKRVmsYWDkGcaceQqAt6oHPSHI2p4kLi3rq9ff8Ps0Rr9K26XWkd50yy5QX6dqFymKWhfHqMbBrLupH14n6WRviDdXurBTBq0awt6yutRGxbWe5mYyZkef2MkWRx78wXtjG/zg59GBd9l1IvjO2bBcqnq6zwLhbH2M1UiKHQtIqLladdfpdbb0kLM0afvoaWqWksld2c3hzf8iUOty+j0bizcX87633rY77LP/e75uY91/UQeHwIeKtvXU+PDwGAy3Ur5NnGcn/TyIEyzoRUUTXzwablrLWkUnh8DGBk6lFZ0qi1CEEba154gwssrfD0WDmmTEpw1hq8d4yxcnOMnDv4c5cdw1z408d7IkCRw8UpTVKaMib8nHFO8/FZy+NjQANKadaNE8FsKoQpSjZPLiSraVXlyc3MnzzacZxBI0LpVWdptOEwFZ4Mifu9QyGhhltrULpyo6qA11Iix8SmcygUpRqcUTRG01oFiI2+psIn1wlrDc5KRtZ2JVEQOQdUlYgHpRSNXci9tlCUrIUOc8I4zY9WDT+t9VZIaowwY3KtEhGhK0XBNBe8S+zmyJglWPDHnafRhra1dJeaT24mPtlPtI1iPyquhpEhyoqosYrWOh7dzCRkraOVZgqZeS6sW80Hm5bLVSNMGCoG+Zl3zjK7zM0UmWIiZoVzZsnIWtacjaXxlhAL563HmcTNMXAMlW0L1Wt6b6hO1j5Oiz0/FnHZKRL3V43EGxRu30/USqmGjXdc9J7eGXazxDJYo9hPmZyzhL6OsxCCZ5lIrb0RDYlhmS4IsVdxcv5IwzU3hccxsfaW814ozCnL1KuUZQ1rFNdjFC1NqdzMEas1H64bWfUoxWGOPBlkRdc38rE5V4ypstqMGaMkruHz7kZfZ4detZKDVEplXt4zvddLuGmS1ZIVsfEHm5ZVJ1EgrbbYZdojROXKRd9wr2tuqc1aK8aQ3mrV9DaH28sTmq+TYfJdJtx+F+r7oo95H3XX3LzHSqkIOM/q24tG5zWQuJkSZ63oY6aYAS0uI6vkzl3LHfOqccRS6EMWGN3CCNn2soefFuvry4m+WitaIxcUVzVliSToDKiVY+UNThtSTVwPifVK7MyxyOri/lqiFY6hcuY0m9azioVawVq5E26dZrgaqaVyNSZWTqNV5eow8/9/NJAzNA5ChMeHiVJaNpeedW8oClpVOcSKWi7mRhmsTuSqGFIlhkytBavUrR05GM2Twyg4+wCtT1AKNhe6alg5RyyZKcnBNufCzRCxurLpGkJKqAxPdhPGGJypnDWOVDQrr1Fa0rNzkXDNUiqmJKZk0Nqw6jSd1wJ7UzBWATF6oyErfrGfebSfeDwE5pAZQ2FKQC603jLMmZITBdCq8HAXWTUabwzegbOObe/4lfsrdmMmVhE9DxE23jA7w89vBg7jTFjCOVsn7q2L3vN/3F+z7TxX48zVMeCjND/D1cBhrvSt4ay1HEPBG5ij2Jp7Z3FOsZ8S+zmyaT1n3qCNCIMjkl/VNJBKYd15vE08OYTFtaZ40HtQ8OQ4oRE2y9oZVt4yhGeHp0wVqlCzF52J1aIRikkaIGvEQZhLlfWdEqFw0fI+kH9VF/u4vN/tosPJpaJKpeoXU7enmHGLGD+ngnPmcycWKRfmlOleylI6wRY3jWhnTtqXKRU6qyVGIsv/opWf78fbnvH24/I4jdOSX/Xc5OWLrJredLj1Xt8+p9OExmslIuf3zDD5PhBuvyv1fdDHvI+6a27eY6UiVNbNSwLGxooVOZWCLtKgWKvploDAx4eZmAuHWcTEGlh7y6bzt6nLWitqrbej55e1AYXKFBJzKFz2Ep2wnwV69uGSVXQ1BWKqnPWOdWMZ50zvLalUHu1nDlGswykWRp2WO87KHBMoIaterBserD1TrigDV/vIp7uRIWY+WDc4a9hPkesxYXRBaY3XmrOmkqj8YCVi1z97lNilROOkgau1cE1hP4r2wptK6w1DFOdXqHI49s6jtUWVwqN94KzJnK8a1r5SrKYMkX0S1L3Rmk63+FZEpt5aQLEPiSlCTJUP1gbB5MiFf9UYQqm0urB2lrlUGuuoCkrO5FS5nqKwb6o0cXOWnC1lDZcrTayFmyEtkRGZXApnrSMmeS033Yq+1ayc5ukx8XQXsXrCGUWqmrW3xJTJzrBdNTyYI7rCkyEQk4SgNlZjqkRcaAXDLAcLVSYvD9ZeRLdVSUCnkywyZ5HGZgk1NVp0Qa2vnHUijB5iJmR5zlbBnCoFaS6mVFh7w/11g9aS4m4QZsxF3zAsp7hFuD6NFT2TTDos1pTbi3LvLR9sPMdZtEreGFqnMUYvMQ0SrLruZGooz98sotx6G+4Ycln4Pc8mGkYrjqMkoDdGixB5ESyXIjye5+t0OA8hc5wTY8hLQy+H82kycpr+PN+QNO456GAUtMO2dXTe0afCEGSlaIz+jAsK3m7VRHmWbv6qw61zEh0xxYpz+nZCs58lxf6s96997Hexhnib6dDdVOfd1PdBH/M+6q65eY9ltYyy51SWiY3UnER7Y5cwvucvZEotd1RVnBm1VszpAgo8H0J4usCWLOTTnCW+oDGKWFjSjTNj1FxsPPeMIi0XW2PEtjyEBAWOC3TNahjnxNUkY/3LzrIPiSEmYcQs8Q21ylrhrPe01uCXQ+zmGDnOSTD5CkqBFAumZq7GSt0dWVvPptX0xmGsXJxXzcyTvcaqImJir1hlQ8oQciBmhdFwdZi5mWacMVisQP+q3JXHKq9DKpXOarS1rBpL30jcRMmV+1vHFCudh8bDk0PmMBVxeYVM2c+iiWoNoYhepjHi9DomgRLeX3mMgv/napJjQINCiL5XQ4Ra2HZuuWvN3MuWeUoL1M7gjSEDY6psGoXVCacaDkHYRMeS2c2Bi86jquih5lJpjOasb2i944eXlstVZjfNtE4er1T49Bh4uBu5mjJnjaXoypQUxog7zFvLWSuW/ydHSU83Wt1OKKgSuLlIm3BGQhyHIRIXhkqhUnLm0UEStC9WTpqMKoGkUxbLdaFigWMUnZXkRIlWZ7OIljujlxRqSb5ujeZnTwchJVcotUCFs87ROLHc60VvY7Wmd2ZhM2VykWaMAk2jb3OYoFDyswnVyhtClkZgTgttGgQ4uUwVhjlxmCXL6ayx7MbEzSSAQ2fNK2njz+veWm/xtpK9fG7jzKKxEyH1mw6hN62atHoxl+v5iUhjDbmIgHnKhetjkBBdLTEObhEnjws0sXEviqHfFcPk8yZP3oj4+26q827ru6yPeR9119y8x7JWxMOisUmStp3k4nN/7bFWxujPiyRDrmL7dtJAbDtJoB5DIkY5AE6j5xjFhfQ4FUIWAWVrFI0VnU5Rit47Ho+RtjE82LQ8Pcx8OgYebBpWVrQ5IRSmlCkZPp0j+yEwxsTKO/7XdCBXsBTO+oZt71i3Dqq4mEAcNperVoBzsfBoPzGMkU/3QVZXMZKRC9gH6wbNc3esWmGM5nzlSaUsF/7CcYaHQMyZR3s4xkrViaIMpShCSWil2Y0aowoz0BvN2gtmf4yZs6aitNjYD2NkyplUMrHA/d4Rk6ZmCQNtbUPViVoKcymstaf3spLJFaYpMhVp/q6OhesJnuxHfnTe4LRmH4QsXEoFFGe9w4bCFDWjy6w6w34otNqQlaKkQt9pVk5Rq5L06AIrUyhVpiqlFG6OhU/3M5ZKCmKrDjGRFrHpMSyZUkYyxFSBn97MtE6DVksqu11w/hnvJGdDKcX9leUYM0NIt0LcIcjddufL7WXyNCFE62X1qNkdCzlVOqM5ziLSPWsd1iieXM3EJBDCWCs1F1KtlALb4umsBGvq8Ox34nTQyVRQmqTTRKYx4irqnGE/z+yToBK0VngjWqopi3vQGc3FypEXd1HvxYF0cgKe97J+HcPJGWgYQhaHoZZGe5gTDw/zrdW8MYqzznIMmf2UOF/pz4z9X9WQaC0ARmNfbBo+7xB606rpVblcz09E5L1fqKouq75nUR2tF3yBXZpZrdV70Wh83uRpCIk51e90btHzdTeB+nbWd++d9B2r82X8ezMl9nPCGc39tb/9OIhzZoyFpCEvF51aYdVYrBVAlzPiooi5kJNQS3fDxM8PMxTR4QxTpujCvc7TNV50EOtG7OFTxmkRYp63hs5prsfI411gP03kohaibuH6OMl6Y6OISS5WRsNcJnIBrzW+MdJ4HAJOaR5Q2fYiRM2LUDeVSrSaWIUBc//M8//5cEuuld2UxKqtFU6B0YZV68ilkoNi0xtujprHh8AUM6pqlNI4nSRsMlWxmKdEay1+gRl2jaXTClXgbOXYNLLmuB4COcMURRNxM2diChhVscZx1nsuVg2HEHm4n3m0GznvG9olWHJ3cuDcDPwkV3KC1sJuMnRDorEQs6zPxqw4xkzJsoaKudJazRWKUAqXXUO/dYwhEVJhHyrbHj7oLUoLWdgZTRHP1G0swZSKCJmnQMpKrPO1YLSR3WWFkCL7OaKr5WmdKcC2FdLtnCpWCfiuUtk2Dh8zN2OgZrBL3pWERorgVSklqditY9VYQipcDzP7kDBL9hQsK9hSGIJMEKuqtxPCohQpyuq1t0JIPh1oY0iUqgTKp+HxJGvVvjGiidFCAT6BLEuplCw5ZdTKbhZR94N1I9MRJUDHk95Dac2mlZuMORfQihAXy7iRxO3GGayRYMqyrG5KrfTekKsERa4aw0UvcQkbL86r5+tdCztft2qac3khl+v5iYjT5XZiYpRmNtKgKiOP45eV4KqxAugs9b1oNN40eVIgbKvveG4R3OmKvu1119y859Jac7luOWtf5NwIOTgtoX0LiC4LxVRXIZKefvnjIkzUWsbuSsMUIz+/GYlF7kZLhasycxwiKcGfaz29t+ynyP11izKVRmtupoKznrJYVY1WHKZCzJnzlccoAeKVDMeQ6azQZoc5YhM4NRNLZt14qJWVAmPh0WHmZgg8Oc44rVi3XrJ5UsZZxQ/PGj6+WLPpPEOITHPiZpgFVa8UxymIZuU4k1OmLY7dEDnMEWU0JcFhztJsFSHt5qrIpZBy4IwKTUPM0GqNUkJ+vbfpF+YOnDWQyJSiKSmxO2a0hc5B6Rx9b6kU4eUYOZhy0VgHBs2YEqoWCXZs5e77GAuHGBijpDqfd44PV5ZQ4BBkXaaoXK7aJc6isupF0F2q/BxtLRSgaSwGJYf1xlOL4ipJSnwoif1+ZAqJx4eZrJaphdFcGsi18nQIt+yTVCtro3g6xWWaVDFKdEvenCIdZHIxRsNYyxJSKREAVivGKGGrIRfOO0ffOGoN5AL31o1MqioMITHNmeshohXc6yzKmCXlXWO0RC+cdY6ipHEXCF8WYX3ncEazn8IS/KoBeX3H5fClwqC5DYgdlkmZRpqydkmtP9VJg3Ba04RSyUFSzWMpXPRebhSW5sMvmVeDBmc1TZGfz8ndJene4k6zRvOqepfCzlfpKEqtkp1lXjw4TxMRAVo+W401VqCXpzyqOQnvZ9UYOm/pvsLE4U3Tijc1eo0V55p9zffwPnOL3vWE5fuQnP19rrufwNdU1mrscxD3F34xlgtzjJmsMyFVjsgdv9HiEgFF6xXOKm7GwP/vkz0/uR44bxtCyihgDIXH+8ijY+SDlWfVWpzSKF3FGaQVCgW1MEaExZKL6BjQ1KowyrJxhRAzN/uJ3As59TjNtI1l41qyXXQPcvOM0/Dzm4GQxFrct55NX9HFEFSmVsWHa8/9s45165hiQrvl7jIVcobjlMg58XAXuDkEfKOpWcIdTfXcKDn4EoVUNN4oVq2l1spumEkFvHWsW0Msiuu50g+ZP/eBQdNyZTQhJfYjKKvxxhLyIFb81t3C12KBexuPN5LCDJCzIqtKXZrTtXOyqkqJhkIpCoVofa5HyQTa9iK+Ha3C6gZjNJsu8fAgK6BUhN/TO8125dl0DbpARLg1h7GwCxFVKytniLGynyKHMXFMWTK6upYpFT65mdn2llwUm85woSxXo6xZbFU8PYxQFB9uG6aYGUNm2zncQgE+7zznq0rKEkw6hcyUMmNMfLBuWTf21ol0Er97LQ6gUgpzrChb8AoqlUPIDDFJInyVtPiohBGTyzPwpF5AeBo5eGIWXZFCGqZcZdJwmCPnrYRyWicTB5b334l6XGrl5RZCL66s0xpHsALwyX7maghs+4ZVI0n2aXnMWsWlWGxdHF5lgS8KtPDMu9cejO9D2PnCCmuZ0L7O9v1ybtepqTosk6iXYxy+jEbjbaYVpchKrHOfnQ55o0nLVPfryi16HxOW70ty9ve57pqbb6BOvxhKgYLbO9k5JGKGVSvj8BAysVS0rpyvGsmoSZndGAklY9DElNhNos+56B2rRvNkH/i/Hh/40bZj0zlaJxA6azW7MTHGLCPiCnPOhJBRquJNy5gF3DbGzCFUtEk0zhJzgVC4GgNtkTv5rrEYrWXFlCtzyChv0BU0hrOVxWrHMWXmIuuqKSWeHiNrY6idYwiZQkFrzac3RazfTrH14kyqpRBKYVUt1mZ8lnG70Zrz3tNaxRwDEUWKCbNuWLVWhKpGcTUnxikw5cpxzBxj5qOto1+s3LlWKpopgrUFbzUfdp5UFMeQoEoA4hQz3snFeYyJxhpUFZfSOAX2MXPmHQ82Da0Tq3tcwibP3InSnPE6MwZFLeLOarzh/trzv9/ryUUmYLFklJb3xDhnrlOgaI3VhlgKnbM0jeXeugGl+GQ/MYRC2xh6Z2i0pHTvpoTTLA6tilLNrVYlFeHaTKmQFs1WykIsPuucvEeSRILY5S58LsuKDGEErRpLyoptL+s+b2CMlXGK5FrQaEKqhBTxRhFLxVv9LNX7NMEB1OLvbp3h8X5ekr5lzXRY7ugFavhMr7Hy9vbQCkmcU6/6PXv+ADpbNYAc+I3Vt41NzuIMDEWggKcGYE4S4Km1unVLfV69L2Hn562+ns/tOv29NZqVt3ROfybG4cvUm6YVrTOfaSK8Vngv08DT1/66uSzvY8LyfUnO/j7Xq+erX3P983/+z/nxj39M27b82q/9Gv/tv/23137uv/yX/5K/+lf/KhcXF1xcXPDrv/7rb/z8b2PlUhgmIQLfjJHdFBmmKKJexSJi1GirmGPkk+uJJ4eJq+PM1XGmFrnbbr3hmJaVlRJXSuMMP7zoWDWi33BWUwpoFL0xyy+4iHiPIQu/prOgNeiKc4ZcCxnFyhsap5e7MIs3MKXK0yFxMwbCHHlymHiyj5gKrTdYa9l0BmcVV0PgeoxQIZfMzRD4+ZOR62MglMIhBHbjLFbqMRJKofFWsPSd4966pfUC+mtbQ+8cRokDrTVida2q0lpHb7TA+jR8dNbw5z9aYyw8vZl5fEgch5kpVoYp8ZPHe/7k0x0xib135TSQsUgw58fnPb9y0bHtHZ2z4pBat3x01tF7i1Zy97tuvTjSimLTOB6cNfzo/orNqkUhyeljqLcizmHKhJjRQN8Y1q3l3sqhlWKcxa1lAFclHfzDTUPnDJ/sAodDkOmEUqy8Rle4GRPbznHWSLO2bRzeGopSXKxbHmwaLnvHedeybj03Y2KYI7EUxpD4xc3AlPKt/qJSF6qvkHfbRhOqPP9VY271OEpJrpJCnFy7MXIIiXHO7KdZXEghc5gLU5Q8qorEYVjFbXRBraIHqkWaTLW4oKDSWy0BmsB579h0nlwqu5CoyGRAGjZFt9j1S6kv/J6dDiD70oG57kQ/hJLmBcTy3zei28r5WYPTeeH0PFg3rJ4L8HxXVUp9Toj++SXOwmeN1+m5n5quV/39prW3GWFf9bk+3yyenJ0nPdgwp9um4XToj1EazxNN+vnnWGrlGGSq9L64LJ/3nN/2dX+5ntcVPV/fteTs73N945Obf//v/z2/9Vu/xR/+4R/ya7/2a/zBH/wBf/2v/3X+5E/+hAcPHnzm8//4j/+Yv/23/zZ/5a/8Fdq25fd///f5a3/tr/E//sf/4OOPP/4GvoMvXmFhXSgtY+KYC58cAscxsuodT/blNqlbxKKZMRZUTRxDRmtxcZz3jpgzY8oc54pLhvOV5UfnHRiFRu5MVRX7qDeyhggZTCk4DVHLHbDVQm91GrQ2XHRQUOQCxhguV44xw2XvaKzYpP/0aqJ1mk0ruUXGiftoWpwoV0PAWcOf/2DNeWu5niK1wr21hHP+/OnEz2+OGC16hylX7vcGpyVIsfOaJ/uRKRYJU3SadWe5GQJpgb21znG5AtcoztuGy1VD11rmkIkRdJMxtRDROK/osubxfqbqwmXfsO08qcDFynPvrGHjHOtOhM2Px8Cc4NxrZieBmaEovAG0JH4btNi7rSYXyTLSRbRDV8fIthNwn9YajOIYFfc7y5+/v2FKMqmaUuUQRVwckrCR4k7S1Xsn+U3eib2fUjhfO2qB3Ry5mQK9M9xbe856zzFk0lhxWgjDsWpWLbgIP9+NZKW4aGVqeHOM/PkPDat1y3FxvoWUuYmFlbcYo5hjuU3mbqzodYaQJdTyOPPkOGOV4t7a83QfeHoIuCWstNRCSNBY6H3D5cphlyyq05riebcUQKqwbi2b1pEqYhtvreRKZQn4NFoRUlncUPIYIdfP3C2/TtiaK/StY+PtC1RgeLVuZrtMP99lfdlVyZtWX6f1nJCR32w3/6JVSiUsa+zupdfiVp+VwZhnJGerJRvv4RxZNVZ+X61+Nu2ooE/MgfdU72vCckcG/vbXN97c/LN/9s/4e3/v7/F3/+7fBeAP//AP+Y//8T/yr//1v+b//D//z898/r/5N//mhT//q3/1r/gP/+E/8Ed/9Ef8xm/8xtfynL9K5Vy4Wcb245TZj5IWfJwTQyhA5ag1sUgyd+8N562lIvyQXDKHKbPtPB+dNVDgJ2lAl0zXyIUvZCBX+kYumnPIDFFWLg/WDVdHmWY8Ok6kLPEIm7a5DVB8sGlwVjHFgjVCtH1ynMmHIKwdK4Jjg6wWYq4UMiolppg5zJlDLJha+dG9FU5VHh0mPj0GKDDHxNNj4Oo482g/UxCnllGKfTA4XRnGSK2WKRWOMVOpnHtNqxw3SpNqoVGKtbO4jeJ6iDzaz9yMiZ/djOgqNOhaDE1r+eG6oVbFw2tNqgASByB6DIltKKly756IrffHSG80UQtZWKeEMy3rNpFXnuOig+qXEMgpSYjoHBJpEWO3TiYeu1kym7wx6JrpLPgFVvj4EDnrHTXL99lozf11I/qfXNm0ll+56CjA9Tgzh8o4gzeVzhp0kSypTdvQewsVPsmFMYFTsgIYIzwdAqkoef1TwTmFMXLQK7WkbteKpnIYEtYUkDQFrhZeSt8IBqCWyqNhYj8nWmeEnJ0LY84orW8J2t4aEWAbw8Wm4f5KMqdePnSF/VJZe8MUstCdkzTwrX+2OrLWcLYcrEap28eIi4Po5bvlt1njvFxfFxDtq65Knl99vUtNycui2xceOxUJgs2FzXNTrFNgKIUXpmRzzEyxUBAtHiAE7FoAjXMav4js35cQ931mL92Rgb/d9Y02NyEE/vt//+/89m//9u3HtNb8+q//Ov/1v/7Xt3qMYRiIMXJ5efnKv5/nmXmeb/+82+2+2pP+ijUEgYOtvKWWyuNjYD8nNl7TOsVuzjhTWTeGqylSFVx2Aqv7dB8Xm3WmlsqHG9GX3M8NMYl9dgyFEGeMVRyCXgS/Grc4ZDSIjbVW1s6hW0XuLSlXnNZ4q/G+peTKWVtRyjClRIhiIfVWU4s4Hjqv2SzJ1P/3wx3XY0RVjbGKmBUfrEV38+kh8On1xLp1eKsYimI3JOYUyaVSlWLrDVUX+ZjSPDpM5EMlZVh70WtcT5lUYOUNK2OoWhGpbLzlMMz8fB/ESl4Vq0bx4/NO2EAqcdF5jBOnWu80uWRyFK1IUxVhjjitqFlErB7Ng7Oeiz6hjExlCoWVsxxDXKYyQuH96fVMHQJawTgXvD+BDguxwkUvr1GuAo1T1ogN3std7O44sR8z1mvyYmXunBGReCy4JYyxtxavDUbDFCub3nCx9mw7x7Zz4giqCFtoEQVXDKmK6Pe8tfTeoBRsvKMxmkPIpCKOrP2UeDrEWxqwRgJGYxaSrzea3RT5xc3I00MgpsyDjccaI0C/IiuSlJBA1lqZc2VtobfP7mZfdaestUJrg1s+7wTQ88vBf2pIAI5zpppn66033S1/2QPofQLR3rUY9V1oSl7XINVaGcLC1fHCxdpNosvbtO5Z1MOiVwrPudumVEBBY2SlGXJhP0d2Y2Dbes60u4ULvi8h7vucsNyRgb/d9Y02N48fPybnzIcffvjCxz/88EP+5//8n2/1GH//7/99fvjDH/Lrv/7rr/z73/3d3+Uf/aN/9JWf67uoE5TMG01VStY9fYPVGlTFOYutsAtC27VKtCXHWe6A1kselFWK/Zw5hIF764YfnbccxsSQCrlEsQkvo96fX0801vKji4acM/uYeTrM3MwJozWXnWPKhd0Y0VqLSJXCk32Aqnm6l4mL04r/7bLFWUPMYOZIKoX9lLE6c30MjLmSU+K8t6ycZ06Fnz0dKQpKApUSFYN3hsYqjmNBF0gqcQiy5um8BSVxBZ133F83tFbxk6czj4aB3WS42LRsG8O6Ez3OnDPVGC43nlrq4v5SzECjKscx8WdPDnxwtmKMEnqJ0vzo0nO5ceymZ+PpJ8dIqnDRWVatZzfKxfCslUMoFMhFhJqNcaA1Z42GbHh4mPjZ9UzvDFoJ8E8kJIWY5bDctpbea4aU6bWsgR4dI4cp8StNi1VysKvlc/VyOKSsmMl0jfCAGq14sGn4cNstQl2DyoVoDR9uWh7uJ/706Uwtic5rnIV1s6AEqrCVQqlcD5GnXWDbWiiF/ZRYLxTlk+A2ZhHVPtqPfLqfOU5CoJ6AT/aBj7bNAvDTaA05SYNZqky3znsnU6W3rH7Ja3pTQ/K2zcq38QB6l6uSd9UovapB2o+JVOV38vTYp5iKMRVszBJ6elovDoGrMaKqSPjGKdG1dlkblltbOkgD/zxc8H0Kcb/KhOVt7ON3ZOBvZ33ja6mvUr/3e7/Hv/t3/44//uM/pm3bV37Ob//2b/Nbv/Vbt3/e7Xb8yq/8ytf1FF+oUisVmTzspsScBbdvteIYE5vGse08ZhKWSNMZjIFfXM9i6zaaXBQ/OHeEnHlyDGx6S2stGcXxMNM1jmmO7OYshF2jMVruvBtbyFQBtimWsbLCO8t9q3Fa0bXCWilVVmPOaryXddW2bQk1k2taVjDCcHl6iOzGmao0u1Ew/Wd9RZE5jEnG0iieHmDVOTqjebgb2cWINorWOMYpMaXEuiguWs0QC52HWBVhKmAkT2cfIo2X79nPmbkmrg4z1mg6ZxhD5l7vQCtiEt3SutUMQbK6zjvLcRTWTqqZp6NCVyXjcSpTzXgtYwGxiVvGOTHHSlawcoYP1g2xOPQJ/68TsUpzeNkbGmOYciFVuWucc2XlNJ2BVdOJRQ5FiDKZ6pyhZABN1zhKzhxj4tGxsPIODChVUChap7noPFYpYq5cDQGlFBbFnEWsHJcGT4JWE1oZtr0HpfFK1ohPR5nY9F4RY+LhnKi60llFt7wXmmWtoYCSCo9mcfM5KxOVrCrXQ+DhPvDhWgCORhnONzJ12k0SteC0xB20Whg3n3dYvK4h+Sqakm/TAfQuVyXvolF6XYOUcmEcM6vnGtPTCtMuWVt+mbSNIZEL9M6QywmwWeiK3Mztl0iWXPVyzdOopYH1z+WNvQ8h7pdpcO8Afd/9+kabm/v372OM4dNPP33h459++ikfffTRG//tP/2n/5Tf+73f47/8l//CX/gLf+G1n9c0DU3TvJPn+1XrdFGrSkS4czrlPEFXZeUzp4w3BmUVSlXGOVGyZCUppQQ4h2Q2xQxXu5nMzBATuykJW2XKGAPHkDhrLd44ycqZEq2zPBkmDmNmuxIveiliwx1zxgWNqgKHy0vO0P1NK82DNXxyCAxBNDHDlFBa8XSQtUpVkhlzPQRCSeQEfZNw1pFSpvGGmApHo7iZCnZhmky5cMxRMqhs4cwpqlEkCiFFLIYYKlMsZFVYN5LgPSdxm93ExJlSXO8y+zGz6Rxn3lIB7zXbruGs9fy5+z3WOHJ5wsODYorQkGmsgZJ5sstYZVg1hWFKXKwEKBdypaTC+cqhtEJpRc2KYUqknJlzYo4iEN+0XmIvchH+kAFrDB+eOTprJYQxZS5WImTelIyd5H0Ri6xZDJWcCsZYzlrN9ZiYs/BiFAaNwP+mCK13XK4kyPPqEKi1MMaC1XJAjREIicYZhhwYg1Bu76+Enn3WOXKtpJJZeUdjzNIIJpSSJPApy3t0nqRJ282wH+XvvdbcTJFtY3Fac96LhmI3ZbRR3N94usZymBJjSCit3/qwODUkLwAvP+fffhdQ+O9yVfIuGqXXNUjeSFRHKIXu5Uw7q28bm+f5R52xlFLZVLHWT0miXW7J60uuWAFMrZ+BC77Pn9kXaXDvAH3f/fpGf0ree/7SX/pL/NEf/RF/42/8DQBKKfzRH/0Rv/mbv/naf/dP/sk/4R//43/Mf/7P/5lf/dVf/Zqe7Vev5y9qzhoue8/NFGm0pl1pppi5GhKthb5xqKqo3vHRuViHpyAH1zhnQkkYKk+PM0+GAFSOoRJjIYTEunN0TWEOibHPpFjJVM67SskCWxumhAI2jeN6jFREs1EqNBpiKexD5rCkh+sKKSdCNozzzNUY8VozhswxZTLikKgFnh4jMSa2xfNgrZhLxSaDthVrYN1WYjQcpkJOkSlIU2drIeHodWEKhUyiM5mQIqlWVkqjlRzu10M+5QTwNGSmIGyZmAIH4+nXDZdFhM8fbFs+ulwTY+HirGPdNpQqoLY5Q6iFitBu5yRUXucSa2TqcJzFpRaLofcab8Dqys1RDl2tFSor2sYJ0yUX9lPEa8NHa8+DdcvNlMXunAtTSFwP8TYB+wfbTtZFVvHkWLDO8MNty0Xn2M8FU9Ii7h15fBhFE7Vq+EERoXgpMMbI1RiJRSZzGgHS5VzwRqG0BEN6Z+m9FRt847geA2YJcu29ASSIcjdHVlX0MytvuZkkZFIOQ8nkMkphEDfVvU2D0prr/cxFr9ks4D2lFIcY2I2Z87X/wofF6w6aU/bTy5EL7+NO+103Te9KjPouGqXXNUgFmcTUpel+3WO/3Bydmoiz1lHHiGJpiGCZ9ohD7nVwwW+67gB934/6xlvQ3/qt3+Lv/J2/w6/+6q/yl//yX+YP/uAPOB6Pt+6p3/iN3+Djjz/md3/3dwH4/d//fX7nd36Hf/tv/y0//vGP+eSTTwBYr9es1+tv7Pt423r+omaMHAAKsTX3raNxkTkWtBEXTq8VTsOTY2A3J6YpkRFNg1aZm+MMylJLwanMPonoOBTNSmmmWPGpCum2lTHyWVvZdJbrY+RmjEwhMQdoGzhOleNc2I2SxG1tZT9EHt4cCKly1nku1p7DlNiPMytryCgolZDlcDldKPdzYs6yTkFJCnmexBVz2VmuKehQ6LynZEUmY41hThWnlGT8zBlvJc3cGLCtZjcVGisgv02jUXiupoC1QM0MEbwtXDrFlCNPBsUPQ2SaMyFlto1jVJmwPLchZWJSnDcKpxVDzOJEAm7GzMpB5zSxgDOF60GmLwohxs4l4a2mb6zYoI0mZdEXrFrLduVRaLTKqCIBmfubiZSEJmsq5FJFt+K0rLu84azzhJjxVuOM59FuZEpF+CuN4f7KMSbRSzkjwt8QK84IATmVikOTdCUrzXlrUAa23svabZmiANTblY/FLI32EDKbxZbtjeZsCPzZ03mBQi5asFS57CyrznHRNyLo7sotdRsW+nCpi31eLayRtzssXnXQWC1Bsvs5svEWYzW1FHIREvi7vNN+F+uJVzVG71IL9FUbpTc1SNtOXFFveuw3We7Xi+VeVsZyzVPq3cMF32XdAfq+H/WNNzd/62/9LR49esTv/M7v8Mknn/AX/+Jf5D/9p/90KzL+sz/7M2GELPUv/sW/IITA3/ybf/OFx/kH/+Af8A//4T/8Op/6l6pXXdRggZdVMFrfwtpOFzyjKj+/Hni6n/jFzcRZZ7m/Esvycarc31SmqPCNJxSF8Ho1Rjv6FVx0jqfHII4VBbEi+VWtQ88zKMX5ShxOV2PgZpgZpkzrHSXKBOIQFY2WwM5hCjw+Rm7GxCdpolQhzIZYGHKiV0YmGFrSm0PKtI2jlErOhX2u1JwZityJn3uJmNhNhVwLVE3jNFvtmWIkZchUztqWeytNKQbnwRTFcap0jWYujuOUqMax0oWz3tE5TaqGbeNQKB4dRnICq/ItW2XOBQcUlWmbjggYJRTd1hlWXrFqNKUUfnYTiClxPaRlBK/pvGZ/KKAi686jEUjjFGUV1DsJ3ZhLkWRvpVk5Qy7CyHEKdJHGZE6S/3TZW0DJCi8WWqt4cpjZhcxlb+m84zgnOieHzPUYWS0smLUvKF35ZBeWC7AcVk7DvbUnZlBatFZzyrRWE5MABBtrlgmVHFb31p7Lrrm1TN9fNzw9BuJC8fVOs+0cH20bvLPL5EtjjAhIm5NWpoqL5nk6MbzdYfGqg2aKWcBwRUjFpVSuxkjvDJ2RS9q7utP+KuuJt2mM3oUW6F00Sm9qkCSn6stlSZ0s92vjsCa/8Pib1n4rNSzv0z5+V19ffePNDcBv/uZvvnYN9cd//Mcv/PlP//RP3/8T+hqqlPpCkKZGBHzPB9+d6KWHMTJneLBt6b1hiIWbqVCq6FyeTJmVs7RO4WdNcZreQkqS63RTJQ18CFHCD5GMKq8UMWmOc8TbFgkigDBXQhJKbVnyfVTNGKMZxsAxFK6HSCFyc4wYbTCmMoaC0lC04jhNzBGqKrS+IUxhwflLuvnVWJlzwaIotSHljKIwFdiSmaPBGsO9VUNMsI+GdaOZs0JT0AGmWrmeEveUo7EW1VRCldfSVhgSXPaajy9bqjHspsw0R+aYxLHlNarAzZyICVJf+cBbaBRGwXlnCaVyM2auh4lPrieJglgaljFFnG346KK5pczejIm+sdzrveSJKU2iUmLmOGVSzpz1ninLvswtqx2tNGedpeRKLooYC6lEPt3NZApjqOhaaa3BIFqXk7V/SokpyGFbaqWWyrrJpFwp2aBNxSiIqSwTHXmvGaWYFiKvVUKzdkYajpCKuL60WgjYEob68eWKYRKRuNWazguwz2gRHouOLHOYk5CNvRxeVcmU6/mD8W0Oi5cPmlLqLXm3cYL1V1WiRHIRCu7pa3zVO+2vup74unUbX6VROkXAOK0/AzZ8m8f+vOnRt9G19rq6A/R9P+pb0dz8MlUpIri9mRIxF5zRbFvLee9vL+RxOSjlQpH52c2EqpXOOQHBDZFoC8e5Yp2Az7ZOY0yDMZkaNdZZrIOVdWw6S86Z6zGTamTbNRgFU8ocJgmxq1Q5pGYYUuTpEFk5+WWeQqRUeHgTiLVSi9w5p5gYMpzZTExaaLQOoDIswZDzXBnNhDGKkCpzqGy8A2uoqTLpgpln+sYQFn3P1rVoo1EkDrPB6MplZ/hg43l0yAxz5CplakgcZxHgGm04TAGlNI2XHBvvFN5phlA594L4//nNkaeHyL1Vw/nKE7I0JOvWEansQ2LlDVppHh0CzgjMcE6FVWuYjpm2kXiEMUgQ6VlreTokVq2i8WANaCM8Gu80ZuEMDZMkcWsNH246Yimc944QC5vO4VBcTwHvLKaHqyGQ1MQ4Vx5sPLnIVMg7zYPe0Vq9sGxE3Nk5Q+c0v7ie6b0llIIBVt5xDIlPD5GPtw3WGI5TkrBFo7lce5zWVC3iabvkco0xU4dAhdupw3nnJOMsZ2qFIWaYMxcrx5yyZFw5Iw7AkLkaIpvWctk58udoN15VLx80VBGgGuTjWisooi0K+cVG5qveaX+V9cR3RbfxpunSF6m3bV6+Ta61N9UdoO+7X3fNzddQz+/cr4fA40PAW82mscyp8PgQALhct7RW8+QwM8eCNYqUMnOqdE4zxUKtlb4xzKHyyU1iDHInOE4FayKXK8d5YxhSYeU8rTW01rLdNAzznif7wMpZztYNqEpVLHh/iSywztA5hyIy10IawGvLQGLMhZqT0HirrIoMEIJYlRsn6ySyuLZaCwMSUug0OCuri1ihoeI6yxyXDJwcUFoOvKeHmQ/ODKvOiVhXaRSGeS60ThMTxFHCNqmR631EWUVOFa0NSjmshXaxnj66mahaYYDDIHyeIcjPwGiB0YSYeHhTmefCg7OGlZeD/oMzcdqlAuvGs59E9I0ypJTBW8ZYaKzop8aQOcTMHBMrp+idOMTGKBiAUgohVLxjWdnJVKTRmqEUvDNsWsmbSqXyw3XLT9JIyLKqHKNMAs7OxJXljeaH556VdwvwT3OxykwRroeMpjLHzBgiVSmm6NhYyw+2LTEXxlwoFZkuaIVZpoYhZY5zwlu5oJ+mDr2XRm0fZFrircY5RcqV6xRprFlWepbWWbGnK8W2dYRcvtRh8fxBExfAYLsweEAOTKcVIUoDe3LhfNU77a+ynviu6Dbe9XTpu9K8fF59lyZNd/Xqumtu3mO9fFdEkRiC1hkaJ5yO0wX6ZkqctQVvNEpJ0OSQZC1ldUVrjQMOc6VxkkytVGXlzWLjLuQx8Sud43zb8ngfebD1dNaitRBzW2/poziMPt1PzClzHBJVVdadgNPmLM3OxaqhlsQ+ynTJWUtvMvskYZ6dt7TakkoiFXFYbR00TvEkwBwhaIgJWUkA3iS81xidsVYzjHL4hpTIGHoHnYUI3EwRZ8VZQa0McWaIhs5V5jkTkxxcq9ZxmGZqUSQqa6e47DW1an52E3E2iPNMVUKFYyqcLQGTMRcqMr0IqXDWerGzx0opEkZKgcZpLleelCvb1vCLm0BqZeJ1jAIm/HDT0DVi72+NQevK1ZCY0kzfWDpnCcQFMphovMeaSkHges5qdCi3yPu0TCgabzlfuD1r52icRlUJMG09fHgmeVpKKbQ+iakttcKHW4tBKMdKi4i39QarNHEhOSulaE5Mk1ms/dZo9mPAL6L25wXAYyyglBCf9TNd2DBHbg4zfesAdTsBOOU+VfjSh8XLB83KGcYoYmyrT82G5mIlz/Vd3Wm/7XriVYLhb4Nu4/McXt+V6dI3Wd+XZu2Xse6am/dYL98VHSdxJwmxVi48CtBUSkU0OEZDFTaKc5By4ThGPt1Feq/YeM1UCodJ1iedEw5Jh8IizJi1c3T3Lb13bBoPwM0wUxX0rSUD17uRm1TYz4EhyCH/48sOq8pC1q2kovBUWq3xncVZhT0sDhsDrbOUlNgVmd7c5IJLhf2AQOm02EnJ8l8F2Llwf1WoNRFCJWuDQfRDQUkgZ0wFSkCVyvnGo3Ih1cI0F2KrOeaK1TLRAUA5zjstbgxriMrQ1My6cRgFKVZ+cTMQi6KxYpPOVOa5smlEYGuqwTeGVhvmksEoemd5eAg0VqG1ZFKlUmmtwOgqCrMIqeeQOYTMHDPaaC68iLhDUdgsjqfGSfaTMZrL1rPuHU4rCpWYKmNM3BwjrdXChhmT8EGMETecVax9g9Jwf91yuWrY9P72/SYNgEGXyqepLNA0sd63zuIMaCUxEIcxs1qaLmcUN0NgP0WsFRdLKBVvFu7OrUtJJkdFwcrbF4SgtQim3zmJDjlNAFKWpPfTYf5lD4vnD2ohGL8oTl0v4tQTJFDiy0VL8mX6iNPX80ZD8+r1xJtWOt+kbuNtHV7flenSXd3Vl6m75uY91avuilpnUQoeHQIfbE65LZndGGi94aPYichz0Q6kObObxR7du8iYC0226OXgpmZiVVA1XlcJHTwEbNGcryyPU2DTzzTGcD0GxjFSNVzvJx4NQvrdNA6jMk8PM40CjGJOMhGIpfB4B6FkWuf5eNVgVCXEQF6cRkNRGFNxFuYM4yyTGruEMhoNIQtzpQBUuJnALWsabzNTQv59KMQs51LKlUNI9MEyhIrRhXVnKBRUrRQMc5IUaaVhTiwTKkWYM0UrGl1JKHKOXE8VozTJOVobcdVyDIVpScDunOU4Bkajaa1h7USX9IvdiFOS+3USUjdOLvkfbz3OGp4MkU+OkbXTFET4O8eMRZFK5mbIOKX58KzFrpfmZNUAiv2SNZZzkUYGGGKhlMj1MLGbMn1r2HjLMST2BR6sPJfrhvWCwj9VXaY9kUoomTmLxmnbW85aoTc/Oc50TrObEkYt3BGjCUms8ceQqbXSGoW3+pYgq5fD2RgtDeNzE4lSKuOiSTJakYuQoVMuHKKELL58mL8tN+ZNB/WrKcWVuDjhvox1+3Vf76yRlerzX2sM6Y0rnW9Kt/G2q6Zvw3Tpru7qfdVdc/Oe6uW7olIqBcHbH6bKcUoLRC4xhkKl8oubkc5pxjlxMyWOU6TzhrW3bNcNq1r5cNWQS+FqTjw5Zu6tLOcrx2EMXOWM1oBWNN4yxcCTgwhUU8psVsKnuZkivXfiykJzsW74xc2Rn1wNdJ2jt3IQPN3PfLobSUXT28jF2pPicnDkTC1RUPzKkU1knCv7WaY2RQlBWWVISGPTAqrIyuo4y5uvNjAt4EDbigbIIVORXAuxZhE8G8UxCRk51oJRlVw1rVH0SpMNrJ0EQw6hEEqlPcUNaE2NmWoKmsyYDI2Fjdfsp8wUM9Zaai5cOiuuIQvTMnFRwDEW5lQX8bcjo8hKoYviXu/ZTYkhJAndtIbDmFl3Gm/M7QpIXCgAkmI+pSIRCM5wyKDRXK4NQ8gMY2LOFaXhsmvoG3FCzbnQNIbO2c8c1reHmtZc9A1zytSSRNPjDYc5CWcGhVXShChgjJlUxJqrtGLtnditc6WSyd6Qq/pMeOVpIjEvjdFF79FaAG3TkuTutDRJp/qi3JjPO6hfnix8VQ3Ja/998+K/f9uVztet2/giq6Y7V9BdfZ/rrrl5T/W88ykv9tWQMrHIoTrnzBiEt9JYRWctT4dAKpXzVsIxqZoQYTZVLuRLMxRTJeXMMCVZYTjNMSQqBaeU5EcpjbaGTik+3Hquj5pNZ/nF9cSQ4dLLGmQMhSYmdsfI48PMj6xYl39ylTjOM6pULJldKOQDaDK1FqYMOUHrwJjKlNRiQ4ZYoDHIHX6FjExjjAHvYZrlzwGwBSiQFcSIxEEokHYPDrM4ZHxxrBo41CXRu1TR7ngPGnSpdNZilEHpgEOiIwqKtXEEDyHLIZdL5eYY8U6sxQA5JgyO5Cu9UlwPiaaRPC9VFL6B85ViCoW4xCMcZ8g50XlDShI9EWvFa4Uxkm01x8y2k6YrlAJZc9YYMjJxCqHiFh6QXQ74BxvPwQeKlpiN7cpLRATLyo5l9fJcvXyoyWQEGlc4BCFRN06gadpoiX+osJ8TtUiCeUJx7h2ttxit2E8RFORcMfb14ZVaKdaNxVlz+7VTZtHEiGjaLtqdL9J8fFFNyFfVkJRSGWKmKpnyvQk2+EVWOl+nbuOLrpq+z66g70IUx129v7prbt5Tne6KHu9n5lJojbBANArXWHqtlrv650TEuTKXTMoaazTblZWDR4FCEXPiasysveGH24bDlPjkJrAbExlotTQSzmg0sgqKWUi6MoGQhObOG54cgpCJF0rv9RiZU2U3jILpX+6qi1HkLI+pqBTl6FtPLjPXAVIotLkwLtOYmOU5hCwaG4P82QB9AyGKBsIqYNFDrFp5rrUilFkHrTWIcRrQiqIQorCSC3ItUJfJitUKpSy904jvTKEVHMdIVIrZKCwajKQVx1o4xMql0Tw4X0mwX0hUxdKEJmKW12quimNKTFNdMnEKMSliymL51oYYBSa3bT3znBkXIXDrNaYqlFHEUshT5fJChMe7KdE7K3qdhVatELdPXBg0qApUaYKjOMW8lmyrU1N2qpQFG9AtTdAtX2RxS6VS2TSKdlmXNFYzhsSnu4k5ZqSLqUQrYa5i/9bcX3khyL50QLw8kZiTNC37GAlLA+aUprWaMRa0Fkjgm5oPp8sLjJUvelB/FQ1JrZXjHLk+Bvl8Iw64k639Mw3LN7DSeauE6i/4vL6PrqC70Mu7grvm5r2WNxprlIz0F/rw5cpznBI3cyDESu8MSmm8VYwl0zm5q19ZCT3chUKogu1/epwpBc46SwqKs9ZTWO6QVWVasoummHhyDIxzxBrN9RSRBZShdZqNU/z00cR+TpgKVStCTOSU+V9PMlPKtNqgNOSihK1iNU9Lxi35RDkWcoZjgFmCq3FKnE6GpYEBtIUcZdVkKlQLdZZGpiATnFogGPBA50Q701jDpndoNMMcCTlRM9RccM7irUUbEbauvKJrPJXK1hk+XBuuxsz1mCAlUlactRptLCmDyhV0IVfDtrVcbjqux0i3OJFSFbfUzZTJOYso10JMibT8XBNwnCsXa1nvaBTdss7LA/RGs+0bqIrL3hNOYDstTabRigJ03nAzRSwwpMQcMrMVLtE4FxqjOWvF/XScEwcq29ZxTFlWeIvId45FQjlDpvcGb+Q11FrSvU9NQ2OerRtyhcYbOiturVyq6H3GSOMMm9aKKNvoz7y34cWJROsMpVT2c7zNfDrZtdNporKswl5uPoyCm1FiQ1DPnFZ+uSF424P6qzQcU8wiSNdyuCtgWDAL9nRjcqKJn8TGWol77D2vdL7IYf1lV03fJ1fQXejlXcFdc/NeqyKpyv1Cjg0xM+bCISWe7gP7IfLhtuGDs07CIEOmloyxlrWXMEBjKittsUoxzGILH4MEGMZc8EouTLkorseJTSNo/2kOPNxP7MaIeWQ4b6w0Ao3monM8WHvJR6piFQ6xMofMmCL7qXAgERcQX6PhaRLB8LqJOA2HICsTXSEkOaC0lglM38hkphpoLKwSjBHmCjUjLrDTaiqA8rKesg00xhBrJZeCqgpnJBer5sxcFb41tEYOsfPeUtCEWvlhZ1DKMpaKqppN5+ibSMqWR/tIKPDhumGIhSlkzjS0VlPRpAyXvRMHVIWcChdrQ2MU1lkeDZHrw0wohcuu4aLzKDJDTORsWHnH1ZRQKnLWOrqNv7VRN0ZTauFmjuzGiL5RnHcebxSlymHSW01Vwtg5re+sMXyoPVOqAuorVbgzznC58ijg8X4m5UysSyNNZT9GrgaxS3sn75t7a49SiuOcF9q0TMHGWXK2rJHDsPEKZ2S91lrDtn99Y/OZ93oV0N/KGtwCLnxGCuaWKvyq5uOwZJD1Xqz/t8GYrkrKfSjL47z5oP6yB/tpneWcZq0tx1nS3I2S57byVvRIihfSybUCrSq1ItEZ72ml80UP6+/zqunz6s7eflenumtu3mOd7iQLi85jjEK6dZbmvOORUUxRmhVvNVpX5qpYORFhPhkKRmnurxq0VmyOMzHL5w8hk2rlek5o4MNNQ0xCsb0ZCjnN7MbIEDJdq0mu8OluRulCtxx850uC9aMxkmvlZi7MsRCTrIfmILoQVeUuH0Qvc3rTpOV/pcjHukbAfW0Luoh49nLdEoIkX4cEE0tyeCuNTa2QMqzX0FvLeiV6j9ZYNr0VK/yc0NWgMmxbJ1MwJSN1ReE4ZR4eEh9tFSVWdNXMKXPWeLqVOKmOQVhBF2uLR8IxpyiRD85UatXUKsnm3sCDTQcVYqmsc+U4yRQMKldDpPcyUbHG4p1hqxU5ZjKVlTEcU0FH4fgcZqDC/ZXHaM1+jDRORL1zlqbQWtFEbVpL6y2HWXKfjlPk6hgYUroNhZTXrDDmzDQnzjuPNprDkESYvbBenK1LjtRnD7xKpXUS9nm6+59SEcv+Gw7Dl1cjz08VYi4cU6ajsmqfNUWnyYk1mrbWF5qPU5O1bswt88lqmEPi4RzpvSHXSg7CWzJGv/Gg/jIH+/PrLKuf/fu0fK+dkynJq5qMXKBbJlTvY6XzZQ7r7+Oq6W3rzt5+V6e6a27eY53uJPdjYj8GxpQklNFotq1j1Tge3kxU5CK0bh3rUrFGErFTqaydkVBEI/+9OszsprxkwcgouRaoaJw36FTZ9IaHNzNDLBir2bYKbz21Bp4cIsexMCWJUggBYbXkzDhFHt+I0FcBM9Lk6OXPp0tCevn7ZBEMz+AtpMjCQlFsektpLd04MxTFfggkkVaw9vJ5tUCjFf1KoINQKArGAKUo1p1no2CYMwY5SEKuzLHiveKDTYu3lsfHTCmFB5uelXES2Oc01hge7RMX64YHayerl/1MqYVQYJgyWie8s3TGcr4ynDeeQ8o0WlEqPD5Etq3BG8VhAchte0+zTGc23rAzhkaBtQZfFZ3RaCP8oU77W6fR9XHm8SFhNfSd5bzxdI3lZkqyBswShzGmLM2JUqwax8oZKooxFWrIeKMYlp/BCfxnjeasdcRc2HYepRVzrrT1RZ0MFfY6kaustlpv8Vas5Hr5ei9wbF6zGhGcgRy+nTOkXNhN8g5Zte4zk5M3NVmnGufEcU4UwBsHVkJEG/v5CdJf5mB/cZ2lX/la1Mprm4xQKt17aiC+ymH9fVo1vW3d2dvv6lR3zc17rsZq9hSuxvDciFvu/BqruV8rsUKhcNZIqnRaiK5WK8ZQOIRMtbBylp2NmCosjzkWGmtwunAzB/bHmTlBSJWfX02MMVCzJG5/uIX9EPn51SiPrSqVwn7K7KfEMM1c7eDAsyYmL/8tPGtgXlUn51MFahJbtzdgfIUqF5uu84zHhHWgAkwRxipfRFsZ7yskAT0UxTAlKjL52HaOB5sOvSmM1VBSokmZVOXgOWscWsOjfSGmzJPjyMVKOqdJeUqBzleOQ+DTXOT7qoXeajqnhJ7bWH647Wm8xqCpCkrOxKQYQsSqwjGA6izbxuKdpuQKVjQZRcGDtYNFL3RPS2P4dAh4o+haTectc8w4a1gtL/Laewp6ec00hzHwdMjkLEGksWQ2jaW1lgicNbIe2YXESpslTV1U2sc5C3jPG5wzi0OJFw7BF3Qy5cUVTq7yM+j9Z1c4r5pa7MdEqoXO29sDf7Owd8ZUsCFj7IuTlpebj+ebLFUr45x4dJyZQsJZzZwsq8aBFYji29YXOdhftc56+bV4PtT2+XqfE4FSJAhUKe4O67esO3v7XZ3qrrl5zzWnAkqz7UWHoY2intYGRuOcZesNqsqFf84FqyR2YXcMPB0jh3HGGXNrH7/oHQrLfpKJwphgPybmlClVM+8H9sOE0pKtdJwin1C4GSUp2jrNGDP748x+EaHuBni6HB49MrV5vhTQvPRxg7yBItLYLJ4brIGq4RDhOEfWTbsEHM6Svr3QY8vpvwn2M7Q20PRrhinitBIxdjY4a+m856yzoDI/fVwkkdsbDHVhqgh9mCoMllYnzs87nKqMpS5iX3n9ndZE5KD6Pz7a4I0czhd9g1aVY0hMoTDXSpgDj/cTOcOmU/TW0HnDyllpaFaeVevYT0kE2LmgnUFrTchJ0s6VFQdRiUxFbGROyyHZe0NZpgIxJp4OkZgy99ceauVqn7EK+sbi9UnYKmup/VgwWlZnXkOphf0kzcZq0Xnl/OpDsCw27c5pwoIqUEBjJa/q5c991dQi5cI4ZlbP6T6UUmxah41ZAIH22YGSFq6P1Rpr9WearDkk9lNkNwSUEhzAo91M7AvbXkJOX9VEvAvL7+ets77OicDLU7KY5Pd21cr79O6wfnP9MmuO7upZ3TU377GePxTWrSWXQkyVQuE4FZw3NFrTL/v6w5yYY0bVwk+vB67GiFVwDJn9NLNtLesFZT+GwqN9IBU5iHNOkBVGFa5DoWs9LJTasRSmQ+J6zHROcdE1jKry8KYyxkwuops51fCK7yW/4uMWaWZO/7QgK6uclwlOgWNIUCdCUhQl4YZzktVVrkszpOA4greRbZyxGKw3lKpBCSBuN47k7Lncdnx4Dl1jKEqajWHKZF0oVWGNQRuYSkFlUNZISKWuXPSe3RAlaLGV5mEMBdMWGm0wRom+qBTGmLg6zFyPkRDlIDlvHN5ZUBBLwWnFIWSBJFKJU2HdiWYmxCTrGq1xqnIzBEISIXjrHWtvOOscpYj1ezdFUpaAS2c1Wmk2veVjJWzn1hrWrSNVmaI4o5iWSUqpmetJ6M7OwhwTQzTCsFFw3lhyMYBe3HQvrpecEuF4rDDnSprTC26c161GvNGgIJRCZ17U2DijbxubUgrXQ+BmSsQsTb3AEAX6540m6MzNlJlyplZFYxVnnSekwvWYUEqxWgJFT/UuLb+ft876OicCL0/JtIJcElPMEnJ6d1i/sX6ZNUd39azumpv3WLkUDlMEpNExSpGV6DVCqmytwjnDtEBhVK2UWvjp4yOf7Ga0BqUq18dIQUIpTS3s5sLT48QvnsxUMse54owQexuj2DSWs87y9BjQIfBknzmGmTnDynVorZgyeKswWgS92kCXYPwC39/MZ99ACTguWVI+wM2YqElov0ZV4e/UZ1ZwuwB5tIYUZOqy7S2NtaRSSQksiqsh8ng/s5sCZ43lg40jFcPVGKk14bAMNTHHyqYxdE7Wfr2XQyCWDEoAfI1SeA03U+FnVyP3Vw67NRiluJ4CU6g4rTlrHKVAdkInHjLc6yxWw6c3E9podrOs9WotogNKIoIeQqYqxVkjGUQhic16CHJAWV1pomQ3zakiwwBNYyx9I7qizluohYeHTBkixmoarVl5Q28VD8tMSpIBxvL+aI1iShUXhaNTSuV6ECF73zpqKcISWtaiqVSux0itsO6cJNG/TAF+zdSiAP3CHIr59Qf+9RB4fJAU9k1jmVPh8SEsCfeS/B6TxE+Iu8tREK2Tt5r9FBlmtRCQn33992H5fdM66+uYCLxqSuYXxEApwlqyRr/1Yf3LDLL7ZdQc3dWzumtu3mOFJX/Jqmejfr1k8yjAKHGLzLlQimQyxZDYzZGqCyVXno6Zh7sRXSu748x573DOMs2VVAulQq1FUqeLYO91UeQlqlJVKCRKyXitqSXz6c3I1XHkyS4wpGfroS9zGXhZXOyQKY9f/m63B7tONF4CQZWt+CL2cYdMGoCliYDjNHNv1dI5hdeGkAshFvaxoFGEUvhkP3MTAmfO8HRMaDQ/uGh4sHEcYybGgreWprV8cNYRc+ZqCDw9BlIqzHMmVFmTQGWaIo3VbFrDzRAZpsSUK71XnPdiuz6EKOnrsVJi5GpIfHTe0lnNEKsko6fE0WhpRJRi21tQijlVzlaOptFcH5Q42qbE02Ok0bBuPRcrjzbCIvLWkCvMMROSBHV2Xg7vkos8rrF4k6iq0GuDNZ45JH6+m1h5gzeyCqtLg1CQVdZuiKwaQ2fkhT/lRNXl/fg6Ku/rphbbToTHrzvwUyrcTAlv9W3D0XkNJB7uZy4zeC9OKT0rdlPhXu9QWpLax5RxVovD77nJ0Tdh+f06JgJvFBAX+Z7e5mvegezu6pe97pqb91SlVEKprKyEFB6DWLbDsgMyGqZYOYaCN4pNK4fazZyoVGKocigYRWMUT4+BR8PMFDzbTc8wRciSgl1V5moRk5ZaSakyRQH07afMYQrcjElAelZTxszjfWQ3w9JzAM8ExF+lEs/ExxbR18wJUEXoxBqOEUKFTkPTSOyCUjLRmbPi6XFCq46hik86V9i2nloFIug6SEWRqqY1Eg3QWE3fNnSNwA41sPIGrSs1QoyZT/YTNUvzp4zoJFbeUIH9XHi6n5lzIeS8aCkajnPEG03v7NJwRK6HGaXAGyUJ395wDJmHIbBScLn2hFhpnCXkzJwErEdZ6LtW4apmnxNDqdxzoskyWnM9BEIqDCGKuBzY9g3nnadxYosutVLTKdpgecGBOWWGOXLeWlqr2Y15mX5IA6uUfG5chKonCjDLQzyvZ3lZKPumqYVS6rUHfiqFGDOdN7dfE6QReRwSF72/bU7OGsd+iOznxP2N6LRMUnRW07UOo59rbr5By+/7nAi8K23PHcjurn7Z6+5d/p7qdPE1C+1UweLAgCeHQEXRNhpvYEqZ65tI7xSHMTOFwhglw0mhOc6RY6iUmjnMkWO44eqYmHJm5Q1UaSLqAr9be7HOPj5EDqkQ5rTYqmEfJzor+U+dhaQgTrImiq/4PizPpjMt0rTMPJvQaERofPq3hme2cQ1YK583Z1BG8p62LVwdoRihFysl6yljoFGKzjWsvKQwh1zQRUi+4CkaWqNxTlKuG+1otSJWISnfW3vSomNptaD/cy44o+g0DAGUVQtXxZFLpSiZjKw6QxP1LchviJKQfZgWHYxWtM6zXcmUo1RDzorWa1YecaYVsFpTrOhrVJX3wHGx9hurWTeitekawxTLIj6ubJxi2zuujoE5VFSBs96x7T2dFx6NqYtOqhbmkMi5chPFUj2FxFlj8QsbBiU/g2NInHUee9K3PO+eOlF34YWD8+XD9G00KS8f+DmLdum4cI5WjYS1Ns4wRtEjnTKzQBxr99aeh8fAYZLMrpU3GC0xDi98vZeagNP6JX/BJuDbVq+bksVYlonX59cdyO6u7uquuXlvpdWCcI+FrrGkVJhSJqbCkAqWilYWYyRHah4jf/ZoXLgylUymtYZHh5l9yLQGnLa3d867cRYdSWnwy92zUgrnFLVmjikzZ8gpkhcIXyowHaH20kg4LaTgqbyotdEv/fdUp8uhRZqY+tx/I88Exqemxy3NTO/kA2eNo1CZQ+IC2A8wZhGzmkbyqC5WhsuV4XzdMqVCmxNTqsxF4U1FFXE/aQW9VzhlSaqw9prGG7y1fHxh0apyuW6ouTI3lcZL2vfTvfCGtLIUVUi5sOktViuujpnz3tI0FqMTY4Qpi0BoZTTr1vPD81YE3mMCJaN/nyQcsm81a28oBYySFQBLczMGYfA0VjQ4VYmGwxvFMSbyvpKLCGx7bwXKiDRKzzcApzDKMWYeHSNGi+Mq5QIVzjqHrooxJI6LgDeXujQJHqOVrD9Toda66H+UNHQLvfjzKMCvm1qcGgyFNKVXg+APFJUpVbSKxKSZQqIqxba1p5h0eX8pYRoZraWZRGGsvl2nvPw8Wqs5TIk5JGKpsoZTcNk5vqO9DfCStmchkVdgSpBq/Nz10h3I7q7u6q65eW+ltcIb0dToVAmnICVd5cJdhHTrrNi4Hx5G9mPhg7XHaijJUChQKrZU2sYQcuZ6iKQcuB4TpWZSUayqpnGOlQOrDceo2I+JmCLTDPtJJjUK4dHEAbolGiFVmcLccmp45oA6/e9UpwaoWz5ugE5J43RabRVEb2O1PPYwi65j1YrYdcbgbSWELEGWSqjGCmi9onUOby1ouTg3XUvejwwpUo2TRiEWVFLc6zy9Mcyp0jq5SzVacd45LnpHRuzK96wElKbs+V/qwP/1+MBhmmiNwTtN38qvweNhpHe9REAkTeMq2mhSVNzfdnx81nJv03E9zEzhSK7SxF6PAY3mwbqh9w7nNGeNpXGWXEQzM8XMn12NDCHRKxGJWmMQE7tMIdTSECsl7ByHYh8SqRRaY4R0nStQiAUuesuUqoSUVoUYuTSNVUgsUqVQ6ZxQsvdTxCpFZxSH8My5dLasl0LhSwllX2VdDqmQq2Sntbbl6jDLRKEWbFV8vO3ovGGM8v2cJhSlwOW6obHmc3UtrTOMIbEbM2jRFhkt07Mp5u/k+uXUIDbW0FjDcY6UCm4JiH2b9dIdyO6u7uquuXmv1XtL7w1PDvPCf9GsvGP0mcMUGVPk013g6ZDwGjadofMKrx3OJH56HSTnp9UcpsDVITEmAbxNIUskQp5pTENIiTFqNl7hLYQ5cjXBOC6kYZ41KwEYMqgsb4CT1mbBxNxC+06XwPrSnxPP1k/aiO27RZoaDZxvRFtzSgA3BqzTzECjNZuNJ9aZlSq3mVRt49m2Ft9Y5pTJGc5aS99YhlnowTFVrocgwYwajseA6TzKFFJucEsopNWKWABd6Zy5pSCHUtn0nk1jSaHSeo23J36MxmSYMnzYy/pkHzKuaDYrw8fbju2qwRjNtvN8sIl8up9xVrNtLK3W9I3DWy1TosXRcnJrbTo5dH52PTAv0xdFYQqVs9Zyf9VijCJlIRP/5OqIQlaWoGis4bz3bFvHkEAZxYfbnjFK0GnMhRgXSJ8xbL1m3RjmmCUfqspdu28MXllao0Rng7w2Wms2Vr/AoXnbel7f4bTikApzzqgivwNKKe6dyWN3TlNRnK+aJaQyv1bH83nThVpBac352mPUs0N7zpkh5tvg0O9CvUoA7LUiFrkZ+iLrpTuQ3V3d1V1z817LGLmDf3KYpWmoVfKYUuYwBq5HceYMU6Z4WPeOddswzpFaK40BvOXmmNiNiTlGtNZkVTlrHXNKhKoXUKAQdZ/ME31jGDIcRjguz0XxWcLwaZ30/J/hWbMjKpdn66bWIblT9ZmmpuZnKylnJRl803l0zQymYnTFKxbei+Wsd7ROMyWFt4mUJPG8swpnLYchoIpm2xVUyezGijWGBxvHnAqxJGzVbDtHKIpcM7YYrIJtJ9yg/ZSZcuGDlSeVzE+uJ66PgZQqrRXL9HbtaL2Eml724lQSuB7kWmiWAzbVwq9crri/ahlC5hDDcuBYLvuKN4pt24hN28pK6fQ6vmzZvbdpaZ3hySC5X3MUArHPlatpphbIVaFqZj9nnNZ4J41I1YqU6vLY4r4rFVaNo3PCUBpCErjeYrN31rBpHc5oShXdRlWS8XQ6LAFCEjdZY0VcbXShLW/nrHlZ35FyEX2OMRyyTIe8NUL9LQqtZA2rlzXqV3Efvbx+mWJmXizlqUhq97p13wl30KsEwIc5EXLhvPcvfO7brJfuQHZ39cted83Ney6tFLoK9M1q0UakItEJIVZKFTeIN6BL5clh4uooQDdjNCXNPB1mro4zQ4i01lCqwii5qxumTE4Zs7iecoFuTlDloLZFJi1vQ65/WVCckZWVRtZHZXE0iclcJi5dA21ZVlrqlKqd0M7Ra6EVK61ZNZpGW4wS0N7GOwyafq2Y5kKxmlIza+84b4X+++iY2K48F73FoNisGv43FL233Fs1xIXZEnKmt4ZcxS47hsQPu44xZ45TwWtJQn+8nwlZ4HP3Lh1nbcNZawkJsqo0RuMXvoxa1hy1wkXn6ZeJ0mkFIhwaQ0yFUAu+wGEuHGPGLTqqttYXGoSTpkQpsblXKo93I9djok4FQ6X1hnEWl9PFeXM7jei9IZ0aCS1rh7isqE4rCG0kZDU8t9o4NQslF7RRtxqb5yvlwmFOAt4zmlCEdAyf76x5ucE4rUTq8nVCLugFBFhrpRZoG/25YuS3qefXLye2kF2s0gZJE7fms+upbxv75XUC4FIqQxSI5cu6q89bL92B7O7ql73umpv3WDkX9rNk5IRQJQywVB7uA4dc+MF5g0azn8Wq/XA/UYriZo4YBY0Swa2QXjVDBFTFak2Ikd0oNOC4pHJrJLNpr6GTiB9aJC/qy1ZBkrwboARpYjoPUxCi7dqAd+LEmjLEDDeh0JaZbdfxwcaSimHba7y21JrAWLRKxJR5PEuuUK8dRlu8gx/da1n1Lfsh8tF5Q8lwmDNbpTnrHKEUlNX4rMAqdNI0XrOyFqUqNWtSLRzHgjWatXNULFobseAv1mxvLaFUrJUG1DrLB6sWZTQxSxxB5wydsyLARb2wApli4maIQis2wnppjeHe2oPRr9RGlFKZcsE6TU6FqYqDyiAAQ5RiyCImN8uBFHMRqzwi+m21pmhZKuUiK0oKXK4c687dTgFeFgh3zhBKfUGLUUrlGDJOy2G6T/IezbWSSsEvSdyvq5f1HaeVyM0gKeq9F2dUTIVNa9l09p1ND26DaRfUgtOSE1YKrBsR6z+/vvm2sl9eS4C2WlZTSRrEL7NeugPZ3dUva901N++xhpDYT4m+sZRa+MUush8DTw8zSoPTnsYa+mbFHG74dJZDpjPgneM4R+aUaKxk9PSNpTGKkjJjlhVRKaKdwciKaAJUgTovegpetHN/0YrIoRoX4THAqpHIhJBlMjRXcTytPESz5E1lGELEa88H6xavFVdTZMwKq8ISRJgZQhadB9CtFdZ4alFsGkPJGV01V0MQ7YmCUmQcbzeVahVzFO2R10suFzCkQjoGQhCUobcGlEJRWTuLU2p53TUpg7MKXeWuuWssTmtSrdQiCe2HmBlj4jBFto3Dt5ISvR+juJSWqVlrDTlXDlPiA+/A8JnD9ThHro8BrRB6dalsW6H2lllR1ZKDxTLtQ1Y4J6KzM7L6sqYsK4eMtYq1tawXoN6bVhJ6aXxOWow5i4OvtdKcWa3wVt9OczZNYtP5l98Wt/UqfYfWisbJdMYaw5k1eC0Ttzc1Sl+m2iWJfD8LSNEa+V6b5TV4fn3zPtkvX2Ua9CYBcNdYGvMs/+tuvXRXd/V2ddfcvKc6Qfyc1ShkhaABqiGUQslwMwS2rQOjGAK0znK5coSUUSjGmDBaMYSAAvncWvlkiLeNzZ4l1DI/Wz8ZpCl5XgD8ZUojDc3J3q0QDY5SwqzxCqoFnUHVZcKkCopKydKI7ELmrEu0bceFBj1GhpiJKbNpHRdrz/4407YNl+sGow1zQSIBgDFntKpc9I6+saQMpWZiqdRc8dqw8RpjFSEKebh1Qma+GiNDyGw7x9rLxOCYC26xT68aj9WK1ukFsFjZTwmUxAr4ReCbkmhHjnPiOCbub4oInZMclKe7/sYakioMKRNyvl0dPn+4jqEsaxuxmJWqbrUzetHDHKble58Szhl6p5lzuc0hM0bTLpOWrBRURUJ0G6cpxOtWEi83PlrJYTmnQmPk64P8kL0R/s7z8L1XVesE0DekLPlWRnNv3eCNFjH6e1yJKCXJ8Of5s6u4mMvt+uZ9sV/exTTo8wTAnbd037JV2l3d1be97pqb91SiMYDOaq6nwOPDTIgFpSrb1lNqYc6VT/eBVW9wBj7aOrwxfBIKxyGwnwLDlFFG7nqtgqfHiZCeNRwgDU3iWROTl///KhHxFymNNEqnOjmrQgBlJQvqybTYuT0Ym5mjTHG0gk2jMcpyjAU/ReqyW3FaowxkFK0yYDypiiX6vLV4o5nmylmrcVoxKJletF5jlKZrGsZQabzi47MWozVjrAwmopTCUtlPGWsUlSr260ZTMORUuL9t+d8v16waB0piDsZY6BvFupEgyJwqc5ZXL2ZZBZ53nush8ug480GtpOVOet1IDlYuoiuZ5sxuac60UqycWZxPBec0a23ZjwljNTYmro+BTe//3/buPUjvqj78+Puc870/z7O3bLJJIA0SiPjTqIgawVu1VFS01daRUQex09Z2xF6kWi9Y8VZhGHGYsVhH22Kno9JiwWmVoVIs4wWqlYulojgIiEoSCEn28ly+t3N+f5xnl02yCbvJXpLl85rJAM9+n92zJyHns+d8zufjk6QrS2y0H69T/WJ8iiw0DKXh48FJf8zGHPqK8FxHEnMFPm2t2DHeIzR+/DMLa7968+ESV6cX98L6ooNK+V205Tzqmb6VNtdR3PTxTdWv97PYtV8WazfoCbuSy/GSEAsiwc0SUUBZ1f4v/tIXNHPW0Ugi1g+lGBS7pzrc/8gUj076Y5yqLqlK3wSzWzoeGe/RLirWZAFhEJJbS7eqcP3zpunr2dPBzWz2wAEdgdk7QdM1cBL8rlCMvwZuq351ZN8NAqshMr52jVOauq54bApwmqFWRGwCtKtIo4Cy8kdKaeSPLSLjL5hrDY1YM9wI0CpgvFMw3qnRWjHSjBiKA9IQGqH/y98oQxZB2PM31Gzt82OMShmIDO3cUdeKnrKszUJGmz5BOAj0zA7b7J/oU6PpuorJjm+9EPR/mf5PzPs6BZ2y7vc68sc4qn+MM9Ur/XPOVzFOAl8leXZeRaB9Ib/2REG7svSKmjiq6OS+z9LagZgkDPzvs4I40DST0H9v/ToynaI+ql2I2YtlFgW0po/G3OMLq+7X3jlc4up+i3tkKCo/DwCNJDzk+xbbEwYHS1D7ZTF3gyQBWIjFJcHNEilqS1U7aqCZBLTikMcmC5RzjLZiage7Jrvk1jKUJbRCx0935jw03iOwDoe/aRJhyZ2D2hIGiiwMwPqGl/O9BXU0Zvebmq6BA373xhgYynzlVIe/Iq5rXwm5Vv1/uopu7mgmEa52uNoyWVTgFFEY+qOufrXagTRkMAsIjc8xebRdoahwKOLIUdY+KXtvaIi1ogy076gdWBKtiAOF0YZSKcLakleGKApRgWMgDcD64Gggi2f6FB0ymbN/pJLX9Uz+hlKKMDC+yJzRJKG/dl5a54/qlN8taMWGwGgi4xcsiz/yUor+4qpRSpFFfvF3jX7nZ+cDqyQMCWYVbStrR17VqLqfZ1NUTPRKBpOQYNZV5/nuQhyYH2KMZiiLmOxW/paY0TMFAxvxoTtQz17cA+3zn6ar6nbKmnVAFgfLsoMzn/YQi137ZSkqAcsOjRCLQ4KbJVBVlqmiIo0NiTN0y5qhLKRdlFjlcy2cdVjlGMoSRrKQqqp900zrGM9LlKtpJBFoTadbMTQUYpShLgt6lU8cPtJcmoUy+KrEAf46eNhPxmkGvhLxRO6vhec1dHp+N6lloBFpNIZeXTLVzRlMDBbFZGGpeyXrhmKGGwm9CpSrqRwMpYlv7lhbqspf9Q77zTPzoiINDDv2tomCgDELXV0ylVuKfv7L6ECMtlA530BzqlvSykIiHVE53zRSw8xiNv0TfVHbmVtQWvuKvo3I0MnrmVyW6cUw7hfqa8UBcWhpFxXj3QKjDY3E7xr0ygrrDJWriPt5ObHxwZi1vu+U1opWGpP0+y2V1jLVq9D64J2A8W7ZTyx25P38n6miYm1tGWrEvibPE+xCHC4/ZPbOR9n/2BMlrs5e3PNZOzhZZOiUNZO5/16Ws1Lw4YKDxa79IpWAhTh2SXCziKYXj3ZesbdTkPYXjcEkJBhpEBrFvk6JUg7tfJ+kWPtrzuOdAusUiorSVtjSEYSQ5zXt2pJ0CkIFuyagw+J08F6ILAIT+BtSofF5NZWD3Pq8ltBoAu2oK0fUz0LWRlErjdE1zsXEUeiPaYqSCecIwpBGGhFXlrr0RfCiWNHu1QwnEbV2THVKX33XgXKGStfsnSgYzXx/pXZpKUuH0RZtFfumCrCaKOrnPChH5aBdlGwYzBhuxNBPMPXHLuCsZV+79CX8+8dPodYMZxFpWLOnW9LOK199OFAzjRynE3vbvZK6cph+JeR9nYosZSZAmehWZLFhOIsIjA9MumU98+djOj/FOd/w88BNBA2+4q7xhfCmd1r2dUp2T+ZERhNFwRPuQjxRfshCj0VmAsPK15hxOIzSM4m9YaCPKll3sS320Y9UAhbi2CXBzSKaXjyUUqShobaOTlFD5Kv21s71c0IchbE4NJ2y8reprKXbq3hssvTHHA72TPrkYQtMkFNYeCxf/sDG4o+eIvxR1HTJfpQPcgIFaroZZABBCM4per0KE/hu2XGoSaMAo2Awi9DGMBAb1mQhU4WlTc5Er2LPeO5rocSGXlUTB9of7Rm/m6KdoqqhcI7S+V0Ypyxl/8grNIrhzJDGAUXlGEpijHa00pANQ5lvUjrryKCTVxSVbwtQw6zmi3rWgu9333Ac1Mixk1fsyyui0BD1bzqV/a7ihfGtDFz/qvj04hpqjVM+OJhdnG36qrc94KyxqC3UjlqrmfyO6UJ8e9o5e7o5a7WmkRy6hsx880MWciyitSI2ikc6OXs7BZHRdPKKwCiGsojogLk+cDwrlVuymEc/UglYiGOTBDeL5MDFwzl/rbiylnbu65H0Cn8NuVf7ZoqtSPPTbs6+dom1lm5VMNlz1P0WB/Ws6sLtnu8RtVxHUbNVQGFBVZBqaITQ6efZYB2lBWN8y80kAm00kfK9jTqlpVtWtHs5P989RWQUA1HIaBagdMB4r6aqwaAYyQwmMAykMY3IUJSOneNd8sq3dqgqx75uTrtXkpeJz+VwilYS0LW+Dk5eQVH5vJckU6RBQDMJqC37Hd0ooN0reaTf0DHu5/E04wDrQPWr7GqtaCShz505YDG21tEta5SDJPLBbBIFGF1TVo5OWRGHhoF+3sn0Ih8EmmYU0M59T6jpn/idhcHEf/0DX49Cfy07Dh5flK11REH/VpU6fPaV7e8KTRfrm/4eFqNTtELNVCE2WuH6TVrnOp45VgvpHSlJBBbi2CTBzSKZnX/gnP+LzlpLp6yY6JSERtGKA8a7Jft6vqdSu/B9kia6/piiyiuM85V+uxzcDmEldfE7N1EIaRRina+iHAQal/eLt6HIa4fW0ExDKjS1qgh0SBIFDGWRDyQif/soDPzCn1tHXirWNgLCKKRT1aSVRmtLJ699M8nCFzGrKt9ss1NU7JzIGUh80OHw+T85lj1df7V6JI7RylDWfhGt++X/G7Gh6FePts6RRYbaQbe0/QJ05qAFf66f9m2/Vk3UP+IxShFojQkVStdkcchQFs0kfc9e5A/1E38c+N2O2a+30oCs1uycymfyf9q9ksleTRJqGklIoOeuiAw+oMj7x6WPd5zWM3lER3NbKK8dA1lEEhmm8oqovyvULmoy58c+e7FfykJ6K0kSgYU4thy/f5scYw7sc9MtLUnk/2Jvd0ucg15ds6dT0atq9k7mTPZyCgeNOEAbRawdj+U939pgpb+hWQz9q9/a7yhN5iVBEPSvEBvS2Cfj9qoSVWqGmxHKKXq144TBBmXD4owmDTVoQ1nWBKGeaVrVCDXOwlSvJrJgtOLnXX8Nu5mE1ECvqAgDgyIgr6AsS3p5ibOWttE0IkWQxrQCjdOK2jry0pKEihqF6e8uJLHvnzTRb4sRW4N10/kxPqhQ/d/LJ1rwtVKYQBNaS145MBAZxd52idPQ7NeJmSsH43A/8aeRPuh15xwjtWVvu2SyLimqmiRUJP3ihHFgKOu5ryBP18RJA02vtL6/WW19U0tjFuW2UBAFaKVmGlfW1pFGfq6rfn8pYEkK6QkhxIEkuFkkh+pzU9cQBAaF6x9PVdSVZfdkl1/um+KxyarfhqBkolOxrw3FSn8zswT4wCY10EynWzooRrOIIPK1WJIQ4lBT9RSDoWJNI6JXOWyvJI0Ng2lIWTuUMjPVfk9qpT7/xWq0AqMs3QpSrYk0tCtHrSxDSUil/HFMp/ANBBt1TbfUFHWFVn6HrCw1QaoYbIQ0k5BmHNKrHVGkGGvEJJHBaH1QQTcb9POimN4R8i0wBqJwXrVikkBTVZo48LeM6v4RVxLqmevmh8vBONRP/Ae+rpRiuBETB4bJvGRf19HoBzbTn3uuI6bZx6VxGBKYx69r55VlMAkX6baQngnW8rr2jVWVYiKvZo6fAuWbdB749RbjaEwIIWaT4GYRzdXnJos1U4UiL63Pw8hrdox3eHhvm8luTbuXM5WXFBVMtf1NqGNJQr+2jU9vIVK+1s5QK0Y7mCqgcgplFa1A+WvOeUUUGwyKyU5FM40YaUTEIXR6hjTRoDXWKqq6YqpjqWyF0QETnYo48q0P/HGRo92t6JW+JUVR1yRGMxIF5FUAKJqpphmHDDci4jBkOItoZRHdoiaNfHLxTFsB9l+UpxfavLJ0+tezm/H8mzvOPl4KKttvtOkDjidqPbDQpFqlfP5PHPgWDAcmJM91xDR7d0Upv9MTBY468n2w4qPIdZnrtpCvEKzQyvUrKD9+/NQtLJXzzUzl6rQQYilJcLOI5upzA7Cnk/OLvT20Uij8T82TpaVTlXSKkvEu2H7Ty2NJiM+xCXV/d0ZDIzUMZylG+d2JJHZ084pH2zllBVXtMNSMENGIFDV+gW33CjplyNpmyGgzpMYQa81oK+RX+3L2tC1JCEGgSCN/hDU9f49NFUx2/G5A7RxVbFjbjMkaAY04pJXFVJUPElqxX6zrftJsHJiDFs39F2UfoGjtC9G14mBBlXWPJKH0aJNqD5WQPH38BcwcBc1Vi0VrRe0UJjj6gGKu3KG03wvLHFSvB+rCdwgH5Oq0EGLJSHCzyGb3ucnLisluwb52zqMTORrHvk7BRLtLNy8Zn+ixd8onENccW8FNjL8ZpR2sbcKagQY1miwwbGgZTBT7Uv1Au1vhlCYNFUnaX9gCQysKSCJDEmhKCwNZyElrmySBIQoM3bqmrhxrmhFRoIkCTSuLGM1ielXNVK/C4VjXCilq36vLGEdROjplSRZnrGnGDGcRnbKml/seUHld40pFFhiycO5F88BFWSlftG+xr/DOtTuzGEm1cwUVWeST2cd75X5BU2z8kd5S1GKZK7izztHtN+KcLegHO3GgfY0kuTothFgiEtwsgTjQdIuKh/a0eWSqJNZwwkDCjvE2v9zTZu9kQbdTsK8H7Xr/ppcrbboScSOEOAJrII5TBpKIkSwArWmlsc+XyUsmegVDDV9puEYR6JraapJQEeqATWsShpsxdQ1DjZBmGtMrLMNpwHivYOe+nCgIGMz8uddgGPhk19JSWYtzisEsJYt9byWFZl8nB61Y34ppJCFaG7IQAu3o1TUaxXDDMJJFh1w0pxflyFg6RUVR+5s/VV4taBflULswofZFBova3+Safj0yelGSaucKKvJq7qApizSN2CxpLZb9coT6SeFzVu412jcsBbk6LYRYMhLcLIG8sn5RU4oNrRgTaPZM9Jjs5rTzit2dgnZRUZbH1m6Nwf+ByGJoJjDYSBjJNJGJGM4iBpsRWmsCZWg1DOM4dnVLhoxm/VBCr3S+15NyRKHxDTHD0DeBDHwisl/kFe2iIq8dI82Q0CjGuxXdwrKn3aNSmsE4ZGMr4dFOQV5Z1jRikiRgol0ymEXUTjGQRESBobIW0Iw2Q0KjySJDK43mtWgWtb/ppBQY5XdaFrKLcuAuTFlbdk/mVHVN6XzF40ZkcMofg1XB4nanng4qDlekL68dg4kvRnikAcVC8oPmW7lXkoeFEEtFgptFNr3IOOUXgjg0OAc7Jzvc+0iHyXaPdl7QKcEuRuvuRaDwgY0C0gBaCTTTmDgKWNdKMZEh1sZXKQ4UcQQjWUQjDOhUlqLwAUIrDYktVGWFVj4xdziNSMOAqV5FUdbUVU3tHA+P91AWRpshCkUahQxm0CsMuH7ia6jIysDXqelXdp4qa4xTDKWGLH78j2/tHGlkaPZv/8xn12W6CF9V+75Ws2/1dEt8vs5hFvK5AoraOrp1TS+vGEojtNF0Cksj9m0T9m+guXhJtfNp4hgYveCA4kjzg6RyrxBiJUlws8hmFhmtKeuaqW7FVFFw364JHtnXIy8qpjrQOYbueyf4kjPg2yskccSGgYT1wykKTRj44xuHphFrhtKQ8V6NQbN5JOOhx7pMdEvSwJCFij1dRzMJGEwi1g7GDKYxylkmegU966/HN0JDbBRFBc1EM5AG1NbSKx3DWUAUGMJQk4YBnbxmX7dAK41RitjA2mZCGAYkoZ65CTWcRAQHLO6HYq2jqGra3ZLa+STd6aOcXukX8oEkPHx37QMCCmt9ocFIKzr4HQyjFJXyN7EGjW/xEGvl6+IsYg7MUjVxPNL8IKncK4RYSRLcLDJ/QwX2tQt6uWVPp+CXe6d4ePcUnTxnvFvTLaDrlr9QnwEyfPJy2f9nE59bo5V/IUlgIFaMDmYMZwm9uqYVG7IoQWuNUhAGmrKwZLFmKI1IQ8Mv93XoVJZKaxppwFM3NHjKmhZZEmG0T3QtUayJDEYrOrlvtDjeLYmNZjCLyeuaGn9jyeHbOwykEZrSV+aNDAOJIbeOMDSEWtErLQ2laSXBTA2bwy2ks3ci8qpmT7cgMZok8p21Q+M/R2EdHL6jwUEBha9K7fzn0b5vFUpRW0tlfbPULAnJooDA2EXd1ViKJo7z7Uf1ROOS4ychxHKT4GaRaa2wtWXPVEkzMVSV4qFHJ/jlZEm7V7OnDe0VGtuggTTqtykooawhDKGVQlVDqCAOApIoplP42jJB6G/hxHFAMw4pq4rxvGQwCUmNpkIzkMZsCXxPpLHBmNBokihEm8cL53UL33gyC4N+YrDy5fq1oqx9oKFQDKchReVA+TpBeWXRgWa4EZHFAaW11LXDaL+LYJ3v0zXXLaG5jk7224noN6DsFJbAlDSSkLrftTLQiidakw8MKDT+eMzWjkgr2qUlMj7Ydc4xlddksf/+U3NwFeKjtdhHQfM56pLARQhxLJLgZpFZ62/HZJHGGM3DVYduAXHgO2mvRGATACdkEEe+GWQcQVo7OoXv6p0EhjAOiWNNHISsHYgZyBLCEFIT0C0c2lhGhg11rdnXrpmyNclAQBrARM9S4ZNn0yQgVIqJvGCiVzLaikn7tWbiUFNYS6zU4wtxUVHUFmsdrcTvMCjli+m5/s5BFCrqCvZ2CpzDF9kLdL8rua8E3CnsEx6dHLgTYa1jII1oq9JfXy9rAuOvpCfhwfVx5jI7oCj7gUClLGWtaSpH0f+arTggjQNQjzeuXOxdjcU+Clqqoy4hhFhqEtwsMuscCkUri+jlFXllySLFxESHHctcfljhm12OpjA2HNPNS5zWxEqRVxVaOwbiAB2E1Mpia00cK4bThDXNiDjQjA0mGKMpHdTWkMWKDQM1u9slRWWpAo21loHYN8YMlWb3ZEHlanCKx5QiMYqhLERrzd6pgjDwN4gCoxlpxKxpOIzpV/TVijXNgMhorHMUlWW8V9KrLdZCKzZE/TYXcagZzgIK6+Z1dHLgToTWPsiqre+Y7Y9vfJ+r9BD1cQ6a4wMCCkVIp6h4ZConCDSRVkRGkYb+2Gw5djwWK2haiqMuIYRYDhLcLCJr+zkX2udc7C5KJvOaqszZNQn5Mo1D8XiScGJgTctg0NRK0UwCtNWkSpHhSIymZyHWhoHUcOJIxtrBfv0YYDCLaaUBiTG+UF5RM9SKyZKA2jqcVjOVaFtJyJ5OwURZop1iIDE0I0Nua8Z7NWMDIcNG0y5q9nVLf5uqX4vGuYPrnhj8zkyvsqwfSHEOyv4ca8NMVeFuZX2fqFnXlec6OplrJyIJfcNJB/22Ab655kKPcmYHFAdWqZ7+fsp+1d7jacdDbj0JIY5HEtwsggOvyxZVTVnVUFv2THT46SMdOktYpS/G79AU+N9QBUT9/JqBLGD9SIaymiAyjKQRxihwjnbpKKuSFoqBNGSgkbJxJOMpIxk9a7FOk8YGpTQoxVAWscfmtJIQB74nlnW0IgNK0ysr9rZLIu07fseh8cnLhaVUPkE3jUPiMCCv6pneSEr5nJm5WOeP+dIoQPWPdPwOiQ90VD+Be7JXYh2PH/koDjpaOtRORGQMg0lI3H/+aHckZlep9r2WOG53POTWkxDieCTBzSI48LqsVpCX/ibOI3uneGS8WrKGmAmQKNDGt0uoaqgVxAaGW747dmZCdKw5aSShkaVUzmEU7G3n7JkyDKUhzcT3VFo/EIHSlKVlbDBkXSulnVdM9moiU6OMr9cCirFWQM9a6Ad3nV6FxScDZ3FIIw580cJ2QRoZJnslKPpdsw154VtUWAdFv6P2gcnAB+62TO+QTO+CBEaDc0z1KqL+de68shSVJQn0QQvx4XYijrSB5Jy/L6tsx0NuPQkhjicS3Bylua7LBv2rzz/bNc7PH93L3iU4j2rij5xMBFngc0SyxICD3EIUGEZbEVkYcMq6FrWD9QMJg2nEjsmcHft6OKt8I8uBBGMUzTimlUQ0koh1gzGNOMI6aMS+JcJUWZFqjQOasSEODUFZM94pCbRmIA2prKVTWrLIH/f4InmONPAJ1u28xvVzX7qVpV1WlNbRDH1RvtqxXzLwE+V9AKAUA0lA5aCofbE6n3D8ePLutOXaiZAdDyGEWDkS3Byl2Umqzjk6ecnO8Q4//eVebvrhg/xwlz8uWkwpkEUwmILSisEkoJWl0N/pGMk0vQpGGgkb12ScMtpkvFdS1I4kNJyypoFyjj1tRRwGjA3FbF7TYE0jwhiNMYZmFJD3dx3K2tFIQtI4oBUZKju9e+N/oo9D/+95bRlMQ5LQN6Kc7FVY5xjKQlpJhNG+FsxjUzn083+cg0BBXjkCY0migAOTgQ+3C1Jb5wOwJNwvb0cpDpu8u1w7EbLjIYQQy0+Cm6M0+9ikrGoe3D3FQ49N8t8/28UPdj1hHbgFaQIDMdDPpxnOQpwKGM4CBrOYTmUxCrQ2RIFjoBkz2ohppCEbh1J2t3PGu5bMKNYOppw4nDLYiBgbyBjMYh8QFDVOQ+3Yb+eh7gcNA3FAUe9fgG5NMyYymk5R0SkCnHO0i5pebonjgDVZRBIFFLWjqi3dqmZNM6YRBUz2KpLQ+MrAlSUK3EHJwIfbBdFqdpPGx9sLHI/Ju0IIIRaHBDdHafrYZLJXsXOiw459Xf73Z4/wzR+NL1pgkwBrMhhtBugwIFWOVhYxkCZoHEFkGIhDKltTVv6GUWQUW0Yb/NqajA1DDbIoYLiZsHOiC/0cl2YUsKYZzyTrlrXF9K8vd0vL9DGQc75GTxLrwxagayYhQb/rtVY+aTkNDa0sQilFYh3tApo2ZDDxr2mtqO3+AY1zzBmYzLULIteVhRBCHEiCm0UQB5p9dcWDj0zyPw/s4r/u2cPeRfi8BhhUMDKkGGsljA1nDKcRm4ZTerVCGc1oYtg1VVBWlqkcokhx4lDKppGUk9a2GGmkM0dIURhw4kiTRmDI65q8coT9mi9lbWcCgiQ0aF0fNhl2rkBjvx2WOKARB3RL33og0L56r0HTiAMsEGqfgN0p6pmdltr64GYhgclqS94VQghxdObXZXCJXXXVVZx00kkkScL27dv5/ve/f9jnr732Wk477TSSJGHbtm3ccMMNyzTSufXKmj2dnIf3dvnZI1M8fJRNoxJ8ReFnrNO8aOsgL946xrnPOJEzT1nLqeuHGB1usX4wY/1AQquZsGEoZXQw4/9tHOQFp4zyoqeOcfK6QQLtgwjn3EzwkoWGJA4YSCNaiY9t88q3J599ayiNAgaTkKE09K0W+rs786H7t5iyOJhJ+p3+Gq00YCgNqWs/pjjQhEZR1w7df+9CA5OjHa8QQojVZcV3bv75n/+Ziy66iM9+9rNs376dK6+8knPOOYd7772XdevWHfT8rbfeypve9CYuvfRSXvOa1/ClL32J173uddxxxx084xnPWPbxW+vY0y54bLJgvFcx2Vt4+nAKNIxvizCUwYbhAU5ck3LiYIMNwxljgwkOTTev6JWWVsMX0PM7J4pQaUYbmjXNiEYSMtyIqawlL2usc+SVO2g3Yz63eY42GfZQX8M5h1J+Z6io3UxgEgV6phfVkZDkXSGEEADKHap62jLZvn07z3ve8/ibv/kbAKy1bNq0iT/5kz/hfe9730HPn3feebTbbb72ta/NvPaCF7yAZz/72Xz2s599wq83MTHB4OAg4+PjDAwMHPX4i7LmwUcneWhfhzseeIQ7HnyMH/6iR3ce720Bp4zAyHCToSxitJVwwkjGhsGMRhaShiEDccBgGvlbS1XNZF7i6Be904pYKzpFTRRoGklEMw5II5/Um1e+LYLu568ca/knsysKH2tjE0IIcWxZyPq9ojs3RVFw++238/73v3/mNa01Z599Nrfddtuc77ntttu46KKL9nvtnHPO4atf/eqcz+d5Tp4/XmhmYmLi6Ad+AKegsjVREPNrIw0e3tPj4TbMVZQ4BdY24KQ1EWectIZ1wy2UDhhIA8aaMVkSofC1ZUYasW9NADPJte28pJ3XaA3O+ltJU4XFaO0bSvZ3ZqabGwbmyHdClprstAghhFgKKxrc7N69m7quGRsb2+/1sbExfvKTn8z5np07d875/M6dO+d8/tJLL+UjH/nI4gx4DoHRNGO/yxKFMNxM2DyaUrgu4x1mdnCGFZw2pnnOqWNsGm1x8miLoSwhMIpAa78LE/hmkpFWZFEwkwg82+wbSbV1DAaGZmxw9Kv1sn9y8LEa2AghhBBLZcVzbpba+9///v12eiYmJti0adOifX6tFcONiPV5wqP7YoqqZsu6QcIgZG+vi61rRhsx2zaOcvpTRti8doCRLCaNAxQK1OO7MvM5opkrj0UpZnpbyW0hIYQQT3YrGtyMjo5ijGHXrl37vb5r1y7Wr18/53vWr1+/oOfjOCaO48UZ8CGkUcCmkQYaR+uxmKleyf87cQRUTTMKecpok/XDDbIwIAwOvZuykCOaA490pNS/EEII4a3oVfAoijjjjDO4+eabZ16z1nLzzTdz5plnzvmeM888c7/nAW666aZDPr8clFJkccjJ6wZ5wVNGOfPktZy1ZS2/vvUEXvzUDWzdMMxwIyHu90paKvoYz7ERQgghlsOKH0tddNFFXHDBBTz3uc/l+c9/PldeeSXtdpvf+73fA+Ctb30rJ5xwApdeeikAf/Znf8ZLX/pSrrjiCs4991yuueYafvCDH/C5z31uJb8NAIzRDDZiWmkkOyhCCCHEClnx4Oa8887j0Ucf5UMf+hA7d+7k2c9+NjfeeONM0vBDDz2E1o9vMJ111ll86Utf4oMf/CAf+MAHOPXUU/nqV7+6IjVuDkVuAQkhhBArZ8Xr3Cy3xa5zI4QQQoilt5D1+5hovyCEEEIIsVgkuBFCCCHEqiLBjRBCCCFWFQluhBBCCLGqSHAjhBBCiFVFghshhBBCrCoS3AghhBBiVZHgRgghhBCrigQ3QgghhFhVVrz9wnKbLsg8MTGxwiMRQgghxHxNr9vzaazwpAtuJicnAdi0adMKj0QIIYQQCzU5Ocng4OBhn3nS9Zay1vLwww/TarVQavGaW05MTLBp0yZ+8YtfSM+qJSZzvTxknpeHzPPykbleHks1z845Jicn2bhx434NtefypNu50Vpz4oknLtnnHxgYkP9plonM9fKQeV4eMs/LR+Z6eSzFPD/Rjs00SSgWQgghxKoiwY0QQgghVhUJbhZJHMdccsklxHG80kNZ9WSul4fM8/KQeV4+MtfL41iY5yddQrEQQgghVjfZuRFCCCHEqiLBjRBCCCFWFQluhBBCCLGqSHAjhBBCiFVFgpsFuOqqqzjppJNIkoTt27fz/e9//7DPX3vttZx22mkkScK2bdu44YYblmmkx7+FzPXnP/95XvziFzM8PMzw8DBnn332E/7eCG+hf6anXXPNNSileN3rXre0A1wlFjrP+/bt48ILL2TDhg3EcczWrVvl7495WOg8X3nllTz1qU8lTVM2bdrEu971Lnq93jKN9vj0rW99i9e+9rVs3LgRpRRf/epXn/A9t9xyC895znOI45hTTjmFL3zhC0s+TpyYl2uuucZFUeT+4R/+wf3oRz9yf/iHf+iGhobcrl275nz+u9/9rjPGuMsvv9zdc8897oMf/KALw9Ddfffdyzzy489C5/rNb36zu+qqq9ydd97pfvzjH7u3ve1tbnBw0P3yl79c5pEfXxY6z9MeeOABd8IJJ7gXv/jF7rd/+7eXZ7DHsYXOc57n7rnPfa579atf7b7zne+4Bx54wN1yyy3urrvuWuaRH18WOs9f/OIXXRzH7otf/KJ74IEH3H/8x3+4DRs2uHe9613LPPLjyw033OAuvvhid9111znAXX/99Yd9/v7773dZlrmLLrrI3XPPPe7Tn/60M8a4G2+8cUnHKcHNPD3/+c93F1544cx/13XtNm7c6C699NI5n3/jG9/ozj333P1e2759u/ujP/qjJR3narDQuT5QVVWu1Wq5f/zHf1yqIa4KRzLPVVW5s846y/3d3/2du+CCCyS4mYeFzvPf/u3fupNPPtkVRbFcQ1wVFjrPF154oXv5y1++32sXXXSRe+ELX7ik41xN5hPc/OVf/qV7+tOfvt9r5513njvnnHOWcGTOybHUPBRFwe23387ZZ58985rWmrPPPpvbbrttzvfcdttt+z0PcM455xzyeeEdyVwfqNPpUJYlIyMjSzXM496RzvNHP/pR1q1bx+///u8vxzCPe0cyz//2b//GmWeeyYUXXsjY2BjPeMYz+MQnPkFd18s17OPOkczzWWedxe233z5zdHX//fdzww038OpXv3pZxvxksVJr4ZOuceaR2L17N3VdMzY2tt/rY2Nj/OQnP5nzPTt37pzz+Z07dy7ZOFeDI5nrA733ve9l48aNB/0PJR53JPP8ne98h7//+7/nrrvuWoYRrg5HMs/3338/3/zmN3nLW97CDTfcwH333cc73vEOyrLkkksuWY5hH3eOZJ7f/OY3s3v3bl70ohfhnKOqKv74j/+YD3zgA8sx5CeNQ62FExMTdLtd0jRdkq8rOzdiVbnsssu45ppruP7660mSZKWHs2pMTk5y/vnn8/nPf57R0dGVHs6qZq1l3bp1fO5zn+OMM87gvPPO4+KLL+azn/3sSg9tVbnlllv4xCc+wWc+8xnuuOMOrrvuOr7+9a/zsY99bKWHJhaB7NzMw+joKMYYdu3atd/ru3btYv369XO+Z/369Qt6XnhHMtfTPvnJT3LZZZfxn//5nzzzmc9cymEe9xY6zz/72c948MEHee1rXzvzmrUWgCAIuPfee9myZcvSDvo4dCR/njds2EAYhhhjZl572tOexs6dOymKgiiKlnTMx6Mjmee/+qu/4vzzz+cP/uAPANi2bRvtdpu3v/3tXHzxxWgtP/svhkOthQMDA0u2awOyczMvURRxxhlncPPNN8+8Zq3l5ptv5swzz5zzPWeeeeZ+zwPcdNNNh3xeeEcy1wCXX345H/vYx7jxxht57nOfuxxDPa4tdJ5PO+007r77bu66666ZX7/1W7/Fy172Mu666y42bdq0nMM/bhzJn+cXvvCF3HfffTPBI8BPf/pTNmzYIIHNIRzJPHc6nYMCmOmA0knLxUWzYmvhkqYrryLXXHONi+PYfeELX3D33HOPe/vb3+6Ghobczp07nXPOnX/++e5973vfzPPf/e53XRAE7pOf/KT78Y9/7C655BK5Cj5PC53ryy67zEVR5L7yla+4HTt2zPyanJxcqW/huLDQeT6Q3Jaan4XO80MPPeRarZZ75zvf6e699173ta99za1bt859/OMfX6lv4biw0Hm+5JJLXKvVcl/+8pfd/fff777xjW+4LVu2uDe+8Y0r9S0cFyYnJ92dd97p7rzzTge4T33qU+7OO+90P//5z51zzr3vfe9z559//szz01fB3/Oe97gf//jH7qqrrpKr4MeaT3/60+7Xfu3XXBRF7vnPf7777//+75mPvfSlL3UXXHDBfs//y7/8i9u6dauLosg9/elPd1//+teXecTHr4XM9ebNmx1w0K9LLrlk+Qd+nFnon+nZJLiZv4XO86233uq2b9/u4jh2J598svvrv/5rV1XVMo/6+LOQeS7L0n34wx92W7ZscUmSuE2bNrl3vOMdbu/evcs/8OPIf/3Xf8359+303F5wwQXupS996UHvefazn+2iKHInn3yyu/rqq5d8nMo52X8TQgghxOohOTdCCCGEWFUkuBFCCCHEqiLBjRBCCCFWFQluhBBCCLGqSHAjhBBCiFVFghshhBBCrCoS3AghhBBiVZHgRghx3Pr1X/91/vzP/3ylhyGEOMZIcCOEOG5dd911i9bF+ZZbbkEpNfNrbGyM3/3d3+X++++feeakk06a+Xij0eA5z3kO11577aJ8fSHE4pHgRghx3BoZGaHVai3q57z33nt5+OGHufbaa/nRj37Ea1/7Wuq6nvn4Rz/6UXbs2MGdd97J8573PM477zxuvfXWRR2DEOLoSHAjhFhyX/nKV9i2bRtpmrJmzRrOPvts2u32nMdKr3vd63jb294289+f+cxnOPXUU0mShLGxMd7whjfMfOzA9+d5zrvf/W5OOOEEGo0G27dv55ZbblnQWNetW8eGDRt4yUtewoc+9CHuuece7rvvvpmPt1ot1q9fz9atW7nqqqtI05R///d/X9DXEEIsrWClByCEWN127NjBm970Ji6//HJe//rXMzk5ybe//W3m09buBz/4AX/6p3/KP/3TP3HWWWexZ88evv3tbx/y+Xe+853cc889XHPNNWzcuJHrr7+eV77yldx9992ceuqpCx57mqYAFEUx58eDICAMw0N+XAixMiS4EUIsqR07dlBVFb/zO7/D5s2bAdi2bdu83vvQQw/RaDR4zWteQ6vVYvPmzZx++umHfPbqq6/moYceYuPGjQC8+93v5sYbb+Tqq6/mE5/4xILH/clPfpITTjiBpz71qQd9vCgKrrjiCsbHx3n5y1++oM8thFhaEtwIIZbUs571LH7jN36Dbdu2cc455/CKV7yCN7zhDQwPDz/he3/zN3+TzZs3c/LJJ/PKV76SV77ylbz+9a8ny7KDnr377rup65qtW7fu93qe56xZs2be4z3xxBNxztHpdHjWs57Fv/7rvxJF0czH3/ve9/LBD36QXq9Hs9nksssu49xzz5335xdCLD0JboQQS8oYw0033cStt97KN77xDT796U9z8cUX873vfQ+t9UHHU2VZzvx7q9Xijjvu4JZbbuEb3/gGH/rQh/jwhz/M//zP/zA0NLTf+6ampjDGcPvtt2OM2e9jzWZz3uP99re/zcDAAOvWrZszWfk973kPb3vb22g2m4yNjaGUmvfnFkIsD0koFkIsOaUUL3zhC/nIRz7CnXfeSRRFXH/99axdu5YdO3bMPFfXNf/3f/+333uDIODss8/m8ssv53//93958MEH+eY3v3nQ1zj99NOp65pHHnmEU045Zb9f69evn/dYn/KUp7Bly5ZD3sIaHR2d+ZwS2AhxbJKdGyHEkvre977HzTffzCte8QrWrVvH9773PR599FGe9rSn0Wg0uOiii/j617/Oli1b+NSnPsW+fftm3vu1r32N+++/n5e85CUMDw9zww03YK2dMwdm69atvOUtb+Gtb30rV1xxBaeffjqPPvooN998M8985jPl6EiIJxEJboQQS2pgYIBvfetbXHnllUxMTLB582auuOIKXvWqV1GWJT/84Q9561vfShAEvOtd7+JlL3vZzHuHhoa47rrr+PCHP0yv1+PUU0/ly1/+Mk9/+tPn/FpXX301H//4x/mLv/gLfvWrXzE6OsoLXvACXvOa1yzXtyuEOAYoN5/7mEIIIYQQxwnJuRFCCCHEqiLBjRDiSeFVr3oVzWZzzl8LrYEjhDi2ybGUEOJJ4Ve/+hXdbnfOj42MjDAyMrLMIxJCLBUJboQQQgixqsixlBBCCCFWFQluhBBCCLGqSHAjhBBCiFVFghshhBBCrCoS3AghhBBiVZHgRgghhBCrigQ3QgghhFhVJLgRQgghxKry/wFTgEOM42+e8AAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "finngen_matching=finngen_pics_fm.withColumnRenamed(\"top_PP\", \"pics_PP\").join(finngen_susie_fm.withColumnRenamed(\"top_PP\", \"susie_PP\"), on=[\"studyId\", \"studyLocusId\"], how=\"inner\")\n", + "finngen_matching.select(\"pics_PP\", \"susie_PP\").toPandas().plot.scatter(x=\"susie_PP\", y=\"pics_PP\", alpha=0.05, title=\"finngen_pics vs finngen_susie CS\")\n", + "print(\"correlation coef: \", finngen_matching.stat.corr(\"pics_PP\", \"susie_PP\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of unique eQTLcat studies: 1801315\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of unqiue eQTLcat tissues: 76\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Ingested 2055350 Credible sets from 1801315 eQTL catalog studies\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Summary of eQTL catalog sample sizes: Mean: 336.1455965527037 L.quart: 190.0 Median: 322.0 U.quart: 483.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of eQTL catalog studies with at least one CS: 1801315\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of CS with top SNP PP > 0.9: 386227\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 146:===============================================> (32 + 5) / 37]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Summary of eQTL credible set sizes: L.quart: 3.0 Median: 10.0 U.quart: 27.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "eqtl_index_path=f\"{release_path}/{release_ver}/study_index/eqtl_catalogue\"\n", + "# eQTLcat:\n", + "# Number of studies\n", + "eqtl_index=session.spark.read.parquet(eqtl_index_path, recursiveFileLookup=True)\n", + "print(\"Number of unique eQTLcat studies: \", eqtl_index.select(f.col(\"studyId\")).distinct().count())\n", + "# Number of tissues, list of tissues\n", + "print(\"Number of unqiue eQTLcat tissues: \", eqtl_index.select(f.col(\"tissueFromSourceId\")).distinct().count())\n", + "#eqtl_index.select(f.col(\"tissueFromSourceId\")).distinct().show(truncate=False)\n", + "\n", + "# Credible_set. Please use Daniels’ notebook as a reference. For each subfolder:\n", + "# eqtl catalog susie:\n", + "eqtlcat_susie_path=f\"{release_path}/{release_ver}/credible_set/eqtl_catalogue_susie\"\n", + "# Number of CSs.\n", + "eqtlcat_susie=session.spark.read.parquet(eqtlcat_susie_path, recursiveFileLookup=True)\n", + "\n", + "\n", + "# Number of CSs, studies.\n", + "print(\"Ingested \", eqtlcat_susie.select(\"studyId\", \"region\", \"credibleSetIndex\").distinct().count(), \" Credible sets from\", eqtl_index.select(f.col(\"studyId\")).distinct().count(), \"eQTL catalog studies\")\n", + "sample_size_quartiles = eqtl_index.stat.approxQuantile(\"nSamples\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of eQTL catalog sample sizes: Mean: \", eqtl_index.select(f.mean(eqtl_index[\"nSamples\"])).collect()[0][0], \"L.quart: \", sample_size_quartiles[0], \"Median: \", sample_size_quartiles[1], \"U.quart: \", sample_size_quartiles[2])\n", + "# Number of unique studyids with at leas one CS.\n", + "print(\"Number of eQTL catalog studies with at least one CS: \", eqtlcat_susie.select(\"studyId\").distinct().count())\n", + "# Number of CSs with at leas one SNP with PIP>0.9\n", + "print(\"Number of CS with top SNP PP > 0.9: \", eqtlcat_susie.select(\"studyId\", \"region\", \"credibleSetIndex\", \"locus.posteriorProbability\").withColumn(\"top_PP\", f.col(\"posteriorProbability\").getItem(0)).filter(f.col(\"top_PP\") > 0.9).count())\n", + "# The descriptive summary of 99% CS size and histogram/density plot\n", + "\n", + "credset_size_quartiles = eqtlcat_susie.select(\"studyId\", \"region\", \"credibleSetIndex\", \"locus.posteriorProbability\").withColumn(\"credset_size\", f.size(f.col(\"posteriorProbability\"))).stat.approxQuantile(\"credset_size\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of eQTL credible set sizes: L.quart: \", credset_size_quartiles[0], \"Median: \", credset_size_quartiles[1], \"U.quart: \", credset_size_quartiles[2])\n", + "\n", + "# Out of mem error:\n", + "#eqtlcat_susie.select(\"studyId\", \"region\", \"credibleSetIndex\", \"locus.posteriorProbability\").withColumn(\"top_PP\", f.col(\"posteriorProbability\").getItem(0)).withColumn(\"credset_size\", f.size(f.col(\"posteriorProbability\"))).toPandas().plot.scatter(x=\"credset_size\", y=\"top_PP\", xlim=[0, 500], alpha=0.05, label=\"finngen susie CSs\", title=\"finngen susie credsets\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of unique gwascat studies: 79858\n", + "Number of unique SUMSTATS gwascat studies: 18435\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of unique gwas catalog sumstats CSs: 247782 in 9679 studies.\n", + "Summary of SUMSTATS gwas sample sizes: L.quart: 88329.0 Median: 357580.0 U.quart: 445573.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of SUMSTATS CS with top SNP PP > 0.9: 77721\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Summary of SUMSTATS gwascat pics credset sizes: Mean: 39.7659733230078 L.quart: 1.0 Median: 8.0 U.quart: 35.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of unique gwas catalog curated CSs: 531198 in 35662 studies.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of CURATED CS with top SNP PP > 0.9: 92000\n", + "Summary of CURATED gwas sample sizes: L.quart: 687.0 Median: 4960.0 U.quart: 21282.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Summary of CURATED gwascat pics credset sizes: Mean: 35.42119007174911 L.quart: 1.0 Median: 8.0 U.quart: 34.0\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAADywElEQVR4nOzdd5ydVZ348c8552m3TElPKBLAIE0BUfjRdYkiQmxbsCzNVVdFF8WC/FBAdgFdBbuyq4i61h8soCtYAEUBaQJZC006SBLSpt3ylHPO749n5pJJY5JMMpPk+345hnnmufeee5O59/uc8z3fr/Lee4QQQgghthF6ogcghBBCCDGeJLgRQgghxDZFghshhBBCbFMkuBFCCCHENkWCGyGEEEJsUyS4EUIIIcQ2RYIbIYQQQmxTJLgRQgghxDZFghshhBBCbFMkuBFCCCHENkWCGyHEGp555hnOO+88Fi5cONFD2SzG4/ldd911nHfeeeM2JgClVOdLa80OO+zAq1/9am666aZR582dO5fjjz9+jdu3220+97nPcfDBB9PT00OSJOyxxx68733v46GHHhp17i233MKxxx7LjjvuSJIkvOAFL2DBggV8//vfH/N4r776ao499limT59OFEXssMMO/MM//AO/+tWvRp33+OOPc+qpp7L77ruTJAmzZ8/myCOP5Nxzzx37iyPEBlDSW0oIsbrf//73vPzlL+fyyy/nlFNOmejhjLvxeH7ve9/7+MpXvsJ4voUqpXjVq17FSSedhPeexx57jK9+9as8++yzXHvttRx77LFAGdzsu+++/PSnP+3cdtmyZbzmNa/h7rvv5vjjj2f+/PnU63UefPBBfvjDH7J48WKyLAPgiiuu4IQTTmD//ffnzW9+M1OmTOGxxx7jt7/9LWEY8utf/3q94/Te8/a3v51vfetbHHDAAfzd3/0ds2fPZtGiRVx99dXcfffd3HrrrRx66KE8/PDDvPzlL6dSqfD2t7+duXPnsmjRIu655x5+9rOf0W63x+31E2JEMNEDEEII8Zw99tiDf/zHf+x8/8Y3vpGXvOQlfP7zn+8EN2tzyimncO+993LllVfyt3/7t6N+9q//+q+cffbZne/PO+889t57b26//XaiKBp17rPPPvu8Y7z44ov51re+xQc+8AEuueQSlFKdn5199tn813/9F0FQfrx87nOfY2hoiIULF7LLLrts8GMJsVG8EGK9fv3rX/sDDzzQx3Hsd9ttN3/ppZf6c88916/66/PGN77RH3DAAaNud/zxx3vA//jHP+4cu/322z3gr7vuOu+998uXL/cf+tCH/L777utrtZrv6uryr3nNa/zChQvXGMcXv/hFv/fee/tKpeJ7e3v9gQce6L/3ve+NOufpp5/2b3/72/2cOXN8FEV+7ty5/t3vfrdP03TMj/frX//aA2t8XX755et8jQYGBvzpp5/ud9llFx9FkZ8xY4afP3++v/vuuzvn7LLLLv7kk09e47ZHHXWUP+qoo9Z4/B/96Ef+vPPO8zvssIOv1+v+b//2b31fX59vt9v+9NNP9zNmzPC1Ws2fcsopvt1uj7rPX/7yl/6www7zPT09vlar+T322MOfddZZY3p+v/3tb/3f/d3f+Z133tlHUeR32mkn/4EPfMA3m83O/Z988slrvY8RP/jBD/xLX/pSX6/XfVdXl99333395z//+XW+fiMAf9ppp61xfPr06X7evHmjXsvjjjuu8/3Iv6t3vvOdz/sY3nsfx7E/5ZRTxnTu6prNpp86darfc889fVEUz3v+Mccc4+fOnbtRjyXExpKZGyHW49577+U1r3kNc+bM4ZOf/CTWWs4//3xmzJgx6rwjjjiCH//4xwwMDNDd3Y33nltvvRWtNTfffDOve93rALj55pvRWnPYYYcB8Oijj3LNNdfw93//9+y6664sWbKE//iP/+Coo47ivvvuY4cddgDg61//Ov/yL//C3/3d33H66afTbrf5wx/+wB133MFb3/pWoMwjOeigg+jr6+Nd73oXe+65J3/961+58soraTabRFE0psfba6+9OP/88znnnHN417vexRFHHAHAoYceus7X6d3vfjdXXnkl73vf+9h7771Zvnw5t9xyC/fffz8vfelLN+q1v+iii6hUKnzsYx/j4Ycf5ktf+hJhGKK1ZuXKlZx33nncfvvtfOtb32LXXXflnHPOAeDPf/4zxx9/PC95yUs4//zzieOYhx9+mFtvvRXgeZ/fFVdcQbPZ5D3veQ/Tpk3jzjvv5Etf+hJPP/00V1xxBQD//M//zDPPPMP111/Pf/3Xf40a9/XXX89b3vIWjj76aD796U8DcP/993Prrbdy+umnb/DrsHLlSlauXMkLX/jCdZ7zk5/8BIATTzxxTPe5yy67cOONN/L000+z0047bdB4brnlFlasWMEHPvABjDFjeqwbbriBX/3qV/zN3/zNBj2WEBttoqMrISazBQsW+Gq16v/61792jv3lL3/xQRCMulK/6667Rs3I/OEPf/CA//u//3t/8MEHd8573eteN2qGp91ue2vtqMd87LHHfBzH/vzzz+8ce/3rX+/32Wef9Y71pJNO8lprf9ddd63xM+fcBj3eyPNZ32zNqnp6etY647CqDZ252XfffX2WZZ3jb3nLW7xSyh977LGjbn/IIYf4XXbZpfP95z73OQ/4pUuXrnMs63t+q87QjLjooou8Uso/8cQTnWOnnXaaX9tb6Omnn+67u7vHNKuxOsD/0z/9k1+6dKl/9tln/R133OGPPvpoD/iLL764c97qMzdvfOMbPeBXrlw5pse57LLLPOCjKPKvfOUr/Sc+8Ql/8803r/FvY22+8IUveMBfffXVY3qsP/3pT75SqXjA77///v7000/311xzjW80GmO6vRAbQ3ZLCbEO1lpuuOEG3vCGN3RmUABe+MIXrpH7cMABB1Cv1/ntb38LlDM0O+20EyeddBL33HMPzWYT7z233HJLZ6YAII5jtNadx1u+fDn1ep0XvehF3HPPPZ3zent7efrpp7nrrrvWOlbnHNdccw0LFizgZS972Ro/H8mJGOvjbaje3l7uuOMOnnnmmY2+j9WddNJJhGHY+f7ggw/uJLKu6uCDD+app56iKIrOWAB+/OMf45zb4MetVCqd/240GixbtoxDDz0U7z333nvv896+t7eXRqPB9ddfv8GPDXDZZZcxY8YMZs6cycEHH8ytt97KGWecwQc+8IF13mZgYACArq6uMT3G29/+dn7+85/zile8gltuuYV//dd/5YgjjmDevHn87ne/W+9tN/Sx9tlnHxYuXMg//uM/8vjjj/OFL3yBN7zhDcyaNYuvf/3rY7oPITaUBDdCrMOzzz5Lq9Va63LA6seMMRxyyCHcfPPNQBncHHHEERx++OFYa7n99tu57777WLFixajgxjnH5z73OebNm0ccx0yfPp0ZM2bwhz/8gf7+/s55Z555JvV6nYMOOoh58+Zx2mmndZZZAJYuXcrAwAD77rvvep/TWB9vQ/37v/87f/rTn9h555056KCDOO+883j00Uc3+v4AXvCCF4z6vqenB4Cdd955jePOuc74TzjhBA477DDe8Y53MGvWLN785jfz//7f/xtzoPPkk09yyimnMHXqVOr1OjNmzOCoo44CGNNr9N73vpc99tiDY489lp122qkTSIzV61//eq6//npuuOEG7rjjDpYtW8bFF1/cCUrXpru7G4DBwcExP84xxxzDL37xC/r6+vjtb3/LaaedxhNPPMHxxx+/3kTfjXmsPfbYg//6r/9i2bJl/OEPf+DCCy8kCALe9a53ccMNN4z5foQYKwluhBgnhx9+OHfddRftdrsT3PT29rLvvvty8803dwKfVYObCy+8kDPOOIMjjzyS7373u/ziF7/g+uuvZ5999hn1YbzXXnt1tvQefvjh/Pd//zeHH374BtcJGevjbah/+Id/4NFHH+VLX/oSO+ywA5/5zGfYZ599+NnPftY5Z9UdNauy1q71+LryOdZ13A9vya5UKvz2t7/lhhtu4MQTT+QPf/gDJ5xwAq961avW+VirjuVVr3oV1157LWeeeSbXXHMN119/Pd/61rcAxvQazZw5k4ULF/KTn/yE173udfz617/m2GOP5eSTT37e2wLstNNOzJ8/n6OPPpqDDjqIWq32vLfZc889AfjjH/84psdYVbVa5YgjjuDLX/4yH//4x1m5cuWov7fxfCxjDC9+8Ys566yzuPrqqwH43ve+t8H3I8TzkeBGiHWYOXMmSZLw8MMPr/GztR074ogjyLKMH/zgB/z1r3/tBDFHHnlkJ7jZY489mDVrVuc2V155Ja985Su57LLLePOb38yrX/1q5s+fT19f3xr3X6vVOOGEE7j88st58sknOe6447jgggtot9vMmDGD7u5u/vSnP633OY318dYViKzPnDlzeO9738s111zDY489xrRp07jgggs6P58yZcpan9cTTzyxwY/1fLTWHH300VxyySXcd999XHDBBfzqV7/q1G9Z1/P74x//yEMPPcTFF1/MmWeeyetf/3rmz58/allyxPpeoyiKWLBgAV/96ld55JFH+Od//me+853vrPXfzXhYsGABAN/97nc36X5GljQXLVq0znMOP/xwpkyZwg9+8IPnDRY39bGE2FgS3AixDsYY5s+fzzXXXDMql+Thhx9e65XtwQcfTBiGfPrTn2bq1Knss88+QBn03H777fzmN78ZNWsz8hh+tSJwV1xxBX/9619HHVu+fPmo76MoYu+998Z7T57naK15wxvewP/8z//w+9//fo2xjTzGWB9vZLZgbcHI6qy1ayzXzJw5kx122IE0TTvHdt99d26//fZOITmAn/70pzz11FPP+xgbYsWKFWsc23///QE641nX8xuZFVr1NfLe84UvfGGN+1zXfaz+d6W15iUvecmoxx9vhxxyCK95zWv4xje+wTXXXLPGz7Ms48Mf/nDn+xtvvHGt93PdddcB8KIXvWidj1WtVjnzzDO5//77OfPMM9daxPC73/0ud955J1Au0eZ5vlGPJcTGkq3gQqzHeeedxy9/+UsOO+ww3vOe92Ct5ctf/jL77rvvGqX7q9UqBx54ILfffjsLFizoXNkfeeSRNBoNGo3GGsHN8ccfz/nnn8+pp57KoYceyh//+Ee+973vsdtuu40679WvfjWzZ8/msMMOY9asWdx///18+ctf5rjjjuskdl544YX88pe/5KijjuJd73oXe+21F4sWLeKKK67glltuobe3d8yPt/vuu9Pb28ull15KV1cXtVqNgw8+mF133XWN12hwcJCddtqJv/u7v2O//fajXq9zww03cNddd3HxxRd3znvHO97BlVdeyWte8xr+4R/+gUceeYTvfve77L777hv997M2559/Pr/97W857rjj2GWXXXj22Wf56le/yk477cThhx++3ue35557svvuu/PhD3+Yv/71r3R3d/Pf//3frFy5co3HOfDAAwH4l3/5F4455hiMMbz5zW/mHe94BytWrOBv/uZv2GmnnXjiiSf40pe+xP77789ee+01rs91Vd/5znd49atfzZve9CYWLFjA0UcfTa1W4y9/+Qs//OEPWbRoEZ/97GeBMq9n1113ZcGCBey+++40Gg1uuOEG/ud//oeXv/zlnZmgdfnIRz7Cn//8Zy6++GJ+/etfdyoUL168mGuuuYY777yzk5j86U9/mrvvvps3velNnSDvnnvu4Tvf+Q5Tp05db6K0EBttgnZpCbHVuPHGG/0BBxzgoyjyu+++u//GN77hP/ShD/kkSdY49yMf+YgH/Kc//elRx1/4whd6wD/yyCOjjrfbbf+hD33Iz5kzx1cqFX/YYYf52267bY3t0f/xH//hjzzySD9t2jQfx7Hffffd/Uc+8hHf398/6v6eeOIJf9JJJ/kZM2Z0ig6edtppnSJ+Y308773/8Y9/7Pfee+/Otvd1bQtP09R/5CMf8fvtt5/v6urytVrN77fffv6rX/3qGudefPHFfscdd/RxHPvDDjvM//73v1/nVvArrrhi1G0vv/xyD6yx1X2koOLI1u8bb7zRv/71r/c77LCDj6LI77DDDv4tb3mLf+ihh8b0/O677z4/f/58X6/X/fTp0/073/lO/7//+79rvAZFUfj3v//9fsaMGV4p1dkWfuWVV/pXv/rVfubMmT6KIv+CF7zA//M//7NftGjRWl+/VbGOIn6rW30r+Ihms+k/+9nP+pe//OW+Xq/7KIr8vHnz/Pvf/37/8MMPd877wQ9+4N/85jf73Xff3VcqFZ8kid9777392Wef7QcGBp738UeMPNepU6f6IAj8nDlz/AknnOBvuummzjm33nqrP+200/y+++7re3p6fBiG/gUveIE/5ZRT1vh9EGK8SG8pITbCG97wBv785z/zl7/8ZaKHIoQQYjWScyPE82i1WqO+/8tf/sJ1113HK17xiokZkBBCiPWSmRshnsecOXM45ZRT2G233XjiiSf42te+Rpqm3HvvvcybN2+ihyeEEGI1klAsxPN4zWteww9+8AMWL15MHMcccsghXHjhhRLYCCHEJCUzN0IIIYTYpkjOjRBCCCG2KRLcCCGEEGKbst3l3DjneOaZZ+jq6tqoEvNCCCGE2PK89wwODrLDDjust5EsbIfBzTPPPLNGV2EhhBBCbB2eeuopdtppp/Wes90FNyOl6p966im6u7sneDRCCCGEGIuBgQF23nnnzuf4+mx3wc3IUlR3d7cEN0IIIcRWZiwpJZJQLIQQQohtigQ3QgghhNimSHAjhBBCiG3KdpdzI4QQANZa8jyf6GEIIVYRRdHzbvMeCwluhBDbFe89ixcvpq+vb6KHIoRYjdaaXXfdlSiKNul+JLgRQmxXRgKbmTNnUq1WpZinEJPESJHdRYsW8YIXvGCTfjcluBFCbDestZ3AZtq0aRM9HCHEambMmMEzzzxDURSEYbjR9yMJxUKI7cZIjk21Wp3gkQgh1mZkOcpau0n3I8GNEGK7I0tRQkxO4/W7KcGNEEIIIbYpExrc/Pa3v2XBggXssMMOKKW45pprnvc2N910Ey996UuJ45gXvvCFfOtb39rs4xyruR+7tvMlhBBCiIkxocFNo9Fgv/324ytf+cqYzn/sscc47rjjeOUrX8nChQv5wAc+wDve8Q5+8YtfbOaRrt/aAhoJcoQQYu3OO+889t9//4kexgZ7/PHHUUqxcOHCDb7tWC/g12fu3LkopVBKUavVeOlLX8oVV1zR+fnaXteBgQHOPvts9txzT5IkYfbs2cyfP5+rrroK7z1Qfra+9a1vZYcddiBJEnbaaSde//rX88ADD6x3PIsXL+b9738/u+22G3Ecs/POO7NgwQJuvPHGzjn/+7//y+te9zpmzpxJkiTMnTuXE044gWeffXaTXovnM6G7pY499liOPfbYMZ9/6aWXsuuuu3LxxRcDsNdee3HLLbfwuc99jmOOOWZzDVMIIYSYFM4//3ze+c53MjAwwMUXX8wJJ5zAjjvuyKGHHrrGuX19fRx++OH09/fzb//2b7z85S8nCAJ+85vf8NGPfpS/+Zu/oVar8apXvYoXvehFXHXVVcyZM4enn36an/3sZ+utBfX4449z2GGH0dvby2c+8xle/OIXk+c5v/jFLzjttNN44IEHWLp0KUcffTTHH388v/jFL+jt7eXxxx/nJz/5CY1GYzO+SoCfJAB/9dVXr/ecI444wp9++umjjn3zm9/03d3d67xNu932/f39na+nnnrKA76/v38cRu39Lmf+9Hm/hBCTQ6vV8vfdd59vtVqbfF/WOp8X1lvrxmFk6zcwMODf+ta3+mq16mfPnu0vueQSf9RRR3XeD7/0pS/5ffbZp3P+1Vdf7QH/ta99rXPs6KOP9meffbb33vuHH37Yv+51r/MzZ870tVrNv+xlL/PXX3/9qMf8yle+4l/4whf6OI79zJkz/d/+7d92fmat9Z/+9Kf97rvv7qMo8jvvvLP/t3/7t87PP/rRj/p58+b5SqXid911V//xj3/cZ1nmvff+8ssv98Cor8svv3ytz/vXv/61f/nLX+6r1arv6enxhx56qH/88ce9996ffPLJ/vWvf/2o808//XR/1FFHdb4/6qij/Pve9z5/+umn+97eXj9z5kz/n//5n35oaMifcsopvl6v+913391fd911ndusWLHCv/Wtb/XTp0/3SZL4F77whf6b3/ym996vMe6Rx7rzzjv9/Pnz/bRp03x3d7c/8sgj/d133925z1122WXU7XbZZRfvvfcLFy70r3jFK3y9XvddXV3+pS99qb/rrrvW+lqM3M/nPve5zvd5nvtqteo/9rGPee+9P/fcc/1+++3X+fl73vMeX6vV/F//+tc17mtwcNDnee7vvfdeD3Re17E69thj/Y477uiHhobW+NnKlSu99+W/wyAIfJ7nY77f9f2O9vf3j/nze6tKKF68eDGzZs0adWzWrFkMDAzQarXWepuLLrqInp6eztfOO++8JYY6inN+iz/m+jjnKaybdOMSYmvgvaeVFfS3c/paOf3tnFZWdKb4N4czzjiDW2+9lZ/85Cdcf/313Hzzzdxzzz2dnx911FHcd999LF26FIDf/OY3TJ8+nZtuugkot8DfdtttvOIVrwBgaGiI1772tdx4443ce++9vOY1r2HBggU8+eSTAPz+97/nX/7lXzj//PN58MEH+fnPf86RRx7ZebyzzjqLT33qU3ziE5/gvvvu4/vf//6o9+auri6+9a1vcd999/GFL3yBr3/963zuc58D4IQTTuBDH/oQ++yzD4sWLWLRokWccMIJazznoih4wxvewFFHHcUf/vAHbrvtNt71rndt8G6ab3/720yfPp0777yT97///bznPe/h7//+7zn00EO55557ePWrX82JJ55Is9kE6Dynn/3sZ9x///187WtfY/r06QDceeedANxwww0sWrSIq666CoDBwUFOPvlkbrnlFm6//XbmzZvHa1/7WgYHBwG46667ALj88stZtGhR5/u3ve1t7LTTTtx1113cfffdfOxjH9ug2i5BEBCGIVmWrfEz5xw//OEPedvb3sYOO+ywxs/r9TpBEDBjxgy01lx55ZVj3n69YsUKfv7zn3PaaadRq9XW+Hlvby8As2fPpigKrr766s36+7FWYw6nNjPGMHMzb948f+GFF446du2113rAN5vNtd5mMszcrGikvpnm3rnNf4W3Ps4530xzv6KR+qWD7UkzLiG2lPGYuWmmuV86UP7+DLSy8vdpoO2b6divTjfEwMCAD8PQX3HFFZ1jfX19vlqtdmZunHN+2rRpnXP2339/f9FFF/nZs2d7772/5ZZbfBiGvtForPNx9tlnH/+lL33Je+/9f//3f/vu7m4/MDCw1vHEcey//vWvj/k5fOYzn/EHHnhg5/vVZxjWZvny5R7wN91001p/PtaZm8MPP7zzfVEUvlar+RNPPLFzbNGiRR7wt912m/fe+wULFvhTTz11rY/52GOPecDfe++96x27tdZ3dXX5//mf/+kcW9tnXFdXl//Wt7613vta1aozN2ma+gsvvNAD/qc/LVcIVn1dlyxZ4gF/ySWXPO/9fvnLX/bVatV3dXX5V77ylf7888/3jzzyyDrPv+OOOzzgr7rqque97//7f/+vD4LAT5061b/mNa/x//7v/+4XL168zvO3y5mb2bNns2TJklHHlixZQnd3N5VKZa23ieOY7u7uUV9b2tPL+ukbSmmmxYTOmLRzSyMtI/M4KP/qG6mlnW9asaTNQWaXxGTknKddOIxRhEajVPmnMYp2sXn+vT766KPkec5BBx3UOdbT08OLXvSizvdKKY488khuuukm+vr6uO+++3jve99LmqY88MAD/OY3v+HlL395p3jh0NAQH/7wh9lrr73o7e2lXq9z//33d2ZuXvWqV7HLLruw2267ceKJJ/K9732vM7Nx//33k6YpRx999DrH/KMf/YjDDjuM2bNnU6/X+fjHP96577GaOnUqp5xyCscccwwLFizgC1/4AosWLdqg+wB4yUte0vlvYwzTpk3jxS9+cefYyIzTSILre97zHn74wx+y//7789GPfpTf/e53z/sYS5Ys4Z3vfCfz5s2jp6eH7u5uhoaGnvc5n3HGGbzjHe9g/vz5fOpTn+KRRx553sc688wzqdfrVKtVPv3pT/OpT32K4447bo3z/AbMlJx22mksXryY733vexxyyCFcccUV7LPPPlx//fVrPX9D7vuCCy5g8eLFXHrppeyzzz5ceuml7Lnnnvzxj38c831sjK0quDnkkENGZWEDXH/99RxyyCETNKKx+eGtD3PHI8/y0OJ+lg21O9PY1rot9gE+EW/KG8NPwJS/EGPlvMc6T6BHL40EWmGdx03gv9NXvOIV3HTTTdx8880ccMABdHd3dwKe3/zmNxx11FGdcz/84Q9z9dVXc+GFF3LzzTezcOFCXvziF3eWN7q6urjnnnv4wQ9+wJw5czjnnHPYb7/96OvrW+eF5IjbbruNt73tbbz2ta/lpz/9Kffeey9nn332WpdOns/ll1/ObbfdxqGHHsqPfvQj9thjD26//XagbLC4+vvC2rq8r77Mo5QadWxkmcs5B5QbXZ544gk++MEP8swzz3D00Ufz4Q9/eL3jPPnkk1m4cCFf+MIX+N3vfsfChQuZNm3a8z7n8847jz//+c8cd9xx/OpXv2Lvvffm6quvXu9tPvKRj7Bw4UKefvppVq5cyZlnnrnW82bMmEFvb+/z7nga0dXVxYIFC7jgggv43//9X4444gj+7d/+ba3nzps3D6XUmO972rRp/P3f/z2f/exnuf/++9lhhx347Gc/O6bbbqwJDW6GhoZYuHBhZ1vdY489xsKFCzvR7llnncVJJ53UOf/d7343jz76KB/96Ed54IEH+OpXv8r/+3//jw9+8IMTMfwx++UfVnDTA3/lwUUr6W9mWOdYNpjy7GB7i32AT+Y35VVtTbNLYvxN9hk7rRRGK4rVxlc4j9EKvRkqH++2226EYdjJ0wDo7+/noYceGnXeSN7NFVdc0cmtecUrXsENN9zArbfe2jkGcOutt3LKKafwxje+kRe/+MXMnj2bxx9/fNT9BUHA/Pnz+fd//3f+8Ic/8Pjjj/OrX/2KefPmUalU1rjQHPG73/2OXXbZhbPPPpuXvexlzJs3jyeeeGLUOVEUjTm/44ADDuCss87id7/7Hfvuuy/f//73gfLDe/WZnI3Zor02M2bM4OSTT+a73/0un//85/nP//zPzrhhzdYAt956K//yL//Ca1/7WvbZZx/iOGbZsmWjzgnDcK3PeY899uCDH/wgv/zlL3nTm97E5Zdfvt6xTZ8+nRe+8IXMnj17vflHWmve/OY3873vfY9nnnlmjZ8PDQ1RFMVab6uUYs8991znjqapU6dyzDHH8JWvfGWt56xvl1UURey+++6bfbfUhAY3v//97znggAM44IADgHKK7oADDuCcc84BYNGiRaOm9XbddVeuvfZarr/+evbbbz8uvvhivvGNb0z6beBLPfzpmX4eXDTIE8sbLOlvsrKd0s4tBiisY7BVbNYP8Il4U95QW8vskhh/W8uMndaKJNBY68mtw/vyT2s9SaDRevx/j7q6ujj55JP5yEc+wq9//Wv+/Oc/80//9E9orUd9uL3kJS9hypQpfP/73x8V3FxzzTWkacphhx3WOXfevHlcddVVLFy4kP/93//lrW99a2fmAuCnP/0pX/ziF1m4cCFPPPEE3/nOd3DO8aIXvYgkSTjzzDP56Ec/yne+8x0eeeQRbr/9di677LLOfT/55JP88Ic/5JFHHuGLX/ziGrMRc+fO7VzMLlu2jDRN13jejz32GGeddRa33XYbTzzxBL/85S/5y1/+wl577QXA3/zN3/D73/+e73znO/zlL3/h3HPP5U9/+tMmv97nnHMOP/7xj3n44Yf585//zE9/+tPOY86cOZNKpcLPf/5zlixZQn9/f+c5/9d//Rf3338/d9xxB29729vWmOGaO3cuN954I4sXL2blypW0Wi3e9773cdNNN/HEE09w6623ctddd3UeazxccMEF7Lzzzhx88MF85zvf4b777uMvf/kL3/zmNznggAM6Ewyvf/3rufLKK7nvvvt4+OGHueyyy/jmN7/J61//+nXe91e+8hWstRx00EH893//N3/5y1+4//77+eIXv9hZTfnpT3/KP/7jP/LTn/6Uhx56iAcffJDPfvazXHfddeu97/EwoXVuXvGKV6z3zWtt1Ydf8YpXcO+9927GUW0ei1fCo0v7mTWlgveeSmhoBDnWOYwxKMB6R2Q0xox/zDnyplzOijiC4UDHWk8tNpvlTXlDjcwujczYjAi0Ii0czns0Ez9OMf5GZuyMUcSBpnC+M4NXicbnbWpkVmhT46UkNAC0C0daOIxW1GLTOb45XHLJJbz73e/m+OOPp7u7m49+9KM89dRTJEnSOUcpxRFHHMG1117L4YcfDpQBT3d3Ny960YtG7Wq55JJLePvb386hhx7K9OnTOfPMMxkYGOj8vLe3l6uuuorzzjuPdrvNvHnz+MEPfsA+++wDlDuKgiDgnHPO4ZlnnmHOnDm8+93vBuB1r3sdH/zgB3nf+95HmqYcd9xxfOITn+C8887r3P/f/u3fctVVV/HKV76Svr4+Lr/8ck455ZRRz7larfLAAw/w7W9/m+XLlzNnzhxOO+00/vmf/xmAY445hk984hN89KMfpd1u8/a3v52TTjppk3M5oijirLPO4vHHH6dSqXDEEUfwwx/+EChns774xS9y/vnnc84553DEEUdw0003cdlll/Gud72Ll770pey8885ceOGFayxlXXzxxZxxxhl8/etfZ8cdd+Shhx5i+fLlnHTSSSxZsoTp06fzpje9iU9+8pObNP5VTZ06ldtvv51PfepT/Nu//RtPPPEEU6ZM4cUvfjGf+cxn6OnpYaeddmLu3Ll88pOf7BQpHPl+fasiu+22G/fccw8XXHABH/rQh1i0aBEzZszgwAMP5Gtf+xoAe++9N9VqlQ996EM89dRTxHHMvHnz+MY3vsGJJ544bs9zbZSfbJdGm9nAwAA9PT309/ePS3LxhlQhnluHg144jX13mopRCqsUu0/vorcWEQxXnZzTW6GrEm3yuNbG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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAADi20lEQVR4nOzdd5xkVZn4/88J995KHSYPechJASWJCIiiiDoYd1n1B2IOLCqIgS8oiAq66yK+RECR4H7XwNeAiwtGVhQQI6AoCJIESRM7VbjhnPP743YX0xN7hpnp7pnn/XrVC7rqVt1b3VO3nnvOc55HhRACQgghhBBbCD3ZByCEEEIIsTFJcCOEEEKILYoEN0IIIYTYokhwI4QQQogtigQ3QgghhNiiSHAjhBBCiC2KBDdCCCGE2KJIcCOEEEKILYoEN0IIIYTYokhwI4QQG8nDDz+MUoqrr756sg9FiK2aBDdCiPXy+OOPc+6553LnnXdO9qFssEsuuWRSA5CbbroJpVT3FkURu+yyCyeddBIPPvhgd7uxYOlzn/vcKq/x1FNPccYZZ7DXXntRq9Wo1+sceOCBfOpTn2JgYKC7nfee//zP/+TQQw9l5syZ9PT0sMcee3DSSSfx61//ekLH2+l0+PznP8+hhx5KX18flUqFPfbYg3/913/lvvvuG7ftLbfcwnHHHcd2221HpVJhxx13ZOHChXzjG9/YsF+WEBvATvYBCCGml8cff5xPfOITLFiwgAMOOGCyD2eDXHLJJcyePZuTTz55Uo/jfe97HwcffDB5nnP77bfzla98heuvv5677rqLbbfddo3P+93vfsfLX/5yRkZG+P/+v/+PAw88EIDf//73fOYzn+GXv/wlP/nJT7r7+NKXvsSrXvUq3vSmN2Gt5d577+WHP/whu+yyC8973vPWeoxLlizhZS97GX/4wx945StfyRvf+EYajQb33nsv3/rWt/jKV75ClmUAfPvb3+aEE07ggAMO4P3vfz8zZszgoYce4pe//CWXX345b3zjGzfSb06ItZPgRggxrYUQ6HQ6VKvVyT6U9XbEEUfw+te/HoC3vOUt7LHHHrzvfe/ja1/7GmeeeeZqnzMwMMBrXvMajDHccccd7LXXXuMe//SnP83ll18OlKM7l1xyCe94xzv4yle+Mm67iy66iMWLF6/zGE8++WTuuOMOvvOd7/C6171u3GOf/OQnOeuss7o/n3vuueyzzz78+te/Jo7jcdsuWrRonfsSYmORaSkhnoGbbrqJgw46iEqlwq677sqXv/xlzj33XJRS3W1e+9rX8tznPnfc8xYuXIhSiuuuu657329+8xuUUvzwhz8EYNmyZZxxxhk8+9nPptFo0Nvby3HHHccf//jHVY7ji1/8Ivvuuy+1Wo0ZM2Zw0EEHrTIN8Nhjj/G2t72NbbfdliRJ2HnnnXnPe97TveqeyP5uuukmDj74YKD8Mh6bVlnXFM+69r3y72zM1VdfjVKKhx9+uHvfggULeOUrX8mPf/xjDjroIKrVKl/+8pcBuOqqq3jRi17E3LlzSZKEffbZh0svvXTcay5YsIC//OUv/OIXv+ge/wtf+MLu4wMDA3zgAx9ghx12IEkSdtttNz772c/ivR/3OgMDA5x88sn09fXR39/Pm9/85nHTQRviRS96EQAPPfTQGrf58pe/zGOPPcaFF164SmADMG/ePM4+++zu64QQOPzww1fZTinF3Llz13o8v/nNb7j++ut529vetkpgA5AkybgpswceeICDDz54lcAGWOe+hNiYZORGiA10xx138LKXvYxtttmGT3ziEzjnOO+885gzZ8647Y444gj++7//m6GhIXp7ewkhcOutt6K15uabb+b4448H4Oabb0Zr3f0ievDBB/n+97/PP/3TP7Hzzjvz1FNP8eUvf5mjjjqKu+++uzttcfnll/O+972P17/+9bz//e+n0+nwpz/9id/85jfdaYDHH3+cQw45hIGBAd75zney11578dhjj/Gd73yHVqtFHMcT2t/ee+/Neeedx8c//nHe+c53csQRRwDw/Oc/f42/p4nse33de++9vOENb+Bd73oX73jHO9hzzz0BuPTSS9l33305/vjjsdbygx/8gPe+97147znllFOAcsTi1FNPpdFodEcd5s2bB0Cr1eKoo47iscce413vehc77rgjv/rVrzjzzDN54oknuOiii4BytOhVr3oVt9xyC+9+97vZe++9ufbaa3nzm9+83u9lRQ888AAAs2bNWuM21113HdVqtTviszY77bQTUE4X/dM//RO1Wm29jmcs+D7xxBMntP1OO+3EjTfeyD/+8Q+233779dqXEBtVEEJskIULF4ZarRYee+yx7n1/+9vfgrU2rPjR+t3vfheAcMMNN4QQQvjTn/4UgPBP//RP4dBDD+1ud/zxx4fnPOc53Z87nU5wzo3b50MPPRSSJAnnnXde975XvepVYd99913rsZ500klBax1+97vfrfKY93699jf2fq666qq17nN99n3OOeeE1Z2OrrrqqgCEhx56qHvfTjvtFIDwox/9aJXtW63WKvcde+yxYZdddhl337777huOOuqoVbb95Cc/Ger1erjvvvvG3f/Rj340GGPCI488EkII4fvf/34Awr/92791tymKIhxxxBET+t38/Oc/D0C48sorw+LFi8Pjjz8err/++rBgwYKglOr+rh566KEAhH//93/vPnfGjBlh//33X+vrr+ikk04KQJgxY0Z4zWteEz73uc+Fe+65Z0LPfc1rXhOAsHz58gltf8UVVwQgxHEcjj766PCxj30s3Hzzzav8uxJiU5NpKSE2gHOOn/3sZ7z61a8el/i52267cdxxx43b9jnPeQ6NRoNf/vKXQDlCs/3223PSSSdx++2302q1CCFwyy23dEdCoBzy11p397d06VIajQZ77rknt99+e3e7/v5+/vGPf/C73/1utcfqvef73/8+Cxcu5KCDDlrl8bHpoInub31MdN/ra+edd+bYY49d5f4V824GBwdZsmQJRx11FA8++CCDg4PrfN1vf/vbHHHEEcyYMYMlS5Z0b8cccwzOue7f8IYbbsBay3ve857uc40xnHrqqev1Pt761rcyZ84ctt12W17xilfQbDb52te+ttrf1ZihoSF6enomvI+rrrqKiy++mJ133plrr72WM844g7333psXv/jFPPbYY2t97tDQEMCE9/fWt76VH/3oR7zwhS/klltu4ZOf/CRHHHEEu+++O7/61a8mfMxCPFMyLSXEBli0aBHtdpvddtttlcdWvs8Yw2GHHcbNN98MlMHNEUccwQte8AKcc/z6179m3rx5LFu2bFxw473nC1/4ApdccgkPPfQQzrnuYytOW3zkIx/hZz/7GYcccgi77bYbL33pS3njG9/Ynd5avHgxQ0NDPOtZz1rre5ro/tbHRPe9vnbeeefV3n/rrbdyzjnncNttt9FqtcY9Njg4SF9f31pf929/+xt/+tOfVplaHDOWFPv3v/+dbbbZhkajMe7xsemxifr4xz/OEUccgTGG2bNns/fee2Pt2k/Lvb29DA8PT3gfWmtOOeUUTjnlFJYuXcqtt97KZZddxg9/+EP+5V/+pfvvck37AhgeHqa/v39C+zv22GM59thjabVa/OEPf+Caa67hsssu45WvfCV//etfJfdGbBYyciPEZvCCF7yA3/3ud3Q6nW5w09/fz7Oe9Sxuvvnm7hfMisHN+eefz+mnn86RRx7Jf/3Xf/HjH/+Yn/70p+y7777jklv33nvv7rLcF7zgBXz3u9/lBS94Aeecc856HeNE97cprGkEZ8UAa0WrWxn1wAMP8OIXv5glS5Zw4YUXcv311/PTn/6U0047DWBC78F7z0te8hJ++tOfrva2uqTaZ+LZz342xxxzDEcffTTPfvaz1xnYAOy1117cd9993WTs9TFr1iyOP/54brjhBo466ihuueUW/v73v691XwB33XXXeu+rVqtxxBFHcPHFF3P22WezfPnybrK8EJuajNwIsQHmzp1LpVLh/vvvX+Wx1d13xBFHkGUZ3/zmN3nssce6QcyRRx7JzTffzLx589hjjz26ia0A3/nOdzj66KO54oorxr3WwMAAs2fPHndfvV7nhBNO4IQTTiDLMl772tfy6U9/mjPPPJM5c+bQ29vLn//857W+p4nub32mkia67xkzZnT3teIIwdq+eFf2gx/8gDRNue6669hxxx279//85z9fZds1vYddd92VkZERjjnmmLXuayxxdmRkZNzozb333jvh491QCxcu5LbbbuO73/0ub3jDGzb4dQ466CB+8Ytf8MQTT3QTj1e3rwsuuID/+q//Ghd4b8i+AJ544okNfg0h1oeM3AixAYwxHHPMMXz/+9/n8ccf795///33r/bq9NBDDyWKIj772c8yc+ZM9t13X6AMen7961/zi1/8YpUvD2MMIYRx9337299eJU9i6dKl436O45h99tmHEAJ5nqO15tWvfjU/+MEP+P3vf7/KsY3tY6L7q9frABNa9jzRfe+6664A3ZwWoJt/MlHGmHGvCeVU1FVXXbXKtvV6fbXH/8///M/cdttt/PjHP17lsYGBAYqiAODlL385RVGMW2bunOOLX/zihI93Q7373e9mm2224YMf/OAq1YGhnDr71Kc+BcCTTz7J3Xffvco2WZZx4403orVe7dTqmMMOO4yXvexlfPWrX+X73//+al/njDPO6P584403rvZ1brjhBmD9p+2E2FAyciPEBjr33HP5yU9+wuGHH8573vMenHNcfPHFPOtZz1qlNUGtVuPAAw/k17/+dbfGDZQjN81mk2azuUpw88pXvpLzzjuPt7zlLTz/+c/nrrvu4utf/zq77LLLuO1e+tKXMn/+fA4//HDmzZvHPffcw8UXX8wrXvGKbiLo+eefz09+8hOOOuoo3vnOd7L33nvzxBNP8O1vf5tbbrmF/v7+Ce9v1113pb+/n8suu4yenh7q9TqHHnroGvNgJrLvl770pey444687W1v40Mf+hDGGK688krmzJnDI488MqG/x0tf+lLiOGbhwoW8613vYmRkhMsvv5y5c+euMmJw4IEHcumll/KpT32K3Xbbjblz5/KiF72ID33oQ1x33XW88pWv5OSTT+bAAw+k2Wxy11138Z3vfIeHH36Y2bNns3DhQg4//HA++tGP8vDDD7PPPvvwve99b0JJy8/UjBkzuPbaa3n5y1/OAQccMK5C8e233843v/lNDjvsMAD+8Y9/cMghh/CiF72IF7/4xcyfP59FixbxzW9+kz/+8Y984AMfWGUUcGX/+Z//yUtf+lJe+9rXsnDhQl784hdTr9f529/+xre+9S2eeOKJbq2bV73qVey8884sXLiQXXfdlWazyc9+9jN+8IMfcPDBB7Nw4cJN+8sRYswkrtQSYtq78cYbw3Oe85wQx3HYddddw1e/+tXwwQ9+MFQqlVW2/dCHPhSA8NnPfnbc/bvttlsAwgMPPDDu/k6nEz74wQ+GbbbZJlSr1XD44YeH2267LRx11FHjljF/+ctfDkceeWSYNWtWSJIk7LrrruFDH/pQGBwcHPd6f//738NJJ50U5syZE5IkCbvssks45ZRTQpqm67W/EEL47//+77DPPvt0l72va+nzuvYdQgh/+MMfwqGHHhriOA477rhjuPDCC9e4FPwVr3jFavdz3XXXhf322y9UKpWwYMGC8NnPfjZceeWVq7zGk08+GV7xileEnp6eAIx7f8PDw+HMM88Mu+22W4jjOMyePTs8//nPD5/73OdClmXd7ZYuXRpOPPHE0NvbG/r6+sKJJ54Y7rjjjvVaCv7tb397rdutbin4mMcffzycdtppYY899giVSiXUarVw4IEHhk9/+tPdv/3Q0FD4whe+EI499tiw/fbbhyiKQk9PTzjssMPC5Zdf3l2Kvy6tVit87nOfCwcffHBoNBohjuOw++67h1NPPTXcf//93e2++c1vhn/5l38Ju+66a6hWq6FSqYR99tknnHXWWWFoaGhC+xJiY1AhrDQOLYR4Rl796lfzl7/8hb/97W+TfShCCLFVkpwbIZ6Bdrs97ue//e1v3HDDDePK+QshhNi8ZORGiGdgm2224eSTT2aXXXbh73//O5deeilpmnLHHXew++67T/bhCSHEVkkSioV4Bl72spfxzW9+kyeffJIkSTjssMM4//zzJbARQohJJCM3QgghhNiiSM6NEEIIIbYoEtwIIYQQYouy1eXceO95/PHH6enp2eCOxEIIIYTYvEIIDA8Ps+2226L12sdmtrrg5vHHH2eHHXaY7MMQQgghxAZ49NFH2X777de6zVYX3IyVo3/00Ufp7e2d5KMRQgghxEQMDQ2xww47dL/H12arC27GpqJ6e3sluBFCCCGmmYmklEhCsRBCCCG2KBLcCCGEEGKLIsGNEEIIIbYoW13OjRBCTJRzjjzPJ/swhNhqxHG8zmXeEyHBjRBCrCSEwJNPPsnAwMBkH4oQWxWtNTvvvDNxHD+j15HgRgghVjIW2MydO5darSYFP4XYDMaK7D7xxBPsuOOOz+hzJ8GNEEKswDnXDWxmzZo12YcjxFZlzpw5PP744xRFQRRFG/w6klAshBArGMuxqdVqk3wkQmx9xqajnHPP6HUkuBFCiNWQqSghNr+N9bmT4EYIIYQQW5RJDW5++ctfsnDhQrbddluUUnz/+99f53Nuuukmnvvc55IkCbvtthtXX331Jj/OiVrw0eu7NyGEEGJ9LFiwgIsuumiyD2OLMKnBTbPZZP/99+dLX/rShLZ/6KGHeMUrXsHRRx/NnXfeyQc+8AHe/va38+Mf/3gTH+narS6gkSBHCCGemXPPPZcDDjhgsg9jrTZnQHLuueeilEIphbWWBQsWcNpppzEyMgLAww8/jFKKO++8c9zzvvvd7/LCF76Qvr4+Go0G++23H+eddx7Lli0DyvyWz3zmM+y1115Uq1VmzpzJoYceyle/+tW1Hk8Iga985SsceuihNBoN+vv7Oeigg7jooototVoAtFotzjzzTHbddVcqlQpz5szhqKOO4r//+783/i9oBZO6Wuq4447juOOOm/D2l112GTvvvDP/8R//AcDee+/NLbfcwuc//3mOPfbYTXWYQgghtiIhBJxzWDv1FhTvu+++/OxnP6MoCm699Vbe+ta30mq1+PKXv7za7c866yw++9nPctppp3H++eez7bbb8re//Y3LLruM//t//y/vf//7+cQnPsGXv/xlLr74Yg466CCGhob4/e9/z/Lly9d6LCeeeCLf+973OPvss7n44ouZM2cOf/zjH7noootYsGABr371q3n3u9/Nb37zG774xS+yzz77sHTpUn71q1+xdOnSTfHreVqYIoBw7bXXrnWbI444Irz//e8fd9+VV14Zent71/icTqcTBgcHu7dHH300AGFwcHAjHHUIO33kf9Z5E0JMH+12O9x9992h3W5vlNdzzoe8cME5v1Feb22GhobCG9/4xlCr1cL8+fPDhRdeGI466qjuefOLX/xi2HfffbvbX3vttQEIl156afe+F7/4xeGss84KIYRw//33h+OPPz7MnTs31Ov1cNBBB4Wf/vSn4/b5pS99Key2224hSZIwd+7c8LrXva77mHMufPaznw277rpriOM47LDDDuFTn/pU9/EPf/jDYffddw/VajXsvPPO4eyzzw5ZloUQQrjqqqsCMO521VVXrfG9X3HFFWGfffYJcRyH+fPnh1NOOSWEEMJDDz0UgHDHHXd0t12+fHkAws9//vMQQgg///nPAxBuuOGG8NznPjdEURR+/vOfr/P9H3XUUasc45ibb745vOAFLwiVSiVsv/324dRTTw0jIyPdx5966qnwyle+MlQqlbBgwYLwX//1X2GnnXYKn//859f4Hs8555yw//77j7vvHe94R5g/f/5q3+tvfvObAISLLrpota+3fPnyEEII+++/fzj33HPXuN/VueaaawIQvv/976/ymPc+DAwMhBBC6OvrC1dfffWEX3dtn7/BwcEJf39Pq4TiJ598knnz5o27b968eQwNDdFut1f7nAsuuIC+vr7ubYcddtgchzqO92Gz71MIMblCCLSzgsFOzkA7Z7CT084KQth054PTTz+dW2+9leuuu46f/vSn3Hzzzdx+++3dx4866ijuvvtuFi9eDMAvfvELZs+ezU033QSUy+Bvu+02XvjCFwIwMjLCy1/+cm688UbuuOMOXvayl7Fw4UIeeeQRAH7/+9/zvve9j/POO497772XH/3oRxx55JHd/Z155pl85jOf4WMf+xh333033/jGN8adw3t6erj66qu5++67+cIXvsDll1/O5z//eQBOOOEEPvjBD7LvvvvyxBNP8MQTT3DCCSes9n1feumlnHLKKbzzne/krrvu4rrrrmO33XZb79/fRz/6UT7zmc9wzz33sN9++63z/X/ve99j++2357zzzuseI8ADDzzAy172Ml73utfxpz/9iWuuuYZbbrmFf/3Xf+3u6+STT+bRRx/l5z//Od/5zne45JJLWLRo0Xofc7VaJcuy1T729a9/nUajwXvf+97VPt7f3w/A/Pnz+d///d/uv4uJ+PrXv86ee+7Jq171qlUeU0rR19fXfe0bbriB4eHhCb/2RjHhcGoTYwIjN7vvvns4//zzx913/fXXByC0Wq3VPmcqjNzc+9iyMNJOg/eb/spNCPHMbKyRm1aah8VDnbCsmYahdhaWNdOweKgTWmm+kY50vKGhoRBFUfj2t7/dvW9gYCDUarXuyI33PsyaNau7zQEHHBAuuOCC7pX/LbfcEqIoCs1mc4372XfffcMXv/jFEEII3/3ud0Nvb28YGhpa7fEkSRIuv/zyCb+Hf//3fw8HHnhg9+fVjVSszrbbbtsdbVrZ+ozcrG4UYmUrvv8QwmpHW972treFd77znePuu/nmm4PWOrTb7XDvvfcGIPz2t7/tPn7PPfcEYL1Gbn7/+9+H2bNnh9e//vWrfa/HHXdc2G+//db5nv7yl7+EvffeO2itw7Of/ezwrne9K9xwww1rfc7ee+8djj/++HW+9i9+8Yuw/fbbhyiKwkEHHRQ+8IEPhFtuuWWN22+VIzfz58/nqaeeGnffU089RW9vL9VqdbXPSZKE3t7ecbfN7aZ7H+eBpwZpZ8Vm3/dU4X2gcF5GscRWwftAp/AYo4iMRqnyv8YoOsWm+Rw8+OCD5HnOIYcc0r2vr6+PPffcs/uzUoojjzySm266iYGBAe6++27e+973kqYpf/3rX/nFL37BwQcf3C1gODIywhlnnMHee+9Nf38/jUaDe+65pzty8ZKXvISddtqJXXbZhRNPPJGvf/3r3UTSe+65hzRNefGLX7zGY77mmms4/PDDmT9/Po1Gg7PPPrv72hO1aNEiHn/88bXuZ6IOOuigcT+v6/2vyR//+EeuvvpqGo1G93bsscfiveehhx7innvuwVrLgQce2H3OXnvt1R1JWZu77rqLRqNBtVrlkEMO4bDDDuPiiy9e7bZhgqOE++yzD3/+85/59a9/zVvf+lYWLVrEwoULefvb377G50z0tY888kgefPBBbrzxRl7/+tfzl7/8hSOOOIJPfvKTE3r+hppWwc1hhx3GjTfeOO6+n/70pxx22GGTdEQT851bH+bn9zzBP5YO433Yqr7owyQMzQsx2XwIOB+wenxBMqsVzgf8JP77f+ELX8hNN93EzTffzHOe8xx6e3u7Ac8vfvELjjrqqO62Z5xxBtdeey3nn38+N998M3feeSfPfvazu9MgPT093H777Xzzm99km2224eMf/zj7778/AwMDa7zgHHPbbbfxpje9iZe//OX8z//8D3fccQdnnXXWGqdY1mRd+xnrML3iOWdNnd7r9fq4n9f1/tdkZGSEd73rXdx5553d2x//+Ef+9re/seuuu07kba3RnnvuyZ133sk999xDu93muuuuWyVdY8wee+zRDXrXRWvNwQcfzAc+8AG+973vcfXVV3PFFVfw0EMPrfG1//rXv07omKMo4ogjjuAjH/kIP/nJTzjvvPP45Cc/ud5/6/UxqcHNyMhI9w8P5VLvO++8sxsVn3nmmZx00knd7d/97nfz4IMP8uEPf5i//vWvXHLJJfy///f/OO200ybj8CfsvhG4/o5Hue6Ov3PP40tZ1uxsNV/0ndzRTMsy2okt/7k1U0cnf2altYWYyrRSGK0oVrqAKXzAaIXeBNWPd9llF6Io4ne/+133vsHBQe67775x243l3Xz729/u5ta88IUv5Gc/+xm33npr9z6AW2+9lZNPPpnXvOY1PPvZz2b+/Pk8/PDD417PWssxxxzDv/3bv/GnP/2Jhx9+mP/93/9l9913p1qtrnJBOuZXv/oVO+20E2eddRYHHXQQu+++O3//+9/HbRPH8TrL8Pf09LBgwYI17mfOnDkA3XwYYJWl0msykfe/umN87nOfy913381uu+22yi2OY/baay+KouAPf/hD9zn33nvvhLrQx3HMbrvtxoIFC9bZOfuNb3wjIyMjXHLJJat9fG3722effYCyZMuaXvu+++5b7ZLuEAKDg4Nrfe2iKOh0Oms5+mdmUte5/f73v+foo4/u/nz66acD8OY3v5mrr76aJ554Ytzw384778z111/Paaedxhe+8AW23357vvrVr06LZeD3DcLMBxeR2IgX7j2PHWf3kTnPYObIIkc1tlij0XrLKfm+8tA8QGQU4OkUnsSGLer9CjFGa0XF6tHA3mNHAx3nAvXEbJJ/9z09Pbz5zW/mQx/6EDNnzmTu3Lmcc845aK3HlbTfb7/9mDFjBt/4xjf4n//5H6AMbs444wyUUhx++OHdbXfffXe+973vsXDhQpRSfOxjH8N73338f/7nf3jwwQc58sgjmTFjBjfccAPee/bcc08qlQof+chH+PCHP0wcxxx++OEsXryYv/zlL7ztbW9j991355FHHuFb3/oWBx98MNdffz3XXnvtuPe0YMGC7kXv9ttvT09PD0mSrPLezz33XN797nczd+5cjjvuOIaHh7n11ls59dRTqVarPO95z+Mzn/kMO++8M4sWLeLss8+e0O90Xe9/7Bh/+ctf8i//8i8kScLs2bP5yEc+wvOe9zz+9V//lbe//e3U63XuvvtufvrTn3LxxRez55578rKXvYx3vetdXHrppVhr+cAHPrDOUaj1deihh/LhD3+YD37wgzz22GO85jWvYdttt+X+++/nsssu4wUveAHvf//7ef3rX8/hhx/O85//fObPn89DDz3EmWeeyR577MFee+212tf+53/+Z6699lre8IY3cPbZZ/PSl76UOXPmcNddd/H5z3+eU089lVe/+tW88IUv5A1veAMHHXQQs2bN4u677+b//J//w9FHH71p00TWmZWzhVmfhKSJmEhC8djtOR/5n/C+/7wlXPmLe8NdjywJd/9jWfjN/YvCr+9fFP72+EB4bHkzNDvZFpN4nBcuLB7uhKF2FoY7efc21M7C4uFOyAs32YcoxCo2VkKx9z600rxMJB4uE4tbab5JP9+rWwp+yCGHhI9+9KPjtnvVq14VrLVheHg4hFAu2Z4xY0Z43vOeN267hx56KBx99NGhWq2GHXbYIVx88cXjlpbffPPN4aijjgozZswI1Wo17LfffuGaa67pPt85Fz71qU+FnXbaKURRFHbcccdxi0I+9KEPhVmzZoVGoxFOOOGE8PnPfz709fV1H+90OuF1r3td6O/vX+dS8MsuuyzsueeeIYqisM0224RTTz21+9jdd98dDjvssFCtVsMBBxwQfvKTn6w2oXhsafRE338IIdx2221hv/32C0mSjFsK/tvf/ja85CUvCY1GI9Tr9bDffvuFT3/6093Hn3jiifCKV7wiJEkSdtxxx/Cf//mfG7QUfOXjZaXk6RDKZdtHHnlk6Onp6R7Leeed132/X/nKV8LRRx8d5syZE+I4DjvuuGM4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f+ihh1a9x/333++f85zn+Far5Xfv3u1/7Md+zDdNc6mn4r33/sMf/rAHHvZ3++23e+9DOvhP/dRP+X379vksy/zNN9/s77333lXvcezYMf/CF77Qd7td3+/3/fd+7/f6wWCw6ph/+Id/8N/8zd/ssyzzV155pX/jG9+4qXMbj8f+2c9+tt+zZ49PksRfe+21/qUvfenDjOutOre15gX4d7zjHdNjNupa/PCHP+xvuOEGn6apf9SjHrXqMzZjbg888IB/5jOf6efn532WZf7Rj360f+UrX7mqXspWnZv33n/f932fv/baa32apn7Pnj3+5ptvnho23m/f83a2uW3387YWpxo32/ncee+98N77i+8fikQikUgkErk0RM1NJBKJRCKRHUU0biKRSCQSiewoonETiUQikUhkRxGNm0gkEolEIjuKaNxEIpFIJBLZUUTjJhKJRCKRyI4iGjeRSCQSiUR2FNG4iUQiW4r7778fIcS0nP1WQwjB+9///s0eRiQSOQOxK3gkEtnRfM/3fA8LCwsbZpA89NBDW6qPWCQSeTjRuIlEIheFpmlIkmSzh7HhbKXu75FIZG1iWCoSiawb5xy/+Iu/yKMf/WiyLOOaa67hv//3/z4NJb3nPe/hWc96Fnme81u/9VsA/MZv/AaPfexjyfOcxzzmMfzqr/7qqvf82Mc+xpOe9CTyPOepT30qn/rUp1Y9f+LECV784hezZ88eWq0W1113He94xzumz3/lK1/h+c9/PrOzs8zPz/Pc5z6X+++/H4A3vOEN/J//83/4gz/4A4QQCCG46667zjjHuq55+ctfzoEDB8jznGuvvZY77rhj+vzKsNQb3vCG6fuu/HvnO985/b7uuOMOHvnIR9JqtXjiE5/I7/3e753HNx+JRM6JS9LBKhKJ7Ahe9apX+bm5Of/Od77Tf+ELX/B/9Vd/5d/+9rf7++67zwP+EY94hP/93/99/6Uvfcl/9atf9f/3//5ff+DAgeljv//7v+/n5+f9O9/5Tu996Ha+Z88e/6IXvcjfc889/v/9v//nH/WoR3nAf+pTn/Lee/+yl73M33DDDf7v//7v/X333ec/+MEP+j/8wz/03ntf17V/7GMf67/v+77Pf+Yzn/Gf//zn/Yte9CJ//fXX+6qq/GAw8M9//vP9bbfdNu3IXVXVGef4pje9yV999dX+L//yL/3999/v/+qv/sq/613vmj4P+Pe9733T8a/s9v3mN7/Zt9tt/9nPftZ77/3P/dzP+cc85jH+Ax/4gP/iF7/o3/GOd/gsy/xdd921wWcmEomsJBo3kUhkXSwtLfksy/zb3/72hz23bNy85S1vWfX413zN16wyDLz3/md/9mf9TTfd5L33/td//df9rl27fFEU0+ff9ra3rTJuvuM7vsN/7/d+75pj+s3f/E1//fXXe+fc9LGqqnyr1fJ/9md/5r33/vbbb/fPfe5z1z3PH/7hH/b/9t/+21XvuZKVxs1K7r77bp/nuX/Pe97jvfe+LEvfbrf93/7t36467vu///v9C1/4wnWPJxKJnDtRcxOJRNbFP/7jP1JVFTfffPNpj3nqU586/fdoNOKLX/wi3//9389LX/rS6ePGGGZmZqbv+YQnPIE8z6fP33TTTave84d+6If4ru/6Lj75yU/y7Gc/m+c973l84zd+IwD/8A//wBe+8AV6vd6q15RlyRe/+MXzmuf3fM/38C3f8i1cf/313HbbbXz7t387z372s8/4mgceeIDnPe95/PiP/zjPf/7zAfjCF77AeDzmW77lW1YdW9c1T3rSk85rbJFIZH1E4yYSiayLVqt11mM6nc7038PhEIC3v/3t3HjjjauOU0qt+3Of85zn8OUvf5k/+ZM/4YMf/CA333wzL3vZy3jzm9/McDjkKU95ylTfs5I9e/as+zNW8uQnP5n77ruPP/3TP+VDH/oQz3/+87nllltOq5UZjUZ853d+JzfddBM/8zM/M318ef5//Md/zJVXXrnqNVmWndfYIpHI+ojGTSQSWRfXXXcdrVaLO++8k//8n//zWY/ft28fV1xxBV/60pd48YtfvOYxj33sY/nN3/xNyrKcem/+7u/+7mHH7dmzh9tvv53bb7+dZzzjGbzyla/kzW9+M09+8pN5z3vew969e+n3+2t+RpqmWGvPYabQ7/d5wQtewAte8AK++7u/m9tuu43jx48zPz+/6jjvPf/xP/5HnHP85m/+JkKI6XOPe9zjyLKMBx54gGc961nn9PmRSOTCiMZNJBJZF3me8+pXv5pXvepVpGnKN33TN3HkyBE+97nPnTZU9dM//dP81//6X5mZmeG2226jqio+/vGPc+LECV7xilfwohe9iJ/8yZ/kpS99Ka997Wu5//77efOb37zqPV73utfxlKc8ha/7uq+jqir+6I/+iMc+9rEAvPjFL+ZNb3oTz33uc/mZn/kZrrrqKr785S/z3ve+l1e96lVcddVVPOIRj+DP/uzPuPfee9m1axczMzNnTFH/pV/6JQ4cOMCTnvQkpJT87u/+Lvv372d2dvZhx77hDW/gQx/6EH/+53/OcDicemtmZmbo9Xr8+I//OP/tv/03nHN88zd/M4uLi/zN3/wN/X6f22+//TzPRCQSOSubLfqJRCLbB2ut/7mf+zl/7bXX+iRJ/DXXXON//ud/fiooXhYBr+S3fuu3/A033ODTNPVzc3P+mc98pn/ve987ff7uu+/2T3ziE32apv6GG27wv//7v7/qvX72Z3/WP/axj/WtVsvPz8/75z73uf5LX/rS9PUPPfSQf8lLXuJ3797tsyzzj3rUo/xLX/pSv7i46L33/vDhw/5bvuVbfLfb9YD/8Ic/fMY5/q//9b/8DTfc4Dudju/3+/7mm2/2n/zkJ6fPs0JQ/KxnPcsDD/t7xzve4b333jnn3/KWt/jrr7/eJ0ni9+zZ42+99Vb/kY985Ny//Egksm6E995vmmUViUQikUgkssHEIn6RSCQSiUR2FNG4iUQilxU///M/T7fbXfPvOc95zmYPLxKJbAAxLBWJRC4rjh8/zvHjx9d8rtVqPSxtOxKJbD+icROJRCKRSGRHEcNSkUgkEolEdhTRuIlEIpFIJLKjiMZNJBKJRCKRHUU0biKRSCQSiewoonETiUQikUhkRxGNm0gkEolEIjuKaNxEIpFIJBLZUUTjJhKJRCKRyI7i/wcccfopXYV0zgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "gwascat_path=f\"{release_path}/{release_ver}/study_index/gwas_catalog\"\n", + "# Gwas Catalog:\n", + "gwascat_index=session.spark.read.parquet(gwascat_path, recursiveFileLookup=True)\n", + "# Number of GWAS curated studies\n", + "print(\"Number of unique gwascat studies: \", gwascat_index.select(f.col(\"studyId\")).distinct().count())\n", + "# Number of studies with full GWAS sumstats\n", + "print(\"Number of unique SUMSTATS gwascat studies: \", gwascat_index.filter(f.col(\"hasSumstats\") == True).select(f.col(\"studyId\")).distinct().count())\n", + "#gwascat_index\n", + "# The histogram/density plot for total sample size separately for curated studies and full GWAS\n", + "#gwascat_index.filter(f.col(\"hasSumstats\") == True).select(f.col(\"nSamples\")).toPandas().plot.hist(bins=25, alpha=0.5, label=\"Sumstats GWAScat sample size\", title=\"Sumstats GWAScat sample size\")\n", + "#gwascat_index.filter(f.col(\"hasSumstats\") == False).select(f.col(\"nSamples\")).toPandas().plot.hist(bins=25, alpha=0.5, label=\"Sumstats GWAScat sample size\", title=\"Curated GWAScat sample size\")\n", + "\n", + "# Credible_set. Please use Daniels’ notebook as a reference. For each subfolder:\n", + "# gwas catalog sumstats (PICs):\n", + "gwascat_sumstats_path=f\"{release_path}/{release_ver}/credible_set/gwas_catalog_PICSed_summary_statistics\"\n", + "# Number of CSs.\n", + "gwascat_sumstats=session.spark.read.parquet(gwascat_sumstats_path, recursiveFileLookup=True)\n", + "\n", + "print(\"Number of unique gwas catalog sumstats CSs: \", gwascat_sumstats.select(\"studyLocusId\").distinct().count(), \" in \", gwascat_sumstats.select(\"studyId\").distinct().count(), \" studies.\")\n", + "\n", + "\n", + "sample_size_quartiles = gwascat_index.join(gwascat_sumstats, how=\"inner\", on=\"studyId\").stat.approxQuantile(\"nSamples\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of SUMSTATS gwas sample sizes: L.quart: \", sample_size_quartiles[0], \"Median: \", sample_size_quartiles[1], \"U.quart: \", sample_size_quartiles[2])\n", + "#\n", + "\n", + "\n", + "gwascat_sumstats_fm=gwascat_sumstats.select(\"studyId\", \"studyLocusId\", \"locus.posteriorProbability\").withColumn(\"top_PP\", f.col(\"posteriorProbability\").getItem(0)).withColumn(\"credset_size\", f.size(f.col(\"posteriorProbability\")))\n", + "gwascat_sumstats_fm.select(\"credset_size\", \"top_PP\").toPandas().plot.scatter(x=\"credset_size\", y=\"top_PP\", alpha=0.05, label=\"gwascat sumstats PICS CS\", title=\"gwascat sumstats PICS CS\")\n", + "print(\"Number of SUMSTATS CS with top SNP PP > 0.9: \", gwascat_sumstats_fm.filter(f.col(\"top_PP\") > 0.9).distinct().count())\n", + "\n", + "sample_size_quartiles = gwascat_sumstats_fm.stat.approxQuantile(\"credset_size\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of SUMSTATS gwascat pics credset sizes: Mean: \", gwascat_sumstats_fm.select(f.mean(gwascat_sumstats_fm[\"credset_size\"])).collect()[0][0], \"L.quart: \", sample_size_quartiles[0], \"Median: \", sample_size_quartiles[1], \"U.quart: \", sample_size_quartiles[2])\n", + "\n", + "\n", + "# gwas catalog curated (PICs):\n", + "gwascat_curated_path=f\"{release_path}/{release_ver}/credible_set/gwas_catalog_PICSed_curated_associations\"\n", + "# Number of CSs.\n", + "gwascat_curated=session.spark.read.parquet(gwascat_curated_path, recursiveFileLookup=True)\n", + "#gwascat_sumstats.printSchema()\n", + "print(\"Number of unique gwas catalog curated CSs: \", gwascat_curated.select(\"studyLocusId\").distinct().count(), \" in \", gwascat_curated.select(\"studyId\").distinct().count(), \" studies.\")\n", + "# keep only credible sets snps\n", + "\n", + "gwascat_curated_fm=gwascat_curated.select(\"studyId\", \"studyLocusId\", \"locus.posteriorProbability\").withColumn(\"top_PP\", f.col(\"posteriorProbability\").getItem(0)).withColumn(\"credset_size\", f.size(f.col(\"posteriorProbability\")))\n", + "gwascat_curated_fm.select(\"credset_size\", \"top_PP\").toPandas().plot.scatter(x=\"credset_size\", y=\"top_PP\", alpha=0.05, label=\"gwascat curated PICS CS\", title=\"gwascat curated PICS CS\")\n", + "print(\"Number of CURATED CS with top SNP PP > 0.9: \", gwascat_curated_fm.filter(f.col(\"top_PP\") > 0.9).distinct().count())\n", + "sample_size_quartiles = gwascat_index.join(gwascat_sumstats, how=\"anti\", on=\"studyId\").stat.approxQuantile(\"nSamples\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of CURATED gwas sample sizes: L.quart: \", sample_size_quartiles[0], \"Median: \", sample_size_quartiles[1], \"U.quart: \", sample_size_quartiles[2])\n", + "\n", + "sample_size_quartiles = gwascat_curated_fm.stat.approxQuantile(\"credset_size\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of CURATED gwascat pics credset sizes: Mean: \", gwascat_curated_fm.select(f.mean(gwascat_curated_fm[\"credset_size\"])).collect()[0][0], \"L.quart: \", sample_size_quartiles[0], \"Median: \", sample_size_quartiles[1], \"U.quart: \", sample_size_quartiles[2])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 6. Analyze colocalization data:\n", + " - Count the total number of colocalizations and the number with clpp > 0.8.\n", + " - Calculate the average number of overlaps per credible set." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of colocalisations: 46733065 , of which, 4031821 > 0.8 clpp ( 8.6 %)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Stage 360:============================================> (12 + 3) / 15]\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Average number of overlaps per CS: 90.79159130338489\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "coloc_path=f\"{release_path}/{release_ver}/colocalisation\"\n", + "coloc=session.spark.read.parquet(coloc_path, recursiveFileLookup=True)\n", + "\n", + "print(\"Number of colocalisations: \", coloc.count(), \" , of which, \", coloc.filter(f.col(\"clpp\") > 0.8).count(), \" > 0.8 clpp (\", round((coloc.filter(f.col(\"clpp\") > 0.8).count()/coloc.count()), 3)*100, \"%)\")\n", + "Avg_overlaps=coloc.groupBy(\"leftStudyLocusId\").count().agg(f.avg(\"count\")).collect()[0][0]\n", + "print(\"Average number of overlaps per CS: \", Avg_overlaps)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 7. Analyze locus-to-gene (L2G) predictions:\n", + " - Histogram of l2g score distribution.\n", + " - Number of CS with at least one gene with L2G>=0.5\n", + " - Number of CS with more than one gene with L2G>=0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A total of 10561869 l2g predictions were computed.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "There are 8591772 UNIQUE locus to gene predictions for 607372 unique studyloci\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Where 357875 studyloci contains at least one gene with score > 0.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Of these, 122485 studyloci contains more than one gene with score > 0.5\n" + ] + }, + { + "data": { + "image/png": "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lCk7duxQly5dFBMTowULFhS6AnFep06d9NNPP+nzzz/37Dt37pzefvvty54jLy+v0C2T8PBwRUVFKSsrS5LUvHlz1a5dW5MnT9apU6cKjDX//9M6kZGRatasmd5///0CY7Zt26alS5eqc+fOl83Ss2dP+fn56YUXXij0hXbGGP3yyy+SpPT0dOXm5hZ4vnHjxipXrpwnM4Dicc3c+rmUgwcPasaMGTp48KCioqIkSSNGjNDixYs1Y8YMjRs3Tvv27dOBAwc0Z84czZo1S3l5eRo2bJjuu+8+rVixwuF3ABS/jIwMderUSSdPntRzzz2nL774osDzdevWVevWrSVJjz/+uN544w317dtXQ4cOVWRkpD788ENVqFBBkgqtXfn9eWrWrKn77rtPTZs21XXXXafly5dr/fr1mjhxoiSpXLlymjZtmrp27apmzZpp4MCBioyM1I8//qgffvhBS5YskSS98sorio+PV+vWrTVo0CDPx5NDQ0M1ZsyYy77nunXrauzYsRo5cqT279+v7t27Kzg4WCkpKZo3b54ee+wxjRgxQitWrNCQIUPUq1cvxcbGKjc3V//zP/8jPz8//fGPf/RmugFcKYev6BQL/e7Wz4IFC4wkExQUVODh7+9vevfubYwx5tFHHy10CXjDhg1GEreDcE36/a2flJQUI+mij4SEhAKv37dvn+nSpYsJDAw01apVM88++6z59NNPjSSzbt26i543KyvLPPfcc6Zp06YmODjYBAUFmaZNm5o333yz0Ng1a9aYjh07esY1adLETJkypcCY5cuXm7i4OBMYGGhCQkJM165dzfbt2wuMuditn/M+/fRT06ZNG8/fDfXr1zeJiYmevw/27dtnHn74YVO3bl1ToUIFU7lyZdOuXTuzfPnyy00zgKvkMuba+wUeLpdL8+bNU/fu3SX99umFfv366Ycffii0YO66665TRESERo8erXHjxiknJ8fz3NmzZ1WxYkUtXbpUHTt2LMm3AJRKkydP1rBhw3T48GHVqFHD6TgArgFl4tbPzTffrLy8PB0/flxt27a94Ji4uDjl5uZq7969qlu3riRp165dkqRatWqVWFagtDh79myBNSznzp3TW2+9pXr16lFSAPjMNVNUTp8+rT179ni2U1JStHnzZlWuXFmxsbHq16+f+vfvr4kTJ+rmm2/WiRMnlJycrCZNmqhL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gLUoKgAAwFoUFQAAYC2KCgAAsBZFBQAAWIuiAgAArEVRAQAA1qKoAAAAa1FUAACAtSgqAADAWhQVAABgLYoKAACwFkUFAABYi6ICAACs5WhRGTNmjFwuV4FH/fr1nYwEAAAs4u90gIYNG2r58uWebX9/xyMBAABLON4K/P39FRER4XQMAABgIcfXqOzevVtRUVGqU6eO+vXrp4MHD150bFZWltLT0ws8AADAtcvRonLrrbdq5syZWrx4saZNm6aUlBS1bdtWGRkZFxyflJSk0NBQzyM6OrqEEwMAgJLkMsYYp0Ocd+rUKdWqVUuTJk3SoEGDCj2flZWlrKwsz3Z6erqio6OVlpamkJAQn+d5bdkunx+zuA3rGOt0BAAALik9PV2hoaFX9PPb8TUq/y4sLEyxsbHas2fPBZ93u91yu90lnAoAADjF8TUq/+706dPau3evIiMjnY4CAAAs4GhRGTFihL788kvt379fX331lXr06CE/Pz/17dvXyVgAAMASjt76OXz4sPr27atffvlF1apVU5s2bbRu3TpVq1bNyVgAAMASjhaV2bNnO3l6AABgOavWqAAAAPw7igoAALAWRQUAAFiLogIAAKxFUQEAANaiqAAAAGtRVAAAgLW8Kir79u3zdQ4AAIBCvCoqN9xwg9q1a6cPPvhA586d83UmAAAASV4WlY0bN6pJkyYaPny4IiIi9Pjjj+vbb7/1dTYAAFDGeVVUmjVrptdff11HjhzRe++9p9TUVLVp00aNGjXSpEmTdOLECV/nBAAAZdBVLab19/dXz549NWfOHL388svas2ePRowYoejoaPXv31+pqam+ygkAAMqgqyoq3333nZ588klFRkZq0qRJGjFihPbu3atly5bpyJEj6tatm69yAgCAMsir3548adIkzZgxQzt37lTnzp01a9Ysde7cWeXK/dZ7ateurZkzZyomJsaXWQEAQBnjVVGZNm2aHn74YQ0YMECRkZEXHBMeHq533333qsIBAICyzauisnv37suOCQgIUEJCgjeHBwAAkOTlGpUZM2Zozpw5hfbPmTNH77///lWHAgAAkLwsKklJSapatWqh/eHh4Ro3btxVhwIAAJC8LCoHDx5U7dq1C+2vVauWDh48eNWhAAAAJC+LSnh4uL7//vtC+7ds2aIqVapcdSgAAADJy6LSt29fPf3001q5cqXy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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "l2g_path=f\"{release_path}/{release_ver}/locus_to_gene_predictions\"\n", + "l2g=session.spark.read.parquet(l2g_path, recursiveFileLookup=True)\n", + "l2g.select(\"score\").toPandas().plot.hist(bins=10, alpha=0.5, title=\"l2g scores\")\n", + "print(\"A total of \", l2g.select(\"studyLocusId\", \"geneId\").count(), \"l2g predictions were computed.\")\n", + "print(\"There are\", l2g.select(\"studyLocusId\", \"geneId\").distinct().count(), \" UNIQUE locus to gene predictions for\", l2g.select(\"studyLocusId\").distinct().count(), \" unique studyloci\")\n", + "print(\"Where \", l2g.filter(f.col(\"score\") > 0.5).select(\"studyLocusId\").distinct().count(), \" studyloci contains at least one gene with score > 0.5\")\n", + "print(\"Of these, \", l2g.filter(f.col(\"score\") > 0.5).groupBy(\"studyLocusId\").count().filter(f.col(\"count\") > 1).count(), \" studyloci contains more than one gene with score > 0.5\")\n", + "\n", + "# There are duplicated l2g predictions studyLocusId with finngen pics and susie" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are definitely duplicated studylocusIDs in the l2g predictions, and still around 20% of studylocus contains more than 1 gene with score>0.5. It is not possible to separate out these predictions based on whether they came from pics or susie, as the l2g outputs only contains the studylocusID (duplicated between pics and susie). \n", + "\n", + "If 20% is too high then it implies finngen pics and susie l2g are pointing (confidently) at different genes for the same studylocus.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 7. Analyze locus-to-gene (L2G) predictions:\n", + " - Consider only the top gene assignments from l2g:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from pyspark.sql import Window\n", + "\n", + "window = Window.partitionBy(l2g['studyLocusId']).orderBy(l2g['score'].desc())\n", + "l2g = l2g.withColumn('rn', f.row_number().over(window))\n", + "l2g_max_scores = l2g.filter(l2g['rn'] == 1).drop('rn')\n", + "l2g_max_scores.select(\"score\").toPandas().plot.hist(bins=10, alpha=0.5, title=\"l2g scores (top gene assignment)\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 7. Analyze locus-to-gene (L2G) predictions:\n", + " - Consider only the top gene assignments from l2g:\n", + " - How does this look when separated by datasource?" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Summary of finngen PICS l2g scores: mean: 0.5615633023783144 L.quart: 0.2371208220720291 Median: 0.6145811676979065 U.quart: 0.8626531362533569\n" + ] + }, + { + "data": { + "image/png": "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UWBgILy9vVGrVi2kpqZi69atOHLkCA4cOIDbt29j69at6N69O6pVq4YLFy5g6tSp6NChA5o2bQoA8PT0hLOzM4YPH46QkBAkJCRg9uzZ8Pf3l77yGj9+PNasWYMZM2Zg9OjROHToEHbs2IGwsLBS24+8o1F5oYhKj4WFRaFnGRIREZUWnQaipKQkjBgxAvHx8TA3N0fTpk1x4MABdO3aFffv30dERARWrlyJ9PR02Nvbo3///pg9e7Z0f319fezduxcTJkyAm5sbTE1N4evrq3XdIkdHR4SFhWHq1KlYtWoVatasiQ0bNpTqNYgUCgVsbW1hZWWFrKysUluv3BkaGvLIEBERlQudXqm6sijOlS6JiIh0jVeqfqE47986H1RNREREpGsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHs6DUTr1q1D06ZNoVaroVar4ebmhn379knLnz9/Dn9/f1SrVg1VqlRB//79kZiYqLWOuLg4+Pj4wMTEBFZWVpg+fTqys7O12hw5cgQtWrSASqVC3bp1ERoaWh67R0RERJWETgNRzZo1sXjxYkRHR+PMmTPo0qULevfujcuXLwMApk6div/973/YuXMnjh49igcPHqBfv37S/XNycuDj44PMzEycPHkSmzdvRmhoKObMmSO1iY2NhY+PDzp37oyYmBhMmTIFY8aMwYEDB8p9f4mIiKhiUgghhK6LeJmlpSWWLl2KAQMGoEaNGti6dSsGDBgAALh27RoaNWqEqKgotGnTBvv27UOPHj3w4MEDWFtbAwDWr1+PmTNn4uHDh1AqlZg5cybCwsJw6dIlaRuDBw9GcnIy9u/f/0Y1aTQamJubIyUlBWq1uvR3moiIqBStCL+h6xKKbWrX+qW+zuK8f1eYMUQ5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YSgiIiJ6h1XoI0SvqlOnDqpXr45bt24BAGxsbJCUlKTVJjs7G48fP5bGHdnY2CAxMVGrTd50YWOTVCoV1Gq11o2IiIjeXZUqEP3555949OgRbG1tAQBubm5ITk5GdHS01ObQoUPIzc1F69atpTbHjh1DVlaW1CY8PBwNGjQocPwQERERyY9OA1FaWhpiYmIQExMDAIiNjUVMTAzi4uKQlpaG6dOn49SpU7h79y4iIyPRu3dv1K1bF15eXgCARo0aoVu3bhg7dix+//13nDhxApMmTcLgwYNhZ2cHABg6dCiUSiX8/Pxw+fJlbN++HatWrdL6SoyIiIjkTaeB6MyZM/jHP/6Bf/zjHwCAgIAA/OMf/8CcOXOgr6+PCxcuoFevXqhfvz78/Pzg6uqK3377TetaRFu2bEHDhg3h7u6O7t27o127dvj222+l5ebm5jh48CBiY2Ph6uqKadOmYc6cOTzlnoiIiCQ6HVTdqVOnIn/+48CBA69dh6WlpXQRxsI0bdoUv/32W7HrIyIiInmoVGOIiIiIiMoCAxERERHJHgMRERERyR4DEREREckeAxERERHJHgMRERERyR4DEREREclehf5xV6LStCL8hq5LKLapXevrugQiIlngESIiIiKSPQYiIiIikj0GIiIiIpI9BiIiIiKSPQ6qJqJSxcHrRFQZ8QgRERERyR4DEREREckeAxERERHJHgMRERERyR4DEREREckeAxERERHJHgMRERERyR4DEREREckeAxERERHJHgMRERERyR4DEREREckeAxERERHJHgMRERERyR4DEREREckeAxERERHJHgMRERERyR4DEREREckeAxERERHJHgMRERERyR4DEREREckeAxERERHJHgMRERERyZ6BrgsgosKtCL+h6xKIiGSBgYiIZI/Bk4j4lRkRERHJnk4D0bFjx9CzZ0/Y2dlBoVDgp59+0louhMCcOXNga2sLY2NjeHh44ObNm1ptHj9+jGHDhkGtVsPCwgJ+fn5IS0vTanPhwgW0b98eRkZGsLe3R0hISFnvGhEREVUiOg1E6enpaNasGb7++usCl4eEhOCrr77C+vXrcfr0aZiamsLLywvPnz+X2gwbNgyXL19GeHg49u7di2PHjmHcuHHSco1GA09PTzg4OCA6OhpLly5FUFAQvv322zLfPyIiIqocFEIIoesiAEChUGDPnj3o06cPgBdHh+zs7DBt2jR89tlnAICUlBRYW1sjNDQUgwcPxtWrV+Hs7Iw//vgDLVu2BADs378f3bt3x59//gk7OzusW7cOs2bNQkJCApRKJQDgn//8J3766Sdcu3btjWrTaDQwNzdHSkoK1Gp1qe87xy8QEZHcTe1av9TXWZz37wo7hig2NhYJCQnw8PCQ5pmbm6N169aIiooCAERFRcHCwkIKQwDg4eEBPT09nD59WmrToUMHKQwBgJeXF65fv44nT54UuO2MjAxoNBqtGxEREb27KmwgSkhIAABYW1trzbe2tpaWJSQkwMrKSmu5gYEBLC0ttdoUtI6Xt/Gq4OBgmJubSzd7e/u33yEiIiKqsCpsINKlwMBApKSkSLf79+/ruiQiIiIqQxU2ENnY2AAAEhMTteYnJiZKy2xsbJCUlKS1PDs7G48fP9ZqU9A6Xt7Gq1QqFdRqtdaNiIiI3l0VNhA5OjrCxsYGkZGR0jyNRoPTp0/Dzc0NAODm5obk5GRER0dLbQ4dOoTc3Fy0bt1aanPs2DFkZWVJbcLDw9GgQQNUrVq1nPaGiIiIKjKdBqK0tDTExMQgJiYGwIuB1DExMYiLi4NCocCUKVOwYMEC/PLLL7h48SJGjBgBOzs76Uy0Ro0aoVu3bhg7dix+//13nDhxApMmTcLgwYNhZ2cHABg6dCiUSiX8/Pxw+fJlbN++HatWrUJAQICO9pqIiIgqGp3+dMeZM2fQuXNnaTovpPj6+iI0NBQzZsxAeno6xo0bh+TkZLRr1w779++HkZGRdJ8tW7Zg0qRJcHd3h56eHvr374+vvvpKWm5ubo6DBw/C398frq6uqF69OubMmaN1rSIiIiKStwpzHaKKjNchIiIiKlu8DhERERGRjjEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkexV6EAUFBQEhUKhdWvYsKG0/Pnz5/D390e1atVQpUoV9O/fH4mJiVrriIuLg4+PD0xMTGBlZYXp06cjOzu7vHeFiIiIKjADXRfwOo0bN0ZERIQ0bWDw/yVPnToVYWFh2LlzJ8zNzTFp0iT069cPJ06cAADk5OTAx8cHNjY2OHnyJOLj4zFixAgYGhpi0aJF5b4vREREVDFV+EBkYGAAGxubfPNTUlLw3XffYevWrejSpQsAYNOmTWjUqBFOnTqFNm3a4ODBg7hy5QoiIiJgbW2N5s2bY/78+Zg5cyaCgoKgVCoL3GZGRgYyMjKkaY1GUzY7R0RERBVChf7KDABu3rwJOzs71KlTB8OGDUNcXBwAIDo6GllZWfDw8JDaNmzYELVq1UJUVBQAICoqCi4uLrC2tpbaeHl5QaPR4PLly4VuMzg4GObm5tLN3t6+jPaOiIiIKoIKHYhat26N0NBQ7N+/H+vWrUNsbCzat2+P1NRUJCQkQKlUwsLCQus+1tbWSEhIAAAkJCRohaG85XnLChMYGIiUlBTpdv/+/dLdMSIiIqpQKvRXZt7e3tL/mzZtitatW8PBwQE7duyAsbFxmW1XpVJBpVKV2fqJiIioYqnQR4heZWFhgfr16+PWrVuwsbFBZmYmkpOTtdokJiZKY45sbGzynXWWN13QuCQiIiKSp0oViNLS0nD79m3Y2trC1dUVhoaGiIyMlJZfv34dcXFxcHNzAwC4ubnh4sWLSEpKktqEh4dDrVbD2dm53OsnIiKiiqlCf2X22WefoWfPnnBwcMCDBw8wd+5c6OvrY8iQITA3N4efnx8CAgJgaWkJtVqNTz75BG5ubmjTpg0AwNPTE87Ozhg+fDhCQkKQkJCA2bNnw9/fn1+JERERkaRCB6I///wTQ4YMwaNHj1CjRg20a9cOp06dQo0aNQAAK1asgJ6eHvr374+MjAx4eXlh7dq10v319fWxd+9eTJgwAW5ubjA1NYWvry/mzZunq10iIiKiCkghhBC6LqKi02g0MDc3R0pKCtRqdamvf0X4jVJfJxERUWUytWv9Ul9ncd6/K9UYIiIiIqKywEBEREREssdARERERLLHQERERESyx0BEREREssdARERERLLHQERERESyx0BEREREssdARERERLLHQERERESyx0BEREREssdARERERLLHQERERESyx0BEREREssdARERERLLHQERERESyx0BEREREssdARERERLLHQERERESyx0BEREREssdARERERLLHQERERESyx0BEREREssdARERERLLHQERERESyx0BEREREssdARERERLLHQERERESyx0BEREREssdARERERLLHQERERESyx0BEREREssdARERERLLHQERERESyx0BEREREssdARERERLLHQERERESyJ6tA9PXXX6N27dowMjJC69at8fvvv+u6JCIiIqoAZBOItm/fjoCAAMydOxdnz55Fs2bN4OXlhaSkJF2XRkRERDomm0C0fPlyjB07FqNGjYKzszPWr18PExMTbNy4UdelERERkY4Z6LqA8pCZmYno6GgEBgZK8/T09ODh4YGoqKh87TMyMpCRkSFNp6SkAAA0Gk2Z1Pc8Pa1M1ktERFRZlMV7bN46hRCvbSuLQPT3338jJycH1tbWWvOtra1x7dq1fO2Dg4PxxRdf5Jtvb29fZjUSERHJ2edluO7U1FSYm5sX2UYWgai4AgMDERAQIE3n5ubi8ePHqFatGhQKRaluS6PRwN7eHvfv34darS7VddP/Yz+XD/Zz+WFflw/2c/koq34WQiA1NRV2dnavbSuLQFS9enXo6+sjMTFRa35iYiJsbGzytVepVFCpVFrzLCwsyrJEqNVq/rGVA/Zz+WA/lx/2dflgP5ePsujn1x0ZyiOLQdVKpRKurq6IjIyU5uXm5iIyMhJubm46rIyIiIgqAlkcIQKAgIAA+Pr6omXLlmjVqhVWrlyJ9PR0jBo1StelERERkY7JJhANGjQIDx8+xJw5c5CQkIDmzZtj//79+QZalzeVSoW5c+fm+4qOShf7uXywn8sP+7p8sJ/LR0XoZ4V4k3PRiIiIiN5hshhDRERERFQUBiIiIiKSPQYiIiIikj0GIiIiIpI9BiIiIiKSPQaicvD111+jdu3aMDIyQuvWrfH7778X2X7nzp1o2LAhjIyM4OLigl9//bWcKq3citPP//73v9G+fXtUrVoVVatWhYeHx2sfF3qhuM/nPNu2bYNCoUCfPn3KtsB3SHH7Ojk5Gf7+/rC1tYVKpUL9+vX5+vEGitvPK1euRIMGDWBsbAx7e3tMnToVz58/L6dqK6djx46hZ8+esLOzg0KhwE8//fTa+xw5cgQtWrSASqVC3bp1ERoaWrZFCipT27ZtE0qlUmzcuFFcvnxZjB07VlhYWIjExMQC2584cULo6+uLkJAQceXKFTF79mxhaGgoLl68WM6VVy7F7eehQ4eKr7/+Wpw7d05cvXpVjBw5Upibm4s///yznCuvXIrbz3liY2PFe++9J9q3by969+5dPsVWcsXt64yMDNGyZUvRvXt3cfz4cREbGyuOHDkiYmJiyrnyyqW4/bxlyxahUqnEli1bRGxsrDhw4ICwtbUVU6dOLefKK5dff/1VzJo1S+zevVsAEHv27Cmy/Z07d4SJiYkICAgQV65cEatXrxb6+vpi//79ZVYjA1EZa9WqlfD395emc3JyhJ2dnQgODi6w/cCBA4WPj4/WvNatW4uPP/64TOus7Irbz6/Kzs4WZmZmYvPmzWVV4juhJP2cnZ0tPvjgA7Fhwwbh6+vLQPSGitvX69atE3Xq1BGZmZnlVeI7obj97O/vL7p06aI1LyAgQLRt27ZM63yXvEkgmjFjhmjcuLHWvEGDBgkvL68yq4tfmZWhzMxMREdHw8PDQ5qnp6cHDw8PREVFFXifqKgorfYA4OXlVWh7Klk/v+rp06fIysqCpaVlWZVZ6ZW0n+fNmwcrKyv4+fmVR5nvhJL09S+//AI3Nzf4+/vD2toaTZo0waJFi5CTk1NeZVc6JennDz74ANHR0dLXanfu3MGvv/6K7t27l0vNcqGL90LZ/HSHLvz999/IycnJ9/Mg1tbWuHbtWoH3SUhIKLB9QkJCmdVZ2ZWkn181c+ZM2NnZ5fsDpP9Xkn4+fvw4vvvuO8TExJRDhe+OkvT1nTt3cOjQIQwbNgy//vorbt26hYkTJyIrKwtz584tj7IrnZL089ChQ/H333+jXbt2EEIgOzsb48ePx+eff14eJctGYe+FGo0Gz549g7Gxcalvk0eISPYWL16Mbdu2Yc+ePTAyMtJ1Oe+M1NRUDB8+HP/+979RvXp1XZfzzsvNzYWVlRW+/fZbuLq6YtCgQZg1axbWr1+v69LeKUeOHMGiRYuwdu1anD17Frt370ZYWBjmz5+v69LoLfEIURmqXr069PX1kZiYqDU/MTERNjY2Bd7HxsamWO2pZP2c58svv8TixYsRERGBpk2blmWZlV5x+/n27du4e/cuevbsKc3Lzc0FABgYGOD69etwcnIq26IrqZI8p21tbWFoaAh9fX1pXqNGjZCQkIDMzEwolcoyrbkyKkk//+tf/8Lw4cMxZswYAICLiwvS09Mxbtw4zJo1C3p6PM5QGgp7L1Sr1WVydAjgEaIypVQq4erqisjISGlebm4uIiMj4ebmVuB93NzctNoDQHh4eKHtqWT9DAAhISGYP38+9u/fj5YtW5ZHqZVacfu5YcOGuHjxImJiYqRbr1690LlzZ8TExMDe3r48y69USvKcbtu2LW7duiWFTgC4ceMGbG1tGYYKUZJ+fvr0ab7QkxdCBX8rvdTo5L2wzIZrkxDixSmdKpVKhIaGiitXrohx48YJCwsLkZCQIIQQYvjw4eKf//yn1P7EiRPCwMBAfPnll+Lq1ati7ty5PO3+DRS3nxcvXiyUSqXYtWuXiI+Pl26pqam62oVKobj9/CqeZfbmitvXcXFxwszMTEyaNElcv35d7N27V1hZWYkFCxboahcqheL289y5c4WZmZn473//K+7cuSMOHjwonJycxMCBA3W1C5VCamqqOHfunDh37pwAIJYvXy7OnTsn7t27J4QQ4p///KcYPny41D7vtPvp06eLq1eviq+//pqn3b8LVq9eLWrVqiWUSqVo1aqVOHXqlLSsY8eOwtfXV6v9jh07RP369YVSqRSNGzcWYWFh5Vxx5VScfnZwcBAA8t3mzp1b/oVXMsV9Pr+Mgah4itvXJ0+eFK1btxYqlUrUqVNHLFy4UGRnZ5dz1ZVPcfo5KytLBAUFCScnJ2FkZCTs7e3FxIkTxZMnT8q/8Erk8OHDBb7m5vWtr6+v6NixY777NG/eXCiVSlGnTh2xadOmMq1RIQSP8REREZG8cQwRERERyR4DEREREckeAxERERHJHgMRERERyR4DEREREckeAxERERHJHgMRERERyR4DEREREckeAxERERHJHgMRERERyR4DEREREcne/wHVGBQtmGPHqwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "l2g_finngen_pics=l2g_max_scores.join(finngen_pics.select(\"studyLocusId\", \"studyId\"), on=\"studyLocusId\", how=\"inner\")\n", + "l2g_finngen_pics.select(\"score\").toPandas().plot.hist(bins=10, alpha=0.5, title=\"l2g scores (top gene assignment), finngen_pics\")\n", + "\n", + "sample_size_quartiles = l2g_finngen_pics.stat.approxQuantile(\"score\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of finngen PICS l2g scores: mean:\", l2g_finngen_pics.select(f.mean(l2g_finngen_pics[\"score\"])).collect()[0][0], \"L.quart: \", sample_size_quartiles[0], \"Median: \", sample_size_quartiles[1], \"U.quart: \", sample_size_quartiles[2])" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Summary of l2g_finngen_susie: mean: 0.5593829938336615 L.quart: 0.2241434007883072 Median: 0.6244931817054749 U.quart: 0.8736903071403503\n" + ] + }, + { + "data": { + "image/png": "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qqlly5Z67bXXtH37dm3evFkDBw5U586d5efnJ0nq0qWLLBaL+vTpo/379+vHH3/Up59+qqFDh9rpqAEAQH5j14/MduzYoWbNmlnvp4eUHj16KCIiQsOHD9f169fVr18/XblyRc8++6xWrlypwoULW9eZN2+eBg4cqODgYDk6Oqpjx46aNm2adbmHh4dWr16tsLAwBQYGqlSpUho9ejSX3AMAACsHwzAMexeR3yUkJMjDw0Px8fFyd3fP8e0XxLktyBvMIcL98LqBx01uvN5l5f07384hAgAAyCsEIgAAYHoEIgAAYHoEIgAAYHoEIgAAYHoEIgAAYHoEIgAAYHoEIgAAYHoEIgAAYHoEIgAAYHoEIgAAYHoEIgAAYHoEIgAAYHrO9i4AAOyNX44HQCACkKMIFwAKIj4yAwAApkcgAgAApkcgAgAApsccIiAfYz4OAOQNzhABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTIxABAADTy9eBaOzYsXJwcLC5Va1a1br81q1bCgsLU8mSJVW0aFF17NhRcXFxNtuIiYlRmzZt5ObmJi8vL7399ttKSUnJ60MBAAD5mLO9C3iYGjVqaM2aNdb7zs7/V/KQIUO0fPlyLVy4UB4eHho4cKA6dOigzZs3S5JSU1PVpk0b+fj4aMuWLTp79qy6d++uQoUK6cMPP8zzYwEAAPlTvg9Ezs7O8vHxydAeHx+vb7/9VvPnz1fz5s0lSbNnz1a1atW0bds2NWjQQKtXr9aBAwe0Zs0aeXt7q06dOho/frxGjBihsWPHymKx5PXhAACAfChff2QmSUePHpWfn58qVqyorl27KiYmRpK0c+dOJScnKyQkxNq3atWqKlu2rLZu3SpJ2rp1q2rVqiVvb29rn9DQUCUkJGj//v333WdiYqISEhJsbgAA4PGVrwNR/fr1FRERoZUrV2rGjBmKjo5Wo0aNdPXqVcXGxspiscjT09NmHW9vb8XGxkqSYmNjbcJQ+vL0ZfczYcIEeXh4WG/+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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "l2g_finngen_susie=l2g_max_scores.join(finngen_susie.select(\"studyLocusId\", \"studyId\"), on=\"studyLocusId\", how=\"inner\")\n", + "l2g_finngen_susie.select(\"score\").toPandas().plot.hist(bins=10, alpha=0.5, title=\"(top gene assignment), l2g_finngen_susie\")\n", + "\n", + "sample_size_quartiles = l2g_finngen_susie.stat.approxQuantile(\"score\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of l2g_finngen_susie: mean:\", l2g_finngen_susie.select(f.mean(l2g_finngen_susie[\"score\"])).collect()[0][0], \"L.quart: \", sample_size_quartiles[0], \"Median: \", sample_size_quartiles[1], \"U.quart: \", sample_size_quartiles[2])" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Summary of l2g_gwas_curated PICS l2g scores: mean: 0.5761322645683256 L.quart: 0.22704362869262695 Median: 0.653652012348175 U.quart: 0.8937538862228394\n" + ] + }, + { + "data": { + "image/png": "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/361a9dO7u7ucnNzU4kSJfTiiy9K+t/rNSAgQOHh4frqq6/k6empkJAQTZo0KVPXU6UGYqvvkrxzbFItWrRIdevWlYuLi4oVK2Ze2pCRmjPzmj116pTKlSuX5nWW3nEyo+48bhYuXFi+vr73PG4eO3ZMFStWtPnP1J2yckx5FHBNFSxRvHhxJSUl6erVq+a1L9nN6je4lJQUVa9eXWPGjEl3+Z1v+Le/+d0u9Q04dQLUF1980ebsw+1Sry9Lz7Fjx9SsWTNVqlRJY8aMkb+/v5ycnLRkyRKNHTvW3L6dnZ2+//57/f777/r111+1fPlyvfzyyxo9erR+//13FS5cWF5eXtq1a5eWL1+upUuXaunSpZoxY4a6detm6V1t9xuT+/XLjjHNaE33khrAPD09M7xORsTExKhFixa6cuWKNmzYID8/P0u3n1W1atWSi4uL1q9fr1KlSsnLy0sVKlRQw4YNNXnyZMXHx2vDhg1q166duc6VK1fUuHFjubm56T//+Y/Kli0rFxcX7dixQwMGDLCZEHj06NHq0aOHfv75Z61YsUJvvvmmea1ketfqZdW9rhlKz+1npFJt2LBBbdq0UaNGjTR58mT5+vqqQIECmjFjhubMmXPfGh70OJBX5dQxJb8hVMESlSpVknTrLsDbDxB3O6iVLl1aknT48OE0yw4dOiRPT08VKlTIpv3o0aM2/5P8888/lZKSctezJrfv588//1STJk3M9qSkJJ08edKm1rJly2r37t1q1qyZJYGtRIkSKlKkiJKTk23uisyoX3/9VfHx8frll19szrbc+TFkqrp166pu3br6+OOPNWfOHHXt2lVz587VK6+8IunWbdOtW7dW69atlZKSor59++qLL77QBx98kO7ZisyMXU550DG9m/v9vk+cOCF7e3vzrKUVbt68qdatW+vIkSNauXJluh873f47uP21/88//2TqTFvqtlJSUnTixAmbsxd33p0p3XqtpN7pWapUKfMj04YNGyo+Pl6zZ89WdHS0GjVqZK6zdu1a/fPPP/rxxx9t2k+cOJFuPdWrV1f16tU1ePBgbdq0SfXr19fUqVP10Ucf3fe5PPbYY5J035nuixYtqitXrqRpTz0DmBE//PCDXFxctHz5cjk7O5vtM2bMSNM3vddRZl6zpUuX1r59+2QYhs220jtOZtTRo0dt/n6vXbumc+fO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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "l2g_gwas_curated=l2g_max_scores.join(gwascat_curated.select(\"studyLocusId\", \"studyId\"), on=\"studyLocusId\", how=\"inner\")\n", + "l2g_gwas_curated.select(\"score\").toPandas().plot.hist(bins=10, alpha=0.5, title=\"(top gene assignment), l2g_gwas_curated_pics\")\n", + "\n", + "sample_size_quartiles = l2g_gwas_curated.stat.approxQuantile(\"score\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of l2g_gwas_curated PICS l2g scores: mean:\", l2g_gwas_curated.select(f.mean(l2g_gwas_curated[\"score\"])).collect()[0][0], \"L.quart: \", sample_size_quartiles[0], \"Median: \", sample_size_quartiles[1], \"U.quart: \", sample_size_quartiles[2])" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Summary of l2g_gwas_sumstats PICS l2g scores: mean: 0.5751686123272477 L.quart: 0.23706066608428955 Median: 0.647024929523468 U.quart: 0.8808161020278931\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAGzCAYAAAAyiiOsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABKY0lEQVR4nO3deVxV1f7/8TeDB1AEHEGvOGSa4JBXTCVTr0pSkZVaaZmRaWWiqTSYZWrDzek65lRWYrfMoWzS1Jw1xUocMsdMSr0KYio4gsD6/eGX/fMI6oYY7fV8PM6jztrrrP05ywPnzTp77+NijDECAADANbkWdQEAAAAlAaEJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCYVizJgxqlevnjIzM4u6FOTSmjVr5OLiojVr1hR1KcXGrl275O7url9++eUvjePi4qIRI0bkT1EAChyhCQUuJSVFo0eP1uDBg+Xqeukld+7cOY0YMYI3YhRrc+bM0cSJE7O1BwcHKyIiQsOGDcvX/f3000/q16+f6tevrzJlyqh69ep6+OGHtW/fvnzdD4qPXbt2acSIEfr999/zPMbVXqfIf4QmFLgPP/xQ6enpeuSRR6y2c+fO6fXXXyc0lQCtW7fW+fPn1bp166IupdBd682oT58++uKLL/Tbb7/l2/5Gjx6tzz//XO3bt9ekSZP09NNPa926dWrSpMlfXtVC8bRr1y69/vrrhKYSgtCEAjdr1izdd9998vT0LOpSkAeurq7y9PS0VglxSVhYmMqVK6fZs2fn25jR0dH6448/NHnyZPXu3VtDhw7V+vXrlZ6erlGjRuXbfgDkkQEK0IEDB4wkExMTY7XFx8cbSdluw4cPt/qsXLnS3HHHHaZ06dLG19fX3HfffWbXrl1OYw8fPtxIMrt37zYPPfSQKVu2rClfvrx57rnnzPnz523VN2XKFFOrVi3j6elpbrvtNrNu3TrTpk0b06ZNG6d+Fy5cMMOGDTO1a9c2DofDVKtWzbz44ovmwoULTv0kmaioKPPFF1+Y+vXrG4fDYYKDg82SJUuy7fvw4cOmZ8+epnLlyla/Dz74wFbdH374oWnbtq2pVKmScTgcJigoyEybNi1bv59++sl06NDBVKhQwXh6epqaNWuanj17OvX59NNPTZMmTYy3t7cpW7asadCggZk4caK1ffXq1UaSWb16da7nLuux8+bNM2+99Zb5xz/+YTw8PEy7du3Mr7/+6jRemzZtTP369c327dtN69atjZeXl6ldu7ZZsGCBMcaYNWvWmGbNmhlPT09Tt25ds3z58jzNqd2a2rRpk+01WqNGDaexOnXqZBo1apT9H8imK1/3V9OkSRPTpEkTp7aMjAwzfPhwU6VKFePl5WX+9a9/mZ07d5oaNWqYyMjIXNVx7tw5079/f1OhQgXj7e1tOnbsaA4fPuxU3/bt240k89VXX1mP27x5s5Fk/vnPfzqNd9ddd5lmzZpZ97/88ktzzz33mCpVqhiHw2Fuuukm88Ybb5j09HSnx+3bt8907tzZ+Pv7Gw8PD/OPf/zDdO3a1Zw6dcr2czl69Kh54oknzD/+8Q/jcDhMQECAue+++0x8fLzV52rzfuXczZo1y0gy69evN/379zcVK1Y0vr6+5umnnzapqanm5MmTpkePHsbPz8/4+fmZF1980WRmZjqNea2fr6zxr7xl/azZmbfrvU4nT55sgoODjZeXl/Hz8zMhISHmk08+sT2fcOZeGMEMf18bN26UJDVp0sRqq1SpkqZPn65nn31WnTp1UufOnSVJjRo1kiStWLFCd999t2666SaNGDFC58+f1zvvvKOWLVtqy5YtqlmzptM+Hn74YdWsWVMjR47Upk2bNHnyZJ08eVIfffTRNWubPn26+vXrp1atWmnQoEH6/fff9cADD6hcuXKqVq2a1S8zM1P33Xefvv/+ez399NMKCgrSjh07NGHCBO3bt09ffvml07jff/+9Fi5cqL59+6ps2bKaPHmyunTpooMHD6pChQqSpMTERLVo0UIuLi7q16+fKlWqpCVLlqhXr15KSUnRwIEDr1t7/fr1dd9998nd3V3ffPON+vbtq8zMTEVFRUmSjh07pg4dOqhSpUp6+eWX5efnp99//10LFy60xlm+fLkeeeQRtW/fXqNHj5Yk7d69Wxs2bNCAAQP+8txlGTVqlFxdXfXCCy8oOTlZY8aMUffu3fXDDz849Tt58qTuvfdedevWTQ899JCmT5+ubt266ZNPPtHAgQPVp08fPfrooxo7dqwefPBBHTp0SGXLls3TnF6vpldffVXJyck6fPiwJkyYIEny9vZ2GiMkJERfffWVUlJS5OPjc81/s7wyxigxMVH169d3ah8yZIjGjBmjjh07Kjw8XNu3b1d4eLguXLiQ63088cQTmj9/vnr06KEWLVpo7dq1ioiIcOrToEED+fn5ad26dbrvvvskSevXr5erq6u2b99uzUFmZqY2btyop59+2npsTEyMvL29FR0dLW9vb61atUrDhg1TSkqKxo4dK0lKS0tTeHi4UlNT1b9/fwUEBOh///ufFi1apFOnTsnX19fWc+nSpYt27typ/v37q2bNmjp27JiWL1+ugwcPZvvdYVdWPa+//ro2bdqk9957T35+ftq4caOqV6+ut99+W99++63Gjh2rBg0a6PHHH5d0/Z+v1q1b67nnntPkyZP1yiuvKCgoSJKs/9qZt2u9TmfOnKnnnntODz74oAYMGKALFy7o559/1g8//KBHH300T3Pxt1fUqQ03tqFDhxpJ5vTp007tSUlJV/1rr3HjxqZy5crmzz//tNq2b99uXF1dzeOPP261Za003XfffU6P79u3r5Fktm/fftW6UlNTTYUKFcxtt91mLl68aLXHxMQYSU6rJf/973+Nq6urWb9+vdMYM2bMMJLMhg0brDZJxuFwmP379zvVLsm88847VluvXr1MlSpVzPHjx53G7Natm/H19TXnzp27au3GmBy3h4eHm5tuusm6/8UXXxhJ5qeffrrqOAMGDDA+Pj7Z/uK/3JUrTbmZu6zHBgUFmdTUVKt90qRJRpLZsWOH1Zb1F/OcOXOstj179hhJxtXV1WzatMlqX7ZsmZFkZs2aZbXZndPc1BQREZFtdelyc+bMMZLMDz/8cNU+13K1n4HL/fe//zWSnFbMEhISjLu7u3nggQec+o4YMcJIytVKU1xcnJFkBg4c6NT+xBNPZKsvIiLCaQWpc+fOpnPnzsbNzc1aTd2yZUu2FamcXq/PPPOMKV26tLVau3XrViPJWlnMi5MnTxpJZuzYsdfsd7V5v9pKU3h4uNMKUmhoqHFxcTF9+vSx2tLT0021atWcXv92fr4WLFiQ40quMfbmzZirv07vv/9+U79+/avuG7nHQQooUH/++afc3d2z/YV+NUePHtW2bdv0xBNPqHz58lZ7o0aNdOedd+rbb7/N9pislZUs/fv3l6Qc+2bZvHmz/vzzTz311FNyd///C67du3dXuXLlnPouWLBAQUFBqlevno4fP27d2rVrJ0lavXq1U/+wsDDVrl3bqXYfHx8dOHBA0qWVg88//1wdO3aUMcZpzPDwcCUnJ2vLli3XnCcvLy/r/5OTk3X8+HG1adNGBw4cUHJysiTJz89PkrRo0SJdvHgxx3H8/Px09uxZLV++/Jr7u1xu5i5Lz5495XA4rPutWrWSJGtOsnh7e6tbt27W/VtuuUV+fn4KCgpS8+bNrfas//8rc2q3pmvJer7Hjx+3/Zjc2LNnj6KiohQaGqrIyEirfeXKlUpPT1ffvn2d+me99nNj6dKlkmRrrFatWmnLli06e/aspEurqvfcc48aN26s9evXS7q0+uTi4qI77rjDetzlr9fTp0/r+PHjatWqlc6dO6c9e/ZIkrWStGzZMp07dy7XzyNrPw6HQ2vWrNHJkyfzNEZOevXqJRcXF+t+8+bNZYxRr169rDY3Nzc1bdrU6fWTl5+vy9mZt2vx8/PT4cOH9dNPP+Vp/8iO0IRi5Y8//pB06c3ySkFBQTp+/Lj1CztLnTp1nO7Xrl1brq6u1zwbJWs/N998s1O7u7t7tiX8X3/9VTt37lSlSpWcbnXr1pV06WOwy1WvXj3b/sqVK2f9Ek9KStKpU6f03nvvZRuzZ8+eOY55pQ0bNigsLExlypSRn5+fKlWqpFdeeUWSrNDUpk0bdenSRa+//roqVqyo+++/X7NmzVJqaqo1Tt++fVW3bl3dfffdqlatmp588knrTTQ/5u5qc5IVNq58Y6tWrZrTm5N06c00MDAwW9vlj8/LnNqt6VqMMZKUreb8kJCQoIiICPn6+uqzzz6Tm5ubte1q/wbly5e/anC9mj/++EOurq6qVauWU/uVY0uXQlN6erpiY2O1d+9eHTt2TK1atVLr1q2dQlNwcLDTHz07d+5Up06d5OvrKx8fH1WqVEmPPfaYpP//eq1Vq5aio6P1/vvvq2LFigoPD9fUqVOt7XZ4eHho9OjRWrJkifz9/dW6dWuNGTNGCQkJuZqTK135Wsl6/eX0urz89ZOXn6/L2Zm3axk8eLC8vb3VrFkz1alTR1FRUdqwYYPt/SM7jmlCgapQoYLS09N1+vRp69iTgpbfb2CZmZlq2LChxo8fn+P2K39xXv7mdrmsN9isC3w+9thjTqsHl8s6visnv/32m9q3b6969epp/PjxCgwMlMPh0LfffqsJEyZY47u4uOizzz7Tpk2b9M0332jZsmV68sknNW7cOG3atEne3t6qXLmytm3bpmXLlmnJkiVasmSJZs2apccffzxfzwq73pxcr19BzKndmq4l6w2yYsWKth9jR3Jysu6++26dOnVK69evV9WqVfN1/Lxq2rSpPD09tW7dOlWvXl2VK1dW3bp11apVK02bNk2pqalav369OnXqZD3m1KlTatOmjXx8fPTGG2+odu3a8vT01JYtWzR48GCnC96OGzdOTzzxhL766it99913eu6556xjFXM6Vi4nAwcOVMeOHfXll19q2bJleu211zRy5EitWrVK//znP6/52IyMjBzbc/O6vPz181d+vnIzb1cTFBSkvXv3atGiRVq6dKk+//xzTZs2TcOGDdPrr79+3ccjO0ITClS9evUkSfHx8U5vWlcLNjVq1JAk7d27N9u2PXv2qGLFiipTpoxT+6+//ur0V/L+/fuVmZl5zYM+s/azf/9+tW3b1mpPT0/X77//7lRr7dq1tX37drVv3z5fAlmlSpVUtmxZZWRkKCwsLNeP/+abb5Samqqvv/7a6S/gKz8mzNKiRQu1aNFC//73vzVnzhx1795dc+fOVe/evSVJDodDHTt2VMeOHZWZmam+ffvq3Xff1WuvvZbjakNu5q6w/NU5vZrr/XvHx8fL1dXVWnXMDxcuXFDHjh21b98+rVixQsHBwdn6XP5vcPlr/88//8z1x1I1atRQZmam4uPjnVZt9+/fn62vw+FQs2bNtH79elWvXt36SLNVq1ZKTU3VJ598osTERKdreq1Zs0Z//vmnFi5c6NQeHx+fYz0NGzZUw4YNNXToUG3cuFEtW7bUjBkz9NZbb9l+TrVr19bzzz+v559/Xr/++qsaN26scePG6eOPP5Z0aVXx1KlTTo9JS0vT0aNHbe/Druv9fF3tNZabebvW67RMmTLq2rWrunbtqrS0NHXu3Fn//ve/NWTIEC4Dkwd8PIcCFRoaKunScTCXK126tCRl+8VVpUoVNW7cWLNnz3ba9ssvv+i7777TPffck20fU6dOdbr/zjvvSJLuvvvuq9bVtGlTVahQQTNnzlR6errV/sknn2R703n44Yf1v//9TzNnzsw2zvnz57N9XHg9bm5u6tKliz7//PMcL1iYlJR03cdLzn/RJicna9asWU79Tp48mW3VpHHjxpJkfUT3559/Om13dXW1Qs/lH+NdLjdzV1j+6pxeTZkyZa75MUhcXJzq169v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Dx5UrVq1srXXqFFDBw8ezNVYDodDN998syQpJCREP/30kyZNmqSuXbsqLS1Np06dclptSkxMVEBAgCQpICAg21luWWfXXd7nyjPuEhMT5ePjIy8vL7m5ucnNzS3HPllj5MTDw0MeHh65eq4AAKDkytNKU+XKlfXzzz9na9++fbsqVKjwlwrKzMxUamqqQkJCVKpUKa1cudLatnfvXh08eFChoaGSpNDQUO3YscPpLLfly5fLx8dHwcHBVp/Lx8jqkzWGw+FQSEiIU5/MzEytXLnS6gMAAJCnlaZHHnlEzz33nMqWLavWrVtLktauXasBAwaoW7dutscZMmSI7r77blWvXl2nT5/WnDlztGbNGi1btky+vr7q1auXoqOjVb58efn4+Kh///4KDQ1VixYtJEkdOnRQcHCwevTooTFjxighIUFDhw5VVFSUtQrUp08fTZkyRS+99JKefPJJrVq1SvPnz9fixYutOqKjoxUZGammTZuqWbNmmjhxos6ePauePXvmZXoAAMANKE+h6c0339Tvv/+u9u3by9390hCZmZl6/PHHc3VM07Fjx6wrh/v6+qpRo0ZatmyZ7rzzTknShAkT5Orqqi5duig1NVXh4eGaNm2a9Xg3NzctWrRIzz77rEJDQ1WmTBlFRkbqjTfesPrUqlVLixcv1qBBgzRp0iRVq1ZN77//vsLDw60+Xbt2VVJSkoYNG6aEhAQ1btxYS5cuzXZwOAAA+PvK03Wasuzbt0/bt2+Xl5eXGjZsqBo1auRnbSUK12kCAJQkXKfpkty8f+dppSlL3bp1Vbdu/j8BAACA4iZPoSkjI0MxMTFauXKljh07pszMTKftq1atypfiAAAAios8haYBAwYoJiZGERERatCggVxcXPK7LgAAgGIlT6Fp7ty5mj9/vu655578rgcAAKBYytN1mi6/ICUAAMDfQZ5C0/PPP69JkybpL5x4BwAAUKLk6eO577//XqtXr9aSJUtUv359lSpVymn7woUL86U4AACA4iJPocnPz0+dOnXK71oAAChxSuL1jpA3eQpNs2bNyu86AAAAirU8HdMkSenp6VqxYoXeffddnT59WpJ05MgRnTlzJt+KAwAAKC7ytNL0xx9/6K677tLBgweVmpqqO++8U2XLltXo0aOVmpqqGTNm5HedAAAARSpPK00DBgxQ06ZNdfLkSXl5eVntnTp10sqVK/OtOAAAgOIiTytN69ev18aNG+VwOJzaa9asqf/973/5UhgAAEBxkqeVpszMTGVkZGRrP3z4sMqWLfuXiwIAAChu8hSaOnTooIkTJ1r3XVxcdObMGQ0fPpyvVgEAADekPH08N27cOIWHhys4OFgXLlzQo48+ql9//VUVK1bUp59+mt81AgAAFLk8haZq1app+/btmjt3rn7++WedOXNGvXr1Uvfu3Z0ODAcAALhR5Ck0SZK7u7see+yx/KwFAACg2MpTaProo4+uuf3xxx/PUzEAAADFVZ5C04ABA5zuX7x4UefOnZPD4VDp0qUJTQAA4IaTp7PnTp486XQ7c+aM9u7dqzvuuIMDwQEAwA0pz989d6U6depo1KhR2VahAAAAbgT5FpqkSweHHzlyJD+HBAAAKBbydEzT119/7XTfGKOjR49qypQpatmyZb4UBgAAUJzkKTQ98MADTvddXFxUqVIltWvXTuPGjcuPugAAAIqVPIWmzMzM/K4DAACgWMvXY5oAAABuVHlaaYqOjrbdd/z48XnZBQAAQLGSp9C0detWbd26VRcvXtQtt9wiSdq3b5/c3NzUpEkTq5+Li0v+VAkAAFDE8hSaOnbsqLJly2r27NkqV66cpEsXvOzZs6datWql559/Pl+LBAAAKGp5OqZp3LhxGjlypBWYJKlcuXJ66623OHsOAADckPIUmlJSUpSUlJStPSkpSadPn/7LRQEAABQ3eQpNnTp1Us+ePbVw4UIdPnxYhw8f1ueff65evXqpc+fO+V0jAABAkcvTMU0zZszQCy+8oEcffVQXL168NJC7u3r16qWxY8fma4EAAADFQZ5CU+nSpTVt2jSNHTtWv/32mySpdu3aKlOmTL4WBwAAUFz8pYtbHj16VEePHlWdOnVUpkwZGWPyqy4AAIBiJU+h6c8//1T79u1Vt25d3XPPPTp69KgkqVevXlxuAAAA3JDyFJoGDRqkUqVK6eDBgypdurTV3rVrVy1dujTfigMAACgu8nRM03fffadly5apWrVqTu116tTRH3/8kS+FAQAAFCd5Ck1nz551WmHKcuLECXl4ePzlopDdhOX7irqEv4VBd9Yt6hIAAMVUnj6ea9WqlT766CPrvouLizIzMzVmzBi1bds234oDAAAoLvK00jRmzBi1b99emzdvVlpaml566SXt3LlTJ06c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4uKigQMH6q233tLXX3+tHTt26PHHH1fVqlWtM+yCgoJ011136amnntKPP/6oDRs2qF+/furWrZuqVq0qSXr00UflcDjUq1cv7dy5U/PmzdOkSZMUHR1t1TFgwAAtXbpU48aN0549ezRixAht3rxZ/fr1K+wpAQAAxZR7Ue588+bNatu2rXU/K8hERkYqJiZGL730ks6ePaunn35ap06d0h133KGlS5fK09PTeswnn3yifv36qX379nJ1dVWXLl00efJka7uvr6++++47RUVFKSQkRBUrVtSwYcOcruV0++23a86cORo6dKheeeUV1alTR19++aUaNGhQCLMAAABKgmJznaaSjus0AQBQsLhOEwAAQAlAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdB0halTp6pmzZry9PRU8+bN9eOPPxZ1SQAAoBggNF1m3rx5io6O1vDhw7VlyxbdeuutCg8P17Fjx4q6NAAAUMQITZcZP368nnrqKfXs2VPBwcGaMWOGSpcurQ8//LCoSwMAAEXMvagLKC7S0tIUFxenIUOGWG2urq4KCwtTbGxstv6pqalKTU217icnJ0uSUlJSCqS+C2fPFMi4AACUFAXxHps1pjHmun0JTf/n+PHjysjIkL+/v1O7v7+/9uzZk63/yJEj9frrr2drDwwMLLAaAQD4O3ulAMc+ffq0fH19r9mH0JRHQ4YMUXR0tHU/MzNTJ06cUIUKFeTi4pJv+0lJSVFgYKAOHTokHx+ffBsX2THX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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "l2g_gwas_sumstats=l2g_max_scores.join(gwascat_sumstats.select(\"studyLocusId\", \"studyId\"), on=\"studyLocusId\", how=\"inner\")\n", + "l2g_gwas_sumstats.select(\"score\").toPandas().plot.hist(bins=10, alpha=0.5, title=\"(top gene assignment), l2g_gwas_sumstats\")\n", + "\n", + "sample_size_quartiles = l2g_gwas_sumstats.stat.approxQuantile(\"score\", [0.25, 0.5, 0.75], 0.01)\n", + "print(\"Summary of l2g_gwas_sumstats PICS l2g scores: mean:\", l2g_gwas_sumstats.select(f.mean(l2g_gwas_sumstats[\"score\"])).collect()[0][0], \"L.quart: \", sample_size_quartiles[0], \"Median: \", sample_size_quartiles[1], \"U.quart: \", sample_size_quartiles[2])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "gentropy-NMtW8s8F-py3.10", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/poetry.lock b/poetry.lock index f1b435867..8a3664c64 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiodns" @@ -1203,6 +1203,25 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} +[[package]] +name = "click-option-group" +version = "0.5.6" +description = "Option groups missing in Click" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "click-option-group-0.5.6.tar.gz", hash = "sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777"}, + {file = "click_option_group-0.5.6-py3-none-any.whl", hash = "sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7"}, +] + +[package.dependencies] +Click = ">=7.0,<9" + +[package.extras] +docs = ["Pallets-Sphinx-Themes", "m2r2", "sphinx"] +tests = ["pytest"] +tests-cov = ["coverage", "coveralls", "pytest", "pytest-cov"] + [[package]] name = "clickclick" version = "20.10.2" @@ -1627,21 +1646,27 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] [[package]] name = "deptry" -version = "0.12.0" +version = "0.16.1" description = "A command line utility to check for unused, missing and transitive dependencies in a Python project." optional = false -python-versions = ">=3.8,<4.0" +python-versions = ">=3.8" files = [ - {file = "deptry-0.12.0-py3-none-any.whl", hash = "sha256:69c801a6ae1b39c7b8e0daf40dbe8b75f1f161277d206dd8f921f32cd22dad91"}, - {file = "deptry-0.12.0.tar.gz", hash = "sha256:ac3cd32d149c92a9af12f63cd9486ddd1760f0277ed0cf306c6ef0388f57ff0a"}, + {file = "deptry-0.16.1-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:29ed8ae61b8f5664dd484717c79eef7ec66d965940efd828fca0d3c09220a1db"}, + {file = "deptry-0.16.1-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:738a772b538f51e9a7bb8d5cb9a61cfea8794a79371d171919b01cff0dc895bf"}, + {file = "deptry-0.16.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56b78f7c860def8000e93f88345a24809f1b91e2f7836ac9a08285cb405e2762"}, + {file = "deptry-0.16.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3e86a04ea87ddece0f68ba204feb950f588205808c8320e6628300f03ff66dc"}, + {file = "deptry-0.16.1-cp38-abi3-win_amd64.whl", hash = "sha256:01b5098739a56c93f3e1e40efec5f20452f22a9a8436a59809d46201fcb94bcf"}, + {file = "deptry-0.16.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7e29dc4c1bbb933c9482e8cef85fafe2be7f46aeb90a8a07ba5f2b22af60876f"}, + {file = "deptry-0.16.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8dfab68c247566c87a40f55f405be8549ffe4cea0b9b5384b7ae73a6f1d5cd1"}, + {file = "deptry-0.16.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1228493926b6e59cd2df7cb6016e10c255553cc31db24edcf7fc8d5474b81be6"}, + {file = "deptry-0.16.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:99c3ac60b78ad1b8fb9844c25393e7ebc969cc950601ce3c050f56d196da5a79"}, + {file = "deptry-0.16.1.tar.gz", hash = "sha256:39fb62da4a8f4d17ed282310f7bcaadec55a95a8c471b01e0fcdf5351a7ac323"}, ] [package.dependencies] -chardet = ">=4.0.0" -click = ">=8.0.0,<9.0.0" +click = ">=8.0.0,<9" colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\""} -pathspec = ">=0.9.0" -tomli = {version = ">=2.0.1,<3.0.0", markers = "python_version < \"3.11\""} +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} [[package]] name = "dill" @@ -1765,13 +1790,13 @@ test = ["pytest (>=6)"] [[package]] name = "execnet" -version = "2.0.2" +version = "2.1.1" description = "execnet: rapid multi-Python deployment" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"}, - {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"}, + {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, + {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, ] [package.extras] @@ -3426,6 +3451,156 @@ files = [ {file = "google_re2-1.1-3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d140c7b9395b4d1e654127aa1c99bcc603ed01000b7bc7e28c52562f1894ec12"}, {file = "google_re2-1.1-3-cp39-cp39-win32.whl", hash = "sha256:80c5fc200f64b2d903eeb07b8d6cefc620a872a0240c7caaa9aca05b20f5568f"}, {file = "google_re2-1.1-3-cp39-cp39-win_amd64.whl", hash = "sha256:9eb6dbcee9b5dc4069bbc0634f2eb039ca524a14bed5868fdf6560aaafcbca06"}, + {file = "google_re2-1.1-4-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0db114d7e1aa96dbcea452a40136d7d747d60cbb61394965774688ef59cccd4e"}, + {file = "google_re2-1.1-4-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:82133958e003a1344e5b7a791b9a9dd7560b5c8f96936dbe16f294604524a633"}, + {file = "google_re2-1.1-4-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:9e74fd441d1f3d917d3303e319f61b82cdbd96b9a5ba919377a6eef1504a1e2b"}, + {file = "google_re2-1.1-4-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:734a2e7a4541c57253b5ebee24f3f3366ba3658bcad01da25fb623c78723471a"}, + {file = "google_re2-1.1-4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:d88d5eecbc908abe16132456fae13690d0508f3ac5777f320ef95cb6cab9a961"}, + {file = "google_re2-1.1-4-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:b91db80b171ecec435a07977a227757dd487356701a32f556fa6fca5d0a40522"}, + {file = "google_re2-1.1-4-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b23129887a64bb9948af14c84705273ed1a40054e99433b4acccab4dcf6a226"}, + {file = "google_re2-1.1-4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5dc1a0cc7cd19261dcaf76763e2499305dbb7e51dc69555167cdb8af98782698"}, + {file = "google_re2-1.1-4-cp310-cp310-win32.whl", hash = "sha256:3b2ab1e2420b5dd9743a2d6bc61b64e5f708563702a75b6db86637837eaeaf2f"}, + {file = "google_re2-1.1-4-cp310-cp310-win_amd64.whl", hash = "sha256:92efca1a7ef83b6df012d432a1cbc71d10ff42200640c0f9a5ff5b343a48e633"}, + {file = "google_re2-1.1-4-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:854818fd4ce79787aca5ba459d6e5abe4ca9be2c684a5b06a7f1757452ca3708"}, + {file = "google_re2-1.1-4-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:4ceef51174b6f653b6659a8fdaa9c38960c5228b44b25be2a3bcd8566827554f"}, + {file = "google_re2-1.1-4-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:ee49087c3db7e6f5238105ab5299c09e9b77516fe8cfb0a37e5f1e813d76ecb8"}, + {file = "google_re2-1.1-4-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:dc2312854bdc01410acc5d935f1906a49cb1f28980341c20a68797ad89d8e178"}, + {file = "google_re2-1.1-4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0dc0d2e42296fa84a3cb3e1bd667c6969389cd5cdf0786e6b1f911ae2d75375b"}, + {file = "google_re2-1.1-4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6bf04ced98453b035f84320f348f67578024f44d2997498def149054eb860ae8"}, + {file = "google_re2-1.1-4-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d6b6ef11dc4ab322fa66c2f3561925f2b5372a879c3ed764d20e939e2fd3e5f"}, + {file = "google_re2-1.1-4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0dcde6646fa9a97fd3692b3f6ae7daf7f3277d7500b6c253badeefa11db8956a"}, + {file = "google_re2-1.1-4-cp311-cp311-win32.whl", hash = "sha256:5f4f0229deb057348893574d5b0a96d055abebac6debf29d95b0c0e26524c9f6"}, + {file = "google_re2-1.1-4-cp311-cp311-win_amd64.whl", hash = "sha256:4713ddbe48a18875270b36a462b0eada5e84d6826f8df7edd328d8706b6f9d07"}, + {file = "google_re2-1.1-4-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:40a698300b8faddbb325662973f839489c89b960087060bd389c376828978a04"}, + {file = "google_re2-1.1-4-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:103d2d7ac92ba23911a151fd1fc7035cbf6dc92a7f6aea92270ebceb5cd5acd3"}, + {file = "google_re2-1.1-4-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:51fb7182bccab05e8258a2b6a63dda1a6b4a9e8dfb9b03ec50e50c49c2827dd4"}, + {file = "google_re2-1.1-4-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:65383022abd63d7b620221eba7935132b53244b8b463d8fdce498c93cf58b7b7"}, + {file = "google_re2-1.1-4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:396281fc68a9337157b3ffcd9392c6b7fcb8aab43e5bdab496262a81d56a4ecc"}, + {file = "google_re2-1.1-4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:8198adcfcff1c680e052044124621730fc48d08005f90a75487f5651f1ebfce2"}, + {file = "google_re2-1.1-4-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:81f7bff07c448aec4db9ca453d2126ece8710dbd9278b8bb09642045d3402a96"}, + {file = "google_re2-1.1-4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7dacf730fd7d6ec71b11d6404b0b26e230814bfc8e9bb0d3f13bec9b5531f8d"}, + {file = "google_re2-1.1-4-cp312-cp312-win32.whl", hash = "sha256:8c764f62f4b1d89d1ef264853b6dd9fee14a89e9b86a81bc2157fe3531425eb4"}, + {file = "google_re2-1.1-4-cp312-cp312-win_amd64.whl", hash = "sha256:0be2666df4bc5381a5d693585f9bbfefb0bfd3c07530d7e403f181f5de47254a"}, + {file = "google_re2-1.1-4-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:5cb1b63a0bfd8dd65d39d2f3b2e5ae0a06ce4b2ce5818a1d1fc78a786a252673"}, + {file = "google_re2-1.1-4-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:e41751ce6b67a95230edd0772226dc94c2952a2909674cd69df9804ed0125307"}, + {file = "google_re2-1.1-4-cp38-cp38-macosx_13_0_arm64.whl", hash = "sha256:b998cfa2d50bf4c063e777c999a7e8645ec7e5d7baf43ad71b1e2e10bb0300c3"}, + {file = "google_re2-1.1-4-cp38-cp38-macosx_13_0_x86_64.whl", hash = "sha256:226ca3b0c2e970f3fc82001ac89e845ecc7a4bb7c68583e7a76cda70b61251a7"}, + {file = "google_re2-1.1-4-cp38-cp38-macosx_14_0_arm64.whl", hash = "sha256:9adec1f734ebad7c72e56c85f205a281d8fe9bf6583bc21020157d3f2812ce89"}, + {file = "google_re2-1.1-4-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:9c34f3c64ba566af967d29e11299560e6fdfacd8ca695120a7062b6ed993b179"}, + {file = "google_re2-1.1-4-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1b85385fe293838e0d0b6e19e6c48ba8c6f739ea92ce2e23b718afe7b343363"}, + {file = "google_re2-1.1-4-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4694daa8a8987cfb568847aa872f9990e930c91a68c892ead876411d4b9012c3"}, + {file = "google_re2-1.1-4-cp38-cp38-win32.whl", hash = "sha256:5e671e9be1668187e2995aac378de574fa40df70bb6f04657af4d30a79274ce0"}, + {file = "google_re2-1.1-4-cp38-cp38-win_amd64.whl", hash = "sha256:f66c164d6049a8299f6dfcfa52d1580576b4b9724d6fcdad2f36f8f5da9304b6"}, + {file = "google_re2-1.1-4-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:25cb17ae0993a48c70596f3a3ef5d659638106401cc8193f51c0d7961b3b3eb7"}, + {file = "google_re2-1.1-4-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:5f101f86d14ca94ca4dcf63cceaa73d351f2be2481fcaa29d9e68eeab0dc2a88"}, + {file = "google_re2-1.1-4-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:4e82591e85bf262a6d74cff152867e05fc97867c68ba81d6836ff8b0e7e62365"}, + {file = "google_re2-1.1-4-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:1f61c09b93ffd34b1e2557e5a9565039f935407a5786dbad46f64f1a484166e6"}, + {file = "google_re2-1.1-4-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:12b390ad8c7e74bab068732f774e75e0680dade6469b249a721f3432f90edfc3"}, + {file = "google_re2-1.1-4-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:1284343eb31c2e82ed2d8159f33ba6842238a56782c881b07845a6d85613b055"}, + {file = "google_re2-1.1-4-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c7b38e0daf2c06e4d3163f4c732ab3ad2521aecfed6605b69e4482c612da303"}, + {file = "google_re2-1.1-4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f4d4f0823e8b2f6952a145295b1ff25245ce9bb136aff6fe86452e507d4c1dd"}, + {file = "google_re2-1.1-4-cp39-cp39-win32.whl", hash = "sha256:1afae56b2a07bb48cfcfefaa15ed85bae26a68f5dc7f9e128e6e6ea36914e847"}, + {file = "google_re2-1.1-4-cp39-cp39-win_amd64.whl", hash = "sha256:aa7d6d05911ab9c8adbf3c225a7a120ab50fd2784ac48f2f0d140c0b7afc2b55"}, + {file = "google_re2-1.1-5-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:222fc2ee0e40522de0b21ad3bc90ab8983be3bf3cec3d349c80d76c8bb1a4beb"}, + {file = "google_re2-1.1-5-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:d4763b0b9195b72132a4e7de8e5a9bf1f05542f442a9115aa27cfc2a8004f581"}, + {file = "google_re2-1.1-5-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:209649da10c9d4a93d8a4d100ecbf9cc3b0252169426bec3e8b4ad7e57d600cf"}, + {file = "google_re2-1.1-5-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:68813aa333c1604a2df4a495b2a6ed065d7c8aebf26cc7e7abb5a6835d08353c"}, + {file = "google_re2-1.1-5-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:370a23ec775ad14e9d1e71474d56f381224dcf3e72b15d8ca7b4ad7dd9cd5853"}, + {file = "google_re2-1.1-5-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:14664a66a3ddf6bc9e56f401bf029db2d169982c53eff3f5876399104df0e9a6"}, + {file = "google_re2-1.1-5-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ea3722cc4932cbcebd553b69dce1b4a73572823cff4e6a244f1c855da21d511"}, + {file = "google_re2-1.1-5-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e14bb264c40fd7c627ef5678e295370cd6ba95ca71d835798b6e37502fc4c690"}, + {file = "google_re2-1.1-5-cp310-cp310-win32.whl", hash = "sha256:39512cd0151ea4b3969c992579c79b423018b464624ae955be685fc07d94556c"}, + {file = "google_re2-1.1-5-cp310-cp310-win_amd64.whl", hash = "sha256:ac66537aa3bc5504320d922b73156909e3c2b6da19739c866502f7827b3f9fdf"}, + {file = "google_re2-1.1-5-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5b5ea68d54890c9edb1b930dcb2658819354e5d3f2201f811798bbc0a142c2b4"}, + {file = "google_re2-1.1-5-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:33443511b6b83c35242370908efe2e8e1e7cae749c766b2b247bf30e8616066c"}, + {file = "google_re2-1.1-5-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:413d77bdd5ba0bfcada428b4c146e87707452ec50a4091ec8e8ba1413d7e0619"}, + {file = "google_re2-1.1-5-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:5171686e43304996a34baa2abcee6f28b169806d0e583c16d55e5656b092a414"}, + {file = "google_re2-1.1-5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b284db130283771558e31a02d8eb8fb756156ab98ce80035ae2e9e3a5f307c4"}, + {file = "google_re2-1.1-5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:296e6aed0b169648dc4b870ff47bd34c702a32600adb9926154569ef51033f47"}, + {file = "google_re2-1.1-5-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:38d50e68ead374160b1e656bbb5d101f0b95fb4cc57f4a5c12100155001480c5"}, + {file = "google_re2-1.1-5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a0416a35921e5041758948bcb882456916f22845f66a93bc25070ef7262b72a"}, + {file = "google_re2-1.1-5-cp311-cp311-win32.whl", hash = "sha256:a1d59568bbb5de5dd56dd6cdc79907db26cce63eb4429260300c65f43469e3e7"}, + {file = "google_re2-1.1-5-cp311-cp311-win_amd64.whl", hash = "sha256:72f5a2f179648b8358737b2b493549370debd7d389884a54d331619b285514e3"}, + {file = "google_re2-1.1-5-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:cbc72c45937b1dc5acac3560eb1720007dccca7c9879138ff874c7f6baf96005"}, + {file = "google_re2-1.1-5-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:5fadd1417fbef7235fa9453dba4eb102e6e7d94b1e4c99d5fa3dd4e288d0d2ae"}, + {file = "google_re2-1.1-5-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:040f85c63cc02696485b59b187a5ef044abe2f99b92b4fb399de40b7d2904ccc"}, + {file = "google_re2-1.1-5-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:64e3b975ee6d9bbb2420494e41f929c1a0de4bcc16d86619ab7a87f6ea80d6bd"}, + {file = "google_re2-1.1-5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8ee370413e00f4d828eaed0e83b8af84d7a72e8ee4f4bd5d3078bc741dfc430a"}, + {file = "google_re2-1.1-5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:5b89383001079323f693ba592d7aad789d7a02e75adb5d3368d92b300f5963fd"}, + {file = "google_re2-1.1-5-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:63cb4fdfbbda16ae31b41a6388ea621510db82feb8217a74bf36552ecfcd50ad"}, + {file = "google_re2-1.1-5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ebedd84ae8be10b7a71a16162376fd67a2386fe6361ef88c622dcf7fd679daf"}, + {file = "google_re2-1.1-5-cp312-cp312-win32.whl", hash = "sha256:c8e22d1692bc2c81173330c721aff53e47ffd3c4403ff0cd9d91adfd255dd150"}, + {file = "google_re2-1.1-5-cp312-cp312-win_amd64.whl", hash = "sha256:5197a6af438bb8c4abda0bbe9c4fbd6c27c159855b211098b29d51b73e4cbcf6"}, + {file = "google_re2-1.1-5-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b6727e0b98417e114b92688ad2aa256102ece51f29b743db3d831df53faf1ce3"}, + {file = "google_re2-1.1-5-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:711e2b6417eb579c61a4951029d844f6b95b9b373b213232efd413659889a363"}, + {file = "google_re2-1.1-5-cp38-cp38-macosx_13_0_arm64.whl", hash = "sha256:71ae8b3df22c5c154c8af0f0e99d234a450ef1644393bc2d7f53fc8c0a1e111c"}, + {file = "google_re2-1.1-5-cp38-cp38-macosx_13_0_x86_64.whl", hash = "sha256:94a04e214bc521a3807c217d50cf099bbdd0c0a80d2d996c0741dbb995b5f49f"}, + {file = "google_re2-1.1-5-cp38-cp38-macosx_14_0_arm64.whl", hash = "sha256:a770f75358508a9110c81a1257721f70c15d9bb592a2fb5c25ecbd13566e52a5"}, + {file = "google_re2-1.1-5-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:07c9133357f7e0b17c6694d5dcb82e0371f695d7c25faef2ff8117ef375343ff"}, + {file = "google_re2-1.1-5-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:204ca6b1cf2021548f4a9c29ac015e0a4ab0a7b6582bf2183d838132b60c8fda"}, + {file = "google_re2-1.1-5-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0b95857c2c654f419ca684ec38c9c3325c24e6ba7d11910a5110775a557bb18"}, + {file = "google_re2-1.1-5-cp38-cp38-win32.whl", hash = "sha256:347ac770e091a0364e822220f8d26ab53e6fdcdeaec635052000845c5a3fb869"}, + {file = "google_re2-1.1-5-cp38-cp38-win_amd64.whl", hash = "sha256:ec32bb6de7ffb112a07d210cf9f797b7600645c2d5910703fa07f456dd2150e0"}, + {file = "google_re2-1.1-5-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:eb5adf89060f81c5ff26c28e261e6b4997530a923a6093c9726b8dec02a9a326"}, + {file = "google_re2-1.1-5-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:a22630c9dd9ceb41ca4316bccba2643a8b1d5c198f21c00ed5b50a94313aaf10"}, + {file = "google_re2-1.1-5-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:544dc17fcc2d43ec05f317366375796351dec44058e1164e03c3f7d050284d58"}, + {file = "google_re2-1.1-5-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:19710af5ea88751c7768575b23765ce0dfef7324d2539de576f75cdc319d6654"}, + {file = "google_re2-1.1-5-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:f82995a205e08ad896f4bd5ce4847c834fab877e1772a44e5f262a647d8a1dec"}, + {file = "google_re2-1.1-5-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:63533c4d58da9dc4bc040250f1f52b089911699f0368e0e6e15f996387a984ed"}, + {file = "google_re2-1.1-5-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79e00fcf0cb04ea35a22b9014712d448725ce4ddc9f08cc818322566176ca4b0"}, + {file = "google_re2-1.1-5-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bc41afcefee2da6c4ed883a93d7f527c4b960cd1d26bbb0020a7b8c2d341a60a"}, + {file = "google_re2-1.1-5-cp39-cp39-win32.whl", hash = "sha256:486730b5e1f1c31b0abc6d80abe174ce4f1188fe17d1b50698f2bf79dc6e44be"}, + {file = "google_re2-1.1-5-cp39-cp39-win_amd64.whl", hash = "sha256:4de637ca328f1d23209e80967d1b987d6b352cd01b3a52a84b4d742c69c3da6c"}, + {file = "google_re2-1.1-6-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:621e9c199d1ff0fdb2a068ad450111a84b3bf14f96dfe5a8a7a0deae5f3f4cce"}, + {file = "google_re2-1.1-6-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:220acd31e7dde95373f97c3d1f3b3bd2532b38936af28b1917ee265d25bebbf4"}, + {file = "google_re2-1.1-6-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:db34e1098d164f76251a6ece30e8f0ddfd65bb658619f48613ce71acb3f9cbdb"}, + {file = "google_re2-1.1-6-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:5152bac41d8073977582f06257219541d0fc46ad99b0bbf30e8f60198a43b08c"}, + {file = "google_re2-1.1-6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:6191294799e373ee1735af91f55abd23b786bdfd270768a690d9d55af9ea1b0d"}, + {file = "google_re2-1.1-6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:070cbafbb4fecbb02e98feb28a1eb292fb880f434d531f38cc33ee314b521f1f"}, + {file = "google_re2-1.1-6-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8437d078b405a59a576cbed544490fe041140f64411f2d91012e8ec05ab8bf86"}, + {file = "google_re2-1.1-6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f00f9a9af8896040e37896d9b9fc409ad4979f1ddd85bb188694a7d95ddd1164"}, + {file = "google_re2-1.1-6-cp310-cp310-win32.whl", hash = "sha256:df26345f229a898b4fd3cafd5f82259869388cee6268fc35af16a8e2293dd4e5"}, + {file = "google_re2-1.1-6-cp310-cp310-win_amd64.whl", hash = "sha256:3665d08262c57c9b28a5bdeb88632ad792c4e5f417e5645901695ab2624f5059"}, + {file = "google_re2-1.1-6-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b26b869d8aa1d8fe67c42836bf3416bb72f444528ee2431cfb59c0d3e02c6ce3"}, + {file = "google_re2-1.1-6-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:41fd4486c57dea4f222a6bb7f1ff79accf76676a73bdb8da0fcbd5ba73f8da71"}, + {file = "google_re2-1.1-6-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:0ee378e2e74e25960070c338c28192377c4dd41e7f4608f2688064bd2badc41e"}, + {file = "google_re2-1.1-6-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:a00cdbf662693367b36d075b29feb649fd7ee1b617cf84f85f2deebeda25fc64"}, + {file = "google_re2-1.1-6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4c09455014217a41499432b8c8f792f25f3df0ea2982203c3a8c8ca0e7895e69"}, + {file = "google_re2-1.1-6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6501717909185327935c7945e23bb5aa8fc7b6f237b45fe3647fa36148662158"}, + {file = "google_re2-1.1-6-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3510b04790355f199e7861c29234081900e1e1cbf2d1484da48aa0ba6d7356ab"}, + {file = "google_re2-1.1-6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8c0e64c187ca406764f9e9ad6e750d62e69ed8f75bf2e865d0bfbc03b642361c"}, + {file = "google_re2-1.1-6-cp311-cp311-win32.whl", hash = "sha256:2a199132350542b0de0f31acbb3ca87c3a90895d1d6e5235f7792bb0af02e523"}, + {file = "google_re2-1.1-6-cp311-cp311-win_amd64.whl", hash = "sha256:83bdac8ceaece8a6db082ea3a8ba6a99a2a1ee7e9f01a9d6d50f79c6f251a01d"}, + {file = "google_re2-1.1-6-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:81985ff894cd45ab5a73025922ac28c0707759db8171dd2f2cc7a0e856b6b5ad"}, + {file = "google_re2-1.1-6-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:5635af26065e6b45456ccbea08674ae2ab62494008d9202df628df3b267bc095"}, + {file = "google_re2-1.1-6-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:813b6f04de79f4a8fdfe05e2cb33e0ccb40fe75d30ba441d519168f9d958bd54"}, + {file = "google_re2-1.1-6-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:5ec2f5332ad4fd232c3f2d6748c2c7845ccb66156a87df73abcc07f895d62ead"}, + {file = "google_re2-1.1-6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5a687b3b32a6cbb731647393b7c4e3fde244aa557f647df124ff83fb9b93e170"}, + {file = "google_re2-1.1-6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:39a62f9b3db5d3021a09a47f5b91708b64a0580193e5352751eb0c689e4ad3d7"}, + {file = "google_re2-1.1-6-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ca0f0b45d4a1709cbf5d21f355e5809ac238f1ee594625a1e5ffa9ff7a09eb2b"}, + {file = "google_re2-1.1-6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a64b3796a7a616c7861247bd061c9a836b5caf0d5963e5ea8022125601cf7b09"}, + {file = "google_re2-1.1-6-cp312-cp312-win32.whl", hash = "sha256:32783b9cb88469ba4cd9472d459fe4865280a6b1acdad4480a7b5081144c4eb7"}, + {file = "google_re2-1.1-6-cp312-cp312-win_amd64.whl", hash = "sha256:259ff3fd2d39035b9cbcbf375995f83fa5d9e6a0c5b94406ff1cc168ed41d6c6"}, + {file = "google_re2-1.1-6-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:e4711bcffe190acd29104d8ecfea0c0e42b754837de3fb8aad96e6cc3c613cdc"}, + {file = "google_re2-1.1-6-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:4d081cce43f39c2e813fe5990e1e378cbdb579d3f66ded5bade96130269ffd75"}, + {file = "google_re2-1.1-6-cp38-cp38-macosx_13_0_arm64.whl", hash = "sha256:4f123b54d48450d2d6b14d8fad38e930fb65b5b84f1b022c10f2913bd956f5b5"}, + {file = "google_re2-1.1-6-cp38-cp38-macosx_13_0_x86_64.whl", hash = "sha256:e1928b304a2b591a28eb3175f9db7f17c40c12cf2d4ec2a85fdf1cc9c073ff91"}, + {file = "google_re2-1.1-6-cp38-cp38-macosx_14_0_arm64.whl", hash = "sha256:3a69f76146166aec1173003c1f547931bdf288c6b135fda0020468492ac4149f"}, + {file = "google_re2-1.1-6-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:fc08c388f4ebbbca345e84a0c56362180d33d11cbe9ccfae663e4db88e13751e"}, + {file = "google_re2-1.1-6-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b057adf38ce4e616486922f2f47fc7d19c827ba0a7f69d540a3664eba2269325"}, + {file = "google_re2-1.1-6-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4138c0b933ab099e96f5d8defce4486f7dfd480ecaf7f221f2409f28022ccbc5"}, + {file = "google_re2-1.1-6-cp38-cp38-win32.whl", hash = "sha256:9693e45b37b504634b1abbf1ee979471ac6a70a0035954592af616306ab05dd6"}, + {file = "google_re2-1.1-6-cp38-cp38-win_amd64.whl", hash = "sha256:5674d437baba0ea287a5a7f8f81f24265d6ae8f8c09384e2ef7b6f84b40a7826"}, + {file = "google_re2-1.1-6-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:7783137cb2e04f458a530c6d0ee9ef114815c1d48b9102f023998c371a3b060e"}, + {file = "google_re2-1.1-6-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:a49b7153935e7a303675f4deb5f5d02ab1305adefc436071348706d147c889e0"}, + {file = "google_re2-1.1-6-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:a96a8bb309182090704593c60bdb369a2756b38fe358bbf0d40ddeb99c71769f"}, + {file = "google_re2-1.1-6-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:dff3d4be9f27ef8ec3705eed54f19ef4ab096f5876c15fe011628c69ba3b561c"}, + {file = "google_re2-1.1-6-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:40f818b0b39e26811fa677978112a8108269977fdab2ba0453ac4363c35d9e66"}, + {file = "google_re2-1.1-6-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:8a7e53538cdb40ef4296017acfbb05cab0c19998be7552db1cfb85ba40b171b9"}, + {file = "google_re2-1.1-6-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ee18e7569fb714e5bb8c42809bf8160738637a5e71ed5a4797757a1fb4dc4de"}, + {file = "google_re2-1.1-6-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1cda4f6d1a7d5b43ea92bc395f23853fba0caf8b1e1efa6e8c48685f912fcb89"}, + {file = "google_re2-1.1-6-cp39-cp39-win32.whl", hash = "sha256:6a9cdbdc36a2bf24f897be6a6c85125876dc26fea9eb4247234aec0decbdccfd"}, + {file = "google_re2-1.1-6-cp39-cp39-win_amd64.whl", hash = "sha256:73f646cecfad7cc5b4330b4192c25f2e29730a3b8408e089ffd2078094208196"}, ] [[package]] @@ -3552,13 +3727,13 @@ test = ["objgraph", "psutil"] [[package]] name = "griffe" -version = "0.38.0" +version = "0.44.0" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.8" files = [ - {file = "griffe-0.38.0-py3-none-any.whl", hash = "sha256:6a5bc457320e8e199006aa5fbb03e162f5e21abe31aa6221f7a5c37ea0724c71"}, - {file = "griffe-0.38.0.tar.gz", hash = "sha256:9b97487b583042b543d1e28196caee638ecd766c8c4c98135071806cb5333ac2"}, + {file = "griffe-0.44.0-py3-none-any.whl", hash = "sha256:8a4471c469ba980b87c843f1168850ce39d0c1d0c7be140dca2480f76c8e5446"}, + {file = "griffe-0.44.0.tar.gz", hash = "sha256:34aee1571042f9bf00529bc715de4516fb6f482b164e90d030300601009e0223"}, ] [package.dependencies] @@ -3925,13 +4100,13 @@ files = [ [[package]] name = "interrogate" -version = "1.5.0" +version = "1.7.0" description = "Interrogate a codebase for docstring coverage." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "interrogate-1.5.0-py3-none-any.whl", hash = "sha256:a4ccc5cbd727c74acc98dee6f5e79ef264c0bcfa66b68d4e123069b2af89091a"}, - {file = "interrogate-1.5.0.tar.gz", hash = "sha256:b6f325f0aa84ac3ac6779d8708264d366102226c5af7d69058cecffcff7a6d6c"}, + {file = "interrogate-1.7.0-py3-none-any.whl", hash = "sha256:b13ff4dd8403369670e2efe684066de9fcb868ad9d7f2b4095d8112142dc9d12"}, + {file = "interrogate-1.7.0.tar.gz", hash = "sha256:a320d6ec644dfd887cc58247a345054fc4d9f981100c45184470068f4b3719b0"}, ] [package.dependencies] @@ -3940,13 +4115,13 @@ click = ">=7.1" colorama = "*" py = "*" tabulate = "*" -toml = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} [package.extras] -dev = ["cairosvg", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "sphinx", "sphinx-autobuild", "wheel"] +dev = ["cairosvg", "coverage[toml]", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "sphinx", "sphinx-autobuild", "wheel"] docs = ["sphinx", "sphinx-autobuild"] png = ["cairosvg"] -tests = ["pytest", "pytest-cov", "pytest-mock"] +tests = ["coverage[toml]", "pytest", "pytest-cov", "pytest-mock"] [[package]] name = "ipykernel" @@ -3983,13 +4158,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.22.1" +version = "8.24.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" files = [ - {file = "ipython-8.22.1-py3-none-any.whl", hash = "sha256:869335e8cded62ffb6fac8928e5287a05433d6462e3ebaac25f4216474dd6bc4"}, - {file = "ipython-8.22.1.tar.gz", hash = "sha256:39c6f9efc079fb19bfb0f17eee903978fe9a290b1b82d68196c641cecb76ea22"}, + {file = "ipython-8.24.0-py3-none-any.whl", hash = "sha256:d7bf2f6c4314984e3e02393213bab8703cf163ede39672ce5918c51fe253a2a3"}, + {file = "ipython-8.24.0.tar.gz", hash = "sha256:010db3f8a728a578bb641fdd06c063b9fb8e96a9464c63aec6310fbcb5e80501"}, ] [package.dependencies] @@ -4003,18 +4178,20 @@ prompt-toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5.13.0" +typing-extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} [package.extras] -all = ["ipython[black,doc,kernel,nbconvert,nbformat,notebook,parallel,qtconsole,terminal]", "ipython[test,test-extra]"] +all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] black = ["black"] doc = ["docrepr", "exceptiongroup", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "stack-data", "typing-extensions"] kernel = ["ipykernel"] +matplotlib = ["matplotlib"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["pickleshare", "pytest (<8)", "pytest-asyncio (<0.22)", "testpath"] +test = ["pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] [[package]] @@ -4353,96 +4530,173 @@ typing-extensions = ">=4.1.1" [[package]] name = "lxml" -version = "5.1.0" +version = "5.2.1" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=3.6" files = [ - {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:704f5572ff473a5f897745abebc6df40f22d4133c1e0a1f124e4f2bd3330ff7e"}, - {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d3c0f8567ffe7502d969c2c1b809892dc793b5d0665f602aad19895f8d508da"}, - {file = "lxml-5.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5fcfbebdb0c5d8d18b84118842f31965d59ee3e66996ac842e21f957eb76138c"}, - {file = "lxml-5.1.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f37c6d7106a9d6f0708d4e164b707037b7380fcd0b04c5bd9cae1fb46a856fb"}, - {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2befa20a13f1a75c751f47e00929fb3433d67eb9923c2c0b364de449121f447c"}, - {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22b7ee4c35f374e2c20337a95502057964d7e35b996b1c667b5c65c567d2252a"}, - {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf8443781533b8d37b295016a4b53c1494fa9a03573c09ca5104550c138d5c05"}, - {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82bddf0e72cb2af3cbba7cec1d2fd11fda0de6be8f4492223d4a268713ef2147"}, - {file = "lxml-5.1.0-cp310-cp310-win32.whl", hash = "sha256:b66aa6357b265670bb574f050ffceefb98549c721cf28351b748be1ef9577d93"}, - {file = "lxml-5.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:4946e7f59b7b6a9e27bef34422f645e9a368cb2be11bf1ef3cafc39a1f6ba68d"}, - {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:14deca1460b4b0f6b01f1ddc9557704e8b365f55c63070463f6c18619ebf964f"}, - {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed8c3d2cd329bf779b7ed38db176738f3f8be637bb395ce9629fc76f78afe3d4"}, - {file = "lxml-5.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:436a943c2900bb98123b06437cdd30580a61340fbdb7b28aaf345a459c19046a"}, - {file = "lxml-5.1.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acb6b2f96f60f70e7f34efe0c3ea34ca63f19ca63ce90019c6cbca6b676e81fa"}, - {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af8920ce4a55ff41167ddbc20077f5698c2e710ad3353d32a07d3264f3a2021e"}, - {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cfced4a069003d8913408e10ca8ed092c49a7f6cefee9bb74b6b3e860683b45"}, - {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9e5ac3437746189a9b4121db2a7b86056ac8786b12e88838696899328fc44bb2"}, - {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4c9bda132ad108b387c33fabfea47866af87f4ea6ffb79418004f0521e63204"}, - {file = "lxml-5.1.0-cp311-cp311-win32.whl", hash = "sha256:bc64d1b1dab08f679fb89c368f4c05693f58a9faf744c4d390d7ed1d8223869b"}, - {file = "lxml-5.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5ab722ae5a873d8dcee1f5f45ddd93c34210aed44ff2dc643b5025981908cda"}, - {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9aa543980ab1fbf1720969af1d99095a548ea42e00361e727c58a40832439114"}, - {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6f11b77ec0979f7e4dc5ae081325a2946f1fe424148d3945f943ceaede98adb8"}, - {file = "lxml-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a36c506e5f8aeb40680491d39ed94670487ce6614b9d27cabe45d94cd5d63e1e"}, - {file = "lxml-5.1.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f643ffd2669ffd4b5a3e9b41c909b72b2a1d5e4915da90a77e119b8d48ce867a"}, - {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16dd953fb719f0ffc5bc067428fc9e88f599e15723a85618c45847c96f11f431"}, - {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16018f7099245157564d7148165132c70adb272fb5a17c048ba70d9cc542a1a1"}, - {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82cd34f1081ae4ea2ede3d52f71b7be313756e99b4b5f829f89b12da552d3aa3"}, - {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:19a1bc898ae9f06bccb7c3e1dfd73897ecbbd2c96afe9095a6026016e5ca97b8"}, - {file = "lxml-5.1.0-cp312-cp312-win32.whl", hash = "sha256:13521a321a25c641b9ea127ef478b580b5ec82aa2e9fc076c86169d161798b01"}, - {file = "lxml-5.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:1ad17c20e3666c035db502c78b86e58ff6b5991906e55bdbef94977700c72623"}, - {file = "lxml-5.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:24ef5a4631c0b6cceaf2dbca21687e29725b7c4e171f33a8f8ce23c12558ded1"}, - {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d2900b7f5318bc7ad8631d3d40190b95ef2aa8cc59473b73b294e4a55e9f30f"}, - {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:601f4a75797d7a770daed8b42b97cd1bb1ba18bd51a9382077a6a247a12aa38d"}, - {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4b68c961b5cc402cbd99cca5eb2547e46ce77260eb705f4d117fd9c3f932b95"}, - {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:afd825e30f8d1f521713a5669b63657bcfe5980a916c95855060048b88e1adb7"}, - {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:262bc5f512a66b527d026518507e78c2f9c2bd9eb5c8aeeb9f0eb43fcb69dc67"}, - {file = "lxml-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:e856c1c7255c739434489ec9c8aa9cdf5179785d10ff20add308b5d673bed5cd"}, - {file = "lxml-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c7257171bb8d4432fe9d6fdde4d55fdbe663a63636a17f7f9aaba9bcb3153ad7"}, - {file = "lxml-5.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9e240ae0ba96477682aa87899d94ddec1cc7926f9df29b1dd57b39e797d5ab5"}, - {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a96f02ba1bcd330807fc060ed91d1f7a20853da6dd449e5da4b09bfcc08fdcf5"}, - {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3898ae2b58eeafedfe99e542a17859017d72d7f6a63de0f04f99c2cb125936"}, - {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61c5a7edbd7c695e54fca029ceb351fc45cd8860119a0f83e48be44e1c464862"}, - {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3aeca824b38ca78d9ee2ab82bd9883083d0492d9d17df065ba3b94e88e4d7ee6"}, - {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8f52fe6859b9db71ee609b0c0a70fea5f1e71c3462ecf144ca800d3f434f0764"}, - {file = "lxml-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:d42e3a3fc18acc88b838efded0e6ec3edf3e328a58c68fbd36a7263a874906c8"}, - {file = "lxml-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:eac68f96539b32fce2c9b47eb7c25bb2582bdaf1bbb360d25f564ee9e04c542b"}, - {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ae15347a88cf8af0949a9872b57a320d2605ae069bcdf047677318bc0bba45b1"}, - {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c26aab6ea9c54d3bed716b8851c8bfc40cb249b8e9880e250d1eddde9f709bf5"}, - {file = "lxml-5.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:342e95bddec3a698ac24378d61996b3ee5ba9acfeb253986002ac53c9a5f6f84"}, - {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:725e171e0b99a66ec8605ac77fa12239dbe061482ac854d25720e2294652eeaa"}, - {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d184e0d5c918cff04cdde9dbdf9600e960161d773666958c9d7b565ccc60c45"}, - {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:98f3f020a2b736566c707c8e034945c02aa94e124c24f77ca097c446f81b01f1"}, - {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d48fc57e7c1e3df57be5ae8614bab6d4e7b60f65c5457915c26892c41afc59e"}, - {file = "lxml-5.1.0-cp38-cp38-win32.whl", hash = "sha256:7ec465e6549ed97e9f1e5ed51c657c9ede767bc1c11552f7f4d022c4df4a977a"}, - {file = "lxml-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:b21b4031b53d25b0858d4e124f2f9131ffc1530431c6d1321805c90da78388d1"}, - {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:52427a7eadc98f9e62cb1368a5079ae826f94f05755d2d567d93ee1bc3ceb354"}, - {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a2a2c724d97c1eb8cf966b16ca2915566a4904b9aad2ed9a09c748ffe14f969"}, - {file = "lxml-5.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843b9c835580d52828d8f69ea4302537337a21e6b4f1ec711a52241ba4a824f3"}, - {file = "lxml-5.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9b99f564659cfa704a2dd82d0684207b1aadf7d02d33e54845f9fc78e06b7581"}, - {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8b0c78e7aac24979ef09b7f50da871c2de2def043d468c4b41f512d831e912"}, - {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bcf86dfc8ff3e992fed847c077bd875d9e0ba2fa25d859c3a0f0f76f07f0c8d"}, - {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:49a9b4af45e8b925e1cd6f3b15bbba2c81e7dba6dce170c677c9cda547411e14"}, - {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:280f3edf15c2a967d923bcfb1f8f15337ad36f93525828b40a0f9d6c2ad24890"}, - {file = "lxml-5.1.0-cp39-cp39-win32.whl", hash = "sha256:ed7326563024b6e91fef6b6c7a1a2ff0a71b97793ac33dbbcf38f6005e51ff6e"}, - {file = "lxml-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d7b4beebb178e9183138f552238f7e6613162a42164233e2bda00cb3afac58f"}, - {file = "lxml-5.1.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9bd0ae7cc2b85320abd5e0abad5ccee5564ed5f0cc90245d2f9a8ef330a8deae"}, - {file = "lxml-5.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c1d679df4361408b628f42b26a5d62bd3e9ba7f0c0e7969f925021554755aa"}, - {file = "lxml-5.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2ad3a8ce9e8a767131061a22cd28fdffa3cd2dc193f399ff7b81777f3520e372"}, - {file = "lxml-5.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:304128394c9c22b6569eba2a6d98392b56fbdfbad58f83ea702530be80d0f9df"}, - {file = "lxml-5.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d74fcaf87132ffc0447b3c685a9f862ffb5b43e70ea6beec2fb8057d5d2a1fea"}, - {file = "lxml-5.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8cf5877f7ed384dabfdcc37922c3191bf27e55b498fecece9fd5c2c7aaa34c33"}, - {file = "lxml-5.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:877efb968c3d7eb2dad540b6cabf2f1d3c0fbf4b2d309a3c141f79c7e0061324"}, - {file = "lxml-5.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f14a4fb1c1c402a22e6a341a24c1341b4a3def81b41cd354386dcb795f83897"}, - {file = "lxml-5.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:25663d6e99659544ee8fe1b89b1a8c0aaa5e34b103fab124b17fa958c4a324a6"}, - {file = "lxml-5.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8b9f19df998761babaa7f09e6bc169294eefafd6149aaa272081cbddc7ba4ca3"}, - {file = "lxml-5.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e53d7e6a98b64fe54775d23a7c669763451340c3d44ad5e3a3b48a1efbdc96f"}, - {file = "lxml-5.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c3cd1fc1dc7c376c54440aeaaa0dcc803d2126732ff5c6b68ccd619f2e64be4f"}, - {file = "lxml-5.1.0.tar.gz", hash = "sha256:3eea6ed6e6c918e468e693c41ef07f3c3acc310b70ddd9cc72d9ef84bc9564ca"}, + {file = "lxml-5.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1f7785f4f789fdb522729ae465adcaa099e2a3441519df750ebdccc481d961a1"}, + {file = "lxml-5.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6cc6ee342fb7fa2471bd9b6d6fdfc78925a697bf5c2bcd0a302e98b0d35bfad3"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:794f04eec78f1d0e35d9e0c36cbbb22e42d370dda1609fb03bcd7aeb458c6377"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817d420c60a5183953c783b0547d9eb43b7b344a2c46f69513d5952a78cddf3"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2213afee476546a7f37c7a9b4ad4d74b1e112a6fafffc9185d6d21f043128c81"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b070bbe8d3f0f6147689bed981d19bbb33070225373338df755a46893528104a"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e02c5175f63effbd7c5e590399c118d5db6183bbfe8e0d118bdb5c2d1b48d937"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:3dc773b2861b37b41a6136e0b72a1a44689a9c4c101e0cddb6b854016acc0aa8"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:d7520db34088c96cc0e0a3ad51a4fd5b401f279ee112aa2b7f8f976d8582606d"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:bcbf4af004f98793a95355980764b3d80d47117678118a44a80b721c9913436a"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2b44bec7adf3e9305ce6cbfa47a4395667e744097faed97abb4728748ba7d47"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1c5bb205e9212d0ebddf946bc07e73fa245c864a5f90f341d11ce7b0b854475d"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2c9d147f754b1b0e723e6afb7ba1566ecb162fe4ea657f53d2139bbf894d050a"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3545039fa4779be2df51d6395e91a810f57122290864918b172d5dc7ca5bb433"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a91481dbcddf1736c98a80b122afa0f7296eeb80b72344d7f45dc9f781551f56"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2ddfe41ddc81f29a4c44c8ce239eda5ade4e7fc305fb7311759dd6229a080052"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a7baf9ffc238e4bf401299f50e971a45bfcc10a785522541a6e3179c83eabf0a"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:31e9a882013c2f6bd2f2c974241bf4ba68c85eba943648ce88936d23209a2e01"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0a15438253b34e6362b2dc41475e7f80de76320f335e70c5528b7148cac253a1"}, + {file = "lxml-5.2.1-cp310-cp310-win32.whl", hash = "sha256:6992030d43b916407c9aa52e9673612ff39a575523c5f4cf72cdef75365709a5"}, + {file = "lxml-5.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:da052e7962ea2d5e5ef5bc0355d55007407087392cf465b7ad84ce5f3e25fe0f"}, + {file = "lxml-5.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:70ac664a48aa64e5e635ae5566f5227f2ab7f66a3990d67566d9907edcbbf867"}, + {file = "lxml-5.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1ae67b4e737cddc96c99461d2f75d218bdf7a0c3d3ad5604d1f5e7464a2f9ffe"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f18a5a84e16886898e51ab4b1d43acb3083c39b14c8caeb3589aabff0ee0b270"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6f2c8372b98208ce609c9e1d707f6918cc118fea4e2c754c9f0812c04ca116d"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:394ed3924d7a01b5bd9a0d9d946136e1c2f7b3dc337196d99e61740ed4bc6fe1"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d077bc40a1fe984e1a9931e801e42959a1e6598edc8a3223b061d30fbd26bbc"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:764b521b75701f60683500d8621841bec41a65eb739b8466000c6fdbc256c240"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3a6b45da02336895da82b9d472cd274b22dc27a5cea1d4b793874eead23dd14f"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:5ea7b6766ac2dfe4bcac8b8595107665a18ef01f8c8343f00710b85096d1b53a"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:e196a4ff48310ba62e53a8e0f97ca2bca83cdd2fe2934d8b5cb0df0a841b193a"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:200e63525948e325d6a13a76ba2911f927ad399ef64f57898cf7c74e69b71095"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dae0ed02f6b075426accbf6b2863c3d0a7eacc1b41fb40f2251d931e50188dad"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:ab31a88a651039a07a3ae327d68ebdd8bc589b16938c09ef3f32a4b809dc96ef"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:df2e6f546c4df14bc81f9498bbc007fbb87669f1bb707c6138878c46b06f6510"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5dd1537e7cc06efd81371f5d1a992bd5ab156b2b4f88834ca852de4a8ea523fa"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9b9ec9c9978b708d488bec36b9e4c94d88fd12ccac3e62134a9d17ddba910ea9"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8e77c69d5892cb5ba71703c4057091e31ccf534bd7f129307a4d084d90d014b8"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a8d5c70e04aac1eda5c829a26d1f75c6e5286c74743133d9f742cda8e53b9c2f"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c94e75445b00319c1fad60f3c98b09cd63fe1134a8a953dcd48989ef42318534"}, + {file = "lxml-5.2.1-cp311-cp311-win32.whl", hash = "sha256:4951e4f7a5680a2db62f7f4ab2f84617674d36d2d76a729b9a8be4b59b3659be"}, + {file = "lxml-5.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:5c670c0406bdc845b474b680b9a5456c561c65cf366f8db5a60154088c92d102"}, + {file = "lxml-5.2.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:abc25c3cab9ec7fcd299b9bcb3b8d4a1231877e425c650fa1c7576c5107ab851"}, + {file = "lxml-5.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6935bbf153f9a965f1e07c2649c0849d29832487c52bb4a5c5066031d8b44fd5"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d793bebb202a6000390a5390078e945bbb49855c29c7e4d56a85901326c3b5d9"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd5562927cdef7c4f5550374acbc117fd4ecc05b5007bdfa57cc5355864e0a4"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e7259016bc4345a31af861fdce942b77c99049d6c2107ca07dc2bba2435c1d9"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:530e7c04f72002d2f334d5257c8a51bf409db0316feee7c87e4385043be136af"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59689a75ba8d7ffca577aefd017d08d659d86ad4585ccc73e43edbfc7476781a"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f9737bf36262046213a28e789cc82d82c6ef19c85a0cf05e75c670a33342ac2c"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:3a74c4f27167cb95c1d4af1c0b59e88b7f3e0182138db2501c353555f7ec57f4"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:68a2610dbe138fa8c5826b3f6d98a7cfc29707b850ddcc3e21910a6fe51f6ca0"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f0a1bc63a465b6d72569a9bba9f2ef0334c4e03958e043da1920299100bc7c08"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c2d35a1d047efd68027817b32ab1586c1169e60ca02c65d428ae815b593e65d4"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:79bd05260359170f78b181b59ce871673ed01ba048deef4bf49a36ab3e72e80b"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:865bad62df277c04beed9478fe665b9ef63eb28fe026d5dedcb89b537d2e2ea6"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:44f6c7caff88d988db017b9b0e4ab04934f11e3e72d478031efc7edcac6c622f"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:71e97313406ccf55d32cc98a533ee05c61e15d11b99215b237346171c179c0b0"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:057cdc6b86ab732cf361f8b4d8af87cf195a1f6dc5b0ff3de2dced242c2015e0"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f3bbbc998d42f8e561f347e798b85513ba4da324c2b3f9b7969e9c45b10f6169"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:491755202eb21a5e350dae00c6d9a17247769c64dcf62d8c788b5c135e179dc4"}, + {file = "lxml-5.2.1-cp312-cp312-win32.whl", hash = "sha256:8de8f9d6caa7f25b204fc861718815d41cbcf27ee8f028c89c882a0cf4ae4134"}, + {file = "lxml-5.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:f2a9efc53d5b714b8df2b4b3e992accf8ce5bbdfe544d74d5c6766c9e1146a3a"}, + {file = "lxml-5.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:70a9768e1b9d79edca17890175ba915654ee1725975d69ab64813dd785a2bd5c"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c38d7b9a690b090de999835f0443d8aa93ce5f2064035dfc48f27f02b4afc3d0"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5670fb70a828663cc37552a2a85bf2ac38475572b0e9b91283dc09efb52c41d1"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:958244ad566c3ffc385f47dddde4145088a0ab893504b54b52c041987a8c1863"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6241d4eee5f89453307c2f2bfa03b50362052ca0af1efecf9fef9a41a22bb4f"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2a66bf12fbd4666dd023b6f51223aed3d9f3b40fef06ce404cb75bafd3d89536"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:9123716666e25b7b71c4e1789ec829ed18663152008b58544d95b008ed9e21e9"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:0c3f67e2aeda739d1cc0b1102c9a9129f7dc83901226cc24dd72ba275ced4218"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5d5792e9b3fb8d16a19f46aa8208987cfeafe082363ee2745ea8b643d9cc5b45"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:88e22fc0a6684337d25c994381ed8a1580a6f5ebebd5ad41f89f663ff4ec2885"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:21c2e6b09565ba5b45ae161b438e033a86ad1736b8c838c766146eff8ceffff9"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_s390x.whl", hash = "sha256:afbbdb120d1e78d2ba8064a68058001b871154cc57787031b645c9142b937a62"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:627402ad8dea044dde2eccde4370560a2b750ef894c9578e1d4f8ffd54000461"}, + {file = "lxml-5.2.1-cp36-cp36m-win32.whl", hash = "sha256:e89580a581bf478d8dcb97d9cd011d567768e8bc4095f8557b21c4d4c5fea7d0"}, + {file = "lxml-5.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:59565f10607c244bc4c05c0c5fa0c190c990996e0c719d05deec7030c2aa8289"}, + {file = "lxml-5.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:857500f88b17a6479202ff5fe5f580fc3404922cd02ab3716197adf1ef628029"}, + {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56c22432809085b3f3ae04e6e7bdd36883d7258fcd90e53ba7b2e463efc7a6af"}, + {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a55ee573116ba208932e2d1a037cc4b10d2c1cb264ced2184d00b18ce585b2c0"}, + {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:6cf58416653c5901e12624e4013708b6e11142956e7f35e7a83f1ab02f3fe456"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:64c2baa7774bc22dd4474248ba16fe1a7f611c13ac6123408694d4cc93d66dbd"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:74b28c6334cca4dd704e8004cba1955af0b778cf449142e581e404bd211fb619"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7221d49259aa1e5a8f00d3d28b1e0b76031655ca74bb287123ef56c3db92f213"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3dbe858ee582cbb2c6294dc85f55b5f19c918c2597855e950f34b660f1a5ede6"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:04ab5415bf6c86e0518d57240a96c4d1fcfc3cb370bb2ac2a732b67f579e5a04"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:6ab833e4735a7e5533711a6ea2df26459b96f9eec36d23f74cafe03631647c41"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f443cdef978430887ed55112b491f670bba6462cea7a7742ff8f14b7abb98d75"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:9e2addd2d1866fe112bc6f80117bcc6bc25191c5ed1bfbcf9f1386a884252ae8"}, + {file = "lxml-5.2.1-cp37-cp37m-win32.whl", hash = "sha256:f51969bac61441fd31f028d7b3b45962f3ecebf691a510495e5d2cd8c8092dbd"}, + {file = "lxml-5.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b0b58fbfa1bf7367dde8a557994e3b1637294be6cf2169810375caf8571a085c"}, + {file = "lxml-5.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:804f74efe22b6a227306dd890eecc4f8c59ff25ca35f1f14e7482bbce96ef10b"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08802f0c56ed150cc6885ae0788a321b73505d2263ee56dad84d200cab11c07a"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f8c09ed18ecb4ebf23e02b8e7a22a05d6411911e6fabef3a36e4f371f4f2585"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3d30321949861404323c50aebeb1943461a67cd51d4200ab02babc58bd06a86"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:b560e3aa4b1d49e0e6c847d72665384db35b2f5d45f8e6a5c0072e0283430533"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:058a1308914f20784c9f4674036527e7c04f7be6fb60f5d61353545aa7fcb739"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:adfb84ca6b87e06bc6b146dc7da7623395db1e31621c4785ad0658c5028b37d7"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:417d14450f06d51f363e41cace6488519038f940676ce9664b34ebf5653433a5"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a2dfe7e2473f9b59496247aad6e23b405ddf2e12ef0765677b0081c02d6c2c0b"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bf2e2458345d9bffb0d9ec16557d8858c9c88d2d11fed53998512504cd9df49b"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:58278b29cb89f3e43ff3e0c756abbd1518f3ee6adad9e35b51fb101c1c1daaec"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:64641a6068a16201366476731301441ce93457eb8452056f570133a6ceb15fca"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:78bfa756eab503673991bdcf464917ef7845a964903d3302c5f68417ecdc948c"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:11a04306fcba10cd9637e669fd73aa274c1c09ca64af79c041aa820ea992b637"}, + {file = "lxml-5.2.1-cp38-cp38-win32.whl", hash = "sha256:66bc5eb8a323ed9894f8fa0ee6cb3e3fb2403d99aee635078fd19a8bc7a5a5da"}, + {file = "lxml-5.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:9676bfc686fa6a3fa10cd4ae6b76cae8be26eb5ec6811d2a325636c460da1806"}, + {file = "lxml-5.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cf22b41fdae514ee2f1691b6c3cdeae666d8b7fa9434de445f12bbeee0cf48dd"}, + {file = "lxml-5.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ec42088248c596dbd61d4ae8a5b004f97a4d91a9fd286f632e42e60b706718d7"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd53553ddad4a9c2f1f022756ae64abe16da1feb497edf4d9f87f99ec7cf86bd"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feaa45c0eae424d3e90d78823f3828e7dc42a42f21ed420db98da2c4ecf0a2cb"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddc678fb4c7e30cf830a2b5a8d869538bc55b28d6c68544d09c7d0d8f17694dc"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:853e074d4931dbcba7480d4dcab23d5c56bd9607f92825ab80ee2bd916edea53"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4691d60512798304acb9207987e7b2b7c44627ea88b9d77489bbe3e6cc3bd4"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:beb72935a941965c52990f3a32d7f07ce869fe21c6af8b34bf6a277b33a345d3"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:6588c459c5627fefa30139be4d2e28a2c2a1d0d1c265aad2ba1935a7863a4913"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:588008b8497667f1ddca7c99f2f85ce8511f8f7871b4a06ceede68ab62dff64b"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6787b643356111dfd4032b5bffe26d2f8331556ecb79e15dacb9275da02866e"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7c17b64b0a6ef4e5affae6a3724010a7a66bda48a62cfe0674dabd46642e8b54"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:27aa20d45c2e0b8cd05da6d4759649170e8dfc4f4e5ef33a34d06f2d79075d57"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d4f2cc7060dc3646632d7f15fe68e2fa98f58e35dd5666cd525f3b35d3fed7f8"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff46d772d5f6f73564979cd77a4fffe55c916a05f3cb70e7c9c0590059fb29ef"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:96323338e6c14e958d775700ec8a88346014a85e5de73ac7967db0367582049b"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:52421b41ac99e9d91934e4d0d0fe7da9f02bfa7536bb4431b4c05c906c8c6919"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:7a7efd5b6d3e30d81ec68ab8a88252d7c7c6f13aaa875009fe3097eb4e30b84c"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ed777c1e8c99b63037b91f9d73a6aad20fd035d77ac84afcc205225f8f41188"}, + {file = "lxml-5.2.1-cp39-cp39-win32.whl", hash = "sha256:644df54d729ef810dcd0f7732e50e5ad1bd0a135278ed8d6bcb06f33b6b6f708"}, + {file = "lxml-5.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:9ca66b8e90daca431b7ca1408cae085d025326570e57749695d6a01454790e95"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b0ff53900566bc6325ecde9181d89afadc59c5ffa39bddf084aaedfe3b06a11"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd6037392f2d57793ab98d9e26798f44b8b4da2f2464388588f48ac52c489ea1"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b9c07e7a45bb64e21df4b6aa623cb8ba214dfb47d2027d90eac197329bb5e94"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3249cc2989d9090eeac5467e50e9ec2d40704fea9ab72f36b034ea34ee65ca98"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f42038016852ae51b4088b2862126535cc4fc85802bfe30dea3500fdfaf1864e"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:533658f8fbf056b70e434dff7e7aa611bcacb33e01f75de7f821810e48d1bb66"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:622020d4521e22fb371e15f580d153134bfb68d6a429d1342a25f051ec72df1c"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efa7b51824aa0ee957ccd5a741c73e6851de55f40d807f08069eb4c5a26b2baa"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c6ad0fbf105f6bcc9300c00010a2ffa44ea6f555df1a2ad95c88f5656104817"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e233db59c8f76630c512ab4a4daf5a5986da5c3d5b44b8e9fc742f2a24dbd460"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a014510830df1475176466b6087fc0c08b47a36714823e58d8b8d7709132a96"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d38c8f50ecf57f0463399569aa388b232cf1a2ffb8f0a9a5412d0db57e054860"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5aea8212fb823e006b995c4dda533edcf98a893d941f173f6c9506126188860d"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff097ae562e637409b429a7ac958a20aab237a0378c42dabaa1e3abf2f896e5f"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f5d65c39f16717a47c36c756af0fb36144069c4718824b7533f803ecdf91138"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3d0c3dd24bb4605439bf91068598d00c6370684f8de4a67c2992683f6c309d6b"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e32be23d538753a8adb6c85bd539f5fd3b15cb987404327c569dfc5fd8366e85"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cc518cea79fd1e2f6c90baafa28906d4309d24f3a63e801d855e7424c5b34144"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a0af35bd8ebf84888373630f73f24e86bf016642fb8576fba49d3d6b560b7cbc"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8aca2e3a72f37bfc7b14ba96d4056244001ddcc18382bd0daa087fd2e68a354"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ca1e8188b26a819387b29c3895c47a5e618708fe6f787f3b1a471de2c4a94d9"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c8ba129e6d3b0136a0f50345b2cb3db53f6bda5dd8c7f5d83fbccba97fb5dcb5"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e998e304036198b4f6914e6a1e2b6f925208a20e2042563d9734881150c6c246"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d3be9b2076112e51b323bdf6d5a7f8a798de55fb8d95fcb64bd179460cdc0704"}, + {file = "lxml-5.2.1.tar.gz", hash = "sha256:3f7765e69bbce0906a7c74d5fe46d2c7a7596147318dbc08e4a2431f3060e306"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml-html-clean"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=3.0.7)"] +source = ["Cython (>=3.0.10)"] [[package]] name = "mako" @@ -4465,13 +4719,13 @@ testing = ["pytest"] [[package]] name = "markdown" -version = "3.5.1" +version = "3.6" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "Markdown-3.5.1-py3-none-any.whl", hash = "sha256:5874b47d4ee3f0b14d764324d2c94c03ea66bee56f2d929da9f2508d65e722dc"}, - {file = "Markdown-3.5.1.tar.gz", hash = "sha256:b65d7beb248dc22f2e8a31fb706d93798093c308dc1aba295aedeb9d41a813bd"}, + {file = "Markdown-3.6-py3-none-any.whl", hash = "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f"}, + {file = "Markdown-3.6.tar.gz", hash = "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"}, ] [package.extras] @@ -4874,21 +5128,23 @@ mkdocs = ">=1.2" [[package]] name = "mkdocstrings" -version = "0.23.0" +version = "0.25.1" description = "Automatic documentation from sources, for MkDocs." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocstrings-0.23.0-py3-none-any.whl", hash = "sha256:051fa4014dfcd9ed90254ae91de2dbb4f24e166347dae7be9a997fe16316c65e"}, - {file = "mkdocstrings-0.23.0.tar.gz", hash = "sha256:d9c6a37ffbe7c14a7a54ef1258c70b8d394e6a33a1c80832bce40b9567138d1c"}, + {file = "mkdocstrings-0.25.1-py3-none-any.whl", hash = "sha256:da01fcc2670ad61888e8fe5b60afe9fee5781017d67431996832d63e887c2e51"}, + {file = "mkdocstrings-0.25.1.tar.gz", hash = "sha256:c3a2515f31577f311a9ee58d089e4c51fc6046dbd9e9b4c3de4c3194667fe9bf"}, ] [package.dependencies] +click = ">=7.0" Jinja2 = ">=2.11.1" Markdown = ">=3.3" MarkupSafe = ">=1.1" -mkdocs = ">=1.2" +mkdocs = ">=1.4" mkdocs-autorefs = ">=0.3.1" +platformdirs = ">=2.2.0" pymdown-extensions = ">=6.3" [package.extras] @@ -4898,18 +5154,18 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] [[package]] name = "mkdocstrings-python" -version = "1.8.0" +version = "1.10.0" description = "A Python handler for mkdocstrings." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocstrings_python-1.8.0-py3-none-any.whl", hash = "sha256:4209970cc90bec194568682a535848a8d8489516c6ed4adbe58bbc67b699ca9d"}, - {file = "mkdocstrings_python-1.8.0.tar.gz", hash = "sha256:1488bddf50ee42c07d9a488dddc197f8e8999c2899687043ec5dd1643d057192"}, + {file = "mkdocstrings_python-1.10.0-py3-none-any.whl", hash = "sha256:ba833fbd9d178a4b9d5cb2553a4df06e51dc1f51e41559a4d2398c16a6f69ecc"}, + {file = "mkdocstrings_python-1.10.0.tar.gz", hash = "sha256:71678fac657d4d2bb301eed4e4d2d91499c095fd1f8a90fa76422a87a5693828"}, ] [package.dependencies] -griffe = ">=0.37" -mkdocstrings = ">=0.20" +griffe = ">=0.44" +mkdocstrings = ">=0.24.2" [[package]] name = "msal" @@ -5054,38 +5310,38 @@ files = [ [[package]] name = "mypy" -version = "1.8.0" +version = "1.10.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"}, - {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"}, - {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"}, - {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"}, - {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"}, - {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"}, - {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"}, - {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"}, - {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"}, - {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"}, - {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"}, - {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"}, - {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"}, - {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"}, - {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"}, - {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"}, - {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"}, - {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"}, - {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"}, - {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"}, - {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"}, - {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"}, - {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"}, - {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"}, - {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"}, - {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"}, - {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, + {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, + {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, + {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, + {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, + {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, + {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, + {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, + {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, + {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, + {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, + {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, + {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, + {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, + {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, + {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, + {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, + {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, ] [package.dependencies] @@ -5750,13 +6006,13 @@ tenacity = ">=6.2.0" [[package]] name = "pluggy" -version = "1.4.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, - {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -5784,13 +6040,13 @@ tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "p [[package]] name = "pre-commit" -version = "3.6.0" +version = "3.7.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" files = [ - {file = "pre_commit-3.6.0-py2.py3-none-any.whl", hash = "sha256:c255039ef399049a5544b6ce13d135caba8f2c28c3b4033277a788f434308376"}, - {file = "pre_commit-3.6.0.tar.gz", hash = "sha256:d30bad9abf165f7785c15a21a1f46da7d0677cb00ee7ff4c579fd38922efe15d"}, + {file = "pre_commit-3.7.0-py2.py3-none-any.whl", hash = "sha256:5eae9e10c2b5ac51577c3452ec0a490455c45a0533f7960f993a0d01e59decab"}, + {file = "pre_commit-3.7.0.tar.gz", hash = "sha256:e209d61b8acdcf742404408531f0c37d49d2c734fd7cff2d6076083d191cb060"}, ] [package.dependencies] @@ -6355,17 +6611,17 @@ files = [ [[package]] name = "pymdown-extensions" -version = "10.7" +version = "10.8.1" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.7-py3-none-any.whl", hash = "sha256:6ca215bc57bc12bf32b414887a68b810637d039124ed9b2e5bd3325cbb2c050c"}, - {file = "pymdown_extensions-10.7.tar.gz", hash = "sha256:c0d64d5cf62566f59e6b2b690a4095c931107c250a8c8e1351c1de5f6b036deb"}, + {file = "pymdown_extensions-10.8.1-py3-none-any.whl", hash = "sha256:f938326115884f48c6059c67377c46cf631c733ef3629b6eed1349989d1b30cb"}, + {file = "pymdown_extensions-10.8.1.tar.gz", hash = "sha256:3ab1db5c9e21728dabf75192d71471f8e50f216627e9a1fa9535ecb0231b9940"}, ] [package.dependencies] -markdown = ">=3.5" +markdown = ">=3.6" pyyaml = "*" [package.extras] @@ -6424,13 +6680,13 @@ sql = ["pandas (>=1.0.5)", "pyarrow (>=1.0.0)"] [[package]] name = "pytest" -version = "8.1.0" +version = "8.2.0" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.1.0-py3-none-any.whl", hash = "sha256:ee32db7af8de4629a455806befa90559f307424c07b8413ccfc30bf5b221dd7e"}, - {file = "pytest-8.1.0.tar.gz", hash = "sha256:f8fa04ab8f98d185113ae60ea6d79c22f8143b14bc1caeced44a0ab844928323"}, + {file = "pytest-8.2.0-py3-none-any.whl", hash = "sha256:1733f0620f6cda4095bbf0d9ff8022486e91892245bb9e7d5542c018f612f233"}, + {file = "pytest-8.2.0.tar.gz", hash = "sha256:d507d4482197eac0ba2bae2e9babf0672eb333017bcedaa5fb1a3d42c1174b3f"}, ] [package.dependencies] @@ -6438,21 +6694,21 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=1.4,<2.0" +pluggy = ">=1.5,<2.0" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" -version = "4.1.0" +version = "5.0.0" description = "Pytest plugin for measuring coverage." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, - {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, + {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, + {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, ] [package.dependencies] @@ -6460,7 +6716,7 @@ coverage = {version = ">=5.2.1", extras = ["toml"]} pytest = ">=4.6" [package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] [[package]] name = "pytest-sugar" @@ -6483,18 +6739,18 @@ dev = ["black", "flake8", "pre-commit"] [[package]] name = "pytest-xdist" -version = "3.5.0" +version = "3.6.1" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-xdist-3.5.0.tar.gz", hash = "sha256:cbb36f3d67e0c478baa57fa4edc8843887e0f6cfc42d677530a36d7472b32d8a"}, - {file = "pytest_xdist-3.5.0-py3-none-any.whl", hash = "sha256:d075629c7e00b611df89f490a5063944bee7a4362a5ff11c7cc7824a03dfce24"}, + {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, + {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, ] [package.dependencies] -execnet = ">=1.1" -pytest = ">=6.2.0" +execnet = ">=2.1" +pytest = ">=7.0.0" [package.extras] psutil = ["psutil (>=3.0)"] @@ -6537,13 +6793,13 @@ six = ">=1.5" [[package]] name = "python-gitlab" -version = "3.15.0" -description = "Interact with GitLab API" +version = "4.4.0" +description = "A python wrapper for the GitLab API" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "python-gitlab-3.15.0.tar.gz", hash = "sha256:c9e65eb7612a9fbb8abf0339972eca7fd7a73d4da66c9b446ffe528930aff534"}, - {file = "python_gitlab-3.15.0-py3-none-any.whl", hash = "sha256:8f8d1c0d387f642eb1ac7bf5e8e0cd8b3dd49c6f34170cee3c7deb7d384611f3"}, + {file = "python-gitlab-4.4.0.tar.gz", hash = "sha256:1d117bf7b433ae8255e5d74e72c660978f50ee85eb62248c9fb52ef43c3e3814"}, + {file = "python_gitlab-4.4.0-py3-none-any.whl", hash = "sha256:cdad39d016f59664cdaad0f878f194c79cb4357630776caa9a92c1da25c8d986"}, ] [package.dependencies] @@ -6552,7 +6808,7 @@ requests-toolbelt = ">=0.10.1" [package.extras] autocompletion = ["argcomplete (>=1.10.0,<3)"] -yaml = ["PyYaml (>=5.2)"] +yaml = ["PyYaml (>=6.0.1)"] [[package]] name = "python-json-logger" @@ -6581,33 +6837,34 @@ python-slugify = ">=1.2.5" [[package]] name = "python-semantic-release" -version = "9.1.0" +version = "9.4.1" description = "Automatic Semantic Versioning for Python projects" optional = false python-versions = ">=3.8" files = [ - {file = "python-semantic-release-9.1.0.tar.gz", hash = "sha256:0317e72a940c5080c8aa6ff56cce6230f045b1a8f91f0a58fdc8f80745912369"}, - {file = "python_semantic_release-9.1.0-py3-none-any.whl", hash = "sha256:7ca5fb1ea4d5215182db477fbc53d9f4c907b7030520c4ac6640b9aaa71dbce7"}, + {file = "python-semantic-release-9.4.1.tar.gz", hash = "sha256:78d8a8674edbcc8f389799c27d1c5a604f5bc0f061ce14951a6b061e68b25895"}, + {file = "python_semantic_release-9.4.1-py3-none-any.whl", hash = "sha256:efe419bfb2e9eb8459d67109a725f00f1a93f487999ca02d757cf442c7f72679"}, ] [package.dependencies] -click = ">=8,<9" -dotty-dict = ">=1.3.0,<2" -gitpython = ">=3.0.8,<4" -importlib-resources = ">=5.7,<7" -jinja2 = ">=3.1.2,<4" -pydantic = ">=2,<3" -python-gitlab = ">=2,<5" -requests = ">=2.25,<3" -rich = ">=12.5.1" -shellingham = ">=1.5.0.post1" +click = ">=8.0,<9.0" +click-option-group = ">=0.5,<1.0" +dotty-dict = ">=1.3,<2.0" +gitpython = ">=3.0,<4.0" +importlib-resources = ">=6.0,<7.0" +jinja2 = ">=3.1,<4.0" +pydantic = ">=2.0,<3.0" +python-gitlab = ">=4.0,<5.0" +requests = ">=2.25,<3.0" +rich = ">=12.5,<13.0" +shellingham = ">=1.5,<2.0" tomlkit = ">=0.11,<1.0" [package.extras] -dev = ["pre-commit", "ruff (==0.1.11)", "tox"] -docs = ["Sphinx (<=6.0.0)", "furo (>=2023.3.27)", "sphinx-autobuild (==2021.03.14)", "sphinxcontrib-apidoc (==0.3.0)"] -mypy = ["mypy", "types-requests"] -test = ["coverage[toml] (>=6,<8)", "pytest (>=7,<8)", "pytest-clarity (>=1.0.1)", "pytest-cov (>=4,<5)", "pytest-env (>=1.0,<2.0)", "pytest-lazy-fixture (>=0.6.3,<0.7.0)", "pytest-mock (>=3,<4)", "pytest-pretty (>=1.2.0,<2)", "pytest-xdist (>=2,<4)", "requests-mock (>=1.10.0,<2)", "responses (==0.23.3)", "types-pytest-lazy-fixture (>=0.6.3.3)"] +dev = ["pre-commit (>=3.5,<4.0)", "ruff (==0.3.5)", "tox (>=4.11,<5.0)"] +docs = ["Sphinx (>=6.0,<7.0)", "furo (>=2023.3,<2024.0)", "sphinx-autobuild (==2024.2.4)", "sphinxcontrib-apidoc (==0.5.0)"] +mypy = ["mypy (==1.9.0)", "types-requests (>=2.31.0,<2.32.0)"] +test = ["coverage[toml] (>=7.0,<8.0)", "pytest (>=7.0,<8.0)", "pytest-clarity (>=1.0,<2.0)", "pytest-cov (>=5.0,<6.0)", "pytest-env (>=1.0,<2.0)", "pytest-lazy-fixture (>=0.6.3,<0.7.0)", "pytest-mock (>=3.0,<4.0)", "pytest-pretty (>=1.2,<2.0)", "pytest-xdist (>=3.0,<4.0)", "requests-mock (>=1.10,<2.0)", "responses (>=0.25.0,<0.26.0)", "types-pytest-lazy-fixture (>=0.6.3,<0.7.0)"] [[package]] name = "python-slugify" @@ -6696,6 +6953,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -7184,28 +7442,28 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.2.0" +version = "0.4.3" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.2.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:638ea3294f800d18bae84a492cb5a245c8d29c90d19a91d8e338937a4c27fca0"}, - {file = "ruff-0.2.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3ff35433fcf4dff6d610738712152df6b7d92351a1bde8e00bd405b08b3d5759"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf9faafbdcf4f53917019f2c230766da437d4fd5caecd12ddb68bb6a17d74399"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8153a3e4128ed770871c47545f1ae7b055023e0c222ff72a759f5a341ee06483"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8a75a98ae989a27090e9c51f763990ad5bbc92d20626d54e9701c7fe597f399"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:87057dd2fdde297130ff99553be8549ca38a2965871462a97394c22ed2dfc19d"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d232f99d3ab00094ebaf88e0fb7a8ccacaa54cc7fa3b8993d9627a11e6aed7a"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d3c641f95f435fc6754b05591774a17df41648f0daf3de0d75ad3d9f099ab92"}, - {file = "ruff-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3826fb34c144ef1e171b323ed6ae9146ab76d109960addca730756dc19dc7b22"}, - {file = "ruff-0.2.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:eceab7d85d09321b4de18b62d38710cf296cb49e98979960a59c6b9307c18cfe"}, - {file = "ruff-0.2.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:30ad74687e1f4a9ff8e513b20b82ccadb6bd796fe5697f1e417189c5cde6be3e"}, - {file = "ruff-0.2.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a7e3818698f8460bd0f8d4322bbe99db8327e9bc2c93c789d3159f5b335f47da"}, - {file = "ruff-0.2.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:edf23041242c48b0d8295214783ef543847ef29e8226d9f69bf96592dba82a83"}, - {file = "ruff-0.2.0-py3-none-win32.whl", hash = "sha256:e155147199c2714ff52385b760fe242bb99ea64b240a9ffbd6a5918eb1268843"}, - {file = "ruff-0.2.0-py3-none-win_amd64.whl", hash = "sha256:ba918e01cdd21e81b07555564f40d307b0caafa9a7a65742e98ff244f5035c59"}, - {file = "ruff-0.2.0-py3-none-win_arm64.whl", hash = "sha256:3fbaff1ba9564a2c5943f8f38bc221f04bac687cc7485e45237579fee7ccda79"}, - {file = "ruff-0.2.0.tar.gz", hash = "sha256:63856b91837606c673537d2889989733d7dffde553828d3b0f0bacfa6def54be"}, + {file = "ruff-0.4.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b70800c290f14ae6fcbb41bbe201cf62dfca024d124a1f373e76371a007454ce"}, + {file = "ruff-0.4.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:08a0d6a22918ab2552ace96adeaca308833873a4d7d1d587bb1d37bae8728eb3"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba1f14df3c758dd7de5b55fbae7e1c8af238597961e5fb628f3de446c3c40c5"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:819fb06d535cc76dfddbfe8d3068ff602ddeb40e3eacbc90e0d1272bb8d97113"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bfc9e955e6dc6359eb6f82ea150c4f4e82b660e5b58d9a20a0e42ec3bb6342b"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:510a67d232d2ebe983fddea324dbf9d69b71c4d2dfeb8a862f4a127536dd4cfb"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc9ff11cd9a092ee7680a56d21f302bdda14327772cd870d806610a3503d001f"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29efff25bf9ee685c2c8390563a5b5c006a3fee5230d28ea39f4f75f9d0b6f2f"}, + {file = "ruff-0.4.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b00e0bcccf0fc8d7186ed21e311dffd19761cb632241a6e4fe4477cc80ef6e"}, + {file = "ruff-0.4.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:262f5635e2c74d80b7507fbc2fac28fe0d4fef26373bbc62039526f7722bca1b"}, + {file = "ruff-0.4.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7363691198719c26459e08cc17c6a3dac6f592e9ea3d2fa772f4e561b5fe82a3"}, + {file = "ruff-0.4.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:eeb039f8428fcb6725bb63cbae92ad67b0559e68b5d80f840f11914afd8ddf7f"}, + {file = "ruff-0.4.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:927b11c1e4d0727ce1a729eace61cee88a334623ec424c0b1c8fe3e5f9d3c865"}, + {file = "ruff-0.4.3-py3-none-win32.whl", hash = "sha256:25cacda2155778beb0d064e0ec5a3944dcca9c12715f7c4634fd9d93ac33fd30"}, + {file = "ruff-0.4.3-py3-none-win_amd64.whl", hash = "sha256:7a1c3a450bc6539ef00da6c819fb1b76b6b065dec585f91456e7c0d6a0bbc725"}, + {file = "ruff-0.4.3-py3-none-win_arm64.whl", hash = "sha256:71ca5f8ccf1121b95a59649482470c5601c60a416bf189d553955b0338e34614"}, + {file = "ruff-0.4.3.tar.gz", hash = "sha256:ff0a3ef2e3c4b6d133fbedcf9586abfbe38d076041f2dc18ffb2c7e0485d5a07"}, ] [[package]] @@ -7620,30 +7878,51 @@ description = "Database Abstraction Library" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ + {file = "SQLAlchemy-1.4.50-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:54138aa80d2dedd364f4e8220eef284c364d3270aaef621570aa2bd99902e2e8"}, {file = "SQLAlchemy-1.4.50-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d00665725063692c42badfd521d0c4392e83c6c826795d38eb88fb108e5660e5"}, {file = "SQLAlchemy-1.4.50-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85292ff52ddf85a39367057c3d7968a12ee1fb84565331a36a8fead346f08796"}, {file = "SQLAlchemy-1.4.50-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d0fed0f791d78e7767c2db28d34068649dfeea027b83ed18c45a423f741425cb"}, {file = "SQLAlchemy-1.4.50-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db4db3c08ffbb18582f856545f058a7a5e4ab6f17f75795ca90b3c38ee0a8ba4"}, + {file = "SQLAlchemy-1.4.50-cp310-cp310-win32.whl", hash = "sha256:6c78e3fb4a58e900ec433b6b5f4efe1a0bf81bbb366ae7761c6e0051dd310ee3"}, + {file = "SQLAlchemy-1.4.50-cp310-cp310-win_amd64.whl", hash = "sha256:d55f7a33e8631e15af1b9e67c9387c894fedf6deb1a19f94be8731263c51d515"}, + {file = "SQLAlchemy-1.4.50-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:324b1fdd50e960a93a231abb11d7e0f227989a371e3b9bd4f1259920f15d0304"}, {file = "SQLAlchemy-1.4.50-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14b0cacdc8a4759a1e1bd47dc3ee3f5db997129eb091330beda1da5a0e9e5bd7"}, {file = "SQLAlchemy-1.4.50-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fb9cb60e0f33040e4f4681e6658a7eb03b5cb4643284172f91410d8c493dace"}, + {file = "SQLAlchemy-1.4.50-cp311-cp311-win32.whl", hash = "sha256:8bdab03ff34fc91bfab005e96f672ae207d87e0ac7ee716d74e87e7046079d8b"}, + {file = "SQLAlchemy-1.4.50-cp311-cp311-win_amd64.whl", hash = "sha256:52e01d60b06f03b0a5fc303c8aada405729cbc91a56a64cead8cb7c0b9b13c1a"}, + {file = "SQLAlchemy-1.4.50-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:77fde9bf74f4659864c8e26ac08add8b084e479b9a18388e7db377afc391f926"}, {file = "SQLAlchemy-1.4.50-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4cb501d585aa74a0f86d0ea6263b9c5e1d1463f8f9071392477fd401bd3c7cc"}, {file = "SQLAlchemy-1.4.50-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a7a66297e46f85a04d68981917c75723e377d2e0599d15fbe7a56abed5e2d75"}, + {file = "SQLAlchemy-1.4.50-cp312-cp312-win32.whl", hash = "sha256:e86c920b7d362cfa078c8b40e7765cbc34efb44c1007d7557920be9ddf138ec7"}, + {file = "SQLAlchemy-1.4.50-cp312-cp312-win_amd64.whl", hash = "sha256:6b3df20fbbcbcd1c1d43f49ccf3eefb370499088ca251ded632b8cbaee1d497d"}, + {file = "SQLAlchemy-1.4.50-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:fb9adc4c6752d62c6078c107d23327aa3023ef737938d0135ece8ffb67d07030"}, {file = "SQLAlchemy-1.4.50-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1db0221cb26d66294f4ca18c533e427211673ab86c1fbaca8d6d9ff78654293"}, {file = "SQLAlchemy-1.4.50-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7dbe6369677a2bea68fe9812c6e4bbca06ebfa4b5cde257b2b0bf208709131"}, {file = "SQLAlchemy-1.4.50-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a9bddb60566dc45c57fd0a5e14dd2d9e5f106d2241e0a2dc0c1da144f9444516"}, {file = "SQLAlchemy-1.4.50-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82dd4131d88395df7c318eeeef367ec768c2a6fe5bd69423f7720c4edb79473c"}, + {file = "SQLAlchemy-1.4.50-cp36-cp36m-win32.whl", hash = "sha256:1b9c4359d3198f341480e57494471201e736de459452caaacf6faa1aca852bd8"}, + {file = "SQLAlchemy-1.4.50-cp36-cp36m-win_amd64.whl", hash = "sha256:35e4520f7c33c77f2636a1e860e4f8cafaac84b0b44abe5de4c6c8890b6aaa6d"}, + {file = "SQLAlchemy-1.4.50-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:f5b1fb2943d13aba17795a770d22a2ec2214fc65cff46c487790192dda3a3ee7"}, {file = "SQLAlchemy-1.4.50-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:273505fcad22e58cc67329cefab2e436006fc68e3c5423056ee0513e6523268a"}, {file = "SQLAlchemy-1.4.50-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3257a6e09626d32b28a0c5b4f1a97bced585e319cfa90b417f9ab0f6145c33c"}, {file = "SQLAlchemy-1.4.50-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d69738d582e3a24125f0c246ed8d712b03bd21e148268421e4a4d09c34f521a5"}, {file = "SQLAlchemy-1.4.50-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34e1c5d9cd3e6bf3d1ce56971c62a40c06bfc02861728f368dcfec8aeedb2814"}, + {file = "SQLAlchemy-1.4.50-cp37-cp37m-win32.whl", hash = "sha256:7b4396452273aedda447e5aebe68077aa7516abf3b3f48408793e771d696f397"}, + {file = "SQLAlchemy-1.4.50-cp37-cp37m-win_amd64.whl", hash = "sha256:752f9df3dddbacb5f42d8405b2d5885675a93501eb5f86b88f2e47a839cf6337"}, + {file = "SQLAlchemy-1.4.50-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:35c7ed095a4b17dbc8813a2bfb38b5998318439da8e6db10a804df855e3a9e3a"}, {file = "SQLAlchemy-1.4.50-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1fcee5a2c859eecb4ed179edac5ffbc7c84ab09a5420219078ccc6edda45436"}, {file = "SQLAlchemy-1.4.50-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbaf6643a604aa17e7a7afd74f665f9db882df5c297bdd86c38368f2c471f37d"}, {file = "SQLAlchemy-1.4.50-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2e70e0673d7d12fa6cd363453a0d22dac0d9978500aa6b46aa96e22690a55eab"}, {file = "SQLAlchemy-1.4.50-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b881ac07d15fb3e4f68c5a67aa5cdaf9eb8f09eb5545aaf4b0a5f5f4659be18"}, + {file = "SQLAlchemy-1.4.50-cp38-cp38-win32.whl", hash = "sha256:8a219688297ee5e887a93ce4679c87a60da4a5ce62b7cb4ee03d47e9e767f558"}, + {file = "SQLAlchemy-1.4.50-cp38-cp38-win_amd64.whl", hash = "sha256:a648770db002452703b729bdcf7d194e904aa4092b9a4d6ab185b48d13252f63"}, + {file = "SQLAlchemy-1.4.50-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:4be4da121d297ce81e1ba745a0a0521c6cf8704634d7b520e350dce5964c71ac"}, {file = "SQLAlchemy-1.4.50-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f6997da81114daef9203d30aabfa6b218a577fc2bd797c795c9c88c9eb78d49"}, {file = "SQLAlchemy-1.4.50-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdb77e1789e7596b77fd48d99ec1d2108c3349abd20227eea0d48d3f8cf398d9"}, {file = "SQLAlchemy-1.4.50-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:128a948bd40780667114b0297e2cc6d657b71effa942e0a368d8cc24293febb3"}, {file = "SQLAlchemy-1.4.50-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2d526aeea1bd6a442abc7c9b4b00386fd70253b80d54a0930c0a216230a35be"}, + {file = "SQLAlchemy-1.4.50-cp39-cp39-win32.whl", hash = "sha256:a7c9b9dca64036008962dd6b0d9fdab2dfdbf96c82f74dbd5d86006d8d24a30f"}, + {file = "SQLAlchemy-1.4.50-cp39-cp39-win_amd64.whl", hash = "sha256:df200762efbd672f7621b253721644642ff04a6ff957236e0e2fe56d9ca34d2c"}, {file = "SQLAlchemy-1.4.50.tar.gz", hash = "sha256:3b97ddf509fc21e10b09403b5219b06c5b558b27fc2453150274fa4e70707dbf"}, ] @@ -7856,17 +8135,6 @@ files = [ {file = "threadpoolctl-3.2.0.tar.gz", hash = "sha256:c96a0ba3bdddeaca37dc4cc7344aafad41cdb8c313f74fdfe387a867bba93355"}, ] -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - [[package]] name = "tomli" version = "2.0.1" @@ -7947,13 +8215,13 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6. [[package]] name = "typing-extensions" -version = "4.10.0" +version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, - {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] @@ -8480,4 +8748,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.10, <3.11" -content-hash = "8d85933db4bf8f4ca92ef227e9a767d26f4f7d2b360083449cfafc54878885fc" +content-hash = "f3118a34b55508e9d5876d1aefaa7754a8307277591c650fcd8c119033290552" diff --git a/pyproject.toml b/pyproject.toml index d94d8412b..818d0685a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,13 +35,13 @@ scikit-learn = "^1.3.2" pandas = "^2.1.4" [tool.poetry.dev-dependencies] -pre-commit = "^3.6.0" -mypy = "^1.8" +pre-commit = "^3.7.0" +mypy = "^1.10" pep8-naming = "^0.13.2" -interrogate = "^1.5.0" +interrogate = "^1.7.0" isort = "^5.13.2" darglint = "^1.8.1" -ruff = "^0.2.0" +ruff = "^0.4.3" [tool.poetry.group.docs.dependencies] mkdocs = "^1.5.3" @@ -58,7 +58,7 @@ pymdown-extensions = "^10.7" [tool.poetry.group.tests.dependencies] -pytest-cov = "^4.1.0" +pytest-cov = ">=4.1,<6.0" pytest-sugar = ">=0.9.5,<1.1.0" dbldatagen = "^0.3.1" pyparsing = "^3.1.1" @@ -74,7 +74,7 @@ apache-airflow = "^2.8.0" apache-airflow-providers-google = "^10.13.1" pydoclint = ">=0.3.8,<0.5.0" prettier = "^0.0.7" -deptry = "^0.12.0" +deptry = ">=0.12,<0.17" python-semantic-release = ">=8.7,<10.0" yamllint = "^1.33.0" diff --git a/src/airflow/dags/common_airflow.py b/src/airflow/dags/common_airflow.py index e3dc56ccb..f3ec89bb2 100644 --- a/src/airflow/dags/common_airflow.py +++ b/src/airflow/dags/common_airflow.py @@ -13,7 +13,7 @@ DataprocSubmitJobOperator, ) from airflow.utils.trigger_rule import TriggerRule -from google.cloud import dataproc_v1 +from google.cloud import dataproc_v1, storage if TYPE_CHECKING: from pathlib import Path @@ -59,6 +59,22 @@ } +def check_gcp_folder_exists(bucket_name: str, folder_path: str) -> bool: + """Check if a folder exists in a Google Cloud bucket. + + Args: + bucket_name (str): The name of the Google Cloud bucket. + folder_path (str): The path of the folder to check. + + Returns: + bool: True if the folder exists, False otherwise. + """ + client = storage.Client() + bucket = client.get_bucket(bucket_name) + blobs = bucket.list_blobs(prefix=folder_path) + return any(blobs) + + def create_cluster( cluster_name: str, master_machine_type: str = "n1-highmem-16", @@ -111,9 +127,9 @@ def create_cluster( # Create a disk config section if it does not exist. cluster_config[worker_section].setdefault("disk_config", {}) # Specify the number of local SSDs. - cluster_config[worker_section]["disk_config"][ - "num_local_ssds" - ] = num_local_ssds + cluster_config[worker_section]["disk_config"]["num_local_ssds"] = ( + num_local_ssds + ) # Return the cluster creation operator. return DataprocCreateClusterOperator( diff --git a/src/airflow/dags/configs/dag.yaml b/src/airflow/dags/configs/dag.yaml index 0b634caaa..b6d343343 100644 --- a/src/airflow/dags/configs/dag.yaml +++ b/src/airflow/dags/configs/dag.yaml @@ -4,15 +4,18 @@ prerequisites: - "ot_variant_index" - "ot_gene_index" -- id: "ot_colocalisation" +- id: "ot_colocalisation_ecaviar" +- id: "ot_colocalisation_coloc" - id: "ot_locus_to_gene_train" prerequisites: - "ot_variant_index" - "ot_variant_to_gene" - - "ot_colocalisation" + - "ot_colocalisation_ecaviar" + - "ot_colocalisation_coloc" - id: "ot_locus_to_gene_predict" prerequisites: - "ot_locus_to_gene_train" - "ot_variant_index" - "ot_variant_to_gene" - - "ot_colocalisation" + - "ot_colocalisation_ecaviar" + - "ot_colocalisation_coloc" diff --git a/src/airflow/dags/dag_genetics_etl.py b/src/airflow/dags/dag_genetics_etl.py deleted file mode 100644 index 1d27b8bba..000000000 --- a/src/airflow/dags/dag_genetics_etl.py +++ /dev/null @@ -1,35 +0,0 @@ -"""Airflow DAG for the ETL part of the pipeline.""" -from __future__ import annotations - -from pathlib import Path - -import common_airflow as common -from airflow.models.dag import DAG - -CLUSTER_NAME = "otg-etl" -SOURCE_CONFIG_FILE_PATH = Path(__file__).parent / "configs" / "dag.yaml" - - -with DAG( - dag_id=Path(__file__).stem, - description="Open Targets Genetics ETL workflow", - default_args=common.shared_dag_args, - **common.shared_dag_kwargs, -): - # Parse and define all steps and their prerequisites. - tasks = {} - steps = common.read_yaml_config(SOURCE_CONFIG_FILE_PATH) - for step in steps: - # Define task for the current step. - step_id = step["id"] - this_task = common.submit_step( - cluster_name=CLUSTER_NAME, - step_id=step_id, - task_id=step_id, - ) - # Chain prerequisites. - tasks[step_id] = this_task - for prerequisite in step.get("prerequisites", []): - this_task.set_upstream(tasks[prerequisite]) - # Construct the DAG with all tasks. - dag = common.generate_dag(cluster_name=CLUSTER_NAME, tasks=list(tasks.values())) diff --git a/src/airflow/dags/eqtl_preprocess.py b/src/airflow/dags/eqtl_preprocess.py index ec346d137..5433d8968 100644 --- a/src/airflow/dags/eqtl_preprocess.py +++ b/src/airflow/dags/eqtl_preprocess.py @@ -15,11 +15,11 @@ AUTOSCALING = "eqtl-preprocess" PROJECT_ID = "open-targets-genetics-dev" -EQTL_CATALOG_SUSIE_LOCATION = "gs://eqtl_catalog_data/ebi_ftp/susie" -TEMP_DECOMPRESS_LOCATION = "gs://eqtl_catalog_data/susie_decompressed_tmp" +EQTL_CATALOG_SUSIE_LOCATION = "gs://eqtl_catalogue_data/ebi_ftp/susie" +TEMP_DECOMPRESS_LOCATION = "gs://eqtl_catalogue_data/susie_decompressed_tmp" DECOMPRESS_FAILED_LOG = f"{TEMP_DECOMPRESS_LOCATION}.log" -STUDY_INDEX_PATH = "gs://eqtl_catalog_data/study_index" -CREDIBLE_SET_PATH = "gs://eqtl_catalog_data/credible_set_datasets/susie" +STUDY_INDEX_PATH = "gs://eqtl_catalogue_data/study_index" +CREDIBLE_SET_PATH = "gs://eqtl_catalogue_data/credible_set_datasets/susie" with DAG( dag_id=Path(__file__).stem, diff --git a/src/airflow/dags/finngen_preprocess.py b/src/airflow/dags/finngen_preprocess.py index 38aeb2510..d4fc9446d 100644 --- a/src/airflow/dags/finngen_preprocess.py +++ b/src/airflow/dags/finngen_preprocess.py @@ -26,7 +26,7 @@ ) FINNGEN_FM_SUMMARIES = "gs://genetics_etl_python_playground/input/Finngen_susie_finemapping_r10/Finngen_susie_credset_summary_r10.tsv" FINNGEN_PREFIX = "FINNGEN_R10_" -FINNGEN_FM_OUT = "gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/finngen_susie_processed" +FINNGEN_FM_OUT = f"{FINNGEN_BUCKET}/credible_set_datasets/finngen_susie" with DAG( dag_id=Path(__file__).stem, diff --git a/src/airflow/dags/genetics_etl.py b/src/airflow/dags/genetics_etl.py new file mode 100644 index 000000000..ae510131c --- /dev/null +++ b/src/airflow/dags/genetics_etl.py @@ -0,0 +1,160 @@ +"""Test DAG to prototype data transfer.""" + +from __future__ import annotations + +from pathlib import Path + +import common_airflow as common +from airflow.models.dag import DAG +from airflow.operators.python import ShortCircuitOperator +from airflow.providers.google.cloud.transfers.gcs_to_gcs import GCSToGCSOperator +from airflow.utils.task_group import TaskGroup + +CLUSTER_NAME = "otg-etl" +SOURCE_CONFIG_FILE_PATH = Path(__file__).parent / "configs" / "dag.yaml" + +# Release specific variables: +RELEASE_VERSION = "24.03" +RELEASE_BUCKET_NAME = "genetics_etl_python_playground" + +# Datasource paths: +GWAS_CATALOG_BUCKET_NAME = "gwas_catalog_data" +EQTL_BUCKET_NAME = "eqtl_catalogue_data" +FINNGEN_BUCKET_NAME = "finngen_data" +FINNGEN_RELEASE = "r10" + +# Files to move: +DATA_TO_MOVE = { + # GWAS Catalog summary study index: + "gwas_catalog_study_index": { + "source_bucket": GWAS_CATALOG_BUCKET_NAME, + "source_object": "study_index", + "destination_bucket": RELEASE_BUCKET_NAME, + "destination_object": f"releases/{RELEASE_VERSION}/study_index/gwas_catalog", + }, + # PICS credible sets from GWAS Catalog curated associations: + "gwas_catalog_curated_credible_set": { + "source_bucket": GWAS_CATALOG_BUCKET_NAME, + "source_object": "credible_set_datasets/gwas_catalog_PICSed_curated_associations", + "destination_bucket": RELEASE_BUCKET_NAME, + "destination_object": f"releases/{RELEASE_VERSION}/credible_set/gwas_catalog_PICSed_curated_associations", + }, + # PICS credible sets from GWAS Catalog summary statistics: + "gwas_catalog_sumstats_credible_set": { + "source_bucket": GWAS_CATALOG_BUCKET_NAME, + "source_object": "credible_set_datasets/gwas_catalog_PICSed_summary_statistics", + "destination_bucket": RELEASE_BUCKET_NAME, + "destination_object": f"releases/{RELEASE_VERSION}/credible_set/gwas_catalog_PICSed_summary_statistics", + }, + # GWAS Catalog manifest files: + "gwas_catalog_manifests": { + "source_bucket": GWAS_CATALOG_BUCKET_NAME, + "source_object": "manifests", + "destination_bucket": RELEASE_BUCKET_NAME, + "destination_object": f"releases/{RELEASE_VERSION}/manifests", + }, + # eQTL Catalog study index: + "eqtl_catalogue_study_index": { + "source_bucket": EQTL_BUCKET_NAME, + "source_object": "study_index", + "destination_bucket": RELEASE_BUCKET_NAME, + "destination_object": f"releases/{RELEASE_VERSION}/study_index/eqtl_catalogue", + }, + # eQTL Catalog SuSiE credible sets: + "eqtl_catalogue_susie_credible_set": { + "source_bucket": EQTL_BUCKET_NAME, + "source_object": "credible_set_datasets/susie", + "destination_bucket": RELEASE_BUCKET_NAME, + "destination_object": f"releases/{RELEASE_VERSION}/credible_set/eqtl_catalogue_susie", + }, + # Finngen study index: + "finngen_study_index": { + "source_bucket": FINNGEN_BUCKET_NAME, + "source_object": f"{FINNGEN_RELEASE}/study_index", + "destination_bucket": RELEASE_BUCKET_NAME, + "destination_object": f"releases/{RELEASE_VERSION}/study_index/finngen", + }, + # Finngen summary statistics: + "finngen_PICS_credible_set": { + "source_bucket": FINNGEN_BUCKET_NAME, + "source_object": f"{FINNGEN_RELEASE}/credible_set_datasets/finngen_pics", + "destination_bucket": RELEASE_BUCKET_NAME, + "destination_object": f"releases/{RELEASE_VERSION}/credible_set/finngen_pics", + }, + # Finngen SuSiE credible sets: + "finngen_susie_credible_set": { + "source_bucket": FINNGEN_BUCKET_NAME, + "source_object": f"{FINNGEN_RELEASE}/credible_set_datasets/finngen_susie_processed", + "destination_bucket": RELEASE_BUCKET_NAME, + "destination_object": f"releases/{RELEASE_VERSION}/credible_set/finngen_susie", + }, + # L2G gold standard: + "gold_standard": { + "source_bucket": "genetics_etl_python_playground", + "source_object": "input/l2g/gold_standard/curation.json", + "destination_bucket": RELEASE_BUCKET_NAME, + "destination_object": f"releases/{RELEASE_VERSION}/locus_to_gene_gold_standard.json", + }, +} + + +# This operator meant to fail the DAG if the release folder exists: +ensure_release_folder_not_exists = ShortCircuitOperator( + task_id="test_release_folder_exists", + python_callable=lambda bucket, path: not common.check_gcp_folder_exists( + bucket, path + ), + op_kwargs={ + "bucket": RELEASE_BUCKET_NAME, + "path": f"releases/{RELEASE_VERSION}", + }, +) + +with DAG( + dag_id=Path(__file__).stem, + description="Open Targets Genetics ETL workflow", + default_args=common.shared_dag_args, + **common.shared_dag_kwargs, +): + # Compiling tasks for moving data to the right place: + with TaskGroup(group_id="data_transfer") as data_transfer: + # Defining the tasks to execute in the task group: + [ + GCSToGCSOperator( + task_id=f"move_{data_name}", + source_bucket=data["source_bucket"], + source_object=data["source_object"], + destination_bucket=data["destination_bucket"], + destination_object=data["destination_object"], + ) + for data_name, data in DATA_TO_MOVE.items() + ] + + with TaskGroup(group_id="genetics_etl") as genetics_etl: + # Parse and define all steps and their prerequisites. + tasks = {} + steps = common.read_yaml_config(SOURCE_CONFIG_FILE_PATH) + for step in steps: + # Define task for the current step. + step_id = step["id"] + this_task = common.submit_step( + cluster_name=CLUSTER_NAME, + step_id=step_id, + task_id=step_id, + ) + # Chain prerequisites. + tasks[step_id] = this_task + for prerequisite in step.get("prerequisites", []): + this_task.set_upstream(tasks[prerequisite]) + + common.generate_dag(cluster_name=CLUSTER_NAME, tasks=list(tasks.values())) + + # DAG description: + ( + # Test that the release folder doesn't exist: + ensure_release_folder_not_exists + # Run data transfer: + >> data_transfer + # Once datasets are transferred, run the rest of the steps: + >> genetics_etl + ) diff --git a/src/airflow/dags/dag_preprocess.py b/src/airflow/dags/gnomad_preprocess.py similarity index 94% rename from src/airflow/dags/dag_preprocess.py rename to src/airflow/dags/gnomad_preprocess.py index 4439914c5..22e7fa056 100644 --- a/src/airflow/dags/dag_preprocess.py +++ b/src/airflow/dags/gnomad_preprocess.py @@ -1,4 +1,5 @@ """Airflow DAG for the Preprocess part of the pipeline.""" + from __future__ import annotations from pathlib import Path @@ -6,7 +7,7 @@ import common_airflow as common from airflow.models.dag import DAG -CLUSTER_NAME = "otg-preprocess" +CLUSTER_NAME = "gnomad-preprocess" ALL_STEPS = [ "ot_ld_index", diff --git a/src/airflow/dags/gwas_catalog_preprocess.py b/src/airflow/dags/gwas_catalog_preprocess.py index 36130c87e..1814ddf2d 100644 --- a/src/airflow/dags/gwas_catalog_preprocess.py +++ b/src/airflow/dags/gwas_catalog_preprocess.py @@ -45,12 +45,8 @@ WINDOW_BASED_CLUMPED = f"gs://{GWAS_CATALOG_BUCKET_NAME}/study_locus_datasets/gwas_catalog_summary_stats_window_clumped" LD_BASED_CLUMPED = f"gs://{GWAS_CATALOG_BUCKET_NAME}/study_locus_datasets/gwas_catalog_summary_stats_ld_clumped" # Credible sets: -CURATED_CREDIBLE_SETS = ( - f"gs://{GWAS_CATALOG_BUCKET_NAME}/credible_set_datasets/gwas_catalog_curated" -) -SUMMARY_STATISTICS_CREDIBLE_SETS = ( - f"gs://{GWAS_CATALOG_BUCKET_NAME}/credible_set_datasets/gwas_catalog_summary_stats" -) +CURATED_CREDIBLE_SETS = f"gs://{GWAS_CATALOG_BUCKET_NAME}/credible_set_datasets/gwas_catalog_PICSed_curated_associations" +SUMMARY_STATISTICS_CREDIBLE_SETS = f"gs://{GWAS_CATALOG_BUCKET_NAME}/credible_set_datasets/gwas_catalog_PICSed_summary_statistics" def upload_harmonized_study_list( diff --git a/src/airflow/dags/gwas_curation_update.py b/src/airflow/dags/gwas_curation_update.py index 1ef0f39f9..830007e6d 100644 --- a/src/airflow/dags/gwas_curation_update.py +++ b/src/airflow/dags/gwas_curation_update.py @@ -18,7 +18,7 @@ ): update_gwas_curation = common.submit_step( cluster_name=CLUSTER_NAME, - step_id="gwas_catalog_curation_update", + step_id="ot_gwas_catalog_study_curation", task_id="gwas_catalog_curation_update", other_args=[ f"step.gwas_catalog_study_curation_out=gs://genetics_etl_python_playground/input/v2d/GWAS_Catalog_study_curation_{RUN_DATE}.tsv", diff --git a/src/gentropy/assets/schemas/l2g_feature_matrix.json b/src/gentropy/assets/schemas/l2g_feature_matrix.json index a1b58040b..114936168 100644 --- a/src/gentropy/assets/schemas/l2g_feature_matrix.json +++ b/src/gentropy/assets/schemas/l2g_feature_matrix.json @@ -125,6 +125,30 @@ "name": "sqtlColocLlrMaximumNeighborhood", "nullable": true, "type": "float" + }, + { + "metadata": {}, + "name": "tuqtlColocClppMaximum", + "nullable": true, + "type": "float" + }, + { + "metadata": {}, + "name": "tuqtlColocClppMaximumNeighborhood", + "nullable": true, + "type": "float" + }, + { + "metadata": {}, + "name": "tuqtlColocLlrMaximum", + "nullable": true, + "type": "float" + }, + { + "metadata": {}, + "name": "tuqtlColocLlrMaximumNeighborhood", + "nullable": true, + "type": "float" } ], "type": "struct" diff --git a/src/gentropy/assets/schemas/pairwise_ld.json b/src/gentropy/assets/schemas/pairwise_ld.json new file mode 100644 index 000000000..bac781ac3 --- /dev/null +++ b/src/gentropy/assets/schemas/pairwise_ld.json @@ -0,0 +1,23 @@ +{ + "fields": [ + { + "metadata": {}, + "name": "variantIdI", + "nullable": false, + "type": "string" + }, + { + "metadata": {}, + "name": "variantIdJ", + "nullable": false, + "type": "string" + }, + { + "metadata": {}, + "name": "r", + "nullable": false, + "type": "double" + } + ], + "type": "struct" +} diff --git a/src/gentropy/assets/schemas/study_locus.json b/src/gentropy/assets/schemas/study_locus.json index e0f366d68..bf18a73b8 100644 --- a/src/gentropy/assets/schemas/study_locus.json +++ b/src/gentropy/assets/schemas/study_locus.json @@ -42,6 +42,12 @@ "nullable": true, "type": "double" }, + { + "metadata": {}, + "name": "zScore", + "nullable": true, + "type": "double" + }, { "metadata": {}, "name": "pValueMantissa", @@ -100,6 +106,18 @@ "nullable": true, "type": "double" }, + { + "metadata": {}, + "name": "purityMeanR2", + "nullable": true, + "type": "double" + }, + { + "metadata": {}, + "name": "purityMinR2", + "nullable": true, + "type": "double" + }, { "metadata": {}, "name": "sampleSize", diff --git a/src/gentropy/assets/schemas/variant_annotation.json b/src/gentropy/assets/schemas/variant_annotation.json index 826eabaf9..ab8767389 100644 --- a/src/gentropy/assets/schemas/variant_annotation.json +++ b/src/gentropy/assets/schemas/variant_annotation.json @@ -19,12 +19,6 @@ "nullable": false, "metadata": {} }, - { - "name": "gnomadVariantId", - "type": "string", - "nullable": false, - "metadata": {} - }, { "name": "referenceAllele", "type": "string", diff --git a/src/gentropy/clump.py b/src/gentropy/clump.py deleted file mode 100644 index 9ea3306ac..000000000 --- a/src/gentropy/clump.py +++ /dev/null @@ -1,70 +0,0 @@ -"""Step to run clump associations from summary statistics or study locus.""" -from __future__ import annotations - -from typing import Optional - -from gentropy.common.session import Session -from gentropy.dataset.ld_index import LDIndex -from gentropy.dataset.study_index import StudyIndex -from gentropy.dataset.study_locus import StudyLocus -from gentropy.dataset.summary_statistics import SummaryStatistics - - -class ClumpStep: - """Perform clumping of an association dataset to identify independent signals. - - Two types of clumping are supported and are applied based on the input dataset: - - Clumping of summary statistics based on a window-based approach. - - Clumping of study locus based on LD. - - Both approaches yield a StudyLocus dataset. - """ - - def __init__( - self, - session: Session, - input_path: str, - clumped_study_locus_path: str, - study_index_path: Optional[str] = None, - ld_index_path: Optional[str] = None, - locus_collect_distance: Optional[int] = None, - ) -> None: - """Run the clumping step. - - Args: - session (Session): Session object. - input_path (str): Input path for the study locus or summary statistics files. - clumped_study_locus_path (str): Output path for the clumped study locus dataset. - study_index_path (Optional[str]): Input path for the study index dataset. - ld_index_path (Optional[str]): Input path for the LD index dataset. - locus_collect_distance (Optional[int]): Distance in base pairs to collect variants around the study locus. - - Raises: - ValueError: If study index and LD index paths are not provided for study locus. - """ - input_cols = session.spark.read.parquet( - input_path, recursiveFileLookup=True - ).columns - if "studyLocusId" in input_cols: - if study_index_path is None or ld_index_path is None: - raise ValueError( - "Study index and LD index paths are required for clumping study locus." - ) - study_locus = StudyLocus.from_parquet(session, input_path) - ld_index = LDIndex.from_parquet(session, ld_index_path) - study_index = StudyIndex.from_parquet(session, study_index_path) - - clumped_study_locus = study_locus.annotate_ld( - study_index=study_index, ld_index=ld_index - ).clump() - else: - sumstats = SummaryStatistics.from_parquet( - session, input_path, recursiveFileLookup=True - ).coalesce(4000) - clumped_study_locus = sumstats.window_based_clumping( - locus_collect_distance=locus_collect_distance - ) - - clumped_study_locus.df.write.mode(session.write_mode).parquet( - clumped_study_locus_path - ) diff --git a/src/gentropy/colocalisation.py b/src/gentropy/colocalisation.py index 010827713..1d71ed447 100644 --- a/src/gentropy/colocalisation.py +++ b/src/gentropy/colocalisation.py @@ -1,10 +1,15 @@ """Step to generate colocalisation results.""" from __future__ import annotations +import inspect +from importlib import import_module + +from pyspark.sql.functions import col + from gentropy.common.session import Session from gentropy.dataset.study_index import StudyIndex from gentropy.dataset.study_locus import CredibleInterval, StudyLocus -from gentropy.method.colocalisation import ECaviar +from gentropy.method.colocalisation import Coloc class ColocalisationStep: @@ -19,6 +24,7 @@ def __init__( credible_set_path: str, study_index_path: str, coloc_path: str, + colocalisation_method: str, ) -> None: """Run Colocalisation step. @@ -27,10 +33,18 @@ def __init__( credible_set_path (str): Input credible sets path. study_index_path (str): Input study index path. coloc_path (str): Output Colocalisation path. + colocalisation_method (str): Colocalisation method. """ + colocalisation_class = self._get_colocalisation_class(colocalisation_method) # Extract - credible_set = StudyLocus.from_parquet( - session, credible_set_path, recursiveFileLookup=True + credible_set = ( + StudyLocus.from_parquet( + session, credible_set_path, recursiveFileLookup=True + ).filter(col("finemappingMethod") == "SuSie") + if colocalisation_class is Coloc + else StudyLocus.from_parquet( + session, credible_set_path, recursiveFileLookup=True + ) ) si = StudyIndex.from_parquet( session, study_index_path, recursiveFileLookup=True @@ -40,7 +54,39 @@ def __init__( overlaps = credible_set.filter_credible_set( CredibleInterval.IS95 ).find_overlaps(si) - ecaviar_results = ECaviar.colocalise(overlaps) + colocalisation_results = colocalisation_class.colocalise(overlaps) # type: ignore # Load - ecaviar_results.df.write.mode(session.write_mode).parquet(coloc_path) + colocalisation_results.df.write.mode(session.write_mode).parquet( + f"{coloc_path}/{colocalisation_method.lower()}" + ) + + @classmethod + def _get_colocalisation_class(cls: type[ColocalisationStep], method: str) -> type: + """Get colocalisation class. + + Args: + method (str): Colocalisation method. + + Returns: + type: Colocalisation class. + + Raises: + ValueError: if method not available. + + Examples: + >>> ColocalisationStep._get_colocalisation_class("ECaviar") + + """ + module_name = "gentropy.method.colocalisation" + module = import_module(module_name) + + available_methods = [] + for class_name, class_obj in inspect.getmembers(module, inspect.isclass): + if class_obj.__module__ == module_name: + available_methods.append(class_name) + if class_name == method: + return class_obj + raise ValueError( + f"Method {method} is not supported. Available: {(', ').join(available_methods)}" + ) diff --git a/src/gentropy/common/utils.py b/src/gentropy/common/utils.py index 4cdda9ad2..3ec361a50 100644 --- a/src/gentropy/common/utils.py +++ b/src/gentropy/common/utils.py @@ -1,4 +1,5 @@ """Common functions in the Genetics datasets.""" + from __future__ import annotations import sys @@ -208,41 +209,6 @@ def parse_pvalue(pv: Column) -> list[Column]: ] -def convert_gnomad_position_to_ensembl( - position: Column, reference: Column, alternate: Column -) -> Column: - """Convert GnomAD variant position to Ensembl variant position. - - For indels (the reference or alternate allele is longer than 1), then adding 1 to the position, for SNPs, - the position is unchanged. More info about the problem: https://www.biostars.org/p/84686/ - - Args: - position (Column): Position of the variant in GnomAD's coordinates system. - reference (Column): The reference allele in GnomAD's coordinates system. - alternate (Column): The alternate allele in GnomAD's coordinates system. - - Returns: - Column: The position of the variant in the Ensembl genome. - - Examples: - >>> d = [(1, "A", "C"), (2, "AA", "C"), (3, "A", "AA")] - >>> df = spark.createDataFrame(d).toDF("position", "reference", "alternate") - >>> df.withColumn("new_position", convert_gnomad_position_to_ensembl(f.col("position"), f.col("reference"), f.col("alternate"))).show() - +--------+---------+---------+------------+ - |position|reference|alternate|new_position| - +--------+---------+---------+------------+ - | 1| A| C| 1| - | 2| AA| C| 3| - | 3| A| AA| 4| - +--------+---------+---------+------------+ - - - """ - return f.when( - (f.length(reference) > 1) | (f.length(alternate) > 1), position + 1 - ).otherwise(position) - - def _liftover_loci( variant_index: Table, chain_path: str, dest_reference_genome: str ) -> Table: diff --git a/src/gentropy/config.py b/src/gentropy/config.py index 7202ee578..59452fed8 100644 --- a/src/gentropy/config.py +++ b/src/gentropy/config.py @@ -37,6 +37,7 @@ class ColocalisationConfig(StepConfig): credible_set_path: str = MISSING study_index_path: str = MISSING coloc_path: str = MISSING + colocalisation_method: str = MISSING _target_: str = "gentropy.colocalisation.ColocalisationStep" @@ -182,6 +183,7 @@ class LocusToGeneConfig(StepConfig): "spark.dynamicAllocation.enabled": "false", "spark.driver.memory": "48g", "spark.executor.memory": "48g", + "spark.sql.shuffle.partitions": "800", } } ) @@ -213,13 +215,17 @@ class LocusToGeneConfig(StepConfig): # max clpp for each (study, locus) aggregating over all eQTLs "eqtlColocClppMaximumNeighborhood", # max clpp for each (study, locus, gene) aggregating over all pQTLs - # "pqtlColocClppMaximum", + "pqtlColocClppMaximum", # max clpp for each (study, locus) aggregating over all pQTLs - # "pqtlColocClppMaximumNeighborhood", + "pqtlColocClppMaximumNeighborhood", # max clpp for each (study, locus, gene) aggregating over all sQTLs - # "sqtlColocClppMaximum", + "sqtlColocClppMaximum", # max clpp for each (study, locus) aggregating over all sQTLs - # "sqtlColocClppMaximumNeighborhood", + "sqtlColocClppMaximumNeighborhood", + # max clpp for each (study, locus) aggregating over all tuQTLs + "tuqtlColocClppMaximum", + # max clpp for each (study, locus, gene) aggregating over all tuQTLs + "tuqtlColocClppMaximumNeighborhood", # # max log-likelihood ratio value for each (study, locus, gene) aggregating over all eQTLs # "eqtlColocLlrLocalMaximum", # # max log-likelihood ratio value for each (study, locus) aggregating over all eQTLs @@ -316,12 +322,45 @@ class WindowBasedClumpingStep(StepConfig): summary_statistics_input_path: str = MISSING study_locus_output_path: str = MISSING + distance: int = 500_000 + collect_locus: bool = False + collect_locus_distance: int = 500_000 inclusion_list_path: str | None = None - locus_collect_distance: str | None = None - _target_: str = "gentropy.window_based_clumping.WindowBasedClumpingStep" +@dataclass +class FinemapperConfig(StepConfig): + """SuSiE fine-mapper step configuration.""" + + session: Any = field( + default_factory=lambda: { + "start_hail": True, + } + ) + study_locus_to_finemap: str = MISSING + study_locus_collected_path: str = MISSING + study_index_path: str = MISSING + output_path: str = MISSING + locus_radius: int = MISSING + max_causal_snps: int = MISSING + primary_signal_pval_threshold: float = MISSING + secondary_signal_pval_threshold: float = MISSING + purity_mean_r2_threshold: float = MISSING + purity_min_r2_threshold: float = MISSING + cs_lbf_th: float = MISSING + sum_pips: float = MISSING + logging: bool = MISSING + susie_est_tausq: bool = MISSING + run_carma: bool = MISSING + run_sumstat_imputation: bool = MISSING + carma_time_limit: int = MISSING + imputed_r2_threshold: float = MISSING + ld_score_threshold: float = MISSING + output_path_log: str = MISSING + _target_: str = "gentropy.susie_finemapper.SusieFineMapperStep" + + @dataclass class Config: """Application configuration.""" @@ -379,3 +418,4 @@ def register_config() -> None: cs.store(group="step", name="variant_index", node=VariantIndexConfig) cs.store(group="step", name="variant_to_gene", node=VariantToGeneConfig) cs.store(group="step", name="window_based_clumping", node=WindowBasedClumpingStep) + cs.store(group="step", name="susie_finemapping", node=FinemapperConfig) diff --git a/src/gentropy/dataset/l2g_feature_matrix.py b/src/gentropy/dataset/l2g_feature_matrix.py index fa84499dc..e5be1a019 100644 --- a/src/gentropy/dataset/l2g_feature_matrix.py +++ b/src/gentropy/dataset/l2g_feature_matrix.py @@ -40,7 +40,7 @@ def __post_init__(self: L2GFeatureMatrix) -> None: def generate_features( cls: Type[L2GFeatureMatrix], features_list: list[str], - study_locus: StudyLocus, + credible_set: StudyLocus, study_index: StudyIndex, variant_gene: V2G, colocalisation: Colocalisation, @@ -49,7 +49,7 @@ def generate_features( Args: features_list (list[str]): List of features to generate - study_locus (StudyLocus): Study locus dataset + credible_set (StudyLocus): Credible set dataset study_index (StudyIndex): Study index dataset variant_gene (V2G): Variant to gene dataset colocalisation (Colocalisation): Colocalisation dataset @@ -62,11 +62,13 @@ def generate_features( """ if features_dfs := [ # Extract features - ColocalisationFactory._get_coloc_features( - study_locus, study_index, colocalisation + ColocalisationFactory._get_max_coloc_per_credible_set( + colocalisation, + credible_set, + study_index, ).df, - StudyLocusFactory._get_tss_distance_features(study_locus, variant_gene).df, - StudyLocusFactory._get_vep_features(study_locus, variant_gene).df, + StudyLocusFactory._get_tss_distance_features(credible_set, variant_gene).df, + StudyLocusFactory._get_vep_features(credible_set, variant_gene).df, ]: fm = reduce( lambda x, y: x.unionByName(y), @@ -162,8 +164,6 @@ def train_test_split( """ train, test = self._df.randomSplit([fraction, 1 - fraction], seed=42) return ( - L2GFeatureMatrix( - _df=train, _schema=L2GFeatureMatrix.get_schema() - ).persist(), - L2GFeatureMatrix(_df=test, _schema=L2GFeatureMatrix.get_schema()).persist(), + L2GFeatureMatrix(_df=train, _schema=L2GFeatureMatrix.get_schema()), + L2GFeatureMatrix(_df=test, _schema=L2GFeatureMatrix.get_schema()), ) diff --git a/src/gentropy/dataset/l2g_prediction.py b/src/gentropy/dataset/l2g_prediction.py index e24688da3..c4eccdf45 100644 --- a/src/gentropy/dataset/l2g_prediction.py +++ b/src/gentropy/dataset/l2g_prediction.py @@ -44,7 +44,7 @@ def from_credible_set( cls: Type[L2GPrediction], model_path: str, features_list: list[str], - study_locus: StudyLocus, + credible_set: StudyLocus, study_index: StudyIndex, v2g: V2G, coloc: Colocalisation, @@ -54,7 +54,7 @@ def from_credible_set( Args: model_path (str): Path to the fitted model features_list (list[str]): List of features to use for the model - study_locus (StudyLocus): Study locus dataset + credible_set (StudyLocus): Credible set dataset study_index (StudyIndex): Study index dataset v2g (V2G): Variant to gene dataset coloc (Colocalisation): Colocalisation dataset @@ -64,7 +64,7 @@ def from_credible_set( """ fm = L2GFeatureMatrix.generate_features( features_list=features_list, - study_locus=study_locus, + credible_set=credible_set, study_index=study_index, variant_gene=v2g, colocalisation=coloc, @@ -73,7 +73,7 @@ def from_credible_set( gwas_fm = L2GFeatureMatrix( _df=( fm.df.join( - study_locus.filter_by_study_type("gwas", study_index).df, + credible_set.filter_by_study_type("gwas", study_index).df, on="studyLocusId", ) ), diff --git a/src/gentropy/dataset/pairwise_ld.py b/src/gentropy/dataset/pairwise_ld.py new file mode 100644 index 000000000..9650efa32 --- /dev/null +++ b/src/gentropy/dataset/pairwise_ld.py @@ -0,0 +1,104 @@ +"""Pairwise LD dataset.""" +from __future__ import annotations + +from dataclasses import dataclass, field +from math import sqrt +from typing import TYPE_CHECKING + +import numpy as np +from pyspark.sql import functions as f +from pyspark.sql import types as t + +from gentropy.common.schemas import parse_spark_schema +from gentropy.dataset.dataset import Dataset + +if TYPE_CHECKING: + from pyspark.sql.types import StructType + + +@dataclass +class PairwiseLD(Dataset): + """Pairwise variant correlation dataset. + + This class captures logic applied on pairwise linkage data + by validation ensuring data quality. + """ + + dimension: tuple[int, int] = field(init=False) + + def __post_init__(self: PairwiseLD) -> None: + """Validating the dataset upon creation. + + - Besides the schema, a pairwise LD table is expected have rows being a square number. + """ + row_count = self.df.count() + + assert ( + int(sqrt(row_count)) == sqrt(row_count) + ), f"The number of rows in a pairwise LD table has to be square. Got: {row_count}" + + self.dimension = (int(sqrt(row_count)), int(sqrt(row_count))) + + @classmethod + def get_schema(cls: type[PairwiseLD]) -> StructType: + """Provide the schema for the StudyIndex dataset. + + Returns: + StructType: The schema of the StudyIndex dataset. + """ + return parse_spark_schema("pairwise_ld.json") + + def overlap_with_locus(self: PairwiseLD, locus_variants: list[str]) -> PairwiseLD: + """Subset pairwise LD table with locus. + + Args: + locus_variants (list[str]): List of variants found in the locus. + + Returns: + PairwiseLD: _description_ + """ + return PairwiseLD( + _df=( + self.df.filter( + f.col("variantIdI").isin(locus_variants) + & f.col("variantIdJ").isin(locus_variants) + ) + ), + _schema=PairwiseLD.get_schema(), + ) + + def r_to_numpy_matrix(self) -> np.ndarray: + """Convert pairwise LD to a numpy square matrix. + + Returns: + np.ndarray: 2D square matrix with r values. + """ + return np.array( + self.df.select( + f.split("variantIdI", "_")[1].cast(t.IntegerType()).alias("position_i"), + f.split("variantIdJ", "_")[1].cast(t.IntegerType()).alias("position_j"), + "r", + ) + .orderBy(f.col("position_i").asc(), f.col("position_j").asc()) + .select("r") + .collect() + ).reshape(self.dimension) + + def get_variant_list(self) -> list[str]: + """Return a list of unique variants from the dataset. + + Returns: + list[str]: list of variant identifiers sorted by position. + """ + return [ + row["variantId"] + for row in ( + self.df.select( + f.col("variantIdI").alias("variantId"), + f.split(f.col("variantIdI"), "_")[1] + .cast(t.IntegerType()) + .alias("position"), + ) + .orderBy(f.col("position").asc()) + .collect() + ) + ] diff --git a/src/gentropy/dataset/study_locus.py b/src/gentropy/dataset/study_locus.py index 4ff9f0172..77c663800 100644 --- a/src/gentropy/dataset/study_locus.py +++ b/src/gentropy/dataset/study_locus.py @@ -1,4 +1,5 @@ """Study locus dataset.""" + from __future__ import annotations from dataclasses import dataclass @@ -24,6 +25,7 @@ from gentropy.dataset.ld_index import LDIndex from gentropy.dataset.study_index import StudyIndex + from gentropy.dataset.summary_statistics import SummaryStatistics class StudyLocusQualityCheck(Enum): @@ -80,31 +82,52 @@ class StudyLocus(Dataset): """ @staticmethod - def _overlapping_peaks(credset_to_overlap: DataFrame) -> DataFrame: + def _overlapping_peaks( + credset_to_overlap: DataFrame, intra_study_overlap: bool = False + ) -> DataFrame: """Calculate overlapping signals (study-locus) between GWAS-GWAS and GWAS-Molecular trait. Args: credset_to_overlap (DataFrame): DataFrame containing at least `studyLocusId`, `studyType`, `chromosome` and `tagVariantId` columns. + intra_study_overlap (bool): When True, finds intra-study overlaps for credible set deduplication. Default is False. Returns: DataFrame: containing `leftStudyLocusId`, `rightStudyLocusId` and `chromosome` columns. """ # Reduce columns to the minimum to reduce the size of the dataframe credset_to_overlap = credset_to_overlap.select( - "studyLocusId", "studyType", "chromosome", "tagVariantId" + "studyLocusId", + "studyId", + "studyType", + "chromosome", + "region", + "tagVariantId", ) + # Define join condition - if intra_study_overlap is True, finds overlaps within the same study. Otherwise finds gwas vs everything overlaps for coloc. + join_condition = ( + [ + f.col("left.studyId") == f.col("right.studyId"), + f.col("left.chromosome") == f.col("right.chromosome"), + f.col("left.tagVariantId") == f.col("right.tagVariantId"), + f.col("left.studyLocusId") > f.col("right.studyLocusId"), + f.col("left.region") != f.col("right.region"), + ] + if intra_study_overlap + else [ + f.col("left.chromosome") == f.col("right.chromosome"), + f.col("left.tagVariantId") == f.col("right.tagVariantId"), + (f.col("right.studyType") != "gwas") + | (f.col("left.studyLocusId") > f.col("right.studyLocusId")), + f.col("left.studyType") == f.lit("gwas"), + ] + ) + return ( credset_to_overlap.alias("left") - .filter(f.col("studyType") == "gwas") - # Self join with complex condition. Left it's all gwas and right can be gwas or molecular trait + # Self join with complex condition. .join( credset_to_overlap.alias("right"), - on=[ - f.col("left.chromosome") == f.col("right.chromosome"), - f.col("left.tagVariantId") == f.col("right.tagVariantId"), - (f.col("right.studyType") != "gwas") - | (f.col("left.studyLocusId") > f.col("right.studyLocusId")), - ], + on=join_condition, how="inner", ) .select( @@ -303,7 +326,9 @@ def filter_credible_set( ) return self - def find_overlaps(self: StudyLocus, study_index: StudyIndex) -> StudyLocusOverlap: + def find_overlaps( + self: StudyLocus, study_index: StudyIndex, intra_study_overlap: bool = False + ) -> StudyLocusOverlap: """Calculate overlapping study-locus. Find overlapping study-locus that share at least one tagging variant. All GWAS-GWAS and all GWAS-Molecular traits are computed with the Molecular traits always @@ -311,6 +336,7 @@ def find_overlaps(self: StudyLocus, study_index: StudyIndex) -> StudyLocusOverla Args: study_index (StudyIndex): Study index to resolve study types. + intra_study_overlap (bool): If True, finds intra-study overlaps for credible set deduplication. Default is False. Returns: StudyLocusOverlap: Pairs of overlapping study-locus with aligned tags. @@ -320,8 +346,10 @@ def find_overlaps(self: StudyLocus, study_index: StudyIndex) -> StudyLocusOverla .withColumn("locus", f.explode("locus")) .select( "studyLocusId", + "studyId", "studyType", "chromosome", + "region", f.col("locus.variantId").alias("tagVariantId"), f.col("locus.logBF").alias("logBF"), f.col("locus.posteriorProbability").alias("posteriorProbability"), @@ -333,7 +361,7 @@ def find_overlaps(self: StudyLocus, study_index: StudyIndex) -> StudyLocusOverla ) # overlapping study-locus - peak_overlaps = self._overlapping_peaks(loci_to_overlap) + peak_overlaps = self._overlapping_peaks(loci_to_overlap, intra_study_overlap) # study-locus overlap by aligning overlapping variants return self._align_overlapping_tags(loci_to_overlap, peak_overlaps) @@ -427,6 +455,74 @@ def annotate_credible_sets(self: StudyLocus) -> StudyLocus: ) return self + def annotate_locus_statistics( + self: StudyLocus, + summary_statistics: SummaryStatistics, + collect_locus_distance: int, + ) -> StudyLocus: + """Annotates study locus with summary statistics in the specified distance around the position. + + Args: + summary_statistics (SummaryStatistics): Summary statistics to be used for annotation. + collect_locus_distance (int): distance from variant defining window for inclusion of variants in locus. + + Returns: + StudyLocus: Study locus annotated with summary statistics in `locus` column. If no statistics are found, the `locus` column will be empty. + """ + # The clumps will be used several times (persisting) + self.df.persist() + # Renaming columns: + sumstats_renamed = summary_statistics.df.selectExpr( + *[f"{col} as tag_{col}" for col in summary_statistics.df.columns] + ).alias("sumstat") + + locus_df = ( + sumstats_renamed + # Joining the two datasets together: + .join( + f.broadcast( + self.df.alias("clumped").select( + "position", "chromosome", "studyId", "studyLocusId" + ) + ), + on=[ + (f.col("sumstat.tag_studyId") == f.col("clumped.studyId")) + & (f.col("sumstat.tag_chromosome") == f.col("clumped.chromosome")) + & ( + f.col("sumstat.tag_position") + >= (f.col("clumped.position") - collect_locus_distance) + ) + & ( + f.col("sumstat.tag_position") + <= (f.col("clumped.position") + collect_locus_distance) + ) + ], + how="inner", + ) + .withColumn( + "locus", + f.struct( + f.col("tag_variantId").alias("variantId"), + f.col("tag_beta").alias("beta"), + f.col("tag_pValueMantissa").alias("pValueMantissa"), + f.col("tag_pValueExponent").alias("pValueExponent"), + f.col("tag_standardError").alias("standardError"), + ), + ) + .groupBy("studyLocusId") + .agg( + f.collect_list(f.col("locus")).alias("locus"), + ) + ) + + self.df = self.df.drop("locus").join( + locus_df, + on="studyLocusId", + how="left", + ) + + return self + def annotate_ld( self: StudyLocus, study_index: StudyIndex, ld_index: LDIndex ) -> StudyLocus: diff --git a/src/gentropy/dataset/summary_statistics.py b/src/gentropy/dataset/summary_statistics.py index 442672c58..6244d5879 100644 --- a/src/gentropy/dataset/summary_statistics.py +++ b/src/gentropy/dataset/summary_statistics.py @@ -9,7 +9,6 @@ from gentropy.common.schemas import parse_spark_schema from gentropy.common.utils import parse_region, split_pvalue from gentropy.dataset.dataset import Dataset -from gentropy.method.window_based_clumping import WindowBasedClumping if TYPE_CHECKING: from pyspark.sql.types import StructType @@ -59,34 +58,24 @@ def window_based_clumping( self: SummaryStatistics, distance: int = 500_000, gwas_significance: float = 5e-8, - baseline_significance: float = 0.05, - locus_collect_distance: int | None = None, ) -> StudyLocus: - """Generate study-locus from summary statistics by distance based clumping + collect locus. + """Generate study-locus from summary statistics using window-based clumping. + + For more info, see [`WindowBasedClumping`][gentropy.method.window_based_clumping.WindowBasedClumping] Args: distance (int): Distance in base pairs to be used for clumping. Defaults to 500_000. gwas_significance (float, optional): GWAS significance threshold. Defaults to 5e-8. - baseline_significance (float, optional): Baseline significance threshold for inclusion in the locus. Defaults to 0.05. - locus_collect_distance (int | None): The distance to collect locus around semi-indices. If not provided, locus is not collected. Returns: - StudyLocus: Clumped study-locus containing variants based on window. + StudyLocus: Clumped study-locus optionally containing variants based on window. """ - return ( - WindowBasedClumping.clump_with_locus( - self, - window_length=distance, - p_value_significance=gwas_significance, - p_value_baseline=baseline_significance, - locus_window_length=locus_collect_distance, - ) - if locus_collect_distance - else WindowBasedClumping.clump( - self, - window_length=distance, - p_value_significance=gwas_significance, - ) + from gentropy.method.window_based_clumping import WindowBasedClumping + + return WindowBasedClumping.clump( + self, + distance=distance, + gwas_significance=gwas_significance, ) def exclude_region(self: SummaryStatistics, region: str) -> SummaryStatistics: @@ -114,3 +103,29 @@ def exclude_region(self: SummaryStatistics, region: str) -> SummaryStatistics: ), _schema=SummaryStatistics.get_schema(), ) + + def sanity_filter(self: SummaryStatistics) -> SummaryStatistics: + """The function filters the summary statistics by sanity filters. + + The function filters the summary statistics by the following filters: + - The p-value should not be eqaul 1. + - The beta and se should not be equal 0. + - The p-value, beta and se should not be NaN. + + Returns: + SummaryStatistics: The filtered summary statistics. + """ + gwas_df = self._df + gwas_df = gwas_df.dropna( + subset=["beta", "standardError", "pValueMantissa", "pValueExponent"] + ) + + gwas_df = gwas_df.filter((f.col("beta") != 0) & (f.col("standardError") != 0)) + gwas_df = gwas_df.filter( + f.col("pValueMantissa") * 10 ** f.col("pValueExponent") != 1 + ) + + return SummaryStatistics( + _df=gwas_df, + _schema=SummaryStatistics.get_schema(), + ) diff --git a/src/gentropy/datasource/finngen/summary_stats.py b/src/gentropy/datasource/finngen/summary_stats.py index 0d77f7d5c..08403bed5 100644 --- a/src/gentropy/datasource/finngen/summary_stats.py +++ b/src/gentropy/datasource/finngen/summary_stats.py @@ -50,7 +50,6 @@ def from_source( Returns: SummaryStatistics: Processed summary statistics dataset """ - study_id = raw_file.split("/")[-1].split(".")[0].upper() processed_summary_stats_df = ( spark.read.schema(cls.raw_schema) .option("delimiter", "\t") @@ -59,7 +58,11 @@ def from_source( .filter(f.col("pos").cast(t.IntegerType()).isNotNull()) .select( # From the full path, extracts just the filename, and converts to upper case to get the study ID. - f.lit(study_id).alias("studyId"), + f.upper( + f.regexp_extract( + f.input_file_name(), r"([^/]+)(\.tsv\.gz|\.gz|\.tsv)", 1 + ) + ).alias("studyId"), # Add variant information. f.concat_ws( "_", diff --git a/src/gentropy/datasource/gnomad/ld.py b/src/gentropy/datasource/gnomad/ld.py index 1d2d6c18f..471b87cae 100644 --- a/src/gentropy/datasource/gnomad/ld.py +++ b/src/gentropy/datasource/gnomad/ld.py @@ -1,4 +1,5 @@ """Step to import filtered version of a LD matrix (block matrix).""" + from __future__ import annotations import sys @@ -7,16 +8,17 @@ from typing import TYPE_CHECKING import hail as hl +import numpy as np import pyspark.sql.functions as f from hail.linalg import BlockMatrix from pyspark.sql import Window from gentropy.common.spark_helpers import get_top_ranked_in_window, get_value_from_row -from gentropy.common.utils import _liftover_loci, convert_gnomad_position_to_ensembl +from gentropy.common.utils import _liftover_loci from gentropy.dataset.ld_index import LDIndex if TYPE_CHECKING: - from pyspark.sql import DataFrame + from pyspark.sql import DataFrame, Row @dataclass @@ -34,6 +36,7 @@ class GnomADLDMatrix: ld_matrix_template: str = "gs://gcp-public-data--gnomad/release/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.adj.ld.bm" ld_index_raw_template: str = "gs://gcp-public-data--gnomad/release/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.ld.variant_indices.ht" + liftover_ht_path: str = "gs://gcp-public-data--gnomad/release/2.1.1/liftover_grch38/ht/genomes/gnomad.genomes.r2.1.1.sites.liftover_grch38.ht" grch37_to_grch38_chain_path: str = ( "gs://hail-common/references/grch37_to_grch38.over.chain.gz" ) @@ -175,24 +178,15 @@ def _process_variant_indices( ld_index_38.to_spark() # Filter out variants where the liftover failed .filter(f.col("`locus_GRCh38.position`").isNotNull()) - .withColumn( - "chromosome", f.regexp_replace("`locus_GRCh38.contig`", "chr", "") - ) - .withColumn( - "position", - convert_gnomad_position_to_ensembl( - f.col("`locus_GRCh38.position`"), - f.col("`alleles`").getItem(0), - f.col("`alleles`").getItem(1), - ), - ) .select( - "chromosome", - "position", + f.regexp_replace("`locus_GRCh38.contig`", "chr", "").alias( + "chromosome" + ), + f.col("`locus_GRCh38.position`").alias("position"), f.concat_ws( "_", - f.col("chromosome"), - f.col("position"), + f.regexp_replace("`locus_GRCh38.contig`", "chr", ""), + f.col("`locus_GRCh38.position`"), f.col("`alleles`").getItem(0), f.col("`alleles`").getItem(1), ).alias("variantId"), @@ -218,9 +212,9 @@ def _resolve_variant_indices( DataFrame: Dataframe with variant IDs instead of `i` and `j` indices """ ld_index_i = ld_index.selectExpr( - "idx as i", "variantId as variantId_i", "chromosome" + "idx as i", "variantId as variantIdI", "chromosome" ) - ld_index_j = ld_index.selectExpr("idx as j", "variantId as variantId_j") + ld_index_j = ld_index.selectExpr("idx as j", "variantId as variantIdJ") return ( ld_matrix.join(ld_index_i, on="i", how="inner") .join(ld_index_j, on="j", how="inner") @@ -238,35 +232,35 @@ def _transpose_ld_matrix(ld_matrix: DataFrame) -> DataFrame: DataFrame: Square LD matrix without diagonal duplicates Examples: - >>> df = spark.createDataFrame( - ... [ - ... (1, 1, 1.0, "1", "AFR"), - ... (1, 2, 0.5, "1", "AFR"), - ... (2, 2, 1.0, "1", "AFR"), - ... ], - ... ["variantId_i", "variantId_j", "r", "chromosome", "population"], - ... ) - >>> GnomADLDMatrix._transpose_ld_matrix(df).show() - +-----------+-----------+---+----------+----------+ - |variantId_i|variantId_j| r|chromosome|population| - +-----------+-----------+---+----------+----------+ - | 1| 2|0.5| 1| AFR| - | 1| 1|1.0| 1| AFR| - | 2| 1|0.5| 1| AFR| - | 2| 2|1.0| 1| AFR| - +-----------+-----------+---+----------+----------+ - + >>> df = spark.createDataFrame( + ... [ + ... (1, 1, 1.0, "1", "AFR"), + ... (1, 2, 0.5, "1", "AFR"), + ... (2, 2, 1.0, "1", "AFR"), + ... ], + ... ["variantIdI", "variantIdJ", "r", "chromosome", "population"], + ... ) + >>> GnomADLDMatrix._transpose_ld_matrix(df).show() + +----------+----------+---+----------+----------+ + |variantIdI|variantIdJ| r|chromosome|population| + +----------+----------+---+----------+----------+ + | 1| 2|0.5| 1| AFR| + | 1| 1|1.0| 1| AFR| + | 2| 1|0.5| 1| AFR| + | 2| 2|1.0| 1| AFR| + +----------+----------+---+----------+----------+ + """ ld_matrix_transposed = ld_matrix.selectExpr( - "variantId_i as variantId_j", - "variantId_j as variantId_i", + "variantIdI as variantIdJ", + "variantIdJ as variantIdI", "r", "chromosome", "population", ) - return ld_matrix.filter( - f.col("variantId_i") != f.col("variantId_j") - ).unionByName(ld_matrix_transposed) + return ld_matrix.filter(f.col("variantIdI") != f.col("variantIdJ")).unionByName( + ld_matrix_transposed + ) def as_ld_index( self: GnomADLDMatrix, @@ -307,8 +301,8 @@ def as_ld_index( GnomADLDMatrix._transpose_ld_matrix( reduce(lambda df1, df2: df1.unionByName(df2), ld_indices_unaggregated) ) - .withColumnRenamed("variantId_i", "variantId") - .withColumnRenamed("variantId_j", "tagVariantId") + .withColumnRenamed("variantIdI", "variantId") + .withColumnRenamed("variantIdJ", "tagVariantId") ) return LDIndex( _df=self._aggregate_ld_index_across_populations(ld_index_unaggregated), @@ -345,7 +339,6 @@ def get_ld_variants( & (f.col("position") <= end) ) .select("chromosome", "position", "variantId", "idx") - .persist() ) if ld_index_df.limit(1).count() == 0: @@ -395,7 +388,7 @@ def _extract_square_matrix( .join( ld_index_df.select( f.col("idx").alias("idx_i"), - f.col("variantId").alias("variantId_i"), + f.col("variantId").alias("variantIdI"), ), on="idx_i", how="inner", @@ -403,12 +396,12 @@ def _extract_square_matrix( .join( ld_index_df.select( f.col("idx").alias("idx_j"), - f.col("variantId").alias("variantId_j"), + f.col("variantId").alias("variantIdJ"), ), on="idx_j", how="inner", ) - .select("variantId_i", "variantId_j", "r") + .select("variantIdI", "variantIdJ", "r") ) def get_ld_matrix_slice( @@ -448,3 +441,73 @@ def get_ld_matrix_slice( .alias("r"), ) ) + + def get_locus_index( + self: GnomADLDMatrix, + study_locus_row: Row, + radius: int = 500_000, + major_population: str = "nfe", + ) -> DataFrame: + """Extract hail matrix index from StudyLocus rows. + + Args: + study_locus_row (Row): Study-locus row + radius (int): Locus radius to extract from gnomad matrix + major_population (str): Major population to extract from gnomad matrix, default is "nfe" + + Returns: + DataFrame: Returns the index of the gnomad matrix for the locus + + """ + chromosome = str("chr" + study_locus_row["chromosome"]) + start = study_locus_row["position"] - radius + end = study_locus_row["position"] + radius + + liftover_ht = hl.read_table(self.liftover_ht_path) + liftover_ht = ( + liftover_ht.filter( + (liftover_ht.locus.contig == chromosome) + & (liftover_ht.locus.position >= start) + & (liftover_ht.locus.position <= end) + ) + .key_by() + .select("locus", "alleles", "original_locus") + .key_by("original_locus", "alleles") + .naive_coalesce(20) + ) + + hail_index = hl.read_table( + self.ld_index_raw_template.format(POP=major_population) + ) + + joined_index = ( + liftover_ht.join(hail_index, how="inner").order_by("idx").to_spark() + ) + + return joined_index + + @staticmethod + def get_numpy_matrix( + locus_index: DataFrame, + gnomad_ancestry: str = "nfe", + ) -> np.ndarray: + """Extract the LD block matrix for a locus. + + Args: + locus_index (DataFrame): hail matrix variant index table + gnomad_ancestry (str): GnomAD major ancestry label eg. `nfe` + + Returns: + np.ndarray: LD block matrix for the locus + """ + idx = [row["idx"] for row in locus_index.select("idx").collect()] + + half_matrix = ( + BlockMatrix.read( + GnomADLDMatrix.ld_matrix_template.format(POP=gnomad_ancestry) + ) + .filter(idx, idx) + .to_numpy() + ) + + return (half_matrix + half_matrix.T) - np.diag(np.diag(half_matrix)) diff --git a/src/gentropy/datasource/gnomad/variants.py b/src/gentropy/datasource/gnomad/variants.py index 58f5f8093..b06b4ba6c 100644 --- a/src/gentropy/datasource/gnomad/variants.py +++ b/src/gentropy/datasource/gnomad/variants.py @@ -1,4 +1,5 @@ """Import gnomAD variants dataset.""" + from __future__ import annotations from dataclasses import dataclass, field @@ -9,7 +10,7 @@ from gentropy.dataset.variant_annotation import VariantAnnotation if TYPE_CHECKING: - from hail.expr.expressions import Int32Expression, StringExpression + pass @dataclass @@ -39,29 +40,6 @@ class GnomADVariants: ] ) - @staticmethod - def _convert_gnomad_position_to_ensembl_hail( - position: Int32Expression, - reference: StringExpression, - alternate: StringExpression, - ) -> Int32Expression: - """Convert GnomAD variant position to Ensembl variant position in hail table. - - For indels (the reference or alternate allele is longer than 1), then adding 1 to the position, for SNPs, the position is unchanged. - More info about the problem: https://www.biostars.org/p/84686/ - - Args: - position (Int32Expression): Position of the variant in the GnomAD genome. - reference (StringExpression): The reference allele. - alternate (StringExpression): The alternate allele - - Returns: - Int32Expression: The position of the variant according to Ensembl genome. - """ - return hl.if_else( - (reference.length() > 1) | (alternate.length() > 1), position + 1, position - ) - def as_variant_annotation(self: GnomADVariants) -> VariantAnnotation: """Generate variant annotation dataset from gnomAD. @@ -93,7 +71,7 @@ def as_variant_annotation(self: GnomADVariants) -> VariantAnnotation: return VariantAnnotation( _df=( ht.select( - gnomadVariantId=hl.str("-").join( + variantId=hl.str("_").join( [ ht.locus.contig.replace("chr", ""), hl.str(ht.locus.position), @@ -102,21 +80,7 @@ def as_variant_annotation(self: GnomADVariants) -> VariantAnnotation: ] ), chromosome=ht.locus.contig.replace("chr", ""), - position=GnomADVariants._convert_gnomad_position_to_ensembl_hail( - ht.locus.position, ht.alleles[0], ht.alleles[1] - ), - variantId=hl.str("_").join( - [ - ht.locus.contig.replace("chr", ""), - hl.str( - GnomADVariants._convert_gnomad_position_to_ensembl_hail( - ht.locus.position, ht.alleles[0], ht.alleles[1] - ) - ), - ht.alleles[0], - ht.alleles[1], - ] - ), + position=ht.locus.position, chromosomeB37=ht.locus_GRCh37.contig.replace("chr", ""), positionB37=ht.locus_GRCh37.position, referenceAllele=ht.alleles[0], diff --git a/src/gentropy/datasource/gwas_catalog/associations.py b/src/gentropy/datasource/gwas_catalog/associations.py index 5ff499f2c..658facea7 100644 --- a/src/gentropy/datasource/gwas_catalog/associations.py +++ b/src/gentropy/datasource/gwas_catalog/associations.py @@ -1,4 +1,5 @@ """Study Locus for GWAS Catalog data source.""" + from __future__ import annotations import importlib.resources as pkg_resources @@ -31,6 +32,40 @@ class GWASCatalogCuratedAssociationsParser: """GWAS Catalog curated associations parser.""" + @staticmethod + def convert_gnomad_position_to_ensembl( + position: Column, reference: Column, alternate: Column + ) -> Column: + """Convert GnomAD variant position to Ensembl variant position. + + For indels (the reference or alternate allele is longer than 1), then adding 1 to the position, for SNPs, + the position is unchanged. More info about the problem: https://www.biostars.org/p/84686/ + + Args: + position (Column): Position of the variant in GnomAD's coordinates system. + reference (Column): The reference allele in GnomAD's coordinates system. + alternate (Column): The alternate allele in GnomAD's coordinates system. + + Returns: + Column: The position of the variant in the Ensembl genome. + + Examples: + >>> d = [(1, "A", "C"), (2, "AA", "C"), (3, "A", "AA")] + >>> df = spark.createDataFrame(d).toDF("position", "reference", "alternate") + >>> df.withColumn("new_position", GWASCatalogCuratedAssociationsParser.convert_gnomad_position_to_ensembl(f.col("position"), f.col("reference"), f.col("alternate"))).show() + +--------+---------+---------+------------+ + |position|reference|alternate|new_position| + +--------+---------+---------+------------+ + | 1| A| C| 1| + | 2| AA| C| 3| + | 3| A| AA| 4| + +--------+---------+---------+------------+ + + """ + return f.when( + (f.length(reference) > 1) | (f.length(alternate) > 1), position + 1 + ).otherwise(position) + @staticmethod def _parse_pvalue(pvalue: Column) -> tuple[Column, Column]: """Parse p-value column. @@ -178,7 +213,8 @@ def _map_to_variant_annotation_variants( gwas_associations_subset = gwas_associations.select( "studyLocusId", f.col("CHR_ID").alias("chromosome"), - f.col("CHR_POS").cast(IntegerType()).alias("position"), + # The positions from GWAS Catalog are from ensembl that causes discrepancy for indels: + f.col("CHR_POS").cast(IntegerType()).alias("ensemblPosition"), # List of all SNPs associated with the variant GWASCatalogCuratedAssociationsParser._collect_rsids( f.split(f.col("SNPS"), "; ").getItem(0), @@ -194,6 +230,11 @@ def _map_to_variant_annotation_variants( va_subset = variant_annotation.df.select( "variantId", "chromosome", + # Calculate the position in Ensembl coordinates for indels: + GWASCatalogCuratedAssociationsParser.convert_gnomad_position_to_ensembl( + f.col("position"), f.col("referenceAllele"), f.col("alternateAllele") + ).alias("ensemblPosition"), + # Keeping GnomAD position: "position", f.col("rsIds").alias("rsIdsGnomad"), "referenceAllele", @@ -202,9 +243,11 @@ def _map_to_variant_annotation_variants( variant_annotation.max_maf().alias("maxMaf"), ).join( f.broadcast( - gwas_associations_subset.select("chromosome", "position").distinct() + gwas_associations_subset.select( + "chromosome", "ensemblPosition" + ).distinct() ), - on=["chromosome", "position"], + on=["chromosome", "ensemblPosition"], how="inner", ) @@ -213,7 +256,7 @@ def _map_to_variant_annotation_variants( filtered_associations = ( gwas_associations_subset.join( f.broadcast(va_subset), - on=["chromosome", "position"], + on=["chromosome", "ensemblPosition"], how="left", ) .withColumn( diff --git a/src/gentropy/datasource/gwas_catalog/study_index.py b/src/gentropy/datasource/gwas_catalog/study_index.py index cb6d3338a..e8b49b0da 100644 --- a/src/gentropy/datasource/gwas_catalog/study_index.py +++ b/src/gentropy/datasource/gwas_catalog/study_index.py @@ -305,6 +305,7 @@ def _parse_study_table( parse_efos(f.col("MAPPED BACKGROUND TRAIT URI")).alias( "backgroundTraitFromSourceMappedIds" ), + cls.parse_cohorts(f.col("COHORT")).alias("cohorts"), ), _schema=StudyIndexGWASCatalog.get_schema(), ) @@ -548,14 +549,6 @@ def annotate_ancestries( ) # studyId has not been split yet ) - # Parsing cohort information: - cohorts = ancestry_lut.select( - f.col("STUDY ACCESSION").alias("studyId"), - GWASCatalogStudyIndexParser.parse_cohorts(f.col("COHORT(S)")).alias( - "cohorts" - ), - ).distinct() - # Get a high resolution dataset on experimental stage: ancestry_stages = ( ancestry.groupBy("studyId") @@ -644,9 +637,7 @@ def annotate_ancestries( ).select( "studyId", "discoverySamples", "ldPopulationStructure", "replicationSamples" ) - self.df = self.df.join(parsed_ancestry_lut, on="studyId", how="left").join( - cohorts, on="studyId", how="left" - ) + self.df = self.df.join(parsed_ancestry_lut, on="studyId", how="left") return self def annotate_sumstats_info( diff --git a/src/gentropy/datasource/intervals/thurman.py b/src/gentropy/datasource/intervals/thurman.py index 88ed5b6ad..a8113e5a6 100644 --- a/src/gentropy/datasource/intervals/thurman.py +++ b/src/gentropy/datasource/intervals/thurman.py @@ -41,7 +41,7 @@ def read(spark: SparkSession, path: str) -> DataFrame: t.StructField("score", t.FloatType(), False), ] ) - return spark.read.csv(path, sep="\t", header=True, schema=thurman_schema) + return spark.read.csv(path, sep="\t", header=False, schema=thurman_schema) @classmethod def parse( diff --git a/src/gentropy/l2g.py b/src/gentropy/l2g.py index d00a91596..d0acd2b95 100644 --- a/src/gentropy/l2g.py +++ b/src/gentropy/l2g.py @@ -73,7 +73,9 @@ def __init__( session, study_index_path, recursiveFileLookup=True ) v2g = V2G.from_parquet(session, variant_gene_path) - coloc = Colocalisation.from_parquet(session, colocalisation_path) + coloc = Colocalisation.from_parquet( + session, colocalisation_path, recursiveFileLookup=True + ) if run_mode == "predict": if not model_path or not predictions_path: @@ -91,7 +93,7 @@ def __init__( and gene_interactions_path ): # Process gold standard and L2G features - gs_curation = session.spark.read.json(gold_standard_curation_path).persist() + gs_curation = session.spark.read.json(gold_standard_curation_path) interactions = session.spark.read.parquet(gene_interactions_path) study_locus_overlap = StudyLocus( # We just extract overlaps of associations in the gold standard. This parsing is a duplication of the one in the gold standard curation, @@ -126,23 +128,27 @@ def __init__( fm = L2GFeatureMatrix.generate_features( features_list=features_list, - study_locus=credible_set, + credible_set=credible_set, study_index=studies, variant_gene=v2g, colocalisation=coloc, ) - # Join and fill null values with 0 - data = L2GFeatureMatrix( - _df=fm.df.join( - f.broadcast( - gold_standards.df.drop("variantId", "studyId", "sources") + data = ( + # Annotate gold standards with features + L2GFeatureMatrix( + _df=fm.df.join( + f.broadcast( + gold_standards.df.drop("variantId", "studyId", "sources") + ), + on=["studyLocusId", "geneId"], + how="inner", ), - on=["studyLocusId", "geneId"], - how="inner", - ), - _schema=L2GFeatureMatrix.get_schema(), - ).fill_na() + _schema=L2GFeatureMatrix.get_schema(), + ) + .fill_na() + .select_features(list(features_list)) + ) # Instantiate classifier estimator = SparkXGBClassifier( @@ -165,9 +171,8 @@ def __init__( else: # Train model LocusToGeneTrainer.train( - data=data, + gold_standard_data=data, l2g_model=l2g_model, - features_list=list(features_list), model_path=model_path, evaluate=True, wandb_run_name=wandb_run_name, diff --git a/src/gentropy/method/carma.py b/src/gentropy/method/carma.py index 75cb32c79..af8816706 100644 --- a/src/gentropy/method/carma.py +++ b/src/gentropy/method/carma.py @@ -2,6 +2,7 @@ from __future__ import annotations import concurrent.futures +import warnings from itertools import combinations from math import floor, lgamma from typing import Any @@ -32,6 +33,8 @@ def time_limited_CARMA_spike_slab_noEM( - B_list: A dataframe containing the marginal likelihoods and the corresponding model space or None. - Outliers: A list of outlier SNPs or None. """ + # Ignore pandas future warnings + warnings.simplefilter(action="ignore", category=FutureWarning) try: # Execute CARMA.CARMA_spike_slab_noEM with a timeout with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor: @@ -854,9 +857,19 @@ def _MCS_modified( # noqa: C901 sec_sample = np.random.choice( range(0, 3), 1, p=np.exp(aa) / np.sum(np.exp(aa)) ) - S = set_gamma[sec_sample[0]][ - int(set_star["gamma_set_index"][sec_sample[0]]) - ].tolist() + if set_gamma[sec_sample[0]] is not None: + S = set_gamma[sec_sample[0]][ + int(set_star["gamma_set_index"][sec_sample[0]]) + ].tolist() + else: + sec_sample = np.random.choice( + range(1, 3), + 1, + p=np.exp(aa)[[1, 2]] / np.sum(np.exp(aa)[[1, 2]]), + ) + S = set_gamma[sec_sample[0]][ + int(set_star["gamma_set_index"][sec_sample[0]]) + ].tolist() for item in conditional_S: if item not in S: diff --git a/src/gentropy/method/colocalisation.py b/src/gentropy/method/colocalisation.py index 3e4e91c74..18d97fdf8 100644 --- a/src/gentropy/method/colocalisation.py +++ b/src/gentropy/method/colocalisation.py @@ -26,6 +26,9 @@ class ECaviar: It extends [CAVIAR](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5142122/#bib18) framework to explicitly estimate the posterior probability that the same variant is causal in 2 studies while accounting for the uncertainty of LD. eCAVIAR computes the colocalization posterior probability (**CLPP**) by utilizing the marginal posterior probabilities. This framework allows for **multiple variants to be causal** in a single locus. """ + METHOD_NAME: str = "eCAVIAR" + METHOD_METRIC: str = "clpp" + @staticmethod def _get_clpp(left_pp: Column, right_pp: Column) -> Column: """Calculate the colocalisation posterior probability (CLPP). @@ -81,7 +84,7 @@ def colocalise( f.count("*").alias("numberColocalisingVariants"), f.sum(f.col("clpp")).alias("clpp"), ) - .withColumn("colocalisationMethod", f.lit("eCAVIAR")) + .withColumn("colocalisationMethod", f.lit(cls.METHOD_NAME)) ), _schema=Colocalisation.get_schema(), ) @@ -108,6 +111,8 @@ class Coloc: PSEUDOCOUNT (float): Pseudocount to avoid log(0). Defaults to 1e-10. """ + METHOD_NAME: str = "COLOC" + METHOD_METRIC: str = "llr" PSEUDOCOUNT: float = 1e-10 @staticmethod @@ -154,24 +159,24 @@ def colocalise( posteriors = f.udf(Coloc._get_posteriors, VectorUDT()) return Colocalisation( _df=( - overlapping_signals.df + overlapping_signals.df.select("*", "statistics.*") # Before summing log_BF columns nulls need to be filled with 0: - .fillna(0, subset=["statistics.left_logBF", "statistics.right_logBF"]) + .fillna(0, subset=["left_logBF", "right_logBF"]) # Sum of log_BFs for each pair of signals .withColumn( "sum_log_bf", - f.col("statistics.left_logBF") + f.col("statistics.right_logBF"), + f.col("left_logBF") + f.col("right_logBF"), ) # Group by overlapping peak and generating dense vectors of log_BF: .groupBy("chromosome", "leftStudyLocusId", "rightStudyLocusId") .agg( f.count("*").alias("numberColocalisingVariants"), - fml.array_to_vector( - f.collect_list(f.col("statistics.left_logBF")) - ).alias("left_logBF"), - fml.array_to_vector( - f.collect_list(f.col("statistics.right_logBF")) - ).alias("right_logBF"), + fml.array_to_vector(f.collect_list(f.col("left_logBF"))).alias( + "left_logBF" + ), + fml.array_to_vector(f.collect_list(f.col("right_logBF"))).alias( + "right_logBF" + ), fml.array_to_vector(f.collect_list(f.col("sum_log_bf"))).alias( "sum_log_bf" ), @@ -253,7 +258,7 @@ def colocalise( "lH3bf", "lH4bf", ) - .withColumn("colocalisationMethod", f.lit("COLOC")) + .withColumn("colocalisationMethod", f.lit(cls.METHOD_NAME)) ), _schema=Colocalisation.get_schema(), ) diff --git a/src/gentropy/method/l2g/feature_factory.py b/src/gentropy/method/l2g/feature_factory.py index a3dba6688..f037b57b4 100644 --- a/src/gentropy/method/l2g/feature_factory.py +++ b/src/gentropy/method/l2g/feature_factory.py @@ -2,6 +2,7 @@ from __future__ import annotations from functools import reduce +from itertools import chain from typing import TYPE_CHECKING import pyspark.sql.functions as f @@ -12,6 +13,7 @@ ) from gentropy.dataset.l2g_feature import L2GFeature from gentropy.dataset.study_locus import CredibleInterval, StudyLocus +from gentropy.method.colocalisation import Coloc, ECaviar if TYPE_CHECKING: from pyspark.sql import Column, DataFrame @@ -24,197 +26,136 @@ class ColocalisationFactory: """Feature extraction in colocalisation.""" + @classmethod + def _add_colocalisation_metric(cls: type[ColocalisationFactory]) -> Column: + """Expression that adds a `colocalisationMetric` column to the colocalisation dataframe in preparation for feature extraction. + + Returns: + Column: The expression that adds a `colocalisationMetric` column with the derived metric + """ + method_metric_map = { + ECaviar.METHOD_NAME: ECaviar.METHOD_METRIC, + Coloc.METHOD_NAME: Coloc.METHOD_METRIC, + } + map_expr = f.create_map(*[f.lit(x) for x in chain(*method_metric_map.items())]) + return map_expr[f.col("colocalisationMethod")].alias("colocalisationMetric") + @staticmethod - def _get_max_coloc_per_study_locus( - study_locus: StudyLocus, - studies: StudyIndex, + def _get_max_coloc_per_credible_set( colocalisation: Colocalisation, - colocalisation_method: str, + credible_set: StudyLocus, + studies: StudyIndex, ) -> L2GFeature: """Get the maximum colocalisation posterior probability for each pair of overlapping study-locus per type of colocalisation method and QTL type. Args: - study_locus (StudyLocus): Study locus dataset - studies (StudyIndex): Study index dataset colocalisation (Colocalisation): Colocalisation dataset - colocalisation_method (str): Colocalisation method to extract the max from + credible_set (StudyLocus): Study locus dataset + studies (StudyIndex): Study index dataset Returns: L2GFeature: Stores the features with the max coloc probabilities for each pair of study-locus - - Raises: - ValueError: If the colocalisation method is not supported """ - if colocalisation_method not in ["COLOC", "eCAVIAR"]: - raise ValueError( - f"Colocalisation method {colocalisation_method} not supported" - ) - if colocalisation_method == "COLOC": - coloc_score_col_name = "log2h4h3" - coloc_feature_col_template = "ColocLlrMaximum" - - elif colocalisation_method == "eCAVIAR": - coloc_score_col_name = "clpp" - coloc_feature_col_template = "ColocClppMaximum" + colocalisation_df = colocalisation.df.select( + f.col("leftStudyLocusId").alias("studyLocusId"), + "rightStudyLocusId", + f.coalesce("log2h4h3", "clpp").alias("score"), + ColocalisationFactory._add_colocalisation_metric(), + ) - colocalising_study_locus = ( - study_locus.df.select("studyLocusId", "studyId") + colocalising_credible_sets = ( + credible_set.df.select("studyLocusId", "studyId") # annotate studyLoci with overlapping IDs on the left - to just keep GWAS associations .join( - colocalisation.df.selectExpr( - "leftStudyLocusId as studyLocusId", - "rightStudyLocusId", - "colocalisationMethod", - f"{coloc_score_col_name} as coloc_score", - ), + colocalisation_df, on="studyLocusId", how="inner", ) # bring study metadata to just keep QTL studies on the right .join( - study_locus.df.selectExpr( - "studyLocusId as rightStudyLocusId", "studyId as right_studyId" + credible_set.df.join( + studies.df.select("studyId", "studyType", "geneId"), "studyId" + ).selectExpr( + "studyLocusId as rightStudyLocusId", + "studyType as right_studyType", + "geneId", ), on="rightStudyLocusId", how="inner", ) - .join( - f.broadcast( - studies.df.selectExpr( - "studyId as right_studyId", - "studyType as right_studyType", - "geneId", - ) - ), - on="right_studyId", - how="inner", - ) - .filter( - (f.col("colocalisationMethod") == colocalisation_method) - & (f.col("right_studyType") != "gwas") + .filter(f.col("right_studyType") != "gwas") + .select( + "studyLocusId", + "right_studyType", + "geneId", + "score", + "colocalisationMetric", ) - .select("studyLocusId", "right_studyType", "geneId", "coloc_score") ) - # Max PP calculation per studyLocus AND type of QTL - local_max = get_record_with_maximum_value( - colocalising_study_locus, - ["studyLocusId", "right_studyType", "geneId"], - "coloc_score", - ).persist() - - intercept = 0.0001 - neighbourhood_max = ( - ( - local_max.selectExpr( - "studyLocusId", "coloc_score as coloc_local_max", "geneId" - ) - .join( - # Add maximum in the neighborhood - get_record_with_maximum_value( - colocalising_study_locus.withColumnRenamed( - "coloc_score", "coloc_neighborhood_max" - ), - ["studyLocusId", "right_studyType"], - "coloc_neighborhood_max", - ).drop("geneId"), - on="studyLocusId", - ) - .withColumn( - f"{coloc_feature_col_template}Neighborhood", - f.log10( - f.abs( - f.col("coloc_local_max") - - f.col("coloc_neighborhood_max") - + f.lit(intercept) - ) - ), - ) + # Max PP calculation per credible set AND type of QTL AND colocalisation method + local_max = ( + get_record_with_maximum_value( + colocalising_credible_sets, + ["studyLocusId", "right_studyType", "geneId", "colocalisationMetric"], + "score", ) - .drop("coloc_neighborhood_max", "coloc_local_max") - .persist() + .select( + "*", + f.col("score").alias("max_score"), + f.lit("Local").alias("score_type"), + ) + .drop("score") ) - # Split feature per molQTL - local_dfs = [] - nbh_dfs = [] - qtl_types: list[str] = ( - colocalising_study_locus.select("right_studyType") - .distinct() - .toPandas()["right_studyType"] - .tolist() - ) or ["eqtl", "pqtl", "sqtl"] - for qtl_type in qtl_types: - filtered_local_max = ( - local_max.filter(f.col("right_studyType") == qtl_type) - .withColumnRenamed( - "coloc_score", - f"{qtl_type}{coloc_feature_col_template}", - ) - .drop("right_studyType") + neighbourhood_max = ( + local_max.selectExpr( + "studyLocusId", "max_score as local_max_score", "geneId" ) - local_dfs.append(filtered_local_max) - - filtered_neighbourhood_max = ( - neighbourhood_max.filter(f.col("right_studyType") == qtl_type) - .withColumnRenamed( - f"{coloc_feature_col_template}Neighborhood", - f"{qtl_type}{coloc_feature_col_template}Neighborhood", - ) - .drop("right_studyType") + .join( + # Add maximum in the neighborhood + get_record_with_maximum_value( + colocalising_credible_sets.withColumnRenamed( + "score", "tmp_nbh_max_score" + ), + ["studyLocusId", "right_studyType", "colocalisationMetric"], + "tmp_nbh_max_score", + ).drop("geneId"), + on="studyLocusId", ) - nbh_dfs.append(filtered_neighbourhood_max) - - wide_dfs = reduce( - lambda x, y: x.unionByName(y, allowMissingColumns=True), - local_dfs + nbh_dfs, - ) - - return L2GFeature( - _df=convert_from_wide_to_long( - wide_dfs.groupBy("studyLocusId", "geneId").agg( - *( - f.first(f.col(c), ignorenulls=True).alias(c) - for c in wide_dfs.columns - if c - not in [ - "studyLocusId", - "geneId", - ] + .withColumn("score_type", f.lit("Neighborhood")) + .withColumn( + "max_score", + f.log10( + f.abs( + f.col("local_max_score") + - f.col("tmp_nbh_max_score") + + f.lit(0.0001) # intercept ) ), - id_vars=("studyLocusId", "geneId"), - var_name="featureName", - value_name="featureValue", - ), - _schema=L2GFeature.get_schema(), - ) - - @staticmethod - def _get_coloc_features( - study_locus: StudyLocus, studies: StudyIndex, colocalisation: Colocalisation - ) -> L2GFeature: - """Calls _get_max_coloc_per_study_locus for both methods and concatenates the results. - - !!! note "Colocalisation features are only available for the eCAVIAR results for now." - - Args: - study_locus (StudyLocus): Study locus dataset - studies (StudyIndex): Study index dataset - colocalisation (Colocalisation): Colocalisation dataset - - Returns: - L2GFeature: Stores the features with the max coloc probabilities for each pair of study-locus - """ - coloc_clpp = ColocalisationFactory._get_max_coloc_per_study_locus( - study_locus, - studies, - colocalisation, - "eCAVIAR", - ) + ) + ).drop("tmp_nbh_max_score", "local_max_score") return L2GFeature( - _df=coloc_clpp.df, + _df=( + # Combine local and neighborhood metrics + local_max.unionByName( + neighbourhood_max, allowMissingColumns=True + ).select( + "studyLocusId", + "geneId", + # Feature name is a concatenation of the QTL type, colocalisation metric and if it's local or in the vicinity + f.concat_ws( + "", + f.col("right_studyType"), + f.lit("Coloc"), + f.initcap(f.col("colocalisationMetric")), + f.lit("Maximum"), + f.regexp_replace(f.col("score_type"), "Local", ""), + ).alias("featureName"), + f.col("max_score").cast("float").alias("featureValue"), + ) + ), _schema=L2GFeature.get_schema(), ) @@ -223,37 +164,43 @@ class StudyLocusFactory(StudyLocus): """Feature extraction in study locus.""" @staticmethod - def _get_tss_distance_features( - study_locus: StudyLocus, distances: V2G - ) -> L2GFeature: - """Joins StudyLocus with the V2G to extract the minimum distance to a gene TSS of all variants in a StudyLocus credible set. + def _get_tss_distance_features(credible_set: StudyLocus, v2g: V2G) -> L2GFeature: + """Joins StudyLocus with the V2G to extract a score that is based on the distance to a gene TSS of any variant weighted by its posterior probability in a credible set. Args: - study_locus (StudyLocus): Study locus dataset - distances (V2G): Dataframe containing the distances of all variants to all genes TSS within a region + credible_set (StudyLocus): Credible set dataset + v2g (V2G): Dataframe containing the distances of all variants to all genes TSS within a region Returns: - L2GFeature: Stores the features with the minimum distance among all variants in the credible set and a gene TSS. + L2GFeature: Stores the features with the score of weighting the distance to the TSS by the posterior probability of the variant """ wide_df = ( - study_locus.filter_credible_set(CredibleInterval.IS95) - .df.select( + credible_set.filter_credible_set(CredibleInterval.IS95) + .df.withColumn("variantInLocus", f.explode_outer("locus")) + .select( "studyLocusId", "variantId", - f.explode("locus.variantId").alias("tagVariantId"), + f.col("variantInLocus.variantId").alias("variantInLocusId"), + f.col("variantInLocus.posteriorProbability").alias( + "variantInLocusPosteriorProbability" + ), ) .join( - distances.df.selectExpr( - "variantId as tagVariantId", "geneId", "distance" + v2g.df.filter(f.col("datasourceId") == "canonical_tss").selectExpr( + "variantId as variantInLocusId", "geneId", "score" ), - on="tagVariantId", + on="variantInLocusId", how="inner", ) + .withColumn( + "weightedScore", + f.col("score") * f.col("variantInLocusPosteriorProbability"), + ) .groupBy("studyLocusId", "geneId") .agg( - f.min("distance").alias("distanceTssMinimum"), - f.mean("distance").alias("distanceTssMean"), + f.min("weightedScore").alias("distanceTssMinimum"), + f.mean("weightedScore").alias("distanceTssMean"), ) ) @@ -321,32 +268,33 @@ def _aggregate_vep_feature( credible_set_w_variant_consequences = ( credible_set.filter_credible_set(CredibleInterval.IS95) - .df.withColumn("variantInLocusId", f.explode(f.col("locus.variantId"))) - .withColumn( - "variantInLocusPosteriorProbability", - f.explode(f.col("locus.posteriorProbability")), + .df.withColumn("variantInLocus", f.explode_outer("locus")) + .select( + f.col("studyLocusId"), + f.col("variantId"), + f.col("studyId"), + f.col("variantInLocus.variantId").alias("variantInLocusId"), + f.col("variantInLocus.posteriorProbability").alias( + "variantInLocusPosteriorProbability" + ), ) .join( # Join with V2G to get variant consequences - v2g.df.filter( - f.col("datasourceId") == "variantConsequence" - ).withColumnRenamed("variantId", "variantInLocusId"), + v2g.df.filter(f.col("datasourceId") == "variantConsequence").selectExpr( + "variantId as variantInLocusId", "geneId", "score" + ), on="variantInLocusId", ) - .withColumn( - "weightedScore", - f.col("score") * f.col("variantInLocusPosteriorProbability"), - ) .select( "studyLocusId", "variantId", "studyId", "geneId", - "score", - "weightedScore", + (f.col("score") * f.col("variantInLocusPosteriorProbability")).alias( + "weightedScore" + ), ) .distinct() - .persist() ) return L2GFeature( @@ -357,14 +305,14 @@ def _aggregate_vep_feature( # Calculate overall max VEP score for all genes in the vicinity credible_set_w_variant_consequences.transform( _aggregate_vep_feature, - f.max("score"), + f.max("weightedScore"), ["studyLocusId"], "vepMaximumNeighborhood", ), # Calculate overall max VEP score per gene credible_set_w_variant_consequences.transform( _aggregate_vep_feature, - f.max("score"), + f.max("weightedScore"), ["studyLocusId", "geneId"], "vepMaximum", ), diff --git a/src/gentropy/method/l2g/model.py b/src/gentropy/method/l2g/model.py index 5df189d33..f8d892e07 100644 --- a/src/gentropy/method/l2g/model.py +++ b/src/gentropy/method/l2g/model.py @@ -207,7 +207,7 @@ def evaluate( results: DataFrame, hyperparameters: dict[str, Any], wandb_run_name: str | None, - training_data: L2GFeatureMatrix | None = None, + gold_standard_data: L2GFeatureMatrix | None = None, ) -> None: """Perform evaluation of the model predictions for the test set and track the results with W&B. @@ -215,7 +215,7 @@ def evaluate( results (DataFrame): Dataframe containing the predictions hyperparameters (dict[str, Any]): Hyperparameters used for the model wandb_run_name (str | None): Descriptive name for the run to be tracked with W&B - training_data (L2GFeatureMatrix | None): Training data used for the model. If provided, the ratio of positive to negative labels will be logged to W&B + gold_standard_data (L2GFeatureMatrix | None): Feature matrix for the associations in the gold standard. If provided, the ratio of positive to negative labels will be logged to W&B """ binary_evaluator = BinaryClassificationEvaluator( rawPredictionCol="rawPrediction", labelCol="label" @@ -224,7 +224,7 @@ def evaluate( labelCol="label", predictionCol="prediction" ) - if wandb_run_name and training_data: + if wandb_run_name and gold_standard_data: run = wandb_init( project=self.wandb_l2g_project_name, config=hyperparameters, @@ -232,7 +232,10 @@ def evaluate( ) if isinstance(run, Run): self.log_to_wandb( - results, training_data, [binary_evaluator, multi_evaluator], run + results, + gold_standard_data, + [binary_evaluator, multi_evaluator], + run, ) run.finish() diff --git a/src/gentropy/method/l2g/trainer.py b/src/gentropy/method/l2g/trainer.py index 8d2b3d7aa..1638a0417 100644 --- a/src/gentropy/method/l2g/trainer.py +++ b/src/gentropy/method/l2g/trainer.py @@ -22,9 +22,8 @@ class LocusToGeneTrainer: @classmethod def train( cls: type[LocusToGeneTrainer], - data: L2GFeatureMatrix, + gold_standard_data: L2GFeatureMatrix, l2g_model: LocusToGeneModel, - features_list: list[str], evaluate: bool, wandb_run_name: str | None = None, model_path: str | None = None, @@ -33,9 +32,8 @@ def train( """Train the Locus to Gene model. Args: - data (L2GFeatureMatrix): Feature matrix containing the data + gold_standard_data (L2GFeatureMatrix): Feature matrix for the associations in the gold standard l2g_model (LocusToGeneModel): Model to fit to the data on - features_list (list[str]): List of features to use for the model evaluate (bool): Whether to evaluate the model on a test set wandb_run_name (str | None): Descriptive name for the run to be tracked with W&B model_path (str | None): Path to save the model to @@ -44,7 +42,7 @@ def train( Returns: LocusToGeneModel: Trained model """ - train, test = data.select_features(features_list).train_test_split(fraction=0.8) + train, test = gold_standard_data.train_test_split(fraction=0.8) model = l2g_model.add_pipeline_stage(l2g_model.estimator).fit(train) @@ -53,7 +51,7 @@ def train( results=model.predict(test), hyperparameters=hyperparams, wandb_run_name=wandb_run_name, - training_data=train, + gold_standard_data=gold_standard_data, ) if model_path: l2g_model.save(model_path) diff --git a/src/gentropy/method/sumstat_imputation.py b/src/gentropy/method/sumstat_imputation.py new file mode 100644 index 000000000..8375fa84f --- /dev/null +++ b/src/gentropy/method/sumstat_imputation.py @@ -0,0 +1,172 @@ +"""RAISS summary statstics imputation model.""" + +from __future__ import annotations + +from typing import Any + +import numpy as np +import scipy.linalg + + +class SummaryStatisticsImputation: + """Implementation of RAISS summary statstics imputation model.""" + + @staticmethod + def raiss_model( + z_scores_known: np.ndarray, + ld_matrix_known: np.ndarray, + ld_matrix_known_missing: np.ndarray, + lamb: float = 0.01, + rtol: float = 0.01, + ) -> dict[str, Any]: + """Compute the imputation of the z-score using the RAISS model. + + Args: + z_scores_known (np.ndarray): the vector of known Z scores + ld_matrix_known (np.ndarray) : the matrix of known LD correlations + ld_matrix_known_missing (np.ndarray): LD matrix of known SNPs with other unknown SNPs in large matrix (similar to ld[unknowns, :][:,known]) + lamb (float): size of the small value added to the diagonal of the covariance matrix before inversion. Defaults to 0.01. + rtol (float): threshold to filter eigenvectos by its eigenvalue. It makes an inversion biased but much more numerically robust. Default to 0.01. + + Returns: + dict[str, Any]: + - var (np.ndarray): variance of the imputed SNPs + - mu (np.ndarray): the estimation of the zscore of the imputed SNPs + - ld_score (np.ndarray): the linkage disequilibrium score of the imputed SNPs + - condition_number (np.ndarray): the condition number of the correlation matrix + - correct_inversion (np.ndarray): a boolean array indicating if the inversion was successful + - imputation_r2 (np.ndarray): the R2 of the imputation + """ + sig_t_inv = SummaryStatisticsImputation._invert_sig_t( + ld_matrix_known, lamb, rtol + ) + if sig_t_inv is None: + return { + "var": None, + "mu": None, + "ld_score": None, + "condition_number": None, + "correct_inversion": None, + "imputation_r2": None, + } + else: + condition_number = np.array( + [np.linalg.cond(ld_matrix_known)] * ld_matrix_known_missing.shape[0] + ) + correct_inversion = np.array( + [ + SummaryStatisticsImputation._check_inversion( + ld_matrix_known, sig_t_inv + ) + ] + * ld_matrix_known_missing.shape[0] + ) + + var, ld_score = SummaryStatisticsImputation._compute_var( + ld_matrix_known_missing, sig_t_inv, lamb + ) + + mu = SummaryStatisticsImputation._compute_mu( + ld_matrix_known_missing, sig_t_inv, z_scores_known + ) + var_norm = SummaryStatisticsImputation._var_in_boundaries(var, lamb) + + R2 = (1 + lamb) - var_norm + + mu = mu / np.sqrt(R2) + return { + "var": var, + "mu": mu, + "ld_score": ld_score, + "condition_number": condition_number, + "correct_inversion": correct_inversion, + "imputation_r2": 1 - var, + } + + @staticmethod + def _compute_mu( + sig_i_t: np.ndarray, sig_t_inv: np.ndarray, zt: np.ndarray + ) -> np.ndarray: + """Compute the estimation of z-score from neighborring snp. + + Args: + sig_i_t (np.ndarray) : correlation matrix with line corresponding to unknown Snp (snp to impute) and column to known SNPs + sig_t_inv (np.ndarray): inverse of the correlation matrix of known matrix + zt (np.ndarray): Zscores of known snp + Returns: + np.ndarray: a vector of length i containing the estimate of zscore + + """ + return np.dot(sig_i_t, np.dot(sig_t_inv, zt)) + + @staticmethod + def _compute_var( + sig_i_t: np.ndarray, sig_t_inv: np.ndarray, lamb: float + ) -> tuple[np.ndarray, np.ndarray]: + """Compute the expected variance of the imputed SNPs. + + Args: + sig_i_t (np.ndarray) : correlation matrix with line corresponding to unknown Snp (snp to impute) and column to known SNPs + sig_t_inv (np.ndarray): inverse of the correlation matrix of known matrix + lamb (float): regularization term added to matrix + + Returns: + tuple[np.ndarray, np.ndarray]: a tuple containing the variance and the ld score + """ + var = (1 + lamb) - np.einsum( + "ij,jk,ki->i", sig_i_t, sig_t_inv, sig_i_t.transpose() + ) + ld_score = (sig_i_t**2).sum(1) + + return var, ld_score + + @staticmethod + def _check_inversion(sig_t: np.ndarray, sig_t_inv: np.ndarray) -> bool: + """Check if the inversion is correct. + + Args: + sig_t (np.ndarray): the correlation matrix + sig_t_inv (np.ndarray): the inverse of the correlation matrix + Returns: + bool: True if the inversion is correct, False otherwise + """ + return np.allclose(sig_t, np.dot(sig_t, np.dot(sig_t_inv, sig_t))) + + @staticmethod + def _var_in_boundaries(var: np.ndarray, lamb: float) -> np.ndarray: + """Forces the variance to be in the 0 to 1+lambda boundary. Theoritically we shouldn't have to do that. + + Args: + var (np.ndarray): the variance of the imputed SNPs + lamb (float): regularization term added to the diagonal of the sig_t matrix + + Returns: + np.ndarray: the variance of the imputed SNPs + """ + id_neg = np.where(var < 0) + var[id_neg] = 0 + id_inf = np.where(var > (0.99999 + lamb)) + var[id_inf] = 1 + + return var + + @staticmethod + def _invert_sig_t(sig_t: np.ndarray, lamb: float, rtol: float) -> np.ndarray: + """Invert the correlation matrix. If the provided regularization values are not enough to stabilize the inversion process for the given matrix, the function calls itself recursively, increasing lamb and rtol by 10%. + + Args: + sig_t (np.ndarray): the correlation matrix + lamb (float): regularization term added to the diagonal of the sig_t matrix + rtol (float): threshold to filter eigenvector with a eigenvalue under rtol make inversion biased but much more numerically robust + + Returns: + np.ndarray: the inverse of the correlation matrix + """ + try: + np.fill_diagonal(sig_t, (1 + lamb)) + sig_t_inv = scipy.linalg.pinv(sig_t, rtol=rtol, atol=0) + return sig_t_inv + except np.linalg.LinAlgError: + return SummaryStatisticsImputation._invert_sig_t( + sig_t, lamb * 1.1, rtol * 1.1 + ) diff --git a/src/gentropy/method/sumstat_quality_controls.py b/src/gentropy/method/sumstat_quality_controls.py new file mode 100644 index 000000000..2858f4813 --- /dev/null +++ b/src/gentropy/method/sumstat_quality_controls.py @@ -0,0 +1,285 @@ +"""Summary statistics qulity control methods.""" +from __future__ import annotations + +import numpy as np +import pyspark.sql.functions as f +import pyspark.sql.types as t +import scipy as sc +from pyspark.sql import DataFrame +from pyspark.sql.functions import expr, log10, row_number +from pyspark.sql.window import Window +from scipy.stats import chi2 + +from gentropy.dataset.summary_statistics import SummaryStatistics + + +class SummaryStatisticsQC: + """Summary statistics QC methods. + + This module contains methods for quality control of GWAS summary statistics. + The list of methods includes: + + - sumstat_qc_beta_check: This is the mean beta check. The mean beta should be close to 0. + + - sumstat_qc_pz_check: This is the PZ check. It runs a linear regression between reported p-values and p-values inferred from z-scores. + + - sumstat_n_eff_check: This is the effective sample size check. It estimates the ratio between the effective sample size and the expected one and checks its distribution. + + - gc_lambda_check: This is the genomic control lambda check. + + - number_of_snps: This function calculates the number of SNPs and the number of SNPs with a p-value less than 5e-8. + """ + + @staticmethod + def sumstat_qc_beta_check( + gwas_for_qc: SummaryStatistics, + ) -> DataFrame: + """The mean beta check for QC of GWAS summary statstics. + + Args: + gwas_for_qc (SummaryStatistics): The instance of the SummaryStatistics class. + + Returns: + DataFrame: PySpark DataFrame with the mean beta for each study. + """ + gwas_df = gwas_for_qc._df + qc_c = gwas_df.groupBy("studyId").agg( + f.mean("beta").alias("mean_beta"), + ) + return qc_c + + @staticmethod + def _calculate_logpval(z2: float) -> float: + """Calculate negative log10-pval from Z-score. + + Args: + z2 (float): Z-score squared. + + Returns: + float: log10-pval. + + Examples: + >>> SummaryStatisticsQC._calculate_logpval(1.0) + 0.49851554582799334 + """ + logpval = -np.log10(sc.stats.chi2.sf((z2), 1)) + return float(logpval) + + @staticmethod + def sumstat_qc_pz_check( + gwas_for_qc: SummaryStatistics, + limit: int = 10_000_000, + ) -> DataFrame: + """The PZ check for QC of GWAS summary statstics. It runs linear regression between reported p-values and p-values infered from z-scores. + + Args: + gwas_for_qc (SummaryStatistics): The instance of the SummaryStatistics class. + limit (int): The limit for the number of variants to be used for the estimation. + + Returns: + DataFrame: PySpark DataFrame with the results of the linear regression for each study. + """ + gwas_df = gwas_for_qc._df + + calculate_logpval_udf = f.udf( + SummaryStatisticsQC._calculate_logpval, t.DoubleType() + ) + + window = Window.partitionBy("studyId").orderBy("studyId") + + gwas_df = ( + gwas_df.withColumn("row_num", row_number().over(window)) + .filter(f.col("row_num") <= limit) + .drop("row_num") + ) + + qc_c = ( + gwas_df.withColumn("zscore", f.col("beta") / f.col("standardError")) + .withColumn("new_logpval", calculate_logpval_udf(f.col("zscore") ** 2)) + .withColumn("log_mantissa", log10("pValueMantissa")) + .withColumn( + "diffpval", + -f.col("log_mantissa") - f.col("pValueExponent") - f.col("new_logpval"), + ) + .groupBy("studyId") + .agg( + f.mean("diffpval").alias("mean_diff_pz"), + f.stddev("diffpval").alias("se_diff_pz"), + ) + .select("studyId", "mean_diff_pz", "se_diff_pz") + ) + + return qc_c + + @staticmethod + def sumstat_n_eff_check( + gwas_for_qc: SummaryStatistics, + n_total: int = 100_000, + limit: int = 10_000_000, + min_count: int = 100, + ) -> DataFrame: + """The effective sample size check for QC of GWAS summary statstics. + + It estiamtes the ratio between effective sample size and the expected one and checks it's distribution. + It is possible to conduct only if the effective allele frequency is provided in the study. + The median rartio is always close to 1, but standard error could be inflated. + + Args: + gwas_for_qc (SummaryStatistics): The instance of the SummaryStatistics class. + n_total (int): The reported sample size of the study. The QC metrics is robust toward the sample size. + limit (int): The limit for the number of variants to be used for the estimation. + min_count (int): The minimum number of variants to be used for the estimation. + + Returns: + DataFrame: PySpark DataFrame with the effective sample size ratio for each study. + """ + gwas_df = gwas_for_qc._df + + gwas_df = gwas_df.dropna(subset=["effectAlleleFrequencyFromSource"]) + + counts_df = gwas_df.groupBy("studyId").count() + + # Join the original DataFrame with the counts DataFrame + df_with_counts = gwas_df.join(counts_df, on="studyId") + + # Filter the DataFrame to keep only the groups with count greater than or equal to min_count + filtered_df = df_with_counts.filter(f.col("count") >= min_count).drop("count") + + window = Window.partitionBy("studyId").orderBy("studyId") + gwas_df = ( + filtered_df.withColumn("row_num", row_number().over(window)) + .filter(f.col("row_num") <= limit) + .drop("row_num") + ) + + gwas_df = gwas_df.withColumn( + "var_af", + 2 + * ( + f.col("effectAlleleFrequencyFromSource") + * (1 - f.col("effectAlleleFrequencyFromSource")) + ), + ).withColumn( + "pheno_var", + ((f.col("standardError") ** 2) * n_total * f.col("var_af")) + + ((f.col("beta") ** 2) * f.col("var_af")), + ) + + window = Window.partitionBy("studyId").orderBy("studyId") + + # Calculate the median of 'pheno_var' for each 'studyId' and add it as a new column + gwas_df = gwas_df.withColumn( + "pheno_median", expr("percentile_approx(pheno_var, 0.5)").over(window) + ) + + gwas_df = gwas_df.withColumn( + "N_hat_ratio", + ( + (f.col("pheno_median") - ((f.col("beta") ** 2) * f.col("var_af"))) + / ((f.col("standardError") ** 2) * f.col("var_af") * n_total) + ), + ) + + qc_c = ( + gwas_df.groupBy("studyId") + .agg( + f.stddev("N_hat_ratio").alias("se_N"), + ) + .select("studyId", "se_N") + ) + + return qc_c + + @staticmethod + def gc_lambda_check( + gwas_for_qc: SummaryStatistics, + limit: int = 10_000_000, + ) -> DataFrame: + """The genomic control lambda check for QC of GWAS summary statstics. + + Args: + gwas_for_qc (SummaryStatistics): The instance of the SummaryStatistics class. + limit (int): The limit for the number of variants to be used for the estimation. + + Returns: + DataFrame: PySpark DataFrame with the genomic control lambda for each study. + """ + gwas_df = gwas_for_qc._df + window = Window.partitionBy("studyId").orderBy("studyId") + gwas_df = ( + gwas_df.withColumn("row_num", row_number().over(window)) + .filter(f.col("row_num") <= limit) + .drop("row_num") + ) + + qc_c = ( + gwas_df.select("studyId", "beta", "standardError") + .withColumn("Z2", (f.col("beta") / f.col("standardError")) ** 2) + .groupBy("studyId") + .agg(f.expr("percentile_approx(Z2, 0.5)").alias("gc_lambda")) + .withColumn("gc_lambda", f.col("gc_lambda") / chi2.ppf(0.5, df=1)) + .select("studyId", "gc_lambda") + ) + + return qc_c + + @staticmethod + def number_of_snps( + gwas_for_qc: SummaryStatistics, pval_threhod: float = 5e-8 + ) -> DataFrame: + """The function caluates number of SNPs and number of SNPs with p-value less than 5e-8. + + Args: + gwas_for_qc (SummaryStatistics): The instance of the SummaryStatistics class. + pval_threhod (float): The threshold for the p-value. + + Returns: + DataFrame: PySpark DataFrame with the number of SNPs and number of SNPs with p-value less than threshold. + """ + gwas_df = gwas_for_qc._df + + snp_counts = gwas_df.groupBy("studyId").agg( + f.count("*").alias("n_variants"), + f.sum( + ( + f.log10(f.col("pValueMantissa")) + f.col("pValueExponent") + <= np.log10(pval_threhod) + ).cast("int") + ).alias("n_variants_sig"), + ) + + return snp_counts + + @staticmethod + def get_quality_control_metrics( + gwas: SummaryStatistics, + limit: int = 100_000_000, + min_count: int = 100_000, + n_total: int = 100_000, + ) -> DataFrame: + """The function calculates the quality control metrics for the summary statistics. + + Args: + gwas (SummaryStatistics): The instance of the SummaryStatistics class. + limit (int): The limit for the number of variants to be used for the estimation. + min_count (int): The minimum number of variants to be used for the estimation. + n_total (int): The total sample size. + + Returns: + DataFrame: PySpark DataFrame with the quality control metrics for the summary statistics. + """ + qc1 = SummaryStatisticsQC.sumstat_qc_beta_check(gwas_for_qc=gwas) + qc2 = SummaryStatisticsQC.sumstat_qc_pz_check(gwas_for_qc=gwas, limit=limit) + qc3 = SummaryStatisticsQC.sumstat_n_eff_check( + gwas_for_qc=gwas, n_total=n_total, limit=limit, min_count=min_count + ) + qc4 = SummaryStatisticsQC.gc_lambda_check(gwas_for_qc=gwas, limit=limit) + qc5 = SummaryStatisticsQC.number_of_snps(gwas_for_qc=gwas) + df = ( + qc1.join(qc2, on="studyId", how="outer") + .join(qc3, on="studyId", how="outer") + .join(qc4, on="studyId", how="outer") + .join(qc5, on="studyId", how="outer") + ) + + return df diff --git a/src/gentropy/method/susie_inf.py b/src/gentropy/method/susie_inf.py index d493285a0..522f77193 100644 --- a/src/gentropy/method/susie_inf.py +++ b/src/gentropy/method/susie_inf.py @@ -34,7 +34,7 @@ def susie_inf( # noqa: C901 ssq_range: tuple[float, float] = (0, 1), pi0: np.ndarray | None = None, est_sigmasq: bool = True, - est_tausq: bool = True, + est_tausq: bool = False, sigmasq: float = 1, tausq: float = 0, sigmasq_range: tuple[float, float] | None = None, @@ -399,7 +399,7 @@ def g(x: float) -> float: def cred_inf( PIP: np.ndarray, n: int = 100_000, - coverage: float = 0.9, + coverage: float = 0.99, purity: float = 0.5, LD: np.ndarray | None = None, V: np.ndarray | None = None, diff --git a/src/gentropy/method/window_based_clumping.py b/src/gentropy/method/window_based_clumping.py index a2ae12419..57a24c559 100644 --- a/src/gentropy/method/window_based_clumping.py +++ b/src/gentropy/method/window_based_clumping.py @@ -151,22 +151,21 @@ def _prune_peak(position: NDArray[np.float64], window_size: int) -> DenseVector: return DenseVector(is_lead) - @classmethod + @staticmethod def clump( - cls: type[WindowBasedClumping], - summary_stats: SummaryStatistics, - window_length: int, - p_value_significance: float = 5e-8, + summary_statistics: SummaryStatistics, + distance: int = 500_000, + gwas_significance: float = 5e-8, ) -> StudyLocus: - """Clump summary statistics by distance. + """Clump significant signals from summary statistics based on window. Args: - summary_stats (SummaryStatistics): summary statistics to clump - window_length (int): window length in basepair - p_value_significance (float): only more significant variants are considered + summary_statistics (SummaryStatistics): Summary statistics to be used for clumping. + distance (int): Distance in base pairs to be used for clumping. Defaults to 500_000. + gwas_significance (float): GWAS significance threshold. Defaults to 5e-8. Returns: - StudyLocus: clumped summary statistics + StudyLocus: clumped summary statistics (without locus collection) """ # Create window for locus clusters # - variants where the distance between subsequent variants is below the defined threshold. @@ -177,9 +176,9 @@ def clump( return StudyLocus( _df=( - summary_stats + summary_statistics # Dropping snps below significance - all subsequent steps are done on significant variants: - .pvalue_filter(p_value_significance) + .pvalue_filter(gwas_significance) .df # Clustering summary variants for efficient windowing (complexity reduction): .withColumn( @@ -188,7 +187,7 @@ def clump( f.col("studyId"), f.col("chromosome"), f.col("position"), - window_length, + distance, ), ) # Within each cluster variants are ranked by significance: @@ -213,7 +212,7 @@ def clump( fml.vector_to_array( f.udf(WindowBasedClumping._prune_peak, VectorUDT())( fml.array_to_vector(f.col("collectedPositions")), - f.lit(window_length), + f.lit(distance), ) ), ), @@ -245,91 +244,3 @@ def clump( ), _schema=StudyLocus.get_schema(), ) - - @classmethod - def clump_with_locus( - cls: type[WindowBasedClumping], - summary_stats: SummaryStatistics, - window_length: int, - p_value_significance: float = 5e-8, - p_value_baseline: float = 0.05, - locus_window_length: int | None = None, - ) -> StudyLocus: - """Clump significant associations while collecting locus around them. - - Args: - summary_stats (SummaryStatistics): Input summary statistics dataset - window_length (int): Window size in bp, used for distance based clumping. - p_value_significance (float): GWAS significance threshold used to filter peaks. Defaults to 5e-8. - p_value_baseline (float): Least significant threshold. Below this, all snps are dropped. Defaults to 0.05. - locus_window_length (int | None): The distance for collecting locus around the semi indices. Defaults to None. - - Returns: - StudyLocus: StudyLocus after clumping with information about the `locus` - """ - # If no locus window provided, using the same value: - if locus_window_length is None: - locus_window_length = window_length - - # Run distance based clumping on the summary stats: - clumped_dataframe = WindowBasedClumping.clump( - summary_stats, - window_length=window_length, - p_value_significance=p_value_significance, - ).df.alias("clumped") - - # Get list of columns from clumped dataset for further propagation: - clumped_columns = clumped_dataframe.columns - - # Dropping variants not meeting the baseline criteria: - sumstats_baseline = summary_stats.pvalue_filter(p_value_baseline).df - - # Renaming columns: - sumstats_baseline_renamed = sumstats_baseline.selectExpr( - *[f"{col} as tag_{col}" for col in sumstats_baseline.columns] - ).alias("sumstat") - - study_locus_df = ( - sumstats_baseline_renamed - # Joining the two datasets together: - .join( - f.broadcast(clumped_dataframe), - on=[ - (f.col("sumstat.tag_studyId") == f.col("clumped.studyId")) - & (f.col("sumstat.tag_chromosome") == f.col("clumped.chromosome")) - & ( - f.col("sumstat.tag_position") - >= (f.col("clumped.position") - locus_window_length) - ) - & ( - f.col("sumstat.tag_position") - <= (f.col("clumped.position") + locus_window_length) - ) - ], - how="right", - ) - .withColumn( - "locus", - f.struct( - f.col("tag_variantId").alias("variantId"), - f.col("tag_beta").alias("beta"), - f.col("tag_pValueMantissa").alias("pValueMantissa"), - f.col("tag_pValueExponent").alias("pValueExponent"), - f.col("tag_standardError").alias("standardError"), - ), - ) - .groupby("studyLocusId") - .agg( - *[ - f.first(col).alias(col) - for col in clumped_columns - if col != "studyLocusId" - ], - f.collect_list(f.col("locus")).alias("locus"), - ) - ) - - return StudyLocus( - _df=study_locus_df, - _schema=StudyLocus.get_schema(), - ) diff --git a/src/gentropy/pics.py b/src/gentropy/pics.py index c2ed9bf66..80421b9ae 100644 --- a/src/gentropy/pics.py +++ b/src/gentropy/pics.py @@ -3,7 +3,7 @@ from __future__ import annotations from gentropy.common.session import Session -from gentropy.dataset.study_locus import StudyLocus +from gentropy.dataset.study_locus import CredibleInterval, StudyLocus from gentropy.method.pics import PICS @@ -28,6 +28,10 @@ def __init__( session, study_locus_ld_annotated_in ) # PICS - picsed_sl = PICS.finemap(study_locus_ld_annotated).annotate_credible_sets() + picsed_sl = ( + PICS.finemap(study_locus_ld_annotated) + .annotate_credible_sets() + .filter_credible_set(credible_interval=CredibleInterval.IS99) + ) # Write picsed_sl.df.write.mode(session.write_mode).parquet(picsed_study_locus_out) diff --git a/src/gentropy/susie_finemapper.py b/src/gentropy/susie_finemapper.py new file mode 100644 index 000000000..cc4c7a6a1 --- /dev/null +++ b/src/gentropy/susie_finemapper.py @@ -0,0 +1,1125 @@ +"""Step to run a finemapping using.""" + +from __future__ import annotations + +import logging +import time +from typing import Any + +import hail as hl +import numpy as np +import pandas as pd +import pyspark.sql.functions as f +import scipy as sc +from pyspark.sql import DataFrame, Row, Window +from pyspark.sql.functions import row_number +from pyspark.sql.types import ( + DoubleType, + IntegerType, + StringType, + StructField, + StructType, +) + +from gentropy.common.session import Session +from gentropy.common.spark_helpers import neglog_pvalue_to_mantissa_and_exponent +from gentropy.dataset.study_index import StudyIndex +from gentropy.dataset.study_locus import StudyLocus +from gentropy.dataset.summary_statistics import SummaryStatistics +from gentropy.datasource.gnomad.ld import GnomADLDMatrix +from gentropy.method.carma import CARMA +from gentropy.method.sumstat_imputation import SummaryStatisticsImputation +from gentropy.method.susie_inf import SUSIE_inf + + +class SusieFineMapperStep: + """SuSie finemaping. It has generic methods to run SuSie fine mapping for a study locus. + + This class/step is the temporary solution of the fine-mapping warpper for the development purposes. + In the future this step will be refactored and moved to the methods module. + """ + + def __init__( + self, + session: Session, + study_locus_to_finemap: str, + study_locus_collected_path: str, + study_index_path: str, + output_path: str, + locus_radius: int = 500_000, + max_causal_snps: int = 10, + primary_signal_pval_threshold: float = 1, + secondary_signal_pval_threshold: float = 1, + purity_mean_r2_threshold: float = 0, + purity_min_r2_threshold: float = 0, + cs_lbf_thr: float = 2, + sum_pips: float = 0.99, + logging: bool = False, + susie_est_tausq: bool = False, + run_carma: bool = False, + run_sumstat_imputation: bool = False, + carma_time_limit: int = 600, + imputed_r2_threshold: float = 0.9, + ld_score_threshold: float = 5, + output_path_log: str = "~/", + ) -> None: + """Run fine-mapping on a studyLocusId from a collected studyLocus table. + + Args: + session (Session): Spark session + study_locus_to_finemap (str): path to the study locus to fine-map + study_locus_collected_path (str): path to the collected study locus + study_index_path (str): path to the study index + output_path (str): path to the output + locus_radius (int): Radius of base-pair window around the locus, default is 500_000 + max_causal_snps (int): Maximum number of causal variants in locus, default is 10 + primary_signal_pval_threshold (float): p-value threshold for the lead variant from the primary signal (credibleSetIndex==1), default is 5e-8 + secondary_signal_pval_threshold (float): p-value threshold for the lead variant from the secondary signals, default is 1e-7 + purity_mean_r2_threshold (float): thrshold for purity mean r2 qc metrics for filtering credible sets, default is 0 + purity_min_r2_threshold (float): thrshold for purity min r2 qc metrics for filtering credible sets, default is 0.25 + cs_lbf_thr (float): credible set logBF threshold for filtering credible sets, default is 2 + sum_pips (float): the expected sum of posterior probabilities in the locus, default is 0.99 (99% credible set) + logging (bool): enable logging, default is False, runs diffrent FM wrapper + susie_est_tausq (bool): estimate tau squared, default is False + run_carma (bool): run CARMA, default is False + run_sumstat_imputation (bool): run summary statistics imputation, default is False + carma_time_limit (int): CARMA time limit, default is 600 seconds + imputed_r2_threshold (float): imputed R2 threshold, default is 0.9 + ld_score_threshold (float): LD score threshold ofr imputation, default is 5 + output_path_log (str): path to the output log + """ + # Initialise Hail + hl.init(sc=session.spark.sparkContext, log="/dev/null") + # Read studyLocus + study_locus = ( + StudyLocus.from_parquet(session, study_locus_collected_path) + .df.filter(f.col("studyLocusId") == study_locus_to_finemap) + .collect()[0] + ) + study_index = StudyIndex.from_parquet(session, study_index_path) + # Run fine-mapping + if logging: + result_logging = ( + self.susie_finemapper_one_studylocus_row_v3_dev_ss_gathered( + session=session, + study_locus_row=study_locus, + study_index=study_index, + radius=locus_radius, + max_causal_snps=max_causal_snps, + primary_signal_pval_threshold=primary_signal_pval_threshold, + secondary_signal_pval_threshold=secondary_signal_pval_threshold, + purity_mean_r2_threshold=purity_mean_r2_threshold, + purity_min_r2_threshold=purity_min_r2_threshold, + cs_lbf_thr=cs_lbf_thr, + sum_pips=sum_pips, + susie_est_tausq=susie_est_tausq, + run_carma=run_carma, + run_sumstat_imputation=run_sumstat_imputation, + carma_time_limit=carma_time_limit, + imputed_r2_threshold=imputed_r2_threshold, + ld_score_threshold=ld_score_threshold, + ) + ) + # Write result + result_logging["study_locus"].df.write.mode(session.write_mode).parquet( + output_path + "/" + study_locus_to_finemap + ) + # Write log + result_logging["log"].df.write.mode(session.write_mode).parquet( + output_path_log + "/" + study_locus_to_finemap + ) + else: + result = self.susie_finemapper_ss_gathered( + session=session, + study_locus_row=study_locus, + study_index=study_index, + radius=locus_radius, + max_causal_snps=max_causal_snps, + primary_signal_pval_threshold=primary_signal_pval_threshold, + secondary_signal_pval_threshold=secondary_signal_pval_threshold, + purity_mean_r2_threshold=purity_mean_r2_threshold, + purity_min_r2_threshold=purity_min_r2_threshold, + cs_lbf_thr=cs_lbf_thr, + sum_pips=sum_pips, + ) + # Write result + if result is not None: + result.df.write.mode(session.write_mode).parquet( + output_path + "/" + study_locus_to_finemap + ) + + @staticmethod + def susie_finemapper_one_studylocus_row( + GWAS: SummaryStatistics, + session: Session, + study_locus_row: Row, + study_index: StudyIndex, + radius: int = 1_000_000, + max_causal_snps: int = 10, + primary_signal_pval_threshold: float = 5e-8, + secondary_signal_pval_threshold: float = 1e-7, + purity_mean_r2_threshold: float = 0, + purity_min_r2_threshold: float = 0.25, + sum_pips: float = 0.99, + cs_lbf_thr: float = 2, + ) -> StudyLocus: + """Susie fine-mapper for StudyLocus row with SummaryStatistics object. + + Args: + GWAS (SummaryStatistics): GWAS summary statistics + session (Session): Spark session + study_locus_row (Row): StudyLocus row + study_index (StudyIndex): StudyIndex object + radius (int): window size for fine-mapping + max_causal_snps (int): number of causal variants + primary_signal_pval_threshold (float): p-value threshold for the lead variant from the primary signal (credibleSetIndex==1) + secondary_signal_pval_threshold (float): p-value threshold for the lead variant from the secondary signals + purity_mean_r2_threshold (float): thrshold for purity mean r2 qc metrics for filtering credible sets + purity_min_r2_threshold (float): thrshold for purity min r2 qc metrics for filtering credible sets + sum_pips (float): the expected sum of posterior probabilities in the locus, default is 0.99 (99% credible set) + cs_lbf_thr (float): credible set logBF threshold for filtering credible sets, default is 2 + + Returns: + StudyLocus: StudyLocus object with fine-mapped credible sets + """ + # PLEASE DO NOT REMOVE THIS LINE + pd.DataFrame.iteritems = pd.DataFrame.items + + chromosome = study_locus_row["chromosome"] + position = study_locus_row["position"] + studyId = study_locus_row["studyId"] + + study_index_df = study_index._df + study_index_df = study_index_df.filter(f.col("studyId") == studyId) + major_population = study_index_df.select( + "studyId", + f.array_max(f.col("ldPopulationStructure")) + .getItem("ldPopulation") + .alias("majorPopulation"), + ).collect()[0]["majorPopulation"] + + region = ( + chromosome + + ":" + + str(int(position - radius)) + + "-" + + str(int(position + radius)) + ) + + gwas_df = ( + GWAS.df.withColumn("z", f.col("beta") / f.col("standardError")) + .withColumn("chromosome", f.split(f.col("variantId"), "_")[0]) + .withColumn("position", f.split(f.col("variantId"), "_")[1]) + .filter(f.col("studyId") == studyId) + .filter(f.col("z").isNotNull()) + ) + # Remove ALL duplicated variants from GWAS DataFrame - we don't know which is correct + variant_counts = gwas_df.groupBy("variantId").count() + unique_variants = variant_counts.filter(f.col("count") == 1) + gwas_df = gwas_df.join(unique_variants, on="variantId", how="left_semi") + + ld_index = ( + GnomADLDMatrix() + .get_locus_index( + study_locus_row=study_locus_row, + radius=radius, + major_population=major_population, + ) + .withColumn( + "variantId", + f.concat( + f.lit(chromosome), + f.lit("_"), + f.col("`locus.position`"), + f.lit("_"), + f.col("alleles").getItem(0), + f.lit("_"), + f.col("alleles").getItem(1), + ).cast("string"), + ) + ) + + # Filtering out the variants that are not in the LD matrix, we don't need them + gwas_index = gwas_df.join( + ld_index.select("variantId", "alleles", "idx"), on="variantId" + ).sort("idx") + + gnomad_ld = GnomADLDMatrix.get_numpy_matrix( + gwas_index, gnomad_ancestry=major_population + ) + + pd_df = gwas_index.toPandas() + z_to_fm = np.array(pd_df["z"]) + ld_to_fm = gnomad_ld + + susie_output = SUSIE_inf.susie_inf(z=z_to_fm, LD=ld_to_fm, L=max_causal_snps) + + schema = StructType( + [ + StructField("variantId", StringType(), True), + StructField("chromosome", StringType(), True), + StructField("position", IntegerType(), True), + StructField("z", DoubleType(), True), + ] + ) + pd_df["position"] = pd_df["position"].astype(int) + variant_index = session.spark.createDataFrame( + pd_df[["variantId", "chromosome", "position", "z"]], + schema=schema, + ) + + return SusieFineMapperStep.susie_inf_to_studylocus( + susie_output=susie_output, + session=session, + studyId=studyId, + region=region, + variant_index=variant_index, + ld_matrix=ld_to_fm, + primary_signal_pval_threshold=primary_signal_pval_threshold, + secondary_signal_pval_threshold=secondary_signal_pval_threshold, + purity_mean_r2_threshold=purity_mean_r2_threshold, + purity_min_r2_threshold=purity_min_r2_threshold, + sum_pips=sum_pips, + cs_lbf_thr=cs_lbf_thr, + ) + + @staticmethod + def susie_inf_to_studylocus( + susie_output: dict[str, Any], + session: Session, + studyId: str, + region: str, + variant_index: DataFrame, + ld_matrix: np.ndarray, + cs_lbf_thr: float = 2, + sum_pips: float = 0.99, + primary_signal_pval_threshold: float = 1, + secondary_signal_pval_threshold: float = 1, + purity_mean_r2_threshold: float = 0, + purity_min_r2_threshold: float = 0, + ) -> StudyLocus: + """Convert SuSiE-inf output to StudyLocus DataFrame. + + Args: + susie_output (dict[str, Any]): SuSiE-inf output dictionary + session (Session): Spark session + studyId (str): study ID + region (str): region + variant_index (DataFrame): DataFrame with variant information + ld_matrix (np.ndarray): LD matrix used for fine-mapping + cs_lbf_thr (float): credible set logBF threshold for filtering credible sets, default is 2 + sum_pips (float): the expected sum of posterior probabilities in the locus, default is 0.99 (99% credible set) + primary_signal_pval_threshold (float): p-value threshold for the lead variant from the primary signal (credibleSetIndex==1) + secondary_signal_pval_threshold (float): p-value threshold for the lead variant from the secondary signals + purity_mean_r2_threshold (float): thrshold for purity mean r2 qc metrics for filtering credible sets + purity_min_r2_threshold (float): thrshold for purity min r2 qc metrics for filtering credible sets + + Returns: + StudyLocus: StudyLocus object with fine-mapped credible sets + """ + # PLEASE DO NOT REMOVE THIS LINE + pd.DataFrame.iteritems = pd.DataFrame.items + + variants = np.array( + [row["variantId"] for row in variant_index.select("variantId").collect()] + ).reshape(-1, 1) + + PIPs = susie_output["PIP"] + lbfs = susie_output["lbf_variable"] + mu = susie_output["mu"] + susie_result = np.hstack((variants, PIPs, lbfs, mu)) + + L_snps = PIPs.shape[1] + + # Extracting credible sets + order_creds = list(enumerate(susie_output["lbf"])) + order_creds.sort(key=lambda x: x[1], reverse=True) + + counter = 0 + for i, cs_lbf_value in order_creds: + if counter > 0 and cs_lbf_value < cs_lbf_thr: + counter += 1 + continue + counter += 1 + sorted_arr = susie_result[ + susie_result[:, i + 1].astype(float).argsort()[::-1] + ] + cumsum_arr = np.cumsum(sorted_arr[:, i + 1].astype(float)) + filter_row = np.argmax(cumsum_arr >= sum_pips) + if filter_row == 0 and cumsum_arr[0] < sum_pips: + filter_row = len(cumsum_arr) + filter_row += 1 + filtered_arr = sorted_arr[:filter_row] + cred_set = filtered_arr[:, [0, i + 1, i + L_snps + 1, i + 2 * L_snps + 1]] + win = Window.rowsBetween( + Window.unboundedPreceding, Window.unboundedFollowing + ) + + cred_set = ( + session.spark.createDataFrame( + cred_set.tolist(), + ["variantId", "posteriorProbability", "logBF", "beta"], + ) + .join( + variant_index.select( + "variantId", + "chromosome", + "position", + ), + "variantId", + ) + .sort(f.desc("posteriorProbability")) + .withColumn( + "locus", + f.collect_list( + f.struct( + f.col("variantId").cast("string").alias("variantId"), + f.col("posteriorProbability") + .cast("double") + .alias("posteriorProbability"), + f.col("logBF").cast("double").alias("logBF"), + f.col("beta").cast("double").alias("beta"), + ) + ).over(win), + ) + .limit(1) + .withColumns( + { + "studyId": f.lit(studyId), + "region": f.lit(region), + "credibleSetIndex": f.lit(counter), + "credibleSetlog10BF": f.lit(cs_lbf_value * 0.4342944819), + "finemappingMethod": f.lit("SuSiE-inf"), + } + ) + .withColumn( + "studyLocusId", + StudyLocus.assign_study_locus_id( + f.col("studyId"), f.col("variantId") + ), + ) + .select( + "studyLocusId", + "studyId", + "region", + "credibleSetIndex", + "locus", + "variantId", + "chromosome", + "position", + "finemappingMethod", + "credibleSetlog10BF", + ) + ) + if counter == 1: + cred_sets = cred_set + else: + cred_sets = cred_sets.unionByName(cred_set) + + # Calulating purity + variant_index_df = variant_index.toPandas() + cred_sets_variantId = cred_sets.select("locus.variantId").toPandas() + + lead_variantId_list = ( + cred_sets.select("variantId").toPandas()["variantId"].tolist() + ) + cred_set_index = ( + cred_sets.select("credibleSetIndex").toPandas()["credibleSetIndex"].tolist() + ) + vlist_series = pd.Series(lead_variantId_list) + ind = vlist_series.map(variant_index_df.set_index("variantId").index.get_loc) + z_values = variant_index_df.iloc[ind]["z"].tolist() + z_values_array = np.array(z_values) + pval = sc.stats.chi2.sf((z_values_array**2), 1) + + # sometimes pval is 0, we need to avoid it + pval[pval < 1e-322] = 1e-322 + + neglogpval = -np.log10(pval) + neglogpval = neglogpval.tolist() + + list_purity_mean_r2 = [] + list_purity_min_r2 = [] + for _, row in cred_sets_variantId.iterrows(): + row = row.iloc[0] + vlist_series = pd.Series(row) + ind = vlist_series.map( + variant_index_df.set_index("variantId").index.get_loc + ) + # print(variant_index_df.iloc[ind,0]==vlist) + squared_matrix = ld_matrix[ind, :][:, ind] ** 2 + purity_mean_r2 = np.mean(squared_matrix) + purity_min_r2 = np.min(squared_matrix) + list_purity_mean_r2.append(purity_mean_r2) + list_purity_min_r2.append(purity_min_r2) + + cred_sets = cred_sets.drop("pValueMantissa", "pValueExponent") + + df = pd.DataFrame( + { + "credibleSetIndex": cred_set_index, + "purityMeanR2": purity_mean_r2, + "purityMinR2": purity_min_r2, + "zScore": z_values, + "neglogpval": neglogpval, + } + ) + schema = StructType( + [ + StructField("credibleSetIndex", IntegerType(), True), + StructField("purityMeanR2", DoubleType(), True), + StructField("purityMinR2", DoubleType(), True), + StructField("zScore", DoubleType(), True), + StructField("neglogpval", DoubleType(), True), + ] + ) + + df_spark = session.spark.createDataFrame(df, schema=schema) + + cred_sets = cred_sets.join(df_spark, on="credibleSetIndex") + + mantissa, exponent = neglog_pvalue_to_mantissa_and_exponent( + cred_sets.neglogpval + ) + + cred_sets = cred_sets.withColumn("pValueMantissa", mantissa) + cred_sets = cred_sets.withColumn("pValueExponent", exponent) + + cred_sets = cred_sets.withColumn( + "pValueMantissa", f.col("pValueMantissa").cast("float") + ) + + cred_sets = cred_sets.filter( + (f.col("neglogpval") >= -np.log10(secondary_signal_pval_threshold)) + | (f.col("credibleSetIndex") == 1) + ) + + cred_sets = cred_sets.filter( + (f.col("neglogpval") >= -np.log10(primary_signal_pval_threshold)) + | (f.col("credibleSetIndex") > 1) + ) + + cred_sets = cred_sets.drop("neglogpval") + + cred_sets = cred_sets.filter( + (f.col("credibleSetlog10BF") >= cs_lbf_thr * 0.4342944819) + | (f.col("credibleSetIndex") == 1) + ) + + cred_sets = cred_sets.filter(f.col("purityMeanR2") >= purity_mean_r2_threshold) + cred_sets = cred_sets.filter(f.col("purityMinR2") >= purity_min_r2_threshold) + + window = Window.partitionBy("studyLocusId").orderBy("credibleSetIndex") + cred_sets = cred_sets.withColumn("rank", row_number().over(window)) + cred_sets = cred_sets.filter(cred_sets["rank"] == 1).drop("rank") + + return StudyLocus( + _df=cred_sets, + _schema=StudyLocus.get_schema(), + ) + + @staticmethod + def susie_finemapper_ss_gathered( + session: Session, + study_locus_row: Row, + study_index: StudyIndex, + radius: int = 1_000_000, + max_causal_snps: int = 10, + primary_signal_pval_threshold: float = 5e-8, + secondary_signal_pval_threshold: float = 1e-7, + purity_mean_r2_threshold: float = 0, + purity_min_r2_threshold: float = 0.25, + cs_lbf_thr: float = 2, + sum_pips: float = 0.99, + ) -> StudyLocus | None: + """Susie fine-mapper for StudyLocus row with locus annotated summary statistics. + + Args: + session (Session): Spark session + study_locus_row (Row): StudyLocus row + study_index (StudyIndex): StudyIndex object + radius (int): window size for fine-mapping + max_causal_snps (int): number of causal variants + primary_signal_pval_threshold (float): p-value threshold for the lead variant from the primary signal (credibleSetIndex==1) + secondary_signal_pval_threshold (float): p-value threshold for the lead variant from the secondary signals + purity_mean_r2_threshold (float): thrshold for purity mean r2 qc metrics for filtering credible sets + purity_min_r2_threshold (float): thrshold for purity min r2 qc metrics for filtering credible sets + cs_lbf_thr (float): credible set logBF threshold for filtering credible sets + sum_pips (float): the expected sum of posterior probabilities in the locus, default is 0.99 (99% credible set) + + Returns: + StudyLocus | None: StudyLocus object with fine-mapped credible sets, or None + """ + # PLEASE DO NOT REMOVE THIS LINE + pd.DataFrame.iteritems = pd.DataFrame.items + + chromosome = study_locus_row["chromosome"] + position = study_locus_row["position"] + studyId = study_locus_row["studyId"] + + study_index_df = study_index._df + study_index_df = study_index_df.filter(f.col("studyId") == studyId) + major_population = study_index_df.select( + "studyId", + f.array_max(f.col("ldPopulationStructure")) + .getItem("ldPopulation") + .alias("majorPopulation"), + ).collect()[0]["majorPopulation"] + + region = ( + chromosome + + ":" + + str(int(position - radius)) + + "-" + + str(int(position + radius)) + ) + + schema = StudyLocus.get_schema() + gwas_df = session.spark.createDataFrame([study_locus_row], schema=schema) + exploded_df = gwas_df.select(f.explode("locus").alias("locus")) + + result_df = exploded_df.select( + "locus.variantId", "locus.beta", "locus.standardError" + ) + gwas_df = ( + result_df.withColumn("z", f.col("beta") / f.col("standardError")) + .withColumn("chromosome", f.split(f.col("variantId"), "_")[0]) + .withColumn("position", f.split(f.col("variantId"), "_")[1]) + .filter(f.col("z").isNotNull()) + ) + # Remove ALL duplicated variants from GWAS DataFrame - we don't know which is correct + variant_counts = gwas_df.groupBy("variantId").count() + unique_variants = variant_counts.filter(f.col("count") == 1) + gwas_df = gwas_df.join(unique_variants, on="variantId", how="left_semi") + + ld_index = ( + GnomADLDMatrix() + .get_locus_index( + study_locus_row=study_locus_row, + radius=radius, + major_population=major_population, + ) + .withColumn( + "variantId", + f.concat( + f.lit(chromosome), + f.lit("_"), + f.col("`locus.position`"), + f.lit("_"), + f.col("alleles").getItem(0), + f.lit("_"), + f.col("alleles").getItem(1), + ).cast("string"), + ) + ) + + # Filtering out the variants that are not in the LD matrix, we don't need them + gwas_index = gwas_df.join( + ld_index.select("variantId", "alleles", "idx"), on="variantId" + ).sort("idx") + if gwas_index.rdd.isEmpty(): + logging.warning("No overlapping variants in the LD Index") + return None + gnomad_ld = GnomADLDMatrix.get_numpy_matrix( + gwas_index, gnomad_ancestry=major_population + ) + + pd_df = gwas_index.toPandas() + z_to_fm = np.array(pd_df["z"]) + ld_to_fm = gnomad_ld + + susie_output = SUSIE_inf.susie_inf(z=z_to_fm, LD=ld_to_fm, L=max_causal_snps) + + schema = StructType( + [ + StructField("variantId", StringType(), True), + StructField("chromosome", StringType(), True), + StructField("position", IntegerType(), True), + StructField("z", DoubleType(), True), + ] + ) + pd_df["position"] = pd_df["position"].astype(int) + variant_index = session.spark.createDataFrame( + pd_df[["variantId", "chromosome", "position", "z"]], + schema=schema, + ) + + return SusieFineMapperStep.susie_inf_to_studylocus( + susie_output=susie_output, + session=session, + studyId=studyId, + region=region, + variant_index=variant_index, + ld_matrix=ld_to_fm, + primary_signal_pval_threshold=primary_signal_pval_threshold, + secondary_signal_pval_threshold=secondary_signal_pval_threshold, + purity_mean_r2_threshold=purity_mean_r2_threshold, + purity_min_r2_threshold=purity_min_r2_threshold, + cs_lbf_thr=cs_lbf_thr, + sum_pips=sum_pips, + ) + + @staticmethod + def susie_finemapper_from_prepared_dataframes( + GWAS_df: DataFrame, + ld_index: DataFrame, + gnomad_ld: np.ndarray, + L: int, + session: Session, + studyId: str, + region: str, + susie_est_tausq: bool = False, + run_carma: bool = False, + run_sumstat_imputation: bool = False, + carma_time_limit: int = 600, + imputed_r2_threshold: float = 0.8, + ld_score_threshold: float = 4, + sum_pips: float = 0.99, + primary_signal_pval_threshold: float = 5e-8, + secondary_signal_pval_threshold: float = 1e-7, + purity_mean_r2_threshold: float = 0, + purity_min_r2_threshold: float = 0.25, + cs_lbf_thr: float = 2, + ) -> dict[str, Any]: + """Susie fine-mapper function that uses LD, z-scores, variant info and other options for Fine-Mapping. + + Args: + GWAS_df (DataFrame): GWAS DataFrame with mandotary columns: z, variantId + ld_index (DataFrame): LD index DataFrame + gnomad_ld (np.ndarray): GnomAD LD matrix + L (int): number of causal variants + session (Session): Spark session + studyId (str): study ID + region (str): region + susie_est_tausq (bool): estimate tau squared, default is False + run_carma (bool): run CARMA, default is False + run_sumstat_imputation (bool): run summary statistics imputation, default is False + carma_time_limit (int): CARMA time limit, default is 600 seconds + imputed_r2_threshold (float): imputed R2 threshold, default is 0.8 + ld_score_threshold (float): LD score threshold ofr imputation, default is 4 + sum_pips (float): the expected sum of posterior probabilities in the locus, default is 0.99 (99% credible set) + primary_signal_pval_threshold (float): p-value threshold for the lead variant from the primary signal (credibleSetIndex==1) + secondary_signal_pval_threshold (float): p-value threshold for the lead variant from the secondary signals + purity_mean_r2_threshold (float): thrshold for purity mean r2 qc metrics for filtering credible sets + purity_min_r2_threshold (float): thrshold for purity min r2 qc metrics for filtering credible sets + cs_lbf_thr (float): credible set logBF threshold for filtering credible sets, default is 2 + + Returns: + dict[str, Any]: dictionary with study locus, number of GWAS variants, number of LD variants, number of variants after merge, number of outliers, number of imputed variants, number of variants to fine-map + """ + # PLEASE DO NOT REMOVE THIS LINE + pd.DataFrame.iteritems = pd.DataFrame.items + + start_time = time.time() + GWAS_df = GWAS_df.toPandas() + N_gwas_before_dedupl = len(GWAS_df) + + GWAS_df = GWAS_df.drop_duplicates(subset="variantId", keep=False) + GWAS_df = GWAS_df.reset_index() + + ld_index = ld_index.toPandas() + ld_index = ld_index.reset_index() + + N_gwas = len(GWAS_df) + N_ld = len(ld_index) + + # Filtering out the variants that are not in the LD matrix, we don't need them + df_columns = ["variantId", "z"] + GWAS_df = GWAS_df.merge(ld_index, on="variantId", how="inner") + GWAS_df = GWAS_df[df_columns].reset_index() + N_after_merge = len(GWAS_df) + + merged_df = GWAS_df.merge( + ld_index, left_on="variantId", right_on="variantId", how="inner" + ) + indices = merged_df["index_y"].values + + ld_to_fm = gnomad_ld[indices][:, indices] + z_to_fm = GWAS_df["z"].values + + if run_carma: + carma_output = CARMA.time_limited_CARMA_spike_slab_noEM( + z=z_to_fm, ld=ld_to_fm, sec_threshold=carma_time_limit + ) + if carma_output["Outliers"] != [] and carma_output["Outliers"] is not None: + GWAS_df.drop(carma_output["Outliers"], inplace=True) + GWAS_df = GWAS_df.reset_index() + ld_index = ld_index.reset_index() + merged_df = GWAS_df.merge( + ld_index, left_on="variantId", right_on="variantId", how="inner" + ) + indices = merged_df["index_y"].values + + ld_to_fm = gnomad_ld[indices][:, indices] + z_to_fm = GWAS_df["z"].values + N_outliers = len(carma_output["Outliers"]) + else: + N_outliers = 0 + else: + N_outliers = 0 + + if run_sumstat_imputation: + known = indices + unknown = [ + index for index in list(range(len(gnomad_ld))) if index not in known + ] + sig_t = gnomad_ld[known, :][:, known] + sig_i_t = gnomad_ld[unknown, :][:, known] + zt = z_to_fm + + sumstat_imp_res = SummaryStatisticsImputation.raiss_model( + z_scores_known=zt, + ld_matrix_known=sig_t, + ld_matrix_known_missing=sig_i_t, + lamb=0.01, + rtol=0.01, + ) + + bool_index = (sumstat_imp_res["imputation_r2"] >= imputed_r2_threshold) * ( + sumstat_imp_res["ld_score"] >= ld_score_threshold + ) + if sum(bool_index) >= 1: + indices = np.where(bool_index)[0] + index_to_add = [unknown[i] for i in indices] + index_to_fm = np.concatenate((known, index_to_add)) + + ld_to_fm = gnomad_ld[index_to_fm][:, index_to_fm] + + snp_info_to_add = pd.DataFrame( + { + "variantId": ld_index.iloc[index_to_add, :]["variantId"], + "z": sumstat_imp_res["mu"][indices], + } + ) + GWAS_df = pd.concat([GWAS_df, snp_info_to_add], ignore_index=True) + z_to_fm = GWAS_df["z"].values + + N_imputed = len(indices) + else: + N_imputed = 0 + else: + N_imputed = 0 + + susie_output = SUSIE_inf.susie_inf( + z=z_to_fm, LD=ld_to_fm, L=L, est_tausq=susie_est_tausq + ) + + schema = StructType( + [ + StructField("variantId", StringType(), True), + StructField("z", DoubleType(), True), + ] + ) + variant_index = ( + session.spark.createDataFrame( + GWAS_df[["variantId", "z"]], + schema=schema, + ) + .withColumn( + "chromosome", f.split(f.col("variantId"), "_")[0].cast("string") + ) + .withColumn("position", f.split(f.col("variantId"), "_")[1].cast("int")) + ) + + study_locus = SusieFineMapperStep.susie_inf_to_studylocus( + susie_output=susie_output, + session=session, + studyId=studyId, + region=region, + variant_index=variant_index, + sum_pips=sum_pips, + ld_matrix=ld_to_fm, + primary_signal_pval_threshold=primary_signal_pval_threshold, + secondary_signal_pval_threshold=secondary_signal_pval_threshold, + purity_mean_r2_threshold=purity_mean_r2_threshold, + purity_min_r2_threshold=purity_min_r2_threshold, + cs_lbf_thr=cs_lbf_thr, + ) + + end_time = time.time() + + log_df = pd.DataFrame( + { + "N_gwas_before_dedupl": N_gwas_before_dedupl, + "N_gwas": N_gwas, + "N_ld": N_ld, + "N_overlap": N_after_merge, + "N_outliers": N_outliers, + "N_imputed": N_imputed, + "N_final_to_fm": len(ld_to_fm), + "eleapsed_time": end_time - start_time, + }, + index=[0], + ) + + return { + "study_locus": study_locus, + "log": log_df, + } + + @staticmethod + def susie_finemapper_one_studylocus_row_v2_dev( + GWAS: SummaryStatistics, + session: Session, + study_locus_row: Row, + study_index: StudyIndex, + radius: int = 1_000_000, + max_causal_snps: int = 10, + susie_est_tausq: bool = False, + run_carma: bool = False, + run_sumstat_imputation: bool = False, + carma_time_limit: int = 600, + imputed_r2_threshold: float = 0.9, + ld_score_threshold: float = 5, + sum_pips: float = 0.99, + primary_signal_pval_threshold: float = 5e-8, + secondary_signal_pval_threshold: float = 1e-7, + purity_mean_r2_threshold: float = 0, + purity_min_r2_threshold: float = 0.25, + cs_lbf_thr: float = 2, + ) -> dict[str, Any]: + """Susie fine-mapper function that uses Summary Statstics, chromosome and position as inputs. + + Args: + GWAS (SummaryStatistics): GWAS summary statistics + session (Session): Spark session + study_locus_row (Row): StudyLocus row + study_index (StudyIndex): StudyIndex object + radius (int): Radius in base-pairs of window for fine-mapping + max_causal_snps (int): maximum number of causal variants + susie_est_tausq (bool): estimate tau squared, default is False + run_carma (bool): run CARMA, default is False + run_sumstat_imputation (bool): run summary statistics imputation, default is False + carma_time_limit (int): CARMA time limit, default is 600 seconds + imputed_r2_threshold (float): imputed R2 threshold, default is 0.8 + ld_score_threshold (float): LD score threshold ofr imputation, default is 4 + sum_pips (float): the expected sum of posterior probabilities in the locus, default is 0.99 (99% credible set) + primary_signal_pval_threshold (float): p-value threshold for the lead variant from the primary signal (credibleSetIndex==1) + secondary_signal_pval_threshold (float): p-value threshold for the lead variant from the secondary signals + purity_mean_r2_threshold (float): thrshold for purity mean r2 qc metrics for filtering credible sets + purity_min_r2_threshold (float): thrshold for purity min r2 qc metrics for filtering credible sets + cs_lbf_thr (float): credible set logBF threshold for filtering credible sets, default is 2 + + Returns: + dict[str, Any]: dictionary with study locus, number of GWAS variants, number of LD variants, number of variants after merge, number of outliers, number of imputed variants, number of variants to fine-map + """ + # PLEASE DO NOT REMOVE THIS LINE + pd.DataFrame.iteritems = pd.DataFrame.items + + chromosome = study_locus_row["chromosome"] + position = study_locus_row["position"] + studyId = study_locus_row["studyId"] + + study_index_df = study_index._df + study_index_df = study_index_df.filter(f.col("studyId") == studyId) + major_population = study_index_df.select( + "studyId", + f.array_max(f.col("ldPopulationStructure")) + .getItem("ldPopulation") + .alias("majorPopulation"), + ).collect()[0]["majorPopulation"] + + region = ( + chromosome + + ":" + + str(int(position - radius)) + + "-" + + str(int(position + radius)) + ) + gwas_df = ( + GWAS.df.withColumn("z", f.col("beta") / f.col("standardError")) + .withColumn( + "chromosome", f.split(f.col("variantId"), "_")[0].cast("string") + ) + .withColumn("position", f.split(f.col("variantId"), "_")[1].cast("int")) + .filter(f.col("studyId") == studyId) + .filter(f.col("z").isNotNull()) + .filter(f.col("chromosome") == chromosome) + .filter(f.col("position") >= position - radius) + .filter(f.col("position") <= position + radius) + ) + + ld_index = ( + GnomADLDMatrix() + .get_locus_index( + study_locus_row=study_locus_row, + radius=radius, + major_population=major_population, + ) + .withColumn( + "variantId", + f.concat( + f.lit(chromosome), + f.lit("_"), + f.col("`locus.position`"), + f.lit("_"), + f.col("alleles").getItem(0), + f.lit("_"), + f.col("alleles").getItem(1), + ).cast("string"), + ) + ) + + gnomad_ld = GnomADLDMatrix.get_numpy_matrix( + ld_index, gnomad_ancestry=major_population + ) + + out = SusieFineMapperStep.susie_finemapper_from_prepared_dataframes( + GWAS_df=gwas_df, + ld_index=ld_index, + gnomad_ld=gnomad_ld, + L=max_causal_snps, + session=session, + studyId=studyId, + region=region, + susie_est_tausq=susie_est_tausq, + run_carma=run_carma, + run_sumstat_imputation=run_sumstat_imputation, + carma_time_limit=carma_time_limit, + imputed_r2_threshold=imputed_r2_threshold, + ld_score_threshold=ld_score_threshold, + sum_pips=sum_pips, + primary_signal_pval_threshold=primary_signal_pval_threshold, + secondary_signal_pval_threshold=secondary_signal_pval_threshold, + purity_mean_r2_threshold=purity_mean_r2_threshold, + purity_min_r2_threshold=purity_min_r2_threshold, + cs_lbf_thr=cs_lbf_thr, + ) + + return out + + @staticmethod + def susie_finemapper_one_studylocus_row_v3_dev_ss_gathered( + session: Session, + study_locus_row: Row, + study_index: StudyIndex, + radius: int = 1_000_000, + max_causal_snps: int = 10, + susie_est_tausq: bool = False, + run_carma: bool = False, + run_sumstat_imputation: bool = False, + carma_time_limit: int = 600, + imputed_r2_threshold: float = 0.9, + ld_score_threshold: float = 5, + sum_pips: float = 0.99, + primary_signal_pval_threshold: float = 5e-8, + secondary_signal_pval_threshold: float = 1e-7, + purity_mean_r2_threshold: float = 0, + purity_min_r2_threshold: float = 0.25, + cs_lbf_thr: float = 2, + ) -> dict[str, Any]: + """Susie fine-mapper function that uses study-locus row with collected locus, chromosome and position as inputs. + + Args: + session (Session): Spark session + study_locus_row (Row): StudyLocus row with collected locus + study_index (StudyIndex): StudyIndex object + radius (int): Radius in base-pairs of window for fine-mapping + max_causal_snps (int): maximum number of causal variants + susie_est_tausq (bool): estimate tau squared, default is False + run_carma (bool): run CARMA, default is False + run_sumstat_imputation (bool): run summary statistics imputation, default is False + carma_time_limit (int): CARMA time limit, default is 600 seconds + imputed_r2_threshold (float): imputed R2 threshold, default is 0.8 + ld_score_threshold (float): LD score threshold ofr imputation, default is 4 + sum_pips (float): the expected sum of posterior probabilities in the locus, default is 0.99 (99% credible set) + primary_signal_pval_threshold (float): p-value threshold for the lead variant from the primary signal (credibleSetIndex==1) + secondary_signal_pval_threshold (float): p-value threshold for the lead variant from the secondary signals + purity_mean_r2_threshold (float): thrshold for purity mean r2 qc metrics for filtering credible sets + purity_min_r2_threshold (float): thrshold for purity min r2 qc metrics for filtering credible sets + cs_lbf_thr (float): credible set logBF threshold for filtering credible sets, default is 2 + + Returns: + dict[str, Any]: dictionary with study locus, number of GWAS variants, number of LD variants, number of variants after merge, number of outliers, number of imputed variants, number of variants to fine-map + """ + # PLEASE DO NOT REMOVE THIS LINE + pd.DataFrame.iteritems = pd.DataFrame.items + + chromosome = study_locus_row["chromosome"] + position = study_locus_row["position"] + studyId = study_locus_row["studyId"] + + study_index_df = study_index._df + study_index_df = study_index_df.filter(f.col("studyId") == studyId) + major_population = study_index_df.select( + "studyId", + f.array_max(f.col("ldPopulationStructure")) + .getItem("ldPopulation") + .alias("majorPopulation"), + ).collect()[0]["majorPopulation"] + + region = ( + chromosome + + ":" + + str(int(position - radius)) + + "-" + + str(int(position + radius)) + ) + + schema = StudyLocus.get_schema() + gwas_df = session.spark.createDataFrame([study_locus_row], schema=schema) + exploded_df = gwas_df.select(f.explode("locus").alias("locus")) + + result_df = exploded_df.select( + "locus.variantId", "locus.beta", "locus.standardError" + ) + gwas_df = ( + result_df.withColumn("z", f.col("beta") / f.col("standardError")) + .withColumn( + "chromosome", f.split(f.col("variantId"), "_")[0].cast("string") + ) + .withColumn("position", f.split(f.col("variantId"), "_")[1].cast("int")) + .filter(f.col("chromosome") == chromosome) + .filter(f.col("position") >= position - radius) + .filter(f.col("position") <= position + radius) + .filter(f.col("z").isNotNull()) + ) + + ld_index = ( + GnomADLDMatrix() + .get_locus_index( + study_locus_row=study_locus_row, + radius=radius, + major_population=major_population, + ) + .withColumn( + "variantId", + f.concat( + f.lit(chromosome), + f.lit("_"), + f.col("`locus.position`"), + f.lit("_"), + f.col("alleles").getItem(0), + f.lit("_"), + f.col("alleles").getItem(1), + ).cast("string"), + ) + ) + + gnomad_ld = GnomADLDMatrix.get_numpy_matrix( + ld_index, gnomad_ancestry=major_population + ) + + out = SusieFineMapperStep.susie_finemapper_from_prepared_dataframes( + GWAS_df=gwas_df, + ld_index=ld_index, + gnomad_ld=gnomad_ld, + L=max_causal_snps, + session=session, + studyId=studyId, + region=region, + susie_est_tausq=susie_est_tausq, + run_carma=run_carma, + run_sumstat_imputation=run_sumstat_imputation, + carma_time_limit=carma_time_limit, + imputed_r2_threshold=imputed_r2_threshold, + ld_score_threshold=ld_score_threshold, + sum_pips=sum_pips, + primary_signal_pval_threshold=primary_signal_pval_threshold, + secondary_signal_pval_threshold=secondary_signal_pval_threshold, + purity_mean_r2_threshold=purity_mean_r2_threshold, + purity_min_r2_threshold=purity_min_r2_threshold, + cs_lbf_thr=cs_lbf_thr, + ) + + return out diff --git a/src/gentropy/window_based_clumping.py b/src/gentropy/window_based_clumping.py index fcc680ef7..bce9edd37 100644 --- a/src/gentropy/window_based_clumping.py +++ b/src/gentropy/window_based_clumping.py @@ -1,4 +1,5 @@ """Step to run window based clumping on summary statistics datasts.""" + from __future__ import annotations from gentropy.common.session import Session @@ -13,8 +14,10 @@ def __init__( session: Session, summary_statistics_input_path: str, study_locus_output_path: str, + distance: int = 500_000, + collect_locus: bool = False, + collect_locus_distance: int = 500_000, inclusion_list_path: str | None = None, - locus_collect_distance: int | None = None, ) -> None: """Run window-based clumping step. @@ -22,8 +25,10 @@ def __init__( session (Session): Session object. summary_statistics_input_path (str): Path to the harmonized summary statistics dataset. study_locus_output_path (str): Output path for the resulting study locus dataset. + distance (int): Distance, within which tagging variants are collected around the semi-index. Optional. + collect_locus (bool): Whether to collect locus around semi-indices. Optional. + collect_locus_distance (int): Distance, within which tagging variants are collected around the semi-index. Optional. inclusion_list_path (str | None): Path to the inclusion list (list of white-listed study identifier). Optional. - locus_collect_distance (int | None): Distance, within which tagging variants are collected around the semi-index. Optional. """ # If inclusion list path is provided, only these studies will be read: if inclusion_list_path: @@ -35,16 +40,22 @@ def __init__( # If no inclusion list is provided, read all summary stats in folder: study_ids_to_ingest = [summary_statistics_input_path] - ( - SummaryStatistics.from_parquet( - session, - study_ids_to_ingest, - recursiveFileLookup=True, - ) - .coalesce(4000) - # Applying window based clumping: - .window_based_clumping(locus_collect_distance=locus_collect_distance) - # Save resulting study locus dataset: - .df.write.mode(session.write_mode) - .parquet(study_locus_output_path) + ss = SummaryStatistics.from_parquet( + session, + study_ids_to_ingest, + recursiveFileLookup=True, + ) + + # Clumping: + study_locus = ss.window_based_clumping( + distance=distance, ) + + # Optional locus collection: + if collect_locus: + # Collecting locus around semi-indices: + study_locus = study_locus.annotate_locus_statistics( + ss, collect_locus_distance=collect_locus_distance + ) + + study_locus.df.write.mode(session.write_mode).parquet(study_locus_output_path) diff --git a/tests/gentropy/conftest.py b/tests/gentropy/conftest.py index 13409ac16..ec106f975 100644 --- a/tests/gentropy/conftest.py +++ b/tests/gentropy/conftest.py @@ -84,6 +84,11 @@ def mock_colocalisation(spark: SparkSession) -> Colocalisation: .withColumnSpec("h4", percentNulls=0.1) .withColumnSpec("log2h4h3", percentNulls=0.1) .withColumnSpec("clpp", percentNulls=0.1) + .withColumnSpec( + "colocalisationMethod", + percentNulls=0.0, + values=["COLOC", "eCAVIAR"], + ) ) return Colocalisation(_df=data_spec.build(), _schema=coloc_schema) @@ -414,7 +419,7 @@ def mock_ld_index(spark: SparkSession) -> LDIndex: def sample_gwas_catalog_studies(spark: SparkSession) -> DataFrame: """Sample GWAS Catalog studies.""" return spark.read.csv( - "tests/gentropy/data_samples/gwas_catalog_studies_sample-r2022-11-29.tsv", + "tests/gentropy/data_samples/gwas_catalog_studies.tsv", sep="\t", header=True, ) @@ -424,7 +429,7 @@ def sample_gwas_catalog_studies(spark: SparkSession) -> DataFrame: def sample_gwas_catalog_ancestries_lut(spark: SparkSession) -> DataFrame: """Sample GWAS ancestries sample data.""" return spark.read.csv( - "tests/gentropy/data_samples/gwas_catalog_ancestries_sample_v1.0.3-r2022-11-29.tsv", + "tests/gentropy/data_samples/gwas_catalog_ancestries.tsv", sep="\t", header=True, ) @@ -444,7 +449,7 @@ def sample_gwas_catalog_harmonised_sumstats_list(spark: SparkSession) -> DataFra def sample_gwas_catalog_associations(spark: SparkSession) -> DataFrame: """Sample GWAS raw associations sample data.""" return spark.read.csv( - "tests/gentropy/data_samples/gwas_catalog_associations_sample_e107_r2022-11-29.tsv", + "tests/gentropy/data_samples/gwas_catalog_associations.tsv", sep="\t", header=True, ) diff --git a/tests/gentropy/data_samples/coloc_test_data.snappy.parquet b/tests/gentropy/data_samples/coloc_test_data.snappy.parquet deleted file mode 100644 index 71b3913eb..000000000 Binary files a/tests/gentropy/data_samples/coloc_test_data.snappy.parquet and /dev/null differ diff --git a/tests/gentropy/data_samples/gwas_catalog_ancestries.tsv b/tests/gentropy/data_samples/gwas_catalog_ancestries.tsv new file mode 100644 index 000000000..48423eeee --- /dev/null +++ b/tests/gentropy/data_samples/gwas_catalog_ancestries.tsv @@ -0,0 +1,20 @@ +STUDY ACCESSION PUBMED ID FIRST AUTHOR DATE INITIAL SAMPLE DESCRIPTION REPLICATION SAMPLE DESCRIPTION STAGE NUMBER OF INDIVIDUALS BROAD ANCESTRAL CATEGORY COUNTRY OF ORIGIN COUNTRY OF RECRUITMENT ADDITIONAL ANCESTRY DESCRIPTION ANCESTRY DESCRIPTOR FOUNDER/GENETICALLY ISOLATED POPULATION NUMBER OF CASES NUMBER OF CONTROLS SAMPLE DESCRIPTION +GCST004795 28763065 Xia K 2017-08-01 295 European, African American, Asian, Native American and other admixed ancestry infants, 17 European, African American, Asian, Native American and other admixed ancestry sibling pairs, 116 European, African American, Asian, Native American and other admixed ancestry twin pairs. NA initial 205 Asian unspecified, African American or Afro-Caribbean, Native American, Other admixed ancestry NR U.S. +GCST004795 28763065 Xia K 2017-08-01 295 European, African American, Asian, Native American and other admixed ancestry infants, 17 European, African American, Asian, Native American and other admixed ancestry sibling pairs, 116 European, African American, Asian, Native American and other admixed ancestry twin pairs. NA initial 356 European NR U.S. +GCST004796 28763065 Xia K 2017-08-01 295 European, African American, Asian, Native American and other admixed ancestry infants, 17 European, African American, Asian, Native American and other admixed ancestry sibling pairs, 116 European, African American, Asian, Native American and other admixed ancestry twin pairs. NA initial 356 European NR U.S. +GCST004796 28763065 Xia K 2017-08-01 295 European, African American, Asian, Native American and other admixed ancestry infants, 17 European, African American, Asian, Native American and other admixed ancestry sibling pairs, 116 European, African American, Asian, Native American and other admixed ancestry twin pairs. NA initial 205 Asian unspecified, African American or Afro-Caribbean, Native American, Other admixed ancestry NR U.S. +GCST004797 28763065 Xia K 2017-08-01 295 European, African American, Asian, Native American and other admixed ancestry infants, 17 European, African American, Asian, Native American and other admixed ancestry sibling pairs, 116 European, African American, Asian, Native American and other admixed ancestry twin pairs. NA initial 205 Asian unspecified, African American or Afro-Caribbean, Native American, Other admixed ancestry NR U.S. +GCST004797 28763065 Xia K 2017-08-01 295 European, African American, Asian, Native American and other admixed ancestry infants, 17 European, African American, Asian, Native American and other admixed ancestry sibling pairs, 116 European, African American, Asian, Native American and other admixed ancestry twin pairs. NA initial 356 European NR U.S. +GCST004794 28763065 Xia K 2017-08-01 295 European, African American, Asian, Native American and other admixed ancestry infants, 17 European, African American, Asian, Native American and other admixed ancestry sibling pairs, 116 European, African American, Asian, Native American and other admixed ancestry twin pairs. NA initial 356 European NR U.S. +GCST004794 28763065 Xia K 2017-08-01 295 European, African American, Asian, Native American and other admixed ancestry infants, 17 European, African American, Asian, Native American and other admixed ancestry sibling pairs, 116 European, African American, Asian, Native American and other admixed ancestry twin pairs. NA initial 205 Asian unspecified, African American or Afro-Caribbean, Native American, Other admixed ancestry NR U.S. +GCST005522 23459209 Faraco J 2013-01-01 1,886 European ancestry cases, 10,421 European ancestry controls NA initial 12307 European NR Canada, U.S., Australia, Austria, France, Germany, Netherlands, Switzerland, Argentina, Israel, Turkey, Czech Republic, Poland, Slovakia, Denmark, Finland, Norway, U.K., Italy, Portugal, Spain +GCST004692 27455348 van Rheenen W 2016-07-25 12,577 European ancestry cases, 23,475 European ancestry controls 2,579 European ancestry cases, 2,767 European ancestry controls initial 36052 European NR U.S., Belgium, France, Germany, Netherlands, Switzerland, Finland, Republic of Ireland, Sweden, U.K., Italy, Portugal, Spain +GCST004692 27455348 van Rheenen W 2016-07-25 12,577 European ancestry cases, 23,475 European ancestry controls 2,579 European ancestry cases, 2,767 European ancestry controls replication 5346 European NR Australia, Belgium, France, Germany, Netherlands, Turkey, Republic of Ireland, Italy +GCST005134 28800628 Salem JE 2017-08-11 448 European ancestry individuals, 47 North African ancestry individuals 431 European ancestry individuals, 64 North African ancestry individuals replication 64 Greater Middle Eastern (Middle Eastern, North African or Persian) NR France +GCST005134 28800628 Salem JE 2017-08-11 448 European ancestry individuals, 47 North African ancestry individuals 431 European ancestry individuals, 64 North African ancestry individuals replication 431 European NR France +GCST005134 28800628 Salem JE 2017-08-11 448 European ancestry individuals, 47 North African ancestry individuals 431 European ancestry individuals, 64 North African ancestry individuals initial 448 European NR France +GCST005134 28800628 Salem JE 2017-08-11 448 European ancestry individuals, 47 North African ancestry individuals 431 European ancestry individuals, 64 North African ancestry individuals initial 47 Greater Middle Eastern (Middle Eastern, North African or Persian) NR France +GCST005135 28800628 Salem JE 2017-08-11 448 European ancestry individuals, 47 North African ancestry individuals 431 European ancestry individuals, 64 North African ancestry individuals initial 448 European NR France +GCST005135 28800628 Salem JE 2017-08-11 448 European ancestry individuals, 47 North African ancestry individuals 431 European ancestry individuals, 64 North African ancestry individuals initial 47 Greater Middle Eastern (Middle Eastern, North African or Persian) NR France +GCST005135 28800628 Salem JE 2017-08-11 448 European ancestry individuals, 47 North African ancestry individuals 431 European ancestry individuals, 64 North African ancestry individuals replication 431 European NR France +GCST005135 28800628 Salem JE 2017-08-11 448 European ancestry individuals, 47 North African ancestry individuals 431 European ancestry individuals, 64 North African ancestry individuals replication 64 Greater Middle Eastern (Middle Eastern, North African or Persian) NR France diff --git a/tests/gentropy/data_samples/gwas_catalog_ancestries_sample_v1.0.3-r2022-11-29.tsv b/tests/gentropy/data_samples/gwas_catalog_ancestries_sample_v1.0.3-r2022-11-29.tsv deleted file mode 100644 index 92d87d92b..000000000 --- a/tests/gentropy/data_samples/gwas_catalog_ancestries_sample_v1.0.3-r2022-11-29.tsv +++ /dev/null @@ -1,20 +0,0 @@ -STUDY ACCESSION PUBMED ID FIRST AUTHOR DATE INITIAL SAMPLE DESCRIPTION REPLICATION SAMPLE DESCRIPTION STAGE NUMBER OF INDIVIDUALS BROAD ANCESTRAL CATEGORY COUNTRY OF ORIGIN COUNTRY OF RECRUITMENT ADDITIONAL ANCESTRY DESCRIPTION ANCESTRY DESCRIPTOR FOUNDER/GENETICALLY ISOLATED POPULATION NUMBER OF CASES NUMBER OF CONTROLS SAMPLE DESCRIPTION COHORT(S) COHORT-SPECIFIC REFERENCE -GCST008644 26546613 Gutierrez-Achury J 2016-01-01 371 South Asian ancestry celiac disease cases, 3,138 European ancestry celiac disease cases, 4,418 European ancestry rheumatoid arthritis cases, 509 South Asian ancestry celiac disease controls, 2,473 European ancestry celiac disease controls, 3,300 European ancestry rheumatoid arthritis controls, 8,872 celiac disease cases, 9,401 rheumatoid arthritis cases, 4,845 celiac disease controls, 9,627 rheumatoid arthritis controls NA initial 32475 NR NR U.S., Netherlands, U.K. -GCST008644 26546613 Gutierrez-Achury J 2016-01-01 371 South Asian ancestry celiac disease cases, 3,138 European ancestry celiac disease cases, 4,418 European ancestry rheumatoid arthritis cases, 509 South Asian ancestry celiac disease controls, 2,473 European ancestry celiac disease controls, 3,300 European ancestry rheumatoid arthritis controls, 8,872 celiac disease cases, 9,401 rheumatoid arthritis cases, 4,845 celiac disease controls, 9,627 rheumatoid arthritis controls NA initial 13329 European NR Sweden, Poland, Italy, Spain -GCST008644 26546613 Gutierrez-Achury J 2016-01-01 371 South Asian ancestry celiac disease cases, 3,138 European ancestry celiac disease cases, 4,418 European ancestry rheumatoid arthritis cases, 509 South Asian ancestry celiac disease controls, 2,473 European ancestry celiac disease controls, 3,300 European ancestry rheumatoid arthritis controls, 8,872 celiac disease cases, 9,401 rheumatoid arthritis cases, 4,845 celiac disease controls, 9,627 rheumatoid arthritis controls NA initial 880 South Asian NR India -GCST004026 27911795 Schumann G 2016-11-28 up to 70,460 European ancestry drinker individuals up to 35,438 European ancestry drinker individuals replication 35438 European NR Finland, Sweden, Italy, Netherlands, U.K., Austria, France, Republic of Ireland -GCST004026 27911795 Schumann G 2016-11-28 up to 70,460 European ancestry drinker individuals up to 35,438 European ancestry drinker individuals initial 70460 European NR Finland, U.S., Australia, Iceland, Netherlands, Germany, U.K., Switzerland, Estonia, NR -GCST004027 27911795 Schumann G 2016-11-28 up to 74,711 European ancestry heavy and light/non-drinker individuals up to 31,021 European ancestry heavy and light/non-drinker individuals initial 74711 European NR Finland, U.S., Australia, Iceland, Netherlands, Germany, U.K., Switzerland, Estonia, NR, France -GCST004027 27911795 Schumann G 2016-11-28 up to 74,711 European ancestry heavy and light/non-drinker individuals up to 31,021 European ancestry heavy and light/non-drinker individuals replication 31021 European NR Finland, U.S., Italy, Netherlands, U.K., Austria, Republic of Ireland -GCST004281 28235828 Traglia M 2017-04-03 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA initial 23 South Asian NR U.S. -GCST004281 28235828 Traglia M 2017-04-03 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA initial 329 Hispanic or Latin American NR U.S. -GCST004281 28235828 Traglia M 2017-04-03 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA initial 21 African American or Afro-Caribbean NR U.S. -GCST004281 28235828 Traglia M 2017-04-03 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA initial 273 European NR U.S. -GCST004281 28235828 Traglia M 2017-04-03 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA initial 22 Other NR U.S. -GCST004281 28235828 Traglia M 2017-04-03 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA initial 122 Asian unspecified NR U.S. -GCST004284 28235828 Traglia M 2017-04-03 764 fetuses NA initial 764 European, South Asian, Asian unspecified, African American or Afro-Caribbean, Hispanic or Latin American, Other NR U.S. -GCST004285 28235828 Traglia M 2017-04-03 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA initial 329 Hispanic or Latin American NR U.S. -GCST004285 28235828 Traglia M 2017-04-03 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA initial 273 European NR U.S. -GCST004285 28235828 Traglia M 2017-04-03 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA initial 23 South Asian NR U.S. -GCST004285 28235828 Traglia M 2017-04-03 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA initial 21 African American or Afro-Caribbean NR U.S. -GCST004285 28235828 Traglia M 2017-04-03 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA initial 22 Other NR U.S. diff --git a/tests/gentropy/data_samples/gwas_catalog_associations_sample_e107_r2022-11-29.tsv b/tests/gentropy/data_samples/gwas_catalog_associations.tsv similarity index 100% rename from tests/gentropy/data_samples/gwas_catalog_associations_sample_e107_r2022-11-29.tsv rename to tests/gentropy/data_samples/gwas_catalog_associations.tsv diff --git a/tests/gentropy/data_samples/gwas_catalog_studies.tsv b/tests/gentropy/data_samples/gwas_catalog_studies.tsv new file mode 100644 index 000000000..aca9ed666 --- /dev/null +++ b/tests/gentropy/data_samples/gwas_catalog_studies.tsv @@ -0,0 +1,20 @@ +DATE ADDED TO CATALOG PUBMED ID FIRST AUTHOR DATE JOURNAL LINK STUDY DISEASE/TRAIT INITIAL SAMPLE SIZE REPLICATION SAMPLE SIZE PLATFORM [SNPS PASSING QC] ASSOCIATION COUNT MAPPED_TRAIT MAPPED_TRAIT_URI STUDY ACCESSION GENOTYPING TECHNOLOGY SUBMISSION DATE STATISTICAL MODEL BACKGROUND TRAIT MAPPED BACKGROUND TRAIT MAPPED BACKGROUND TRAIT URI COHORT FULL SUMMARY STATISTICS SUMMARY STATS LOCATION +2017-09-11 28604731 Hammerschlag AR 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604731 Genome-wide association analysis of insomnia complaints identifies risk genes and genetic overlap with psychiatric and metabolic traits. Insomnia complaints 12,863 European ancestry male cases, 19,521 European ancestry female cases, 40,776 European ancestry male controls, 39,846 European ancestry female controls 1,983 Icelandic ancestry male cases, 1,791 Icelandic ancestry female cases, 2,064 Icelandic ancestry male controls, 1,727 Icelandic ancestry female controls Affymetrix [at least 12428592] (imputed) 2 insomnia http://www.ebi.ac.uk/efo/EFO_0004698 GCST004695 Genome-wide genotyping array yes http://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/GCST004001-GCST005000/GCST004695 +2017-09-11 28604731 Hammerschlag AR 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604731 Genome-wide association analysis of insomnia complaints identifies risk genes and genetic overlap with psychiatric and metabolic traits. Sleep duration 112,411 European ancestry male individuals NA Affymetrix [at least 12428592] (imputed) 3 sleep duration http://www.ebi.ac.uk/efo/EFO_0005271 GCST004694 Genome-wide genotyping array no NA +2017-09-11 28604731 Hammerschlag AR 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604731 Genome-wide association analysis of insomnia complaints identifies risk genes and genetic overlap with psychiatric and metabolic traits. Insomnia complaints (sex interaction) 12,863 European ancestry male cases, 19,521 European ancestry female cases, 40,776 European ancestry male controls, 39,846 European ancestry female controls NA Affymetrix [at least 12428592] (imputed) 0 insomnia http://www.ebi.ac.uk/efo/EFO_0004698 GCST004700 Genome-wide genotyping array no NA +2017-09-11 28604731 Hammerschlag AR 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604731 Genome-wide association analysis of insomnia complaints identifies risk genes and genetic overlap with psychiatric and metabolic traits. Insomnia complaints (continuous) 12,863 European ancestry male cases, 19,521 European ancestry female cases, 40,776 European ancestry male controls, 39,846 European ancestry female controls NA Affymetrix [at least 12428592] (imputed) 1 insomnia http://www.ebi.ac.uk/efo/EFO_0004698 GCST004701 Genome-wide genotyping array no NA +2017-09-11 28604731 Hammerschlag AR 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604731 Genome-wide association analysis of insomnia complaints identifies risk genes and genetic overlap with psychiatric and metabolic traits. Insomnia complaints (dichotomous) 32,384 European ancestry cases, 27,128 European ancestry controls NA Affymetrix [at least 12428592] (imputed) 1 insomnia http://www.ebi.ac.uk/efo/EFO_0004698 GCST004702 Genome-wide genotyping array no NA +2017-09-11 28604731 Hammerschlag AR 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604731 Genome-wide association analysis of insomnia complaints identifies risk genes and genetic overlap with psychiatric and metabolic traits. Chronotype 101,185 European ancestry individuals NA Affymetrix [at least 12428592] (imputed) 9 circadian rhythm http://www.ebi.ac.uk/efo/EFO_0004354 GCST004696 Genome-wide genotyping array no NA +2017-09-11 28604731 Hammerschlag AR 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604731 Genome-wide association analysis of insomnia complaints identifies risk genes and genetic overlap with psychiatric and metabolic traits. Ease of getting up in the morning 112,866 European ancestry individuals NA Affymetrix [at least 12428592] (imputed) 5 chronotype measurement http://www.ebi.ac.uk/efo/EFO_0008328 GCST004697 Genome-wide genotyping array no NA +2017-09-11 28604731 Hammerschlag AR 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604731 Genome-wide association analysis of insomnia complaints identifies risk genes and genetic overlap with psychiatric and metabolic traits. Daytime nap 113,054 European ancestry cases and controls NA Affymetrix [at least 12428592] (imputed) 4 daytime rest measurement http://www.ebi.ac.uk/efo/EFO_0007828 GCST004693 Genome-wide genotyping array no NA +2017-09-11 28604731 Hammerschlag AR 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604731 Genome-wide association analysis of insomnia complaints identifies risk genes and genetic overlap with psychiatric and metabolic traits. Snoring 105,377 European ancestry cases and controls NA Affymetrix [at least 12428592] (imputed) 1 snoring measurement http://www.ebi.ac.uk/efo/EFO_0008341 GCST004698 Genome-wide genotyping array no NA +2017-09-11 28604731 Hammerschlag AR 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604731 Genome-wide association analysis of insomnia complaints identifies risk genes and genetic overlap with psychiatric and metabolic traits. Daytime sleepiness 112,717 European ancestry cases and controls NA Affymetrix [at least 12428592] (imputed) 6 excessive daytime sleepiness measurement http://www.ebi.ac.uk/efo/EFO_0007875 GCST004699 Genome-wide genotyping array no NA +2018-11-02 28604731 Hammerschlag AR 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604731 Genome-wide association analysis of insomnia complaints identifies risk genes and genetic overlap with psychiatric and metabolic traits. Insomnia complaints 19,521 European ancestry female cases, 39,846 European ancestry female controls 1,983 Icelandic ancestry male cases, 1,791 Icelandic ancestry female cases, 2,064 Icelandic ancestry male controls, 1,727 Icelandic ancestry female controls Affymetrix [at least 12428592] (imputed) 1 insomnia http://www.ebi.ac.uk/efo/EFO_0004698 GCST006487 Genome-wide genotyping array yes http://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/GCST006001-GCST007000/GCST006487 +2018-11-02 28604731 Hammerschlag AR 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604731 Genome-wide association analysis of insomnia complaints identifies risk genes and genetic overlap with psychiatric and metabolic traits. Insomnia complaints 12,863 European ancestry male cases, 40,776 European ancestry male controls 1,983 Icelandic ancestry male cases, 1,791 Icelandic ancestry female cases, 2,064 Icelandic ancestry male controls, 1,727 Icelandic ancestry female controls Affymetrix [at least 12428592] (imputed) 2 insomnia http://www.ebi.ac.uk/efo/EFO_0004698 GCST006488 Genome-wide genotyping array yes http://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/GCST006001-GCST007000/GCST006488 +2017-09-14 28610988 Kerr KF 2017-06-10 Heart Rhythm www.ncbi.nlm.nih.gov/pubmed/28610988 Genome-wide association study of heart rate and its variability in Hispanic/Latino cohorts. Heart rate 13,184 Hispanic/Latino individuals 7,073 European ancestry individuals, 4,771 African American individuals Affymetrix, Illumina [16967914] (imputed) 2 heart rate http://www.ebi.ac.uk/efo/EFO_0004326 GCST004715 Genome-wide genotyping array no NA +2017-09-14 28610988 Kerr KF 2017-06-10 Heart Rhythm www.ncbi.nlm.nih.gov/pubmed/28610988 Genome-wide association study of heart rate and its variability in Hispanic/Latino cohorts. Heart rate variability traits (RMSSD) 13,767 Hispanic/Latino individuals 4,730 European ancestry individuals, 2,908 African American individuals Affymetrix, Illumina [17209892] (imputed) 2 heart rate variability measurement http://www.ebi.ac.uk/efo/EFO_0008003 GCST004716 Genome-wide genotyping array no NA +2017-09-14 28610988 Kerr KF 2017-06-10 Heart Rhythm www.ncbi.nlm.nih.gov/pubmed/28610988 Genome-wide association study of heart rate and its variability in Hispanic/Latino cohorts. Heart rate variability traits (SDNN) 13,184 Hispanic/Latino individuals 7,073 European ancestry individuals, 2,908 African American individuals Affymetrix, Illumina [17209740] (imputed) 3 heart rate variability measurement http://www.ebi.ac.uk/efo/EFO_0008003 GCST004714 Genome-wide genotyping array no NA +2017-09-18 28604730 McKay JD 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604730 Large-scale association analysis identifies new lung cancer susceptibility loci and heterogeneity in genetic susceptibility across histological subtypes. Lung cancer 29,266 European ancestry cases, 56,450 European ancestry controls NA Illumina [10439017] (imputed) 135 lung carcinoma http://www.ebi.ac.uk/efo/EFO_0001071 GCST004748 Genome-wide genotyping array yes http://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/GCST004001-GCST005000/GCST004748 +2017-09-18 28604730 McKay JD 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604730 Large-scale association analysis identifies new lung cancer susceptibility loci and heterogeneity in genetic susceptibility across histological subtypes. Lung adenocarcinoma 11,273 European ancestry cases, 55,483 European ancestry controls NA Illumina [10439017] (imputed) 79 lung adenocarcinoma http://www.ebi.ac.uk/efo/EFO_0000571 GCST004744 Genome-wide genotyping array yes http://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/GCST004001-GCST005000/GCST004744 +2017-09-18 28604730 McKay JD 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604730 Large-scale association analysis identifies new lung cancer susceptibility loci and heterogeneity in genetic susceptibility across histological subtypes. Squamous cell lung carcinoma 7,426 European ancestry cases, 55,627 European ancestry controls NA Illumina [10439017] (imputed) 101 squamous cell lung carcinoma http://www.ebi.ac.uk/efo/EFO_0000708 GCST004750 Genome-wide genotyping array yes http://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/GCST004001-GCST005000/GCST004750 +2017-09-18 28604730 McKay JD 2017-06-12 Nat Genet www.ncbi.nlm.nih.gov/pubmed/28604730 Large-scale association analysis identifies new lung cancer susceptibility loci and heterogeneity in genetic susceptibility across histological subtypes. Small cell lung carcinoma 2,664 European ancestry cases, 21,444 European ancestry controls NA Illumina [10439017] (imputed) 50 small cell lung carcinoma http://www.ebi.ac.uk/efo/EFO_0000702 GCST004746 Genome-wide genotyping array yes http://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/GCST004001-GCST005000/GCST004746 diff --git a/tests/gentropy/data_samples/gwas_catalog_studies_sample-r2022-11-29.tsv b/tests/gentropy/data_samples/gwas_catalog_studies_sample-r2022-11-29.tsv deleted file mode 100644 index 7db8f5302..000000000 --- a/tests/gentropy/data_samples/gwas_catalog_studies_sample-r2022-11-29.tsv +++ /dev/null @@ -1,20 +0,0 @@ -DATE ADDED TO CATALOG PUBMED ID FIRST AUTHOR DATE JOURNAL LINK STUDY DISEASE/TRAIT INITIAL SAMPLE SIZE REPLICATION SAMPLE SIZE PLATFORM [SNPS PASSING QC] ASSOCIATION COUNT MAPPED_TRAIT MAPPED_TRAIT_URI STUDY ACCESSION GENOTYPING TECHNOLOGY SUMMARY STATS LOCATION SUBMISSION DATE STATISTICAL MODEL BACKGROUND TRAIT MAPPED BACKGROUND TRAIT MAPPED BACKGROUND TRAIT URI -2019-09-11 26546613 Gutierrez-Achury J 2016-01-01 Hum Mol Genet www.ncbi.nlm.nih.gov/pubmed/26546613 Functional implications of disease-specific variants in loci jointly associated with coeliac disease and rheumatoid arthritis. Celiac disease and Rheumatoid arthritis 371 South Asian ancestry celiac disease cases, 3,138 European ancestry celiac disease cases, 4,418 European ancestry rheumatoid arthritis cases, 509 South Asian ancestry celiac disease controls, 2,473 European ancestry celiac disease controls, 3,300 European ancestry rheumatoid arthritis controls, 8,872 celiac disease cases, 9,401 rheumatoid arthritis cases, 4,845 celiac disease controls, 9,627 rheumatoid arthritis controls NA Illumina [109572] 24 rheumatoid arthritis, celiac disease http://www.ebi.ac.uk/efo/EFO_0000685, http://www.ebi.ac.uk/efo/EFO_0001060 GCST008644 Targeted genotyping array [Immunochip] -2017-05-12 27911795 Schumann G 2016-11-28 Proc Natl Acad Sci U S A www.ncbi.nlm.nih.gov/pubmed/27911795 KLB is associated with alcohol drinking, and its gene product β-Klotho is necessary for FGF21 regulation of alcohol preference. Alcohol consumption up to 70,460 European ancestry drinker individuals up to 35,438 European ancestry drinker individuals Affymetrix, Illumina, Perlegen [at least 316407] (imputed) 3 alcohol consumption measurement http://www.ebi.ac.uk/efo/EFO_0007878 GCST004026 Genome-wide genotyping array -2017-05-12 27911795 Schumann G 2016-11-28 Proc Natl Acad Sci U S A www.ncbi.nlm.nih.gov/pubmed/27911795 KLB is associated with alcohol drinking, and its gene product β-Klotho is necessary for FGF21 regulation of alcohol preference. Alcohol consumption (heavy vs. light/non-drinkers) up to 74,711 European ancestry heavy and light/non-drinker individuals up to 31,021 European ancestry heavy and light/non-drinker individuals Affymetrix, Illumina, Perlegen [at least 316407] (imputed) 2 alcohol consumption measurement http://www.ebi.ac.uk/efo/EFO_0007878 GCST004027 Genome-wide genotyping array -2017-07-03 28235828 Traglia M 2017-04-03 G3 (Bethesda) www.ncbi.nlm.nih.gov/pubmed/28235828 Independent Maternal and Fetal Genetic Effects on Midgestational Circulating Levels of Environmental Pollutants. Midgestational circulating levels of organochlorine pesticides 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA Affymetrix [629686] 2 gestational serum measurement, organochlorine pesticide measurement http://www.ebi.ac.uk/efo/EFO_0007964, http://www.ebi.ac.uk/efo/EFO_0007960 GCST004281 Genome-wide genotyping array -2017-07-03 28235828 Traglia M 2017-04-03 G3 (Bethesda) www.ncbi.nlm.nih.gov/pubmed/28235828 Independent Maternal and Fetal Genetic Effects on Midgestational Circulating Levels of Environmental Pollutants. Midgestational circulating levels of PCBs (fetal genetic effect) 764 fetuses NA Affymetrix [622716] 11 polychlorinated biphenyls measurement, gestational serum measurement, fetal genotype effect measurement http://www.ebi.ac.uk/efo/EFO_0007042, http://www.ebi.ac.uk/efo/EFO_0007964, http://www.ebi.ac.uk/efo/EFO_0007959 GCST004284 Genome-wide genotyping array -2017-07-03 28235828 Traglia M 2017-04-03 G3 (Bethesda) www.ncbi.nlm.nih.gov/pubmed/28235828 Independent Maternal and Fetal Genetic Effects on Midgestational Circulating Levels of Environmental Pollutants. Midgestational circulating levels of PBDEs 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA Affymetrix [629686] 9 polybrominated biphenyl measurement, gestational serum measurement, polybrominated diphenyl ether measurement http://www.ebi.ac.uk/efo/EFO_0007961, http://www.ebi.ac.uk/efo/EFO_0007964, http://www.ebi.ac.uk/efo/EFO_0007962 GCST004285 Genome-wide genotyping array -2017-07-03 28235828 Traglia M 2017-04-03 G3 (Bethesda) www.ncbi.nlm.nih.gov/pubmed/28235828 Independent Maternal and Fetal Genetic Effects on Midgestational Circulating Levels of Environmental Pollutants. Midgestational circulating levels of PBDEs (fetal genetic effect) 764 fetuses NA Affymetrix [629686] 11 polybrominated biphenyl measurement, gestational serum measurement, fetal genotype effect measurement, polybrominated diphenyl ether measurement http://www.ebi.ac.uk/efo/EFO_0007961, http://www.ebi.ac.uk/efo/EFO_0007964, http://www.ebi.ac.uk/efo/EFO_0007959, http://www.ebi.ac.uk/efo/EFO_0007962 GCST004286 Genome-wide genotyping array -2017-07-03 28235828 Traglia M 2017-04-03 G3 (Bethesda) www.ncbi.nlm.nih.gov/pubmed/28235828 Independent Maternal and Fetal Genetic Effects on Midgestational Circulating Levels of Environmental Pollutants. Midgestational circulating levels of organochlorine pesticides (fetal genetic effect) 764 fetuses NA Affymetrix [629686] 0 gestational serum measurement, fetal genotype effect measurement, organochlorine pesticide measurement http://www.ebi.ac.uk/efo/EFO_0007964, http://www.ebi.ac.uk/efo/EFO_0007959, http://www.ebi.ac.uk/efo/EFO_0007960 GCST004282 Genome-wide genotyping array -2017-07-03 28235828 Traglia M 2017-04-03 G3 (Bethesda) www.ncbi.nlm.nih.gov/pubmed/28235828 Independent Maternal and Fetal Genetic Effects on Midgestational Circulating Levels of Environmental Pollutants. Midgestational circulating levels of PCBs 329 Hispanic mothers, 273 European ancestry mothers, 122 Asian ancestry mothers, 23 South Asian ancestry mothers, 21 African American mothers, 22 other ancestry mothers NA Affymetrix [629686] 25 polychlorinated biphenyls measurement, gestational serum measurement http://www.ebi.ac.uk/efo/EFO_0007042, http://www.ebi.ac.uk/efo/EFO_0007964 GCST004283 Genome-wide genotyping array -2016-09-12 26325155 Brehm JM 2015-09-01 Am J Respir Crit Care Med www.ncbi.nlm.nih.gov/pubmed/26325155 A Genome-Wide Association Study of Post-bronchodilator Lung Function in Children with Asthma. Post-bronchodilator lung function in asthma (FEV1) 447 Puerto Rican ancestry cases 568 European, black or Hispanic cases, 2,414 Hispanic cases Illumina [NR] 0 pulmonary function measurement, forced expiratory volume, response to bronchodilator http://www.ebi.ac.uk/efo/EFO_0003892, http://www.ebi.ac.uk/efo/EFO_0004314, http://purl.obolibrary.org/obo/GO_0097366 GCST003110 Genome-wide genotyping array asthma http://purl.obolibrary.org/obo/MONDO_0004979 -2016-09-12 26325155 Brehm JM 2015-09-01 Am J Respir Crit Care Med www.ncbi.nlm.nih.gov/pubmed/26325155 A Genome-Wide Association Study of Post-bronchodilator Lung Function in Children with Asthma. Post-bronchodilator lung function in asthma (FEV1/FVC) 447 Puerto Rican ancestry cases 568 European, black or Hispanic cases, 2,414 Hispanic cases Illumina [NR] 0 pulmonary function measurement, response to bronchodilator, FEV/FEC ratio http://www.ebi.ac.uk/efo/EFO_0003892, http://purl.obolibrary.org/obo/GO_0097366, http://www.ebi.ac.uk/efo/EFO_0004713 GCST003107 Genome-wide genotyping array asthma http://purl.obolibrary.org/obo/MONDO_0004979 -2016-07-27 26237429 Aminkeng F 2015-08-03 Nat Genet www.ncbi.nlm.nih.gov/pubmed/26237429 A coding variant in RARG confers susceptibility to anthracycline-induced cardiotoxicity in childhood cancer. Anthracycline-induced cardiotoxicity in childhood cancer 32 European ancestry cases with cardiotoxicity, 248 European ancestry cases without cardiotoxicity 22 European ancestry cases with cardiotoxicity, 74 European ancestry cases without cardiotoxicity, 2 African cases with cardiotoxicity, 9 African cases without cardiotoxicity, 5 Hispanic cases with cardiotoxicity, 18 Hispanic cases without cardiotoxicity, 8 East Asian cases with cardiotoxicity, 23 East Asian cases without cardiotoxicity, 4 Aboriginal Canadian cases with cardiotoxicity, 11 Aboriginal Canadian cases without cardiotoxicity Illumina [657694] 2 cardiotoxicity, response to anthracycline-based chemotherapy http://www.ebi.ac.uk/efo/EFO_1001482, http://www.ebi.ac.uk/efo/EFO_0005257 GCST003062 Genome-wide genotyping array childhood cancer http://www.ebi.ac.uk/efo/EFO_1000654 -2017-02-25 27387956 Murk W 2016-07-07 BMC Genet www.ncbi.nlm.nih.gov/pubmed/27387956 Genome-wide search identifies a gene-gene interaction between 20p13 and 2q14 in asthma. Asthma (SNP x SNP interaction) 802 European ancestry cases, 823 European ancestry controls 754 European ancestry cases, 57 European and unknown ancestry cases, 2,573 cases, 880 European ancestry controls, 68 European and unknown ancestry controls, 2,145 controls Illumina [301547] 0 asthma http://purl.obolibrary.org/obo/MONDO_0004979 GCST003682 Genome-wide genotyping array -2016-12-09 27008869 Chen MM 2016-03-23 Hum Mol Genet www.ncbi.nlm.nih.gov/pubmed/27008869 GWAS meta-analysis of 16 852 women identifies new susceptibility locus for endometrial cancer. Endometrial cancer 4,907 European ancestry cases, 11,945 European ancestry controls NA Illumina [9486271] (imputed) 4 endometrial carcinoma http://www.ebi.ac.uk/efo/EFO_1001512 GCST003436 Genome-wide genotyping array -2016-12-01 27016271 Kornilov SA 2016-03-25 Pediatrics www.ncbi.nlm.nih.gov/pubmed/27016271 Genome-Wide Association and Exome Sequencing Study of Language Disorder in an Isolated Population. Developmental language disorder 149 isolated population cases, 210 isolated population controls NA Illumina [223580] 4 specific language impairment http://www.ebi.ac.uk/efo/EFO_1001510 GCST003396 Genome-wide genotyping array -2016-12-01 27016271 Kornilov SA 2016-03-25 Pediatrics www.ncbi.nlm.nih.gov/pubmed/27016271 Genome-Wide Association and Exome Sequencing Study of Language Disorder in an Isolated Population. Developmental language disorder (linguistic errors) 149 isolated population cases, 210 isolated population controls NA Illumina [223580] 9 linguistic error measurement, specific language impairment http://www.ebi.ac.uk/efo/EFO_0007798, http://www.ebi.ac.uk/efo/EFO_1001510 GCST003397 Genome-wide genotyping array -2016-12-01 27016271 Kornilov SA 2016-03-25 Pediatrics www.ncbi.nlm.nih.gov/pubmed/27016271 Genome-Wide Association and Exome Sequencing Study of Language Disorder in an Isolated Population. Developmental language disorder (syntactic complexity) 149 isolated population cases, 210 isolated population controls NA Illumina [223580] 3 syntactic complexity measurement, specific language impairment http://www.ebi.ac.uk/efo/EFO_0007799, http://www.ebi.ac.uk/efo/EFO_1001510 GCST003398 Genome-wide genotyping array -2016-12-13 27005419 Borne Y 2016-03-22 Hum Mol Genet www.ncbi.nlm.nih.gov/pubmed/27005419 Genome wide association study identifies two loci associated with cadmium in erythrocytes among never-smokers. Erythrocyte cadmium concentration 2,704 ever-smoker individuals, 1,728 never-smoker individuals NA Illumina [658884] 5 erythrocyte cadmium measurement http://www.ebi.ac.uk/efo/EFO_0007807 GCST003449 Genome-wide genotyping array -2016-12-13 27005419 Borne Y 2016-03-22 Hum Mol Genet www.ncbi.nlm.nih.gov/pubmed/27005419 Genome wide association study identifies two loci associated with cadmium in erythrocytes among never-smokers. Erythrocyte cadmium concentration in never smokers 1,728 individuals NA Illumina [658884] 7 erythrocyte cadmium measurement http://www.ebi.ac.uk/efo/EFO_0007807 GCST003448 Genome-wide genotyping array diff --git a/tests/gentropy/dataset/test_pairwise_ld.py b/tests/gentropy/dataset/test_pairwise_ld.py new file mode 100644 index 000000000..11ebf75ca --- /dev/null +++ b/tests/gentropy/dataset/test_pairwise_ld.py @@ -0,0 +1,102 @@ +"""Testing pairwise LD dataset.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING + +import numpy as np +import pytest +from gentropy.dataset.pairwise_ld import PairwiseLD +from pyspark.sql import functions as f +from pyspark.sql.window import Window + +if TYPE_CHECKING: + from pyspark.sql import SparkSession + + +class TestPairwiseLD: + """Test suit for pairwise LD dataset and associated methods.""" + + variants = [ + "1_8_A_C", + "1_9_A_C", + "1_10_A_C", + "1_99_A_C", + ] + + @pytest.fixture(scope="class") + def mock_pairwise_ld(self: TestPairwiseLD, spark: SparkSession) -> PairwiseLD: + """Generate a mock pairwise LD dataset. + + Args: + spark (SparkSession): _description_ + + Returns: + PairwiseLD: _description_ + """ + spark = spark.builder.getOrCreate() + + data = [(v1, v2) for v1 in self.variants for v2 in self.variants] + return PairwiseLD( + _df=( + spark.createDataFrame(data, ["variantIdI", "variantIdJ"]) + .withColumn( + "r", + f.row_number() + .over(Window.partitionBy(f.lit("x")).orderBy("variantIdI")) + .cast("double"), + ) + .withColumn( + "r", + f.when(f.col("variantIdI") == f.col("variantIdJ"), 1.0).otherwise( + f.col("r") + ), + ) + .persist() + ), + _schema=PairwiseLD.get_schema(), + ) + + @staticmethod + def test_pairwise_ld__type(mock_pairwise_ld: PairwiseLD) -> None: + """Testing type.""" + assert isinstance(mock_pairwise_ld, PairwiseLD) + + def test_pariwise_ld__get_variants( + self: TestPairwiseLD, mock_pairwise_ld: PairwiseLD + ) -> None: + """Testing function that returns list of variants from the LD table. + + Args: + mock_pairwise_ld (PairwiseLD): _description_ + """ + variant_set_expected = set(self.variants) + variant_set_from_data = set(mock_pairwise_ld.get_variant_list()) + + assert variant_set_from_data == variant_set_expected + + def test_pairwise_ld__r_to_numpy_matrix__type( + self: TestPairwiseLD, mock_pairwise_ld: PairwiseLD + ) -> None: + """Testing the returned numpy array.""" + assert isinstance(mock_pairwise_ld.r_to_numpy_matrix(), np.ndarray) + + def test_pairwise_ld__r_to_numpy_matrix__dimensions( + self: TestPairwiseLD, mock_pairwise_ld: PairwiseLD + ) -> None: + """Testing the returned numpy array.""" + assert mock_pairwise_ld.r_to_numpy_matrix().shape == ( + len(self.variants), + len(self.variants), + ) + + def test_pairwise_ld__overlap_with_locus( + self: TestPairwiseLD, mock_pairwise_ld: PairwiseLD + ) -> None: + """Testing the returned numpy array.""" + variant_subset = self.variants[1:3] + + assert ( + mock_pairwise_ld.overlap_with_locus(variant_subset).df.count() + == len(variant_subset) ** 2 + ) diff --git a/tests/gentropy/dataset/test_study_locus.py b/tests/gentropy/dataset/test_study_locus.py index c12597d54..1401b9dd3 100644 --- a/tests/gentropy/dataset/test_study_locus.py +++ b/tests/gentropy/dataset/test_study_locus.py @@ -10,6 +10,7 @@ from gentropy.dataset.study_index import StudyIndex from gentropy.dataset.study_locus import CredibleInterval, StudyLocus from gentropy.dataset.study_locus_overlap import StudyLocusOverlap +from gentropy.dataset.summary_statistics import SummaryStatistics from pyspark.sql import Column, SparkSession from pyspark.sql.types import ( ArrayType, @@ -214,6 +215,16 @@ def test_filter_by_study_type( assert observed.df.count() == expected_sl_count +def test_annotate_locus_statistics( + mock_study_locus: StudyLocus, mock_summary_statistics: SummaryStatistics +) -> None: + """Test annotate locus statistics returns a StudyLocus.""" + assert isinstance( + mock_study_locus.annotate_locus_statistics(mock_summary_statistics, 100), + StudyLocus, + ) + + def test_filter_credible_set(mock_study_locus: StudyLocus) -> None: """Test credible interval filter.""" assert isinstance( diff --git a/tests/gentropy/dataset/test_study_locus_overlaps.py b/tests/gentropy/dataset/test_study_locus_overlaps.py index ee89eec84..8e732fc5c 100644 --- a/tests/gentropy/dataset/test_study_locus_overlaps.py +++ b/tests/gentropy/dataset/test_study_locus_overlaps.py @@ -30,46 +30,89 @@ def test_study_locus_overlap_from_associations( @pytest.mark.parametrize( - ("observed", "expected"), + ("observed", "intrastudy", "expected"), [ ( # observed - input DataFrame representing gwas and nongwas data to find overlapping signals [ { "studyLocusId": 1, + "studyId": "A", "studyType": "gwas", "chromosome": "1", "tagVariantId": "A", }, { "studyLocusId": 2, + "studyId": "B", "studyType": "eqtl", "chromosome": "1", "tagVariantId": "A", }, { "studyLocusId": 3, + "studyId": "C", "studyType": "gwas", "chromosome": "1", "tagVariantId": "B", }, ], + # intrastudy - bool of whether or not to use inter-study or intra-study logic + False, # expected - output DataFrame with overlapping signals [ {"leftStudyLocusId": 1, "rightStudyLocusId": 2, "chromosome": "1"}, ], ), + ( + # observed - input DataFrame representing intra-study data to find overlapping signals in the same study + [ + { + "studyLocusId": 1, + "studyId": "A", + "studyType": "gwas", + "chromosome": "1", + "region": "X", + "tagVariantId": "A", + }, + { + "studyLocusId": 2, + "studyId": "A", + "studyType": "gwas", + "chromosome": "1", + "region": "Y", + "tagVariantId": "A", + }, + { + "studyLocusId": 3, + "studyId": "B", + "studyType": "gwas", + "chromosome": "1", + "region": "X", + "tagVariantId": "A", + }, + ], + # intrastudy - bool of whether or not to use inter-study or intra-study logic + True, + # expected - output DataFrame with overlapping signals + [{"leftStudyLocusId": 2, "rightStudyLocusId": 1, "chromosome": "1"}], + ), ], ) def test_overlapping_peaks( - spark: SparkSession, observed: list[dict[str, Any]], expected: list[dict[str, Any]] + spark: SparkSession, + observed: list[dict[str, Any]], + intrastudy: bool, + expected: list[dict[str, Any]], ) -> None: """Test overlapping signals between GWAS-GWAS and GWAS-Molecular trait to make sure that mQTLs are always on the right.""" mock_schema = t.StructType( [ t.StructField("studyLocusId", t.LongType()), + t.StructField("studyId", t.StringType()), t.StructField("studyType", t.StringType()), t.StructField("chromosome", t.StringType()), + t.StructField("region", t.StringType()), t.StructField("tagVariantId", t.StringType()), ] ) @@ -81,6 +124,6 @@ def test_overlapping_peaks( ] ) observed_df = spark.createDataFrame(observed, mock_schema) - result_df = StudyLocus._overlapping_peaks(observed_df) + result_df = StudyLocus._overlapping_peaks(observed_df, intrastudy) expected_df = spark.createDataFrame(expected, expected_schema) assert result_df.collect() == expected_df.collect() diff --git a/tests/gentropy/method/test_colocalisation_method.py b/tests/gentropy/method/test_colocalisation_method.py index f90d54b3f..e58b0e562 100644 --- a/tests/gentropy/method/test_colocalisation_method.py +++ b/tests/gentropy/method/test_colocalisation_method.py @@ -2,11 +2,15 @@ from __future__ import annotations +from typing import Any + +import pytest from gentropy.dataset.colocalisation import Colocalisation from gentropy.dataset.study_locus_overlap import StudyLocusOverlap from gentropy.method.colocalisation import Coloc, ECaviar +from pandas.testing import assert_frame_equal from pyspark.sql import SparkSession -from pyspark.sql import functions as f +from pyspark.sql.types import DoubleType, LongType, StringType, StructField, StructType def test_coloc(mock_study_locus_overlap: StudyLocusOverlap) -> None: @@ -14,165 +18,142 @@ def test_coloc(mock_study_locus_overlap: StudyLocusOverlap) -> None: assert isinstance(Coloc.colocalise(mock_study_locus_overlap), Colocalisation) -def test_coloc_colocalise( - spark: SparkSession, - threshold: float = 1e-5, -) -> None: - """Compare COLOC results with R implementation, using provided sample dataset from R package (StudyLocusOverlap).""" - test_overlap_df = spark.read.parquet( - "tests/gentropy/data_samples/coloc_test_data.snappy.parquet", header=True - ) - test_overlap = StudyLocusOverlap(test_overlap_df, StudyLocusOverlap.get_schema()) - test_result = Coloc.colocalise(test_overlap) - - expected = spark.createDataFrame( - [ - { - "h0": 1.3769995397857477e-18, - "h1": 2.937336451601565e-10, - "h2": 8.593226431647826e-12, - "h3": 8.338916748775843e-4, - "h4": 0.9991661080227981, - } - ] - ) - difference = test_result.df.select("h0", "h1", "h2", "h3", "h4").subtract(expected) - for col in difference.columns: - assert difference.filter(f.abs(f.col(col)) > threshold).count() == 0 - - -def test_single_snp_coloc( +@pytest.mark.parametrize( + "observed_data, expected_data", + [ + # associations with a single overlapping SNP + ( + # observed overlap + [ + { + "leftStudyLocusId": 1, + "rightStudyLocusId": 2, + "chromosome": "1", + "tagVariantId": "snp", + "statistics": {"left_logBF": 10.3, "right_logBF": 10.5}, + }, + ], + # expected coloc + [ + { + "h0": 9.254841951638903e-5, + "h1": 2.7517068829182966e-4, + "h2": 3.3609423764447284e-4, + "h3": 9.254841952564387e-13, + "h4": 0.9992961866536217, + }, + ], + ), + # associations with multiple overlapping SNPs + ( + # observed overlap + [ + { + "leftStudyLocusId": 1, + "rightStudyLocusId": 2, + "chromosome": "1", + "tagVariantId": "snp1", + "statistics": {"left_logBF": 10.3, "right_logBF": 10.5}, + }, + { + "leftStudyLocusId": 1, + "rightStudyLocusId": 2, + "chromosome": "1", + "tagVariantId": "snp2", + "statistics": {"left_logBF": 10.3, "right_logBF": 10.5}, + }, + ], + # expected coloc + [ + { + "h0": 4.6230151407950416e-5, + "h1": 2.749086942648107e-4, + "h2": 3.357742374172504e-4, + "h3": 9.983447421747411e-4, + "h4": 0.9983447421747356, + }, + ], + ), + ], +) +def test_coloc_semantic( spark: SparkSession, - threshold: float = 1e-5, + observed_data: list[Any], + expected_data: list[Any], ) -> None: - """Test edge case of coloc where only one causal SNP is present in the StudyLocusOverlap.""" - test_overlap_df = spark.createDataFrame( - [ - { - "leftStudyLocusId": 1, - "rightStudyLocusId": 2, - "chromosome": "1", - "tagVariantId": "snp", - "left_logBF": 10.3, - "right_logBF": 10.5, - } - ] + """Test our COLOC with the implementation in R.""" + observed_overlap = StudyLocusOverlap( + _df=spark.createDataFrame(observed_data, schema=StudyLocusOverlap.get_schema()), + _schema=StudyLocusOverlap.get_schema(), ) - test_overlap = StudyLocusOverlap( - test_overlap_df.select( - "leftStudyLocusId", - "rightStudyLocusId", - "chromosome", - "tagVariantId", - f.struct(f.col("left_logBF"), f.col("right_logBF")).alias("statistics"), - ), - StudyLocusOverlap.get_schema(), + observed_coloc_pdf = ( + Coloc.colocalise(observed_overlap) + .df.select("h0", "h1", "h2", "h3", "h4") + .toPandas() ) - test_result = Coloc.colocalise(test_overlap) - - expected = spark.createDataFrame( - [ - { - "h0": 9.254841951638903e-5, - "h1": 2.7517068829182966e-4, - "h2": 3.3609423764447284e-4, - "h3": 9.254841952564387e-13, - "h4": 0.9992961866536217, - } - ] + expected_coloc_pdf = ( + spark.createDataFrame(expected_data) + .select("h0", "h1", "h2", "h3", "h4") + .toPandas() ) - difference = test_result.df.select("h0", "h1", "h2", "h3", "h4").subtract(expected) - for col in difference.columns: - assert difference.filter(f.abs(f.col(col)) > threshold).count() == 0 - -def test_single_snp_coloc_one_negative( - spark: SparkSession, - threshold: float = 1e-5, -) -> None: - """Test edge case of coloc where only one causal SNP is present (On one side!) in the StudyLocusOverlap.""" - test_overlap_df = spark.createDataFrame( - [ - { - "leftStudyLocusId": 1, - "rightStudyLocusId": 2, - "chromosome": "1", - "tagVariantId": "snp", - "left_logBF": 18.3, - "right_logBF": 0.01, - } - ] + assert_frame_equal( + observed_coloc_pdf, + expected_coloc_pdf, + check_exact=False, + check_dtype=True, ) - test_overlap = StudyLocusOverlap( - test_overlap_df.select( - "leftStudyLocusId", - "rightStudyLocusId", - "chromosome", - "tagVariantId", - f.struct(f.col("left_logBF"), f.col("right_logBF")).alias("statistics"), - ), - StudyLocusOverlap.get_schema(), - ) - test_result = Coloc.colocalise(test_overlap) - test_result.df.show(1, False) - expected = spark.createDataFrame( - [ - { - "h0": 1.0246538505087709e-4, - "h1": 0.9081680002273896, - "h2": 1.0349517929098209e-8, - "h3": 1.0246538506112363e-12, - "h4": 0.09172952403701702, - } - ] - ) - difference = test_result.df.select("h0", "h1", "h2", "h3", "h4").subtract(expected) - for col in difference.columns: - assert difference.filter(f.abs(f.col(col)) > threshold).count() == 0 -def test_single_snp_coloc_both_negative( +def test_coloc_no_logbf( spark: SparkSession, - threshold: float = 1e-5, + minimum_expected_h0: float = 0.99, + maximum_expected_h4: float = 1e-5, ) -> None: - """Test edge case of coloc where only one non-causal SNP overlaps in the StudyLocusOverlap.""" - test_overlap_df = spark.createDataFrame( - [ - { - "leftStudyLocusId": 1, - "rightStudyLocusId": 2, - "chromosome": "1", - "tagVariantId": "snp", - "left_logBF": 0.03, - "right_logBF": 0.01, - } - ] - ) - test_overlap = StudyLocusOverlap( - test_overlap_df.select( - "leftStudyLocusId", - "rightStudyLocusId", - "chromosome", - "tagVariantId", - f.struct(f.col("left_logBF"), f.col("right_logBF")).alias("statistics"), + """Test COLOC output when the input data has irrelevant logBF.""" + observed_overlap = StudyLocusOverlap( + ( + spark.createDataFrame( + [ + { + "leftStudyLocusId": 1, + "rightStudyLocusId": 2, + "chromosome": "1", + "tagVariantId": "snp", + "statistics": { + "left_logBF": None, + "right_logBF": None, + }, # irrelevant for COLOC + } + ], + schema=StructType( + [ + StructField("leftStudyLocusId", LongType(), False), + StructField("rightStudyLocusId", LongType(), False), + StructField("chromosome", StringType(), False), + StructField("tagVariantId", StringType(), False), + StructField( + "statistics", + StructType( + [ + StructField("left_logBF", DoubleType(), True), + StructField("right_logBF", DoubleType(), True), + ] + ), + ), + ] + ), + ) ), StudyLocusOverlap.get_schema(), ) - test_result = Coloc.colocalise(test_overlap) - expected = spark.createDataFrame( - [ - { - "h0": 0.9997855774090624, - "h1": 1.0302335812225042e-4, - "h2": 1.0098335895103664e-4, - "h3": 9.9978557750904e-9, - "h4": 1.0405876008495098e-5, - } - ] - ) - difference = test_result.df.select("h0", "h1", "h2", "h3", "h4").subtract(expected) - for col in difference.columns: - assert difference.filter(f.abs(f.col(col)) > threshold).count() == 0 + observed_coloc_df = Coloc.colocalise(observed_overlap).df + assert ( + observed_coloc_df.select("h0").collect()[0]["h0"] > minimum_expected_h0 + ), "COLOC should return a high h0 (no association) when the input data has irrelevant logBF." + assert ( + observed_coloc_df.select("h4").collect()[0]["h4"] < maximum_expected_h4 + ), "COLOC should return a low h4 (traits are associated) when the input data has irrelevant logBF." def test_ecaviar(mock_study_locus_overlap: StudyLocusOverlap) -> None: diff --git a/tests/gentropy/method/test_locus_to_gene.py b/tests/gentropy/method/test_locus_to_gene.py index d97f4dc4d..898252f9f 100644 --- a/tests/gentropy/method/test_locus_to_gene.py +++ b/tests/gentropy/method/test_locus_to_gene.py @@ -67,9 +67,8 @@ def test_train( ) -> None: """Test the training function.""" trained_model = LocusToGeneTrainer.train( - mock_l2g_feature_matrix.fill_na(), + mock_l2g_feature_matrix.fill_na().select_features(["distanceTssMean"]), model, - features_list=["distanceTssMean"], evaluate=False, ) # Check that `model` is a PipelineModel object and not None @@ -81,32 +80,23 @@ def test_train( class TestColocalisationFactory: """Test the ColocalisationFactory methods.""" - @pytest.mark.parametrize( - "colocalisation_method", - [ - "COLOC", - "eCAVIAR", - ], - ) - def test_get_max_coloc_per_study_locus( + def test_get_max_coloc_per_credible_set( self: TestColocalisationFactory, mock_study_locus: StudyLocus, mock_study_index: StudyIndex, mock_colocalisation: Colocalisation, - colocalisation_method: str, ) -> None: """Test the function that extracts the maximum log likelihood ratio for each pair of overlapping study-locus returns the right data type.""" - coloc_features = ColocalisationFactory._get_max_coloc_per_study_locus( + coloc_features = ColocalisationFactory._get_max_coloc_per_credible_set( + mock_colocalisation, mock_study_locus, mock_study_index, - mock_colocalisation, - colocalisation_method, ) assert isinstance( coloc_features, L2GFeature - ), "Unexpected model type returned from _get_max_coloc_per_study_locus" + ), "Unexpected type returned from _get_max_coloc_per_credible_set" - def test_get_max_coloc_per_study_locus_semantic( + def test_get_max_coloc_per_credible_set_semantic( self: TestColocalisationFactory, spark: SparkSession, ) -> None: @@ -170,8 +160,10 @@ def test_get_max_coloc_per_study_locus_semantic( "colocalisationMethod": "eCAVIAR", "numberColocalisingVariants": 1, "clpp": 0.81, # 0.9*0.9 + "log2h4h3": None, } - ] + ], + schema=Colocalisation.get_schema(), ), _schema=Colocalisation.get_schema(), ) @@ -183,28 +175,13 @@ def test_get_max_coloc_per_study_locus_semantic( L2GFeature.get_schema(), ) # Test - coloc_features = ColocalisationFactory._get_max_coloc_per_study_locus( + coloc_features = ColocalisationFactory._get_max_coloc_per_credible_set( + coloc, credset, studies, - coloc, - "eCAVIAR", ) assert coloc_features.df.collect() == expected_coloc_features_df.collect() - def test_get_coloc_features( - self: TestColocalisationFactory, - mock_study_locus: StudyLocus, - mock_study_index: StudyIndex, - mock_colocalisation: Colocalisation, - ) -> None: - """Test the function that calls all the methods to produce colocalisation features.""" - coloc_features = ColocalisationFactory._get_coloc_features( - mock_study_locus, mock_study_index, mock_colocalisation - ) - assert isinstance( - coloc_features, L2GFeature - ), "Unexpected model type returned from _get_coloc_features" - class TestStudyLocusFactory: """Test the StudyLocusFactory methods.""" diff --git a/tests/gentropy/method/test_qc_of_sumstats.py b/tests/gentropy/method/test_qc_of_sumstats.py new file mode 100644 index 000000000..8480fce8d --- /dev/null +++ b/tests/gentropy/method/test_qc_of_sumstats.py @@ -0,0 +1,63 @@ +"""Test of the qc of summary statistics.""" + +from __future__ import annotations + +import numpy as np +import pandas as pd +import pyspark.sql.functions as f +from gentropy.dataset.summary_statistics import SummaryStatistics +from gentropy.method.sumstat_quality_controls import SummaryStatisticsQC +from pyspark.sql.functions import rand, when + + +def test_qc_functions( + sample_summary_statistics: SummaryStatistics, +) -> None: + """Test all sumstat qc functions.""" + gwas = sample_summary_statistics.sanity_filter() + QC = SummaryStatisticsQC.get_quality_control_metrics( + gwas=gwas, limit=100000, min_count=100, n_total=100000 + ) + QC = QC.toPandas() + + assert QC["n_variants"].iloc[0] == 1663 + assert QC["n_variants_sig"].iloc[0] == 29 + assert np.round(QC["gc_lambda"].iloc[0], 4) == 1.916 + assert np.round(QC["mean_beta"].iloc[0], 4) == 0.0013 + assert np.round(QC["mean_diff_pz"].iloc[0], 6) == 0 + assert np.round(QC["se_diff_pz"].iloc[0], 6) == 0 + assert pd.isna(QC["se_N"].iloc[0]) + + +def test_neff_check_eaf( + sample_summary_statistics: SummaryStatistics, +) -> None: + """Test N_eff check using mock EAFs.""" + gwas = sample_summary_statistics.sanity_filter() + gwas_df = gwas._df + gwas_df = gwas_df.withColumn("effectAlleleFrequencyFromSource", f.lit(0.5)) + gwas._df = gwas_df + + QC = SummaryStatisticsQC.get_quality_control_metrics( + gwas=gwas, limit=100000, min_count=100, n_total=100000 + ) + QC = QC.toPandas() + assert np.round(QC["se_N"].iloc[0], 4) == 0.5586 + + +def test_several_studyid( + sample_summary_statistics: SummaryStatistics, +) -> None: + """Test stability when several studyIds are present.""" + gwas = sample_summary_statistics.sanity_filter() + gwas_df = gwas._df + gwas_df = gwas_df.withColumn( + "studyId", when(rand() < 0.5, "new_value").otherwise(gwas_df["studyId"]) + ) + gwas._df = gwas_df + + QC = SummaryStatisticsQC.get_quality_control_metrics( + gwas=gwas, limit=100000, min_count=100, n_total=100000 + ) + QC = QC.toPandas() + assert QC.shape == (2, 8) diff --git a/tests/gentropy/method/test_sumstat_imputation.py b/tests/gentropy/method/test_sumstat_imputation.py new file mode 100644 index 000000000..aea59f76b --- /dev/null +++ b/tests/gentropy/method/test_sumstat_imputation.py @@ -0,0 +1,31 @@ +"""Test of sumstat imputation functions.""" + +from __future__ import annotations + +import numpy as np +from gentropy.method.sumstat_imputation import SummaryStatisticsImputation + + +class TestSSImp: + """Test of RAISS sumstat imputation main function.""" + + def test_sumstat_imputation( + self: TestSSImp, sample_data_for_carma: list[np.ndarray] + ) -> None: + """Test of RAISS.""" + ld = sample_data_for_carma[0] + z = sample_data_for_carma[1] + + unknowns = [5] + known = [index for index in list(range(21)) if index not in unknowns] + sig_t = ld[known, :][:, known] + sig_i_t = ld[unknowns, :][:, known] + zt = z[known] + + _l = SummaryStatisticsImputation.raiss_model( + zt, sig_t, sig_i_t, lamb=0.01, rtol=0.01 + ) + assert ( + np.round(_l["imputation_r2"][0], decimals=4) == 0.9304 + and np.round(_l["mu"][0], decimals=4) == 9.7215 + ) diff --git a/tests/gentropy/method/test_susie_inf.py b/tests/gentropy/method/test_susie_inf.py index d8e855a5b..45d79bcae 100644 --- a/tests/gentropy/method/test_susie_inf.py +++ b/tests/gentropy/method/test_susie_inf.py @@ -3,7 +3,12 @@ from __future__ import annotations import numpy as np +import pyspark.sql.functions as f +from gentropy.common.session import Session +from gentropy.dataset.study_locus import StudyLocus +from gentropy.dataset.summary_statistics import SummaryStatistics from gentropy.method.susie_inf import SUSIE_inf +from gentropy.susie_finemapper import SusieFineMapperStep class TestSUSIE_inf: @@ -16,7 +21,7 @@ def test_SUSIE_inf_lbf_moments( ld = sample_data_for_susie_inf[0] z = sample_data_for_susie_inf[1] lbf_moments = sample_data_for_susie_inf[2] - susie_output = SUSIE_inf.susie_inf(z=z, LD=ld, method="moments") + susie_output = SUSIE_inf.susie_inf(z=z, LD=ld, est_tausq=True, method="moments") lbf_calc = susie_output["lbf_variable"][:, 0] assert np.allclose( lbf_calc, lbf_moments @@ -29,7 +34,7 @@ def test_SUSIE_inf_lbf_mle( ld = sample_data_for_susie_inf[0] z = sample_data_for_susie_inf[1] lbf_mle = sample_data_for_susie_inf[3] - susie_output = SUSIE_inf.susie_inf(z=z, LD=ld, method="MLE") + susie_output = SUSIE_inf.susie_inf(z=z, LD=ld, est_tausq=True, method="MLE") lbf_calc = susie_output["lbf_variable"][:, 0] assert np.allclose( lbf_calc, lbf_mle, atol=1e-1 @@ -41,6 +46,45 @@ def test_SUSIE_inf_cred( """Test of SuSiE-inf credible set generator.""" ld = sample_data_for_susie_inf[0] z = sample_data_for_susie_inf[1] - susie_output = SUSIE_inf.susie_inf(z=z, LD=ld) + susie_output = SUSIE_inf.susie_inf( + z=z, + LD=ld, + est_tausq=True, + ) cred = SUSIE_inf.cred_inf(susie_output["PIP"], LD=ld) assert cred[0] == [5] + + def test_SUSIE_inf_convert_to_study_locus( + self: TestSUSIE_inf, + sample_data_for_susie_inf: list[np.ndarray], + sample_summary_statistics: SummaryStatistics, + session: Session, + ) -> None: + """Test of SuSiE-inf credible set generator.""" + ld = sample_data_for_susie_inf[0] + z = sample_data_for_susie_inf[1] + susie_output = SUSIE_inf.susie_inf( + z=z, + LD=ld, + est_tausq=False, + ) + gwas_df = sample_summary_statistics._df.withColumn( + "z", f.col("beta") / f.col("standardError") + ).filter(f.col("z").isNotNull()) + gwas_df = gwas_df.limit(21) + + L1 = SusieFineMapperStep.susie_inf_to_studylocus( + susie_output=susie_output, + session=session, + studyId="sample_id", + region="sample_region", + variant_index=gwas_df, + cs_lbf_thr=2, + ld_matrix=ld, + primary_signal_pval_threshold=1, + secondary_signal_pval_threshold=1, + purity_mean_r2_threshold=0, + purity_min_r2_threshold=0, + sum_pips=0.99, + ) + assert isinstance(L1, StudyLocus), "L1 is not an instance of StudyLocus" diff --git a/tests/gentropy/method/test_window_based_clumping.py b/tests/gentropy/method/test_window_based_clumping.py index 03546df9d..cd583bac2 100644 --- a/tests/gentropy/method/test_window_based_clumping.py +++ b/tests/gentropy/method/test_window_based_clumping.py @@ -8,12 +8,12 @@ from gentropy.method.window_based_clumping import WindowBasedClumping from pyspark.ml import functions as fml from pyspark.ml.linalg import VectorUDT +from pyspark.sql import SparkSession from pyspark.sql import functions as f from pyspark.sql.window import Window if TYPE_CHECKING: from gentropy.dataset.summary_statistics import SummaryStatistics - from pyspark.sql import SparkSession def test_window_based_clump__return_type( @@ -21,7 +21,14 @@ def test_window_based_clump__return_type( ) -> None: """Test window-based clumping.""" assert isinstance( - WindowBasedClumping.clump_with_locus(mock_summary_statistics, 250_000), + WindowBasedClumping.clump(mock_summary_statistics, distance=250_000), + StudyLocus, + ) + assert isinstance( + WindowBasedClumping.clump( + mock_summary_statistics, + distance=250_000, + ), StudyLocus, ) @@ -44,7 +51,10 @@ def test_window_based_clump_with_locus__correctness( ) -> None: """Test window-based clumping.""" clumped = sample_summary_statistics.window_based_clumping( - distance=250_000, locus_collect_distance=250_000 + distance=250_000, + ) + clumped = clumped.annotate_locus_statistics( + sample_summary_statistics, collect_locus_distance=250_000 ) # Asserting the presence of locus key: @@ -57,7 +67,7 @@ def test_window_based_clump_with_locus__correctness( assert (clumped.df.filter(f.col("variantId") == "18_12843138_T_C").count()) == 1 # Assert the number of variants in the locus: - assert (clumped.df.select(f.explode_outer("locus").alias("loci")).count()) == 132 + assert (clumped.df.select(f.explode_outer("locus").alias("loci")).count()) == 218 def test_prune_peak(spark: SparkSession) -> None: diff --git a/utils/update_GWAS_Catalog_data.sh b/utils/update_GWAS_Catalog_data.sh index 1e380d30c..00ee44d8f 100755 --- a/utils/update_GWAS_Catalog_data.sh +++ b/utils/update_GWAS_Catalog_data.sh @@ -15,7 +15,7 @@ get_release_url(){ # Function to get the Ensembl and EFO version which used to ground GWAS data: get_release_info(){ - curl -s https://www.ebi.ac.uk/gwas/api/search/stats | jq -r '"\(.ensemblbuild) \(.efoversion)"' + curl -s "${1}" | jq -r '"\(.ensemblbuild) \(.efoversion)"' } logging(){ @@ -41,6 +41,18 @@ upload_file_to_gcp(){ fi } +fetch_from_ftp(){ + URL=${1} + TARGET=${2} + wget -q ${URL} -O ${TARGET} + if [ $? -ne 0 ]; then + logging "Failed to fetch ${URL}" + return + else + logging "File ${TARGET} saved." + fi +} + # Resources: export BASE_URL=ftp://ftp.ebi.ac.uk/pub/databases/gwas export RELEASE_INFO_URL=https://www.ebi.ac.uk/gwas/api/search/stats @@ -71,7 +83,7 @@ read YEAR MONTH DAY < <(get_release_url) logging "Most recent GWAS Catalog release: ${YEAR}/${MONTH}/${DAY}" # Capturing release metadata: -read ENSEMBL EFO < <(get_release_info) +read ENSEMBL EFO < <(get_release_info ${RELEASE_INFO_URL}) logging "Genes were mapped to v${ENSEMBL} Ensembl release." logging "Diseases were mapped to ${EFO} EFO release." @@ -80,26 +92,19 @@ RELEASE_URL=${BASE_URL}/releases/${YEAR}/${MONTH}/${DAY} logging "Datafiles are fetching from ${RELEASE_URL}" # Fetching files while assigning properly dated and annotated names: -wget -q ${RELEASE_URL}/gwas-catalog-associations_ontology-annotated.tsv -O ${ASSOCIATION_FILE} -logging "File ${ASSOCIATION_FILE} saved." +fetch_from_ftp ${RELEASE_URL}/gwas-catalog-associations_ontology-annotated.tsv ${ASSOCIATION_FILE} -wget -q ${RELEASE_URL}/gwas-catalog-download-studies-v1.0.3.txt -O ${PUBLISHED_STUDIES_FILE} -logging "File ${PUBLISHED_STUDIES_FILE} saved." +fetch_from_ftp ${RELEASE_URL}/gwas-catalog-download-studies-v1.0.3.1.txt ${PUBLISHED_STUDIES_FILE} -wget -q ${RELEASE_URL}/gwas-catalog-unpublished-studies-v1.0.3.tsv -O ${UNPUBLISHED_STUDIES_FILE} -logging "File ${UNPUBLISHED_STUDIES_FILE} saved." +fetch_from_ftp ${RELEASE_URL}/gwas-catalog-unpublished-studies-v1.0.3.1.tsv ${UNPUBLISHED_STUDIES_FILE} -wget -q ${RELEASE_URL}/gwas-catalog-download-ancestries-v1.0.3.txt -O ${PUBLISHED_ANCESTRIES_FILE} -logging "File ${PUBLISHED_ANCESTRIES_FILE} saved." +fetch_from_ftp ${RELEASE_URL}/gwas-catalog-download-ancestries-v1.0.3.1.txt ${PUBLISHED_ANCESTRIES_FILE} -wget -q ${RELEASE_URL}/gwas-catalog-unpublished-ancestries-v1.0.3.tsv -O ${UNPUBLISHED_ANCESTRIES_FILE} -logging "File ${UNPUBLISHED_ANCESTRIES_FILE} saved." +fetch_from_ftp ${RELEASE_URL}/gwas-catalog-unpublished-ancestries-v1.0.3.1.tsv ${UNPUBLISHED_ANCESTRIES_FILE} -wget -q ${BASE_URL}/summary_statistics/harmonised_list.txt -O ${HARMONISED_LIST_FILE} -logging "File ${HARMONISED_LIST_FILE} saved." +fetch_from_ftp ${BASE_URL}/summary_statistics/harmonised_list.txt ${HARMONISED_LIST_FILE} -wget -q ${GWAS_CATALOG_STUDY_CURATION_URL} -O ${GWAS_CATALOG_STUDY_CURATION_FILE} -logging "In-house GWAS Catalog study curation file fetched from GitHub." +fetch_from_ftp ${GWAS_CATALOG_STUDY_CURATION_URL} ${GWAS_CATALOG_STUDY_CURATION_FILE} logging "Copying files to GCP..."